File indexing completed on 2023-05-28 05:10:13 UTC
view on githubraw file Latest commit b4daa243 on 2023-05-28 03:53:22 UTC
6d54cf9ca1 Ed H*0001 #include "EXF_OPTIONS.h"
3a255f48df Gael*0002 #ifdef ALLOW_AUTODIFF
0003 # include "AUTODIFF_OPTIONS.h"
0004 #endif
7f861c1808 Patr*0005
9fe4461eea Patr*0006
0007
0008
14a20b48a3 Jean*0009
9fe4461eea Patr*0010
0011
0012
14a20b48a3 Jean*0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
9fe4461eea Patr*0024
14a20b48a3 Jean*0025
423768d890 Jean*0026
14a20b48a3 Jean*0027
423768d890 Jean*0028
14a20b48a3 Jean*0029
0030
0031
0032
0033
0034
423768d890 Jean*0035
14a20b48a3 Jean*0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
423768d890 Jean*0050
0051
0052
14a20b48a3 Jean*0053
0054
423768d890 Jean*0055
0056
0057
0058
0059
0060
0061
0062
14a20b48a3 Jean*0063
0064
0065
0066
0067
0068
423768d890 Jean*0069
0070
0071
0072
14a20b48a3 Jean*0073
0074
0075
0076
423768d890 Jean*0077
0078
0079
0080
14a20b48a3 Jean*0081
0082
423768d890 Jean*0083
0084
0085
0086
14a20b48a3 Jean*0087
0088
0089
9fe4461eea Patr*0090
0091
0092
14a20b48a3 Jean*0093
9fe4461eea Patr*0094
14a20b48a3 Jean*0095 SUBROUTINE EXF_GETFORCING( myTime, myIter, myThid )
9fe4461eea Patr*0096
0097
14a20b48a3 Jean*0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114
9fe4461eea Patr*0115
7f861c1808 Patr*0116
9fe4461eea Patr*0117
14a20b48a3 Jean*0118 IMPLICIT NONE
7f861c1808 Patr*0119
14a20b48a3 Jean*0120
bdec91d862 Patr*0121 #include "EEPARAMS.h"
0122 #include "SIZE.h"
0123 #include "PARAMS.h"
0124 #include "GRID.h"
0125
082e18c36c Jean*0126 #include "EXF_PARAM.h"
0127 #include "EXF_FIELDS.h"
0128 #include "EXF_CONSTANTS.h"
a0a3896567 Patr*0129 #ifdef ALLOW_AUTODIFF_TAMC
0130 # include "tamc.h"
0131 #endif
b4daa24319 Shre*0132 #ifdef ALLOW_TAPENADE
0133 # include "EXF_INTERP_SIZE.h"
0134 # include "EXF_INTERP_PARAM.h"
0135 #endif /* ALLOW_TAPENADE */
bdec91d862 Patr*0136
9fe4461eea Patr*0137
14a20b48a3 Jean*0138
0139 _RL myTime
0140 INTEGER myIter
0141 INTEGER myThid
7f861c1808 Patr*0142
9fe4461eea Patr*0143
14a20b48a3 Jean*0144
0145 INTEGER bi,bj
0320e25227 Mart*0146 INTEGER i,j,ks
14a20b48a3 Jean*0147
9fe4461eea Patr*0148
7f861c1808 Patr*0149
14a20b48a3 Jean*0150
423768d890 Jean*0151 CALL EXF_GETCLIM( myTime, myIter, myThid )
7f861c1808 Patr*0152
14a20b48a3 Jean*0153
423768d890 Jean*0154 CALL EXF_GETFFIELDS( myTime, myIter, myThid )
358649780a Gael*0155 IF ( .NOT.useAtmWind ) THEN
423768d890 Jean*0156 IF ( stressIsOnCgrid .AND. ustressfile.NE.' '
0157 & .AND. vstressfile.NE.' ' )
9c3e24f78c Jean*0158 & CALL EXCH_UV_XY_RL( ustress, vstress, .TRUE., myThid )
358649780a Gael*0159 ENDIF
7f861c1808 Patr*0160
98238efc8b Patr*0161 #ifdef ALLOW_AUTODIFF_TAMC
9c41af81f6 Timo*0162
0163
0164
0165
0166
0167
0168
0169
0170
0171
0172 # ifdef ALLOW_ATM_TEMP
0173
0174
0175
0176
0177
0178
0179 # ifdef ALLOW_READ_TURBFLUXES
0180
0181
0182 # endif /* ALLOW_READ_TURBFLUXES */
0183 # ifdef EXF_READ_EVAP
0184
0185 # endif /* EXF_READ_EVAP */
0186 # ifdef ALLOW_DOWNWARD_RADIATION
0187
0188
0189 # endif
0190 # else /* ALLOW_ATM_TEMP undef */
0191 # ifdef SHORTWAVE_HEATING
0192
0193 # endif
0194 # endif /* ALLOW_ATM_TEMP */
0195 # ifdef ATMOSPHERIC_LOADING
0196
0197 # endif
0198 # ifdef ALLOW_RUNOFF
0199
0200 # endif
0201 # ifdef ALLOW_SALTFLX
0202
0203 # endif
0204 # ifdef EXF_SEAICE_FRACTION
0205
0206 # endif
0207 #endif /* ALLOW_AUTODIFF_TAMC */
0208
5d96c49326 Jean*0209 #ifdef ALLOW_AUTODIFF
14a20b48a3 Jean*0210 # ifdef ALLOW_AUTODIFF_MONITOR
98238efc8b Patr*0211 CALL EXF_ADJOINT_SNAPSHOTS( 2, myTime, myIter, myThid )
0212 # endif
5d96c49326 Jean*0213 #endif /* ALLOW_AUTODIFF */
98238efc8b Patr*0214
423768d890 Jean*0215 #ifdef ALLOW_DOWNWARD_RADIATION
14a20b48a3 Jean*0216
423768d890 Jean*0217 CALL EXF_RADIATION( myTime, myIter, myThid )
0218 #endif
3752238fd8 Patr*0219
14a20b48a3 Jean*0220
423768d890 Jean*0221 CALL EXF_WIND( myTime, myIter, myThid )
0222
0223 #ifdef ALLOW_ATM_TEMP
0224 # ifdef ALLOW_BULKFORMULAE
0225 # ifdef ALLOW_AUTODIFF_TAMC
9c41af81f6 Timo*0226
0227
358649780a Gael*0228
0229
0230
9c41af81f6 Timo*0231
0232
0233
423768d890 Jean*0234 # endif
14a20b48a3 Jean*0235
423768d890 Jean*0236 CALL EXF_BULKFORMULAE( myTime, myIter, myThid )
9c41af81f6 Timo*0237 # ifdef ALLOW_AUTODIFF_TAMC
0238
0239 # endif
423768d890 Jean*0240 # endif /* ALLOW_BULKFORMULAE */
0241 #endif /* ALLOW_ATM_TEMP */
bdec91d862 Patr*0242
14a20b48a3 Jean*0243 DO bj = myByLo(myThid), myByHi(myThid)
0244 DO bi = myBxLo(myThid), myBxHi(myThid)
423768d890 Jean*0245
0246 #ifdef ALLOW_ATM_TEMP
0247
0320e25227 Mart*0248 DO j = 1,sNy
0249 DO i = 1,sNx
0250
0251 hflux(i,j,bi,bj) =
0252 & - hs(i,j,bi,bj)
0253 & - hl(i,j,bi,bj)
0254 & + lwflux(i,j,bi,bj)
3752238fd8 Patr*0255 #ifndef SHORTWAVE_HEATING
0320e25227 Mart*0256 & + swflux(i,j,bi,bj)
3752238fd8 Patr*0257 #endif
14a20b48a3 Jean*0258
0320e25227 Mart*0259 sflux(i,j,bi,bj) = evap(i,j,bi,bj) - precip(i,j,bi,bj)
0260 ENDDO
0261 ENDDO
3752238fd8 Patr*0262 #endif /* ALLOW_ATM_TEMP */
423768d890 Jean*0263
0264
0320e25227 Mart*0265 ks = 1
0266 IF ( usingPCoords ) ks = Nr
0267 DO j = 1,sNy
0268 DO i = 1,sNx
bdec91d862 Patr*0269 #ifdef ALLOW_RUNOFF
0320e25227 Mart*0270 sflux(i,j,bi,bj) = sflux(i,j,bi,bj) - runoff(i,j,bi,bj)
bdec91d862 Patr*0271 #endif
0320e25227 Mart*0272 hflux(i,j,bi,bj) = hflux(i,j,bi,bj)*maskC(i,j,ks,bi,bj)
0273 sflux(i,j,bi,bj) = sflux(i,j,bi,bj)*maskC(i,j,ks,bi,bj)
0274 ENDDO
14a20b48a3 Jean*0275 ENDDO
0320e25227 Mart*0276
0277 ENDDO
14a20b48a3 Jean*0278 ENDDO
bdec91d862 Patr*0279
14a20b48a3 Jean*0280
0281
0282
0283
0284
9c3e24f78c Jean*0285 IF ( stressIsOnCgrid ) THEN
0320e25227 Mart*0286 CALL EXCH_UV_XY_RL( ustress, vstress, .TRUE., myThid )
9c3e24f78c Jean*0287 ELSE
0320e25227 Mart*0288 CALL EXCH_UV_AGRID_3D_RL(ustress, vstress, .TRUE., 1, myThid)
9c3e24f78c Jean*0289 ENDIF
bdec91d862 Patr*0290 #ifdef SHORTWAVE_HEATING
14a20b48a3 Jean*0291
bdec91d862 Patr*0292 #endif
0293 #ifdef ATMOSPHERIC_LOADING
14a20b48a3 Jean*0294
bdec91d862 Patr*0295 #endif
24da7525ba Jean*0296 #ifdef EXF_SEAICE_FRACTION
14a20b48a3 Jean*0297
8f277f2728 Gael*0298 #endif
bdec91d862 Patr*0299
14a20b48a3 Jean*0300
423768d890 Jean*0301 CALL EXF_GETSURFACEFLUXES( myTime, myIter, myThid )
7f861c1808 Patr*0302
14a20b48a3 Jean*0303 IF ( useExfCheckRange .AND.
9f46642c85 Jean*0304 & ( myIter.EQ.nIter0 .OR. exf_debugLev.GE.debLevC ) ) THEN
0320e25227 Mart*0305 CALL EXF_CHECK_RANGE( myTime, myIter, myThid )
14a20b48a3 Jean*0306 ENDIF
d7ee8fe52e Patr*0307
423768d890 Jean*0308 #ifdef ALLOW_AUTODIFF
14a20b48a3 Jean*0309 # ifdef ALLOW_AUTODIFF_MONITOR
0320e25227 Mart*0310 CALL EXF_ADJOINT_SNAPSHOTS( 1, myTime, myIter, myThid )
98238efc8b Patr*0311 # endif
423768d890 Jean*0312 #endif /* ALLOW_AUTODIFF */
98238efc8b Patr*0313
da754645e6 Jean*0314 #ifdef ALLOW_ATM_TEMP
0315 # ifdef SHORTWAVE_HEATING
14a20b48a3 Jean*0316
da754645e6 Jean*0317
14a20b48a3 Jean*0318
0319
0320
0321 DO bj = myByLo(myThid), myByHi(myThid)
0322 DO bi = myBxLo(myThid), myBxHi(myThid)
0320e25227 Mart*0323 DO j = 1-OLy,sNy+OLy
0324 DO i = 1-OLx,sNx+OLx
92db8eb413 Patr*0325 hflux(i,j,bi,bj) = hflux(i,j,bi,bj) + swflux(i,j,bi,bj)
14a20b48a3 Jean*0326 ENDDO
0327 ENDDO
0328 ENDDO
0329 ENDDO
da754645e6 Jean*0330 # endif /* SHORTWAVE_HEATING */
0331 #endif /* ALLOW_ATM_TEMP */
b7bd8a1e5a Patr*0332
14a20b48a3 Jean*0333
423768d890 Jean*0334 CALL EXF_DIAGNOSTICS_FILL( myTime, myIter, myThid )
b1e3781773 Patr*0335
14a20b48a3 Jean*0336
423768d890 Jean*0337 CALL EXF_MONITOR( myTime, myIter, myThid )
d9263fe447 Jean*0338
14a20b48a3 Jean*0339
423768d890 Jean*0340 CALL EXF_MAPFIELDS( myTime, myIter, myThid )
7f861c1808 Patr*0341
423768d890 Jean*0342 #ifdef ALLOW_AUTODIFF
14a20b48a3 Jean*0343 # ifdef ALLOW_AUTODIFF_MONITOR
0344 IF ( .NOT. useSEAICE )
7e9378bd0f Patr*0345 & CALL EXF_ADJOINT_SNAPSHOTS( 3, myTime, myIter, myThid )
0346 # endif
423768d890 Jean*0347 #endif /* ALLOW_AUTODIFF */
7e9378bd0f Patr*0348
e1fb02e8f0 Jean*0349 RETURN
0350 END