Back to home page

MITgcm

 
 

    


File indexing completed on 2018-03-06 06:09:11 UTC

view on githubraw file Latest commit 963f7646 on 2018-03-04 02:01:56 UTC
108a00eab9 Ryan*0001 #ifdef ALLOW_LAYERS
                0002 
                0003 C--   Header for LAYERS package. By Ryan Abernathey.
                0004 C--   For computing volume fluxes in isopyncal layers
                0005 
2c2df907b2 Jean*0006 C --  Parameters:
                0007 C     layers_num      ::
                0008 C     layers_krho     ::
                0009 C     layers_name     ::
                0010 C     layers_bolus    ::
                0011 C     layers_MNC      ::
                0012 C     layers_MDSIO    ::
                0013 C     layers_taveFreq ::
                0014 C     layers_diagFreq ::
                0015 
406891c1a3 Gael*0016       INTEGER layers_num(layers_maxNum), layers_krho(layers_maxNum)
2c2df907b2 Jean*0017       COMMON /LAYERS_PARM_I/ layers_num, layers_krho
406891c1a3 Gael*0018 
                0019       CHARACTER*(3) layers_name(layers_maxNum)
                0020       COMMON /LAYERS_PARM_C/ layers_name
                0021 
2c2df907b2 Jean*0022       LOGICAL layers_MNC, layers_MDSIO
406891c1a3 Gael*0023       LOGICAL layers_bolus(layers_maxNum)
ed1e75b3e4 Jean*0024       COMMON /LAYERS_PARM_L/ layers_MNC, layers_MDSIO,
2c2df907b2 Jean*0025      &                       layers_bolus
                0026 
                0027       _RL layers_taveFreq, layers_diagFreq
                0028       COMMON /LAYERS_PARM_RL/ layers_taveFreq, layers_diagFreq
406891c1a3 Gael*0029 
ed1e75b3e4 Jean*0030 C --  Isopycnal grid parameters:
                0031 C      layers_bounds :: boundaries of tracer layers
                0032 C      dZZf     :: height of fine grid cells
                0033 C      NZZ      :: the number of levels to use in the fine grid
                0034 C      MapIndex :: indices for mapping ZZ to Z
                0035 C      MapFact  :: factors for interpolating T(Z) to T(ZZ)
108a00eab9 Ryan*0036 
2c2df907b2 Jean*0037       _RL layers_bounds(Nlayers+1,layers_maxNum)
ed1e75b3e4 Jean*0038       _RL dZZf(FineGridMax)
                0039       INTEGER MapIndex(FineGridMax), CellIndex(FineGridMax)
                0040       _RL MapFact(FineGridMax)
                0041       INTEGER NZZ
                0042       COMMON /LAYERS_VERT_GRID_I/
                0043      &      NZZ, MapIndex, CellIndex
                0044       COMMON /LAYERS_VERT_GRID_R/
2c2df907b2 Jean*0045      &      MapFact, dZZf, layers_bounds
ed1e75b3e4 Jean*0046 
cf336ab6c5 Ryan*0047 C -- Thermodynamics fields
                0048 C    Right-hand-side tendency terms times thickness
                0049 C
963f76462f chri*0050 C      layers_TtendSurf  :: Layer thickness tendency due to THETA surf. forc. (m/s)
                0051 C      layers_TtendDiffh :: Layer thickness tendency due to THETA horiz. diff. (m/s)
                0052 C      layers_TtendDiffr :: Layer thickness tendency due to THETA vert. diff. (m/s)
                0053 C      layers_TtendAdvh  :: Layer thickness tendency due to THETA horiz. adv. (m/s)
                0054 C      layers_TtendAdvr  :: Layer thickness tendency due to THETA vert. adv. (m/s)
                0055 C      layers_StendSurf  :: Layer thickness tendency due to SALT surf. forc. (m/s)
                0056 C      layers_StendDiffh :: Layer thickness tendency due to SALT horiz. diff. (m/s)
                0057 C      layers_StendDiffr :: Layer thickness tendency due to SALT vert. diff. (m/s)
                0058 C      layers_StendAdvh  :: Layer thickness tendency due to SALT horiz. adv. (m/s)
                0059 C      layers_StendAdvr  :: Layer thickness tendency due to SALT vert. adv. (m/s)
cf336ab6c5 Ryan*0060 C  -- The following are temporary arrays that need to be stored.
                0061 C  -- They are in regular vertical coordinates.
                0062 C  -- The fourth index is tracer id: 1 for T and 2 for S
                0063 C      layers_surfflux   :: surface temperature flux (same as diagnostics TFLUX and SFLUX)
                0064 C      layers_dfx        :: zonal diffusive flux of T / S
                0065 C      layers_dfy        :: meridional diffusive flux of T / S
                0066 C      layers_dfr        :: vertical diffusive flux of T / S
