allocate memory to one-level coarser physical state of igrid node
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer, | intent(in) | :: | igrid | |||
| type(state) | :: | s | ||||
| integer, | intent(in) | :: | ixGmin1 | |||
| integer, | intent(in) | :: | ixGmin2 | |||
| integer, | intent(in) | :: | ixGmin3 | |||
| integer, | intent(in) | :: | ixGmax1 | |||
| integer, | intent(in) | :: | ixGmax2 | |||
| integer, | intent(in) | :: | ixGmax3 |
subroutine alloc_state_coarse(igrid, s, ixGmin1,ixGmin2,ixGmin3,ixGmax1,& ixGmax2,ixGmax3) use mod_global_parameters type(state) :: s integer, intent(in) :: igrid, ixGmin1,ixGmin2,ixGmin3,ixGmax1,ixGmax2,& ixGmax3 integer :: ixGsmin1,ixGsmin2,ixGsmin3,ixGsmax1,ixGsmax2,& ixGsmax3 ! allocate(s%w(ixGmin1:ixGmax1,ixGmin2:ixGmax2,ixGmin3:ixGmax3,1:nw)) s%w => bgc(1)%w(:,:,:,:,igrid) s%igrid=igrid s%w=0.d0 s%ixGmin1=ixGmin1;s%ixGmin2=ixGmin2;s%ixGmin3=ixGmin3;s%ixGmax1=ixGmax1 s%ixGmax2=ixGmax2;s%ixGmax3=ixGmax3; ixGsmin1 = ixGmin1-1; ixGsmax1 = ixGmax1; ixGsmin2 = ixGmin2-1 ixGsmax2 = ixGmax2; ixGsmin3 = ixGmin3-1; ixGsmax3 = ixGmax3 if(stagger_grid) then allocate(s%ws(ixGsmin1:ixGsmax1,ixGsmin2:ixGsmax2,ixGsmin3:ixGsmax3,& 1:nws)) s%ws=0.d0 s%ixGsmin1=ixGsmin1;s%ixGsmin2=ixGsmin2;s%ixGsmin3=ixGsmin3 s%ixGsmax1=ixGsmax1;s%ixGsmax2=ixGsmax2;s%ixGsmax3=ixGsmax3; end if if(B0fieldAllocCoarse) then allocate(s%B0(ixGmin1:ixGmax1,ixGmin2:ixGmax2,ixGmin3:ixGmax3,1:ndir,& 0:ndim)) end if ! coarse representatives take their geometry from bgeoc, see alloc_state; ! they need no extra layer, so their "extended" range is just ixG call point_at_geometry(s, bgeoc, igrid, ixGmin1,ixGmin2,ixGmin3,ixGmax1,& ixGmax2,ixGmax3, ixGmin1,ixGmin2,ixGmin3,ixGmax1,ixGmax2,ixGmax3) ! allocate physical boundary flag allocate(s%is_physical_boundary(2*ndim)) end subroutine alloc_state_coarse