The main PFASST data type which includes pretty much everything
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer, | public | :: | nlevels | = | -1 | Mandatory parameters (must be set on command line or input file) number of pfasst levels |
|
integer, | public | :: | niters | = | 5 | Optional parameters number of PFASST iterations to do |
|
integer, | public | :: | qtype | = | SDC_GAUSS_LOBATTO | type of nodes |
|
integer, | public | :: | nsweeps(PF_MAXLEVS) | = | 1 | number of sweeps at each levels |
|
integer, | public | :: | nsweeps_pred(PF_MAXLEVS) | = | 1 | number of sweeps during predictor |
|
integer, | public | :: | nnodes(PF_MAXLEVS) | = | 3 | number of nodes |
|
real(kind=pfdp), | public | :: | abs_res_tol | = | 0.d0 | absolute convergence tolerance |
|
real(kind=pfdp), | public | :: | rel_res_tol | = | 0.d0 | relative convergence tolerance |
|
logical, | public | :: | PFASST_pred | = | .true. | true if the PFASST type predictor is used |
|
logical, | public | :: | pipeline_pred | = | .false. | true if coarse sweeps after burn in are pipelined (if nsweeps_pred>1 on coarse level) |
|
integer, | public | :: | nsweeps_burn | = | 1 | number of sdc sweeps to perform during coarse level burn in |
|
integer, | public | :: | q0_style | = | 0 | q0 can take 3 values 0: Only the q0 at t=0 is valid (default) 1: The q0 at each processor is valid 2: q0 and all nodes at each processor is valid |
|
logical, | public | :: | Vcycle | = | .true. | decides if Vcycles are done |
|
logical, | public | :: | Finterp | = | .false. | True if transfer functions operate on rhs |
|
logical, | public | :: | use_LUq | = | .true. | True if LU type implicit matrix is used |
|
integer, | public | :: | taui0 | = | -999999 | iteration cutoff for tau inclusion |
|
logical, | public | :: | use_rk_stepper | = | .false. | RK and Parareal options decides if RK steps are used instead of the sweeps |
|
integer, | public | :: | nsteps_rk(PF_MAXLEVS) | = | 3 | number of runge-kutta nodes |
|
logical, | public | :: | RK_pred | = | .false. | true if the coarse level is initialized with Runge-Kutta instead of PFASST |
|
logical, | public | :: | debug | = | .false. | If true, debug diagnostics are printed |
|
logical, | public | :: | save_results | = | .false. | If true, results are output |
|
logical, | public | :: | echo_timings | = | .false. | If true, timings are output |
|
integer, | public | :: | rank | = | -1 | rank of current processor |
|
type(pf_state_t), | public, | allocatable | :: | state | pf objects Describes where in the algorithm proc is |
||
type(pf_level_t), | public, | allocatable | :: | levels(:) | Holds the levels |
||
type(pf_comm_t), | public, | pointer | :: | comm | Points to communicator |
||
type(pf_results_t), | public | :: | results | ||||
type(pf_hook_t), | public, | allocatable | :: | hooks(:,:,:) | hooks variables Holds the hooks |
||
integer, | public, | allocatable | :: | nhooks(:,:) | Holds the number hooks |
||
integer, | public | :: | timers(100) | = | 0 | timing variables |
|
integer, | public | :: | runtimes(100) | = | 0 | ||
character(len=512), | public | :: | outdir | output directory |
type :: pf_pfasst_t
!> Mandatory parameters (must be set on command line or input file)
integer :: nlevels = -1 !! number of pfasst levels
!> Optional parameters
integer :: niters = 5 !! number of PFASST iterations to do
integer :: qtype = SDC_GAUSS_LOBATTO !! type of nodes
! -- level dependent parameters
integer :: nsweeps(PF_MAXLEVS) = 1 !! number of sweeps at each levels
integer :: nsweeps_pred(PF_MAXLEVS) =1 !! number of sweeps during predictor
integer :: nnodes(PF_MAXLEVS)=3 !! number of nodes
! -- tolerances
real(pfdp) :: abs_res_tol = 0.d0 !! absolute convergence tolerance
real(pfdp) :: rel_res_tol = 0.d0 !! relative convergence tolerance
! -- predictor options (should be set before pfasst_run is called)
logical :: PFASST_pred = .true. !! true if the PFASST type predictor is used
logical :: pipeline_pred = .false. !! true if coarse sweeps after burn in are pipelined (if nsweeps_pred>1 on coarse level)
integer :: nsweeps_burn = 1 !! number of sdc sweeps to perform during coarse level burn in
integer :: q0_style = 0 !! q0 can take 3 values
!! 0: Only the q0 at t=0 is valid (default)
!! 1: The q0 at each processor is valid
!! 2: q0 and all nodes at each processor is valid
! -- run options (should be set before pfasst_run is called)
logical :: Vcycle = .true. !! decides if Vcycles are done
logical :: Finterp = .false. !! True if transfer functions operate on rhs
logical :: use_LUq = .true. !! True if LU type implicit matrix is used
integer :: taui0 = -999999 !! iteration cutoff for tau inclusion
!> RK and Parareal options
logical :: use_rk_stepper = .false. !! decides if RK steps are used instead of the sweeps
integer :: nsteps_rk(PF_MAXLEVS)=3 !! number of runge-kutta nodes
logical :: RK_pred = .false. !! true if the coarse level is initialized with Runge-Kutta instead of PFASST
! -- misc
logical :: debug = .false. !! If true, debug diagnostics are printed
logical :: save_results = .false. !! If true, results are output
logical :: echo_timings = .false. !! If true, timings are output
integer :: rank = -1 !! rank of current processor
!> pf objects
type(pf_state_t), allocatable :: state !! Describes where in the algorithm proc is
type(pf_level_t), allocatable :: levels(:) !! Holds the levels
type(pf_comm_t), pointer :: comm !! Points to communicator
type(pf_results_t) :: results
!> hooks variables
type(pf_hook_t), allocatable :: hooks(:,:,:) !! Holds the hooks
integer, allocatable :: nhooks(:,:) !! Holds the number hooks
!> timing variables
integer :: timers(100) = 0
integer :: runtimes(100) = 0
!> output directory
character(512) :: outdir
end type pf_pfasst_t