source: LMDZ4/branches/LMDZ4_V2_patch/libf/phylmd/phyetat0.F @ 759

Last change on this file since 759 was 651, checked in by Laurent Fairhead, 19 years ago

On fait dépendre la lecture de tslab et seaice dans phyetat0 du flag ocean
(on n'a pas besoin de les lire si on n'est pas en ocean slab)
LF

  • 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*,'Ecart de la SST tslab:', 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 seaice:', xmin, xmax
476      ELSE
477        tslab = 0.
478        seaice = 0.
479      ENDIF
480c
481c Lecture de l'humidite de l'air juste au dessus du sol:
482c
483      ierr = NF_INQ_VARID (nid, "QS", nvarid)
484      IF (ierr.NE.NF_NOERR) THEN
485         PRINT*, 'phyetat0: Le champ <QS> est absent'
486         PRINT*, '          Mais je vais essayer de lire QS**'
487         DO nsrf = 1, nbsrf
488           IF (nsrf.GT.99) THEN
489             PRINT*, "Trop de sous-mailles"
490             CALL abort
491           ENDIF
492           WRITE(str2,'(i2.2)') nsrf
493           ierr = NF_INQ_VARID (nid, "QS"//str2, nvarid)
494           IF (ierr.NE.NF_NOERR) THEN
495              PRINT*, "phyetat0: Le champ <QS"//str2//"> est absent"
496              CALL abort
497           ENDIF
498#ifdef NC_DOUBLE
499           ierr = NF_GET_VAR_DOUBLE(nid, nvarid, qsurf(1,nsrf))
500#else
501           ierr = NF_GET_VAR_REAL(nid, nvarid, qsurf(1,nsrf))
502#endif
503           IF (ierr.NE.NF_NOERR) THEN
504             PRINT*, "phyetat0: Lecture echouee pour <QS"//str2//">"
505             CALL abort
506           ENDIF
507           xmin = 1.0E+20
508           xmax = -1.0E+20
509           DO i = 1, klon
510              xmin = MIN(qsurf(i,nsrf),xmin)
511              xmax = MAX(qsurf(i,nsrf),xmax)
512           ENDDO
513           PRINT*,'Humidite pres du sol QS**:', nsrf, xmin, xmax
514         ENDDO
515      ELSE
516         PRINT*, 'phyetat0: Le champ <QS> est present'
517         PRINT*, '          J ignore donc les autres humidites QS**'
518#ifdef NC_DOUBLE
519         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, qsurf(1,1))
520#else
521         ierr = NF_GET_VAR_REAL(nid, nvarid, qsurf(1,1))
522#endif
523         IF (ierr.NE.NF_NOERR) THEN
524            PRINT*, "phyetat0: Lecture echouee pour <QS>"
525            CALL abort
526         ENDIF
527         xmin = 1.0E+20
528         xmax = -1.0E+20
529         DO i = 1, klon
530            xmin = MIN(qsurf(i,1),xmin)
531            xmax = MAX(qsurf(i,1),xmax)
532         ENDDO
533         PRINT*,'Humidite pres du sol <QS>', xmin, xmax
534         DO nsrf = 2, nbsrf
535         DO i = 1, klon
536            qsurf(i,nsrf) = qsurf(i,1)
537         ENDDO
538         ENDDO
539      ENDIF
540C
541C Eau dans le sol (pour le modele de sol "bucket")
542C
543      ierr = NF_INQ_VARID (nid, "QSOL", nvarid)
544      IF (ierr .EQ.  NF_NOERR) THEN
545#ifdef NC_DOUBLE
546          ierr = NF_GET_VAR_DOUBLE(nid, nvarid, qsol)
547#else
548          ierr = NF_GET_VAR_REAL(nid, nvarid, qsol)
549#endif
550          IF (ierr.NE.NF_NOERR) THEN
551              PRINT*, 'phyetat0: Lecture echouee pour <QSOL>'
552              CALL abort
553          ENDIF
554      else
555          PRINT*, 'phyetat0: Le champ <QSOL> est absent'
556          PRINT*, '          Valeur par defaut nulle'
557          qsol(:)=0.
558c$$$         CALL abort
559      ENDIF
560      xmin = 1.0E+20
561      xmax = -1.0E+20
562      DO i = 1, klon
563        xmin = MIN(qsol(i),xmin)
564        xmax = MAX(qsol(i),xmax)
565      ENDDO
566      PRINT*,'Eau dans le sol (mm) <QSOL>', xmin, xmax
567c
568c Lecture de neige au sol:
569c
570      ierr = NF_INQ_VARID (nid, "SNOW", nvarid)
571      IF (ierr.NE.NF_NOERR) THEN
572         PRINT*, 'phyetat0: Le champ <SNOW> est absent'
573         PRINT*, '          Mais je vais essayer de lire SNOW**'
574         DO nsrf = 1, nbsrf
575           IF (nsrf.GT.99) THEN
576             PRINT*, "Trop de sous-mailles"
577             CALL abort
578           ENDIF
579           WRITE(str2,'(i2.2)') nsrf
580           ierr = NF_INQ_VARID (nid, "SNOW"//str2, nvarid)
581           IF (ierr.NE.NF_NOERR) THEN
582              PRINT*, "phyetat0: Le champ <SNOW"//str2//"> est absent"
583              CALL abort
584           ENDIF
585#ifdef NC_DOUBLE
586           ierr = NF_GET_VAR_DOUBLE(nid, nvarid, snow(1,nsrf))
587#else
588           ierr = NF_GET_VAR_REAL(nid, nvarid, snow(1,nsrf))
589#endif
590           IF (ierr.NE.NF_NOERR) THEN
591             PRINT*, "phyetat0: Lecture echouee pour <SNOW"//str2//">"
592             CALL abort
593           ENDIF
594           xmin = 1.0E+20
595           xmax = -1.0E+20
596           DO i = 1, klon
597              xmin = MIN(snow(i,nsrf),xmin)
598              xmax = MAX(snow(i,nsrf),xmax)
599           ENDDO
600           PRINT*,'Neige du sol SNOW**:', nsrf, xmin, xmax
601         ENDDO
602      ELSE
603         PRINT*, 'phyetat0: Le champ <SNOW> est present'
604         PRINT*, '          J ignore donc les autres neiges SNOW**'
605#ifdef NC_DOUBLE
606         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, snow(1,1))
607#else
608         ierr = NF_GET_VAR_REAL(nid, nvarid, snow(1,1))
609#endif
610         IF (ierr.NE.NF_NOERR) THEN
611            PRINT*, "phyetat0: Lecture echouee pour <SNOW>"
612            CALL abort
613         ENDIF
614         xmin = 1.0E+20
615         xmax = -1.0E+20
616         DO i = 1, klon
617            xmin = MIN(snow(i,1),xmin)
618            xmax = MAX(snow(i,1),xmax)
619         ENDDO
620         PRINT*,'Neige du sol <SNOW>', xmin, xmax
621         DO nsrf = 2, nbsrf
622         DO i = 1, klon
623            snow(i,nsrf) = snow(i,1)
624         ENDDO
625         ENDDO
626      ENDIF
627c
628c Lecture de albedo au sol:
629c
630      ierr = NF_INQ_VARID (nid, "ALBE", nvarid)
631      IF (ierr.NE.NF_NOERR) THEN
632         PRINT*, 'phyetat0: Le champ <ALBE> est absent'
633         PRINT*, '          Mais je vais essayer de lire ALBE**'
634         DO nsrf = 1, nbsrf
635           IF (nsrf.GT.99) THEN
636             PRINT*, "Trop de sous-mailles"
637             CALL abort
638           ENDIF
639           WRITE(str2,'(i2.2)') nsrf
640           ierr = NF_INQ_VARID (nid, "ALBE"//str2, nvarid)
641           IF (ierr.NE.NF_NOERR) THEN
642              PRINT*, "phyetat0: Le champ <ALBE"//str2//"> est absent"
643              CALL abort
644           ENDIF
645#ifdef NC_DOUBLE
646           ierr = NF_GET_VAR_DOUBLE(nid, nvarid, albe(1,nsrf))
647#else
648           ierr = NF_GET_VAR_REAL(nid, nvarid, albe(1,nsrf))
649#endif
650           IF (ierr.NE.NF_NOERR) THEN
651             PRINT*, "phyetat0: Lecture echouee pour <ALBE"//str2//">"
652             CALL abort
653           ENDIF
654           xmin = 1.0E+20
655           xmax = -1.0E+20
656           DO i = 1, klon
657              xmin = MIN(albe(i,nsrf),xmin)
658              xmax = MAX(albe(i,nsrf),xmax)
659           ENDDO
660           PRINT*,'Albedo du sol ALBE**:', nsrf, xmin, xmax
661         ENDDO
662      ELSE
663         PRINT*, 'phyetat0: Le champ <ALBE> est present'
664         PRINT*, '          J ignore donc les autres ALBE**'
665#ifdef NC_DOUBLE
666         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, albe(1,1))
667#else
668         ierr = NF_GET_VAR_REAL(nid, nvarid, albe(1,1))
669#endif
670         IF (ierr.NE.NF_NOERR) THEN
671            PRINT*, "phyetat0: Lecture echouee pour <ALBE>"
672            CALL abort
673         ENDIF
674         xmin = 1.0E+20
675         xmax = -1.0E+20
676         DO i = 1, klon
677            xmin = MIN(albe(i,1),xmin)
678            xmax = MAX(albe(i,1),xmax)
679         ENDDO
680         PRINT*,'Neige du sol <ALBE>', xmin, xmax
681         DO nsrf = 2, nbsrf
682         DO i = 1, klon
683            albe(i,nsrf) = albe(i,1)
684         ENDDO
685         ENDDO
686      ENDIF
687
688c
689c Lecture de albedo au sol LW:
690c
691      ierr = NF_INQ_VARID (nid, "ALBLW", nvarid)
692      IF (ierr.NE.NF_NOERR) THEN
693         PRINT*, 'phyetat0: Le champ <ALBLW> est absent'
694c        PRINT*, '          Mais je vais essayer de lire ALBLW**'
695         PRINT*, '          Mais je vais prendre ALBE**'
696         DO nsrf = 1, nbsrf
697           DO i = 1, klon
698             alblw(i,nsrf) = albe(i,nsrf)
699           ENDDO
700         ENDDO
701      ELSE
702         PRINT*, 'phyetat0: Le champ <ALBLW> est present'
703         PRINT*, '          J ignore donc les autres ALBLW**'
704#ifdef NC_DOUBLE
705         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, alblw(1,1))
706#else
707         ierr = NF_GET_VAR_REAL(nid, nvarid, alblw(1,1))
708#endif
709         IF (ierr.NE.NF_NOERR) THEN
710            PRINT*, "phyetat0: Lecture echouee pour <ALBLW>"
711            CALL abort
712         ENDIF
713         xmin = 1.0E+20
714         xmax = -1.0E+20
715         DO i = 1, klon
716            xmin = MIN(alblw(i,1),xmin)
717            xmax = MAX(alblw(i,1),xmax)
718         ENDDO
719         PRINT*,'Neige du sol <ALBLW>', xmin, xmax
720         DO nsrf = 2, nbsrf
721         DO i = 1, klon
722            alblw(i,nsrf) = alblw(i,1)
723         ENDDO
724         ENDDO
725      ENDIF
726c
727c Lecture de evaporation: 
728c
729      ierr = NF_INQ_VARID (nid, "EVAP", nvarid)
730      IF (ierr.NE.NF_NOERR) THEN
731         PRINT*, 'phyetat0: Le champ <EVAP> est absent'
732         PRINT*, '          Mais je vais essayer de lire EVAP**'
733         DO nsrf = 1, nbsrf
734           IF (nsrf.GT.99) THEN
735             PRINT*, "Trop de sous-mailles"
736             CALL abort
737           ENDIF
738           WRITE(str2,'(i2.2)') nsrf
739           ierr = NF_INQ_VARID (nid, "EVAP"//str2, nvarid)
740           IF (ierr.NE.NF_NOERR) THEN
741              PRINT*, "phyetat0: Le champ <EVAP"//str2//"> est absent"
742              CALL abort
743           ENDIF
744#ifdef NC_DOUBLE
745           ierr = NF_GET_VAR_DOUBLE(nid, nvarid, evap(1,nsrf))
746#else
747           ierr = NF_GET_VAR_REAL(nid, nvarid, evap(1,nsrf))
748#endif
749           IF (ierr.NE.NF_NOERR) THEN
750             PRINT*, "phyetat0: Lecture echouee pour <EVAP"//str2//">"
751             CALL abort
752           ENDIF
753           xmin = 1.0E+20
754           xmax = -1.0E+20
755           DO i = 1, klon
756              xmin = MIN(evap(i,nsrf),xmin)
757              xmax = MAX(evap(i,nsrf),xmax)
758           ENDDO
759           PRINT*,'evap du sol EVAP**:', nsrf, xmin, xmax
760         ENDDO
761      ELSE
762         PRINT*, 'phyetat0: Le champ <EVAP> est present'
763         PRINT*, '          J ignore donc les autres EVAP**'
764#ifdef NC_DOUBLE
765         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, evap(1,1))
766#else
767         ierr = NF_GET_VAR_REAL(nid, nvarid, evap(1,1))
768#endif
769         IF (ierr.NE.NF_NOERR) THEN
770            PRINT*, "phyetat0: Lecture echouee pour <EVAP>"
771            CALL abort
772         ENDIF
773         xmin = 1.0E+20
774         xmax = -1.0E+20
775         DO i = 1, klon
776            xmin = MIN(evap(i,1),xmin)
777            xmax = MAX(evap(i,1),xmax)
778         ENDDO
779         PRINT*,'Evap du sol <EVAP>', xmin, xmax
780         DO nsrf = 2, nbsrf
781         DO i = 1, klon
782            evap(i,nsrf) = evap(i,1)
783         ENDDO
784         ENDDO
785      ENDIF
786c
787c Lecture precipitation liquide:
788c
789      ierr = NF_INQ_VARID (nid, "rain_f", nvarid)
790      IF (ierr.NE.NF_NOERR) THEN
791         PRINT*, 'phyetat0: Le champ <rain_f> est absent'
792         CALL abort
793      ENDIF
794#ifdef NC_DOUBLE
795      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, rain_fall)
796#else
797      ierr = NF_GET_VAR_REAL(nid, nvarid, rain_fall)
798#endif
799      IF (ierr.NE.NF_NOERR) THEN
800         PRINT*, 'phyetat0: Lecture echouee pour <rain_f>'
801         CALL abort
802      ENDIF
803      xmin = 1.0E+20
804      xmax = -1.0E+20
805      DO i = 1, klon
806         xmin = MIN(rain_fall(i),xmin)
807         xmax = MAX(rain_fall(i),xmax)
808      ENDDO
809      PRINT*,'Precipitation liquide rain_f:', xmin, xmax
810c
811c Lecture precipitation solide:
812c
813      ierr = NF_INQ_VARID (nid, "snow_f", nvarid)
814      IF (ierr.NE.NF_NOERR) THEN
815         PRINT*, 'phyetat0: Le champ <snow_f> est absent'
816         CALL abort
817      ENDIF
818#ifdef NC_DOUBLE
819      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, snow_fall)
820#else
821      ierr = NF_GET_VAR_REAL(nid, nvarid, snow_fall)
822#endif
823      IF (ierr.NE.NF_NOERR) THEN
824         PRINT*, 'phyetat0: Lecture echouee pour <snow_f>'
825         CALL abort
826      ENDIF
827      xmin = 1.0E+20
828      xmax = -1.0E+20
829      DO i = 1, klon
830         xmin = MIN(snow_fall(i),xmin)
831         xmax = MAX(snow_fall(i),xmax)
832      ENDDO
833      PRINT*,'Precipitation solide snow_f:', xmin, xmax
834c
835c Lecture rayonnement solaire au sol:
836c
837      ierr = NF_INQ_VARID (nid, "solsw", nvarid)
838      IF (ierr.NE.NF_NOERR) THEN
839         PRINT*, 'phyetat0: Le champ <solsw> est absent'
840         PRINT*, 'mis a zero'
841         solsw = 0.
842      ELSE
843#ifdef NC_DOUBLE
844        ierr = NF_GET_VAR_DOUBLE(nid, nvarid, solsw)
845#else
846        ierr = NF_GET_VAR_REAL(nid, nvarid, solsw)
847#endif
848        IF (ierr.NE.NF_NOERR) THEN
849          PRINT*, 'phyetat0: Lecture echouee pour <solsw>'
850          CALL abort
851        ENDIF
852      ENDIF
853      xmin = 1.0E+20
854      xmax = -1.0E+20
855      DO i = 1, klon
856         xmin = MIN(solsw(i),xmin)
857         xmax = MAX(solsw(i),xmax)
858      ENDDO
859      PRINT*,'Rayonnement solaire au sol solsw:', xmin, xmax
860c
861c Lecture rayonnement IF au sol:
862c
863      ierr = NF_INQ_VARID (nid, "sollw", nvarid)
864      IF (ierr.NE.NF_NOERR) THEN
865         PRINT*, 'phyetat0: Le champ <sollw> est absent'
866         PRINT*, 'mis a zero'
867         sollw = 0.
868      ELSE
869#ifdef NC_DOUBLE
870        ierr = NF_GET_VAR_DOUBLE(nid, nvarid, sollw)
871#else
872        ierr = NF_GET_VAR_REAL(nid, nvarid, sollw)
873#endif
874        IF (ierr.NE.NF_NOERR) THEN
875          PRINT*, 'phyetat0: Lecture echouee pour <sollw>'
876          CALL abort
877        ENDIF
878      ENDIF
879      xmin = 1.0E+20
880      xmax = -1.0E+20
881      DO i = 1, klon
882         xmin = MIN(sollw(i),xmin)
883         xmax = MAX(sollw(i),xmax)
884      ENDDO
885      PRINT*,'Rayonnement IF au sol sollw:', xmin, xmax
886
887c
888c Lecture derive des flux:
889c
890      ierr = NF_INQ_VARID (nid, "fder", nvarid)
891      IF (ierr.NE.NF_NOERR) THEN
892         PRINT*, 'phyetat0: Le champ <fder> est absent'
893         PRINT*, 'mis a zero'
894         fder = 0.
895      ELSE
896#ifdef NC_DOUBLE
897        ierr = NF_GET_VAR_DOUBLE(nid, nvarid, fder)
898#else
899        ierr = NF_GET_VAR_REAL(nid, nvarid, fder)
900#endif
901        IF (ierr.NE.NF_NOERR) THEN
902          PRINT*, 'phyetat0: Lecture echouee pour <fder>'
903          CALL abort
904        ENDIF
905      ENDIF
906      xmin = 1.0E+20
907      xmax = -1.0E+20
908      DO i = 1, klon
909         xmin = MIN(fder(i),xmin)
910         xmax = MAX(fder(i),xmax)
911      ENDDO
912      PRINT*,'Derive des flux fder:', xmin, xmax
913
914c
915c Lecture du rayonnement net au sol:
916c
917      ierr = NF_INQ_VARID (nid, "RADS", nvarid)
918      IF (ierr.NE.NF_NOERR) THEN
919         PRINT*, 'phyetat0: Le champ <RADS> est absent'
920         CALL abort
921      ENDIF
922#ifdef NC_DOUBLE
923      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, radsol)
924#else
925      ierr = NF_GET_VAR_REAL(nid, nvarid, radsol)
926#endif
927      IF (ierr.NE.NF_NOERR) THEN
928         PRINT*, 'phyetat0: Lecture echouee pour <RADS>'
929         CALL abort
930      ENDIF
931      xmin = 1.0E+20
932      xmax = -1.0E+20
933      DO i = 1, klon
934         xmin = MIN(radsol(i),xmin)
935         xmax = MAX(radsol(i),xmax)
936      ENDDO
937      PRINT*,'Rayonnement net au sol radsol:', xmin, xmax
938c
939c Lecture de la longueur de rugosite
940c
941c
942      ierr = NF_INQ_VARID (nid, "RUG", nvarid)
943      IF (ierr.NE.NF_NOERR) THEN
944         PRINT*, 'phyetat0: Le champ <RUG> est absent'
945         PRINT*, '          Mais je vais essayer de lire RUG**'
946         DO nsrf = 1, nbsrf
947           IF (nsrf.GT.99) THEN
948             PRINT*, "Trop de sous-mailles"
949             CALL abort
950           ENDIF
951           WRITE(str2,'(i2.2)') nsrf
952           ierr = NF_INQ_VARID (nid, "RUG"//str2, nvarid)
953           IF (ierr.NE.NF_NOERR) THEN
954              PRINT*, "phyetat0: Le champ <RUG"//str2//"> est absent"
955              CALL abort
956           ENDIF
957#ifdef NC_DOUBLE
958           ierr = NF_GET_VAR_DOUBLE(nid, nvarid, frugs(1,nsrf))
959#else
960           ierr = NF_GET_VAR_REAL(nid, nvarid, frugs(1,nsrf))
961#endif
962           IF (ierr.NE.NF_NOERR) THEN
963             PRINT*, "phyetat0: Lecture echouee pour <RUG"//str2//">"
964             CALL abort
965           ENDIF
966           xmin = 1.0E+20
967           xmax = -1.0E+20
968           DO i = 1, klon
969              xmin = MIN(frugs(i,nsrf),xmin)
970              xmax = MAX(frugs(i,nsrf),xmax)
971           ENDDO
972           PRINT*,'rugosite du sol RUG**:', nsrf, xmin, xmax
973         ENDDO
974      ELSE
975         PRINT*, 'phyetat0: Le champ <RUG> est present'
976         PRINT*, '          J ignore donc les autres RUG**'
977#ifdef NC_DOUBLE
978         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, frugs(1,1))
979#else
980         ierr = NF_GET_VAR_REAL(nid, nvarid, frugs(1,1))
981#endif
982         IF (ierr.NE.NF_NOERR) THEN
983            PRINT*, "phyetat0: Lecture echouee pour <RUG>"
984            CALL abort
985         ENDIF
986         xmin = 1.0E+20
987         xmax = -1.0E+20
988         DO i = 1, klon
989            xmin = MIN(frugs(i,1),xmin)
990            xmax = MAX(frugs(i,1),xmax)
991         ENDDO
992         PRINT*,'rugosite <RUG>', xmin, xmax
993         DO nsrf = 2, nbsrf
994         DO i = 1, klon
995            frugs(i,nsrf) = frugs(i,1)
996         ENDDO
997         ENDDO
998      ENDIF
999
1000c
1001c Lecture de l'age de la neige:
1002c
1003      ierr = NF_INQ_VARID (nid, "AGESNO", nvarid)
1004      IF (ierr.NE.NF_NOERR) THEN
1005         PRINT*, 'phyetat0: Le champ <AGESNO> est absent'
1006         PRINT*, '          Mais je vais essayer de lire AGESNO**'
1007         DO nsrf = 1, nbsrf
1008           IF (nsrf.GT.99) THEN
1009             PRINT*, "Trop de sous-mailles"
1010             CALL abort
1011           ENDIF
1012           WRITE(str2,'(i2.2)') nsrf
1013           ierr = NF_INQ_VARID (nid, "AGESNO"//str2, nvarid)
1014           IF (ierr.NE.NF_NOERR) THEN
1015              PRINT*, "phyetat0: Le champ <AGESNO"//str2//"> est absent"
1016              agesno = 50.0
1017           ENDIF
1018#ifdef NC_DOUBLE
1019           ierr = NF_GET_VAR_DOUBLE(nid, nvarid, agesno(1,nsrf))
1020#else
1021           ierr = NF_GET_VAR_REAL(nid, nvarid, agesno(1,nsrf))
1022#endif
1023           IF (ierr.NE.NF_NOERR) THEN
1024             PRINT*, "phyetat0: Lecture echouee pour <AGESNO"//str2//">"
1025             CALL abort
1026           ENDIF
1027           xmin = 1.0E+20
1028           xmax = -1.0E+20
1029           DO i = 1, klon
1030              xmin = MIN(agesno(i,nsrf),xmin)
1031              xmax = MAX(agesno(i,nsrf),xmax)
1032           ENDDO
1033           PRINT*,'Age de la neige AGESNO**:', nsrf, xmin, xmax
1034         ENDDO
1035      ELSE
1036         PRINT*, 'phyetat0: Le champ <AGESNO> est present'
1037         PRINT*, '          J ignore donc les autres AGESNO**'
1038#ifdef NC_DOUBLE
1039         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, agesno(1,1))
1040#else
1041         ierr = NF_GET_VAR_REAL(nid, nvarid, agesno(1,1))
1042#endif
1043         IF (ierr.NE.NF_NOERR) THEN
1044            PRINT*, "phyetat0: Lecture echouee pour <AGESNO>"
1045            CALL abort
1046         ENDIF
1047         xmin = 1.0E+20
1048         xmax = -1.0E+20
1049         DO i = 1, klon
1050            xmin = MIN(agesno(i,1),xmin)
1051            xmax = MAX(agesno(i,1),xmax)
1052         ENDDO
1053         PRINT*,'Age de la neige <AGESNO>', xmin, xmax
1054         DO nsrf = 2, nbsrf
1055         DO i = 1, klon
1056            agesno(i,nsrf) = agesno(i,1)
1057         ENDDO
1058         ENDDO
1059      ENDIF
1060
1061c
1062      ierr = NF_INQ_VARID (nid, "ZMEA", nvarid)
1063      IF (ierr.NE.NF_NOERR) THEN
1064         PRINT*, 'phyetat0: Le champ <ZMEA> est absent'
1065         CALL abort
1066      ENDIF
1067#ifdef NC_DOUBLE
1068      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, zmea)
1069#else
1070      ierr = NF_GET_VAR_REAL(nid, nvarid, zmea)
1071#endif
1072      IF (ierr.NE.NF_NOERR) THEN
1073         PRINT*, 'phyetat0: Lecture echouee pour <ZMEA>'
1074         CALL abort
1075      ENDIF
1076      xmin = 1.0E+20
1077      xmax = -1.0E+20
1078      DO i = 1, klon
1079         xmin = MIN(zmea(i),xmin)
1080         xmax = MAX(zmea(i),xmax)
1081      ENDDO
1082      PRINT*,'OROGRAPHIE SOUS-MAILLE zmea:', xmin, xmax
1083c
1084c
1085      ierr = NF_INQ_VARID (nid, "ZSTD", nvarid)
1086      IF (ierr.NE.NF_NOERR) THEN
1087         PRINT*, 'phyetat0: Le champ <ZSTD> est absent'
1088         CALL abort
1089      ENDIF
1090#ifdef NC_DOUBLE
1091      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, zstd)
1092#else
1093      ierr = NF_GET_VAR_REAL(nid, nvarid, zstd)
1094#endif
1095      IF (ierr.NE.NF_NOERR) THEN
1096         PRINT*, 'phyetat0: Lecture echouee pour <ZSTD>'
1097         CALL abort
1098      ENDIF
1099      xmin = 1.0E+20
1100      xmax = -1.0E+20
1101      DO i = 1, klon
1102         xmin = MIN(zstd(i),xmin)
1103         xmax = MAX(zstd(i),xmax)
1104      ENDDO
1105      PRINT*,'OROGRAPHIE SOUS-MAILLE zstd:', xmin, xmax
1106c
1107c
1108      ierr = NF_INQ_VARID (nid, "ZSIG", nvarid)
1109      IF (ierr.NE.NF_NOERR) THEN
1110         PRINT*, 'phyetat0: Le champ <ZSIG> est absent'
1111         CALL abort
1112      ENDIF
1113#ifdef NC_DOUBLE
1114      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, zsig)
1115#else
1116      ierr = NF_GET_VAR_REAL(nid, nvarid, zsig)
1117#endif
1118      IF (ierr.NE.NF_NOERR) THEN
1119         PRINT*, 'phyetat0: Lecture echouee pour <ZSIG>'
1120         CALL abort
1121      ENDIF
1122      xmin = 1.0E+20
1123      xmax = -1.0E+20
1124      DO i = 1, klon
1125         xmin = MIN(zsig(i),xmin)
1126         xmax = MAX(zsig(i),xmax)
1127      ENDDO
1128      PRINT*,'OROGRAPHIE SOUS-MAILLE zsig:', xmin, xmax
1129c
1130c
1131      ierr = NF_INQ_VARID (nid, "ZGAM", nvarid)
1132      IF (ierr.NE.NF_NOERR) THEN
1133         PRINT*, 'phyetat0: Le champ <ZGAM> est absent'
1134         CALL abort
1135      ENDIF
1136#ifdef NC_DOUBLE
1137      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, zgam)
1138#else
1139      ierr = NF_GET_VAR_REAL(nid, nvarid, zgam)
1140#endif
1141      IF (ierr.NE.NF_NOERR) THEN
1142         PRINT*, 'phyetat0: Lecture echouee pour <ZGAM>'
1143         CALL abort
1144      ENDIF
1145      xmin = 1.0E+20
1146      xmax = -1.0E+20
1147      DO i = 1, klon
1148         xmin = MIN(zgam(i),xmin)
1149         xmax = MAX(zgam(i),xmax)
1150      ENDDO
1151      PRINT*,'OROGRAPHIE SOUS-MAILLE zgam:', xmin, xmax
1152c
1153c
1154      ierr = NF_INQ_VARID (nid, "ZTHE", nvarid)
1155      IF (ierr.NE.NF_NOERR) THEN
1156         PRINT*, 'phyetat0: Le champ <ZTHE> est absent'
1157         CALL abort
1158      ENDIF
1159#ifdef NC_DOUBLE
1160      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, zthe)
1161#else
1162      ierr = NF_GET_VAR_REAL(nid, nvarid, zthe)
1163#endif
1164      IF (ierr.NE.NF_NOERR) THEN
1165         PRINT*, 'phyetat0: Lecture echouee pour <ZTHE>'
1166         CALL abort
1167      ENDIF
1168      xmin = 1.0E+20
1169      xmax = -1.0E+20
1170      DO i = 1, klon
1171         xmin = MIN(zthe(i),xmin)
1172         xmax = MAX(zthe(i),xmax)
1173      ENDDO
1174      PRINT*,'OROGRAPHIE SOUS-MAILLE zthe:', xmin, xmax
1175c
1176c
1177      ierr = NF_INQ_VARID (nid, "ZPIC", nvarid)
1178      IF (ierr.NE.NF_NOERR) THEN
1179         PRINT*, 'phyetat0: Le champ <ZPIC> est absent'
1180         CALL abort
1181      ENDIF
1182#ifdef NC_DOUBLE
1183      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, zpic)
1184#else
1185      ierr = NF_GET_VAR_REAL(nid, nvarid, zpic)
1186#endif
1187      IF (ierr.NE.NF_NOERR) THEN
1188         PRINT*, 'phyetat0: Lecture echouee pour <ZPIC>'
1189         CALL abort
1190      ENDIF
1191      xmin = 1.0E+20
1192      xmax = -1.0E+20
1193      DO i = 1, klon
1194         xmin = MIN(zpic(i),xmin)
1195         xmax = MAX(zpic(i),xmax)
1196      ENDDO
1197      PRINT*,'OROGRAPHIE SOUS-MAILLE zpic:', xmin, xmax
1198c
1199      ierr = NF_INQ_VARID (nid, "ZVAL", nvarid)
1200      IF (ierr.NE.NF_NOERR) THEN
1201         PRINT*, 'phyetat0: Le champ <ZVAL> est absent'
1202         CALL abort
1203      ENDIF
1204#ifdef NC_DOUBLE
1205      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, zval)
1206#else
1207      ierr = NF_GET_VAR_REAL(nid, nvarid, zval)
1208#endif
1209      IF (ierr.NE.NF_NOERR) THEN
1210         PRINT*, 'phyetat0: Lecture echouee pour <ZVAL>'
1211         CALL abort
1212      ENDIF
1213      xmin = 1.0E+20
1214      xmax = -1.0E+20
1215      DO i = 1, klon
1216         xmin = MIN(zval(i),xmin)
1217         xmax = MAX(zval(i),xmax)
1218      ENDDO
1219      PRINT*,'OROGRAPHIE SOUS-MAILLE zval:', xmin, xmax
1220c
1221c
1222      ierr = NF_INQ_VARID (nid, "RUGSREL", nvarid)
1223      IF (ierr.NE.NF_NOERR) THEN
1224         PRINT*, 'phyetat0: Le champ <RUGSREL> est absent'
1225         CALL abort
1226      ENDIF
1227#ifdef NC_DOUBLE
1228      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, rugsrel)
1229#else
1230      ierr = NF_GET_VAR_REAL(nid, nvarid, rugsrel)
1231#endif
1232      IF (ierr.NE.NF_NOERR) THEN
1233         PRINT*, 'phyetat0: Lecture echouee pour <RUGSREL>'
1234         CALL abort
1235      ENDIF
1236      xmin = 1.0E+20
1237      xmax = -1.0E+20
1238      DO i = 1, klon
1239         xmin = MIN(rugsrel(i),xmin)
1240         xmax = MAX(rugsrel(i),xmax)
1241      ENDDO
1242      PRINT*,'Rugosite relief (ecart-type) rugsrel:', xmin, xmax
1243c
1244c
1245      ancien_ok = .TRUE.
1246c
1247      ierr = NF_INQ_VARID (nid, "TANCIEN", nvarid)
1248      IF (ierr.NE.NF_NOERR) THEN
1249         PRINT*, "phyetat0: Le champ <TANCIEN> est absent"
1250         PRINT*, "Depart legerement fausse. Mais je continue"
1251         ancien_ok = .FALSE.
1252      ELSE
1253#ifdef NC_DOUBLE
1254         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, t_ancien)
1255#else
1256         ierr = NF_GET_VAR_REAL(nid, nvarid, t_ancien)
1257#endif
1258         IF (ierr.NE.NF_NOERR) THEN
1259            PRINT*, "phyetat0: Lecture echouee pour <TANCIEN>"
1260            CALL abort
1261         ENDIF
1262      ENDIF
1263c
1264      ierr = NF_INQ_VARID (nid, "QANCIEN", nvarid)
1265      IF (ierr.NE.NF_NOERR) THEN
1266         PRINT*, "phyetat0: Le champ <QANCIEN> est absent"
1267         PRINT*, "Depart legerement fausse. Mais je continue"
1268         ancien_ok = .FALSE.
1269      ELSE
1270#ifdef NC_DOUBLE
1271         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, q_ancien)
1272#else
1273         ierr = NF_GET_VAR_REAL(nid, nvarid, q_ancien)
1274#endif
1275         IF (ierr.NE.NF_NOERR) THEN
1276            PRINT*, "phyetat0: Lecture echouee pour <QANCIEN>"
1277            CALL abort
1278         ENDIF
1279      ENDIF
1280c
1281      ierr = NF_INQ_VARID (nid, "CLWCON", nvarid)
1282      IF (ierr.NE.NF_NOERR) THEN
1283         PRINT*, "phyetat0: Le champ CLWCON est absent"
1284         PRINT*, "Depart legerement fausse. Mais je continue"
1285         clwcon = 0.
1286      ELSE
1287#ifdef NC_DOUBLE
1288         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, clwcon)
1289#else
1290         ierr = NF_GET_VAR_REAL(nid, nvarid, clwcon)
1291#endif
1292         IF (ierr.NE.NF_NOERR) THEN
1293            PRINT*, "phyetat0: Lecture echouee pour <CLWCON>"
1294            CALL abort
1295         ENDIF
1296      ENDIF
1297      xmin = 1.0E+20
1298      xmax = -1.0E+20
1299      xmin = MINval(clwcon)
1300      xmax = MAXval(clwcon)
1301      PRINT*,'Eau liquide convective (ecart-type) clwcon:', xmin, xmax
1302c
1303      ierr = NF_INQ_VARID (nid, "RNEBCON", nvarid)
1304      IF (ierr.NE.NF_NOERR) THEN
1305         PRINT*, "phyetat0: Le champ RNEBCON est absent"
1306         PRINT*, "Depart legerement fausse. Mais je continue"
1307         rnebcon = 0.
1308      ELSE
1309#ifdef NC_DOUBLE
1310         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, rnebcon)
1311#else
1312         ierr = NF_GET_VAR_REAL(nid, nvarid, rnebcon)
1313#endif
1314         IF (ierr.NE.NF_NOERR) THEN
1315            PRINT*, "phyetat0: Lecture echouee pour <RNEBCON>"
1316            CALL abort
1317         ENDIF
1318      ENDIF
1319      xmin = 1.0E+20
1320      xmax = -1.0E+20
1321      xmin = MINval(rnebcon)
1322      xmax = MAXval(rnebcon)
1323      PRINT*,'Nebulosite convective (ecart-type) rnebcon:', xmin, xmax
1324
1325c
1326      ierr = NF_INQ_VARID (nid, "QANCIEN", nvarid)
1327      IF (ierr.NE.NF_NOERR) THEN
1328         PRINT*, "phyetat0: Le champ <QANCIEN> est absent"
1329         PRINT*, "Depart legerement fausse. Mais je continue"
1330         ancien_ok = .FALSE.
1331      ELSE
1332#ifdef NC_DOUBLE
1333         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, q_ancien)
1334#else
1335         ierr = NF_GET_VAR_REAL(nid, nvarid, q_ancien)
1336#endif
1337         IF (ierr.NE.NF_NOERR) THEN
1338            PRINT*, "phyetat0: Lecture echouee pour <QANCIEN>"
1339            CALL abort
1340         ENDIF
1341      ENDIF
1342c
1343c Lecture ratqs
1344c
1345      ierr = NF_INQ_VARID (nid, "RATQS", nvarid)
1346      IF (ierr.NE.NF_NOERR) THEN
1347         PRINT*, "phyetat0: Le champ <RATQS> est absent"
1348         PRINT*, "Depart legerement fausse. Mais je continue"
1349         ratqs = 0.
1350      ELSE
1351#ifdef NC_DOUBLE
1352         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, ratqs)
1353#else
1354         ierr = NF_GET_VAR_REAL(nid, nvarid, ratqs)
1355#endif
1356         IF (ierr.NE.NF_NOERR) THEN
1357            PRINT*, "phyetat0: Lecture echouee pour <RATQS>"
1358            CALL abort
1359         ENDIF
1360      ENDIF
1361      xmin = 1.0E+20
1362      xmax = -1.0E+20
1363      xmin = MINval(ratqs)
1364      xmax = MAXval(ratqs)
1365      PRINT*,'(ecart-type) ratqs:', xmin, xmax
1366c
1367c Lecture run_off_lic_0
1368c
1369      ierr = NF_INQ_VARID (nid, "RUNOFFLIC0", nvarid)
1370      IF (ierr.NE.NF_NOERR) THEN
1371         PRINT*, "phyetat0: Le champ <RUNOFFLIC0> est absent"
1372         PRINT*, "Depart legerement fausse. Mais je continue"
1373         run_off_lic_0 = 0.
1374      ELSE
1375#ifdef NC_DOUBLE
1376         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, run_off_lic_0)
1377#else
1378         ierr = NF_GET_VAR_REAL(nid, nvarid, run_off_lic_0)
1379#endif
1380         IF (ierr.NE.NF_NOERR) THEN
1381            PRINT*, "phyetat0: Lecture echouee pour <RUNOFFLIC0>"
1382            CALL abort
1383         ENDIF
1384      ENDIF
1385      xmin = 1.0E+20
1386      xmax = -1.0E+20
1387      xmin = MINval(run_off_lic_0)
1388      xmax = MAXval(run_off_lic_0)
1389      PRINT*,'(ecart-type) run_off_lic_0:', xmin, xmax
1390c
1391c Fermer le fichier:
1392c
1393      ierr = NF_CLOSE(nid)
1394c
1395      RETURN
1396      END
Note: See TracBrowser for help on using the repository browser.