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

Last change on this file since 958 was 955, checked in by lsce, 17 years ago

ACo+JG

Ajout du flag aerosol_couple :
false=lecture des sulfates dans un fichier(par defaut) - configuration existante
true=calcul des aerosol par INCA

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 15.6 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
173! topswad_inca, solswad_inca : Aerosol direct effect
174      REAL,SAVE,ALLOCATABLE :: topswad_inca(:), solswad_inca(:)
175! topswad0_inca, solswad0_inca : Aerosol direct effect
176      REAL,SAVE,ALLOCATABLE :: topswad0_inca(:), solswad0_inca(:)
177!topswai_inca, solswai_inca : Aerosol indirect effect
178      REAL,SAVE,ALLOCATABLE :: topswai_inca(:), solswai_inca(:)
179      REAL,SAVE,ALLOCATABLE :: topsw_inca(:,:), solsw_inca(:,:)
180      REAL,SAVE,ALLOCATABLE :: topsw0_inca(:,:), solsw0_inca(:,:)
181      REAL,SAVE,ALLOCATABLE :: tau_inca(:,:,:,:)
182      REAL,SAVE,ALLOCATABLE :: piz_inca(:,:,:,:)
183      REAL,SAVE,ALLOCATABLE :: cg_inca(:,:,:,:)
184      REAL,SAVE,ALLOCATABLE :: ccm(:,:,:)
185#endif
186      REAL,SAVE,ALLOCATABLE :: tau_ae(:,:,:), piz_ae(:,:,:)
187      REAL,SAVE,ALLOCATABLE :: cg_ae(:,:,:)
188
189CONTAINS
190
191!======================================================================
192SUBROUTINE phys_state_var_init
193use dimphy
194IMPLICIT NONE
195#include "indicesol.h"
196
197      ALLOCATE(rlat(klon), rlon(klon))
198      ALLOCATE(pctsrf(klon,nbsrf))
199      ALLOCATE(ftsol(klon,nbsrf))
200      ALLOCATE(falb1(klon,nbsrf))
201      ALLOCATE(falb2(klon,nbsrf))
202      ALLOCATE(rain_fall(klon))
203      ALLOCATE(snow_fall(klon))
204      ALLOCATE(solsw(klon), sollw(klon))
205      ALLOCATE(radsol(klon))
206      ALLOCATE(zmea(klon), zstd(klon), zsig(klon), zgam(klon))
207      ALLOCATE(zthe(klon), zpic(klon), zval(klon))
208
209      ALLOCATE(rugoro(klon))
210      ALLOCATE(t_ancien(klon,klev), q_ancien(klon,klev))
211      ALLOCATE(clwcon(klon,klev),rnebcon(klon,klev))
212      ALLOCATE(ratqs(klon,klev))
213      ALLOCATE(pbl_tke(klon,klev+1,nbsrf))
214      ALLOCATE(zmax0(klon), f0(klon))
215      ALLOCATE(ema_work1(klon,klev), ema_work2(klon,klev))
216      ALLOCATE(entr_therm(klon,klev), fm_therm(klon,klev+1))
217      ALLOCATE(detr_therm(klon,klev))
218!     pour phsystoke avec thermiques
219      ALLOCATE(clwcon0th(klon,klev),rnebcon0th(klon,klev))
220! radiation outputs
221      ALLOCATE(swdn0(klon,klevp1), swdn(klon,klevp1))
222      ALLOCATE(swup0(klon,klevp1), swup(klon,klevp1))
223      ALLOCATE(lwdn0(klon,klevp1), lwdn(klon,klevp1))
224      ALLOCATE(lwup0(klon,klevp1), lwup(klon,klevp1))
225      ALLOCATE(SWdn200clr(klon), SWdn200(klon))
226      ALLOCATE(SWup200clr(klon), SWup200(klon))
227      ALLOCATE(LWdn200clr(klon), LWdn200(klon))
228      ALLOCATE(LWup200clr(klon), LWup200(klon))
229      ALLOCATE(LWdnTOA(klon), LWdnTOAclr(klon))
230! pressure level
231      ALLOCATE(tsumSTD(klon,nlevSTD,nout))
232      ALLOCATE(usumSTD(klon,nlevSTD,nout), vsumSTD(klon,nlevSTD,nout))
233      ALLOCATE(wsumSTD(klon,nlevSTD,nout), phisumSTD(klon,nlevSTD,nout))
234      ALLOCATE(qsumSTD(klon,nlevSTD,nout), rhsumSTD(klon,nlevSTD,nout))
235      ALLOCATE(tnondef(klon,nlevSTD,nout))
236      ALLOCATE(uvsumSTD(klon,nlevSTD,nout))
237      ALLOCATE(vqsumSTD(klon,nlevSTD,nout))
238      ALLOCATE(vTsumSTD(klon,nlevSTD,nout))
239      ALLOCATE(wqsumSTD(klon,nlevSTD,nout))
240      ALLOCATE(vphisumSTD(klon,nlevSTD,nout))
241      ALLOCATE(wTsumSTD(klon,nlevSTD,nout))
242      ALLOCATE(u2sumSTD(klon,nlevSTD,nout))
243      ALLOCATE(v2sumSTD(klon,nlevSTD,nout))
244      ALLOCATE(T2sumSTD(klon,nlevSTD,nout))
245      ALLOCATE(seed_old(klon,napisccp))
246      ALLOCATE(zuthe(klon),zvthe(klon))
247      ALLOCATE(alb_neig(klon))
248!cloud base mass flux
249      ALLOCATE(ema_workcbmf(klon), ema_cbmf(klon))
250!cloud base pressure & cloud top pressure
251      ALLOCATE(ema_pcb(klon), ema_pct(klon))
252!
253      ALLOCATE(Ma(klon,klev))
254      ALLOCATE(qcondc(klon,klev))
255      ALLOCATE(wd(klon))
256      ALLOCATE(sigd(klon))
257      ALLOCATE(cin(klon), ALE(klon), ALP(klon))
258      ALLOCATE(ftd(klon,klev), fqd(klon,klev))
259      ALLOCATE(Ale_bl(klon))
260      ALLOCATE(Alp_bl(klon))
261      ALLOCATE(lalim_conv(klon))
262      ALLOCATE(wght_th(klon,klev))
263      ALLOCATE(wake_deltat(klon,klev), wake_deltaq(klon,klev))
264      ALLOCATE(wake_Cstar(klon), wake_s(klon), wake_fip(klon))
265      ALLOCATE(dt_wake(klon,klev), dq_wake(klon,klev))
266      ALLOCATE(pfrac_impa(klon,klev), pfrac_nucl(klon,klev))
267      ALLOCATE(pfrac_1nucl(klon,klev))
268      ALLOCATE(total_rain(klon), nday_rain(klon))
269      ALLOCATE(paire_ter(klon))
270      ALLOCATE(albsol1(klon), albsol2(klon))
271      ALLOCATE(wo(klon,klev))
272      ALLOCATE(clwcon0(klon,klev),rnebcon0(klon,klev))
273      ALLOCATE(heat(klon,klev), heat0(klon,klev))
274      ALLOCATE(cool(klon,klev), cool0(klon,klev))
275      ALLOCATE(topsw(klon), toplw(klon))
276      ALLOCATE(sollwdown(klon), sollwdownclr(klon))
277      ALLOCATE(toplwdown(klon), toplwdownclr(klon))
278      ALLOCATE(topsw0(klon),toplw0(klon),solsw0(klon),sollw0(klon))
279      ALLOCATE(albpla(klon))
280      ALLOCATE(cape(klon))
281      ALLOCATE(pbase(klon),bbase(klon))
282      ALLOCATE(zqasc(klon,klev))
283      ALLOCATE(ibas_con(klon), itop_con(klon))
284      ALLOCATE(rain_con(klon), snow_con(klon))
285!
286      ALLOCATE(sulfate_pi(klon, klev))
287      ALLOCATE(rlonPOS(klon))
288      ALLOCATE(newsst(klon))
289      ALLOCATE(u10m(klon,nbsrf), v10m(klon,nbsrf))
290      ALLOCATE(topswad(klon), solswad(klon))
291      ALLOCATE(topswai(klon), solswai(klon))
292#ifdef INCA
293      ALLOCATE(topswad_inca(klon), solswad_inca(klon))
294      ALLOCATE(topswad0_inca(klon), solswad0_inca(klon))
295      ALLOCATE(topswai_inca(klon), solswai_inca(klon))
296      ALLOCATE(topsw_inca(klon,9), solsw_inca(klon,9))
297      ALLOCATE(topsw0_inca(klon,9), solsw0_inca(klon,9))
298      ALLOCATE(tau_inca(klon,klev,9,2))
299      ALLOCATE(piz_inca(klon,klev,9,2))
300      ALLOCATE(cg_inca(klon,klev,9,2))
301      ALLOCATE(ccm(klon,klev,2))
302#endif
303      ALLOCATE(tau_ae(klon,klev,2), piz_ae(klon,klev,2))
304      ALLOCATE(cg_ae(klon,klev,2))
305
306END SUBROUTINE phys_state_var_init
307
308!======================================================================
309SUBROUTINE phys_state_var_end
310use dimphy
311IMPLICIT NONE
312#include "indicesol.h"
313
314      deallocate(rlat, rlon, pctsrf, ftsol, falb1, falb2)
315      deallocate(rain_fall, snow_fall, solsw, sollw, radsol)
316      deallocate(zmea, zstd, zsig, zgam)
317      deallocate(zthe, zpic, zval)
318      deallocate(rugoro, t_ancien, q_ancien, clwcon, rnebcon)
319      deallocate(ratqs, pbl_tke)
320      deallocate(zmax0, f0)
321      deallocate(ema_work1, ema_work2)
322      deallocate(entr_therm, fm_therm)
323      deallocate(detr_therm)
324      deallocate(clwcon0th, rnebcon0th)
325! radiation outputs
326      deallocate(swdn0, swdn)
327      deallocate(swup0, swup)
328      deallocate(lwdn0, lwdn)
329      deallocate(lwup0, lwup)
330      deallocate(SWdn200clr, SWdn200)
331      deallocate(SWup200clr, SWup200)
332      deallocate(LWdn200clr, LWdn200)
333      deallocate(LWup200clr, LWup200)
334      deallocate(LWdnTOA, LWdnTOAclr)
335! pressure level
336      deallocate(tsumSTD)
337      deallocate(usumSTD, vsumSTD)
338      deallocate(wsumSTD, phisumSTD)
339      deallocate(tnondef)
340      deallocate(uvsumSTD)
341      deallocate(vqsumSTD)
342      deallocate(vTsumSTD)
343      deallocate(wqsumSTD)
344      deallocate(vphisumSTD)
345      deallocate(wTsumSTD)
346      deallocate(u2sumSTD)
347      deallocate(v2sumSTD)
348      deallocate(T2sumSTD)
349      deallocate(seed_old)
350      deallocate(zuthe, zvthe)
351      deallocate(alb_neig)
352      deallocate(ema_workcbmf, ema_cbmf)
353      deallocate(ema_pcb, ema_pct)
354      deallocate(Ma, qcondc)
355      deallocate(wd, sigd)
356      deallocate(cin, ALE, ALP)
357      deallocate(ftd, fqd)
358      deallocate(Ale_bl, Alp_bl)
359      deallocate(lalim_conv, wght_th)
360      deallocate(wake_deltat, wake_deltaq)
361      deallocate(wake_Cstar, wake_s, wake_fip)
362      deallocate(dt_wake, dq_wake)
363      deallocate(pfrac_impa, pfrac_nucl)
364      deallocate(pfrac_1nucl)
365      deallocate(total_rain, nday_rain)
366      deallocate(paire_ter)
367      deallocate(albsol1, albsol2)
368      deallocate(wo)
369      deallocate(clwcon0,rnebcon0)
370      deallocate(heat, heat0)
371      deallocate(cool, cool0)
372      deallocate(topsw, toplw)
373      deallocate(sollwdown, sollwdownclr)
374      deallocate(toplwdown, toplwdownclr)
375      deallocate(topsw0,toplw0,solsw0,sollw0)
376      deallocate(albpla)
377      deallocate(cape)
378      deallocate(pbase,bbase)
379      deallocate(zqasc)
380      deallocate(ibas_con, itop_con)
381      deallocate(rain_con, snow_con)
382!
383      deallocate(sulfate_pi)
384      deallocate(rlonPOS)
385      deallocate(newsst)
386      deallocate(u10m, v10m)
387      deallocate(topswad, solswad)
388      deallocate(topswai, solswai)
389#ifdef INCA
390      deallocate(topswad_inca, solswad_inca)
391      deallocate(topswad0_inca, solswad0_inca)
392      deallocate(topswai_inca, solswai_inca)
393      deallocate(topsw_inca, solsw_inca)
394      deallocate(topsw0_inca, solsw0_inca)
395      deallocate(tau_inca)
396      deallocate(piz_inca)
397      deallocate(cg_inca)
398      deallocate(ccm)
399#endif
400      deallocate(tau_ae, piz_ae)
401      deallocate(cg_ae)
402 
403END SUBROUTINE phys_state_var_end
404
405      END MODULE phys_state_var_mod
Note: See TracBrowser for help on using the repository browser.