source: LMDZ6/branches/Amaury_dev/libf/phylmd/lmdz_wake_ini.F90

Last change on this file was 5193, checked in by abarral, 4 days ago

Merge r5181, r5188 from trunk
Lint lmdz_wake.F90, lmdz_wake_ini.F90

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