source: LMDZ6/branches/IPSL-CM6A-MR/libf/phylmd/phys_state_var_mod.F90 @ 5441

Last change on this file since 5441 was 4557, checked in by musat, 19 months ago

Correction diagnostic ndayrain branche IPSL-CM6A-MR
Ionela Musat

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 29.3 KB
Line 
1!
2! $Id: phys_state_var_mod.F90 4557 2023-06-01 14:44:02Z fhourdin $
3!
4      MODULE phys_state_var_mod
5! Variables sauvegardees pour le startphy.nc
6!======================================================================
7!
8!
9!======================================================================
10! Declaration des variables
11      USE dimphy
12      USE netcdf, only: nf90_fill_real
13      INTEGER, PARAMETER :: nlevSTD=17
14      INTEGER, PARAMETER :: nlevSTD8=8
15      INTEGER, PARAMETER :: nlevSTD3=3
16      INTEGER, PARAMETER :: nout=3
17      INTEGER, PARAMETER :: napisccp=1
18      INTEGER, SAVE :: radpas  ! radiation is called every "radpas" step
19      INTEGER, SAVE :: cvpas   ! convection is called every "cvpas" step
20      INTEGER, SAVE :: cvpas_0 = 1 ! reference value for cvpas
21      INTEGER, SAVE :: wkpas   ! wake scheme is called every "wkpas" step
22      REAL, PARAMETER :: missing_val_nf90=nf90_fill_real
23!$OMP THREADPRIVATE(radpas)
24!$OMP THREADPRIVATE(cvpas)
25!$OMP THREADPRIVATE(cvpas_0)
26!$OMP THREADPRIVATE(wkpas)
27      REAL, SAVE :: phys_tstep=0, solaire_etat0
28!$OMP THREADPRIVATE(phys_tstep, solaire_etat0)
29
30      REAL, ALLOCATABLE, SAVE :: pctsrf(:,:)
31!$OMP THREADPRIVATE(pctsrf)
32      REAL, ALLOCATABLE, SAVE :: ftsol(:,:)
33!$OMP THREADPRIVATE(ftsol)
34      REAL,ALLOCATABLE,SAVE :: qsol(:),fevap(:,:),z0m(:,:),z0h(:,:),agesno(:,:)
35!$OMP THREADPRIVATE(qsol,fevap,z0m,z0h,agesno)
36!FC drag des arbres
37      REAL, ALLOCATABLE, SAVE :: treedrg(:,:,:)
38!$OMP THREADPRIVATE(treedrg)
39
40!      character(len=6), SAVE :: ocean
41!!!!!!$OMP THREADPRIVATE(ocean)
42!      logical, SAVE :: ok_veget
43!!!!!!$OMP THREADPRIVATE(ok_veget)
44      REAL, ALLOCATABLE, SAVE :: falb1(:,:), falb2(:,:)
45!$OMP THREADPRIVATE(falb1, falb2)
46
47!albedo SB >>>
48      REAL, ALLOCATABLE, SAVE :: falb_dif(:,:,:), falb_dir(:,:,:)
49      real, allocatable, save :: chl_con(:)
50!$OMP THREADPRIVATE(falb_dir,falb_dif,chl_con)
51!albedo SB <<<
52
53
54      REAL, ALLOCATABLE, SAVE :: rain_fall(:), snow_fall(:)
55!$OMP THREADPRIVATE( rain_fall, snow_fall)
56      REAL, ALLOCATABLE, SAVE :: solsw(:), sollw(:)
57!$OMP THREADPRIVATE(solsw, sollw)
58      REAL, ALLOCATABLE, SAVE :: radsol(:)
59!$OMP THREADPRIVATE(radsol)
60      REAL, ALLOCATABLE, SAVE :: swradcorr(:)
61!$OMP THREADPRIVATE(swradcorr)
62
63!clesphy0 param physiq
64!
65! Parametres de l'Orographie a l'Echelle Sous-Maille (OESM):
66!
67      REAL, ALLOCATABLE, SAVE :: zmea(:), zstd(:), zsig(:), zgam(:)
68!$OMP THREADPRIVATE(zmea, zstd, zsig, zgam)
69      REAL, ALLOCATABLE, SAVE :: zthe(:), zpic(:), zval(:)
70!$OMP THREADPRIVATE(zthe, zpic, zval)
71!     REAL tabcntr0(100)
72      REAL, ALLOCATABLE, SAVE :: rugoro(:)
73!$OMP THREADPRIVATE(rugoro)
74      REAL, ALLOCATABLE, SAVE :: t_ancien(:,:), q_ancien(:,:)
75!$OMP THREADPRIVATE(t_ancien, q_ancien)
76      REAL, ALLOCATABLE, SAVE :: ql_ancien(:,:), qs_ancien(:,:)
77!$OMP THREADPRIVATE(ql_ancien, qs_ancien)
78      REAL, ALLOCATABLE, SAVE :: prw_ancien(:), prlw_ancien(:), prsw_ancien(:)
79!$OMP THREADPRIVATE(prw_ancien, prlw_ancien, prsw_ancien)
80      REAL, ALLOCATABLE, SAVE :: u_ancien(:,:), v_ancien(:,:)
81!$OMP THREADPRIVATE(u_ancien, v_ancien)
82!!! RomP >>>
83      REAL, ALLOCATABLE, SAVE :: tr_ancien(:,:,:)
84!$OMP THREADPRIVATE(tr_ancien)
85!!! RomP <<<
86      LOGICAL, SAVE :: ancien_ok
87!$OMP THREADPRIVATE(ancien_ok)
88      REAL, ALLOCATABLE, SAVE :: clwcon(:,:),rnebcon(:,:)
89!$OMP THREADPRIVATE(clwcon,rnebcon)
90      REAL, ALLOCATABLE, SAVE :: qtc_cv(:,:),sigt_cv(:,:)
91!$OMP THREADPRIVATE(qtc_cv,sigt_cv)
92      REAL, ALLOCATABLE, SAVE :: ratqs(:,:)
93!$OMP THREADPRIVATE(ratqs)
94      REAL, ALLOCATABLE, SAVE :: pbl_tke(:,:,:) ! turb kinetic energy
95      REAL, ALLOCATABLE, SAVE :: coefh(:,:,:) ! Kz enthalpie
96      REAL, ALLOCATABLE, SAVE :: coefm(:,:,:) ! Kz momentum
97!$OMP THREADPRIVATE(pbl_tke, coefh,coefm)
98!nrlmd<
99      REAL, ALLOCATABLE, SAVE :: delta_tsurf(:,:) ! Surface temperature difference inside-outside cold pool
100!$OMP THREADPRIVATE(delta_tsurf)
101!>nrlmd
102      REAL, ALLOCATABLE, SAVE :: zmax0(:), f0(:) !
103!$OMP THREADPRIVATE(zmax0,f0)
104      REAL, ALLOCATABLE, SAVE :: sig1(:,:), w01(:,:)
105!$OMP THREADPRIVATE(sig1,w01)
106      REAL, ALLOCATABLE, SAVE :: entr_therm(:,:), fm_therm(:,:)
107!$OMP THREADPRIVATE(entr_therm,fm_therm)
108      REAL, ALLOCATABLE, SAVE :: detr_therm(:,:)
109!$OMP THREADPRIVATE(detr_therm)
110!IM 150408
111!     pour phsystoke avec thermiques
112      REAL,ALLOCATABLE,SAVE :: clwcon0th(:,:),rnebcon0th(:,:)
113!$OMP THREADPRIVATE(clwcon0th,rnebcon0th)
114! radiation outputs
115      REAL,ALLOCATABLE,SAVE :: swdnc0(:,:), swdn0(:,:), swdn(:,:)
116!$OMP THREADPRIVATE(swdnc0,swdn0,swdn)
117      REAL,ALLOCATABLE,SAVE :: swupc0(:,:), swup0(:,:), swup(:,:)
118!$OMP THREADPRIVATE(swupc0, swup0,swup)
119      REAL,ALLOCATABLE,SAVE :: SWdn200clr(:), SWdn200(:)
120!$OMP THREADPRIVATE(SWdn200clr,SWdn200)
121      REAL,ALLOCATABLE,SAVE :: SWup200clr(:), SWup200(:)
122!$OMP THREADPRIVATE(SWup200clr,SWup200)
123      REAL,ALLOCATABLE,SAVE :: lwdnc0(:,:), lwdn0(:,:), lwdn(:,:)
124!$OMP THREADPRIVATE(lwdnc0,lwdn0,lwdn)
125      REAL,ALLOCATABLE,SAVE :: lwupc0(:,:), lwup0(:,:), lwup(:,:)
126!$OMP THREADPRIVATE(lwupc0,lwup0,lwup)
127      REAL,ALLOCATABLE,SAVE :: LWdn200clr(:), LWdn200(:)
128!$OMP THREADPRIVATE(LWdn200clr,LWdn200)
129      REAL,ALLOCATABLE,SAVE :: LWup200clr(:), LWup200(:)
130!$OMP THREADPRIVATE(LWup200clr,LWup200)
131      REAL,ALLOCATABLE,SAVE :: LWdnTOA(:), LWdnTOAclr(:)
132!$OMP THREADPRIVATE(LWdnTOA,LWdnTOAclr)
133! pressure level
134      REAL,ALLOCATABLE,SAVE :: tsumSTD(:,:,:)
135!$OMP THREADPRIVATE(tsumSTD)
136      REAL,ALLOCATABLE,SAVE :: usumSTD(:,:,:), vsumSTD(:,:,:)
137!$OMP THREADPRIVATE(usumSTD,vsumSTD)
138      REAL,ALLOCATABLE,SAVE :: wsumSTD(:,:,:), phisumSTD(:,:,:)
139!$OMP THREADPRIVATE(wsumSTD,phisumSTD)
140      REAL,ALLOCATABLE,SAVE :: qsumSTD(:,:,:), rhsumSTD(:,:,:)
141!$OMP THREADPRIVATE(qsumSTD,rhsumSTD)
142      REAL,ALLOCATABLE,SAVE :: tnondef(:,:,:)
143!$OMP THREADPRIVATE(tnondef)
144      REAL,ALLOCATABLE,SAVE :: uvsumSTD(:,:,:)
145!$OMP THREADPRIVATE(uvsumSTD)
146      REAL,ALLOCATABLE,SAVE :: vqsumSTD(:,:,:)
147!$OMP THREADPRIVATE(vqsumSTD)
148      REAL,ALLOCATABLE,SAVE :: vTsumSTD(:,:,:)
149!$OMP THREADPRIVATE(vTsumSTD)
150      REAL,ALLOCATABLE,SAVE :: wqsumSTD(:,:,:)
151!$OMP THREADPRIVATE(wqsumSTD)
152      REAL,ALLOCATABLE,SAVE :: vphisumSTD(:,:,:)
153!$OMP THREADPRIVATE(vphisumSTD)
154      REAL,ALLOCATABLE,SAVE :: wTsumSTD(:,:,:)
155!$OMP THREADPRIVATE(wTsumSTD)
156      REAL,ALLOCATABLE,SAVE :: u2sumSTD(:,:,:)
157!$OMP THREADPRIVATE(u2sumSTD)
158      REAL,ALLOCATABLE,SAVE :: v2sumSTD(:,:,:)
159!$OMP THREADPRIVATE(v2sumSTD)
160      REAL,ALLOCATABLE,SAVE :: T2sumSTD(:,:,:)
161!$OMP THREADPRIVATE(T2sumSTD)
162      REAL,ALLOCATABLE,SAVE :: O3sumSTD(:,:,:), O3daysumSTD(:,:,:)
163!$OMP THREADPRIVATE(O3sumSTD,O3daysumSTD)
164!IM begin
165      REAL,ALLOCATABLE,SAVE :: wlevSTD(:,:), ulevSTD(:,:), vlevSTD(:,:)
166!$OMP THREADPRIVATE(wlevSTD,ulevSTD,vlevSTD)
167      REAL,ALLOCATABLE,SAVE :: tlevSTD(:,:), qlevSTD(:,:), rhlevSTD(:,:)
168!$OMP THREADPRIVATE(tlevSTD,qlevSTD,rhlevSTD)
169      REAL,ALLOCATABLE,SAVE :: philevSTD(:,:)
170!$OMP THREADPRIVATE(philevSTD)
171      REAL,ALLOCATABLE,SAVE :: uvSTD(:,:)
172!$OMP THREADPRIVATE(uvSTD)
173      REAL,ALLOCATABLE,SAVE :: vqSTD(:,:)
174!$OMP THREADPRIVATE(vqSTD)
175      REAL,ALLOCATABLE,SAVE :: vTSTD(:,:)
176!$OMP THREADPRIVATE(vTSTD)
177      REAL,ALLOCATABLE,SAVE :: wqSTD(:,:)
178!$OMP THREADPRIVATE(wqSTD)
179      REAL,ALLOCATABLE,SAVE :: vphiSTD(:,:)
180!$OMP THREADPRIVATE(vphiSTD)
181      REAL,ALLOCATABLE,SAVE :: wTSTD(:,:)
182!$OMP THREADPRIVATE(wTSTD)
183      REAL,ALLOCATABLE,SAVE :: u2STD(:,:)
184!$OMP THREADPRIVATE(u2STD)
185      REAL,ALLOCATABLE,SAVE :: v2STD(:,:)
186!$OMP THREADPRIVATE(v2STD)
187      REAL,ALLOCATABLE,SAVE :: T2STD(:,:)
188!$OMP THREADPRIVATE(T2STD)
189      REAL,ALLOCATABLE,SAVE :: O3STD(:,:), O3daySTD(:,:)
190!$OMP THREADPRIVATE(O3STD,O3daySTD)
191!IM end
192      INTEGER,ALLOCATABLE,SAVE :: seed_old(:,:)
193!$OMP THREADPRIVATE(seed_old)
194      REAL,ALLOCATABLE,SAVE :: zuthe(:),zvthe(:)
195!$OMP THREADPRIVATE(zuthe,zvthe)
196      REAL,ALLOCATABLE,SAVE :: alb_neig(:)
197!$OMP THREADPRIVATE(alb_neig)
198!cloud base mass flux
199      REAL,ALLOCATABLE,SAVE :: ema_cbmf(:)
200!$OMP THREADPRIVATE(ema_cbmf)
201!cloud base pressure & cloud top pressure
202      REAL,ALLOCATABLE,SAVE :: ema_pcb(:), ema_pct(:)
203!$OMP THREADPRIVATE(ema_pcb,ema_pct)
204      REAL,ALLOCATABLE,SAVE :: Mipsh(:,:)     ! mass flux shed from  adiab. ascents
205!$OMP THREADPRIVATE(Mipsh)
206      REAL,ALLOCATABLE,SAVE :: Ma(:,:)       ! undilute upward mass flux
207!$OMP THREADPRIVATE(Ma)
208      REAL,ALLOCATABLE,SAVE :: qcondc(:,:)    ! in-cld water content from convect
209!$OMP THREADPRIVATE(qcondc)
210      REAL,ALLOCATABLE,SAVE :: wd(:) ! sb
211!$OMP THREADPRIVATE(wd)
212      REAL,ALLOCATABLE,SAVE :: sigd(:)
213!$OMP THREADPRIVATE(sigd)
214!
215      REAL,ALLOCATABLE,SAVE :: cin(:)
216!$OMP THREADPRIVATE(cin)
217! ftd : convective heating due to unsaturated downdraughts
218      REAL,ALLOCATABLE,SAVE :: ftd(:,:)
219!$OMP THREADPRIVATE(ftd)
220! fqd : convective moistening due to unsaturated downdraughts
221      REAL,ALLOCATABLE,SAVE :: fqd(:,:)     
222!$OMP THREADPRIVATE(fqd)
223!34EK
224! -- Variables de controle de ALE et ALP
225!ALE : Energie disponible pour soulevement : utilisee par la
226!      convection d'Emanuel pour le declenchement et la regulation
227      REAL,ALLOCATABLE,SAVE :: ALE(:)
228!$OMP THREADPRIVATE(ALE)
229!ALP : Puissance  disponible pour soulevement
230      REAL,ALLOCATABLE,SAVE :: ALP(:)
231!$OMP THREADPRIVATE(ALP)
232!
233! nouvelles variables pour le couplage convection-couche limite
234      REAL,ALLOCATABLE,SAVE :: Ale_bl(:)
235!$OMP THREADPRIVATE(Ale_bl)
236      REAL,ALLOCATABLE,SAVE :: Alp_bl(:)
237!$OMP THREADPRIVATE(Alp_bl)
238      INTEGER,ALLOCATABLE,SAVE :: lalim_conv(:)
239!$OMP THREADPRIVATE(lalim_conv)
240      REAL,ALLOCATABLE,SAVE :: wght_th(:,:)
241!$OMP THREADPRIVATE(wght_th)
242      REAL,ALLOCATABLE,SAVE    :: ale_wake(:)
243!$OMP THREADPRIVATE(ale_wake)
244      REAL,ALLOCATABLE,SAVE    :: ale_bl_stat(:)
245!$OMP THREADPRIVATE(ale_bl_stat)
246!
247! variables de la wake
248! wake_deltat : ecart de temperature avec la zone non perturbee
249! wake_deltaq : ecart d'humidite avec la zone non perturbee
250! wake_s      : fraction surfacique occupee par la poche froide
251! awake_dens  : number of active wakes per unit area
252! wake_dens   : number of wakes per unit area
253! wake_occ    : occurence of wakes (= 1 if wakes occur, =0 otherwise)
254! wake_Cstar  : vitesse d'etalement de la poche
255! wake_pe     : wake potential energy - WAPE
256! wake_fip    : Gust Front Impinging power - ALP
257      REAL,ALLOCATABLE,SAVE :: wake_deltat(:,:)
258!$OMP THREADPRIVATE(wake_deltat)
259      REAL,ALLOCATABLE,SAVE :: wake_deltaq(:,:)
260!$OMP THREADPRIVATE(wake_deltaq)
261      REAL,ALLOCATABLE,SAVE :: wake_s(:)
262!$OMP THREADPRIVATE(wake_s)
263      REAL,ALLOCATABLE,SAVE :: awake_dens(:), wake_dens(:)
264!$OMP THREADPRIVATE(awake_dens, wake_dens)
265      REAL,ALLOCATABLE,SAVE :: wake_Cstar(:)
266!$OMP THREADPRIVATE(wake_Cstar)
267      REAL,ALLOCATABLE,SAVE :: wake_pe(:)
268!$OMP THREADPRIVATE(wake_pe)
269      REAL,ALLOCATABLE,SAVE :: wake_fip(:)
270!$OMP THREADPRIVATE(wake_fip)
271!
272!jyg<
273! variables related to the spitting of the PBL between wake and
274! off-wake regions.
275! wake_delta_pbl_TKE : difference TKE_w - TKE_x
276      REAL,ALLOCATABLE,SAVE :: wake_delta_pbl_TKE(:,:,:)
277!$OMP THREADPRIVATE(wake_delta_pbl_TKE)
278!>jyg
279!
280! pfrac_impa : Produits des coefs lessivage impaction
281! pfrac_nucl : Produits des coefs lessivage nucleation
282! pfrac_1nucl: Produits des coefs lessi nucl (alpha = 1)
283      REAL,ALLOCATABLE,SAVE :: pfrac_impa(:,:), pfrac_nucl(:,:)
284!$OMP THREADPRIVATE(pfrac_impa,pfrac_nucl)
285      REAL,ALLOCATABLE,SAVE :: pfrac_1nucl(:,:)
286!$OMP THREADPRIVATE(pfrac_1nucl)
287!
288      REAL,ALLOCATABLE,SAVE :: total_rain(:), nday_rain(:) 
289!$OMP THREADPRIVATE(total_rain,nday_rain)
290      REAL,ALLOCATABLE,SAVE :: ndayrain_mth(:)
291!$OMP THREADPRIVATE(ndayrain_mth)
292      REAL,ALLOCATABLE,SAVE :: paire_ter(:)
293!$OMP THREADPRIVATE(paire_ter)
294! albsol1: albedo du sol total pour SW visible
295! albsol2: albedo du sol total pour SW proche IR
296      REAL,ALLOCATABLE,SAVE :: albsol1(:), albsol2(:)
297!$OMP THREADPRIVATE(albsol1,albsol2)
298
299!albedo SB >>>
300      REAL,ALLOCATABLE,SAVE :: albsol_dif(:,:),albsol_dir(:,:)
301!$OMP THREADPRIVATE(albsol_dif,albsol_dir)
302!albedo SB <<<
303
304
305      REAL, ALLOCATABLE, SAVE:: wo(:, :, :)
306      ! column-density of ozone in a layer, in kilo-Dobsons
307      ! Third dimension has size 1 or 2.
308      ! "wo(:, :, 1)" is for the average day-night field,
309      ! "wo(:, :, 2)" is for daylight time.
310      !$OMP THREADPRIVATE(wo)
311
312! heat : chauffage solaire
313! heat0: chauffage solaire ciel clair
314! cool : refroidissement infrarouge
315! cool0 : refroidissement infrarouge ciel clair
316! sollwdown : downward LW flux at surface
317! sollwdownclr : downward CS LW flux at surface
318! toplwdown : downward CS LW flux at TOA
319! toplwdownclr : downward CS LW flux at TOA
320! heat_volc : chauffage solaire du au volcanisme
321! cool_volc : refroidissement infrarouge du au volcanisme
322      REAL,ALLOCATABLE,SAVE :: clwcon0(:,:),rnebcon0(:,:)
323!$OMP THREADPRIVATE(clwcon0,rnebcon0)
324      REAL,ALLOCATABLE,SAVE :: heat(:,:)   
325!$OMP THREADPRIVATE(heat)
326      REAL,ALLOCATABLE,SAVE :: heat0(:,:)
327!$OMP THREADPRIVATE(heat0)
328      REAL,ALLOCATABLE,SAVE :: cool(:,:)
329!$OMP THREADPRIVATE(cool)
330      REAL,ALLOCATABLE,SAVE :: cool0(:,:)
331!$OMP THREADPRIVATE(cool0)
332      REAL,ALLOCATABLE,SAVE :: heat_volc(:,:)   
333!$OMP THREADPRIVATE(heat_volc)
334      REAL,ALLOCATABLE,SAVE :: cool_volc(:,:)
335!$OMP THREADPRIVATE(cool_volc)
336      REAL,ALLOCATABLE,SAVE :: topsw(:), toplw(:)
337!$OMP THREADPRIVATE(topsw,toplw)
338      REAL,ALLOCATABLE,SAVE :: sollwdown(:)
339!$OMP THREADPRIVATE(sollwdown)
340      REAL,ALLOCATABLE,SAVE :: gustiness(:)
341!$OMP THREADPRIVATE(gustiness)
342      REAL,ALLOCATABLE,SAVE :: sollwdownclr(:)
343!$OMP THREADPRIVATE(sollwdownclr)
344      REAL,ALLOCATABLE,SAVE :: toplwdown(:)
345!$OMP THREADPRIVATE(toplwdown)
346      REAL,ALLOCATABLE,SAVE :: toplwdownclr(:)
347!$OMP THREADPRIVATE(toplwdownclr)
348      REAL,ALLOCATABLE,SAVE :: topsw0(:),toplw0(:),solsw0(:),sollw0(:)
349!$OMP THREADPRIVATE(topsw0,toplw0,solsw0,sollw0)
350      REAL,ALLOCATABLE,SAVE :: albpla(:)
351!$OMP THREADPRIVATE(albpla)
352
353!IM ajout variables CFMIP2/CMIP5
354      REAL,ALLOCATABLE,SAVE :: heatp(:,:), coolp(:,:)
355!$OMP THREADPRIVATE(heatp, coolp)
356      REAL,ALLOCATABLE,SAVE :: heat0p(:,:), cool0p(:,:)
357!$OMP THREADPRIVATE(heat0p, cool0p)
358      REAL,ALLOCATABLE,SAVE :: radsolp(:), topswp(:), toplwp(:)
359!$OMP THREADPRIVATE(radsolp, topswp, toplwp)
360      REAL,ALLOCATABLE,SAVE :: albplap(:)
361!$OMP THREADPRIVATE(albplap)
362      REAL,ALLOCATABLE,SAVE :: solswp(:), sollwp(:)
363!$OMP THREADPRIVATE(solswp, sollwp)
364      REAL,ALLOCATABLE,SAVE :: sollwdownp(:)
365!$OMP THREADPRIVATE(sollwdownp)
366      REAL,ALLOCATABLE,SAVE :: topsw0p(:),toplw0p(:)
367      REAL,ALLOCATABLE,SAVE :: solsw0p(:),sollw0p(:)
368!$OMP THREADPRIVATE(topsw0p,toplw0p,solsw0p,sollw0p)
369      REAL,ALLOCATABLE,SAVE :: lwdnc0p(:,:), lwdn0p(:,:), lwdnp(:,:)
370      REAL,ALLOCATABLE,SAVE :: lwupc0p(:,:), lwup0p(:,:), lwupp(:,:)
371!$OMP THREADPRIVATE(lwdnc0p, lwdn0p, lwdnp, lwupc0p, lwup0p, lwupp)
372      REAL,ALLOCATABLE,SAVE :: swdnc0p(:,:), swdn0p(:,:), swdnp(:,:)
373      REAL,ALLOCATABLE,SAVE :: swupc0p(:,:), swup0p(:,:), swupp(:,:)
374!$OMP THREADPRIVATE(swdnc0p, swdn0p, swdnp, swupc0p, swup0p, swupp)
375
376! pbase : cloud base pressure
377! bbase : cloud base buoyancy
378      REAL,ALLOCATABLE,SAVE :: cape(:)
379!$OMP THREADPRIVATE(cape)
380      REAL,ALLOCATABLE,SAVE :: pbase(:)
381!$OMP THREADPRIVATE(pbase)
382      REAL,ALLOCATABLE,SAVE :: bbase(:)
383!$OMP THREADPRIVATE(bbase)
384!
385      REAL,SAVE,ALLOCATABLE :: zqasc(:,:)
386!$OMP THREADPRIVATE( zqasc)
387      INTEGER,ALLOCATABLE,SAVE :: ibas_con(:), itop_con(:)
388!$OMP THREADPRIVATE(ibas_con,itop_con)
389      REAL,SAVE,ALLOCATABLE :: rain_con(:)
390!$OMP THREADPRIVATE(rain_con)
391      REAL,SAVE,ALLOCATABLE :: snow_con(:)
392!$OMP THREADPRIVATE(snow_con)
393!
394      REAL,SAVE,ALLOCATABLE :: rlonPOS(:)
395!$OMP THREADPRIVATE(rlonPOS)
396      REAL,SAVE,ALLOCATABLE :: newsst(:)
397!$OMP THREADPRIVATE(newsst)
398      REAL,SAVE,ALLOCATABLE :: ustar(:,:),u10m(:,:), v10m(:,:),wstar(:,:)
399!$OMP THREADPRIVATE(ustar,u10m,v10m,wstar)
400!
401! ok_ade=T -ADE=topswad-topsw
402! ok_aie=T ->
403!       ok_ade=T -AIE=topswai-topswad
404!       ok_ade=F -AIE=topswai-topsw
405!
406!topswad, solswad : Aerosol direct effect
407      REAL,SAVE,ALLOCATABLE :: topswad(:), solswad(:)
408!$OMP THREADPRIVATE(topswad,solswad)
409!topswai, solswai : Aerosol indirect effect
410      REAL,SAVE,ALLOCATABLE :: topswai(:), solswai(:)
411!$OMP THREADPRIVATE(topswai,solswai)
412
413      REAL,SAVE,ALLOCATABLE :: tau_aero(:,:,:,:), piz_aero(:,:,:,:), cg_aero(:,:,:,:)
414!$OMP THREADPRIVATE(tau_aero, piz_aero, cg_aero)
415      REAL,SAVE,ALLOCATABLE :: tau_aero_sw_rrtm(:,:,:,:), piz_aero_sw_rrtm(:,:,:,:), cg_aero_sw_rrtm(:,:,:,:)
416!$OMP THREADPRIVATE(tau_aero_sw_rrtm, piz_aero_sw_rrtm, cg_aero_sw_rrtm)
417      REAL,SAVE,ALLOCATABLE :: tau_aero_lw_rrtm(:,:,:,:), piz_aero_lw_rrtm(:,:,:,:), cg_aero_lw_rrtm(:,:,:,:)
418!$OMP THREADPRIVATE(tau_aero_lw_rrtm, piz_aero_lw_rrtm, cg_aero_lw_rrtm)
419      REAL,SAVE,ALLOCATABLE :: ccm(:,:,:)
420!$OMP THREADPRIVATE(ccm)
421
422!!! nrlmd le 10/04/2012
423      REAL,SAVE,ALLOCATABLE :: ale_bl_trig(:)
424!$OMP THREADPRIVATE(ale_bl_trig)
425!!! fin nrlmd le 10/04/2012
426
427      REAL, ALLOCATABLE, SAVE:: du_gwd_rando(:, :), du_gwd_front(:, :)
428      !$OMP THREADPRIVATE(du_gwd_rando, du_gwd_front)
429      ! tendencies on wind due to gravity waves
430
431      LOGICAL,SAVE :: is_initialized=.FALSE.
432!$OMP THREADPRIVATE(is_initialized)   
433
434CONTAINS
435
436!======================================================================
437SUBROUTINE phys_state_var_init(read_climoz)
438USE dimphy
439USE aero_mod
440USE infotrac_phy, ONLY : nbtr
441USE indice_sol_mod
442IMPLICIT NONE
443
444integer, intent(in)::  read_climoz
445! read ozone climatology
446! Allowed values are 0, 1 and 2
447! 0: do not read an ozone climatology
448! 1: read a single ozone climatology that will be used day and night
449! 2: read two ozone climatologies, the average day and night
450! climatology and the daylight climatology
451
452include "clesphys.h"
453
454      IF (is_initialized) RETURN
455      is_initialized=.TRUE.
456      ALLOCATE(pctsrf(klon,nbsrf))
457      ALLOCATE(ftsol(klon,nbsrf))
458      ALLOCATE(qsol(klon),fevap(klon,nbsrf))
459      ALLOCATE(z0m(klon,nbsrf+1),z0h(klon,nbsrf+1),agesno(klon,nbsrf))
460!FC
461      ALLOCATE(treedrg(klon,klev,nbsrf))
462      ALLOCATE(falb1(klon,nbsrf))
463      ALLOCATE(falb2(klon,nbsrf))
464!albedo SB >>>
465      ALLOCATE(falb_dir(klon,nsw,nbsrf),falb_dif(klon,nsw,nbsrf))
466      ALLOCATE(chl_con(klon))
467!albedo SB <<<
468      ALLOCATE(rain_fall(klon))
469      ALLOCATE(snow_fall(klon))
470      ALLOCATE(solsw(klon), sollw(klon))
471      sollw=0.0
472      ALLOCATE(radsol(klon))
473      ALLOCATE(swradcorr(klon))
474      ALLOCATE(zmea(klon), zstd(klon), zsig(klon), zgam(klon))
475      ALLOCATE(zthe(klon), zpic(klon), zval(klon))
476
477      ALLOCATE(rugoro(klon))
478      ALLOCATE(t_ancien(klon,klev), q_ancien(klon,klev))
479      ALLOCATE(ql_ancien(klon,klev), qs_ancien(klon,klev))
480      ALLOCATE(prw_ancien(klon), prlw_ancien(klon), prsw_ancien(klon))
481      ALLOCATE(u_ancien(klon,klev), v_ancien(klon,klev))
482!!! Rom P >>>
483      ALLOCATE(tr_ancien(klon,klev,nbtr))
484!!! Rom P <<<
485      ALLOCATE(clwcon(klon,klev),rnebcon(klon,klev))
486      ALLOCATE(qtc_cv(klon,klev),sigt_cv(klon,klev))
487      ALLOCATE(ratqs(klon,klev))
488      ALLOCATE(pbl_tke(klon,klev+1,nbsrf+1))
489!nrlmd<
490      ALLOCATE(delta_tsurf(klon,nbsrf))
491!>nrlmd
492      ALLOCATE(coefh(klon,klev+1,nbsrf+1))
493      ALLOCATE(coefm(klon,klev+1,nbsrf+1))
494      ALLOCATE(zmax0(klon), f0(klon))
495      ALLOCATE(sig1(klon,klev), w01(klon,klev))
496      ALLOCATE(entr_therm(klon,klev), fm_therm(klon,klev+1))
497      ALLOCATE(detr_therm(klon,klev))
498!     pour phsystoke avec thermiques
499      ALLOCATE(clwcon0th(klon,klev),rnebcon0th(klon,klev))
500! radiation outputs
501      ALLOCATE(swdnc0(klon,klevp1), swdn0(klon,klevp1), swdn(klon,klevp1))
502      ALLOCATE(swupc0(klon,klevp1), swup0(klon,klevp1), swup(klon,klevp1))
503      ALLOCATE(lwdnc0(klon,klevp1), lwdn0(klon,klevp1), lwdn(klon,klevp1))
504      ALLOCATE(lwupc0(klon,klevp1), lwup0(klon,klevp1), lwup(klon,klevp1))
505      ALLOCATE(SWdn200clr(klon), SWdn200(klon))
506      ALLOCATE(SWup200clr(klon), SWup200(klon))
507      ALLOCATE(LWdn200clr(klon), LWdn200(klon))
508      ALLOCATE(LWup200clr(klon), LWup200(klon))
509      ALLOCATE(LWdnTOA(klon), LWdnTOAclr(klon))
510! pressure level
511      ALLOCATE(tsumSTD(klon,nlevSTD,nout))
512      ALLOCATE(usumSTD(klon,nlevSTD,nout), vsumSTD(klon,nlevSTD,nout))
513      ALLOCATE(wsumSTD(klon,nlevSTD,nout), phisumSTD(klon,nlevSTD,nout))
514      ALLOCATE(qsumSTD(klon,nlevSTD,nout), rhsumSTD(klon,nlevSTD,nout))
515      ALLOCATE(tnondef(klon,nlevSTD,nout))
516      ALLOCATE(uvsumSTD(klon,nlevSTD,nout))
517      ALLOCATE(vqsumSTD(klon,nlevSTD,nout))
518      ALLOCATE(vTsumSTD(klon,nlevSTD,nout))
519      ALLOCATE(wqsumSTD(klon,nlevSTD,nout))
520      ALLOCATE(vphisumSTD(klon,nlevSTD,nout))
521      ALLOCATE(wTsumSTD(klon,nlevSTD,nout))
522      ALLOCATE(u2sumSTD(klon,nlevSTD,nout))
523      ALLOCATE(v2sumSTD(klon,nlevSTD,nout))
524      ALLOCATE(T2sumSTD(klon,nlevSTD,nout))
525      ALLOCATE(O3sumSTD(klon,nlevSTD,nout))
526      ALLOCATE(O3daysumSTD(klon,nlevSTD,nout))
527!IM beg
528      ALLOCATE(wlevSTD(klon,nlevSTD), ulevSTD(klon,nlevSTD), vlevSTD(klon,nlevSTD))
529      ALLOCATE(tlevSTD(klon,nlevSTD), qlevSTD(klon,nlevSTD), rhlevSTD(klon,nlevSTD))
530      ALLOCATE(philevSTD(klon,nlevSTD))
531      ALLOCATE(uvSTD(klon,nlevSTD),vqSTD(klon,nlevSTD))
532      ALLOCATE(vTSTD(klon,nlevSTD),wqSTD(klon,nlevSTD))
533      ALLOCATE(vphiSTD(klon,nlevSTD),wTSTD(klon,nlevSTD))
534      ALLOCATE(u2STD(klon,nlevSTD),v2STD(klon,nlevSTD))
535      ALLOCATE(T2STD(klon,nlevSTD))
536      ALLOCATE(O3STD(klon,nlevSTD))
537      ALLOCATE(O3daySTD(klon,nlevSTD))
538!IM end
539      ALLOCATE(seed_old(klon,napisccp))
540      ALLOCATE(zuthe(klon),zvthe(klon))
541      ALLOCATE(alb_neig(klon))
542!cloud base mass flux
543      ALLOCATE(ema_cbmf(klon))
544!cloud base pressure & cloud top pressure
545      ALLOCATE(ema_pcb(klon), ema_pct(klon))
546!
547      ALLOCATE(Mipsh(klon,klev))
548      ALLOCATE(Ma(klon,klev))
549      ALLOCATE(qcondc(klon,klev))
550      ALLOCATE(wd(klon))
551      ALLOCATE(sigd(klon))
552      ALLOCATE(cin(klon), ALE(klon), ALP(klon))
553      ALLOCATE(ftd(klon,klev), fqd(klon,klev))
554      ALLOCATE(Ale_bl(klon))
555      ALLOCATE(ale_wake(klon))
556      ALLOCATE(ale_bl_stat(klon))
557      ale_bl_stat(:)=0
558      ALLOCATE(Alp_bl(klon))
559      ALLOCATE(lalim_conv(klon))
560      ALLOCATE(wght_th(klon,klev))
561      ALLOCATE(wake_deltat(klon,klev), wake_deltaq(klon,klev))
562      ALLOCATE(wake_s(klon), awake_dens(klon), wake_dens(klon))
563      awake_dens = 0.
564      ALLOCATE(wake_Cstar(klon))
565      ALLOCATE(wake_pe(klon), wake_fip(klon))
566!jyg<
567      ALLOCATE(wake_delta_pbl_TKE(klon,klev+1,nbsrf+1))
568!>jyg
569      ALLOCATE(pfrac_impa(klon,klev), pfrac_nucl(klon,klev))
570      ALLOCATE(pfrac_1nucl(klon,klev))
571      ALLOCATE(total_rain(klon), nday_rain(klon))
572      ALLOCATE(ndayrain_mth(klon))
573      ALLOCATE(paire_ter(klon))
574      ALLOCATE(albsol1(klon), albsol2(klon))
575!albedo SB >>>
576      ALLOCATE(albsol_dir(klon,nsw),albsol_dif(klon,nsw))
577!albedo SB <<<
578
579      if (read_climoz <= 1) then
580         ALLOCATE(wo(klon,klev, 1))
581      else
582         ! read_climoz == 2
583         ALLOCATE(wo(klon,klev, 2))
584      end if
585     
586      ALLOCATE(clwcon0(klon,klev),rnebcon0(klon,klev))
587      ALLOCATE(heat(klon,klev), heat0(klon,klev))
588      ALLOCATE(cool(klon,klev), cool0(klon,klev))
589      ALLOCATE(heat_volc(klon,klev), cool_volc(klon,klev))
590      ALLOCATE(topsw(klon), toplw(klon))
591      ALLOCATE(sollwdown(klon), sollwdownclr(klon))
592      sollwdown = 0.
593      ALLOCATE(toplwdown(klon), toplwdownclr(klon))
594      ALLOCATE(topsw0(klon),toplw0(klon),solsw0(klon),sollw0(klon))
595      sollw0 = 0.
596      ALLOCATE(albpla(klon))
597!IM ajout variables CFMIP2/CMIP5
598      ALLOCATE(heatp(klon,klev), coolp(klon,klev))
599      ALLOCATE(heat0p(klon,klev), cool0p(klon,klev))
600      ALLOCATE(radsolp(klon), topswp(klon), toplwp(klon))
601      ALLOCATE(albplap(klon))
602      ALLOCATE(solswp(klon), sollwp(klon))
603      ALLOCATE(gustiness(klon))
604      ALLOCATE(sollwdownp(klon))
605      ALLOCATE(topsw0p(klon),toplw0p(klon))
606      ALLOCATE(solsw0p(klon),sollw0p(klon))
607      ALLOCATE(lwdnc0p(klon,klevp1), lwdn0p(klon,klevp1), lwdnp(klon,klevp1))
608      ALLOCATE(lwupc0p(klon,klevp1), lwup0p(klon,klevp1), lwupp(klon,klevp1))
609      ALLOCATE(swdnc0p(klon,klevp1), swdn0p(klon,klevp1), swdnp(klon,klevp1))
610      ALLOCATE(swupc0p(klon,klevp1), swup0p(klon,klevp1), swupp(klon,klevp1))
611
612      ALLOCATE(cape(klon))
613      ALLOCATE(pbase(klon),bbase(klon))
614      ALLOCATE(zqasc(klon,klev))
615      ALLOCATE(ibas_con(klon), itop_con(klon))
616      ALLOCATE(rain_con(klon), snow_con(klon))
617      ALLOCATE(rlonPOS(klon))
618      ALLOCATE(newsst(klon))
619      ALLOCATE(ustar(klon,nbsrf),u10m(klon,nbsrf), v10m(klon,nbsrf),wstar(klon,nbsrf+1))
620      ALLOCATE(topswad(klon), solswad(klon))
621      ALLOCATE(topswai(klon), solswai(klon))
622      ALLOCATE(tau_aero(klon,klev,naero_grp,nbands),piz_aero(klon,klev,naero_grp,nbands),cg_aero(klon,klev,naero_grp,nbands))
623      ALLOCATE(tau_aero_sw_rrtm(klon,klev,2,nbands_sw_rrtm),piz_aero_sw_rrtm(klon,klev,2,nbands_sw_rrtm))
624      ALLOCATE(cg_aero_sw_rrtm(klon,klev,2,nbands_sw_rrtm))
625      ALLOCATE(tau_aero_lw_rrtm(klon,klev,2,nbands_lw_rrtm),piz_aero_lw_rrtm(klon,klev,2,nbands_lw_rrtm))
626      ALLOCATE(cg_aero_lw_rrtm(klon,klev,2,nbands_lw_rrtm))
627      ALLOCATE(ccm(klon,klev,nbands))
628
629!!! nrlmd le 10/04/2012
630      ALLOCATE(ale_bl_trig(klon))
631!!! fin nrlmd le 10/04/2012
632      IF (ok_gwd_rando) THEN
633        allocate(du_gwd_rando(klon, klev))
634        du_gwd_rando(:,:)=0.
635      ENDIF
636      IF (.not. ok_hines .and. ok_gwd_rando) THEN
637        ALLOCATE(du_gwd_front(klon, klev))
638        du_gwd_front(:,:) = 0 !ym missing init   
639      ENDIF
640END SUBROUTINE phys_state_var_init
641
642!======================================================================
643SUBROUTINE phys_state_var_end
644!USE dimphy
645USE indice_sol_mod
646IMPLICIT NONE
647include "clesphys.h"
648
649      deallocate(pctsrf, ftsol, falb1, falb2)
650      deallocate(qsol,fevap,z0m,z0h,agesno)
651!FC
652      deallocate(treedrg)
653      deallocate(rain_fall, snow_fall, solsw, sollw, radsol, swradcorr)
654      deallocate(zmea, zstd, zsig, zgam)
655      deallocate(zthe, zpic, zval)
656      deallocate(rugoro, t_ancien, q_ancien, clwcon, rnebcon)
657      deallocate(qs_ancien, ql_ancien)
658      deallocate(prw_ancien, prlw_ancien, prsw_ancien)
659      deallocate(qtc_cv,sigt_cv)
660      deallocate(u_ancien, v_ancien)
661      deallocate(tr_ancien)                           !RomP
662      deallocate(ratqs, pbl_tke,coefh,coefm)
663!nrlmd<
664      deallocate(delta_tsurf)
665!>nrlmd
666      deallocate(zmax0, f0)
667      deallocate(sig1, w01)
668      deallocate(entr_therm, fm_therm)
669      deallocate(detr_therm)
670      deallocate(clwcon0th, rnebcon0th)
671! radiation outputs
672      deallocate(swdnc0, swdn0, swdn)
673      deallocate(swupc0, swup0, swup)
674      deallocate(lwdnc0, lwdn0, lwdn)
675      deallocate(lwupc0, lwup0, lwup)
676      deallocate(SWdn200clr, SWdn200)
677      deallocate(SWup200clr, SWup200)
678      deallocate(LWdn200clr, LWdn200)
679      deallocate(LWup200clr, LWup200)
680      deallocate(LWdnTOA, LWdnTOAclr)
681! pressure level
682      deallocate(tsumSTD)
683      deallocate(usumSTD, vsumSTD)
684      deallocate(wsumSTD, phisumSTD)
685      deallocate(tnondef)
686      deallocate(qsumSTD, rhsumSTD)
687      deallocate(uvsumSTD)
688      deallocate(vqsumSTD)
689      deallocate(vTsumSTD)
690      deallocate(wqsumSTD)
691      deallocate(vphisumSTD)
692      deallocate(wTsumSTD)
693      deallocate(u2sumSTD)
694      deallocate(v2sumSTD)
695      deallocate(T2sumSTD)
696      deallocate(O3sumSTD)
697      deallocate(O3daysumSTD)
698!IM beg
699      deallocate(wlevSTD,ulevSTD,vlevSTD,tlevSTD,qlevSTD,rhlevSTD,philevSTD)
700      deallocate(uvSTD,vqSTD,vTSTD,wqSTD,vphiSTD,wTSTD,u2STD,v2STD,T2STD,O3STD,O3daySTD)
701!IM end
702      deallocate(seed_old)
703      deallocate(zuthe, zvthe)
704      deallocate(alb_neig)
705      deallocate(ema_cbmf)
706      deallocate(ema_pcb, ema_pct)
707      deallocate(Mipsh, Ma, qcondc)
708      deallocate(wd, sigd)
709      deallocate(cin, ALE, ALP)
710      deallocate(ftd, fqd)
711      deallocate(Ale_bl, Alp_bl)
712      deallocate(ale_wake)
713      deallocate(ale_bl_stat)
714      deallocate(lalim_conv, wght_th)
715      deallocate(wake_deltat, wake_deltaq)
716      deallocate(wake_s, awake_dens, wake_dens)
717      deallocate(wake_Cstar, wake_pe, wake_fip)
718!jyg<
719      deallocate(wake_delta_pbl_TKE)
720!>jyg
721      deallocate(pfrac_impa, pfrac_nucl)
722      deallocate(pfrac_1nucl)
723      deallocate(total_rain, nday_rain)
724      deallocate(ndayrain_mth)
725      deallocate(paire_ter)
726      deallocate(albsol1, albsol2)
727!albedo SB >>>
728      deallocate(albsol_dir,albsol_dif,falb_dir,falb_dif,chl_con)
729!albedo SB <<<
730      deallocate(wo)
731      deallocate(clwcon0,rnebcon0)
732      deallocate(heat, heat0)
733      deallocate(cool, cool0)
734      deallocate(heat_volc, cool_volc)
735      deallocate(topsw, toplw)
736      deallocate(sollwdown, sollwdownclr)
737      deallocate(gustiness)
738      deallocate(toplwdown, toplwdownclr)
739      deallocate(topsw0,toplw0,solsw0,sollw0)
740      deallocate(albpla)
741!IM ajout variables CFMIP2/CMIP5
742      deallocate(heatp, coolp)
743      deallocate(heat0p, cool0p)
744      deallocate(radsolp, topswp, toplwp)
745      deallocate(albplap)
746      deallocate(solswp, sollwp)
747      deallocate(sollwdownp)
748      deallocate(topsw0p,toplw0p)
749      deallocate(solsw0p,sollw0p)
750      deallocate(lwdnc0p, lwdn0p, lwdnp)
751      deallocate(lwupc0p, lwup0p, lwupp)
752      deallocate(swdnc0p, swdn0p, swdnp)
753      deallocate(swupc0p, swup0p, swupp)
754      deallocate(cape)
755      deallocate(pbase,bbase)
756      deallocate(zqasc)
757      deallocate(ibas_con, itop_con)
758      deallocate(rain_con, snow_con)
759      deallocate(rlonPOS)
760      deallocate(newsst)
761      deallocate(ustar,u10m, v10m,wstar)
762      deallocate(topswad, solswad)
763      deallocate(topswai, solswai)
764      deallocate(tau_aero,piz_aero,cg_aero)
765      deallocate(tau_aero_sw_rrtm,piz_aero_sw_rrtm,cg_aero_sw_rrtm)
766      deallocate(tau_aero_lw_rrtm,piz_aero_lw_rrtm,cg_aero_lw_rrtm)
767      deallocate(ccm)
768      if (ok_gwd_rando) deallocate(du_gwd_rando)
769      if (.not. ok_hines .and. ok_gwd_rando) deallocate(du_gwd_front)
770       
771!!! nrlmd le 10/04/2012
772      deallocate(ale_bl_trig)
773!!! fin nrlmd le 10/04/2012
774      is_initialized=.FALSE.
775END SUBROUTINE phys_state_var_end
776
777      END MODULE phys_state_var_mod
Note: See TracBrowser for help on using the repository browser.