File indexing completed on 2025-11-07 06:08:46 UTC
view on githubraw file Latest commit b7411f1a on 2025-11-06 19:05:26 UTC
785a077159 Alis*0001 #include "PTRACERS_OPTIONS.h"
46918f1b26 Jean*0002 #include "GAD_OPTIONS.h"
785a077159 Alis*0003
d2825c6d08 Ed H*0004
785a077159 Alis*0005
d2825c6d08 Ed H*0006
e6469f285f Jean*0007
d2825c6d08 Ed H*0008
785a077159 Alis*0009 SUBROUTINE PTRACERS_READPARMS( myThid )
e6469f285f Jean*0010
d2825c6d08 Ed H*0011
785a077159 Alis*0012
0013
d2825c6d08 Ed H*0014
785a077159 Alis*0015 IMPLICIT NONE
0016 #include "SIZE.h"
0017 #include "EEPARAMS.h"
4e66ab0b67 Oliv*0018 #ifdef ALLOW_LONGSTEP
0019 #include "LONGSTEP_PARAMS.h"
0020 #endif
636477d15b Jean*0021 #include "PTRACERS_SIZE.h"
0a278985fd Jean*0022 #include "PTRACERS_PARAMS.h"
981f32514d Dimi*0023 #include "PARAMS.h"
50653b81f1 Ed H*0024 #ifdef ALLOW_MNC
0025 #include "MNC_PARAMS.h"
0026 #endif
a30418b6b9 Ed H*0027
d2825c6d08 Ed H*0028
785a077159 Alis*0029 INTEGER myThid
d2825c6d08 Ed H*0030
785a077159 Alis*0031
0032 #ifdef ALLOW_PTRACERS
d2825c6d08 Ed H*0033
d75c5feb26 Jean*0034
d2825c6d08 Ed H*0035
b7411f1a84 Jean*0036
d2825c6d08 Ed H*0037
b7411f1a84 Jean*0038
d75c5feb26 Jean*0039 INTEGER k, iTracer
b7411f1a84 Jean*0040 INTEGER iUnit, errCount
d2825c6d08 Ed H*0041 INTEGER ic
785a077159 Alis*0042 CHARACTER*(MAX_LEN_MBUF) msgBuf
d75c5feb26 Jean*0043 _RL PTRACERS_diffKr(PTRACERS_num)
282caa8385 Jean*0044 _RL tauTr1ClimRelax
b7411f1a84 Jean*0045
636477d15b Jean*0046
0047
b7411f1a84 Jean*0048 _RL PTRACERS_taveFreq
0049 LOGICAL PTRACERS_timeave_mnc
0050
636477d15b Jean*0051 NAMELIST /PTRACERS_PARM01/
282caa8385 Jean*0052 & tauTr1ClimRelax,
dc3a357327 Jean*0053 & PTRACERS_numInUse,
0054 & PTRACERS_Iter0,
fc10d43a89 Jean*0055 & PTRACERS_doAB_onGpTr,
dc3a357327 Jean*0056 & PTRACERS_addSrelax2EmP,
0057 & PTRACERS_startStepFwd,
5d1aafd341 Jean*0058 & PTRACERS_resetFreq,
0059 & PTRACERS_resetPhase,
d2825c6d08 Ed H*0060 & PTRACERS_advScheme,
1883875e84 Jean*0061 & PTRACERS_ImplVertAdv,
d2825c6d08 Ed H*0062 & PTRACERS_diffKh,
0063 & PTRACERS_diffK4,
0064 & PTRACERS_diffKr,
d75c5feb26 Jean*0065 & PTRACERS_diffKrNr,
dd33ff71a5 Mart*0066 & PTRACERS_ref,
e6469f285f Jean*0067 & PTRACERS_EvPrRn,
d2825c6d08 Ed H*0068 & PTRACERS_useGMRedi,
82f84e4873 Jean*0069 & PTRACERS_useDWNSLP,
d2825c6d08 Ed H*0070 & PTRACERS_useKPP,
46918f1b26 Jean*0071 & PTRACERS_linFSConserve,
0072 & PTRACERS_stayPositive,
d2825c6d08 Ed H*0073 & PTRACERS_initialFile,
0074 & PTRACERS_names,
0075 & PTRACERS_long_names,
0076 & PTRACERS_units,
dc3a357327 Jean*0077 & PTRACERS_useRecords,
0078 & PTRACERS_dumpFreq,
0079 & PTRACERS_taveFreq,
0080 & PTRACERS_monitorFreq,
e6469f285f Jean*0081 & PTRACERS_timeave_mnc,
de55280acd Mart*0082 & PTRACERS_snapshot_mnc,
0083 & PTRACERS_monitor_mnc,
e6469f285f Jean*0084 & PTRACERS_pickup_write_mnc,
46918f1b26 Jean*0085 & PTRACERS_pickup_read_mnc
d2825c6d08 Ed H*0086
ae4c29e0db Jean*0087
0088
0089 IF ( .NOT.usePTRACERS ) THEN
0090
0091 _BEGIN_MASTER(myThid)
0092
0093
0094 CALL PACKAGES_UNUSED_MSG( 'usePTRACERS', ' ', ' ' )
0095 _END_MASTER(myThid)
0096 RETURN
0097 ENDIF
0098
6bc4100fab Jean*0099 _BEGIN_MASTER(myThid)
0100
b7411f1a84 Jean*0101 errCount = 0
01111eb599 Jean*0102
0103 CALL PTRACERS_SET_IOLABEL(
0104 O PTRACERS_ioLabel,
0105 I PTRACERS_num, myThid )
0106
d2825c6d08 Ed H*0107
f932d407eb Mart*0108 PTRACERS_dumpFreq = dumpFreq
0badf4857e Mart*0109 PTRACERS_monitorFreq = monitorFreq
727f3ba9e2 Jean*0110 PTRACERS_Iter0 = 0
785a077159 Alis*0111 PTRACERS_numInUse=-1
0112 DO iTracer=1,PTRACERS_num
dc3a357327 Jean*0113 PTRACERS_startStepFwd(iTracer) = baseTime
5d1aafd341 Jean*0114 PTRACERS_resetFreq (iTracer) = 0.
0115 PTRACERS_resetPhase(iTracer) = 0.
d2825c6d08 Ed H*0116 PTRACERS_advScheme(iTracer)=saltAdvScheme
1883875e84 Jean*0117 PTRACERS_ImplVertAdv(iTracer) = .FALSE.
d2825c6d08 Ed H*0118 PTRACERS_diffKh(iTracer)=diffKhS
0119 PTRACERS_diffK4(iTracer)=diffK4S
d75c5feb26 Jean*0120 PTRACERS_diffKr(iTracer)=UNSET_RL
0121 DO k=1,Nr
0122 PTRACERS_diffKrNr(k,iTracer)=diffKrNrS(k)
dd33ff71a5 Mart*0123 PTRACERS_ref (k,iTracer)=0. _d 0
d75c5feb26 Jean*0124 ENDDO
e6469f285f Jean*0125 PTRACERS_EvPrRn(iTracer)=UNSET_RL
d2825c6d08 Ed H*0126 PTRACERS_useGMRedi(iTracer)=useGMRedi
1db41719d4 Jean*0127 PTRACERS_useDWNSLP(iTracer)=useDOWN_SLOPE
a2b9d94edc Jean*0128 PTRACERS_useKPP(iTracer) =useKPP
46918f1b26 Jean*0129 PTRACERS_linFSConserve(iTracer)= .FALSE.
0130 #ifdef GAD_SMOLARKIEWICZ_HACK
0131 PTRACERS_stayPositive(iTracer) = .TRUE.
0132 #else
0133 PTRACERS_stayPositive(iTracer) = .FALSE.
0134 #endif
d2825c6d08 Ed H*0135 PTRACERS_initialFile(iTracer)=' '
0136 DO ic = 1,MAX_LEN_FNAM
0137 PTRACERS_names(iTracer)(ic:ic) = ' '
0138 PTRACERS_long_names(iTracer)(ic:ic) = ' '
0139 PTRACERS_units(iTracer)(ic:ic) = ' '
0140 ENDDO
785a077159 Alis*0141 ENDDO
fc10d43a89 Jean*0142 PTRACERS_doAB_onGpTr = doAB_onGtGs
c2ced55abd Jean*0143 PTRACERS_addSrelax2EmP = .FALSE.
50653b81f1 Ed H*0144 PTRACERS_useRecords = .FALSE.
0145 #ifdef ALLOW_MNC
6bc4100fab Jean*0146 PTRACERS_snapshot_mnc = useMNC .AND. snapshot_mnc
0147 PTRACERS_monitor_mnc = useMNC .AND. monitor_mnc
0148 PTRACERS_pickup_write_mnc = useMNC .AND. pickup_write_mnc
0149 PTRACERS_pickup_read_mnc = useMNC .AND. pickup_read_mnc
50653b81f1 Ed H*0150 #else
0151 PTRACERS_snapshot_mnc = .FALSE.
de55280acd Mart*0152 PTRACERS_monitor_mnc = .FALSE.
50653b81f1 Ed H*0153 PTRACERS_pickup_write_mnc = .FALSE.
0154 PTRACERS_pickup_read_mnc = .FALSE.
0155 #endif
282caa8385 Jean*0156 tauTr1ClimRelax = 0.
4e66ab0b67 Oliv*0157 DO k = 1,Nr
0158 #ifdef ALLOW_LONGSTEP
0159 PTRACERS_dTLev(k) = LS_nIter*dTtracerLev(k)
0160 #else
0161 PTRACERS_dTLev(k) = dTtracerLev(k)
0162 #endif
0163 ENDDO
b7411f1a84 Jean*0164
0165 PTRACERS_taveFreq = UNSET_RL
0166 PTRACERS_timeave_mnc = .FALSE.
785a077159 Alis*0167
d2825c6d08 Ed H*0168
785a077159 Alis*0169 WRITE(msgBuf,'(A)') ' PTRACERS_READPARMS: opening data.ptracers'
6bc4100fab Jean*0170 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
0171 & SQUEEZE_RIGHT , myThid )
785a077159 Alis*0172 CALL OPEN_COPY_DATA_FILE(
0173 I 'data.ptracers', 'PTRACERS_READPARMS',
0174 O iUnit,
0175 I myThid )
0176 READ(UNIT=iUnit,NML=PTRACERS_PARM01)
0177 WRITE(msgBuf,'(A)')
0178 & ' PTRACERS_READPARMS: finished reading data.ptracers'
6bc4100fab Jean*0179 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
0180 & SQUEEZE_RIGHT , myThid )
785a077159 Alis*0181
d2825c6d08 Ed H*0182
7a77863887 Mart*0183 #ifdef SINGLE_DISK_IO
785a077159 Alis*0184 CLOSE(iUnit)
7a77863887 Mart*0185 #else
0186 CLOSE(iUnit,STATUS='DELETE')
0187 #endif /* SINGLE_DISK_IO */
785a077159 Alis*0188
b7411f1a84 Jean*0189
0190
0191 IF ( PTRACERS_taveFreq .NE. UNSET_RL ) THEN
0192 WRITE(msgBuf,'(2A)') 'PTRACERS_READPARMS: "PTRACERS_taveFreq"',
0193 & ' is no longer allowed in file "data.ptracers"'
0194 CALL PRINT_ERROR( msgBuf, myThid )
0195 WRITE(msgBuf,'(2A)') 'PTRACERS_READPARMS: ',
0196 & ' since "pkg/timeave" has been removed.'
0197 CALL PRINT_ERROR( msgBuf, myThid )
0198 errCount = errCount + 1
0199 ENDIF
0200 IF ( PTRACERS_timeave_mnc ) THEN
0201 WRITE(msgBuf,'(3A)') 'PTRACERS_READPARMS: ',
0202 & '"PTRACERS_timeave_mnc" is no longer allowed ',
0203 & 'in file "data.ptracers"'
0204 CALL PRINT_ERROR( msgBuf, myThid )
0205 WRITE(msgBuf,'(2A)') 'PTRACERS_READPARMS: ',
0206 & ' since "pkg/timeave" has been removed.'
0207 CALL PRINT_ERROR( msgBuf, myThid )
0208 errCount = errCount + 1
0209 ENDIF
0210
282caa8385 Jean*0211
dc3a357327 Jean*0212 IF ( tauTr1ClimRelax .NE. 0. ) THEN
0213 #ifndef ALLOW_COST
0214 WRITE(msgBuf,'(2A)')' PTRACERS_READPARMS: ',
0215 & 'tauTr1ClimRelax has been removed (code is gone)'
0216 CALL PRINT_ERROR( msgBuf, myThid )
b7411f1a84 Jean*0217 errCount = errCount + 1
dc3a357327 Jean*0218 #else
282caa8385 Jean*0219 lambdaTr1ClimRelax = 1./tauTr1ClimRelax
dc3a357327 Jean*0220 ELSE
0221 lambdaTr1ClimRelax = 0.
0222 #endif
282caa8385 Jean*0223 ENDIF
0224
dc3a357327 Jean*0225
0226
d2825c6d08 Ed H*0227
0228
785a077159 Alis*0229 IF (PTRACERS_numInUse.LT.0) THEN
d2825c6d08 Ed H*0230 PTRACERS_numInUse=PTRACERS_num
785a077159 Alis*0231 ENDIF
dc3a357327 Jean*0232
d2825c6d08 Ed H*0233
785a077159 Alis*0234 IF (PTRACERS_numInUse.GT.PTRACERS_num) THEN
078adc59f0 Jean*0235 WRITE(msgBuf,'(A,I4,A,I4,A)')
0236 & ' PTRACERS_READPARMS: You requested',PTRACERS_numInUse,
0237 & ' tracers at run time when only',PTRACERS_num,
d2825c6d08 Ed H*0238 & ' were specified at compile time. Naughty! '
6bc4100fab Jean*0239 CALL PRINT_ERROR( msgBuf, myThid )
b7411f1a84 Jean*0240 errCount = errCount + 1
d2825c6d08 Ed H*0241 ENDIF
2ac3d7bd33 Jean*0242
0243
0244 DO iTracer=1,PTRACERS_numInUse
0245 IF ( PTRACERS_diffKr(iTracer).NE.UNSET_RL ) THEN
0246 DO k=1,Nr
0247 PTRACERS_diffKrNr(k,iTracer)=PTRACERS_diffKr(iTracer)
0248 ENDDO
0249 ENDIF
0250 ENDDO
0251
dc3a357327 Jean*0252
0253 PTRACERS_startAllTrc = .TRUE.
0254 DO iTracer=1,PTRACERS_numInUse
0255 IF ( PTRACERS_startStepFwd(iTracer) .NE. baseTime )
0256 & PTRACERS_startAllTrc = .FALSE.
0257 ENDDO
c6839165c8 Jean*0258 #ifdef ALLOW_AUTODIFF
dc3a357327 Jean*0259 IF ( .NOT.PTRACERS_startAllTrc ) THEN
0260 WRITE(msgBuf,'(A)')
0261 & 'PTRACERS_READPARMS: Compiling AD code does not allow'
0262 CALL PRINT_ERROR( msgBuf, myThid )
0263 WRITE(msgBuf,'(A)')
0264 & 'to use different starting time (PTRACERS_startStepFwd)'
0265 CALL PRINT_ERROR( msgBuf, myThid )
b7411f1a84 Jean*0266 errCount = errCount + 1
dc3a357327 Jean*0267 ENDIF
c6839165c8 Jean*0268 #endif /* ALLOW_AUTODIFF */
2ac3d7bd33 Jean*0269
0aacb0e819 Oliv*0270
0271
0272 PTRACERS_calcSurfCor = .FALSE.
0273 DO iTracer=1,PTRACERS_num
0274 IF (PTRACERS_linFSConserve(iTracer)) PTRACERS_calcSurfCor=.TRUE.
0275 ENDDO
0276
d2825c6d08 Ed H*0277 #ifdef ALLOW_MNC
6bc4100fab Jean*0278 PTRACERS_snapshot_mnc = useMNC .AND. PTRACERS_snapshot_mnc
0279 PTRACERS_monitor_mnc = useMNC .AND. PTRACERS_monitor_mnc
0280 PTRACERS_pickup_write_mnc = useMNC .AND. PTRACERS_pickup_write_mnc
0281 PTRACERS_pickup_read_mnc = useMNC .AND. PTRACERS_pickup_read_mnc
50653b81f1 Ed H*0282
0283 PTRACERS_snapshot_mdsio = (.NOT. PTRACERS_snapshot_mnc)
0284 & .OR. outputTypesInclusive
de55280acd Mart*0285 PTRACERS_monitor_stdio = (.NOT. PTRACERS_monitor_mnc)
0286 & .OR. outputTypesInclusive
50653b81f1 Ed H*0287 PTRACERS_pickup_write_mdsio = (.NOT. PTRACERS_pickup_write_mnc)
0288 & .OR. outputTypesInclusive
0289 PTRACERS_pickup_read_mdsio = (.NOT. PTRACERS_pickup_read_mnc)
0290 & .OR. outputTypesInclusive
0291 #else
0292 PTRACERS_snapshot_mnc = .FALSE.
de55280acd Mart*0293 PTRACERS_monitor_mnc = .FALSE.
50653b81f1 Ed H*0294 PTRACERS_pickup_write_mnc = .FALSE.
0295 PTRACERS_pickup_read_mnc = .FALSE.
0296 PTRACERS_snapshot_mdsio = .TRUE.
de55280acd Mart*0297 PTRACERS_monitor_stdio = .TRUE.
50653b81f1 Ed H*0298 PTRACERS_pickup_write_mdsio = .TRUE.
0299 PTRACERS_pickup_read_mdsio = .TRUE.
0300 #endif
e6469f285f Jean*0301
b7411f1a84 Jean*0302
0303
0304 IF ( errCount.GE.1 ) THEN
0305 WRITE(msgBuf,'(A,I3,A)')
0306 & 'PTRACERS_READPARMS: detected', errCount,' fatal error(s)'
0307 CALL PRINT_ERROR( msgBuf, myThid )
0308 CALL ALL_PROC_DIE( 0 )
0309 STOP 'ABNORMAL END: S/R PTRACERS_READPARMS'
0310 ENDIF
6bc4100fab Jean*0311
0312 _END_MASTER(myThid)
0313
0314 _BARRIER
0315
785a077159 Alis*0316 #endif /* ALLOW_PTRACERS */
0317
0318 RETURN
0319 END