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

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

Suite du merge entre la version et la HEAD: quelques modifications
de Yann sur le

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