source: trunk/LMDZ.COMMON/libf/dynlonlat_phylonlat/phytitan/readstartphy.F @ 1530

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