sparse_generalized_alpha_integrator Derived Type

type, public, extends(structural_integrator) :: sparse_generalized_alpha_integrator

Defines a generalized alpha integrator for sparse matrix systems.


Contents


Type-Bound Procedures

procedure, public :: initialize => initialize_sparse_integrator

Copies CSR matrices and allocates reusable workspace.

  • private subroutine initialize_sparse_integrator(this, mass, damping, stiffness, rho_infinity)

    Copies CSR matrices and prepares sparse or small-system dense workspace.

    Arguments

    Type IntentOptional Attributes Name
    class(sparse_generalized_alpha_integrator), intent(inout) :: this

    Integrator to initialize or reinitialize.

    type(csr_matrix), intent(in) :: mass

    The N-by-N mass matrix.

    type(csr_matrix), intent(in) :: damping

    The N-by-N damping matrix.

    type(csr_matrix), intent(in) :: stiffness

    The N-by-N stiffness matrix.

    real(kind=real64), intent(in), optional :: rho_infinity

    High-frequency spectral radius in [0, 1], default 1.

procedure, public :: solve => integrator_solve

Advances a state through successive columns of a force history.

  • private subroutine integrator_solve(this, forces, dt, displacement, velocity, acceleration)

    Advances through a force history with one column per time point. The number of steps is size(forces, 2) - 1; only the final state is returned.

    Arguments

    Type IntentOptional Attributes Name
    class(structural_integrator), intent(inout) :: this

    Initialized dense or sparse integrator.

    real(kind=real64), intent(in), dimension(:,:) :: forces

    N-by-(number of steps + 1) array of external forces.

    real(kind=real64), intent(in) :: dt

    Positive constant time step.

    real(kind=real64), intent(inout), dimension(:) :: displacement

    Initial state on input, final state on output.

    real(kind=real64), intent(inout), dimension(:) :: velocity

    Initial state on input, final state on output.

    real(kind=real64), intent(inout), dimension(:) :: acceleration

    Initial state on input, final state on output.

procedure, public :: step => sparse_integrator_step

Advances one step using a cached effective CSR system.

  • private subroutine sparse_integrator_step(this, force_current, force_next, dt, displacement, velocity, acceleration)

    Advances by the generalized-alpha equations documented by dense_integrator_step using CSR matrix products. For N > 32, restarted GMRES uses a diagonal MSR preconditioner and checks the true residual; smaller systems use cached dense LU.

    Arguments

    Type IntentOptional Attributes Name
    class(sparse_generalized_alpha_integrator), intent(inout) :: this

    The sparse_generalized_alpha_integrator object.

    real(kind=real64), intent(in), dimension(:) :: force_current

    The current N-element external forcing vector.

    real(kind=real64), intent(in), dimension(:) :: force_next

    The N-element external forcing vector at t + dt.

    real(kind=real64), intent(in) :: dt

    The time step.

    real(kind=real64), intent(inout), dimension(:) :: displacement

    The N-element displacement state vector. On output, this vector is updated to the state at t + dt.

    real(kind=real64), intent(inout), dimension(:) :: velocity

    The N-element velocity state vector. On output, this vector is updated to the state at t + dt.

    real(kind=real64), intent(inout), dimension(:) :: acceleration

    The N-element acceleration state vector. On output, this vector is updated to the state at t + dt.