Module to do imex SDC sweeps in the optimal control setting
This is the interface for the routine to compute the RHS function values
Evaluae f_piece(y), where piece is one or two
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(pf_imexQ_oc_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 |
||
integer, | intent(in) | :: | flags | |||
integer, | intent(in), | optional | :: | idx | ||
integer, | intent(in), | optional | :: | step |
This is the interface for the routine to compute the RHS function values
Solve the equation y - dtq*f_2(y) =rhs
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(pf_imexQ_oc_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 |
||
integer, | intent(in) | :: | flags |
IMEX SDC sweeper type for optimal control, extends abstract sweeper
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer, | public | :: | npieces | ||||
logical, | public | :: | use_LUq | ||||
real(kind=pfdp), | public, | allocatable | :: | QtilE(:,:) | Approximate explcit quadrature rule |
||
real(kind=pfdp), | public, | allocatable | :: | QtilI(:,:) | Approximate implcit 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. | Is there an explicit piece |
|
logical, | public | :: | implicit | = | .true. | Is 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_oc_sweep | Set the generic functions |
procedure, public :: initialize => imexQ_oc_initialize | |
procedure, public :: evaluate => imexQ_oc_evaluate | |
procedure, public :: integrate => imexQ_oc_integrate | |
procedure, public :: residual => imexQ_oc_residual | |
procedure, public :: evaluate_all => imexQ_oc_evaluate_all | |
procedure, public :: spreadq0 => imexQ_oc_spreadq0 | |
procedure, public :: destroy => imexQ_oc_destroy | |
procedure, public :: imexQ_oc_destroy |
Assign level pointer
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(pf_imexQ_oc_t), | intent(inout) | :: | this | |||
type(pf_pfasst_t), | intent(inout), | target | :: | pf | PFASST structure |
|
integer, | intent(in) | :: | level_index | which level this is |
||
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 |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(pf_imexQ_oc_t), | intent(inout) | :: | this | |||
class(pf_level_t), | intent(inout) | :: | lev | |||
real(kind=pfdp), | intent(in) | :: | t | |||
integer, | intent(in) | :: | m | |||
integer, | intent(in), | optional | :: | flags | ||
integer, | intent(in), | optional | :: | step |
Evaluate all function values
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(pf_imexQ_oc_t), | intent(inout) | :: | this | |||
class(pf_level_t), | intent(inout) | :: | lev | |||
real(kind=pfdp), | intent(in) | :: | t(:) | |||
integer, | intent(in), | optional | :: | flags | ||
integer, | intent(in), | optional | :: | step |
Make space for rhs
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(pf_imexQ_oc_t), | intent(inout) | :: | this | |||
class(pf_level_t), | intent(inout) | :: | lev |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(pf_imexQ_oc_t), | intent(inout) | :: | this | |||
class(pf_level_t), | intent(in) | :: | lev | |||
class(pf_encap_t), | intent(in) | :: | qSDC(:) | |||
class(pf_encap_t), | intent(in) | :: | fSDC(:,:) | |||
real(kind=pfdp), | intent(in) | :: | dt | |||
class(pf_encap_t), | intent(inout) | :: | fintSDC(:) | |||
integer, | intent(in), | optional | :: | flags |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(pf_imexQ_oc_t), | intent(inout) | :: | this | |||
class(pf_level_t), | intent(inout) | :: | lev | |||
real(kind=pfdp), | intent(in) | :: | dt | |||
integer, | intent(in), | optional | :: | flags |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(pf_imexQ_oc_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 |
deallocate
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(pf_imexQ_oc_t), | intent(inout) | :: | this | |||
class(pf_level_t), | intent(inout) | :: | lev |