mod_advance Module

Module containing all the time stepping schemes


Used by

  • module~~mod_advance~~UsedByGraph module~mod_advance mod_advance proc~main main proc~main->module~mod_advance proc~timeintegration timeintegration proc~timeintegration->module~mod_advance

Variables

Type Visibility Attributes Name Initial
logical, private :: fix_conserve_at_step = .true.

Whether to conserve fluxes at the current sub-step


Subroutines

public subroutine advance(iit)

Advance all the grids over one time step, including all sources

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: iit

public subroutine process(iit, qt)

process is a user entry in time loop, before output and advance allows to modify solution, add extra variables, etc. Warning: CFL dt already determined (and is not recomputed)!

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: iit
double precision, intent(in) :: qt

public subroutine process_advanced(iit, qt)

process_advanced is user entry in time loop, just after advance allows to modify solution, add extra variables, etc. added for handling two-way coupled PIC-MHD Warning: w is now at global_time^(n+1), global time and iteration at global_time^n, it^n

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: iit
double precision, intent(in) :: qt

private subroutine advect(idimmin, idimmax)

Advance all grids over one time step, but without taking dimensional splitting or split source terms into account

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: idimmin
integer, intent(in) :: idimmax

private subroutine advect1(method, dtfactor, idimmin, idimmax, qtC, psa, bga, qt, psb, bgb)

Integrate all grids by one partial step

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: method(nlevelshi)
double precision, intent(in) :: dtfactor

Advance over dtfactor * dt

integer, intent(in) :: idimmin
integer, intent(in) :: idimmax
double precision, intent(in) :: qtC
type(state), target :: psa(max_blocks)

Compute fluxes based on this state

type(block_grid_t) :: bga

Compute fluxes based on this state

double precision, intent(in) :: qt
type(state), target :: psb(max_blocks)

Update solution on this state

type(block_grid_t) :: bgb

Update solution on this state

private subroutine evaluate_implicit(qtC, psa)

Evaluate Implicit part in place, i.e. psa==>F_im(psa)

Arguments

Type IntentOptional Attributes Name
double precision, intent(in) :: qtC

psa at this time level

type(state), target :: psa(max_blocks)

Compute implicit part from this state and update it

private subroutine global_implicit_update(dtfactor, qdt, qtC, psa, psb)

Implicit global update step within IMEX schemes, advance psa=psb+dtfactorqdtF_im(psa) First copy all variables from a to b, this is necessary to account for

Arguments

Type IntentOptional Attributes Name
double precision, intent(in) :: dtfactor

Advance psa=psb+dtfactorqdtF_im(psa)

double precision, intent(in) :: qdt

overall time step dt

double precision, intent(in) :: qtC

Both states psa and psb at this time level

type(state), target :: psa(max_blocks)

Compute implicit part from this state and update it

type(state), target :: psb(max_blocks)

Will be unchanged, as on entry