- Timestamp:
- Feb 5, 2021, 1:23:18 PM (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/IPSLCM6.0.15/libf/phylmd/pbl_surface_mod.F90
r3200 r3826 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 25 USE ioipsl_getin_p_mod, ONLY : getin_p 26 USE cdrag_mod 27 USE stdlevvar_mod 26 28 27 29 IMPLICIT NONE … … 39 41 integer, save :: iflag_pbl_surface_t2m_bug 40 42 !$OMP THREADPRIVATE(iflag_pbl_surface_t2m_bug) 43 integer, save :: iflag_new_t2mq2m 44 !$OMP THREADPRIVATE(iflag_new_t2mq2m) 41 45 !FC 42 46 ! integer, save :: iflag_frein … … 168 172 alb_dir_m, alb_dif_m, zxsens, zxevap, & 169 173 alb3_lic, runoff, snowhgt, qsnow, to_ice, sissnow, & 170 zxtsol, zxfluxlat, zt2m, qsat2m, 174 zxtsol, zxfluxlat, zt2m, qsat2m, zn2mout, & 171 175 d_t, d_q, d_u, d_v, d_t_diss, & 172 176 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012 … … 382 386 REAL, DIMENSION(klon), INTENT(OUT) :: zxfluxlat ! latent flux, mean for each grid point 383 387 REAL, DIMENSION(klon), INTENT(OUT) :: zt2m ! temperature at 2m, mean for each grid point 388 INTEGER, DIMENSION(klon, 6), INTENT(OUT) :: zn2mout ! nb of times t2m is out of the [tsol,temp] 384 389 REAL, DIMENSION(klon), INTENT(OUT) :: qsat2m 385 390 REAL, DIMENSION(klon, klev), INTENT(OUT) :: d_t ! change in temperature … … 519 524 REAL, DIMENSION(klon) :: y_flux_u1, y_flux_v1 520 525 REAL, DIMENSION(klon) :: yt2m, yq2m, yu10m 526 INTEGER, DIMENSION(klon, nbsrf, 6) :: yn2mout, yn2mout_x, yn2mout_w 527 INTEGER, DIMENSION(klon, nbsrf, 6) :: n2mout, n2mout_x, n2mout_w 521 528 REAL, DIMENSION(klon) :: yustar 522 529 REAL, DIMENSION(klon) :: ywstar … … 819 826 820 827 IF (first_call) THEN 828 829 iflag_new_t2mq2m=0 830 CALL getin_p('iflag_new_t2mq2m',iflag_new_t2mq2m) 831 print*,'pbl_iflag_new_t2mq2m=',iflag_new_t2mq2m 832 821 833 print*,'PBL SURFACE AVEC GUSTINESS' 822 834 first_call=.FALSE. … … 880 892 zxfluxlat(:)=0. 881 893 zt2m(:)=0. ; zq2m(:)=0. ; qsat2m(:)=0. ; rh2m(:)=0. 894 zn2mout(:,:)=0 ; 882 895 d_t(:,:)=0. ; d_t_diss(:,:)=0. ; d_q(:,:)=0. ; d_u(:,:)=0. ; d_v(:,:)=0. 883 896 zxsens_x(:)=0. ; zxsens_w(:)=0. ; zxfluxlat_x(:)=0. ; zxfluxlat_w(:)=0. … … 1794 1807 1795 1808 ! Calculate the temperature et relative humidity at 2m and the wind at 10m 1809 IF (iflag_new_t2mq2m==1) THEN 1810 CALL stdlevvarn(klon, knon, is_ter, zxli, & 1811 yu(:,1), yv(:,1), yt(:,1), yq(:,1), zgeo1, & 1812 yts, yqsurf, yz0m, yz0h, ypaprs(:,1), ypplay(:,1), & 1813 yt2m, yq2m, yt10m, yq10m, yu10m, yn2mout(:, nsrf, :)) 1814 ELSE 1796 1815 CALL stdlevvar(klon, knon, is_ter, zxli, & 1797 1816 yu(:,1), yv(:,1), yt(:,1), yq(:,1), zgeo1, & 1798 1817 yts, yqsurf, yz0m, yz0h, ypaprs(:,1), ypplay(:,1), & 1799 1818 yt2m, yq2m, yt10m, yq10m, yu10m, yustar) 1800 1819 ENDIF 1801 1820 END IF 1802 1821 … … 2581 2600 !!! jyg le 07/02/2012 2582 2601 IF (iflag_split .eq.0) THEN 2602 IF (iflag_new_t2mq2m==1) THEN 2603 CALL stdlevvarn(klon, knon, nsrf, zxli, & 2604 uzon, vmer, tair1, qair1, zgeo1, & 2605 tairsol, qairsol, yz0m, yz0h_oupas, psfce, patm, & 2606 yt2m, yq2m, yt10m, yq10m, yu10m, yn2mout(:, nsrf, :)) 2607 ELSE 2583 2608 CALL stdlevvar(klon, knon, nsrf, zxli, & 2584 2609 uzon, vmer, tair1, qair1, zgeo1, & 2585 2610 tairsol, qairsol, yz0m, yz0h_oupas, psfce, patm, & 2586 2611 yt2m, yq2m, yt10m, yq10m, yu10m, yustar) 2612 ENDIF 2587 2613 ELSE !(iflag_split .eq.0) 2614 IF (iflag_new_t2mq2m==1) THEN 2615 CALL stdlevvarn(klon, knon, nsrf, zxli, & 2616 uzon_x, vmer_x, tair1_x, qair1_x, zgeo1_x, & 2617 tairsol_x, qairsol, yz0m, yz0h_oupas, psfce, patm, & 2618 yt2m_x, yq2m_x, yt10m_x, yq10m_x, yu10m_x, yn2mout_x(:, nsrf, :)) 2619 CALL stdlevvarn(klon, knon, nsrf, zxli, & 2620 uzon_w, vmer_w, tair1_w, qair1_w, zgeo1_w, & 2621 tairsol_w, qairsol, yz0m, yz0h_oupas, psfce, patm, & 2622 yt2m_w, yq2m_w, yt10m_w, yq10m_w, yu10m_w, yn2mout_w(:, nsrf, :)) 2623 ELSE 2588 2624 CALL stdlevvar(klon, knon, nsrf, zxli, & 2589 2625 uzon_x, vmer_x, tair1_x, qair1_x, zgeo1_x, & … … 2594 2630 tairsol_w, qairsol, yz0m, yz0h_oupas, psfce, patm, & 2595 2631 yt2m_w, yq2m_w, yt10m_w, yq10m_w, yu10m_w, yustar_w) 2632 ENDIF 2596 2633 !!! 2597 2634 ENDIF ! (iflag_split .eq.0) … … 2607 2644 u10m(i,nsrf)=(yu10m(j) * uzon(j))/SQRT(uzon(j)**2+vmer(j)**2) 2608 2645 v10m(i,nsrf)=(yu10m(j) * vmer(j))/SQRT(uzon(j)**2+vmer(j)**2) 2646 ! 2647 DO k = 1, 6 2648 n2mout(i,nsrf,k) = yn2mout(j,nsrf,k) 2649 END DO 2650 ! 2609 2651 END DO 2610 2652 ELSE !(iflag_split .eq.0) … … 2617 2659 u10m_x(i,nsrf)=(yu10m_x(j) * uzon_x(j))/SQRT(uzon_x(j)**2+vmer_x(j)**2) 2618 2660 v10m_x(i,nsrf)=(yu10m_x(j) * vmer_x(j))/SQRT(uzon_x(j)**2+vmer_x(j)**2) 2661 ! 2662 DO k = 1, 6 2663 n2mout_x(i,nsrf,k) = yn2mout_x(j,nsrf,k) 2664 END DO 2665 ! 2619 2666 END DO 2620 2667 DO j=1, knon … … 2630 2677 u10m(i,nsrf) = u10m_x(i,nsrf) + wake_s(i)*(u10m_w(i,nsrf)-u10m_x(i,nsrf)) 2631 2678 v10m(i,nsrf) = v10m_x(i,nsrf) + wake_s(i)*(v10m_w(i,nsrf)-v10m_x(i,nsrf)) 2679 ! 2680 DO k = 1, 6 2681 n2mout_w(i,nsrf,k) = yn2mout_w(j,nsrf,k) 2682 END DO 2683 ! 2632 2684 END DO 2633 2685 !!! … … 2886 2938 ! 2887 2939 zxtsol(:) = 0.0 ; zxfluxlat(:) = 0.0 2888 zt2m(:) = 0.0 ; zq2m(:) = 0.0 2940 zt2m(:) = 0.0 ; zq2m(:) = 0.0 ; zn2mout(:,:) = 0 2889 2941 zustar(:)=0.0 ; zu10m(:) = 0.0 ; zv10m(:) = 0.0 2890 2942 s_pblh(:) = 0.0 ; s_plcl(:) = 0.0 … … 2939 2991 zt2m(i) = zt2m(i) + t2m(i,nsrf) * pctsrf(i,nsrf) 2940 2992 zq2m(i) = zq2m(i) + q2m(i,nsrf) * pctsrf(i,nsrf) 2993 ! 2994 DO k = 1, 6 2995 zn2mout(i,k) = zn2mout(i,k) + n2mout(i,nsrf,k) * pctsrf(i,nsrf) 2996 ENDDO 2997 ! 2941 2998 zustar(i) = zustar(i) + ustar(i,nsrf) * pctsrf(i,nsrf) 2942 2999 wstar(i,is_ave)=wstar(i,is_ave)+wstar(i,nsrf)*pctsrf(i,nsrf) … … 2970 3027 zt2m(i) = zt2m(i) + (t2m_x(i,nsrf)+wake_s(i)*(t2m_w(i,nsrf)-t2m_x(i,nsrf))) * pctsrf(i,nsrf) 2971 3028 zq2m(i) = zq2m(i) + q2m_x(i,nsrf) * pctsrf(i,nsrf) 3029 ! 3030 DO k = 1, 6 3031 zn2mout(i,k) = zn2mout(i,k) + n2mout_x(i,nsrf,k) * pctsrf(i,nsrf) 3032 ENDDO 3033 ! 2972 3034 zustar(i) = zustar(i) + ustar_x(i,nsrf) * pctsrf(i,nsrf) 2973 3035 wstar(i,is_ave)=wstar(i,is_ave)+wstar_x(i,nsrf)*pctsrf(i,nsrf) … … 3048 3110 DO nsrf = 1, nbsrf 3049 3111 DO i = 1, klon 3050 zxqsurf(i) = zxqsurf(i) + qsurf(i,nsrf) * pctsrf(i,nsrf)3112 zxqsurf(i) = zxqsurf(i) + MAX(qsurf(i,nsrf),0.0) * pctsrf(i,nsrf) 3051 3113 zxsnow(i) = zxsnow(i) + snow(i,nsrf) * pctsrf(i,nsrf) 3052 3114 END DO
Note: See TracChangeset
for help on using the changeset viewer.