50d8304171 Ryan*0067 C      layers_afx        :: zonal advective flux of T / S
                0068 C      layers_afy        :: meridional advective flux of T / S
                0069 C      layers_afr        :: vertical advective flux of T / S
cf336ab6c5 Ryan*0070 C  -- to save memory, the same arrays are converted in place to divergences
50d8304171 Ryan*0071 C
                0072 C  -- We also need the thermal / saline expansion coefficients for diapycnal fluxes
                0073 C      layers_alpha      :: alpha factor for density eqn (-drhodT/rho)
                0074 C      layers_beta       :: alpha factor for density eqn (-drhodS/rho)
cf336ab6c5 Ryan*0075 
                0076 # ifdef LAYERS_THERMODYNAMICS
                0077       COMMON /LAYERS_VAR_THERMODYNAMICS/
50d8304171 Ryan*0078      &    layers_bounds_w, layers_recip_delta,
cf336ab6c5 Ryan*0079      &    layers_TtendSurf, layers_TtendDiffh, layers_TtendDiffr,
50d8304171 Ryan*0080      &    layers_TtendAdvh, layers_TtendAdvr, layers_Ttendtot,
cf336ab6c5 Ryan*0081      &    layers_StendSurf, layers_StendDiffh, layers_StendDiffr,
50d8304171 Ryan*0082      &    layers_StendAdvh, layers_StendAdvr, layers_Stendtot,
cf336ab6c5 Ryan*0083      &    layers_Hc, layers_PIc,
50d8304171 Ryan*0084      &    layers_Hcw,
                0085      &    layers_surfflux, layers_dfx, layers_dfy, layers_dfr,
                0086      &    layers_afx, layers_afy, layers_afr, layers_tottend
2c2df907b2 Jean*0087       _RL layers_bounds_w(Nlayers, layers_maxNum)
                0088       _RL layers_recip_delta(Nlayers-1, layers_maxNum)
cf336ab6c5 Ryan*0089       _RL layers_TtendSurf (1-OLx:sNx+OLx,1-OLy:sNy+OLy,
50d8304171 Ryan*0090      &                                         Nlayers-1,nSx,nSy)
                0091       _RL layers_Ttendtot(1-OLx:sNx+OLx,1-OLy:sNy+OLy,
                0092      &                                         Nlayers-1,nSx,nSy)
cf336ab6c5 Ryan*0093       _RL layers_TtendDiffh(1-OLx:sNx+OLx,1-OLy:sNy+OLy,
50d8304171 Ryan*0094      &                                         Nlayers-1,nSx,nSy)
cf336ab6c5 Ryan*0095       _RL layers_TtendDiffr(1-OLx:sNx+OLx,1-OLy:sNy+OLy,
50d8304171 Ryan*0096      &                                         Nlayers-1,nSx,nSy)
                0097       _RL layers_TtendAdvh(1-OLx:sNx+OLx,1-OLy:sNy+OLy,
                0098      &                                         Nlayers-1,nSx,nSy)
                0099       _RL layers_TtendAdvr(1-OLx:sNx+OLx,1-OLy:sNy+OLy,
                0100      &                                         Nlayers-1,nSx,nSy)
cf336ab6c5 Ryan*0101       _RL layers_StendSurf (1-OLx:sNx+OLx,1-OLy:sNy+OLy,
50d8304171 Ryan*0102      &                                         Nlayers-1,nSx,nSy)
                0103       _RL layers_Stendtot(1-OLx:sNx+OLx,1-OLy:sNy+OLy,
                0104      &                                         Nlayers-1,nSx,nSy)
