File indexing completed on 2025-11-07 06:08:44 UTC
view on githubraw file Latest commit b7411f1a on 2025-11-06 19:05:26 UTC
31ebb84b18 Jean*0001 #include "OCN_CPL_OPTIONS.h"
69e21e3ef0 Jean*0002
0003
0004
0005
0006 SUBROUTINE CPL_READPARMS( myThid )
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
42a361c5e5 Jean*0017
69e21e3ef0 Jean*0018
0019 IMPLICIT NONE
0020
0021
0022 #include "SIZE.h"
0023 #include "EEPARAMS.h"
0024 #include "PARAMS.h"
f5803a5d6d Jean*0025 #include "CPL_PARAMS.h"
6c5a9380b0 Ed H*0026 #ifdef ALLOW_MNC
0027 #include "MNC_PARAMS.h"
0028 #endif
69e21e3ef0 Jean*0029
0030
49715ba709 Jean*0031
69e21e3ef0 Jean*0032 INTEGER myThid
0033
0034
0035 #ifdef COMPONENT_MODULE
49715ba709 Jean*0036
0037
69e21e3ef0 Jean*0038
49715ba709 Jean*0039
0040
69e21e3ef0 Jean*0041
0042
0043
0044 CHARACTER*(MAX_LEN_MBUF) msgBuf
49715ba709 Jean*0045 INTEGER iUnit
0046
b7411f1a84 Jean*0047
0048
0049
0050
0051
44ff40f0ae Jean*0052 LOGICAL cpl_earlyExpImpCall
b7411f1a84 Jean*0053 LOGICAL cpl_timeave_mnc
0054 _RL cpl_taveFreq
69e21e3ef0 Jean*0055
0056
0057
8504a02c3f Jean*0058
69e21e3ef0 Jean*0059
0060
0061
e596558d31 Jean*0062
d06ba90ed2 Jean*0063
0064
0065
0066
0067
0068
0069
69e21e3ef0 Jean*0070 NAMELIST /CPL_OCN_PARAM/
e596558d31 Jean*0071 & cpl_earlyExpImpCall,
d4b28e407b Jean*0072 & useImportHFlx, useImportFW, useImportTau,
d06ba90ed2 Jean*0073 & useImportSLP, useImportRunOff,
0074 & useImportSIce, useImportThSIce, useImportSltPlm,
0075 & useImportFice, useImportCO2, useImportWSpd,
6c5a9380b0 Ed H*0076 & cpl_taveFreq, cpl_snapshot_mnc, cpl_timeave_mnc
69e21e3ef0 Jean*0077
0078
0079
49715ba709 Jean*0080 _BEGIN_MASTER(myThid)
0081
0082
0083 WRITE(msgBuf,'(A)') ' CPL_READPARMS: opening data.cpl'
31ebb84b18 Jean*0084 CALL PRINT_MESSAGE( msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1 )
49715ba709 Jean*0085
0086 CALL OPEN_COPY_DATA_FILE( 'data.cpl', 'CPL_READPARMS',
0087 O iUnit, myThid )
0088
69e21e3ef0 Jean*0089
d06ba90ed2 Jean*0090 useImportHFlx = .TRUE.
0091 useImportFW = .TRUE.
0092 useImportTau = .TRUE.
0093 useImportSLP = .TRUE.
0094 useImportRunOff = cpl_exchange_RunOff.EQ.3
0095 useImportSIce = cpl_exchange1W_sIce.EQ.3
0096 useImportThSIce = cpl_exchange2W_sIce.EQ.3
0097 useImportSltPlm = cpl_exchange_SaltPl.EQ.3
0098 useImportFice =( cpl_exchange_DIC .EQ. 3 .AND.
0099 & cpl_exchange1W_sIce.EQ.3 )
0100
0101 useImportCO2 = cpl_exchange_DIC .EQ. 3
0102 useImportWSpd = cpl_exchange_DIC .EQ. 3
f5803a5d6d Jean*0103 #ifdef ALLOW_MNC
b7411f1a84 Jean*0104 cpl_snapshot_mnc = useMNC .AND. snapshot_mnc
42a361c5e5 Jean*0105 #else
0106 cpl_snapshot_mnc = .FALSE.
f5803a5d6d Jean*0107 #endif
b7411f1a84 Jean*0108
0109 cpl_earlyExpImpCall = .TRUE.
0110 cpl_timeave_mnc = .FALSE.
0111 cpl_taveFreq = UNSET_RL
42a361c5e5 Jean*0112
69e21e3ef0 Jean*0113
0114
0115
0116 READ(UNIT=iUnit,NML=CPL_OCN_PARAM)
0117
42a361c5e5 Jean*0118 WRITE(msgBuf,'(A)')
69e21e3ef0 Jean*0119 & ' CPL_READPARMS: finished reading data.cpl'
31ebb84b18 Jean*0120 CALL PRINT_MESSAGE( msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1 )
42a361c5e5 Jean*0121
69e21e3ef0 Jean*0122
7a77863887 Mart*0123 #ifdef SINGLE_DISK_IO
69e21e3ef0 Jean*0124 CLOSE(iUnit)
7a77863887 Mart*0125 #else
0126 CLOSE(iUnit,STATUS='DELETE')
0127 #endif /* SINGLE_DISK_IO */
69e21e3ef0 Jean*0128
0129
44ff40f0ae Jean*0130
0131 IF ( .NOT.cpl_earlyExpImpCall ) THEN
0132 WRITE(msgBuf,'(2A)') 'CPL_READPARMS: ',
0133 & 'Parameter "cpl_earlyExpImpCall" has been retired;'
0134 CALL PRINT_ERROR( msgBuf, myThid )
0135 WRITE(msgBuf,'(2A)') 'CPL_READPARMS: ',
0136 & '=> always call coupler early in sequence of calls'
0137 CALL PRINT_ERROR( msgBuf, myThid )
31ebb84b18 Jean*0138 cplErrorCount = cplErrorCount + 1
44ff40f0ae Jean*0139 ENDIF
b7411f1a84 Jean*0140 IF ( cpl_taveFreq .NE. UNSET_RL ) THEN
0141 WRITE(msgBuf,'(2A)') 'CPL_READPARMS: "cpl_taveFreq"',
0142 & ' is no longer allowed in file "data.cpl"'
0143 CALL PRINT_ERROR( msgBuf, myThid )
0144 WRITE(msgBuf,'(2A)') 'CPL_READPARMS: ',
0145 & ' since "pkg/timeave" has been removed.'
0146 CALL PRINT_ERROR( msgBuf, myThid )
0147 cplErrorCount = cplErrorCount + 1
0148 ENDIF
0149 IF ( cpl_timeave_mnc ) THEN
0150 WRITE(msgBuf,'(2A)') 'CPL_READPARMS: "cpl_timeave_mnc"',
0151 & ' is no longer allowed in file "data.cpl"'
0152 CALL PRINT_ERROR( msgBuf, myThid )
0153 WRITE(msgBuf,'(2A)') 'CPL_READPARMS: ',
0154 & ' since "pkg/timeave" has been removed.'
0155 CALL PRINT_ERROR( msgBuf, myThid )
0156 cplErrorCount = cplErrorCount + 1
0157 ENDIF
44ff40f0ae Jean*0158
69e21e3ef0 Jean*0159
0160
d06ba90ed2 Jean*0161 #ifndef ALLOW_DIC
0162 IF ( ocn_cplExch_RunOff ) THEN
0163 WRITE(msgBuf,'(2A)') 'CPL_READPARMS: needs',
0164 & ' to compile pkg/dic to use: ocn_cplExch_RunOff=T'
0165 CALL PRINT_ERROR( msgBuf, myThid )
0166 WRITE(msgBuf,'(2A)') 'CPL_READPARMS: ',
0167 & ' (set from Coupler "data.cpl": cpl_exchange_RunOff=1,3)'
0168 CALL PRINT_ERROR( msgBuf, myThid )
0169 cplErrorCount = cplErrorCount + 1
0170 ENDIF
0171 #endif /* ndef ALLOW_DIC */
0172 #ifndef ALLOW_THSICE
0173 IF ( ocn_cplExch2W_sIce ) THEN
0174 WRITE(msgBuf,'(2A)') 'CPL_READPARMS: needs',
0175 & ' to compile pkg/thsice to use: ocn_cplExch2W_sIce=T'
0176 CALL PRINT_ERROR( msgBuf, myThid )
0177 WRITE(msgBuf,'(2A)') 'CPL_READPARMS: ',
0178 & ' (set from Coupler "data.cpl": cpl_exchange2W_sIce=1,3)'
0179 CALL PRINT_ERROR( msgBuf, myThid )
0180 cplErrorCount = cplErrorCount + 1
0181 ENDIF
0182 #endif /* ndef ALLOW_THSICE */
0183 #ifndef ALLOW_SALT_PLUME
0184 IF ( ocn_cplExch_SaltPl ) THEN
0185 WRITE(msgBuf,'(2A)') 'CPL_READPARMS: needs',
0186 & ' compiled pkg/salt_plume to use: ocn_cplExch_SaltPl=T'
0187 CALL PRINT_ERROR( msgBuf, myThid )
0188 WRITE(msgBuf,'(2A)') 'CPL_READPARMS: ',
0189 & ' (set from Coupler "data.cpl": cpl_exchange_SaltPl=1,3)'
0190 CALL PRINT_ERROR( msgBuf, myThid )
0191 cplErrorCount = cplErrorCount + 1
0192 ENDIF
0193 #endif /* ndef ALLOW_SALT_PLUME */
0194 #ifndef ALLOW_DIC
0195 IF ( ocn_cplExch_DIC ) THEN
0196 WRITE(msgBuf,'(2A)') 'CPL_READPARMS: needs',
0197 & ' to compile pkg/dic to use: ocn_cplExch_DIC = T'
0198 CALL PRINT_ERROR( msgBuf, myThid )
0199 WRITE(msgBuf,'(2A)') 'CPL_READPARMS: ',
0200 & ' (set from Coupler "data.cpl": cpl_exchange_DIC = 1,3)'
0201 CALL PRINT_ERROR( msgBuf, myThid )
0202 cplErrorCount = cplErrorCount + 1
0203 ENDIF
0204 #endif /* ndef ALLOW_DIC */
0205
d4b28e407b Jean*0206 #ifndef ATMOSPHERIC_LOADING
8504a02c3f Jean*0207 iUnit = errorMessageUnit
d4b28e407b Jean*0208 IF ( useImportSLP ) THEN
8504a02c3f Jean*0209 WRITE(msgBuf,'(2A)') '** WARNING ** CPL_READPARMS:',
0210 & ' useImportSLP is set but'
31ebb84b18 Jean*0211 CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT, myThid )
d4b28e407b Jean*0212 ELSEIF ( useImportSIce ) THEN
8504a02c3f Jean*0213 WRITE(msgBuf,'(2A)') '** WARNING ** CPL_READPARMS:',
0214 & ' useImportSIce is set but'
31ebb84b18 Jean*0215 CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT, myThid )
d4b28e407b Jean*0216 ENDIF
0217 IF ( useImportSLP .OR. useImportSIce ) THEN
8504a02c3f Jean*0218 WRITE(msgBuf,'(2A)') '** WARNING ** CPL_READPARMS:',
0219 & ' pressure loading code is not active.'
31ebb84b18 Jean*0220 CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT, myThid )
e7c6a47db7 Jeff*0221
0222
0223
d4b28e407b Jean*0224 ENDIF
8504a02c3f Jean*0225 #endif /* ATMOSPHERIC_LOADING */
d4b28e407b Jean*0226
d06ba90ed2 Jean*0227 IF ( useImportRunOff .AND. cpl_exchange_RunOff.NE.3 ) THEN
0228 WRITE(msgBuf,'(2A)') 'CPL_READPARMS: useImportRunOff',
0229 & ' requires setting'
0230 CALL PRINT_ERROR( msgBuf, myThid)
0231 WRITE(msgBuf,'(2A)') 'CPL_READPARMS: ',
0232 & ' cpl_exchange_RunOff = 3 (in Coupler "data.cpl")'
0233 CALL PRINT_ERROR( msgBuf, myThid)
0234 cplErrorCount = cplErrorCount + 1
0235 ENDIF
0236 IF ( ( useImportSIce .OR.
0237 & useImportFice.AND.cpl_exchange2W_sIce.NE.3 )
0238 & .AND. cpl_exchange1W_sIce.NE.3 ) THEN
0239 WRITE(msgBuf,'(2A)') 'CPL_READPARMS: useImport',
0240 & ' SIce-Mass/Frac requires setting'
0241 CALL PRINT_ERROR( msgBuf, myThid)
0242 WRITE(msgBuf,'(2A)') 'CPL_READPARMS: ',
0243 & ' cpl_exchange1W_sIce = 3 (in Coupler "data.cpl")'
0244 CALL PRINT_ERROR( msgBuf, myThid)
0245 cplErrorCount = cplErrorCount + 1
0246 ENDIF
0247 IF ( useImportThSIce .AND. .NOT.ocn_cplExch2W_sIce ) THEN
0248 WRITE(msgBuf,'(2A)') 'CPL_READPARMS: useImportThSIce',
0249 & ' requires setting'
0250 CALL PRINT_ERROR( msgBuf, myThid)
0251 WRITE(msgBuf,'(2A)') 'CPL_READPARMS: ',
0252 & ' cpl_exchange2W_sIce=1,3 (in Coupler "data.cpl")'
0253 CALL PRINT_ERROR( msgBuf, myThid)
0254 cplErrorCount = cplErrorCount + 1
0255 ELSEIF ( useImportThSIce .AND. cpl_exchange2W_sIce.NE.3 ) THEN
0256 WRITE(msgBuf,'(2A)') '** WARNING ** CPL_READPARMS: ',
0257 & 'useImportThSIce useless without'
0258 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
0259 & SQUEEZE_RIGHT, myThid )
0260 WRITE(msgBuf,'(2A)') '** WARNING ** CPL_READPARMS: ',
0261 & ' cpl_exchange2W_sIce = 3 (in Coupler "data.cpl")'
0262 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
0263 & SQUEEZE_RIGHT, myThid )
0264 ENDIF
0265 IF ( useImportSltPlm .AND. cpl_exchange_SaltPl.NE.3 ) THEN
0266 WRITE(msgBuf,'(2A)') 'CPL_READPARMS: useImportSltPlm',
0267 & ' requires setting'
0268 CALL PRINT_ERROR( msgBuf, myThid)
0269 WRITE(msgBuf,'(2A)') 'CPL_READPARMS: ',
0270 & ' cpl_exchange_SaltPl = 3 (in Coupler "data.cpl")'
0271 CALL PRINT_ERROR( msgBuf, myThid)
0272 cplErrorCount = cplErrorCount + 1
0273 ENDIF
0274 IF ( ( useImportFice.AND.cpl_exchange2W_sIce.NE.3
0275 & .OR. useImportCO2 .OR. useImportWSpd )
0276 & .AND. cpl_exchange_DIC.NE.3 ) THEN
6826bab212 Jean*0277 WRITE(msgBuf,'(2A)') 'CPL_READPARMS: useImport',
d06ba90ed2 Jean*0278 & ' with DIC variables requires setting'
0279 CALL PRINT_ERROR( msgBuf, myThid)
0280 WRITE(msgBuf,'(2A)') 'CPL_READPARMS: ',
0281 & ' cpl_exchange_DIC = 3 (in Coupler "data.cpl")'
e7c6a47db7 Jeff*0282 CALL PRINT_ERROR( msgBuf, myThid)
31ebb84b18 Jean*0283 cplErrorCount = cplErrorCount + 1
e7c6a47db7 Jeff*0284 ENDIF
0285
6c5a9380b0 Ed H*0286
42a361c5e5 Jean*0287 cpl_snapshot_mdsio = .TRUE.
0288 #ifdef ALLOW_MNC
b7411f1a84 Jean*0289 cpl_snapshot_mnc = useMNC .AND. cpl_snapshot_mnc
0290 cpl_snapshot_mdsio = ( .NOT.cpl_snapshot_mnc )
0291 & .OR. outputTypesInclusive
42a361c5e5 Jean*0292 #endif
0293
69e21e3ef0 Jean*0294
0295
0296
31ebb84b18 Jean*0297
69e21e3ef0 Jean*0298
0299 iUnit = standardMessageUnit
0300 WRITE(msgBuf,'(A)') ' '
31ebb84b18 Jean*0301 CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT, myThid )
69e21e3ef0 Jean*0302 WRITE(msgBuf,'(A)') '// ==================================='
31ebb84b18 Jean*0303 CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT, myThid )
0304 WRITE(msgBuf,'(A)') '// Coupling set-up summary :'
0305 CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT, myThid )
69e21e3ef0 Jean*0306 WRITE(msgBuf,'(A)') '// ==================================='
31ebb84b18 Jean*0307 CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT, myThid )
0308
0309
0310 WRITE(msgBuf,'(A)') '// -------'
0311 CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT, myThid )
0312 WRITE(msgBuf,'(A)')
0313 & '// Coupler-exchange switch (received from coupler):'
0314 CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT, myThid )
0315
0316 CALL WRITE_0D_L( ocn_cplSequential, INDEX_NONE,
0317 & 'ocn_cplSequential =',
0318 & ' /* use Sequential Coupling Exchange on/off flag */')
0319
0320 CALL WRITE_0D_L( ocn_cplExch_RunOff, INDEX_NONE,
0321 & 'ocn_cplExch_RunOff =',
0322 & ' /* exchange RunOff fields with coupler on/off */')
0323 CALL WRITE_0D_L( ocn_cplExch1W_sIce, INDEX_NONE,
0324 & 'ocn_cplExch1W_sIce =',
0325 & ' /* 1-way exchange of seaice vars with coupler */')
0326 CALL WRITE_0D_L( ocn_cplExch2W_sIce, INDEX_NONE,
0327 & 'ocn_cplExch2W_sIce =',
0328 & ' /* 2-way exchange of ThSIce vars with coupler */')
0329 CALL WRITE_0D_L( ocn_cplExch_SaltPl, INDEX_NONE,
0330 & 'ocn_cplExch_SaltPl =',
0331 & ' /* exchange Salt-Plume fields with coupler */')
0332 CALL WRITE_0D_L( ocn_cplExch_DIC, INDEX_NONE,
0333 & 'ocn_cplExch_DIC =',
0334 & ' /* exchange DIC fields with coupler on/off */')
0335
0336
0337 WRITE(msgBuf,'(A)') '// -------'
0338 CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT, myThid )
0339 WRITE(msgBuf,'(A)')
0340 & '// Coupler parameters (from local param file):'
0341 CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT, myThid )
69e21e3ef0 Jean*0342
0343 CALL WRITE_0D_L( useImportHFlx, INDEX_NONE,
d06ba90ed2 Jean*0344 & 'useImportHFlx =',
42a361c5e5 Jean*0345 & ' /* use Imported Heat-Flx fr Coupler on/off flag */')
69e21e3ef0 Jean*0346 CALL WRITE_0D_L( useImportFW , INDEX_NONE,
d06ba90ed2 Jean*0347 & 'useImportFW =',
42a361c5e5 Jean*0348 & ' /* use Imported Fresh-Water fr Cpl. on/off flag */')
69e21e3ef0 Jean*0349 CALL WRITE_0D_L( useImportTau , INDEX_NONE,
d06ba90ed2 Jean*0350 & 'useImportTau =',
42a361c5e5 Jean*0351 & ' /* use Imported Wind-Stress fr Cpl. on/off flag */')
e596558d31 Jean*0352 CALL WRITE_0D_L( useImportSLP , INDEX_NONE,
d06ba90ed2 Jean*0353 & 'useImportSLP =',
42a361c5e5 Jean*0354 & ' /* use Imported Sea-level Atm Press on/off flag */')
d06ba90ed2 Jean*0355 CALL WRITE_0D_L( useImportRunOff , INDEX_NONE,
0356 & 'useImportRunOff=',
0357 & ' /* use Imported Run-Off fr Cpl. on/off flag */')
d4b28e407b Jean*0358 CALL WRITE_0D_L( useImportSIce , INDEX_NONE,
d06ba90ed2 Jean*0359 & 'useImportSIce =',
42a361c5e5 Jean*0360 & ' /* use Imported Sea-Ice loading on/off flag */')
d06ba90ed2 Jean*0361 CALL WRITE_0D_L( useImportThSIce , INDEX_NONE,
0362 & 'useImportThSIce=',
0363 & ' /* use Imported thSIce state-var on/off flag */')
0364 CALL WRITE_0D_L( useImportSltPlm , INDEX_NONE,
0365 & 'useImportSltPlm=',
0366 & ' /* use Imported Salt-Plume flux on/off flag */')
0367 CALL WRITE_0D_L( useImportFice , INDEX_NONE,
0368 & 'useImportFice =',
0369 & ' /* use Imported Seaice Frac (DIC-only) flag */')
6826bab212 Jean*0370 CALL WRITE_0D_L( useImportCO2 , INDEX_NONE,
d06ba90ed2 Jean*0371 & 'useImportCO2 =',
e7c6a47db7 Jeff*0372 & ' /* use Imported Atmos. CO2 fr Cpl. on/off flag */')
6826bab212 Jean*0373 CALL WRITE_0D_L( useImportWSpd , INDEX_NONE,
d06ba90ed2 Jean*0374 & 'useImportWSpd =',
e7c6a47db7 Jeff*0375 & ' /* use Imported Windspeed fr Cpl. on/off flag */')
d06ba90ed2 Jean*0376
31ebb84b18 Jean*0377 WRITE(msgBuf,'(A)') '// ==================================='
0378 CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT, myThid )
0379 WRITE(msgBuf,'(A)') '// End of Coupling set-up summary'
0380 CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT, myThid )
0381 WRITE(msgBuf,'(A)') '// ==================================='
0382 CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT, myThid )
0383
69e21e3ef0 Jean*0384
0385
0386 _END_MASTER(myThid)
42a361c5e5 Jean*0387
69e21e3ef0 Jean*0388
0389 _BARRIER
0390
0391 #endif /* COMPONENT_MODULE */
0392
0393 RETURN
0394 END