/[MITgcm]/MITgcm/pkg/thsice/thsice_readparms.F
ViewVC logotype

Annotation of /MITgcm/pkg/thsice/thsice_readparms.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.21 - (hide annotations) (download)
Sat Mar 30 15:39:30 2013 UTC (11 years, 1 month ago) by jmc
Branch: MAIN
CVS Tags: checkpoint64x, checkpoint64q, checkpoint64p, checkpoint64s, checkpoint64r, checkpoint64u, checkpoint64t, checkpoint64w, checkpoint64v, checkpoint64i, checkpoint64h, checkpoint64k, checkpoint64j, checkpoint64m, checkpoint64l, checkpoint64o, checkpoint64n, checkpoint64g, checkpoint64f
Changes since 1.20: +2 -2 lines
adjust printed message (from previous modif)

1 jmc 1.21 C $Header: /u/gcmpack/MITgcm/pkg/thsice/thsice_readparms.F,v 1.20 2013/03/30 01:23:58 heimbach Exp $
2 jmc 1.1 C $Name: $
3    
4     #include "THSICE_OPTIONS.h"
5    
6 jmc 1.3 CBOP
7     C !ROUTINE: THSICE_READPARMS
8     C !INTERFACE:
9 jmc 1.1 SUBROUTINE THSICE_READPARMS( myThid )
10 jmc 1.3
11     C !DESCRIPTION: \bv
12     C *==========================================================*
13     C | S/R THSICE_READPARMS
14 jmc 1.1 C | o Routine to initialize THSICE parameters and constants
15 jmc 1.3 C *==========================================================*
16 jmc 1.1 C | Initialize Th-Sea-ICE parameters, read in data.ice
17 jmc 1.3 C *==========================================================*
18     C \ev
19    
20     C !USES:
21 jmc 1.1 IMPLICIT NONE
22    
23     C === Global variables ===
24     #include "SIZE.h"
25     #include "EEPARAMS.h"
26     #include "PARAMS.h"
27     #include "GRID.h"
28     #include "THSICE_PARAMS.h"
29 jmc 1.5 #ifdef ALLOW_MNC
30     #include "MNC_PARAMS.h"
31     #endif
32 heimbach 1.20 #ifdef ALLOW_COST
33     #include "THSICE_COST.h"
34     #endif
35 jmc 1.3 C !INPUT/OUTPUT PARAMETERS:
36 jmc 1.1 C === Routine arguments ===
37 jmc 1.11 C myThid :: My Thread Id. number
38 jmc 1.1 INTEGER myThid
39 jmc 1.3 CEOP
40 jmc 1.1
41     #ifdef ALLOW_THSICE
42    
43     C === Local variables ===
44 jmc 1.11 C msgBuf :: Informational/error message buffer
45     C iUnit :: Work variable for IO unit number
46 jmc 1.1 CHARACTER*(MAX_LEN_MBUF) msgBuf
47 jmc 1.18 CHARACTER*(20) fmtR, fmtI, fmtL, fmtC
48 jmc 1.1 INTEGER iUnit
49    
50     C-- Th-Sea-ICE parameter
51     NAMELIST /THSICE_CONST/
52     & rhos, rhoi, rhosw, rhofw,
53 jmc 1.14 & cpIce, cpWater,
54     & kIce, kSnow,
55     & bMeltCoef, Lfresh, qsnow,
56 jmc 1.10 & albColdSnow, albWarmSnow, tempSnowAlb,
57     & albOldSnow, hNewSnowAge, snowAgTime,
58 jmc 1.2 & albIceMax, albIceMin, hAlbIce, hAlbSnow,
59 jmc 1.14 & i0swFrac, ksolar, dhSnowLin,
60     & saltIce, S_winton, mu_Tf,
61     & Tf0kel, Terrmax, nitMaxTsf,
62     & hIceMin, hiMax, hsMax, iceMaskMax, iceMaskMin,
63     & fracEnMelt, fracEnFreez, hThinIce, hThickIce, hNewIceMax
64 jmc 1.8
65 jmc 1.1 NAMELIST /THSICE_PARM01/
66 jmc 1.16 & startIceModel, stepFwd_oceMxL, thSIce_calc_albNIR,
67 jmc 1.19 & thSIce_skipThermo, thSIce_deltaT, thSIce_dtTemp,
68 dfer 1.17 & ocean_deltaT, tauRelax_MxL, tauRelax_MxL_salt,
69 edhill 1.7 & hMxL_default, sMxL_default, vMxL_default,
70 jmc 1.11 & thSIce_diffK, thSIceAdvScheme, stressReduction,
71 jmc 1.18 & thSIceBalanceAtmFW,
72 edhill 1.7 & thSIce_taveFreq, thSIce_diagFreq, thSIce_monFreq,
73     & thSIce_tave_mnc, thSIce_snapshot_mnc, thSIce_mon_mnc,
74     & thSIce_pickup_read_mnc, thSIce_pickup_write_mnc,
75     & thSIceFract_InitFile, thSIceThick_InitFile,
76     & thSIceSnowH_InitFile, thSIceSnowA_InitFile,
77     & thSIceEnthp_InitFile, thSIceTsurf_InitFile
78 jmc 1.1
79 heimbach 1.20 #ifdef ALLOW_COST
80     NAMELIST /THSICE_COST/
81     & mult_thsice, thsice_cost_ice_flag
82     #endif
83    
84 jmc 1.1 _BEGIN_MASTER(myThid)
85    
86     WRITE(msgBuf,'(A)') ' THSICE_READPARMS: opening data.ice'
87     CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
88     & SQUEEZE_RIGHT , 1)
89 jmc 1.8
90 jmc 1.1 CALL OPEN_COPY_DATA_FILE(
91     I 'data.ice', 'THSICE_READPARMS',
92     O iUnit,
93     I myThid )
94    
95     C-- Default values (constants)
96     rhos = 330. _d 0
97     rhoi = 900. _d 0
98     rhosw = rhoConst
99     rhofw = rhoConstFresh
100 jmc 1.14 cpIce = 2106. _d 0
101     cpWater = HeatCapacity_Cp
102     kIce = 2.03 _d 0
103     kSnow = 0.30 _d 0
104     bMeltCoef=0.006 _d 0
105 jmc 1.1 Lfresh = 3.34 _d 5
106     qsnow = Lfresh
107 jmc 1.2 albColdSnow= 0.85 _d 0
108     albWarmSnow= 0.70 _d 0
109 jmc 1.10 tempSnowAlb= -10. _d 0
110 jmc 1.2 albOldSnow = 0.55 _d 0
111     albIceMax = 0.65 _d 0
112     albIceMin = 0.20 _d 0
113     hAlbIce = 0.50 _d 0
114     hAlbSnow = 0.30 _d 0
115     hNewSnowAge= 2. _d -3
116 jmc 1.8 snowAgTime = 50. _d 0 * 86400. _d 0
117 jmc 1.14 i0swFrac = 0.3 _d 0
118 jmc 1.1 ksolar = 1.5 _d 0
119 jmc 1.14 dhSnowLin= 0. _d 0
120     saltIce = 4. _d 0
121 jmc 1.1 S_winton = 1. _d 0
122     mu_Tf = 0.054 _d 0
123     Tf0kel = celsius2K
124     Terrmax = 5.0 _d -1
125     nitMaxTsf= 20
126 jmc 1.14 hIceMin = 1. _d -2
127 jmc 1.1 hiMax = 10. _d 0
128     hsMax = 10. _d 0
129 jmc 1.14 iceMaskMax = 1. _d 0
130     iceMaskMin = 0.1 _d 0
131     fracEnMelt = 0.4 _d 0
132     fracEnFreez= 0. _d 0
133     hThinIce = 0.2 _d 0
134     hThickIce = 2.5 _d 0
135     hNewIceMax = UNSET_RL
136 jmc 1.1
137     C-- Default values (parameters)
138 jmc 1.3 stepFwd_oceMxL = .FALSE.
139 jmc 1.19 thSIce_skipThermo = .FALSE.
140     thSIce_calc_albNIR = .FALSE.
141 jmc 1.3 startIceModel = 0
142 jmc 1.4 thSIce_deltaT = dTtracerLev(1)
143 jmc 1.19 thSIce_dtTemp = UNSET_RL
144 jmc 1.4 ocean_deltaT = dTtracerLev(1)
145 jmc 1.3 tauRelax_MxL = 0. _d 0
146 dfer 1.17 tauRelax_MxL_salt = UNSET_RL
147 jmc 1.3 hMxL_default = 50. _d 0
148     sMxL_default = 35. _d 0
149     vMxL_default = 5. _d -2
150 jmc 1.11 thSIce_diffK = 0. _d 0
151     thSIceAdvScheme = 0
152 jmc 1.1 stressReduction = 1. _d 0
153 jmc 1.9 IF ( useSEAICE ) stressReduction = 0. _d 0
154 jmc 1.18 thSIceBalanceAtmFW = 0
155 jmc 1.8 thSIce_taveFreq = taveFreq
156 jmc 1.1 thSIce_diagFreq = dumpFreq
157     thSIce_monFreq = monitorFreq
158 jmc 1.5 #ifdef ALLOW_MNC
159 edhill 1.7 thSIce_tave_mnc = timeave_mnc
160     thSIce_snapshot_mnc = snapshot_mnc
161     thSIce_mon_mnc = monitor_mnc
162     thSIce_pickup_read_mnc = pickup_read_mnc
163     thSIce_pickup_write_mnc = pickup_write_mnc
164 jmc 1.5 #else
165 edhill 1.7 thSIce_tave_mnc = .FALSE.
166     thSIce_snapshot_mnc = .FALSE.
167     thSIce_mon_mnc = .FALSE.
168     thSIce_pickup_read_mnc = .FALSE.
169     thSIce_pickup_write_mnc = .FALSE.
170 jmc 1.5 #endif
171     thSIceFract_InitFile = ' '
172     thSIceThick_InitFile = ' '
173     thSIceSnowH_InitFile = ' '
174     thSIceSnowA_InitFile = ' '
175     thSIceEnthp_InitFile = ' '
176     thSIceTsurf_InitFile = ' '
177    
178 heimbach 1.20 #ifdef ALLOW_COST
179     thsice_cost_ice_flag = 1
180     mult_thsice = 0. _d 0
181     #endif
182 jmc 1.1
183     C-- Read parameters from open data file
184     READ(UNIT=iUnit,NML=THSICE_CONST)
185     WRITE(msgBuf,'(A)') ' THSICE_READPARMS: read THSICE_CONST'
186     CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
187     & SQUEEZE_RIGHT , 1)
188    
189     READ(UNIT=iUnit,NML=THSICE_PARM01)
190     WRITE(msgBuf,'(A)') ' THSICE_READPARMS: read THSICE_PARM01'
191     CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
192     & SQUEEZE_RIGHT , 1)
193    
194 heimbach 1.20 #ifdef ALLOW_COST
195     READ(UNIT=iUnit,NML=THSICE_COST)
196 jmc 1.21 WRITE(msgBuf,'(A)') ' THSICE_READPARMS: read THSICE_COST'
197 heimbach 1.20 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
198     & SQUEEZE_RIGHT , 1)
199     #endif
200    
201 jmc 1.1 C-- Close the open data file
202     CLOSE(iUnit)
203    
204 jmc 1.14 C- neutral default:
205     IF ( hNewIceMax .EQ. UNSET_RL ) hNewIceMax = hiMax
206    
207 jscott 1.13 C If using the same time step for both icetop temp solver
208     C and ice thickness/growth, use thSIce_deltaT value
209     IF ( thSIce_dtTemp .EQ. UNSET_RL ) thSIce_dtTemp=thSIce_deltaT
210    
211 dfer 1.17 C- If undef, set salt relax to temperature relax
212     IF ( tauRelax_MxL_salt .EQ. UNSET_RL ) THEN
213     tauRelax_MxL_salt = tauRelax_MxL
214     ENDIF
215    
216 jmc 1.1 C- Define other constants (from previous ones):
217     Tmlt1=-mu_Tf*S_winton
218 dfer 1.15 floodFac = (rhosw - rhoi)/rhos
219 jmc 1.1
220 edhill 1.7 C Set I/O parameters
221     thSIce_tave_mdsio = .TRUE.
222     thSIce_snapshot_mdsio = .TRUE.
223     thSIce_mon_stdio = .TRUE.
224     thSIce_pickup_write_mdsio = .TRUE.
225 jmc 1.5 #ifdef ALLOW_MNC
226     IF (useMNC) THEN
227     IF ( .NOT.outputTypesInclusive
228     & .AND. thSIce_tave_mnc ) thSIce_tave_mdsio = .FALSE.
229 jmc 1.8 IF ( .NOT.outputTypesInclusive
230     & .AND. thSIce_snapshot_mnc )
231 edhill 1.7 & thSIce_snapshot_mdsio = .FALSE.
232 jmc 1.5 IF ( .NOT.outputTypesInclusive
233     & .AND. thSIce_mon_mnc ) thSIce_mon_stdio = .FALSE.
234 edhill 1.7 IF ( .NOT.outputTypesInclusive
235 jmc 1.8 & .AND. thSIce_pickup_write_mnc )
236 edhill 1.7 & thSIce_pickup_write_mdsio = .FALSE.
237 jmc 1.5 ENDIF
238     #endif
239    
240 jmc 1.12 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
241 jmc 1.18 C-- Check/reset parameters:
242 jmc 1.9 IF ( useSEAICE .AND. stressReduction.NE.0. _d 0 ) THEN
243     C-- If useSEAICE=.true., the stress is computed in seaice_model,
244     C-- so that it does not need any further reduction
245 jmc 1.18 WRITE(msgBuf,'(2A)') '** WARNING ** THSICE_READPARMS:',
246     & ' reset stressReduction to zero'
247 jmc 1.9 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
248 jmc 1.18 & SQUEEZE_RIGHT, myThid )
249     WRITE(msgBuf,'(2A)') 'THSICE_READPARMS: useSEAICE=T =>',
250     & ' stress is be computed by SEAICE pkg => no reduction'
251 jmc 1.9 CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
252 jmc 1.18 & SQUEEZE_RIGHT, myThid )
253 jmc 1.9 stressReduction = 0. _d 0
254     ENDIF
255 jmc 1.18 IF ( fluidIsAir .AND. thSIceBalanceAtmFW.NE.0 ) THEN
256     WRITE(msgBuf,'(2A)') '** WARNING ** THSICE_READPARMS:',
257     & ' reset thSIceBalanceAtmFW to zero'
258     CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
259     & SQUEEZE_RIGHT, myThid )
260     WRITE(msgBuf,'(2A)') 'THSICE_READPARMS:',
261     & ' since it is not available in Atmospheric set-up'
262     CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
263     & SQUEEZE_RIGHT, myThid )
264     thSIceBalanceAtmFW = 0
265     ENDIF
266 jmc 1.9
267 jmc 1.1 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
268     iUnit = standardMessageUnit
269 jmc 1.18 fmtR = '(A6,A20,1PE21.13)'
270     fmtI = '(A6,A20,I10)'
271     fmtL = '(A6,A20,L10)'
272     fmtC = '(A26,1X,A)'
273 jmc 1.5 c CALL MDSFINDUNIT( iUnit, mythid )
274 jmc 1.1 c OPEN(iUnit,file='thsice_check_params',status='unknown')
275 jmc 1.18 WRITE(iUnit,fmtR) 'ThSI:', 'rhos =', rhos
276     WRITE(iUnit,fmtR) 'ThSI:', 'rhoi =', rhoi
277     WRITE(iUnit,fmtR) 'ThSI:', 'rhosw =', rhosw
278     WRITE(iUnit,fmtR) 'ThSI:', 'rhofw =', rhofw
279     WRITE(iUnit,fmtR) 'ThSI:', 'floodFac =', floodFac
280     WRITE(iUnit,fmtR) 'ThSI:', 'cpIce =', cpIce
281     WRITE(iUnit,fmtR) 'ThSI:', 'cpWater =', cpWater
282     WRITE(iUnit,fmtR) 'ThSI:', 'kIce =', kIce
283     WRITE(iUnit,fmtR) 'ThSI:', 'kSnow =', kSnow
284     WRITE(iUnit,fmtR) 'ThSI:', 'bMeltCoef =', bMeltCoef
285     WRITE(iUnit,fmtR) 'ThSI:', 'Lfresh =', Lfresh
286     WRITE(iUnit,fmtR) 'ThSI:', 'qsnow =', qsnow
287     WRITE(iUnit,fmtR) 'ThSI:', 'albColdSnow =', albColdSnow
288     WRITE(iUnit,fmtR) 'ThSI:', 'albWarmSnow =', albWarmSnow
289     WRITE(iUnit,fmtR) 'ThSI:', 'tempSnowAlb =', tempSnowAlb
290     WRITE(iUnit,fmtR) 'ThSI:', 'albOldSnow =', albOldSnow
291     WRITE(iUnit,fmtR) 'ThSI:', 'hNewSnowAge =', hNewSnowAge
292     WRITE(iUnit,fmtR) 'ThSI:', 'snowAgTime =', snowAgTime
293     WRITE(iUnit,fmtR) 'ThSI:', 'albIceMax =', albIceMax
294     WRITE(iUnit,fmtR) 'ThSI:', 'albIceMin =', albIceMin
295     WRITE(iUnit,fmtR) 'ThSI:', 'hAlbIce =', hAlbIce
296     WRITE(iUnit,fmtR) 'ThSI:', 'hAlbSnow =', hAlbSnow
297     WRITE(iUnit,fmtR) 'ThSI:', 'i0swFrac =', i0swFrac
298     WRITE(iUnit,fmtR) 'ThSI:', 'ksolar =', ksolar
299     WRITE(iUnit,fmtR) 'ThSI:', 'dhSnowLin =', dhSnowLin
300     WRITE(iUnit,fmtR) 'ThSI:', 'saltIce =', saltIce
301     WRITE(iUnit,fmtR) 'ThSI:', 'S_winton =', S_winton
302     WRITE(iUnit,fmtR) 'ThSI:', 'mu_Tf =', mu_Tf
303     WRITE(iUnit,fmtR) 'ThSI:', 'Tf0kel =', Tf0kel
304     WRITE(iUnit,fmtR) 'ThSI:', 'Tmlt1 =', Tmlt1
305     WRITE(iUnit,fmtR) 'ThSI:', 'Terrmax =', Terrmax
306     WRITE(iUnit,fmtI) 'ThSI:', 'nitMaxTsf =', nitMaxTsf
307     WRITE(iUnit,fmtR) 'ThSI:', 'hIceMin =', hIceMin
308     WRITE(iUnit,fmtR) 'ThSI:', 'hiMax =', hiMax
309     WRITE(iUnit,fmtR) 'ThSI:', 'hsMax =', hsMax
310     WRITE(iUnit,fmtR) 'ThSI:', 'iceMaskMax =', iceMaskMax
311     WRITE(iUnit,fmtR) 'ThSI:', 'iceMaskMin =', iceMaskMin
312     WRITE(iUnit,fmtR) 'ThSI:', 'fracEnMelt =', fracEnMelt
313     WRITE(iUnit,fmtR) 'ThSI:', 'fracEnFreez =', fracEnFreez
314     WRITE(iUnit,fmtR) 'ThSI:', 'hThinIce =', hThinIce
315     WRITE(iUnit,fmtR) 'ThSI:', 'hThickIce =', hThickIce
316     WRITE(iUnit,fmtR) 'ThSI:', 'hNewIceMax =', hNewIceMax
317     WRITE(iUnit,fmtR) 'ThSI:','stressReduction =',stressReduction
318 jmc 1.19 WRITE(iUnit,fmtL) 'ThSI:','thSIce_skipThermo =',thSIce_skipThermo
319 jmc 1.18 WRITE(iUnit,fmtI) 'ThSI:','thSIceAdvScheme =',thSIceAdvScheme
320     WRITE(iUnit,fmtI) 'ThSI:','thSIceBalanceAtmFW=',thSIceBalanceAtmFW
321     WRITE(iUnit,fmtR) 'ThSI:','thSIce_diffK =',thSIce_diffK
322     WRITE(iUnit,fmtR) 'ThSI:','thSIce_deltaT =',thSIce_deltaT
323     WRITE(iUnit,fmtR) 'ThSI:','ocean_deltaT =',ocean_deltaT
324     WRITE(iUnit,fmtL) 'ThSI:','stepFwd_oceMxL =',stepFwd_oceMxL
325     WRITE(iUnit,fmtR) 'ThSI:','tauRelax_MxL =',tauRelax_MxL
326     WRITE(iUnit,fmtR) 'ThSI:','tauRelax_MxL_salt =',tauRelax_MxL_salt
327     WRITE(iUnit,fmtR) 'ThSI:','hMxL_default =',hMxL_default
328     WRITE(iUnit,fmtR) 'ThSI:','sMxL_default =',sMxL_default
329     WRITE(iUnit,fmtR) 'ThSI:','vMxL_default =',vMxL_default
330     WRITE(iUnit,fmtR) 'ThSI:','thSIce_taveFreq =',thSIce_taveFreq
331     WRITE(iUnit,fmtR) 'ThSI:','thSIce_diagFreq =',thSIce_diagFreq
332     WRITE(iUnit,fmtR) 'ThSI:','thSIce_monFreq =',thSIce_monFreq
333     WRITE(iUnit,fmtI) 'ThSI:','startIceModel =',startIceModel
334     c WRITE(iUnit,fmtC) 'thSIceFract_InitFile =',thSIceFract_InitFile
335 jmc 1.5 IF (iUnit.NE.standardMessageUnit) CLOSE(iUnit)
336 jmc 1.1 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
337    
338     _END_MASTER(myThid)
339    
340     C-- Everyone else must wait for the parameters to be loaded
341     _BARRIER
342    
343     #endif /* ALLOW_THSICE */
344    
345     RETURN
346     END

  ViewVC Help
Powered by ViewVC 1.1.22