source: LMDZ5/branches/LMDZ5V2.0-dev/libf/phylmd/phyredem.F @ 1456

Last change on this file since 1456 was 1456, checked in by musat, 14 years ago

phyetat0, phyredem: correction dimension verticale pbl_tke: pbl_tke(:,1:klev+1,:)
physiq: pour pouvoir fixer la longitude solaire avec la nouvelle orbite
JYG/IM

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 9.2 KB
Line 
1!
2! $Id: phyredem.F 1456 2010-11-22 13:16:44Z musat $
3!
4c
5      SUBROUTINE phyredem (fichnom)
6
7      USE dimphy
8      USE mod_grid_phy_lmdz
9      USE mod_phys_lmdz_para
10      USE fonte_neige_mod,  ONLY : fonte_neige_final
11      USE pbl_surface_mod,  ONLY : pbl_surface_final
12      USE phys_state_var_mod
13      USE iostart 
14      USE traclmdz_mod, ONLY : traclmdz_to_restart
15      USE infotrac
16      USE control_mod
17
18      IMPLICIT none
19c======================================================================
20c Auteur(s) Z.X. Li (LMD/CNRS) date: 19930818
21c Objet: Ecriture de l'etat de redemarrage pour la physique
22c======================================================================
23#include "netcdf.inc"
24#include "indicesol.h"
25#include "dimsoil.h"
26#include "clesphys.h"
27#include "temps.h"
28#include "thermcell.h"
29#include "compbl.h"
30c======================================================================
31      CHARACTER*(*) fichnom
32
33c les variables globales ecrites dans le fichier restart
34
35     
36      REAL tsoil(klon,nsoilmx,nbsrf)
37      REAL tslab(klon), seaice(klon)
38      REAL qsurf(klon,nbsrf)
39      REAL qsol(klon)
40      REAL snow(klon,nbsrf)
41      REAL evap(klon,nbsrf)
42      real fder(klon)
43      REAL frugs(klon,nbsrf)
44      REAL agesno(klon,nbsrf)
45      REAL run_off_lic_0(klon)
46      REAL trs(klon,nbtr)
47c
48      INTEGER nid, nvarid, idim1, idim2, idim3
49      INTEGER ierr
50      INTEGER length
51      PARAMETER (length=100)
52      REAL tab_cntrl(length)
53c
54      INTEGER isoil, nsrf
55      CHARACTER (len=7) :: str7
56      CHARACTER (len=2) :: str2
57      INTEGER           :: it, iiq
58     
59c======================================================================
60c
61c Get variables which will be written to restart file from module
62c pbl_surface_mod
63      CALL pbl_surface_final(qsol, fder, snow, qsurf,
64     $     evap, frugs, agesno, tsoil)
65
66c Get a variable calculated in module fonte_neige_mod
67      CALL fonte_neige_final(run_off_lic_0)
68
69c======================================================================
70
71      CALL open_restartphy(fichnom)
72     
73      DO ierr = 1, length
74         tab_cntrl(ierr) = 0.0
75      ENDDO
76      tab_cntrl(1) = dtime
77      tab_cntrl(2) = radpas
78c co2_ppm : current value of atmospheric CO2
79      tab_cntrl(3) = co2_ppm
80      tab_cntrl(4) = solaire
81      tab_cntrl(5) = iflag_con
82      tab_cntrl(6) = nbapp_rad
83
84      IF( cycle_diurne ) tab_cntrl( 7 ) = 1.
85      IF(   soil_model ) tab_cntrl( 8 ) = 1.
86      IF(     new_oliq ) tab_cntrl( 9 ) = 1.
87      IF(     ok_orodr ) tab_cntrl(10 ) = 1.
88      IF(     ok_orolf ) tab_cntrl(11 ) = 1.
89
90      tab_cntrl(13) = day_end
91      tab_cntrl(14) = annee_ref
92      tab_cntrl(15) = itau_phy
93
94c co2_ppm0 : initial value of atmospheric CO2
95      tab_cntrl(16) = co2_ppm0
96c
97      CALL put_var("controle","Parametres de controle",tab_cntrl)
98c
99      CALL put_field("longitude",
100     .               "Longitudes de la grille physique",rlon)
101     
102      CALL put_field("latitude","Latitudes de la grille physique",rlat)
103
104c
105C PB ajout du masque terre/mer
106C
107      CALL put_field("masque","masque terre mer",zmasq)
108
109c BP ajout des fraction de chaque sous-surface
110C
111C 1. fraction de terre
112C
113      CALL put_field("FTER","fraction de continent",pctsrf(:,is_ter))
114C
115C 2. Fraction de glace de terre
116C
117      CALL put_field("FLIC","fraction glace de terre",pctsrf(:,is_lic))
118C
119C 3. fraction ocean
120C
121      CALL put_field("FOCE","fraction ocean",pctsrf(:,is_oce))
122C
123C 4. Fraction glace de mer
124C
125      CALL put_field("FSIC","fraction glace mer",pctsrf(:,is_sic))
126C
127C
128c
129      DO nsrf = 1, nbsrf
130        IF (nsrf.LE.99) THEN
131          WRITE(str2,'(i2.2)') nsrf
132          CALL put_field("TS"//str2,"Temperature de surface No."//str2,
133     .                    ftsol(:,nsrf))
134        ELSE
135          PRINT*, "Trop de sous-mailles"
136          CALL abort
137        ENDIF
138      ENDDO
139c
140      DO nsrf = 1, nbsrf
141        DO isoil=1, nsoilmx
142          IF (isoil.LE.99 .AND. nsrf.LE.99) THEN
143            WRITE(str7,'(i2.2,"srf",i2.2)') isoil,nsrf
144            CALL put_field("Tsoil"//str7,"Temperature du sol No."//str7,
145     .                     tsoil(:,isoil,nsrf))
146          ELSE
147            PRINT*, "Trop de couches"
148            CALL abort
149          ENDIF
150        ENDDO
151      ENDDO
152c
153      DO nsrf = 1, nbsrf
154        IF (nsrf.LE.99) THEN
155          WRITE(str2,'(i2.2)') nsrf
156          CALL put_field("QS"//str2,"Humidite de surface No."//str2,
157     .                   qsurf(:,nsrf))
158        ELSE
159          PRINT*, "Trop de sous-mailles"
160          CALL abort
161        ENDIF
162      END DO
163C
164      CALL put_field("QSOL","Eau dans le sol (mm)",qsol)
165c
166      DO nsrf = 1, nbsrf
167        IF (nsrf.LE.99) THEN
168          WRITE(str2,'(i2.2)') nsrf
169          CALL put_field("ALBE"//str2,"albedo de surface No."//str2,
170     .                   falb1(:,nsrf))
171        ELSE
172          PRINT*, "Trop de sous-mailles"
173          CALL abort
174        ENDIF
175      ENDDO
176
177      DO nsrf = 1, nbsrf
178        IF (nsrf.LE.99) THEN
179          WRITE(str2,'(i2.2)') nsrf
180          CALL put_field("ALBLW"//str2,"albedo LW de surface No."//str2,
181     .                   falb2(:,nsrf))
182        ELSE
183          PRINT*, "Trop de sous-mailles"
184          CALL abort
185        ENDIF
186      ENDDO
187c
188c
189      DO nsrf = 1, nbsrf
190        IF (nsrf.LE.99) THEN
191          WRITE(str2,'(i2.2)') nsrf
192          CALL put_field("EVAP"//str2,"Evaporation de surface No."//str2
193     .                   ,evap(:,nsrf))
194        ELSE
195          PRINT*, "Trop de sous-mailles"
196          CALL abort
197        ENDIF
198      ENDDO
199
200c
201      DO nsrf = 1, nbsrf
202        IF (nsrf.LE.99) THEN
203          WRITE(str2,'(i2.2)') nsrf
204          CALL put_field("SNOW"//str2,"Neige de surface No."//str2,
205     .                   snow(:,nsrf))
206        ELSE
207          PRINT*, "Trop de sous-mailles"
208          CALL abort
209        ENDIF
210      ENDDO
211
212c
213      CALL put_field("RADS","Rayonnement net a la surface",radsol)
214c
215      CALL put_field("solsw","Rayonnement solaire a la surface",solsw)
216c
217      CALL put_field("sollw","Rayonnement IF a la surface",sollw)
218c
219      CALL put_field("fder","Derive de flux",fder)
220c
221      CALL put_field("rain_f","precipitation liquide",rain_fall)
222c
223      CALL put_field("snow_f", "precipitation solide",snow_fall)
224c
225      DO nsrf = 1, nbsrf
226        IF (nsrf.LE.99) THEN
227        WRITE(str2,'(i2.2)') nsrf
228          CALL put_field("RUG"//str2,"rugosite de surface No."//str2,
229     .         frugs(:,nsrf))
230        ELSE
231          PRINT*, "Trop de sous-mailles"
232          CALL abort
233        ENDIF
234      ENDDO
235c
236      DO nsrf = 1, nbsrf
237        IF (nsrf.LE.99) THEN
238            WRITE(str2,'(i2.2)') nsrf
239            CALL put_field("AGESNO"//str2,
240     .                     "Age de la neige surface No."//str2,
241     .                     agesno(:,nsrf))
242        ELSE
243            PRINT*, "Trop de sous-mailles"
244            CALL abort
245        ENDIF
246      ENDDO
247c
248      CALL put_field("ZMEA","ZMEA",zmea)
249c
250      CALL put_field("ZSTD","ZSTD",zstd)
251     
252      CALL put_field("ZSIG","ZSIG",zsig)
253     
254      CALL put_field("ZGAM","ZGAM",zgam)
255     
256      CALL put_field("ZTHE","ZTHE",zthe)
257     
258      CALL put_field("ZPIC","ZPIC",zpic)
259     
260      CALL put_field("ZVAL","ZVAL",zval)
261     
262      CALL put_field("RUGSREL","RUGSREL",rugoro)
263     
264      CALL put_field("TANCIEN","TANCIEN",t_ancien)
265     
266      CALL put_field("QANCIEN","QANCIEN",q_ancien)
267     
268      CALL put_field("RUGMER","Longueur de rugosite sur mer",
269     .               frugs(:,is_oce))
270     
271      CALL put_field("CLWCON","Eau liquide convective",clwcon(:,1))
272     
273      CALL put_field("RNEBCON","Nebulosite convective",rnebcon(:,1))
274     
275      CALL put_field("RATQS", "Ratqs",ratqs(:,1))
276c
277c run_off_lic_0
278c
279      CALL put_field("RUNOFFLIC0","Runofflic0",run_off_lic_0)
280c
281c
282!!!!!!!!!!!!!!!!!!!! DEB TKE PBL !!!!!!!!!!!!!!!!!!!!!!!!!
283c
284      IF (iflag_pbl>1) then
285        DO nsrf = 1, nbsrf
286          IF (nsrf.LE.99) THEN
287            WRITE(str2,'(i2.2)') nsrf
288            CALL put_field("TKE"//str2,"Energ. Cineti. Turb."//str2,
289     .                     pbl_tke(:,1:klev+1,nsrf))
290          ELSE
291            PRINT*, "Trop de sous-mailles"
292            CALL abort
293          ENDIF
294        ENDDO
295      ENDIF
296
297!!!!!!!!!!!!!!!!!!!! FIN TKE PBL !!!!!!!!!!!!!!!!!!!!!!!!!
298cIM ajout zmax0, f0, ema_work1, ema_work2
299cIM wake_deltat, wake_deltaq, wake_s, wake_cstar, wake_pe, wake_fip
300     
301      CALL put_field("ZMAX0","ZMAX0",zmax0)
302     
303      CALL put_field("F0","F0",f0)
304     
305      CALL put_field("EMA_WORK1","EMA_WORK1",ema_work1)
306     
307      CALL put_field("EMA_WORK2","EMA_WORK2",ema_work2)
308     
309c wake_deltat
310      CALL put_field("WAKE_DELTAT","WAKE_DELTAT",wake_deltat)
311
312      CALL put_field("WAKE_DELTAQ","WAKE_DELTAQ",wake_deltaq)
313     
314      CALL put_field("WAKE_S","WAKE_S",wake_s)
315     
316      CALL put_field("WAKE_CSTAR","WAKE_CSTAR",wake_cstar)
317     
318      CALL put_field("WAKE_PE","WAKE_PE",wake_pe)
319
320      CALL put_field("WAKE_FIP","WAKE_FIP",wake_fip)
321
322c thermiques
323
324      CALL put_field("FM_THERM","FM_THERM",fm_therm)
325
326      CALL put_field("ENTR_THERM","ENTR_THERM",entr_therm)
327
328      CALL put_field("DETR_THERM","DETR_THERM",detr_therm)
329
330! trs from traclmdz_mod
331      IF (type_trac == 'lmdz') THEN
332         CALL traclmdz_to_restart(trs)
333         DO it=1,nbtr
334            iiq=niadv(it+2)
335            CALL put_field("trs_"//tname(iiq),"",trs(:,it))
336         END DO
337      END IF
338
339      CALL close_restartphy
340!$OMP BARRIER
341      RETURN
342      END
Note: See TracBrowser for help on using the repository browser.