/[lmdze]/trunk/phylmd/phyetat0.f90
ViewVC logotype

Annotation of /trunk/phylmd/phyetat0.f90

Parent Directory Parent Directory | Revision Log Revision Log


Revision 50 - (hide annotations)
Wed Aug 24 13:33:28 2011 UTC (12 years, 8 months ago) by guez
Original Path: trunk/libf/phylmd/phyetat0.f90
File size: 23904 byte(s)
Bug fix: was reading only scalars in "phyetat0".
1 guez 3 module phyetat0_m
2    
3 guez 15 use dimphy, only: klon
4 guez 12
5 guez 3 IMPLICIT none
6    
7 guez 22 REAL, save:: rlat(klon), rlon(klon) ! latitude and longitude, in degrees
8 guez 3
9 guez 15 private klon
10 guez 3
11     contains
12    
13 guez 49 SUBROUTINE phyetat0(fichnom, pctsrf, tsol, tsoil, ocean, tslab, seaice, &
14     qsurf, qsol, snow, albe, alblw, evap, rain_fall, snow_fall, solsw, &
15     sollw, fder, radsol, frugs, agesno, zmea, zstd, zsig, zgam, zthe, &
16     zpic, zval, t_ancien, q_ancien, ancien_ok, rnebcon, ratqs, clwcon, &
17 guez 3 run_off_lic_0)
18    
19 guez 49 ! From phylmd/phyetat0.F, version 1.4 2005/06/03 10:03:07
20     ! Author: Z.X. Li (LMD/CNRS)
21 guez 50 ! Date: 1993/08/18
22 guez 49 ! Objet : Lecture de l'état initial pour la physique
23 guez 3
24 guez 12 USE indicesol, ONLY : epsfra, is_lic, is_oce, is_sic, is_ter, nbsrf
25     USE dimsoil, ONLY : nsoilmx
26     USE temps, ONLY : itau_phy
27 guez 49 use netcdf, only: nf90_get_att, nf90_global, nf90_inq_varid, NF90_NOERR, &
28 guez 50 NF90_NOWRITE
29     use netcdf95, only: handle_err, nf95_get_var, nf95_close, NF95_OPEN, &
30     nf95_inq_varid
31 guez 15 use dimphy, only: zmasq, klev
32 guez 12
33 guez 49 CHARACTER(len=*), intent(in):: fichnom
34     REAL tsol(klon, nbsrf)
35     REAL tsoil(klon, nsoilmx, nbsrf)
36 guez 3 REAL tslab(klon), seaice(klon)
37 guez 49 REAL qsurf(klon, nbsrf)
38 guez 3 REAL qsol(klon)
39 guez 49 REAL snow(klon, nbsrf)
40     REAL albe(klon, nbsrf)
41     REAL alblw(klon, nbsrf)
42     REAL evap(klon, nbsrf)
43 guez 3 REAL radsol(klon)
44     REAL rain_fall(klon)
45     REAL snow_fall(klon)
46     REAL sollw(klon)
47     real solsw(klon)
48     real fder(klon)
49 guez 49 REAL frugs(klon, nbsrf)
50     REAL agesno(klon, nbsrf)
51 guez 3 REAL zmea(klon)
52 guez 13 REAL, intent(out):: zstd(klon)
53     REAL, intent(out):: zsig(klon)
54 guez 3 REAL zgam(klon)
55     REAL zthe(klon)
56     REAL zpic(klon)
57     REAL zval(klon)
58     REAL pctsrf(klon, nbsrf)
59     REAL fractint(klon)
60     REAL run_off_lic_0(klon)
61    
62 guez 49 REAL t_ancien(klon, klev), q_ancien(klon, klev)
63     real rnebcon(klon, klev), clwcon(klon, klev), ratqs(klon, klev)
64     LOGICAL, intent(out):: ancien_ok
65 guez 3
66 guez 12 CHARACTER(len=*), intent(in):: ocean
67 guez 3
68     REAL xmin, xmax
69    
70 guez 49 INTEGER ncid, varid
71 guez 3 INTEGER ierr, i, nsrf, isoil
72     CHARACTER*7 str7
73     CHARACTER*2 str2
74    
75     !---------------------------------------------------------------
76    
77     print *, "Call sequence information: phyetat0"
78    
79     ! Ouvrir le fichier contenant l'etat initial:
80     print *, 'fichnom = ', fichnom
81 guez 49 call NF95_OPEN(fichnom, NF90_NOWRITE, ncid)
82 guez 3
83 guez 49 ierr = nf90_get_att(ncid, nf90_global, "itau_phy", itau_phy)
84     call handle_err("phyetat0 itau_phy", ierr, ncid, nf90_global)
85 guez 3
86     ! Lecture des latitudes (coordonnees):
87    
88 guez 50 call NF95_INQ_VARID(ncid, "latitude", varid)
89     call NF95_GET_VAR(ncid, varid, rlat)
90 guez 3
91     ! Lecture des longitudes (coordonnees):
92    
93 guez 50 call NF95_INQ_VARID(ncid, "longitude", varid)
94     call NF95_GET_VAR(ncid, varid, rlon)
95 guez 3
96     ! Lecture du masque terre mer
97    
98 guez 49 ierr = NF90_INQ_VARID(ncid, "masque", varid)
99 guez 50 IF (ierr == NF90_NOERR) THEN
100 guez 49 call nf95_get_var(ncid, varid, zmasq)
101 guez 3 else
102 guez 43 PRINT *, 'phyetat0: Le champ <masque> est absent'
103     PRINT *, 'fichier startphy non compatible avec phyetat0'
104 guez 3 ENDIF
105     ! Lecture des fractions pour chaque sous-surface
106    
107     ! initialisation des sous-surfaces
108    
109     pctsrf = 0.
110    
111     ! fraction de terre
112    
113 guez 49 ierr = NF90_INQ_VARID(ncid, "FTER", varid)
114 guez 50 IF (ierr == NF90_NOERR) THEN
115     call nf95_get_var(ncid, varid, pctsrf(:, is_ter))
116 guez 3 else
117 guez 43 PRINT *, 'phyetat0: Le champ <FTER> est absent'
118 guez 3 ENDIF
119    
120     ! fraction de glace de terre
121    
122 guez 49 ierr = NF90_INQ_VARID(ncid, "FLIC", varid)
123 guez 50 IF (ierr == NF90_NOERR) THEN
124     call nf95_get_var(ncid, varid, pctsrf(:, is_lic))
125 guez 3 else
126 guez 43 PRINT *, 'phyetat0: Le champ <FLIC> est absent'
127 guez 3 ENDIF
128    
129     ! fraction d'ocean
130    
131 guez 49 ierr = NF90_INQ_VARID(ncid, "FOCE", varid)
132 guez 50 IF (ierr == NF90_NOERR) THEN
133     call nf95_get_var(ncid, varid, pctsrf(:, is_oce))
134 guez 3 else
135 guez 43 PRINT *, 'phyetat0: Le champ <FOCE> est absent'
136 guez 3 ENDIF
137    
138     ! fraction glace de mer
139    
140 guez 49 ierr = NF90_INQ_VARID(ncid, "FSIC", varid)
141 guez 50 IF (ierr == NF90_NOERR) THEN
142     call nf95_get_var(ncid, varid, pctsrf(:, is_sic))
143 guez 3 else
144 guez 43 PRINT *, 'phyetat0: Le champ <FSIC> est absent'
145 guez 3 ENDIF
146    
147 guez 50 ! Verification de l'adequation entre le masque et les sous-surfaces
148 guez 3
149 guez 50 fractint = pctsrf(:, is_ter) + pctsrf(:, is_lic)
150 guez 3 DO i = 1 , klon
151 guez 50 IF ( abs(fractint(i) - zmasq(i) ) > EPSFRA ) THEN
152     WRITE(*, *) 'phyetat0: attention fraction terre pas ', &
153 guez 3 'coherente ', i, zmasq(i), pctsrf(i, is_ter) &
154 guez 49 , pctsrf(i, is_lic)
155 guez 3 ENDIF
156     END DO
157 guez 50 fractint = pctsrf(:, is_oce) + pctsrf(:, is_sic)
158 guez 3 DO i = 1 , klon
159 guez 50 IF ( abs( fractint(i) - (1. - zmasq(i))) > EPSFRA ) THEN
160     WRITE(*, *) 'phyetat0 attention fraction ocean pas ', &
161 guez 3 'coherente ', i, zmasq(i) , pctsrf(i, is_oce) &
162 guez 49 , pctsrf(i, is_sic)
163 guez 3 ENDIF
164     END DO
165    
166     ! Lecture des temperatures du sol:
167    
168 guez 49 ierr = NF90_INQ_VARID(ncid, "TS", varid)
169     IF (ierr /= NF90_NOERR) THEN
170     PRINT *, 'phyetat0 : Le champ <TS> est absent'
171 guez 50 PRINT *, ' Mais je vais essayer de lire TS**'
172 guez 3 DO nsrf = 1, nbsrf
173 guez 50 IF (nsrf > 99) THEN
174 guez 43 PRINT *, "Trop de sous-mailles"
175 guez 3 stop 1
176     ENDIF
177 guez 49 WRITE(str2, '(i2.2)') nsrf
178 guez 50 call NF95_INQ_VARID(ncid, "TS"//str2, varid)
179     call NF95_GET_VAR(ncid, varid, tsol(:, nsrf))
180 guez 3 xmin = 1.0E+20
181     xmax = -1.0E+20
182     DO i = 1, klon
183 guez 49 xmin = MIN(tsol(i, nsrf), xmin)
184     xmax = MAX(tsol(i, nsrf), xmax)
185 guez 3 ENDDO
186 guez 49 PRINT *, 'Temperature du sol TS**:', nsrf, xmin, xmax
187 guez 3 ENDDO
188     ELSE
189 guez 43 PRINT *, 'phyetat0: Le champ <TS> est present'
190 guez 50 PRINT *, ' J ignore donc les autres temperatures TS**'
191 guez 49 call nf95_get_var(ncid, varid, tsol(:, 1))
192 guez 3 xmin = 1.0E+20
193     xmax = -1.0E+20
194     DO i = 1, klon
195 guez 49 xmin = MIN(tsol(i, 1), xmin)
196     xmax = MAX(tsol(i, 1), xmax)
197 guez 3 ENDDO
198 guez 49 PRINT *, 'Temperature du sol <TS>', xmin, xmax
199 guez 3 DO nsrf = 2, nbsrf
200     DO i = 1, klon
201 guez 49 tsol(i, nsrf) = tsol(i, 1)
202 guez 3 ENDDO
203     ENDDO
204     ENDIF
205    
206     ! Lecture des temperatures du sol profond:
207    
208     DO nsrf = 1, nbsrf
209     DO isoil=1, nsoilmx
210 guez 50 IF (isoil > 99 .AND. nsrf > 99) THEN
211 guez 43 PRINT *, "Trop de couches ou sous-mailles"
212 guez 3 stop 1
213     ENDIF
214 guez 49 WRITE(str7, '(i2.2, "srf", i2.2)') isoil, nsrf
215     ierr = NF90_INQ_VARID(ncid, 'Tsoil'//str7, varid)
216     IF (ierr /= NF90_NOERR) THEN
217 guez 43 PRINT *, "phyetat0: Le champ <Tsoil"//str7//"> est absent"
218 guez 50 PRINT *, " Il prend donc la valeur de surface"
219 guez 3 DO i=1, klon
220 guez 49 tsoil(i, isoil, nsrf)=tsol(i, nsrf)
221 guez 3 ENDDO
222     ELSE
223 guez 50 call NF95_GET_VAR(ncid, varid, tsoil(:, isoil, nsrf))
224 guez 3 ENDIF
225     ENDDO
226     ENDDO
227    
228     !IM "slab" ocean
229    
230 guez 50 ! Lecture de tslab (pour slab ocean seulement):
231 guez 3
232 guez 50 IF (ocean .eq. 'slab ') then
233     call NF95_INQ_VARID(ncid, "TSLAB", varid)
234 guez 49 call nf95_get_var(ncid, varid, tslab)
235 guez 3 xmin = 1.0E+20
236     xmax = -1.0E+20
237     DO i = 1, klon
238 guez 49 xmin = MIN(tslab(i), xmin)
239     xmax = MAX(tslab(i), xmax)
240 guez 3 ENDDO
241 guez 49 PRINT *, 'Ecart de la SST tslab:', xmin, xmax
242 guez 3
243     ! Lecture de seaice (pour slab ocean seulement):
244    
245 guez 50 call NF95_INQ_VARID(ncid, "SEAICE", varid)
246 guez 49 call nf95_get_var(ncid, varid, seaice)
247 guez 3 xmin = 1.0E+20
248     xmax = -1.0E+20
249     DO i = 1, klon
250 guez 49 xmin = MIN(seaice(i), xmin)
251     xmax = MAX(seaice(i), xmax)
252 guez 3 ENDDO
253 guez 49 PRINT *, 'Masse de la glace de mer seaice:', xmin, xmax
254 guez 3 ELSE
255     tslab = 0.
256     seaice = 0.
257     ENDIF
258    
259     ! Lecture de l'humidite de l'air juste au dessus du sol:
260    
261 guez 49 ierr = NF90_INQ_VARID(ncid, "QS", varid)
262     IF (ierr /= NF90_NOERR) THEN
263 guez 43 PRINT *, 'phyetat0: Le champ <QS> est absent'
264 guez 50 PRINT *, ' Mais je vais essayer de lire QS**'
265 guez 3 DO nsrf = 1, nbsrf
266 guez 50 IF (nsrf > 99) THEN
267 guez 43 PRINT *, "Trop de sous-mailles"
268 guez 3 stop 1
269     ENDIF
270 guez 49 WRITE(str2, '(i2.2)') nsrf
271 guez 50 call NF95_INQ_VARID(ncid, "QS"//str2, varid)
272     call NF95_GET_VAR(ncid, varid, qsurf(:, nsrf))
273 guez 3 xmin = 1.0E+20
274     xmax = -1.0E+20
275     DO i = 1, klon
276 guez 49 xmin = MIN(qsurf(i, nsrf), xmin)
277     xmax = MAX(qsurf(i, nsrf), xmax)
278 guez 3 ENDDO
279 guez 49 PRINT *, 'Humidite pres du sol QS**:', nsrf, xmin, xmax
280 guez 3 ENDDO
281     ELSE
282 guez 43 PRINT *, 'phyetat0: Le champ <QS> est present'
283 guez 50 PRINT *, ' J ignore donc les autres humidites QS**'
284 guez 49 call nf95_get_var(ncid, varid, qsurf(:, 1))
285 guez 3 xmin = 1.0E+20
286     xmax = -1.0E+20
287     DO i = 1, klon
288 guez 49 xmin = MIN(qsurf(i, 1), xmin)
289     xmax = MAX(qsurf(i, 1), xmax)
290 guez 3 ENDDO
291 guez 49 PRINT *, 'Humidite pres du sol <QS>', xmin, xmax
292 guez 3 DO nsrf = 2, nbsrf
293     DO i = 1, klon
294 guez 49 qsurf(i, nsrf) = qsurf(i, 1)
295 guez 3 ENDDO
296     ENDDO
297     ENDIF
298    
299     ! Eau dans le sol (pour le modele de sol "bucket")
300    
301 guez 49 ierr = NF90_INQ_VARID(ncid, "QSOL", varid)
302 guez 50 IF (ierr == NF90_NOERR) THEN
303 guez 49 call nf95_get_var(ncid, varid, qsol)
304 guez 3 else
305 guez 43 PRINT *, 'phyetat0: Le champ <QSOL> est absent'
306 guez 50 PRINT *, ' Valeur par defaut nulle'
307 guez 43 qsol = 0.
308 guez 3 ENDIF
309     xmin = 1.0E+20
310     xmax = -1.0E+20
311     DO i = 1, klon
312 guez 49 xmin = MIN(qsol(i), xmin)
313     xmax = MAX(qsol(i), xmax)
314 guez 3 ENDDO
315 guez 49 PRINT *, 'Eau dans le sol (mm) <QSOL>', xmin, xmax
316 guez 3
317     ! Lecture de neige au sol:
318    
319 guez 49 ierr = NF90_INQ_VARID(ncid, "SNOW", varid)
320     IF (ierr /= NF90_NOERR) THEN
321 guez 43 PRINT *, 'phyetat0: Le champ <SNOW> est absent'
322 guez 50 PRINT *, ' Mais je vais essayer de lire SNOW**'
323 guez 3 DO nsrf = 1, nbsrf
324 guez 50 IF (nsrf > 99) THEN
325 guez 43 PRINT *, "Trop de sous-mailles"
326 guez 3 stop 1
327     ENDIF
328 guez 49 WRITE(str2, '(i2.2)') nsrf
329 guez 50 call NF95_INQ_VARID(ncid, "SNOW"//str2, varid)
330     call NF95_GET_VAR(ncid, varid, snow(:, nsrf))
331 guez 3 xmin = 1.0E+20
332     xmax = -1.0E+20
333     DO i = 1, klon
334 guez 49 xmin = MIN(snow(i, nsrf), xmin)
335     xmax = MAX(snow(i, nsrf), xmax)
336 guez 3 ENDDO
337 guez 49 PRINT *, 'Neige du sol SNOW**:', nsrf, xmin, xmax
338 guez 3 ENDDO
339     ELSE
340 guez 43 PRINT *, 'phyetat0: Le champ <SNOW> est present'
341 guez 50 PRINT *, ' J ignore donc les autres neiges SNOW**'
342 guez 49 call nf95_get_var(ncid, varid, snow(:, 1))
343 guez 3 xmin = 1.0E+20
344     xmax = -1.0E+20
345     DO i = 1, klon
346 guez 49 xmin = MIN(snow(i, 1), xmin)
347     xmax = MAX(snow(i, 1), xmax)
348 guez 3 ENDDO
349 guez 49 PRINT *, 'Neige du sol <SNOW>', xmin, xmax
350 guez 3 DO nsrf = 2, nbsrf
351     DO i = 1, klon
352 guez 49 snow(i, nsrf) = snow(i, 1)
353 guez 3 ENDDO
354     ENDDO
355     ENDIF
356    
357     ! Lecture de albedo au sol:
358    
359 guez 49 ierr = NF90_INQ_VARID(ncid, "ALBE", varid)
360     IF (ierr /= NF90_NOERR) THEN
361 guez 43 PRINT *, 'phyetat0: Le champ <ALBE> est absent'
362 guez 50 PRINT *, ' Mais je vais essayer de lire ALBE**'
363 guez 3 DO nsrf = 1, nbsrf
364 guez 50 IF (nsrf > 99) THEN
365 guez 43 PRINT *, "Trop de sous-mailles"
366 guez 3 stop 1
367     ENDIF
368 guez 49 WRITE(str2, '(i2.2)') nsrf
369 guez 50 call NF95_INQ_VARID(ncid, "ALBE"//str2, varid)
370     call NF95_GET_VAR(ncid, varid, albe(:, nsrf))
371 guez 3 xmin = 1.0E+20
372     xmax = -1.0E+20
373     DO i = 1, klon
374 guez 49 xmin = MIN(albe(i, nsrf), xmin)
375     xmax = MAX(albe(i, nsrf), xmax)
376 guez 3 ENDDO
377 guez 49 PRINT *, 'Albedo du sol ALBE**:', nsrf, xmin, xmax
378 guez 3 ENDDO
379     ELSE
380 guez 43 PRINT *, 'phyetat0: Le champ <ALBE> est present'
381 guez 50 PRINT *, ' J ignore donc les autres ALBE**'
382 guez 49 call nf95_get_var(ncid, varid, albe(:, 1))
383 guez 3 xmin = 1.0E+20
384     xmax = -1.0E+20
385     DO i = 1, klon
386 guez 49 xmin = MIN(albe(i, 1), xmin)
387     xmax = MAX(albe(i, 1), xmax)
388 guez 3 ENDDO
389 guez 49 PRINT *, 'Neige du sol <ALBE>', xmin, xmax
390 guez 3 DO nsrf = 2, nbsrf
391     DO i = 1, klon
392 guez 49 albe(i, nsrf) = albe(i, 1)
393 guez 3 ENDDO
394     ENDDO
395     ENDIF
396    
397     ! Lecture de albedo au sol LW:
398    
399 guez 49 ierr = NF90_INQ_VARID(ncid, "ALBLW", varid)
400     IF (ierr /= NF90_NOERR) THEN
401 guez 43 PRINT *, 'phyetat0: Le champ <ALBLW> est absent'
402 guez 50 ! PRINT *, ' Mais je vais essayer de lire ALBLW**'
403     PRINT *, ' Mais je vais prendre ALBE**'
404 guez 3 DO nsrf = 1, nbsrf
405     DO i = 1, klon
406 guez 49 alblw(i, nsrf) = albe(i, nsrf)
407 guez 3 ENDDO
408     ENDDO
409     ELSE
410 guez 43 PRINT *, 'phyetat0: Le champ <ALBLW> est present'
411 guez 50 PRINT *, ' J ignore donc les autres ALBLW**'
412 guez 49 call nf95_get_var(ncid, varid, alblw(:, 1))
413 guez 3 xmin = 1.0E+20
414     xmax = -1.0E+20
415     DO i = 1, klon
416 guez 49 xmin = MIN(alblw(i, 1), xmin)
417     xmax = MAX(alblw(i, 1), xmax)
418 guez 3 ENDDO
419 guez 49 PRINT *, 'Neige du sol <ALBLW>', xmin, xmax
420 guez 3 DO nsrf = 2, nbsrf
421     DO i = 1, klon
422 guez 49 alblw(i, nsrf) = alblw(i, 1)
423 guez 3 ENDDO
424     ENDDO
425     ENDIF
426    
427 guez 50 ! Lecture de evaporation:
428 guez 3
429 guez 49 ierr = NF90_INQ_VARID(ncid, "EVAP", varid)
430     IF (ierr /= NF90_NOERR) THEN
431 guez 43 PRINT *, 'phyetat0: Le champ <EVAP> est absent'
432 guez 50 PRINT *, ' Mais je vais essayer de lire EVAP**'
433 guez 3 DO nsrf = 1, nbsrf
434 guez 50 IF (nsrf > 99) THEN
435 guez 43 PRINT *, "Trop de sous-mailles"
436 guez 3 stop 1
437     ENDIF
438 guez 49 WRITE(str2, '(i2.2)') nsrf
439 guez 50 call NF95_INQ_VARID(ncid, "EVAP"//str2, varid)
440     call NF95_GET_VAR(ncid, varid, evap(:, nsrf))
441 guez 3 xmin = 1.0E+20
442     xmax = -1.0E+20
443     DO i = 1, klon
444 guez 49 xmin = MIN(evap(i, nsrf), xmin)
445     xmax = MAX(evap(i, nsrf), xmax)
446 guez 3 ENDDO
447 guez 49 PRINT *, 'evap du sol EVAP**:', nsrf, xmin, xmax
448 guez 3 ENDDO
449     ELSE
450 guez 43 PRINT *, 'phyetat0: Le champ <EVAP> est present'
451 guez 50 PRINT *, ' J ignore donc les autres EVAP**'
452 guez 49 call nf95_get_var(ncid, varid, evap(:, 1))
453 guez 3 xmin = 1.0E+20
454     xmax = -1.0E+20
455     DO i = 1, klon
456 guez 49 xmin = MIN(evap(i, 1), xmin)
457     xmax = MAX(evap(i, 1), xmax)
458 guez 3 ENDDO
459 guez 49 PRINT *, 'Evap du sol <EVAP>', xmin, xmax
460 guez 3 DO nsrf = 2, nbsrf
461     DO i = 1, klon
462 guez 49 evap(i, nsrf) = evap(i, 1)
463 guez 3 ENDDO
464     ENDDO
465     ENDIF
466    
467     ! Lecture precipitation liquide:
468    
469 guez 50 call NF95_INQ_VARID(ncid, "rain_f", varid)
470     call NF95_GET_VAR(ncid, varid, rain_fall)
471 guez 3 xmin = 1.0E+20
472     xmax = -1.0E+20
473     DO i = 1, klon
474 guez 49 xmin = MIN(rain_fall(i), xmin)
475     xmax = MAX(rain_fall(i), xmax)
476 guez 3 ENDDO
477 guez 49 PRINT *, 'Precipitation liquide rain_f:', xmin, xmax
478 guez 3
479     ! Lecture precipitation solide:
480    
481 guez 50 call NF95_INQ_VARID(ncid, "snow_f", varid)
482     call NF95_GET_VAR(ncid, varid, snow_fall)
483 guez 3 xmin = 1.0E+20
484     xmax = -1.0E+20
485     DO i = 1, klon
486 guez 49 xmin = MIN(snow_fall(i), xmin)
487     xmax = MAX(snow_fall(i), xmax)
488 guez 3 ENDDO
489 guez 49 PRINT *, 'Precipitation solide snow_f:', xmin, xmax
490 guez 3
491     ! Lecture rayonnement solaire au sol:
492    
493 guez 49 ierr = NF90_INQ_VARID(ncid, "solsw", varid)
494     IF (ierr /= NF90_NOERR) THEN
495 guez 43 PRINT *, 'phyetat0: Le champ <solsw> est absent'
496     PRINT *, 'mis a zero'
497 guez 3 solsw = 0.
498     ELSE
499 guez 49 call nf95_get_var(ncid, varid, solsw)
500 guez 3 ENDIF
501     xmin = 1.0E+20
502     xmax = -1.0E+20
503     DO i = 1, klon
504 guez 49 xmin = MIN(solsw(i), xmin)
505     xmax = MAX(solsw(i), xmax)
506 guez 3 ENDDO
507 guez 49 PRINT *, 'Rayonnement solaire au sol solsw:', xmin, xmax
508 guez 3
509     ! Lecture rayonnement IF au sol:
510    
511 guez 49 ierr = NF90_INQ_VARID(ncid, "sollw", varid)
512     IF (ierr /= NF90_NOERR) THEN
513 guez 43 PRINT *, 'phyetat0: Le champ <sollw> est absent'
514     PRINT *, 'mis a zero'
515 guez 3 sollw = 0.
516     ELSE
517 guez 49 call nf95_get_var(ncid, varid, sollw)
518 guez 3 ENDIF
519     xmin = 1.0E+20
520     xmax = -1.0E+20
521     DO i = 1, klon
522 guez 49 xmin = MIN(sollw(i), xmin)
523     xmax = MAX(sollw(i), xmax)
524 guez 3 ENDDO
525 guez 49 PRINT *, 'Rayonnement IF au sol sollw:', xmin, xmax
526 guez 3
527     ! Lecture derive des flux:
528    
529 guez 49 ierr = NF90_INQ_VARID(ncid, "fder", varid)
530     IF (ierr /= NF90_NOERR) THEN
531 guez 43 PRINT *, 'phyetat0: Le champ <fder> est absent'
532     PRINT *, 'mis a zero'
533 guez 3 fder = 0.
534     ELSE
535 guez 49 call nf95_get_var(ncid, varid, fder)
536 guez 3 ENDIF
537     xmin = 1.0E+20
538     xmax = -1.0E+20
539     DO i = 1, klon
540 guez 49 xmin = MIN(fder(i), xmin)
541     xmax = MAX(fder(i), xmax)
542 guez 3 ENDDO
543 guez 49 PRINT *, 'Derive des flux fder:', xmin, xmax
544 guez 3
545     ! Lecture du rayonnement net au sol:
546    
547 guez 50 call NF95_INQ_VARID(ncid, "RADS", varid)
548     call NF95_GET_VAR(ncid, varid, radsol)
549 guez 3 xmin = 1.0E+20
550     xmax = -1.0E+20
551     DO i = 1, klon
552 guez 49 xmin = MIN(radsol(i), xmin)
553     xmax = MAX(radsol(i), xmax)
554 guez 3 ENDDO
555 guez 49 PRINT *, 'Rayonnement net au sol radsol:', xmin, xmax
556 guez 3
557     ! Lecture de la longueur de rugosite
558    
559 guez 49 ierr = NF90_INQ_VARID(ncid, "RUG", varid)
560     IF (ierr /= NF90_NOERR) THEN
561 guez 43 PRINT *, 'phyetat0: Le champ <RUG> est absent'
562 guez 50 PRINT *, ' Mais je vais essayer de lire RUG**'
563 guez 3 DO nsrf = 1, nbsrf
564 guez 50 IF (nsrf > 99) THEN
565 guez 43 PRINT *, "Trop de sous-mailles"
566 guez 3 stop 1
567     ENDIF
568 guez 49 WRITE(str2, '(i2.2)') nsrf
569 guez 50 call NF95_INQ_VARID(ncid, "RUG"//str2, varid)
570     call NF95_GET_VAR(ncid, varid, frugs(:, nsrf))
571 guez 3 xmin = 1.0E+20
572     xmax = -1.0E+20
573     DO i = 1, klon
574 guez 49 xmin = MIN(frugs(i, nsrf), xmin)
575     xmax = MAX(frugs(i, nsrf), xmax)
576 guez 3 ENDDO
577 guez 49 PRINT *, 'rugosite du sol RUG**:', nsrf, xmin, xmax
578 guez 3 ENDDO
579     ELSE
580 guez 43 PRINT *, 'phyetat0: Le champ <RUG> est present'
581 guez 50 PRINT *, ' J ignore donc les autres RUG**'
582 guez 49 call nf95_get_var(ncid, varid, frugs(:, 1))
583 guez 3 xmin = 1.0E+20
584     xmax = -1.0E+20
585     DO i = 1, klon
586 guez 49 xmin = MIN(frugs(i, 1), xmin)
587     xmax = MAX(frugs(i, 1), xmax)
588 guez 3 ENDDO
589 guez 49 PRINT *, 'rugosite <RUG>', xmin, xmax
590 guez 3 DO nsrf = 2, nbsrf
591     DO i = 1, klon
592 guez 49 frugs(i, nsrf) = frugs(i, 1)
593 guez 3 ENDDO
594     ENDDO
595     ENDIF
596    
597     ! Lecture de l'age de la neige:
598    
599 guez 49 ierr = NF90_INQ_VARID(ncid, "AGESNO", varid)
600     IF (ierr /= NF90_NOERR) THEN
601 guez 43 PRINT *, 'phyetat0: Le champ <AGESNO> est absent'
602 guez 50 PRINT *, ' Mais je vais essayer de lire AGESNO**'
603 guez 3 DO nsrf = 1, nbsrf
604 guez 50 IF (nsrf > 99) THEN
605 guez 43 PRINT *, "Trop de sous-mailles"
606 guez 3 stop 1
607     ENDIF
608 guez 49 WRITE(str2, '(i2.2)') nsrf
609     ierr = NF90_INQ_VARID(ncid, "AGESNO"//str2, varid)
610     IF (ierr /= NF90_NOERR) THEN
611 guez 43 PRINT *, "phyetat0: Le champ <AGESNO"//str2//"> est absent"
612 guez 3 agesno = 50.0
613     ENDIF
614 guez 50 call NF95_GET_VAR(ncid, varid, agesno(:, nsrf))
615 guez 3 xmin = 1.0E+20
616     xmax = -1.0E+20
617     DO i = 1, klon
618 guez 49 xmin = MIN(agesno(i, nsrf), xmin)
619     xmax = MAX(agesno(i, nsrf), xmax)
620 guez 3 ENDDO
621 guez 49 PRINT *, 'Age de la neige AGESNO**:', nsrf, xmin, xmax
622 guez 3 ENDDO
623     ELSE
624 guez 43 PRINT *, 'phyetat0: Le champ <AGESNO> est present'
625 guez 50 PRINT *, ' J ignore donc les autres AGESNO**'
626 guez 49 call nf95_get_var(ncid, varid, agesno(:, 1))
627 guez 3 xmin = 1.0E+20
628     xmax = -1.0E+20
629     DO i = 1, klon
630 guez 49 xmin = MIN(agesno(i, 1), xmin)
631     xmax = MAX(agesno(i, 1), xmax)
632 guez 3 ENDDO
633 guez 49 PRINT *, 'Age de la neige <AGESNO>', xmin, xmax
634 guez 3 DO nsrf = 2, nbsrf
635     DO i = 1, klon
636 guez 49 agesno(i, nsrf) = agesno(i, 1)
637 guez 3 ENDDO
638     ENDDO
639     ENDIF
640    
641 guez 50 call NF95_INQ_VARID(ncid, "ZMEA", varid)
642     call NF95_GET_VAR(ncid, varid, zmea)
643 guez 3 xmin = 1.0E+20
644     xmax = -1.0E+20
645     DO i = 1, klon
646 guez 49 xmin = MIN(zmea(i), xmin)
647     xmax = MAX(zmea(i), xmax)
648 guez 3 ENDDO
649 guez 49 PRINT *, 'OROGRAPHIE SOUS-MAILLE zmea:', xmin, xmax
650 guez 3
651 guez 50 call NF95_INQ_VARID(ncid, "ZSTD", varid)
652     call NF95_GET_VAR(ncid, varid, zstd)
653 guez 3 xmin = 1.0E+20
654     xmax = -1.0E+20
655     DO i = 1, klon
656 guez 49 xmin = MIN(zstd(i), xmin)
657     xmax = MAX(zstd(i), xmax)
658 guez 3 ENDDO
659 guez 49 PRINT *, 'OROGRAPHIE SOUS-MAILLE zstd:', xmin, xmax
660 guez 3
661 guez 50 call NF95_INQ_VARID(ncid, "ZSIG", varid)
662     call NF95_GET_VAR(ncid, varid, zsig)
663 guez 3 xmin = 1.0E+20
664     xmax = -1.0E+20
665     DO i = 1, klon
666 guez 49 xmin = MIN(zsig(i), xmin)
667     xmax = MAX(zsig(i), xmax)
668 guez 3 ENDDO
669 guez 49 PRINT *, 'OROGRAPHIE SOUS-MAILLE zsig:', xmin, xmax
670 guez 3
671 guez 50 call NF95_INQ_VARID(ncid, "ZGAM", varid)
672     call NF95_GET_VAR(ncid, varid, zgam)
673 guez 3 xmin = 1.0E+20
674     xmax = -1.0E+20
675     DO i = 1, klon
676 guez 49 xmin = MIN(zgam(i), xmin)
677     xmax = MAX(zgam(i), xmax)
678 guez 3 ENDDO
679 guez 49 PRINT *, 'OROGRAPHIE SOUS-MAILLE zgam:', xmin, xmax
680 guez 3
681 guez 50 call NF95_INQ_VARID(ncid, "ZTHE", varid)
682     call NF95_GET_VAR(ncid, varid, zthe)
683 guez 3 xmin = 1.0E+20
684     xmax = -1.0E+20
685     DO i = 1, klon
686 guez 49 xmin = MIN(zthe(i), xmin)
687     xmax = MAX(zthe(i), xmax)
688 guez 3 ENDDO
689 guez 49 PRINT *, 'OROGRAPHIE SOUS-MAILLE zthe:', xmin, xmax
690 guez 3
691 guez 50 call NF95_INQ_VARID(ncid, "ZPIC", varid)
692     call NF95_GET_VAR(ncid, varid, zpic)
693 guez 3 xmin = 1.0E+20
694     xmax = -1.0E+20
695     DO i = 1, klon
696 guez 49 xmin = MIN(zpic(i), xmin)
697     xmax = MAX(zpic(i), xmax)
698 guez 3 ENDDO
699 guez 49 PRINT *, 'OROGRAPHIE SOUS-MAILLE zpic:', xmin, xmax
700 guez 3
701 guez 50 call NF95_INQ_VARID(ncid, "ZVAL", varid)
702     call NF95_GET_VAR(ncid, varid, zval)
703 guez 3 xmin = 1.0E+20
704     xmax = -1.0E+20
705     DO i = 1, klon
706 guez 49 xmin = MIN(zval(i), xmin)
707     xmax = MAX(zval(i), xmax)
708 guez 3 ENDDO
709 guez 49 PRINT *, 'OROGRAPHIE SOUS-MAILLE zval:', xmin, xmax
710 guez 3
711     ancien_ok = .TRUE.
712    
713 guez 49 ierr = NF90_INQ_VARID(ncid, "TANCIEN", varid)
714     IF (ierr /= NF90_NOERR) THEN
715 guez 43 PRINT *, "phyetat0: Le champ <TANCIEN> est absent"
716     PRINT *, "Depart legerement fausse. Mais je continue"
717 guez 3 ancien_ok = .FALSE.
718     ELSE
719 guez 49 call nf95_get_var(ncid, varid, t_ancien)
720 guez 3 ENDIF
721    
722 guez 49 ierr = NF90_INQ_VARID(ncid, "QANCIEN", varid)
723     IF (ierr /= NF90_NOERR) THEN
724 guez 43 PRINT *, "phyetat0: Le champ <QANCIEN> est absent"
725     PRINT *, "Depart legerement fausse. Mais je continue"
726 guez 3 ancien_ok = .FALSE.
727     ELSE
728 guez 49 call nf95_get_var(ncid, varid, q_ancien)
729 guez 3 ENDIF
730    
731 guez 49 ierr = NF90_INQ_VARID(ncid, "CLWCON", varid)
732     IF (ierr /= NF90_NOERR) THEN
733 guez 43 PRINT *, "phyetat0: Le champ CLWCON est absent"
734     PRINT *, "Depart legerement fausse. Mais je continue"
735 guez 3 clwcon = 0.
736     ELSE
737 guez 49 call nf95_get_var(ncid, varid, clwcon)
738 guez 3 ENDIF
739     xmin = 1.0E+20
740     xmax = -1.0E+20
741     xmin = MINval(clwcon)
742     xmax = MAXval(clwcon)
743 guez 49 PRINT *, 'Eau liquide convective (ecart-type) clwcon:', xmin, xmax
744 guez 3
745 guez 49 ierr = NF90_INQ_VARID(ncid, "RNEBCON", varid)
746     IF (ierr /= NF90_NOERR) THEN
747 guez 43 PRINT *, "phyetat0: Le champ RNEBCON est absent"
748     PRINT *, "Depart legerement fausse. Mais je continue"
749 guez 3 rnebcon = 0.
750     ELSE
751 guez 49 call nf95_get_var(ncid, varid, rnebcon)
752 guez 3 ENDIF
753     xmin = 1.0E+20
754     xmax = -1.0E+20
755     xmin = MINval(rnebcon)
756     xmax = MAXval(rnebcon)
757 guez 49 PRINT *, 'Nebulosite convective (ecart-type) rnebcon:', xmin, xmax
758 guez 3
759     ! Lecture ratqs
760    
761 guez 49 ierr = NF90_INQ_VARID(ncid, "RATQS", varid)
762     IF (ierr /= NF90_NOERR) THEN
763 guez 43 PRINT *, "phyetat0: Le champ <RATQS> est absent"
764     PRINT *, "Depart legerement fausse. Mais je continue"
765 guez 3 ratqs = 0.
766     ELSE
767 guez 49 call nf95_get_var(ncid, varid, ratqs)
768 guez 3 ENDIF
769     xmin = 1.0E+20
770     xmax = -1.0E+20
771     xmin = MINval(ratqs)
772     xmax = MAXval(ratqs)
773 guez 49 PRINT *, '(ecart-type) ratqs:', xmin, xmax
774 guez 3
775     ! Lecture run_off_lic_0
776    
777 guez 49 ierr = NF90_INQ_VARID(ncid, "RUNOFFLIC0", varid)
778     IF (ierr /= NF90_NOERR) THEN
779 guez 43 PRINT *, "phyetat0: Le champ <RUNOFFLIC0> est absent"
780     PRINT *, "Depart legerement fausse. Mais je continue"
781 guez 3 run_off_lic_0 = 0.
782     ELSE
783 guez 49 call nf95_get_var(ncid, varid, run_off_lic_0)
784 guez 3 ENDIF
785     xmin = 1.0E+20
786     xmax = -1.0E+20
787     xmin = MINval(run_off_lic_0)
788     xmax = MAXval(run_off_lic_0)
789 guez 49 PRINT *, '(ecart-type) run_off_lic_0:', xmin, xmax
790 guez 3
791 guez 49 call NF95_CLOSE(ncid)
792 guez 3
793     END SUBROUTINE phyetat0
794    
795     end module phyetat0_m

  ViewVC Help
Powered by ViewVC 1.1.21