/[MITgcm]/MITgcm/pkg/land/land_readparms.F
ViewVC logotype

Contents of /MITgcm/pkg/land/land_readparms.F

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


Revision 1.13 - (show annotations) (download)
Tue Apr 28 22:10:02 2009 UTC (15 years, 2 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint64x, checkpoint64q, checkpoint64p, checkpoint64s, checkpoint64r, checkpoint64u, checkpoint64t, checkpoint64w, checkpoint64v, checkpoint64i, checkpoint64h, checkpoint64k, checkpoint64j, checkpoint64m, checkpoint64l, checkpoint64o, checkpoint64n, checkpoint64a, checkpoint64c, checkpoint64b, checkpoint64e, checkpoint64d, checkpoint64g, checkpoint64f, checkpoint63p, checkpoint63q, checkpoint63r, checkpoint63s, checkpoint63l, checkpoint63m, checkpoint63n, checkpoint63o, checkpoint63h, checkpoint63i, checkpoint63j, checkpoint63k, checkpoint63d, checkpoint63e, checkpoint63f, checkpoint63g, checkpoint63a, checkpoint63b, checkpoint63c, checkpoint64, checkpoint62, checkpoint63, checkpoint62c, checkpoint62b, checkpoint62a, checkpoint62g, checkpoint62f, checkpoint62e, checkpoint62d, checkpoint62k, checkpoint62j, checkpoint62i, checkpoint62h, checkpoint62o, checkpoint62n, checkpoint62m, checkpoint62l, checkpoint62s, checkpoint62r, checkpoint62q, checkpoint62p, checkpoint62w, checkpoint62v, checkpoint62u, checkpoint62t, checkpoint62z, checkpoint62y, checkpoint62x, checkpoint61n, checkpoint61o, checkpoint61m, checkpoint61v, checkpoint61w, checkpoint61t, checkpoint61u, checkpoint61r, checkpoint61s, checkpoint61p, checkpoint61q, checkpoint61z, checkpoint61x, checkpoint61y
Changes since 1.12: +25 -25 lines
call WRITE_0D/1D_RL (instead of WRITE_0D/1D_R8) to print "RL" parameters

1 C $Header: /u/gcmpack/MITgcm/pkg/land/land_readparms.F,v 1.12 2007/01/31 23:02:06 dfer Exp $
2 C $Name: $
3
4 #include "LAND_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: LAND_READPARMS
8 C !INTERFACE:
9 SUBROUTINE LAND_READPARMS( myThid )
10
11 C !DESCRIPTION: \bv
12 C *==========================================================*
13 C | S/R LAND_READPARMS
14 C | o Read Land package parameters
15 C *==========================================================*
16 C \ev
17
18 C !USES:
19 IMPLICIT NONE
20
21 C == Global variables ===
22
23 C-- size for MITgcm & Land package :
24 #include "LAND_SIZE.h"
25
26 #include "EEPARAMS.h"
27 #include "PARAMS.h"
28 #include "LAND_PARAMS.h"
29 #ifdef ALLOW_MNC
30 #include "MNC_PARAMS.h"
31 #endif
32
33 C !INPUT/OUTPUT PARAMETERS:
34 C == Routine Arguments ==
35 C myThid :: Number of this instance
36 INTEGER myThid
37 CEOP
38
39 #ifdef ALLOW_LAND
40
41 C Functions
42 INTEGER ILNBLNK
43
44 C == Local Variables ==
45 C msgBuf :: Informational/error meesage buffer
46 C iUnit :: Work variable for IO unit number
47 C k :: loop counter
48 C iL :: Work variable for length of file-name
49 CHARACTER*(MAX_LEN_MBUF) msgBuf
50 INTEGER iUnit, k, iL
51 _RL tmpvar
52
53 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
54
55 C-- Land model parameters:
56 C land_calc_grT :: step forward ground Temperature
57 C land_calc_grW :: step forward soil moiture
58 C land_impl_grT :: solve ground Temperature implicitly
59 C land_calc_snow :: step forward snow thickness
60 C land_calc_alb :: compute albedo of snow over land
61 C land_oldPickup :: restart from an old pickup (= before checkpoint 52j)
62 C land_grT_iniFile :: File containing initial ground Temp.
63 C land_grW_iniFile :: File containing initial ground Water.
64 C land_snow_iniFile :: File containing initial snow thickness.
65 C land_deltaT :: land model time-step
66 C land_taveFreq :: Frequency^-1 for time-Aver. output (s)
67 C land_diagFreq :: Frequency^-1 for diagnostic output (s)
68 C land_monFreq :: Frequency^-1 for monitor output (s)
69 C land_dzF :: layer thickness
70 NAMELIST /LAND_MODEL_PAR/
71 & land_calc_grT, land_calc_grW,
72 & land_impl_grT, land_calc_snow,
73 & land_calc_alb, land_oldPickup,
74 & land_grT_iniFile, land_grW_iniFile, land_snow_iniFile,
75 & land_deltaT, land_taveFreq, land_diagFreq, land_monFreq,
76 & land_dzF,
77 & land_timeave_mnc, land_snapshot_mnc, land_mon_mnc,
78 & land_pickup_write_mnc, land_pickup_read_mnc
79
80
81 C-- Physical constants :
82 C land_grdLambda :: Thermal conductivity of the ground
83 C land_heatCs :: Heat capacity of dry soil (J/m3/K)
84 C land_CpWater :: Heat capacity of water (J/kg/K)
85 C land_wTauDiff :: soil moisture diffusion time scale
86 C land_waterCap :: field capacity per meter of soil
87 C land_fractRunOff:: fraction of water in excess which run-off
88 C land_rhoLiqW :: density of liquid water (kg/m3)
89 C land_rhoSnow :: density of snow (kg/m3)
90 C land_Lfreez :: Latent heat of freezing (J/kg)
91 C land_hMaxSnow :: Maximum snow-thickness (m)
92 C diffKsnow :: thermal conductivity of snow (W/m/K)
93 C timeSnowAge :: snow aging time scale (s)
94 C hNewSnowAge :: new snow thickness that refresh the snow-age (by 1/e)
95 C albColdSnow :: albedo of cold (=dry) new snow (Tsfc < -10)
96 C albWarmSnow :: albedo of warm (=wet) new snow (Tsfc = 0)
97 C albOldSnow :: albedo of old snow (snowAge > 35.d)
98 C hAlbSnow :: snow thickness for albedo transition: snow/ground
99
100 NAMELIST /LAND_PHYS_PAR/
101 & land_grdLambda, land_heatCs, land_CpWater,
102 & land_wTauDiff, land_waterCap, land_fractRunOff,
103 & land_rhoLiqW,
104 & land_rhoSnow, land_Lfreez,
105 & land_hMaxSnow, diffKsnow, timeSnowAge, hNewSnowAge,
106 & albColdSnow, albWarmSnow, tempSnowAlbL, albOldSnow, hAlbSnow
107
108 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
109
110 _BEGIN_MASTER(myThid)
111
112 C- Set default value:
113 land_calc_grT = .TRUE.
114 land_calc_grW = .TRUE.
115 land_impl_grT = .TRUE.
116 land_calc_snow= .TRUE.
117 land_calc_alb = .TRUE.
118 land_oldPickup= .FALSE.
119 land_grT_iniFile = ' '
120 land_grW_iniFile = ' '
121 land_snow_iniFile= ' '
122 land_deltaT = deltaTclock
123 land_taveFreq = taveFreq
124 land_diagFreq = dumpFreq
125 land_monFreq = monitorFreq
126 #ifdef ALLOW_MNC
127 land_timeave_mnc = timeave_mnc .AND. useMNC
128 land_snapshot_mnc = snapshot_mnc .AND. useMNC
129 land_mon_mnc = monitor_mnc .AND. useMNC
130 land_pickup_write_mnc = pickup_write_mnc .AND. useMNC
131 land_pickup_read_mnc = pickup_read_mnc .AND. useMNC
132 #else
133 land_timeave_mnc = .FALSE.
134 land_snapshot_mnc = .FALSE.
135 land_mon_mnc = .FALSE.
136 land_pickup_write_mnc = .FALSE.
137 land_pickup_read_mnc = .FALSE.
138 #endif
139 land_grdLambda= 0.42 _d 0
140 land_heatCs = 1.13 _d 6
141 land_CpWater = 4.2 _d 3
142 c land_CpWater = HeatCapacity_Cp
143 land_wTauDiff = 48. _d 0*3600. _d 0
144 land_waterCap = 0.24 _d 0
145 land_fractRunOff = 0.5 _d 0
146 land_rhoLiqW = rhoConstFresh
147 C- snow parameters:
148 land_rhoSnow = 330. _d 0
149 land_Lfreez = 334. _d 3
150 land_hMaxSnow = 1. _d 3
151 diffKsnow = 0.30 _d 0
152 timeSnowAge = 50. _d 0 * 86400. _d 0
153 hNewSnowAge = 2. _d -3
154 albColdSnow = 0.85 _d 0
155 albWarmSnow = 0.70 _d 0
156 tempSnowAlbL = -10. _d 0
157 albOldSnow = 0.55 _d 0
158 hAlbSnow = 0.30 _d 0
159 C- layer thickness:
160 DO k=1,land_nLev
161 land_dzF(k) = -1.
162 land_rec_dzC(k) = -1.
163 ENDDO
164
165 WRITE(msgBuf,'(A)') ' LAND_READPARMS: opening data.land'
166 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
167 I SQUEEZE_RIGHT, myThid )
168
169 CALL OPEN_COPY_DATA_FILE( 'data.land', 'LAND_READPARMS',
170 O iUnit, myThid )
171
172 C-- Read parameters from open data file:
173
174 C- Parameters for Land model:
175 READ(UNIT=iUnit,NML=LAND_MODEL_PAR)
176
177 C- Physical Constants for Land package
178 READ(UNIT=iUnit,NML=LAND_PHYS_PAR)
179
180 WRITE(msgBuf,'(A)')
181 & ' LAND_READPARMS: finished reading data.land'
182 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
183 I SQUEEZE_RIGHT, myThid )
184
185 C-- Close the open data file
186 CLOSE(iUnit)
187
188 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
189 C- derive other parameters:
190
191 land_impl_grT = land_calc_grT .AND. land_impl_grT
192
193 tmpvar = 0. _d 0
194 DO k=1,land_nLev
195 tmpvar = tmpvar+land_dzF(k)
196 IF (tmpvar.GT.0. _d 0) land_rec_dzC(k) = 2. _d 0 / tmpvar
197 tmpvar = land_dzF(k)
198 ENDDO
199 IF ( land_Lfreez.NE. 0. _d 0 ) THEN
200 recip_Lfreez = 1. _d 0 / land_Lfreez
201 ELSE
202 recip_Lfreez = 0. _d 0
203 ENDIF
204
205 C-- Check parameters and model configuration
206
207 IF ( land_nLev.NE.2 .AND. land_impl_grT ) THEN
208 WRITE(msgBuf,'(2A,I3)') 'LAND_READPARMS: ',
209 & ' land_impl_grT=.T. but land_nLev=',land_nLev
210 CALL PRINT_ERROR( msgBuf, myThid)
211 WRITE(msgBuf,'(A)')
212 & 'Implicit scheme only implemented for 2 levels land Temp'
213 CALL PRINT_ERROR( msgBuf, myThid)
214 STOP 'ABNORMAL END: S/R LAND_READPARMS'
215 ENDIF
216
217 C- If land_taveFreq is positive, then must compile the land-diagnostics code
218 #ifndef ALLOW_LAND_TAVE
219 IF (land_taveFreq.GT.0.) THEN
220 WRITE(msgBuf,'(2A)') 'LAND_READPARMS:',
221 & ' land_taveFreq > 0 but ALLOW_LAND_TAVE undefined'
222 CALL PRINT_ERROR( msgBuf, myThid)
223 WRITE(msgBuf,'(2A)') 'Re-compile setting: ',
224 & '#define ALLOW_LAND_TAVE (in LAND_OPTIONS.h)'
225 CALL PRINT_ERROR( msgBuf, myThid)
226 STOP 'ABNORMAL END: S/R LAND_READPARMS'
227 ENDIF
228 #endif /* ALLOW_LAND_TAVE */
229
230 C- If land_monFreq is > 0, then must compile the monitor pkg
231 #ifndef ALLOW_MONITOR
232 IF (land_monFreq.GT.0.) THEN
233 WRITE(msgBuf,'(2A)') 'LAND_READPARMS:',
234 & ' land_monFreq > 0 but ALLOW_MONITOR undefined'
235 CALL PRINT_ERROR( msgBuf, myThid)
236 WRITE(msgBuf,'(2A)')
237 & 'Re-compile with pkg monitor (in packages.conf)'
238 CALL PRINT_ERROR( msgBuf, myThid)
239 STOP 'ABNORMAL END: S/R LAND_READPARMS'
240 ENDIF
241 #endif /* ALLOW_MONITOR */
242
243 #ifdef ALLOW_MNC
244 land_timeave_mnc = useMNC .AND. land_timeave_mnc
245 land_snapshot_mnc = useMNC .AND. land_snapshot_mnc
246 land_mon_mnc = useMNC .AND. land_mon_mnc
247 land_pickup_write_mnc = useMNC .AND. land_pickup_write_mnc
248 land_pickup_read_mnc = useMNC .AND. land_pickup_read_mnc
249
250 land_timeave_mdsio = (.NOT.land_timeave_mnc)
251 & .OR. outputTypesInclusive
252 land_snapshot_mdsio = (.NOT.land_snapshot_mnc)
253 & .OR. outputTypesInclusive
254 land_mon_stdio = (.NOT.land_mon_mnc)
255 & .OR. outputTypesInclusive
256 land_pickup_write_mdsio = (.NOT.land_pickup_write_mnc)
257 & .OR. outputTypesInclusive
258 #else
259 land_timeave_mnc = .FALSE.
260 land_snapshot_mnc = .FALSE.
261 land_mon_mnc = .FALSE.
262 land_pickup_write_mnc = .FALSE.
263 land_pickup_read_mnc = .FALSE.
264 land_timeave_mdsio = .TRUE.
265 land_snapshot_mdsio = .TRUE.
266 land_mon_stdio = .TRUE.
267 land_pickup_write_mdsio = .TRUE.
268 #endif
269
270 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
271 C-- Print out parameter values :
272
273 iUnit = standardMessageUnit
274 WRITE(msgBuf,'(A)') ' '
275 CALL PRINT_MESSAGE(msgBuf,iUnit,SQUEEZE_RIGHT,myThid)
276 WRITE(msgBuf,'(A)') '// ==================================='
277 CALL PRINT_MESSAGE(msgBuf,iUnit,SQUEEZE_RIGHT,myThid)
278 WRITE(msgBuf,'(A)') '// Land package parameters :'
279 CALL PRINT_MESSAGE(msgBuf,iUnit,SQUEEZE_RIGHT,myThid)
280 WRITE(msgBuf,'(A)') '// ==================================='
281 CALL PRINT_MESSAGE(msgBuf,iUnit,SQUEEZE_RIGHT,myThid)
282
283 C- namelist LAND_MODEL_PAR:
284 CALL WRITE_0D_L( land_calc_grT, INDEX_NONE,
285 & 'land_calc_grT =',
286 & ' /* step forward ground Temp. on/off flag */')
287 CALL WRITE_0D_L( land_calc_grW, INDEX_NONE,
288 & 'land_calc_grW =',
289 & ' /* step forward soil moiture on/off flag */')
290 CALL WRITE_0D_L( land_impl_grT, INDEX_NONE,
291 & 'land_impl_grT =',
292 & ' /* solve ground temperature implicitly */')
293 CALL WRITE_0D_L( land_calc_snow, INDEX_NONE,
294 & 'land_calc_snow =',
295 & ' /* step forward snow thickness */')
296 CALL WRITE_0D_L( land_calc_alb, INDEX_NONE,
297 & 'land_calc_alb =',
298 & ' /* compute land+snow albedo */')
299 iL = ILNBLNK( land_grT_iniFile )
300 c IF ( iL.EQ.LEN(land_grT_iniFile) ) iL=0
301 IF ( iL.GE.1 ) THEN
302 WRITE(msgBuf,'(A,A)') 'land_grT_iniFile = ',
303 & '/* Initial ground-Temp Input-File */'
304 CALL PRINT_MESSAGE(msgBuf,iUnit,SQUEEZE_RIGHT,myThid)
305 WRITE(msgBuf,'(16X,A)') land_grT_iniFile(1:iL)
306 CALL PRINT_MESSAGE(msgBuf,iUnit,SQUEEZE_RIGHT,myThid)
307 msgBuf=' ;'
308 CALL PRINT_MESSAGE(msgBuf,iUnit,SQUEEZE_RIGHT,myThid)
309 ENDIF
310 iL = ILNBLNK( land_grW_iniFile )
311 IF ( iL.GE.1 ) THEN
312 WRITE(msgBuf,'(A,A)') 'land_grW_iniFile = ',
313 & '/* Initial soil-Water Input-File */'
314 CALL PRINT_MESSAGE(msgBuf,iUnit,SQUEEZE_RIGHT,myThid)
315 WRITE(msgBuf,'(16X,A)') land_grW_iniFile(1:iL)
316 CALL PRINT_MESSAGE(msgBuf,iUnit,SQUEEZE_RIGHT,myThid)
317 msgBuf=' ;'
318 CALL PRINT_MESSAGE(msgBuf,iUnit,SQUEEZE_RIGHT,myThid)
319 ENDIF
320 iL = ILNBLNK( land_snow_iniFile )
321 IF ( iL.GE.1 ) THEN
322 WRITE(msgBuf,'(A,A)') 'land_snow_iniFile= ',
323 & '/* Initial snow thickness Input-File */'
324 CALL PRINT_MESSAGE(msgBuf,iUnit,SQUEEZE_RIGHT,myThid)
325 WRITE(msgBuf,'(16X,A)') land_grW_iniFile(1:iL)
326 CALL PRINT_MESSAGE(msgBuf,iUnit,SQUEEZE_RIGHT,myThid)
327 msgBuf=' ;'
328 CALL PRINT_MESSAGE(msgBuf,iUnit,SQUEEZE_RIGHT,myThid)
329 ENDIF
330 CALL WRITE_0D_RL( land_deltaT, INDEX_NONE,'land_deltaT =',
331 & ' /* land model Time-Step (s) */')
332 CALL WRITE_0D_RL( land_taveFreq, INDEX_NONE,'land_taveFreq =',
333 & ' /* Frequency^-1 for time-Aver. output (s) */')
334 CALL WRITE_0D_RL( land_diagFreq, INDEX_NONE,'land_diagFreq =',
335 & ' /* Frequency^-1 for diagnostic output (s) */')
336 CALL WRITE_0D_RL( land_diagFreq, INDEX_NONE,'land_monFreq =',
337 & ' /* Frequency^-1 for monitor output (s) */')
338 CALL WRITE_1D_RL( land_dzF,land_nLev, INDEX_K,'land_dzF = ',
339 & ' /* layer thickness ( m ) */')
340 CALL WRITE_1D_RL(land_rec_dzC,land_nLev,INDEX_K,'land_rec_dzC= '
341 & ,' /* recip. vertical spacing (m-1) */')
342 CALL WRITE_0D_L( land_timeave_mdsio, INDEX_NONE,
343 & 'land_timeave_mdsio =',' /* use MDSIO for Tave output */')
344 CALL WRITE_0D_L( land_timeave_mnc, INDEX_NONE,
345 & 'land_timeave_mnc =',' /* use MNC for Tave output */')
346 CALL WRITE_0D_L( land_snapshot_mdsio, INDEX_NONE,
347 & 'land_snapshot_mdsio =',
348 & ' /* use MDSIO for snapshot output */')
349 CALL WRITE_0D_L( land_snapshot_mnc, INDEX_NONE,
350 & 'land_snapshot_mnc =',' /* use MNC for snapshot output */')
351 CALL WRITE_0D_L( land_mon_stdio, INDEX_NONE,
352 & 'land_mon_stdio =',' /* use STDOUT for monitor output */')
353 CALL WRITE_0D_L( land_mon_mnc, INDEX_NONE,
354 & 'land_mon_mnc =',' /* use MNC for monitor output */')
355 CALL WRITE_0D_L( land_pickup_write_mnc, INDEX_NONE,
356 & 'land_pickup_write_mnc =',
357 & ' /* use MNC for writing pickups */')
358 CALL WRITE_0D_L( land_pickup_read_mnc, INDEX_NONE,
359 & 'land_pickup_read_mnc =',
360 & ' /* use MNC for reading pickups */')
361
362 C- namelist LAND_PHYS_PAR:
363 CALL WRITE_0D_RL(land_grdLambda,INDEX_NONE,'land_grdLambda =',
364 & ' /* Thermal conductivity of the ground (W/m/K)*/')
365 CALL WRITE_0D_RL( land_heatCs,INDEX_NONE,'land_heatCs =',
366 & ' /* Heat capacity of dry soil (J/m3/K) */')
367 CALL WRITE_0D_RL( land_CpWater,INDEX_NONE,'land_CpWater =',
368 & ' /* Heat capacity of water (J/kg/K) */')
369 CALL WRITE_0D_RL( land_wTauDiff,INDEX_NONE,'land_wTauDiff =',
370 & ' /* soil moisture diffusion time scale (s) */')
371 CALL WRITE_0D_RL( land_waterCap,INDEX_NONE,'land_waterCap =',
372 & ' /* field capacity per meter of soil (1) */')
373 CALL WRITE_0D_RL(land_fractRunOff,INDEX_NONE,'land_fractRunOff='
374 & ,' /* fraction of water in excess which run-off */')
375 CALL WRITE_0D_RL(land_rhoLiqW,INDEX_NONE,'land_rhoLiqW =',
376 & ' /* density of liquid water (kg/m3) */')
377 CALL WRITE_0D_RL(land_rhoSnow,INDEX_NONE,'land_rhoSnow =',
378 & ' /* density of snow (kg/m3) */')
379 CALL WRITE_0D_RL(land_Lfreez,INDEX_NONE,'land_Lfreez =',
380 & ' /* Latent heat of freezing (J/kg) */')
381 CALL WRITE_0D_RL(land_hMaxSnow,INDEX_NONE,'land_hMaxSnow =',
382 & ' /* maximum snow-thickness (m) */')
383 CALL WRITE_0D_RL(diffKsnow,INDEX_NONE,'diffKsnow =',
384 & ' /* thermal conductivity of snow (W/m/K) */')
385 CALL WRITE_0D_RL(timeSnowAge,INDEX_NONE,'timeSnowAge =',
386 & ' /* snow aging time scale (s) */')
387 CALL WRITE_0D_RL(hNewSnowAge,INDEX_NONE,'hNewSnowAge =',
388 & ' /* new snow thickness to refresh snow-age by 1/e */')
389 CALL WRITE_0D_RL(albColdSnow,INDEX_NONE,'albColdSnow =',
390 & ' /* albedo of cold (=dry) new snow */')
391 CALL WRITE_0D_RL(albWarmSnow,INDEX_NONE,'albWarmSnow =',
392 & ' /* albedo of warm (=wet) new snow */')
393 CALL WRITE_0D_RL(tempSnowAlbL,INDEX_NONE,'tempSnowAlbL =',
394 & ' /* Temp. transition from ColdSnow to WarmSnow Alb. (oC) */')
395 CALL WRITE_0D_RL(albOldSnow, INDEX_NONE,'albOldSnow =',
396 & ' /* albedo of old snow (snowAge >35.d)*/')
397 CALL WRITE_0D_RL(hAlbSnow, INDEX_NONE,'hAlbSnow =',
398 & ' /* snow depth for albedo transition */')
399
400 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
401
402 _END_MASTER(myThid)
403
404 C-- Everyone else must wait for the parameters to be loaded
405 _BARRIER
406
407 #endif /* ALLOW_LAND */
408
409 RETURN
410 END

  ViewVC Help
Powered by ViewVC 1.1.22