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
| Type | Intent | Optional | 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 |
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