File indexing completed on 2018-03-02 18:41:46 UTC
view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
cf336ab6c5 Ryan*0001 #include "LAYERS_OPTIONS.h"
0002
0003
0004
0005
0006
0007
0008
0009 SUBROUTINE LAYERS_CALC_RHS(
0010 I myThid )
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022 IMPLICIT NONE
0023
0024 #include "SIZE.h"
0025 #include "EEPARAMS.h"
0026 #include "PARAMS.h"
0027 #include "GRID.h"
50d8304171 Ryan*0028 #include "FFIELDS.h"
cf336ab6c5 Ryan*0029 #include "LAYERS_SIZE.h"
0030 #include "LAYERS.h"
0031
0032
0033
0034 INTEGER myThid
0035
0036
0037 #ifdef ALLOW_LAYERS
ee16a2cae4 Ryan*0038 #ifdef LAYERS_THERMODYNAMICS
cf336ab6c5 Ryan*0039
0040
0041
8d1543706e Jean*0042
cf336ab6c5 Ryan*0043
0044
8d1543706e Jean*0045
cf336ab6c5 Ryan*0046
0047
0048 INTEGER bi, bj
da9f56e003 Jean*0049 INTEGER i,j,k,kdown,iTracer
0050 _RL fluxfac(2), downfac, tmpfac
0051
50d8304171 Ryan*0052 _RL minusone
0053 PARAMETER (minusOne=-1.)
da9f56e003 Jean*0054 #ifdef SHORTWAVE_HEATING
0055 _RL swfracb(2)
0056 #endif
cf336ab6c5 Ryan*0057
0058
0059
0060 fluxfac(1) = 1.0/(HeatCapacity_Cp*rUnit2mass)
0061 fluxfac(2) = 1.0/rUnit2mass
0062
0063 DO bj = myByLo(myThid), myByHi(myThid)
8d1543706e Jean*0064 DO bi = myBxLo(myThid), myBxHi(myThid)
da9f56e003 Jean*0065
8d1543706e Jean*0066 DO iTracer = 1,2
da9f56e003 Jean*0067 k = 1
8d1543706e Jean*0068
cf336ab6c5 Ryan*0069 DO j=1-OLy,sNy+OLy
0070 DO i=1-OLx,sNx+OLx
50d8304171 Ryan*0071
0072 #ifdef SHORTWAVE_HEATING
0073
0074 IF (iTracer.EQ.1) THEN
0075 layers_surfflux(i,j,k,iTracer,bi,bj) =
0076 & layers_surfflux(i,j,k,iTracer,bi,bj)
0077
0078 & +Qsw(i,j,bi,bj)
0079 ENDIF
da9f56e003 Jean*0080 #endif /* SHORTWAVE_HEATING */
50d8304171 Ryan*0081
cf336ab6c5 Ryan*0082 layers_surfflux(i,j,k,iTracer,bi,bj) =
0083 & layers_surfflux(i,j,k,iTracer,bi,bj)
8d1543706e Jean*0084 & *recip_drF(1)*_recip_hFacC(i,j,1,bi,bj)
cf336ab6c5 Ryan*0085 & *fluxfac(iTracer)
0086 ENDDO
8d1543706e Jean*0087 ENDDO
da9f56e003 Jean*0088
cf336ab6c5 Ryan*0089
0090
0091
0092 DO k=1,Nr
0093 kdown= MIN(k+1,Nr)
0094 IF (k.EQ.Nr) THEN
0095 downfac = 0. _d 0
0096 ELSE
0097 downfac = 1. _d 0
8d1543706e Jean*0098 ENDIF
50d8304171 Ryan*0099 DO j=1-OLy,sNy+OLy-1
0100 DO i=1-OLx,sNx+OLx-1
0101
cf336ab6c5 Ryan*0102 tmpfac = -_recip_hFacC(i,j,k,bi,bj)*recip_drF(k)
0103 & *recip_rA(i,j,bi,bj)*recip_deepFac2C(k)*recip_rhoFacC(k)
0104 layers_dfx(i,j,k,iTracer,bi,bj) = maskInC(i,j,bi,bj) *
8d1543706e Jean*0105 & tmpfac * ( layers_dfx(i+1,j,k,iTracer,bi,bj) -
cf336ab6c5 Ryan*0106 & layers_dfx(i,j,k,iTracer,bi,bj) )
0107 layers_dfy(i,j,k,iTracer,bi,bj) = maskInC(i,j,bi,bj) *
8d1543706e Jean*0108 & tmpfac * ( layers_dfy(i,j+1,k,iTracer,bi,bj) -
0109 & layers_dfy(i,j,k,iTracer,bi,bj) )
cf336ab6c5 Ryan*0110 layers_dfr(i,j,k,iTracer,bi,bj) = tmpfac * rkSign *
0111 & ( layers_dfr(i,j,kdown,iTracer,bi,bj)*downfac -
0112 & layers_dfr(i,j,k,iTracer,bi,bj) )
50d8304171 Ryan*0113
0114 layers_afx(i,j,k,iTracer,bi,bj) = maskInC(i,j,bi,bj) *
0115 & tmpfac * ( layers_afx(i+1,j,k,iTracer,bi,bj) -
0116 & layers_afx(i,j,k,iTracer,bi,bj) )
0117 layers_afy(i,j,k,iTracer,bi,bj) = maskInC(i,j,bi,bj) *
0118 & tmpfac * ( layers_afy(i,j+1,k,iTracer,bi,bj) -
0119 & layers_afy(i,j,k,iTracer,bi,bj) )
0120 layers_afr(i,j,k,iTracer,bi,bj) = tmpfac * rkSign *
0121 & ( layers_afr(i,j,kdown,iTracer,bi,bj)*downfac -
0122 & layers_afr(i,j,k,iTracer,bi,bj) )
0123
0124 #ifdef SHORTWAVE_HEATING
da9f56e003 Jean*0125 IF (iTracer.EQ.1) THEN
50d8304171 Ryan*0126 swfracb(1)=abs(rF(k))
0127 swfracb(2)=abs(rF(k+1))
0128 CALL SWFRAC(
0129 I 2, minusOne,
0130 U swfracb,
0131 I 1.0, 1, myThid )
0132
0133
0134
0135
0136
0137
0138
0139
0140
0141
0142
0143
0144 IF (k.EQ.Nr) THEN
0145
0146 swfracb(2)=0. _d 0
0147 ENDIF
0148 layers_sw(i,j,k,iTracer,bi,bj) =
0149 & layers_sw(i,j,k,iTracer,bi,bj)
0150 & -Qsw(i,j,bi,bj)*(swfracb(1)*maskC(i,j,k,bi,bj)
0151 & -swfracb(2)*maskC(i,j,kdown,bi,bj))
0152 & *fluxfac(1)
0153 & *recip_drF(k)*_recip_hFacC(i,j,k,bi,bj)
0154 ENDIF
da9f56e003 Jean*0155 #endif /* SHORTWAVE_HEATING */
0156
cf336ab6c5 Ryan*0157 ENDDO
8d1543706e Jean*0158 ENDDO
cf336ab6c5 Ryan*0159 ENDDO
0160 ENDDO
0161 ENDDO
0162 ENDDO
0163
0164
0165
0166
0167
0168
0169
0170
0171
0172
0173
0174
0175
0176
0177
0178
0179
0180
0181
0182
0183
0184
0185
0186
0187
0188
0189
0190
0191
0192
0193
8d1543706e Jean*0194
cf336ab6c5 Ryan*0195
0196
0197
0198
0199
0200
0201
0202
0203
0204
0205
8d1543706e Jean*0206
cf336ab6c5 Ryan*0207
0208
0209
0210
0211
0212
0213
0214
0215
0216
0217
8d1543706e Jean*0218
cf336ab6c5 Ryan*0219
0220
0221
0222
0223
0224
0225
0226
0227
0228
0229
0230
0231
0232
0233
0234
0235
0236
0237
0238
0239
0240
0241
0242
0243
0244
0245
0246
0247
0248
0249
0250
0251
0252
0253
0254
0255
0256
0257
0258
0259
0260
0261
8d1543706e Jean*0262
cf336ab6c5 Ryan*0263
0264 #endif /* LAYERS_THERMODYNAMICS */
ee16a2cae4 Ryan*0265 #endif /* USE_LAYERS */
cf336ab6c5 Ryan*0266 RETURN
0267 END
0268