/[lmdze]/trunk/phylmd/phyredem.f
ViewVC logotype

Contents of /trunk/phylmd/phyredem.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 20 - (show annotations)
Wed Oct 15 16:19:57 2008 UTC (15 years, 7 months ago) by guez
Original Path: trunk/libf/phylmd/phyredem.f90
File size: 13676 byte(s)
Deleted argument "presnivs" of "physiq", "ini_histhf", "ini_histhf3d",
"ini_histday", "ini_histins", "ini_histrac", "phytrac". Access it from
"comvert" instead.

Replaced calls to NetCDF Fortran 77 interface by calls to Fortran 90
interface or to NetCDF95.

Procedure "gr_phy_write_3d" now works with a variable of arbitrary
size in the second dimension.

Annotated use statements with "only" clause.

Replaced calls to NetCDF interface version 2 by calls to Fortran 90
interface in "guide.f90" and "read_reanalyse.f".

In "write_histrac", replaced calls to "gr_fi_ecrit" by calls to
"gr_phy_write_2d" and "gr_phy_write_3d".

1 module phyredem_m
2
3 IMPLICIT NONE
4
5 contains
6
7 SUBROUTINE phyredem(fichnom, rlat, rlon, pctsrf, tsol, tsoil, tslab, &
8 seaice, qsurf, qsol, snow, albedo, alblw, evap, rain_fall,&
9 snow_fall, solsw, sollw, fder, radsol, frugs, agesno, zmea,&
10 zstd, zsig, zgam, zthe, zpic, zval, t_ancien, q_ancien,&
11 rnebcon, ratqs, clwcon, run_off_lic_0)
12
13 ! From phylmd/phyredem.F, v 1.3 2005/05/25 13:10:09
14 ! Auteur(s) Z.X. Li (LMD/CNRS) date: 19930818
15 ! Objet: Ecriture de l'etat de démarrage ou redémarrage pour la physique
16
17 USE indicesol, ONLY : is_lic, is_oce, is_sic, is_ter, nbsrf
18 USE dimphy, ONLY : klev, klon, zmasq
19 USE dimsoil, ONLY : nsoilmx
20 USE temps, ONLY : itau_phy
21 USE netcdf95, ONLY : nf95_create, nf95_put_att, nf95_def_dim, &
22 nf95_def_var, nf95_enddef, nf95_redef
23 USE netcdf, ONLY : nf90_clobber, nf90_global, nf90_float, nf90_put_var, &
24 nf90_close
25
26 CHARACTER(len=*) fichnom
27 REAL, INTENT (IN) :: rlat(klon), rlon(klon)
28 REAL :: tsol(klon, nbsrf)
29 REAL :: tsoil(klon, nsoilmx, nbsrf)
30
31 REAL :: tslab(klon), seaice(klon) !IM "slab" ocean
32 REAL :: qsurf(klon, nbsrf)
33 REAL :: qsol(klon)
34 REAL :: snow(klon, nbsrf)
35 REAL :: albedo(klon, nbsrf)
36
37 REAL :: alblw(klon, nbsrf)
38
39 REAL :: evap(klon, nbsrf)
40 REAL :: rain_fall(klon)
41 REAL :: snow_fall(klon)
42 REAL :: solsw(klon)
43 REAL :: sollw(klon)
44 REAL :: fder(klon)
45 REAL :: radsol(klon)
46 REAL :: frugs(klon, nbsrf)
47 REAL :: agesno(klon, nbsrf)
48 REAL :: zmea(klon)
49 REAL, intent(in):: zstd(klon)
50 REAL, intent(in):: zsig(klon)
51 REAL :: zgam(klon)
52 REAL :: zthe(klon)
53 REAL :: zpic(klon)
54 REAL :: zval(klon)
55 REAL :: pctsrf(klon, nbsrf)
56 REAL :: t_ancien(klon, klev), q_ancien(klon, klev)
57 REAL :: clwcon(klon, klev), rnebcon(klon, klev), ratqs(klon, klev)
58 REAL :: run_off_lic_0(klon)
59
60 INTEGER :: nid, nvarid, idim2, idim3
61 INTEGER :: ierr
62
63 INTEGER :: isoil, nsrf
64 CHARACTER (7) :: str7
65 CHARACTER (2) :: str2
66
67 !------------------------------------------------------------
68
69 PRINT *, 'Call sequence information: phyredem'
70 CALL nf95_create(fichnom, nf90_clobber, nid)
71
72 call nf95_put_att(nid, nf90_global, 'title', &
73 'Fichier redémarrage physique')
74 call nf95_put_att(nid, nf90_global, "itau_phy", itau_phy)
75
76 call nf95_def_dim(nid, 'points_physiques', klon, idim2)
77 call nf95_def_dim(nid, 'horizon_vertical', klon*klev, idim3)
78
79 call nf95_def_var(nid, 'longitude', nf90_float, idim2, nvarid)
80 call nf95_put_att(nid, nvarid, 'title', &
81 'Longitudes de la grille physique')
82 call nf95_enddef(nid)
83 ierr = nf90_put_var(nid, nvarid, rlon)
84
85 call nf95_redef(nid)
86 call nf95_def_var(nid, 'latitude', nf90_float, idim2, nvarid)
87 call nf95_put_att(nid, nvarid, 'title', &
88 'Latitudes de la grille physique')
89 call nf95_enddef(nid)
90 ierr = nf90_put_var(nid, nvarid, rlat)
91
92 ! PB ajout du masque terre/mer
93
94 call nf95_redef(nid)
95 call nf95_def_var(nid, 'masque', nf90_float, idim2, nvarid)
96 call nf95_put_att(nid, nvarid, 'title', 'masque terre mer')
97 call nf95_enddef(nid)
98 ierr = nf90_put_var(nid, nvarid, zmasq)
99 ! BP ajout des fraction de chaque sous-surface
100
101 ! 1. fraction de terre
102
103 call nf95_redef(nid)
104 call nf95_def_var(nid, 'FTER', nf90_float, idim2, nvarid)
105 call nf95_put_att(nid, nvarid, 'title', 'fraction de continent')
106 call nf95_enddef(nid)
107 ierr = nf90_put_var(nid, nvarid, pctsrf(:, is_ter))
108
109 ! 2. Fraction de glace de terre
110
111 call nf95_redef(nid)
112 call nf95_def_var(nid, 'FLIC', nf90_float, idim2, nvarid)
113 call nf95_put_att(nid, nvarid, 'title', 'fraction glace de terre')
114 call nf95_enddef(nid)
115 ierr = nf90_put_var(nid, nvarid, pctsrf(:, is_lic))
116
117 ! 3. fraction ocean
118
119 call nf95_redef(nid)
120 call nf95_def_var(nid, 'FOCE', nf90_float, idim2, nvarid)
121 call nf95_put_att(nid, nvarid, 'title', 'fraction ocean')
122 call nf95_enddef(nid)
123 ierr = nf90_put_var(nid, nvarid, pctsrf(:, is_oce))
124
125 ! 4. Fraction glace de mer
126
127 call nf95_redef(nid)
128 call nf95_def_var(nid, 'FSIC', nf90_float, idim2, nvarid)
129 call nf95_put_att(nid, nvarid, 'title', 'fraction glace mer')
130 call nf95_enddef(nid)
131 ierr = nf90_put_var(nid, nvarid, pctsrf(:, is_sic))
132
133
134
135 DO nsrf = 1, nbsrf
136 IF (nsrf<=99) THEN
137 WRITE (str2, '(i2.2)') nsrf
138 call nf95_redef(nid)
139 call nf95_def_var(nid, 'TS'//str2, nf90_float, idim2, nvarid)
140 call nf95_put_att(nid, nvarid, 'title', &
141 'Temperature de surface No.'//str2)
142 call nf95_enddef(nid)
143 ELSE
144 PRINT *, 'Trop de sous-mailles'
145 STOP 1
146 END IF
147 ierr = nf90_put_var(nid, nvarid, tsol(:, nsrf))
148 END DO
149
150 DO nsrf = 1, nbsrf
151 DO isoil = 1, nsoilmx
152 IF (isoil<=99 .AND. nsrf<=99) THEN
153 WRITE (str7, '(i2.2, "srf", i2.2)') isoil, nsrf
154 call nf95_redef(nid)
155 call nf95_def_var(nid, 'Tsoil'//str7, nf90_float, idim2, nvarid)
156 call nf95_put_att(nid, nvarid, 'title', &
157 'Temperature du sol No.'//str7)
158 call nf95_enddef(nid)
159 ELSE
160 PRINT *, 'Trop de couches'
161 STOP 1
162 END IF
163 ierr = nf90_put_var(nid, nvarid, tsoil(:, isoil, nsrf))
164 END DO
165 END DO
166
167 !IM "slab" ocean
168 call nf95_redef(nid)
169 call nf95_def_var(nid, 'TSLAB', nf90_float, idim2, nvarid)
170 call nf95_put_att(nid, nvarid, 'title', &
171 'Ecart de la SST (pour slab-ocean)')
172 call nf95_enddef(nid)
173 ierr = nf90_put_var(nid, nvarid, tslab)
174
175 call nf95_redef(nid)
176 call nf95_def_var(nid, 'SEAICE', nf90_float, idim2, nvarid)
177 call nf95_put_att(nid, nvarid, 'title', &
178 'Glace de mer kg/m2 (pour slab-ocean)')
179 call nf95_enddef(nid)
180 ierr = nf90_put_var(nid, nvarid, seaice)
181
182 DO nsrf = 1, nbsrf
183 IF (nsrf<=99) THEN
184 WRITE (str2, '(i2.2)') nsrf
185 call nf95_redef(nid)
186 call nf95_def_var(nid, 'QS'//str2, nf90_float, idim2, nvarid)
187 call nf95_put_att(nid, nvarid, 'title', &
188 'Humidite de surface No.'//str2)
189 call nf95_enddef(nid)
190 ELSE
191 PRINT *, 'Trop de sous-mailles'
192 STOP 1
193 END IF
194 ierr = nf90_put_var(nid, nvarid, qsurf(:, nsrf))
195 END DO
196
197 call nf95_redef(nid)
198 call nf95_def_var(nid, 'QSOL', nf90_float, idim2, nvarid)
199 call nf95_put_att(nid, nvarid, 'title', 'Eau dans le sol (mm)')
200 call nf95_enddef(nid)
201 ierr = nf90_put_var(nid, nvarid, qsol)
202
203 DO nsrf = 1, nbsrf
204 IF (nsrf<=99) THEN
205 WRITE (str2, '(i2.2)') nsrf
206 call nf95_redef(nid)
207 call nf95_def_var(nid, 'ALBE'//str2, nf90_float, idim2, nvarid)
208 call nf95_put_att(nid, nvarid, 'title', &
209 'albedo de surface No.'//str2)
210 call nf95_enddef(nid)
211 ELSE
212 PRINT *, 'Trop de sous-mailles'
213 STOP 1
214 END IF
215 ierr = nf90_put_var(nid, nvarid, albedo(:, nsrf))
216 END DO
217
218 !IM BEG albedo LW
219 DO nsrf = 1, nbsrf
220 IF (nsrf<=99) THEN
221 WRITE (str2, '(i2.2)') nsrf
222 call nf95_redef(nid)
223 call nf95_def_var(nid, 'ALBLW'//str2, nf90_float, idim2, nvarid)
224 call nf95_put_att(nid, nvarid, 'title', &
225 'albedo LW de surface No.'//str2)
226 call nf95_enddef(nid)
227 ELSE
228 PRINT *, 'Trop de sous-mailles'
229 STOP 1
230 END IF
231 ierr = nf90_put_var(nid, nvarid, alblw(:, nsrf))
232 END DO
233 !IM END albedo LW
234
235 DO nsrf = 1, nbsrf
236 IF (nsrf<=99) THEN
237 WRITE (str2, '(i2.2)') nsrf
238 call nf95_redef(nid)
239 call nf95_def_var(nid, 'EVAP'//str2, nf90_float, idim2, nvarid)
240 call nf95_put_att(nid, nvarid, 'title', &
241 'Evaporation de surface No.'//str2)
242 call nf95_enddef(nid)
243 ELSE
244 PRINT *, 'Trop de sous-mailles'
245 STOP 1
246 END IF
247 ierr = nf90_put_var(nid, nvarid, evap(:, nsrf))
248 END DO
249
250
251 DO nsrf = 1, nbsrf
252 IF (nsrf<=99) THEN
253 WRITE (str2, '(i2.2)') nsrf
254 call nf95_redef(nid)
255 call nf95_def_var(nid, 'SNOW'//str2, nf90_float, idim2, nvarid)
256 call nf95_put_att(nid, nvarid, 'title', &
257 'Neige de surface No.'//str2)
258 call nf95_enddef(nid)
259 ELSE
260 PRINT *, 'Trop de sous-mailles'
261 STOP 1
262 END IF
263 ierr = nf90_put_var(nid, nvarid, snow(:, nsrf))
264 END DO
265
266
267 call nf95_redef(nid)
268 call nf95_def_var(nid, 'RADS', nf90_float, idim2, nvarid)
269 call nf95_put_att(nid, nvarid, 'title', &
270 'Rayonnement net a la surface')
271 call nf95_enddef(nid)
272 ierr = nf90_put_var(nid, nvarid, radsol)
273
274 call nf95_redef(nid)
275 call nf95_def_var(nid, 'solsw', nf90_float, idim2, nvarid)
276 call nf95_put_att(nid, nvarid, 'title', &
277 'Rayonnement solaire a la surface')
278 call nf95_enddef(nid)
279 ierr = nf90_put_var(nid, nvarid, solsw)
280
281 call nf95_redef(nid)
282 call nf95_def_var(nid, 'sollw', nf90_float, idim2, nvarid)
283 call nf95_put_att(nid, nvarid, 'title', &
284 'Rayonnement IF a la surface')
285 call nf95_enddef(nid)
286 ierr = nf90_put_var(nid, nvarid, sollw)
287
288 call nf95_redef(nid)
289 call nf95_def_var(nid, 'fder', nf90_float, idim2, nvarid)
290 call nf95_put_att(nid, nvarid, 'title', 'Derive de flux')
291 call nf95_enddef(nid)
292 ierr = nf90_put_var(nid, nvarid, fder)
293
294 call nf95_redef(nid)
295 call nf95_def_var(nid, 'rain_f', nf90_float, idim2, nvarid)
296 call nf95_put_att(nid, nvarid, 'title', 'precipitation liquide')
297 call nf95_enddef(nid)
298 ierr = nf90_put_var(nid, nvarid, rain_fall)
299
300 call nf95_redef(nid)
301 call nf95_def_var(nid, 'snow_f', nf90_float, idim2, nvarid)
302 call nf95_put_att(nid, nvarid, 'title', 'precipitation solide')
303 call nf95_enddef(nid)
304 ierr = nf90_put_var(nid, nvarid, snow_fall)
305
306 DO nsrf = 1, nbsrf
307 IF (nsrf<=99) THEN
308 WRITE (str2, '(i2.2)') nsrf
309 call nf95_redef(nid)
310 call nf95_def_var(nid, 'RUG'//str2, nf90_float, idim2, nvarid)
311 call nf95_put_att(nid, nvarid, 'title', &
312 'rugosite de surface No.'//str2)
313 call nf95_enddef(nid)
314 ELSE
315 PRINT *, 'Trop de sous-mailles'
316 STOP 1
317 END IF
318 ierr = nf90_put_var(nid, nvarid, frugs(:, nsrf))
319 END DO
320
321 DO nsrf = 1, nbsrf
322 IF (nsrf<=99) THEN
323 WRITE (str2, '(i2.2)') nsrf
324 call nf95_redef(nid)
325 call nf95_def_var(nid, 'AGESNO'//str2, nf90_float, idim2, nvarid)
326 call nf95_put_att(nid, nvarid, 'title', &
327 'Age de la neige surface No.'//str2)
328 call nf95_enddef(nid)
329 ELSE
330 PRINT *, 'Trop de sous-mailles'
331 STOP 1
332 END IF
333 ierr = nf90_put_var(nid, nvarid, agesno(:, nsrf))
334 END DO
335
336 call nf95_redef(nid)
337 call nf95_def_var(nid, 'ZMEA', nf90_float, idim2, nvarid)
338 call nf95_enddef(nid)
339 ierr = nf90_put_var(nid, nvarid, zmea)
340
341 call nf95_redef(nid)
342 call nf95_def_var(nid, 'ZSTD', nf90_float, idim2, nvarid)
343 call nf95_enddef(nid)
344 ierr = nf90_put_var(nid, nvarid, zstd)
345 call nf95_redef(nid)
346 call nf95_def_var(nid, 'ZSIG', nf90_float, idim2, nvarid)
347 call nf95_enddef(nid)
348 ierr = nf90_put_var(nid, nvarid, zsig)
349 call nf95_redef(nid)
350 call nf95_def_var(nid, 'ZGAM', nf90_float, idim2, nvarid)
351 call nf95_enddef(nid)
352 ierr = nf90_put_var(nid, nvarid, zgam)
353 call nf95_redef(nid)
354 call nf95_def_var(nid, 'ZTHE', nf90_float, idim2, nvarid)
355 call nf95_enddef(nid)
356 ierr = nf90_put_var(nid, nvarid, zthe)
357 call nf95_redef(nid)
358 call nf95_def_var(nid, 'ZPIC', nf90_float, idim2, nvarid)
359 call nf95_enddef(nid)
360 ierr = nf90_put_var(nid, nvarid, zpic)
361 call nf95_redef(nid)
362 call nf95_def_var(nid, 'ZVAL', nf90_float, idim2, nvarid)
363 call nf95_enddef(nid)
364 ierr = nf90_put_var(nid, nvarid, zval)
365
366 call nf95_redef(nid)
367 call nf95_def_var(nid, 'TANCIEN', nf90_float, idim3, nvarid)
368 call nf95_enddef(nid)
369 ierr = nf90_put_var(nid, nvarid, t_ancien)
370
371 call nf95_redef(nid)
372 call nf95_def_var(nid, 'QANCIEN', nf90_float, idim3, nvarid)
373 call nf95_enddef(nid)
374 ierr = nf90_put_var(nid, nvarid, q_ancien)
375
376 call nf95_redef(nid)
377 call nf95_def_var(nid, 'RUGMER', nf90_float, idim2, nvarid)
378 call nf95_put_att(nid, nvarid, 'title', &
379 'Longueur de rugosite sur mer')
380 call nf95_enddef(nid)
381 ierr = nf90_put_var(nid, nvarid, frugs(:, is_oce))
382
383 call nf95_redef(nid)
384 call nf95_def_var(nid, 'CLWCON', nf90_float, idim2, nvarid)
385 call nf95_put_att(nid, nvarid, 'title', 'Eau liquide convective')
386 call nf95_enddef(nid)
387 ierr = nf90_put_var(nid, nvarid, clwcon)
388
389 call nf95_redef(nid)
390 call nf95_def_var(nid, 'RNEBCON', nf90_float, idim2, nvarid)
391 call nf95_put_att(nid, nvarid, 'title', 'Nebulosite convective')
392 call nf95_enddef(nid)
393 ierr = nf90_put_var(nid, nvarid, rnebcon)
394
395 call nf95_redef(nid)
396 call nf95_def_var(nid, 'RATQS', nf90_float, idim2, nvarid)
397 call nf95_put_att(nid, nvarid, 'title', 'Ratqs')
398 call nf95_enddef(nid)
399 ierr = nf90_put_var(nid, nvarid, ratqs)
400
401 ! run_off_lic_0
402
403 call nf95_redef(nid)
404 call nf95_def_var(nid, 'RUNOFFLIC0', nf90_float, idim2, nvarid)
405 call nf95_put_att(nid, nvarid, 'title', 'Runofflic0')
406 call nf95_enddef(nid)
407 ierr = nf90_put_var(nid, nvarid, run_off_lic_0)
408
409
410 ierr = nf90_close(nid)
411
412 END SUBROUTINE phyredem
413
414 end module phyredem_m

  ViewVC Help
Powered by ViewVC 1.1.21