File indexing completed on 2024-12-17 18:37:22 UTC
view on githubraw file Latest commit 01ed6603 on 2024-02-09 18:54:26 UTC
87dd4f7d5f Oliv*0001 #include "OASIM_OPTIONS.h"
0002 #include "EXF_OPTIONS.h"
0003
0004
0005
0006
0007
0008 SUBROUTINE OASIM_CHECK( myThid )
0009
0010
0011
0012
0013
0014 IMPLICIT NONE
0015 #include "SIZE.h"
0016 #include "EEPARAMS.h"
0017 #include "PARAMS.h"
0018 #ifdef ALLOW_EXF
0019 #include "EXF_PARAM.h"
0020 #include "EXF_INTERP_SIZE.h"
0021 #include "EXF_INTERP_PARAM.h"
0022 #endif
0023 #include "OASIM_SIZE.h"
0024 #include "OASIM_PARAMS.h"
0025 #include "OASIM_EXF_PARAMS.h"
0026
0027
0028
0029 INTEGER myThid
0030
0031
0032
0033
0034
0035 #ifdef ALLOW_OASIM
0036
0037
0038 LOGICAL haveAny,addBlkLn
0039 INTEGER oUnit, l, errCount
0040 CHARACTER*(MAX_LEN_MBUF) msgBuf
0041 CHARACTER*1 blkLin
0042
0043 _BEGIN_MASTER(myThid)
0044
0045
0046
0047
0048
0049
0050
0051 blkLin = ' '
0052 addBlkLn = .FALSE.
0053
0054 WRITE(msgBuf,'(A)') 'OASIM_CHECK: #define ALLOW_OASIM'
0055 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
0056 & SQUEEZE_RIGHT, 1 )
0057
0058 CALL PRINT_MESSAGE( blkLin, standardMessageUnit,
0059 & SQUEEZE_RIGHT , myThid )
0060
0061
0062
0063
01ed660396 Oliv*0064 CALL WRITE_0D_L(useOasimYearlyFields,INDEX_NONE,
0065 &'useOasimYearlyFields =',
87dd4f7d5f Oliv*0066 &' /* whether files are per year with _YYYY suffix */')
0067
0068 CALL PRINT_MESSAGE( blkLin, standardMessageUnit,
0069 & SQUEEZE_RIGHT , myThid )
0070
0071
0072 IF ( aerTaufile.NE.' ' ) THEN
0073 CALL EXF_FLD_SUMMARY( 'aerTau forcing',
0074 I aerTaufile, aerTauRepCycle, aerTauperiod,
01ed660396 Oliv*0075 I aerTauStartTime, useOasimYearlyFields, addBlkLn, myThid )
87dd4f7d5f Oliv*0076 CALL PRINT_MESSAGE( blkLin, standardMessageUnit,
0077 & SQUEEZE_RIGHT , myThid )
0078 CALL WRITE_1D_RL(aerTau_exfremo_intercept,nlt,INDEX_NONE,
0079 & 'aerTau_exfremo_intercept =',
0080 & ' /* intercept for aerTau forcing mean removal */')
0081 CALL WRITE_1D_RL(aerTau_exfremo_slope,nlt,INDEX_NONE,
0082 & 'aerTau_exfremo_slope =',
0083 & ' /* slope for aerTau forcing trend removal */')
0084 CALL WRITE_1D_RL(aerTau_inscal,nlt,INDEX_NONE,
0085 & 'aerTau_inscal =',
0086 & ' /* scaling factor for aerTau fields */')
0087 ELSE
0088 CALL WRITE_1D_RL(aerTauconst,nlt,INDEX_NONE,
0089 & 'aerTauconst =',
0090 & ' /* constant aerTau forcing */')
0091 ENDIF
0092
0093 haveAny = aerTauFile.NE.' '
0094 DO l=1,nlt
0095 IF (aerTauconst(l).NE.0 _d 0) haveAny = .TRUE.
0096 ENDDO
0097 IF ( haveAny ) THEN
0098 CALL WRITE_0D_C(aerTaumask,-1,INDEX_NONE,
0099 & 'aerTaumask =',
0100 & ' /* mask for aerTau forcing */')
0101 ENDIF
0102
0103 CALL PRINT_MESSAGE( blkLin, standardMessageUnit,
0104 & SQUEEZE_RIGHT , myThid )
0105
0106
0107 IF ( asympfile.NE.' ' ) THEN
0108 CALL EXF_FLD_SUMMARY( 'asymp forcing',
0109 I asympfile, asympRepCycle, asympperiod,
01ed660396 Oliv*0110 I asympStartTime, useOasimYearlyFields, addBlkLn, myThid )
87dd4f7d5f Oliv*0111 CALL PRINT_MESSAGE( blkLin, standardMessageUnit,
0112 & SQUEEZE_RIGHT , myThid )
0113 CALL WRITE_1D_RL(asymp_exfremo_intercept,nlt,INDEX_NONE,
0114 & 'asymp_exfremo_intercept =',
0115 & ' /* intercept for asymp forcing mean removal */')
0116 CALL WRITE_1D_RL(asymp_exfremo_slope,nlt,INDEX_NONE,
0117 & 'asymp_exfremo_slope =',
0118 & ' /* slope for asymp forcing trend removal */')
0119 CALL WRITE_1D_RL(asymp_inscal,nlt,INDEX_NONE,
0120 & 'asymp_inscal =',
0121 & ' /* scaling factor for asymp fields */')
0122 ELSE
0123 CALL WRITE_1D_RL(asympconst,nlt,INDEX_NONE,
0124 & 'asympconst =',
0125 & ' /* constant asymp forcing */')
0126 ENDIF
0127
0128 haveAny = asympFile.NE.' '
0129 DO l=1,nlt
0130 IF (asympconst(l).NE.0 _d 0) haveAny = .TRUE.
0131 ENDDO
0132 IF ( haveAny ) THEN
0133 CALL WRITE_0D_C(asympmask,-1,INDEX_NONE,
0134 & 'asympmask =',
0135 & ' /* mask for asymp forcing */')
0136 ENDIF
0137
0138 CALL PRINT_MESSAGE( blkLin, standardMessageUnit,
0139 & SQUEEZE_RIGHT , myThid )
0140
0141
0142 IF ( ssalbfile.NE.' ' ) THEN
0143 CALL EXF_FLD_SUMMARY( 'ssalb forcing',
0144 I ssalbfile, ssalbRepCycle, ssalbperiod,
01ed660396 Oliv*0145 I ssalbStartTime, useOasimYearlyFields, addBlkLn, myThid )
87dd4f7d5f Oliv*0146 CALL PRINT_MESSAGE( blkLin, standardMessageUnit,
0147 & SQUEEZE_RIGHT , myThid )
0148 CALL WRITE_1D_RL(ssalb_exfremo_intercept,nlt,INDEX_NONE,
0149 & 'ssalb_exfremo_intercept =',
0150 & ' /* intercept for ssalb forcing mean removal */')
0151 CALL WRITE_1D_RL(ssalb_exfremo_slope,nlt,INDEX_NONE,
0152 & 'ssalb_exfremo_slope =',
0153 & ' /* slope for ssalb forcing trend removal */')
0154 CALL WRITE_1D_RL(ssalb_inscal,nlt,INDEX_NONE,
0155 & 'ssalb_inscal =',
0156 & ' /* scaling factor for ssalb fields */')
0157 ELSE
0158 CALL WRITE_1D_RL(ssalbconst,nlt,INDEX_NONE,
0159 & 'ssalbconst =',
0160 & ' /* constant ssalb forcing */')
0161 ENDIF
0162
0163 haveAny = ssalbFile.NE.' '
0164 DO l=1,nlt
0165 IF (ssalbconst(l).NE.0 _d 0) haveAny = .TRUE.
0166 ENDDO
0167 IF ( haveAny ) THEN
0168 CALL WRITE_0D_C(ssalbmask,-1,INDEX_NONE,
0169 & 'ssalbmask =',
0170 & ' /* mask for ssalb forcing */')
0171 ENDIF
0172
0173 CALL PRINT_MESSAGE( blkLin, standardMessageUnit,
0174 & SQUEEZE_RIGHT , myThid )
0175
0176
0177 IF ( cldcovfile.NE.' ' ) THEN
0178 CALL EXF_FLD_SUMMARY( 'cldcov forcing',
0179 I cldcovfile, cldcovRepCycle, cldcovperiod,
01ed660396 Oliv*0180 I cldcovStartTime, useOasimYearlyFields, addBlkLn, myThid )
87dd4f7d5f Oliv*0181 CALL PRINT_MESSAGE( blkLin, standardMessageUnit,
0182 & SQUEEZE_RIGHT , myThid )
0183 CALL WRITE_0D_RL(cldcov_exfremo_intercept,INDEX_NONE,
0184 & 'cldcov_exfremo_intercept =',
0185 & ' /* intercept for cldcov forcing mean removal */')
0186 CALL WRITE_0D_RL(cldcov_exfremo_slope,INDEX_NONE,
0187 & 'cldcov_exfremo_slope =',
0188 & ' /* slope for cldcov forcing trend removal */')
0189 CALL WRITE_0D_RL(cldcov_inscal,INDEX_NONE,
0190 & 'cldcov_inscal =',
0191 & ' /* scaling factor for cldcov fields */')
0192 ELSE
0193 CALL WRITE_0D_RL(cldcovconst,INDEX_NONE,
0194 & 'cldcovconst =',
0195 & ' /* constant cldcov forcing */')
0196 ENDIF
0197
0198 IF ( cldcovfile.NE.' ' .OR. cldcovconst.NE.0D0 ) THEN
0199 CALL WRITE_0D_C(cldcovmask,-1,INDEX_NONE,
0200 & 'cldcovmask =',
0201 & ' /* mask for cldcov forcing */')
0202 ENDIF
0203
0204 CALL PRINT_MESSAGE( blkLin, standardMessageUnit,
0205 & SQUEEZE_RIGHT , myThid )
0206
0207
0208 IF ( cldlwpfile.NE.' ' ) THEN
0209 CALL EXF_FLD_SUMMARY( 'cldlwp forcing',
0210 I cldlwpfile, cldlwpRepCycle, cldlwpperiod,
01ed660396 Oliv*0211 I cldlwpStartTime, useOasimYearlyFields, addBlkLn, myThid )
87dd4f7d5f Oliv*0212 CALL PRINT_MESSAGE( blkLin, standardMessageUnit,
0213 & SQUEEZE_RIGHT , myThid )
0214 CALL WRITE_0D_RL(cldlwp_exfremo_intercept,INDEX_NONE,
0215 & 'cldlwp_exfremo_intercept =',
0216 & ' /* intercept for cldlwp forcing mean removal */')
0217 CALL WRITE_0D_RL(cldlwp_exfremo_slope,INDEX_NONE,
0218 & 'cldlwp_exfremo_slope =',
0219 & ' /* slope for cldlwp forcing trend removal */')
0220 CALL WRITE_0D_RL(cldlwp_inscal,INDEX_NONE,
0221 & 'cldlwp_inscal =',
0222 & ' /* scaling factor for cldlwp fields */')
0223 ELSE
0224 CALL WRITE_0D_RL(cldlwpconst,INDEX_NONE,
0225 & 'cldlwpconst =',
0226 & ' /* constant cldlwp forcing */')
0227 ENDIF
0228
0229 IF ( cldlwpfile.NE.' ' .OR. cldlwpconst.NE.0D0 ) THEN
0230 CALL WRITE_0D_C(cldlwpmask,-1,INDEX_NONE,
0231 & 'cldlwpmask =',
0232 & ' /* mask for cldlwp forcing */')
0233 ENDIF
0234
0235 CALL PRINT_MESSAGE( blkLin, standardMessageUnit,
0236 & SQUEEZE_RIGHT , myThid )
0237
0238
0239 IF ( cldrefile.NE.' ' ) THEN
0240 CALL EXF_FLD_SUMMARY( 'cldre forcing',
0241 I cldrefile, cldreRepCycle, cldreperiod,
01ed660396 Oliv*0242 I cldreStartTime, useOasimYearlyFields, addBlkLn, myThid )
87dd4f7d5f Oliv*0243 CALL PRINT_MESSAGE( blkLin, standardMessageUnit,
0244 & SQUEEZE_RIGHT , myThid )
0245 CALL WRITE_0D_RL(cldre_exfremo_intercept,INDEX_NONE,
0246 & 'cldre_exfremo_intercept =',
0247 & ' /* intercept for cldre forcing mean removal */')
0248 CALL WRITE_0D_RL(cldre_exfremo_slope,INDEX_NONE,
0249 & 'cldre_exfremo_slope =',
0250 & ' /* slope for cldre forcing trend removal */')
0251 CALL WRITE_0D_RL(cldre_inscal,INDEX_NONE,
0252 & 'cldre_inscal =',
0253 & ' /* scaling factor for cldre fields */')
0254 ELSE
0255 CALL WRITE_0D_RL(cldreconst,INDEX_NONE,
0256 & 'cldreconst =',
0257 & ' /* constant cldre forcing */')
0258 ENDIF
0259
0260 IF ( cldrefile.NE.' ' .OR. cldreconst.NE.0D0 ) THEN
0261 CALL WRITE_0D_C(cldremask,-1,INDEX_NONE,
0262 & 'cldremask =',
0263 & ' /* mask for cldre forcing */')
0264 ENDIF
0265
0266 CALL PRINT_MESSAGE( blkLin, standardMessageUnit,
0267 & SQUEEZE_RIGHT , myThid )
0268
0269
0270 IF ( presfile.NE.' ' ) THEN
0271 CALL EXF_FLD_SUMMARY( 'pres forcing',
0272 I presfile, presRepCycle, presperiod,
01ed660396 Oliv*0273 I presStartTime, useOasimYearlyFields, addBlkLn, myThid )
87dd4f7d5f Oliv*0274 CALL PRINT_MESSAGE( blkLin, standardMessageUnit,
0275 & SQUEEZE_RIGHT , myThid )
0276 CALL WRITE_0D_RL(pres_exfremo_intercept,INDEX_NONE,
0277 & 'pres_exfremo_intercept =',
0278 & ' /* intercept for pres forcing mean removal */')
0279 CALL WRITE_0D_RL(pres_exfremo_slope,INDEX_NONE,
0280 & 'pres_exfremo_slope =',
0281 & ' /* slope for pres forcing trend removal */')
0282 CALL WRITE_0D_RL(pres_inscal,INDEX_NONE,
0283 & 'pres_inscal =',
0284 & ' /* scaling factor for pres fields */')
0285 ELSE
0286 CALL WRITE_0D_RL(presconst,INDEX_NONE,
0287 & 'presconst =',
0288 & ' /* constant pres forcing */')
0289 ENDIF
0290
0291 IF ( presfile.NE.' ' .OR. presconst.NE.0D0 ) THEN
0292 CALL WRITE_0D_C(presmask,-1,INDEX_NONE,
0293 & 'presmask =',
0294 & ' /* mask for pres forcing */')
0295 ENDIF
0296
0297 CALL PRINT_MESSAGE( blkLin, standardMessageUnit,
0298 & SQUEEZE_RIGHT , myThid )
0299
0300
0301 IF ( oawindfile.NE.' ' ) THEN
0302 CALL EXF_FLD_SUMMARY( 'oawind forcing',
0303 I oawindfile, oawindRepCycle, oawindperiod,
01ed660396 Oliv*0304 I oawindStartTime, useOasimYearlyFields, addBlkLn, myThid )
87dd4f7d5f Oliv*0305 CALL PRINT_MESSAGE( blkLin, standardMessageUnit,
0306 & SQUEEZE_RIGHT , myThid )
0307 CALL WRITE_0D_RL(oawind_exfremo_intercept,INDEX_NONE,
0308 & 'oawind_exfremo_intercept =',
0309 & ' /* intercept for oawind forcing mean removal */')
0310 CALL WRITE_0D_RL(oawind_exfremo_slope,INDEX_NONE,
0311 & 'oawind_exfremo_slope =',
0312 & ' /* slope for oawind forcing trend removal */')
0313 CALL WRITE_0D_RL(oawind_inscal,INDEX_NONE,
0314 & 'oawind_inscal =',
0315 & ' /* scaling factor for oawind fields */')
0316 ELSE
0317 CALL WRITE_0D_RL(oawindconst,INDEX_NONE,
0318 & 'oawindconst =',
0319 & ' /* constant oawind forcing */')
0320 ENDIF
0321
0322 IF ( oawindfile.NE.' ' .OR. oawindconst.NE.0D0 ) THEN
0323 CALL WRITE_0D_C(oawindmask,-1,INDEX_NONE,
0324 & 'oawindmask =',
0325 & ' /* mask for oawind forcing */')
0326 ENDIF
0327
0328 CALL PRINT_MESSAGE( blkLin, standardMessageUnit,
0329 & SQUEEZE_RIGHT , myThid )
0330
0331
0332 IF ( relhumfile.NE.' ' ) THEN
0333 CALL EXF_FLD_SUMMARY( 'relhum forcing',
0334 I relhumfile, relhumRepCycle, relhumperiod,
01ed660396 Oliv*0335 I relhumStartTime, useOasimYearlyFields, addBlkLn, myThid )
87dd4f7d5f Oliv*0336 CALL PRINT_MESSAGE( blkLin, standardMessageUnit,
0337 & SQUEEZE_RIGHT , myThid )
0338 CALL WRITE_0D_RL(relhum_exfremo_intercept,INDEX_NONE,
0339 & 'relhum_exfremo_intercept =',
0340 & ' /* intercept for relhum forcing mean removal */')
0341 CALL WRITE_0D_RL(relhum_exfremo_slope,INDEX_NONE,
0342 & 'relhum_exfremo_slope =',
0343 & ' /* slope for relhum forcing trend removal */')
0344 CALL WRITE_0D_RL(relhum_inscal,INDEX_NONE,
0345 & 'relhum_inscal =',
0346 & ' /* scaling factor for relhum fields */')
0347 ELSE
0348 CALL WRITE_0D_RL(relhumconst,INDEX_NONE,
0349 & 'relhumconst =',
0350 & ' /* constant relhum forcing */')
0351 ENDIF
0352
0353 IF ( relhumfile.NE.' ' .OR. relhumconst.NE.0D0 ) THEN
0354 CALL WRITE_0D_C(relhummask,-1,INDEX_NONE,
0355 & 'relhummask =',
0356 & ' /* mask for relhum forcing */')
0357 ENDIF
0358
0359 CALL PRINT_MESSAGE( blkLin, standardMessageUnit,
0360 & SQUEEZE_RIGHT , myThid )
0361
0362
0363 IF ( ozonefile.NE.' ' ) THEN
0364 CALL EXF_FLD_SUMMARY( 'ozone forcing',
0365 I ozonefile, ozoneRepCycle, ozoneperiod,
01ed660396 Oliv*0366 I ozoneStartTime, useOasimYearlyFields, addBlkLn, myThid )
87dd4f7d5f Oliv*0367 CALL PRINT_MESSAGE( blkLin, standardMessageUnit,
0368 & SQUEEZE_RIGHT , myThid )
0369 CALL WRITE_0D_RL(ozone_exfremo_intercept,INDEX_NONE,
0370 & 'ozone_exfremo_intercept =',
0371 & ' /* intercept for ozone forcing mean removal */')
0372 CALL WRITE_0D_RL(ozone_exfremo_slope,INDEX_NONE,
0373 & 'ozone_exfremo_slope =',
0374 & ' /* slope for ozone forcing trend removal */')
0375 CALL WRITE_0D_RL(ozone_inscal,INDEX_NONE,
0376 & 'ozone_inscal =',
0377 & ' /* scaling factor for ozone fields */')
0378 ELSE
0379 CALL WRITE_0D_RL(ozoneconst,INDEX_NONE,
0380 & 'ozoneconst =',
0381 & ' /* constant ozone forcing */')
0382 ENDIF
0383
0384 IF ( ozonefile.NE.' ' .OR. ozoneconst.NE.0D0 ) THEN
0385 CALL WRITE_0D_C(ozonemask,-1,INDEX_NONE,
0386 & 'ozonemask =',
0387 & ' /* mask for ozone forcing */')
0388 ENDIF
0389
0390 CALL PRINT_MESSAGE( blkLin, standardMessageUnit,
0391 & SQUEEZE_RIGHT , myThid )
0392
0393
0394 IF ( wvfile.NE.' ' ) THEN
0395 CALL EXF_FLD_SUMMARY( 'wv forcing',
0396 I wvfile, wvRepCycle, wvperiod,
01ed660396 Oliv*0397 I wvStartTime, useOasimYearlyFields, addBlkLn, myThid )
87dd4f7d5f Oliv*0398 CALL PRINT_MESSAGE( blkLin, standardMessageUnit,
0399 & SQUEEZE_RIGHT , myThid )
0400 CALL WRITE_0D_RL(wv_exfremo_intercept,INDEX_NONE,
0401 & 'wv_exfremo_intercept =',
0402 & ' /* intercept for wv forcing mean removal */')
0403 CALL WRITE_0D_RL(wv_exfremo_slope,INDEX_NONE,
0404 & 'wv_exfremo_slope =',
0405 & ' /* slope for wv forcing trend removal */')
0406 CALL WRITE_0D_RL(wv_inscal,INDEX_NONE,
0407 & 'wv_inscal =',
0408 & ' /* scaling factor for wv fields */')
0409 ELSE
0410 CALL WRITE_0D_RL(wvconst,INDEX_NONE,
0411 & 'wvconst =',
0412 & ' /* constant wv forcing */')
0413 ENDIF
0414
0415 IF ( wvfile.NE.' ' .OR. wvconst.NE.0D0 ) THEN
0416 CALL WRITE_0D_C(wvmask,-1,INDEX_NONE,
0417 & 'wvmask =',
0418 & ' /* mask for wv forcing */')
0419 ENDIF
0420
0421 CALL PRINT_MESSAGE( blkLin, standardMessageUnit,
0422 & SQUEEZE_RIGHT , myThid )
0423
0424 CALL WRITE_0D_C(oasim_atmoFile,-1,INDEX_NONE,
0425 &'oasim_atmoFile =',
80bdfd8f07 Oliv*0426 &' /* filename for spectra of extraterr. irr. and atm. gases */')
87dd4f7d5f Oliv*0427 CALL WRITE_0D_C(oasim_waterFile,-1,INDEX_NONE,
0428 &'oasim_waterFile =',
0429 &' /* filename for water absorption and scattering spectra */')
0430 CALL WRITE_0D_C(oasim_slingoFile,-1,INDEX_NONE,
0431 &'oasim_slingoFile =',
0432 &' /* filename for cloud parameters */')
0433
0434 CALL WRITE_0D_RL(oasim_dTsolz,INDEX_NONE,
0435 &'oasim_dTsolz =',
0436 &' /* sub-timestep for mean solar zenith angle computation [s] */')
0437 CALL WRITE_0D_RL(oasim_am,INDEX_NONE,
0438 &'oasim_am =',
0439 &' /* air-mass parameter for navaer aerosol model */')
0440 CALL WRITE_0D_RL(oasim_Vi,INDEX_NONE,
0441 &'oasim_Vi =',
0442 &' /* visibility for navaer aerosol model [km] */')
0443 CALL WRITE_0D_RL(oasim_fixedSolz,INDEX_NONE,
0444 &'oasim_fixedSolz =',
0445 &' /* fixed solar zenith angle to use (for debugging) */')
0446 CALL WRITE_0D_RL(oasim_fixedLon,INDEX_NONE,
0447 &'oasim_fixedLon =',
0448 &' /* fixed longitude to use (for legacy mode) */')
0449 CALL WRITE_0D_RL(oasim_monitorFreq,INDEX_NONE,
0450 &'oasim_monitorFreq =',
0451 &' /* monitor frequency for OASIM package */')
0452 CALL WRITE_0D_RL(oasim_rmus,INDEX_NONE,
0453 &'oasim_rmus =',
0454 &' /* inverse mean zenith cosine of diffuse downwelling irr. */')
0455
0456
0457 _END_MASTER(myThid)
0458
0459
0460 _BARRIER
0461
0462 #endif /* ALLOW_RADTRANS */
0463
0464 RETURN
0465 END