source: LMDZ4/tags/Merge_v3_Yann/libf/phylmd/phyetat0.F @ 1091

Last change on this file since 1091 was 779, checked in by Laurent Fairhead, 17 years ago

Encore un petit soucis lors du merge
LF

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