- Timestamp:
- Feb 5, 2021, 10:00:13 AM (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/IPSL-CM6A-MR/libf/phylmd/pbl_surface_mod.F90
r3435 r3823 23 23 USE climb_wind_mod, ONLY : climb_wind_down, climb_wind_up 24 24 USE coef_diff_turb_mod, ONLY : coef_diff_turb 25 USE ioipsl_getin_p_mod, ONLY : getin_p 26 USE cdrag_mod 27 USE stdlevvar_mod 25 28 USE wx_pbl_mod, ONLY : wx_pbl_init, wx_pbl_final, & 26 29 !! wx_pbl_fuse_no_dts, wx_pbl_split_no_dts, & … … 42 45 INTEGER, SAVE :: iflag_pbl_surface_t2m_bug 43 46 !$OMP THREADPRIVATE(iflag_pbl_surface_t2m_bug) 47 integer, save :: iflag_new_t2mq2m 48 !$OMP THREADPRIVATE(iflag_new_t2mq2m) 44 49 !FC 45 50 ! integer, save :: iflag_frein … … 177 182 alb_dir_m, alb_dif_m, zxsens, zxevap, & 178 183 alb3_lic, runoff, snowhgt, qsnow, to_ice, sissnow, & 179 zxtsol, zxfluxlat, zt2m, qsat2m, 184 zxtsol, zxfluxlat, zt2m, qsat2m, zn2mout, & 180 185 d_t, d_q, d_u, d_v, d_t_diss, & 181 186 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012 … … 394 399 REAL, DIMENSION(klon), INTENT(OUT) :: zxfluxlat ! latent flux, mean for each grid point 395 400 REAL, DIMENSION(klon), INTENT(OUT) :: zt2m ! temperature at 2m, mean for each grid point 401 INTEGER, DIMENSION(klon, 6), INTENT(OUT) :: zn2mout ! nb of times t2m is out of the [tsol,temp] 396 402 REAL, DIMENSION(klon), INTENT(OUT) :: qsat2m 397 403 REAL, DIMENSION(klon, klev), INTENT(OUT) :: d_t ! change in temperature … … 537 543 REAL, DIMENSION(klon) :: y_flux_u1, y_flux_v1 538 544 REAL, DIMENSION(klon) :: yt2m, yq2m, yu10m 545 INTEGER, DIMENSION(klon, nbsrf, 6) :: yn2mout, yn2mout_x, yn2mout_w 546 INTEGER, DIMENSION(klon, nbsrf, 6) :: n2mout, n2mout_x, n2mout_w 539 547 REAL, DIMENSION(klon) :: yustar 540 548 REAL, DIMENSION(klon) :: ywstar … … 838 846 839 847 IF (first_call) THEN 848 849 iflag_new_t2mq2m=0 850 CALL getin_p('iflag_new_t2mq2m',iflag_new_t2mq2m) 851 print*,'pbl_iflag_new_t2mq2m=',iflag_new_t2mq2m 852 840 853 print*,'PBL SURFACE AVEC GUSTINESS' 841 854 first_call=.FALSE. … … 903 916 zxfluxlat(:)=0. 904 917 zt2m(:)=0. ; zq2m(:)=0. ; qsat2m(:)=0. ; rh2m(:)=0. 918 zn2mout(:,:)=0 ; 905 919 d_t(:,:)=0. ; d_t_diss(:,:)=0. ; d_q(:,:)=0. ; d_u(:,:)=0. ; d_v(:,:)=0. 906 920 zcoefh(:,:,:)=0. ; zcoefm(:,:,:)=0. … … 1821 1835 1822 1836 ! Calculate the temperature et relative humidity at 2m and the wind at 10m 1837 IF (iflag_new_t2mq2m==1) THEN 1838 CALL stdlevvarn(klon, knon, is_ter, zxli, & 1839 yu(:,1), yv(:,1), yt(:,1), yq(:,1), zgeo1, & 1840 yts, yqsurf, yz0m, yz0h, ypaprs(:,1), ypplay(:,1), & 1841 yt2m, yq2m, yt10m, yq10m, yu10m, yn2mout(:, nsrf, :)) 1842 ELSE 1823 1843 CALL stdlevvar(klon, knon, is_ter, zxli, & 1824 1844 yu(:,1), yv(:,1), yt(:,1), yq(:,1), zgeo1, & 1825 1845 yts, yqsurf, yz0m, yz0h, ypaprs(:,1), ypplay(:,1), & 1826 1846 yt2m, yq2m, yt10m, yq10m, yu10m, yustar) 1827 1847 ENDIF 1828 1848 ENDIF 1829 1849 … … 2614 2634 !!! jyg le 07/02/2012 2615 2635 IF (iflag_split .eq.0) THEN 2636 IF (iflag_new_t2mq2m==1) THEN 2637 CALL stdlevvarn(klon, knon, nsrf, zxli, & 2638 uzon, vmer, tair1, qair1, zgeo1, & 2639 tairsol, qairsol, yz0m, yz0h_oupas, psfce, patm, & 2640 yt2m, yq2m, yt10m, yq10m, yu10m, yn2mout(:, nsrf, :)) 2641 ELSE 2616 2642 CALL stdlevvar(klon, knon, nsrf, zxli, & 2617 2643 uzon, vmer, tair1, qair1, zgeo1, & 2618 2644 tairsol, qairsol, yz0m, yz0h_oupas, psfce, patm, & 2619 2645 yt2m, yq2m, yt10m, yq10m, yu10m, yustar) 2646 ENDIF 2620 2647 ELSE !(iflag_split .eq.0) 2648 IF (iflag_new_t2mq2m==1) THEN 2649 CALL stdlevvarn(klon, knon, nsrf, zxli, & 2650 uzon_x, vmer_x, tair1_x, qair1_x, zgeo1_x, & 2651 tairsol_x, qairsol, yz0m, yz0h_oupas, psfce, patm, & 2652 yt2m_x, yq2m_x, yt10m_x, yq10m_x, yu10m_x, yn2mout_x(:, nsrf, :)) 2653 CALL stdlevvarn(klon, knon, nsrf, zxli, & 2654 uzon_w, vmer_w, tair1_w, qair1_w, zgeo1_w, & 2655 tairsol_w, qairsol, yz0m, yz0h_oupas, psfce, patm, & 2656 yt2m_w, yq2m_w, yt10m_w, yq10m_w, yu10m_w, yn2mout_w(:, nsrf, :)) 2657 ELSE 2621 2658 CALL stdlevvar(klon, knon, nsrf, zxli, & 2622 2659 uzon_x, vmer_x, tair1_x, qair1_x, zgeo1_x, & … … 2627 2664 tairsol_w, qairsol, yz0m, yz0h_oupas, psfce, patm, & 2628 2665 yt2m_w, yq2m_w, yt10m_w, yq10m_w, yu10m_w, yustar_w) 2666 ENDIF 2629 2667 !!! 2630 2668 ENDIF ! (iflag_split .eq.0) … … 2640 2678 u10m(i,nsrf)=(yu10m(j) * uzon(j))/SQRT(uzon(j)**2+vmer(j)**2) 2641 2679 v10m(i,nsrf)=(yu10m(j) * vmer(j))/SQRT(uzon(j)**2+vmer(j)**2) 2680 ! 2681 DO k = 1, 6 2682 n2mout(i,nsrf,k) = yn2mout(j,nsrf,k) 2683 END DO 2684 ! 2642 2685 ENDDO 2643 2686 ELSE !(iflag_split .eq.0) … … 2650 2693 u10m_x(i,nsrf)=(yu10m_x(j) * uzon_x(j))/SQRT(uzon_x(j)**2+vmer_x(j)**2) 2651 2694 v10m_x(i,nsrf)=(yu10m_x(j) * vmer_x(j))/SQRT(uzon_x(j)**2+vmer_x(j)**2) 2695 ! 2696 DO k = 1, 6 2697 n2mout_x(i,nsrf,k) = yn2mout_x(j,nsrf,k) 2698 END DO 2699 ! 2652 2700 ENDDO 2653 2701 DO j=1, knon … … 2663 2711 u10m(i,nsrf) = u10m_x(i,nsrf) + wake_s(i)*(u10m_w(i,nsrf)-u10m_x(i,nsrf)) 2664 2712 v10m(i,nsrf) = v10m_x(i,nsrf) + wake_s(i)*(v10m_w(i,nsrf)-v10m_x(i,nsrf)) 2713 ! 2714 DO k = 1, 6 2715 n2mout_w(i,nsrf,k) = yn2mout_w(j,nsrf,k) 2716 END DO 2717 ! 2665 2718 ENDDO 2666 2719 !!! … … 2919 2972 ! 2920 2973 zxtsol(:) = 0.0 ; zxfluxlat(:) = 0.0 2921 zt2m(:) = 0.0 ; zq2m(:) = 0.0 2974 zt2m(:) = 0.0 ; zq2m(:) = 0.0 ; zn2mout(:,:) = 0 2922 2975 zustar(:)=0.0 ; zu10m(:) = 0.0 ; zv10m(:) = 0.0 2923 2976 s_pblh(:) = 0.0 ; s_plcl(:) = 0.0 … … 2972 3025 zt2m(i) = zt2m(i) + t2m(i,nsrf) * pctsrf(i,nsrf) 2973 3026 zq2m(i) = zq2m(i) + q2m(i,nsrf) * pctsrf(i,nsrf) 3027 ! 3028 DO k = 1, 6 3029 zn2mout(i,k) = zn2mout(i,k) + n2mout(i,nsrf,k) * pctsrf(i,nsrf) 3030 ENDDO 3031 ! 2974 3032 zustar(i) = zustar(i) + ustar(i,nsrf) * pctsrf(i,nsrf) 2975 3033 wstar(i,is_ave)=wstar(i,is_ave)+wstar(i,nsrf)*pctsrf(i,nsrf) … … 3003 3061 zt2m(i) = zt2m(i) + (t2m_x(i,nsrf)+wake_s(i)*(t2m_w(i,nsrf)-t2m_x(i,nsrf))) * pctsrf(i,nsrf) 3004 3062 zq2m(i) = zq2m(i) + q2m_x(i,nsrf) * pctsrf(i,nsrf) 3063 ! 3064 DO k = 1, 6 3065 zn2mout(i,k) = zn2mout(i,k) + n2mout_x(i,nsrf,k) * pctsrf(i,nsrf) 3066 ENDDO 3067 ! 3005 3068 zustar(i) = zustar(i) + ustar_x(i,nsrf) * pctsrf(i,nsrf) 3006 3069 wstar(i,is_ave)=wstar(i,is_ave)+wstar_x(i,nsrf)*pctsrf(i,nsrf) … … 3081 3144 DO nsrf = 1, nbsrf 3082 3145 DO i = 1, klon 3083 zxqsurf(i) = zxqsurf(i) + qsurf(i,nsrf) * pctsrf(i,nsrf)3146 zxqsurf(i) = zxqsurf(i) + MAX(qsurf(i,nsrf),0.0) * pctsrf(i,nsrf) 3084 3147 zxsnow(i) = zxsnow(i) + snow(i,nsrf) * pctsrf(i,nsrf) 3085 3148 ENDDO
Note: See TracChangeset
for help on using the changeset viewer.