Ignore:
Timestamp:
Apr 24, 2016, 12:38:19 PM (9 years ago)
Author:
oboucher
Message:

Various changes to diagnose properly 2D tendency in q, ql, qs from dynamics
as previous diagnostics were incorrect.
Cleaned up all such diagnostics in physiq_mod.F90 as well

Location:
LMDZ5/trunk/libf/phylmd
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/trunk/libf/phylmd/phyetat0.F90

    r2497 r2499  
    1212       qsol, fevap, z0m, z0h, agesno, &
    1313       du_gwd_rando, du_gwd_front, entr_therm, f0, fm_therm, &
    14        falb_dir, falb_dif, &
     14       falb_dir, falb_dif, prw_ancien, prlw_ancien, prsw_ancien, &
    1515       ftsol, pbl_tke, pctsrf, q_ancien, ql_ancien, qs_ancien, radpas, radsol, rain_fall, ratqs, &
    1616       rnebcon, rugoro, sig1, snow_fall, solaire_etat0, sollw, sollwdown, &
    1717       solsw, t_ancien, u_ancien, v_ancien, w01, wake_cstar, wake_deltaq, &
    1818       wake_deltat, wake_delta_pbl_TKE, delta_tsurf, wake_fip, wake_pe, &
    19        wake_s, zgam, &
    20        zmax0, zmea, zpic, zsig, &
     19       wake_s, zgam, zmax0, zmea, zpic, zsig, &
    2120       zstd, zthe, zval, ale_bl, ale_bl_trig, alp_bl
    2221  USE geometry_mod, ONLY : longitude_deg, latitude_deg
     
    322321
    323322  ancien_ok=.true.
    324   ql_ancien=0.;qs_ancien=0.
    325323  ancien_ok=ancien_ok.AND.phyetat0_get(klev,t_ancien,"TANCIEN","TANCIEN",0.)
    326324  ancien_ok=ancien_ok.AND.phyetat0_get(klev,q_ancien,"QANCIEN","QANCIEN",0.)
     
    329327  ancien_ok=ancien_ok.AND.phyetat0_get(klev,u_ancien,"UANCIEN","UANCIEN",0.)
    330328  ancien_ok=ancien_ok.AND.phyetat0_get(klev,v_ancien,"VANCIEN","VANCIEN",0.)
     329  ancien_ok=ancien_ok.AND.phyetat0_get(1,prw_ancien,"PRWANCIEN","PRWANCIEN",0.)
     330  ancien_ok=ancien_ok.AND.phyetat0_get(1,prlw_ancien,"PRLWANCIEN","PRLWANCIEN",0.)
     331  ancien_ok=ancien_ok.AND.phyetat0_get(1,prsw_ancien,"PRSWANCIEN","PRSWANCIEN",0.)
    331332
    332333  ! Ehouarn: addtional tests to check if t_ancien, q_ancien contain
    333334  !          dummy values (as is the case when generated by ce0l,
    334335  !          or by iniaqua)
    335   if ( (maxval(q_ancien).eq.minval(q_ancien)) .or. &
     336  if ( (maxval(q_ancien).eq.minval(q_ancien))       .or. &
     337       (maxval(ql_ancien).eq.minval(ql_ancien))     .or. &
     338       (maxval(qs_ancien).eq.minval(qs_ancien))     .or. &
     339       (maxval(prw_ancien).eq.minval(prw_ancien))   .or. &
     340       (maxval(prlw_ancien).eq.minval(prlw_ancien)) .or. &
     341       (maxval(prsw_ancien).eq.minval(prsw_ancien)) .or. &
    336342       (maxval(t_ancien).eq.minval(t_ancien)) ) then
    337343    ancien_ok=.false.
  • LMDZ5/trunk/libf/phylmd/phyredem.F90

    r2497 r2499  
    99  USE fonte_neige_mod,  ONLY : fonte_neige_final
    1010  USE pbl_surface_mod,  ONLY : pbl_surface_final
    11   USE phys_state_var_mod, ONLY: radpas, zmasq, pctsrf, ftsol, falb_dir, &
     11  USE phys_state_var_mod, ONLY: radpas, zmasq, pctsrf, ftsol, falb_dir,      &
    1212                                falb_dif, qsol, fevap, radsol, solsw, sollw, &
    13                                 sollwdown, rain_fall, snow_fall, z0m, z0h, &
    14                                 agesno, zmea, zstd, zsig, zgam, zthe, zpic, &
    15                                 zval, rugoro, t_ancien, q_ancien, ql_ancien, qs_ancien,  u_ancien, &
    16                                 v_ancien, clwcon, rnebcon, ratqs, pbl_tke, &
    17                                 wake_delta_pbl_tke, zmax0, f0, sig1, w01, &
    18                                 wake_deltat, wake_deltaq, wake_s, wake_cstar, &
    19                                 wake_pe, wake_fip, fm_therm, entr_therm, &
    20                                 detr_therm, Ale_bl, Ale_bl_trig, Alp_bl, &
     13                                sollwdown, rain_fall, snow_fall, z0m, z0h,   &
     14                                agesno, zmea, zstd, zsig, zgam, zthe, zpic,  &
     15                                zval, rugoro, t_ancien, q_ancien,            &
     16                                prw_ancien, prlw_ancien, prsw_ancien,        &
     17                                ql_ancien, qs_ancien,  u_ancien,             &
     18                                v_ancien, clwcon, rnebcon, ratqs, pbl_tke,   &
     19                                wake_delta_pbl_tke, zmax0, f0, sig1, w01,    &
     20                                wake_deltat, wake_deltaq, wake_s, wake_cstar,&
     21                                wake_pe, wake_fip, fm_therm, entr_therm,     &
     22                                detr_therm, Ale_bl, Ale_bl_trig, Alp_bl,     &
    2123                                du_gwd_rando, du_gwd_front
    2224  USE geometry_mod, ONLY : longitude_deg, latitude_deg
     
    205207  CALL put_field("QSANCIEN", "QSANCIEN", qs_ancien)
    206208
    207   CALL put_field("UANCIEN", "", u_ancien)
    208 
    209   CALL put_field("VANCIEN", "", v_ancien)
     209  CALL put_field("PRWANCIEN", "PRWANCIEN", prw_ancien)
     210
     211  CALL put_field("PRLWANCIEN", "PRLWANCIEN", prlw_ancien)
     212
     213  CALL put_field("PRSWANCIEN", "PRSWANCIEN", prsw_ancien)
     214
     215  CALL put_field("UANCIEN", "UANCIEN", u_ancien)
     216
     217  CALL put_field("VANCIEN", "VANCIEN", v_ancien)
    210218
    211219  CALL put_field("CLWCON", "Eau liquide convective", clwcon)
  • LMDZ5/trunk/libf/phylmd/phys_local_var_mod.F90

    r2496 r2499  
    2323      REAL, SAVE, ALLOCATABLE :: d_ql_dyn(:,:), d_qs_dyn(:,:)
    2424      !$OMP THREADPRIVATE(d_ql_dyn, d_qs_dyn)
     25      REAL, SAVE, ALLOCATABLE :: d_q_dyn2d(:), d_ql_dyn2d(:), d_qs_dyn2d(:)
     26      !$OMP THREADPRIVATE(d_q_dyn2d, d_ql_dyn2d, d_qs_dyn2d)
    2527      REAL, SAVE, ALLOCATABLE :: d_u_dyn(:,:), d_v_dyn(:,:)
    2628      !$OMP THREADPRIVATE(d_u_dyn, d_v_dyn)
     
    404406      allocate(d_t_dyn(klon,klev),d_q_dyn(klon,klev))
    405407      allocate(d_ql_dyn(klon,klev),d_qs_dyn(klon,klev))
     408      allocate(d_q_dyn2d(klon),d_ql_dyn2d(klon),d_qs_dyn2d(klon))
    406409      allocate(d_u_dyn(klon,klev),d_v_dyn(klon,klev))
    407410      allocate(d_tr_dyn(klon,klev,nbtr))                   !RomP
     
    619622      deallocate(d_t_dyn,d_q_dyn)
    620623      deallocate(d_ql_dyn,d_qs_dyn)
     624      deallocate(d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d)
    621625      deallocate(d_u_dyn,d_v_dyn)
    622626      deallocate(d_tr_dyn)                      !RomP
  • LMDZ5/trunk/libf/phylmd/phys_output_write_mod.F90

    r2496 r2499  
    233233         lcc, lcc3d, lcc3dcon, lcc3dstra, reffclwtop, &
    234234         ec550aer, flwc, fiwc, t_seri, theta, q_seri, &
    235 !jyg<
    236 !!         ql_seri, zphi, u_seri, v_seri, omega, cldfra, &
    237235         ql_seri, tr_seri, &
    238236         zphi, u_seri, v_seri, omega, cldfra, &
    239 !>jyg
    240          rneb, rnebjn, zx_rh, d_t_dyn, d_q_dyn, &
    241          d_ql_dyn, d_qs_dyn, &
     237         rneb, rnebjn, zx_rh, d_t_dyn,  &
     238         d_q_dyn,  d_ql_dyn, d_qs_dyn, &
     239         d_q_dyn2d,  d_ql_dyn2d, d_qs_dyn2d, &
    242240         d_u_dyn, d_v_dyn, d_t_con, d_t_ajsb, d_t_ajs, &
    243241         d_u_ajs, d_v_ajs, &
     
    11271125
    11281126       CALL histwrite_phy(o_dqdyn, d_q_dyn)
    1129        CALL water_int(klon,klev,d_q_dyn,zmasse,zx_tmp_fi2d)
    1130        CALL histwrite_phy(o_dqdyn2d,zx_tmp_fi2d)
     1127
     1128       CALL histwrite_phy(o_dqdyn2d,d_q_dyn2d)
    11311129
    11321130       CALL histwrite_phy(o_dqldyn, d_ql_dyn)
    1133        CALL water_int(klon,klev,d_ql_dyn,zmasse,zx_tmp_fi2d)
    1134        CALL histwrite_phy(o_dqldyn2d,zx_tmp_fi2d)
     1131
     1132       CALL histwrite_phy(o_dqldyn2d, d_ql_dyn2d)
    11351133
    11361134       CALL histwrite_phy(o_dqsdyn, d_qs_dyn)
    1137        CALL water_int(klon,klev,d_qs_dyn,zmasse,zx_tmp_fi2d)
    1138        CALL histwrite_phy(o_dqsdyn2d,zx_tmp_fi2d)
     1135
     1136       CALL histwrite_phy(o_dqsdyn2d, d_qs_dyn2d)
    11391137
    11401138       CALL histwrite_phy(o_dudyn, d_u_dyn)
  • LMDZ5/trunk/libf/phylmd/phys_state_var_mod.F90

    r2497 r2499  
    6666      REAL, ALLOCATABLE, SAVE :: ql_ancien(:,:), qs_ancien(:,:)
    6767!$OMP THREADPRIVATE(ql_ancien, qs_ancien)
     68      REAL, ALLOCATABLE, SAVE :: prw_ancien(:), prlw_ancien(:), prsw_ancien(:)
     69!$OMP THREADPRIVATE(prw_ancien, prlw_ancien, prsw_ancien)
    6870      REAL, ALLOCATABLE, SAVE :: u_ancien(:,:), v_ancien(:,:)
    6971!$OMP THREADPRIVATE(u_ancien, v_ancien)
     
    444446      ALLOCATE(t_ancien(klon,klev), q_ancien(klon,klev))
    445447      ALLOCATE(ql_ancien(klon,klev), qs_ancien(klon,klev))
     448      ALLOCATE(prw_ancien(klon), prlw_ancien(klon), prsw_ancien(klon))
    446449      ALLOCATE(u_ancien(klon,klev), v_ancien(klon,klev))
    447450!!! Rom P >>>
     
    605608      deallocate(rugoro, t_ancien, q_ancien, clwcon, rnebcon)
    606609      deallocate(qs_ancien, ql_ancien)
     610      deallocate(prw_ancien, prlw_ancien, prsw_ancien)
    607611      deallocate(qtc_cv,sigt_cv)
    608       deallocate(        u_ancien, v_ancien                 )
    609       deallocate(        tr_ancien)                           !RomP
     612      deallocate(u_ancien, v_ancien)
     613      deallocate(tr_ancien)                           !RomP
    610614      deallocate(ratqs, pbl_tke,coefh,coefm)
    611615!nrlmd<
  • LMDZ5/trunk/libf/phylmd/physiq_mod.F90

    r2496 r2499  
    10431043    forall (k=1: nbp_lev) zmasse(:, k) = (paprs(:, k)-paprs(:, k+1)) / rg
    10441044
    1045 
    1046 
    10471045    modname = 'physiq'
    10481046    !IM
     
    15991597    !--store initial water burden
    16001598    qql1(:)=0.0
    1601     DO i = 1, klon
    1602       DO k = 1, klev
    1603         qql1(i)=qql1(i)+(q_seri(i,k)+ql_seri(i,k))*zmasse(i,k)
    1604       ENDDO
     1599    DO k = 1, klev
     1600      qql1(:)=qql1(:)+(q_seri(:,k)+ql_seri(:,k)+qs_seri(:,k))*zmasse(:,k)
    16051601    ENDDO
    16061602    ENDIF
     
    16561652    !
    16571653    IF (ancien_ok) THEN
    1658        DO k = 1, klev
    1659           DO i = 1, klon
    1660              d_u_dyn(i,k) = (u_seri(i,k)-u_ancien(i,k))/dtime
    1661              d_v_dyn(i,k) = (v_seri(i,k)-v_ancien(i,k))/dtime
    1662              d_t_dyn(i,k) = (t_seri(i,k)-t_ancien(i,k))/dtime
    1663              d_q_dyn(i,k) = (q_seri(i,k)-q_ancien(i,k))/dtime
    1664              d_ql_dyn(i,k) = (ql_seri(i,k)-ql_ancien(i,k))/dtime
    1665              d_qs_dyn(i,k) = (qs_seri(i,k)-qs_ancien(i,k))/dtime
    1666           ENDDO
    1667        ENDDO
     1654    !
     1655       d_u_dyn(:,:)  = (u_seri(:,:)-u_ancien(:,:))/dtime
     1656       d_v_dyn(:,:)  = (v_seri(:,:)-v_ancien(:,:))/dtime
     1657       d_t_dyn(:,:)  = (t_seri(:,:)-t_ancien(:,:))/dtime
     1658       d_q_dyn(:,:)  = (q_seri(:,:)-q_ancien(:,:))/dtime
     1659       d_ql_dyn(:,:) = (ql_seri(:,:)-ql_ancien(:,:))/dtime
     1660       d_qs_dyn(:,:) = (qs_seri(:,:)-qs_ancien(:,:))/dtime
     1661       CALL water_int(klon,klev,q_seri,zmasse,zx_tmp_fi2d)
     1662       d_q_dyn2d(:)=(zx_tmp_fi2d(:)-prw_ancien(:))/dtime
     1663       CALL water_int(klon,klev,ql_seri,zmasse,zx_tmp_fi2d)
     1664       d_ql_dyn2d(:)=(zx_tmp_fi2d(:)-prlw_ancien(:))/dtime
     1665       CALL water_int(klon,klev,qs_seri,zmasse,zx_tmp_fi2d)
     1666       d_qs_dyn2d(:)=(zx_tmp_fi2d(:)-prsw_ancien(:))/dtime
    16681667       ! !! RomP >>>   td dyn traceur
    1669        !!     IF (nqtot.GE.3) THEN       ! jyg
    1670        !!        DO iq = 3, nqtot        ! jyg
    1671        IF (nqtot.GE.nqo+1) THEN     ! jyg
     1668       IF (nqtot.GT.nqo) THEN     ! jyg
    16721669          DO iq = nqo+1, nqtot      ! jyg
    1673              DO k = 1, klev
    1674                 DO i = 1, klon
    1675                    !! d_tr_dyn(i,k,iq-2)= &                               ! jyg
    1676                    !!    (tr_seri(i,k,iq-2)-tr_ancien(i,k,iq-2))/dtime    ! jyg
    1677                    d_tr_dyn(i,k,iq-nqo)= &                                ! jyg
    1678                         (tr_seri(i,k,iq-nqo)-tr_ancien(i,k,iq-nqo))/dtime ! jyg
    1679                    !         iiq=niadv(iq)
    1680                    ! print*,i,k," d_tr_dyn",d_tr_dyn(i,k,iq-nqo),"tra:",iq,&
    1681                    !  tname(iiq)
    1682                 ENDDO
    1683              ENDDO
     1670              d_tr_dyn(:,:,iq-nqo)=(tr_seri(:,:,iq-nqo)-tr_ancien(:,:,iq-nqo))/dtime ! jyg
    16841671          ENDDO
    16851672       ENDIF
    16861673       ! !! RomP <<<
    16871674    ELSE
    1688        DO k = 1, klev
    1689           DO i = 1, klon
    1690              d_u_dyn(i,k) = 0.0
    1691              d_v_dyn(i,k) = 0.0
    1692              d_t_dyn(i,k) = 0.0
    1693              d_q_dyn(i,k) = 0.0
    1694              d_ql_dyn(i,k) = 0.0
    1695              d_qs_dyn(i,k) = 0.0
    1696           ENDDO
    1697        ENDDO
     1675       d_u_dyn(:,:)  = 0.0
     1676       d_v_dyn(:,:)  = 0.0
     1677       d_t_dyn(:,:)  = 0.0
     1678       d_q_dyn(:,:)  = 0.0
     1679       d_ql_dyn(:,:) = 0.0
     1680       d_qs_dyn(:,:) = 0.0
     1681       d_q_dyn2d(:)  = 0.0
     1682       d_ql_dyn2d(:) = 0.0
     1683       d_qs_dyn2d(:) = 0.0
    16981684       ! !! RomP >>>   td dyn traceur
    1699        !!     IF (nqtot.GE.3) THEN                                     ! jyg
    1700        !!        DO iq = 3, nqtot                                      ! jyg
    1701        IF (nqtot.GE.nqo+1) THEN                                        ! jyg
    1702           DO iq = nqo+1, nqtot                                         ! jyg
    1703              DO k = 1, klev
    1704                 DO i = 1, klon
    1705                    !! d_tr_dyn(i,k,iq-2)= 0.0                            ! jyg
    1706                    d_tr_dyn(i,k,iq-nqo)= 0.0                             ! jyg
    1707                 ENDDO
    1708              ENDDO
     1685       IF (nqtot.GT.nqo) THEN                                       ! jyg
     1686          DO iq = nqo+1, nqtot                                      ! jyg
     1687              d_tr_dyn(:,:,iq-nqo)= 0.0                             ! jyg
    17091688          ENDDO
    17101689       ENDIF
     
    43064285    !   prlw = colonne eau liquide
    43074286    !   prlw = colonne eau solide
    4308     DO i = 1, klon
    4309        prw(i) = 0.
    4310        prlw(i) = 0.
    4311        prsw(i) = 0.
    4312        DO k = 1, klev
    4313           prw(i) = prw(i) + &
    4314                q_seri(i,k)*(paprs(i,k)-paprs(i,k+1))/RG
    4315           prlw(i) = prlw(i) + &
    4316                ql_seri(i,k)*(paprs(i,k)-paprs(i,k+1))/RG
    4317           prsw(i) = prsw(i) + &
    4318                qs_seri(i,k)*(paprs(i,k)-paprs(i,k+1))/RG
    4319        ENDDO
     4287    prw(:) = 0.
     4288    prlw(:) = 0.
     4289    prsw(:) = 0.
     4290    DO k = 1, klev
     4291       prw(:)  = prw(:)  + q_seri(:,k)*zmasse(:,k)
     4292       prlw(:) = prlw(:) + ql_seri(:,k)*zmasse(:,k)
     4293       prsw(:) = prsw(:) + qs_seri(:,k)*zmasse(:,k)
    43204294    ENDDO
    43214295    !
     
    43954369    IF (mass_fixer) THEN
    43964370    qql2(:)=0.0
    4397     DO i = 1, klon
    4398       DO k = 1, klev
    4399         qql2(i)=qql2(i)+(q_seri(i,k)+ql_seri(i,k))*zmasse(i,k)
    4400       ENDDO
     4371    DO k = 1, klev
     4372      qql2(:)=qql2(:)+(q_seri(:,k)+ql_seri(:,k)+qs_seri(:,k))*zmasse(:,k)
    44014373    ENDDO
    44024374    DO i = 1, klon
     
    44134385    ! Sauvegarder les valeurs de t et q a la fin de la physique:
    44144386    !
    4415     DO k = 1, klev
    4416        DO i = 1, klon
    4417           u_ancien(i,k) = u_seri(i,k)
    4418           v_ancien(i,k) = v_seri(i,k)
    4419           t_ancien(i,k) = t_seri(i,k)
    4420           q_ancien(i,k) = q_seri(i,k)
    4421           ql_ancien(i,k) = ql_seri(i,k)
    4422           qs_ancien(i,k) = qs_seri(i,k)
    4423        ENDDO
    4424     ENDDO
    4425 
     4387    u_ancien(:,:)  = u_seri(:,:)
     4388    v_ancien(:,:)  = v_seri(:,:)
     4389    t_ancien(:,:)  = t_seri(:,:)
     4390    q_ancien(:,:)  = q_seri(:,:)
     4391    ql_ancien(:,:) = ql_seri(:,:)
     4392    qs_ancien(:,:) = qs_seri(:,:)
     4393    CALL water_int(klon,klev,q_ancien,zmasse,prw_ancien)
     4394    CALL water_int(klon,klev,ql_ancien,zmasse,prlw_ancien)
     4395    CALL water_int(klon,klev,qs_ancien,zmasse,prsw_ancien)
    44264396    ! !! RomP >>>
    44274397    !CR: nb de traceurs eau: nqo
    4428     !  IF (nqtot.GE.3) THEN
    4429     IF (nqtot.GE.(nqo+1)) THEN
    4430        !     DO iq = 3, nqtot
     4398    IF (nqtot.GT.nqo) THEN
    44314399       DO iq = nqo+1, nqtot
    4432           DO k = 1, klev
    4433              DO i = 1, klon
    4434                 !              tr_ancien(i,k,iq-2) = tr_seri(i,k,iq-2)
    4435                 tr_ancien(i,k,iq-nqo) = tr_seri(i,k,iq-nqo)
    4436              ENDDO
    4437           ENDDO
     4400          tr_ancien(:,:,iq-nqo) = tr_seri(:,:,iq-nqo)
    44384401       ENDDO
    44394402    ENDIF
Note: See TracChangeset for help on using the changeset viewer.