source: LMDZ4/tags/LMDZ4_V1/libf/phylmd/phyetat0.F @ 627

Last change on this file since 627 was 627, checked in by (none), 19 years ago

This commit was manufactured by cvs2svn to create tag 'LMDZ4_V1'.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 39.8 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
667      ELSE
668         PRINT*, 'phyetat0: Le champ <ALBLW> est present'
669         PRINT*, '          J ignore donc les autres ALBLW**'
670#ifdef NC_DOUBLE
671         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, alblw(1,1))
672#else
673         ierr = NF_GET_VAR_REAL(nid, nvarid, alblw(1,1))
674#endif
675         IF (ierr.NE.NF_NOERR) THEN
676            PRINT*, "phyetat0: Lecture echouee pour <ALBLW>"
677            CALL abort
678         ENDIF
679         xmin = 1.0E+20
680         xmax = -1.0E+20
681         DO i = 1, klon
682            xmin = MIN(alblw(i,1),xmin)
683            xmax = MAX(alblw(i,1),xmax)
684         ENDDO
685         PRINT*,'Neige du sol <ALBLW>', xmin, xmax
686         DO nsrf = 2, nbsrf
687         DO i = 1, klon
688            alblw(i,nsrf) = alblw(i,1)
689         ENDDO
690         ENDDO
691      ENDIF
692
693cIM END alblw
694
695c
696c Lecture de evaporation: 
697c
698      ierr = NF_INQ_VARID (nid, "EVAP", nvarid)
699      IF (ierr.NE.NF_NOERR) THEN
700         PRINT*, 'phyetat0: Le champ <EVAP> est absent'
701         PRINT*, '          Mais je vais essayer de lire EVAP**'
702         DO nsrf = 1, nbsrf
703           IF (nsrf.GT.99) THEN
704             PRINT*, "Trop de sous-mailles"
705             CALL abort
706           ENDIF
707           WRITE(str2,'(i2.2)') nsrf
708           ierr = NF_INQ_VARID (nid, "EVAP"//str2, nvarid)
709           IF (ierr.NE.NF_NOERR) THEN
710              PRINT*, "phyetat0: Le champ <EVAP"//str2//"> est absent"
711              CALL abort
712           ENDIF
713#ifdef NC_DOUBLE
714           ierr = NF_GET_VAR_DOUBLE(nid, nvarid, evap(1,nsrf))
715#else
716           ierr = NF_GET_VAR_REAL(nid, nvarid, evap(1,nsrf))
717#endif
718           IF (ierr.NE.NF_NOERR) THEN
719             PRINT*, "phyetat0: Lecture echouee pour <EVAP"//str2//">"
720             CALL abort
721           ENDIF
722           xmin = 1.0E+20
723           xmax = -1.0E+20
724           DO i = 1, klon
725              xmin = MIN(evap(i,nsrf),xmin)
726              xmax = MAX(evap(i,nsrf),xmax)
727           ENDDO
728           PRINT*,'evap du sol EVAP**:', nsrf, xmin, xmax
729         ENDDO
730      ELSE
731         PRINT*, 'phyetat0: Le champ <EVAP> est present'
732         PRINT*, '          J ignore donc les autres EVAP**'
733#ifdef NC_DOUBLE
734         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, evap(1,1))
735#else
736         ierr = NF_GET_VAR_REAL(nid, nvarid, evap(1,1))
737#endif
738         IF (ierr.NE.NF_NOERR) THEN
739            PRINT*, "phyetat0: Lecture echouee pour <EVAP>"
740            CALL abort
741         ENDIF
742         xmin = 1.0E+20
743         xmax = -1.0E+20
744         DO i = 1, klon
745            xmin = MIN(evap(i,1),xmin)
746            xmax = MAX(evap(i,1),xmax)
747         ENDDO
748         PRINT*,'Evap du sol <EVAP>', xmin, xmax
749         DO nsrf = 2, nbsrf
750         DO i = 1, klon
751            evap(i,nsrf) = evap(i,1)
752         ENDDO
753         ENDDO
754      ENDIF
755c
756c Lecture precipitation liquide:
757c
758      ierr = NF_INQ_VARID (nid, "rain_f", nvarid)
759      IF (ierr.NE.NF_NOERR) THEN
760         PRINT*, 'phyetat0: Le champ <rain_f> est absent'
761         CALL abort
762      ENDIF
763#ifdef NC_DOUBLE
764      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, rain_fall)
765#else
766      ierr = NF_GET_VAR_REAL(nid, nvarid, rain_fall)
767#endif
768      IF (ierr.NE.NF_NOERR) THEN
769         PRINT*, 'phyetat0: Lecture echouee pour <rain_f>'
770         CALL abort
771      ENDIF
772      xmin = 1.0E+20
773      xmax = -1.0E+20
774      DO i = 1, klon
775         xmin = MIN(rain_fall(i),xmin)
776         xmax = MAX(rain_fall(i),xmax)
777      ENDDO
778      PRINT*,'Precipitation liquide rain_f:', xmin, xmax
779c
780c Lecture precipitation solide:
781c
782      ierr = NF_INQ_VARID (nid, "snow_f", nvarid)
783      IF (ierr.NE.NF_NOERR) THEN
784         PRINT*, 'phyetat0: Le champ <snow_f> est absent'
785         CALL abort
786      ENDIF
787#ifdef NC_DOUBLE
788      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, snow_fall)
789#else
790      ierr = NF_GET_VAR_REAL(nid, nvarid, snow_fall)
791#endif
792      IF (ierr.NE.NF_NOERR) THEN
793         PRINT*, 'phyetat0: Lecture echouee pour <snow_f>'
794         CALL abort
795      ENDIF
796      xmin = 1.0E+20
797      xmax = -1.0E+20
798      DO i = 1, klon
799         xmin = MIN(snow_fall(i),xmin)
800         xmax = MAX(snow_fall(i),xmax)
801      ENDDO
802      PRINT*,'Precipitation solide snow_f:', xmin, xmax
803c
804c Lecture rayonnement solaire au sol:
805c
806      ierr = NF_INQ_VARID (nid, "solsw", nvarid)
807      IF (ierr.NE.NF_NOERR) THEN
808         PRINT*, 'phyetat0: Le champ <solsw> est absent'
809         PRINT*, 'mis a zero'
810         solsw = 0.
811      ELSE
812#ifdef NC_DOUBLE
813        ierr = NF_GET_VAR_DOUBLE(nid, nvarid, solsw)
814#else
815        ierr = NF_GET_VAR_REAL(nid, nvarid, solsw)
816#endif
817        IF (ierr.NE.NF_NOERR) THEN
818          PRINT*, 'phyetat0: Lecture echouee pour <solsw>'
819          CALL abort
820        ENDIF
821      ENDIF
822      xmin = 1.0E+20
823      xmax = -1.0E+20
824      DO i = 1, klon
825         xmin = MIN(solsw(i),xmin)
826         xmax = MAX(solsw(i),xmax)
827      ENDDO
828      PRINT*,'Rayonnement solaire au sol solsw:', xmin, xmax
829c
830c Lecture rayonnement IF au sol:
831c
832      ierr = NF_INQ_VARID (nid, "sollw", nvarid)
833      IF (ierr.NE.NF_NOERR) THEN
834         PRINT*, 'phyetat0: Le champ <sollw> est absent'
835         PRINT*, 'mis a zero'
836         sollw = 0.
837      ELSE
838#ifdef NC_DOUBLE
839        ierr = NF_GET_VAR_DOUBLE(nid, nvarid, sollw)
840#else
841        ierr = NF_GET_VAR_REAL(nid, nvarid, sollw)
842#endif
843        IF (ierr.NE.NF_NOERR) THEN
844          PRINT*, 'phyetat0: Lecture echouee pour <sollw>'
845          CALL abort
846        ENDIF
847      ENDIF
848      xmin = 1.0E+20
849      xmax = -1.0E+20
850      DO i = 1, klon
851         xmin = MIN(sollw(i),xmin)
852         xmax = MAX(sollw(i),xmax)
853      ENDDO
854      PRINT*,'Rayonnement IF au sol sollw:', xmin, xmax
855
856c
857c Lecture derive des flux:
858c
859      ierr = NF_INQ_VARID (nid, "fder", nvarid)
860      IF (ierr.NE.NF_NOERR) THEN
861         PRINT*, 'phyetat0: Le champ <fder> est absent'
862         PRINT*, 'mis a zero'
863         fder = 0.
864      ELSE
865#ifdef NC_DOUBLE
866        ierr = NF_GET_VAR_DOUBLE(nid, nvarid, fder)
867#else
868        ierr = NF_GET_VAR_REAL(nid, nvarid, fder)
869#endif
870        IF (ierr.NE.NF_NOERR) THEN
871          PRINT*, 'phyetat0: Lecture echouee pour <fder>'
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(fder(i),xmin)
879         xmax = MAX(fder(i),xmax)
880      ENDDO
881      PRINT*,'Derive des flux fder:', xmin, xmax
882
883c
884c Lecture du rayonnement net au sol:
885c
886      ierr = NF_INQ_VARID (nid, "RADS", nvarid)
887      IF (ierr.NE.NF_NOERR) THEN
888         PRINT*, 'phyetat0: Le champ <RADS> est absent'
889         CALL abort
890      ENDIF
891#ifdef NC_DOUBLE
892      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, radsol)
893#else
894      ierr = NF_GET_VAR_REAL(nid, nvarid, radsol)
895#endif
896      IF (ierr.NE.NF_NOERR) THEN
897         PRINT*, 'phyetat0: Lecture echouee pour <RADS>'
898         CALL abort
899      ENDIF
900      xmin = 1.0E+20
901      xmax = -1.0E+20
902      DO i = 1, klon
903         xmin = MIN(radsol(i),xmin)
904         xmax = MAX(radsol(i),xmax)
905      ENDDO
906      PRINT*,'Rayonnement net au sol radsol:', xmin, xmax
907c
908c Lecture de la longueur de rugosite
909c
910c
911      ierr = NF_INQ_VARID (nid, "RUG", nvarid)
912      IF (ierr.NE.NF_NOERR) THEN
913         PRINT*, 'phyetat0: Le champ <RUG> est absent'
914         PRINT*, '          Mais je vais essayer de lire RUG**'
915         DO nsrf = 1, nbsrf
916           IF (nsrf.GT.99) THEN
917             PRINT*, "Trop de sous-mailles"
918             CALL abort
919           ENDIF
920           WRITE(str2,'(i2.2)') nsrf
921           ierr = NF_INQ_VARID (nid, "RUG"//str2, nvarid)
922           IF (ierr.NE.NF_NOERR) THEN
923              PRINT*, "phyetat0: Le champ <RUG"//str2//"> est absent"
924              CALL abort
925           ENDIF
926#ifdef NC_DOUBLE
927           ierr = NF_GET_VAR_DOUBLE(nid, nvarid, frugs(1,nsrf))
928#else
929           ierr = NF_GET_VAR_REAL(nid, nvarid, frugs(1,nsrf))
930#endif
931           IF (ierr.NE.NF_NOERR) THEN
932             PRINT*, "phyetat0: Lecture echouee pour <RUG"//str2//">"
933             CALL abort
934           ENDIF
935           xmin = 1.0E+20
936           xmax = -1.0E+20
937           DO i = 1, klon
938              xmin = MIN(frugs(i,nsrf),xmin)
939              xmax = MAX(frugs(i,nsrf),xmax)
940           ENDDO
941           PRINT*,'rugosite du sol RUG**:', nsrf, xmin, xmax
942         ENDDO
943      ELSE
944         PRINT*, 'phyetat0: Le champ <RUG> est present'
945         PRINT*, '          J ignore donc les autres RUG**'
946#ifdef NC_DOUBLE
947         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, frugs(1,1))
948#else
949         ierr = NF_GET_VAR_REAL(nid, nvarid, frugs(1,1))
950#endif
951         IF (ierr.NE.NF_NOERR) THEN
952            PRINT*, "phyetat0: Lecture echouee pour <RUG>"
953            CALL abort
954         ENDIF
955         xmin = 1.0E+20
956         xmax = -1.0E+20
957         DO i = 1, klon
958            xmin = MIN(frugs(i,1),xmin)
959            xmax = MAX(frugs(i,1),xmax)
960         ENDDO
961         PRINT*,'rugosite <RUG>', xmin, xmax
962         DO nsrf = 2, nbsrf
963         DO i = 1, klon
964            frugs(i,nsrf) = frugs(i,1)
965         ENDDO
966         ENDDO
967      ENDIF
968
969c
970c Lecture de l'age de la neige:
971c
972      ierr = NF_INQ_VARID (nid, "AGESNO", nvarid)
973      IF (ierr.NE.NF_NOERR) THEN
974         PRINT*, 'phyetat0: Le champ <AGESNO> est absent'
975         PRINT*, '          Mais je vais essayer de lire AGESNO**'
976         DO nsrf = 1, nbsrf
977           IF (nsrf.GT.99) THEN
978             PRINT*, "Trop de sous-mailles"
979             CALL abort
980           ENDIF
981           WRITE(str2,'(i2.2)') nsrf
982           ierr = NF_INQ_VARID (nid, "AGESNO"//str2, nvarid)
983           IF (ierr.NE.NF_NOERR) THEN
984              PRINT*, "phyetat0: Le champ <AGESNO"//str2//"> est absent"
985              agesno = 50.0
986           ENDIF
987#ifdef NC_DOUBLE
988           ierr = NF_GET_VAR_DOUBLE(nid, nvarid, agesno(1,nsrf))
989#else
990           ierr = NF_GET_VAR_REAL(nid, nvarid, agesno(1,nsrf))
991#endif
992           IF (ierr.NE.NF_NOERR) THEN
993             PRINT*, "phyetat0: Lecture echouee pour <AGESNO"//str2//">"
994             CALL abort
995           ENDIF
996           xmin = 1.0E+20
997           xmax = -1.0E+20
998           DO i = 1, klon
999              xmin = MIN(agesno(i,nsrf),xmin)
1000              xmax = MAX(agesno(i,nsrf),xmax)
1001           ENDDO
1002           PRINT*,'Age de la neige AGESNO**:', nsrf, xmin, xmax
1003         ENDDO
1004      ELSE
1005         PRINT*, 'phyetat0: Le champ <AGESNO> est present'
1006         PRINT*, '          J ignore donc les autres AGESNO**'
1007#ifdef NC_DOUBLE
1008         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, agesno(1,1))
1009#else
1010         ierr = NF_GET_VAR_REAL(nid, nvarid, agesno(1,1))
1011#endif
1012         IF (ierr.NE.NF_NOERR) THEN
1013            PRINT*, "phyetat0: Lecture echouee pour <AGESNO>"
1014            CALL abort
1015         ENDIF
1016         xmin = 1.0E+20
1017         xmax = -1.0E+20
1018         DO i = 1, klon
1019            xmin = MIN(agesno(i,1),xmin)
1020            xmax = MAX(agesno(i,1),xmax)
1021         ENDDO
1022         PRINT*,'Age de la neige <AGESNO>', xmin, xmax
1023         DO nsrf = 2, nbsrf
1024         DO i = 1, klon
1025            agesno(i,nsrf) = agesno(i,1)
1026         ENDDO
1027         ENDDO
1028      ENDIF
1029
1030c
1031      ierr = NF_INQ_VARID (nid, "ZMEA", nvarid)
1032      IF (ierr.NE.NF_NOERR) THEN
1033         PRINT*, 'phyetat0: Le champ <ZMEA> est absent'
1034         CALL abort
1035      ENDIF
1036#ifdef NC_DOUBLE
1037      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, zmea)
1038#else
1039      ierr = NF_GET_VAR_REAL(nid, nvarid, zmea)
1040#endif
1041      IF (ierr.NE.NF_NOERR) THEN
1042         PRINT*, 'phyetat0: Lecture echouee pour <ZMEA>'
1043         CALL abort
1044      ENDIF
1045      xmin = 1.0E+20
1046      xmax = -1.0E+20
1047      DO i = 1, klon
1048         xmin = MIN(zmea(i),xmin)
1049         xmax = MAX(zmea(i),xmax)
1050      ENDDO
1051      PRINT*,'OROGRAPHIE SOUS-MAILLE zmea:', xmin, xmax
1052c
1053c
1054      ierr = NF_INQ_VARID (nid, "ZSTD", nvarid)
1055      IF (ierr.NE.NF_NOERR) THEN
1056         PRINT*, 'phyetat0: Le champ <ZSTD> est absent'
1057         CALL abort
1058      ENDIF
1059#ifdef NC_DOUBLE
1060      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, zstd)
1061#else
1062      ierr = NF_GET_VAR_REAL(nid, nvarid, zstd)
1063#endif
1064      IF (ierr.NE.NF_NOERR) THEN
1065         PRINT*, 'phyetat0: Lecture echouee pour <ZSTD>'
1066         CALL abort
1067      ENDIF
1068      xmin = 1.0E+20
1069      xmax = -1.0E+20
1070      DO i = 1, klon
1071         xmin = MIN(zstd(i),xmin)
1072         xmax = MAX(zstd(i),xmax)
1073      ENDDO
1074      PRINT*,'OROGRAPHIE SOUS-MAILLE zstd:', xmin, xmax
1075c
1076c
1077      ierr = NF_INQ_VARID (nid, "ZSIG", nvarid)
1078      IF (ierr.NE.NF_NOERR) THEN
1079         PRINT*, 'phyetat0: Le champ <ZSIG> est absent'
1080         CALL abort
1081      ENDIF
1082#ifdef NC_DOUBLE
1083      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, zsig)
1084#else
1085      ierr = NF_GET_VAR_REAL(nid, nvarid, zsig)
1086#endif
1087      IF (ierr.NE.NF_NOERR) THEN
1088         PRINT*, 'phyetat0: Lecture echouee pour <ZSIG>'
1089         CALL abort
1090      ENDIF
1091      xmin = 1.0E+20
1092      xmax = -1.0E+20
1093      DO i = 1, klon
1094         xmin = MIN(zsig(i),xmin)
1095         xmax = MAX(zsig(i),xmax)
1096      ENDDO
1097      PRINT*,'OROGRAPHIE SOUS-MAILLE zsig:', xmin, xmax
1098c
1099c
1100      ierr = NF_INQ_VARID (nid, "ZGAM", nvarid)
1101      IF (ierr.NE.NF_NOERR) THEN
1102         PRINT*, 'phyetat0: Le champ <ZGAM> est absent'
1103         CALL abort
1104      ENDIF
1105#ifdef NC_DOUBLE
1106      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, zgam)
1107#else
1108      ierr = NF_GET_VAR_REAL(nid, nvarid, zgam)
1109#endif
1110      IF (ierr.NE.NF_NOERR) THEN
1111         PRINT*, 'phyetat0: Lecture echouee pour <ZGAM>'
1112         CALL abort
1113      ENDIF
1114      xmin = 1.0E+20
1115      xmax = -1.0E+20
1116      DO i = 1, klon
1117         xmin = MIN(zgam(i),xmin)
1118         xmax = MAX(zgam(i),xmax)
1119      ENDDO
1120      PRINT*,'OROGRAPHIE SOUS-MAILLE zgam:', xmin, xmax
1121c
1122c
1123      ierr = NF_INQ_VARID (nid, "ZTHE", nvarid)
1124      IF (ierr.NE.NF_NOERR) THEN
1125         PRINT*, 'phyetat0: Le champ <ZTHE> est absent'
1126         CALL abort
1127      ENDIF
1128#ifdef NC_DOUBLE
1129      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, zthe)
1130#else
1131      ierr = NF_GET_VAR_REAL(nid, nvarid, zthe)
1132#endif
1133      IF (ierr.NE.NF_NOERR) THEN
1134         PRINT*, 'phyetat0: Lecture echouee pour <ZTHE>'
1135         CALL abort
1136      ENDIF
1137      xmin = 1.0E+20
1138      xmax = -1.0E+20
1139      DO i = 1, klon
1140         xmin = MIN(zthe(i),xmin)
1141         xmax = MAX(zthe(i),xmax)
1142      ENDDO
1143      PRINT*,'OROGRAPHIE SOUS-MAILLE zthe:', xmin, xmax
1144c
1145c
1146      ierr = NF_INQ_VARID (nid, "ZPIC", nvarid)
1147      IF (ierr.NE.NF_NOERR) THEN
1148         PRINT*, 'phyetat0: Le champ <ZPIC> est absent'
1149         CALL abort
1150      ENDIF
1151#ifdef NC_DOUBLE
1152      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, zpic)
1153#else
1154      ierr = NF_GET_VAR_REAL(nid, nvarid, zpic)
1155#endif
1156      IF (ierr.NE.NF_NOERR) THEN
1157         PRINT*, 'phyetat0: Lecture echouee pour <ZPIC>'
1158         CALL abort
1159      ENDIF
1160      xmin = 1.0E+20
1161      xmax = -1.0E+20
1162      DO i = 1, klon
1163         xmin = MIN(zpic(i),xmin)
1164         xmax = MAX(zpic(i),xmax)
1165      ENDDO
1166      PRINT*,'OROGRAPHIE SOUS-MAILLE zpic:', xmin, xmax
1167c
1168      ierr = NF_INQ_VARID (nid, "ZVAL", nvarid)
1169      IF (ierr.NE.NF_NOERR) THEN
1170         PRINT*, 'phyetat0: Le champ <ZVAL> est absent'
1171         CALL abort
1172      ENDIF
1173#ifdef NC_DOUBLE
1174      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, zval)
1175#else
1176      ierr = NF_GET_VAR_REAL(nid, nvarid, zval)
1177#endif
1178      IF (ierr.NE.NF_NOERR) THEN
1179         PRINT*, 'phyetat0: Lecture echouee pour <ZVAL>'
1180         CALL abort
1181      ENDIF
1182      xmin = 1.0E+20
1183      xmax = -1.0E+20
1184      DO i = 1, klon
1185         xmin = MIN(zval(i),xmin)
1186         xmax = MAX(zval(i),xmax)
1187      ENDDO
1188      PRINT*,'OROGRAPHIE SOUS-MAILLE zval:', xmin, xmax
1189c
1190c
1191      ierr = NF_INQ_VARID (nid, "RUGSREL", nvarid)
1192      IF (ierr.NE.NF_NOERR) THEN
1193         PRINT*, 'phyetat0: Le champ <RUGSREL> est absent'
1194         CALL abort
1195      ENDIF
1196#ifdef NC_DOUBLE
1197      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, rugsrel)
1198#else
1199      ierr = NF_GET_VAR_REAL(nid, nvarid, rugsrel)
1200#endif
1201      IF (ierr.NE.NF_NOERR) THEN
1202         PRINT*, 'phyetat0: Lecture echouee pour <RUGSREL>'
1203         CALL abort
1204      ENDIF
1205      xmin = 1.0E+20
1206      xmax = -1.0E+20
1207      DO i = 1, klon
1208         xmin = MIN(rugsrel(i),xmin)
1209         xmax = MAX(rugsrel(i),xmax)
1210      ENDDO
1211      PRINT*,'Rugosite relief (ecart-type) rugsrel:', xmin, xmax
1212c
1213c
1214      ancien_ok = .TRUE.
1215c
1216      ierr = NF_INQ_VARID (nid, "TANCIEN", nvarid)
1217      IF (ierr.NE.NF_NOERR) THEN
1218         PRINT*, "phyetat0: Le champ <TANCIEN> est absent"
1219         PRINT*, "Depart legerement fausse. Mais je continue"
1220         ancien_ok = .FALSE.
1221      ELSE
1222#ifdef NC_DOUBLE
1223         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, t_ancien)
1224#else
1225         ierr = NF_GET_VAR_REAL(nid, nvarid, t_ancien)
1226#endif
1227         IF (ierr.NE.NF_NOERR) THEN
1228            PRINT*, "phyetat0: Lecture echouee pour <TANCIEN>"
1229            CALL abort
1230         ENDIF
1231      ENDIF
1232c
1233      ierr = NF_INQ_VARID (nid, "QANCIEN", nvarid)
1234      IF (ierr.NE.NF_NOERR) THEN
1235         PRINT*, "phyetat0: Le champ <QANCIEN> est absent"
1236         PRINT*, "Depart legerement fausse. Mais je continue"
1237         ancien_ok = .FALSE.
1238      ELSE
1239#ifdef NC_DOUBLE
1240         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, q_ancien)
1241#else
1242         ierr = NF_GET_VAR_REAL(nid, nvarid, q_ancien)
1243#endif
1244         IF (ierr.NE.NF_NOERR) THEN
1245            PRINT*, "phyetat0: Lecture echouee pour <QANCIEN>"
1246            CALL abort
1247         ENDIF
1248      ENDIF
1249c
1250      ierr = NF_INQ_VARID (nid, "CLWCON", nvarid)
1251      IF (ierr.NE.NF_NOERR) THEN
1252         PRINT*, "phyetat0: Le champ CLWCON est absent"
1253         PRINT*, "Depart legerement fausse. Mais je continue"
1254         clwcon = 0.
1255      ELSE
1256#ifdef NC_DOUBLE
1257         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, clwcon)
1258#else
1259         ierr = NF_GET_VAR_REAL(nid, nvarid, clwcon)
1260#endif
1261         IF (ierr.NE.NF_NOERR) THEN
1262            PRINT*, "phyetat0: Lecture echouee pour <CLWCON>"
1263            CALL abort
1264         ENDIF
1265      ENDIF
1266      xmin = 1.0E+20
1267      xmax = -1.0E+20
1268      xmin = MINval(clwcon)
1269      xmax = MAXval(clwcon)
1270      PRINT*,'Eau liquide convective (ecart-type) clwcon:', xmin, xmax
1271c
1272      ierr = NF_INQ_VARID (nid, "RNEBCON", nvarid)
1273      IF (ierr.NE.NF_NOERR) THEN
1274         PRINT*, "phyetat0: Le champ RNEBCON est absent"
1275         PRINT*, "Depart legerement fausse. Mais je continue"
1276         rnebcon = 0.
1277      ELSE
1278#ifdef NC_DOUBLE
1279         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, rnebcon)
1280#else
1281         ierr = NF_GET_VAR_REAL(nid, nvarid, rnebcon)
1282#endif
1283         IF (ierr.NE.NF_NOERR) THEN
1284            PRINT*, "phyetat0: Lecture echouee pour <RNEBCON>"
1285            CALL abort
1286         ENDIF
1287      ENDIF
1288      xmin = 1.0E+20
1289      xmax = -1.0E+20
1290      xmin = MINval(rnebcon)
1291      xmax = MAXval(rnebcon)
1292      PRINT*,'Nebulosite convective (ecart-type) rnebcon:', xmin, xmax
1293
1294c
1295      ierr = NF_INQ_VARID (nid, "QANCIEN", nvarid)
1296      IF (ierr.NE.NF_NOERR) THEN
1297         PRINT*, "phyetat0: Le champ <QANCIEN> est absent"
1298         PRINT*, "Depart legerement fausse. Mais je continue"
1299         ancien_ok = .FALSE.
1300      ELSE
1301#ifdef NC_DOUBLE
1302         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, q_ancien)
1303#else
1304         ierr = NF_GET_VAR_REAL(nid, nvarid, q_ancien)
1305#endif
1306         IF (ierr.NE.NF_NOERR) THEN
1307            PRINT*, "phyetat0: Lecture echouee pour <QANCIEN>"
1308            CALL abort
1309         ENDIF
1310      ENDIF
1311c
1312c Lecture ratqs
1313c
1314      ierr = NF_INQ_VARID (nid, "RATQS", nvarid)
1315      IF (ierr.NE.NF_NOERR) THEN
1316         PRINT*, "phyetat0: Le champ <RATQS> est absent"
1317         PRINT*, "Depart legerement fausse. Mais je continue"
1318         ratqs = 0.
1319      ELSE
1320#ifdef NC_DOUBLE
1321         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, ratqs)
1322#else
1323         ierr = NF_GET_VAR_REAL(nid, nvarid, ratqs)
1324#endif
1325         IF (ierr.NE.NF_NOERR) THEN
1326            PRINT*, "phyetat0: Lecture echouee pour <RATQS>"
1327            CALL abort
1328         ENDIF
1329      ENDIF
1330      xmin = 1.0E+20
1331      xmax = -1.0E+20
1332      xmin = MINval(ratqs)
1333      xmax = MAXval(ratqs)
1334      PRINT*,'(ecart-type) ratqs:', xmin, xmax
1335c
1336c Lecture run_off_lic_0
1337c
1338      ierr = NF_INQ_VARID (nid, "RUNOFFLIC0", nvarid)
1339      IF (ierr.NE.NF_NOERR) THEN
1340         PRINT*, "phyetat0: Le champ <RUNOFFLIC0> est absent"
1341         PRINT*, "Depart legerement fausse. Mais je continue"
1342         run_off_lic_0 = 0.
1343      ELSE
1344#ifdef NC_DOUBLE
1345         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, run_off_lic_0)
1346#else
1347         ierr = NF_GET_VAR_REAL(nid, nvarid, run_off_lic_0)
1348#endif
1349         IF (ierr.NE.NF_NOERR) THEN
1350            PRINT*, "phyetat0: Lecture echouee pour <RUNOFFLIC0>"
1351            CALL abort
1352         ENDIF
1353      ENDIF
1354      xmin = 1.0E+20
1355      xmax = -1.0E+20
1356      xmin = MINval(run_off_lic_0)
1357      xmax = MAXval(run_off_lic_0)
1358      PRINT*,'(ecart-type) run_off_lic_0:', xmin, xmax
1359c
1360c Fermer le fichier:
1361c
1362      ierr = NF_CLOSE(nid)
1363c
1364      RETURN
1365      END
Note: See TracBrowser for help on using the repository browser.