SourceForge


#include "paramesh_preprocessor.fh" !------------------------------------------------------------------------------ ! physicaldata module !------------------------------------------------------------------------------ module physicaldata use paramesh_dimensions private !---------------------- ! Solution Variables !---------------------- !--------------------------------------- ! Allocate memory for solution variables !--------------------------------------- ! the solution for cell-centered quantities. public :: unk real,save :: unk(nvar, & & il_bnd:iu_bnd,jl_bnd:ju_bnd,kl_bnd:ku_bnd, & & maxblocks) ! & maxblocks_alloc) ! real,target :: unk ! the solution for cell-face-centered quantities. public :: facevarx,facevary,facevarz real,save :: facevarx(nbndvar, & & il_bnd:iu_bnd+1,jl_bnd:ju_bnd, & & kl_bnd:ku_bnd, & & maxblocksf) real,save :: facevary(nbndvar, & & il_bnd:iu_bnd,jl_bnd:ju_bnd+k2d, & & kl_bnd:ku_bnd, & & maxblocksf) real,save :: facevarz(nbndvar, & & il_bnd:iu_bnd,jl_bnd:ju_bnd, & & kl_bnd:ku_bnd+k3d, & & maxblocksf) ! real, target :: facevarx,facevary,facevarz ! the solution for cell-edge-centered quantities. public :: unk_e_x,unk_e_y,unk_e_z real,save :: unk_e_x(nbndvare, & & il_bnd:iu_bnd,jl_bnd:ju_bnd+k2d, & & kl_bnd:ku_bnd+k3d, & & maxblocksue) real,save :: unk_e_y(nbndvare, & & il_bnd:iu_bnd+1,jl_bnd:ju_bnd, & & kl_bnd:ku_bnd+k3d, & & maxblocksue) real,save :: unk_e_z(nbndvare, & & il_bnd:iu_bnd+1,jl_bnd:ju_bnd+k2d, & & kl_bnd:ku_bnd, & & maxblocksue) ! real, target :: unk_e_x,unk_e_y,unk_e_z ! the solution for cell-corner based quantities. public :: unk_n real,save :: unk_n(nbndvarc, & & il_bnd:iu_bnd+1,jl_bnd:ju_bnd+k2d, & & kl_bnd:ku_bnd+k3d, & & maxblocksn) ! real, target :: unk_n !----------------- ! Timestep control !----------------- ! arrays used for timestep control public :: time_loc,dtlevel,phase_dt,loc_cycle,ncyc_local public :: ldtcomplete real, save :: time_loc(maxblocks_alloc),dtlevel(maxlevels) integer, save :: phase_dt(maxlevels),loc_cycle(maxlevels) integer, save :: ncyc_local(maxlevels) logical, save :: ldtcomplete(maxblocks_alloc) #if defined(VAR_DT) || defined(PRED_CORR) public :: t_unk,tfacevarx,tfacevary,tfacevarz public :: t_unk_e_x,t_unk_e_y,t_unk_e_z,t_unk_n real, save :: t_unk(nvar,il_bnd:iu_bnd,jl_bnd:ju_bnd, & & kl_bnd:ku_bnd, & & maxblocks) ! & maxblocks_alloc) real, save :: tfacevarx(nbndvar,il_bnd:iu_bnd+1,jl_bnd:ju_bnd, & & kl_bnd:ku_bnd,maxblocksf) real, save :: tfacevary(nbndvar,il_bnd:iu_bnd,jl_bnd:ju_bnd+k2d, & & kl_bnd:ku_bnd,maxblocksf)
real, save :: tfacevarz(nbndvar,il_bnd:iu_bnd,jl_bnd:ju_bnd, &
& kl_bnd:ku_bnd+k3d,maxblocksf)

