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
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer, | intent(in) | :: | iit | |||
| double precision, | intent(in) | :: | qt |
subroutine process_advanced(iit,qt) use mod_usr_methods, only: usr_process_adv_grid, usr_process_adv_global use mod_global_parameters use mod_geometry, only: sync_positions_host use mod_ghostcells_update use mod_physics, only: phys_req_diagonal ! .. scalars .. integer,intent(in) :: iit double precision, intent(in):: qt integer:: iigrid, igrid if (associated(usr_process_adv_global)) then call usr_process_adv_global(iit,qt) end if if (associated(usr_process_adv_grid)) then ! usr_process_adv_grid reads ps(igrid)%x on the host call sync_positions_host() do iigrid=1,igridstail; igrid=igrids(iigrid); ! next few lines ensure correct usage of routines like divvector etc dxlevel(1)=rnode(rpdx1_,igrid);dxlevel(2)=rnode(rpdx2_,igrid) dxlevel(3)=rnode(rpdx3_,igrid); block=>ps(igrid) call usr_process_adv_grid(igrid,node(plevel_,igrid),ixGlo1,ixGlo2,& ixGlo3,ixGhi1,ixGhi2,ixGhi3,ixMlo1,ixMlo2,ixMlo3,ixMhi1,ixMhi2,& ixMhi3, qt,ps(igrid)%w,ps(igrid)%x) end do call getbc(qt,dt,ps,iwstart,nwgc,phys_req_diagonal) end if end subroutine process_advanced