!WRF:MEDIATION_LAYER:SOLVER
MODULE module_after_all_rk_steps 1
CONTAINS
! This subroutine is called once per domain per time step. It is outside
! of and after the end of the Runge-Kutta time steps, after the calls to
! the explicit moisture driver, and after the polar filtering calls. The
! variables in here are all up-to-date with the end of this current time
! step.
SUBROUTINE after_all_rk_steps ( grid, config_flags, & 1,8
moist, chem, tracer, scalar, &
th_phy, pi_phy, p_phy, rho_phy, &
p8w, t8w, dz8w, &
curr_secs2, &
diag_flag, &
ids, ide, jds, jde, kds, kde, &
ims, ime, jms, jme, kms, kme, &
ips, ipe, jps, jpe, kps, kpe, &
imsx, imex, jmsx, jmex, kmsx, kmex, &
ipsx, ipex, jpsx, jpex, kpsx, kpex, &
imsy, imey, jmsy, jmey, kmsy, kmey, &
ipsy, ipey, jpsy, jpey, kpsy, kpey )
!=============================================================
! USE Association for Generic WRF Infrastructure
!=============================================================
! Pick up the number of members for each of the 4d arrays - for declaration purposes.
USE module_state_description
, ONLY: num_moist, num_chem, num_tracer, num_scalar
! This gives us the type definition for grid (domain)
USE module_domain
, ONLY : domain
! All of the information from the namelist is in config_flags. The
! type declaration for this puppy must be available.
USE module_configure
, ONLY : grid_config_rec_type
#ifdef DM_PARALLEL
! Ensure some of the fancy diagnostics variables that need to
! talk to other patches can do so.
USE module_dm
, ONLY : &
local_communicator, mytask, ntasks, ntasks_x, ntasks_y &
,local_communicator_periodic, wrf_dm_maxval
USE module_comm_dm
, ONLY : &
halo_em_phys_w_sub, halo_em_phys_hcw_sub
#endif
!=============================================================
! USE Association for the Diagnostic Packages
!=============================================================
USE module_diagnostics_driver
, ONLY : diagnostics_driver
IMPLICIT NONE
!=============================================================
! Subroutine Arguments
!=============================================================
! Arguments passed in. All of the diagnostics are part of the grid structure, so
! even though we are not changing any of the fundamental variables, we are computing
! the diagnostics. Therefore grid is INOUT.
TYPE ( domain ), INTENT(INOUT) :: grid
! We are not changing any of the namelist settings.
TYPE ( grid_config_rec_type ), INTENT(IN) :: config_flags
! The 4d arrays are input only, no mods to them.
REAL , DIMENSION(ims:ime,kms:kme,jms:jme,num_moist ) , INTENT(IN) :: moist
REAL , DIMENSION(ims:ime,kms:kme,jms:jme,num_chem ) , INTENT(IN) :: chem
REAL , DIMENSION(ims:ime,kms:kme,jms:jme,num_tracer) , INTENT(IN) :: tracer
REAL , DIMENSION(ims:ime,kms:kme,jms:jme,num_scalar) , INTENT(IN) :: scalar
! A few handy 3d arrays computed for the physics scheme: pressure (Pa) and
! temperature (K), on both half (_phy) and full levels.
REAL , DIMENSION(ims:ime,kms:kme,jms:jme) , INTENT(IN) :: th_phy , &
p_phy , &
pi_phy , &
rho_phy , &
dz8w , &
p8w , &
t8w
! Time (s) since the beginning of the restart.
REAL :: curr_secs2
! Is this to be a history output time? If so, compute the diagnostics.
LOGICAL :: diag_flag
! The sundry dimensions required to keep a model running smoothly:
! The first letter:
! i: refers to the nominally west east direction, the inner-most (fastest)
! incrementing index
! j: refers to the nominally south north direction, the outer-most (slowest)
! incrementing index
! k: refers to the vertical direction form bottom to top, the second dimension
! in all 3d arrays
! The second letter:
! d: refers to the domain size, the geophysical extent of the entire domain,
! not used in dimensions or looping, used to determine when we are close to
! the edge of the boundary
! m: refers to the memory size size, all 2d and 3d arrays from the Registry
! (passed into here via the grid structure or the I1 variables [such as
! p_phy, for example]) use these values for dimensioning
! p: refers to the patch size, the extent over which computational loops run
INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
ims, ime, jms, jme, kms, kme, &
ips, ipe, jps, jpe, kps, kpe
! Hopefully unnecessary, these are the filtered dimensions.
INTEGER , INTENT(IN) :: imsx,imex,jmsx,jmex,kmsx,kmex, &
ipsx,ipex,jpsx,jpex,kpsx,kpex, &
imsy,imey,jmsy,jmey,kmsy,kmey, &
ipsy,ipey,jpsy,jpey,kpsy,kpey
#ifdef DM_PARALLEL
!=============================================================
! Include patch communications
!=============================================================
# include "HALO_EM_PHYS_W.inc"
# include "HALO_EM_PHYS_HCW.inc"
#endif
!=============================================================
! Start of executable code
!=============================================================
CALL wrf_debug
( 100 , '--> TOP OF AFTER ALL RK STEPS' )
CALL wrf_debug ( 100 , '--> CALLING DIAGNOSTICS DRIVER' )
CALL diagnostics_driver
( grid, config_flags, &
moist, chem, tracer, scalar, &
th_phy, pi_phy, p_phy, rho_phy, &
p8w, t8w, dz8w, &
curr_secs2, &
diag_flag, &
ids, ide, jds, jde, kds, kde, &
ims, ime, jms, jme, kms, kme, &
ips, ipe, jps, jpe, kps, kpe, &
imsx, imex, jmsx, jmex, kmsx, kmex, &
ipsx, ipex, jpsx, jpex, kpsx, kpex, &
imsy, imey, jmsy, jmey, kmsy, kmey, &
ipsy, ipey, jpsy, jpey, kpsy, kpey )
END SUBROUTINE after_all_rk_steps
END MODULE module_after_all_rk_steps