6 type(state),
intent(inout) :: sFi, sCo
7 integer,
intent(in) :: ixFiG^L, ixFi^L, ixCoG^L, ixCo^L
9 integer :: ixCo^D, ixFi^D, iw
10 double precision :: CoFiratio
11 double precision :: B_energy_change(ixCoG^S)
13 associate(wfi=>sfi%w(ixfig^s,1:nw), wco=>sco%w(ixcog^s,1:nw))
14 staggered: associate(wfis=>sfi%ws,wcos=>sco%ws)
20 cofiratio=one/dble(2**
ndim)
22 {
do ixco^db = ixco^lim^db
23 ixfi^db=2*(ixco^db-ixcomin^db)+ixfimin^db\}
24 wco(ixco^d,iw)=sum(wfi(ixfi^d:ixfi^d+1,iw))*cofiratio
29 {
do ixco^db = ixco^lim^db
30 ixfi^db=2*(ixco^db-ixcomin^db)+ixfimin^db\}
32 sum(sfi%dvolume(ixfi^d:ixfi^d+1)*wfi(ixfi^d:ixfi^d+1,iw)) &
41 {
do ixco^db = ixcomin^db-kr(^db,iw),ixcomax^db
42 ixfi^db=2*(ixco^db-ixcomin^db+kr(^db,iw))+ixfimin^db-kr(^db,iw)\}
44 if (sco%surfaceC(ixco^d,iw)>1.0d-9*sco%dvolume(ixco^d))
then
45 wcos(ixco^d,iw)=sum(sfi%surfaceC(ixfi^d:ixfi^d+1-kr(iw,^d),iw)*wfis(ixfi^d:ixfi^d+1-kr(iw,^d),iw)) &
46 /sco%surfaceC(ixco^d,iw)
52 if(phys_total_energy.and. .not.coarsenprimitive)
then
53 b_energy_change(ixco^s)=0.5d0*sum(wco(ixco^s,iw_mag(:))**2,dim=ndim+1)
56 call phys_face_to_center(ixco^l,sco)
57 if(phys_total_energy.and. .not.coarsenprimitive)
then
58 wco(ixco^s,iw_e)=wco(ixco^s,iw_e)-b_energy_change(ixco^s)+&
59 0.5d0*sum(wco(ixco^s,iw_mag(:))**2,dim=ndim+1)
63 if(coarsenprimitive)
then
64 call phys_to_conserved(ixfig^l,ixfi^l,wfi,sfi%x)
65 call phys_to_conserved(ixcog^l,ixco^l,wco,sco%x)
67 end associate staggered
subroutine coarsen_grid(sFi, ixFiGL, ixFiL, sCo, ixCoGL, ixCoL)
coarsen one grid to its coarser representative
This module contains definitions of global parameters and variables and some generic functions/subrou...
integer, parameter ndim
Number of spatial dimensions for grid variables.
logical slab_uniform
uniform Cartesian geometry or not (stretched Cartesian)
This module defines the procedures of a physics module. It contains function pointers for the various...
procedure(sub_convert), pointer phys_to_primitive