File indexing completed on 2025-11-07 06:08:54 UTC
view on githubraw file Latest commit b7411f1a on 2025-11-06 19:05:26 UTC
fc7306ba7d Jean*0001 #include "THSICE_OPTIONS.h"
0002
87ea84cac6 Jean*0003
0004
0005
fc7306ba7d Jean*0006 SUBROUTINE THSICE_READPARMS( myThid )
87ea84cac6 Jean*0007
0008
0009
0010
fc7306ba7d Jean*0011
87ea84cac6 Jean*0012
fc7306ba7d Jean*0013
87ea84cac6 Jean*0014
0015
0016
0017
fc7306ba7d Jean*0018 IMPLICIT NONE
0019
0020
0021 #include "SIZE.h"
0022 #include "EEPARAMS.h"
0023 #include "PARAMS.h"
0024 #include "GRID.h"
0025 #include "THSICE_PARAMS.h"
987916f561 Jean*0026 #ifdef ALLOW_MNC
0027 #include "MNC_PARAMS.h"
0028 #endif
6c747cb1b2 Patr*0029 #ifdef ALLOW_COST
0030 #include "THSICE_COST.h"
0031 #endif
87ea84cac6 Jean*0032
fc7306ba7d Jean*0033
49d6795014 Jean*0034
fc7306ba7d Jean*0035 INTEGER myThid
87ea84cac6 Jean*0036
fc7306ba7d Jean*0037
0038 #ifdef ALLOW_THSICE
0039
0040
49d6795014 Jean*0041
0042
fc7306ba7d Jean*0043 CHARACTER*(MAX_LEN_MBUF) msgBuf
e40ff4922c Jean*0044 CHARACTER*(20) fmtR, fmtI, fmtL, fmtC
fc7306ba7d Jean*0045 INTEGER iUnit
b7411f1a84 Jean*0046
0047 _RL thSIce_taveFreq
0048 LOGICAL thSIce_tave_mnc
fc7306ba7d Jean*0049
0050
0051 NAMELIST /THSICE_CONST/
0052 & rhos, rhoi, rhosw, rhofw,
c2c29a499f Jean*0053 & cpIce, cpWater,
0054 & kIce, kSnow,
0055 & bMeltCoef, Lfresh, qsnow,
c854f591d1 Jean*0056 & albColdSnow, albWarmSnow, tempSnowAlb,
0057 & albOldSnow, hNewSnowAge, snowAgTime,
fcd60511e1 Jean*0058 & albIceMax, albIceMin, hAlbIce, hAlbSnow,
c2c29a499f Jean*0059 & i0swFrac, ksolar, dhSnowLin,
0060 & saltIce, S_winton, mu_Tf,
0061 & Tf0kel, Terrmax, nitMaxTsf,
0062 & hIceMin, hiMax, hsMax, iceMaskMax, iceMaskMin,
0063 & fracEnMelt, fracEnFreez, hThinIce, hThickIce, hNewIceMax
7269783f6f Jean*0064
fc7306ba7d Jean*0065 NAMELIST /THSICE_PARM01/
ce354ad541 Jean*0066 & startIceModel, stepFwd_oceMxL, thSIce_calc_albNIR,
8a23e1b5d8 Jean*0067 & thSIce_skipThermo, thSIce_deltaT, thSIce_dtTemp,
7c5790770d Davi*0068 & ocean_deltaT, tauRelax_MxL, tauRelax_MxL_salt,
df4e8f7bcf Ed H*0069 & hMxL_default, sMxL_default, vMxL_default,
49d6795014 Jean*0070 & thSIce_diffK, thSIceAdvScheme, stressReduction,
e40ff4922c Jean*0071 & thSIceBalanceAtmFW,
df4e8f7bcf Ed H*0072 & thSIce_taveFreq, thSIce_diagFreq, thSIce_monFreq,
0073 & thSIce_tave_mnc, thSIce_snapshot_mnc, thSIce_mon_mnc,
0074 & thSIce_pickup_read_mnc, thSIce_pickup_write_mnc,
0075 & thSIceFract_InitFile, thSIceThick_InitFile,
0076 & thSIceSnowH_InitFile, thSIceSnowA_InitFile,
0077 & thSIceEnthp_InitFile, thSIceTsurf_InitFile
fc7306ba7d Jean*0078
6c747cb1b2 Patr*0079 #ifdef ALLOW_COST
0080 NAMELIST /THSICE_COST/
0081 & mult_thsice, thsice_cost_ice_flag
0082 #endif
0083
ae4c29e0db Jean*0084
0085
0086 IF ( .NOT.useThSIce ) THEN
0087
0088 _BEGIN_MASTER(myThid)
0089
0090
0091 CALL PACKAGES_UNUSED_MSG( 'useThSIce', ' ', 'ice' )
0092 _END_MASTER(myThid)
0093 RETURN
0094 ENDIF
0095
fc7306ba7d Jean*0096 _BEGIN_MASTER(myThid)
0097
0098
0099 rhos = 330. _d 0
0100 rhoi = 900. _d 0
0101 rhosw = rhoConst
0102 rhofw = rhoConstFresh
c2c29a499f Jean*0103 cpIce = 2106. _d 0
0104 cpWater = HeatCapacity_Cp
0105 kIce = 2.03 _d 0
0106 kSnow = 0.30 _d 0
0107 bMeltCoef=0.006 _d 0
fc7306ba7d Jean*0108 Lfresh = 3.34 _d 5
0109 qsnow = Lfresh
fcd60511e1 Jean*0110 albColdSnow= 0.85 _d 0
0111 albWarmSnow= 0.70 _d 0
c854f591d1 Jean*0112 tempSnowAlb= -10. _d 0
fcd60511e1 Jean*0113 albOldSnow = 0.55 _d 0
0114 albIceMax = 0.65 _d 0
0115 albIceMin = 0.20 _d 0
0116 hAlbIce = 0.50 _d 0
0117 hAlbSnow = 0.30 _d 0
0118 hNewSnowAge= 2. _d -3
7269783f6f Jean*0119 snowAgTime = 50. _d 0 * 86400. _d 0
c2c29a499f Jean*0120 i0swFrac = 0.3 _d 0
fc7306ba7d Jean*0121 ksolar = 1.5 _d 0
c2c29a499f Jean*0122 dhSnowLin= 0. _d 0
0123 saltIce = 4. _d 0
fc7306ba7d Jean*0124 S_winton = 1. _d 0
0125 mu_Tf = 0.054 _d 0
0126 Tf0kel = celsius2K
0127 Terrmax = 5.0 _d -1
0128 nitMaxTsf= 20
c2c29a499f Jean*0129 hIceMin = 1. _d -2
fc7306ba7d Jean*0130 hiMax = 10. _d 0
0131 hsMax = 10. _d 0
c2c29a499f Jean*0132 iceMaskMax = 1. _d 0
0133 iceMaskMin = 0.1 _d 0
0134 fracEnMelt = 0.4 _d 0
0135 fracEnFreez= 0. _d 0
0136 hThinIce = 0.2 _d 0
0137 hThickIce = 2.5 _d 0
0138 hNewIceMax = UNSET_RL
fc7306ba7d Jean*0139
0140
87ea84cac6 Jean*0141 stepFwd_oceMxL = .FALSE.
8a23e1b5d8 Jean*0142 thSIce_skipThermo = .FALSE.
0143 thSIce_calc_albNIR = .FALSE.
87ea84cac6 Jean*0144 startIceModel = 0
dfc17c9c63 Jean*0145 thSIce_deltaT = dTtracerLev(1)
8a23e1b5d8 Jean*0146 thSIce_dtTemp = UNSET_RL
dfc17c9c63 Jean*0147 ocean_deltaT = dTtracerLev(1)
87ea84cac6 Jean*0148 tauRelax_MxL = 0. _d 0
7c5790770d Davi*0149 tauRelax_MxL_salt = UNSET_RL
87ea84cac6 Jean*0150 hMxL_default = 50. _d 0
0151 sMxL_default = 35. _d 0
0152 vMxL_default = 5. _d -2
49d6795014 Jean*0153 thSIce_diffK = 0. _d 0
0154 thSIceAdvScheme = 0
fc7306ba7d Jean*0155 stressReduction = 1. _d 0
b7ebc7bc01 Jean*0156 IF ( useSEAICE ) stressReduction = 0. _d 0
e40ff4922c Jean*0157 thSIceBalanceAtmFW = 0
fc7306ba7d Jean*0158 thSIce_diagFreq = dumpFreq
0159 thSIce_monFreq = monitorFreq
987916f561 Jean*0160 #ifdef ALLOW_MNC
b7411f1a84 Jean*0161 thSIce_snapshot_mnc = useMNC .AND. snapshot_mnc
0162 thSIce_mon_mnc = useMNC .AND. monitor_mnc
0163 thSIce_pickup_read_mnc = useMNC .AND. pickup_read_mnc
0164 thSIce_pickup_write_mnc = useMNC .AND. pickup_write_mnc
987916f561 Jean*0165 #else
df4e8f7bcf Ed H*0166 thSIce_snapshot_mnc = .FALSE.
0167 thSIce_mon_mnc = .FALSE.
0168 thSIce_pickup_read_mnc = .FALSE.
0169 thSIce_pickup_write_mnc = .FALSE.
987916f561 Jean*0170 #endif
0171 thSIceFract_InitFile = ' '
0172 thSIceThick_InitFile = ' '
0173 thSIceSnowH_InitFile = ' '
0174 thSIceSnowA_InitFile = ' '
0175 thSIceEnthp_InitFile = ' '
0176 thSIceTsurf_InitFile = ' '
0177
6c747cb1b2 Patr*0178 #ifdef ALLOW_COST
0179 thsice_cost_ice_flag = 1
0180 mult_thsice = 0. _d 0
0181 #endif
b7411f1a84 Jean*0182
0183 thSIce_taveFreq = UNSET_RL
0184 thSIce_tave_mnc = .FALSE.
0185
0186
0187
0188 WRITE(msgBuf,'(A)') ' THSICE_READPARMS: opening data.ice'
0189 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
0190 & SQUEEZE_RIGHT , 1)
0191
0192 CALL OPEN_COPY_DATA_FILE(
0193 I 'data.ice', 'THSICE_READPARMS',
0194 O iUnit,
0195 I myThid )
fc7306ba7d Jean*0196
0197
0198 READ(UNIT=iUnit,NML=THSICE_CONST)
0199 WRITE(msgBuf,'(A)') ' THSICE_READPARMS: read THSICE_CONST'
0200 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
0201 & SQUEEZE_RIGHT , 1)
0202
0203 READ(UNIT=iUnit,NML=THSICE_PARM01)
0204 WRITE(msgBuf,'(A)') ' THSICE_READPARMS: read THSICE_PARM01'
0205 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
0206 & SQUEEZE_RIGHT , 1)
0207
6c747cb1b2 Patr*0208 #ifdef ALLOW_COST
0209 READ(UNIT=iUnit,NML=THSICE_COST)
fe7b013e2c Jean*0210 WRITE(msgBuf,'(A)') ' THSICE_READPARMS: read THSICE_COST'
6c747cb1b2 Patr*0211 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
0212 & SQUEEZE_RIGHT , 1)
0213 #endif
0214
fc7306ba7d Jean*0215
7a77863887 Mart*0216 #ifdef SINGLE_DISK_IO
fc7306ba7d Jean*0217 CLOSE(iUnit)
7a77863887 Mart*0218 #else
0219 CLOSE(iUnit,STATUS='DELETE')
0220 #endif /* SINGLE_DISK_IO */
fc7306ba7d Jean*0221
b7411f1a84 Jean*0222
0223
0224
0225 IF ( thSIce_taveFreq .NE. UNSET_RL ) THEN
0226 WRITE(msgBuf,'(2A)') 'THSICE_READPARMS: "thSIce_taveFreq"',
0227 & ' is no longer allowed in file "data.ice"'
0228 CALL PRINT_ERROR( msgBuf, myThid )
0229 WRITE(msgBuf,'(2A)') 'THSICE_READPARMS: ',
0230 & ' since "pkg/timeave" has been removed.'
0231 CALL PRINT_ERROR( msgBuf, myThid )
0232
0233 STOP 'ABNORMAL END: S/R THSICE_READPARMS'
0234 ENDIF
0235 IF ( thSIce_tave_mnc ) THEN
0236 WRITE(msgBuf,'(2A)') 'THSICE_READPARMS: "thSIce_tave_mnc"',
0237 & ' is no longer allowed in file "data.ice"'
0238 CALL PRINT_ERROR( msgBuf, myThid )
0239 WRITE(msgBuf,'(2A)') 'THSICE_READPARMS: ',
0240 & ' since "pkg/timeave" has been removed.'
0241 CALL PRINT_ERROR( msgBuf, myThid )
0242
0243 STOP 'ABNORMAL END: S/R THSICE_READPARMS'
0244 ENDIF
0245
0246
c2c29a499f Jean*0247
0248 IF ( hNewIceMax .EQ. UNSET_RL ) hNewIceMax = hiMax
0249
2e83cb4d40 Jeff*0250
0251
0252 IF ( thSIce_dtTemp .EQ. UNSET_RL ) thSIce_dtTemp=thSIce_deltaT
0253
7c5790770d Davi*0254
0255 IF ( tauRelax_MxL_salt .EQ. UNSET_RL ) THEN
0256 tauRelax_MxL_salt = tauRelax_MxL
0257 ENDIF
0258
fc7306ba7d Jean*0259
0260 Tmlt1=-mu_Tf*S_winton
e6b6bab319 Davi*0261 floodFac = (rhosw - rhoi)/rhos
fc7306ba7d Jean*0262
df4e8f7bcf Ed H*0263
b7411f1a84 Jean*0264 thSIce_snapshot_mdsio = .TRUE.
0265 thSIce_mon_stdio = .TRUE.
df4e8f7bcf Ed H*0266 thSIce_pickup_write_mdsio = .TRUE.
987916f561 Jean*0267 #ifdef ALLOW_MNC
b7411f1a84 Jean*0268 thSIce_snapshot_mnc = useMNC .AND. thSIce_snapshot_mnc
0269 thSIce_mon_mnc = useMNC .AND. thSIce_mon_mnc
0270 thSIce_pickup_write_mnc = useMNC .AND. thSIce_pickup_write_mnc
0271 thSIce_snapshot_mdsio = ( .NOT.thSIce_snapshot_mnc )
0272 & .OR. outputTypesInclusive
0273 thSIce_mon_stdio = ( .NOT.thSIce_mon_mnc )
0274 & .OR. outputTypesInclusive
0275 thSIce_pickup_write_mdsio = ( .NOT.thSIce_pickup_write_mnc )
0276 & .OR. outputTypesInclusive
987916f561 Jean*0277 #endif
0278
789e147860 Jean*0279
e40ff4922c Jean*0280
b7ebc7bc01 Jean*0281 IF ( useSEAICE .AND. stressReduction.NE.0. _d 0 ) THEN
0282
0283
e40ff4922c Jean*0284 WRITE(msgBuf,'(2A)') '** WARNING ** THSICE_READPARMS:',
0285 & ' reset stressReduction to zero'
b7ebc7bc01 Jean*0286 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
e40ff4922c Jean*0287 & SQUEEZE_RIGHT, myThid )
0288 WRITE(msgBuf,'(2A)') 'THSICE_READPARMS: useSEAICE=T =>',
0289 & ' stress is be computed by SEAICE pkg => no reduction'
b7ebc7bc01 Jean*0290 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
e40ff4922c Jean*0291 & SQUEEZE_RIGHT, myThid )
b7ebc7bc01 Jean*0292 stressReduction = 0. _d 0
0293 ENDIF
e40ff4922c Jean*0294 IF ( fluidIsAir .AND. thSIceBalanceAtmFW.NE.0 ) THEN
0295 WRITE(msgBuf,'(2A)') '** WARNING ** THSICE_READPARMS:',
0296 & ' reset thSIceBalanceAtmFW to zero'
0297 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
0298 & SQUEEZE_RIGHT, myThid )
0299 WRITE(msgBuf,'(2A)') 'THSICE_READPARMS:',
0300 & ' since it is not available in Atmospheric set-up'
0301 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
0302 & SQUEEZE_RIGHT, myThid )
0303 thSIceBalanceAtmFW = 0
0304 ENDIF
b7ebc7bc01 Jean*0305
fc7306ba7d Jean*0306
0307 iUnit = standardMessageUnit
e40ff4922c Jean*0308 fmtR = '(A6,A20,1PE21.13)'
0309 fmtI = '(A6,A20,I10)'
0310 fmtL = '(A6,A20,L10)'
0311 fmtC = '(A26,1X,A)'
ae4c29e0db Jean*0312
fc7306ba7d Jean*0313
e40ff4922c Jean*0314 WRITE(iUnit,fmtR) 'ThSI:', 'rhos =', rhos
0315 WRITE(iUnit,fmtR) 'ThSI:', 'rhoi =', rhoi
0316 WRITE(iUnit,fmtR) 'ThSI:', 'rhosw =', rhosw
0317 WRITE(iUnit,fmtR) 'ThSI:', 'rhofw =', rhofw
0318 WRITE(iUnit,fmtR) 'ThSI:', 'floodFac =', floodFac
0319 WRITE(iUnit,fmtR) 'ThSI:', 'cpIce =', cpIce
0320 WRITE(iUnit,fmtR) 'ThSI:', 'cpWater =', cpWater
0321 WRITE(iUnit,fmtR) 'ThSI:', 'kIce =', kIce
0322 WRITE(iUnit,fmtR) 'ThSI:', 'kSnow =', kSnow
0323 WRITE(iUnit,fmtR) 'ThSI:', 'bMeltCoef =', bMeltCoef
0324 WRITE(iUnit,fmtR) 'ThSI:', 'Lfresh =', Lfresh
0325 WRITE(iUnit,fmtR) 'ThSI:', 'qsnow =', qsnow
0326 WRITE(iUnit,fmtR) 'ThSI:', 'albColdSnow =', albColdSnow
0327 WRITE(iUnit,fmtR) 'ThSI:', 'albWarmSnow =', albWarmSnow
0328 WRITE(iUnit,fmtR) 'ThSI:', 'tempSnowAlb =', tempSnowAlb
0329 WRITE(iUnit,fmtR) 'ThSI:', 'albOldSnow =', albOldSnow
0330 WRITE(iUnit,fmtR) 'ThSI:', 'hNewSnowAge =', hNewSnowAge
0331 WRITE(iUnit,fmtR) 'ThSI:', 'snowAgTime =', snowAgTime
0332 WRITE(iUnit,fmtR) 'ThSI:', 'albIceMax =', albIceMax
0333 WRITE(iUnit,fmtR) 'ThSI:', 'albIceMin =', albIceMin
0334 WRITE(iUnit,fmtR) 'ThSI:', 'hAlbIce =', hAlbIce
0335 WRITE(iUnit,fmtR) 'ThSI:', 'hAlbSnow =', hAlbSnow
0336 WRITE(iUnit,fmtR) 'ThSI:', 'i0swFrac =', i0swFrac
0337 WRITE(iUnit,fmtR) 'ThSI:', 'ksolar =', ksolar
0338 WRITE(iUnit,fmtR) 'ThSI:', 'dhSnowLin =', dhSnowLin
0339 WRITE(iUnit,fmtR) 'ThSI:', 'saltIce =', saltIce
0340 WRITE(iUnit,fmtR) 'ThSI:', 'S_winton =', S_winton
0341 WRITE(iUnit,fmtR) 'ThSI:', 'mu_Tf =', mu_Tf
0342 WRITE(iUnit,fmtR) 'ThSI:', 'Tf0kel =', Tf0kel
0343 WRITE(iUnit,fmtR) 'ThSI:', 'Tmlt1 =', Tmlt1
0344 WRITE(iUnit,fmtR) 'ThSI:', 'Terrmax =', Terrmax
0345 WRITE(iUnit,fmtI) 'ThSI:', 'nitMaxTsf =', nitMaxTsf
0346 WRITE(iUnit,fmtR) 'ThSI:', 'hIceMin =', hIceMin
0347 WRITE(iUnit,fmtR) 'ThSI:', 'hiMax =', hiMax
0348 WRITE(iUnit,fmtR) 'ThSI:', 'hsMax =', hsMax
0349 WRITE(iUnit,fmtR) 'ThSI:', 'iceMaskMax =', iceMaskMax
0350 WRITE(iUnit,fmtR) 'ThSI:', 'iceMaskMin =', iceMaskMin
0351 WRITE(iUnit,fmtR) 'ThSI:', 'fracEnMelt =', fracEnMelt
0352 WRITE(iUnit,fmtR) 'ThSI:', 'fracEnFreez =', fracEnFreez
0353 WRITE(iUnit,fmtR) 'ThSI:', 'hThinIce =', hThinIce
0354 WRITE(iUnit,fmtR) 'ThSI:', 'hThickIce =', hThickIce
0355 WRITE(iUnit,fmtR) 'ThSI:', 'hNewIceMax =', hNewIceMax
0356 WRITE(iUnit,fmtR) 'ThSI:','stressReduction =',stressReduction
8a23e1b5d8 Jean*0357 WRITE(iUnit,fmtL) 'ThSI:','thSIce_skipThermo =',thSIce_skipThermo
e40ff4922c Jean*0358 WRITE(iUnit,fmtI) 'ThSI:','thSIceAdvScheme =',thSIceAdvScheme
0359 WRITE(iUnit,fmtI) 'ThSI:','thSIceBalanceAtmFW=',thSIceBalanceAtmFW
0360 WRITE(iUnit,fmtR) 'ThSI:','thSIce_diffK =',thSIce_diffK
0361 WRITE(iUnit,fmtR) 'ThSI:','thSIce_deltaT =',thSIce_deltaT
0362 WRITE(iUnit,fmtR) 'ThSI:','ocean_deltaT =',ocean_deltaT
0363 WRITE(iUnit,fmtL) 'ThSI:','stepFwd_oceMxL =',stepFwd_oceMxL
0364 WRITE(iUnit,fmtR) 'ThSI:','tauRelax_MxL =',tauRelax_MxL
0365 WRITE(iUnit,fmtR) 'ThSI:','tauRelax_MxL_salt =',tauRelax_MxL_salt
0366 WRITE(iUnit,fmtR) 'ThSI:','hMxL_default =',hMxL_default
0367 WRITE(iUnit,fmtR) 'ThSI:','sMxL_default =',sMxL_default
0368 WRITE(iUnit,fmtR) 'ThSI:','vMxL_default =',vMxL_default
0369 WRITE(iUnit,fmtR) 'ThSI:','thSIce_diagFreq =',thSIce_diagFreq
0370 WRITE(iUnit,fmtR) 'ThSI:','thSIce_monFreq =',thSIce_monFreq
0371 WRITE(iUnit,fmtI) 'ThSI:','startIceModel =',startIceModel
0372
987916f561 Jean*0373 IF (iUnit.NE.standardMessageUnit) CLOSE(iUnit)
fc7306ba7d Jean*0374
0375
0376 _END_MASTER(myThid)
0377
0378
0379 _BARRIER
0380
0381 #endif /* ALLOW_THSICE */
0382
0383 RETURN
0384 END