source: LMDZ5/trunk/libf/phylmd/phys_state_var_mod.F90 @ 2241

Last change on this file since 2241 was 2240, checked in by fhourdin, 9 years ago

Revisite de la formule des flux de surface
(en priorité sur l'océan) en tenant compte des bourrasques de
vent et de la différence entre les hauteurs de rugosités pour
la quantité de mouvement, l'enthalpie et éventuellement l'humidité.

Etape 1 :
Introduction d'un calcul de gustiness dans la physique
gustiness(:)=f_gust_bl * ale_bl + f_gust_wk * ame_wk
Cette variable est passée ensuite jusqu'au fin fond de la couche limite.
L'étape 1 est prête à commettre, ne nécessite pas de nouvelles
variables dans les startphy et assure la convergence numérique.

Introduction of gustiness in the surface flux computation.
Gustiness is computed from as
gustiness(:)=f_gust_bl * ale_bl + f_gust_wk * ame_wk
and pass through pbl_surface down to the routines that compute
surface fluxes.

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