real, save :: t_unk_e_x(nbndvare,il_bnd:iu_bnd,jl_bnd:ju_bnd+k2d,&
& kl_bnd:ku_bnd+k3d,maxblocksue)
real, save :: t_unk_e_y(nbndvare,il_bnd:iu_bnd+1,jl_bnd:ju_bnd, &
& kl_bnd:ku_bnd+k3d,maxblocksue)
real, save :: t_unk_e_z(nbndvare,il_bnd:iu_bnd+1, &
& jl_bnd:ju_bnd+k2d, &
& kl_bnd:ku_bnd,maxblocksue)

real, save :: t_unk_n(nbndvarc,il_bnd:iu_bnd+1, &
& jl_bnd:ju_bnd+k2d, &
& kl_bnd:ku_bnd+k3d,maxblocksn)
#endif


!-----------------------------------------------------------------
! include header file defining 1blk data structure

!------------------------------------------------------------------------------
! data_1blk
!------------------------------------------------------------------------------
!
! This file declares the storage space used to handle the `current
! working block' when the user decides not to reserve permanent
! storage space for guardcells for all blocks, but instead to
! fill guardcells as needed. This strategy requires 2 working blocks,
! one for the leaf node and one for its parent.

public :: unk1,facevarx1,facevary1,facevarz1

! the solution for cell-centered quantities.
real, save :: unk1(nvar,il_bnd1:iu_bnd1,jl_bnd1:ju_bnd1, &
& kl_bnd1:ku_bnd1, &
& npblks)

! the solution for cell-face-centered quantities.
real, save :: facevarx1(nbndvar,il_bnd1:iu_bnd1+1, &
& jl_bnd1:ju_bnd1, &
& kl_bnd1:ku_bnd1,npblks)
real, save :: facevary1(nbndvar,il_bnd1:iu_bnd1, &
& jl_bnd1:ju_bnd1+k2d, &
& kl_bnd1:ku_bnd1,npblks)
real, save :: facevarz1(nbndvar,il_bnd1:iu_bnd1, &
& jl_bnd1:ju_bnd1, &
& kl_bnd1:ku_bnd1+k3d,npblks)

! the solution for cell-edge-centered quantities.
public :: unk_e_x1,unk_e_y1,unk_e_z1
real,save :: unk_e_x1(nbndvare, &
& il_bnd1:iu_bnd1,jl_bnd1:ju_bnd1+k2d, &
& kl_bnd1:ku_bnd1+k3d, &
& npblks)
! & maxblocksue)
real,save :: unk_e_y1(nbndvare, &
& il_bnd1:iu_bnd1+1,jl_bnd1:ju_bnd1, &
& kl_bnd1:ku_bnd1+k3d, &
& npblks)
! & maxblocksue)
real,save :: unk_e_z1(nbndvare, &
& il_bnd1:iu_bnd1+1,jl_bnd1:ju_bnd1+k2d, &
& kl_bnd1:ku_bnd1, &
& npblks)
! & maxblocksue)

! the solution for cell-corner based quantities.
public :: unk_n1
real,save :: unk_n1(nbndvarc, &
& il_bnd1:iu_bnd1+1,jl_bnd1:ju_bnd1+k2d, &
& kl_bnd1:ku_bnd1+k3d, &
& npblks)
! & maxblocksn)



! temporary copy of solution to be used when storing solution prior
! to use of amr_1blk_guardcell
public :: gt_unk,gt_facevarx,gt_facevary,gt_facevarz
public :: gt_unk_e_x,gt_unk_e_y,gt_unk_e_z,gt_unk_n
real, save :: gt_unk(nvar,il_bnd:iu_bnd,jl_bnd:ju_bnd, &
& kl_bnd:ku_bnd,maxblocks_gt)
#ifdef NO_PERMANENT_GUARDCELLS
real, save :: gt_facevarx(nbndvar,il_bnd:iu_bnd+1,jl_bnd:ju_bnd, &
& kl_bnd:ku_bnd,maxblocksf_gt)
real, save :: gt_facevary(nbndvar,il_bnd:iu_bnd,jl_bnd:ju_bnd+k2d,&
& kl_bnd:ku_bnd,maxblocksf_gt)
real, save :: gt_facevarz(nbndvar,il_bnd:iu_bnd,jl_bnd:ju_bnd, &
& kl_bnd:ku_bnd+k3d,maxblocksf_gt)
#else
real, save :: gt_facevarx(nbndvar,1:2,jl_bnd:ju_bnd, &
& kl_bnd:ku_bnd,maxblocksf)
real, save :: gt_facevary(nbndvar,il_bnd:iu_bnd,1:1+k2d, &
& kl_bnd:ku_bnd,maxblocksf)
real, save :: gt_facevarz(nbndvar,il_bnd:iu_bnd,jl_bnd:ju_bnd, &
& 1:1+k3d,maxblocksf)
#endif

real, save :: gt_unk_e_x(nbndvare,il_bnd:iu_bnd,jl_bnd:ju_bnd+k2d,&
& kl_bnd:ku_bnd+k3d,maxblocksue_gt)
real, save :: gt_unk_e_y(nbndvare,il_bnd:iu_bnd+1,jl_bnd:ju_bnd, &
& kl_bnd:ku_bnd+k3d,maxblocksue_gt)
real, save :: gt_unk_e_z(nbndvare,il_bnd:iu_bnd+1, &
& jl_bnd:ju_bnd+k2d, &
& kl_bnd:ku_bnd,maxblocksue_gt)
real, save :: gt_unk_n(nbndvarc,il_bnd:iu_bnd+1,jl_bnd:ju_bnd+k2d,&
& kl_bnd:ku_bnd+k3d,maxblocksn_gt)


!
! Variables used to control data caching. This helps to avoid unnecessary
! repetition of some guardcell and surrounding-block mapping operations
public :: pcache_blk_u,pcache_pe_u,pcache_blk_w,pcache_pe_w
public :: lnew_parent
integer, save :: pcache_blk_u,pcache_pe_u
integer, save :: pcache_blk_w,pcache_pe_w
logical, save :: lnew_parent

!-----------------------------------------------------------------
! include header file defining data structure on cell faces

!------------------------------------------------------------------------
! block_boundary_data


!
! This file defines a data structure to be used for quantities
! which may need to be defined at grid block interfaces, eg fluxes,
! pressures.
!

! The convention for relating varaibles associated with cell faces to the
! variables defined at cell centers is as follows:

! If iface_off=0 :
! the array facevarx(:,i,j,k,:) for example defines data
! on the x(i-1/2) face of the (i,j,k)-th mesh cell.
! If iface_off=-1 :
! the array facevarx(:,i,j,k,:) for example defines data
! on the x(i+1/2) face of the (i,j,k)-th mesh cell.


! storage used for fluxes at block boundaries. This is used when conservation
! constraints need to be imposed.

public :: nfluxvar,nfluxes,maxblocksfl
public :: flux_x,flux_y,flux_z
public :: tflux_x,tflux_y,tflux_z
integer, parameter :: nfluxvar = N_FLUX_VAR

integer, parameter :: nfluxes=max(1,nfluxvar)

integer, parameter :: maxblocksfl= &
& 1+(maxblocks_alloc-1)*min(1,nfluxvar)

real, save :: flux_x(nfluxes,1:2, &
& jl_bnd:ju_bnd,kl_bnd:ku_bnd,maxblocksfl)
real, save :: flux_y(nfluxes,il_bnd:iu_bnd, &
& 1:2,kl_bnd:ku_bnd,maxblocksfl)
real, save :: flux_z(nfluxes,il_bnd:iu_bnd, &
& jl_bnd:ju_bnd,1:2,maxblocksfl)
! real, save, target :: flux_x(nfluxes,1:2, &
! & jl_bnd:ju_bnd,kl_bnd:ku_bnd,maxblocksfl)
! real, save, target :: flux_y(nfluxes,il_bnd:iu_bnd, &
! & 1:2,kl_bnd:ku_bnd,maxblocksfl)
! real, save, target :: flux_z(nfluxes,il_bnd:iu_bnd, &
! & jl_bnd:ju_bnd,1:2,maxblocksfl)

real, save :: tflux_x(nfluxes,1:2, &
& jl_bnd:ju_bnd, &
& kl_bnd:ku_bnd,maxblocksfl)
real, save :: tflux_y(nfluxes,il_bnd:iu_bnd, &
& 1:2,kl_bnd:ku_bnd,maxblocksfl)
real, save :: tflux_z(nfluxes,il_bnd:iu_bnd, &
& jl_bnd:ju_bnd,1:2,maxblocksfl)

#ifdef VAR_DT
! temporary flux storage needed inside amr_flux_conserve when using
! variable timestep
public :: ttflux_x,ttflux_y,ttflux_z
real, save :: ttflux_x(nfluxes,1:2,jl_bnd:ju_bnd, &
& kl_bnd:ku_bnd,maxblocksfl)
real, save :: ttflux_y(nfluxes,il_bnd:iu_bnd, &
& 1:2,kl_bnd:ku_bnd,maxblocksfl)
real, save :: ttflux_z(nfluxes,il_bnd:iu_bnd, &
& jl_bnd:ju_bnd,1:2,maxblocksfl)
#endif

! storage used for cell edges at block boundaries.
! This is used when quantities located at cell edge centers need to
! be used consistently at the boundaries between blocks at different
! refinement levels.

public :: nedgevar,nedges,maxblockse
public :: bedge_facex_y,bedge_facex_z,bedge_facey_x
public :: bedge_facey_z,bedge_facez_x,bedge_facez_y
public :: recvarx1e,recvary1e,recvarz1e
public :: recvarx2e,recvary2e,recvarz2e

integer, parameter :: nedgevar1=N_EDGE_VAR
integer, parameter :: nedgevar=max(nedgevar1,nvaredge)

integer, parameter :: nedges=max(1,nedgevar)

integer, parameter :: maxblockse= &
& 1+(maxblocks_alloc-1)*min(1,nedgevar)

real, save :: bedge_facex_y(nedges,1:2,jl_bnd:ju_bnd+1, &
& kl_bnd:ku_bnd+1,maxblockse)
real, save :: bedge_facex_z(nedges,1:2,jl_bnd:ju_bnd+1, &
& kl_bnd:ku_bnd+1,maxblockse)
real, save :: bedge_facey_x(nedges,il_bnd:iu_bnd+1,1:2, &
& kl_bnd:ku_bnd+1,maxblockse)
real, save :: bedge_facey_z(nedges,il_bnd:iu_bnd+1,1:2, &
& kl_bnd:ku_bnd+1,maxblockse)
real, save :: bedge_facez_x(nedges,il_bnd:iu_bnd+1, &
& jl_bnd:ju_bnd+1,1:2,maxblockse)
real, save :: bedge_facez_y(nedges,il_bnd:iu_bnd+1, &
& jl_bnd:ju_bnd+1, &
& 1:2,maxblockse)
real, save :: recvarx1e(nedges,1:2,jl_bnd:ju_bnd+1, &
& kl_bnd:ku_bnd+1)
real, save :: recvary1e(nedges,il_bnd:iu_bnd+1,1:2, &
& kl_bnd:ku_bnd+1)
real, save :: recvarz1e(nedges,il_bnd:iu_bnd+1,jl_bnd:ju_bnd+1, &
& 1:2)
real, save :: recvarx2e(nedges,1:2,jl_bnd:ju_bnd+1, &
& kl_bnd:ku_bnd+1)
real, save :: recvary2e(nedges,il_bnd:iu_bnd+1,1:2, &
& kl_bnd:ku_bnd+1)
real, save :: recvarz2e(nedges,il_bnd:iu_bnd+1,jl_bnd:ju_bnd+1, &
& 1:2)
! real, save, target :: bedge_facex_y(nedges,1:2,jl_bnd:ju_bnd+1, &
! & kl_bnd:ku_bnd+1,maxblockse)
! real, save, target :: bedge_facex_z(nedges,1:2,jl_bnd:ju_bnd+1, &
! & kl_bnd:ku_bnd+1,maxblockse)
! real, save, target :: bedge_facey_x(nedges,il_bnd:iu_bnd+1,1:2, &
! & kl_bnd:ku_bnd+1,maxblockse)
! real, save, target :: bedge_facey_z(nedges,il_bnd:iu_bnd+1,1:2, &
! & kl_bnd:ku_bnd+1,maxblockse)
! real, save, target :: bedge_facez_x(nedges,il_bnd:iu_bnd+1, &
! & jl_bnd:ju_bnd+1,1:2,maxblockse)
! real, save, target :: bedge_facez_y(nedges,il_bnd:iu_bnd+1, &
! & jl_bnd:ju_bnd+1, &
! & 1:2,maxblockse)


public :: tbedge_facex_y,tbedge_facex_z,tbedge_facey_x
public :: tbedge_facey_z,tbedge_facez_x,tbedge_facez_y
real, save :: tbedge_facex_y(nedges,1:2,jl_bnd:ju_bnd+1, &
& kl_bnd:ku_bnd+1,maxblockse)
real, save :: tbedge_facex_z(nedges,1:2,jl_bnd:ju_bnd+1, &
& kl_bnd:ku_bnd+1,maxblockse)
real, save :: tbedge_facey_x(nedges,il_bnd:iu_bnd+1,1:2, &
& kl_bnd:ku_bnd+1,maxblockse)
real, save :: tbedge_facey_z(nedges,il_bnd:iu_bnd+1,1:2, &
& kl_bnd:ku_bnd+1,maxblockse)
real, save :: tbedge_facez_x(nedges,il_bnd:iu_bnd+1, &
& jl_bnd:ju_bnd+1, &
& 1:2,maxblockse)
real, save :: tbedge_facez_y(nedges,il_bnd:iu_bnd+1, &
& jl_bnd:ju_bnd+1, &
& 1:2,maxblockse)

#ifdef VAR_DT
public :: ttbedge_facex_y,ttbedge_facex_z,ttbedge_facey_x
public :: ttbedge_facey_z,ttbedge_facez_x,ttbedge_facez_y
real, save :: ttbedge_facex_y(nedges,1:2,jl_bnd:ju_bnd+1, &
& kl_bnd:ku_bnd+1,maxblockse)
real, save :: ttbedge_facex_z(nedges,1:2,jl_bnd:ju_bnd+1, &
& kl_bnd:ku_bnd+1,maxblockse)
real, save :: ttbedge_facey_x(nedges,il_bnd:iu_bnd+1,1:2, &
& kl_bnd:ku_bnd+1,maxblockse)
real, save :: ttbedge_facey_z(nedges,il_bnd:iu_bnd+1,1:2, &
& kl_bnd:ku_bnd+1,maxblockse)
real, save :: ttbedge_facez_x(nedges,il_bnd:iu_bnd+1, &
& jl_bnd:ju_bnd+1, &
& 1:2,maxblockse)
real, save :: ttbedge_facez_y(nedges,il_bnd:iu_bnd+1, &
& jl_bnd:ju_bnd+1, &
& 1:2,maxblockse)
#endif




#ifdef CURVILINEAR
! arrays used to store geometry information for the working block
public :: cell_vol
public :: cell_area1,cell_area2,cell_area3
public :: cell_leng1,cell_leng2,cell_leng3
real :: cell_vol(il_bnd1:iu_bnd1,jl_bnd1:ju_bnd1,kl_bnd1:ku_bnd1)
real :: cell_area1(il_bnd1:iu_bnd1+1,jl_bnd1:ju_bnd1, &
& kl_bnd1:ku_bnd1)
real :: cell_area2(il_bnd1:iu_bnd1,jl_bnd1:ju_bnd1+k2d, &
& kl_bnd1:ku_bnd1)
real :: cell_area3(il_bnd1:iu_bnd1,jl_bnd1:ju_bnd1, &
& kl_bnd1:ku_bnd1+k3d)
real :: cell_leng1(il_bnd1:iu_bnd1,jl_bnd1:ju_bnd1+k2d, &
& kl_bnd1:ku_bnd1+k3d)
real :: cell_leng2(il_bnd1:iu_bnd1+1,jl_bnd1:ju_bnd1, &
& kl_bnd1:ku_bnd1+k3d)
real :: cell_leng3(il_bnd1:iu_bnd1+1,jl_bnd1:ju_bnd1+k2d, &
& kl_bnd1:ku_bnd1)
#endif /* CURVILINEAR */

! workspace arrays used for inter-block communications
public :: nbndmax
public :: recvarx1,recvary1,recvarz1
public :: recvarxf,recvaryf,recvarzf
public :: bndtempx1,bndtempy1,bndtempz1
integer, parameter :: nbndmax=max(nbndvar,nfluxes)
real, save :: recvarx1(nbndmax,1:2,jl_bnd:ju_bnd,kl_bnd:ku_bnd)
real, save :: recvary1(nbndmax,il_bnd:iu_bnd,1:2,kl_bnd:ku_bnd)
real, save :: recvarz1(nbndmax,il_bnd:iu_bnd,jl_bnd:ju_bnd,1:2)
real, save :: recvarxf(nfluxes,1:2,jl_bnd:ju_bnd,kl_bnd:ku_bnd)
real, save :: recvaryf(nfluxes,il_bnd:iu_bnd,1:2,kl_bnd:ku_bnd)
real, save :: recvarzf(nfluxes,il_bnd:iu_bnd,jl_bnd:ju_bnd,1:2)
real, save :: bndtempx1(nfluxes,1:2,jl_bnd:ju_bnd,kl_bnd:ku_bnd)
real, save :: bndtempy1(nfluxes,il_bnd:iu_bnd,1:2,kl_bnd:ku_bnd)
real, save :: bndtempz1(nfluxes,il_bnd:iu_bnd,jl_bnd:ju_bnd,1:2)



! parameters used in communication calls
public :: len_block_bndx,len_block_bndy,len_block_bndz
integer, parameter :: len_block_bndx=2*ju_bnd*ku_bnd
integer, parameter :: len_block_bndy=2*iu_bnd*ku_bnd
integer, parameter :: len_block_bndz=2*iu_bnd*ju_bnd

public :: len_block_ex,len_block_ey,len_block_ez
integer, parameter :: len_block_ex=2*(ju_bnd+k2d)*(ku_bnd+k3d)
integer, parameter :: len_block_ey=2*(iu_bnd+1 )*(ku_bnd+k3d)
integer, parameter :: len_block_ez=2*(iu_bnd+1 )*(ju_bnd+k2d)

!-----------------------------------------------------------------
! Index arrays used in boundary condition routines.
integer,public :: bc_index_i(2,3,5)
integer,public :: bc_index_j(2,3,5)
integer,public :: bc_index_k(2,3,5)


!-----------------------------------------------------------------
! Logical flags required to signal algorithmic states
logical, public :: lrestrict_in_progress

!-----------------------------------------------------------------
! Error trapping and management

! To record whether amr_gsurrounding_blks has been called.
public :: gsurrblks_set
integer :: gsurrblks_set

! a counter which can be used to keep track of calls to routines
public :: instance
integer :: instance
!-----------------------------------------------------------------

end module physicaldata