cf336ab6c5 Ryan*0105       _RL layers_StendDiffh(1-OLx:sNx+OLx,1-OLy:sNy+OLy,
50d8304171 Ryan*0106      &                                         Nlayers-1,nSx,nSy)
cf336ab6c5 Ryan*0107       _RL layers_StendDiffr(1-OLx:sNx+OLx,1-OLy:sNy+OLy,
2c2df907b2 Jean*0108      &                                         Nlayers-1,nSx,nSy)
50d8304171 Ryan*0109       _RL layers_StendAdvh(1-OLx:sNx+OLx,1-OLy:sNy+OLy,
                0110      &                                         Nlayers-1,nSx,nSy)
                0111       _RL layers_StendAdvr(1-OLx:sNx+OLx,1-OLy:sNy+OLy,
2c2df907b2 Jean*0112      &                                         Nlayers-1,nSx,nSy)
50d8304171 Ryan*0113       _RL layers_Hcw(1-OLx:sNx+OLx,1-OLy:sNy+OLy,
2c2df907b2 Jean*0114      &                                         Nlayers-1,nSx,nSy)
cf336ab6c5 Ryan*0115       _RL layers_Hc(1-OLx:sNx+OLx,1-OLy:sNy+OLy,
2c2df907b2 Jean*0116      &                                         Nlayers,nSx,nSy)
cf336ab6c5 Ryan*0117       _RL layers_PIc(1-OLx:sNx+OLx,1-OLy:sNy+OLy,
2c2df907b2 Jean*0118      &                                         Nlayers,nSx,nSy)
cf336ab6c5 Ryan*0119       _RL layers_surfflux(1-OLx:sNx+OLx,1-OLy:sNy+OLy,1,2,nSx,nSy)
                0120       _RL layers_dfx(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,2,nSx,nSy)
                0121       _RL layers_dfy(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,2,nSx,nSy)
                0122       _RL layers_dfr(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,2,nSx,nSy)
50d8304171 Ryan*0123       _RL layers_afx(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,2,nSx,nSy)
                0124       _RL layers_afy(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,2,nSx,nSy)
                0125       _RL layers_afr(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,2,nSx,nSy)
                0126       _RL layers_tottend(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,2,nSx,nSy)
                0127 
                0128 #ifdef SHORTWAVE_HEATING
                0129       COMMON /LAYERS_SW/ layers_sw
                0130       _RL layers_sw(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,1,nSx,nSy)
                0131 #endif /* LAYERS_SHORTWAVE */
                0132 
                0133 #ifdef LAYERS_PRHO_REF
                0134       COMMON /LAYERS_VAR_THERMODYNAMICS_PRHO/
                0135      & layers_alpha, layers_beta
                0136       _RL layers_alpha(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
                0137       _RL layers_beta(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
                0138 #endif
                0139 
cf336ab6c5 Ryan*0140 # endif /* LAYERS_THERMODYAMICS */
                0141 
108a00eab9 Ryan*0142 #ifdef ALLOW_TIMEAVE
b0b5937c88 Jean*0143 C-- The same variables, time-averaged
108a00eab9 Ryan*0144 
                0145 C     Keep track of time
b0b5937c88 Jean*0146       _RL layers_TimeAve(nSx,nSy)
108a00eab9 Ryan*0147       COMMON /LAYERS_TAVE/ layers_TimeAve
                0148 
                0149 #ifdef LAYERS_UFLUX
655b2cc557 Ryan*0150       _RL layers_UH_T(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nlayers,
406891c1a3 Gael*0151      &                   nSx,nSy)
108a00eab9 Ryan*0152 #ifdef LAYERS_THICKNESS
655b2cc557 Ryan*0153       _RL layers_Hw_T(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nlayers,
                0154      &                   nSx,nSy)
ed1e75b3e4 Jean*0155       COMMON /LAYERS_U_TAVE/ layers_UH_T,
586e075d05 Ryan*0156      &    layers_Hw_T
ed1e75b3e4 Jean*0157 #else  /* LAYERS_THICKNESS */
655b2cc557 Ryan*0158       COMMON /LAYERS_U_TAVE/ layers_UH_T
108a00eab9 Ryan*0159 #endif /* LAYERS_THICKNESS */
                0160 #endif /* LAYERS_UFLUX */
                0161 
                0162 #ifdef LAYERS_VFLUX
655b2cc557 Ryan*0163       _RL layers_VH_T(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nlayers,
406891c1a3 Gael*0164      &                   nSx,nSy)
108a00eab9 Ryan*0165 #ifdef LAYERS_THICKNESS
655b2cc557 Ryan*0166       _RL layers_Hs_T(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nlayers,
                0167      &                   nSx,nSy)
ed1e75b3e4 Jean*0168       COMMON /LAYERS_V_TAVE/ layers_VH_T,
586e075d05 Ryan*0169      &    layers_Hs_T
ed1e75b3e4 Jean*0170 #else  /* LAYERS_THICKNESS */
655b2cc557 Ryan*0171       COMMON /LAYERS_V_TAVE/ layers_VH_T
108a00eab9 Ryan*0172 #endif /* LAYERS_THICKNESS */
                0173 #endif /* LAYERS_VFLUX */
                0174 
17ce8d85dd Davi*0175 #ifdef LAYERS_PRHO_REF
                0176       _RL prho_tave(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
                0177       COMMON /LAYERS_RPHO_TAVE/ prho_tave
                0178 #endif
                0179 
108a00eab9 Ryan*0180 #endif /* ALLOW_TIMEAVE */
                0181 
                0182 #endif /* ALLOW_LAYERS */