@@ -29,7 +29,9 @@ SUBROUTINE LAYERS_CALC(
2929#ifdef ALLOW_GMREDI
3030# include " GMREDI.h"
3131#endif
32-
32+ #ifdef LAYERS_PRHO_REF
33+ # include " EOS.h"
34+ #endif
3335C !INPUT PARAMETERS:
3436C myTime :: Current time in simulation
3537C myIter :: Current iteration number
@@ -71,9 +73,9 @@ SUBROUTINE LAYERS_CALC(
7173 _RL layers_V (1 - OLx:sNx+ OLx,1 - OLy:sNy+ OLy,Nlayers,nSx,nSy)
7274# endif /* LAYERS_THICKNESS */
7375#endif /* LAYERS_VFLUX */
74- #ifdef LAYERS_PRHO_REF
76+ #if (defined LAYERS_PRHO_REF) || (defined MSE_LAYERS)
7577 _RL prho(1 - OLx:sNx+ OLx,1 - OLy:sNy+ OLy,Nr,nSx,nSy)
76- _RL rhoShift
78+ _RL rhoShift, conv_theta2T
7779 INTEGER i, j, k
7880#endif
7981C -- other local variables:
@@ -174,12 +176,21 @@ SUBROUTINE LAYERS_CALC(
174176 ENDDO
175177 ENDDO
176178 DO k = 1 ,Nr
177- CALL FIND_RHO_2D( 1 - OLx, sNx+ OLx, 1 - OLy, sNy+ OLy,
178- & layers_krho(iLa),
179- & theta(1 - OLx,1 - OLy,k,bi,bj),
180- & salt(1 - OLx,1 - OLy,k,bi,bj),
181- & prho(1 - OLx,1 - OLy,k,bi,bj),
182- & k, bi, bj, myThid )
179+ IF (equationOfState.EQ. ' LINEAR' ) THEN
180+ CALL FIND_RHO_2D( 1 - OLx, sNx+ OLx, 1 - OLy, sNy+ OLy,
181+ & k,
182+ & theta(1 - OLx,1 - OLy,k,bi,bj),
183+ & salt(1 - OLx,1 - OLy,k,bi,bj),
184+ & prho(1 - OLx,1 - OLy,k,bi,bj),
185+ & k, bi, bj, myThid )
186+ ELSE
187+ CALL FIND_RHO_2D( 1 - OLx, sNx+ OLx, 1 - OLy, sNy+ OLy,
188+ & layers_krho(iLa),
189+ & theta(1 - OLx,1 - OLy,k,bi,bj),
190+ & salt(1 - OLx,1 - OLy,k,bi,bj),
191+ & prho(1 - OLx,1 - OLy,k,bi,bj),
192+ & k, bi, bj, myThid )
193+ ENDIF
183194#ifdef LAYERS_THERMODYNAMICS
184195C -- it might be more memory efficient not to store alpha and beta
185196C but to multiply the fluxes in place here
@@ -218,6 +229,30 @@ SUBROUTINE LAYERS_CALC(
218229 & myThid)
219230#endif
220231#endif /* LAYERS_PRHO_REF */
232+ ELSEIF ( layers_num(iLa) .EQ. 4 ) THEN
233+ #ifdef MSE_LAYERS
234+ C For layers_num(iLa) = 4, calculate the absolute temperature referenced to 1000 mb
235+ DO bj= myByLo(myThid),myByHi(myThid)
236+ DO bi= myBxLo(myThid),myBxHi(myThid)
237+ DO k = 1 ,Nr
238+ conv_theta2T = (rC(k)/ atm_Po)** atm_kappa
239+ DO j = 1 - OLy,sNy+ OLy
240+ DO i = 1 - OLx,sNx+ OLx
241+ prho(i,j,k,bi,bj) = atm_Cp* conv_theta2T* theta(i,j,k,bi,bj)
242+ & + totPhiHyd(i,j,k,bi,bj) + phiRef(2 * k)
243+ & + 2501 . _d 0 * salt(i,j,k,bi,bj)
244+ ENDDO
245+ ENDDO
246+ ENDDO
247+ ENDDO
248+ ENDDO
249+ CALL LAYERS_FLUXCALC( uVel,vVel, prho, iLa,
250+ & layers_UH, layers_VH,
251+ & layers_Hw, layers_Hs,
252+ & layers_PIw,layers_PIs,
253+ & layers_U, layers_V,
254+ & myThid )
255+ #endif /* MSE_LAYERS */
221256 ENDIF
222257
223258C ---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
0 commit comments