source: LMDZ6/trunk/libf/phylmd/lmdz_wake_ini.f90 @ 5821

Last change on this file since 5821 was 5805, checked in by fhourdin, 2 months ago

Details poches

File size: 10.1 KB
Line 
1MODULE lmdz_wake_ini
2IMPLICIT NONE
3
4  ! ============================================================================
5
6
7  ! But : Decrire le comportement des poches froides apparaissant dans les
8  ! grands systemes convectifs, et fournir l'energie disponible pour
9  ! le declenchement de nouvelles colonnes convectives.
10
11  ! State variables :
12  ! deltatw    : temperature difference between wake and off-wake regions
13  ! deltaqw    : specific humidity difference between wake and off-wake regions
14  ! sigmaw     : fractional area covered by wakes.
15  ! wdens      : number of wakes per unit area
16
17  ! -------------------------------------------------------------------------
18  ! Declaration de variables
19  ! -------------------------------------------------------------------------
20
21  ! Variables a fixer
22!jyg<
23!!  REAL, SAVE                                            :: stark, wdens_ref, coefgw, alpk
24  INTEGER, SAVE, PROTECTED                                    :: prt_level
25   LOGICAL, PARAMETER :: phys_sub=.false.
26  REAL, SAVE, PROTECTED, DIMENSION(2)                         :: wdens_ref
27  REAL, SAVE, PROTECTED                                       :: stark, coefgw, alpk, wk_pupper
28!>jyg
29  REAL, SAVE, PROTECTED                                       :: crep_upper, crep_sol 
30  !$OMP THREADPRIVATE(prt_level,stark, wdens_ref, coefgw, alpk, wk_pupper, crep_upper, crep_sol)
31
32  REAL, SAVE, PROTECTED                                       :: tau_cv
33  !$OMP THREADPRIVATE(tau_cv)
34
35   REAL, SAVE, PROTECTED                                       :: wk_delta_t_min
36  !$OMP THREADPRIVATE(wk_delta_t_min)
37
38   REAL, SAVE, PROTECTED                                       :: wk_frac_int_delta_t
39  !$OMP THREADPRIVATE(wk_frac_int_delta_t)
40
41  REAL, SAVE, PROTECTED                                       :: rzero, aa0 ! minimal wake radius and area
42  !$OMP THREADPRIVATE(rzero, aa0)
43
44  LOGICAL, SAVE, PROTECTED                                    :: ok_bug_gfl
45  !$OMP THREADPRIVATE(ok_bug_gfl)
46  LOGICAL, SAVE, PROTECTED                                    :: flag_wk_check_trgl
47  !$OMP THREADPRIVATE(flag_wk_check_trgl)
48  INTEGER, SAVE, PROTECTED                                    :: iflag_wk_act
49  !$OMP THREADPRIVATE(iflag_wk_act)
50
51  INTEGER, SAVE, PROTECTED                                    :: iflag_wk_check_trgl
52  !$OMP THREADPRIVATE(iflag_wk_check_trgl)
53  INTEGER, SAVE, PROTECTED                                    :: iflag_wk_pop_dyn
54  !$OMP THREADPRIVATE(iflag_wk_pop_dyn)
55
56  INTEGER, SAVE, PROTECTED                                    :: iflag_wk_profile
57  !$OMP THREADPRIVATE(iflag_wk_profile)
58
59  LOGICAL, SAVE, PROTECTED                                    :: flag_dadv_implicit
60  !$OMP THREADPRIVATE(flag_dadv_implicit)
61
62  INTEGER, SAVE, PROTECTED                                    :: wk_nsub
63  !$OMP THREADPRIVATE(wk_nsub)
64
65  INTEGER, SAVE, PROTECTED                                    :: iflag_wk_new_ptop
66  !$OMP THREADPRIVATE(iflag_wk_new_ptop)
67
68  REAL, SAVE, PROTECTED                                       :: wdensinit ! Minimum wake density used to restart wakes from a wake-free state
69  !$OMP THREADPRIVATE(wdensinit)
70  REAL, SAVE, PROTECTED                                       :: wdensthreshold ! Threshold wake density below which wakes are killed
71  !$OMP THREADPRIVATE(wdensthreshold)
72  REAL, SAVE, PROTECTED                                       :: sigmad, hwmin, wapecut, cstart
73  !$OMP THREADPRIVATE(sigmad, hwmin, wapecut, cstart)
74  REAL, SAVE, PROTECTED                                       :: sigmaw_max
75  !$OMP THREADPRIVATE(sigmaw_max) 
76  REAL, SAVE, PROTECTED                                       :: dens_rate
77  !$OMP THREADPRIVATE(dens_rate)
78  REAL, SAVE, PROTECTED                                       :: epsilon_loc
79  !$OMP THREADPRIVATE(epsilon_loc)
80  REAL, SAVE, PROTECTED                                       :: epsim1,RG,RD
81  !$OMP THREADPRIVATE(epsim1,RG,RD)
82  REAL, SAVE, PROTECTED                                        ::smallestreal
83  !$OMP THREADPRIVATE(smallestreal)
84  REAL, SAVE, PROTECTED                                        :: wk_int_delta_t_min
85  !$OMP THREADPRIVATE(wk_int_delta_t_min)
86
87! CPP key used only in this module for debugging purposes. jyg 09/24
88  LOGICAL, SAVE, PROTECTED :: CPPKEY_IOPHYS_WK = .FALSE.
89  !$OMP THREADPRIVATE(CPPKEY_IOPHYS_WK)
90
91
92
93CONTAINS
94
95  ! =========================================================================
96  SUBROUTINE wake_ini(iflag_wake,rg_in,rd_in,rv_in,prt_lev)
97  ! =========================================================================
98
99  ! **************************************************************
100  ! *
101  ! WAKE                                                        *
102  ! retour a un Pupper fixe                                *
103  ! *
104  ! written by   :  GRANDPEIX Jean-Yves   09/03/2000            *
105  ! modified by :   ROEHRIG Romain        01/29/2007            *
106  ! **************************************************************
107
108  ! -------------------------------------------------------------------------
109  ! Initialisations
110  ! -------------------------------------------------------------------------
111
112  USE ioipsl_getin_p_mod, ONLY : getin_p
113  real eps
114  integer, intent(in) :: prt_lev,iflag_wake
115  real, intent(in) :: rg_in,rd_in,rv_in
116
117  smallestreal=tiny(smallestreal)
118!
119  prt_level=prt_lev
120  epsilon_loc=1.E-15
121  wapecut=1. ! previously 5.
122!
123  rzero = 5000.
124  CALL getin_p('rzero_wk', rzero)
125  aa0 = 3.14*rzero*rzero
126!
127  ! Essais d'initialisation avec sigmaw = 0.02 et hw = 10.
128!!  sigmad=0.005
129  sigmad=0.02
130  CALL getin_p('sigmad', sigmad)
131  hwmin=10.
132!
133!!wdensthreshold=1.e-12
134  wdensthreshold=1.e-14
135  wdensthreshold=2.e-14
136  CALL getin_p('wdensthreshold', wdensthreshold)
137!
138  IF (sigmad < 0.) THEN
139    sigmad = abs(sigmad)
140!!    wdensmin=sigmad/(3.14*rzero**2)
141    wdensinit=sigmad/(3.14*rzero**2)
142  ELSE
143    wdensinit = wdensthreshold/2.
144  ENDIF
145!
146!
147  ! cc nrlmd
148  sigmaw_max=0.4
149  dens_rate=0.1
150
151  eps = rd_in/rv_in
152  epsim1 = 1.0/eps - 1.0
153  RG=rg_in
154  RD=rd_in
155
156
157  ! cc
158  ! Longueur de maille (en m)
159  ! -------------------------------------------------------------------------
160
161  ! ALON = 3.e5
162  ! alon = 1.E6
163
164  ! Configuration de coefgw,stark,wdens (22/02/06 by YU Jingmei)
165
166  ! coefgw : Coefficient pour les ondes de gravite
167  ! stark : Coefficient k dans Cstar=k*sqrt(2*WAPE)
168  ! wdens : Densite surfacique de poche froide
169  ! -------------------------------------------------------------------------
170
171  ! cc nrlmd      coefgw=10
172  ! coefgw=1
173  ! wdens0 = 1.0/(alon**2)
174  ! cc nrlmd      wdens = 1.0/(alon**2)
175  ! cc nrlmd      stark = 0.50
176  ! CRtest
177  ! cc nrlmd      alpk=0.1
178  ! alpk = 1.0
179  ! alpk = 0.5
180  ! alpk = 0.05
181
182
183
184  crep_upper = 0.9
185  crep_sol = 1.0
186
187  ! Flag concerning the bug in gfl computation
188  ok_bug_gfl = .True.
189  call getin_p('ok_bug_gfl', ok_bug_gfl)
190
191  ! Get wapecut from parameter file
192  wapecut = 1.
193
194print*,'wapecut',wapecut
195  CALL getin_p('wapecut', wapecut)
196print*,'wapecut',wapecut
197
198  ! cc nrlmd Lecture du fichier wake_param.data
199
200
201  ! cc nrlmd Lecture du fichier wake_param.data
202  stark=0.33
203  CALL getin_p('stark',stark)
204  if ( iflag_wake / 10 >= 3 ) then
205      ! Calcul effectif tenant compte dans l'idee d'une heterogeneite des poches
206      ! Pour eviter une singularité
207      cstart = stark*sqrt(2.*wapecut)/2.
208  else
209      cstart = stark*sqrt(2.*wapecut)
210  endif
211
212  alpk=0.25
213  CALL getin_p('alpk',alpk)
214 
215  wk_pupper=0.6
216  CALL getin_p('wk_pupper',wk_pupper)
217
218
219!jyg<
220!!  wdens_ref=8.E-12
221!!  CALL getin_p('wdens_ref',wdens_ref)
222  wdens_ref(1)=8.E-12
223  wdens_ref(2)=8.E-12
224  CALL getin_p('wdens_ref_o',wdens_ref(1))    !wake number per unit area ; ocean
225  CALL getin_p('wdens_ref_l',wdens_ref(2))    !wake number per unit area ; land
226!>jyg
227!
228!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
229!!!!!!!!!  Population dynamics parameters    !!!!!!!!!!!!!!!!!!!!!!!!!!!!
230!------------------------------------------------------------------------
231
232  iflag_wk_pop_dyn = 0
233  CALL getin_p('iflag_wk_pop_dyn',iflag_wk_pop_dyn) ! switch between wdens prescribed
234                                                    ! and wdens prognostic
235  iflag_wk_act = 0
236  CALL getin_p('iflag_wk_act',iflag_wk_act) ! 0: act(:)=0.
237                                            ! 1: act(:)=1.
238                                            ! 2: act(:)=f(Wape)
239
240  iflag_wk_profile = 0
241  CALL getin_p('iflag_wk_profile',iflag_wk_profile) ! switch between wdens prescribed
242                                                    ! and wdens prognostic
243 ! iflag_wk_profile = 0
244  iflag_wk_new_ptop = 0
245  CALL getin_p('iflag_wk_new_ptop',iflag_wk_new_ptop)
246
247  wk_nsub = 10
248  CALL getin_p('wk_nsub',wk_nsub)
249
250  tau_cv = 4000.
251  CALL getin_p('tau_cv', tau_cv)
252 
253  wk_delta_t_min = 0.
254  CALL getin_p('wk_delta_t_min', wk_delta_t_min)
255 
256  wk_int_delta_t_min = 10.
257  CALL getin_p('wk_int_delta_t_min', wk_int_delta_t_min)
258 
259  wk_frac_int_delta_t = 0.9
260  CALL getin_p('wk_frac_int_delta_t', wk_frac_int_delta_t)
261
262  flag_dadv_implicit = .FALSE.
263  CALL getin_p('flag_dadv_implicit', flag_dadv_implicit)
264
265  CALL getin_p('CPPKEY_IOPHYS_WK', CPPKEY_IOPHYS_WK)
266
267
268!------------------------------------------------------------------------
269
270  coefgw=4.
271  CALL getin_p('coefgw',coefgw)
272
273  WRITE(*,*) 'stark=', stark
274  WRITE(*,*) 'alpk=', alpk
275  WRITE(*,*) 'wk_pupper=', wk_pupper
276!jyg<
277!!  WRITE(*,*) 'wdens_ref=', wdens_ref
278  WRITE(*,*) 'wdens_ref_o=', wdens_ref(1)
279  WRITE(*,*) 'wdens_ref_l=', wdens_ref(2)
280!>jyg
281  WRITE(*,*) 'iflag_wk_pop_dyn=',iflag_wk_pop_dyn
282  WRITE(*,*) 'iflag_wk_act',iflag_wk_act
283  WRITE(*,*) 'coefgw=', coefgw
284
285  flag_wk_check_trgl=.false.
286  CALL getin_p('flag_wk_check_trgl ', flag_wk_check_trgl)
287  WRITE(*,*) 'flag_wk_check_trgl=', flag_wk_check_trgl
288  WRITE(*,*) 'flag_wk_check_trgl OBSOLETE. Utilisr iflag_wk_check_trgl plutot'
289  iflag_wk_check_trgl=0 ; IF (flag_wk_check_trgl) iflag_wk_check_trgl=1
290  CALL getin_p('iflag_wk_check_trgl ', iflag_wk_check_trgl)
291  WRITE(*,*) 'iflag_wk_check_trgl=', iflag_wk_check_trgl
292 
293  WRITE(*,*) 'wk_delta_t_min=', wk_delta_t_min
294  WRITE(*,*) 'wk_int_delta_t_min=', wk_int_delta_t_min
295  WRITE(*,*) 'wk_frac_int_delta_t=', wk_frac_int_delta_t
296  WRITE(*,*) 'iflag_wk_new_ptop=', iflag_wk_new_ptop
297  WRITE(*,*) 'wk_nsub=', wk_nsub
298
299 RETURN
300
301END SUBROUTINE wake_ini
302
303
304
305END MODULE lmdz_wake_ini
Note: See TracBrowser for help on using the repository browser.