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

Last change on this file since 644 was 644, checked in by Laurent Fairhead, 20 years ago

Synchronisation avec tous les diagnostiques de Ionela IM
Inclusion du slab ocean IM
LF

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