Changeset 4652
- Timestamp:
- Aug 28, 2023, 4:41:57 PM (15 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmd/physiqex_mod.F90
r4651 r4652 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,iflag_ratqs 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=1242 if ( iflag_replay == 1 ) CALL iophys_ini(pdtphys)243 244 95 245 96 endif ! of if (debut) … … 249 100 !------------------------------------------------------------ 250 101 251 d_u_dyn(:,:)=(u(:,:)-u_prev(:,:))/pdtphys252 d_v_dyn(:,:)=(v(:,:)-v_prev(:,:))/pdtphys253 d_t_dyn(:,:)=(temp(:,:)-t_prev(:,:))/pdtphys254 d_q_dyn(:,:,:)=(qx(:,:,:)-q_prev(:,:,:))/pdtphys255 102 256 103 ! set all tendencies to zero … … 261 108 d_ps(1:klon)=0. 262 109 263 u_loc(1:klon,1:klev)=u(1:klon,1:klev)264 v_loc(1:klon,1:klev)=v(1:klon,1:klev)265 t_loc(1:klon,1:klev)=temp(1:klon,1:klev)266 d_u_loc(1:klon,1:klev)=0.267 d_v_loc(1:klon,1:klev)=0.268 d_t_loc(1:klon,1:klev)=0.269 do iq=1,nqtot270 do k=1,klev271 do i=1,klon272 q_loc(i,k,iq)=qx(i,k,iq)273 enddo274 enddo275 enddo276 277 du0(1:klon,1:klev)=0.278 dv0(1:klon,1:klev)=0.279 dqbs0(1:klon,1:klev)=0.280 281 282 283 110 !------------------------------------------------------------ 284 111 ! Calculs 285 112 !------------------------------------------------------------ 286 113 287 !------------------------------------------------------------ 288 ! Rappel en temperature et frottement dans la premiere chouche 289 !------------------------------------------------------------ 290 291 if ( iflag_newton == 1 ) then 292 ! compute tendencies to return to the dynamics: 293 ! "friction" on the first layer 294 d_u(1:klon,1)=-u(1:klon,1)/86400. 295 d_v(1:klon,1)=-v(1:klon,1)/86400. 296 ! newtonian relaxation towards temp_newton() 297 do k=1,klev 298 temp_newton(1:klon,k)=280.+cos(latitude(1:klon))*40.-pphi(1:klon,k)/rg*6.e-3 299 d_t(1:klon,k)=(temp_newton(1:klon,k)-temp(1:klon,k))/5.e5 300 enddo 301 else 302 temp_newton(:,:)=0. 303 endif 304 305 306 !------------------------------------------------------------ 307 ! Reevaporation de la pluie 308 !------------------------------------------------------------ 309 310 iflag_ice_thermo=1 311 if ( iflag_reevap == 1 ) then 312 CALL reevap (klon,klev,iflag_ice_thermo,t_loc,q_loc(:,:,1),q_loc(:,:,2),q_loc(:,:,3), & 313 & d_t_eva,d_q_eva,d_ql_eva,d_qi_eva) 314 do k=1,klev 315 do i=1,klon 316 t_loc(i,k)=t_loc(i,k)+d_t_eva(i,k) 317 q_loc(i,k,1)=q_loc(i,k,1)+d_q_eva(i,k) 318 q_loc(i,k,2)=q_loc(i,k,2)+d_ql_eva(i,k) 319 q_loc(i,k,3)=q_loc(i,k,3)+d_qi_eva(i,k) 320 q_loc(i,k,2)=0. 321 q_loc(i,k,3)=0. 322 enddo 323 enddo 324 else 325 d_t_eva(:,:)=0. 326 d_q_eva(:,:)=0. 327 d_ql_eva(:,:)=0. 328 d_qi_eva(:,:)=0. 329 endif 330 331 332 333 !----------------------------------------------------------------------- 334 ! Variables intermédiaires (altitudes, temperature potentielle ...) 335 !----------------------------------------------------------------------- 336 337 DO k=1,klev 338 DO i=1,klon 339 zzlay(i,k)=pphi(i,k)/rg 340 ENDDO 341 ENDDO 342 DO i=1,klon 343 zzlev(i,1)=0. 344 ENDDO 345 DO k=2,klev 346 DO i=1,klon 347 z1=(pplay(i,k-1)+paprs(i,k))/(pplay(i,k-1)-paprs(i,k)) 348 z2=(paprs(i,k)+pplay(i,k))/(paprs(i,k)-pplay(i,k)) 349 zzlev(i,k)=(z1*zzlay(i,k-1)+z2*zzlay(i,k))/(z1+z2) 350 ENDDO 351 ENDDO 352 353 ! Transformation de la temperature en temperature potentielle 354 DO k=1,klev 355 DO i=1,klon 356 zpopsk(i,k)=(pplay(i,k)/paprs(i,1))**rkappa 357 masse(i,k)=(paprs(i,k)-paprs(i,k+1))/rg 358 ENDDO 359 ENDDO 360 DO k=1,klev 361 DO i=1,klon 362 h_loc(i,k)=t_loc(i,k)/zpopsk(i,k) 363 d_h_loc(i,k)=d_t_loc(i,k)/zpopsk(i,k) 364 d_q_loc(i,k,1)=0. 365 ENDDO 366 ENDDO 367 368 !----------------------------------------------------------------------- 369 ! Diffusion verticale 370 !----------------------------------------------------------------------- 371 372 if ( iflag_vdif == 1 ) then 373 emis(:)=1. 374 !tsrf=300. 375 z0m=0.01 376 z0h=0.01 377 capcal=1e5 378 lwrite=.false. 379 print*,'lwrite ',lwrite 380 call vdif(klon,klev, & 381 & pdtphys,capcal,z0m,z0h, & 382 & pplay,paprs,zzlay,zzlev, & 383 & u_loc,v_loc,t_loc,h_loc,q_loc,tsrf,emis, & 384 & d_u_loc,d_v_loc,d_h_loc,d_q_loc,fluxsrf, & 385 & d_u_vdif,d_v_vdif,d_h_vdif,d_q_vdif,dtsrf,q2,kz_v,kz_h, & 386 & richardson,cdv,cdh, & 387 & lwrite) 388 do k=1,klev 389 do i=1,klon 390 d_t_vdif(i,k)=d_h_vdif(i,k)*zpopsk(i,k) 391 t_loc(i,k)=t_loc(i,k)+d_t_vdif(i,k)*pdtphys 392 u_loc(i,k)=u_loc(i,k)+d_u_vdif(i,k)*pdtphys 393 v_loc(i,k)=v_loc(i,k)+d_v_vdif(i,k)*pdtphys 394 q_loc(i,k,1)=q_loc(i,k,1)+d_q_vdif(i,k,1)*pdtphys 395 enddo 396 enddo 397 do i=1,klon 398 tsrf(i)=tsrf(i)+dtsrf(i)*pdtphys 399 enddo 400 else 401 d_u_vdif(:,:)=0. 402 d_v_vdif(:,:)=0. 403 d_t_vdif(:,:)=0. 404 d_h_vdif(:,:)=0. 405 d_q_vdif(:,:,1)=0. 406 kz_v(:,:)=0. 407 kz_h(:,:)=0. 408 richardson(:,:)=0. 409 endif 410 411 !----------------------------------------------------------------------- 412 ! Thermiques 413 !----------------------------------------------------------------------- 414 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() 415 119 do k=1,klev 416 do i=1,klon 417 d_u_the(i,k)=0. 418 d_v_the(i,k)=0. 419 d_t_the(i,k)=0. 420 d_q_the(i,k,1)=0. 421 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 422 122 enddo 423 123 424 if ( iflag_thermals > 0 ) then425 426 427 zqta(:,:)=q_loc(:,:,1)428 call caltherm(pdtphys &429 & ,pplay,paprs,pphi &430 & ,u_loc,v_loc,t_loc,q_loc,debut &431 & ,f0,zmax0,d_u_the,d_v_the,d_t_the,d_q_the &432 & ,frac_the,fm_the,zqta,ztv,zpspsk,ztla,zthl &433 & )434 435 do k=1,klev436 do i=1,klon437 t_loc(i,k)=t_loc(i,k)+d_t_the(i,k)438 u_loc(i,k)=u_loc(i,k)+d_u_the(i,k)439 v_loc(i,k)=v_loc(i,k)+d_v_the(i,k)440 q_loc(i,k,1)=q_loc(i,k,1)+d_q_the(i,k,1)441 enddo442 enddo443 444 else445 frac_the(:,:)=0.446 fm_the(:,:)=0.447 ztv(:,:)=t_loc(:,:)448 zqta(:,:)=q_loc(:,:,1)449 ztla(:,:)=0.450 zthl(:,:)=0.451 zpspsk(:,:)=(pplay(:,:)/100000.)**RKAPPA452 453 endif454 455 !-----------------------------------------------------------------------456 ! Condensation grande échelle457 !-----------------------------------------------------------------------458 459 iflag_cld_th=5460 ok_ice_sursat=.false.461 ptconv(:,:)=.false.462 distcltop=0.463 temp_cltop=0.464 beta(:,:)=1.465 rneb_seri(:,:)=0.466 do k=1,klev467 ratqs(:,k)=ratqsbas+0.5*(ratqshaut-ratqsbas) &468 *( tanh( (ratqsp0-pplay(:,k))/ratqsdp) + 1.)469 enddo470 471 472 if ( iflag_lscp == 1 ) then473 474 call lscp(klon,klev,pdtphys,missing_val, &475 paprs,pplay,t_loc,q_loc,ptconv,ratqs, &476 d_t_lscp, d_q_lscp, d_ql_lscp, d_qi_lscp, rneb, rneblsvol, rneb_seri, &477 pfraclr,pfracld, &478 radocond, radicefrac, rain, snow, &479 frac_impa, frac_nucl, beta, &480 prfl, psfl, rhcl, zqta, frac_the, &481 ztv, zpspsk, ztla, zthl, iflag_cld_th, &482 iflag_ice_thermo, ok_ice_sursat, qsatl, qsats, &483 distcltop,temp_cltop, &484 qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss, &485 Tcontr, qcontr, qcontr2, fcontrN, fcontrP, &486 cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv)487 488 489 do k=1,klev490 do i=1,klon491 t_loc(i,k)=t_loc(i,k)+d_t_lscp(i,k)492 q_loc(i,k,1)=q_loc(i,k,1)+d_q_lscp(i,k)493 q_loc(i,k,2)=q_loc(i,k,2)+d_ql_lscp(i,k)494 q_loc(i,k,3)=q_loc(i,k,3)+d_qi_lscp(i,k)495 enddo496 enddo497 498 else499 d_t_lscp(:,:)=0.500 d_q_lscp(:,:)=0.501 d_ql_lscp(:,:)=0.502 d_qi_lscp(:,:)=0.503 rneb(:,:)=0.504 rneblsvol(:,:)=0.505 pfraclr(:,:)=0.506 pfracld(:,:)=0.507 radocond(:,:)=0.508 rain(:)=0.509 snow(:)=0.510 radicefrac(:,:)=0.511 rhcl (:,:)=0.512 qsatl (:,:)=0.513 qsats (:,:)=0.514 prfl (:,:)=0.515 psfl (:,:)=0.516 distcltop (:,:)=0.517 temp_cltop(:,:)=0.518 frac_impa (:,:)=0.519 frac_nucl (:,:)=0.520 qclr (:,:)=0.521 qcld (:,:)=0.522 qss (:,:)=0.523 qvc (:,:)=0.524 rnebclr (:,:)=0.525 rnebss (:,:)=0.526 gamma_ss (:,:)=0.527 Tcontr (:,:)=0.528 qcontr (:,:)=0.529 qcontr2 (:,:)=0.530 fcontrN (:,:)=0.531 fcontrP (:,:)=0.532 endif533 534 535 d_u(:,:)=(u_loc(:,:)-u(:,:))/pdtphys536 d_v(:,:)=(v_loc(:,:)-v(:,:))/pdtphys537 d_t(:,:)=(t_loc(:,:)-temp(:,:))/pdtphys538 d_qx(:,:,:)=(q_loc(:,:,:)-qx(:,:,:))/pdtphys539 124 540 125 !------------------------------------------------------------ … … 543 128 544 129 545 tsrf_(:)=tsrf(:) 546 if ( iflag_replay == 0 ) then 547 call output_physiqex(debut,zjulian,pdtphys,presnivs,paprs,u,v,temp,qx,0.*u,0.*u,0.*u,0.*u,q2,0.*u) 548 else 549 ! En mode replay, on sort aussi les variables de base 550 ! Les lignes qui suivent ont été générées automatiquement avec : 551 ! ( 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 552 ! ( 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 553 include "physiqex_out.h" 554 555 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) 556 131 557 132 … … 561 136 endif 562 137 563 print*,'Fin physiqex'564 138 565 139 end subroutine physiqex
Note: See TracChangeset
for help on using the changeset viewer.