Changeset 2159 for LMDZ5/trunk/libf/phylmd/physiq.F90
- Timestamp:
- Nov 27, 2014, 4:48:31 PM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ5/trunk/libf/phylmd/physiq.F90
r2146 r2159 371 371 REAL q_undi(klon,klev) ! humidite moyenne dans la zone non perturbee 372 372 ! 373 !jyg 373 !jyg< 374 374 !cc REAL wake_pe(klon) ! Wake potential energy - WAPE 375 !>jyg 375 376 376 377 REAL wake_gfl(klon) ! Gust Front Length … … 392 393 !$OMP THREADPRIVATE(alp_offset) 393 394 395 !!! 396 !================================================================= 397 ! PROVISOIRE : DECOUPLAGE PBL/WAKE 398 ! -------------------------------- 399 REAL wake_deltat_sav(klon,klev) 400 REAL wake_deltaq_sav(klon,klev) 401 !================================================================= 402 394 403 ! 395 404 !RR:fin declarations poches froides … … 409 418 real w0(klon) ! Vitesse des thermiques au LCL 410 419 real w_conv(klon) ! Vitesse verticale de grande \'echelle au LCL 411 real tke0(klon,klev+1) ! TKE au d ébut du pas de temps420 real tke0(klon,klev+1) ! TKE au début du pas de temps 412 421 real therm_tke_max0(klon) ! TKE dans les thermiques au LCL 413 422 real env_tke_max0(klon) ! TKE dans l'environnement au LCL … … 418 427 !--------Statistical Boundary Layer Closure: ALP_BL-------- 419 428 !---Profils de TKE dans et hors du thermique 420 real pbl_tke_input(klon,klev+1,nbsrf)421 429 real therm_tke_max(klon,klev) ! Profil de TKE dans les thermiques 422 430 real env_tke_max(klon,klev) ! Profil de TKE dans l'environnement … … 1239 1247 iGCM,jGCM,lonGCM,latGCM, & 1240 1248 jjmp1,nlevSTD,clevSTD,rlevSTD, dtime,ok_veget, & 1241 type_ocean,iflag_pbl, ok_mensuel,ok_journe, &1249 type_ocean,iflag_pbl,iflag_pbl_split,ok_mensuel,ok_journe, & 1242 1250 ok_hf,ok_instan,ok_LES,ok_ade,ok_aie, & 1243 1251 read_climoz, phys_out_filestations, & … … 1651 1659 else 1652 1660 1653 !CR: on r é-évapore eau liquide et glace1661 !CR: on ré-évapore eau liquide et glace 1654 1662 1655 1663 ! zdelta = MAX(0.,SIGN(1.,RTT-t_seri(i,k))) … … 1663 1671 q_seri(i,k) = q_seri(i,k) + zb 1664 1672 ql_seri(i,k) = 0.0 1665 !on évapore la glace1673 !on évapore la glace 1666 1674 qs_seri(i,k) = 0.0 1667 1675 d_t_eva(i,k) = za … … 1774 1782 if (iflag_pbl/=0) then 1775 1783 1784 !jyg+nrlmd< 1785 IF (prt_level .ge. 2 .and. mod(iflag_pbl_split,2) .eq. 1) THEN 1786 print *,'debut du splitting de la PBL' 1787 ENDIF 1788 !!! 1789 !================================================================= 1790 ! PROVISOIRE : DECOUPLAGE PBL/WAKE 1791 ! -------------------------------- 1792 ! 1793 !! wake_deltat_sav(:,:)=wake_deltat(:,:) 1794 !! wake_deltaq_sav(:,:)=wake_deltaq(:,:) 1795 !! wake_deltat(:,:)=0. 1796 !! wake_deltaq(:,:)=0. 1797 !================================================================= 1798 !>jyg+nrlmd 1799 ! 1776 1800 CALL pbl_surface( & 1777 1801 dtime, date0, itap, days_elapsed+1, & … … 1781 1805 rain_fall, snow_fall, solsw, sollw, & 1782 1806 t_seri, q_seri, u_seri, v_seri, & 1807 !nrlmd+jyg< 1808 wake_deltat, wake_deltaq, wake_cstar, wake_s, & 1809 !>nrlmd+jyg 1783 1810 pplay, paprs, pctsrf, & 1784 1811 ftsol,falb1,falb2,ustar,u10m,v10m,wstar, & … … 1788 1815 zxtsol, zxfluxlat, zt2m, qsat2m, & 1789 1816 d_t_vdf, d_q_vdf, d_u_vdf, d_v_vdf, d_t_diss, & 1817 !nrlmd< 1818 !jyg< 1819 d_t_vdf_w, d_q_vdf_w, & 1820 d_t_vdf_x, d_q_vdf_x, & 1821 sens_x, zxfluxlat_x, sens_w, zxfluxlat_w, & 1822 !>jyg 1823 delta_tsurf,wake_dens, & 1824 cdragh_x,cdragh_w,cdragm_x,cdragm_w, & 1825 kh,kh_x,kh_w, & 1826 !>nrlmd 1790 1827 coefh(1:klon,1:klev,1:nbsrf+1), coefm(1:klon,1:klev,1:nbsrf+1), & 1791 1828 slab_wfbils, & 1792 1829 qsol, zq2m, s_pblh, s_lcl, & 1830 !jyg< 1831 s_pblh_x, s_lcl_x, s_pblh_w, s_lcl_w, & 1832 !>jyg 1793 1833 s_capCL, s_oliqCL, s_cteiCL,s_pblT, & 1794 1834 s_therm, s_trmb1, s_trmb2, s_trmb3, & … … 1799 1839 wfbils, wfbilo, fluxt, fluxu, fluxv, & 1800 1840 dsens, devap, zxsnow, & 1801 zxfluxt, zxfluxq, q2m, fluxq, pbl_tke ) 1841 zxfluxt, zxfluxq, q2m, fluxq, pbl_tke, & 1842 !nrlmd+jyg< 1843 wake_delta_pbl_TKE & 1844 !>nrlmd+jyg 1845 ) 1846 ! 1847 !================================================================= 1848 ! PROVISOIRE : DECOUPLAGE PBL/WAKE 1849 ! -------------------------------- 1850 ! 1851 !! wake_deltat(:,:)=wake_deltat_sav(:,:) 1852 !! wake_deltaq(:,:)=wake_deltaq_sav(:,:) 1853 !================================================================= 1854 ! 1855 ! Add turbulent diffusion tendency to the wake difference variables 1856 wake_deltat(:,:) = wake_deltat(:,:) + (d_t_vdf_w(:,:)-d_t_vdf_x(:,:)) 1857 wake_deltaq(:,:) = wake_deltaq(:,:) + (d_q_vdf_w(:,:)-d_q_vdf_x(:,:)) 1802 1858 1803 1859 … … 2270 2326 !pour la couche limite diffuse pour l instant 2271 2327 ! 2328 ! 2329 !!! nrlmd le 22/03/2011---Si on met les poches hors des thermiques il faut rajouter cette 2330 !------------------------- tendance calculée hors des poches froides 2331 ! 2272 2332 if (iflag_wake>=1) then 2273 2333 DO k=1,klev 2274 2334 DO i=1,klon 2275 2335 dt_dwn(i,k) = ftd(i,k) 2276 wdt_PBL(i,k) = 0.2277 2336 dq_dwn(i,k) = fqd(i,k) 2278 wdq_PBL(i,k) = 0.2279 2337 M_dwn(i,k) = dnwd0(i,k) 2280 2338 M_up(i,k) = upwd(i,k) 2281 2339 dt_a(i,k) = d_t_con(i,k)/dtime - ftd(i,k) 2282 udt_PBL(i,k) = 0.2283 2340 dq_a(i,k) = d_q_con(i,k)/dtime - fqd(i,k) 2284 udq_PBL(i,k) = 0.2285 2341 ENDDO 2286 2342 ENDDO 2343 !nrlmd+jyg< 2344 DO k=1,klev 2345 DO i=1,klon 2346 wdt_PBL(i,k) = 0. 2347 wdq_PBL(i,k) = 0. 2348 udt_PBL(i,k) = 0. 2349 udq_PBL(i,k) = 0. 2350 ENDDO 2351 ENDDO 2352 ! 2353 IF (mod(iflag_pbl_split,2) .EQ. 1) THEN 2354 DO k=1,klev 2355 DO i=1,klon 2356 wdt_PBL(i,k) = wdt_PBL(i,k) + d_t_vdf_w(i,k)/dtime 2357 wdq_PBL(i,k) = wdq_PBL(i,k) + d_q_vdf_w(i,k)/dtime 2358 udt_PBL(i,k) = udt_PBL(i,k) + d_t_vdf_x(i,k)/dtime 2359 udq_PBL(i,k) = udq_PBL(i,k) + d_q_vdf_x(i,k)/dtime 2360 !! dt_dwn(i,k) = dt_dwn(i,k) + d_t_vdf_w(i,k)/dtime 2361 !! dq_dwn(i,k) = dq_dwn(i,k) + d_q_vdf_w(i,k)/dtime 2362 !! dt_a (i,k) = dt_a(i,k) + d_t_vdf_x(i,k)/dtime 2363 !! dq_a (i,k) = dq_a(i,k) + d_q_vdf_x(i,k)/dtime 2364 ENDDO 2365 ENDDO 2366 ENDIF 2367 IF (mod(iflag_pbl_split/2,2) .EQ. 1) THEN 2368 DO k=1,klev 2369 DO i=1,klon 2370 !! dt_dwn(i,k) = dt_dwn(i,k) + 0. 2371 !! dq_dwn(i,k) = dq_dwn(i,k) + 0. 2372 !! dt_a(i,k) = dt_a(i,k) + d_t_ajs(i,k)/dtime 2373 !! dq_a(i,k) = dq_a(i,k) + d_q_ajs(i,k)/dtime 2374 udt_PBL(i,k) = udt_PBL(i,k) + d_t_ajs(i,k)/dtime 2375 udq_PBL(i,k) = udq_PBL(i,k) + d_q_ajs(i,k)/dtime 2376 ENDDO 2377 ENDDO 2378 ENDIF 2379 !>nrlmd+jyg 2287 2380 2288 2381 IF (iflag_wake==2) THEN … … 2299 2392 DO i=1,klon 2300 2393 IF (rneb(i,k)==0.) THEN 2301 ! On ne tient compte des tendances qu'en dehors des nuages (c'est �| dire2394 ! On ne tient compte des tendances qu'en dehors des nuages (c'est �| dire 2302 2395 ! a priri dans une region ou l'eau se reevapore). 2303 2396 dt_dwn(i,k)= dt_dwn(i,k)+ & … … 2339 2432 !------------------------------------------------------------------------ 2340 2433 2341 endif 2434 endif ! (iflag_wake>=1) 2342 2435 ! 2343 2436 !=================================================================== … … 2407 2500 2408 2501 if (iflag_thermals>=1) then 2502 !jyg< 2503 IF (mod(iflag_pbl_split/2,2) .EQ. 1) THEN 2504 ! Appel des thermiques avec les profils exterieurs aux poches 2505 DO k=1,klev 2506 DO i=1,klon 2507 t_therm(i,k) = t_seri(i,k) - wake_s(i)*wake_deltat(i,k) 2508 q_therm(i,k) = q_seri(i,k) - wake_s(i)*wake_deltaq(i,k) 2509 ENDDO 2510 ENDDO 2511 ELSE 2512 ! Appel des thermiques avec les profils moyens 2513 DO k=1,klev 2514 DO i=1,klon 2515 t_therm(i,k) = t_seri(i,k) 2516 q_therm(i,k) = q_seri(i,k) 2517 ENDDO 2518 ENDDO 2519 ENDIF 2520 !>jyg 2409 2521 call calltherm(pdtphys & 2410 2522 ,pplay,paprs,pphi,weak_inversion & 2411 ,u_seri,v_seri,t_seri,q_seri,zqsat,debut & 2523 !! ,u_seri,v_seri,t_seri,q_seri,zqsat,debut & !jyg 2524 ,u_seri,v_seri,t_therm,q_therm,zqsat,debut & !jyg 2412 2525 ,d_u_ajs,d_v_ajs,d_t_ajs,d_q_ajs & 2413 2526 ,fm_therm,entr_therm,detr_therm & … … 2426 2539 !cc fin nrlmd le 10/04/2012 2427 2540 ,zqla,ztva ) 2541 ! 2542 !jyg< 2543 IF (mod(iflag_pbl_split/2,2) .EQ. 1) THEN 2544 ! Si les thermiques ne sont presents que hors des poches, la tendance moyenne 2545 ! associée doit etre multipliee par la fraction surfacique qu'ils couvrent. 2546 DO k=1,klev 2547 DO i=1,klon 2548 ! 2549 wake_deltat(i,k) = wake_deltat(i,k) - d_t_ajs(i,k) 2550 wake_deltaq(i,k) = wake_deltaq(i,k) - d_q_ajs(i,k) 2551 t_seri(i,k) = t_therm(i,k) + wake_s(i)*wake_deltat(i,k) 2552 q_seri(i,k) = q_therm(i,k) + wake_s(i)*wake_deltaq(i,k) 2553 ! 2554 d_u_ajs(i,k) = d_u_ajs(i,k)*(1.-wake_s(i)) 2555 d_v_ajs(i,k) = d_v_ajs(i,k)*(1.-wake_s(i)) 2556 d_t_ajs(i,k) = d_t_ajs(i,k)*(1.-wake_s(i)) 2557 d_q_ajs(i,k) = d_q_ajs(i,k)*(1.-wake_s(i)) 2558 ! 2559 ENDDO 2560 ENDDO 2561 ELSE 2562 DO k=1,klev 2563 DO i=1,klon 2564 t_seri(i,k) = t_therm(i,k) 2565 q_seri(i,k) = q_therm(i,k) 2566 ENDDO 2567 ENDDO 2568 ENDIF 2569 !>jyg 2428 2570 2429 2571 !cc nrlmd le 10/04/2012 … … 2545 2687 ! Couplage Thermiques/Emanuel seulement si T<0 2546 2688 if (iflag_coupl==2) then 2689 IF (prt_level .GE. 10) THEN 2547 2690 print*,'Couplage Thermiques/Emanuel seulement si T<0' 2691 ENDIF 2548 2692 do i=1,klon 2549 2693 if (t_seri(i,lmax_th(i))>273.) then … … 2637 2781 !------------------------------------------------------------------------- 2638 2782 IF (prt_level .GE.10) THEN 2639 print *,' ->fisrtilp '2783 print *,'itap, ->fisrtilp ',itap 2640 2784 ENDIF 2641 ! -------------------------------------------------------------------------2785 ! 2642 2786 CALL fisrtilp(dtime,paprs,pplay, & 2643 2787 t_seri, q_seri,ptconv,ratqs, & … … 2649 2793 zqasc, fraca,ztv,zpspsk,ztla,zthl,iflag_cldcon, & 2650 2794 iflag_ice_thermo) 2651 2795 ! 2652 2796 WHERE (rain_lsc < 0) rain_lsc = 0. 2653 2797 WHERE (snow_lsc < 0) snow_lsc = 0. … … 2808 2952 !--updates tausum_aero,tau_aero,piz_aero,cg_aero 2809 2953 IF (flag_aerosol_strat) THEN 2810 PRINT *,'appel a readaerosolstrat', mth_cur 2954 IF (prt_level .GE.10) THEN 2955 PRINT *,'appel a readaerosolstrat', mth_cur 2956 ENDIF 2811 2957 IF (iflag_rrtm.EQ.0) THEN 2812 2958 CALL readaerosolstrato(debut) … … 3529 3675 IF (itap.eq.1.or.MOD(itap,NINT(freq_cosp/dtime)).EQ.0) THEN 3530 3676 3677 IF (prt_level .GE.10) THEN 3531 3678 print*,'freq_cosp',freq_cosp 3679 ENDIF 3532 3680 mr_ozone=wo(:, :, 1) * dobson_u * 1e3 / zmasse 3533 3681 ! print*,'Dans physiq.F avant appel cosp ref_liq,ref_ice=',
Note: See TracChangeset
for help on using the changeset viewer.