global_implicit_update Subroutine

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

Uses

  • proc~~global_implicit_update~~UsesGraph proc~global_implicit_update global_implicit_update mod_physics mod_physics proc~global_implicit_update->mod_physics module~mod_ghostcells_update mod_ghostcells_update proc~global_implicit_update->module~mod_ghostcells_update module~mod_global_parameters mod_global_parameters proc~global_implicit_update->module~mod_global_parameters module~mod_mpi_wrapper mod_mpi_wrapper module~mod_ghostcells_update->module~mod_mpi_wrapper module~mod_basic_types mod_basic_types module~mod_global_parameters->module~mod_basic_types module~mod_connectivity mod_connectivity module~mod_global_parameters->module~mod_connectivity module~mod_constants mod_constants module~mod_global_parameters->module~mod_constants module~mod_physicaldata mod_physicaldata module~mod_global_parameters->module~mod_physicaldata module~mod_variables mod_variables module~mod_global_parameters->module~mod_variables mpi mpi module~mod_global_parameters->mpi module~mod_mpi_wrapper->mpi module~mod_variables->module~mod_basic_types

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


Calls

proc~~global_implicit_update~~CallsGraph proc~global_implicit_update global_implicit_update phys_implicit_update phys_implicit_update proc~global_implicit_update->phys_implicit_update proc~getbc getbc proc~global_implicit_update->proc~getbc mpi_waitall mpi_waitall proc~getbc->mpi_waitall mpi_wtime mpi_wtime proc~getbc->mpi_wtime phys_boundary_adjust phys_boundary_adjust proc~getbc->phys_boundary_adjust proc~fill_boundary_after_gc fill_boundary_after_gc proc~getbc->proc~fill_boundary_after_gc proc~fill_boundary_before_gc fill_boundary_before_gc proc~getbc->proc~fill_boundary_before_gc proc~fill_coarse_boundary fill_coarse_boundary proc~getbc->proc~fill_coarse_boundary proc~getintbc getintbc proc~getbc->proc~getintbc proc~idecode~2 idecode proc~getbc->proc~idecode~2 proc~mpi_irecv_wrapper mpi_irecv_wrapper proc~getbc->proc~mpi_irecv_wrapper proc~mpi_isend_wrapper mpi_isend_wrapper proc~getbc->proc~mpi_isend_wrapper proc~nvtxendrange~2 nvtxEndRange proc~getbc->proc~nvtxendrange~2 proc~nvtxstartrange~2 nvtxStartRange proc~getbc->proc~nvtxstartrange~2 proc~skip_direction skip_direction proc~getbc->proc~skip_direction proc~bc_phys bc_phys proc~fill_boundary_after_gc->proc~bc_phys proc~fill_boundary_before_gc->proc~bc_phys proc~fill_coarse_boundary->proc~bc_phys proc~sync_positions_host sync_positions_host proc~getintbc->proc~sync_positions_host mpi_irecv mpi_irecv proc~mpi_irecv_wrapper->mpi_irecv mpi_isend mpi_isend proc~mpi_isend_wrapper->mpi_isend specialbound_usr specialbound_usr proc~bc_phys->specialbound_usr

Source Code

  subroutine global_implicit_update(dtfactor,qdt,qtC,psa,psb)
    use mod_global_parameters
    use mod_ghostcells_update
    use mod_physics, only: phys_implicit_update, phys_req_diagonal

    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
    double precision, intent(in) :: qdt
    !< overall time step dt
    double precision, intent(in) :: qtC
    !< Both states psa and psb at this time level
    double precision, intent(in) :: dtfactor
    !< Advance psa=psb+dtfactor*qdt*F_im(psa)

    integer                        :: iigrid, igrid

    !> First copy all variables from a to b, this is necessary to account for
    ! quantities is w with no implicit sourceterm
    do iigrid=1,igridstail; igrid=igrids(iigrid);
       psa(igrid)%w = psb(igrid)%w
    end do

    if (associated(phys_implicit_update)) then
       call phys_implicit_update(dtfactor,qdt,qtC,psa,psb)
    end if

    ! enforce boundary conditions for psa
    call getbc(qtC,0.d0,psa,iwstart,nwgc,phys_req_diagonal)

  end subroutine global_implicit_update