Changeset 3758 for LMDZ6/branches/Optimisation_LMDZ/libf/phylmd
- Timestamp:
- Jul 15, 2020, 10:14:33 PM (4 years ago)
- Location:
- LMDZ6/branches/Optimisation_LMDZ/libf/phylmd
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/Optimisation_LMDZ/libf/phylmd/cv3a_compress.f90
r3738 r3758 20 20 integer :: array_count_r = 0 ! number of real arrays 21 21 type(array_r_t) :: arrays_r(2,max_array_count) ! array of real arrays 22 logical :: arrays_r_init(max_array_count) = . false. ! Should arrays (2,:) be initialized before uncompress?22 logical :: arrays_r_init(max_array_count) = .true. ! Should arrays (2,:) be initialized before uncompress? 23 23 integer :: array_count_i = 0 ! number of int arrays 24 24 type(array_i_t) :: arrays_i(2,max_array_count) ! array of int arrays 25 logical :: arrays_i_init(max_array_count) = . false. ! Should arrays (2,:) be initialized before uncompress?25 logical :: arrays_i_init(max_array_count) = .true. ! Should arrays (2,:) be initialized before uncompress? 26 26 end type 27 27 -
LMDZ6/branches/Optimisation_LMDZ/libf/phylmd/cv3a_driver.f90
r3757 r3758 1 1 module cv3a_driver_mod 2 contains 3 4 SUBROUTINE cv3a_driver(len, nd, ndp1, ntra, nloc, k_upper, & 5 iflag_con, iflag_mix, iflag_ice_thermo, iflag_clos, ok_conserv_q, & 6 !! delt, t1, q1, qs1, t1_wake, q1_wake, qs1_wake, s1_wake, & ! jyg 7 delt, comp_threshold, & ! jyg 8 t1, q1, qs1, t1_wake, q1_wake, qs1_wake, s1_wake, & ! jyg 9 u1, v1, tra1, & 10 p1, ph1, & 11 Ale1, Alp1, omega1, & 12 sig1feed1, sig2feed1, wght1, & 13 iflag1, ft1, fq1, fu1, fv1, ftra1, & 14 precip1, kbas1, ktop1, & 15 cbmf1, plcl1, plfc1, wbeff1, & 16 sig1, w01, & !input/output 17 ptop21, sigd1, & 18 ma1, mip1, Vprecip1, Vprecipi1, upwd1, dnwd1, dnwd01, & ! jyg 19 qcondc1, wd1, & 20 cape1, cin1, tvp1, & 21 ftd1, fqd1, & 22 Plim11, Plim21, asupmax1, supmax01, asupmaxmin1, & 23 lalim_conv1, & 24 !! da1,phi1,mp1,phi21,d1a1,dam1,sigij1,clw1, & ! RomP 25 !! elij1,evap1,ep1,epmlmMm1,eplaMm1, & ! RomP 26 da1, phi1, mp1, phi21, d1a1, dam1, sigij1, wghti1, & ! RomP, RL 27 qta1, clw1, elij1, evap1, ep1, epmlmMm1, eplaMm1, & ! RomP, RL 28 wdtrainA1, wdtrainS1, wdtrainM1, qtc1, sigt1, tau_cld_cv, & !!jygprl 29 coefw_cld_cv, & ! RomP, AJ 30 epmax_diag1) ! epmax_cape 31 ! ************************************************************** 32 ! * 33 ! CV_DRIVER * 34 ! * 35 ! * 36 ! written by : Sandrine Bony-Lena , 17/05/2003, 11.19.41 * 37 ! modified by : * 38 ! ************************************************************** 39 ! ************************************************************** 40 41 USE print_control_mod, ONLY: prt_level, lunout 42 USE add_phys_tend_mod, ONLY: fl_cor_ebil 43 USE cv3a_compress_mod 44 USE cv3p_mixing_mod 45 IMPLICIT NONE 46 47 ! .............................START PROLOGUE............................ 48 49 50 ! All argument names (except len,nd,ntra,nloc,delt and the flags) have a "1" appended. 51 ! The "1" is removed for the corresponding compressed variables. 52 ! PARAMETERS: 53 ! Name Type Usage Description 54 ! ---------- ---------- ------- ---------------------------- 55 56 ! len Integer Input first (i) dimension 57 ! nd Integer Input vertical (k) dimension 58 ! ndp1 Integer Input nd + 1 59 ! ntra Integer Input number of tracors 60 ! nloc Integer Input dimension of arrays for compressed fields 61 ! k_upper Integer Input upmost level for vertical loops 62 ! iflag_con Integer Input version of convect (3/4) 63 ! iflag_mix Integer Input version of mixing (0/1/2) 64 ! iflag_ice_thermo Integer Input accounting for ice thermodynamics (0/1) 65 ! iflag_clos Integer Input version of closure (0/1) 66 ! tau_cld_cv Real Input characteristic time of dissipation of mixing fluxes 67 ! coefw_cld_cv Real Input coefficient for updraft velocity in convection 68 ! ok_conserv_q Logical Input when true corrections for water conservation are swtiched on 69 ! delt Real Input time step 70 ! comp_threshold Real Input threshold on the fraction of convective points below which 71 ! fields are compressed 72 ! t1 Real Input temperature (sat draught envt) 73 ! q1 Real Input specific hum (sat draught envt) 74 ! qs1 Real Input sat specific hum (sat draught envt) 75 ! t1_wake Real Input temperature (unsat draught envt) 76 ! q1_wake Real Input specific hum(unsat draught envt) 77 ! qs1_wake Real Input sat specific hum(unsat draughts envt) 78 ! s1_wake Real Input fractionnal area covered by wakes 79 ! u1 Real Input u-wind 80 ! v1 Real Input v-wind 81 ! tra1 Real Input tracors 82 ! p1 Real Input full level pressure 83 ! ph1 Real Input half level pressure 84 ! ALE1 Real Input Available lifting Energy 85 ! ALP1 Real Input Available lifting Power 86 ! sig1feed1 Real Input sigma coord at lower bound of feeding layer 87 ! sig2feed1 Real Input sigma coord at upper bound of feeding layer 88 ! wght1 Real Input weight density determining the feeding mixture 89 ! iflag1 Integer Output flag for Emanuel conditions 90 ! ft1 Real Output temp tend 91 ! fq1 Real Output spec hum tend 92 ! fu1 Real Output u-wind tend 93 ! fv1 Real Output v-wind tend 94 ! ftra1 Real Output tracor tend 95 ! precip1 Real Output precipitation 96 ! kbas1 Integer Output cloud base level 97 ! ktop1 Integer Output cloud top level 98 ! cbmf1 Real Output cloud base mass flux 99 ! sig1 Real In/Out section adiabatic updraft 100 ! w01 Real In/Out vertical velocity within adiab updraft 101 ! ptop21 Real In/Out top of entraining zone 102 ! Ma1 Real Output mass flux adiabatic updraft 103 ! mip1 Real Output mass flux shed by the adiabatic updraft 104 ! Vprecip1 Real Output vertical profile of total precipitation 105 ! Vprecipi1 Real Output vertical profile of ice precipitation 106 ! upwd1 Real Output total upward mass flux (adiab+mixed) 107 ! dnwd1 Real Output saturated downward mass flux (mixed) 108 ! dnwd01 Real Output unsaturated downward mass flux 109 ! qcondc1 Real Output in-cld mixing ratio of condensed water 110 ! wd1 Real Output downdraft velocity scale for sfc fluxes 111 ! cape1 Real Output CAPE 112 ! cin1 Real Output CIN 113 ! tvp1 Real Output adiab lifted parcell virt temp 114 ! ftd1 Real Output precip temp tend 115 ! fqt1 Real Output precip spec hum tend 116 ! Plim11 Real Output 117 ! Plim21 Real Output 118 ! asupmax1 Real Output 119 ! supmax01 Real Output 120 ! asupmaxmin1 Real Output 121 122 ! ftd1 Real Output Array of temperature tendency due to precipitations (K/s) of dimension ND, 123 ! defined at same grid levels as T, Q, QS and P. 124 125 ! fqd1 Real Output Array of specific humidity tendencies due to precipitations ((gm/gm)/s) 126 ! of dimension ND, defined at same grid levels as T, Q, QS and P. 127 128 ! wdtrainA1 Real Output precipitation ejected from adiabatic draught; 129 ! should be used in tracer transport (cvltr) 130 ! wdtrainS1 Real Output precipitation detrained from shedding of adiabatic draught; 131 ! used in tracer transport (cvltr) 132 ! wdtrainM1 Real Output precipitation detrained from mixed draughts; 133 ! used in tracer transport (cvltr) 134 ! da1 Real Output used in tracer transport (cvltr) 135 ! phi1 Real Output used in tracer transport (cvltr) 136 ! mp1 Real Output used in tracer transport (cvltr) 137 ! qtc1 Real Output specific humidity in convection 138 ! sigt1 Real Output surface fraction in adiabatic updrafts 139 ! phi21 Real Output used in tracer transport (cvltr) 140 141 ! d1a1 Real Output used in tracer transport (cvltr) 142 ! dam1 Real Output used in tracer transport (cvltr) 143 144 ! epmlmMm1 Real Output used in tracer transport (cvltr) 145 ! eplaMm1 Real Output used in tracer transport (cvltr) 146 147 ! evap1 Real Output 148 ! ep1 Real Output 149 ! sigij1 Real Output used in tracer transport (cvltr) 150 ! clw1 Real Output condensed water content of the adiabatic updraught 151 ! elij1 Real Output 152 ! wghti1 Real Output final weight of the feeding layers, 153 ! used in tracer transport (cvltr) 154 155 156 ! S. Bony, Mar 2002: 157 ! * Several modules corresponding to different physical processes 158 ! * Several versions of convect may be used: 159 ! - iflag_con=3: version lmd (previously named convect3) 160 ! - iflag_con=4: version 4.3b (vect. version, previously convect1/2) 161 ! + tard: - iflag_con=5: version lmd with ice (previously named convectg) 162 ! S. Bony, Oct 2002: 163 ! * Vectorization of convect3 (ie version lmd) 164 165 ! ..............................END PROLOGUE............................. 166 167 168 169 ! Input 170 INTEGER, INTENT (IN) :: len 171 INTEGER, INTENT (IN) :: nd 172 INTEGER, INTENT (IN) :: ndp1 173 INTEGER, INTENT (IN) :: ntra 174 INTEGER, INTENT(IN) :: nloc ! (nloc=len) pour l'instant 175 INTEGER, INTENT (IN) :: k_upper 176 INTEGER, INTENT (IN) :: iflag_con 177 INTEGER, INTENT (IN) :: iflag_mix 178 INTEGER, INTENT (IN) :: iflag_ice_thermo 179 INTEGER, INTENT (IN) :: iflag_clos 180 LOGICAL, INTENT (IN) :: ok_conserv_q 181 REAL, INTENT (IN) :: tau_cld_cv 182 REAL, INTENT (IN) :: coefw_cld_cv 183 REAL, INTENT (IN) :: delt 184 REAL, INTENT (IN) :: comp_threshold 185 REAL, DIMENSION (len, nd), INTENT (IN) :: t1 186 REAL, DIMENSION (len, nd), INTENT (IN) :: q1 187 REAL, DIMENSION (len, nd), INTENT (IN) :: qs1 188 REAL, DIMENSION (len, nd), INTENT (IN) :: t1_wake 189 REAL, DIMENSION (len, nd), INTENT (IN) :: q1_wake 190 REAL, DIMENSION (len, nd), INTENT (IN) :: qs1_wake 191 REAL, DIMENSION (len), INTENT (IN) :: s1_wake 192 REAL, DIMENSION (len, nd), INTENT (IN) :: u1 193 REAL, DIMENSION (len, nd), INTENT (IN) :: v1 194 REAL, DIMENSION (len, nd, ntra), INTENT (IN) :: tra1 195 REAL, DIMENSION (len, nd), INTENT (IN) :: p1 196 REAL, DIMENSION (len, ndp1), INTENT (IN) :: ph1 197 REAL, DIMENSION (len), INTENT (IN) :: Ale1 198 REAL, DIMENSION (len), INTENT (IN) :: Alp1 199 REAL, DIMENSION (len, nd), INTENT (IN) :: omega1 200 REAL, INTENT (IN) :: sig1feed1 ! pressure at lower bound of feeding layer 201 REAL, INTENT (IN) :: sig2feed1 ! pressure at upper bound of feeding layer 202 REAL, DIMENSION (nd), INTENT (IN) :: wght1 ! weight density determining the feeding mixture 203 INTEGER, DIMENSION (len), INTENT (IN) :: lalim_conv1 204 205 ! Input/Output 206 REAL, DIMENSION (len, nd), INTENT (INOUT) :: sig1 207 REAL, DIMENSION (len, nd), INTENT (INOUT) :: w01 208 209 ! Output 210 INTEGER, DIMENSION (len), INTENT (OUT) :: iflag1 211 REAL, DIMENSION (len, nd), INTENT (OUT) :: ft1 212 REAL, DIMENSION (len, nd), INTENT (OUT) :: fq1 213 REAL, DIMENSION (len, nd), INTENT (OUT) :: fu1 214 REAL, DIMENSION (len, nd), INTENT (OUT) :: fv1 215 REAL, DIMENSION (len, nd, ntra), INTENT (OUT) :: ftra1 216 REAL, DIMENSION (len), INTENT (OUT) :: precip1 217 INTEGER, DIMENSION (len), INTENT (OUT) :: kbas1 218 INTEGER, DIMENSION (len), INTENT (OUT) :: ktop1 219 REAL, DIMENSION (len), INTENT (OUT) :: cbmf1 220 REAL, DIMENSION (len), INTENT (OUT) :: plcl1 221 REAL, DIMENSION (len), INTENT (OUT) :: plfc1 222 REAL, DIMENSION (len), INTENT (OUT) :: wbeff1 223 REAL, DIMENSION (len), INTENT (OUT) :: ptop21 224 REAL, DIMENSION (len), INTENT (OUT) :: sigd1 225 REAL, DIMENSION (len, nd), INTENT (OUT) :: ma1 ! adiab. asc. mass flux (staggered grid) 226 REAL, DIMENSION (len, nd), INTENT (OUT) :: mip1 ! mass flux shed from adiab. ascent (extensive) 227 ! real Vprecip1(len,nd) 228 REAL, DIMENSION (len, ndp1), INTENT (OUT) :: vprecip1 ! tot precipitation flux (staggered grid) 229 REAL, DIMENSION (len, ndp1), INTENT (OUT) :: vprecipi1 ! ice precipitation flux (staggered grid) 230 REAL, DIMENSION (len, nd), INTENT (OUT) :: upwd1 ! upwd sat. mass flux (staggered grid) 231 REAL, DIMENSION (len, nd), INTENT (OUT) :: dnwd1 ! dnwd sat. mass flux (staggered grid) 232 REAL, DIMENSION (len, nd), INTENT (OUT) :: dnwd01 ! unsat. mass flux (staggered grid) 233 REAL, DIMENSION (len, nd), INTENT (OUT) :: qcondc1 ! max cloud condensate (intensive) ! cld 234 REAL, DIMENSION (len), INTENT (OUT) :: wd1 ! gust 235 REAL, DIMENSION (len), INTENT (OUT) :: cape1 236 REAL, DIMENSION (len), INTENT (OUT) :: cin1 237 REAL, DIMENSION (len, nd), INTENT (OUT) :: tvp1 ! Virt. temp. in the adiab. ascent 238 239 !AC! 240 !! real da1(len,nd),phi1(len,nd,nd) 241 !! real da(len,nd),phi(len,nd,nd) 242 !AC! 243 REAL, DIMENSION (len, nd), INTENT (OUT) :: ftd1 ! Temp. tendency due to the sole unsat. drafts 244 REAL, DIMENSION (len, nd), INTENT (OUT) :: fqd1 ! Moist. tendency due to the sole unsat. drafts 245 REAL, DIMENSION (len), INTENT (OUT) :: Plim11 246 REAL, DIMENSION (len), INTENT (OUT) :: Plim21 247 REAL, DIMENSION (len, nd), INTENT (OUT) :: asupmax1 ! Highest mixing fraction of mixed updraughts 248 REAL, DIMENSION (len), INTENT (OUT) :: supmax01 249 REAL, DIMENSION (len), INTENT (OUT) :: asupmaxmin1 250 REAL, DIMENSION (len, nd), INTENT (OUT) :: qtc1 ! in cloud water content (intensive) ! cld 251 REAL, DIMENSION (len, nd), INTENT (OUT) :: sigt1 ! fract. cloud area (intensive) ! cld 252 253 ! RomP >>> 254 REAL, DIMENSION (len, nd), INTENT (OUT) :: wdtrainA1, wdtrainS1, wdtrainM1 ! precipitation sources (extensive) 255 REAL, DIMENSION (len, nd), INTENT (OUT) :: mp1 ! unsat. mass flux (staggered grid) 256 REAL, DIMENSION (len, nd), INTENT (OUT) :: da1 ! detrained mass flux of adiab. asc. air (extensive) 257 REAL, DIMENSION (len, nd, nd), INTENT (OUT) :: phi1 ! mass flux of envt. air in mixed draughts (extensive) 258 REAL, DIMENSION (len, nd, nd), INTENT (OUT) :: epmlmMm1 ! (extensive) 259 REAL, DIMENSION (len, nd), INTENT (OUT) :: eplaMm1 ! (extensive) 260 REAL, DIMENSION (len, nd), INTENT (OUT) :: evap1 ! evaporation rate in precip. downdraft. (intensive) 261 REAL, DIMENSION (len, nd), INTENT (OUT) :: ep1 262 REAL, DIMENSION (len, nd, nd), INTENT (OUT) :: sigij1 ! mass fraction of env. air in mixed draughts (intensive) 263 REAL, DIMENSION (len, nd, nd), INTENT (OUT) :: elij1! cond. water per unit mass of mixed draughts (intensive) 264 REAL, DIMENSION (len, nd), INTENT (OUT) :: qta1 ! total water per unit mass of the adiab. asc. (intensive) 265 REAL, DIMENSION (len, nd), INTENT (OUT) :: clw1 ! cond. water per unit mass of the adiab. asc. (intensive) 266 !JYG,RL 267 REAL, DIMENSION (len, nd), INTENT (OUT) :: wghti1 ! final weight of the feeding layers (extensive) 268 !JYG,RL 269 REAL, DIMENSION (len, nd, nd), INTENT (OUT) :: phi21 ! (extensive) 270 REAL, DIMENSION (len, nd), INTENT (OUT) :: d1a1 ! (extensive) 271 REAL, DIMENSION (len, nd), INTENT (OUT) :: dam1 ! (extensive) 272 ! RomP <<< 273 REAL, DIMENSION (len ), INTENT (OUT) :: epmax_diag1 2 contains 274 3 275 4 ! ------------------------------------------------------------------- … … 279 8 ! ------------------------------------------------------------------- 280 9 ! --- On input: 281 10 ! 282 11 ! t: Array of absolute temperature (K) of dimension ND, with first 283 12 ! index corresponding to lowest model level. Note that this array 284 13 ! will be altered by the subroutine if dry convective adjustment 285 14 ! occurs and if IPBL is not equal to 0. 286 15 ! 287 16 ! q: Array of specific humidity (gm/gm) of dimension ND, with first 288 17 ! index corresponding to lowest model level. Must be defined 289 18 ! at same grid levels as T. Note that this array will be altered 290 19 ! if dry convective adjustment occurs and if IPBL is not equal to 0. 291 20 ! 292 21 ! qs: Array of saturation specific humidity of dimension ND, with first 293 22 ! index corresponding to lowest model level. Must be defined 294 23 ! at same grid levels as T. Note that this array will be altered 295 24 ! if dry convective adjustment occurs and if IPBL is not equal to 0. 296 25 ! 297 26 ! t_wake: Array of absolute temperature (K), seen by unsaturated draughts, 298 27 ! of dimension ND, with first index corresponding to lowest model level. 299 28 ! 300 29 ! q_wake: Array of specific humidity (gm/gm), seen by unsaturated draughts, 301 30 ! of dimension ND, with first index corresponding to lowest model level. 302 31 ! Must be defined at same grid levels as T. 303 32 ! 304 33 ! qs_wake: Array of saturation specific humidity, seen by unsaturated draughts, 305 34 ! of dimension ND, with first index corresponding to lowest model level. 306 35 ! Must be defined at same grid levels as T. 307 36 ! 308 37 ! s_wake: Array of fractionnal area occupied by the wakes. 309 38 ! 310 39 ! u: Array of zonal wind velocity (m/s) of dimension ND, witth first 311 40 ! index corresponding with the lowest model level. Defined at 312 41 ! same levels as T. Note that this array will be altered if 313 42 ! dry convective adjustment occurs and if IPBL is not equal to 0. 314 43 ! 315 44 ! v: Same as u but for meridional velocity. 316 45 ! 317 46 ! tra: Array of passive tracer mixing ratio, of dimensions (ND,NTRA), 318 47 ! where NTRA is the number of different tracers. If no … … 321 50 ! same vertical levels as T. Note that this array will be altered 322 51 ! if dry convective adjustment occurs and if IPBL is not equal to 0. 323 52 ! 324 53 ! p: Array of pressure (mb) of dimension ND, with first 325 54 ! index corresponding to lowest model level. Must be defined 326 55 ! at same grid levels as T. 327 56 ! 328 57 ! ph: Array of pressure (mb) of dimension ND+1, with first index 329 58 ! corresponding to lowest level. These pressures are defined at … … 331 60 ! value of PH should be greater than (i.e. at a lower level than) 332 61 ! the first value of the array P. 333 62 ! 334 63 ! ALE: Available lifting Energy 335 64 ! 336 65 ! ALP: Available lifting Power 337 66 ! 338 67 ! nl: The maximum number of levels to which convection can penetrate, plus 1. 339 68 ! NL MUST be less than or equal to ND-1. 340 69 ! 341 70 ! delt: The model time step (sec) between calls to CONVECT 342 71 ! 343 72 ! ---------------------------------------------------------------------------- 344 73 ! --- On Output: 345 74 ! 346 75 ! iflag: An output integer whose value denotes the following: 347 76 ! VALUE INTERPRETATION … … 364 93 ! 10 No moist convection: cloud top is too warm. 365 94 ! 366 95 ! 367 96 ! ft: Array of temperature tendency (K/s) of dimension ND, defined at same 368 97 ! grid levels as T, Q, QS and P. 369 98 ! 370 99 ! fq: Array of specific humidity tendencies ((gm/gm)/s) of dimension ND, 371 100 ! defined at same grid levels as T, Q, QS and P. 372 101 ! 373 102 ! fu: Array of forcing of zonal velocity (m/s^2) of dimension ND, 374 103 ! defined at same grid levels as T. 375 104 ! 376 105 ! fv: Same as FU, but for forcing of meridional velocity. 377 106 ! 378 107 ! ftra: Array of forcing of tracer content, in tracer mixing ratio per 379 108 ! second, defined at same levels as T. Dimensioned (ND,NTRA). 380 109 ! 381 110 ! precip: Scalar convective precipitation rate (mm/day). 382 111 ! 383 112 ! wd: A convective downdraft velocity scale. For use in surface 384 113 ! flux parameterizations. See convect.ps file for details. 385 114 ! 386 115 ! tprime: A convective downdraft temperature perturbation scale (K). 387 116 ! For use in surface flux parameterizations. See convect.ps 388 117 ! file for details. 389 118 ! 390 119 ! qprime: A convective downdraft specific humidity 391 120 ! perturbation scale (gm/gm). … … 397 126 ! ITS NEXT CALL. That is, the value of CBMF must be "remembered" 398 127 ! by the calling program between calls to CONVECT. 399 128 ! 400 129 ! det: Array of detrainment mass flux of dimension ND. 401 130 ! ------------------------------------------------------------------- 131 ! written by : Sandrine Bony-Lena , 17/05/2003, 11.19.41 132 ! S. Bony, Mar 2002: 133 ! * Several modules corresponding to different physical processes 134 ! * Several versions of convect may be used: 135 ! - iflag_con=3: version lmd (previously named convect3) 136 ! - iflag_con=4: version 4.3b (vect. version, previously convect1/2) 137 ! + tard: - iflag_con=5: version lmd with ice (previously named convectg) 138 ! S. Bony, Oct 2002: 139 ! * Vectorization of convect3 (ie version lmd) 140 SUBROUTINE cv3a_driver(len, nd, ndp1, ntra, nloc, k_upper, & 141 iflag_con, iflag_mix, iflag_ice_thermo, iflag_clos, ok_conserv_q, & 142 delt, & 143 t1, q1, qs1, t1_wake, q1_wake, qs1_wake, s1_wake, & 144 u1, v1, & 145 p1, ph1, & 146 Ale1, Alp1, omega1, & 147 sig1feed1, sig2feed1, wght1, & 148 iflag1, ft1, fq1, fu1, fv1, ftra1, & 149 precip1, kbas1, ktop1, & 150 cbmf1, plcl1, plfc1, wbeff1, & 151 sig1, w01, & !input/output 152 ptop21, sigd1, & 153 ma1, mip1, Vprecip1, Vprecipi1, upwd1, dnwd1, dnwd01, & 154 qcondc1, wd1, & 155 cape1, cin1, tvp1, & 156 ftd1, fqd1, & 157 Plim11, Plim21, asupmax1, supmax01, asupmaxmin1, & 158 da1, phi1, mp1, phi21, d1a1, dam1, sigij1, wghti1, & 159 qta1, clw1, elij1, evap1, ep1, epmlmMm1, eplaMm1, & 160 wdtrainA1, wdtrainS1, wdtrainM1, qtc1, sigt1, tau_cld_cv, & 161 coefw_cld_cv, & 162 epmax_diag1) 163 164 USE print_control_mod, ONLY: prt_level, lunout 165 USE cv3a_compress_mod 166 USE cv3p_mixing_mod, ONLY : cv3p_mixing 167 IMPLICIT NONE 168 ! Input 169 INTEGER, INTENT(IN) :: len ! first (i) dimension 170 INTEGER, INTENT(IN) :: nd ! vertical (k) dimension 171 INTEGER, INTENT(IN) :: ndp1 ! nd + 1 172 INTEGER, INTENT(IN) :: ntra ! number of tracors 173 INTEGER, INTENT(IN) :: nloc ! dimension of arrays for compressed fields (nloc=len) pour l'instant 174 INTEGER, INTENT(IN) :: k_upper ! upmost level for vertical loops 175 INTEGER, INTENT(IN) :: iflag_con ! version of convect (3) 176 INTEGER, INTENT(IN) :: iflag_mix ! version of mixing (0/1/2) 177 INTEGER, INTENT(IN) :: iflag_ice_thermo ! accounting for ice thermodynamics (0/1) 178 INTEGER, INTENT(IN) :: iflag_clos ! version of closure (0/1) 179 LOGICAL, INTENT(IN) :: ok_conserv_q ! when true corrections for water conservation are swtiched on 180 REAL, INTENT(IN) :: tau_cld_cv ! characteristic time of dissipation of mixing fluxes 181 REAL, INTENT(IN) :: coefw_cld_cv ! coefficient for updraft velocity in convection 182 REAL, INTENT(IN) :: delt ! time step 183 REAL, DIMENSION(len, nd), INTENT(IN) :: t1 ! temperature (sat draught envt) 184 REAL, DIMENSION(len, nd), INTENT(IN) :: q1 ! specific hum (sat draught envt) 185 REAL, DIMENSION(len, nd), INTENT(IN) :: qs1 ! sat specific hum (sat draught envt) 186 REAL, DIMENSION(len, nd), INTENT(IN) :: t1_wake ! temperature (unsat draught envt) 187 REAL, DIMENSION(len, nd), INTENT(IN) :: q1_wake ! specific hum(unsat draught envt) 188 REAL, DIMENSION(len, nd), INTENT(IN) :: qs1_wake ! sat specific hum(unsat draughts envt) 189 REAL, DIMENSION(len), INTENT(IN) :: s1_wake ! fractionnal area covered by wakes 190 REAL, DIMENSION(len, nd), INTENT(IN) :: u1 ! u-wind 191 REAL, DIMENSION(len, nd), INTENT(IN) :: v1 ! v-wind 192 REAL, DIMENSION(len, nd), INTENT(IN) :: p1 ! full level pressure 193 REAL, DIMENSION(len, ndp1), INTENT(IN) :: ph1 ! half level pressure 194 REAL, DIMENSION(len), INTENT(IN) :: Ale1 ! Available lifting Energy 195 REAL, DIMENSION(len), INTENT(IN) :: Alp1 ! Available lifting Power 196 REAL, DIMENSION(len, nd), INTENT(IN) :: omega1 197 REAL, INTENT(IN) :: sig1feed1 ! sigma coord/pressure at lower bound of feeding layer 198 REAL, INTENT(IN) :: sig2feed1 ! sigma coord/pressure at upper bound of feeding layer 199 REAL, DIMENSION(nd), INTENT(IN) :: wght1 ! weight density determining the feeding mixture 200 201 ! Input/Output 202 REAL, DIMENSION(len, nd), INTENT(INOUT) :: sig1 ! section adiabatic updraft 203 REAL, DIMENSION(len, nd), INTENT(INOUT) :: w01 ! vertical velocity within adiab updraft 204 205 ! Output 206 INTEGER, DIMENSION(len), INTENT(OUT) :: iflag1 ! flag for Emanuel conditions 207 REAL, DIMENSION(len, nd), INTENT(OUT) :: ft1 ! temp tend 208 REAL, DIMENSION(len, nd), INTENT(OUT) :: fq1 ! spec hum tend 209 REAL, DIMENSION(len, nd), INTENT(OUT) :: fu1 ! u-wind tend 210 REAL, DIMENSION(len, nd), INTENT(OUT) :: fv1 ! v-wind tend 211 REAL, DIMENSION(len, nd, ntra), INTENT(OUT) :: ftra1 ! tracor tend 212 REAL, DIMENSION(len), INTENT(OUT) :: precip1 ! precipitation 213 INTEGER, DIMENSION(len), INTENT(OUT) :: kbas1 ! cloud base level 214 INTEGER, DIMENSION(len), INTENT(OUT) :: ktop1 ! cloud top level 215 REAL, DIMENSION(len), INTENT(OUT) :: cbmf1 ! cloud base mass flux 216 REAL, DIMENSION(len), INTENT(OUT) :: plcl1 217 REAL, DIMENSION(len), INTENT(OUT) :: plfc1 218 REAL, DIMENSION(len), INTENT(OUT) :: wbeff1 219 REAL, DIMENSION(len), INTENT(OUT) :: ptop21 ! top of entraining zone 220 REAL, DIMENSION(len), INTENT(OUT) :: sigd1 221 REAL, DIMENSION(len, nd), INTENT(OUT) :: ma1 ! mass flux adiabatic updraft (staggered grid) 222 REAL, DIMENSION(len, nd), INTENT(OUT) :: mip1 ! mass flux shed by the adiabatic updraft (extensive) 223 REAL, DIMENSION(len, ndp1), INTENT(OUT) :: vprecip1 ! vertical profile of total precipitation (staggered grid) 224 REAL, DIMENSION(len, ndp1), INTENT(OUT) :: vprecipi1 ! vertical profile of ice precipitation (staggered grid) 225 REAL, DIMENSION(len, nd), INTENT(OUT) :: upwd1 ! total upward mass flux (adiab+mixed) (staggered grid) 226 REAL, DIMENSION(len, nd), INTENT(OUT) :: dnwd1 ! saturated downward mass flux (mixed) (staggered grid) 227 REAL, DIMENSION(len, nd), INTENT(OUT) :: dnwd01 ! unsaturated downward mass flux (staggered grid) 228 REAL, DIMENSION(len, nd), INTENT(OUT) :: qcondc1 ! in-cld mixing ratio of condensed water (intensive) 229 REAL, DIMENSION(len), INTENT(OUT) :: wd1 ! downdraft velocity scale for sfc fluxes 230 REAL, DIMENSION(len), INTENT(OUT) :: cape1 231 REAL, DIMENSION(len), INTENT(OUT) :: cin1 232 REAL, DIMENSION(len, nd), INTENT(OUT) :: tvp1 ! adiab lifted parcell virt temp 233 REAL, DIMENSION(len, nd), INTENT(OUT) :: ftd1 ! temperature tendency due to precipitations (K/s) 234 REAL, DIMENSION(len, nd), INTENT(OUT) :: fqd1 ! specific humidity tendencies due to precipitations ((gm/gm)/s) 235 REAL, DIMENSION(len), INTENT(OUT) :: Plim11 236 REAL, DIMENSION(len), INTENT(OUT) :: Plim21 237 REAL, DIMENSION(len, nd), INTENT(OUT) :: asupmax1 ! Highest mixing fraction of mixed updraughts 238 REAL, DIMENSION(len), INTENT(OUT) :: supmax01 239 REAL, DIMENSION(len), INTENT(OUT) :: asupmaxmin1 240 REAL, DIMENSION(len, nd), INTENT(OUT) :: qtc1 ! in cloud water content / specific humidity in convection (intensive) 241 REAL, DIMENSION(len, nd), INTENT(OUT) :: sigt1 ! surface fraction in adiabatic updrafts / fract. cloud area (intensive) 242 REAL, DIMENSION(len, nd), INTENT(OUT) :: wdtrainA1 ! precipitation ejected from adiabatic draught 243 REAL, DIMENSION(len, nd), INTENT(OUT) :: wdtrainS1 ! precipitation detrained from shedding of adiabatic draught 244 REAL, DIMENSION(len, nd), INTENT(OUT) :: wdtrainM1 ! precipitation detrained from mixed draughts 245 REAL, DIMENSION(len, nd), INTENT(OUT) :: mp1 ! unsat. mass flux (staggered grid) 246 REAL, DIMENSION(len, nd), INTENT(OUT) :: da1 ! detrained mass flux of adiab. asc. air (extensive) 247 REAL, DIMENSION(len, nd, nd), INTENT(OUT) :: phi1 ! mass flux of envt. air in mixed draughts (extensive) 248 REAL, DIMENSION(len, nd, nd), INTENT(OUT) :: epmlmMm1 ! (extensive) 249 REAL, DIMENSION(len, nd), INTENT(OUT) :: eplaMm1 ! (extensive) 250 REAL, DIMENSION(len, nd), INTENT(OUT) :: evap1 ! evaporation rate in precip. downdraft. (intensive) 251 REAL, DIMENSION(len, nd), INTENT(OUT) :: ep1 252 REAL, DIMENSION(len, nd, nd), INTENT(OUT) :: sigij1 ! mass fraction of env. air in mixed draughts (intensive) 253 REAL, DIMENSION(len, nd, nd), INTENT(OUT) :: elij1! cond. water per unit mass of mixed draughts (intensive) 254 REAL, DIMENSION(len, nd), INTENT(OUT) :: qta1 ! total water per unit mass of the adiab. asc. (intensive) 255 REAL, DIMENSION(len, nd), INTENT(OUT) :: clw1 ! condensed water content of the adiabatic updraught / cond. water per unit mass of the adiab. asc. (intensive) 256 REAL, DIMENSION(len, nd), INTENT(OUT) :: wghti1 ! final weight of the feeding layers (extensive) 257 REAL, DIMENSION(len, nd, nd), INTENT(OUT) :: phi21 ! (extensive) 258 REAL, DIMENSION(len, nd), INTENT(OUT) :: d1a1 ! (extensive) 259 REAL, DIMENSION(len, nd), INTENT(OUT) :: dam1 ! (extensive) 260 REAL, DIMENSION(len), INTENT(OUT) :: epmax_diag1 402 261 403 262 ! Local (non compressed) arrays 404 405 406 INTEGER i, k, il 407 INTEGER nword1, nword2, nword3, nword4 408 INTEGER icbmax 409 INTEGER nk1(len) 410 INTEGER icb1(len) 411 INTEGER icbs1(len) 412 413 LOGICAL ok_inhib ! True => possible inhibition of convection by dryness 414 LOGICAL, SAVE :: debut = .TRUE. 415 !$OMP THREADPRIVATE(debut) 416 417 REAL coef_convective(len) ! = 1 for convective points, = 0 otherwise 418 REAL tnk1(len) 419 REAL thnk1(len) 420 REAL qnk1(len) 421 REAL gznk1(len) 422 REAL qsnk1(len) 423 REAL unk1(len) 424 REAL vnk1(len) 425 REAL cpnk1(len) 426 REAL hnk1(len) 427 REAL pbase1(len) 428 REAL buoybase1(len) 429 430 REAL lf1(len, nd), lf1_wake(len, nd) 431 REAL lv1(len, nd), lv1_wake(len, nd) 432 REAL cpn1(len, nd), cpn1_wake(len, nd) 433 REAL tv1(len, nd), tv1_wake(len, nd) 434 REAL gz1(len, nd), gz1_wake(len, nd) 435 REAL hm1(len, nd) 436 REAL h1(len, nd), h1_wake(len, nd) 437 REAL tp1(len, nd) 438 REAL th1(len, nd), th1_wake(len, nd) 439 440 REAL bid(len, nd) ! dummy array 441 442 INTEGER ncum 443 444 REAL p1feed1(len) ! pressure at lower bound of feeding layer 445 REAL p2feed1(len) ! pressure at upper bound of feeding layer 446 !JYG,RL 447 !! real wghti1(len,nd) ! weights of the feeding layers 448 !JYG,RL 263 INTEGER i, k, il 264 INTEGER icbmax 265 INTEGER nk1(len) 266 INTEGER icb1(len) 267 INTEGER icbs1(len) 268 269 LOGICAL ok_inhib ! True => possible inhibition of convection by dryness 270 LOGICAL, SAVE :: debut = .TRUE. 271 !$omp THREADPRIVATE(debut) 272 273 REAL tnk1(len) 274 REAL thnk1(len) 275 REAL qnk1(len) 276 REAL gznk1(len) 277 REAL qsnk1(len) 278 REAL unk1(len) 279 REAL vnk1(len) 280 REAL cpnk1(len) 281 REAL hnk1(len) 282 REAL pbase1(len) 283 REAL buoybase1(len) 284 285 REAL lf1(len, nd), lf1_wake(len, nd) 286 REAL lv1(len, nd), lv1_wake(len, nd) 287 REAL cpn1(len, nd), cpn1_wake(len, nd) 288 REAL tv1(len, nd), tv1_wake(len, nd) 289 REAL gz1(len, nd), gz1_wake(len, nd) 290 REAL hm1(len, nd) 291 REAL h1(len, nd), h1_wake(len, nd) 292 REAL tp1(len, nd) 293 REAL th1(len, nd), th1_wake(len, nd) 294 295 REAL bid(len, nd) ! dummy array 296 297 INTEGER ncum 298 299 REAL p1feed1(len) ! pressure at lower bound of feeding layer 300 REAL p2feed1(len) ! pressure at upper bound of feeding layer 449 301 450 302 ! (local) compressed fields: 451 452 453 INTEGER idcum(nloc) 454 !jyg< 455 LOGICAL compress ! True if compression occurs 456 !>jyg 457 INTEGER iflag(nloc), nk(nloc), icb(nloc) 458 INTEGER nent(nloc, nd) 459 INTEGER icbs(nloc) 460 INTEGER inb(nloc), inbis(nloc) 461 462 REAL cbmf(nloc), plcl(nloc), plfc(nloc), wbeff(nloc) 463 REAL t(nloc, nd), q(nloc, nd), qs(nloc, nd) 464 REAL t_wake(nloc, nd), q_wake(nloc, nd), qs_wake(nloc, nd) 465 REAL s_wake(nloc) 466 REAL u(nloc, nd), v(nloc, nd) 467 REAL gz(nloc, nd), h(nloc, nd) 468 REAL h_wake(nloc, nd) 469 REAL lv(nloc, nd), lf(nloc, nd), cpn(nloc, nd) 470 REAL lv_wake(nloc, nd), lf_wake(nloc, nd), cpn_wake(nloc, nd) 471 REAL p(nloc, nd), ph(nloc, nd+1), tv(nloc, nd), tp(nloc, nd) 472 REAL tv_wake(nloc, nd) 473 REAL clw(nloc, nd) 474 REAL, DIMENSION(nloc, nd) :: qta, qpreca !!jygprl 475 REAL dph(nloc, nd) 476 REAL pbase(nloc), buoybase(nloc), th(nloc, nd) 477 REAL th_wake(nloc, nd) 478 REAL tvp(nloc, nd) 479 REAL sig(nloc, nd), w0(nloc, nd), ptop2(nloc) 480 REAL hp(nloc, nd), ep(nloc, nd), sigp(nloc, nd) 481 REAL buoy(nloc, nd) 482 REAL cape(nloc) 483 REAL cin(nloc) 484 REAL m(nloc, nd) 485 REAL mm(nloc, nd) 486 REAL ment(nloc, nd, nd), sigij(nloc, nd, nd) 487 REAL qent(nloc, nd, nd) 488 REAL hent(nloc, nd, nd) 489 REAL uent(nloc, nd, nd), vent(nloc, nd, nd) 490 REAL ments(nloc, nd, nd), qents(nloc, nd, nd) 491 REAL elij(nloc, nd, nd) 492 REAL supmax(nloc, nd) 493 REAL Ale(nloc), Alp(nloc), coef_clos(nloc) 494 REAL omega(nloc,nd) 495 REAL sigd(nloc) 496 ! real mp(nloc,nd), qp(nloc,nd), up(nloc,nd), vp(nloc,nd) 497 ! real wt(nloc,nd), water(nloc,nd), evap(nloc,nd), ice(nloc,nd) 498 ! real b(nloc,nd), sigd(nloc) 499 ! save mp,qp,up,vp,wt,water,evap,b 500 REAL, DIMENSION(len,nd) :: mp, qp, up, vp 501 REAL, DIMENSION(len,nd) :: wt, water, evap 502 REAL, DIMENSION(len,nd) :: ice, fondue, b 503 REAL, DIMENSION(len,nd) :: frac_a, frac_s, faci !!jygprl 504 REAL ft(nloc, nd), fq(nloc, nd) 505 REAL ftd(nloc, nd), fqd(nloc, nd) 506 REAL fu(nloc, nd), fv(nloc, nd) 507 REAL upwd(nloc, nd), dnwd(nloc, nd), dnwd0(nloc, nd) 508 REAL ma(nloc, nd), mip(nloc, nd) 509 !! REAL tls(nloc, nd), tps(nloc, nd) ! unused . jyg 510 REAL qprime(nloc), tprime(nloc) 511 REAL precip(nloc) 512 ! real Vprecip(nloc,nd) 513 REAL vprecip(nloc, nd+1) 514 REAL vprecipi(nloc, nd+1) 515 REAL tra(nloc, nd, ntra), trap(nloc, nd, ntra) 516 REAL ftra(nloc, nd, ntra), traent(nloc, nd, nd, ntra) 517 REAL qcondc(nloc, nd) ! cld 518 REAL wd(nloc) ! gust 519 REAL Plim1(nloc), plim2(nloc) 520 REAL asupmax(nloc, nd) 521 REAL supmax0(nloc) 522 REAL asupmaxmin(nloc) 523 524 REAL tnk(nloc), qnk(nloc), gznk(nloc) 525 REAL wghti(nloc, nd) 526 REAL hnk(nloc), unk(nloc), vnk(nloc) 527 528 REAL qtc(nloc, nd) ! cld 529 REAL sigt(nloc, nd) ! cld 530 531 ! RomP >>> 532 REAL wdtrainA(nloc, nd), wdtrainS(nloc, nd), wdtrainM(nloc, nd) !!jygprl 533 REAL da(len, nd), phi(len, nd, nd) 534 REAL epmlmMm(nloc, nd, nd), eplaMm(nloc, nd) 535 REAL phi2(len, nd, nd) 536 REAL d1a(len, nd), dam(len, nd) 537 ! RomP <<< 538 REAL epmax_diag(nloc) ! epmax_cape 539 540 CHARACTER (LEN=20) :: modname = 'cva_driver' 541 CHARACTER (LEN=80) :: abort_message 542 543 INTEGER,SAVE :: igout=1 544 !$OMP THREADPRIVATE(igout) 545 546 type(compress_data_t) :: compress_data 547 type(array_list) :: cv3a_compress_list, cv3a_uncompress_list 548 549 ! print *, 't1, t1_wake ',(k,t1(1,k),t1_wake(1,k),k=1,nd) 550 ! print *, 'q1, q1_wake ',(k,q1(1,k),q1_wake(1,k),k=1,nd) 303 LOGICAL compress ! True if compression occurs 304 INTEGER iflag(nloc), nk(nloc), icb(nloc) 305 INTEGER nent(nloc, nd) 306 INTEGER icbs(nloc) 307 INTEGER inb(nloc) 308 309 REAL cbmf(nloc), plcl(nloc), plfc(nloc), wbeff(nloc) 310 REAL t(nloc, nd), q(nloc, nd), qs(nloc, nd) 311 REAL t_wake(nloc, nd), q_wake(nloc, nd), qs_wake(nloc, nd) 312 REAL s_wake(nloc) 313 REAL u(nloc, nd), v(nloc, nd) 314 REAL gz(nloc, nd), h(nloc, nd) 315 REAL h_wake(nloc, nd) 316 REAL lv(nloc, nd), lf(nloc, nd), cpn(nloc, nd) 317 REAL lv_wake(nloc, nd), lf_wake(nloc, nd), cpn_wake(nloc, nd) 318 REAL p(nloc, nd), ph(nloc, nd + 1), tv(nloc, nd), tp(nloc, nd) 319 REAL tv_wake(nloc, nd) 320 REAL clw(nloc, nd) 321 REAL, DIMENSION(nloc, nd) :: qta, qpreca 322 REAL pbase(nloc), buoybase(nloc), th(nloc, nd) 323 REAL th_wake(nloc, nd) 324 REAL tvp(nloc, nd) 325 REAL sig(nloc, nd), w0(nloc, nd), ptop2(nloc) 326 REAL hp(nloc, nd), ep(nloc, nd), sigp(nloc, nd) 327 REAL buoy(nloc, nd) 328 REAL cape(nloc) 329 REAL cin(nloc) 330 REAL m(nloc, nd) 331 REAL mm(nloc, nd) 332 REAL ment(nloc, nd, nd), sigij(nloc, nd, nd) 333 REAL qent(nloc, nd, nd) 334 REAL hent(nloc, nd, nd) 335 REAL uent(nloc, nd, nd), vent(nloc, nd, nd) 336 REAL ments(nloc, nd, nd), qents(nloc, nd, nd) 337 REAL elij(nloc, nd, nd) 338 REAL supmax(nloc, nd) 339 REAL Ale(nloc), Alp(nloc), coef_clos(nloc) 340 REAL omega(nloc, nd) 341 REAL sigd(nloc) 342 REAL, DIMENSION(len, nd) :: mp, qp, up, vp 343 REAL, DIMENSION(len, nd) :: wt, water, evap 344 REAL, DIMENSION(len, nd) :: ice, fondue, b 345 REAL, DIMENSION(len, nd) :: frac_a, frac_s, faci 346 REAL ft(nloc, nd), fq(nloc, nd) 347 REAL ftd(nloc, nd), fqd(nloc, nd) 348 REAL fu(nloc, nd), fv(nloc, nd) 349 REAL upwd(nloc, nd), dnwd(nloc, nd), dnwd0(nloc, nd) 350 REAL ma(nloc, nd), mip(nloc, nd) 351 REAL precip(nloc) 352 REAL vprecip(nloc, nd + 1) 353 REAL vprecipi(nloc, nd + 1) 354 REAL tra(nloc, nd, ntra), trap(nloc, nd, ntra) 355 REAL ftra(nloc, nd, ntra), traent(nloc, nd, nd, ntra) 356 REAL qcondc(nloc, nd) 357 REAL wd(nloc) 358 REAL Plim1(nloc), plim2(nloc) 359 REAL asupmax(nloc, nd) 360 REAL supmax0(nloc) 361 REAL asupmaxmin(nloc) 362 363 REAL tnk(nloc), qnk(nloc), gznk(nloc) 364 REAL wghti(nloc, nd) 365 REAL hnk(nloc), unk(nloc), vnk(nloc) 366 367 REAL qtc(nloc, nd) 368 REAL sigt(nloc, nd) 369 370 REAL wdtrainA(nloc, nd), wdtrainS(nloc, nd), wdtrainM(nloc, nd) 371 REAL da(len, nd), phi(len, nd, nd) 372 REAL epmlmMm(nloc, nd, nd), eplaMm(nloc, nd) 373 REAL phi2(len, nd, nd) 374 REAL d1a(len, nd), dam(len, nd) 375 REAL epmax_diag(nloc) ! epmax_cape 376 377 CHARACTER(LEN=20) :: modname = 'cva_driver' 378 CHARACTER(LEN=80) :: abort_message 379 380 INTEGER, SAVE :: igout = 1 381 !$omp THREADPRIVATE(igout) 382 383 type(compress_data_t) :: compress_data 384 type(array_list) :: cv3a_compress_list, cv3a_uncompress_list 385 386 if (iflag_con /= 3) call abort_physic("cv3a_driver", "iflag_con must be 3", 1) 551 387 552 388 ! ------------------------------------------------------------------- 553 389 ! --- SET CONSTANTS AND PARAMETERS 554 390 ! ------------------------------------------------------------------- 555 556 391 ! -- set simulation flags: 557 ! (common cvflag) 558 559 CALL cv_flag(iflag_ice_thermo) 560 392 ! (common cvflag 393 CALL cv_flag(iflag_ice_thermo) 561 394 ! -- set thermodynamical constants: 562 395 ! (common cvthermo) 563 564 CALL cv_thermo(iflag_con) 565 396 CALL cv_thermo(iflag_con) 566 397 ! -- set convect parameters 567 568 398 ! includes microphysical parameters and parameters that 569 399 ! control the rate of approach to quasi-equilibrium) 570 400 ! (common cvparam) 571 572 IF (iflag_con==3) THEN573 401 CALL cv3_param(nd, k_upper, delt) 574 402 575 END IF 576 577 IF (iflag_con==4) THEN 578 CALL cv_param(nd) 579 END IF 580 581 ! --------------------------------------------------------------------- 582 ! --- INITIALIZE OUTPUT ARRAYS AND PARAMETERS 583 ! --------------------------------------------------------------------- 584 nword1 = len 585 nword2 = len*nd 586 nword3 = len*nd*ntra 587 nword4 = len*nd*nd 588 589 iflag1(:) = 0 590 ktop1(:) = 0 591 kbas1(:) = 0 592 ft1(:, :) = 0.0 593 fq1(:, :) = 0.0 594 fu1(:, :) = 0.0 595 fv1(:, :) = 0.0 596 ftra1(:, :, :) = 0. 597 precip1(:) = 0. 598 cbmf1(:) = 0. 599 plcl1(:) = 0. 600 plfc1(:) = 0. 601 wbeff1(:) = 0. 602 ptop21(:) = 0. 603 sigd1(:) = 0. 604 ma1(:, :) = 0. 605 mip1(:, :) = 0. 606 vprecip1(:, :) = 0. 607 vprecipi1(:, :) = 0. 608 upwd1(:, :) = 0. 609 dnwd1(:, :) = 0. 610 dnwd01(:, :) = 0. 611 qcondc1(:, :) = 0. 612 wd1(:) = 0. 613 cape1(:) = 0. 614 cin1(:) = 0. 615 tvp1(:, :) = 0. 616 ftd1(:, :) = 0. 617 fqd1(:, :) = 0. 618 Plim11(:) = 0. 619 Plim21(:) = 0. 620 asupmax1(:, :) = 0. 621 supmax01(:) = 0. 622 asupmaxmin1(:) = 0. 623 624 tvp(:, :) = 0. !ym missing init, need to have a look by developpers 625 tv(:, :) = 0. !ym missing init, need to have a look by developpers 626 627 DO il = 1, len 628 cin1(il) = -100000. 629 cape1(il) = -1. 630 END DO 631 632 !! IF (iflag_con==3) THEN 633 !! DO il = 1, len 634 !! sig1(il, nd) = sig1(il, nd) + 1. 635 !! sig1(il, nd) = amin1(sig1(il,nd), 12.1) 636 !! END DO 637 !! END IF 638 639 IF (iflag_con==3) THEN 640 CALL cv3_incrcount(len,nd,delt,sig1) 641 END IF ! (iflag_con==3) 642 643 ! RomP >>> 644 sigt1(:, :) = 0. 645 qtc1(:, :) = 0. 646 wdtrainA1(:, :) = 0. 647 wdtrainS1(:, :) = 0. 648 wdtrainM1(:, :) = 0. 649 da1(:, :) = 0. 650 phi1(:, :, :) = 0. 651 epmlmMm1(:, :, :) = 0. 652 eplaMm1(:, :) = 0. 653 mp1(:, :) = 0. 654 evap1(:, :) = 0. 655 ep1(:, :) = 0. 656 sigij1(:, :, :) = 0. 657 elij1(:, :, :) = 0. 658 qta1(:,:) = 0. 659 clw1(:,:) = 0. 660 wghti1(:,:) = 0. 661 phi21(:, :, :) = 0. 662 d1a1(:, :) = 0. 663 dam1(:, :) = 0. 664 ! RomP <<< 403 CALL cv3_incrcount(len, nd, delt, sig1) 404 665 405 ! --------------------------------------------------------------------- 666 406 ! --- INITIALIZE LOCAL ARRAYS AND PARAMETERS 667 407 ! --------------------------------------------------------------------- 668 408 669 DO il = 1, nloc670 coef_clos(il) = 1.671 END DO409 DO il = 1, nloc 410 coef_clos(il) = 1. 411 END DO 672 412 673 413 ! -------------------------------------------------------------------- … … 675 415 ! -------------------------------------------------------------------- 676 416 677 IF (iflag_con==3) THEN 678 679 IF (debut) THEN 680 PRINT *, 'Emanuel version 3 nouvelle' 681 END IF 682 ! print*,'t1, q1 ',t1,q1 683 if (prt_level >= 9) & 684 PRINT *, 'cva_driver -> cv3_prelim' 685 CALL cv3_prelim(len, nd, ndp1, t1, q1, p1, ph1, & ! nd->na 417 IF (debut) PRINT *, 'Emanuel version 3 nouvelle' 418 419 call driver_log('cv3_prelim') 420 CALL cv3_prelim(len, nd, ndp1, t1, q1, p1, ph1, & 686 421 lv1, lf1, cpn1, tv1, gz1, h1, hm1, th1) 687 422 688 689 if (prt_level >= 9) & 690 PRINT *, 'cva_driver -> cv3_prelim' 691 CALL cv3_prelim(len, nd, ndp1, t1_wake, q1_wake, p1, ph1, & ! nd->na 423 call driver_log('cv3_prelim') 424 CALL cv3_prelim(len, nd, ndp1, t1_wake, q1_wake, p1, ph1, & 692 425 lv1_wake, lf1_wake, cpn1_wake, tv1_wake, gz1_wake, & 693 426 h1_wake, bid, th1_wake) 694 695 END IF696 697 IF (iflag_con==4) THEN698 PRINT *, 'Emanuel version 4 '699 if (prt_level >= 9) &700 PRINT *, 'cva_driver -> cv_prelim'701 CALL cv_prelim(len, nd, ndp1, t1, q1, p1, ph1, &702 lv1, cpn1, tv1, gz1, h1, hm1)703 END IF704 427 705 428 ! -------------------------------------------------------------------- 706 429 ! --- CONVECTIVE FEED 707 430 ! -------------------------------------------------------------------- 708 709 431 ! compute feeding layer potential temperature and mixing ratio : 710 711 432 ! get bounds of feeding layer 712 713 433 ! test niveaux couche alimentation KE 714 IF (sig1feed1==sig2feed1) THEN 715 WRITE (lunout, *) 'impossible de choisir sig1feed=sig2feed' 716 WRITE (lunout, *) 'changer la valeur de sig2feed dans physiq.def' 717 abort_message = '' 718 CALL abort_physic(modname, abort_message, 1) 719 END IF 720 721 DO i = 1, len 722 p1feed1(i) = sig1feed1*ph1(i, 1) 723 p2feed1(i) = sig2feed1*ph1(i, 1) 724 !test maf 725 ! p1feed1(i)=ph1(i,1) 726 ! p2feed1(i)=ph1(i,2) 727 ! p2feed1(i)=ph1(i,3) 728 !testCR: on prend la couche alim des thermiques 729 ! p2feed1(i)=ph1(i,lalim_conv1(i)+1) 730 ! print*,'lentr=',lentr(i),ph1(i,lentr(i)+1),ph1(i,2) 731 END DO 732 733 IF (iflag_con==3) THEN 734 END IF 735 DO i = 1, len 736 ! print*,'avant cv3_feed Plim',p1feed1(i),p2feed1(i) 737 END DO 738 IF (iflag_con==3) THEN 739 740 ! print*, 'IFLAG1 avant cv3_feed' 741 ! print*,'len,nd',len,nd 742 ! write(*,'(64i1)') iflag1(2:len-1) 743 744 if (prt_level >= 9) & 745 PRINT *, 'cva_driver -> cv3_feed' 746 CALL cv3_feed(len, nd, ok_conserv_q, & ! nd->na 747 t1, q1, u1, v1, p1, ph1, h1, gz1, & 434 IF (sig1feed1 == sig2feed1) THEN 435 WRITE (lunout, *) 'impossible de choisir sig1feed=sig2feed' 436 WRITE (lunout, *) 'changer la valeur de sig2feed dans physiq.def' 437 abort_message = '' 438 CALL abort_physic(modname, abort_message, 1) 439 END IF 440 441 DO i = 1, len 442 p1feed1(i) = sig1feed1*ph1(i, 1) 443 p2feed1(i) = sig2feed1*ph1(i, 1) 444 END DO 445 446 call driver_log('cv3_feed') 447 448 ! GLITCHY : arrays are set to zero but are intent(out) in call to cv3_feed 449 iflag1(:) = 0 450 plcl1(:) = 0. 451 wghti1(:, :) = 0. 452 CALL cv3_feed(len, nd, ok_conserv_q, & 453 t1, q1, u1, v1, p1, ph1, h1, gz1, & 748 454 p1feed1, p2feed1, wght1, & 749 455 wghti1, tnk1, thnk1, qnk1, qsnk1, unk1, vnk1, & 750 456 cpnk1, hnk1, nk1, icb1, icbmax, iflag1, gznk1, plcl1) 751 END IF752 753 ! print*, 'IFLAG1 apres cv3_feed'754 ! print*,'len,nd',len,nd755 ! write(*,'(64i1)') iflag1(2:len-1)756 757 IF (iflag_con==4) THEN758 if (prt_level >= 9) &759 PRINT *, 'cva_driver -> cv_feed'760 CALL cv_feed(len, nd, t1, q1, qs1, p1, hm1, gz1, &761 nk1, icb1, icbmax, iflag1, tnk1, qnk1, gznk1, plcl1)762 END IF763 764 ! print *, 'cv3_feed-> iflag1, plcl1 ',iflag1(1),plcl1(1)765 457 766 458 ! -------------------------------------------------------------------- … … 770 462 ! actual temperature, and the adiabatic liquid water content. 771 463 ! -------------------------------------------------------------------- 772 773 IF (iflag_con==3) THEN 774 775 if (prt_level >= 9) & 776 PRINT *, 'cva_driver -> cv3_undilute1' 464 call driver_log('cv3_undilute1') 465 ! GLITCHY : arrays are set to zero but are intent(out) in call to cv3_feed 466 tvp1(:, :) = 0. 467 clw1(:, :) = 0. 777 468 CALL cv3_undilute1(len, nd, t1, qs1, gz1, plcl1, p1, icb1, tnk1, qnk1, & ! nd->na 778 469 gznk1, tp1, tvp1, clw1, icbs1) 779 END IF780 781 782 IF (iflag_con==4) THEN783 if (prt_level >= 9) &784 PRINT *, 'cva_driver -> cv_undilute1'785 CALL cv_undilute1(len, nd, t1, q1, qs1, gz1, p1, nk1, icb1, icbmax, &786 tp1, tvp1, clw1)787 END IF788 470 789 471 ! ------------------------------------------------------------------- … … 791 473 ! ------------------------------------------------------------------- 792 474 793 ! print *,' avant triggering, iflag_con ',iflag_con 794 795 IF (iflag_con==3) THEN 796 797 if (prt_level >= 9) & 798 PRINT *, 'cva_driver -> cv3_trigger' 475 call driver_log('cv3_trigger') 799 476 CALL cv3_trigger(len, nd, icb1, plcl1, p1, th1, tv1, tvp1, thnk1, & ! nd->na 800 pbase1, buoybase1, iflag1, sig1, w01) 801 802 803 ! print*, 'IFLAG1 apres cv3_triger' 804 ! print*,'len,nd',len,nd 805 ! write(*,'(64i1)') iflag1(2:len-1) 806 807 ! call dump2d(iim,jjm-1,sig1(2) 808 END IF 809 810 IF (iflag_con==4) THEN 811 if (prt_level >= 9) & 812 PRINT *, 'cva_driver -> cv_trigger' 813 CALL cv_trigger(len, nd, icb1, cbmf1, tv1, tvp1, iflag1) 814 END IF 815 477 pbase1, buoybase1, iflag1, sig1, w01) 816 478 817 479 ! ===================================================================== 818 480 ! --- IF THIS POINT IS REACHED, MOIST CONVECTIVE ADJUSTMENT IS NECESSARY 819 481 ! ===================================================================== 820 821 ! Determine the number "ncum" of convective gridpoints, the list "idcum" of convective822 ! gridpoints and the weights "coef_convective" (= 1. for convective gridpoints and = 0.823 ! elsewhere).824 ncum = 0825 coef_convective(:) = 0.826 DO i = 1, len827 IF (iflag1(i)==0) THEN828 coef_convective(i) = 1.829 ncum = ncum + 1830 idcum(ncum) = i831 END IF832 END DO833 834 ! print*,'len, ncum = ',len,ncum835 836 IF (ncum>0) THEN837 482 838 483 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ … … 840 485 ! (-> vectorization over convective gridpoints) 841 486 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 842 843 IF (iflag_con==3) THEN 844 ! print*,'ncum tv1 ',ncum,tv1 845 ! print*,'tvp1 ',tvp1 846 !jyg< 847 ! If the fraction of convective points is larger than comp_threshold, then compression 848 ! is assumed useless. 849 compress = ncum <= len*comp_threshold 850 851 if( compress ) then 852 compress_mode = COMPRESS_MODE_COMPRESS 853 else 854 compress_mode = COMPRESS_MODE_COPY 855 endif 856 857 if (prt_level >= 9) & 858 PRINT *, 'cva_driver -> cv3a_compress' 859 860 call add_array_i1(cv3a_compress_list, iflag1, iflag) 861 call add_array_i1(cv3a_compress_list, nk1, nk) 862 call add_array_i1(cv3a_compress_list, icb1, icb) 863 call add_array_i1(cv3a_compress_list, icbs1, icbs) 864 call add_array_r1(cv3a_compress_list, plcl1, plcl) 865 call add_array_r1(cv3a_compress_list, tnk1, tnk) 866 call add_array_r1(cv3a_compress_list, qnk1, qnk) 867 call add_array_r1(cv3a_compress_list, gznk1, gznk) 868 call add_array_r1(cv3a_compress_list, hnk1, hnk) 869 call add_array_r1(cv3a_compress_list, unk1, unk) 870 call add_array_r1(cv3a_compress_list, vnk1, vnk) 871 call add_array_r2(cv3a_compress_list, wghti1, wghti) 872 call add_array_r1(cv3a_compress_list, pbase1, pbase) 873 call add_array_r1(cv3a_compress_list, buoybase1, buoybase) 874 call add_array_r2(cv3a_compress_list, th1, th) 875 call add_array_r2(cv3a_compress_list, t1, t) 876 call add_array_r2(cv3a_compress_list, q1, q) 877 call add_array_r2(cv3a_compress_list, qs1, qs) 878 call add_array_r2(cv3a_compress_list, t1_wake, t_wake) 879 call add_array_r2(cv3a_compress_list, q1_wake, q_wake) 880 call add_array_r2(cv3a_compress_list, qs1_wake, qs_wake) 881 call add_array_r1(cv3a_compress_list, s1_wake, s_wake) 882 call add_array_r2(cv3a_compress_list, u1, u) 883 call add_array_r2(cv3a_compress_list, v1, v) 884 call add_array_r2(cv3a_compress_list, gz1, gz) 885 call add_array_r2(cv3a_compress_list, h1, h) 886 call add_array_r2(cv3a_compress_list, th1_wake, th_wake) 887 !call add_array_r3(cv3a_compress_list, tra1, tra) ! 888 call add_array_r2(cv3a_compress_list, lv1, lv) 889 call add_array_r2(cv3a_compress_list, lf1, lf) 890 call add_array_r2(cv3a_compress_list, cpn1, cpn) 891 call add_array_r2(cv3a_compress_list, p1, p) 892 call add_array_r2(cv3a_compress_list, ph1, ph) 893 call add_array_r2(cv3a_compress_list, tv1, tv) 894 call add_array_r2(cv3a_compress_list, tp1, tp) 895 call add_array_r2(cv3a_compress_list, tvp1, tvp) 896 call add_array_r2(cv3a_compress_list, clw1, clw) 897 call add_array_r2(cv3a_compress_list, h1_wake, h_wake) 898 call add_array_r2(cv3a_compress_list, lv1_wake, lv_wake) 899 call add_array_r2(cv3a_compress_list, lf1_wake, lf_wake) 900 call add_array_r2(cv3a_compress_list, cpn1_wake, cpn_wake) 901 call add_array_r2(cv3a_compress_list, tv1_wake, tv_wake) 902 call add_array_r2(cv3a_compress_list, sig1, sig) 903 call add_array_r1(cv3a_compress_list, sig1(:,nd), sig(:,nd)) 904 call add_array_r2(cv3a_compress_list, w01, w0) 905 call add_array_r1(cv3a_compress_list, ptop21, ptop2) 906 call add_array_r1(cv3a_compress_list, Ale1, Ale) 907 call add_array_r1(cv3a_compress_list, Alp1, Alp) 908 call add_array_r2(cv3a_compress_list, omega1, omega) 909 910 call cv3a_compress(len, (iflag1 == 0), cv3a_compress_list, compress_data) 911 ncum = compress_data%ncum 912 ! IF (.not. compress) THEN 913 ! DO i = 1,len 914 ! idcum(i) = i 915 ! ENDDO 916 ! ENDIF 917 ! CALL cv3a_compress_old(len, nloc, ncum, nd, ntra, compress, & 918 ! iflag1, nk1, icb1, icbs1, & 919 ! plcl1, tnk1, qnk1, gznk1, hnk1, unk1, vnk1, & 920 ! wghti1, pbase1, buoybase1, & 921 ! t1, q1, qs1, t1_wake, q1_wake, qs1_wake, s1_wake, & 922 ! u1, v1, gz1, th1, th1_wake, & 923 ! tra1, & 924 ! h1, lv1, lf1, cpn1, p1, ph1, tv1, tp1, tvp1, clw1, & 925 ! h1_wake, lv1_wake, lf1_wake, cpn1_wake, tv1_wake, & 926 ! sig1, w01, ptop21, & 927 ! Ale1, Alp1, omega1, & 928 ! iflag, nk, icb, icbs, & 929 ! plcl, tnk, qnk, gznk, hnk, unk, vnk, & 930 ! wghti, pbase, buoybase, & 931 ! t, q, qs, t_wake, q_wake, qs_wake, s_wake, & 932 ! u, v, gz, th, th_wake, & 933 ! tra, & 934 ! h, lv, lf, cpn, p, ph, tv, tp, tvp, clw, & 935 ! h_wake, lv_wake, lf_wake, cpn_wake, tv_wake, & 936 ! sig, w0, ptop2, & 937 ! Ale, Alp, omega) 938 939 ! print*,'tv ',tv 940 ! print*,'tvp ',tvp 941 942 END IF 943 944 IF (iflag_con==4) THEN 945 if (prt_level >= 9) & 946 PRINT *, 'cva_driver -> cv_compress' 947 ! TODO : new compress interface could be used here too 948 CALL cv_compress(len, nloc, ncum, nd, & 949 iflag1, nk1, icb1, & 950 cbmf1, plcl1, tnk1, qnk1, gznk1, & 951 t1, q1, qs1, u1, v1, gz1, & 952 h1, lv1, cpn1, p1, ph1, tv1, tp1, tvp1, clw1, & 953 iflag, nk, icb, & 954 cbmf, plcl, tnk, qnk, gznk, & 955 t, q, qs, u, v, gz, h, lv, cpn, p, ph, tv, tp, tvp, clw, & 956 dph) 957 END IF 487 compress = .true. 488 if (compress) then 489 compress_mode = COMPRESS_MODE_COMPRESS 490 else 491 compress_mode = COMPRESS_MODE_COPY 492 endif 493 494 call driver_log('cv3a_compress') 495 496 call add_array_i1(cv3a_compress_list, iflag1, iflag) 497 call add_array_i1(cv3a_compress_list, nk1, nk) 498 call add_array_i1(cv3a_compress_list, icb1, icb) 499 call add_array_i1(cv3a_compress_list, icbs1, icbs) 500 call add_array_r1(cv3a_compress_list, plcl1, plcl) 501 call add_array_r1(cv3a_compress_list, tnk1, tnk) 502 call add_array_r1(cv3a_compress_list, qnk1, qnk) 503 call add_array_r1(cv3a_compress_list, gznk1, gznk) 504 call add_array_r1(cv3a_compress_list, hnk1, hnk) 505 call add_array_r1(cv3a_compress_list, unk1, unk) 506 call add_array_r1(cv3a_compress_list, vnk1, vnk) 507 call add_array_r2(cv3a_compress_list, wghti1, wghti) 508 call add_array_r1(cv3a_compress_list, pbase1, pbase) 509 call add_array_r1(cv3a_compress_list, buoybase1, buoybase) 510 call add_array_r2(cv3a_compress_list, th1, th) 511 call add_array_r2(cv3a_compress_list, t1, t) 512 call add_array_r2(cv3a_compress_list, q1, q) 513 call add_array_r2(cv3a_compress_list, qs1, qs) 514 call add_array_r2(cv3a_compress_list, t1_wake, t_wake) 515 call add_array_r2(cv3a_compress_list, q1_wake, q_wake) 516 call add_array_r2(cv3a_compress_list, qs1_wake, qs_wake) 517 call add_array_r1(cv3a_compress_list, s1_wake, s_wake) 518 call add_array_r2(cv3a_compress_list, u1, u) 519 call add_array_r2(cv3a_compress_list, v1, v) 520 call add_array_r2(cv3a_compress_list, gz1, gz) 521 call add_array_r2(cv3a_compress_list, h1, h) 522 call add_array_r2(cv3a_compress_list, th1_wake, th_wake) 523 call add_array_r2(cv3a_compress_list, lv1, lv) 524 call add_array_r2(cv3a_compress_list, lf1, lf) 525 call add_array_r2(cv3a_compress_list, cpn1, cpn) 526 call add_array_r2(cv3a_compress_list, p1, p) 527 call add_array_r2(cv3a_compress_list, ph1, ph) 528 call add_array_r2(cv3a_compress_list, tv1, tv) 529 call add_array_r2(cv3a_compress_list, tp1, tp) 530 call add_array_r2(cv3a_compress_list, tvp1, tvp) 531 call add_array_r2(cv3a_compress_list, clw1, clw) 532 call add_array_r2(cv3a_compress_list, h1_wake, h_wake) 533 call add_array_r2(cv3a_compress_list, lv1_wake, lv_wake) 534 call add_array_r2(cv3a_compress_list, lf1_wake, lf_wake) 535 call add_array_r2(cv3a_compress_list, cpn1_wake, cpn_wake) 536 call add_array_r2(cv3a_compress_list, tv1_wake, tv_wake) 537 call add_array_r2(cv3a_compress_list, sig1, sig) 538 call add_array_r1(cv3a_compress_list, sig1(:, nd), sig(:, nd)) 539 call add_array_r2(cv3a_compress_list, w01, w0) 540 call add_array_r1(cv3a_compress_list, Ale1, Ale) 541 call add_array_r1(cv3a_compress_list, Alp1, Alp) 542 call add_array_r2(cv3a_compress_list, omega1, omega) 543 544 call cv3a_compress(len, (iflag1 == 0), cv3a_compress_list, compress_data) 545 ncum = compress_data%ncum 546 547 IF (ncum > 0) THEN 958 548 959 549 ! ------------------------------------------------------------------- … … 967 557 ! ------------------------------------------------------------------- 968 558 969 IF (iflag_con==3) THEN 970 if (prt_level >= 9) & 971 PRINT *, 'cva_driver -> cv3_undilute2' 972 CALL cv3_undilute2(nloc, ncum, nd, iflag, icb, icbs, nk, & !na->nd 559 call driver_log('cv3_undilute2') 560 CALL cv3_undilute2(nloc, ncum, nd, iflag, icb, icbs, nk, & 973 561 tnk, qnk, gznk, hnk, t, q, qs, gz, & 974 562 p, ph, h, tv, lv, lf, pbase, buoybase, plcl, & 975 563 inb, tp, tvp, clw, hp, ep, sigp, buoy, & 976 frac_a, frac_s, qpreca, qta) !!jygprl 977 END IF 978 979 IF (iflag_con==4) THEN 980 if (prt_level >= 9) & 981 PRINT *, 'cva_driver -> cv_undilute2' 982 CALL cv_undilute2(nloc, ncum, nd, icb, nk, & 983 tnk, qnk, gznk, t, q, qs, gz, & 984 p, dph, h, tv, lv, & 985 inb, inbis, tp, tvp, clw, hp, ep, sigp, frac_s) 986 END IF 987 988 ! epmax_cape 989 ! on recalcule ep et hp 990 if (prt_level >= 9) & 991 PRINT *, 'cva_driver -> cv3_epmax_cape' 992 call cv3_epmax_fn_cape(nloc,ncum,nd & 993 , ep,hp,icb,inb,clw,nk,t,h,hnk,lv,lf,frac_s & 994 , pbase, p, ph, tv, buoy, sig, w0,iflag & 995 , epmax_diag) 564 frac_a, frac_s, qpreca, qta) 565 566 ! epmax_cape 567 ! on recalcule ep et hp 568 call driver_log('cv3_epmax_cape') 569 call cv3_epmax_fn_cape(nloc, ncum, nd & 570 , ep, hp, icb, inb, clw, nk, t, h, hnk, lv, lf, frac_s & 571 , pbase, p, ph, tv, buoy, sig, w0, iflag & 572 , epmax_diag) 996 573 997 574 ! ------------------------------------------------------------------- 998 575 ! --- MIXING(1) (if iflag_mix .ge. 1) 999 576 ! ------------------------------------------------------------------- 1000 IF (iflag_con==3) THEN 1001 ! IF ((iflag_ice_thermo==1) .AND. (iflag_mix/=0)) THEN 1002 ! WRITE (*, *) ' iflag_ice_thermo==1 requires iflag_mix==0', ' but iflag_mix=', iflag_mix, & 1003 ! '. Might as well stop here.' 1004 ! STOP 1005 ! END IF 1006 IF (iflag_mix>=1) THEN 577 578 IF (iflag_mix >= 1) THEN 1007 579 CALL zilch(supmax, nloc*nd) 1008 if (prt_level >= 9) & 1009 PRINT *, 'cva_driver -> cv3p_mixing' 1010 CALL cv3p_mixing(nloc, ncum, nd, nd, ntra, icb, nk, inb, & ! na->nd 1011 !! ph, t, q, qs, u, v, tra, h, lv, lf, frac, qnk, & 1012 ph, t, q, qs, u, v, tra, h, lv, lf, frac_s, qta, & !!jygprl 580 call driver_log('cv3p_mixing') 581 CALL cv3p_mixing(nloc, ncum, nd, nd, ntra, icb, nk, inb, & 582 ph, t, q, qs, u, v, tra, h, lv, lf, frac_s, qta, & 1013 583 unk, vnk, hp, tv, tvp, ep, clw, sig, & 1014 584 ment, qent, hent, uent, vent, nent, & 1015 585 sigij, elij, supmax, ments, qents, traent) 1016 ! print*, 'cv3p_mixing-> supmax ', (supmax(1,k), k=1,nd)1017 1018 586 ELSE 1019 587 CALL zilch(supmax, nloc*nd) 1020 588 END IF 1021 END IF 589 1022 590 ! ------------------------------------------------------------------- 1023 591 ! --- CLOSURE 1024 592 ! ------------------------------------------------------------------- 1025 593 1026 1027 IF (iflag_con==3) THEN 1028 IF (iflag_clos==0) THEN 1029 if (prt_level >= 9) & 1030 PRINT *, 'cva_driver -> cv3_closure' 1031 CALL cv3_closure(nloc, ncum, nd, icb, inb, & ! na->nd 594 ptop2(:) = 0 595 IF (iflag_clos == 0) THEN 596 call driver_log('cv3_closure') 597 CALL cv3_closure(nloc, ncum, nd, icb, inb, & 1032 598 pbase, p, ph, tv, buoy, & 1033 599 sig, w0, cape, m, iflag) … … 1036 602 ok_inhib = iflag_mix == 2 1037 603 1038 IF (iflag_clos==1) THEN 1039 PRINT *, ' pas d appel cv3p_closure' 1040 ! c CALL cv3p_closure(nloc,ncum,nd,icb,inb ! na->nd 1041 ! c : ,pbase,plcl,p,ph,tv,tvp,buoy 1042 ! c : ,supmax 1043 ! c o ,sig,w0,ptop2,cape,cin,m) 1044 END IF ! iflag_clos==1 1045 1046 IF (iflag_clos==2) THEN 1047 if (prt_level >= 9) & 1048 PRINT *, 'cva_driver -> cv3p1_closure' 1049 CALL cv3p1_closure(nloc, ncum, nd, icb, inb, & ! na->nd 604 IF (iflag_clos == 1) PRINT *, ' pas d appel cv3p_closure' 605 606 IF (iflag_clos == 2) THEN 607 call driver_log('cv3p1_closure') 608 CALL cv3p1_closure(nloc, ncum, nd, icb, inb, & 1050 609 pbase, plcl, p, ph, tv, tvp, buoy, & 1051 610 supmax, ok_inhib, Ale, Alp, omega, & … … 1053 612 Plim1, plim2, asupmax, supmax0, & 1054 613 asupmaxmin, cbmf, plfc, wbeff) 1055 if (prt_level >= 10) & 1056 PRINT *, 'cv3p1_closure-> plfc,wbeff ', plfc(1), wbeff(1) 1057 END IF ! iflag_clos==2 1058 1059 IF (iflag_clos==3) THEN 1060 if (prt_level >= 9) & 1061 PRINT *, 'cva_driver -> cv3p2_closure' 1062 CALL cv3p2_closure(nloc, ncum, nd, icb, inb, & ! na->nd 614 if (prt_level >= 10) PRINT *, 'cv3p1_closure-> plfc,wbeff ', plfc(1), wbeff(1) 615 END IF ! iflag_clos==2 616 617 IF (iflag_clos == 3) THEN 618 call driver_log('cv3p2_closure') 619 CALL cv3p2_closure(nloc, ncum, nd, icb, inb, & 1063 620 pbase, plcl, p, ph, tv, tvp, buoy, & 1064 621 supmax, ok_inhib, Ale, Alp, omega, & … … 1066 623 Plim1, plim2, asupmax, supmax0, & 1067 624 asupmaxmin, cbmf, plfc, wbeff) 1068 if (prt_level >= 10) & 1069 PRINT *, 'cv3p2_closure-> plfc,wbeff ', plfc(1), wbeff(1) 1070 END IF ! iflag_clos==3 1071 END IF ! iflag_con==3 1072 1073 IF (iflag_con==4) THEN 1074 if (prt_level >= 9) & 1075 PRINT *, 'cva_driver -> cv_closure' 1076 CALL cv_closure(nloc, ncum, nd, nk, icb, & 1077 tv, tvp, p, ph, dph, plcl, cpn, & 1078 iflag, cbmf) 1079 END IF 1080 1081 ! print *,'cv_closure-> cape ',cape(1) 625 if (prt_level >= 10) PRINT *, 'cv3p2_closure-> plfc,wbeff ', plfc(1), wbeff(1) 626 END IF ! iflag_clos==3 1082 627 1083 628 ! ------------------------------------------------------------------- … … 1085 630 ! ------------------------------------------------------------------- 1086 631 1087 IF (iflag_con==3) THEN 1088 IF (iflag_mix==0) THEN 1089 if (prt_level >= 9) & 1090 PRINT *, 'cva_driver -> cv3_mixing' 632 IF (iflag_mix == 0) THEN 633 call driver_log('cv3_mixing') 1091 634 CALL cv3_mixing(nloc, ncum, nd, nd, ntra, icb, nk, inb, & ! na->nd 1092 635 ph, t, q, qs, u, v, tra, h, lv, lf, frac_s, qnk, & … … 1095 638 CALL zilch(hent, nloc*nd*nd) 1096 639 ELSE 1097 !!jyg: Essais absurde pour voir 1098 !! mm(:,1) = 0. 1099 !! DO i = 2,nd 1100 !! mm(:,i) = m(:,i)*(1.-qta(:,i-1)) 1101 !! ENDDO 1102 mm(:,:) = m(:,:) 640 mm(:, :) = m(:, :) 1103 641 CALL cv3_mixscale(nloc, ncum, nd, ment, mm) 1104 IF (debut) THEN 1105 PRINT *, ' cv3_mixscale-> ' 1106 END IF !(debut) THEN 642 IF (debut) PRINT *, ' cv3_mixscale-> ' 1107 643 END IF 1108 END IF 1109 1110 IF (iflag_con==4) THEN 1111 if (prt_level >= 9) & 1112 PRINT *, 'cva_driver -> cv_mixing' 1113 CALL cv_mixing(nloc, ncum, nd, icb, nk, inb, inbis, & 1114 ph, t, q, qs, u, v, h, lv, qnk, & 1115 hp, tv, tvp, ep, clw, cbmf, & 1116 m, ment, qent, uent, vent, nent, sigij, elij) 1117 END IF 1118 1119 IF (debut) THEN 1120 PRINT *, ' cv_mixing ->' 1121 END IF !(debut) THEN 1122 ! do i = 1,nd 1123 ! print*,'cv_mixing-> i,ment ',i,(ment(1,i,j),j=1,nd) 1124 ! enddo 644 645 IF (debut) PRINT *, ' cv_mixing ->' 1125 646 1126 647 ! ------------------------------------------------------------------- 1127 648 ! --- UNSATURATED (PRECIPITATING) DOWNDRAFTS 1128 649 ! ------------------------------------------------------------------- 1129 IF (iflag_con==3) THEN 1130 IF (debut) THEN 1131 PRINT *, ' cva_driver -> cv3_unsat ' 1132 END IF !(debut) THEN 1133 1134 if (prt_level >= 9) & 1135 PRINT *, 'cva_driver -> cv3_unsat' 1136 CALL cv3_unsat(nloc, ncum, nd, nd, ntra, icb, inb, iflag, & ! na->nd 650 IF (debut) PRINT *, ' cva_driver -> cv3_unsat ' 651 652 call driver_log('cv3_unsat') 653 CALL cv3_unsat(nloc, ncum, nd, nd, ntra, icb, inb, iflag, & 1137 654 t_wake, q_wake, qs_wake, gz, u, v, tra, p, ph, & 1138 655 th_wake, tv_wake, lv_wake, lf_wake, cpn_wake, & 1139 ep, sigp, clw, frac_s, qpreca, frac_a, qta, & !!jygprl656 ep, sigp, clw, frac_s, qpreca, frac_a, qta, & 1140 657 m, ment, elij, delt, plcl, coef_clos, & 1141 658 mp, qp, up, vp, trap, wt, water, evap, fondue, ice, & 1142 659 faci, b, sigd, & 1143 !! wdtrainA, wdtrainM) ! RomP 1144 wdtrainA, wdtrainS, wdtrainM) !!jygprl 1145 ! 660 wdtrainA, wdtrainS, wdtrainM) 1146 661 IF (prt_level >= 10) THEN 1147 662 Print *, 'cva_driver after cv3_unsat:mp , water, ice, evap, fondue ' 1148 DO k = 1, nd1149 write (6, '(i4,5(1x,e13.6))'), &1150 k, mp(igout,k), water(igout,k), ice(igout,k), &1151 evap(igout,k), fondue(igout,k)663 DO k = 1, nd 664 write (6, '(i4,5(1x,e13.6))'), & 665 k, mp(igout, k), water(igout, k), ice(igout, k), & 666 evap(igout, k), fondue(igout, k) 1152 667 ENDDO 1153 Print *, 'cva_driver after cv3_unsat: wdtrainA, wdtrainS, wdtrainM ' !!jygprl1154 DO k = 1, nd1155 write (6, '(i4,3(1x,e13.6))'), &1156 k, wdtrainA(igout,k), wdtrainS(igout,k), wdtrainM(igout,k) !!jygprl668 Print *, 'cva_driver after cv3_unsat: wdtrainA, wdtrainS, wdtrainM ' 669 DO k = 1, nd 670 write (6, '(i4,3(1x,e13.6))'), & 671 k, wdtrainA(igout, k), wdtrainS(igout, k), wdtrainM(igout, k) 1157 672 ENDDO 1158 673 ENDIF 1159 ! 1160 END IF !(iflag_con==3) 1161 1162 IF (iflag_con==4) THEN 1163 if (prt_level >= 9) & 1164 PRINT *, 'cva_driver -> cv_unsat' 1165 CALL cv_unsat(nloc, ncum, nd, inb, t, q, qs, gz, u, v, p, ph, & 1166 h, lv, ep, sigp, clw, m, ment, elij, & 1167 iflag, mp, qp, up, vp, wt, water, evap) 1168 END IF 1169 1170 IF (debut) THEN 1171 PRINT *, 'cv_unsat-> ' 1172 END IF !(debut) THEN 1173 1174 ! print *,'cv_unsat-> mp ',mp 1175 ! print *,'cv_unsat-> water ',water 1176 ! ------------------------------------------------------------------- 1177 ! --- YIELD 1178 ! (tendencies, precipitation, variables of interface with other 1179 ! processes, etc) 1180 ! ------------------------------------------------------------------- 1181 1182 IF (iflag_con==3) THEN 1183 1184 if (prt_level >= 9) & 1185 PRINT *, 'cva_driver -> cv3_yield' 1186 CALL cv3_yield(nloc, ncum, nd, nd, ntra, ok_conserv_q, & ! na->nd 674 675 IF (debut) PRINT *, 'cv_unsat-> ' 676 ! ------------------------------------------------------------------- 677 ! YIELD 678 ! (tendencies, precipitation, variables of interface with other processes, etc) 679 ! ------------------------------------------------------------------- 680 681 call driver_log('cv3_yield') 682 CALL cv3_yield(nloc, ncum, nd, nd, ntra, ok_conserv_q, & 1187 683 icb, inb, delt, & 1188 684 t, q, t_wake, q_wake, s_wake, u, v, tra, & … … 1193 689 nent, elij, traent, sig, & 1194 690 tv, tvp, wghti, & 1195 iflag, precip, Vprecip, Vprecipi, ft, fq, fu, fv, ftra, & ! jyg691 iflag, precip, Vprecip, Vprecipi, ft, fq, fu, fv, ftra, & 1196 692 cbmf, upwd, dnwd, dnwd0, ma, mip, & 1197 !! tls, tps, & ! useless . jyg1198 693 qcondc, wd, & 1199 !! ftd, fqd, qnk, qtc, sigt, tau_cld_cv, coefw_cld_cv) 1200 ftd, fqd, qta, qtc, sigt, tau_cld_cv, coefw_cld_cv) !!jygprl 1201 ! 1202 ! Test conseravtion de l'eau 1203 ! 1204 IF (debut) THEN 1205 PRINT *, ' cv3_yield -> fqd(1) = ', fqd(igout, 1) 1206 END IF !(debut) THEN 1207 ! 694 ftd, fqd, qta, qtc, sigt, tau_cld_cv, coefw_cld_cv) 695 696 ! Test conseravtion de l'eau 697 IF (debut) PRINT *, ' cv3_yield -> fqd(1) = ', fqd(igout, 1) 1208 698 IF (prt_level >= 10) THEN 1209 699 Print *, 'cva_driver after cv3_yield:ft(1) , ftd(1) ', & 1210 ft(igout,1), ftd(igout,1)700 ft(igout, 1), ftd(igout, 1) 1211 701 Print *, 'cva_driver after cv3_yield:fq(1) , fqd(1) ', & 1212 fq(igout,1), fqd(igout,1)702 fq(igout, 1), fqd(igout, 1) 1213 703 ENDIF 1214 ! 1215 END IF 1216 1217 IF (iflag_con==4) THEN 1218 if (prt_level >= 9) & 1219 PRINT *, 'cva_driver -> cv_yield' 1220 CALL cv_yield(nloc, ncum, nd, nk, icb, inb, delt, & 1221 t, q, u, v, & 1222 gz, p, ph, h, hp, lv, cpn, & 1223 ep, clw, frac_s, m, mp, qp, up, vp, & 1224 wt, water, evap, & 1225 ment, qent, uent, vent, nent, elij, & 1226 tv, tvp, & 1227 iflag, wd, qprime, tprime, & 1228 precip, cbmf, ft, fq, fu, fv, ma, qcondc) 1229 END IF 1230 1231 !AC! 704 1232 705 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1233 706 !--- passive tracers 1234 707 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1235 708 1236 IF (iflag_con==3) THEN 1237 !RomP >>> 1238 if (prt_level >= 9) & 1239 PRINT *, 'cva_driver -> cv3_tracer' 709 call driver_log('cv3_tracer') 1240 710 CALL cv3_tracer(nloc, len, ncum, nd, nd, & 1241 ment, sigij, da, phi, phi2, d1a, dam, & 1242 ep, vprecip, elij, clw, epmlmMm, eplaMm, & 1243 icb, inb) 1244 !RomP <<< 1245 END IF 1246 1247 !AC! 711 ment, sigij, da, phi, phi2, d1a, dam, & 712 ep, vprecip, elij, clw, epmlmMm, eplaMm, & 713 icb, inb) 714 END IF ! ncum>0 1248 715 1249 716 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1250 717 ! --- UNCOMPRESS THE FIELDS 1251 718 ! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1252 1253 1254 IF (iflag_con==3) THEN 1255 if (prt_level >= 9) & 1256 PRINT *, 'cva_driver -> cv3a_uncompress' 1257 call add_array_i1(cv3a_uncompress_list, iflag, iflag1) 1258 call add_array_i1(cv3a_uncompress_list, icb, icb1) 1259 call add_array_i1(cv3a_uncompress_list, inb, ktop1) 1260 call add_array_r1(cv3a_uncompress_list, precip, precip1) 1261 call add_array_r1(cv3a_uncompress_list, cbmf, cbmf1) 1262 call add_array_r1(cv3a_uncompress_list, plcl, plcl1) 1263 call add_array_r1(cv3a_uncompress_list, plfc, plfc1) 1264 call add_array_r1(cv3a_uncompress_list, wbeff, wbeff1) 1265 call add_array_r2(cv3a_uncompress_list, sig, sig1) 1266 call add_array_r2(cv3a_uncompress_list, w0, w01) 1267 call add_array_r1(cv3a_uncompress_list, ptop2, ptop21) 1268 call add_array_r2(cv3a_uncompress_list, ft, ft1) 1269 call add_array_r2(cv3a_uncompress_list, fq, fq1) 1270 call add_array_r2(cv3a_uncompress_list, fu, fu1) 1271 call add_array_r2(cv3a_uncompress_list, fv, fv1) 1272 !call add_array_r3(cv3a_uncompress_list, ftra, ftra1) 1273 call add_array_r1(cv3a_uncompress_list, sigd, sigd1) 1274 call add_array_r2(cv3a_uncompress_list, ma, ma1) 1275 call add_array_r2(cv3a_uncompress_list, mip, mip1) 1276 call add_array_r2(cv3a_uncompress_list, vprecip, vprecip1) 1277 call add_array_r2(cv3a_uncompress_list, vprecipi, vprecipi1) 1278 call add_array_r2(cv3a_uncompress_list, upwd, upwd1) 1279 call add_array_r2(cv3a_uncompress_list, dnwd, dnwd1) 1280 call add_array_r2(cv3a_uncompress_list, dnwd0, dnwd01) 1281 call add_array_r2(cv3a_uncompress_list, qcondc, qcondc1) 1282 call add_array_r1(cv3a_uncompress_list, wd, wd1) 1283 call add_array_r1(cv3a_uncompress_list, cape, cape1) 1284 call add_array_r1(cv3a_uncompress_list, cin, cin1) 1285 call add_array_r2(cv3a_uncompress_list, tvp, tvp1) 1286 call add_array_r2(cv3a_uncompress_list, ftd, ftd1) 1287 call add_array_r2(cv3a_uncompress_list, fqd, fqd1) 1288 call add_array_r1(cv3a_uncompress_list, Plim1, Plim11) 1289 call add_array_r1(cv3a_uncompress_list, plim2, plim21) 1290 call add_array_r2(cv3a_uncompress_list, asupmax, asupmax1) 1291 call add_array_r1(cv3a_uncompress_list, supmax0, supmax01) 1292 call add_array_r1(cv3a_uncompress_list, asupmaxmin, asupmaxmin1) 1293 call add_array_r2(cv3a_uncompress_list, da, da1) 1294 call add_array_r3(cv3a_uncompress_list, phi, phi1) 1295 call add_array_r2(cv3a_uncompress_list, mp, mp1) 1296 call add_array_r3(cv3a_uncompress_list, phi2, phi21) 1297 call add_array_r2(cv3a_uncompress_list, d1a, d1a1) 1298 call add_array_r2(cv3a_uncompress_list, dam, dam1) 1299 call add_array_r3(cv3a_uncompress_list, sigij, sigij1) 1300 call add_array_r2(cv3a_uncompress_list, qta, qta1) 1301 call add_array_r2(cv3a_uncompress_list, clw, clw1) 1302 call add_array_r3(cv3a_uncompress_list, elij, elij1) 1303 call add_array_r2(cv3a_uncompress_list, evap, evap1) 1304 call add_array_r2(cv3a_uncompress_list, ep, ep1) 1305 call add_array_r3(cv3a_uncompress_list, epmlmMm, epmlmMm1) 1306 call add_array_r2(cv3a_uncompress_list, eplaMm, eplaMm1) 1307 call add_array_r2(cv3a_uncompress_list, wdtrainA, wdtrainA1) 1308 call add_array_r2(cv3a_uncompress_list, wdtrainS, wdtrainS1) 1309 call add_array_r2(cv3a_uncompress_list, wdtrainM, wdtrainM1) 1310 call add_array_r2(cv3a_uncompress_list, qtc, qtc1) 1311 call add_array_r2(cv3a_uncompress_list, sigt, sigt1) 1312 call add_array_r1(cv3a_uncompress_list, epmax_diag, epmax_diag1) 1313 call add_array_r1(cv3a_uncompress_list, sig(:,nd), sig1(:,nd)) 1314 call cv3a_uncompress(len, compress_data, cv3a_uncompress_list) 1315 ! CALL cv3a_uncompress_old(nloc, len, ncum, nd, ntra, idcum, compress, & 1316 ! iflag, icb, inb, & 1317 ! precip, cbmf, plcl, plfc, wbeff, sig, w0, ptop2, & 1318 ! ft, fq, fu, fv, ftra, & 1319 ! sigd, ma, mip, vprecip, vprecipi, upwd, dnwd, dnwd0, & 1320 ! qcondc, wd, cape, cin, & 1321 ! tvp, & 1322 ! ftd, fqd, & 1323 ! Plim1, plim2, asupmax, supmax0, & 1324 ! asupmaxmin, & 1325 ! da, phi, mp, phi2, d1a, dam, sigij, & ! RomP 1326 ! qta, clw, elij, evap, ep, epmlmMm, eplaMm, & ! RomP 1327 ! wdtrainA, wdtrainS, wdtrainM, & ! RomP 1328 ! qtc, sigt, epmax_diag, & ! epmax_cape 1329 ! iflag1, kbas1, ktop1, & 1330 ! precip1, cbmf1, plcl1, plfc1, wbeff1, sig1, w01, ptop21, & 1331 ! ft1, fq1, fu1, fv1, ftra1, & 1332 ! sigd1, ma1, mip1, vprecip1, vprecipi1, upwd1, dnwd1, dnwd01, & 1333 ! qcondc1, wd1, cape1, cin1, & 1334 ! tvp1, & 1335 ! ftd1, fqd1, & 1336 ! Plim11, plim21, asupmax1, supmax01, & 1337 ! asupmaxmin1, & 1338 ! da1, phi1, mp1, phi21, d1a1, dam1, sigij1, & ! RomP 1339 ! qta1, clw1, elij1, evap1, ep1, epmlmMm1, eplaMm1, & ! RomP 1340 ! wdtrainA1, wdtrainS1, wdtrainM1, & ! RomP 1341 ! qtc1, sigt1, epmax_diag1) ! epmax_cape 1342 ! 1343 IF (prt_level >= 10) THEN 1344 Print *, 'cva_driver after cv3_uncompress:ft1(1) , ftd1(1) ', & 1345 ft1(igout,1), ftd1(igout,1) 1346 Print *, 'cva_driver after cv3_uncompress:fq1(1) , fqd1(1) ', & 1347 fq1(igout,1), fqd1(igout,1) 1348 ENDIF 1349 ! 719 call driver_log('cv3a_uncompress') 720 call add_array_i1(cv3a_uncompress_list, iflag, iflag1, init=.false.) 721 call add_array_i1(cv3a_uncompress_list, icb, kbas1) 722 call add_array_i1(cv3a_uncompress_list, inb, ktop1) 723 call add_array_r1(cv3a_uncompress_list, precip, precip1) 724 call add_array_r1(cv3a_uncompress_list, cbmf, cbmf1) 725 call add_array_r1(cv3a_uncompress_list, plcl, plcl1, init=.false.) 726 call add_array_r1(cv3a_uncompress_list, plfc, plfc1) 727 call add_array_r1(cv3a_uncompress_list, wbeff, wbeff1) 728 call add_array_r2(cv3a_uncompress_list, sig, sig1) 729 call add_array_r2(cv3a_uncompress_list, w0, w01) 730 call add_array_r1(cv3a_uncompress_list, ptop2, ptop21) 731 call add_array_r2(cv3a_uncompress_list, ft, ft1) 732 call add_array_r2(cv3a_uncompress_list, fq, fq1) 733 call add_array_r2(cv3a_uncompress_list, fu, fu1) 734 call add_array_r2(cv3a_uncompress_list, fv, fv1) 735 call add_array_r1(cv3a_uncompress_list, sigd, sigd1) 736 call add_array_r2(cv3a_uncompress_list, ma, ma1) 737 call add_array_r2(cv3a_uncompress_list, mip, mip1) 738 call add_array_r2(cv3a_uncompress_list, vprecip, vprecip1) 739 call add_array_r2(cv3a_uncompress_list, vprecipi, vprecipi1) 740 call add_array_r2(cv3a_uncompress_list, upwd, upwd1) 741 call add_array_r2(cv3a_uncompress_list, dnwd, dnwd1) 742 call add_array_r2(cv3a_uncompress_list, dnwd0, dnwd01) 743 call add_array_r2(cv3a_uncompress_list, qcondc, qcondc1) 744 call add_array_r1(cv3a_uncompress_list, wd, wd1) 745 cape1(:) = -1. 746 call add_array_r1(cv3a_uncompress_list, cape, cape1, init=.false.) 747 cin1(:) = -100000. 748 call add_array_r1(cv3a_uncompress_list, cin, cin1, init=.false.) 749 call add_array_r2(cv3a_uncompress_list, tvp, tvp1, init=.false.) 750 call add_array_r2(cv3a_uncompress_list, ftd, ftd1) 751 call add_array_r2(cv3a_uncompress_list, fqd, fqd1) 752 call add_array_r1(cv3a_uncompress_list, Plim1, Plim11) 753 call add_array_r1(cv3a_uncompress_list, plim2, plim21) 754 call add_array_r2(cv3a_uncompress_list, asupmax, asupmax1) 755 call add_array_r1(cv3a_uncompress_list, supmax0, supmax01) 756 call add_array_r1(cv3a_uncompress_list, asupmaxmin, asupmaxmin1) 757 call add_array_r2(cv3a_uncompress_list, da, da1) 758 call add_array_r3(cv3a_uncompress_list, phi, phi1) 759 call add_array_r2(cv3a_uncompress_list, mp, mp1) 760 call add_array_r3(cv3a_uncompress_list, phi2, phi21) 761 call add_array_r2(cv3a_uncompress_list, d1a, d1a1) 762 call add_array_r2(cv3a_uncompress_list, dam, dam1) 763 call add_array_r3(cv3a_uncompress_list, sigij, sigij1) 764 call add_array_r2(cv3a_uncompress_list, qta, qta1) 765 call add_array_r2(cv3a_uncompress_list, clw, clw1, init=.false.) 766 call add_array_r3(cv3a_uncompress_list, elij, elij1) 767 call add_array_r2(cv3a_uncompress_list, evap, evap1) 768 call add_array_r2(cv3a_uncompress_list, ep, ep1) 769 call add_array_r3(cv3a_uncompress_list, epmlmMm, epmlmMm1) 770 call add_array_r2(cv3a_uncompress_list, eplaMm, eplaMm1) 771 call add_array_r2(cv3a_uncompress_list, wdtrainA, wdtrainA1) 772 call add_array_r2(cv3a_uncompress_list, wdtrainS, wdtrainS1) 773 call add_array_r2(cv3a_uncompress_list, wdtrainM, wdtrainM1) 774 call add_array_r2(cv3a_uncompress_list, qtc, qtc1) 775 call add_array_r2(cv3a_uncompress_list, sigt, sigt1) 776 call add_array_r1(cv3a_uncompress_list, epmax_diag, epmax_diag1) 777 call add_array_r1(cv3a_uncompress_list, sig(:, nd), sig1(:, nd)) 778 call cv3a_uncompress(len, compress_data, cv3a_uncompress_list) 779 780 IF (prt_level >= 10) THEN 781 Print *, 'cva_driver after cv3_uncompress:ft1(1) , ftd1(1) ', & 782 ft1(igout, 1), ftd1(igout, 1) 783 Print *, 'cva_driver after cv3_uncompress:fq1(1) , fqd1(1) ', & 784 fq1(igout, 1), fqd1(igout, 1) 785 ENDIF 786 IF (debut) THEN 787 PRINT *, ' cv_uncompress -> ' 788 debut = .FALSE. 1350 789 END IF 1351 790 1352 IF (iflag_con==4) THEN 1353 if (prt_level >= 9) & 1354 PRINT *, 'cva_driver -> cv_uncompress' 1355 CALL cv_uncompress(nloc, len, ncum, nd, idcum, & 1356 iflag, & 1357 precip, cbmf, & 1358 ft, fq, fu, fv, & 1359 ma, qcondc, & 1360 iflag1, & 1361 precip1,cbmf1, & 1362 ft1, fq1, fu1, fv1, & 1363 ma1, qcondc1) 1364 END IF 1365 1366 END IF ! ncum>0 1367 1368 ! 1369 ! In order take into account the possibility of changing the compression, 1370 ! reset m, sig and w0 to zero for non-convective points. 1371 DO k = 1,nd-1 1372 sig1(:, k) = sig1(:, k)*coef_convective(:) 1373 w01(:, k) = w01(:, k)*coef_convective(:) 1374 ENDDO 1375 1376 IF (debut) THEN 1377 PRINT *, ' cv_uncompress -> ' 1378 debut = .FALSE. 1379 END IF !(debut) THEN 1380 1381 1382 RETURN 1383 END SUBROUTINE cv3a_driver 1384 1385 END MODULE 791 ftra1(:,:,:) = 0 792 793 END SUBROUTINE 794 795 subroutine driver_log(message) 796 use print_control_mod, only: prt_level 797 character(*) :: message 798 if (prt_level >= 9) PRINT *, 'cva_driver ->', message 799 end subroutine 800 end module -
LMDZ6/branches/Optimisation_LMDZ/libf/phylmd/cva_driver.F90
r3757 r3758 127 127 call cv3a_driver(len, nd, ndp1, ntra, nloc, k_upper, & 128 128 iflag_con, iflag_mix, iflag_ice_thermo, iflag_clos, ok_conserv_q, & 129 delt, comp_threshold,&129 delt, & 130 130 t1, q1, qs1, t1_wake, q1_wake, qs1_wake, s1_wake, & 131 u1, v1, tra1,&131 u1, v1, & 132 132 p1, ph1, & 133 133 Ale1, Alp1, omega1, & … … 143 143 ftd1, fqd1, & 144 144 Plim11, Plim21, asupmax1, supmax01, asupmaxmin1, & 145 lalim_conv1, &146 145 da1, phi1, mp1, phi21, d1a1, dam1, sigij1, wghti1, & 147 146 qta1, clw1, elij1, evap1, ep1, epmlmMm1, eplaMm1, &
Note: See TracChangeset
for help on using the changeset viewer.