File indexing completed on 2018-03-02 18:45:56 UTC
view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
2e2b97e510 Jean*0001 #include "CPP_OPTIONS.h"
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014 SUBROUTINE APPLY_FORCING_U(
0015 U gU_arr,
0016 I iMin,iMax,jMin,jMax, k, bi, bj,
0017 I myTime, myIter, myThid )
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029 IMPLICIT NONE
0030
0031 #include "SIZE.h"
0032 #include "EEPARAMS.h"
0033 #include "PARAMS.h"
0034 #include "GRID.h"
0035 #include "SURFACE.h"
0036 #include "DYNVARS.h"
0037 #include "FFIELDS.h"
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048 _RL gU_arr(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0049 INTEGER iMin, iMax, jMin, jMax
0050 INTEGER k, bi, bj
0051 _RL myTime
0052 INTEGER myIter
0053 INTEGER myThid
0054
0055
0056
0057 INTEGER i, j
0058
0059 _RL recip_P0g, termP, rFullDepth
0060 _RL kV, kF, sigma_b
0061
0062
0063 kF = 1. _d 0/86400. _d 0
0064 sigma_b = 0.7 _d 0
0065 rFullDepth = rF(1)-rF(Nr+1)
0066
0067
0068 DO j=0,sNy+1
0069 DO i=1,sNx+1
0070 IF ( maskW(i,j,k,bi,bj).EQ.oneRS ) THEN
0071 IF ( selectSigmaCoord.EQ.0 ) THEN
0072 recip_P0g = MAX(recip_Rcol(i,j,bi,bj),recip_Rcol(i-1,j,bi,bj))
0073 termP = 0.5 _d 0*( MIN( rF(k)*recip_P0g, oneRL )
0074 & +rF(k+1)*recip_P0g )
0075
0076 ELSE
0077
0078
0079
0080
0081
0082
0083
0084
0085 termP = aHybSigmC(k)*rFullDepth
0086 #ifdef NONLIN_FRSURF
0087 & /(etaHw(i,j,bi,bj)+rSurfW(i,j,bi,bj)-rLowW(i,j,bi,bj))
0088 #else
0089 & /(rSurfW(i,j,bi,bj)-rLowW(i,j,bi,bj))
0090 #endif
0091 & + bHybSigmC(k)
0092 ENDIF
0093 kV = kF*MAX( zeroRL, (termP-sigma_b)/(1. _d 0-sigma_b) )
0094 gU_arr(i,j) = gU_arr(i,j)
0095 & - kV*uVel(i,j,k,bi,bj)
0096 ENDIF
0097 ENDDO
0098 ENDDO
0099
0100 RETURN
0101 END
0102
0103
0104
0105
0106
0107 SUBROUTINE APPLY_FORCING_V(
0108 U gV_arr,
0109 I iMin,iMax,jMin,jMax, k, bi, bj,
0110 I myTime, myIter, myThid )
0111
0112
0113
0114
0115
0116
0117
0118
0119
0120
0121
0122 IMPLICIT NONE
0123
0124 #include "SIZE.h"
0125 #include "EEPARAMS.h"
0126 #include "PARAMS.h"
0127 #include "GRID.h"
0128 #include "SURFACE.h"
0129 #include "DYNVARS.h"
0130 #include "FFIELDS.h"
0131
0132
0133
0134
0135
0136
0137
0138
0139
0140
0141 _RL gV_arr(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0142 INTEGER iMin, iMax, jMin, jMax
0143 INTEGER k, bi, bj
0144 _RL myTime
0145 INTEGER myIter
0146 INTEGER myThid
0147
0148
0149
0150 INTEGER i, j
0151
0152 _RL recip_P0g, termP, rFullDepth
0153 _RL kV, kF, sigma_b
0154
0155
0156 kF = 1. _d 0/86400. _d 0
0157 sigma_b = 0.7 _d 0
0158 rFullDepth = rF(1)-rF(Nr+1)
0159 DO j=1,sNy+1
0160
0161
0162 DO i=0,sNx+1
0163 IF ( maskS(i,j,k,bi,bj).EQ.oneRS ) THEN
0164 IF ( selectSigmaCoord.EQ.0 ) THEN
0165 recip_P0g = MAX(recip_Rcol(i,j,bi,bj),recip_Rcol(i,j-1,bi,bj))
0166 termP = 0.5 _d 0*( MIN( rF(k)*recip_P0g, oneRL )
0167 & +rF(k+1)*recip_P0g )
0168
0169 ELSE
0170
0171
0172
0173
0174
0175
0176
0177
0178 termP = aHybSigmC(k)*rFullDepth
0179 #ifdef NONLIN_FRSURF
0180 & /(etaHs(i,j,bi,bj)+rSurfS(i,j,bi,bj)-rLowS(i,j,bi,bj))
0181 #else
0182 & /(rSurfS(i,j,bi,bj)-rLowS(i,j,bi,bj))
0183 #endif
0184 & + bHybSigmC(k)
0185 ENDIF
0186 kV = kF*MAX( zeroRL, (termP-sigma_b)/(1. _d 0-sigma_b) )
0187 gV_arr(i,j) = gV_arr(i,j)
0188 & - kV*vVel(i,j,k,bi,bj)
0189 ENDIF
0190 ENDDO
0191 ENDDO
0192
0193 RETURN
0194 END
0195
0196
0197
0198
0199
0200 SUBROUTINE APPLY_FORCING_T(
0201 U gT_arr,
0202 I iMin,iMax,jMin,jMax, k, bi, bj,
0203 I myTime, myIter, myThid )
0204
0205
0206
0207
0208
0209
0210
0211
0212
0213
0214
0215 IMPLICIT NONE
0216
0217 #include "SIZE.h"
0218 #include "EEPARAMS.h"
0219 #include "PARAMS.h"
0220 #include "GRID.h"
0221 #include "DYNVARS.h"
0222 #include "FFIELDS.h"
0223
0224
0225
0226
0227
0228
0229
0230
0231
0232
0233 _RL gT_arr(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0234 INTEGER iMin, iMax, jMin, jMax
0235 INTEGER k, bi, bj
0236 _RL myTime
0237 INTEGER myIter
0238 INTEGER myThid
0239
0240
0241
0242
0243 INTEGER i, j
0244
0245 _RL thetaLim, kT, ka, ks, sigma_b, term1, term2, thetaEq
0246 _RL termP, rFullDepth
0247
0248
0249 ka = 1. _d 0/(40. _d 0*86400. _d 0)
0250 ks = 1. _d 0/(4. _d 0 *86400. _d 0)
0251 sigma_b = 0.7 _d 0
0252 rFullDepth = rF(1)-rF(Nr+1)
0253 DO j=0,sNy+1
0254 DO i=0,sNx+1
0255 term1 = 60. _d 0*(SIN(yC(i,j,bi,bj)*deg2rad)**2)
0256 termP = 0.5 _d 0*( rF(k) + rF(k+1) )
0257 term2 = 10. _d 0*LOG(termP/atm_po)
0258 & *(COS(yC(i,j,bi,bj)*deg2rad)**2)
0259 thetaLim = 200. _d 0/ ((termP/atm_po)**atm_kappa)
0260 thetaEq = 315. _d 0 - term1 - term2
0261 thetaEq = MAX(thetaLim,thetaEq)
0262 IF ( selectSigmaCoord.EQ.0 ) THEN
0263 termP = 0.5 _d 0*( MIN(rF(k),Ro_surf(i,j,bi,bj))
0264 & + rF(k+1) )
0265 & *recip_Rcol(i,j,bi,bj)
0266 ELSE
0267
0268
0269
0270
0271
0272
0273
0274
0275 termP = aHybSigmC(k)*rFullDepth
0276 #ifdef NONLIN_FRSURF
0277 & /(etaH(i,j,bi,bj)+Ro_surf(i,j,bi,bj)-R_low(i,j,bi,bj))
0278 #else
0279 & /(Ro_surf(i,j,bi,bj)-R_low(i,j,bi,bj))
0280 #endif
0281 & + bHybSigmC(k)
0282 ENDIF
0283 kT = ka+(ks-ka)
0284 & *MAX( zeroRL, (termP-sigma_b)/(1. _d 0-sigma_b) )
0285 & *COS((yC(i,j,bi,bj)*deg2rad))**4
0286 gT_arr(i,j) = gT_arr(i,j)
0287 & - kT*( theta(i,j,k,bi,bj)-thetaEq )
0288 & *maskC(i,j,k,bi,bj)
0289 ENDDO
0290 ENDDO
0291
0292 RETURN
0293 END
0294
0295
0296
0297
0298
0299 SUBROUTINE APPLY_FORCING_S(
0300 U gS_arr,
0301 I iMin,iMax,jMin,jMax, k, bi, bj,
0302 I myTime, myIter, myThid )
0303
0304
0305
0306
0307
0308
0309
0310
0311
0312
0313
0314 IMPLICIT NONE
0315
0316 #include "SIZE.h"
0317 #include "EEPARAMS.h"
0318 #include "PARAMS.h"
0319 #include "GRID.h"
0320 #include "DYNVARS.h"
0321 #include "FFIELDS.h"
0322 #include "SURFACE.h"
0323
0324
0325
0326
0327
0328
0329
0330
0331
0332
0333 _RL gS_arr(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0334 INTEGER iMin, iMax, jMin, jMax
0335 INTEGER k, bi, bj
0336 _RL myTime
0337 INTEGER myIter
0338 INTEGER myThid
0339
0340
0341
0342
0343
0344
0345
0346
0347 RETURN
0348 END