Changeset 4655 for LMDZ6/trunk/libf/phylmd
- Timestamp:
- Aug 30, 2023, 10:12:42 AM (15 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmd/physiqex_mod.F90
r4654 r4655 9 9 & debut,lafin,pdtphys, & 10 10 & paprs,pplay,pphi,pphis,presnivs, & 11 & u,v,rot,t emp,qx, &11 & u,v,rot,t,qx, & 12 12 & flxmass_w, & 13 13 & d_u, d_v, d_t, d_qx, d_ps) 14 14 15 16 USE dimphy, only : klon,klev 17 USE infotrac_phy, only : nqtot 18 USE geometry_mod, only : latitude 19 USE ioipsl, only : ymds2ju 20 USE phys_state_var_mod, only : phys_state_var_init 21 USE phyetat0_mod, only: phyetat0 22 USE output_physiqex_mod, ONLY: output_physiqex 23 use vdif_ini, only : vdif_ini_ 24 USE lmdz_thermcell_ini, ONLY : thermcell_ini 25 USE ioipsl_getin_p_mod, ONLY : getin_p 26 USE wxios, ONLY: missing_val, using_xios 27 USE lscp_mod, ONLY : lscp 28 USE lscp_ini_mod, ONLY : lscp_ini 29 USE add_phys_tend_mod, ONLY : add_phys_tend 30 15 USE dimphy, only : klon,klev 16 USE infotrac_phy, only : nqtot 17 USE geometry_mod, only : latitude 18 ! USE comcstphy, only : rg 19 USE ioipsl, only : ymds2ju 20 USE phys_state_var_mod, only : phys_state_var_init 21 USE phyetat0_mod, only: phyetat0 22 USE output_physiqex_mod, ONLY: output_physiqex 31 23 32 24 IMPLICIT none 33 34 include "YOETHF.h"35 36 37 38 39 25 ! 40 26 ! Routine argument: … … 46 32 logical,intent(in) :: lafin ! signals last call to physics 47 33 real,intent(in) :: pdtphys ! physics time step (s) 48 real,dimension(klon,klev+1),intent(in) :: paprs ! interlayer pressure (Pa) 49 real,dimension(klon,klev),intent(in) :: pplay ! mid-layer pressure (Pa) 50 real,dimension(klon,klev),intent(in) :: pphi ! geopotential at mid-layer 51 real,dimension(klon),intent(in) :: pphis ! surface geopotential 52 real,dimension(klev),intent(in) :: presnivs ! pseudo-pressure (Pa) of mid-layers 53 real,dimension(klon,klev),intent(in) :: u ! eastward zonal wind (m/s) 54 real,dimension(klon,klev),intent(in) :: v ! northward meridional wind (m/s) 55 real,dimension(klon,klev),intent(in) :: rot ! northward meridional wind (m/s) 56 real,dimension(klon,klev),intent(in) :: temp ! temperature (K) 57 real,dimension(klon,klev,nqtot),intent(in) :: qx ! tracers (.../kg_air) 58 real,dimension(klon,klev),intent(in) :: flxmass_w ! vertical mass flux 59 real,dimension(klon,klev),intent(out) :: d_u ! physics tendency on u (m/s/s) 60 real,dimension(klon,klev),intent(out) :: d_v ! physics tendency on v (m/s/s) 61 real,dimension(klon,klev),intent(out) :: d_t ! physics tendency on t (K/s) 62 real,dimension(klon,klev,nqtot),intent(out) :: d_qx ! physics tendency on tracers 63 real,dimension(klon),intent(out) :: d_ps ! physics tendency on surface pressure 64 65 real, dimension(klon,klev) :: u_loc 66 real, dimension(klon,klev) :: v_loc 67 real, dimension(klon,klev) :: t_loc 68 real, dimension(klon,klev) :: h_loc 69 real, dimension(klon,klev) :: d_u_loc,d_v_loc,d_t_loc,d_h_loc 70 71 real, dimension(klon,klev) :: d_u_dyn,d_v_dyn,d_t_dyn 72 real, dimension(klon,klev,nqtot) :: d_q_dyn 73 real, allocatable, dimension(:,:), save :: u_prev,v_prev,t_prev 74 real, allocatable, dimension(:,:,:), save :: q_prev 75 !$OMP THREADPRIVATE(u_prev,v_prev,t_prev,q_prev) 76 77 78 79 real, dimension(klon,klev) :: d_u_vdif,d_v_vdif,d_t_vdif,d_h_vdif 80 real, dimension(klon,klev) :: d_u_the,d_v_the,d_t_the 81 real, dimension(klon,klev,nqtot) :: q_loc,d_q_loc,d_q_vdif,d_q_the 82 83 real, dimension(klon) :: capcal,z0m,z0h,dtsrf,emis,fluxsrf,cdh,cdv,tsrf_ 84 real, dimension(klon,klev) :: zzlay,masse,zpopsk 85 real, dimension(klon,klev+1) :: zzlev,kz_v,kz_h,richardson 86 87 real, save, allocatable, dimension(:) :: tsrf,f0,zmax0 88 real, save, allocatable, dimension(:,:) :: q2 89 !$OMP THREADPRIVATE(tsrf,q2,f0,zmax0) 90 91 real,save :: ratqsbas=0.002,ratqshaut=0.3,ratqsp0=50000.,ratqsdp=20000. 92 !$OMP THREADPRIVATE(ratqsbas,ratqshaut,ratqsp0,ratqsdp) 93 94 95 real :: z1,z2,tau_thermals 96 logical :: lwrite 97 integer :: iflag_replay 98 99 integer :: iflag_thermals=18 100 101 !-------------------------------------------------------------- 102 ! Declaration lscp 103 !-------------------------------------------------------------- 104 INTEGER :: iflag_cld_th ! flag that determines the distribution of convective clouds ! IN 105 INTEGER :: iflag_ice_thermo! flag to activate the ice thermodynamics ! IN 106 LOGICAL :: ok_ice_sursat ! flag to determine if ice sursaturation is activated ! IN 107 LOGICAL, DIMENSION(klon,klev) :: ptconv ! grid points where deep convection scheme is active ! IN 108 REAL, DIMENSION(klon,klev) :: ztv ! virtual potential temperature [K] ! IN 109 REAL, DIMENSION(klon,klev) :: zqta ! specific humidity within thermals [kg/kg] ! IN 110 REAL, DIMENSION(klon,klev+1) :: frac_the,fm_the 111 REAL, DIMENSION(klon,klev) :: zpspsk ! exner potential (p/100000)**(R/cp) ! IN 112 REAL, DIMENSION(klon,klev) :: ztla ! liquid temperature within thermals [K] ! IN 113 REAL, DIMENSION(klon,klev) :: zthl ! liquid potential temperature [K] ! INOUT 114 REAL, DIMENSION(klon,klev) :: ratqs ! function of pressure that sets the large-scale ! INOUT 115 REAL, DIMENSION(klon,klev) :: beta ! conversion rate of condensed water ! INOUT 116 REAL, DIMENSION(klon,klev) :: rneb_seri ! fraction nuageuse en memoire ! INOUT 117 REAL, DIMENSION(klon,klev) :: d_t_lscp ! temperature increment [K] ! OUT 118 REAL, DIMENSION(klon,klev) :: d_q_lscp ! specific humidity increment [kg/kg] ! OUT 119 REAL, DIMENSION(klon,klev) :: d_ql_lscp ! liquid water increment [kg/kg] ! OUT 120 REAL, DIMENSION(klon,klev) :: d_qi_lscp ! cloud ice mass increment [kg/kg] ! OUT 121 REAL, DIMENSION(klon,klev) :: rneb ! cloud fraction [-] ! OUT 122 REAL, DIMENSION(klon,klev) :: rneblsvol ! cloud fraction per unit volume [-] ! OUT 123 REAL, DIMENSION(klon,klev) :: pfraclr ! precip fraction clear-sky part [-] ! OUT 124 REAL, DIMENSION(klon,klev) :: pfracld ! precip fraction cloudy part [-] ! OUT 125 REAL, DIMENSION(klon,klev) :: radocond ! condensed water used in the radiation scheme [kg/kg] ! OUT 126 REAL, DIMENSION(klon,klev) :: radicefrac ! ice fraction of condensed water for radiation scheme ! OUT 127 REAL, DIMENSION(klon,klev) :: rhcl ! clear-sky relative humidity [-] ! OUT 128 REAL, DIMENSION(klon) :: rain ! surface large-scale rainfall [kg/s/m2] ! OUT 129 REAL, DIMENSION(klon) :: snow ! surface large-scale snowfall [kg/s/m2] ! OUT 130 REAL, DIMENSION(klon,klev) :: qsatl ! saturation specific humidity wrt liquid [kg/kg] ! OUT 131 REAL, DIMENSION(klon,klev) :: qsats ! saturation specific humidity wrt ice [kg/kg] ! OUT 132 REAL, DIMENSION(klon,klev+1) :: prfl ! large-scale rainfall flux in the column [kg/s/m2] ! OUT 133 REAL, DIMENSION(klon,klev+1) :: psfl ! large-scale snowfall flux in the column [kg/s/m2] ! OUT 134 REAL, DIMENSION(klon,klev) :: distcltop ! distance to cloud top [m] ! OUT 135 REAL, DIMENSION(klon,klev) :: temp_cltop ! temperature of cloud top [K] ! OUT 136 REAL, DIMENSION(klon,klev) :: frac_impa ! scavenging fraction due tu impaction [-] ! OUT 137 REAL, DIMENSION(klon,klev) :: frac_nucl ! scavenging fraction due tu nucleation [-] ! OUT 138 REAL, DIMENSION(klon,klev) :: qclr ! specific total water content in clear sky region [kg/kg] ! OUT 139 REAL, DIMENSION(klon,klev) :: qcld ! specific total water content in cloudy region [kg/kg] ! OUT 140 REAL, DIMENSION(klon,klev) :: qss ! specific total water content in supersat region [kg/kg] ! OUT 141 REAL, DIMENSION(klon,klev) :: qvc ! specific vapor content in clouds [kg/kg] ! OUT 142 REAL, DIMENSION(klon,klev) :: rnebclr ! mesh fraction of clear sky [-] ! OUT 143 REAL, DIMENSION(klon,klev) :: rnebss ! mesh fraction of ISSR [-] ! OUT 144 REAL, DIMENSION(klon,klev) :: gamma_ss ! coefficient governing the ice nucleation RHi threshold [-] ! OUT 145 REAL, DIMENSION(klon,klev) :: Tcontr ! threshold temperature for contrail formation [K] ! OUT 146 REAL, DIMENSION(klon,klev) :: qcontr ! threshold humidity for contrail formation [kg/kg] ! OUT 147 REAL, DIMENSION(klon,klev) :: qcontr2 ! // (2nd expression more consistent with LMDZ expression of q)! OUT 148 REAL, DIMENSION(klon,klev) :: fcontrN ! fraction of grid favourable to non-persistent contrails ! OUT 149 REAL, DIMENSION(klon,klev) :: fcontrP ! fraction of grid favourable to persistent contrails ! OUT 150 !-------------------------------------------------------------- 151 152 REAL, DIMENSION(klon,klev) :: d_t_eva,d_q_eva,d_ql_eva,d_qi_eva 153 include "YOMCST.h" 34 real,intent(in) :: paprs(klon,klev+1) ! interlayer pressure (Pa) 35 real,intent(in) :: pplay(klon,klev) ! mid-layer pressure (Pa) 36 real,intent(in) :: pphi(klon,klev) ! geopotential at mid-layer 37 real,intent(in) :: pphis(klon) ! surface geopotential 38 real,intent(in) :: presnivs(klev) ! pseudo-pressure (Pa) of mid-layers 39 real,intent(in) :: u(klon,klev) ! eastward zonal wind (m/s) 40 real,intent(in) :: v(klon,klev) ! northward meridional wind (m/s) 41 real,intent(in) :: rot(klon,klev) ! northward meridional wind (m/s) 42 real,intent(in) :: t(klon,klev) ! temperature (K) 43 real,intent(in) :: qx(klon,klev,nqtot) ! tracers (.../kg_air) 44 real,intent(in) :: flxmass_w(klon,klev) ! vertical mass flux 45 real,intent(out) :: d_u(klon,klev) ! physics tendency on u (m/s/s) 46 real,intent(out) :: d_v(klon,klev) ! physics tendency on v (m/s/s) 47 real,intent(out) :: d_t(klon,klev) ! physics tendency on t (K/s) 48 real,intent(out) :: d_qx(klon,klev,nqtot) ! physics tendency on tracers 49 real,intent(out) :: d_ps(klon) ! physics tendency on surface pressure 154 50 155 51 ! include "clesphys.h" … … 162 58 163 59 164 real,dimension(klon,klev) :: temp_newton 165 integer :: i,k,iq 166 INTEGER, SAVE :: itap=0 167 !$OMP THREADPRIVATE(itap) 168 INTEGER, SAVE :: abortphy=0 ! Reprere si on doit arreter en fin de phys 169 !$OMP THREADPRIVATE(abortphy) 170 171 integer, save :: iflag_reevap=1,iflag_newton=0,iflag_vdif=1,iflag_lscp=1,iflag_cloudth_vert=3,iflag_ratqs=4 172 !$OMP THREADPRIVATE(iflag_reevap,iflag_newton,iflag_vdif,iflag_lscp,iflag_cloudth_vert,iflag_ratqs) 173 60 real :: temp_newton(klon,klev) 61 integer :: k 174 62 logical, save :: first=.true. 175 63 !$OMP THREADPRIVATE(first) 64 65 real,save :: rg=9.81 66 !$OMP THREADPRIVATE(rg) 176 67 177 68 ! For I/Os 178 69 integer :: itau0 179 70 real :: zjulian 180 real,dimension(klon,klev) :: du0,dv0,dqbs0181 real,dimension(klon,klev) :: cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv182 71 183 72 … … 204 93 ! Initialize IOIPSL output file 205 94 #endif 206 call suphel207 call vdif_ini_(klon,RCPD,RD,RG,RKAPPA)208 ! Pourquoi ce tau_thermals en argument ??? AFAIRE209 tau_thermals=0.210 call getin_p('iflag_thermals',iflag_thermals)211 212 call getin_p('iflag_newton',iflag_newton)213 call getin_p('iflag_reevap',iflag_reevap)214 call getin_p('iflag_cloudth_vert',iflag_cloudth_vert)215 call getin_p('iflag_ratqs',iflag_ratqs)216 call getin_p('iflag_vdif',iflag_vdif)217 call getin_p('iflag_lscp',iflag_lscp)218 call getin_p('ratqsbas',ratqsbas)219 call getin_p('ratqshaut',ratqshaut)220 call getin_p('ratqsp0',ratqsp0)221 call getin_p('ratqsdp',ratqsdp)222 CALL thermcell_ini(iflag_thermals,0,tau_thermals,6, &223 & RG,RD,RCPD,RKAPPA,RLVTT,RETV)224 CALL lscp_ini(pdtphys,.false.,iflag_ratqs, RCPD, RLSTT, RLVTT, RLMLT, RVTMP2, RTT,RD,RG)225 226 227 228 allocate(tsrf(klon),q2(klon,klev+1),f0(klon),zmax0(klon))229 allocate(u_prev(klon,klev),v_prev(klon,klev),t_prev(klon,klev),q_prev(klon,klev,nqtot))230 231 u_prev(:,:)=u(:,:)232 v_prev(:,:)=v(:,:)233 t_prev(:,:)=temp(:,:)234 q_prev(:,:,:)=qx(:,:,:)235 236 q2=1.e-10237 tsrf=temp(:,1)238 f0=0.239 zmax0=0.240 241 iflag_replay=0242 call getin_p('iflag_replay',iflag_replay)243 if ( iflag_replay >= 0 ) CALL iophys_ini(pdtphys)244 245 95 246 96 endif ! of if (debut) … … 250 100 !------------------------------------------------------------ 251 101 252 d_u_dyn(:,:)=(u(:,:)-u_prev(:,:))/pdtphys253 d_v_dyn(:,:)=(v(:,:)-v_prev(:,:))/pdtphys254 d_t_dyn(:,:)=(temp(:,:)-t_prev(:,:))/pdtphys255 d_q_dyn(:,:,:)=(qx(:,:,:)-q_prev(:,:,:))/pdtphys256 102 257 103 ! set all tendencies to zero … … 262 108 d_ps(1:klon)=0. 263 109 264 u_loc(1:klon,1:klev)=u(1:klon,1:klev)265 v_loc(1:klon,1:klev)=v(1:klon,1:klev)266 t_loc(1:klon,1:klev)=temp(1:klon,1:klev)267 d_u_loc(1:klon,1:klev)=0.268 d_v_loc(1:klon,1:klev)=0.269 d_t_loc(1:klon,1:klev)=0.270 do iq=1,nqtot271 do k=1,klev272 do i=1,klon273 q_loc(i,k,iq)=qx(i,k,iq)274 enddo275 enddo276 enddo277 278 du0(1:klon,1:klev)=0.279 dv0(1:klon,1:klev)=0.280 dqbs0(1:klon,1:klev)=0.281 282 283 284 110 !------------------------------------------------------------ 285 111 ! Calculs 286 112 !------------------------------------------------------------ 287 113 288 !------------------------------------------------------------ 289 ! Rappel en temperature et frottement dans la premiere chouche 290 !------------------------------------------------------------ 291 292 if ( iflag_newton == 1 ) then 293 ! compute tendencies to return to the dynamics: 294 ! "friction" on the first layer 295 d_u(1:klon,1)=-u(1:klon,1)/86400. 296 d_v(1:klon,1)=-v(1:klon,1)/86400. 297 ! newtonian relaxation towards temp_newton() 298 do k=1,klev 299 temp_newton(1:klon,k)=280.+cos(latitude(1:klon))*40.-pphi(1:klon,k)/rg*6.e-3 300 d_t(1:klon,k)=(temp_newton(1:klon,k)-temp(1:klon,k))/5.e5 301 enddo 302 else 303 temp_newton(:,:)=0. 304 endif 305 306 307 !------------------------------------------------------------ 308 ! Reevaporation de la pluie 309 !------------------------------------------------------------ 310 311 iflag_ice_thermo=1 312 if ( iflag_reevap == 1 ) then 313 CALL reevap (klon,klev,iflag_ice_thermo,t_loc,q_loc(:,:,1),q_loc(:,:,2),q_loc(:,:,3), & 314 & d_t_eva,d_q_eva,d_ql_eva,d_qi_eva) 315 do k=1,klev 316 do i=1,klon 317 t_loc(i,k)=t_loc(i,k)+d_t_eva(i,k) 318 q_loc(i,k,1)=q_loc(i,k,1)+d_q_eva(i,k) 319 q_loc(i,k,2)=q_loc(i,k,2)+d_ql_eva(i,k) 320 q_loc(i,k,3)=q_loc(i,k,3)+d_qi_eva(i,k) 321 q_loc(i,k,2)=0. 322 q_loc(i,k,3)=0. 323 enddo 324 enddo 325 else 326 d_t_eva(:,:)=0. 327 d_q_eva(:,:)=0. 328 d_ql_eva(:,:)=0. 329 d_qi_eva(:,:)=0. 330 endif 331 332 333 334 !----------------------------------------------------------------------- 335 ! Variables intermédiaires (altitudes, temperature potentielle ...) 336 !----------------------------------------------------------------------- 337 338 DO k=1,klev 339 DO i=1,klon 340 zzlay(i,k)=pphi(i,k)/rg 341 ENDDO 342 ENDDO 343 DO i=1,klon 344 zzlev(i,1)=0. 345 ENDDO 346 DO k=2,klev 347 DO i=1,klon 348 z1=(pplay(i,k-1)+paprs(i,k))/(pplay(i,k-1)-paprs(i,k)) 349 z2=(paprs(i,k)+pplay(i,k))/(paprs(i,k)-pplay(i,k)) 350 zzlev(i,k)=(z1*zzlay(i,k-1)+z2*zzlay(i,k))/(z1+z2) 351 ENDDO 352 ENDDO 353 354 ! Transformation de la temperature en temperature potentielle 355 DO k=1,klev 356 DO i=1,klon 357 zpopsk(i,k)=(pplay(i,k)/paprs(i,1))**rkappa 358 masse(i,k)=(paprs(i,k)-paprs(i,k+1))/rg 359 ENDDO 360 ENDDO 361 DO k=1,klev 362 DO i=1,klon 363 h_loc(i,k)=t_loc(i,k)/zpopsk(i,k) 364 d_h_loc(i,k)=d_t_loc(i,k)/zpopsk(i,k) 365 d_q_loc(i,k,1)=0. 366 ENDDO 367 ENDDO 368 369 !----------------------------------------------------------------------- 370 ! Diffusion verticale 371 !----------------------------------------------------------------------- 372 373 if ( iflag_vdif == 1 ) then 374 emis(:)=1. 375 !tsrf=300. 376 z0m=0.035 377 z0h=0.035 378 capcal=1e2 379 lwrite=.false. 380 print*,'lwrite ',lwrite 381 call vdif(klon,klev, & 382 & pdtphys,capcal,z0m,z0h, & 383 & pplay,paprs,zzlay,zzlev, & 384 & u_loc,v_loc,t_loc,h_loc,q_loc,tsrf,emis, & 385 & d_u_loc,d_v_loc,d_h_loc,d_q_loc,fluxsrf, & 386 & d_u_vdif,d_v_vdif,d_h_vdif,d_q_vdif,dtsrf,q2,kz_v,kz_h, & 387 & richardson,cdv,cdh, & 388 & lwrite) 389 do k=1,klev 390 do i=1,klon 391 d_t_vdif(i,k)=d_h_vdif(i,k)*zpopsk(i,k) 392 t_loc(i,k)=t_loc(i,k)+d_t_vdif(i,k)*pdtphys 393 u_loc(i,k)=u_loc(i,k)+d_u_vdif(i,k)*pdtphys 394 v_loc(i,k)=v_loc(i,k)+d_v_vdif(i,k)*pdtphys 395 q_loc(i,k,1)=q_loc(i,k,1)+d_q_vdif(i,k,1)*pdtphys 396 enddo 397 enddo 398 do i=1,klon 399 tsrf(i)=tsrf(i)+dtsrf(i)*pdtphys 400 enddo 401 else 402 d_u_vdif(:,:)=0. 403 d_v_vdif(:,:)=0. 404 d_t_vdif(:,:)=0. 405 d_h_vdif(:,:)=0. 406 d_q_vdif(:,:,1)=0. 407 kz_v(:,:)=0. 408 kz_h(:,:)=0. 409 richardson(:,:)=0. 410 endif 411 412 !----------------------------------------------------------------------- 413 ! Thermiques 414 !----------------------------------------------------------------------- 415 114 ! compute tendencies to return to the dynamics: 115 ! "friction" on the first layer 116 d_u(1:klon,1)=-u(1:klon,1)/86400. 117 d_v(1:klon,1)=-v(1:klon,1)/86400. 118 ! newtonian relaxation towards temp_newton() 416 119 do k=1,klev 417 do i=1,klon 418 d_u_the(i,k)=0. 419 d_v_the(i,k)=0. 420 d_t_the(i,k)=0. 421 d_q_the(i,k,1)=0. 422 enddo 120 temp_newton(1:klon,k)=280.+cos(latitude(1:klon))*40.-pphi(1:klon,k)/rg*6.e-3 121 d_t(1:klon,k)=(temp_newton(1:klon,k)-t(1:klon,k))/1.e5 423 122 enddo 424 123 425 if ( iflag_thermals > 0 ) then426 427 428 zqta(:,:)=q_loc(:,:,1)429 call caltherm(pdtphys &430 & ,pplay,paprs,pphi &431 & ,u_loc,v_loc,t_loc,q_loc,debut &432 & ,f0,zmax0,d_u_the,d_v_the,d_t_the,d_q_the &433 & ,frac_the,fm_the,zqta,ztv,zpspsk,ztla,zthl &434 & )435 436 do k=1,klev437 do i=1,klon438 t_loc(i,k)=t_loc(i,k)+d_t_the(i,k)439 u_loc(i,k)=u_loc(i,k)+d_u_the(i,k)440 v_loc(i,k)=v_loc(i,k)+d_v_the(i,k)441 q_loc(i,k,1)=q_loc(i,k,1)+d_q_the(i,k,1)442 enddo443 enddo444 445 else446 frac_the(:,:)=0.447 fm_the(:,:)=0.448 ztv(:,:)=t_loc(:,:)449 zqta(:,:)=q_loc(:,:,1)450 ztla(:,:)=0.451 zthl(:,:)=0.452 zpspsk(:,:)=(pplay(:,:)/100000.)**RKAPPA453 454 endif455 456 !-----------------------------------------------------------------------457 ! Condensation grande échelle458 !-----------------------------------------------------------------------459 460 iflag_cld_th=5461 ok_ice_sursat=.false.462 ptconv(:,:)=.false.463 distcltop=0.464 temp_cltop=0.465 beta(:,:)=1.466 rneb_seri(:,:)=0.467 do k=1,klev468 ratqs(:,k)=ratqsbas+0.5*(ratqshaut-ratqsbas) &469 *( tanh( (ratqsp0-pplay(:,k))/ratqsdp) + 1.)470 enddo471 472 473 if ( iflag_lscp == 1 ) then474 475 call lscp(klon,klev,pdtphys,missing_val, &476 paprs,pplay,t_loc,q_loc,ptconv,ratqs, &477 d_t_lscp, d_q_lscp, d_ql_lscp, d_qi_lscp, rneb, rneblsvol, rneb_seri, &478 pfraclr,pfracld, &479 radocond, radicefrac, rain, snow, &480 frac_impa, frac_nucl, beta, &481 prfl, psfl, rhcl, zqta, frac_the, &482 ztv, zpspsk, ztla, zthl, iflag_cld_th, &483 iflag_ice_thermo, ok_ice_sursat, qsatl, qsats, &484 distcltop,temp_cltop, &485 qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss, &486 Tcontr, qcontr, qcontr2, fcontrN, fcontrP, &487 cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv)488 489 490 do k=1,klev491 do i=1,klon492 t_loc(i,k)=t_loc(i,k)+d_t_lscp(i,k)493 q_loc(i,k,1)=q_loc(i,k,1)+d_q_lscp(i,k)494 q_loc(i,k,2)=q_loc(i,k,2)+d_ql_lscp(i,k)495 q_loc(i,k,3)=q_loc(i,k,3)+d_qi_lscp(i,k)496 enddo497 enddo498 499 else500 d_t_lscp(:,:)=0.501 d_q_lscp(:,:)=0.502 d_ql_lscp(:,:)=0.503 d_qi_lscp(:,:)=0.504 rneb(:,:)=0.505 rneblsvol(:,:)=0.506 pfraclr(:,:)=0.507 pfracld(:,:)=0.508 radocond(:,:)=0.509 rain(:)=0.510 snow(:)=0.511 radicefrac(:,:)=0.512 rhcl (:,:)=0.513 qsatl (:,:)=0.514 qsats (:,:)=0.515 prfl (:,:)=0.516 psfl (:,:)=0.517 distcltop (:,:)=0.518 temp_cltop(:,:)=0.519 frac_impa (:,:)=0.520 frac_nucl (:,:)=0.521 qclr (:,:)=0.522 qcld (:,:)=0.523 qss (:,:)=0.524 qvc (:,:)=0.525 rnebclr (:,:)=0.526 rnebss (:,:)=0.527 gamma_ss (:,:)=0.528 Tcontr (:,:)=0.529 qcontr (:,:)=0.530 qcontr2 (:,:)=0.531 fcontrN (:,:)=0.532 fcontrP (:,:)=0.533 endif534 535 536 d_u(:,:)=(u_loc(:,:)-u(:,:))/pdtphys537 d_v(:,:)=(v_loc(:,:)-v(:,:))/pdtphys538 d_t(:,:)=(t_loc(:,:)-temp(:,:))/pdtphys539 d_qx(:,:,:)=(q_loc(:,:,:)-qx(:,:,:))/pdtphys540 124 541 125 !------------------------------------------------------------ … … 544 128 545 129 546 tsrf_(:)=tsrf(:) 547 if ( iflag_replay == -1 ) then 548 call output_physiqex(debut,zjulian,pdtphys,presnivs,paprs,u,v,temp,qx,0.*u,0.*u,0.*u,0.*u,q2,0.*u) 549 else if (iflag_replay == 0 ) then 550 ! En mode replay, on sort aussi les variables de base 551 ! Les lignes qui suivent ont été générées automatiquement avec : 552 ! ( for i in `grep -i 'real.*::' physiqex_mod.F90 | sed -e '/^!/d' | grep '(klon,klev' | cut -d: -f3 | cut -d! -f1 | sed -e 's/,/ /g' -e '/rot/d'` ; do echo ' call iophys_ecrit("'$i'",klev,"","",'$i')' ; done ) > physiqex_out.h 553 ! ( for i in `grep -i 'real.*::' physiqex_mod.F90 | sed -e '/^!/d' | grep '(klon)' | cut -d: -f3 | cut -d! -f1 | sed -e 's/,/ /g' -e '/rot/d'` ; do echo ' call iophys_ecrit("'$i'",1,"","",'$i')' ; done ) >> physiqex_out.h 554 include "physiqex_out.h" 555 556 endif 130 call output_physiqex(debut,zjulian,pdtphys,presnivs,paprs,u,v,t,qx,0.*t,0.*t,0.*t,0.*t,0.*t,0.*t) 557 131 558 132 … … 562 136 endif 563 137 564 print*,'Fin physiqex'565 138 566 139 end subroutine physiqex
Note: See TracChangeset
for help on using the changeset viewer.