Module of parallel PFASST routines for optimal control problems.
Step 1. Getting the initial condition on the finest level at each processor If we are doing multiple levels, then we need to coarsen to fine level Step 2: Proceed fine to coarse levels coarsening the fine solution and computing tau correction If RK_pred is true, just do some RK_steps
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(pf_pfasst_t), | intent(inout), | target | :: | pf | PFASST main data structure |
|
real(kind=pfdp), | intent(in) | :: | t0 | Initial time of this processor |
||
real(kind=pfdp), | intent(in) | :: | dt | time step |
||
integer, | intent(in), | optional | :: | flags(:) | User defined flags |
Subroutine to test residuals to determine if the current processor has converged.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(pf_pfasst_t), | intent(inout) | :: | pf | |||
logical, | intent(out) | :: | residual_converged | Return true if residual is below tolerances |
Test residuals to determine if the current processor has converged, adapted to optimal control. Can probably be removed, when pf_pfasst_block_oc is changed to use pf_check_convergence of pf_check_convergence_old.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(pf_pfasst_t), | intent(inout) | :: | pf | |||
integer, | intent(in) | :: | send_tag | |||
integer, | intent(in), | optional | :: | flags |
Routine to do the pfasst iterations for optimal control problems on one block of processors until completion. Each processor will do either a fixed number of iterations, or iterate until a tolerance is met On calling, it is assumed that the levels are already loaded with the initial guesses
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(pf_pfasst_t), | intent(inout), | target | :: | pf | ||
real(kind=pfdp), | intent(in) | :: | dt | |||
integer, | intent(in) | :: | nsteps | |||
logical, | intent(in) | :: | predict | |||
integer, | intent(in), | optional | :: | flags | ||
integer, | intent(in), | optional | :: | step |
Post the nonblocking receives on the all the levels that will be recieving later (for single level this will be skipped) move from fine to coarse doing sweeps
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(pf_pfasst_t), | intent(inout), | target | :: | pf | ||
integer, | intent(in) | :: | iteration | |||
real(kind=pfdp), | intent(in) | :: | t0 | |||
real(kind=pfdp), | intent(in) | :: | dt | |||
integer, | intent(in) | :: | level_index_c | Coarsest level of V-cycle |
||
integer, | intent(in) | :: | level_index_f | Finest level of V-cycle |
||
integer, | intent(in), | optional | :: | flags |