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