source: LMDZ4/trunk/libf/phylmd/phys_state_var_mod.F90 @ 952

Last change on this file since 952 was 952, checked in by lmdzadmin, 17 years ago

On deplace variables SAVE de physiq dans phys_state_var_mod
IM

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 15.7 KB
Line 
1      MODULE phys_state_var_mod
2! Variables sauvegardees pour le startphy.nc
3!======================================================================
4!
5!
6!======================================================================
7! Declaration des variables
8      USE dimphy
9      INTEGER, PARAMETER :: nlevSTD=17
10      INTEGER, PARAMETER :: nout=3
11      INTEGER, PARAMETER :: napisccp=1
12      REAL, SAVE :: dtime, co2_ppm_etat0, solaire_etat0
13      REAL, ALLOCATABLE, SAVE :: rlat(:), rlon(:), pctsrf(:,:)
14      REAL, ALLOCATABLE, SAVE :: ftsol(:,:)
15      character(len=6), SAVE :: ocean
16      logical, SAVE :: ok_veget
17      REAL, ALLOCATABLE, SAVE :: falb1(:,:), falb2(:,:)
18      REAL, ALLOCATABLE, SAVE :: rain_fall(:), snow_fall(:)
19      REAL, ALLOCATABLE, SAVE :: solsw(:), sollw(:)
20      REAL, ALLOCATABLE, SAVE :: radsol(:)
21!clesphy0 param physiq
22!
23! Parametres de l'Orographie a l'Echelle Sous-Maille (OESM):
24!
25      REAL, ALLOCATABLE, SAVE :: zmea(:), zstd(:), zsig(:), zgam(:)
26      REAL, ALLOCATABLE, SAVE :: zthe(:), zpic(:), zval(:)
27!     REAL tabcntr0(100)
28      REAL, ALLOCATABLE, SAVE :: rugoro(:)
29      REAL, ALLOCATABLE, SAVE :: t_ancien(:,:), q_ancien(:,:)
30      LOGICAL, SAVE :: ancien_ok
31      REAL, ALLOCATABLE, SAVE :: clwcon(:,:),rnebcon(:,:)
32      REAL, ALLOCATABLE, SAVE :: ratqs(:,:)
33      REAL, ALLOCATABLE, SAVE :: pbl_tke(:,:,:) ! turb kinetic energy
34      REAL, ALLOCATABLE, SAVE :: zmax0(:), f0(:) !
35      REAL, ALLOCATABLE, SAVE :: ema_work1(:,:), ema_work2(:,:)
36      REAL, ALLOCATABLE, SAVE :: entr_therm(:,:), fm_therm(:,:)
37      REAL, ALLOCATABLE, SAVE :: detr_therm(:,:)
38!IM 150408
39!     pour phsystoke avec thermiques
40      REAL,ALLOCATABLE,SAVE :: clwcon0th(:,:),rnebcon0th(:,:)
41! radiation outputs
42      REAL,ALLOCATABLE,SAVE :: swdn0(:,:), swdn(:,:)
43      REAL,ALLOCATABLE,SAVE :: swup0(:,:), swup(:,:)
44      REAL,ALLOCATABLE,SAVE :: SWdn200clr(:), SWdn200(:)
45      REAL,ALLOCATABLE,SAVE :: SWup200clr(:), SWup200(:)
46      REAL,ALLOCATABLE,SAVE :: lwdn0(:,:), lwdn(:,:)
47      REAL,ALLOCATABLE,SAVE :: lwup0(:,:), lwup(:,:)
48      REAL,ALLOCATABLE,SAVE :: LWdn200clr(:), LWdn200(:)
49      REAL,ALLOCATABLE,SAVE :: LWup200clr(:), LWup200(:)
50      REAL,ALLOCATABLE,SAVE :: LWdnTOA(:), LWdnTOAclr(:)
51! pressure level
52      REAL,ALLOCATABLE,SAVE :: tsumSTD(:,:,:)
53      REAL,ALLOCATABLE,SAVE :: usumSTD(:,:,:), vsumSTD(:,:,:)
54      REAL,ALLOCATABLE,SAVE :: wsumSTD(:,:,:), phisumSTD(:,:,:)
55      REAL,ALLOCATABLE,SAVE :: qsumSTD(:,:,:), rhsumSTD(:,:,:)
56      REAL,ALLOCATABLE,SAVE :: tnondef(:,:,:)
57      REAL,ALLOCATABLE,SAVE :: uvsumSTD(:,:,:)
58      REAL,ALLOCATABLE,SAVE :: vqsumSTD(:,:,:)
59      REAL,ALLOCATABLE,SAVE :: vTsumSTD(:,:,:)
60      REAL,ALLOCATABLE,SAVE :: wqsumSTD(:,:,:)
61      REAL,ALLOCATABLE,SAVE :: vphisumSTD(:,:,:)
62      REAL,ALLOCATABLE,SAVE :: wTsumSTD(:,:,:)
63      REAL,ALLOCATABLE,SAVE :: u2sumSTD(:,:,:)
64      REAL,ALLOCATABLE,SAVE :: v2sumSTD(:,:,:)
65      REAL,ALLOCATABLE,SAVE :: T2sumSTD(:,:,:)
66      INTEGER,ALLOCATABLE,SAVE :: seed_old(:,:)
67      REAL,ALLOCATABLE,SAVE :: zuthe(:),zvthe(:)
68      REAL,ALLOCATABLE,SAVE :: alb_neig(:)
69!cloud base mass flux
70      REAL,ALLOCATABLE,SAVE :: ema_workcbmf(:), ema_cbmf(:)
71!cloud base pressure & cloud top pressure
72      REAL,ALLOCATABLE,SAVE :: ema_pcb(:), ema_pct(:)
73      REAL,ALLOCATABLE,SAVE :: Ma(:,:)        ! undilute upward mass flux
74      REAL,ALLOCATABLE,SAVE :: qcondc(:,:)    ! in-cld water content from convect
75      REAL,ALLOCATABLE,SAVE :: wd(:) ! sb
76      REAL,ALLOCATABLE,SAVE :: sigd(:)
77!
78      REAL,ALLOCATABLE,SAVE :: cin(:)
79! ftd : differential heating between wake and environment
80      REAL,ALLOCATABLE,SAVE :: ftd(:,:)
81! fqd : differential moistening between wake and environment
82      REAL,ALLOCATABLE,SAVE :: fqd(:,:)     
83!34EK
84! -- Variables de controle de ALE et ALP
85!ALE : Energie disponible pour soulevement : utilisee par la
86!      convection d'Emanuel pour le declenchement et la regulation
87      REAL,ALLOCATABLE,SAVE :: ALE(:)
88!ALP : Puissance  disponible pour soulevement
89      REAL,ALLOCATABLE,SAVE :: ALP(:)
90!
91! nouvelles variables pour le couplage convection-couche limite
92      REAL,ALLOCATABLE,SAVE :: Ale_bl(:)
93      REAL,ALLOCATABLE,SAVE :: Alp_bl(:)
94      INTEGER,ALLOCATABLE,SAVE :: lalim_conv(:)
95      REAL,ALLOCATABLE,SAVE :: wght_th(:,:)
96!
97! variables de la wake
98! wake_deltat : ecart de temperature avec la zone non perturbee
99! wake_deltaq : ecart d'humidite avec la zone non perturbee
100! wake_Cstar  : vitesse d'etalement de la poche
101! wake_s      : fraction surfacique occupee par la poche froide
102! wake_fip    : Gust Front Impinging power - ALP
103! dt_wake, dq_wake: LS tendencies due to wake
104      REAL,ALLOCATABLE,SAVE :: wake_deltat(:,:)
105      REAL,ALLOCATABLE,SAVE :: wake_deltaq(:,:)
106      REAL,ALLOCATABLE,SAVE :: wake_Cstar(:)
107      REAL,ALLOCATABLE,SAVE :: wake_s(:)
108      REAL,ALLOCATABLE,SAVE :: wake_fip(:)
109      REAL,ALLOCATABLE,SAVE :: dt_wake(:,:)
110      REAL,ALLOCATABLE,SAVE :: dq_wake(:,:)
111!
112! pfrac_impa : Produits des coefs lessivage impaction
113! pfrac_nucl : Produits des coefs lessivage nucleation
114! pfrac_1nucl: Produits des coefs lessi nucl (alpha = 1)
115      REAL,ALLOCATABLE,SAVE :: pfrac_impa(:,:), pfrac_nucl(:,:)
116      REAL,ALLOCATABLE,SAVE :: pfrac_1nucl(:,:)
117!
118      REAL,ALLOCATABLE,SAVE :: total_rain(:), nday_rain(:) 
119      REAL,ALLOCATABLE,SAVE :: paire_ter(:)
120! albsol1: albedo du sol total pour SW visible
121! albsol2: albedo du sol total pour SW proche IR
122      REAL,ALLOCATABLE,SAVE :: albsol1(:), albsol2(:)
123      REAL,ALLOCATABLE,SAVE :: wo(:,:)
124!
125! heat : chauffage solaire
126! heat0: chauffage solaire ciel clair
127! cool : refroidissement infrarouge
128! cool0 : refroidissement infrarouge ciel clair
129! sollwdown : downward LW flux at surface
130! sollwdownclr : downward CS LW flux at surface
131! toplwdown : downward CS LW flux at TOA
132! toplwdownclr : downward CS LW flux at TOA
133      REAL,ALLOCATABLE,SAVE :: clwcon0(:,:),rnebcon0(:,:)
134      REAL,ALLOCATABLE,SAVE :: heat(:,:)   
135      REAL,ALLOCATABLE,SAVE :: heat0(:,:)
136      REAL,ALLOCATABLE,SAVE :: cool(:,:)
137      REAL,ALLOCATABLE,SAVE :: cool0(:,:)
138      REAL,ALLOCATABLE,SAVE :: topsw(:), toplw(:)
139      REAL,ALLOCATABLE,SAVE :: sollwdown(:)
140      REAL,ALLOCATABLE,SAVE :: sollwdownclr(:)
141      REAL,ALLOCATABLE,SAVE :: toplwdown(:)
142      REAL,ALLOCATABLE,SAVE :: toplwdownclr(:)
143      REAL,ALLOCATABLE,SAVE :: topsw0(:),toplw0(:),solsw0(:),sollw0(:)
144      REAL,ALLOCATABLE,SAVE :: albpla(:)
145! pbase : cloud base pressure
146! bbase : cloud base buoyancy
147      REAL,ALLOCATABLE,SAVE :: cape(:)
148      REAL,ALLOCATABLE,SAVE :: pbase(:)
149      REAL,ALLOCATABLE,SAVE :: bbase(:)
150!
151      REAL,SAVE,ALLOCATABLE :: zqasc(:,:)
152      INTEGER,ALLOCATABLE,SAVE :: ibas_con(:), itop_con(:)
153      REAL,SAVE,ALLOCATABLE :: rain_con(:)
154      REAL,SAVE,ALLOCATABLE :: snow_con(:)
155!
156! sulfate_pi : SO4 aerosol concentration [ug/m3] (pre-industrial value)
157
158      REAL,SAVE,ALLOCATABLE :: sulfate_pi(:, :)
159      REAL,SAVE,ALLOCATABLE :: rlonPOS(:)
160      REAL,SAVE,ALLOCATABLE :: newsst(:)
161      REAL,SAVE,ALLOCATABLE :: u10m(:,:), v10m(:,:)
162!
163! ok_ade=T -ADE=topswad-topsw
164! ok_aie=T ->
165!       ok_ade=T -AIE=topswai-topswad
166!        ok_ade=F -AIE=topswai-topsw
167!
168!topswad, solswad : Aerosol direct effect
169      REAL,SAVE,ALLOCATABLE :: topswad(:), solswad(:)
170!topswai, solswai : Aerosol indirect effect
171      REAL,SAVE,ALLOCATABLE :: topswai(:), solswai(:)
172#ifdef INCA_AER
173#ifdef CPP_COUPLE
174! topswad_inca, solswad_inca : Aerosol direct effect
175      REAL,SAVE,ALLOCATABLE :: topswad_inca(:), solswad_inca(:)
176! topswad0_inca, solswad0_inca : Aerosol direct effect
177      REAL,SAVE,ALLOCATABLE :: topswad0_inca(:), solswad0_inca(:)
178!topswai_inca, solswai_inca : Aerosol indirect effect
179      REAL,SAVE,ALLOCATABLE :: topswai_inca(:), solswai_inca(:)
180      REAL,SAVE,ALLOCATABLE :: topsw_inca(:,:), solsw_inca(:,:)
181      REAL,SAVE,ALLOCATABLE :: topsw0_inca(:,:), solsw0_inca(:,:)
182      REAL,SAVE,ALLOCATABLE :: tau_inca(:,:,:,:)
183      REAL,SAVE,ALLOCATABLE :: piz_inca(:,:,:,:)
184      REAL,SAVE,ALLOCATABLE :: cg_inca(:,:,:,:)
185      REAL,SAVE,ALLOCATABLE :: ccm(:,:,:)
186#endif
187#endif
188      REAL,SAVE,ALLOCATABLE :: tau_ae(:,:,:), piz_ae(:,:,:)
189      REAL,SAVE,ALLOCATABLE :: cg_ae(:,:,:)
190
191CONTAINS
192
193!======================================================================
194SUBROUTINE phys_state_var_init
195use dimphy
196IMPLICIT NONE
197#include "indicesol.h"
198
199      ALLOCATE(rlat(klon), rlon(klon))
200      ALLOCATE(pctsrf(klon,nbsrf))
201      ALLOCATE(ftsol(klon,nbsrf))
202      ALLOCATE(falb1(klon,nbsrf))
203      ALLOCATE(falb2(klon,nbsrf))
204      ALLOCATE(rain_fall(klon))
205      ALLOCATE(snow_fall(klon))
206      ALLOCATE(solsw(klon), sollw(klon))
207      ALLOCATE(radsol(klon))
208      ALLOCATE(zmea(klon), zstd(klon), zsig(klon), zgam(klon))
209      ALLOCATE(zthe(klon), zpic(klon), zval(klon))
210
211      ALLOCATE(rugoro(klon))
212      ALLOCATE(t_ancien(klon,klev), q_ancien(klon,klev))
213      ALLOCATE(clwcon(klon,klev),rnebcon(klon,klev))
214      ALLOCATE(ratqs(klon,klev))
215      ALLOCATE(pbl_tke(klon,klev+1,nbsrf))
216      ALLOCATE(zmax0(klon), f0(klon))
217      ALLOCATE(ema_work1(klon,klev), ema_work2(klon,klev))
218      ALLOCATE(entr_therm(klon,klev), fm_therm(klon,klev+1))
219      ALLOCATE(detr_therm(klon,klev))
220!     pour phsystoke avec thermiques
221      ALLOCATE(clwcon0th(klon,klev),rnebcon0th(klon,klev))
222! radiation outputs
223      ALLOCATE(swdn0(klon,klevp1), swdn(klon,klevp1))
224      ALLOCATE(swup0(klon,klevp1), swup(klon,klevp1))
225      ALLOCATE(lwdn0(klon,klevp1), lwdn(klon,klevp1))
226      ALLOCATE(lwup0(klon,klevp1), lwup(klon,klevp1))
227      ALLOCATE(SWdn200clr(klon), SWdn200(klon))
228      ALLOCATE(SWup200clr(klon), SWup200(klon))
229      ALLOCATE(LWdn200clr(klon), LWdn200(klon))
230      ALLOCATE(LWup200clr(klon), LWup200(klon))
231      ALLOCATE(LWdnTOA(klon), LWdnTOAclr(klon))
232! pressure level
233      ALLOCATE(tsumSTD(klon,nlevSTD,nout))
234      ALLOCATE(usumSTD(klon,nlevSTD,nout), vsumSTD(klon,nlevSTD,nout))
235      ALLOCATE(wsumSTD(klon,nlevSTD,nout), phisumSTD(klon,nlevSTD,nout))
236      ALLOCATE(qsumSTD(klon,nlevSTD,nout), rhsumSTD(klon,nlevSTD,nout))
237      ALLOCATE(tnondef(klon,nlevSTD,nout))
238      ALLOCATE(uvsumSTD(klon,nlevSTD,nout))
239      ALLOCATE(vqsumSTD(klon,nlevSTD,nout))
240      ALLOCATE(vTsumSTD(klon,nlevSTD,nout))
241      ALLOCATE(wqsumSTD(klon,nlevSTD,nout))
242      ALLOCATE(vphisumSTD(klon,nlevSTD,nout))
243      ALLOCATE(wTsumSTD(klon,nlevSTD,nout))
244      ALLOCATE(u2sumSTD(klon,nlevSTD,nout))
245      ALLOCATE(v2sumSTD(klon,nlevSTD,nout))
246      ALLOCATE(T2sumSTD(klon,nlevSTD,nout))
247      ALLOCATE(seed_old(klon,napisccp))
248      ALLOCATE(zuthe(klon),zvthe(klon))
249      ALLOCATE(alb_neig(klon))
250!cloud base mass flux
251      ALLOCATE(ema_workcbmf(klon), ema_cbmf(klon))
252!cloud base pressure & cloud top pressure
253      ALLOCATE(ema_pcb(klon), ema_pct(klon))
254!
255      ALLOCATE(Ma(klon,klev))
256      ALLOCATE(qcondc(klon,klev))
257      ALLOCATE(wd(klon))
258      ALLOCATE(sigd(klon))
259      ALLOCATE(cin(klon), ALE(klon), ALP(klon))
260      ALLOCATE(ftd(klon,klev), fqd(klon,klev))
261      ALLOCATE(Ale_bl(klon))
262      ALLOCATE(Alp_bl(klon))
263      ALLOCATE(lalim_conv(klon))
264      ALLOCATE(wght_th(klon,klev))
265      ALLOCATE(wake_deltat(klon,klev), wake_deltaq(klon,klev))
266      ALLOCATE(wake_Cstar(klon), wake_s(klon), wake_fip(klon))
267      ALLOCATE(dt_wake(klon,klev), dq_wake(klon,klev))
268      ALLOCATE(pfrac_impa(klon,klev), pfrac_nucl(klon,klev))
269      ALLOCATE(pfrac_1nucl(klon,klev))
270      ALLOCATE(total_rain(klon), nday_rain(klon))
271      ALLOCATE(paire_ter(klon))
272      ALLOCATE(albsol1(klon), albsol2(klon))
273      ALLOCATE(wo(klon,klev))
274      ALLOCATE(clwcon0(klon,klev),rnebcon0(klon,klev))
275      ALLOCATE(heat(klon,klev), heat0(klon,klev))
276      ALLOCATE(cool(klon,klev), cool0(klon,klev))
277      ALLOCATE(topsw(klon), toplw(klon))
278      ALLOCATE(sollwdown(klon), sollwdownclr(klon))
279      ALLOCATE(toplwdown(klon), toplwdownclr(klon))
280      ALLOCATE(topsw0(klon),toplw0(klon),solsw0(klon),sollw0(klon))
281      ALLOCATE(albpla(klon))
282      ALLOCATE(cape(klon))
283      ALLOCATE(pbase(klon),bbase(klon))
284      ALLOCATE(zqasc(klon,klev))
285      ALLOCATE(ibas_con(klon), itop_con(klon))
286      ALLOCATE(rain_con(klon), snow_con(klon))
287!
288      ALLOCATE(sulfate_pi(klon, klev))
289      ALLOCATE(rlonPOS(klon))
290      ALLOCATE(newsst(klon))
291      ALLOCATE(u10m(klon,nbsrf), v10m(klon,nbsrf))
292      ALLOCATE(topswad(klon), solswad(klon))
293      ALLOCATE(topswai(klon), solswai(klon))
294#ifdef INCA_AER
295#ifdef CPP_COUPLE
296      ALLOCATE(topswad_inca(klon), solswad_inca(klon))
297      ALLOCATE(topswad0_inca(klon), solswad0_inca(klon))
298      ALLOCATE(topswai_inca(klon), solswai_inca(klon))
299      ALLOCATE(topsw_inca(klon,9), solsw_inca(klon,9))
300      ALLOCATE(topsw0_inca(klon,9), solsw0_inca(klon,9))
301      ALLOCATE(tau_inca(klon,klev,9,2))
302      ALLOCATE(piz_inca(klon,klev,9,2))
303      ALLOCATE(cg_inca(klon,klev,9,2))
304      ALLOCATE(ccm(klon,klev,2))
305#endif
306#endif
307      ALLOCATE(tau_ae(klon,klev,2), piz_ae(klon,klev,2))
308      ALLOCATE(cg_ae(klon,klev,2))
309
310END SUBROUTINE phys_state_var_init
311
312!======================================================================
313SUBROUTINE phys_state_var_end
314use dimphy
315IMPLICIT NONE
316#include "indicesol.h"
317
318      deallocate(rlat, rlon, pctsrf, ftsol, falb1, falb2)
319      deallocate(rain_fall, snow_fall, solsw, sollw, radsol)
320      deallocate(zmea, zstd, zsig, zgam)
321      deallocate(zthe, zpic, zval)
322      deallocate(rugoro, t_ancien, q_ancien, clwcon, rnebcon)
323      deallocate(ratqs, pbl_tke)
324      deallocate(zmax0, f0)
325      deallocate(ema_work1, ema_work2)
326      deallocate(entr_therm, fm_therm)
327      deallocate(detr_therm)
328      deallocate(clwcon0th, rnebcon0th)
329! radiation outputs
330      deallocate(swdn0, swdn)
331      deallocate(swup0, swup)
332      deallocate(lwdn0, lwdn)
333      deallocate(lwup0, lwup)
334      deallocate(SWdn200clr, SWdn200)
335      deallocate(SWup200clr, SWup200)
336      deallocate(LWdn200clr, LWdn200)
337      deallocate(LWup200clr, LWup200)
338      deallocate(LWdnTOA, LWdnTOAclr)
339! pressure level
340      deallocate(tsumSTD)
341      deallocate(usumSTD, vsumSTD)
342      deallocate(wsumSTD, phisumSTD)
343      deallocate(tnondef)
344      deallocate(uvsumSTD)
345      deallocate(vqsumSTD)
346      deallocate(vTsumSTD)
347      deallocate(wqsumSTD)
348      deallocate(vphisumSTD)
349      deallocate(wTsumSTD)
350      deallocate(u2sumSTD)
351      deallocate(v2sumSTD)
352      deallocate(T2sumSTD)
353      deallocate(seed_old)
354      deallocate(zuthe, zvthe)
355      deallocate(alb_neig)
356      deallocate(ema_workcbmf, ema_cbmf)
357      deallocate(ema_pcb, ema_pct)
358      deallocate(Ma, qcondc)
359      deallocate(wd, sigd)
360      deallocate(cin, ALE, ALP)
361      deallocate(ftd, fqd)
362      deallocate(Ale_bl, Alp_bl)
363      deallocate(lalim_conv, wght_th)
364      deallocate(wake_deltat, wake_deltaq)
365      deallocate(wake_Cstar, wake_s, wake_fip)
366      deallocate(dt_wake, dq_wake)
367      deallocate(pfrac_impa, pfrac_nucl)
368      deallocate(pfrac_1nucl)
369      deallocate(total_rain, nday_rain)
370      deallocate(paire_ter)
371      deallocate(albsol1, albsol2)
372      deallocate(wo)
373      deallocate(clwcon0,rnebcon0)
374      deallocate(heat, heat0)
375      deallocate(cool, cool0)
376      deallocate(topsw, toplw)
377      deallocate(sollwdown, sollwdownclr)
378      deallocate(toplwdown, toplwdownclr)
379      deallocate(topsw0,toplw0,solsw0,sollw0)
380      deallocate(albpla)
381      deallocate(cape)
382      deallocate(pbase,bbase)
383      deallocate(zqasc)
384      deallocate(ibas_con, itop_con)
385      deallocate(rain_con, snow_con)
386!
387      deallocate(sulfate_pi)
388      deallocate(rlonPOS)
389      deallocate(newsst)
390      deallocate(u10m, v10m)
391      deallocate(topswad, solswad)
392      deallocate(topswai, solswai)
393#ifdef INCA_AER
394#ifdef CPP_COUPLE
395      deallocate(topswad_inca, solswad_inca)
396      deallocate(topswad0_inca, solswad0_inca)
397      deallocate(topswai_inca, solswai_inca)
398      deallocate(topsw_inca, solsw_inca)
399      deallocate(topsw0_inca, solsw0_inca)
400      deallocate(tau_inca)
401      deallocate(piz_inca)
402      deallocate(cg_inca)
403      deallocate(ccm)
404#endif
405#endif
406      deallocate(tau_ae, piz_ae)
407      deallocate(cg_ae)
408 
409END SUBROUTINE phys_state_var_end
410
411      END MODULE phys_state_var_mod
Note: See TracBrowser for help on using the repository browser.