source: LMDZ.3.3/branches/rel-LF/libf/phylmd/phyetat0.F @ 5456

Last change on this file since 5456 was 522, checked in by lmdzadmin, 21 years ago

Modifications pour la fermeture en eau (fonte des glaciers) JLD, OM
LF

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