pf_mod_parallel Module

Module of routines to run PFASST


Uses

  • module~~pf_mod_parallel~~UsesGraph module~pf_mod_parallel pf_mod_parallel module~pf_mod_interpolate pf_mod_interpolate module~pf_mod_parallel->module~pf_mod_interpolate module~pf_mod_utils pf_mod_utils module~pf_mod_parallel->module~pf_mod_utils module~pf_mod_restrict pf_mod_restrict module~pf_mod_parallel->module~pf_mod_restrict module~pf_mod_pfasst pf_mod_pfasst module~pf_mod_parallel->module~pf_mod_pfasst module~pf_mod_comm pf_mod_comm module~pf_mod_parallel->module~pf_mod_comm module~pf_mod_dtype pf_mod_dtype module~pf_mod_parallel->module~pf_mod_dtype module~pf_mod_hooks pf_mod_hooks module~pf_mod_parallel->module~pf_mod_hooks module~pf_mod_timer pf_mod_timer module~pf_mod_parallel->module~pf_mod_timer module~pf_mod_results pf_mod_results module~pf_mod_parallel->module~pf_mod_results module~pf_mod_interpolate->module~pf_mod_utils module~pf_mod_interpolate->module~pf_mod_restrict module~pf_mod_interpolate->module~pf_mod_dtype module~pf_mod_interpolate->module~pf_mod_hooks module~pf_mod_interpolate->module~pf_mod_timer module~pf_mod_utils->module~pf_mod_dtype module~pf_mod_utils->module~pf_mod_timer module~pf_mod_restrict->module~pf_mod_dtype module~pf_mod_restrict->module~pf_mod_hooks module~pf_mod_restrict->module~pf_mod_timer module~pf_mod_pfasst->module~pf_mod_dtype module~pf_mod_comm_mpi pf_mod_comm_mpi module~pf_mod_pfasst->module~pf_mod_comm_mpi module~pf_mod_comm->module~pf_mod_pfasst iso_c_binding iso_c_binding module~pf_mod_dtype->iso_c_binding module~pf_mod_hooks->module~pf_mod_dtype module~pf_mod_timer->module~pf_mod_dtype module~pf_mod_results->module~pf_mod_dtype module~pf_mod_comm_mpi->module~pf_mod_dtype module~pf_mod_comm_mpi->module~pf_mod_timer module~pf_mod_mpi pf_mod_mpi module~pf_mod_comm_mpi->module~pf_mod_mpi

Used by

  • module~~pf_mod_parallel~~UsedByGraph module~pf_mod_parallel pf_mod_parallel module~pfasst pfasst module~pfasst->module~pf_mod_parallel

Contents


Subroutines

public subroutine pf_pfasst_run(pf, q0, dt, tend, nsteps, qend, flags)

This is the main interface to pfasst. It examines the parameters and decides which subroutine to call to execute the code correctly Set the number of time steps to do The user can either pass in the number of time steps or pass in the time step size and length of run Allocate stuff for holding results

Arguments

Type IntentOptional AttributesName
type(pf_pfasst_t), intent(inout), target:: pf

The complete PFASST structure

class(pf_encap_t), intent(in) :: q0

The initial condition

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

The time step for each processor

real(kind=pfdp), intent(in) :: tend

The final time of run

integer, intent(in), optional :: nsteps

The number of time steps

class(pf_encap_t), intent(inout), optional :: qend

The computed solution at tend

integer, intent(in), optional :: flags(:)

User defnined flags

public subroutine pf_predictor(pf, t0, dt, flags)

PFASST Predictor. Subroutine to initialize the solution on each processor The goal is to have a solution at each level and each node set to a consistent value When this is called, the value of q0 at the fine level on each processor has been set somehow (see q0_style below)

Read more…

Arguments

Type IntentOptional AttributesName
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

public subroutine pf_check_residual(pf, residual_converged)

Subroutine to test residuals to determine if the current processor has converged.

Arguments

Type IntentOptional AttributesName
type(pf_pfasst_t), intent(inout) :: pf
logical, intent(out) :: residual_converged

Return true if residual is below tolerances

public subroutine pf_check_convergence_block(pf, send_tag)

Subroutine to check if the current processor has converged and to update the next processor on the status Note that if the previous processor hasn't converged yet (pstatus), the current processor can't be converged yet either Check to see if tolerances are met

Read more…

Arguments

Type IntentOptional AttributesName
type(pf_pfasst_t), intent(inout) :: pf
integer, intent(in) :: send_tag

identifier for status send and receive

public subroutine pf_block_run(pf, q0, dt, nsteps, qend, flags)

PFASST controller for block mode When starting a new block, broadcast new initial conditions to all procs For initial block, this is done when initial conditions are set Reset some flags Pack away your last solution Everyone resets their q0 Just stick qend in q0 Update the step and t0 variables for new block Call the predictor to get an initial guess on all levels and all processors

Read more…

Arguments

Type IntentOptional AttributesName
type(pf_pfasst_t), intent(inout), target:: pf
class(pf_encap_t), intent(in) :: q0
real(kind=pfdp), intent(in) :: dt
integer, intent(in) :: nsteps
class(pf_encap_t), intent(inout), optional :: qend
integer, intent(in), optional :: flags(:)

public subroutine pf_v_cycle(pf, iteration, t0, dt, level_index_c, level_index_f, flags)

Execute a V-cycle between levels nfine and ncoarse

Read more…

Arguments

Type IntentOptional AttributesName
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