File indexing completed on 2018-03-02 18:40:27 UTC
view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
a456aa407c Andr*0001 #include "FIZHI_OPTIONS.h"
beaae9fcda Jean*0002 SUBROUTINE fizhi_tendency_apply_u(
73b1dccda0 Jean*0003 U gU_arr,
0004 I iMin,iMax,jMin,jMax, kLev, bi, bj,
0005 I myTime, myIter, myThid )
e337e4ca8c Andr*0006
0007
0008
0009
73b1dccda0 Jean*0010
0011
e337e4ca8c Andr*0012
0013
0014
0015
0016
0017
0018
0019
0020
beaae9fcda Jean*0021 IMPLICIT NONE
e337e4ca8c Andr*0022
0023 #include "SIZE.h"
0024 #include "GRID.h"
0025 #include "EEPARAMS.h"
0026 #include "DYNVARS.h"
0027 #include "fizhi_SIZE.h"
f4a0368053 Andr*0028 #include "fizhi_land_SIZE.h"
e337e4ca8c Andr*0029 #include "fizhi_coms.h"
0030
73b1dccda0 Jean*0031 _RL gU_arr(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0032 INTEGER iMin, iMax, jMin, jMax
0033 INTEGER kLev, bi, bj
0034 _RL myTime
0035 INTEGER myIter
0036 INTEGER myThid
e337e4ca8c Andr*0037
73b1dccda0 Jean*0038 _RL rayleighdrag
0039 _RL tmpdiag(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
beaae9fcda Jean*0040 INTEGER i, j
3f756368dc Andr*0041 #ifdef ALLOW_DIAGNOSTICS
beaae9fcda Jean*0042 LOGICAL DIAGNOSTICS_IS_ON
0043 EXTERNAL DIAGNOSTICS_IS_ON
3f756368dc Andr*0044 #endif
e337e4ca8c Andr*0045
beaae9fcda Jean*0046 IF ( klev.EQ.Nr .OR. rC(klev).LT.1000. ) THEN
689620ef36 Andr*0047 rayleighdrag = 1./(31.*86400.*2.)
beaae9fcda Jean*0048 ELSE
689620ef36 Andr*0049 rayleighdrag = 0.
beaae9fcda Jean*0050 ENDIF
689620ef36 Andr*0051
beaae9fcda Jean*0052 DO j=jMin,jMax
0053 DO i=iMin,iMax
0054 gU_arr(i,j) = gU_arr(i,j)
0055 & + maskW(i,j,kLev,bi,bj)
0056 & *( guphy(i,j,kLev,bi,bj)
0057 & - rayleighdrag*uVel(i,j,kLev,bi,bj) )
0058 ENDDO
0059 ENDDO
e337e4ca8c Andr*0060
beaae9fcda Jean*0061 IF ( DIAGNOSTICS_IS_ON('DIABUDYN',myThid) ) THEN
0062 DO j=jMin,jMax
0063 DO i=iMin,iMax
0064 tmpdiag(i,j) = maskW(i,j,kLev,bi,bj)
0065 & *( guphy(i,j,kLev,bi,bj)
0066 & - rayleighdrag*uVel(i,j,kLev,bi,bj) )
0067 & * 86400
0068 ENDDO
0069 ENDDO
0070 CALL DIAGNOSTICS_FILL(tmpdiag,'DIABUDYN',kLev,1,2,bi,bj,myThid)
0071 ENDIF
3f756368dc Andr*0072
beaae9fcda Jean*0073 IF ( DIAGNOSTICS_IS_ON('RFU ',myThid) ) THEN
0074 DO j=jMin,jMax
0075 DO i=iMin,iMax
73b1dccda0 Jean*0076 tmpdiag(i,j) = -1. _d 0 * rayleighdrag *
beaae9fcda Jean*0077 & maskW(i,j,kLev,bi,bj)*uVel(i,j,kLev,bi,bj) * 86400
0078 ENDDO
0079 ENDDO
0080 CALL DIAGNOSTICS_FILL(tmpdiag,'RFU ',kLev,1,2,bi,bj,myThid)
0081 ENDIF
3f756368dc Andr*0082
beaae9fcda Jean*0083 RETURN
0084 END
0085 SUBROUTINE fizhi_tendency_apply_v(
73b1dccda0 Jean*0086 U gV_arr,
0087 I iMin,iMax,jMin,jMax, kLev, bi, bj,
0088 I myTime, myIter, myThid )
e337e4ca8c Andr*0089
0090
0091
0092
73b1dccda0 Jean*0093
0094
e337e4ca8c Andr*0095
0096
0097
0098
0099
0100
0101
0102
0103
beaae9fcda Jean*0104 IMPLICIT NONE
e337e4ca8c Andr*0105
0106 #include "SIZE.h"
0107 #include "GRID.h"
0108 #include "EEPARAMS.h"
0109 #include "DYNVARS.h"
0110 #include "fizhi_SIZE.h"
f4a0368053 Andr*0111 #include "fizhi_land_SIZE.h"
e337e4ca8c Andr*0112 #include "fizhi_coms.h"
0113
73b1dccda0 Jean*0114 _RL gV_arr(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0115 INTEGER iMin, iMax, jMin, jMax
0116 INTEGER kLev, bi, bj
0117 _RL myTime
0118 INTEGER myIter
0119 INTEGER myThid
e337e4ca8c Andr*0120
73b1dccda0 Jean*0121 _RL rayleighdrag
0122 _RL tmpdiag(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
beaae9fcda Jean*0123 INTEGER i, j
3f756368dc Andr*0124 #ifdef ALLOW_DIAGNOSTICS
beaae9fcda Jean*0125 LOGICAL DIAGNOSTICS_IS_ON
0126 EXTERNAL DIAGNOSTICS_IS_ON
3f756368dc Andr*0127 #endif
e337e4ca8c Andr*0128
beaae9fcda Jean*0129 IF ( klev.EQ.Nr .OR. rC(klev).LT.1000. ) THEN
689620ef36 Andr*0130 rayleighdrag = 1./(31.*86400.*2.)
beaae9fcda Jean*0131 ELSE
689620ef36 Andr*0132 rayleighdrag = 0.
beaae9fcda Jean*0133 ENDIF
689620ef36 Andr*0134
beaae9fcda Jean*0135 DO j=jMin,jMax
0136 DO i=iMin,iMax
0137 gV_arr(i,j) = gV_arr(i,j)
0138 & + maskS(i,j,kLev,bi,bj)
0139 & *( gvphy(i,j,kLev,bi,bj)
0140 & - rayleighdrag*vVel(i,j,kLev,bi,bj) )
0141 ENDDO
0142 ENDDO
e337e4ca8c Andr*0143
beaae9fcda Jean*0144 IF ( DIAGNOSTICS_IS_ON('DIABVDYN',myThid) ) THEN
0145 DO j=jMin,jMax
0146 DO i=iMin,iMax
0147 tmpdiag(i,j) = maskS(i,j,kLev,bi,bj)
0148 & *( gvphy(i,j,kLev,bi,bj)
0149 & - rayleighdrag*vVel(i,j,kLev,bi,bj) )
0150 & * 86400
0151 ENDDO
0152 ENDDO
0153 CALL DIAGNOSTICS_FILL(tmpdiag,'DIABVDYN',kLev,1,2,bi,bj,myThid)
0154 ENDIF
3f756368dc Andr*0155
beaae9fcda Jean*0156 IF ( DIAGNOSTICS_IS_ON('RFV ',myThid) ) THEN
0157 DO j=jMin,jMax
0158 DO i=iMin,iMax
73b1dccda0 Jean*0159 tmpdiag(i,j) = -1. _d 0 * rayleighdrag *
beaae9fcda Jean*0160 & maskS(i,j,kLev,bi,bj)*vVel(i,j,kLev,bi,bj) * 86400
0161 ENDDO
0162 ENDDO
0163 CALL DIAGNOSTICS_FILL(tmpdiag,'RFV ',kLev,1,2,bi,bj,myThid)
0164 ENDIF
3f756368dc Andr*0165
beaae9fcda Jean*0166 RETURN
0167 END
0168 SUBROUTINE fizhi_tendency_apply_t(
73b1dccda0 Jean*0169 U gT_arr,
0170 I iMin,iMax,jMin,jMax, kLev, bi, bj,
0171 I myTime, myIter, myThid )
e337e4ca8c Andr*0172
0173
0174
0175
73b1dccda0 Jean*0176
0177
e337e4ca8c Andr*0178
0179
0180
0181
0182
0183
0184
0185
beaae9fcda Jean*0186 IMPLICIT NONE
e337e4ca8c Andr*0187
0188 #include "SIZE.h"
0189 #include "GRID.h"
0190 #include "EEPARAMS.h"
0191 #include "DYNVARS.h"
0192 #include "fizhi_SIZE.h"
f4a0368053 Andr*0193 #include "fizhi_land_SIZE.h"
e337e4ca8c Andr*0194 #include "fizhi_coms.h"
0195
73b1dccda0 Jean*0196 _RL gT_arr(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0197 INTEGER iMin, iMax, jMin, jMax
0198 INTEGER kLev, bi, bj
0199 _RL myTime
0200 INTEGER myIter
0201 INTEGER myThid
e337e4ca8c Andr*0202
73b1dccda0 Jean*0203 _RL rayleighdrag,getcon,cp,kappa,pNrkappa
0204 _RL tmpdiag(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
beaae9fcda Jean*0205 INTEGER i, j
3f756368dc Andr*0206 #ifdef ALLOW_DIAGNOSTICS
beaae9fcda Jean*0207 LOGICAL DIAGNOSTICS_IS_ON
0208 EXTERNAL DIAGNOSTICS_IS_ON
3f756368dc Andr*0209 #endif
e337e4ca8c Andr*0210
beaae9fcda Jean*0211 IF ( klev.EQ.Nr .OR. rC(klev).LT.1000. ) THEN
689620ef36 Andr*0212 cp = getcon('CP')
0213 kappa = getcon('KAPPA')
73b1dccda0 Jean*0214 pNrkappa = (rC(klev)/100000.)**kappa
689620ef36 Andr*0215 rayleighdrag = 1./((31.*86400.*2.)*(pNrkappa*cp))
beaae9fcda Jean*0216 ELSE
689620ef36 Andr*0217 rayleighdrag = 0.
beaae9fcda Jean*0218 ENDIF
689620ef36 Andr*0219
beaae9fcda Jean*0220 DO j=jMin,jMax
0221 DO i=iMin,iMax
0222 gT_arr(i,j) = gT_arr(i,j)
0223 & + ( maskC(i,j,kLev,bi,bj)*gthphy(i,j,kLev,bi,bj)
0224 & + rayleighdrag * 0.5
0225 & *( maskW(i,j,kLev,bi,bj)
0226 & *uVel(i,j,kLev,bi,bj)*uVel(i,j,kLev,bi,bj)
0227 & + maskW(i+1,j,kLev,bi,bj)
0228 & *uVel(i+1,j,kLev,bi,bj)*uVel(i+1,j,kLev,bi,bj)
0229 & + maskS(i,j,kLev,bi,bj)
0230 & *vVel(i,j,kLev,bi,bj)*vVel(i,j,kLev,bi,bj)
0231 & + maskS(i,j+1,kLev,bi,bj)
0232 & *vVel(i,j+1,kLev,bi,bj)*vVel(i,j+1,kLev,bi,bj)
0233 & ) )
0234 ENDDO
0235 ENDDO
e337e4ca8c Andr*0236
beaae9fcda Jean*0237 IF ( DIAGNOSTICS_IS_ON('DIABTDYN',myThid) ) THEN
0238 DO j=jMin,jMax
0239 DO i=iMin,iMax
0240 tmpdiag(i,j) =
0241 & ( maskC(i,j,kLev,bi,bj)*gthphy(i,j,kLev,bi,bj)
0242 & + rayleighdrag * 0.5
0243 & *( maskW(i,j,kLev,bi,bj)
0244 & *uVel(i,j,kLev,bi,bj)*uVel(i,j,kLev,bi,bj)
0245 & + maskW(i+1,j,kLev,bi,bj)
0246 & *uVel(i+1,j,kLev,bi,bj)*uVel(i+1,j,kLev,bi,bj)
0247 & + maskS(i,j,kLev,bi,bj)
0248 & *vVel(i,j,kLev,bi,bj)*vVel(i,j,kLev,bi,bj)
0249 & + maskS(i,j+1,kLev,bi,bj)
0250 & *vVel(i,j+1,kLev,bi,bj)*vVel(i,j+1,kLev,bi,bj)
0251 & ) ) * 86400
0252 ENDDO
0253 ENDDO
0254 CALL DIAGNOSTICS_FILL(tmpdiag,'DIABTDYN',kLev,1,2,bi,bj,myThid)
0255 ENDIF
3f756368dc Andr*0256
beaae9fcda Jean*0257 IF ( DIAGNOSTICS_IS_ON('RFT ',myThid) ) THEN
0258 DO j=jMin,jMax
0259 DO i=iMin,iMax
0260 tmpdiag(i,j) = ( rayleighdrag * 0.5
0261 & *( maskW(i,j,kLev,bi,bj)
0262 & *uVel(i,j,kLev,bi,bj)*uVel(i,j,kLev,bi,bj)
0263 & + maskW(i+1,j,kLev,bi,bj)
0264 & *uVel(i+1,j,kLev,bi,bj)*uVel(i+1,j,kLev,bi,bj)
0265 & + maskS(i,j,kLev,bi,bj)
0266 & *vVel(i,j,kLev,bi,bj)*vVel(i,j,kLev,bi,bj)
0267 & + maskS(i,j+1,kLev,bi,bj)
0268 & *vVel(i,j+1,kLev,bi,bj)*vVel(i,j+1,kLev,bi,bj)
0269 & ) ) * 86400
0270 ENDDO
0271 ENDDO
0272 CALL DIAGNOSTICS_FILL(tmpdiag,'RFT ',kLev,1,2,bi,bj,myThid)
0273 ENDIF
3f756368dc Andr*0274
beaae9fcda Jean*0275 RETURN
0276 END
0277 SUBROUTINE fizhi_tendency_apply_s(
73b1dccda0 Jean*0278 U gS_arr,
0279 I iMin,iMax,jMin,jMax, kLev, bi, bj,
0280 I myTime, myIter, myThid )
e337e4ca8c Andr*0281
0282
0283
0284
73b1dccda0 Jean*0285
0286
e337e4ca8c Andr*0287
0288
0289
0290
0291
0292
0293
0294
beaae9fcda Jean*0295 IMPLICIT NONE
e337e4ca8c Andr*0296
0297 #include "SIZE.h"
0298 #include "GRID.h"
0299 #include "EEPARAMS.h"
0300 #include "DYNVARS.h"
0301 #include "fizhi_SIZE.h"
f4a0368053 Andr*0302 #include "fizhi_land_SIZE.h"
e337e4ca8c Andr*0303 #include "fizhi_coms.h"
0304
73b1dccda0 Jean*0305 _RL gS_arr(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0306 INTEGER iMin, iMax, jMin, jMax
0307 INTEGER kLev, bi, bj
0308 _RL myTime
0309 INTEGER myIter
0310 INTEGER myThid
e337e4ca8c Andr*0311
73b1dccda0 Jean*0312 _RL tmpdiag(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
beaae9fcda Jean*0313 INTEGER i, j
3f756368dc Andr*0314 #ifdef ALLOW_DIAGNOSTICS
beaae9fcda Jean*0315 LOGICAL DIAGNOSTICS_IS_ON
0316 EXTERNAL DIAGNOSTICS_IS_ON
3f756368dc Andr*0317 #endif
e337e4ca8c Andr*0318
beaae9fcda Jean*0319 DO j=jMin,jMax
0320 DO i=iMin,iMax
0321 gS_arr(i,j) = gS_arr(i,j)
0322 & + maskC(i,j,kLev,bi,bj)*gsphy(i,j,kLev,bi,bj)
0323 ENDDO
0324 ENDDO
e337e4ca8c Andr*0325
beaae9fcda Jean*0326 IF ( DIAGNOSTICS_IS_ON('DIABQDYN',myThid) ) THEN
0327 DO j=jMin,jMax
0328 DO i=iMin,iMax
3f756368dc Andr*0329 tmpdiag(i,j) = ( maskC(i,j,kLev,bi,bj) * gsphy(i,j,kLev,bi,bj) )
beaae9fcda Jean*0330 & * 86400
0331 ENDDO
0332 ENDDO
0333 CALL DIAGNOSTICS_FILL(tmpdiag,'DIABQDYN',kLev,1,2,bi,bj,myThid)
0334 ENDIF
3f756368dc Andr*0335
beaae9fcda Jean*0336 RETURN
0337 END