Changeset 2635 for LMDZ5/trunk/libf/phylmd/physiq_mod.F90
- Timestamp:
- Sep 27, 2016, 6:02:46 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ5/trunk/libf/phylmd/physiq_mod.F90
r2630 r2635 133 133 dtvdf_x, dtvdf_w, & 134 134 dqvdf_x, dqvdf_w, & 135 undi_tke, wake_tke, &136 135 pbl_tke_input, & 137 136 t_therm, q_therm, u_therm, v_therm, & … … 141 140 ! 142 141 ale_wake, alp_wake, & 143 wake_h, wbeff, zmax_th, & 142 wake_h, wake_omg, & 143 ! tendencies of delta T and delta q: 144 d_deltat_wk, d_deltaq_wk, & ! due to wakes 145 d_deltat_wk_gw, d_deltaq_wk_gw, & ! due to wake induced gravity waves 146 d_deltat_vdf, d_deltaq_vdf, & ! due to vertical diffusion 147 d_deltat_the, d_deltaq_the, & ! due to thermals 148 d_deltat_ajs_cv, d_deltaq_ajs_cv, & ! due to dry adjustment of (w) before convection 149 ! tendencies of wake fractional area and wake number per unit area: 150 d_s_wk, d_dens_wk, & ! due to wakes 151 !!! d_s_vdf, d_dens_vdf, & ! due to vertical diffusion 152 !!! d_s_the, d_dens_the, & ! due to thermals 153 ! 154 wbeff, zmax_th, & 144 155 sens, flwp, fiwp, & 145 156 ale_bl_stat,alp_bl_conv,alp_bl_det, & … … 157 168 ref_liq, ref_ice, theta, & 158 169 ref_liq_pi, ref_ice_pi, & 159 zphi, wake_omg,zx_rh, &170 zphi, zx_rh, & 160 171 pmfd, pmfu, & 161 172 ! … … 529 540 !RC 530 541 ! Variables li\'ees \`a la poche froide (jyg et rr) 531 ! Version diagnostique pour l'instant : pas de r\'etroaction sur 532 ! la convection 533 534 REAL t_wake(klon,klev),q_wake(klon,klev) ! wake pour la convection 542 543 INTEGER, SAVE :: iflag_wake_tend ! wake: if =0, then wake state variables are 544 ! updated within calwake 545 !$OMP THREADPRIVATE(iflag_wake_tend) 546 REAL t_w(klon,klev),q_w(klon,klev) ! temperature and moisture profiles in the wake region 547 REAL t_x(klon,klev),q_x(klon,klev) ! temperature and moisture profiles in the off-wake region 535 548 536 549 REAL wake_dth(klon,klev) ! wake : temp pot difference 537 550 538 REAL wake_d_deltat_gw(klon,klev)! wake : delta T tendency due to539 ! Gravity Wave (/s)540 551 REAL wake_omgbdth(klon,klev) ! Wake : flux of Delta_Theta 541 552 ! transported by LS omega … … 546 557 REAL wake_dqKE(klon,klev) ! Wake : differential moistening 547 558 ! (wake - unpertubed) CONV 548 REAL wake_dtPBL(klon,klev) ! Wake : differential heating549 ! (wake - unpertubed) PBL550 REAL wake_dqPBL(klon,klev) ! Wake : differential moistening551 ! (wake - unpertubed) PBL552 REAL wake_ddeltat(klon,klev),wake_ddeltaq(klon,klev)553 559 REAL wake_dp_deltomg(klon,klev) ! Wake : gradient vertical de wake_omg 554 560 REAL wake_spread(klon,klev) ! spreading term in wake_delt … … 557 563 ! 558 564 INTEGER wake_k(klon) ! Wake sommet 559 !560 REAL t_undi(klon,klev) ! temperature moyenne dans la zone561 ! non perturbee562 REAL q_undi(klon,klev) ! humidite moyenne dans la zone563 ! non perturbee564 565 ! 565 566 !jyg< … … 568 569 569 570 REAL wake_gfl(klon) ! Gust Front Length 570 REAL wake_dens(klon) 571 !!! REAL wake_dens(klon) ! moved to phys_state_var_mod 571 572 ! 572 573 ! 573 574 REAL dt_dwn(klon,klev) 574 575 REAL dq_dwn(klon,klev) 575 REAL wdt_PBL(klon,klev)576 REAL udt_PBL(klon,klev)577 REAL wdq_PBL(klon,klev)578 REAL udq_PBL(klon,klev)579 576 REAL M_dwn(klon,klev) 580 577 REAL M_up(klon,klev) … … 589 586 REAL, SAVE :: alp_offset 590 587 !$OMP THREADPRIVATE(alp_offset) 591 592 ! !!593 !=================================================================594 ! PROVISOIRE : DECOUPLAGE PBL/WAKE595 ! --------------------------------596 REAL wake_deltat_sav(klon,klev)597 REAL wake_deltaq_sav(klon,klev)598 !=================================================================599 588 600 589 ! … … 815 804 ! tendance nulles 816 805 REAL, dimension(klon,klev):: du0, dv0, dt0, dq0, dql0, dqi0 806 REAL, dimension(klon) :: dsig0, ddens0 807 INTEGER, dimension(klon) :: wkoccur1 817 808 ! 818 809 ! Flag pour pouvoir ne pas ajouter les tendances. … … 1209 1200 CALL getin_p('ratqsp0',ratqsp0) 1210 1201 CALL getin_p('ratqsdp',ratqsdp) 1202 iflag_wake_tend = 0 1203 CALL getin_p('iflag_wake_tend',iflag_wake_tend) 1211 1204 ENDIF 1212 1205 … … 1698 1691 dql0(:,:)=0. 1699 1692 dqi0(:,:)=0. 1693 dsig0(:) = 0. 1694 ddens0(:) = 0. 1695 wkoccur1(:)=1 1700 1696 ! 1701 1697 ! Mettre a zero des variables de sortie (pour securite) … … 2135 2131 ENDIF 2136 2132 ! !! 2137 !=================================================================2138 ! PROVISOIRE : DECOUPLAGE PBL/WAKE2139 ! --------------------------------2140 !2141 !! wake_deltat_sav(:,:)=wake_deltat(:,:)2142 !! wake_deltaq_sav(:,:)=wake_deltaq(:,:)2143 !! wake_deltat(:,:)=0.2144 !! wake_deltaq(:,:)=0.2145 !=================================================================2146 2133 !>jyg+nrlmd 2147 2134 ! … … 2218 2205 ) 2219 2206 ! 2220 !=================================================================2221 ! PROVISOIRE : DECOUPLAGE PBL/WAKE2222 ! --------------------------------2223 !2224 !! wake_deltat(:,:)=wake_deltat_sav(:,:)2225 !! wake_deltaq(:,:)=wake_deltaq_sav(:,:)2226 !=================================================================2227 !2228 2207 ! Add turbulent diffusion tendency to the wake difference variables 2229 2208 IF (mod(iflag_pbl_split,2) .NE. 0) THEN 2230 wake_deltat(:,:) = wake_deltat(:,:) + (d_t_vdf_w(:,:)-d_t_vdf_x(:,:)) 2231 wake_deltaq(:,:) = wake_deltaq(:,:) + (d_q_vdf_w(:,:)-d_q_vdf_x(:,:)) 2209 !jyg< 2210 d_deltat_vdf(:,:) = d_t_vdf_w(:,:)-d_t_vdf_x(:,:) 2211 d_deltaq_vdf(:,:) = d_q_vdf_w(:,:)-d_q_vdf_x(:,:) 2212 CALL add_wake_tend & 2213 (d_deltat_vdf, d_deltaq_vdf, dsig0, ddens0, wkoccur1, 'vdf', abortphy) 2214 ELSE 2215 d_deltat_vdf(:,:) = 0. 2216 d_deltaq_vdf(:,:) = 0. 2217 !>jyg 2232 2218 ENDIF 2233 2219 … … 2404 2390 !======================================================================= 2405 2391 !ajout pour la parametrisation des poches froides: calcul de 2406 !t_w ake et t_undi: si pas de poches froides, t_wake=t_undi=t_seri2407 do k=1,klev2408 do i=1,klon2409 if (iflag_wake>=1) then2410 t_w ake(i,k) = t_seri(i,k) &2392 !t_w et t_x: si pas de poches froides, t_w=t_x=t_seri 2393 if (iflag_wake>=1) then 2394 do k=1,klev 2395 do i=1,klon 2396 t_w(i,k) = t_seri(i,k) & 2411 2397 +(1-wake_s(i))*wake_deltat(i,k) 2412 q_w ake(i,k) = q_seri(i,k) &2398 q_w(i,k) = q_seri(i,k) & 2413 2399 +(1-wake_s(i))*wake_deltaq(i,k) 2414 t_ undi(i,k) = t_seri(i,k) &2400 t_x(i,k) = t_seri(i,k) & 2415 2401 -wake_s(i)*wake_deltat(i,k) 2416 q_ undi(i,k) = q_seri(i,k) &2402 q_x(i,k) = q_seri(i,k) & 2417 2403 -wake_s(i)*wake_deltaq(i,k) 2418 else2419 t_wake(i,k) = t_seri(i,k)2420 q_wake(i,k) = q_seri(i,k)2421 t_ undi(i,k) = t_seri(i,k)2422 q_ undi(i,k) = q_seri(i,k)2423 endif2424 enddo2425 end do2404 enddo 2405 enddo 2406 else 2407 t_w(:,:) = t_seri(:,:) 2408 q_w(:,:) = q_seri(:,:) 2409 t_x(:,:) = t_seri(:,:) 2410 q_x(:,:) = q_seri(:,:) 2411 endif 2426 2412 ! 2427 2413 !jyg< … … 2432 2418 IF (ok_adjwk) THEN 2433 2419 limbas(:) = 1 2434 CALL ajsec(paprs, pplay, t_w ake, q_wake, limbas, &2420 CALL ajsec(paprs, pplay, t_w, q_w, limbas, & 2435 2421 d_t_adjwk, d_q_adjwk) 2436 2422 ENDIF … … 2439 2425 DO i=1,klon 2440 2426 IF (wake_s(i) .GT. 1.e-3) THEN 2441 t_wake(i,k) = t_wake(i,k) + d_t_adjwk(i,k) 2442 q_wake(i,k) = q_wake(i,k) + d_q_adjwk(i,k) 2443 wake_deltat(i,k) = wake_deltat(i,k) + d_t_adjwk(i,k) 2444 wake_deltaq(i,k) = wake_deltaq(i,k) + d_q_adjwk(i,k) 2427 t_w(i,k) = t_w(i,k) + d_t_adjwk(i,k) 2428 q_w(i,k) = q_w(i,k) + d_q_adjwk(i,k) 2429 d_deltat_ajs_cv(i,k) = d_t_adjwk(i,k) 2430 d_deltaq_ajs_cv(i,k) = d_q_adjwk(i,k) 2431 ELSE 2432 d_deltat_ajs_cv(i,k) = 0. 2433 d_deltaq_ajs_cv(i,k) = 0. 2445 2434 ENDIF 2446 2435 ENDDO 2447 2436 ENDDO 2437 CALL add_wake_tend & 2438 (d_deltat_ajs_cv, d_deltaq_ajs_cv, dsig0, ddens0, wkoccur1, 'ajs_cv', abortphy) 2448 2439 ENDIF ! (iflag_wake>=1) 2449 2440 !>jyg … … 2486 2477 !jyg iflag_con est dans clesphys 2487 2478 !c CALL concvl (iflag_con,iflag_clos, 2488 clw=0.2489 2479 CALL concvl (iflag_clos, & 2490 dtime, paprs, pplay, k_upper_cv, t_ undi,q_undi, &2491 t_w ake,q_wake,wake_s, &2480 dtime, paprs, pplay, k_upper_cv, t_x,q_x, & 2481 t_w,q_w,wake_s, & 2492 2482 u_seri,v_seri,tr_seri,nbtr_tmp, & 2493 2483 ALE,ALP, & … … 2705 2695 ENDDO 2706 2696 ENDDO 2707 !nrlmd+jyg<2708 DO k=1,klev2709 DO i=1,klon2710 wdt_PBL(i,k) = 0.2711 wdq_PBL(i,k) = 0.2712 udt_PBL(i,k) = 0.2713 udq_PBL(i,k) = 0.2714 ENDDO2715 ENDDO2716 !2717 IF (mod(iflag_pbl_split,2) .EQ. 1) THEN2718 DO k=1,klev2719 DO i=1,klon2720 wdt_PBL(i,k) = wdt_PBL(i,k) + d_t_vdf_w(i,k)/dtime2721 wdq_PBL(i,k) = wdq_PBL(i,k) + d_q_vdf_w(i,k)/dtime2722 udt_PBL(i,k) = udt_PBL(i,k) + d_t_vdf_x(i,k)/dtime2723 udq_PBL(i,k) = udq_PBL(i,k) + d_q_vdf_x(i,k)/dtime2724 !! dt_dwn(i,k) = dt_dwn(i,k) + d_t_vdf_w(i,k)/dtime2725 !! dq_dwn(i,k) = dq_dwn(i,k) + d_q_vdf_w(i,k)/dtime2726 !! dt_a (i,k) = dt_a(i,k) + d_t_vdf_x(i,k)/dtime2727 !! dq_a (i,k) = dq_a(i,k) + d_q_vdf_x(i,k)/dtime2728 ENDDO2729 ENDDO2730 ENDIF2731 IF (mod(iflag_pbl_split/2,2) .EQ. 1) THEN2732 DO k=1,klev2733 DO i=1,klon2734 !! dt_dwn(i,k) = dt_dwn(i,k) + 0.2735 !! dq_dwn(i,k) = dq_dwn(i,k) + 0.2736 !! dt_a(i,k) = dt_a(i,k) + d_t_ajs(i,k)/dtime2737 !! dq_a(i,k) = dq_a(i,k) + d_q_ajs(i,k)/dtime2738 udt_PBL(i,k) = udt_PBL(i,k) + d_t_ajs(i,k)/dtime2739 udq_PBL(i,k) = udq_PBL(i,k) + d_q_ajs(i,k)/dtime2740 ENDDO2741 ENDDO2742 ENDIF2743 !>nrlmd+jyg2744 2697 2745 2698 IF (iflag_wake==2) THEN … … 2770 2723 ! 2771 2724 !calcul caracteristiques de la poche froide 2772 call calWAKE (paprs,pplay,dtime & 2773 ,t_seri,q_seri,omega & 2774 ,dt_dwn,dq_dwn,M_dwn,M_up & 2775 ,dt_a,dq_a,sigd & 2776 ,wdt_PBL,wdq_PBL & 2777 ,udt_PBL,udq_PBL & 2778 ,wake_deltat,wake_deltaq,wake_dth & 2779 ,wake_h,wake_s,wake_dens & 2780 ,wake_pe,wake_fip,wake_gfl & 2781 ,dt_wake,dq_wake & 2782 ,wake_k, t_undi,q_undi & 2783 ,wake_omgbdth,wake_dp_omgb & 2784 ,wake_dtKE,wake_dqKE & 2785 ,wake_dtPBL,wake_dqPBL & 2786 ,wake_omg,wake_dp_deltomg & 2787 ,wake_spread,wake_Cstar,wake_d_deltat_gw & 2788 ,wake_ddeltat,wake_ddeltaq) 2725 call calWAKE (iflag_wake_tend, paprs, pplay, dtime, & 2726 t_seri, q_seri, omega, & 2727 dt_dwn, dq_dwn, M_dwn, M_up, & 2728 dt_a, dq_a, & 2729 sigd, & 2730 wake_deltat, wake_deltaq, wake_s, wake_dens, & 2731 wake_dth, wake_h, & 2732 wake_pe, wake_fip, wake_gfl, & 2733 d_t_wake, d_q_wake, & 2734 wake_k, t_x, q_x, & 2735 wake_omgbdth, wake_dp_omgb, & 2736 wake_dtKE, wake_dqKE, & 2737 wake_omg, wake_dp_deltomg, & 2738 wake_spread, wake_Cstar, d_deltat_wk_gw, & 2739 d_deltat_wk, d_deltaq_wk, d_s_wk, d_dens_wk) 2789 2740 ! 2790 2741 !----------------------------------------------------------------------- 2791 2742 ! ajout des tendances des poches froides 2792 ! Faire rapidement disparaitre l'ancien dt_wake pour garder un d_t_wake2793 ! coherent avec les autres d_t_...2794 d_t_wake(:,:)=dt_wake(:,:)*dtime2795 d_q_wake(:,:)=dq_wake(:,:)*dtime2796 2743 CALL add_phys_tend(du0,dv0,d_t_wake,d_q_wake,dql0,dqi0,paprs,'wake', & 2797 2744 abortphy,flag_inhib_tend) 2798 2745 !------------------------------------------------------------------------ 2746 2747 ! Increment Wake state variables 2748 IF (iflag_wake_tend .GT. 0.) THEN 2749 2750 CALL add_wake_tend & 2751 (d_deltat_wk, d_deltaq_wk, d_s_wk, d_dens_wk, wake_k, & 2752 'wake', abortphy) 2753 2754 ENDIF ! (iflag_wake_tend .GT. 0.) 2799 2755 2800 2756 endif ! (iflag_wake>=1) … … 2919 2875 DO i=1,klon 2920 2876 ! 2921 wake_deltat(i,k) = wake_deltat(i,k) - d_t_ajs(i,k) 2922 wake_deltaq(i,k) = wake_deltaq(i,k) - d_q_ajs(i,k) 2923 ! 2924 !!!t_seri(i,k) = t_therm(i,k) + wake_s(i)*wake_deltat(i,k) 2925 !!!q_seri(i,k) = q_therm(i,k) + wake_s(i)*wake_deltaq(i,k) 2877 d_deltat_the(i,k) = - d_t_ajs(i,k) 2878 d_deltaq_the(i,k) = - d_q_ajs(i,k) 2926 2879 ! 2927 2880 d_u_ajs(i,k) = d_u_ajs(i,k)*(1.-wake_s(i)) … … 2932 2885 ENDDO 2933 2886 ENDDO 2934 !!! ELSE2935 !!! DO k=1,klev2936 !!! DO i=1,klon2937 !!! t_seri(i,k) = t_therm(i,k)2938 !!! q_seri(i,k) = q_therm(i,k)2939 !!! ENDDO2940 !!! ENDDO2941 2887 ENDIF 2888 ! 2889 CALL add_wake_tend & 2890 (d_deltat_the, d_deltaq_the, dsig0, ddens0, wkoccur1, 'the', abortphy) 2891 ! 2942 2892 ! 2943 2893 CALL add_phys_tend(d_u_ajs,d_v_ajs,d_t_ajs,d_q_ajs, & 2944 2894 dql0,dqi0,paprs,'thermals', abortphy,flag_inhib_tend) 2945 2895 ! 2946 !>jyg2947 !jyg<2948 2896 ! 2949 2897 CALL alpale_th( dtime, lmax_th, t_seri, cell_area, & … … 2952 2900 alp_bl, alp_bl_stat, & 2953 2901 proba_notrig, random_notrig) 2902 !>jyg 2954 2903 2955 2904 ! ------------------------------------------------------------------
Note: See TracChangeset
for help on using the changeset viewer.