/[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.9 - (show annotations) (download)
Sat Sep 10 20:40:27 2005 UTC (19 years ago) by edhill
Branch: MAIN
CVS Tags: checkpoint57t_post, checkpoint58e_post, checkpoint57v_post, checkpoint57s_post, checkpoint57y_post, checkpoint58h_post, checkpoint57y_pre, checkpoint58j_post, checkpoint58, checkpoint58f_post, checkpoint57x_post, checkpoint58d_post, checkpoint58c_post, checkpoint57w_post, checkpint57u_post, checkpoint58a_post, checkpoint58i_post, checkpoint58g_post, checkpoint57z_post, checkpoint58b_post
Changes since 1.8: +58 -2 lines
 o mnc-ify pkg/land as requested by Daniel

1 C $Header: /u/gcmpack/MITgcm/pkg/land/land_readparms.F,v 1.8 2005/07/30 23:53:48 jmc 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,
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, albOldSnow, hAlbSnow
107
108 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
109
110 C- Set default value:
111 land_calc_grT = .TRUE.
112 land_calc_grW = .TRUE.
113 land_impl_grT = .TRUE.
114 land_calc_snow= .TRUE.
115 land_calc_alb = .TRUE.
116 land_oldPickup= .FALSE.
117 land_grT_iniFile = ' '
118 land_grW_iniFile = ' '
119 land_snow_iniFile= ' '
120 land_deltaT = deltaTclock
121 land_taveFreq = taveFreq
122 land_diagFreq = dumpFreq
123 land_monFreq = monitorFreq
124 #ifdef ALLOW_MNC
125 land_timeave_mnc = timeave_mnc .AND. useMNC
126 land_snapshot_mnc = snapshot_mnc .AND. useMNC
127 land_pickup_write_mnc = pickup_write_mnc .AND. useMNC
128 land_pickup_read_mnc = pickup_read_mnc .AND. useMNC
129 #else
130 land_timeave_mnc = .FALSE.
131 land_snapshot_mnc = .FALSE.
132 land_pickup_write_mnc = .FALSE.
133 land_pickup_read_mnc = .FALSE.
134 #endif
135 land_grdLambda= 0.42 _d 0
136 land_heatCs = 1.13 _d 6
137 land_CpWater = 4.2 _d 3
138 c land_CpWater = HeatCapacity_Cp
139 land_wTauDiff = 48. _d 0*3600. _d 0
140 land_waterCap = 0.24 _d 0
141 land_fractRunOff = 0.5 _d 0
142 land_rhoLiqW = rhoConstFresh
143 C- snow parameters:
144 land_rhoSnow = 330. _d 0
145 land_Lfreez = 334. _d 3
146 land_hMaxSnow = 1. _d 3
147 diffKsnow = 0.30 _d 0
148 timeSnowAge = 50. _d 0 * 86400. _d 0
149 hNewSnowAge = 2. _d -3
150 albColdSnow = 0.85 _d 0
151 albWarmSnow = 0.70 _d 0
152 albOldSnow = 0.55 _d 0
153 hAlbSnow = 0.30 _d 0
154 C- layer thickness:
155 DO k=1,land_nLev
156 land_dzF(k) = -1.
157 land_rec_dzC(k) = -1.
158 ENDDO
159
160 _BEGIN_MASTER(myThid)
161
162 WRITE(msgBuf,'(A)') ' LAND_READPARMS: opening data.land'
163 CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
164
165 CALL OPEN_COPY_DATA_FILE( 'data.land', 'LAND_READPARMS',
166 O iUnit, myThid )
167
168 C-- Read parameters from open data file:
169
170 C- Parameters for Land model:
171 READ(UNIT=iUnit,NML=LAND_MODEL_PAR)
172
173 C- Physical Constants for Land package
174 READ(UNIT=iUnit,NML=LAND_PHYS_PAR)
175
176 WRITE(msgBuf,'(A)')
177 & ' LAND_READPARMS: finished reading data.land'
178 CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
179
180 C-- Close the open data file
181 CLOSE(iUnit)
182
183 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
184 C- derive other parameters:
185
186 land_impl_grT = land_calc_grT .AND. land_impl_grT
187
188 tmpvar = 0. _d 0
189 DO k=1,land_nLev
190 tmpvar = tmpvar+land_dzF(k)
191 IF (tmpvar.GT.0. _d 0) land_rec_dzC(k) = 2. _d 0 / tmpvar
192 tmpvar = land_dzF(k)
193 ENDDO
194 IF ( land_Lfreez.NE. 0. _d 0 ) THEN
195 recip_Lfreez = 1. _d 0 / land_Lfreez
196 ELSE
197 recip_Lfreez = 0. _d 0
198 ENDIF
199
200 C-- Check parameters and model configuration
201
202 IF ( land_nLev.NE.2 .AND. land_impl_grT ) THEN
203 WRITE(msgBuf,'(2A,I3)') 'LAND_READPARMS: ',
204 & ' land_impl_grT=.T. but land_nLev=',land_nLev
205 CALL PRINT_ERROR( msgBuf, myThid)
206 WRITE(msgBuf,'(A)')
207 & 'Implicit scheme only implemented for 2 levels land Temp'
208 CALL PRINT_ERROR( msgBuf, myThid)
209 STOP 'ABNORMAL END: S/R LAND_READPARMS'
210 ENDIF
211
212 C- If land_taveFreq is positive, then must compile the land-diagnostics code
213 #ifndef ALLOW_LAND_TAVE
214 IF (land_taveFreq.GT.0.) THEN
215 WRITE(msgBuf,'(2A)') 'LAND_READPARMS:',
216 & ' land_taveFreq > 0 but ALLOW_LAND_TAVE undefined'
217 CALL PRINT_ERROR( msgBuf, myThid)
218 WRITE(msgBuf,'(2A)') 'Re-compile setting: ',
219 & '#define ALLOW_LAND_TAVE (in LAND_OPTIONS.h)'
220 CALL PRINT_ERROR( msgBuf, myThid)
221 STOP 'ABNORMAL END: S/R LAND_READPARMS'
222 ENDIF
223 #endif /* ALLOW_LAND_TAVE */
224
225 C- If land_monFreq is > 0, then must compile the monitor pkg
226 #ifndef ALLOW_MONITOR
227 IF (land_monFreq.GT.0.) THEN
228 WRITE(msgBuf,'(2A)') 'LAND_READPARMS:',
229 & ' land_monFreq > 0 but ALLOW_MONITOR undefined'
230 CALL PRINT_ERROR( msgBuf, myThid)
231 WRITE(msgBuf,'(2A)')
232 & 'Re-compile with pkg monitor (in packages.conf)'
233 CALL PRINT_ERROR( msgBuf, myThid)
234 STOP 'ABNORMAL END: S/R LAND_READPARMS'
235 ENDIF
236 #endif /* ALLOW_MONITOR */
237
238 #ifdef ALLOW_MNC
239 land_timeave_mnc =
240 & land_timeave_mnc .AND. useMNC
241 land_snapshot_mnc =
242 & land_snapshot_mnc .AND. useMNC
243 land_pickup_write_mnc =
244 & land_pickup_write_mnc .AND. useMNC
245 land_pickup_read_mnc =
246 & land_pickup_read_mnc .AND. useMNC
247
248 land_timeave_mdsio = (.NOT. land_timeave_mnc)
249 & .OR. outputTypesInclusive
250 land_snapshot_mdsio = (.NOT. land_snapshot_mnc)
251 & .OR. outputTypesInclusive
252 land_pickup_write_mdsio = (.NOT. land_pickup_write_mnc)
253 & .OR. outputTypesInclusive
254 land_pickup_read_mdsio = (.NOT. land_pickup_read_mnc)
255 & .OR. outputTypesInclusive
256 #else
257 land_timeave_mnc = .FALSE.
258 land_snapshot_mnc = .FALSE.
259 land_pickup_write_mnc = .FALSE.
260 land_pickup_read_mnc = .FALSE.
261 land_timeave_mdsio = .TRUE.
262 land_snapshot_mdsio = .TRUE.
263 land_pickup_write_mdsio = .TRUE.
264 land_pickup_read_mdsio = .TRUE.
265 #endif
266
267 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
268 C-- Print out parameter values :
269
270 iUnit = standardMessageUnit
271 WRITE(msgBuf,'(A)') ' '
272 CALL PRINT_MESSAGE(msgBuf,iUnit,SQUEEZE_RIGHT,1)
273 WRITE(msgBuf,'(A)') '// ==================================='
274 CALL PRINT_MESSAGE(msgBuf,iUnit,SQUEEZE_RIGHT,1)
275 WRITE(msgBuf,'(A)') '// Land package parameters :'
276 CALL PRINT_MESSAGE(msgBuf,iUnit,SQUEEZE_RIGHT,1)
277 WRITE(msgBuf,'(A)') '// ==================================='
278 CALL PRINT_MESSAGE(msgBuf,iUnit,SQUEEZE_RIGHT,1)
279
280 C- namelist LAND_MODEL_PAR:
281 CALL WRITE_0D_L( land_calc_grT, INDEX_NONE,
282 & 'land_calc_grT =',
283 & ' /* step forward ground Temp. on/off flag */')
284 CALL WRITE_0D_L( land_calc_grW, INDEX_NONE,
285 & 'land_calc_grW =',
286 & ' /* step forward soil moiture on/off flag */')
287 CALL WRITE_0D_L( land_impl_grT, INDEX_NONE,
288 & 'land_impl_grT =',
289 & ' /* solve ground temperature implicitly */')
290 CALL WRITE_0D_L( land_calc_snow, INDEX_NONE,
291 & 'land_calc_snow =',
292 & ' /* step forward snow thickness */')
293 CALL WRITE_0D_L( land_calc_alb, INDEX_NONE,
294 & 'land_calc_alb =',
295 & ' /* compute land+snow albedo */')
296 iL = ILNBLNK( land_grT_iniFile )
297 c IF ( iL.EQ.LEN(land_grT_iniFile) ) iL=0
298 IF ( iL.GE.1 ) THEN
299 WRITE(msgBuf,'(A,A)') 'land_grT_iniFile = ',
300 & '/* Initial ground-Temp Input-File */'
301 CALL PRINT_MESSAGE(msgBuf,iUnit,SQUEEZE_RIGHT,1)
302 WRITE(msgBuf,'(16X,A)') land_grT_iniFile(1:iL)
303 CALL PRINT_MESSAGE(msgBuf,iUnit,SQUEEZE_RIGHT,1)
304 msgBuf=' ;'
305 CALL PRINT_MESSAGE(msgBuf,iUnit,SQUEEZE_RIGHT,1)
306 ENDIF
307 iL = ILNBLNK( land_grW_iniFile )
308 IF ( iL.GE.1 ) THEN
309 WRITE(msgBuf,'(A,A)') 'land_grW_iniFile = ',
310 & '/* Initial soil-Water Input-File */'
311 CALL PRINT_MESSAGE(msgBuf,iUnit,SQUEEZE_RIGHT,1)
312 WRITE(msgBuf,'(16X,A)') land_grW_iniFile(1:iL)
313 CALL PRINT_MESSAGE(msgBuf,iUnit,SQUEEZE_RIGHT,1)
314 msgBuf=' ;'
315 CALL PRINT_MESSAGE(msgBuf,iUnit,SQUEEZE_RIGHT,1)
316 ENDIF
317 iL = ILNBLNK( land_snow_iniFile )
318 IF ( iL.GE.1 ) THEN
319 WRITE(msgBuf,'(A,A)') 'land_snow_iniFile= ',
320 & '/* Initial snow thickness Input-File */'
321 CALL PRINT_MESSAGE(msgBuf,iUnit,SQUEEZE_RIGHT,1)
322 WRITE(msgBuf,'(16X,A)') land_grW_iniFile(1:iL)
323 CALL PRINT_MESSAGE(msgBuf,iUnit,SQUEEZE_RIGHT,1)
324 msgBuf=' ;'
325 CALL PRINT_MESSAGE(msgBuf,iUnit,SQUEEZE_RIGHT,1)
326 ENDIF
327 CALL WRITE_0D_R8( land_deltaT, INDEX_NONE,'land_deltaT =',
328 & ' /* land model Time-Step (s) */')
329 CALL WRITE_0D_R8( land_taveFreq, INDEX_NONE,'land_taveFreq =',
330 & ' /* Frequency^-1 for time-Aver. output (s) */')
331 CALL WRITE_0D_R8( land_diagFreq, INDEX_NONE,'land_diagFreq =',
332 & ' /* Frequency^-1 for diagnostic output (s) */')
333 CALL WRITE_0D_R8( land_diagFreq, INDEX_NONE,'land_monFreq =',
334 & ' /* Frequency^-1 for monitor output (s) */')
335 CALL WRITE_1D_R8( land_dzF,land_nLev, INDEX_K,'land_dzF = ',
336 & ' /* layer thickness ( m ) */')
337 CALL WRITE_1D_R8(land_rec_dzC,land_nLev,INDEX_K,'land_rec_dzC= '
338 & ,' /* recip. vertical spacing (m-1) */')
339 CALL WRITE_0D_L( land_timeave_mnc, INDEX_NONE,
340 & 'land_timeave_mnc =',' /* use MNC for Tave output */')
341 CALL WRITE_0D_L( land_snapshot_mnc, INDEX_NONE,
342 & 'land_snapshot_mnc =',' /* use MNC for snapshot output */')
343 CALL WRITE_0D_L( land_pickup_write_mnc, INDEX_NONE,
344 & 'land_pickup_write_mnc =',
345 & ' /* use MNC for writing pickups */')
346 CALL WRITE_0D_L( land_pickup_read_mnc, INDEX_NONE,
347 & 'land_pickup_read_mnc =',
348 & ' /* use MNC for reading pickups */')
349
350 C- namelist LAND_PHYS_PAR:
351 CALL WRITE_0D_R8(land_grdLambda,INDEX_NONE,'land_grdLambda =',
352 & ' /* Thermal conductivity of the ground (W/m/K)*/')
353 CALL WRITE_0D_R8( land_heatCs,INDEX_NONE,'land_heatCs =',
354 & ' /* Heat capacity of dry soil (J/m3/K) */')
355 CALL WRITE_0D_R8( land_CpWater,INDEX_NONE,'land_CpWater =',
356 & ' /* Heat capacity of water (J/kg/K) */')
357 CALL WRITE_0D_R8( land_wTauDiff,INDEX_NONE,'land_wTauDiff =',
358 & ' /* soil moisture diffusion time scale (s) */')
359 CALL WRITE_0D_R8( land_waterCap,INDEX_NONE,'land_waterCap =',
360 & ' /* field capacity per meter of soil (1) */')
361 CALL WRITE_0D_R8(land_fractRunOff,INDEX_NONE,'land_fractRunOff='
362 & ,' /* fraction of water in excess which run-off */')
363 CALL WRITE_0D_R8(land_rhoLiqW,INDEX_NONE,'land_rhoLiqW =',
364 & ' /* density of liquid water (kg/m3) */')
365 CALL WRITE_0D_R8(land_rhoSnow,INDEX_NONE,'land_rhoSnow =',
366 & ' /* density of snow (kg/m3) */')
367 CALL WRITE_0D_R8(land_Lfreez,INDEX_NONE,'land_Lfreez =',
368 & ' /* Latent heat of freezing (J/kg) */')
369 CALL WRITE_0D_R8(land_hMaxSnow,INDEX_NONE,'land_hMaxSnow =',
370 & ' /* maximum snow-thickness (m) */')
371 CALL WRITE_0D_R8(diffKsnow,INDEX_NONE,'diffKsnow =',
372 & ' /* thermal conductivity of snow (W/m/K) */')
373 CALL WRITE_0D_R8(timeSnowAge,INDEX_NONE,'timeSnowAge =',
374 & ' /* snow aging time scale (s) */')
375 CALL WRITE_0D_R8(hNewSnowAge,INDEX_NONE,'hNewSnowAge =',
376 & ' /* new snow thickness to refresh snow-age by 1/e */')
377 CALL WRITE_0D_R8(albColdSnow,INDEX_NONE,'albColdSnow =',
378 & ' /* albedo of cold (=dry) new snow */')
379 CALL WRITE_0D_R8(albWarmSnow,INDEX_NONE,'albWarmSnow =',
380 & ' /* albedo of warm (=wet) new snow */')
381 CALL WRITE_0D_R8(albOldSnow, INDEX_NONE,'albOldSnow =',
382 & ' /* albedo of old snow (snowAge >35.d)*/')
383 CALL WRITE_0D_R8(hAlbSnow, INDEX_NONE,'hAlbSnow =',
384 & ' /* snow depth for albedo transition */')
385
386 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
387
388 _END_MASTER(myThid)
389
390 C-- Everyone else must wait for the parameters to be loaded
391 _BARRIER
392
393 #endif /* ALLOW_LAND */
394
395 RETURN
396 END

  ViewVC Help
Powered by ViewVC 1.1.22