source: LMDZ4/branches/IPSL-CM4_IPCC_patches/libf/phylmd/phyetat0.F @ 5384

Last change on this file since 5384 was 524, checked in by lmdzadmin, 21 years ago

Initial revision

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