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

Contents of /trunk/Sources/phylmd/phyredem.f

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.21