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
Line 
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,
9     .           fder,dlw, sollwdown, radsol,
10     .    zmea, zstd, zsig, zgam, zthe, zpic, zval,
11     .           tabcntr0)
12c======================================================================
13c Auteur(s) Z.X. Li (LMD/CNRS) date: 19930818
14c Objet: Lecture de l'etat initial pour la physique
15c======================================================================
16      use dimphy
17      IMPLICIT none
18#include "dimensions.h"
19#include "netcdf.inc"
20#include "dimsoil.h"
21c======================================================================
22      integer ngridmx
23      parameter (ngridmx=(2+(jjm-1)*iim - 1/jjm))
24
25      CHARACTER*(*) fichnom
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)
34      real dlw(ngridmx)
35      real sollwdown(ngridmx)
36      REAL zmea(ngridmx), zstd(ngridmx)
37      REAL zsig(ngridmx), zgam(ngridmx), zthe(ngridmx)
38      REAL zpic(ngridmx), zval(ngridmx)
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
121         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, tsol)
122#else
123         ierr = NF_GET_VAR_REAL(nid, nvarid, tsol)
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
131         DO i = 1, ngridmx
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"
150         DO i=1, ngridmx
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
165
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
187         DO i = 1, ngridmx
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
215      DO i = 1, ngridmx
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
241      DO i = 1, ngridmx
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
268      DO i = 1, ngridmx
269         xmin = MIN(fder(i),xmin)
270         xmax = MAX(fder(i),xmax)
271      ENDDO
272      PRINT*,'Derive des flux fder:', xmin, xmax
273
274c
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
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
347      DO i = 1, ngridmx
348         xmin = MIN(radsol(i),xmin)
349         xmax = MAX(radsol(i),xmax)
350      ENDDO
351      PRINT*,'Rayonnement net au sol radsol:', xmin, xmax
352
353c
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
524c Fermer le fichier:
525c
526      ierr = NF_CLOSE(nid)
527c
528      RETURN
529      END
530
Note: See TracBrowser for help on using the repository browser.