source: trunk/LMDZ.COMMON/libf/dynphy_lonlat/phyvenus/readstartphy.F @ 1540

Last change on this file since 1540 was 1530, checked in by emillour, 9 years ago

Venus and Titan GCMs:
Updates in the physics to keep up with updates in LMDZ5 (up to
LMDZ5 trunk, rev 2350) concerning dynamics/physics separation:

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