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"
f0f170d54b Mart*0002
cf336ab6c5 Ryan*0003
50d8304171 Ryan*0004
0005
f0f170d54b Mart*0006
4008d662b9 Jean*0007
cf336ab6c5 Ryan*0008
0009
50d8304171 Ryan*0010
0011 SUBROUTINE LAYERS_FILL(
0012 I df, trIdentity, fluxid,
cf336ab6c5 Ryan*0013 I kLev, nLevs, bibjFlg, biArg, bjArg, myThid )
50d8304171 Ryan*0014
0015
0016
f0f170d54b Mart*0017
0018
0019
50d8304171 Ryan*0020
0021 IMPLICIT NONE
cf336ab6c5 Ryan*0022 #include "SIZE.h"
0023 #include "EEPARAMS.h"
0024 #include "PARAMS.h"
0025 #include "GRID.h"
0026 #include "LAYERS_SIZE.h"
0027 #include "LAYERS.h"
0028
0029
0030
0031
4008d662b9 Jean*0032
cf336ab6c5 Ryan*0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
50d8304171 Ryan*0054
0055 _RL df(*)
cf336ab6c5 Ryan*0056 INTEGER trIdentity, kLev, nLevs, bibjFlg, biArg, bjArg
0057 INTEGER myThid
50d8304171 Ryan*0058 CHARACTER*(3) fluxid
cf336ab6c5 Ryan*0059
0060 #ifdef LAYERS_THERMODYNAMICS
0061
0062
0063
0064
0065 CHARACTER*(MAX_LEN_MBUF) msgBuf
0066
50d8304171 Ryan*0067 IF ((trIdentity.EQ.1).OR.(trIdentity.EQ.2)) THEN
4008d662b9 Jean*0068
50d8304171 Ryan*0069 IF (fluxid.EQ.'SUR') THEN
0070 CALL LAYERS_FILL_FIELD(df, trIdentity, 1, layers_surfflux,'M',
0071 & klev, nLevs, bibjFlg, biArg, bjArg, myThid)
f0f170d54b Mart*0072 ELSEIF (fluxid.EQ.'DFX') THEN
50d8304171 Ryan*0073 CALL LAYERS_FILL_FIELD(df, trIdentity, Nr, layers_dfx,'U',
0074 & kLev, nLevs, bibjFlg, biArg, bjArg, myThid)
f0f170d54b Mart*0075 ELSEIF (fluxid.EQ.'DFY') THEN
50d8304171 Ryan*0076 CALL LAYERS_FILL_FIELD(df, trIdentity, Nr, layers_dfy,'V',
0077 & kLev, nLevs, bibjFlg, biArg, bjArg, myThid)
f0f170d54b Mart*0078 ELSEIF (fluxid.EQ.'DFR') THEN
50d8304171 Ryan*0079 CALL LAYERS_FILL_FIELD(df, trIdentity, Nr, layers_dfr,'M',
0080 & kLev, nLevs, bibjFlg, biArg, bjArg, myThid)
f0f170d54b Mart*0081 ELSEIF (fluxid.EQ.'AFX') THEN
50d8304171 Ryan*0082 CALL LAYERS_FILL_FIELD(df, trIdentity, Nr, layers_afx,'U',
0083 & kLev, nLevs, bibjFlg, biArg, bjArg, myThid)
f0f170d54b Mart*0084 ELSEIF (fluxid.EQ.'AFY') THEN
50d8304171 Ryan*0085 CALL LAYERS_FILL_FIELD(df, trIdentity, Nr, layers_afy,'V',
0086 & kLev, nLevs, bibjFlg, biArg, bjArg, myThid)
f0f170d54b Mart*0087 ELSEIF (fluxid.EQ.'AFR') THEN
50d8304171 Ryan*0088 CALL LAYERS_FILL_FIELD(df, trIdentity, Nr, layers_afr,'M',
6088c626b1 Jean*0089 & kLev, nLevs, bibjFlg, biArg, bjArg, myThid)
f0f170d54b Mart*0090 ELSEIF (fluxid.EQ.'TOT') THEN
50d8304171 Ryan*0091 CALL LAYERS_FILL_FIELD(df, trIdentity, Nr, layers_tottend,'M',
0092 & kLev, nLevs, bibjFlg, biArg, bjArg, myThid)
cf336ab6c5 Ryan*0093 ELSE
50d8304171 Ryan*0094 WRITE(msgBuf,'(2A)')
0095 & 'S/R LAYERS_FILL: ',
0096 & 'invalid flux ID'
0097 CALL PRINT_ERROR( msgBuf, myThid )
0098 STOP 'ABNORMAL END: S/R LAYERS_FILL'
cf336ab6c5 Ryan*0099 ENDIF
6088c626b1 Jean*0100
50d8304171 Ryan*0101 ELSE
6088c626b1 Jean*0102
50d8304171 Ryan*0103
0104
6088c626b1 Jean*0105
50d8304171 Ryan*0106
0107
0108
0109
0110
0111
6088c626b1 Jean*0112
50d8304171 Ryan*0113 ENDIF
6088c626b1 Jean*0114
cf336ab6c5 Ryan*0115 RETURN
0116 END
50d8304171 Ryan*0117
4008d662b9 Jean*0118
f0f170d54b Mart*0119
0120
50d8304171 Ryan*0121 SUBROUTINE LAYERS_FILL_FIELD(
0122 I df, trIdentity, myNr,
0123 U layers_saved_flux,
0124 I fldType,
cf336ab6c5 Ryan*0125 I kLev, nLevs, bibjFlg, biArg, bjArg, myThid )
50d8304171 Ryan*0126
cf336ab6c5 Ryan*0127 IMPLICIT NONE
0128 #include "SIZE.h"
0129 #include "EEPARAMS.h"
0130 #include "PARAMS.h"
0131 #include "GRID.h"
0132 #include "LAYERS_SIZE.h"
0133 #include "LAYERS.h"
0134
50d8304171 Ryan*0135 INTEGER trIdentity, myNr, kLev, nLevs, bibjFlg, biArg, bjArg
0136 CHARACTER fldType
0137 _RL layers_saved_flux(1-OLx:sNx+OLx,1-OLy:sNy+OLy,
0138 & myNr,2,nSx,nSy)
0139
0140 _RL df(*)
cf336ab6c5 Ryan*0141 INTEGER myThid
0142
0143
0144
0145
50d8304171 Ryan*0146 INTEGER sizI1,sizI2,sizJ1,sizJ2
0147 INTEGER sizTx,sizTy
0148 INTEGER iRun, jRun, k, bi, bj
0149 INTEGER kFirst, kLast
0150 INTEGER kd, kd0, ksgn
0151
6088c626b1 Jean*0152
50d8304171 Ryan*0153
0154
0155 IF ( fldType.EQ.'U' ) THEN
0156 iRun = sNx+1
0157 jRun = sNy
0158 ELSEIF ( fldType.EQ.'V' ) THEN
0159 iRun = sNx
0160 jRun = sNy+1
0161 ELSE
0162 iRun = sNx
0163 jRun = sNy
0164 ENDIF
0165
0166 IF (abs(bibjFlg).EQ.3) THEN
0167 sizI1 = 1
0168 sizI2 = sNx
0169 sizJ1 = 1
0170 sizJ2 = sNy
0171 iRun = sNx
0172 jRun = sNy
0173 ELSE
0174 sizI1 = 1-OLx
0175 sizI2 = sNx+OLx
0176 sizJ1 = 1-OLy
0177 sizJ2 = sNy+OLy
0178 ENDIF
0179 IF (abs(bibjFlg).GE.2) THEN
0180 sizTx = 1
0181 sizTy = 1
0182 ELSE
0183 sizTx = nSx
0184 sizTy = nSy
0185 ENDIF
6088c626b1 Jean*0186
50d8304171 Ryan*0187
0188
0189 IF (kLev.LE.0) THEN
0190 kFirst = 1
0191 kLast = nLevs
0192 ELSEIF ( nLevs.EQ.1 ) THEN
0193 kFirst = 1
0194 kLast = 1
0195 ELSEIF ( kLev.LE.nLevs ) THEN
0196 kFirst = kLev
0197 kLast = kLev
0198 ELSE
0199 STOP 'ABNORMAL END in LAYERS_SAVE: kLev > nLevs >0'
0200 ENDIF
0201
0202
0203 IF ( kLev.EQ.-1 ) THEN
0204 ksgn = -1
0205 kd0 = 1 + nLevs
0206 ELSEIF ( kLev.EQ.0 ) THEN
0207 ksgn = 1
0208 kd0 = 0
0209 ELSE
0210 ksgn = 0
6088c626b1 Jean*0211 kd0 = kLev
50d8304171 Ryan*0212 ENDIF
4008d662b9 Jean*0213
50d8304171 Ryan*0214 IF ( bibjFlg.EQ.0 ) THEN
0215
0216 DO bj=myByLo(myThid), myByHi(myThid)
0217 DO bi=myBxLo(myThid), myBxHi(myThid)
0218 DO k = kFirst,kLast
0219 kd = kd0 + ksgn*k
0220 CALL LAYERS_CUMULATE(
0221 U layers_saved_flux(1-OLx,1-OLy,kd,trIdentity,bi,bj),
0222 I df,
0223 I sizI1,sizI2,sizJ1,sizJ2,nLevs,sizTx,sizTy,
0224 I iRun,jRun,k,bi,bj,
0225 I myThid)
cf336ab6c5 Ryan*0226 ENDDO
0227 ENDDO
50d8304171 Ryan*0228 ENDDO
0229 ELSE
0230 bi = MIN(biArg,sizTx)
0231 bj = MIN(bjArg,sizTy)
0232 DO k = kFirst,kLast
0233 kd = kd0 + ksgn*k
0234 CALL LAYERS_CUMULATE(
0235 U layers_saved_flux(1-OLx,1-OLy,kd,trIdentity,biArg,bjArg),
0236 I df,
0237 I sizI1,sizI2,sizJ1,sizJ2,nLevs,sizTx,sizTy,
0238 I iRun,jRun,k,bi,bj,
0239 I myThid)
0240 ENDDO
cf336ab6c5 Ryan*0241 ENDIF
50d8304171 Ryan*0242
0243
0244
0245
0246
0247
0248
0249
0250
0251
0252
0253
f0f170d54b Mart*0254
50d8304171 Ryan*0255
0256
0257
0258
0259
0260
0261
0262
0263
0264
0265
0266
0267
0268
0269
0270
0271
0272
0273
0274
6088c626b1 Jean*0275
50d8304171 Ryan*0276
cf336ab6c5 Ryan*0277 RETURN
0278 END
50d8304171 Ryan*0279
cf336ab6c5 Ryan*0280
f0f170d54b Mart*0281
0282
50d8304171 Ryan*0283 SUBROUTINE LAYERS_CUMULATE(
0284 U cumFld,
0285 I inpFld,
0286 I sizI1,sizI2,sizJ1,sizJ2,sizK,sizTx,sizTy,
0287 I iRun,jRun,k,bi,bj,
0288 I myThid )
cf336ab6c5 Ryan*0289
50d8304171 Ryan*0290
0291
0292
0293
cf336ab6c5 Ryan*0294
50d8304171 Ryan*0295
0296 IMPLICIT NONE
cf336ab6c5 Ryan*0297
50d8304171 Ryan*0298 #include "EEPARAMS.h"
0299 #include "SIZE.h"
cf336ab6c5 Ryan*0300
50d8304171 Ryan*0301
0302
0303
0304
0305
0306
0307
0308
0309
0310
0311
0312 _RL cumFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0313 INTEGER sizI1,sizI2,sizJ1,sizJ2
0314 INTEGER sizK,sizTx,sizTy
0315 _RL inpFld(sizI1:sizI2,sizJ1:sizJ2,sizK,sizTx,sizTy)
0316 INTEGER iRun, jRun, k, bi, bj
0317 INTEGER myThid
0318
4008d662b9 Jean*0319
50d8304171 Ryan*0320
0321
0322 INTEGER i, j
0323
cf336ab6c5 Ryan*0324
50d8304171 Ryan*0325
cf336ab6c5 Ryan*0326
50d8304171 Ryan*0327 DO j = 1,jRun
0328 DO i = 1,iRun
0329 cumFld(i,j) = cumFld(i,j) + inpFld(i,j,k,bi,bj)
0330 ENDDO
0331 ENDDO
cf336ab6c5 Ryan*0332
f0f170d54b Mart*0333 #endif /* LAYERS_THERMODYNAMICS */
0334
cf336ab6c5 Ryan*0335 RETURN
0336 END