Ignore:
Timestamp:
Jun 29, 2018, 12:31:11 PM (6 years ago)
Author:
Laurent Fairhead
Message:

First attempt at merging with trunk

Location:
LMDZ6/branches/DYNAMICO-conv
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/DYNAMICO-conv

  • LMDZ6/branches/DYNAMICO-conv/libf/phylmd/physiq_mod.F90

    r3355 r3356  
    6363       !
    6464       d_t_vdf,d_q_vdf,d_u_vdf,d_v_vdf,d_t_diss, &
    65        d_t_vdf_w,d_q_vdf_w, &
    66        d_t_vdf_x,d_q_vdf_x, &
    6765       d_ts, &
    6866       !
     
    127125       slab_wfbils, tpot, tpote,               &
    128126       ue, uq, ve, vq, zxffonte,               &
     127       uwat, vwat,                             &
    129128       zxfqcalving, zxfluxlat,                 &
    130129       zxrunofflic,                            &
     
    135134       zxfluxlat_x, zxfluxlat_w, &
    136135       !
    137        dtvdf_x, dtvdf_w, &
    138        dqvdf_x, dqvdf_w, &
     136       d_t_vdf_x, d_t_vdf_w, &
     137       d_q_vdf_x, d_q_vdf_w, &
    139138       pbl_tke_input, &
    140139       t_therm, q_therm, u_therm, v_therm, &
     
    144143       !
    145144       wake_k, &
    146        ale_wake, alp_wake, &
     145       alp_wake, &
    147146       wake_h, wake_omg, &
    148147                       ! tendencies of delta T and delta q:
     
    153152       d_deltat_ajs_cv, d_deltaq_ajs_cv, & ! due to dry adjustment of (w) before convection
    154153                       ! tendencies of wake fractional area and wake number per unit area:
    155        d_s_wk,  d_dens_wk, &             ! due to wakes
    156 !!!       d_s_vdf, d_dens_vdf, &            ! due to vertical diffusion
    157 !!!       d_s_the, d_dens_the, &            ! due to thermals
     154       d_s_wk,  d_dens_a_wk,  d_dens_wk, &  ! due to wakes
     155!!!       d_s_vdf, d_dens_a_vdf, d_dens_vdf, & ! due to vertical diffusion
     156!!!       d_s_the, d_dens_a_the, d_dens_the, & ! due to thermals
    158157       !                                 
    159        ptconv, &
     158       ptconv, ratqsc, &
    160159       wbeff, convoccur, zmax_th, &
    161160       sens, flwp, fiwp,  &
    162        ale_bl_stat,alp_bl_conv,alp_bl_det,  &
     161       alp_bl_conv,alp_bl_det,  &
    163162       alp_bl_fluct_m,alp_bl_fluct_tke,  &
    164163       alp_bl_stat, n2, s2,  &
    165164       proba_notrig, random_notrig,  &
    166        !
    167        dnwd, dnwd0,  &
    168        upwd, omega,  &
     165       cv_gen,  &
     166       !
     167       dnwd0,  &
     168       omega,  &
    169169       epmax_diag,  &
     170
     171       !    Deep convective variables used in phytrac
     172       pmflxr, pmflxs,  &
     173       wdtrainA, wdtrainM,  &
     174       upwd, dnwd, &
    170175       ep,  &
     176       da, mp, &
     177       phi, &
     178       wght_cvfd, &
     179       phi2, &
     180       d1a, dam, &
     181       ev, &
     182       elij, &
     183       clw, &
     184       epmlmMm, eplaMm, &
     185       sij, &
     186
    171187       cldemi,  &
    172188       cldfra, cldtau, fiwc,  &
     
    181197       fsolsw, wfbils, wfbilo,  &
    182198       wfevap, wfrain, wfsnow,  & 
    183        pmflxr, pmflxs, prfl,  &
    184        psfl, fraca, Vprecip,  &
     199       prfl, psfl, fraca, Vprecip,  &
    185200       zw2,  &
    186201       
     
    192207       qwriteSTD, twriteSTD, rhwriteSTD, &    !pour calcul_STDlev.h
    193208       
    194        wdtrainA, wdtrainM,  &
    195209       beta_prec,  &
    196210       rneb,  &
     
    333347    INTEGER igout
    334348    !======================================================================
    335     ! Clef controlant l'activation du cycle diurne:
     349    ! Clef iflag_cycle_diurne controlant l'activation du cycle diurne:
    336350    ! en attente du codage des cles par Fred
    337     INTEGER iflag_cycle_diurne
    338     PARAMETER (iflag_cycle_diurne=1)
     351    ! iflag_cycle_diurne est initialise par conf_phys et se trouve
     352    ! dans clesphys.h (IM)
    339353    !======================================================================
    340354    ! Modele thermique du sol, a activer pour le cycle diurne:
     
    446460    REAL dtadd(klon,klev)
    447461
    448     ! Variables pour le transport convectif
    449     real da(klon,klev),phi(klon,klev,klev),mp(klon,klev)
    450     real wght_cvfd(klon,klev)
    451462#ifndef CPP_XIOS
    452463    REAL, SAVE :: missing_val=nf90_fill_real
    453464#endif
    454     ! Variables pour le lessivage convectif
    455     ! RomP >>>
    456     real phi2(klon,klev,klev)
    457     real d1a(klon,klev),dam(klon,klev)
    458     real ev(klon,klev)
    459     real clw(klon,klev),elij(klon,klev,klev)
    460     real epmlmMm(klon,klev,klev),eplaMm(klon,klev)
    461     ! RomP <<<
     465!!   Variables moved to phys_local_var_mod
     466!!    ! Variables pour le transport convectif
     467!!    real da(klon,klev),phi(klon,klev,klev),mp(klon,klev)
     468!!    real wght_cvfd(klon,klev)
     469!!    ! Variables pour le lessivage convectif
     470!!    ! RomP >>>
     471!!    real phi2(klon,klev,klev)
     472!!    real d1a(klon,klev),dam(klon,klev)
     473!!    real ev(klon,klev)
     474!!    real clw(klon,klev),elij(klon,klev,klev)
     475!!    real epmlmMm(klon,klev,klev),eplaMm(klon,klev)
     476!!    ! RomP <<<
    462477    !IM definition dynamique o_trac dans phys_output_open
    463478    !      type(ctrl_out) :: o_trac(nqtot)
     
    534549    INTEGER k_upper_cv
    535550    !------------------------------------------------------------------
     551    ! Compteur de l'occurence de cvpas=1
     552    INTEGER Ncvpaseq1
     553    SAVE Ncvpaseq1
     554    !$OMP THREADPRIVATE(Ncvpaseq1)
    536555    !
    537556    !==========================================================================
     
    549568    ! variables supplementaires de concvl
    550569    REAL Tconv(klon,klev)
    551     REAL sij(klon,klev,klev)
     570!!    variable moved to phys_local_var_mod
     571!!    REAL sij(klon,klev,klev)
    552572!!    !
    553573!!    ! variables pour tester la conservation de l'energie dans concvl
     
    624644    REAL, SAVE :: alp_offset
    625645    !$OMP THREADPRIVATE(alp_offset)
     646    REAL, SAVE :: dtcon_multistep_max=1.e6
     647    !$OMP THREADPRIVATE(dtcon_multistep_max)
     648    REAL, SAVE :: dqcon_multistep_max=1.e6
     649    !$OMP THREADPRIVATE(dqcon_multistep_max)
     650
    626651 
    627652    !
     
    874899    INTEGER :: flag_inhib_tend = 0 !  0 is the default value
    875900!!    INTEGER :: flag_inhib_tend = 2
     901    !
     902    ! Logical switch to a bug : reseting to 0 convective variables at the
     903    ! begining of physiq.
     904    LOGICAL, SAVE :: ok_bug_cv_trac = .TRUE.
     905    !$OMP THREADPRIVATE(ok_bug_cv_trac)
     906    !
     907    ! Logical switch to a bug : changing wake_deltat when thermals are active
     908    ! even when there are no wakes.
     909    LOGICAL, SAVE :: ok_bug_split_th = .TRUE.
     910    !$OMP THREADPRIVATE(ok_bug_split_th)
    876911
    877912    !
     
    886921    INTEGER kcbot(klon), kctop(klon), kdtop(klon)
    887922    !
    888     REAL ratqsc(klon,klev)
    889923    real ratqsbas,ratqshaut,tau_ratqs
    890924    save ratqsbas,ratqshaut,tau_ratqs
     
    11111145    REAL, dimension(klon, klev) :: cldfrarad   ! fraction nuageuse
    11121146
     1147    !lwoff=y : offset LW CRE for radiation code and other schemes
     1148    REAL, SAVE :: betalwoff
     1149    !OMP THREADPRIVATE(betalwoff)
     1150!
    11131151    INTEGER :: nbtr_tmp ! Number of tracer inside concvl
    11141152    REAL, dimension(klon,klev) :: sh_in ! Specific humidity entering in phytrac
     
    11251163    logical, parameter :: mass_fixer=.false.
    11261164    real qql1(klon),qql2(klon),corrqql
     1165
     1166    REAL pi
     1167
     1168    pi = 4. * ATAN(1.)
    11271169
    11281170    ! Ehouarn: set value of jjmp1 since it is no longer a "fixed parameter"
     
    12041246       ENDIF
    12051247
     1248       Ncvpaseq1 = 0
    12061249       dnwd0=0.0
    12071250       ftd=0.0
     
    12111254       pbase=0
    12121255       !IM 180608
    1213 
    12141256
    12151257       itau_con=0
     
    12371279    IF (debut) THEN
    12381280       CALL suphel ! initialiser constantes et parametres phys.
     1281! tau_gl : constante de rappel de la temperature a la surface de la glace - en
     1282       tau_gl=5.
     1283       CALL getin_p('tau_gl', tau_gl)
     1284! tau_gl : constante de rappel de la temperature a la surface de la glace - en
     1285! secondes
     1286       tau_gl=86400.*tau_gl
     1287       print*,'debut physiq_mod tau_gl=',tau_gl
    12391288       CALL getin_p('iflag_alp_wk_cond', iflag_alp_wk_cond)
    12401289       CALL getin_p('random_notrig_max',random_notrig_max)
     
    12451294                      ! 2 => convective adjustment and state variables are changed
    12461295       CALL getin_p('iflag_adjwk',iflag_adjwk)
     1296       CALL getin_p('dtcon_multistep_max',dtcon_multistep_max)
     1297       CALL getin_p('dqcon_multistep_max',dqcon_multistep_max)
    12471298       CALL getin_p('oliqmax',oliqmax)
    12481299       CALL getin_p('oicemax',oicemax)
     
    12541305                                  ! in rrtm/suphec.F90 (and rvtmp2 is set to 0).
    12551306       CALL getin_p('ok_bad_ecmwf_thermo',ok_bad_ecmwf_thermo)
     1307       CALL getin_p('ok_bug_cv_trac',ok_bug_cv_trac)
     1308       CALL getin_p('ok_bug_split_th',ok_bug_split_th)
    12561309       fl_ebil = 0 ! by default, conservation diagnostics are desactivated
    12571310       CALL getin_p('fl_ebil',fl_ebil)
     
    13281381       print*,'iflag_coupl,iflag_clos,iflag_wake', &
    13291382            iflag_coupl,iflag_clos,iflag_wake
    1330        print*,'iflag_CYCLE_DIURNE', iflag_cycle_diurne
     1383       print*,'iflag_cycle_diurne', iflag_cycle_diurne
    13311384       !
    13321385       IF (iflag_con.EQ.2.AND.iflag_cld_th.GT.-1) THEN
     
    13791432       print *,'physiq, nbapp_cv, nbapp_wk ',nbapp_cv,nbapp_wk
    13801433       IF (MOD(NINT(86400./phys_tstep),nbapp_cv).EQ.0) THEN
    1381           cvpas = NINT( 86400./phys_tstep)/nbapp_cv
     1434          cvpas_0 = NINT( 86400./phys_tstep)/nbapp_cv
     1435          cvpas = cvpas_0
    13821436       print *,'physiq, cvpas ',cvpas
    13831437       ELSE
     
    15101564!jyg<
    15111565       IF (klon_glo==1) THEN
    1512           pbl_tke(:,:,is_ave) = 0.
    1513           DO nsrf=1,nbsrf
    1514             DO k = 1,klev+1
    1515                  pbl_tke(:,k,is_ave) = pbl_tke(:,k,is_ave) &
    1516                      +pctsrf(:,nsrf)*pbl_tke(:,k,nsrf)
    1517             ENDDO
    1518           ENDDO
     1566          IF (iflag_pbl > 1) THEN         
     1567              pbl_tke(:,:,is_ave) = 0.
     1568              DO nsrf=1,nbsrf
     1569                DO k = 1,klev+1
     1570                     pbl_tke(:,k,is_ave) = pbl_tke(:,k,is_ave) &
     1571                         +pctsrf(:,nsrf)*pbl_tke(:,k,nsrf)
     1572                ENDDO
     1573              ENDDO
     1574          ELSE   ! (iflag_pbl > 1)
     1575              pbl_tke(:,:,:) = 0.
     1576          ENDIF  ! (iflag_pbl > 1)
    15191577        ELSE
    15201578          pbl_tke(:,:,is_ave) = 0. !ym missing init : maybe must be initialized in the same way that for klon_glo==1 ??
     
    16861744
    16871745#ifdef CPP_XIOS
    1688        !--setting up swaero_diag to TRUE in XIOS case
    1689        IF (xios_field_is_active("topswad").OR.xios_field_is_active("topswad0").OR. &
    1690            xios_field_is_active("solswad").OR.xios_field_is_active("solswad0").OR. &
    1691            xios_field_is_active("topswai").OR.xios_field_is_active("solswai").OR.  &
    1692              (iflag_rrtm==1.AND.(xios_field_is_active("toplwad").OR.xios_field_is_active("toplwad0").OR. &
    1693                                  xios_field_is_active("sollwad").OR.xios_field_is_active("sollwad0"))))  &
    1694            !!!--for now these fields are not in the XML files so they are omitted
    1695            !!!  xios_field_is_active("toplwai").OR.xios_field_is_active("sollwai") !))) &
    1696            swaero_diag=.TRUE.
    1697 
    1698        !--setting up dryaod_diag to TRUE in XIOS case
    1699        DO naero = 1, naero_tot-1
    1700          IF (xios_field_is_active("dryod550_"//name_aero_tau(naero))) dryaod_diag=.TRUE.
    1701        ENDDO
    1702        !
    1703        !--setting up ok_4xCO2atm to TRUE in XIOS case
    1704        IF (xios_field_is_active("rsut4co2").OR.xios_field_is_active("rlut4co2").OR. &
    1705            xios_field_is_active("rsutcs4co2").OR.xios_field_is_active("rlutcs4co2").OR. &
    1706            xios_field_is_active("rsu4co2").OR.xios_field_is_active("rsucs4co2").OR. &
    1707            xios_field_is_active("rsd4co2").OR.xios_field_is_active("rsdcs4co2").OR. &
    1708            xios_field_is_active("rlu4co2").OR.xios_field_is_active("rlucs4co2").OR. &
    1709            xios_field_is_active("rld4co2").OR.xios_field_is_active("rldcs4co2")) &
    1710            ok_4xCO2atm=.TRUE.
     1746! Need to put this initialisation after phyetat0 as in the coupled model the XIOS context is only
     1747! initialised at that moment
     1748       ! Get "missing_val" value from XML files (from temperature variable)
     1749       !$OMP MASTER
     1750       CALL xios_get_field_attr("temp",default_value=missing_val_omp)
     1751       !$OMP END MASTER
     1752       !$OMP BARRIER
     1753       missing_val=missing_val_omp
    17111754#endif
    17121755
     
    18241867       WRITE(*,*)'lat2_beta=',lat2_beta
    18251868       WRITE(*,*)'mskocean_beta=',mskocean_beta
     1869
     1870      !lwoff=y : offset LW CRE for radiation code and other schemes
     1871      !lwoff=y : betalwoff=1.
     1872      betalwoff=0.
     1873      IF (ok_lwoff) THEN
     1874         betalwoff=1.
     1875      ENDIF
     1876      WRITE(*,*)'ok_lwoff=',ok_lwoff
     1877      !
     1878      !lwoff=y to begin only sollw and sollwdown are set up to CS values
     1879      sollw = sollw + betalwoff * (sollw0 - sollw)
     1880      sollwdown(:)= sollwdown(:) + betalwoff *(-1.*ZFLDN0(:,1) - &
     1881                    sollwdown(:))
    18261882    ENDIF
    18271883    !
     
    18901946       ENDDO
    18911947    ENDDO
    1892     da(:,:)=0.
    1893     mp(:,:)=0.
    1894     phi(:,:,:)=0.
    1895     ! RomP >>>
    1896     phi2(:,:,:)=0.
    18971948    beta_prec_fisrt(:,:)=0.
    18981949    beta_prec(:,:)=0.
    1899     epmlmMm(:,:,:)=0.
    1900     eplaMm(:,:)=0.
    1901     d1a(:,:)=0.
    1902     dam(:,:)=0.
    1903     pmflxr=0.
    1904     pmflxs=0.
    1905     ! RomP <<<
     1950    !
     1951    !   Output variables from the convective scheme should not be set to 0
     1952    !   since convection is not always called at every time step.
     1953    IF (ok_bug_cv_trac) THEN
     1954      da(:,:)=0.
     1955      mp(:,:)=0.
     1956      phi(:,:,:)=0.
     1957      ! RomP >>>
     1958      phi2(:,:,:)=0.
     1959      epmlmMm(:,:,:)=0.
     1960      eplaMm(:,:)=0.
     1961      d1a(:,:)=0.
     1962      dam(:,:)=0.
     1963      pmflxr(:,:)=0.
     1964      pmflxs(:,:)=0.
     1965      ! RomP <<<
     1966    ENDIF
    19061967
    19071968    !
     
    20802141          IF(adjust_tropopause) THEN
    20812142             CALL regr_pr_time_av(ncid_climoz, vars_climoz(1:read_climoz),   &
    2082                       ro3i,  press_edg_climoz,  paprs,   wo, time_climoz,    &
    2083                       longitude_deg,   latitude_deg,    press_cen_climoz,    &
     2143                      ro3i, 'C', press_cen_climoz, pplay, wo, paprs(:,1),    &
     2144                      time_climoz ,  longitude_deg,   latitude_deg,          &
    20842145                      dyn_tropopause(t_seri, ztsol, paprs, pplay, rot))
    20852146          ELSE
    2086              CALL regr_pr_time_av(ncid_climoz, vars_climoz(1:read_climoz),   &
    2087                       ro3i,  press_edg_climoz,  paprs,  wo,  time_climoz)
     2147             CALL regr_pr_time_av(ncid_climoz,  vars_climoz(1:read_climoz),  &
     2148                      ro3i, 'C', press_cen_climoz, pplay, wo, paprs(:,1),    &
     2149                      time_climoz )
    20882150          END IF
    20892151          ! Convert from mole fraction of ozone to column density of ozone in a
     
    21972259       END SELECT
    21982260    ENDIF
     2261    sza_o = ACOS (rmu0) *180./pi
    21992262
    22002263    IF (mydebug) THEN
     
    22342297!!jyg       IF (prt_level .ge. 2 .and. mod(iflag_pbl_split,2) .eq. 1) THEN
    22352298       IF (prt_level .ge. 2 .and. mod(iflag_pbl_split,10) .ge. 1) THEN
    2236           print *,'debut du splitting de la PBL'
     2299          print *,'debut du splitting de la PBL, wake_s = ', wake_s(:)
     2300          print *,'debut du splitting de la PBL, wake_deltat = ', wake_deltat(:,1)
     2301          print *,'debut du splitting de la PBL, wake_deltaq = ', wake_deltaq(:,1)
    22372302       ENDIF
    22382303       ! !!
     
    22462311          gustiness(1:klon)=0
    22472312       ELSE IF (iflag_gusts==1) THEN
    2248           do i = 1, klon
    2249              gustiness(i)=f_gust_bl*ale_bl(i)+f_gust_wk*ale_wake(i)
    2250           enddo
     2313          gustiness(1:klon)=f_gust_bl*ale_bl(1:klon)+f_gust_wk*ale_wake(1:klon)
     2314       ELSE IF (iflag_gusts==2) THEN
     2315          gustiness(1:klon)=f_gust_bl*ale_bl_stat(1:klon)+f_gust_wk*ale_wake(1:klon)
    22512316          ! ELSE IF (iflag_gusts==2) THEN
    22522317          !    do i = 1, klon
     
    23232388          d_deltaq_vdf(:,:) = d_q_vdf_w(:,:)-d_q_vdf_x(:,:)
    23242389          CALL add_wake_tend &
    2325              (d_deltat_vdf, d_deltaq_vdf, dsig0, ddens0, wkoccur1, 'vdf', abortphy)
     2390             (d_deltat_vdf, d_deltaq_vdf, dsig0, ddens0, ddens0, wkoccur1, 'vdf', abortphy)
    23262391       ELSE
    23272392          d_deltat_vdf(:,:) = 0.
     
    24652530    ! Appel de la convection tous les "cvpas"
    24662531    !
    2467     IF (MOD(itapcv,cvpas).EQ.0) THEN
    2468 
     2532!!jyg    IF (MOD(itapcv,cvpas).EQ.0) THEN
     2533!!    print *,' physiq : itapcv, cvpas, itap-1, cvpas_0 ', &
     2534!!                       itapcv, cvpas, itap-1, cvpas_0
     2535    IF (MOD(itapcv,cvpas).EQ.0 .OR. MOD(itap-1,cvpas_0).EQ.0) THEN
     2536
     2537    !
     2538    ! Mettre a zero des variables de sortie (pour securite)
     2539    !
     2540    pmflxr(:,:) = 0.
     2541    pmflxs(:,:) = 0.
     2542    wdtrainA(:,:) = 0.
     2543    wdtrainM(:,:) = 0.
     2544    upwd(:,:) = 0.
     2545    dnwd(:,:) = 0.
     2546    ep(:,:) = 0.
     2547    da(:,:)=0.
     2548    mp(:,:)=0.
     2549    wght_cvfd(:,:)=0.
     2550    phi(:,:,:)=0.
     2551    phi2(:,:,:)=0.
     2552    epmlmMm(:,:,:)=0.
     2553    eplaMm(:,:)=0.
     2554    d1a(:,:)=0.
     2555    dam(:,:)=0.
     2556    elij(:,:,:)=0.
     2557    ev(:,:)=0.
     2558    clw(:,:)=0.
     2559    sij(:,:,:)=0.
     2560    !
    24692561    IF (iflag_con.EQ.1) THEN
    24702562       abort_message ='reactiver le call conlmd dans physiq.F'
     
    25392631             IF (iflag_adjwk == 2) THEN
    25402632               CALL add_wake_tend &
    2541                  (d_deltat_ajs_cv, d_deltaq_ajs_cv, dsig0, ddens0, wkoccur1, 'ajs_cv', abortphy)
     2633                 (d_deltat_ajs_cv, d_deltaq_ajs_cv, dsig0, ddens0, ddens0, wkoccur1, 'ajs_cv', abortphy)
    25422634             ENDIF  ! (iflag_adjwk == 2)
    25432635          ENDIF  ! (iflag_adjwk >= 1)
     
    25682660          ! Calculate the upmost level of deep convection loops: k_upper_cv
    25692661          !  (near 22 km)
    2570           izero = klon/2+1/klon
    25712662          k_upper_cv = klev
     2663          !izero = klon/2+1/klon
     2664          !DO k = klev,1,-1
     2665          !   IF (pphi(izero,k) > 22.e4) k_upper_cv = k
     2666          !ENDDO
     2667          ! FH : nouveau calcul base sur un profil global sans quoi
     2668          ! le modele etait sensible au decoupage de domaines
    25722669          DO k = klev,1,-1
    2573              IF (pphi(izero,k) > 22.e4) k_upper_cv = k
     2670             IF (-7*log(presnivs(k)/presnivs(1)) > 25.) k_upper_cv = k
    25742671          ENDDO
    25752672          IF (prt_level .ge. 5) THEN
     
    26152712          clwcon0=qcondc
    26162713          pmfu(:,:)=upwd(:,:)+dnwd(:,:)
    2617 
     2714          !
     2715          !jyg<
     2716          ! If convective tendencies are too large, then call convection
     2717          !  every time step
     2718          cvpas = cvpas_0
     2719          DO k=1,k_upper_cv
     2720             DO i=1,klon
     2721               IF (d_t_con(i,k) > 6.721 .AND. d_t_con(i,k) < 6.722 .AND.&
     2722                   d_q_con(i,k) > -.0002171 .AND. d_q_con(i,k) < -.0002170) THEN
     2723                     dtcon_multistep_max = 3.
     2724                     dqcon_multistep_max = 0.02
     2725               ENDIF
     2726             ENDDO
     2727          ENDDO
     2728!
     2729          DO k=1,k_upper_cv
     2730             DO i=1,klon
     2731!!               IF (abs(d_t_con(i,k)) > 0.24 .OR. &
     2732!!                   abs(d_q_con(i,k)) > 2.e-2) THEN
     2733               IF (abs(d_t_con(i,k)) > dtcon_multistep_max .OR. &
     2734                   abs(d_q_con(i,k)) > dqcon_multistep_max) THEN
     2735                 cvpas = 1
     2736!!                 print *,'physiq1, i,k,d_t_con(i,k),d_q_con(i,k) ', &
     2737!!                                   i,k,d_t_con(i,k),d_q_con(i,k)
     2738               ENDIF
     2739             ENDDO
     2740          ENDDO
     2741!!!   Ligne a ne surtout pas remettre sans avoir murement reflechi (jyg)
     2742!!!          call bcast(cvpas)
     2743!!!   ------------------------------------------------------------
     2744          !>jyg
     2745          !
    26182746          DO i = 1, klon
    2619              IF (iflagctrl(i).le.1) itau_con(i)=itau_con(i)+1
     2747             IF (iflagctrl(i).le.1) itau_con(i)=itau_con(i)+cvpas
    26202748          ENDDO
    26212749          !
     
    27252853    proba_notrig(:) = 1.
    27262854    itapcv = 0
    2727     ENDIF !  (MOD(itapcv,cvpas).EQ.0)
     2855    ENDIF !  (MOD(itapcv,cvpas).EQ.0 .OR. MOD(itapcv,cvpas_0).EQ.0)
    27282856!
    27292857    itapcv = itapcv+1
     2858    !
     2859    ! Compter les steps ou cvpas=1
     2860    IF (cvpas == 1) THEN
     2861      Ncvpaseq1 = Ncvpaseq1+1
     2862    ENDIF
     2863    IF (mod(itap,1000) == 0) THEN
     2864      print *,' physiq, nombre de steps ou cvpas = 1 : ', Ncvpaseq1
     2865    ENDIF
    27302866
    27312867!!!jyg  Appel diagnostique a add_phys_tend pour tester la conservation de
     
    28492985               t_seri, q_seri, omega,  &
    28502986               dt_dwn, dq_dwn, M_dwn, M_up,  &
    2851                dt_a, dq_a, &
    2852                sigd, &
    2853                wake_deltat, wake_deltaq, wake_s, wake_dens,  &
     2987               dt_a, dq_a, cv_gen, &
     2988               sigd, cin, &
     2989               wake_deltat, wake_deltaq, wake_s, awake_dens, wake_dens,  &
    28542990               wake_dth, wake_h,  &
    28552991!!               wake_pe, wake_fip, wake_gfl,  &
     
    28612997               wake_omg, wake_dp_deltomg,  &
    28622998               wake_spread, wake_Cstar, d_deltat_wk_gw,  &
    2863                d_deltat_wk, d_deltaq_wk, d_s_wk, d_dens_wk)
     2999               d_deltat_wk, d_deltaq_wk, d_s_wk, d_dens_a_wk, d_dens_wk)
    28643000          !
    28653001          !jyg    Reinitialize itapwk when wakes have been called
     
    28803016
    28813017         CALL add_wake_tend &
    2882             (d_deltat_wk, d_deltaq_wk, d_s_wk, d_dens_wk, wake_k, &
     3018            (d_deltat_wk, d_deltaq_wk, d_s_wk, d_dens_a_wk, d_dens_wk, wake_k, &
    28833019             'wake', abortphy)
    28843020          call prt_enerbil('wake',itap)
    28853021       ENDIF   ! (iflag_wake_tend .GT. 0.)
     3022       !
     3023       IF (prt_level .GE. 10) THEN
     3024         print *,' physiq, after calwake, wake_s: ',wake_s(:)
     3025         print *,' physiq, after calwake, wake_deltat: ',wake_deltat(:,1)
     3026         print *,' physiq, after calwake, wake_deltaq: ',wake_deltaq(:,1)
     3027       ENDIF
    28863028
    28873029       IF (iflag_alp_wk_cond .GT. 0.) THEN
     
    30113153             ENDDO
    30123154          !
    3013              CALL add_wake_tend &
    3014                  (d_deltat_the, d_deltaq_the, dsig0, ddens0, wkoccur1, 'the', abortphy)
     3155             IF (ok_bug_split_th) THEN
     3156               CALL add_wake_tend &
     3157                   (d_deltat_the, d_deltaq_the, dsig0, ddens0, ddens0, wkoccur1, 'the', abortphy)
     3158             ELSE
     3159               CALL add_wake_tend &
     3160                   (d_deltat_the, d_deltaq_the, dsig0, ddens0, ddens0, wake_k, 'the', abortphy)
     3161             ENDIF
    30153162             call prt_enerbil('the',itap)
    30163163          !
     
    30263173                          ale_bl_trig, ale_bl_stat, ale_bl,  &
    30273174                          alp_bl, alp_bl_stat, &
    3028                           proba_notrig, random_notrig)
     3175                          proba_notrig, random_notrig, cv_gen)
    30293176          !>jyg
    30303177
     
    34883635                        tausum_aero, drytausum_aero, tau3d_aero)
    34893636#endif
     3637
     3638                   IF (flag_aerosol .EQ. 7) THEN
     3639                      CALL MACv2SP(pphis,pplay,paprs,longitude_deg,latitude_deg,  &
     3640                                   tau_aero_sw_rrtm,piz_aero_sw_rrtm,cg_aero_sw_rrtm)
     3641                   ENDIF
     3642
    34903643                   !
    34913644                ELSE IF (NSW.EQ.2) THEN
     
    35423695       !
    35433696       !--WMO criterion to determine tropopause
    3544        CALL stratosphere_mask(missing_val, t_seri, pplay, latitude_deg)
     3697       CALL stratosphere_mask(missing_val, pphis, t_seri, pplay, latitude_deg)
    35453698       !
    35463699       !--STRAT AEROSOL
     
    35823735#ifdef CPP_StratAer
    35833736       !--compute stratospheric mask
    3584        CALL stratosphere_mask(missing_val, t_seri, pplay, latitude_deg)
     3737       CALL stratosphere_mask(missing_val, pphis, t_seri, pplay, latitude_deg)
    35853738       !--interactive strat aerosols
    35863739       CALL calcaerosolstrato_rrtm(pplay,t_seri,paprs,debut)
     
    36123765#endif
    36133766          ENDIF
    3614           CALL newmicro (ok_cdnc, bl95_b0, bl95_b1, &
     3767          CALL newmicro (flag_aerosol, ok_cdnc, bl95_b0, bl95_b1, &
    36153768               paprs, pplay, t_seri, cldliq, cldfra, &
    36163769               cldtau, cldemi, cldh, cldl, cldm, cldt, cldq, &
     
    36423795          ! global
    36433796          !
     3797!IM 251017 begin
     3798!               print*,'physiq betaCRF global zdtime=',zdtime
     3799!IM 251017 end
    36443800          DO k=1, klev
    36453801             DO i=1, klon
     
    37563912             print *,' ->radlwsw, number 1 '
    37573913          ENDIF
     3914
    37583915          !
    37593916          CALL radlwsw &
     
    37723929               tau_aero_lw_rrtm, &
    37733930               cldtaupirad,new_aod, &
     3931!              zqsat, flwcrad, fiwcrad, &
    37743932               zqsat, flwc, fiwc, &
    37753933               ref_liq, ref_ice, ref_liq_pi, ref_ice_pi, &
     
    37783936               sollwdown, &
    37793937               topsw0,toplw0,solsw0,sollw0, &
    3780                lwdn0, lwdn, lwup0, lwup,  &
    3781                swdn0, swdn, swup0, swup, &
     3938               lwdnc0, lwdn0, lwdn, lwupc0, lwup0, lwup,  &
     3939               swdnc0, swdn0, swdn, swupc0, swup0, swup, &
    37823940               topswad_aero, solswad_aero, &
    37833941               topswai_aero, solswai_aero, &
     
    37943952               ZSWFT0_i, ZFSDN0, ZFSUP0)
    37953953
     3954          !lwoff=y, betalwoff=1. : offset LW CRE for radiation code and other
     3955          !schemes
     3956          toplw = toplw + betalwoff * (toplw0 - toplw)
     3957          sollw = sollw + betalwoff * (sollw0 - sollw)
     3958          lwdn = lwdn + betalwoff * (lwdn0 - lwdn)
     3959          lwup = lwup + betalwoff * (lwup0 - lwup)
     3960          sollwdown(:)= sollwdown(:) + betalwoff *(-1.*ZFLDN0(:,1) - &
     3961                        sollwdown(:))
     3962          cool = cool + betalwoff * (cool0 - cool)
     3963 
    37963964#ifndef CPP_XIOS
    37973965          !--OB 30/05/2016 modified 21/10/2016
     
    38003968          !--this is necessary to get the right swaero at first step
    38013969          !--but only in the case of no XIOS as XIOS is covered elsewhere
     3970          IF (debut) swaerofree_diag = .FALSE.
    38023971          IF (debut) swaero_diag = .FALSE.
    38033972          IF (debut) dryaod_diag = .FALSE.
     
    38053974          !--as for swaero_diag, see above
    38063975          IF (debut) ok_4xCO2atm = .FALSE.
    3807 #endif
     3976
    38083977          !
    38093978          !IM 2eme calcul radiatif pour le cas perturbe ou au moins un
     
    38163985              RCFC11_per.NE.RCFC11_act.OR. &
    38173986              RCFC12_per.NE.RCFC12_act) ok_4xCO2atm =.TRUE.
     3987#endif
    38183988   !
    38193989          IF (ok_4xCO2atm) THEN
     
    38444014                     tau_aero_lw_rrtm, &
    38454015                     cldtaupi,new_aod, &
     4016!                    zqsat, flwcrad, fiwcrad, &
    38464017                     zqsat, flwc, fiwc, &
    38474018                     ref_liq, ref_ice, ref_liq_pi, ref_ice_pi, &
     
    38504021                     sollwdownp, &
    38514022                     topsw0p,toplw0p,solsw0p,sollw0p, &
    3852                      lwdn0p, lwdnp, lwup0p, lwupp,  &
    3853                      swdn0p, swdnp, swup0p, swupp, &
     4023                     lwdnc0p, lwdn0p, lwdnp, lwupc0p, lwup0p, lwupp,  &
     4024                     swdnc0p, swdn0p, swdnp, swupc0p, swup0p, swupp, &
    38544025                     topswad_aerop, solswad_aerop, &
    38554026                     topswai_aerop, solswai_aerop, &
     
    38654036                     ZLWFT0_i, ZFLDN0, ZFLUP0, &
    38664037                     ZSWFT0_i, ZFSDN0, ZFSUP0)
    3867           endif
    3868           !
     4038          endif !ok_4xCO2atm
    38694039       ENDIF ! aerosol_couple
    38704040       itaprad = 0
     
    42574427
    42584428
    4259     CALL tend_to_tke(pdtphys,paprs,exner,t_seri,u_seri,v_seri,dtadd,duadd,dvadd,pbl_tke)
     4429    CALL tend_to_tke(pdtphys,paprs,exner,t_seri,u_seri,v_seri,dtadd,duadd,dvadd,pctsrf,pbl_tke)
    42604430
    42614431
     
    44124582    !
    44134583    CALL transp (paprs,zxtsol, &
    4414          t_seri, q_seri, u_seri, v_seri, zphi, &
    4415          ve, vq, ue, uq)
     4584         t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, zphi, &
     4585         ve, vq, ue, uq, vwat, uwat)
    44164586    !
    44174587    !IM global posePB BEG
     
    47094879#endif
    47104880
     4881! On remet des variables a .false. apres un premier appel
     4882    if (debut) then
     4883#ifdef CPP_XIOS
     4884      swaero_diag=.FALSE.
     4885      swaerofree_diag=.FALSE.
     4886      dryaod_diag=.FALSE.
     4887      ok_4xCO2atm= .FALSE.
     4888!      write (lunout,*)'ok_4xCO2atm= ',swaero_diag, swaerofree_diag, dryaod_diag, ok_4xCO2atm
     4889
     4890      IF (is_master) then
     4891        !--setting up swaero_diag to TRUE in XIOS case
     4892        IF (xios_field_is_active("topswad").OR.xios_field_is_active("topswad0").OR. &
     4893           xios_field_is_active("solswad").OR.xios_field_is_active("solswad0").OR. &
     4894           xios_field_is_active("topswai").OR.xios_field_is_active("solswai").OR.  &
     4895             (iflag_rrtm==1.AND.(xios_field_is_active("toplwad").OR.xios_field_is_active("toplwad0").OR. &
     4896                                 xios_field_is_active("sollwad").OR.xios_field_is_active("sollwad0"))))  &
     4897           !!!--for now these fields are not in the XML files so they are omitted
     4898           !!!  xios_field_is_active("toplwai").OR.xios_field_is_active("sollwai") !))) &
     4899           swaero_diag=.TRUE.
     4900
     4901        !--setting up swaerofree_diag to TRUE in XIOS case
     4902        IF (xios_field_is_active("SWdnSFCcleanclr").OR.xios_field_is_active("SWupSFCcleanclr").OR. &
     4903           xios_field_is_active("SWupTOAcleanclr").OR.xios_field_is_active("rsucsaf").OR.   &
     4904           xios_field_is_active("rsdcsaf") .OR. xios_field_is_active("LWdnSFCcleanclr").OR. &
     4905           xios_field_is_active("LWupTOAcleanclr")) &
     4906           swaerofree_diag=.TRUE.
     4907
     4908        !--setting up dryaod_diag to TRUE in XIOS case
     4909        DO naero = 1, naero_tot-1
     4910         IF (xios_field_is_active("dryod550_"//name_aero_tau(naero))) dryaod_diag=.TRUE.
     4911        ENDDO
     4912        !
     4913        !--setting up ok_4xCO2atm to TRUE in XIOS case
     4914        IF (xios_field_is_active("rsut4co2").OR.xios_field_is_active("rlut4co2").OR. &
     4915           xios_field_is_active("rsutcs4co2").OR.xios_field_is_active("rlutcs4co2").OR. &
     4916           xios_field_is_active("rsu4co2").OR.xios_field_is_active("rsucs4co2").OR. &
     4917           xios_field_is_active("rsd4co2").OR.xios_field_is_active("rsdcs4co2").OR. &
     4918           xios_field_is_active("rlu4co2").OR.xios_field_is_active("rlucs4co2").OR. &
     4919           xios_field_is_active("rld4co2").OR.xios_field_is_active("rldcs4co2")) &
     4920           ok_4xCO2atm=.TRUE.
     4921      endif
     4922      !$OMP BARRIER
     4923      call bcast(swaero_diag)
     4924      call bcast(swaerofree_diag)
     4925      call bcast(dryaod_diag)
     4926      call bcast(ok_4xCO2atm)
     4927!      write (lunout,*)'ok_4xCO2atm= ',swaero_diag, swaerofree_diag, dryaod_diag, ok_4xCO2atm
     4928#endif
     4929    endif
    47114930
    47124931    !====================================================================
     
    47454964       IF (is_omp_master) CALL xios_context_finalize
    47464965#endif
     4966       print *,' physiq fin, nombre de steps ou cvpas = 1 : ', Ncvpaseq1
    47474967    ENDIF
    47484968
Note: See TracChangeset for help on using the changeset viewer.