File indexing completed on 2024-12-17 18:38:01 UTC
view on githubraw file Latest commit d5e8791b on 2024-01-18 21:45:39 UTC
94b5b7340a Oliv*0001 #include "RADTRANS_OPTIONS.h"
0002 #include "EXF_OPTIONS.h"
0003
0004
0005
0006
0007
0008 SUBROUTINE RADTRANS_CHECK( myThid )
0009
0010
0011
0012
0013
0014 IMPLICIT NONE
0015 #include "SIZE.h"
2c7bf51397 Oliv*0016 #include "EEPARAMS.h"
0017 #include "PARAMS.h"
94b5b7340a Oliv*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 "RADTRANS_SIZE.h"
0024 #include "RADTRANS_PARAMS.h"
0025 #include "RADTRANS_EXF_PARAMS.h"
0026
0027
0028
0029 INTEGER myThid
0030
0031
0032
0033
0034
0035 #ifdef ALLOW_RADTRANS
0036
2c7bf51397 Oliv*0037
0038 INTEGER ILNBLNK
0039 EXTERNAL ILNBLNK
0040
94b5b7340a Oliv*0041
2c7bf51397 Oliv*0042 LOGICAL haveAny,haveAll,addBlkLn
0222db53b0 Oliv*0043 INTEGER oUnit, l, iL, errCount, cnt
94b5b7340a Oliv*0044 CHARACTER*(MAX_LEN_MBUF) msgBuf
2c7bf51397 Oliv*0045 CHARACTER*1 blkLin
94b5b7340a Oliv*0046
0047 _BEGIN_MASTER(myThid)
0048
0049
2c7bf51397 Oliv*0050
94b5b7340a Oliv*0051
0052
2c7bf51397 Oliv*0053
0054 errCount = 0
0055 IF ( useExfYearlyFields ) THEN
0056 IF ( RT_E_RepCycle.NE.0. ) THEN
0057 WRITE(msgBuf,'(2A)') 'RADTRANS_CHECK: The use of ',
0058 & 'useExfYearlyFields AND RT_E_RepCycle is not implemented'
0059 CALL PRINT_ERROR( msgBuf, myThid )
0060 errCount = errCount + 1
0061 ENDIF
0062 IF ( RT_iceRepCycle.NE.0. ) THEN
0063 WRITE(msgBuf,'(2A)') 'RADTRANS_CHECK: The use of ',
0064 & 'useExfYearlyFields AND RT_iceRepCycle is not implemented'
0065 CALL PRINT_ERROR( msgBuf, myThid )
0066 errCount = errCount + 1
0067 ENDIF
0068 ENDIF
0069 IF ( errCount.GE.1 ) THEN
0070 WRITE(msgBuf,'(A,I3,A)')
0071 & 'RADTRANS_CHECK: detected', errCount,' fatal error(s)'
0072 CALL PRINT_ERROR( msgBuf, myThid )
0073 CALL ALL_PROC_DIE( 0 )
0074 STOP 'ABNORMAL END: S/R RADTRANS_CHECK'
94b5b7340a Oliv*0075 ENDIF
1c7c72345b Oliv*0076
0077
0078
2c7bf51397 Oliv*0079
1c7c72345b Oliv*0080 #ifndef ALLOW_SUN
0222db53b0 Oliv*0081 IF (.NOT.(RT_useMeanCosSolz.OR.RT_useOASIMrmud)) THEN
d5e8791b43 Oliv*0082 WRITE(msgBuf,'(2A)') 'RADTRANS_CHECK: need to compile the sun ',
0222db53b0 Oliv*0083 & 'package unless RT_useMeanCosSolz or oasim pkg is used.'
1c7c72345b Oliv*0084 CALL PRINT_ERROR( msgBuf, myThid )
0085 CALL ALL_PROC_DIE( 0 )
0086 STOP 'ABNORMAL END: S/R RADTRANS_CHECK'
0087 ENDIF
0088 #endif
0089
2c7bf51397 Oliv*0090
0091
0092
0222db53b0 Oliv*0093 IF (RT_useOASIMrmud .AND. .NOT.useOASIM) THEN
0094 WRITE(msgBuf,'(2A)') 'RADTRANS_CHECK: ',
0095 & 'RT_useOASIMrmud requires the OASIM package'
0096 CALL PRINT_ERROR( msgBuf, myThid )
0097 CALL ALL_PROC_DIE( 0 )
0098 STOP 'ABNORMAL END: S/R RADTRANS_CHECK'
0099 ENDIF
0100
0101 IF (useOASIM .AND. .NOT.RT_useOASIMrmud) THEN
e8b7a8749d Oliv*0102 WRITE(msgBuf,'(2A)') '** WARNING ** RADTRANS_CHECK: ',
0222db53b0 Oliv*0103 & 'RT_useOASIMrmud=.FALSE. but is recommended with useOASIM'
0104 CALL PRINT_MESSAGE(msgBuf,errorMessageUnit,SQUEEZE_RIGHT,myThid)
0105 ENDIF
0106
0107
0108 cnt = 0
0109 IF (RT_useOASIMrmud) cnt = cnt + 1
0110 IF (RT_useMeanCosSolz) cnt = cnt + 1
0111 IF (RT_useNoonSolz) cnt = cnt + 1
0112 IF (cnt .GT. 1) THEN
0113 WRITE(msgBuf,'(2A)') 'RADTRANS_CHECK: only one of ',
0114 & 'RT_useOASIMrmud, RT_useMeanCosSolz, RT_useNoonSolz can be set'
e8b7a8749d Oliv*0115 CALL PRINT_ERROR( msgBuf, myThid )
0116 CALL ALL_PROC_DIE( 0 )
0117 STOP 'ABNORMAL END: S/R RADTRANS_CHECK'
0118 ENDIF
0119
94b5b7340a Oliv*0120
0121
0122 errCount = 0
0123 IF ( useExfYearlyFields ) THEN
0124 IF ( RT_E_RepCycle.NE.0. ) THEN
0125 WRITE(msgBuf,'(2A)') 'RADTRANS_CHECK: The use of ',
0126 & 'useExfYearlyFields AND RT_E_RepCycle is not implemented'
0127 CALL PRINT_ERROR( msgBuf, myThid )
0128 errCount = errCount + 1
0129 ENDIF
0130 IF ( RT_iceRepCycle.NE.0. ) THEN
0131 WRITE(msgBuf,'(2A)') 'RADTRANS_CHECK: The use of ',
0132 & 'useExfYearlyFields AND RT_iceRepCycle is not implemented'
0133 CALL PRINT_ERROR( msgBuf, myThid )
0134 errCount = errCount + 1
0135 ENDIF
0136 ENDIF
0137 IF ( errCount.GE.1 ) THEN
0138 WRITE(msgBuf,'(A,I3,A)')
0139 & 'RADTRANS_CHECK: detected', errCount,' fatal error(s)'
0140 CALL PRINT_ERROR( msgBuf, myThid )
0141 CALL ALL_PROC_DIE( 0 )
0142 STOP 'ABNORMAL END: S/R RADTRANS_CHECK'
0143 ENDIF
0144
2c7bf51397 Oliv*0145
0146
0147 blkLin = ' '
0148
0149
0150
0151
0152 WRITE(msgBuf,'(A)') 'RADTRANS_CHECK: #define ALLOW_RADTRANS'
0153 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
0154 & SQUEEZE_RIGHT, 1 )
0155 CALL PRINT_MESSAGE( blkLin, standardMessageUnit,
0156 & SQUEEZE_RIGHT , myThid )
0157
0158 WRITE(msgBuf,'(A)') 'RADTRANS_CHECK: wavebands:'
0159 CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,
0160 & SQUEEZE_RIGHT,myThid)
0161 WRITE(msgBuf,'(2A)') 'RADTRANS_CHECK: ',
0162 & ' idx low rep high width'
0163 CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,
0164 & SQUEEZE_RIGHT,myThid)
0165 DO l=1,nlam
0166 WRITE(msgBuf,'(A,I4,F10.3,F6.0,F10.3,F9.3)')
0167 & 'RADTRANS_CHECK: ', l, RT_wbEdges(l),
0168 & RT_wbRefWLs(l),RT_wbEdges(l+1),RT_wbWidths(l)
0169 CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,
0170 & SQUEEZE_RIGHT,myThid)
0171 ENDDO
0172 CALL PRINT_MESSAGE( blkLin, standardMessageUnit,
0173 & SQUEEZE_RIGHT , myThid )
0174
0175
0176
0177 IF ( myProcId.EQ.0 .AND. myThid.EQ.1 ) THEN
0178 CALL MDSFINDUNIT( oUnit, myThid )
0179 OPEN(oUnit,file='pwaves-check.dat',status='unknown')
0180 WRITE(oUnit,'(F6.0)')RT_wbRefWLs
0181 CLOSE(oUnit)
0182 ENDIF
0183
0184
0185
0186
0187
0188 addBlkLn = .FALSE.
0189
87dd4f7d5f Oliv*0190 IF ( .NOT.useOASIM ) THEN
0191 haveAny = .FALSE.
0192 haveAll = .FALSE.
0193 DO l=1,nlam
0194 IF ( RT_EdFile(l).EQ.' ' ) THEN
0195 haveAll = .FALSE.
0196 ELSE
0197 haveAny = .TRUE.
0198 WRITE(msgBuf,'(A,I3.3,A)')'RT_Ed',l,' forcing'
0199 iL = ILNBLNK(msgBuf)
0200 CALL EXF_FLD_SUMMARY( msgBuf(1:iL),
0201 I RT_EdFile(l), RT_E_RepCycle, RT_E_period,
0202 I RT_E_StartTime, useExfYearlyFields, addBlkLn, myThid )
0203 ENDIF
0204 ENDDO
2c7bf51397 Oliv*0205
0206 CALL PRINT_MESSAGE( blkLin, standardMessageUnit,
0207 & SQUEEZE_RIGHT , myThid )
0208
87dd4f7d5f Oliv*0209 DO l=1,nlam
0210 IF ( RT_EsFile(l).EQ.' ' ) THEN
0211 haveAll = .FALSE.
0212 ELSE
0213 haveAny = .TRUE.
0214 WRITE(msgBuf,'(A,I3.3,A)')'RT_Es',l,' forcing'
0215 iL = ILNBLNK(msgBuf)
0216 CALL EXF_FLD_SUMMARY( msgBuf(1:iL),
0217 I RT_EsFile(l), RT_E_RepCycle, RT_E_period,
0218 I RT_E_StartTime, useExfYearlyFields, addBlkLn, myThid )
0219 ENDIF
0220 ENDDO
0221
0222 IF (haveAny) THEN
0223 CALL PRINT_MESSAGE( blkLin, standardMessageUnit,
0224 & SQUEEZE_RIGHT , myThid )
0225 CALL WRITE_1D_RL(RT_Ed_exfremo_intercept,nlam,INDEX_NONE,
0226 & 'RT_Ed_exfremo_intercept =',
0227 & ' /* intercept for RT_Ed forcing mean removal */')
0228 CALL WRITE_1D_RL(RT_Ed_exfremo_slope,nlam,INDEX_NONE,
0229 & 'RT_Ed_exfremo_slope =',
0230 & ' /* slope for RT_Ed forcing trend removal */')
0231 CALL WRITE_1D_RL(RT_inscal_Ed,nlam,INDEX_NONE,
0232 & 'RT_inscal_Ed =',
0233 & ' /* scaling factor for RT_Ed fields */')
0234
0235 CALL PRINT_MESSAGE( blkLin, standardMessageUnit,
0236 & SQUEEZE_RIGHT , myThid )
0237
0238 CALL WRITE_1D_RL(RT_Es_exfremo_intercept,nlam,INDEX_NONE,
0239 & 'RT_Es_exfremo_intercept =',
0240 & ' /* intercept for RT_Es forcing mean removal */')
0241 CALL WRITE_1D_RL(RT_Es_exfremo_slope,nlam,INDEX_NONE,
0242 & 'RT_Es_exfremo_slope =',
0243 & ' /* slope for RT_Es forcing trend removal */')
0244 CALL WRITE_1D_RL(RT_inscal_Es,nlam,INDEX_NONE,
0245 & 'RT_inscal_Es =',
0246 & ' /* scaling factor for RT_Es fields */')
0247 ENDIF
0248 IF (.NOT.haveAll) THEN
0249 CALL WRITE_1D_RL(RT_Ed_const,nlam,INDEX_NONE,
0250 & 'RT_Ed_const =',
0251 & ' /* constant RT_Ed forcing */')
0252 CALL WRITE_1D_RL(RT_Es_const,nlam,INDEX_NONE,
0253 & 'RT_Es_const =',
0254 & ' /* constant RT_Es forcing */')
0255 ENDIF
2c7bf51397 Oliv*0256
87dd4f7d5f Oliv*0257 CALL WRITE_0D_C(RT_E_mask,-1,INDEX_NONE,
0258 & 'RT_E_mask =',
0259 & ' /* mask for RT_E forcing */')
2c7bf51397 Oliv*0260
87dd4f7d5f Oliv*0261
0262 ENDIF
2c7bf51397 Oliv*0263
0264 CALL PRINT_MESSAGE( blkLin, standardMessageUnit,
0265 & SQUEEZE_RIGHT , myThid )
0266
0267
0268 IF ( RT_icefile.NE.' ' ) THEN
0269 CALL EXF_FLD_SUMMARY( 'RT_ice forcing',
0270 I RT_icefile, RT_iceRepCycle, RT_iceperiod,
0271 I RT_iceStartTime, useExfYearlyFields, addBlkLn, myThid )
0272 CALL PRINT_MESSAGE( blkLin, standardMessageUnit,
0273 & SQUEEZE_RIGHT , myThid )
0274 CALL WRITE_0D_RL(RT_ice_exfremo_intercept,INDEX_NONE,
0275 & 'RT_ice_exfremo_intercept =',
0276 & ' /* intercept for RT_ice forcing mean removal */')
0277 CALL WRITE_0D_RL(RT_ice_exfremo_slope,INDEX_NONE,
0278 & 'RT_ice_exfremo_slope =',
0279 & ' /* slope for RT_ice forcing trend removal */')
0280 CALL WRITE_0D_RL(RT_inscal_ice,INDEX_NONE,
0281 & 'RT_inscal_ice =',
0282 & ' /* scaling factor for RT_ice fields */')
0283 ELSE
0284 CALL WRITE_0D_RL(RT_iceconst,INDEX_NONE,
0285 & 'RT_iceconst =',
0286 & ' /* constant RT_ice forcing */')
0287 ENDIF
0288
0289 IF ( RT_icefile.NE.' ' .OR. RT_iceconst.NE.0D0 ) THEN
0290 CALL WRITE_0D_C(RT_icemask,-1,INDEX_NONE,
0291 & 'RT_icemask =',
0292 & ' /* mask for RT_ice forcing */')
0293 ENDIF
0294
0295 CALL PRINT_MESSAGE( blkLin, standardMessageUnit,
0296 & SQUEEZE_RIGHT , myThid )
0297
0298 CALL WRITE_0D_RL(RT_refract_water,INDEX_NONE,
0299 &'RT_refract_water =',
0300 &' /* refractive index of water */')
0301 CALL WRITE_0D_RL(RT_rmud_max,INDEX_NONE,
0302 &'RT_rmud_max =',
0303 &' /* cutoff for inverse cosine of solar zenith angle */')
0304 CALL WRITE_1D_RL(RT_wbEdges,nlam,INDEX_NONE,
0305 &'RT_wbEdges =',
0306 &' /* waveband edges [nm] */')
0307 CALL WRITE_1D_RL(RT_wbRefWLs,nlam,INDEX_NONE,
0308 &'RT_wbRefWLs =',
0309 &' /* reference wavelengths for wavebands [nm] */')
0310 CALL WRITE_1D_RL(RT_wbWidths,nlam,INDEX_NONE,
0311 &'RT_wbWidths =',
0312 &' /* waveband widths [nm] */')
0313 CALL WRITE_0D_RL(RT_wbTotalWidth,INDEX_NONE,
0314 &'RT_wbTotalWidth =',
0315 &' /* total width of all wavebands [nm] */')
0316 CALL WRITE_0D_I(RT_kmax,INDEX_NONE,
0317 &'RT_kmax =',
0318 &' /* maximum depth index for radtrans computations */')
0222db53b0 Oliv*0319 CALL WRITE_0D_L(RT_useOASIMrmud,INDEX_NONE,
0320 &'RT_useOASIMrmud =',
0321 &' /* use mean solar zenith angle from OASIM */')
2c7bf51397 Oliv*0322 CALL WRITE_0D_L(RT_useMeanCosSolz,INDEX_NONE,
0323 &'RT_useMeanCosSolz =',
0324 &' /* flag for using mean daytime cosine of solar zenith angle */')
0325 CALL WRITE_0D_L(RT_useNoonSolz,INDEX_NONE,
0326 &'RT_useNoonSolz =',
0327 &' /* flag for using noon solar zenith angle */')
0328 CALL WRITE_0D_RL(RT_sfcIrrThresh,INDEX_NONE,
0329 &'RT_sfcIrrThresh =',
0330 &' /* minimum irradiance for radiative transfer computations */')
0222db53b0 Oliv*0331 CALL WRITE_1D_RL(RT_oasimWgt,nlam,INDEX_NONE,
0332 &'RT_oasimWgt =',
0333 &' /* weight multiplying each waveband from OASIM */')
2c7bf51397 Oliv*0334 CALL WRITE_0D_RL(RT_rmus,INDEX_NONE,
0335 &'RT_rmus =',
0336 &' /* mean inv. cosine of zenith angle for dwnwrd diff. irr. */')
0337 CALL WRITE_0D_RL(RT_rmuu,INDEX_NONE,
0338 &'RT_rmuu =',
0339 &' /* mean inv. cosine of zenith angle for upward diff. irr. */')
0340 CALL WRITE_0D_RL(RT_rd,INDEX_NONE,
0341 &'RT_rd =',
0342 &' /* mean upward scattering fraction for downward diff. irr. */')
0343 CALL WRITE_0D_RL(RT_ru,INDEX_NONE,
0344 &'RT_ru =',
0345 &' /* mean downward scattering fraction for upward diff. irr. */')
0346 CALL WRITE_0D_L(RT_useSEAICE,INDEX_NONE,
0347 &'RT_useSEAICE =',
0348 &' /* use ice fraction from seaice package */')
0349 CALL WRITE_0D_L(RT_haveIce,INDEX_NONE,
0350 &'RT_haveIce =',
0351 &' /* whether iceFile iceConst have been provided */')
0352 CALL WRITE_1D_RL(RT_WtouEins,nlam,INDEX_NONE,
0353 &'RT_WtouEins =',
0354 &' /* conversion factors for irradiance to PAR */')
0355
94b5b7340a Oliv*0356
0357 _END_MASTER(myThid)
0358
0359
0360 _BARRIER
0361
0362 #endif /* ALLOW_RADTRANS */
0363
0364 RETURN
0365 END