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

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

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

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