Changeset 3826 for LMDZ6


Ignore:
Timestamp:
Feb 5, 2021, 1:23:18 PM (3 years ago)
Author:
musat
Message:

Nouveaux calculs 2m/10m activables par iflag_new_t2mq2m=1
Valeur par defaut iflag_new_t2mq2m=0 (<=> anciens calculs CMIP6)

Location:
LMDZ6/branches/IPSLCM6.0.15/libf/phylmd
Files:
4 added
5 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/IPSLCM6.0.15/libf/phylmd/pbl_surface_mod.F90

    r3200 r3826  
    2323  USE climb_wind_mod,      ONLY : climb_wind_down, climb_wind_up
    2424  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
    2628
    2729  IMPLICIT NONE
     
    3941  integer, save :: iflag_pbl_surface_t2m_bug
    4042  !$OMP THREADPRIVATE(iflag_pbl_surface_t2m_bug)
     43  integer, save :: iflag_new_t2mq2m
     44  !$OMP THREADPRIVATE(iflag_new_t2mq2m)
    4145!FC
    4246!  integer, save :: iflag_frein
     
    168172       alb_dir_m,    alb_dif_m,  zxsens,   zxevap,    &
    169173       alb3_lic,  runoff,    snowhgt,   qsnow,     to_ice,    sissnow,  &
    170        zxtsol,    zxfluxlat, zt2m,     qsat2m,       &
     174       zxtsol,    zxfluxlat, zt2m,     qsat2m, zn2mout, &
    171175       d_t,       d_q,       d_u,      d_v, d_t_diss, &
    172176!!! nrlmd+jyg le 02/05/2011 et le 20/02/2012
     
    382386    REAL, DIMENSION(klon),        INTENT(OUT)       :: zxfluxlat  ! latent flux, mean for each grid point
    383387    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]
    384389    REAL, DIMENSION(klon),        INTENT(OUT)       :: qsat2m
    385390    REAL, DIMENSION(klon, klev),  INTENT(OUT)       :: d_t        ! change in temperature
     
    519524    REAL, DIMENSION(klon)              :: y_flux_u1, y_flux_v1
    520525    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
    521528    REAL, DIMENSION(klon)              :: yustar
    522529    REAL, DIMENSION(klon)              :: ywstar
     
    819826
    820827    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
    821833       print*,'PBL SURFACE AVEC GUSTINESS'
    822834       first_call=.FALSE.
     
    880892 zxfluxlat(:)=0.
    881893 zt2m(:)=0. ; zq2m(:)=0. ; qsat2m(:)=0. ; rh2m(:)=0.
     894 zn2mout(:,:)=0 ;
    882895 d_t(:,:)=0. ; d_t_diss(:,:)=0. ; d_q(:,:)=0. ; d_u(:,:)=0. ; d_v(:,:)=0.
    883896 zxsens_x(:)=0. ; zxsens_w(:)=0. ; zxfluxlat_x(:)=0. ; zxfluxlat_w(:)=0.
     
    17941807
    17951808          ! 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
    17961815          CALL stdlevvar(klon, knon, is_ter, zxli, &
    17971816               yu(:,1), yv(:,1), yt(:,1), yq(:,1), zgeo1, &
    17981817               yts, yqsurf, yz0m, yz0h, ypaprs(:,1), ypplay(:,1), &
    17991818               yt2m, yq2m, yt10m, yq10m, yu10m, yustar)
    1800          
     1819          ENDIF
    18011820       END IF
    18021821
     
    25812600!!! jyg le 07/02/2012
    25822601       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
    25832608        CALL stdlevvar(klon, knon, nsrf, zxli, &
    25842609            uzon, vmer, tair1, qair1, zgeo1, &
    25852610            tairsol, qairsol, yz0m, yz0h_oupas, psfce, patm, &
    25862611            yt2m, yq2m, yt10m, yq10m, yu10m, yustar)
     2612        ENDIF
    25872613       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
    25882624        CALL stdlevvar(klon, knon, nsrf, zxli, &
    25892625            uzon_x, vmer_x, tair1_x, qair1_x, zgeo1_x, &
     
    25942630            tairsol_w, qairsol, yz0m, yz0h_oupas, psfce, patm, &
    25952631            yt2m_w, yq2m_w, yt10m_w, yq10m_w, yu10m_w, yustar_w)
     2632        ENDIF
    25962633!!!
    25972634       ENDIF  ! (iflag_split .eq.0)
     
    26072644          u10m(i,nsrf)=(yu10m(j) * uzon(j))/SQRT(uzon(j)**2+vmer(j)**2)
    26082645          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!
    26092651        END DO
    26102652       ELSE  !(iflag_split .eq.0)
     
    26172659          u10m_x(i,nsrf)=(yu10m_x(j) * uzon_x(j))/SQRT(uzon_x(j)**2+vmer_x(j)**2)
    26182660          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!
    26192666        END DO
    26202667        DO j=1, knon
     
    26302677          u10m(i,nsrf) = u10m_x(i,nsrf) + wake_s(i)*(u10m_w(i,nsrf)-u10m_x(i,nsrf))
    26312678          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!
    26322684        END DO
    26332685!!!
     
    28862938!
    28872939    zxtsol(:) = 0.0  ; zxfluxlat(:) = 0.0
    2888     zt2m(:) = 0.0    ; zq2m(:) = 0.0
     2940    zt2m(:) = 0.0    ; zq2m(:) = 0.0 ; zn2mout(:,:) = 0
    28892941    zustar(:)=0.0 ; zu10m(:) = 0.0   ; zv10m(:) = 0.0
    28902942    s_pblh(:) = 0.0  ; s_plcl(:) = 0.0
     
    29392991          zt2m(i)  = zt2m(i)  + t2m(i,nsrf)  * pctsrf(i,nsrf)
    29402992          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!
    29412998          zustar(i) = zustar(i) + ustar(i,nsrf) * pctsrf(i,nsrf)
    29422999          wstar(i,is_ave)=wstar(i,is_ave)+wstar(i,nsrf)*pctsrf(i,nsrf)
     
    29703027          zt2m(i)  = zt2m(i)  + (t2m_x(i,nsrf)+wake_s(i)*(t2m_w(i,nsrf)-t2m_x(i,nsrf))) * pctsrf(i,nsrf)
    29713028          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!
    29723034          zustar(i) = zustar(i) + ustar_x(i,nsrf) * pctsrf(i,nsrf)
    29733035          wstar(i,is_ave)=wstar(i,is_ave)+wstar_x(i,nsrf)*pctsrf(i,nsrf)
     
    30483110    DO nsrf = 1, nbsrf
    30493111       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)
    30513113          zxsnow(i)  = zxsnow(i)  + snow(i,nsrf)  * pctsrf(i,nsrf)
    30523114       END DO
  • LMDZ6/branches/IPSLCM6.0.15/libf/phylmd/phys_local_var_mod.F90

    r3665 r3826  
    376376      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: wbeff, convoccur, zmax_th, zq2m, zt2m
    377377!$OMP THREADPRIVATE(wbeff, convoccur, zmax_th, zq2m, zt2m)
    378      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zq2m_cor, zt2m_cor, zu10m_cor, zv10m_cor                                           
    379 !$OMP THREADPRIVATE(zq2m_cor, zt2m_cor, zu10m_cor, zv10m_cor)
    380378      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zt2m_min_mon, zt2m_max_mon
    381379!$OMP THREADPRIVATE(zt2m_min_mon, zt2m_max_mon)
     
    467465      REAL, ALLOCATABLE, SAVE, DIMENSION(:) :: p_tropopause, z_tropopause, t_tropopause
    468466!$OMP THREADPRIVATE(p_tropopause, z_tropopause, t_tropopause)
     467
     468      INTEGER,ALLOCATABLE,SAVE,DIMENSION(:,:) :: zn2mout
     469!$OMP THREADPRIVATE(zn2mout)
    469470
    470471#ifdef CPP_StratAer
     
    743744      ALLOCATE(wbeff(klon), convoccur(klon), zmax_th(klon))
    744745      ALLOCATE(zq2m(klon), zt2m(klon), weak_inversion(klon))
    745       ALLOCATE(zq2m_cor(klon), zt2m_cor(klon), zu10m_cor(klon), zv10m_cor(klon))
    746746      ALLOCATE(zt2m_min_mon(klon), zt2m_max_mon(klon))
    747747      ALLOCATE(t2m_min_mon(klon), t2m_max_mon(klon))
     
    810810      ALLOCATE (z_tropopause(klon))
    811811      ALLOCATE (t_tropopause(klon))
     812
     813      ALLOCATE(zn2mout(klon,6))
    812814
    813815#ifdef CPP_StratAer
     
    10381040      DEALLOCATE(wbeff, convoccur, zmax_th)
    10391041      DEALLOCATE(zq2m, zt2m, weak_inversion)
    1040       DEALLOCATE(zq2m_cor, zt2m_cor, zu10m_cor, zv10m_cor)
    10411042      DEALLOCATE(zt2m_min_mon, zt2m_max_mon)
    10421043      DEALLOCATE(t2m_min_mon, t2m_max_mon)
     
    10991100      DEALLOCATE (z_tropopause)
    11001101      DEALLOCATE (t_tropopause)
     1102
     1103      DEALLOCATE(zn2mout)
    11011104
    11021105#ifdef CPP_StratAer
  • LMDZ6/branches/IPSLCM6.0.15/libf/phylmd/phys_output_ctrlout_mod.F90

    r3616 r3826  
    273273      ctrl_out((/ 10, 6, 10, 10, 10, 10, 11, 11, 11, 11/), &
    274274    't2m_sic', "Temp 2m "//clnsurf(4), "K", (/ ('', i=1, 10) /)) /)
     275
     276  TYPE(ctrl_out), SAVE :: o_nt2mout = ctrl_out((/ 1, 1, 1, 5, 10, 10, 11, 11, 11, 11/), &
     277    'nt2mout', 'Nbt2m out of range complete computation', '-', (/ ('', i=1, 10) /))
     278  TYPE(ctrl_out), SAVE :: o_nq2mout = ctrl_out((/ 1, 1, 1, 5, 10, 10, 11, 11, 11, 11/), &
     279    'nq2mout', 'Nbq2m out of range complete computation', '-', (/ ('', i=1, 10) /))
     280  TYPE(ctrl_out), SAVE :: o_nu2mout = ctrl_out((/ 1, 1, 1, 5, 10, 10, 11, 11, 11, 11/), &
     281    'nu2mout', 'Nbu2m out of range complete computation', '-', (/ ('', i=1, 10) /))
     282
     283  TYPE(ctrl_out), SAVE :: o_nt2moutfg = ctrl_out((/ 1, 1, 1, 5, 10, 10, 11, 11, 11, 11/), &
     284    'nt2moutfg', 'Nbt2m out of range complete/fgRi1 computation', '-', (/ ('', i=1, 10) /))
     285  TYPE(ctrl_out), SAVE :: o_nq2moutfg = ctrl_out((/ 1, 1, 1, 5, 10, 10, 11, 11, 11, 11/), &
     286    'nq2moutfg', 'Nbq2m out of range complete/fgRi1 computation', '-', (/ ('', i=1, 10) /))
     287  TYPE(ctrl_out), SAVE :: o_nu2moutfg = ctrl_out((/ 1, 1, 1, 5, 10, 10, 11, 11, 11, 11/), &
     288    'nu2moutfg', 'Nbu2m out of range complete/fgRi1 computation', '-', (/ ('', i=1, 10) /))
    275289
    276290  TYPE(ctrl_out), SAVE :: o_gusts = ctrl_out((/ 1, 1, 1, 10, 10, 10, 11, 11, 11, 11/), &
  • LMDZ6/branches/IPSLCM6.0.15/libf/phylmd/phys_output_write_mod.F90

    r3616 r3826  
    3838         o_t2m, o_t2m_min, o_t2m_max, &
    3939         o_t2m_min_mon, o_t2m_max_mon, &
     40         o_nt2mout, o_nt2moutfg, &
     41         o_nq2mout, o_nq2moutfg, &
     42         o_nu2mout, o_nu2moutfg, &
    4043         o_q2m, o_ustar, o_u10m, o_v10m, &
    4144         o_wind10m, o_wind10max, o_wind100m, o_gusts, o_sicf, &
     
    247250
    248251    USE phys_local_var_mod, ONLY: zxfluxlat, slp, ptstar, pt0, zxtsol, zt2m, &
    249          zt2m_cor,zq2m_cor,zu10m_cor,zv10m_cor, &
    250          t2m_min_mon, t2m_max_mon, evap, &
     252         zn2mout, t2m_min_mon, t2m_max_mon, evap, &
    251253         l_mixmin,l_mix, &
    252254         zu10m, zv10m, zq2m, zustar, zxqsurf, &
     
    669671       CALL histwrite_phy(o_slp, slp)
    670672       CALL histwrite_phy(o_tsol, zxtsol)
    671        CALL histwrite_phy(o_t2m, zt2m_cor)
    672        CALL histwrite_phy(o_t2m_min, zt2m_cor)
    673        CALL histwrite_phy(o_t2m_max, zt2m_cor)
     673       CALL histwrite_phy(o_t2m, zt2m)
     674       CALL histwrite_phy(o_t2m_min, zt2m)
     675       CALL histwrite_phy(o_t2m_max, zt2m)
    674676       CALL histwrite_phy(o_t2m_max_mon, t2m_max_mon)
    675677       CALL histwrite_phy(o_t2m_min_mon, t2m_min_mon)
     
    677679       IF (vars_defined) THEN
    678680          DO i=1, klon
    679              zx_tmp_fi2d(i)=SQRT(zu10m_cor(i)*zu10m_cor(i)+zv10m_cor(i)*zv10m_cor(i))
     681             zx_tmp_fi2d(i)=real(zn2mout(i,1))
     682          ENDDO
     683       ENDIF
     684       CALL histwrite_phy(o_nt2mout, zx_tmp_fi2d)
     685
     686       IF (vars_defined) THEN
     687          DO i=1, klon
     688             zx_tmp_fi2d(i)=real(zn2mout(i,2))
     689          ENDDO
     690       ENDIF
     691       CALL histwrite_phy(o_nt2moutfg, zx_tmp_fi2d)
     692
     693       IF (vars_defined) THEN
     694          DO i=1, klon
     695             zx_tmp_fi2d(i)=real(zn2mout(i,3))
     696          ENDDO
     697       ENDIF
     698       CALL histwrite_phy(o_nq2mout, zx_tmp_fi2d)
     699
     700       IF (vars_defined) THEN
     701          DO i=1, klon
     702             zx_tmp_fi2d(i)=real(zn2mout(i,4))
     703          ENDDO
     704       ENDIF
     705       CALL histwrite_phy(o_nq2moutfg, zx_tmp_fi2d)
     706
     707       IF (vars_defined) THEN
     708          DO i=1, klon
     709             zx_tmp_fi2d(i)=real(zn2mout(i,5))
     710          ENDDO
     711       ENDIF
     712       CALL histwrite_phy(o_nu2mout, zx_tmp_fi2d)
     713
     714       IF (vars_defined) THEN
     715          DO i=1, klon
     716             zx_tmp_fi2d(i)=real(zn2mout(i,6))
     717          ENDDO
     718       ENDIF
     719       CALL histwrite_phy(o_nu2moutfg, zx_tmp_fi2d)
     720
     721       IF (vars_defined) THEN
     722          DO i=1, klon
     723             zx_tmp_fi2d(i)=SQRT(zu10m(i)*zu10m(i)+zv10m(i)*zv10m(i))
    680724          ENDDO
    681725       ENDIF
     
    684728       IF (vars_defined) THEN
    685729          DO i=1, klon
    686              zx_tmp_fi2d(i)=SQRT(zu10m_cor(i)*zu10m_cor(i)+zv10m_cor(i)*zv10m_cor(i))
     730             zx_tmp_fi2d(i)=SQRT(zu10m(i)*zu10m(i)+zv10m(i)*zv10m(i))
    687731          ENDDO
    688732       ENDIF
     
    721765       ENDIF
    722766       CALL histwrite_phy(o_sicf, zx_tmp_fi2d)
    723        CALL histwrite_phy(o_q2m, zq2m_cor)
    724        CALL histwrite_phy(o_ustar, zustar)
    725        CALL histwrite_phy(o_u10m, zu10m_cor)
    726        CALL histwrite_phy(o_v10m, zv10m_cor)
     767       CALL histwrite_phy(o_q2m, zq2m)
     768       IF (vars_defined) zx_tmp_fi2d = zustar
     769       CALL histwrite_phy(o_ustar, zx_tmp_fi2d)
     770       CALL histwrite_phy(o_u10m, zu10m)
     771       CALL histwrite_phy(o_v10m, zv10m)
    727772
    728773       IF (vars_defined) THEN
  • LMDZ6/branches/IPSLCM6.0.15/libf/phylmd/physiq_mod.F90

    r3633 r3826  
    121121       cdragm, cdragh,                   &
    122122       zustar, zu10m, zv10m, rh2m, qsat2m, &
    123        zq2m, zt2m, weak_inversion, &
    124        zq2m_cor,zt2m_cor,zu10m_cor,zv10m_cor, & ! pour corriger d'un bug
     123       zq2m, zt2m, zn2mout, weak_inversion, &
    125124       zt2m_min_mon, zt2m_max_mon,   &         ! pour calcul_divers.h
    126125       t2m_min_mon, t2m_max_mon,  &            ! pour calcul_divers.h
     
    601600                                                        ! gust-front in the grid cell.
    602601    !$OMP THREADPRIVATE(iflag_alp_wk_cond)
    603     INTEGER,  SAVE               :: iflag_bug_t2m_ipslcm61=0 !
    604     !$OMP THREADPRIVATE(iflag_bug_t2m_ipslcm61)
    605602
    606603    REAL t_w(klon,klev),q_w(klon,klev) ! temperature and moisture profiles in the wake region
     
    13031300       tau_gl=86400.*tau_gl
    13041301       print*,'debut physiq_mod tau_gl=',tau_gl
    1305        iflag_bug_t2m_ipslcm61 = 1
    1306        CALL getin_p('iflag_bug_t2m_ipslcm61', iflag_bug_t2m_ipslcm61)
    13071302       CALL getin_p('iflag_alp_wk_cond', iflag_alp_wk_cond)
    13081303       CALL getin_p('random_notrig_max',random_notrig_max)
     
    23422337                                !albedo SB <<<
    23432338            albsol3_lic,runoff,   snowhgt,   qsnow, to_ice, sissnow, &
    2344             zxtsol,    zxfluxlat, zt2m,    qsat2m,  &
     2339            zxtsol,    zxfluxlat, zt2m,    qsat2m,  zn2mout, &
    23452340            d_t_vdf,   d_q_vdf,   d_u_vdf, d_v_vdf, d_t_diss, &
    23462341                                !nrlmd<
     
    23892384!>jyg
    23902385       ENDIF
    2391         if ( iflag_bug_t2m_ipslcm61 == 0 ) THEN
    2392           CALL borne_var_surf( klon,nbsrf,                     &
    2393             t_seri(:,1),q_seri(:,1),u_seri(:,1),v_seri(:,1),    &
    2394             ftsol,pctsrf,                                       &
    2395             t2m, q2m, u10m, v10m,                               &
    2396             zt2m_cor, zq2m_cor, zu10m_cor, zv10m_cor)
    2397         ELSE
    2398           zt2m_cor(:)=zt2m(:)
    2399           zq2m_cor(:)=zq2m(:)
    2400           zu10m_cor(:)=zu10m(:)
    2401           zv10m_cor(:)=zv10m(:)
    2402         ENDIF
    2403 
    2404 
    2405 
    2406 
    24072386
    24082387       !---------------------------------------------------------------------
Note: See TracChangeset for help on using the changeset viewer.