source: LMDZ6/branches/Ocean_skin/libf/phylmd/phys_state_var_mod.F90 @ 3458

Last change on this file since 3458 was 3458, checked in by lguez, 5 years ago

Introduce variable activate_ocean_skin in module config_ocean_skin_m.

Bug fix in phys_state_var_end: we need to deallocate variables for
lmdz1d (although it is useless for a 3D run).

  • 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: 28.9 KB
Line 
1!
2! $Id: phys_state_var_mod.F90 3458 2019-01-30 16:55:48Z lguez $
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 ! 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 :: dtime, solaire_etat0
28!$OMP THREADPRIVATE(dtime, 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 :: Ma(:,:)        ! undilute upward mass flux
205!$OMP THREADPRIVATE(Ma)
206      REAL,ALLOCATABLE,SAVE :: qcondc(:,:)    ! in-cld water content from convect
207!$OMP THREADPRIVATE(qcondc)
208      REAL,ALLOCATABLE,SAVE :: wd(:) ! sb
209!$OMP THREADPRIVATE(wd)
210      REAL,ALLOCATABLE,SAVE :: sigd(:)
211!$OMP THREADPRIVATE(sigd)
212!
213      REAL,ALLOCATABLE,SAVE :: cin(:)
214!$OMP THREADPRIVATE(cin)
215! ftd : convective heating due to unsaturated downdraughts
216      REAL,ALLOCATABLE,SAVE :: ftd(:,:)
217!$OMP THREADPRIVATE(ftd)
218! fqd : convective moistening due to unsaturated downdraughts
219      REAL,ALLOCATABLE,SAVE :: fqd(:,:)     
220!$OMP THREADPRIVATE(fqd)
221!34EK
222! -- Variables de controle de ALE et ALP
223!ALE : Energie disponible pour soulevement : utilisee par la
224!      convection d'Emanuel pour le declenchement et la regulation
225      REAL,ALLOCATABLE,SAVE :: ALE(:)
226!$OMP THREADPRIVATE(ALE)
227!ALP : Puissance  disponible pour soulevement
228      REAL,ALLOCATABLE,SAVE :: ALP(:)
229!$OMP THREADPRIVATE(ALP)
230!
231! nouvelles variables pour le couplage convection-couche limite
232      REAL,ALLOCATABLE,SAVE :: Ale_bl(:)
233!$OMP THREADPRIVATE(Ale_bl)
234      REAL,ALLOCATABLE,SAVE :: Alp_bl(:)
235!$OMP THREADPRIVATE(Alp_bl)
236      INTEGER,ALLOCATABLE,SAVE :: lalim_conv(:)
237!$OMP THREADPRIVATE(lalim_conv)
238      REAL,ALLOCATABLE,SAVE :: wght_th(:,:)
239!$OMP THREADPRIVATE(wght_th)
240      REAL,ALLOCATABLE,SAVE    :: ale_wake(:)
241!$OMP THREADPRIVATE(ale_wake)
242      REAL,ALLOCATABLE,SAVE    :: ale_bl_stat(:)
243!$OMP THREADPRIVATE(ale_bl_stat)
244!
245! variables de la wake
246! wake_deltat : ecart de temperature avec la zone non perturbee
247! wake_deltaq : ecart d'humidite avec la zone non perturbee
248! wake_s      : fraction surfacique occupee par la poche froide
249! awake_dens  : number of active wakes per unit area
250! wake_dens   : number of wakes per unit area
251! wake_occ    : occurence of wakes (= 1 if wakes occur, =0 otherwise)
252! wake_Cstar  : vitesse d'etalement de la poche
253! wake_pe     : wake potential energy - WAPE
254! wake_fip    : Gust Front Impinging power - ALP
255      REAL,ALLOCATABLE,SAVE :: wake_deltat(:,:)
256!$OMP THREADPRIVATE(wake_deltat)
257      REAL,ALLOCATABLE,SAVE :: wake_deltaq(:,:)
258!$OMP THREADPRIVATE(wake_deltaq)
259      REAL,ALLOCATABLE,SAVE :: wake_s(:)
260!$OMP THREADPRIVATE(wake_s)
261      REAL,ALLOCATABLE,SAVE :: awake_dens(:), wake_dens(:)
262!$OMP THREADPRIVATE(awake_dens, wake_dens)
263      REAL,ALLOCATABLE,SAVE :: wake_Cstar(:)
264!$OMP THREADPRIVATE(wake_Cstar)
265      REAL,ALLOCATABLE,SAVE :: wake_pe(:)
266!$OMP THREADPRIVATE(wake_pe)
267      REAL,ALLOCATABLE,SAVE :: wake_fip(:)
268!$OMP THREADPRIVATE(wake_fip)
269!
270!jyg<
271! variables related to the spitting of the PBL between wake and
272! off-wake regions.
273! wake_delta_pbl_TKE : difference TKE_w - TKE_x
274      REAL,ALLOCATABLE,SAVE :: wake_delta_pbl_TKE(:,:,:)
275!$OMP THREADPRIVATE(wake_delta_pbl_TKE)
276!>jyg
277!
278! pfrac_impa : Produits des coefs lessivage impaction
279! pfrac_nucl : Produits des coefs lessivage nucleation
280! pfrac_1nucl: Produits des coefs lessi nucl (alpha = 1)
281      REAL,ALLOCATABLE,SAVE :: pfrac_impa(:,:), pfrac_nucl(:,:)
282!$OMP THREADPRIVATE(pfrac_impa,pfrac_nucl)
283      REAL,ALLOCATABLE,SAVE :: pfrac_1nucl(:,:)
284!$OMP THREADPRIVATE(pfrac_1nucl)
285!
286      REAL,ALLOCATABLE,SAVE :: total_rain(:), nday_rain(:) 
287!$OMP THREADPRIVATE(total_rain,nday_rain)
288! albsol1: albedo du sol total pour SW visible
289! albsol2: albedo du sol total pour SW proche IR
290      REAL,ALLOCATABLE,SAVE :: albsol1(:), albsol2(:)
291!$OMP THREADPRIVATE(albsol1,albsol2)
292
293!albedo SB >>>
294      REAL,ALLOCATABLE,SAVE :: albsol_dif(:,:),albsol_dir(:,:)
295!$OMP THREADPRIVATE(albsol_dif,albsol_dir)
296!albedo SB <<<
297
298
299      REAL, ALLOCATABLE, SAVE:: wo(:, :, :)
300      ! column-density of ozone in a layer, in kilo-Dobsons
301      ! Third dimension has size 1 or 2.
302      ! "wo(:, :, 1)" is for the average day-night field,
303      ! "wo(:, :, 2)" is for daylight time.
304      !$OMP THREADPRIVATE(wo)
305
306! heat : chauffage solaire
307! heat0: chauffage solaire ciel clair
308! cool : refroidissement infrarouge
309! cool0 : refroidissement infrarouge ciel clair
310! sollwdown : downward LW flux at surface
311! sollwdownclr : downward CS LW flux at surface
312! toplwdown : downward CS LW flux at TOA
313! toplwdownclr : downward CS LW flux at TOA
314      REAL,ALLOCATABLE,SAVE :: clwcon0(:,:),rnebcon0(:,:)
315!$OMP THREADPRIVATE(clwcon0,rnebcon0)
316      REAL,ALLOCATABLE,SAVE :: heat(:,:)   
317!$OMP THREADPRIVATE(heat)
318      REAL,ALLOCATABLE,SAVE :: heat0(:,:)
319!$OMP THREADPRIVATE(heat0)
320      REAL,ALLOCATABLE,SAVE :: cool(:,:)
321!$OMP THREADPRIVATE(cool)
322      REAL,ALLOCATABLE,SAVE :: cool0(:,:)
323!$OMP THREADPRIVATE(cool0)
324      REAL,ALLOCATABLE,SAVE :: topsw(:), toplw(:)
325!$OMP THREADPRIVATE(topsw,toplw)
326      REAL,ALLOCATABLE,SAVE :: sollwdown(:)
327!$OMP THREADPRIVATE(sollwdown)
328      REAL,ALLOCATABLE,SAVE :: gustiness(:)
329!$OMP THREADPRIVATE(gustiness)
330      REAL,ALLOCATABLE,SAVE :: sollwdownclr(:)
331!$OMP THREADPRIVATE(sollwdownclr)
332      REAL,ALLOCATABLE,SAVE :: toplwdown(:)
333!$OMP THREADPRIVATE(toplwdown)
334      REAL,ALLOCATABLE,SAVE :: toplwdownclr(:)
335!$OMP THREADPRIVATE(toplwdownclr)
336      REAL,ALLOCATABLE,SAVE :: topsw0(:),toplw0(:),solsw0(:),sollw0(:)
337!$OMP THREADPRIVATE(topsw0,toplw0,solsw0,sollw0)
338      REAL,ALLOCATABLE,SAVE :: albpla(:)
339!$OMP THREADPRIVATE(albpla)
340
341!IM ajout variables CFMIP2/CMIP5
342      REAL,ALLOCATABLE,SAVE :: heatp(:,:), coolp(:,:)
343!$OMP THREADPRIVATE(heatp, coolp)
344      REAL,ALLOCATABLE,SAVE :: heat0p(:,:), cool0p(:,:)
345!$OMP THREADPRIVATE(heat0p, cool0p)
346      REAL,ALLOCATABLE,SAVE :: radsolp(:), topswp(:), toplwp(:)
347!$OMP THREADPRIVATE(radsolp, topswp, toplwp)
348      REAL,ALLOCATABLE,SAVE :: albplap(:)
349!$OMP THREADPRIVATE(albplap)
350      REAL,ALLOCATABLE,SAVE :: solswp(:), sollwp(:)
351!$OMP THREADPRIVATE(solswp, sollwp)
352      REAL,ALLOCATABLE,SAVE :: sollwdownp(:)
353!$OMP THREADPRIVATE(sollwdownp)
354      REAL,ALLOCATABLE,SAVE :: topsw0p(:),toplw0p(:)
355      REAL,ALLOCATABLE,SAVE :: solsw0p(:),sollw0p(:)
356!$OMP THREADPRIVATE(topsw0p,toplw0p,solsw0p,sollw0p)
357      REAL,ALLOCATABLE,SAVE :: lwdnc0p(:,:), lwdn0p(:,:), lwdnp(:,:)
358      REAL,ALLOCATABLE,SAVE :: lwupc0p(:,:), lwup0p(:,:), lwupp(:,:)
359!$OMP THREADPRIVATE(lwdnc0p, lwdn0p, lwdnp, lwupc0p, lwup0p, lwupp)
360      REAL,ALLOCATABLE,SAVE :: swdnc0p(:,:), swdn0p(:,:), swdnp(:,:)
361      REAL,ALLOCATABLE,SAVE :: swupc0p(:,:), swup0p(:,:), swupp(:,:)
362!$OMP THREADPRIVATE(swdnc0p, swdn0p, swdnp, swupc0p, swup0p, swupp)
363
364! pbase : cloud base pressure
365! bbase : cloud base buoyancy
366      REAL,ALLOCATABLE,SAVE :: cape(:)
367!$OMP THREADPRIVATE(cape)
368      REAL,ALLOCATABLE,SAVE :: pbase(:)
369!$OMP THREADPRIVATE(pbase)
370      REAL,ALLOCATABLE,SAVE :: bbase(:)
371!$OMP THREADPRIVATE(bbase)
372!
373      REAL,SAVE,ALLOCATABLE :: zqasc(:,:)
374!$OMP THREADPRIVATE( zqasc)
375      INTEGER,ALLOCATABLE,SAVE :: ibas_con(:), itop_con(:)
376!$OMP THREADPRIVATE(ibas_con,itop_con)
377      REAL,SAVE,ALLOCATABLE :: rain_con(:)
378!$OMP THREADPRIVATE(rain_con)
379      REAL,SAVE,ALLOCATABLE :: snow_con(:)
380!$OMP THREADPRIVATE(snow_con)
381!
382      REAL,SAVE,ALLOCATABLE :: rlonPOS(:)
383!$OMP THREADPRIVATE(rlonPOS)
384      REAL,SAVE,ALLOCATABLE :: newsst(:)
385!$OMP THREADPRIVATE(newsst)
386      REAL,SAVE,ALLOCATABLE :: ustar(:,:),u10m(:,:), v10m(:,:),wstar(:,:)
387!$OMP THREADPRIVATE(ustar,u10m,v10m,wstar)
388!
389! ok_ade=T -ADE=topswad-topsw
390! ok_aie=T ->
391!       ok_ade=T -AIE=topswai-topswad
392!       ok_ade=F -AIE=topswai-topsw
393!
394!topswad, solswad : Aerosol direct effect
395      REAL,SAVE,ALLOCATABLE :: topswad(:), solswad(:)
396!$OMP THREADPRIVATE(topswad,solswad)
397!topswai, solswai : Aerosol indirect effect
398      REAL,SAVE,ALLOCATABLE :: topswai(:), solswai(:)
399!$OMP THREADPRIVATE(topswai,solswai)
400
401      REAL,SAVE,ALLOCATABLE :: tau_aero(:,:,:,:), piz_aero(:,:,:,:), cg_aero(:,:,:,:)
402!$OMP THREADPRIVATE(tau_aero, piz_aero, cg_aero)
403      REAL,SAVE,ALLOCATABLE :: tau_aero_sw_rrtm(:,:,:,:), piz_aero_sw_rrtm(:,:,:,:), cg_aero_sw_rrtm(:,:,:,:)
404!$OMP THREADPRIVATE(tau_aero_sw_rrtm, piz_aero_sw_rrtm, cg_aero_sw_rrtm)
405      REAL,SAVE,ALLOCATABLE :: tau_aero_lw_rrtm(:,:,:,:), piz_aero_lw_rrtm(:,:,:,:), cg_aero_lw_rrtm(:,:,:,:)
406!$OMP THREADPRIVATE(tau_aero_lw_rrtm, piz_aero_lw_rrtm, cg_aero_lw_rrtm)
407      REAL,SAVE,ALLOCATABLE :: ccm(:,:,:)
408!$OMP THREADPRIVATE(ccm)
409
410!!! nrlmd le 10/04/2012
411      REAL,SAVE,ALLOCATABLE :: ale_bl_trig(:)
412!$OMP THREADPRIVATE(ale_bl_trig)
413!!! fin nrlmd le 10/04/2012
414
415      REAL, ALLOCATABLE, SAVE:: du_gwd_rando(:, :), du_gwd_front(:, :)
416      !$OMP THREADPRIVATE(du_gwd_rando, du_gwd_front)
417      ! tendencies on wind due to gravity waves
418
419      ! Ocean-atmosphere interface, subskin ocean and near-surface ocean:
420     
421      REAL, ALLOCATABLE, SAVE:: ds_ns(:)
422      ! "delta salinity near surface". Salinity variation in the
423      ! near-surface turbulent layer. That is subskin salinity minus
424      ! foundation salinity. In ppt.
425
426      REAL, ALLOCATABLE, SAVE:: dt_ns(:)
427      ! "delta temperature near surface". Temperature variation in the
428      ! near-surface turbulent layer. That is subskin temperature
429      ! minus foundation temperature. (Can be negative.) In K.
430     
431      !$OMP THREADPRIVATE(ds_ns, dt_ns)
432
433    CONTAINS
434
435!======================================================================
436SUBROUTINE phys_state_var_init(read_climoz)
437USE dimphy
438USE aero_mod
439USE infotrac_phy, ONLY : nbtr
440USE indice_sol_mod
441use config_ocean_skin_m, only: activate_ocean_skin
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      ALLOCATE(pctsrf(klon,nbsrf))
455      ALLOCATE(ftsol(klon,nbsrf))
456      ALLOCATE(qsol(klon),fevap(klon,nbsrf))
457      ALLOCATE(z0m(klon,nbsrf+1),z0h(klon,nbsrf+1),agesno(klon,nbsrf))
458!FC
459      ALLOCATE(treedrg(klon,klev,nbsrf))
460      ALLOCATE(falb1(klon,nbsrf))
461      ALLOCATE(falb2(klon,nbsrf))
462!albedo SB >>>
463      ALLOCATE(falb_dir(klon,nsw,nbsrf),falb_dif(klon,nsw,nbsrf))
464      ALLOCATE(chl_con(klon))
465!albedo SB <<<
466      ALLOCATE(rain_fall(klon))
467      ALLOCATE(snow_fall(klon))
468      ALLOCATE(solsw(klon), sollw(klon))
469      ALLOCATE(radsol(klon))
470      ALLOCATE(swradcorr(klon))
471      ALLOCATE(zmea(klon), zstd(klon), zsig(klon), zgam(klon))
472      ALLOCATE(zthe(klon), zpic(klon), zval(klon))
473
474      ALLOCATE(rugoro(klon))
475      ALLOCATE(t_ancien(klon,klev), q_ancien(klon,klev))
476      ALLOCATE(ql_ancien(klon,klev), qs_ancien(klon,klev))
477      ALLOCATE(prw_ancien(klon), prlw_ancien(klon), prsw_ancien(klon))
478      ALLOCATE(u_ancien(klon,klev), v_ancien(klon,klev))
479!!! Rom P >>>
480      ALLOCATE(tr_ancien(klon,klev,nbtr))
481!!! Rom P <<<
482      ALLOCATE(clwcon(klon,klev),rnebcon(klon,klev))
483      ALLOCATE(qtc_cv(klon,klev),sigt_cv(klon,klev))
484      ALLOCATE(ratqs(klon,klev))
485      ALLOCATE(pbl_tke(klon,klev+1,nbsrf+1))
486!nrlmd<
487      ALLOCATE(delta_tsurf(klon,nbsrf))
488!>nrlmd
489      ALLOCATE(coefh(klon,klev+1,nbsrf+1))
490      ALLOCATE(coefm(klon,klev+1,nbsrf+1))
491      ALLOCATE(zmax0(klon), f0(klon))
492      ALLOCATE(sig1(klon,klev), w01(klon,klev))
493      ALLOCATE(entr_therm(klon,klev), fm_therm(klon,klev+1))
494      ALLOCATE(detr_therm(klon,klev))
495!     pour phsystoke avec thermiques
496      ALLOCATE(clwcon0th(klon,klev),rnebcon0th(klon,klev))
497! radiation outputs
498      ALLOCATE(swdnc0(klon,klevp1), swdn0(klon,klevp1), swdn(klon,klevp1))
499      ALLOCATE(swupc0(klon,klevp1), swup0(klon,klevp1), swup(klon,klevp1))
500      ALLOCATE(lwdnc0(klon,klevp1), lwdn0(klon,klevp1), lwdn(klon,klevp1))
501      ALLOCATE(lwupc0(klon,klevp1), lwup0(klon,klevp1), lwup(klon,klevp1))
502      ALLOCATE(SWdn200clr(klon), SWdn200(klon))
503      ALLOCATE(SWup200clr(klon), SWup200(klon))
504      ALLOCATE(LWdn200clr(klon), LWdn200(klon))
505      ALLOCATE(LWup200clr(klon), LWup200(klon))
506      ALLOCATE(LWdnTOA(klon), LWdnTOAclr(klon))
507! pressure level
508      ALLOCATE(tsumSTD(klon,nlevSTD,nout))
509      ALLOCATE(usumSTD(klon,nlevSTD,nout), vsumSTD(klon,nlevSTD,nout))
510      ALLOCATE(wsumSTD(klon,nlevSTD,nout), phisumSTD(klon,nlevSTD,nout))
511      ALLOCATE(qsumSTD(klon,nlevSTD,nout), rhsumSTD(klon,nlevSTD,nout))
512      ALLOCATE(tnondef(klon,nlevSTD,nout))
513      ALLOCATE(uvsumSTD(klon,nlevSTD,nout))
514      ALLOCATE(vqsumSTD(klon,nlevSTD,nout))
515      ALLOCATE(vTsumSTD(klon,nlevSTD,nout))
516      ALLOCATE(wqsumSTD(klon,nlevSTD,nout))
517      ALLOCATE(vphisumSTD(klon,nlevSTD,nout))
518      ALLOCATE(wTsumSTD(klon,nlevSTD,nout))
519      ALLOCATE(u2sumSTD(klon,nlevSTD,nout))
520      ALLOCATE(v2sumSTD(klon,nlevSTD,nout))
521      ALLOCATE(T2sumSTD(klon,nlevSTD,nout))
522      ALLOCATE(O3sumSTD(klon,nlevSTD,nout))
523      ALLOCATE(O3daysumSTD(klon,nlevSTD,nout))
524!IM beg
525      ALLOCATE(wlevSTD(klon,nlevSTD), ulevSTD(klon,nlevSTD), vlevSTD(klon,nlevSTD))
526      ALLOCATE(tlevSTD(klon,nlevSTD), qlevSTD(klon,nlevSTD), rhlevSTD(klon,nlevSTD))
527      ALLOCATE(philevSTD(klon,nlevSTD))
528      ALLOCATE(uvSTD(klon,nlevSTD),vqSTD(klon,nlevSTD))
529      ALLOCATE(vTSTD(klon,nlevSTD),wqSTD(klon,nlevSTD))
530      ALLOCATE(vphiSTD(klon,nlevSTD),wTSTD(klon,nlevSTD))
531      ALLOCATE(u2STD(klon,nlevSTD),v2STD(klon,nlevSTD))
532      ALLOCATE(T2STD(klon,nlevSTD))
533      ALLOCATE(O3STD(klon,nlevSTD))
534      ALLOCATE(O3daySTD(klon,nlevSTD))
535!IM end
536      ALLOCATE(seed_old(klon,napisccp))
537      ALLOCATE(zuthe(klon),zvthe(klon))
538      ALLOCATE(alb_neig(klon))
539!cloud base mass flux
540      ALLOCATE(ema_cbmf(klon))
541!cloud base pressure & cloud top pressure
542      ALLOCATE(ema_pcb(klon), ema_pct(klon))
543!
544      ALLOCATE(Ma(klon,klev))
545      ALLOCATE(qcondc(klon,klev))
546      ALLOCATE(wd(klon))
547      ALLOCATE(sigd(klon))
548      ALLOCATE(cin(klon), ALE(klon), ALP(klon))
549      ALLOCATE(ftd(klon,klev), fqd(klon,klev))
550      ALLOCATE(Ale_bl(klon))
551      ALLOCATE(ale_wake(klon))
552      ALLOCATE(ale_bl_stat(klon))
553      ALLOCATE(Alp_bl(klon))
554      ALLOCATE(lalim_conv(klon))
555      ALLOCATE(wght_th(klon,klev))
556      ALLOCATE(wake_deltat(klon,klev), wake_deltaq(klon,klev))
557      ALLOCATE(wake_s(klon), awake_dens(klon), wake_dens(klon))
558      ALLOCATE(wake_Cstar(klon))
559      ALLOCATE(wake_pe(klon), wake_fip(klon))
560!jyg<
561      ALLOCATE(wake_delta_pbl_TKE(klon,klev+1,nbsrf+1))
562!>jyg
563      ALLOCATE(pfrac_impa(klon,klev), pfrac_nucl(klon,klev))
564      ALLOCATE(pfrac_1nucl(klon,klev))
565      ALLOCATE(total_rain(klon), nday_rain(klon))
566      ALLOCATE(albsol1(klon), albsol2(klon))
567!albedo SB >>>
568      ALLOCATE(albsol_dir(klon,nsw),albsol_dif(klon,nsw))
569!albedo SB <<<
570
571      if (read_climoz <= 1) then
572         ALLOCATE(wo(klon,klev, 1))
573      else
574         ! read_climoz == 2
575         ALLOCATE(wo(klon,klev, 2))
576      end if
577     
578      ALLOCATE(clwcon0(klon,klev),rnebcon0(klon,klev))
579      ALLOCATE(heat(klon,klev), heat0(klon,klev))
580      ALLOCATE(cool(klon,klev), cool0(klon,klev))
581      ALLOCATE(topsw(klon), toplw(klon))
582      ALLOCATE(sollwdown(klon), sollwdownclr(klon))
583      ALLOCATE(toplwdown(klon), toplwdownclr(klon))
584      ALLOCATE(topsw0(klon),toplw0(klon),solsw0(klon),sollw0(klon))
585      ALLOCATE(albpla(klon))
586!IM ajout variables CFMIP2/CMIP5
587      ALLOCATE(heatp(klon,klev), coolp(klon,klev))
588      ALLOCATE(heat0p(klon,klev), cool0p(klon,klev))
589      ALLOCATE(radsolp(klon), topswp(klon), toplwp(klon))
590      ALLOCATE(albplap(klon))
591      ALLOCATE(solswp(klon), sollwp(klon))
592      ALLOCATE(gustiness(klon))
593      ALLOCATE(sollwdownp(klon))
594      ALLOCATE(topsw0p(klon),toplw0p(klon))
595      ALLOCATE(solsw0p(klon),sollw0p(klon))
596      ALLOCATE(lwdnc0p(klon,klevp1), lwdn0p(klon,klevp1), lwdnp(klon,klevp1))
597      ALLOCATE(lwupc0p(klon,klevp1), lwup0p(klon,klevp1), lwupp(klon,klevp1))
598      ALLOCATE(swdnc0p(klon,klevp1), swdn0p(klon,klevp1), swdnp(klon,klevp1))
599      ALLOCATE(swupc0p(klon,klevp1), swup0p(klon,klevp1), swupp(klon,klevp1))
600
601      ALLOCATE(cape(klon))
602      ALLOCATE(pbase(klon),bbase(klon))
603      ALLOCATE(zqasc(klon,klev))
604      ALLOCATE(ibas_con(klon), itop_con(klon))
605      ALLOCATE(rain_con(klon), snow_con(klon))
606      ALLOCATE(rlonPOS(klon))
607      ALLOCATE(newsst(klon))
608      ALLOCATE(ustar(klon,nbsrf),u10m(klon,nbsrf), v10m(klon,nbsrf),wstar(klon,nbsrf+1))
609      ALLOCATE(topswad(klon), solswad(klon))
610      ALLOCATE(topswai(klon), solswai(klon))
611      ALLOCATE(tau_aero(klon,klev,naero_grp,nbands),piz_aero(klon,klev,naero_grp,nbands),cg_aero(klon,klev,naero_grp,nbands))
612      ALLOCATE(tau_aero_sw_rrtm(klon,klev,2,nbands_sw_rrtm),piz_aero_sw_rrtm(klon,klev,2,nbands_sw_rrtm))
613      ALLOCATE(cg_aero_sw_rrtm(klon,klev,2,nbands_sw_rrtm))
614      ALLOCATE(tau_aero_lw_rrtm(klon,klev,2,nbands_lw_rrtm),piz_aero_lw_rrtm(klon,klev,2,nbands_lw_rrtm))
615      ALLOCATE(cg_aero_lw_rrtm(klon,klev,2,nbands_lw_rrtm))
616      ALLOCATE(ccm(klon,klev,nbands))
617
618!!! nrlmd le 10/04/2012
619      ALLOCATE(ale_bl_trig(klon))
620!!! fin nrlmd le 10/04/2012
621      if (ok_gwd_rando) allocate(du_gwd_rando(klon, klev))
622      if (.not. ok_hines .and. ok_gwd_rando) allocate(du_gwd_front(klon, klev))
623
624      if (activate_ocean_skin >= 1) ALLOCATE(ds_ns(klon), dt_ns(klon))
625
626    END SUBROUTINE phys_state_var_init
627
628!======================================================================
629    SUBROUTINE phys_state_var_end
630      ! Useful only for lmdz1d.
631!USE dimphy
632USE indice_sol_mod
633use config_ocean_skin_m, only: activate_ocean_skin
634IMPLICIT NONE
635include "clesphys.h"
636
637      deallocate(pctsrf, ftsol, falb1, falb2)
638      deallocate(qsol,fevap,z0m,z0h,agesno)
639!FC
640      deallocate(treedrg)
641      deallocate(rain_fall, snow_fall, solsw, sollw, radsol, swradcorr)
642      deallocate(zmea, zstd, zsig, zgam)
643      deallocate(zthe, zpic, zval)
644      deallocate(rugoro, t_ancien, q_ancien, clwcon, rnebcon)
645      deallocate(qs_ancien, ql_ancien)
646      deallocate(prw_ancien, prlw_ancien, prsw_ancien)
647      deallocate(qtc_cv,sigt_cv)
648      deallocate(u_ancien, v_ancien)
649      deallocate(tr_ancien)                           !RomP
650      deallocate(ratqs, pbl_tke,coefh,coefm)
651!nrlmd<
652      deallocate(delta_tsurf)
653!>nrlmd
654      deallocate(zmax0, f0)
655      deallocate(sig1, w01)
656      deallocate(entr_therm, fm_therm)
657      deallocate(detr_therm)
658      deallocate(clwcon0th, rnebcon0th)
659! radiation outputs
660      deallocate(swdnc0, swdn0, swdn)
661      deallocate(swupc0, swup0, swup)
662      deallocate(lwdnc0, lwdn0, lwdn)
663      deallocate(lwupc0, lwup0, lwup)
664      deallocate(SWdn200clr, SWdn200)
665      deallocate(SWup200clr, SWup200)
666      deallocate(LWdn200clr, LWdn200)
667      deallocate(LWup200clr, LWup200)
668      deallocate(LWdnTOA, LWdnTOAclr)
669! pressure level
670      deallocate(tsumSTD)
671      deallocate(usumSTD, vsumSTD)
672      deallocate(wsumSTD, phisumSTD)
673      deallocate(tnondef)
674      deallocate(qsumSTD, rhsumSTD)
675      deallocate(uvsumSTD)
676      deallocate(vqsumSTD)
677      deallocate(vTsumSTD)
678      deallocate(wqsumSTD)
679      deallocate(vphisumSTD)
680      deallocate(wTsumSTD)
681      deallocate(u2sumSTD)
682      deallocate(v2sumSTD)
683      deallocate(T2sumSTD)
684      deallocate(O3sumSTD)
685      deallocate(O3daysumSTD)
686!IM beg
687      deallocate(wlevSTD,ulevSTD,vlevSTD,tlevSTD,qlevSTD,rhlevSTD,philevSTD)
688      deallocate(uvSTD,vqSTD,vTSTD,wqSTD,vphiSTD,wTSTD,u2STD,v2STD,T2STD,O3STD,O3daySTD)
689!IM end
690      deallocate(seed_old)
691      deallocate(zuthe, zvthe)
692      deallocate(alb_neig)
693      deallocate(ema_cbmf)
694      deallocate(ema_pcb, ema_pct)
695      deallocate(Ma, qcondc)
696      deallocate(wd, sigd)
697      deallocate(cin, ALE, ALP)
698      deallocate(ftd, fqd)
699      deallocate(Ale_bl, Alp_bl)
700      deallocate(ale_wake)
701      deallocate(ale_bl_stat)
702      deallocate(lalim_conv, wght_th)
703      deallocate(wake_deltat, wake_deltaq)
704      deallocate(wake_s, awake_dens, wake_dens)
705      deallocate(wake_Cstar, wake_pe, wake_fip)
706!jyg<
707      deallocate(wake_delta_pbl_TKE)
708!>jyg
709      deallocate(pfrac_impa, pfrac_nucl)
710      deallocate(pfrac_1nucl)
711      deallocate(total_rain, nday_rain)
712      deallocate(albsol1, albsol2)
713!albedo SB >>>
714      deallocate(albsol_dir,albsol_dif,falb_dir,falb_dif,chl_con)
715!albedo SB <<<
716      deallocate(wo)
717      deallocate(clwcon0,rnebcon0)
718      deallocate(heat, heat0)
719      deallocate(cool, cool0)
720      deallocate(topsw, toplw)
721      deallocate(sollwdown, sollwdownclr)
722      deallocate(gustiness)
723      deallocate(toplwdown, toplwdownclr)
724      deallocate(topsw0,toplw0,solsw0,sollw0)
725      deallocate(albpla)
726!IM ajout variables CFMIP2/CMIP5
727      deallocate(heatp, coolp)
728      deallocate(heat0p, cool0p)
729      deallocate(radsolp, topswp, toplwp)
730      deallocate(albplap)
731      deallocate(solswp, sollwp)
732      deallocate(sollwdownp)
733      deallocate(topsw0p,toplw0p)
734      deallocate(solsw0p,sollw0p)
735      deallocate(lwdnc0p, lwdn0p, lwdnp)
736      deallocate(lwupc0p, lwup0p, lwupp)
737      deallocate(swdnc0p, swdn0p, swdnp)
738      deallocate(swupc0p, swup0p, swupp)
739      deallocate(cape)
740      deallocate(pbase,bbase)
741      deallocate(zqasc)
742      deallocate(ibas_con, itop_con)
743      deallocate(rain_con, snow_con)
744      deallocate(rlonPOS)
745      deallocate(newsst)
746      deallocate(ustar,u10m, v10m,wstar)
747      deallocate(topswad, solswad)
748      deallocate(topswai, solswai)
749      deallocate(tau_aero,piz_aero,cg_aero)
750      deallocate(tau_aero_sw_rrtm,piz_aero_sw_rrtm,cg_aero_sw_rrtm)
751      deallocate(tau_aero_lw_rrtm,piz_aero_lw_rrtm,cg_aero_lw_rrtm)
752      deallocate(ccm)
753      if (ok_gwd_rando) deallocate(du_gwd_rando)
754      if (.not. ok_hines .and. ok_gwd_rando) deallocate(du_gwd_front)
755       
756!!! nrlmd le 10/04/2012
757      deallocate(ale_bl_trig)
758!!! fin nrlmd le 10/04/2012
759      if (activate_ocean_skin >= 1) deALLOCATE(ds_ns, dt_ns)
760
761END SUBROUTINE phys_state_var_end
762
763      END MODULE phys_state_var_mod
Note: See TracBrowser for help on using the repository browser.