source: trunk/LMDZ.VENUS/libf/phyvenus/readstartphy.F @ 1525

Last change on this file since 1525 was 1443, checked in by emillour, 10 years ago

Titan and Venus GCMs:
Follow-up to the changes in dynamics/physics interface: ener.h, logic.h, serre.h and temps.h are now modules.
EM

File size: 14.2 KB
RevLine 
[3]1!
2! $Header: /home/cvsroot/LMDZ4/libf/phylmd/phyetat0.F,v 1.2 2004/06/22 11:45:33 lmdzadmin Exp $
3!
4c
5c
6      SUBROUTINE readstartphy(fichnom,
7     .            rlat,rlon, tsol,tsoil,
8     .           albe, solsw, sollw,
[1301]9     .           fder,dlw, sollwdown, radsol,
[808]10     .    zmea, zstd, zsig, zgam, zthe, zpic, zval,
[3]11     .           tabcntr0)
12c======================================================================
13c Auteur(s) Z.X. Li (LMD/CNRS) date: 19930818
14c Objet: Lecture de l'etat initial pour la physique
15c======================================================================
[101]16      use dimphy
17      IMPLICIT none
[3]18#include "dimensions.h"
19#include "netcdf.inc"
20#include "dimsoil.h"
21c======================================================================
[778]22      integer ngridmx
23      parameter (ngridmx=(2+(jjm-1)*iim - 1/jjm))
24
[3]25      CHARACTER*(*) fichnom
[778]26      REAL rlat(ngridmx), rlon(ngridmx)
27      REAL tsol(ngridmx)
28      REAL tsoil(ngridmx,nsoilmx)
29      REAL albe(ngridmx)
30      REAL radsol(ngridmx)
31      REAL sollw(ngridmx)
32      real solsw(ngridmx)
33      real fder(ngridmx)
[1301]34      real dlw(ngridmx)
35      real sollwdown(ngridmx)
[808]36      REAL zmea(ngridmx), zstd(ngridmx)
37      REAL zsig(ngridmx), zgam(ngridmx), zthe(ngridmx)
38      REAL zpic(ngridmx), zval(ngridmx)
[3]39      INTEGER length
40      PARAMETER (length=100)
41      REAL tabcntr0(length)
42
43      REAL xmin, xmax
44c
45      INTEGER nid, nvarid
46      INTEGER ierr, i, nsrf, isoil
47      CHARACTER*2 str2
48c
49c Ouvrir le fichier contenant l'etat initial:
50c
51      print*,'fichnom',fichnom
52      ierr = NF_OPEN (fichnom, NF_NOWRITE,nid)
53      IF (ierr.NE.NF_NOERR) THEN
54        write(6,*)' Pb d''ouverture du fichier '//fichnom
55        write(6,*)' ierr = ', ierr
56        CALL ABORT
57      ENDIF
58c
59c Lecture des parametres de controle:
60c
61      ierr = NF_INQ_VARID (nid, "controle", nvarid)
62      IF (ierr.NE.NF_NOERR) THEN
63         PRINT*, 'phyetat0: Le champ <controle> est absent'
64         CALL abort
65      ENDIF
66#ifdef NC_DOUBLE
67      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, tabcntr0)
68#else
69      ierr = NF_GET_VAR_REAL(nid, nvarid, tabcntr0)
70#endif
71      IF (ierr.NE.NF_NOERR) THEN
72         PRINT*, 'phyetat0: Lecture echouee pour <controle>'
73         CALL abort
74      ENDIF
75c
76c
77c Lecture des latitudes (coordonnees):
78c
79      ierr = NF_INQ_VARID (nid, "latitude", nvarid)
80      IF (ierr.NE.NF_NOERR) THEN
81         PRINT*, 'phyetat0: Le champ <latitude> est absent'
82         CALL abort
83      ENDIF
84#ifdef NC_DOUBLE
85      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, rlat)
86#else
87      ierr = NF_GET_VAR_REAL(nid, nvarid, rlat)
88#endif
89      IF (ierr.NE.NF_NOERR) THEN
90         PRINT*, 'phyetat0: Lecture echouee pour <latitude>'
91         CALL abort
92      ENDIF
93c
94c Lecture des longitudes (coordonnees):
95c
96      ierr = NF_INQ_VARID (nid, "longitude", nvarid)
97      IF (ierr.NE.NF_NOERR) THEN
98         PRINT*, 'phyetat0: Le champ <longitude> est absent'
99         CALL abort
100      ENDIF
101#ifdef NC_DOUBLE
102      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, rlon)
103#else
104      ierr = NF_GET_VAR_REAL(nid, nvarid, rlon)
105#endif
106      IF (ierr.NE.NF_NOERR) THEN
107         PRINT*, 'phyetat0: Lecture echouee pour <latitude>'
108         CALL abort
109      ENDIF
110C
111c Lecture des temperatures du sol:
112c
113      ierr = NF_INQ_VARID (nid, "TS", nvarid)
114      IF (ierr.NE.NF_NOERR) THEN
115         PRINT*, 'phyetat0: Le champ <TS> est absent'
116         PRINT*, "phyetat0: Lecture echouee pour <TS>"
117         CALL abort
118      ELSE
119         PRINT*, 'phyetat0: Le champ <TS> est present'
120#ifdef NC_DOUBLE
[778]121         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, tsol)
[3]122#else
[778]123         ierr = NF_GET_VAR_REAL(nid, nvarid, tsol)
[3]124#endif
125         IF (ierr.NE.NF_NOERR) THEN
126            PRINT*, "phyetat0: Lecture echouee pour <TS>"
127            CALL abort
128         ENDIF
129         xmin = 1.0E+20
130         xmax = -1.0E+20
[778]131         DO i = 1, ngridmx
[3]132            xmin = MIN(tsol(i),xmin)
133            xmax = MAX(tsol(i),xmax)
134         ENDDO
135         PRINT*,'Temperature du sol <TS>', xmin, xmax
136      ENDIF
137c
138c Lecture des temperatures du sol profond:
139c
140      DO isoil=1, nsoilmx
141      IF (isoil.GT.99) THEN
142         PRINT*, "Trop de couches"
143         CALL abort
144      ENDIF
145      WRITE(str2,'(i2.2)') isoil
146      ierr = NF_INQ_VARID (nid, 'Tsoil'//str2, nvarid)
147      IF (ierr.NE.NF_NOERR) THEN
148         PRINT*, "phyetat0: Le champ <Tsoil"//str2//"> est absent"
149         PRINT*, "          Il prend donc la valeur de surface"
[778]150         DO i=1, ngridmx
[3]151             tsoil(i,isoil)=tsol(i)
152         ENDDO
153      ELSE
154#ifdef NC_DOUBLE
155         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, tsoil(1,isoil))
156#else
157         ierr = NF_GET_VAR_REAL(nid, nvarid, tsoil(1,isoil))
158#endif
159         IF (ierr.NE.NF_NOERR) THEN
160            PRINT*, "Lecture echouee pour <Tsoil"//str2//">"
161            CALL abort
162         ENDIF
163      ENDIF
164      ENDDO
[778]165
[3]166c
167c Lecture de albedo au sol:
168c
169      ierr = NF_INQ_VARID (nid, "ALBE", nvarid)
170      IF (ierr.NE.NF_NOERR) THEN
171         PRINT*, 'phyetat0: Le champ <ALBE> est absent'
172         PRINT*, "phyetat0: Lecture echouee pour <ALBE>"
173         CALL abort
174      ELSE
175         PRINT*, 'phyetat0: Le champ <ALBE> est present'
176#ifdef NC_DOUBLE
177         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, albe(1))
178#else
179         ierr = NF_GET_VAR_REAL(nid, nvarid, albe(1))
180#endif
181         IF (ierr.NE.NF_NOERR) THEN
182            PRINT*, "phyetat0: Lecture echouee pour <ALBE>"
183            CALL abort
184         ENDIF
185         xmin = 1.0E+20
186         xmax = -1.0E+20
[778]187         DO i = 1, ngridmx
[3]188            xmin = MIN(albe(i),xmin)
189            xmax = MAX(albe(i),xmax)
190         ENDDO
191         PRINT*,'Albedo du sol <ALBE>', xmin, xmax
192      ENDIF
193
194c
195c Lecture rayonnement solaire au sol:
196c
197      ierr = NF_INQ_VARID (nid, "solsw", nvarid)
198      IF (ierr.NE.NF_NOERR) THEN
199         PRINT*, 'phyetat0: Le champ <solsw> est absent'
200         PRINT*, 'mis a zero'
201         solsw = 0.
202      ELSE
203#ifdef NC_DOUBLE
204        ierr = NF_GET_VAR_DOUBLE(nid, nvarid, solsw)
205#else
206        ierr = NF_GET_VAR_REAL(nid, nvarid, solsw)
207#endif
208        IF (ierr.NE.NF_NOERR) THEN
209          PRINT*, 'phyetat0: Lecture echouee pour <solsw>'
210          CALL abort
211        ENDIF
212      ENDIF
213      xmin = 1.0E+20
214      xmax = -1.0E+20
[778]215      DO i = 1, ngridmx
[3]216         xmin = MIN(solsw(i),xmin)
217         xmax = MAX(solsw(i),xmax)
218      ENDDO
219      PRINT*,'Rayonnement solaire au sol solsw:', xmin, xmax
220c
221c Lecture rayonnement IF au sol:
222c
223      ierr = NF_INQ_VARID (nid, "sollw", nvarid)
224      IF (ierr.NE.NF_NOERR) THEN
225         PRINT*, 'phyetat0: Le champ <sollw> est absent'
226         PRINT*, 'mis a zero'
227         sollw = 0.
228      ELSE
229#ifdef NC_DOUBLE
230        ierr = NF_GET_VAR_DOUBLE(nid, nvarid, sollw)
231#else
232        ierr = NF_GET_VAR_REAL(nid, nvarid, sollw)
233#endif
234        IF (ierr.NE.NF_NOERR) THEN
235          PRINT*, 'phyetat0: Lecture echouee pour <sollw>'
236          CALL abort
237        ENDIF
238      ENDIF
239      xmin = 1.0E+20
240      xmax = -1.0E+20
[778]241      DO i = 1, ngridmx
[3]242         xmin = MIN(sollw(i),xmin)
243         xmax = MAX(sollw(i),xmax)
244      ENDDO
245      PRINT*,'Rayonnement IF au sol sollw:', xmin, xmax
246
247c
248c Lecture derive des flux:
249c
250      ierr = NF_INQ_VARID (nid, "fder", nvarid)
251      IF (ierr.NE.NF_NOERR) THEN
252         PRINT*, 'phyetat0: Le champ <fder> est absent'
253         PRINT*, 'mis a zero'
254         fder = 0.
255      ELSE
256#ifdef NC_DOUBLE
257        ierr = NF_GET_VAR_DOUBLE(nid, nvarid, fder)
258#else
259        ierr = NF_GET_VAR_REAL(nid, nvarid, fder)
260#endif
261        IF (ierr.NE.NF_NOERR) THEN
262          PRINT*, 'phyetat0: Lecture echouee pour <fder>'
263          CALL abort
264        ENDIF
265      ENDIF
266      xmin = 1.0E+20
267      xmax = -1.0E+20
[778]268      DO i = 1, ngridmx
[3]269         xmin = MIN(fder(i),xmin)
270         xmax = MAX(fder(i),xmax)
271      ENDDO
272      PRINT*,'Derive des flux fder:', xmin, xmax
273
274c
[1301]275c Lecture derive des flux IR:
276c
277      ierr = NF_INQ_VARID (nid, "dlw", nvarid)
278      IF (ierr.NE.NF_NOERR) THEN
279         PRINT*, 'phyetat0: Le champ <dlw> est absent'
280         PRINT*, 'mis a zero'
281         dlw = 0.
282      ELSE
283#ifdef NC_DOUBLE
284        ierr = NF_GET_VAR_DOUBLE(nid, nvarid, dlw)
285#else
286        ierr = NF_GET_VAR_REAL(nid, nvarid, dlw)
287#endif
288        IF (ierr.NE.NF_NOERR) THEN
289          PRINT*, 'phyetat0: Lecture echouee pour <dlw>'
290          CALL abort
291        ENDIF
292      ENDIF
293      xmin = 1.0E+20
294      xmax = -1.0E+20
295      DO i = 1, ngridmx
296         xmin = MIN(dlw(i),xmin)
297         xmax = MAX(dlw(i),xmax)
298      ENDDO
299      PRINT*,'Derive des flux IR dlw:', xmin, xmax
300
301c
302c Lecture rayonnement IR vers le bas au sol:
303c
304      ierr = NF_INQ_VARID (nid, "sollwdown", nvarid)
305      IF (ierr.NE.NF_NOERR) THEN
306         PRINT*, 'phyetat0: Le champ <sollwdown> est absent'
307         PRINT*, 'mis a zero'
308         sollwdown = 0.
309      ELSE
310#ifdef NC_DOUBLE
311        ierr = NF_GET_VAR_DOUBLE(nid, nvarid, sollwdown)
312#else
313        ierr = NF_GET_VAR_REAL(nid, nvarid, sollwdown)
314#endif
315        IF (ierr.NE.NF_NOERR) THEN
316          PRINT*, 'phyetat0: Lecture echouee pour <sollwdown>'
317          CALL abort
318        ENDIF
319      ENDIF
320      xmin = 1.0E+20
321      xmax = -1.0E+20
322      DO i = 1, ngridmx
323         xmin = MIN(sollwdown(i),xmin)
324         xmax = MAX(sollwdown(i),xmax)
325      ENDDO
326      PRINT*,'Flux IR vers le bas au sol sollwdown:', xmin, xmax
327
328c
[3]329c Lecture du rayonnement net au sol:
330c
331      ierr = NF_INQ_VARID (nid, "RADS", nvarid)
332      IF (ierr.NE.NF_NOERR) THEN
333         PRINT*, 'phyetat0: Le champ <RADS> est absent'
334         CALL abort
335      ENDIF
336#ifdef NC_DOUBLE
337      ierr = NF_GET_VAR_DOUBLE(nid, nvarid, radsol)
338#else
339      ierr = NF_GET_VAR_REAL(nid, nvarid, radsol)
340#endif
341      IF (ierr.NE.NF_NOERR) THEN
342         PRINT*, 'phyetat0: Lecture echouee pour <RADS>'
343         CALL abort
344      ENDIF
345      xmin = 1.0E+20
346      xmax = -1.0E+20
[778]347      DO i = 1, ngridmx
[3]348         xmin = MIN(radsol(i),xmin)
349         xmax = MAX(radsol(i),xmax)
350      ENDDO
351      PRINT*,'Rayonnement net au sol radsol:', xmin, xmax
[808]352
[3]353c
[808]354c Lecture des parametres orographie sous-maille:
355c
356      ierr = NF_INQ_VARID (nid, "ZMEA", nvarid)
357      IF (ierr.NE.NF_NOERR) THEN
358         PRINT*, 'phyetat0: Le champ <ZMEA> est absent'
359         PRINT*, 'mis a zero'
360         zmea = 0.
361      ELSE
362#ifdef NC_DOUBLE
363       ierr = NF_GET_VAR_DOUBLE(nid, nvarid, zmea)
364#else
365       ierr = NF_GET_VAR_REAL(nid, nvarid, zmea)
366#endif
367       IF (ierr.NE.NF_NOERR) THEN
368         PRINT*, 'phyetat0: Lecture echouee pour <ZMEA>'
369         CALL abort
370       ENDIF
371      ENDIF
372      xmin = 1.0E+20
373      xmax = -1.0E+20
374      DO i = 1, ngridmx
375         xmin = MIN(zmea(i),xmin)
376         xmax = MAX(zmea(i),xmax)
377      ENDDO
378      PRINT*,'zmea:', xmin, xmax
379c
380      ierr = NF_INQ_VARID (nid, "ZSTD", nvarid)
381      IF (ierr.NE.NF_NOERR) THEN
382         PRINT*, 'phyetat0: Le champ <ZSTD> est absent'
383         PRINT*, 'mis a zero'
384         zstd = 0.
385      ELSE
386#ifdef NC_DOUBLE
387       ierr = NF_GET_VAR_DOUBLE(nid, nvarid, zstd)
388#else
389       ierr = NF_GET_VAR_REAL(nid, nvarid, zstd)
390#endif
391       IF (ierr.NE.NF_NOERR) THEN
392         PRINT*, 'phyetat0: Lecture echouee pour <ZSTD>'
393         CALL abort
394       ENDIF
395      ENDIF
396      xmin = 1.0E+20
397      xmax = -1.0E+20
398      DO i = 1, ngridmx
399         xmin = MIN(zstd(i),xmin)
400         xmax = MAX(zstd(i),xmax)
401      ENDDO
402      PRINT*,'zstd:', xmin, xmax
403c
404      ierr = NF_INQ_VARID (nid, "ZSIG", nvarid)
405      IF (ierr.NE.NF_NOERR) THEN
406         PRINT*, 'phyetat0: Le champ <ZSIG> est absent'
407         PRINT*, 'mis a zero'
408         zsig = 0.
409      ELSE
410#ifdef NC_DOUBLE
411       ierr = NF_GET_VAR_DOUBLE(nid, nvarid, zsig)
412#else
413       ierr = NF_GET_VAR_REAL(nid, nvarid, zsig)
414#endif
415       IF (ierr.NE.NF_NOERR) THEN
416         PRINT*, 'phyetat0: Lecture echouee pour <ZSIG>'
417         CALL abort
418       ENDIF
419      ENDIF
420      xmin = 1.0E+20
421      xmax = -1.0E+20
422      DO i = 1, ngridmx
423         xmin = MIN(zsig(i),xmin)
424         xmax = MAX(zsig(i),xmax)
425      ENDDO
426      PRINT*,'zsig:', xmin, xmax
427c
428      ierr = NF_INQ_VARID (nid, "ZGAM", nvarid)
429      IF (ierr.NE.NF_NOERR) THEN
430         PRINT*, 'phyetat0: Le champ <ZGAM> est absent'
431         PRINT*, 'mis a zero'
432         zgam = 0.
433      ELSE
434#ifdef NC_DOUBLE
435       ierr = NF_GET_VAR_DOUBLE(nid, nvarid, zgam)
436#else
437       ierr = NF_GET_VAR_REAL(nid, nvarid, zgam)
438#endif
439       IF (ierr.NE.NF_NOERR) THEN
440         PRINT*, 'phyetat0: Lecture echouee pour <ZGAM>'
441         CALL abort
442       ENDIF
443      ENDIF
444      xmin = 1.0E+20
445      xmax = -1.0E+20
446      DO i = 1, ngridmx
447         xmin = MIN(zgam(i),xmin)
448         xmax = MAX(zgam(i),xmax)
449      ENDDO
450      PRINT*,'zgam:', xmin, xmax
451c
452      ierr = NF_INQ_VARID (nid, "ZTHE", nvarid)
453      IF (ierr.NE.NF_NOERR) THEN
454         PRINT*, 'phyetat0: Le champ <ZTHE> est absent'
455         PRINT*, 'mis a zero'
456         zthe = 0.
457      ELSE
458#ifdef NC_DOUBLE
459       ierr = NF_GET_VAR_DOUBLE(nid, nvarid, zthe)
460#else
461       ierr = NF_GET_VAR_REAL(nid, nvarid, zthe)
462#endif
463       IF (ierr.NE.NF_NOERR) THEN
464         PRINT*, 'phyetat0: Lecture echouee pour <ZTHE>'
465         CALL abort
466       ENDIF
467      ENDIF
468      xmin = 1.0E+20
469      xmax = -1.0E+20
470      DO i = 1, ngridmx
471         xmin = MIN(zthe(i),xmin)
472         xmax = MAX(zthe(i),xmax)
473      ENDDO
474      PRINT*,'zthe:', xmin, xmax
475c
476      ierr = NF_INQ_VARID (nid, "ZPIC", nvarid)
477      IF (ierr.NE.NF_NOERR) THEN
478         PRINT*, 'phyetat0: Le champ <ZPIC> est absent'
479         PRINT*, 'mis a zero'
480         zpic = 0.
481      ELSE
482#ifdef NC_DOUBLE
483       ierr = NF_GET_VAR_DOUBLE(nid, nvarid, zpic)
484#else
485       ierr = NF_GET_VAR_REAL(nid, nvarid, zpic)
486#endif
487       IF (ierr.NE.NF_NOERR) THEN
488         PRINT*, 'phyetat0: Lecture echouee pour <ZPIC>'
489         CALL abort
490       ENDIF
491      ENDIF
492      xmin = 1.0E+20
493      xmax = -1.0E+20
494      DO i = 1, ngridmx
495         xmin = MIN(zpic(i),xmin)
496         xmax = MAX(zpic(i),xmax)
497      ENDDO
498      PRINT*,'zpic:', xmin, xmax
499c
500      ierr = NF_INQ_VARID (nid, "ZVAL", nvarid)
501      IF (ierr.NE.NF_NOERR) THEN
502         PRINT*, 'phyetat0: Le champ <ZVAL> est absent'
503         PRINT*, 'mis a zero'
504         zval = 0.
505      ELSE
506#ifdef NC_DOUBLE
507       ierr = NF_GET_VAR_DOUBLE(nid, nvarid, zval)
508#else
509       ierr = NF_GET_VAR_REAL(nid, nvarid, zval)
510#endif
511       IF (ierr.NE.NF_NOERR) THEN
512         PRINT*, 'phyetat0: Lecture echouee pour <ZVAL>'
513         CALL abort
514       ENDIF
515      ENDIF
516      xmin = 1.0E+20
517      xmax = -1.0E+20
518      DO i = 1, ngridmx
519         xmin = MIN(zval(i),xmin)
520         xmax = MAX(zval(i),xmax)
521      ENDDO
522      PRINT*,'zval:', xmin, xmax
523c
[3]524c Fermer le fichier:
525c
526      ierr = NF_CLOSE(nid)
527c
528      RETURN
[808]529      END
530
Note: See TracBrowser for help on using the repository browser.