IMEX Sweeper Module Module of the the derived sweeper class for doing IMEX sweeps for an equation of the form The piece is treated explicitly and implicitl Afer this sweeper is initialized (usually in main), the logical flags can be changed if desired
explicit: Make false if there is no explicit piece implicit: Make false if there is no implicit piece
The user needs to supply the feval and fcomp routines for a given example
This is the interface for the routine to compute the RHS function values Evaluate f_piece(y), where piece is one or two Evaluate f_piece(y), where piece is one or two
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(pf_imexQ_t), | intent(inout) | :: | this | |||
| class(pf_encap_t), | intent(in) | :: | y | Argument for evaluation |
||
| real(kind=pfdp), | intent(in) | :: | t | Time at evaluation |
||
| integer, | intent(in) | :: | level_index | Level index |
||
| class(pf_encap_t), | intent(inout) | :: | f | RHS function value |
||
| integer, | intent(in) | :: | piece | Which piece to evaluate |
Solve the equation y - dtq*f_2(y) =rhs
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(pf_imexQ_t), | intent(inout) | :: | this | |||
| class(pf_encap_t), | intent(inout) | :: | y | Solution of implicit solve |
||
| real(kind=pfdp), | intent(in) | :: | t | Time of solve |
||
| real(kind=pfdp), | intent(in) | :: | dtq | dt*quadrature weight |
||
| class(pf_encap_t), | intent(in) | :: | rhs | RHS for solve |
||
| integer, | intent(in) | :: | level_index | Level index |
||
| class(pf_encap_t), | intent(inout) | :: | f | f_2 of solution y |
||
| integer, | intent(in) | :: | piece | Which piece to evaluate |
IMEX SDC sweeper type, extends abstract sweeper
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| integer, | public | :: | npieces | ||||
| logical, | public | :: | use_LUq | ||||
| real(kind=pfdp), | public, | allocatable | :: | QtilE(:,:) | Approximate explicit quadrature rule |
||
| real(kind=pfdp), | public, | allocatable | :: | QtilI(:,:) | Approximate implicit quadrature rule |
||
| real(kind=pfdp), | public, | allocatable | :: | dtsdc(:) | SDC step sizes |
||
| real(kind=pfdp), | public, | allocatable | :: | QdiffE(:,:) | qmat-QtilE |
||
| real(kind=pfdp), | public, | allocatable | :: | QdiffI(:,:) | qmat-QtilI |
||
| logical, | public | :: | explicit | = | .true. | True if there is an explicit piece |
|
| logical, | public | :: | implicit | = | .true. | True if there an implicit piece |
|
| class(pf_encap_t), | public, | allocatable | :: | rhs | holds rhs for implicit solve |
| procedure(pf_f_eval_p), public :: f_eval | RHS function evaluations |
| procedure(pf_f_comp_p), public :: f_comp | Implicit solver |
| procedure, public :: sweep => imexQ_sweep | Set the generic functions |
| procedure, public :: initialize => imexQ_initialize | |
| procedure, public :: evaluate => imexQ_evaluate | |
| procedure, public :: integrate => imexQ_integrate | |
| procedure, public :: residual => imexQ_residual | |
| procedure, public :: spreadq0 => imexQ_spreadq0 | |
| procedure, public :: evaluate_all => imexQ_evaluate_all | |
| procedure, public :: destroy => imexQ_destroy | |
| procedure, public :: imexQ_destroy |
Perform nsweep SDC sweeps on level level_index and set qend appropriately. Assign level pointer
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(pf_imexQ_t), | intent(inout) | :: | this | Inputs |
||
| type(pf_pfasst_t), | intent(inout), | target | :: | pf | PFASST structure |
|
| integer, | intent(in) | :: | level_index | which level to sweep on |
||
| real(kind=pfdp), | intent(in) | :: | t0 | Time at beginning of time step |
||
| real(kind=pfdp), | intent(in) | :: | dt | time step size |
||
| integer, | intent(in) | :: | nsweeps | number of sweeps to do |
||
| integer, | intent(in), | optional | :: | flags |
Subroutine to initialize matrices and space for sweeper Array of substep sizes
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(pf_imexQ_t), | intent(inout) | :: | this | |||
| class(pf_level_t), | intent(inout) | :: | lev | Current level |
Subroutine to deallocate sweeper
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(pf_imexQ_t), | intent(inout) | :: | this | |||
| class(pf_level_t), | intent(inout) | :: | lev | Current level |
Subroutine to compute Picard integral of function values
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(pf_imexQ_t), | intent(inout) | :: | this | |||
| class(pf_level_t), | intent(in) | :: | lev | Current level |
||
| class(pf_encap_t), | intent(in) | :: | qSDC(:) | Solution values |
||
| class(pf_encap_t), | intent(in) | :: | fSDC(:,:) | RHS Function values |
||
| real(kind=pfdp), | intent(in) | :: | dt | Time step |
||
| class(pf_encap_t), | intent(inout) | :: | fintSDC(:) | Integral from t_n to t_m |
||
| integer, | intent(in), | optional | :: | flags |
Subroutine to compute Residual
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(pf_imexQ_t), | intent(inout) | :: | this | |||
| class(pf_level_t), | intent(inout) | :: | lev | Current level |
||
| real(kind=pfdp), | intent(in) | :: | dt | Time step |
||
| integer, | intent(in), | optional | :: | flags |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(pf_imexQ_t), | intent(inout) | :: | this | |||
| class(pf_level_t), | intent(inout) | :: | lev | |||
| real(kind=pfdp), | intent(in) | :: | t0 | |||
| integer, | intent(in), | optional | :: | flags | ||
| integer, | intent(in), | optional | :: | step |
Subroutine to evaluate function value at node m
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(pf_imexQ_t), | intent(inout) | :: | this | |||
| class(pf_level_t), | intent(inout) | :: | lev | Current level |
||
| real(kind=pfdp), | intent(in) | :: | t | Time at which to evaluate |
||
| integer, | intent(in) | :: | m | Node at which to evaluate |
||
| integer, | intent(in), | optional | :: | flags | ||
| integer, | intent(in), | optional | :: | step |
Subroutine to evaluate the function values at all nodes
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(pf_imexQ_t), | intent(inout) | :: | this | |||
| class(pf_level_t), | intent(inout) | :: | lev | Current level |
||
| real(kind=pfdp), | intent(in) | :: | t(:) | Array of times at each node |
||
| integer, | intent(in), | optional | :: | flags | ||
| integer, | intent(in), | optional | :: | step |