source: trunk/LMDZ.TITAN/libf/phytitan/readstartphy.F @ 1517

Last change on this file since 1517 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: 12.8 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,
9     .           fder,radsol,
[1055]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======================================================================
[102]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)
[3]30cIM BEG alblw
[778]31      REAL alblw(ngridmx)
[3]32cIM END alblw
[778]33      REAL radsol(ngridmx)
34      REAL sollw(ngridmx)
35      real solsw(ngridmx)
36      real fder(ngridmx)
[1055]37      REAL zmea(ngridmx), zstd(ngridmx)
38      REAL zsig(ngridmx), zgam(ngridmx), zthe(ngridmx)
39      REAL zpic(ngridmx), zval(ngridmx)
[3]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
[778]122         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, tsol)
[3]123#else
[778]124         ierr = NF_GET_VAR_REAL(nid, nvarid, tsol)
[3]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
[778]132         DO i = 1, ngridmx
[3]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"
[778]151         DO i=1, ngridmx
[3]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
[778]166
[3]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
[778]188         DO i = 1, ngridmx
[3]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
[778]216      DO i = 1, ngridmx
[3]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
[778]242      DO i = 1, ngridmx
[3]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
[778]269      DO i = 1, ngridmx
[3]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
[778]294      DO i = 1, ngridmx
[3]295         xmin = MIN(radsol(i),xmin)
296         xmax = MAX(radsol(i),xmax)
297      ENDDO
298      PRINT*,'Rayonnement net au sol radsol:', xmin, xmax
[1055]299
[3]300c
[1055]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
[3]471c Fermer le fichier:
472c
473      ierr = NF_CLOSE(nid)
474c
475      RETURN
[1055]476      END
477
Note: See TracBrowser for help on using the repository browser.