source: LMDZ6/branches/contrails/libf/phylmd/phys_state_var_mod.F90 @ 5618

Last change on this file since 5618 was 5618, checked in by aborella, 8 weeks ago

Merge with trunk testing r5597. We have convergence in prod and debug in NPv7.0.1c

  • 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: 37.9 KB
Line 
1!
2! $Id: phys_state_var_mod.F90 5618 2025-04-15 09:56:45Z aborella $
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 :: beta_aridity(:,:)
35!$OMP THREADPRIVATE(beta_aridity)
36      REAL,ALLOCATABLE,SAVE :: qsol(:),fevap(:,:),z0m(:,:),z0h(:,:),agesno(:,:)
37!$OMP THREADPRIVATE(qsol,fevap,z0m,z0h,agesno)
38!FC drag des arbres
39      REAL, ALLOCATABLE, SAVE :: treedrg(:,:,:)
40!$OMP THREADPRIVATE(treedrg)
41
42!      character(len=6), SAVE :: ocean
43!!!!!!$OMP THREADPRIVATE(ocean)
44!      logical, SAVE :: ok_veget
45!!!!!!$OMP THREADPRIVATE(ok_veget)
46      REAL, ALLOCATABLE, SAVE :: falb1(:,:), falb2(:,:)
47!$OMP THREADPRIVATE(falb1, falb2)
48
49!albedo SB >>>
50      REAL, ALLOCATABLE, SAVE :: falb_dif(:,:,:), falb_dir(:,:,:)
51      REAL, ALLOCATABLE, SAVE :: chl_con(:)
52!$OMP THREADPRIVATE(falb_dir,falb_dif,chl_con)
53!albedo SB <<<
54
55
56      REAL, ALLOCATABLE, SAVE :: rain_fall(:), snow_fall(:), bs_fall(:)
57!$OMP THREADPRIVATE( rain_fall, snow_fall, bs_fall)
58      REAL, ALLOCATABLE, SAVE :: solsw(:), solswfdiff(:), sollw(:)
59!$OMP THREADPRIVATE(solsw, solswfdiff, sollw)
60      REAL, ALLOCATABLE, SAVE :: radsol(:)
61!$OMP THREADPRIVATE(radsol)
62      REAL, ALLOCATABLE, SAVE :: swradcorr(:)
63!$OMP THREADPRIVATE(swradcorr)
64#ifdef ISO
65      REAL,ALLOCATABLE,SAVE :: xtsol(:,:),fxtevap(:,:,:)
66!$OMP THREADPRIVATE(xtsol,fxtevap)
67      REAL, ALLOCATABLE, SAVE :: xtrain_fall(:,:), xtsnow_fall(:,:)
68!$OMP THREADPRIVATE(xtrain_fall,xtsnow_fall)
69#endif
70
71!clesphy0 param physiq
72!
73! Parametres de l'Orographie a l'Echelle Sous-Maille (OESM):
74!
75      REAL, ALLOCATABLE, SAVE :: zmea(:), zstd(:), zsig(:), zgam(:)
76!$OMP THREADPRIVATE(zmea, zstd, zsig, zgam)
77      REAL, ALLOCATABLE, SAVE :: zthe(:), zpic(:), zval(:)
78!$OMP THREADPRIVATE(zthe, zpic, zval)
79!     REAL tabcntr0(100)
80      REAL, ALLOCATABLE, SAVE :: rugoro(:)
81!$OMP THREADPRIVATE(rugoro)
82      REAL, ALLOCATABLE, SAVE :: t_ancien(:,:), q_ancien(:,:)
83!$OMP THREADPRIVATE(t_ancien, q_ancien)
84      REAL, ALLOCATABLE, SAVE :: ql_ancien(:,:), qs_ancien(:,:), qbs_ancien(:,:)
85!$OMP THREADPRIVATE(ql_ancien, qs_ancien, qbs_ancien)
86      REAL, ALLOCATABLE, SAVE :: prw_ancien(:), prlw_ancien(:), prsw_ancien(:), prbsw_ancien(:)
87!$OMP THREADPRIVATE(prw_ancien, prlw_ancien, prsw_ancien, prbsw_ancien)
88#ifdef ISO
89      REAL, ALLOCATABLE, SAVE :: xt_ancien(:,:,:),xtl_ancien(:,:,:),xts_ancien(:,:,:), xtbs_ancien(:,:,:)
90!$OMP THREADPRIVATE(xt_ancien,xtl_ancien,xts_ancien,xtbs_ancien)
91#endif
92      REAL, ALLOCATABLE, SAVE :: u_ancien(:,:), v_ancien(:,:)
93!$OMP THREADPRIVATE(u_ancien, v_ancien)
94      REAL, ALLOCATABLE, SAVE :: cf_ancien(:,:), qvc_ancien(:,:)
95!$OMP THREADPRIVATE(cf_ancien, qvc_ancien)
96      REAL, ALLOCATABLE, SAVE :: cfa_ancien(:,:), pcf_ancien(:,:)
97!$OMP THREADPRIVATE(cfa_ancien, pcf_ancien)
98      REAL, ALLOCATABLE, SAVE :: qva_ancien(:,:), qia_ancien(:,:)
99!$OMP THREADPRIVATE(qva_ancien, qia_ancien)
100      REAL, ALLOCATABLE, SAVE :: cwcon(:,:), cwcon0(:,:)
101!$OMP THREADPRIVATE(cwcon, cwcon0)
102!!! RomP >>>
103      REAL, ALLOCATABLE, SAVE :: tr_ancien(:,:,:)
104!$OMP THREADPRIVATE(tr_ancien)
105!!! RomP <<<
106      LOGICAL, SAVE :: ancien_ok
107!$OMP THREADPRIVATE(ancien_ok)
108      REAL, ALLOCATABLE, SAVE :: clwcon(:,:),rnebcon(:,:)
109!$OMP THREADPRIVATE(clwcon,rnebcon)
110      REAL, ALLOCATABLE, SAVE :: qtc_cv(:,:),sigt_cv(:,:),detrain_cv(:,:),fm_cv(:,:)
111!$OMP THREADPRIVATE(qtc_cv,sigt_cv,detrain_cv,fm_cv)
112      REAL, ALLOCATABLE, SAVE :: ratqs(:,:)
113!$OMP THREADPRIVATE(ratqs)
114      REAL, ALLOCATABLE, SAVE :: pbl_tke(:,:,:) ! turb kinetic energy
115      REAL, ALLOCATABLE, SAVE :: coefh(:,:,:) ! Kz enthalpie
116      REAL, ALLOCATABLE, SAVE :: coefm(:,:,:) ! Kz momentum
117!$OMP THREADPRIVATE(pbl_tke, coefh,coefm)
118      REAL, ALLOCATABLE, SAVE :: zmax0(:), f0(:) !
119!$OMP THREADPRIVATE(zmax0,f0)
120      REAL, ALLOCATABLE, SAVE :: sig1(:,:), w01(:,:)
121!$OMP THREADPRIVATE(sig1,w01)
122      REAL, ALLOCATABLE, SAVE :: entr_therm(:,:), fm_therm(:,:)
123!$OMP THREADPRIVATE(entr_therm,fm_therm)
124      REAL, ALLOCATABLE, SAVE :: detr_therm(:,:)
125!$OMP THREADPRIVATE(detr_therm)
126!IM 150408
127!     pour phsystoke avec thermiques
128      REAL,ALLOCATABLE,SAVE :: clwcon0th(:,:),rnebcon0th(:,:)
129!$OMP THREADPRIVATE(clwcon0th,rnebcon0th)
130! radiation outputs
131      REAL,ALLOCATABLE,SAVE :: swdnc0(:,:), swdn0(:,:), swdn(:,:)
132!$OMP THREADPRIVATE(swdnc0,swdn0,swdn)
133      REAL,ALLOCATABLE,SAVE :: swupc0(:,:), swup0(:,:), swup(:,:)
134!$OMP THREADPRIVATE(swupc0, swup0,swup)
135      REAL,ALLOCATABLE,SAVE :: SWdn200clr(:), SWdn200(:)
136!$OMP THREADPRIVATE(SWdn200clr,SWdn200)
137      REAL,ALLOCATABLE,SAVE :: SWup200clr(:), SWup200(:)
138!$OMP THREADPRIVATE(SWup200clr,SWup200)
139      REAL,ALLOCATABLE,SAVE :: lwdnc0(:,:), lwdn0(:,:), lwdn(:,:)
140!$OMP THREADPRIVATE(lwdnc0,lwdn0,lwdn)
141      REAL,ALLOCATABLE,SAVE :: lwupc0(:,:), lwup0(:,:), lwup(:,:)
142!$OMP THREADPRIVATE(lwupc0,lwup0,lwup)
143      REAL,ALLOCATABLE,SAVE :: LWdn200clr(:), LWdn200(:)
144!$OMP THREADPRIVATE(LWdn200clr,LWdn200)
145      REAL,ALLOCATABLE,SAVE :: LWup200clr(:), LWup200(:)
146!$OMP THREADPRIVATE(LWup200clr,LWup200)
147      REAL,ALLOCATABLE,SAVE :: LWdnTOA(:), LWdnTOAclr(:)
148!$OMP THREADPRIVATE(LWdnTOA,LWdnTOAclr)
149! pressure level
150      REAL,ALLOCATABLE,SAVE :: tsumSTD(:,:,:)
151!$OMP THREADPRIVATE(tsumSTD)
152      REAL,ALLOCATABLE,SAVE :: usumSTD(:,:,:), vsumSTD(:,:,:)
153!$OMP THREADPRIVATE(usumSTD,vsumSTD)
154      REAL,ALLOCATABLE,SAVE :: wsumSTD(:,:,:), phisumSTD(:,:,:)
155!$OMP THREADPRIVATE(wsumSTD,phisumSTD)
156      REAL,ALLOCATABLE,SAVE :: qsumSTD(:,:,:), rhsumSTD(:,:,:)
157!$OMP THREADPRIVATE(qsumSTD,rhsumSTD)
158      REAL,ALLOCATABLE,SAVE :: tnondef(:,:,:)
159!$OMP THREADPRIVATE(tnondef)
160      REAL,ALLOCATABLE,SAVE :: uvsumSTD(:,:,:)
161!$OMP THREADPRIVATE(uvsumSTD)
162      REAL,ALLOCATABLE,SAVE :: vqsumSTD(:,:,:)
163!$OMP THREADPRIVATE(vqsumSTD)
164      REAL,ALLOCATABLE,SAVE :: vTsumSTD(:,:,:)
165!$OMP THREADPRIVATE(vTsumSTD)
166      REAL,ALLOCATABLE,SAVE :: wqsumSTD(:,:,:)
167!$OMP THREADPRIVATE(wqsumSTD)
168      REAL,ALLOCATABLE,SAVE :: vphisumSTD(:,:,:)
169!$OMP THREADPRIVATE(vphisumSTD)
170      REAL,ALLOCATABLE,SAVE :: wTsumSTD(:,:,:)
171!$OMP THREADPRIVATE(wTsumSTD)
172      REAL,ALLOCATABLE,SAVE :: u2sumSTD(:,:,:)
173!$OMP THREADPRIVATE(u2sumSTD)
174      REAL,ALLOCATABLE,SAVE :: v2sumSTD(:,:,:)
175!$OMP THREADPRIVATE(v2sumSTD)
176      REAL,ALLOCATABLE,SAVE :: T2sumSTD(:,:,:)
177!$OMP THREADPRIVATE(T2sumSTD)
178      REAL,ALLOCATABLE,SAVE :: O3sumSTD(:,:,:), O3daysumSTD(:,:,:)
179!$OMP THREADPRIVATE(O3sumSTD,O3daysumSTD)
180!IM begin
181      REAL,ALLOCATABLE,SAVE :: wlevSTD(:,:), ulevSTD(:,:), vlevSTD(:,:)
182!$OMP THREADPRIVATE(wlevSTD,ulevSTD,vlevSTD)
183      REAL,ALLOCATABLE,SAVE :: tlevSTD(:,:), qlevSTD(:,:), rhlevSTD(:,:)
184!$OMP THREADPRIVATE(tlevSTD,qlevSTD,rhlevSTD)
185      REAL,ALLOCATABLE,SAVE :: philevSTD(:,:)
186!$OMP THREADPRIVATE(philevSTD)
187      REAL,ALLOCATABLE,SAVE :: uvSTD(:,:)
188!$OMP THREADPRIVATE(uvSTD)
189      REAL,ALLOCATABLE,SAVE :: vqSTD(:,:)
190!$OMP THREADPRIVATE(vqSTD)
191      REAL,ALLOCATABLE,SAVE :: vTSTD(:,:)
192!$OMP THREADPRIVATE(vTSTD)
193      REAL,ALLOCATABLE,SAVE :: wqSTD(:,:)
194!$OMP THREADPRIVATE(wqSTD)
195      REAL,ALLOCATABLE,SAVE :: vphiSTD(:,:)
196!$OMP THREADPRIVATE(vphiSTD)
197      REAL,ALLOCATABLE,SAVE :: wTSTD(:,:)
198!$OMP THREADPRIVATE(wTSTD)
199      REAL,ALLOCATABLE,SAVE :: u2STD(:,:)
200!$OMP THREADPRIVATE(u2STD)
201      REAL,ALLOCATABLE,SAVE :: v2STD(:,:)
202!$OMP THREADPRIVATE(v2STD)
203      REAL,ALLOCATABLE,SAVE :: T2STD(:,:)
204!$OMP THREADPRIVATE(T2STD)
205      REAL,ALLOCATABLE,SAVE :: O3STD(:,:), O3daySTD(:,:)
206!$OMP THREADPRIVATE(O3STD,O3daySTD)
207!IM end
208      INTEGER,ALLOCATABLE,SAVE :: seed_old(:,:)
209!$OMP THREADPRIVATE(seed_old)
210      REAL,ALLOCATABLE,SAVE :: zuthe(:),zvthe(:)
211!$OMP THREADPRIVATE(zuthe,zvthe)
212      REAL,ALLOCATABLE,SAVE :: alb_neig(:)
213!$OMP THREADPRIVATE(alb_neig)
214!cloud base mass flux
215      REAL,ALLOCATABLE,SAVE :: ema_cbmf(:)
216!$OMP THREADPRIVATE(ema_cbmf)
217!cloud base pressure & cloud top pressure
218      REAL,ALLOCATABLE,SAVE :: ema_pcb(:), ema_pct(:)
219!$OMP THREADPRIVATE(ema_pcb,ema_pct)
220      REAL,ALLOCATABLE,SAVE :: Mipsh(:,:)     ! mass flux shed from  adiab. ascents
221!$OMP THREADPRIVATE(Mipsh)
222      REAL,ALLOCATABLE,SAVE :: Ma(:,:)       ! undilute upward mass flux
223!$OMP THREADPRIVATE(Ma)
224      REAL,ALLOCATABLE,SAVE :: qcondc(:,:)    ! in-cld water content from convect
225!$OMP THREADPRIVATE(qcondc)
226      REAL,ALLOCATABLE,SAVE :: wd(:) ! sb
227!$OMP THREADPRIVATE(wd)
228      REAL,ALLOCATABLE,SAVE :: sigd(:)
229!$OMP THREADPRIVATE(sigd)
230!
231      REAL,ALLOCATABLE,SAVE :: cin(:)
232!$OMP THREADPRIVATE(cin)
233! ftd : convective heating due to unsaturated downdraughts
234      REAL,ALLOCATABLE,SAVE :: ftd(:,:)
235!$OMP THREADPRIVATE(ftd)
236! fqd : convective moistening due to unsaturated downdraughts
237      REAL,ALLOCATABLE,SAVE :: fqd(:,:),fqcomp(:,:)     
238!$OMP THREADPRIVATE(fqd,fqcomp)
239#ifdef ISO
240      REAL, ALLOCATABLE, SAVE :: fxtd(:,:,:)
241!$OMP THREADPRIVATE(fxtd)
242#endif
243!34EK
244! -- Variables de controle de ALE et ALP
245!ALE : Energie disponible pour soulevement : utilisee par la
246!      convection d'Emanuel pour le declenchement et la regulation
247      REAL,ALLOCATABLE,SAVE :: ALE(:)
248!$OMP THREADPRIVATE(ALE)
249!ALP : Puissance  disponible pour soulevement
250      REAL,ALLOCATABLE,SAVE :: ALP(:)
251!$OMP THREADPRIVATE(ALP)
252!
253! nouvelles variables pour le couplage convection-couche limite
254      REAL,ALLOCATABLE,SAVE :: Ale_bl(:)
255!$OMP THREADPRIVATE(Ale_bl)
256      REAL,ALLOCATABLE,SAVE :: Alp_bl(:)
257!$OMP THREADPRIVATE(Alp_bl)
258      INTEGER,ALLOCATABLE,SAVE :: lalim_conv(:)
259!$OMP THREADPRIVATE(lalim_conv)
260      REAL,ALLOCATABLE,SAVE :: wght_th(:,:)
261!$OMP THREADPRIVATE(wght_th)
262      REAL,ALLOCATABLE,SAVE    :: ale_wake(:)
263!$OMP THREADPRIVATE(ale_wake)
264      REAL,ALLOCATABLE,SAVE    :: ale_bl_stat(:)
265!$OMP THREADPRIVATE(ale_bl_stat)
266!
267! variables de la wake
268! wake_deltat : ecart de temperature avec la zone non perturbee
269! wake_deltaq : ecart d'humidite avec la zone non perturbee
270! wake_s      : fraction surfacique occupee par la poche froide
271! awake_s     : surface fraction covered by active wakes
272! wake_dens   : number of wakes per unit area
273! awake_dens  : number of active wakes per unit area
274! cv_gen      : birth rate of cumulonimbus per unit area.
275! wake_occ    : occurence of wakes (= 1 if wakes occur, =0 otherwise)
276! wake_Cstar  : vitesse d'etalement de la poche
277! wake_pe     : wake potential energy - WAPE
278! wake_fip    : Gust Front Impinging power - ALP
279      REAL,ALLOCATABLE,SAVE :: wake_deltat(:,:)
280!$OMP THREADPRIVATE(wake_deltat)
281      REAL,ALLOCATABLE,SAVE :: wake_deltaq(:,:)
282!$OMP THREADPRIVATE(wake_deltaq)
283#ifdef ISO
284      REAL, ALLOCATABLE, SAVE :: wake_deltaxt(:,:,:)
285!$OMP THREADPRIVATE(wake_deltaxt)
286#endif
287      REAL,ALLOCATABLE,SAVE :: wake_s(:), awake_s(:)
288!$OMP THREADPRIVATE(wake_s, awake_s)
289      REAL,ALLOCATABLE,SAVE :: wake_dens(:), awake_dens(:)
290!$OMP THREADPRIVATE(wake_dens, awake_dens)
291      REAL,ALLOCATABLE,SAVE :: cv_gen(:)
292!$OMP THREADPRIVATE(cv_gen)
293      REAL,ALLOCATABLE,SAVE :: wake_Cstar(:)
294!$OMP THREADPRIVATE(wake_Cstar)
295      REAL,ALLOCATABLE,SAVE :: wake_pe(:)
296!$OMP THREADPRIVATE(wake_pe)
297      REAL,ALLOCATABLE,SAVE :: wake_fip(:)
298!$OMP THREADPRIVATE(wake_fip)
299!
300!jyg<
301! variables related to the spitting of the PBL between wake and
302! off-wake regions.
303! wake_delta_pbl_TKE : difference TKE_w - TKE_x
304      REAL,ALLOCATABLE,SAVE :: wake_delta_pbl_TKE(:,:,:)
305!$OMP THREADPRIVATE(wake_delta_pbl_TKE)
306!nrlmd<
307      REAL, ALLOCATABLE, SAVE :: delta_tsurf(:,:) ! Surface temperature difference inside-outside cold pool
308!$OMP THREADPRIVATE(delta_tsurf)
309!>nrlmd
310!>jyg
311!
312! pfrac_impa : Produits des coefs lessivage impaction
313! pfrac_nucl : Produits des coefs lessivage nucleation
314! pfrac_1nucl: Produits des coefs lessi nucl (alpha = 1)
315      REAL,ALLOCATABLE,SAVE :: pfrac_impa(:,:), pfrac_nucl(:,:)
316!$OMP THREADPRIVATE(pfrac_impa,pfrac_nucl)
317      REAL,ALLOCATABLE,SAVE :: pfrac_1nucl(:,:)
318!$OMP THREADPRIVATE(pfrac_1nucl)
319!
320      REAL,ALLOCATABLE,SAVE :: total_rain(:), nday_rain(:) 
321!$OMP THREADPRIVATE(total_rain,nday_rain)
322      REAL,ALLOCATABLE,SAVE :: ndayrain_mth(:)
323!$OMP THREADPRIVATE(ndayrain_mth)
324      REAL,ALLOCATABLE,SAVE :: paire_ter(:)
325!$OMP THREADPRIVATE(paire_ter)
326! albsol1: albedo du sol total pour SW visible
327! albsol2: albedo du sol total pour SW proche IR
328      REAL,ALLOCATABLE,SAVE :: albsol1(:), albsol2(:)
329!$OMP THREADPRIVATE(albsol1,albsol2)
330
331!albedo SB >>>
332      REAL,ALLOCATABLE,SAVE :: albsol_dif(:,:),albsol_dir(:,:)
333!$OMP THREADPRIVATE(albsol_dif,albsol_dir)
334!albedo SB <<<
335
336
337      REAL, ALLOCATABLE, SAVE:: wo(:, :, :)
338      ! column-density of ozone in a layer, in kilo-Dobsons
339      ! Third dimension has size 1 or 2.
340      ! "wo(:, :, 1)" is for the average day-night field,
341      ! "wo(:, :, 2)" is for daylight time.
342      !$OMP THREADPRIVATE(wo)
343
344! heat : chauffage solaire
345! heat0: chauffage solaire ciel clair
346! cool : refroidissement infrarouge
347! cool0 : refroidissement infrarouge ciel clair
348! sollwdown : downward LW flux at surface
349! sollwdownclr : downward CS LW flux at surface
350! toplwdown : downward CS LW flux at TOA
351! toplwdownclr : downward CS LW flux at TOA
352! heat_volc : chauffage solaire du au volcanisme
353! cool_volc : refroidissement infrarouge du au volcanisme
354      REAL,ALLOCATABLE,SAVE :: clwcon0(:,:),rnebcon0(:,:)
355!$OMP THREADPRIVATE(clwcon0,rnebcon0)
356      REAL,ALLOCATABLE,SAVE :: heat(:,:)   
357!$OMP THREADPRIVATE(heat)
358      REAL,ALLOCATABLE,SAVE :: heat0(:,:)
359!$OMP THREADPRIVATE(heat0)
360      REAL,ALLOCATABLE,SAVE :: cool(:,:)
361!$OMP THREADPRIVATE(cool)
362      REAL,ALLOCATABLE,SAVE :: cool0(:,:)
363!$OMP THREADPRIVATE(cool0)
364      REAL,ALLOCATABLE,SAVE :: heat_volc(:,:)   
365!$OMP THREADPRIVATE(heat_volc)
366      REAL,ALLOCATABLE,SAVE :: cool_volc(:,:)
367!$OMP THREADPRIVATE(cool_volc)
368      REAL,ALLOCATABLE,SAVE :: topsw(:), toplw(:)
369!$OMP THREADPRIVATE(topsw,toplw)
370      REAL,ALLOCATABLE,SAVE :: sollwdown(:)
371!$OMP THREADPRIVATE(sollwdown)
372      REAL,ALLOCATABLE,SAVE :: gustiness(:)
373!$OMP THREADPRIVATE(gustiness)
374      REAL,ALLOCATABLE,SAVE :: sollwdownclr(:)
375!$OMP THREADPRIVATE(sollwdownclr)
376      REAL,ALLOCATABLE,SAVE :: toplwdown(:)
377!$OMP THREADPRIVATE(toplwdown)
378      REAL,ALLOCATABLE,SAVE :: toplwdownclr(:)
379!$OMP THREADPRIVATE(toplwdownclr)
380      REAL,ALLOCATABLE,SAVE :: topsw0(:),toplw0(:),solsw0(:),sollw0(:)
381!$OMP THREADPRIVATE(topsw0,toplw0,solsw0,sollw0)
382      REAL,ALLOCATABLE,SAVE :: albpla(:)
383!$OMP THREADPRIVATE(albpla)
384
385!IM ajout variables CFMIP2/CMIP5
386      REAL,ALLOCATABLE,SAVE :: heatp(:,:), coolp(:,:)
387!$OMP THREADPRIVATE(heatp, coolp)
388      REAL,ALLOCATABLE,SAVE :: heat0p(:,:), cool0p(:,:)
389!$OMP THREADPRIVATE(heat0p, cool0p)
390      REAL,ALLOCATABLE,SAVE :: radsolp(:), topswp(:), toplwp(:)
391!$OMP THREADPRIVATE(radsolp, topswp, toplwp)
392      REAL,ALLOCATABLE,SAVE :: albplap(:)
393!$OMP THREADPRIVATE(albplap)
394      REAL,ALLOCATABLE,SAVE :: solswp(:), solswfdiffp(:), sollwp(:)
395!$OMP THREADPRIVATE(solswp, solswfdiffp, sollwp)
396      REAL,ALLOCATABLE,SAVE :: sollwdownp(:)
397!$OMP THREADPRIVATE(sollwdownp)
398      REAL,ALLOCATABLE,SAVE :: topsw0p(:),toplw0p(:)
399      REAL,ALLOCATABLE,SAVE :: solsw0p(:),sollw0p(:)
400!$OMP THREADPRIVATE(topsw0p,toplw0p,solsw0p,sollw0p)
401      REAL,ALLOCATABLE,SAVE :: lwdnc0p(:,:), lwdn0p(:,:), lwdnp(:,:)
402      REAL,ALLOCATABLE,SAVE :: lwupc0p(:,:), lwup0p(:,:), lwupp(:,:)
403!$OMP THREADPRIVATE(lwdnc0p, lwdn0p, lwdnp, lwupc0p, lwup0p, lwupp)
404      REAL,ALLOCATABLE,SAVE :: swdnc0p(:,:), swdn0p(:,:), swdnp(:,:)
405      REAL,ALLOCATABLE,SAVE :: swupc0p(:,:), swup0p(:,:), swupp(:,:)
406!$OMP THREADPRIVATE(swdnc0p, swdn0p, swdnp, swupc0p, swup0p, swupp)
407
408!AI ajout variables double appel Ecrad (3Deffect)
409      REAL,ALLOCATABLE,SAVE :: heat_s2(:,:), cool_s2(:,:)
410!$OMP THREADPRIVATE(heat_s2, cool_s2)
411      REAL,ALLOCATABLE,SAVE :: heat0_s2(:,:), cool0_s2(:,:)
412!$OMP THREADPRIVATE(heat0_s2, cool0_s2)
413      REAL,ALLOCATABLE,SAVE :: radsol_s2(:), topsw_s2(:), toplw_s2(:)
414!$OMP THREADPRIVATE(radsol_s2, topsw_s2, toplw_s2)
415      REAL,ALLOCATABLE,SAVE :: albpla_s2(:)
416!$OMP THREADPRIVATE(albpla_s2)
417      REAL,ALLOCATABLE,SAVE :: solsw_s2(:), solswfdiff_s2(:), sollw_s2(:)
418!$OMP THREADPRIVATE(solsw_s2, solswfdiff_s2, sollw_s2)
419      REAL,ALLOCATABLE,SAVE :: sollwdown_s2(:), sollwdownclr_s2(:)
420!$OMP THREADPRIVATE(sollwdown_s2, sollwdownclr_s2)
421      REAL,ALLOCATABLE,SAVE :: topsw0_s2(:),toplw0_s2(:)
422      REAL,ALLOCATABLE,SAVE :: solsw0_s2(:),sollw0_s2(:)
423!$OMP THREADPRIVATE(topsw0_s2,toplw0_s2,solsw0_s2,sollw0_s2)
424      REAL,ALLOCATABLE,SAVE :: lwdnc0_s2(:,:), lwdn0_s2(:,:), lwdn_s2(:,:)
425      REAL,ALLOCATABLE,SAVE :: lwupc0_s2(:,:), lwup0_s2(:,:), lwup_s2(:,:)
426!$OMP THREADPRIVATE(lwdnc0_s2,lwdn0_s2,lwdn_s2,lwupc0_s2,lwup0_s2,lwup_s2)       
427      REAL,ALLOCATABLE,SAVE :: swdnc0_s2(:,:), swdn0_s2(:,:), swdn_s2(:,:)
428      REAL,ALLOCATABLE,SAVE :: swupc0_s2(:,:), swup0_s2(:,:), swup_s2(:,:)
429!$OMP THREADPRIVATE(swdnc0_s2, swdn0_s2, swdn_s2, swupc0_s2, swup0_s2, swup_s2)
430
431! pbase : cloud base pressure
432! bbase : cloud base buoyancy
433      REAL,ALLOCATABLE,SAVE :: cape(:)
434!$OMP THREADPRIVATE(cape)
435      REAL,ALLOCATABLE,SAVE :: pbase(:)
436!$OMP THREADPRIVATE(pbase)
437      REAL,ALLOCATABLE,SAVE :: bbase(:)
438!$OMP THREADPRIVATE(bbase)
439!
440      REAL,SAVE,ALLOCATABLE :: zqasc(:,:)
441!$OMP THREADPRIVATE( zqasc)
442      INTEGER,ALLOCATABLE,SAVE :: ibas_con(:), itop_con(:)
443!$OMP THREADPRIVATE(ibas_con,itop_con)
444      REAL,SAVE,ALLOCATABLE :: rain_con(:)
445!$OMP THREADPRIVATE(rain_con)
446      REAL,SAVE,ALLOCATABLE :: snow_con(:)
447!$OMP THREADPRIVATE(snow_con)
448!
449#ifdef ISO
450      REAL,SAVE,ALLOCATABLE :: xtrain_con(:,:)
451!$OMP THREADPRIVATE(xtrain_con)
452      REAL,SAVE,ALLOCATABLE :: xtsnow_con(:,:)
453!$OMP THREADPRIVATE(xtsnow_con)
454#endif
455      REAL,SAVE,ALLOCATABLE :: rlonPOS(:)
456!$OMP THREADPRIVATE(rlonPOS)
457      REAL,SAVE,ALLOCATABLE :: newsst(:)
458!$OMP THREADPRIVATE(newsst)
459      REAL,SAVE,ALLOCATABLE :: ustar(:,:),u10m(:,:), v10m(:,:),wstar(:,:)
460!$OMP THREADPRIVATE(ustar,u10m,v10m,wstar)
461!
462! ok_ade=T -ADE=topswad-topsw
463! ok_aie=T ->
464!       ok_ade=T -AIE=topswai-topswad
465!       ok_ade=F -AIE=topswai-topsw
466!
467!topswad, solswad : Aerosol direct effect
468      REAL,SAVE,ALLOCATABLE :: topswad(:), solswad(:)
469!$OMP THREADPRIVATE(topswad,solswad)
470!topswai, solswai : Aerosol indirect effect
471      REAL,SAVE,ALLOCATABLE :: topswai(:), solswai(:)
472!$OMP THREADPRIVATE(topswai,solswai)
473
474      REAL,SAVE,ALLOCATABLE :: tau_aero(:,:,:,:), piz_aero(:,:,:,:), cg_aero(:,:,:,:)
475!$OMP THREADPRIVATE(tau_aero, piz_aero, cg_aero)
476      REAL,SAVE,ALLOCATABLE :: tau_aero_sw_rrtm(:,:,:,:), piz_aero_sw_rrtm(:,:,:,:), cg_aero_sw_rrtm(:,:,:,:)
477!$OMP THREADPRIVATE(tau_aero_sw_rrtm, piz_aero_sw_rrtm, cg_aero_sw_rrtm)
478      REAL,SAVE,ALLOCATABLE :: tau_aero_lw_rrtm(:,:,:,:), piz_aero_lw_rrtm(:,:,:,:), cg_aero_lw_rrtm(:,:,:,:)
479!$OMP THREADPRIVATE(tau_aero_lw_rrtm, piz_aero_lw_rrtm, cg_aero_lw_rrtm)
480      REAL,SAVE,ALLOCATABLE :: ccm(:,:,:)
481!$OMP THREADPRIVATE(ccm)
482
483      REAL,SAVE,ALLOCATABLE :: ale_bl_trig(:)
484!$OMP THREADPRIVATE(ale_bl_trig)
485
486      REAL,SAVE,ALLOCATABLE :: ratqs_inter_(:,:),sigma_qtherm(:,:)
487!$OMP THREADPRIVATE(ratqs_inter_,sigma_qtherm)
488
489#ifdef ISO
490#ifdef ISOTRAC
491      INTEGER,SAVE,ALLOCATABLE :: bassin_map(:)
492!$OMP THREADPRIVATE(bassin_map)
493      INTEGER,SAVE,ALLOCATABLE :: boite_map(:,:)
494!$OMP THREADPRIVATE(boite_map)
495#endif   
496#endif
497      REAL, ALLOCATABLE, SAVE:: du_gwd_rando(:, :), du_gwd_front(:, :)
498      !$OMP THREADPRIVATE(du_gwd_rando, du_gwd_front)
499      ! tendencies on wind due to gravity waves
500
501      LOGICAL,SAVE :: is_initialized=.FALSE.
502!$OMP THREADPRIVATE(is_initialized)   
503
504      ! Ocean-atmosphere interface:
505
506      REAL, ALLOCATABLE, SAVE:: ds_ns(:) ! (klon)
507      ! "delta salinity near surface". Salinity variation in the
508      ! near-surface turbulent layer. That is subskin salinity minus
509      ! foundation salinity. In ppt.
510
511      REAL, ALLOCATABLE, SAVE:: dt_ns(:) ! (klon)
512      ! "delta temperature near surface". Temperature variation in the
513      ! near-surface turbulent layer. That is subskin temperature
514      ! minus foundation temperature. (Can be negative.) In K.
515     
516      REAL, ALLOCATABLE, SAVE:: delta_sst(:) ! (klon)
517      ! Ocean-air interface temperature minus bulk SST, in
518      ! K. Allocated and defined only if activate_ocean_skin >= 1.
519
520      REAL, ALLOCATABLE, SAVE:: delta_sal(:) ! (klon)
521      ! Ocean-air interface salinity minus bulk salinity, in ppt
522     
523      REAL, ALLOCATABLE, SAVE:: dter(:) ! (klon)
524      ! Temperature variation in the diffusive microlayer, that is
525      ! ocean-air interface temperature minus subskin temperature. In K.
526
527      REAL, SAVE, ALLOCATABLE:: dser(:) ! (klon)
528      ! Salinity variation in the diffusive microlayer, that is
529      ! ocean-air interface salinity minus subskin salinity. In ppt.
530
531      real, SAVE, ALLOCATABLE:: dt_ds(:) ! (klon)
532      ! (tks / tkt) * dTer, in K
533
534      !$OMP THREADPRIVATE(delta_sal, ds_ns, dt_ns, delta_sst, dter, dser, dt_ds)
535
536
537    CONTAINS
538
539!======================================================================
540SUBROUTINE phys_state_var_init(read_climoz)
541USE dimphy
542USE aero_mod
543USE infotrac_phy, ONLY : nbtr
544#ifdef ISO
545USE infotrac_phy, ONLY : ntraciso=>ntiso,niso
546#endif
547USE clesphys_mod_h
548USE indice_sol_mod
549use config_ocean_skin_m, only: activate_ocean_skin
550use surface_data, only: type_ocean
551IMPLICIT NONE
552
553integer, intent(in)::  read_climoz
554! read ozone climatology
555! Allowed values are 0, 1 and 2
556! 0: do not read an ozone climatology
557! 1: read a single ozone climatology that will be used day and night
558! 2: read two ozone climatologies, the average day and night
559! climatology and the daylight climatology
560
561
562      print*, 'is_initialized', is_initialized
563      IF (is_initialized) RETURN
564      is_initialized=.TRUE.
565      ALLOCATE(pctsrf(klon,nbsrf))
566      ALLOCATE(ftsol(klon,nbsrf))
567      ALLOCATE(beta_aridity(klon,nbsrf))
568      ALLOCATE(qsol(klon),fevap(klon,nbsrf))
569      ALLOCATE(z0m(klon,nbsrf+1),z0h(klon,nbsrf+1),agesno(klon,nbsrf))
570!FC
571      ALLOCATE(treedrg(klon,klev,nbsrf))
572      ALLOCATE(falb1(klon,nbsrf))
573      ALLOCATE(falb2(klon,nbsrf))
574!albedo SB >>>
575      print*, 'allocate falb'
576      ALLOCATE(falb_dir(klon,nsw,nbsrf),falb_dif(klon,nsw,nbsrf))
577!!      print*, 'allocate falb good', falb_dir(1,1,1)
578      ALLOCATE(chl_con(klon))
579!albedo SB <<<
580      ALLOCATE(rain_fall(klon))
581      ALLOCATE(snow_fall(klon))
582      ALLOCATE(bs_fall(klon))
583      ALLOCATE(solsw(klon), solswfdiff(klon), sollw(klon))
584      sollw=0.0
585      ALLOCATE(radsol(klon))
586      ALLOCATE(swradcorr(klon))
587      ALLOCATE(zmea(klon), zstd(klon), zsig(klon), zgam(klon))
588      ALLOCATE(zthe(klon), zpic(klon), zval(klon))
589
590      ALLOCATE(rugoro(klon))
591      ALLOCATE(t_ancien(klon,klev), q_ancien(klon,klev))
592      ALLOCATE(ql_ancien(klon,klev), qs_ancien(klon,klev), qbs_ancien(klon,klev))
593      ALLOCATE(prw_ancien(klon), prlw_ancien(klon), prsw_ancien(klon), prbsw_ancien(klon))
594      ALLOCATE(u_ancien(klon,klev), v_ancien(klon,klev))
595      ALLOCATE(cf_ancien(klon,klev), qvc_ancien(klon,klev))
596      ALLOCATE(cfa_ancien(klon,klev), pcf_ancien(klon,klev))
597      ALLOCATE(qva_ancien(klon,klev), qia_ancien(klon,klev))
598      ALLOCATE(cwcon(klon,klev), cwcon0(klon,klev))
599!!! Rom P >>>
600      ALLOCATE(tr_ancien(klon,klev,nbtr))
601!!! Rom P <<<
602      ALLOCATE(clwcon(klon,klev),rnebcon(klon,klev))
603      ALLOCATE(qtc_cv(klon,klev),sigt_cv(klon,klev),detrain_cv(klon,klev),fm_cv(klon,klev))
604      ALLOCATE(ratqs(klon,klev))
605      ALLOCATE(pbl_tke(klon,klev+1,nbsrf+1))
606!nrlmd<
607      ALLOCATE(delta_tsurf(klon,nbsrf))
608!>nrlmd
609      ALLOCATE(coefh(klon,klev+1,nbsrf+1))
610      ALLOCATE(coefm(klon,klev+1,nbsrf+1))
611      ! initialize cleanly coefh,coefm
612      ! (most of the time in the code these are assumed to be on klev levels)
613      coefh(:,:,:)=0
614      coefm(:,:,:)=0
615      ALLOCATE(zmax0(klon), f0(klon))
616      ALLOCATE(sig1(klon,klev), w01(klon,klev))
617      ALLOCATE(entr_therm(klon,klev), fm_therm(klon,klev+1))
618      ALLOCATE(detr_therm(klon,klev))
619!     pour phsystoke avec thermiques
620      ALLOCATE(clwcon0th(klon,klev),rnebcon0th(klon,klev))
621! radiation outputs
622      ALLOCATE(swdnc0(klon,klevp1), swdn0(klon,klevp1), swdn(klon,klevp1))
623      ALLOCATE(swupc0(klon,klevp1), swup0(klon,klevp1), swup(klon,klevp1))
624      ALLOCATE(lwdnc0(klon,klevp1), lwdn0(klon,klevp1), lwdn(klon,klevp1))
625      ALLOCATE(lwupc0(klon,klevp1), lwup0(klon,klevp1), lwup(klon,klevp1))
626      ALLOCATE(SWdn200clr(klon), SWdn200(klon))
627      ALLOCATE(SWup200clr(klon), SWup200(klon))
628      ALLOCATE(LWdn200clr(klon), LWdn200(klon))
629      ALLOCATE(LWup200clr(klon), LWup200(klon))
630      ALLOCATE(LWdnTOA(klon), LWdnTOAclr(klon))
631! pressure level
632      ALLOCATE(tsumSTD(klon,nlevSTD,nout))
633      ALLOCATE(usumSTD(klon,nlevSTD,nout), vsumSTD(klon,nlevSTD,nout))
634      ALLOCATE(wsumSTD(klon,nlevSTD,nout), phisumSTD(klon,nlevSTD,nout))
635      ALLOCATE(qsumSTD(klon,nlevSTD,nout), rhsumSTD(klon,nlevSTD,nout))
636      ALLOCATE(tnondef(klon,nlevSTD,nout))
637      ALLOCATE(uvsumSTD(klon,nlevSTD,nout))
638      ALLOCATE(vqsumSTD(klon,nlevSTD,nout))
639      ALLOCATE(vTsumSTD(klon,nlevSTD,nout))
640      ALLOCATE(wqsumSTD(klon,nlevSTD,nout))
641      ALLOCATE(vphisumSTD(klon,nlevSTD,nout))
642      ALLOCATE(wTsumSTD(klon,nlevSTD,nout))
643      ALLOCATE(u2sumSTD(klon,nlevSTD,nout))
644      ALLOCATE(v2sumSTD(klon,nlevSTD,nout))
645      ALLOCATE(T2sumSTD(klon,nlevSTD,nout))
646      ALLOCATE(O3sumSTD(klon,nlevSTD,nout))
647      ALLOCATE(O3daysumSTD(klon,nlevSTD,nout))
648!IM beg
649      ALLOCATE(wlevSTD(klon,nlevSTD), ulevSTD(klon,nlevSTD), vlevSTD(klon,nlevSTD))
650      ALLOCATE(tlevSTD(klon,nlevSTD), qlevSTD(klon,nlevSTD), rhlevSTD(klon,nlevSTD))
651      ALLOCATE(philevSTD(klon,nlevSTD))
652      ALLOCATE(uvSTD(klon,nlevSTD),vqSTD(klon,nlevSTD))
653      ALLOCATE(vTSTD(klon,nlevSTD),wqSTD(klon,nlevSTD))
654      ALLOCATE(vphiSTD(klon,nlevSTD),wTSTD(klon,nlevSTD))
655      ALLOCATE(u2STD(klon,nlevSTD),v2STD(klon,nlevSTD))
656      ALLOCATE(T2STD(klon,nlevSTD))
657      ALLOCATE(O3STD(klon,nlevSTD))
658      ALLOCATE(O3daySTD(klon,nlevSTD))
659!IM end
660      ALLOCATE(seed_old(klon,napisccp))
661      ALLOCATE(zuthe(klon),zvthe(klon))
662      ALLOCATE(alb_neig(klon))
663!cloud base mass flux
664      ALLOCATE(ema_cbmf(klon))
665!cloud base pressure & cloud top pressure
666      ALLOCATE(ema_pcb(klon), ema_pct(klon))
667!
668      ALLOCATE(Mipsh(klon,klev))
669      Mipsh(:,:)=0.0
670      ALLOCATE(Ma(klon,klev))
671      ALLOCATE(qcondc(klon,klev))
672      ALLOCATE(wd(klon))
673      ALLOCATE(sigd(klon))
674      ALLOCATE(cin(klon), ALE(klon), ALP(klon))
675      ALLOCATE(ftd(klon,klev), fqd(klon,klev),fqcomp(klon,klev))
676      ALLOCATE(Ale_bl(klon))
677      ALLOCATE(ale_wake(klon))
678      ALLOCATE(ale_bl_stat(klon))
679      ale_bl_stat(:)=0
680      ALLOCATE(Alp_bl(klon))
681      ALLOCATE(lalim_conv(klon))
682      ALLOCATE(wght_th(klon,klev))
683      ALLOCATE(wake_deltat(klon,klev), wake_deltaq(klon,klev))
684      ALLOCATE(wake_s(klon), awake_s(klon), wake_dens(klon), awake_dens(klon))
685!!      awake_dens = 0.  ! initialized in phyetat0
686      ALLOCATE(cv_gen(klon))
687      ALLOCATE(wake_Cstar(klon))
688      ALLOCATE(wake_pe(klon), wake_fip(klon))
689!jyg<
690      ALLOCATE(wake_delta_pbl_TKE(klon,klev+1,nbsrf+1))
691!>jyg
692      ALLOCATE(pfrac_impa(klon,klev), pfrac_nucl(klon,klev))
693      ALLOCATE(pfrac_1nucl(klon,klev))
694      ALLOCATE(total_rain(klon), nday_rain(klon))
695      ALLOCATE(ndayrain_mth(klon))
696      ALLOCATE(paire_ter(klon))
697      ALLOCATE(albsol1(klon), albsol2(klon))
698!albedo SB >>>
699      ALLOCATE(albsol_dir(klon,nsw),albsol_dif(klon,nsw))
700!albedo SB <<<
701
702      if (read_climoz <= 1) then
703         ALLOCATE(wo(klon,klev, 1))
704      else
705         ! read_climoz == 2
706         ALLOCATE(wo(klon,klev, 2))
707      end if
708     
709      ALLOCATE(clwcon0(klon,klev),rnebcon0(klon,klev))
710      ALLOCATE(heat(klon,klev), heat0(klon,klev))
711      ALLOCATE(cool(klon,klev), cool0(klon,klev))
712      ALLOCATE(heat_volc(klon,klev), cool_volc(klon,klev))
713      ALLOCATE(topsw(klon), toplw(klon))
714      ALLOCATE(sollwdown(klon), sollwdownclr(klon))
715      sollwdown = 0.
716      ALLOCATE(toplwdown(klon), toplwdownclr(klon))
717      ALLOCATE(topsw0(klon),toplw0(klon),solsw0(klon),sollw0(klon))
718      sollw0 = 0.
719      ALLOCATE(albpla(klon))
720!IM ajout variables CFMIP2/CMIP5
721      ALLOCATE(heatp(klon,klev), coolp(klon,klev))
722      ALLOCATE(heat0p(klon,klev), cool0p(klon,klev))
723      ALLOCATE(radsolp(klon), topswp(klon), toplwp(klon))
724      ALLOCATE(albplap(klon))
725      ALLOCATE(solswp(klon), solswfdiffp(klon), sollwp(klon))
726      ALLOCATE(gustiness(klon))
727      ALLOCATE(sollwdownp(klon))
728      ALLOCATE(topsw0p(klon),toplw0p(klon))
729      ALLOCATE(solsw0p(klon),sollw0p(klon))
730      ALLOCATE(lwdnc0p(klon,klevp1), lwdn0p(klon,klevp1), lwdnp(klon,klevp1))
731      ALLOCATE(lwupc0p(klon,klevp1), lwup0p(klon,klevp1), lwupp(klon,klevp1))
732      ALLOCATE(swdnc0p(klon,klevp1), swdn0p(klon,klevp1), swdnp(klon,klevp1))
733      ALLOCATE(swupc0p(klon,klevp1), swup0p(klon,klevp1), swupp(klon,klevp1))
734
735!AI Ajout pour Ecrad (3Deffect)       
736      ALLOCATE(heat_s2(klon,klev), cool_s2(klon,klev))
737      ALLOCATE(heat0_s2(klon,klev), cool0_s2(klon,klev))
738      ALLOCATE(radsol_s2(klon), topsw_s2(klon), toplw_s2(klon))
739      ALLOCATE(albpla_s2(klon))
740      ALLOCATE(solsw_s2(klon), solswfdiff_s2(klon), sollw_s2(klon))
741      ALLOCATE(sollwdown_s2(klon),sollwdownclr_s2(klon))
742      ALLOCATE(topsw0_s2(klon),toplw0_s2(klon))
743      ALLOCATE(solsw0_s2(klon),sollw0_s2(klon))
744      ALLOCATE(lwdnc0_s2(klon,klevp1), lwdn0_s2(klon,klevp1), lwdn_s2(klon,klevp1))
745      ALLOCATE(lwupc0_s2(klon,klevp1), lwup0_s2(klon,klevp1), lwup_s2(klon,klevp1))
746      ALLOCATE(swdnc0_s2(klon,klevp1), swdn0_s2(klon,klevp1), swdn_s2(klon,klevp1))
747      ALLOCATE(swupc0_s2(klon,klevp1), swup0_s2(klon,klevp1), swup_s2(klon,klevp1))
748
749      ALLOCATE(cape(klon))
750      ALLOCATE(pbase(klon),bbase(klon))
751      ALLOCATE(zqasc(klon,klev))
752      ALLOCATE(ibas_con(klon), itop_con(klon))
753      ALLOCATE(rain_con(klon), snow_con(klon))
754      ALLOCATE(rlonPOS(klon))
755      ALLOCATE(newsst(klon))
756      ALLOCATE(ustar(klon,nbsrf),u10m(klon,nbsrf), v10m(klon,nbsrf),wstar(klon,nbsrf+1))
757      ALLOCATE(topswad(klon), solswad(klon))
758      ALLOCATE(topswai(klon), solswai(klon))
759      ALLOCATE(tau_aero(klon,klev,naero_grp,nbands),piz_aero(klon,klev,naero_grp,nbands),cg_aero(klon,klev,naero_grp,nbands))
760      ALLOCATE(tau_aero_sw_rrtm(klon,klev,2,nbands_sw_rrtm),piz_aero_sw_rrtm(klon,klev,2,nbands_sw_rrtm))
761      ALLOCATE(cg_aero_sw_rrtm(klon,klev,2,nbands_sw_rrtm))
762      ALLOCATE(tau_aero_lw_rrtm(klon,klev,2,nbands_lw_rrtm),piz_aero_lw_rrtm(klon,klev,2,nbands_lw_rrtm))
763      ALLOCATE(cg_aero_lw_rrtm(klon,klev,2,nbands_lw_rrtm))
764      ALLOCATE(ccm(klon,klev,nbands))
765
766#ifdef ISO
767      ALLOCATE(xtsol(niso,klon),fxtevap(ntraciso,klon,nbsrf))
768      ALLOCATE(fxtd(ntraciso,klon,klev))
769      ALLOCATE(wake_deltaxt(ntraciso,klon,klev))
770      ALLOCATE(xt_ancien(ntraciso,klon,klev))
771      ALLOCATE(xtl_ancien(ntraciso,klon,klev))
772      ALLOCATE(xts_ancien(ntraciso,klon,klev))
773      ALLOCATE(xtbs_ancien(ntraciso,klon,klev))
774      ALLOCATE(xtrain_fall(ntraciso,klon))
775      ALLOCATE(xtsnow_fall(ntraciso,klon))
776      ALLOCATE(xtrain_con(ntraciso,klon))
777      ALLOCATE(xtsnow_con(ntraciso,klon))
778#ifdef ISOTRAC
779      ALLOCATE(bassin_map(klon))
780      ALLOCATE(boite_map(klon,klev)) 
781#endif     
782#endif
783
784      ALLOCATE(ale_bl_trig(klon))
785      ALLOCATE(ratqs_inter_(klon,klev),sigma_qtherm(klon,klev))
786      IF (ok_gwd_rando) THEN
787        ALLOCATE(du_gwd_rando(klon, klev))
788        du_gwd_rando(:,:)=0.
789      ENDIF
790      IF (.not. ok_hines .and. ok_gwd_rando) THEN
791        ALLOCATE(du_gwd_front(klon, klev))
792        du_gwd_front(:,:) = 0 !ym missing init   
793      ENDIF
794
795      if (activate_ocean_skin >= 1) then
796         ALLOCATE(delta_sal(klon), ds_ns(klon), dt_ns(klon), delta_sst(klon), &
797              dter(klon), dser(klon))
798         if (activate_ocean_skin == 2 .and. type_ocean == "couple") &
799              allocate(dt_ds(klon))
800      end if
801
802    END SUBROUTINE phys_state_var_init
803
804!======================================================================
805    SUBROUTINE phys_state_var_end
806      ! Useful only for lmdz1d.
807      USE clesphys_mod_h
808USE indice_sol_mod
809use config_ocean_skin_m, only: activate_ocean_skin
810use surface_data, only: type_ocean
811IMPLICIT NONE
812
813      DEALLOCATE(pctsrf, ftsol, falb1, falb2)
814      DEALLOCATE(beta_aridity)
815      DEALLOCATE(qsol,fevap,z0m,z0h,agesno)
816!FC
817      DEALLOCATE(treedrg)
818      DEALLOCATE(rain_fall, snow_fall, bs_fall,solsw, solswfdiff, sollw, radsol, swradcorr)
819      DEALLOCATE(zmea, zstd, zsig, zgam)
820      DEALLOCATE(zthe, zpic, zval)
821      DEALLOCATE(rugoro, t_ancien, q_ancien, clwcon, rnebcon)
822      DEALLOCATE(qs_ancien, ql_ancien, qbs_ancien)
823      DEALLOCATE(prw_ancien, prlw_ancien, prsw_ancien, prbsw_ancien)
824      DEALLOCATE(qtc_cv,sigt_cv,detrain_cv,fm_cv)
825      DEALLOCATE(u_ancien, v_ancien)
826      DEALLOCATE(cf_ancien, qvc_ancien, cfa_ancien, pcf_ancien)
827      DEALLOCATE(qva_ancien, qia_ancien)
828      DEALLOCATE(cwcon, cwcon0)
829      DEALLOCATE(tr_ancien)                           !RomP
830      DEALLOCATE(ratqs, pbl_tke,coefh,coefm)
831      DEALLOCATE(zmax0, f0)
832      DEALLOCATE(sig1, w01)
833      DEALLOCATE(entr_therm, fm_therm)
834      DEALLOCATE(detr_therm)
835      DEALLOCATE(clwcon0th, rnebcon0th)
836! radiation outputs
837      DEALLOCATE(swdnc0, swdn0, swdn)
838      DEALLOCATE(swupc0, swup0, swup)
839      DEALLOCATE(lwdnc0, lwdn0, lwdn)
840      DEALLOCATE(lwupc0, lwup0, lwup)
841      DEALLOCATE(SWdn200clr, SWdn200)
842      DEALLOCATE(SWup200clr, SWup200)
843      DEALLOCATE(LWdn200clr, LWdn200)
844      DEALLOCATE(LWup200clr, LWup200)
845      DEALLOCATE(LWdnTOA, LWdnTOAclr)
846! pressure level
847      DEALLOCATE(tsumSTD)
848      DEALLOCATE(usumSTD, vsumSTD)
849      DEALLOCATE(wsumSTD, phisumSTD)
850      DEALLOCATE(tnondef)
851      DEALLOCATE(qsumSTD, rhsumSTD)
852      DEALLOCATE(uvsumSTD)
853      DEALLOCATE(vqsumSTD)
854      DEALLOCATE(vTsumSTD)
855      DEALLOCATE(wqsumSTD)
856      DEALLOCATE(vphisumSTD)
857      DEALLOCATE(wTsumSTD)
858      DEALLOCATE(u2sumSTD)
859      DEALLOCATE(v2sumSTD)
860      DEALLOCATE(T2sumSTD)
861      DEALLOCATE(O3sumSTD)
862      DEALLOCATE(O3daysumSTD)
863!IM beg
864      DEALLOCATE(wlevSTD,ulevSTD,vlevSTD,tlevSTD,qlevSTD,rhlevSTD,philevSTD)
865      DEALLOCATE(uvSTD,vqSTD,vTSTD,wqSTD,vphiSTD,wTSTD,u2STD,v2STD,T2STD,O3STD,O3daySTD)
866!IM end
867      DEALLOCATE(seed_old)
868      DEALLOCATE(zuthe, zvthe)
869      DEALLOCATE(alb_neig)
870      DEALLOCATE(ema_cbmf)
871      DEALLOCATE(ema_pcb, ema_pct)
872      DEALLOCATE(Mipsh, Ma, qcondc)
873      DEALLOCATE(wd, sigd)
874      DEALLOCATE(cin, ALE, ALP)
875      DEALLOCATE(ftd, fqd, fqcomp)
876      DEALLOCATE(Ale_bl, Alp_bl)
877      DEALLOCATE(ale_wake)
878      DEALLOCATE(ale_bl_stat)
879      DEALLOCATE(lalim_conv, wght_th)
880      DEALLOCATE(wake_deltat, wake_deltaq)
881      DEALLOCATE(wake_s, awake_s, wake_dens, awake_dens)
882      DEALLOCATE(cv_gen)
883      DEALLOCATE(wake_Cstar, wake_pe, wake_fip)
884!jyg<
885      DEALLOCATE(wake_delta_pbl_TKE)
886!nrlmd<
887      DEALLOCATE(delta_tsurf)
888!>nrlmd
889!>jyg
890      DEALLOCATE(pfrac_impa, pfrac_nucl)
891      DEALLOCATE(pfrac_1nucl)
892      DEALLOCATE(total_rain, nday_rain)
893      DEALLOCATE(ndayrain_mth)
894      DEALLOCATE(paire_ter)
895      DEALLOCATE(albsol1, albsol2)
896!albedo SB >>>
897      DEALLOCATE(albsol_dir,albsol_dif,falb_dir,falb_dif,chl_con)
898!albedo SB <<<
899      DEALLOCATE(wo)
900      DEALLOCATE(clwcon0,rnebcon0)
901      DEALLOCATE(heat, heat0)
902      DEALLOCATE(cool, cool0)
903      DEALLOCATE(heat_volc, cool_volc)
904      DEALLOCATE(topsw, toplw)
905      DEALLOCATE(sollwdown, sollwdownclr)
906      DEALLOCATE(gustiness)
907      DEALLOCATE(toplwdown, toplwdownclr)
908      DEALLOCATE(topsw0,toplw0,solsw0,sollw0)
909      DEALLOCATE(albpla)
910
911!AI Ajout pour Ecrad (3Deffect)
912      DEALLOCATE(heat_s2, cool_s2)
913      DEALLOCATE(heat0_s2, cool0_s2)
914      DEALLOCATE(radsol_s2, topsw_s2, toplw_s2)
915      DEALLOCATE(albpla_s2)
916      DEALLOCATE(solsw_s2, solswfdiff_s2, sollw_s2)
917      DEALLOCATE(sollwdown_s2, sollwdownclr_s2)
918      DEALLOCATE(topsw0_s2,toplw0_s2)
919      DEALLOCATE(solsw0_s2,sollw0_s2)
920      DEALLOCATE(lwdnc0_s2, lwdn0_s2, lwdn_s2)
921      DEALLOCATE(lwupc0_s2, lwup0_s2, lwup_s2)
922      DEALLOCATE(swdnc0_s2, swdn0_s2, swdn_s2)
923      DEALLOCATE(swupc0_s2, swup0_s2, swup_s2)
924
925!IM ajout variables CFMIP2/CMIP5
926      DEALLOCATE(heatp, coolp)
927      DEALLOCATE(heat0p, cool0p)
928      DEALLOCATE(radsolp, topswp, toplwp)
929      DEALLOCATE(albplap)
930      DEALLOCATE(solswp, solswfdiffp, sollwp)
931      DEALLOCATE(sollwdownp)
932      DEALLOCATE(topsw0p,toplw0p)
933      DEALLOCATE(solsw0p,sollw0p)
934      DEALLOCATE(lwdnc0p, lwdn0p, lwdnp)
935      DEALLOCATE(lwupc0p, lwup0p, lwupp)
936      DEALLOCATE(swdnc0p, swdn0p, swdnp)
937      DEALLOCATE(swupc0p, swup0p, swupp)
938      DEALLOCATE(cape)
939      DEALLOCATE(pbase,bbase)
940      DEALLOCATE(zqasc)
941      DEALLOCATE(ibas_con, itop_con)
942      DEALLOCATE(rain_con, snow_con)
943      DEALLOCATE(rlonPOS)
944      DEALLOCATE(newsst)
945      DEALLOCATE(ustar,u10m, v10m,wstar)
946      DEALLOCATE(topswad, solswad)
947      DEALLOCATE(topswai, solswai)
948      DEALLOCATE(tau_aero,piz_aero,cg_aero)
949      DEALLOCATE(tau_aero_sw_rrtm,piz_aero_sw_rrtm,cg_aero_sw_rrtm)
950      DEALLOCATE(tau_aero_lw_rrtm,piz_aero_lw_rrtm,cg_aero_lw_rrtm)
951      DEALLOCATE(ccm)
952      if (ok_gwd_rando) DEALLOCATE(du_gwd_rando)
953      if (.not. ok_hines .and. ok_gwd_rando) DEALLOCATE(du_gwd_front)
954      DEALLOCATE(ale_bl_trig)
955      DEALLOCATE(ratqs_inter_,sigma_qtherm)
956
957      if (activate_ocean_skin >= 1) then
958         deALLOCATE(delta_sal, ds_ns, dt_ns, delta_sst, dter, dser)
959         if (activate_ocean_skin == 2 .and. type_ocean == "couple") &
960              deALLOCATE(dt_ds)
961      end if
962
963#ifdef ISO   
964      DEALLOCATE(xtsol,fxtevap) 
965      DEALLOCATE(xt_ancien,xtl_ancien,xts_ancien,xtbs_ancien, fxtd, wake_deltaxt)
966      DEALLOCATE(xtrain_fall, xtsnow_fall, xtrain_con, xtsnow_con)
967#ifdef ISOTRAC
968      DEALLOCATE(bassin_map,boite_map)
969#endif       
970#endif
971      is_initialized=.FALSE.
972     
973END SUBROUTINE phys_state_var_end
974
975      END MODULE phys_state_var_mod
Note: See TracBrowser for help on using the repository browser.