source: LMDZ4/trunk/libf/phylmd/phyetat0.F @ 757

Last change on this file since 757 was 689, checked in by lmdzadmin, 19 years ago

Commentaires variables slab
IM

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 40.7 KB
Line 
1!
2! $Header$
3!
4c
5c
6      SUBROUTINE phyetat0 (fichnom,dtime,co2_ppm_etat0,solaire_etat0,
7     .            rlat,rlon, pctsrf, tsol,tsoil,
8cIM "slab" ocean
9     .           ocean, tslab,seaice,
10     .           qsurf,qsol,snow,
11     .           albe, alblw, evap, rain_fall, snow_fall, solsw, sollw,
12     .           fder,radsol,frugs,agesno,clesphy0,
13     .           zmea,zstd,zsig,zgam,zthe,zpic,zval,rugsrel,tabcntr0,
14     .           t_ancien,q_ancien,ancien_ok, rnebcon, ratqs,clwcon,
15     .           run_off_lic_0)
16      IMPLICIT none
17c======================================================================
18c Auteur(s) Z.X. Li (LMD/CNRS) date: 19930818
19c Objet: Lecture de l'etat initial pour la physique
20c======================================================================
21#include "dimensions.h"
22#include "dimphy.h"
23#include "netcdf.inc"
24#include "indicesol.h"
25#include "dimsoil.h"
26#include "clesphys.h"
27#include "temps.h"
28c======================================================================
29      CHARACTER*(*) fichnom
30      REAL dtime
31      INTEGER radpas
32      REAL rlat(klon), rlon(klon)
33      REAL co2_ppm_etat0
34      REAL solaire_etat0
35      REAL tsol(klon,nbsrf)
36      REAL tsoil(klon,nsoilmx,nbsrf)
37cIM "slab" ocean
38      REAL tslab(klon), seaice(klon)
39      REAL qsurf(klon,nbsrf)
40      REAL qsol(klon)
41      REAL snow(klon,nbsrf)
42      REAL albe(klon,nbsrf)
43      REAL alblw(klon,nbsrf)
44      REAL evap(klon,nbsrf)
45      REAL radsol(klon)
46      REAL rain_fall(klon)
47      REAL snow_fall(klon)
48      REAL sollw(klon)
49      real solsw(klon)
50      real fder(klon)
51      REAL frugs(klon,nbsrf)
52      REAL agesno(klon,nbsrf)
53      REAL zmea(klon)
54      REAL zstd(klon)
55      REAL zsig(klon)
56      REAL zgam(klon)
57      REAL zthe(klon)
58      REAL zpic(klon)
59      REAL zval(klon)
60      REAL rugsrel(klon)
61      REAL pctsrf(klon, nbsrf)
62      REAL fractint(klon)
63      REAL run_off_lic_0(klon)
64
65      REAL t_ancien(klon,klev), q_ancien(klon,klev)
66      real rnebcon(klon,klev),clwcon(klon,klev),ratqs(klon,klev)
67      LOGICAL ancien_ok
68
69      CHARACTER*6 ocean
70
71      INTEGER        longcles
72      PARAMETER    ( longcles = 20 )
73      REAL clesphy0( longcles )
74c
75      REAL xmin, xmax
76c
77      INTEGER nid, nvarid
78      INTEGER ierr, i, nsrf, isoil
79      INTEGER length
80      PARAMETER (length=100)
81      REAL tab_cntrl(length), tabcntr0(length)
82      CHARACTER*7 str7
83      CHARACTER*2 str2
84c
85c Ouvrir le fichier contenant l'etat initial:
86c
87      print*,'fichnom',fichnom
88      ierr = NF_OPEN (fichnom, NF_NOWRITE,nid)
89      IF (ierr.NE.NF_NOERR) THEN
90        write(6,*)' Pb d''ouverture du fichier '//fichnom
91        write(6,*)' ierr = ', ierr
92        CALL ABORT
93      ENDIF
94c
95c Lecture des parametres de controle:
96c
97      ierr = NF_INQ_VARID (nid, "controle", nvarid)
98      IF (ierr.NE.NF_NOERR) THEN
99         PRINT*, 'phyetat0: Le champ <controle> est absent'
100         CALL abort
101      ENDIF
102#ifdef NC_DOUBLE
103      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, tab_cntrl)
104#else
105      ierr = NF_GET_VAR_REAL(nid, nvarid, tab_cntrl)
106#endif
107      IF (ierr.NE.NF_NOERR) THEN
108         PRINT*, 'phyetat0: Lecture echouee pour <controle>'
109         CALL abort
110      ELSE
111c
112         DO i = 1, length
113           tabcntr0( i ) = tab_cntrl( i )
114         ENDDO
115c
116         cycle_diurne   = .FALSE.
117         soil_model     = .FALSE.
118         new_oliq       = .FALSE.
119         ok_orodr       = .FALSE.
120         ok_orolf       = .FALSE.
121         ok_limitvrai   = .FALSE.
122
123
124         IF( clesphy0(1).NE.tab_cntrl( 5 ) )  THEN
125             tab_cntrl( 5 ) = clesphy0(1)
126         ENDIF
127
128         IF( clesphy0(2).NE.tab_cntrl( 6 ) )  THEN
129             tab_cntrl( 6 ) = clesphy0(2)
130         ENDIF
131
132         IF( clesphy0(3).NE.tab_cntrl( 7 ) )  THEN
133             tab_cntrl( 7 ) = clesphy0(3)
134         ENDIF
135
136         IF( clesphy0(4).NE.tab_cntrl( 8 ) )  THEN
137             tab_cntrl( 8 ) = clesphy0(4)
138         ENDIF
139
140         IF( clesphy0(5).NE.tab_cntrl( 9 ) )  THEN
141             tab_cntrl( 9 ) = clesphy0( 5 )
142         ENDIF
143
144         IF( clesphy0(6).NE.tab_cntrl( 10 ) )  THEN
145             tab_cntrl( 10 ) = clesphy0( 6 )
146         ENDIF
147
148         IF( clesphy0(7).NE.tab_cntrl( 11 ) )  THEN
149             tab_cntrl( 11 ) = clesphy0( 7 )
150         ENDIF
151
152         IF( clesphy0(8).NE.tab_cntrl( 12 ) )  THEN
153             tab_cntrl( 12 ) = clesphy0( 8 )
154         ENDIF
155
156
157         dtime        = tab_cntrl(1)
158         radpas       = tab_cntrl(2)
159         co2_ppm_etat0      = tab_cntrl(3)
160         solaire_etat0      = tab_cntrl(4)
161         iflag_con    = tab_cntrl(5)
162         nbapp_rad    = tab_cntrl(6)
163
164
165         cycle_diurne    = .FALSE.
166         soil_model      = .FALSE.
167         new_oliq        = .FALSE.
168         ok_orodr        = .FALSE.
169         ok_orolf        = .FALSE.
170         ok_limitvrai    = .FALSE.
171
172         IF( tab_cntrl( 7) .EQ. 1. )    cycle_diurne  = .TRUE.
173         IF( tab_cntrl( 8) .EQ. 1. )       soil_model = .TRUE.
174         IF( tab_cntrl( 9) .EQ. 1. )         new_oliq = .TRUE.
175         IF( tab_cntrl(10) .EQ. 1. )         ok_orodr = .TRUE.
176         IF( tab_cntrl(11) .EQ. 1. )         ok_orolf = .TRUE.
177         IF( tab_cntrl(12) .EQ. 1. )     ok_limitvrai = .TRUE.
178
179      ENDIF
180
181      itau_phy = tab_cntrl(15)
182
183c
184c Lecture des latitudes (coordonnees):
185c
186      ierr = NF_INQ_VARID (nid, "latitude", nvarid)
187      IF (ierr.NE.NF_NOERR) THEN
188         PRINT*, 'phyetat0: Le champ <latitude> est absent'
189         CALL abort
190      ENDIF
191#ifdef NC_DOUBLE
192      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, rlat)
193#else
194      ierr = NF_GET_VAR_REAL(nid, nvarid, rlat)
195#endif
196      IF (ierr.NE.NF_NOERR) THEN
197         PRINT*, 'phyetat0: Lecture echouee pour <latitude>'
198         CALL abort
199      ENDIF
200c
201c Lecture des longitudes (coordonnees):
202c
203      ierr = NF_INQ_VARID (nid, "longitude", nvarid)
204      IF (ierr.NE.NF_NOERR) THEN
205         PRINT*, 'phyetat0: Le champ <longitude> est absent'
206         CALL abort
207      ENDIF
208#ifdef NC_DOUBLE
209      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, rlon)
210#else
211      ierr = NF_GET_VAR_REAL(nid, nvarid, rlon)
212#endif
213      IF (ierr.NE.NF_NOERR) THEN
214         PRINT*, 'phyetat0: Lecture echouee pour <latitude>'
215         CALL abort
216      ENDIF
217C
218C
219C Lecture du masque terre mer
220C
221      ierr = NF_INQ_VARID (nid, "masque", nvarid)
222      IF (ierr .EQ.  NF_NOERR) THEN
223#ifdef NC_DOUBLE
224          ierr = NF_GET_VAR_DOUBLE(nid, nvarid, zmasq)
225#else
226          ierr = NF_GET_VAR_REAL(nid, nvarid, zmasq)
227#endif
228          IF (ierr.NE.NF_NOERR) THEN
229              PRINT*, 'phyetat0: Lecture echouee pour <masque>'
230              CALL abort
231          ENDIF
232      else
233          PRINT*, 'phyetat0: Le champ <masque> est absent'
234          PRINT*, 'fichier startphy non compatible avec phyetat0'
235C      CALL abort
236      ENDIF
237C Lecture des fractions pour chaque sous-surface
238C
239C initialisation des sous-surfaces
240C
241      pctsrf = 0.
242C
243C fraction de terre
244C
245      ierr = NF_INQ_VARID (nid, "FTER", nvarid)
246      IF (ierr .EQ.  NF_NOERR) THEN
247#ifdef NC_DOUBLE
248          ierr = NF_GET_VAR_DOUBLE(nid, nvarid, pctsrf(1 : klon,is_ter))
249#else
250          ierr = NF_GET_VAR_REAL(nid, nvarid, pctsrf(1 : klon,is_ter))
251#endif
252          IF (ierr.NE.NF_NOERR) THEN
253              PRINT*, 'phyetat0: Lecture echouee pour <FTER>'
254              CALL abort
255          ENDIF
256      else
257          PRINT*, 'phyetat0: Le champ <FTER> est absent'
258c$$$         CALL abort
259      ENDIF
260C
261C fraction de glace de terre
262C
263      ierr = NF_INQ_VARID (nid, "FLIC", nvarid)
264      IF (ierr .EQ.  NF_NOERR) THEN
265#ifdef NC_DOUBLE
266          ierr = NF_GET_VAR_DOUBLE(nid, nvarid, pctsrf(1 : klon,is_lic))
267#else
268          ierr = NF_GET_VAR_REAL(nid, nvarid, pctsrf(1 : klon,is_lic))
269#endif
270          IF (ierr.NE.NF_NOERR) THEN
271              PRINT*, 'phyetat0: Lecture echouee pour <FLIC>'
272              CALL abort
273          ENDIF
274      else
275          PRINT*, 'phyetat0: Le champ <FLIC> est absent'
276c$$$         CALL abort
277      ENDIF
278C
279C fraction d'ocean
280C
281      ierr = NF_INQ_VARID (nid, "FOCE", nvarid)
282      IF (ierr .EQ.  NF_NOERR) THEN
283#ifdef NC_DOUBLE
284          ierr = NF_GET_VAR_DOUBLE(nid, nvarid, pctsrf(1 : klon,is_oce))
285#else
286          ierr = NF_GET_VAR_REAL(nid, nvarid, pctsrf(1 : klon,is_oce))
287#endif
288          IF (ierr.NE.NF_NOERR) THEN
289              PRINT*, 'phyetat0: Lecture echouee pour <FOCE>'
290              CALL abort
291          ENDIF
292      else
293          PRINT*, 'phyetat0: Le champ <FOCE> est absent'
294c$$$         CALL abort
295      ENDIF
296C
297C fraction glace de mer
298C
299      ierr = NF_INQ_VARID (nid, "FSIC", nvarid)
300      IF (ierr .EQ.  NF_NOERR) THEN
301#ifdef NC_DOUBLE
302          ierr = NF_GET_VAR_DOUBLE(nid, nvarid, pctsrf(1 : klon,is_sic))
303#else
304          ierr = NF_GET_VAR_REAL(nid, nvarid, pctsrf(1 : klon, is_sic))
305#endif
306          IF (ierr.NE.NF_NOERR) THEN
307              PRINT*, 'phyetat0: Lecture echouee pour <FSIC>'
308              CALL abort
309          ENDIF
310      else
311          PRINT*, 'phyetat0: Le champ <FSIC> est absent'
312c$$$         CALL abort
313      ENDIF
314C
315C  Verification de l'adequation entre le masque et les sous-surfaces
316C
317      fractint( 1 : klon) = pctsrf(1 : klon, is_ter)
318     $    + pctsrf(1 : klon, is_lic)
319      DO i = 1 , klon
320        IF ( abs(fractint(i) - zmasq(i) ) .GT. EPSFRA ) THEN
321            WRITE(*,*) 'phyetat0: attention fraction terre pas ',
322     $          'coherente ', i, zmasq(i), pctsrf(i, is_ter)
323     $          ,pctsrf(i, is_lic)
324        ENDIF
325      END DO
326      fractint (1 : klon) =  pctsrf(1 : klon, is_oce)
327     $    + pctsrf(1 : klon, is_sic)
328      DO i = 1 , klon
329        IF ( abs( fractint(i) - (1. - zmasq(i))) .GT. EPSFRA ) THEN
330            WRITE(*,*) 'phyetat0 attention fraction ocean pas ',
331     $          'coherente ', i, zmasq(i) , pctsrf(i, is_oce)
332     $          ,pctsrf(i, is_sic)
333        ENDIF
334      END DO
335C
336c Lecture des temperatures du sol:
337c
338      ierr = NF_INQ_VARID (nid, "TS", nvarid)
339      IF (ierr.NE.NF_NOERR) THEN
340         PRINT*, 'phyetat0: Le champ <TS> est absent'
341         PRINT*, '          Mais je vais essayer de lire TS**'
342         DO nsrf = 1, nbsrf
343           IF (nsrf.GT.99) THEN
344             PRINT*, "Trop de sous-mailles"
345             CALL abort
346           ENDIF
347           WRITE(str2,'(i2.2)') nsrf
348           ierr = NF_INQ_VARID (nid, "TS"//str2, nvarid)
349           IF (ierr.NE.NF_NOERR) THEN
350              PRINT*, "phyetat0: Le champ <TS"//str2//"> est absent"
351              CALL abort
352           ENDIF
353#ifdef NC_DOUBLE
354           ierr = NF_GET_VAR_DOUBLE(nid, nvarid, tsol(1,nsrf))
355#else
356           ierr = NF_GET_VAR_REAL(nid, nvarid, tsol(1,nsrf))
357#endif
358           IF (ierr.NE.NF_NOERR) THEN
359             PRINT*, "phyetat0: Lecture echouee pour <TS"//str2//">"
360             CALL abort
361           ENDIF
362           xmin = 1.0E+20
363           xmax = -1.0E+20
364           DO i = 1, klon
365              xmin = MIN(tsol(i,nsrf),xmin)
366              xmax = MAX(tsol(i,nsrf),xmax)
367           ENDDO
368           PRINT*,'Temperature du sol TS**:', nsrf, xmin, xmax
369         ENDDO
370      ELSE
371         PRINT*, 'phyetat0: Le champ <TS> est present'
372         PRINT*, '          J ignore donc les autres temperatures TS**'
373#ifdef NC_DOUBLE
374         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, tsol(1,1))
375#else
376         ierr = NF_GET_VAR_REAL(nid, nvarid, tsol(1,1))
377#endif
378         IF (ierr.NE.NF_NOERR) THEN
379            PRINT*, "phyetat0: Lecture echouee pour <TS>"
380            CALL abort
381         ENDIF
382         xmin = 1.0E+20
383         xmax = -1.0E+20
384         DO i = 1, klon
385            xmin = MIN(tsol(i,1),xmin)
386            xmax = MAX(tsol(i,1),xmax)
387         ENDDO
388         PRINT*,'Temperature du sol <TS>', xmin, xmax
389         DO nsrf = 2, nbsrf
390         DO i = 1, klon
391            tsol(i,nsrf) = tsol(i,1)
392         ENDDO
393         ENDDO
394      ENDIF
395c
396c Lecture des temperatures du sol profond:
397c
398      DO nsrf = 1, nbsrf
399      DO isoil=1, nsoilmx
400      IF (isoil.GT.99 .AND. nsrf.GT.99) THEN
401         PRINT*, "Trop de couches ou sous-mailles"
402         CALL abort
403      ENDIF
404      WRITE(str7,'(i2.2,"srf",i2.2)') isoil, nsrf
405      ierr = NF_INQ_VARID (nid, 'Tsoil'//str7, nvarid)
406      IF (ierr.NE.NF_NOERR) THEN
407         PRINT*, "phyetat0: Le champ <Tsoil"//str7//"> est absent"
408         PRINT*, "          Il prend donc la valeur de surface"
409         DO i=1, klon
410             tsoil(i,isoil,nsrf)=tsol(i,nsrf)
411         ENDDO
412      ELSE
413#ifdef NC_DOUBLE
414         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, tsoil(1,isoil,nsrf))
415#else
416         ierr = NF_GET_VAR_REAL(nid, nvarid, tsoil(1,isoil,nsrf))
417#endif
418         IF (ierr.NE.NF_NOERR) THEN
419            PRINT*, "Lecture echouee pour <Tsoil"//str7//">"
420            CALL abort
421         ENDIF
422      ENDIF
423      ENDDO
424      ENDDO
425c
426cIM "slab" ocean
427c
428c Lecture de tslab (pour slab ocean seulement):     
429c
430      IF (ocean .eq. 'slab  ') then
431        ierr = NF_INQ_VARID (nid, "TSLAB", nvarid)
432        IF (ierr.NE.NF_NOERR) THEN
433          PRINT*, "phyetat0: Le champ <TSLAB> est absent"
434          CALL abort
435        ENDIF
436#ifdef NC_DOUBLE
437        ierr = NF_GET_VAR_DOUBLE(nid, nvarid, tslab)
438#else
439        ierr = NF_GET_VAR_REAL(nid, nvarid, tslab)
440#endif
441        IF (ierr.NE.NF_NOERR) THEN
442          PRINT*, "phyetat0: Lecture echouee pour <TSLAB>"
443          CALL abort
444        ENDIF
445        xmin = 1.0E+20
446        xmax = -1.0E+20
447        DO i = 1, klon
448          xmin = MIN(tslab(i),xmin)
449          xmax = MAX(tslab(i),xmax)
450        ENDDO
451        PRINT*,'Min, Max tslab (utilise si OCEAN=slab )', xmin, xmax
452c
453c Lecture de seaice (pour slab ocean seulement):
454c
455        ierr = NF_INQ_VARID (nid, "SEAICE", nvarid)
456        IF (ierr.NE.NF_NOERR) THEN
457          PRINT*, "phyetat0: Le champ <SEAICE> est absent"
458          CALL abort
459        ENDIF
460#ifdef NC_DOUBLE
461        ierr = NF_GET_VAR_DOUBLE(nid, nvarid, seaice)
462#else
463        ierr = NF_GET_VAR_REAL(nid, nvarid, seaice)
464#endif
465        IF (ierr.NE.NF_NOERR) THEN
466          PRINT*, "phyetat0: Lecture echouee pour <SEAICE>"
467          CALL abort
468        ENDIF
469        xmin = 1.0E+20
470        xmax = -1.0E+20
471        DO i = 1, klon
472          xmin = MIN(seaice(i),xmin)
473          xmax = MAX(seaice(i),xmax)
474        ENDDO
475        PRINT*,'Masse de la glace de mer (utilise si OCEAN=slab)',
476     $  xmin, xmax
477      ELSE
478        tslab = 0.
479        seaice = 0.
480      ENDIF
481c
482c Lecture de l'humidite de l'air juste au dessus du sol:
483c
484      ierr = NF_INQ_VARID (nid, "QS", nvarid)
485      IF (ierr.NE.NF_NOERR) THEN
486         PRINT*, 'phyetat0: Le champ <QS> est absent'
487         PRINT*, '          Mais je vais essayer de lire QS**'
488         DO nsrf = 1, nbsrf
489           IF (nsrf.GT.99) THEN
490             PRINT*, "Trop de sous-mailles"
491             CALL abort
492           ENDIF
493           WRITE(str2,'(i2.2)') nsrf
494           ierr = NF_INQ_VARID (nid, "QS"//str2, nvarid)
495           IF (ierr.NE.NF_NOERR) THEN
496              PRINT*, "phyetat0: Le champ <QS"//str2//"> est absent"
497              CALL abort
498           ENDIF
499#ifdef NC_DOUBLE
500           ierr = NF_GET_VAR_DOUBLE(nid, nvarid, qsurf(1,nsrf))
501#else
502           ierr = NF_GET_VAR_REAL(nid, nvarid, qsurf(1,nsrf))
503#endif
504           IF (ierr.NE.NF_NOERR) THEN
505             PRINT*, "phyetat0: Lecture echouee pour <QS"//str2//">"
506             CALL abort
507           ENDIF
508           xmin = 1.0E+20
509           xmax = -1.0E+20
510           DO i = 1, klon
511              xmin = MIN(qsurf(i,nsrf),xmin)
512              xmax = MAX(qsurf(i,nsrf),xmax)
513           ENDDO
514           PRINT*,'Humidite pres du sol QS**:', nsrf, xmin, xmax
515         ENDDO
516      ELSE
517         PRINT*, 'phyetat0: Le champ <QS> est present'
518         PRINT*, '          J ignore donc les autres humidites QS**'
519#ifdef NC_DOUBLE
520         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, qsurf(1,1))
521#else
522         ierr = NF_GET_VAR_REAL(nid, nvarid, qsurf(1,1))
523#endif
524         IF (ierr.NE.NF_NOERR) THEN
525            PRINT*, "phyetat0: Lecture echouee pour <QS>"
526            CALL abort
527         ENDIF
528         xmin = 1.0E+20
529         xmax = -1.0E+20
530         DO i = 1, klon
531            xmin = MIN(qsurf(i,1),xmin)
532            xmax = MAX(qsurf(i,1),xmax)
533         ENDDO
534         PRINT*,'Humidite pres du sol <QS>', xmin, xmax
535         DO nsrf = 2, nbsrf
536         DO i = 1, klon
537            qsurf(i,nsrf) = qsurf(i,1)
538         ENDDO
539         ENDDO
540      ENDIF
541C
542C Eau dans le sol (pour le modele de sol "bucket")
543C
544      ierr = NF_INQ_VARID (nid, "QSOL", nvarid)
545      IF (ierr .EQ.  NF_NOERR) THEN
546#ifdef NC_DOUBLE
547          ierr = NF_GET_VAR_DOUBLE(nid, nvarid, qsol)
548#else
549          ierr = NF_GET_VAR_REAL(nid, nvarid, qsol)
550#endif
551          IF (ierr.NE.NF_NOERR) THEN
552              PRINT*, 'phyetat0: Lecture echouee pour <QSOL>'
553              CALL abort
554          ENDIF
555      else
556          PRINT*, 'phyetat0: Le champ <QSOL> est absent'
557          PRINT*, '          Valeur par defaut nulle'
558          qsol(:)=0.
559c$$$         CALL abort
560      ENDIF
561      xmin = 1.0E+20
562      xmax = -1.0E+20
563      DO i = 1, klon
564        xmin = MIN(qsol(i),xmin)
565        xmax = MAX(qsol(i),xmax)
566      ENDDO
567      PRINT*,'Eau dans le sol (mm) <QSOL>', xmin, xmax
568c
569c Lecture de neige au sol:
570c
571      ierr = NF_INQ_VARID (nid, "SNOW", nvarid)
572      IF (ierr.NE.NF_NOERR) THEN
573         PRINT*, 'phyetat0: Le champ <SNOW> est absent'
574         PRINT*, '          Mais je vais essayer de lire SNOW**'
575         DO nsrf = 1, nbsrf
576           IF (nsrf.GT.99) THEN
577             PRINT*, "Trop de sous-mailles"
578             CALL abort
579           ENDIF
580           WRITE(str2,'(i2.2)') nsrf
581           ierr = NF_INQ_VARID (nid, "SNOW"//str2, nvarid)
582           IF (ierr.NE.NF_NOERR) THEN
583              PRINT*, "phyetat0: Le champ <SNOW"//str2//"> est absent"
584              CALL abort
585           ENDIF
586#ifdef NC_DOUBLE
587           ierr = NF_GET_VAR_DOUBLE(nid, nvarid, snow(1,nsrf))
588#else
589           ierr = NF_GET_VAR_REAL(nid, nvarid, snow(1,nsrf))
590#endif
591           IF (ierr.NE.NF_NOERR) THEN
592             PRINT*, "phyetat0: Lecture echouee pour <SNOW"//str2//">"
593             CALL abort
594           ENDIF
595           xmin = 1.0E+20
596           xmax = -1.0E+20
597           DO i = 1, klon
598              xmin = MIN(snow(i,nsrf),xmin)
599              xmax = MAX(snow(i,nsrf),xmax)
600           ENDDO
601           PRINT*,'Neige du sol SNOW**:', nsrf, xmin, xmax
602         ENDDO
603      ELSE
604         PRINT*, 'phyetat0: Le champ <SNOW> est present'
605         PRINT*, '          J ignore donc les autres neiges SNOW**'
606#ifdef NC_DOUBLE
607         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, snow(1,1))
608#else
609         ierr = NF_GET_VAR_REAL(nid, nvarid, snow(1,1))
610#endif
611         IF (ierr.NE.NF_NOERR) THEN
612            PRINT*, "phyetat0: Lecture echouee pour <SNOW>"
613            CALL abort
614         ENDIF
615         xmin = 1.0E+20
616         xmax = -1.0E+20
617         DO i = 1, klon
618            xmin = MIN(snow(i,1),xmin)
619            xmax = MAX(snow(i,1),xmax)
620         ENDDO
621         PRINT*,'Neige du sol <SNOW>', xmin, xmax
622         DO nsrf = 2, nbsrf
623         DO i = 1, klon
624            snow(i,nsrf) = snow(i,1)
625         ENDDO
626         ENDDO
627      ENDIF
628c
629c Lecture de albedo au sol:
630c
631      ierr = NF_INQ_VARID (nid, "ALBE", nvarid)
632      IF (ierr.NE.NF_NOERR) THEN
633         PRINT*, 'phyetat0: Le champ <ALBE> est absent'
634         PRINT*, '          Mais je vais essayer de lire ALBE**'
635         DO nsrf = 1, nbsrf
636           IF (nsrf.GT.99) THEN
637             PRINT*, "Trop de sous-mailles"
638             CALL abort
639           ENDIF
640           WRITE(str2,'(i2.2)') nsrf
641           ierr = NF_INQ_VARID (nid, "ALBE"//str2, nvarid)
642           IF (ierr.NE.NF_NOERR) THEN
643              PRINT*, "phyetat0: Le champ <ALBE"//str2//"> est absent"
644              CALL abort
645           ENDIF
646#ifdef NC_DOUBLE
647           ierr = NF_GET_VAR_DOUBLE(nid, nvarid, albe(1,nsrf))
648#else
649           ierr = NF_GET_VAR_REAL(nid, nvarid, albe(1,nsrf))
650#endif
651           IF (ierr.NE.NF_NOERR) THEN
652             PRINT*, "phyetat0: Lecture echouee pour <ALBE"//str2//">"
653             CALL abort
654           ENDIF
655           xmin = 1.0E+20
656           xmax = -1.0E+20
657           DO i = 1, klon
658              xmin = MIN(albe(i,nsrf),xmin)
659              xmax = MAX(albe(i,nsrf),xmax)
660           ENDDO
661           PRINT*,'Albedo du sol ALBE**:', nsrf, xmin, xmax
662         ENDDO
663      ELSE
664         PRINT*, 'phyetat0: Le champ <ALBE> est present'
665         PRINT*, '          J ignore donc les autres ALBE**'
666#ifdef NC_DOUBLE
667         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, albe(1,1))
668#else
669         ierr = NF_GET_VAR_REAL(nid, nvarid, albe(1,1))
670#endif
671         IF (ierr.NE.NF_NOERR) THEN
672            PRINT*, "phyetat0: Lecture echouee pour <ALBE>"
673            CALL abort
674         ENDIF
675         xmin = 1.0E+20
676         xmax = -1.0E+20
677         DO i = 1, klon
678            xmin = MIN(albe(i,1),xmin)
679            xmax = MAX(albe(i,1),xmax)
680         ENDDO
681         PRINT*,'Neige du sol <ALBE>', xmin, xmax
682         DO nsrf = 2, nbsrf
683         DO i = 1, klon
684            albe(i,nsrf) = albe(i,1)
685         ENDDO
686         ENDDO
687      ENDIF
688
689c
690c Lecture de albedo au sol LW:
691c
692      ierr = NF_INQ_VARID (nid, "ALBLW", nvarid)
693      IF (ierr.NE.NF_NOERR) THEN
694         PRINT*, 'phyetat0: Le champ <ALBLW> est absent'
695c        PRINT*, '          Mais je vais essayer de lire ALBLW**'
696         PRINT*, '          Mais je vais prendre ALBE**'
697         DO nsrf = 1, nbsrf
698           DO i = 1, klon
699             alblw(i,nsrf) = albe(i,nsrf)
700           ENDDO
701         ENDDO
702      ELSE
703         PRINT*, 'phyetat0: Le champ <ALBLW> est present'
704         PRINT*, '          J ignore donc les autres ALBLW**'
705#ifdef NC_DOUBLE
706         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, alblw(1,1))
707#else
708         ierr = NF_GET_VAR_REAL(nid, nvarid, alblw(1,1))
709#endif
710         IF (ierr.NE.NF_NOERR) THEN
711            PRINT*, "phyetat0: Lecture echouee pour <ALBLW>"
712            CALL abort
713         ENDIF
714         xmin = 1.0E+20
715         xmax = -1.0E+20
716         DO i = 1, klon
717            xmin = MIN(alblw(i,1),xmin)
718            xmax = MAX(alblw(i,1),xmax)
719         ENDDO
720         PRINT*,'Neige du sol <ALBLW>', xmin, xmax
721         DO nsrf = 2, nbsrf
722         DO i = 1, klon
723            alblw(i,nsrf) = alblw(i,1)
724         ENDDO
725         ENDDO
726      ENDIF
727c
728c Lecture de evaporation: 
729c
730      ierr = NF_INQ_VARID (nid, "EVAP", nvarid)
731      IF (ierr.NE.NF_NOERR) THEN
732         PRINT*, 'phyetat0: Le champ <EVAP> est absent'
733         PRINT*, '          Mais je vais essayer de lire EVAP**'
734         DO nsrf = 1, nbsrf
735           IF (nsrf.GT.99) THEN
736             PRINT*, "Trop de sous-mailles"
737             CALL abort
738           ENDIF
739           WRITE(str2,'(i2.2)') nsrf
740           ierr = NF_INQ_VARID (nid, "EVAP"//str2, nvarid)
741           IF (ierr.NE.NF_NOERR) THEN
742              PRINT*, "phyetat0: Le champ <EVAP"//str2//"> est absent"
743              CALL abort
744           ENDIF
745#ifdef NC_DOUBLE
746           ierr = NF_GET_VAR_DOUBLE(nid, nvarid, evap(1,nsrf))
747#else
748           ierr = NF_GET_VAR_REAL(nid, nvarid, evap(1,nsrf))
749#endif
750           IF (ierr.NE.NF_NOERR) THEN
751             PRINT*, "phyetat0: Lecture echouee pour <EVAP"//str2//">"
752             CALL abort
753           ENDIF
754           xmin = 1.0E+20
755           xmax = -1.0E+20
756           DO i = 1, klon
757              xmin = MIN(evap(i,nsrf),xmin)
758              xmax = MAX(evap(i,nsrf),xmax)
759           ENDDO
760           PRINT*,'evap du sol EVAP**:', nsrf, xmin, xmax
761         ENDDO
762      ELSE
763         PRINT*, 'phyetat0: Le champ <EVAP> est present'
764         PRINT*, '          J ignore donc les autres EVAP**'
765#ifdef NC_DOUBLE
766         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, evap(1,1))
767#else
768         ierr = NF_GET_VAR_REAL(nid, nvarid, evap(1,1))
769#endif
770         IF (ierr.NE.NF_NOERR) THEN
771            PRINT*, "phyetat0: Lecture echouee pour <EVAP>"
772            CALL abort
773         ENDIF
774         xmin = 1.0E+20
775         xmax = -1.0E+20
776         DO i = 1, klon
777            xmin = MIN(evap(i,1),xmin)
778            xmax = MAX(evap(i,1),xmax)
779         ENDDO
780         PRINT*,'Evap du sol <EVAP>', xmin, xmax
781         DO nsrf = 2, nbsrf
782         DO i = 1, klon
783            evap(i,nsrf) = evap(i,1)
784         ENDDO
785         ENDDO
786      ENDIF
787c
788c Lecture precipitation liquide:
789c
790      ierr = NF_INQ_VARID (nid, "rain_f", nvarid)
791      IF (ierr.NE.NF_NOERR) THEN
792         PRINT*, 'phyetat0: Le champ <rain_f> est absent'
793         CALL abort
794      ENDIF
795#ifdef NC_DOUBLE
796      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, rain_fall)
797#else
798      ierr = NF_GET_VAR_REAL(nid, nvarid, rain_fall)
799#endif
800      IF (ierr.NE.NF_NOERR) THEN
801         PRINT*, 'phyetat0: Lecture echouee pour <rain_f>'
802         CALL abort
803      ENDIF
804      xmin = 1.0E+20
805      xmax = -1.0E+20
806      DO i = 1, klon
807         xmin = MIN(rain_fall(i),xmin)
808         xmax = MAX(rain_fall(i),xmax)
809      ENDDO
810      PRINT*,'Precipitation liquide rain_f:', xmin, xmax
811c
812c Lecture precipitation solide:
813c
814      ierr = NF_INQ_VARID (nid, "snow_f", nvarid)
815      IF (ierr.NE.NF_NOERR) THEN
816         PRINT*, 'phyetat0: Le champ <snow_f> est absent'
817         CALL abort
818      ENDIF
819#ifdef NC_DOUBLE
820      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, snow_fall)
821#else
822      ierr = NF_GET_VAR_REAL(nid, nvarid, snow_fall)
823#endif
824      IF (ierr.NE.NF_NOERR) THEN
825         PRINT*, 'phyetat0: Lecture echouee pour <snow_f>'
826         CALL abort
827      ENDIF
828      xmin = 1.0E+20
829      xmax = -1.0E+20
830      DO i = 1, klon
831         xmin = MIN(snow_fall(i),xmin)
832         xmax = MAX(snow_fall(i),xmax)
833      ENDDO
834      PRINT*,'Precipitation solide snow_f:', xmin, xmax
835c
836c Lecture rayonnement solaire au sol:
837c
838      ierr = NF_INQ_VARID (nid, "solsw", nvarid)
839      IF (ierr.NE.NF_NOERR) THEN
840         PRINT*, 'phyetat0: Le champ <solsw> est absent'
841         PRINT*, 'mis a zero'
842         solsw = 0.
843      ELSE
844#ifdef NC_DOUBLE
845        ierr = NF_GET_VAR_DOUBLE(nid, nvarid, solsw)
846#else
847        ierr = NF_GET_VAR_REAL(nid, nvarid, solsw)
848#endif
849        IF (ierr.NE.NF_NOERR) THEN
850          PRINT*, 'phyetat0: Lecture echouee pour <solsw>'
851          CALL abort
852        ENDIF
853      ENDIF
854      xmin = 1.0E+20
855      xmax = -1.0E+20
856      DO i = 1, klon
857         xmin = MIN(solsw(i),xmin)
858         xmax = MAX(solsw(i),xmax)
859      ENDDO
860      PRINT*,'Rayonnement solaire au sol solsw:', xmin, xmax
861c
862c Lecture rayonnement IF au sol:
863c
864      ierr = NF_INQ_VARID (nid, "sollw", nvarid)
865      IF (ierr.NE.NF_NOERR) THEN
866         PRINT*, 'phyetat0: Le champ <sollw> est absent'
867         PRINT*, 'mis a zero'
868         sollw = 0.
869      ELSE
870#ifdef NC_DOUBLE
871        ierr = NF_GET_VAR_DOUBLE(nid, nvarid, sollw)
872#else
873        ierr = NF_GET_VAR_REAL(nid, nvarid, sollw)
874#endif
875        IF (ierr.NE.NF_NOERR) THEN
876          PRINT*, 'phyetat0: Lecture echouee pour <sollw>'
877          CALL abort
878        ENDIF
879      ENDIF
880      xmin = 1.0E+20
881      xmax = -1.0E+20
882      DO i = 1, klon
883         xmin = MIN(sollw(i),xmin)
884         xmax = MAX(sollw(i),xmax)
885      ENDDO
886      PRINT*,'Rayonnement IF au sol sollw:', xmin, xmax
887
888c
889c Lecture derive des flux:
890c
891      ierr = NF_INQ_VARID (nid, "fder", nvarid)
892      IF (ierr.NE.NF_NOERR) THEN
893         PRINT*, 'phyetat0: Le champ <fder> est absent'
894         PRINT*, 'mis a zero'
895         fder = 0.
896      ELSE
897#ifdef NC_DOUBLE
898        ierr = NF_GET_VAR_DOUBLE(nid, nvarid, fder)
899#else
900        ierr = NF_GET_VAR_REAL(nid, nvarid, fder)
901#endif
902        IF (ierr.NE.NF_NOERR) THEN
903          PRINT*, 'phyetat0: Lecture echouee pour <fder>'
904          CALL abort
905        ENDIF
906      ENDIF
907      xmin = 1.0E+20
908      xmax = -1.0E+20
909      DO i = 1, klon
910         xmin = MIN(fder(i),xmin)
911         xmax = MAX(fder(i),xmax)
912      ENDDO
913      PRINT*,'Derive des flux fder:', xmin, xmax
914
915c
916c Lecture du rayonnement net au sol:
917c
918      ierr = NF_INQ_VARID (nid, "RADS", nvarid)
919      IF (ierr.NE.NF_NOERR) THEN
920         PRINT*, 'phyetat0: Le champ <RADS> est absent'
921         CALL abort
922      ENDIF
923#ifdef NC_DOUBLE
924      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, radsol)
925#else
926      ierr = NF_GET_VAR_REAL(nid, nvarid, radsol)
927#endif
928      IF (ierr.NE.NF_NOERR) THEN
929         PRINT*, 'phyetat0: Lecture echouee pour <RADS>'
930         CALL abort
931      ENDIF
932      xmin = 1.0E+20
933      xmax = -1.0E+20
934      DO i = 1, klon
935         xmin = MIN(radsol(i),xmin)
936         xmax = MAX(radsol(i),xmax)
937      ENDDO
938      PRINT*,'Rayonnement net au sol radsol:', xmin, xmax
939c
940c Lecture de la longueur de rugosite
941c
942c
943      ierr = NF_INQ_VARID (nid, "RUG", nvarid)
944      IF (ierr.NE.NF_NOERR) THEN
945         PRINT*, 'phyetat0: Le champ <RUG> est absent'
946         PRINT*, '          Mais je vais essayer de lire RUG**'
947         DO nsrf = 1, nbsrf
948           IF (nsrf.GT.99) THEN
949             PRINT*, "Trop de sous-mailles"
950             CALL abort
951           ENDIF
952           WRITE(str2,'(i2.2)') nsrf
953           ierr = NF_INQ_VARID (nid, "RUG"//str2, nvarid)
954           IF (ierr.NE.NF_NOERR) THEN
955              PRINT*, "phyetat0: Le champ <RUG"//str2//"> est absent"
956              CALL abort
957           ENDIF
958#ifdef NC_DOUBLE
959           ierr = NF_GET_VAR_DOUBLE(nid, nvarid, frugs(1,nsrf))
960#else
961           ierr = NF_GET_VAR_REAL(nid, nvarid, frugs(1,nsrf))
962#endif
963           IF (ierr.NE.NF_NOERR) THEN
964             PRINT*, "phyetat0: Lecture echouee pour <RUG"//str2//">"
965             CALL abort
966           ENDIF
967           xmin = 1.0E+20
968           xmax = -1.0E+20
969           DO i = 1, klon
970              xmin = MIN(frugs(i,nsrf),xmin)
971              xmax = MAX(frugs(i,nsrf),xmax)
972           ENDDO
973           PRINT*,'rugosite du sol RUG**:', nsrf, xmin, xmax
974         ENDDO
975      ELSE
976         PRINT*, 'phyetat0: Le champ <RUG> est present'
977         PRINT*, '          J ignore donc les autres RUG**'
978#ifdef NC_DOUBLE
979         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, frugs(1,1))
980#else
981         ierr = NF_GET_VAR_REAL(nid, nvarid, frugs(1,1))
982#endif
983         IF (ierr.NE.NF_NOERR) THEN
984            PRINT*, "phyetat0: Lecture echouee pour <RUG>"
985            CALL abort
986         ENDIF
987         xmin = 1.0E+20
988         xmax = -1.0E+20
989         DO i = 1, klon
990            xmin = MIN(frugs(i,1),xmin)
991            xmax = MAX(frugs(i,1),xmax)
992         ENDDO
993         PRINT*,'rugosite <RUG>', xmin, xmax
994         DO nsrf = 2, nbsrf
995         DO i = 1, klon
996            frugs(i,nsrf) = frugs(i,1)
997         ENDDO
998         ENDDO
999      ENDIF
1000
1001c
1002c Lecture de l'age de la neige:
1003c
1004      ierr = NF_INQ_VARID (nid, "AGESNO", nvarid)
1005      IF (ierr.NE.NF_NOERR) THEN
1006         PRINT*, 'phyetat0: Le champ <AGESNO> est absent'
1007         PRINT*, '          Mais je vais essayer de lire AGESNO**'
1008         DO nsrf = 1, nbsrf
1009           IF (nsrf.GT.99) THEN
1010             PRINT*, "Trop de sous-mailles"
1011             CALL abort
1012           ENDIF
1013           WRITE(str2,'(i2.2)') nsrf
1014           ierr = NF_INQ_VARID (nid, "AGESNO"//str2, nvarid)
1015           IF (ierr.NE.NF_NOERR) THEN
1016              PRINT*, "phyetat0: Le champ <AGESNO"//str2//"> est absent"
1017              agesno = 50.0
1018           ENDIF
1019#ifdef NC_DOUBLE
1020           ierr = NF_GET_VAR_DOUBLE(nid, nvarid, agesno(1,nsrf))
1021#else
1022           ierr = NF_GET_VAR_REAL(nid, nvarid, agesno(1,nsrf))
1023#endif
1024           IF (ierr.NE.NF_NOERR) THEN
1025             PRINT*, "phyetat0: Lecture echouee pour <AGESNO"//str2//">"
1026             CALL abort
1027           ENDIF
1028           xmin = 1.0E+20
1029           xmax = -1.0E+20
1030           DO i = 1, klon
1031              xmin = MIN(agesno(i,nsrf),xmin)
1032              xmax = MAX(agesno(i,nsrf),xmax)
1033           ENDDO
1034           PRINT*,'Age de la neige AGESNO**:', nsrf, xmin, xmax
1035         ENDDO
1036      ELSE
1037         PRINT*, 'phyetat0: Le champ <AGESNO> est present'
1038         PRINT*, '          J ignore donc les autres AGESNO**'
1039#ifdef NC_DOUBLE
1040         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, agesno(1,1))
1041#else
1042         ierr = NF_GET_VAR_REAL(nid, nvarid, agesno(1,1))
1043#endif
1044         IF (ierr.NE.NF_NOERR) THEN
1045            PRINT*, "phyetat0: Lecture echouee pour <AGESNO>"
1046            CALL abort
1047         ENDIF
1048         xmin = 1.0E+20
1049         xmax = -1.0E+20
1050         DO i = 1, klon
1051            xmin = MIN(agesno(i,1),xmin)
1052            xmax = MAX(agesno(i,1),xmax)
1053         ENDDO
1054         PRINT*,'Age de la neige <AGESNO>', xmin, xmax
1055         DO nsrf = 2, nbsrf
1056         DO i = 1, klon
1057            agesno(i,nsrf) = agesno(i,1)
1058         ENDDO
1059         ENDDO
1060      ENDIF
1061
1062c
1063      ierr = NF_INQ_VARID (nid, "ZMEA", nvarid)
1064      IF (ierr.NE.NF_NOERR) THEN
1065         PRINT*, 'phyetat0: Le champ <ZMEA> est absent'
1066         CALL abort
1067      ENDIF
1068#ifdef NC_DOUBLE
1069      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, zmea)
1070#else
1071      ierr = NF_GET_VAR_REAL(nid, nvarid, zmea)
1072#endif
1073      IF (ierr.NE.NF_NOERR) THEN
1074         PRINT*, 'phyetat0: Lecture echouee pour <ZMEA>'
1075         CALL abort
1076      ENDIF
1077      xmin = 1.0E+20
1078      xmax = -1.0E+20
1079      DO i = 1, klon
1080         xmin = MIN(zmea(i),xmin)
1081         xmax = MAX(zmea(i),xmax)
1082      ENDDO
1083      PRINT*,'OROGRAPHIE SOUS-MAILLE zmea:', xmin, xmax
1084c
1085c
1086      ierr = NF_INQ_VARID (nid, "ZSTD", nvarid)
1087      IF (ierr.NE.NF_NOERR) THEN
1088         PRINT*, 'phyetat0: Le champ <ZSTD> est absent'
1089         CALL abort
1090      ENDIF
1091#ifdef NC_DOUBLE
1092      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, zstd)
1093#else
1094      ierr = NF_GET_VAR_REAL(nid, nvarid, zstd)
1095#endif
1096      IF (ierr.NE.NF_NOERR) THEN
1097         PRINT*, 'phyetat0: Lecture echouee pour <ZSTD>'
1098         CALL abort
1099      ENDIF
1100      xmin = 1.0E+20
1101      xmax = -1.0E+20
1102      DO i = 1, klon
1103         xmin = MIN(zstd(i),xmin)
1104         xmax = MAX(zstd(i),xmax)
1105      ENDDO
1106      PRINT*,'OROGRAPHIE SOUS-MAILLE zstd:', xmin, xmax
1107c
1108c
1109      ierr = NF_INQ_VARID (nid, "ZSIG", nvarid)
1110      IF (ierr.NE.NF_NOERR) THEN
1111         PRINT*, 'phyetat0: Le champ <ZSIG> est absent'
1112         CALL abort
1113      ENDIF
1114#ifdef NC_DOUBLE
1115      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, zsig)
1116#else
1117      ierr = NF_GET_VAR_REAL(nid, nvarid, zsig)
1118#endif
1119      IF (ierr.NE.NF_NOERR) THEN
1120         PRINT*, 'phyetat0: Lecture echouee pour <ZSIG>'
1121         CALL abort
1122      ENDIF
1123      xmin = 1.0E+20
1124      xmax = -1.0E+20
1125      DO i = 1, klon
1126         xmin = MIN(zsig(i),xmin)
1127         xmax = MAX(zsig(i),xmax)
1128      ENDDO
1129      PRINT*,'OROGRAPHIE SOUS-MAILLE zsig:', xmin, xmax
1130c
1131c
1132      ierr = NF_INQ_VARID (nid, "ZGAM", nvarid)
1133      IF (ierr.NE.NF_NOERR) THEN
1134         PRINT*, 'phyetat0: Le champ <ZGAM> est absent'
1135         CALL abort
1136      ENDIF
1137#ifdef NC_DOUBLE
1138      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, zgam)
1139#else
1140      ierr = NF_GET_VAR_REAL(nid, nvarid, zgam)
1141#endif
1142      IF (ierr.NE.NF_NOERR) THEN
1143         PRINT*, 'phyetat0: Lecture echouee pour <ZGAM>'
1144         CALL abort
1145      ENDIF
1146      xmin = 1.0E+20
1147      xmax = -1.0E+20
1148      DO i = 1, klon
1149         xmin = MIN(zgam(i),xmin)
1150         xmax = MAX(zgam(i),xmax)
1151      ENDDO
1152      PRINT*,'OROGRAPHIE SOUS-MAILLE zgam:', xmin, xmax
1153c
1154c
1155      ierr = NF_INQ_VARID (nid, "ZTHE", nvarid)
1156      IF (ierr.NE.NF_NOERR) THEN
1157         PRINT*, 'phyetat0: Le champ <ZTHE> est absent'
1158         CALL abort
1159      ENDIF
1160#ifdef NC_DOUBLE
1161      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, zthe)
1162#else
1163      ierr = NF_GET_VAR_REAL(nid, nvarid, zthe)
1164#endif
1165      IF (ierr.NE.NF_NOERR) THEN
1166         PRINT*, 'phyetat0: Lecture echouee pour <ZTHE>'
1167         CALL abort
1168      ENDIF
1169      xmin = 1.0E+20
1170      xmax = -1.0E+20
1171      DO i = 1, klon
1172         xmin = MIN(zthe(i),xmin)
1173         xmax = MAX(zthe(i),xmax)
1174      ENDDO
1175      PRINT*,'OROGRAPHIE SOUS-MAILLE zthe:', xmin, xmax
1176c
1177c
1178      ierr = NF_INQ_VARID (nid, "ZPIC", nvarid)
1179      IF (ierr.NE.NF_NOERR) THEN
1180         PRINT*, 'phyetat0: Le champ <ZPIC> est absent'
1181         CALL abort
1182      ENDIF
1183#ifdef NC_DOUBLE
1184      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, zpic)
1185#else
1186      ierr = NF_GET_VAR_REAL(nid, nvarid, zpic)
1187#endif
1188      IF (ierr.NE.NF_NOERR) THEN
1189         PRINT*, 'phyetat0: Lecture echouee pour <ZPIC>'
1190         CALL abort
1191      ENDIF
1192      xmin = 1.0E+20
1193      xmax = -1.0E+20
1194      DO i = 1, klon
1195         xmin = MIN(zpic(i),xmin)
1196         xmax = MAX(zpic(i),xmax)
1197      ENDDO
1198      PRINT*,'OROGRAPHIE SOUS-MAILLE zpic:', xmin, xmax
1199c
1200      ierr = NF_INQ_VARID (nid, "ZVAL", nvarid)
1201      IF (ierr.NE.NF_NOERR) THEN
1202         PRINT*, 'phyetat0: Le champ <ZVAL> est absent'
1203         CALL abort
1204      ENDIF
1205#ifdef NC_DOUBLE
1206      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, zval)
1207#else
1208      ierr = NF_GET_VAR_REAL(nid, nvarid, zval)
1209#endif
1210      IF (ierr.NE.NF_NOERR) THEN
1211         PRINT*, 'phyetat0: Lecture echouee pour <ZVAL>'
1212         CALL abort
1213      ENDIF
1214      xmin = 1.0E+20
1215      xmax = -1.0E+20
1216      DO i = 1, klon
1217         xmin = MIN(zval(i),xmin)
1218         xmax = MAX(zval(i),xmax)
1219      ENDDO
1220      PRINT*,'OROGRAPHIE SOUS-MAILLE zval:', xmin, xmax
1221c
1222c
1223      ierr = NF_INQ_VARID (nid, "RUGSREL", nvarid)
1224      IF (ierr.NE.NF_NOERR) THEN
1225         PRINT*, 'phyetat0: Le champ <RUGSREL> est absent'
1226         CALL abort
1227      ENDIF
1228#ifdef NC_DOUBLE
1229      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, rugsrel)
1230#else
1231      ierr = NF_GET_VAR_REAL(nid, nvarid, rugsrel)
1232#endif
1233      IF (ierr.NE.NF_NOERR) THEN
1234         PRINT*, 'phyetat0: Lecture echouee pour <RUGSREL>'
1235         CALL abort
1236      ENDIF
1237      xmin = 1.0E+20
1238      xmax = -1.0E+20
1239      DO i = 1, klon
1240         xmin = MIN(rugsrel(i),xmin)
1241         xmax = MAX(rugsrel(i),xmax)
1242      ENDDO
1243      PRINT*,'Rugosite relief (ecart-type) rugsrel:', xmin, xmax
1244c
1245c
1246      ancien_ok = .TRUE.
1247c
1248      ierr = NF_INQ_VARID (nid, "TANCIEN", nvarid)
1249      IF (ierr.NE.NF_NOERR) THEN
1250         PRINT*, "phyetat0: Le champ <TANCIEN> est absent"
1251         PRINT*, "Depart legerement fausse. Mais je continue"
1252         ancien_ok = .FALSE.
1253      ELSE
1254#ifdef NC_DOUBLE
1255         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, t_ancien)
1256#else
1257         ierr = NF_GET_VAR_REAL(nid, nvarid, t_ancien)
1258#endif
1259         IF (ierr.NE.NF_NOERR) THEN
1260            PRINT*, "phyetat0: Lecture echouee pour <TANCIEN>"
1261            CALL abort
1262         ENDIF
1263      ENDIF
1264c
1265      ierr = NF_INQ_VARID (nid, "QANCIEN", nvarid)
1266      IF (ierr.NE.NF_NOERR) THEN
1267         PRINT*, "phyetat0: Le champ <QANCIEN> est absent"
1268         PRINT*, "Depart legerement fausse. Mais je continue"
1269         ancien_ok = .FALSE.
1270      ELSE
1271#ifdef NC_DOUBLE
1272         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, q_ancien)
1273#else
1274         ierr = NF_GET_VAR_REAL(nid, nvarid, q_ancien)
1275#endif
1276         IF (ierr.NE.NF_NOERR) THEN
1277            PRINT*, "phyetat0: Lecture echouee pour <QANCIEN>"
1278            CALL abort
1279         ENDIF
1280      ENDIF
1281c
1282      ierr = NF_INQ_VARID (nid, "CLWCON", nvarid)
1283      IF (ierr.NE.NF_NOERR) THEN
1284         PRINT*, "phyetat0: Le champ CLWCON est absent"
1285         PRINT*, "Depart legerement fausse. Mais je continue"
1286         clwcon = 0.
1287      ELSE
1288#ifdef NC_DOUBLE
1289         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, clwcon)
1290#else
1291         ierr = NF_GET_VAR_REAL(nid, nvarid, clwcon)
1292#endif
1293         IF (ierr.NE.NF_NOERR) THEN
1294            PRINT*, "phyetat0: Lecture echouee pour <CLWCON>"
1295            CALL abort
1296         ENDIF
1297      ENDIF
1298      xmin = 1.0E+20
1299      xmax = -1.0E+20
1300      xmin = MINval(clwcon)
1301      xmax = MAXval(clwcon)
1302      PRINT*,'Eau liquide convective (ecart-type) clwcon:', xmin, xmax
1303c
1304      ierr = NF_INQ_VARID (nid, "RNEBCON", nvarid)
1305      IF (ierr.NE.NF_NOERR) THEN
1306         PRINT*, "phyetat0: Le champ RNEBCON est absent"
1307         PRINT*, "Depart legerement fausse. Mais je continue"
1308         rnebcon = 0.
1309      ELSE
1310#ifdef NC_DOUBLE
1311         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, rnebcon)
1312#else
1313         ierr = NF_GET_VAR_REAL(nid, nvarid, rnebcon)
1314#endif
1315         IF (ierr.NE.NF_NOERR) THEN
1316            PRINT*, "phyetat0: Lecture echouee pour <RNEBCON>"
1317            CALL abort
1318         ENDIF
1319      ENDIF
1320      xmin = 1.0E+20
1321      xmax = -1.0E+20
1322      xmin = MINval(rnebcon)
1323      xmax = MAXval(rnebcon)
1324      PRINT*,'Nebulosite convective (ecart-type) rnebcon:', xmin, xmax
1325
1326c
1327      ierr = NF_INQ_VARID (nid, "QANCIEN", nvarid)
1328      IF (ierr.NE.NF_NOERR) THEN
1329         PRINT*, "phyetat0: Le champ <QANCIEN> est absent"
1330         PRINT*, "Depart legerement fausse. Mais je continue"
1331         ancien_ok = .FALSE.
1332      ELSE
1333#ifdef NC_DOUBLE
1334         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, q_ancien)
1335#else
1336         ierr = NF_GET_VAR_REAL(nid, nvarid, q_ancien)
1337#endif
1338         IF (ierr.NE.NF_NOERR) THEN
1339            PRINT*, "phyetat0: Lecture echouee pour <QANCIEN>"
1340            CALL abort
1341         ENDIF
1342      ENDIF
1343c
1344c Lecture ratqs
1345c
1346      ierr = NF_INQ_VARID (nid, "RATQS", nvarid)
1347      IF (ierr.NE.NF_NOERR) THEN
1348         PRINT*, "phyetat0: Le champ <RATQS> est absent"
1349         PRINT*, "Depart legerement fausse. Mais je continue"
1350         ratqs = 0.
1351      ELSE
1352#ifdef NC_DOUBLE
1353         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, ratqs)
1354#else
1355         ierr = NF_GET_VAR_REAL(nid, nvarid, ratqs)
1356#endif
1357         IF (ierr.NE.NF_NOERR) THEN
1358            PRINT*, "phyetat0: Lecture echouee pour <RATQS>"
1359            CALL abort
1360         ENDIF
1361      ENDIF
1362      xmin = 1.0E+20
1363      xmax = -1.0E+20
1364      xmin = MINval(ratqs)
1365      xmax = MAXval(ratqs)
1366      PRINT*,'(ecart-type) ratqs:', xmin, xmax
1367c
1368c Lecture run_off_lic_0
1369c
1370      ierr = NF_INQ_VARID (nid, "RUNOFFLIC0", nvarid)
1371      IF (ierr.NE.NF_NOERR) THEN
1372         PRINT*, "phyetat0: Le champ <RUNOFFLIC0> est absent"
1373         PRINT*, "Depart legerement fausse. Mais je continue"
1374         run_off_lic_0 = 0.
1375      ELSE
1376#ifdef NC_DOUBLE
1377         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, run_off_lic_0)
1378#else
1379         ierr = NF_GET_VAR_REAL(nid, nvarid, run_off_lic_0)
1380#endif
1381         IF (ierr.NE.NF_NOERR) THEN
1382            PRINT*, "phyetat0: Lecture echouee pour <RUNOFFLIC0>"
1383            CALL abort
1384         ENDIF
1385      ENDIF
1386      xmin = 1.0E+20
1387      xmax = -1.0E+20
1388      xmin = MINval(run_off_lic_0)
1389      xmax = MAXval(run_off_lic_0)
1390      PRINT*,'(ecart-type) run_off_lic_0:', xmin, xmax
1391c
1392c Fermer le fichier:
1393c
1394      ierr = NF_CLOSE(nid)
1395c
1396      RETURN
1397      END
Note: See TracBrowser for help on using the repository browser.