C $Header: /u/gcmpack/MITgcm/pkg/layers/LAYERS.h,v 1.17 2015/06/15 21:40:49 jmc Exp $ C $Name: $ #ifdef ALLOW_LAYERS C-- Header for LAYERS package. By Ryan Abernathey. C-- For computing volume fluxes in isopyncal layers C -- Parameters: C layers_num :: C layers_krho :: C layers_name :: C layers_bolus :: C layers_MNC :: C layers_MDSIO :: C layers_taveFreq :: C layers_diagFreq :: INTEGER layers_num(layers_maxNum), layers_krho(layers_maxNum) COMMON /LAYERS_PARM_I/ layers_num, layers_krho CHARACTER*(3) layers_name(layers_maxNum) COMMON /LAYERS_PARM_C/ layers_name LOGICAL layers_MNC, layers_MDSIO LOGICAL layers_bolus(layers_maxNum) COMMON /LAYERS_PARM_L/ layers_MNC, layers_MDSIO, & layers_bolus _RL layers_taveFreq, layers_diagFreq COMMON /LAYERS_PARM_RL/ layers_taveFreq, layers_diagFreq C -- Isopycnal grid parameters: C layers_bounds :: boundaries of tracer layers C dZZf :: height of fine grid cells C NZZ :: the number of levels to use in the fine grid C MapIndex :: indices for mapping ZZ to Z C MapFact :: factors for interpolating T(Z) to T(ZZ) _RL layers_bounds(Nlayers+1,layers_maxNum) _RL dZZf(FineGridMax) INTEGER MapIndex(FineGridMax), CellIndex(FineGridMax) _RL MapFact(FineGridMax) INTEGER NZZ COMMON /LAYERS_VERT_GRID_I/ & NZZ, MapIndex, CellIndex COMMON /LAYERS_VERT_GRID_R/ & MapFact, dZZf, layers_bounds C -- Thermodynamics fields C Right-hand-side tendency terms times thickness C C layers_TtendSurf :: Temperature tendency from surface forcing (m deg/s) C layers_TtendDiffh :: Temperature tendency from horizontal mixing (m deg/s) C layers_TtendDiffr :: Temperature tendency from vertical mixing (m deg/s) C layers_TtendAdvh :: Temperature tendency from horizontal advection (m deg/s) C layers_TtendAdvr :: Temperature tendency from vertical advection (m deg/s) C layers_StendSurf :: Salinity tendency from surface forcing (m PSU/s) C layers_StendDiffh :: Salinity tendency from horizontal mixing (m PSU/s) C layers_StendDiffr :: Salinity tendency from vertical mixing (m PSU/s) C layers_StendAdvh :: Salinity tendency from horizontal advection (m PSU/s) C layers_StendAdvr :: Salinity tendency from vertical advection (m PSU/s) C -- The following are temporary arrays that need to be stored. C -- They are in regular vertical coordinates. C -- The fourth index is tracer id: 1 for T and 2 for S C layers_surfflux :: surface temperature flux (same as diagnostics TFLUX and SFLUX) C layers_dfx :: zonal diffusive flux of T / S C layers_dfy :: meridional diffusive flux of T / S C layers_dfr :: vertical diffusive flux of T / S C layers_afx :: zonal advective flux of T / S C layers_afy :: meridional advective flux of T / S C layers_afr :: vertical advective flux of T / S C -- to save memory, the same arrays are converted in place to divergences C C -- We also need the thermal / saline expansion coefficients for diapycnal fluxes C layers_alpha :: alpha factor for density eqn (-drhodT/rho) C layers_beta :: alpha factor for density eqn (-drhodS/rho) # ifdef LAYERS_THERMODYNAMICS COMMON /LAYERS_VAR_THERMODYNAMICS/ & layers_bounds_w, layers_recip_delta, & layers_TtendSurf, layers_TtendDiffh, layers_TtendDiffr, & layers_TtendAdvh, layers_TtendAdvr, layers_Ttendtot, & layers_StendSurf, layers_StendDiffh, layers_StendDiffr, & layers_StendAdvh, layers_StendAdvr, layers_Stendtot, & layers_Hc, layers_PIc, & layers_Hcw, & layers_surfflux, layers_dfx, layers_dfy, layers_dfr, & layers_afx, layers_afy, layers_afr, layers_tottend _RL layers_bounds_w(Nlayers, layers_maxNum) _RL layers_recip_delta(Nlayers-1, layers_maxNum) _RL layers_TtendSurf (1-OLx:sNx+OLx,1-OLy:sNy+OLy, & Nlayers-1,nSx,nSy) _RL layers_Ttendtot(1-OLx:sNx+OLx,1-OLy:sNy+OLy, & Nlayers-1,nSx,nSy) _RL layers_TtendDiffh(1-OLx:sNx+OLx,1-OLy:sNy+OLy, & Nlayers-1,nSx,nSy) _RL layers_TtendDiffr(1-OLx:sNx+OLx,1-OLy:sNy+OLy, & Nlayers-1,nSx,nSy) _RL layers_TtendAdvh(1-OLx:sNx+OLx,1-OLy:sNy+OLy, & Nlayers-1,nSx,nSy) _RL layers_TtendAdvr(1-OLx:sNx+OLx,1-OLy:sNy+OLy, & Nlayers-1,nSx,nSy) _RL layers_StendSurf (1-OLx:sNx+OLx,1-OLy:sNy+OLy, & Nlayers-1,nSx,nSy) _RL layers_Stendtot(1-OLx:sNx+OLx,1-OLy:sNy+OLy, & Nlayers-1,nSx,nSy) _RL layers_StendDiffh(1-OLx:sNx+OLx,1-OLy:sNy+OLy, & Nlayers-1,nSx,nSy) _RL layers_StendDiffr(1-OLx:sNx+OLx,1-OLy:sNy+OLy, & Nlayers-1,nSx,nSy) _RL layers_StendAdvh(1-OLx:sNx+OLx,1-OLy:sNy+OLy, & Nlayers-1,nSx,nSy) _RL layers_StendAdvr(1-OLx:sNx+OLx,1-OLy:sNy+OLy, & Nlayers-1,nSx,nSy) _RL layers_Hcw(1-OLx:sNx+OLx,1-OLy:sNy+OLy, & Nlayers-1,nSx,nSy) _RL layers_Hc(1-OLx:sNx+OLx,1-OLy:sNy+OLy, & Nlayers,nSx,nSy) _RL layers_PIc(1-OLx:sNx+OLx,1-OLy:sNy+OLy, & Nlayers,nSx,nSy) _RL layers_surfflux(1-OLx:sNx+OLx,1-OLy:sNy+OLy,1,2,nSx,nSy) _RL layers_dfx(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,2,nSx,nSy) _RL layers_dfy(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,2,nSx,nSy) _RL layers_dfr(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,2,nSx,nSy) _RL layers_afx(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,2,nSx,nSy) _RL layers_afy(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,2,nSx,nSy) _RL layers_afr(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,2,nSx,nSy) _RL layers_tottend(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,2,nSx,nSy) #ifdef SHORTWAVE_HEATING COMMON /LAYERS_SW/ layers_sw _RL layers_sw(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,1,nSx,nSy) #endif /* LAYERS_SHORTWAVE */ #ifdef LAYERS_PRHO_REF COMMON /LAYERS_VAR_THERMODYNAMICS_PRHO/ & layers_alpha, layers_beta _RL layers_alpha(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy) _RL layers_beta(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy) #endif # endif /* LAYERS_THERMODYAMICS */ #ifdef ALLOW_TIMEAVE C-- The same variables, time-averaged C Keep track of time _RL layers_TimeAve(nSx,nSy) COMMON /LAYERS_TAVE/ layers_TimeAve #ifdef LAYERS_UFLUX _RL layers_UH_T(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nlayers, & nSx,nSy) #ifdef LAYERS_THICKNESS _RL layers_Hw_T(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nlayers, & nSx,nSy) COMMON /LAYERS_U_TAVE/ layers_UH_T, & layers_Hw_T #else /* LAYERS_THICKNESS */ COMMON /LAYERS_U_TAVE/ layers_UH_T #endif /* LAYERS_THICKNESS */ #endif /* LAYERS_UFLUX */ #ifdef LAYERS_VFLUX _RL layers_VH_T(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nlayers, & nSx,nSy) #ifdef LAYERS_THICKNESS _RL layers_Hs_T(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nlayers, & nSx,nSy) COMMON /LAYERS_V_TAVE/ layers_VH_T, & layers_Hs_T #else /* LAYERS_THICKNESS */ COMMON /LAYERS_V_TAVE/ layers_VH_T #endif /* LAYERS_THICKNESS */ #endif /* LAYERS_VFLUX */ #ifdef LAYERS_PRHO_REF _RL prho_tave(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy) COMMON /LAYERS_RPHO_TAVE/ prho_tave #endif #endif /* ALLOW_TIMEAVE */ #endif /* ALLOW_LAYERS */