Ignore:
Timestamp:
Sep 24, 2024, 10:47:17 AM (4 weeks ago)
Author:
abarral
Message:

Merge r5204 r5205
Light lint
Correct missing IOIPSL includes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/Amaury_dev/libf/phylmd/physiq_mod.F90

    r5221 r5224  
    1 ! $Id$
    2 
    3 !#define IO_DEBUG
    41MODULE physiq_mod
    52  IMPLICIT NONE
     
    7067    USE tracinca_mod, ONLY: config_inca
    7168    USE tropopause_m, ONLY: dyn_tropopause
    72     USE ice_sursat_mod, ONLY: flight_init, airplane
    7369    USE lmdz_vampir
    7470    USE lmdz_writefield_phy
     
    139135            ! [Variables internes non sauvegardees de la physique]
    140136            ! Variables locales pour effectuer les appels en serie
    141             t_seri, q_seri, ql_seri, qs_seri, qbs_seri, u_seri, v_seri, tr_seri, rneb_seri, &
     137            t_seri,q_seri,ql_seri,qs_seri,qbs_seri, &
     138            u_seri,v_seri,cf_seri,rvc_seri,tr_seri, &
    142139            rhcl, &
    143140            ! Dynamic tendencies (diagnostics)
    144             d_t_dyn, d_q_dyn, d_ql_dyn, d_qs_dyn, d_qbs_dyn, d_u_dyn, d_v_dyn, d_tr_dyn, d_rneb_dyn, &
     141            d_t_dyn, d_q_dyn, d_ql_dyn, d_qs_dyn, d_qbs_dyn, &
     142            d_u_dyn, d_v_dyn,d_cf_dyn,d_rvc_dyn,d_tr_dyn, &
    145143            d_q_dyn2d, d_ql_dyn2d, d_qs_dyn2d, d_qbs_dyn2d, &
    146144            ! Physic tendencies
     
    314312            pfraclr, pfracld, cldfraliq, sigma2_icefracturb, mean_icefracturb, &
    315313            distcltop, temp_cltop, &
    316             zqsatl, zqsats, &
    317             qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss, &
     314            !-- LSCP - condensation and ice supersaturation variables
     315            qsub, qissr, qcld, subfra, issrfra, gamma_cond, ratio_qi_qtot, &
     316            dcf_sub, dcf_con, dcf_mix, dqi_adj, dqi_sub, dqi_con, dqi_mix, &
     317            dqvc_adj, dqvc_sub, dqvc_con, dqvc_mix, qsatliq, qsatice, &
     318            !-- LSCP - aviation and contrails variables
    318319            Tcontr, qcontr, qcontr2, fcontrN, fcontrP, &
     320            dcf_avi, dqi_avi, dqvc_avi, flight_dist, flight_h2o, &
     321            !
    319322            cldemi, &
    320323            cldfra, cldtau, fiwc, &
     
    496499
    497500    ! indices de traceurs eau vapeur, liquide, glace, fraction nuageuse LS (optional), blowing snow (optional)
    498     INTEGER, SAVE :: ivap, iliq, isol, irneb, ibs
    499     !$OMP THREADPRIVATE(ivap, iliq, isol, irneb, ibs)
     501    INTEGER, SAVE :: ivap, iliq, isol, ibs, icf, irvc
     502    !$OMP THREADPRIVATE(ivap, iliq, isol, ibs, icf, irvc)
    500503
    501504
     
    13171320      iliq = strIdx(tracers(:)%name, addPhase('H2O', 'l'))
    13181321      isol = strIdx(tracers(:)%name, addPhase('H2O', 's'))
    1319       irneb = strIdx(tracers(:)%name, addPhase('H2O', 'r'))
    13201322      ibs = strIdx(tracers(:)%name, addPhase('H2O', 'b'))
     1323      icf = strIdx(tracers(:)%name, addPhase('H2O', 'f'))
     1324      irvc = strIdx(tracers(:)%name, addPhase('H2O', 'c'))
    13211325      !       CALL init_etat0_limit_unstruct
    13221326      !       IF (.NOT. create_etat0_limit) CALL init_limit_read(days_elapsed)
     
    13601364      ENDIF
    13611365
    1362       IF (ok_ice_sursat.AND.(iflag_ice_thermo==0)) THEN
    1363         WRITE (lunout, *) ' ok_ice_sursat=y requires iflag_ice_thermo=1 as well'
     1366      IF (ok_ice_supersat.AND.(iflag_ice_thermo==0)) THEN
     1367        WRITE (lunout, *) ' ok_ice_supersat=y requires iflag_ice_thermo=1 as well'
    13641368        abort_message = 'see above'
    13651369        CALL abort_physic(modname, abort_message, 1)
    13661370      ENDIF
    13671371
    1368       IF (ok_ice_sursat.AND.(nqo<4)) THEN
    1369         WRITE (lunout, *) ' ok_ice_sursat=y requires 4 H2O tracers ', &
    1370                 '(H2O_g, H2O_l, H2O_s, H2O_r) but nqo=', nqo, '. Might as well stop here.'
     1372      IF (ok_ice_supersat.AND.(nqo<5)) THEN
     1373        WRITE (lunout, *) ' ok_ice_supersat=y requires 5 H2O tracers ', &
     1374                '(H2O_g, H2O_l, H2O_s, H2O_f, H2O_c) but nqo=', nqo, '. Might as well stop here.'
    13711375        abort_message = 'see above'
    13721376        CALL abort_physic(modname, abort_message, 1)
    13731377      ENDIF
    13741378
    1375       IF (ok_plane_h2o.AND..NOT.ok_ice_sursat) THEN
    1376         WRITE (lunout, *) ' ok_plane_h2o=y requires ok_ice_sursat=y '
     1379      IF (ok_plane_h2o.AND..NOT.ok_ice_supersat) THEN
     1380        WRITE (lunout, *) ' ok_plane_h2o=y requires ok_ice_supersat=y '
    13771381        abort_message = 'see above'
    13781382        CALL abort_physic(modname, abort_message, 1)
    13791383      ENDIF
    13801384
    1381       IF (ok_plane_contrail.AND..NOT.ok_ice_sursat) THEN
    1382         WRITE (lunout, *) ' ok_plane_contrail=y requires ok_ice_sursat=y '
     1385      IF (ok_plane_contrail.AND..NOT.ok_ice_supersat) THEN
     1386        WRITE (lunout, *) ' ok_plane_contrail=y requires ok_ice_supersat=y '
    13831387        abort_message = 'see above'
    13841388        CALL abort_physic(modname, abort_message, 1)
     
    13861390
    13871391      IF (ok_bs) THEN
    1388         IF ((ok_ice_sursat.AND.nqo <5).OR.(.NOT.ok_ice_sursat.AND.nqo<4)) THEN
     1392        IF ((ok_ice_supersat.AND.nqo <6).OR.(.NOT.ok_ice_supersat.AND.nqo<4)) THEN
    13891393          WRITE (lunout, *) 'activation of blowing snow needs a specific H2O tracer', &
    13901394                  'but nqo=', nqo
     
    17951799              RG, RD, RCPD, RKAPPA, RLVTT, RETV)
    17961800      CALL ratqs_ini(klon, klev, iflag_thermals, lunout, nbsrf, is_lic, is_ter, RG, RV, RD, RCPD, RLSTT, RLVTT, RTT)
    1797       CALL lscp_ini(pdtphys, lunout, prt_level, ok_ice_sursat, iflag_ratqs, fl_cor_ebil, RCPD, RLSTT, RLVTT, RLMLT, RVTMP2, RTT, RD, RG, RV, RPI)
     1801      CALL lscp_ini(pdtphys, lunout, prt_level, ok_ice_supersat, iflag_ratqs, fl_cor_ebil, &
     1802              RCPD, RLSTT, RLVTT, RLMLT, RVTMP2, RTT, RD, RV, RG, RPI, EPS_W)
    17981803      CALL blowing_snow_ini(RCPD, RLSTT, RLVTT, RLMLT, &
    17991804              RVTMP2, RTT, RD, RG, RV, RPI)
     
    22652270              sollwdown(:))
    22662271
     2272      !--Init for LSCP - condensation
     2273      ratio_qi_qtot(:,:) = 0.
     2274
    22672275    ENDIF
    22682276
     
    23612369        ql_seri(i, k) = qx(i, k, iliq)
    23622370        qbs_seri(i, k) = 0.
     2371        cf_seri(i, k) = 0.
     2372        rvc_seri(i, k) = 0.
    23632373        !CR: ATTENTION, on rajoute la variable glace
    23642374        IF (nqo==2) THEN             !--vapour and liquid only
    23652375          qs_seri(i, k) = 0.
    2366           rneb_seri(i, k) = 0.
    23672376        ELSE IF (nqo==3) THEN        !--vapour, liquid and ice
    23682377          qs_seri(i, k) = qx(i, k, isol)
    2369           rneb_seri(i, k) = 0.
    2370         ELSE IF (nqo>=4) THEN        !--vapour, liquid, ice and rneb and blowing snow
     2378        ELSE IF (nqo>=4) THEN        !--vapour, liquid, ice, blowing snow, cloud fraction and cloudy water vapor to total water vapor ratio
    23712379          qs_seri(i, k) = qx(i, k, isol)
    2372           IF (ok_ice_sursat) THEN
    2373             rneb_seri(i, k) = qx(i, k, irneb)
    2374           ENDIF
     2380          IF (ok_ice_supersat) THEN
     2381            cf_seri(i, k) = qx(i, k, icf)
     2382            rvc_seri(i, k) = qx(i, k, irvc)
     2383          END IF
    23752384          IF (ok_bs) THEN
    23762385            qbs_seri(i, k) = qx(i, k, ibs)
    2377           ENDIF
    2378         ENDIF
    2379       ENDDO
    2380     ENDDO
     2386          END IF
     2387        END IF
     2388      END DO
     2389    END DO
    23812390    ! Lea Raillard qs_ini for cloud phase param.
    23822391    qs_ini(:, :) = qs_seri(:, :)
     
    24502459      d_qs_dyn(:, :) = (qs_seri(:, :) - qs_ancien(:, :)) / phys_tstep
    24512460      d_qbs_dyn(:, :) = (qbs_seri(:, :) - qbs_ancien(:, :)) / phys_tstep
     2461      d_cf_dyn(:, :) = (cf_seri(:, :) - cf_ancien(:, :)) / phys_tstep
     2462      d_rvc_dyn(:, :) = (rvc_seri(:, :) - rvc_ancien(:, :))/phys_tstep
    24522463      CALL water_int(klon, klev, q_seri, zmasse, zx_tmp_fi2d)
    24532464      d_q_dyn2d(:) = (zx_tmp_fi2d(:) - prw_ancien(:)) / phys_tstep
     
    24612472      IF (nqtot > nqo) d_tr_dyn(:, :, :) = (tr_seri(:, :, :) - tr_ancien(:, :, :)) / phys_tstep
    24622473      ! !! RomP <<<
    2463       !!d_rneb_dyn(:,:)=(rneb_seri(:,:)-rneb_ancien(:,:))/phys_tstep
    2464       d_rneb_dyn(:, :) = 0.0
    24652474    ELSE
    24662475      d_u_dyn(:, :) = 0.0
     
    24702479      d_ql_dyn(:, :) = 0.0
    24712480      d_qs_dyn(:, :) = 0.0
     2481      d_qbs_dyn(:, :) = 0.0
     2482      d_cf_dyn(:, :) = 0.0
     2483      d_rvc_dyn(:, :) = 0.0
    24722484      d_q_dyn2d(:) = 0.0
    24732485      d_ql_dyn2d(:) = 0.0
     
    24772489      IF (nqtot > nqo) d_tr_dyn(:, :, :) = 0.0
    24782490      ! !! RomP <<<
    2479       d_rneb_dyn(:, :) = 0.0
    2480       d_qbs_dyn(:, :) = 0.0
    24812491      ancien_ok = .TRUE.
    24822492    ENDIF
     
    25852595        ! "zmasse" changes a little.)
    25862596      ENDIF
     2597    ENDIF
     2598
     2599    !-- Needed for LSCP - condensation and ice supersaturation
     2600    IF (ok_ice_supersat) THEN
     2601      DO k = 1, klev
     2602        DO i = 1, klon
     2603          IF ((q_seri(i, k) + ql_seri(i, k) + qs_seri(i, k)) > 0.) THEN
     2604            ratio_qi_qtot(i, k) = qs_seri(i, k) / (q_seri(i, k) + ql_seri(i, k) + qs_seri(i, k))
     2605            rvc_seri(i, k) = rvc_seri(i, k) * q_seri(i, k) / (q_seri(i, k) + ql_seri(i, k) + qs_seri(i, k))
     2606          ELSE
     2607            ratio_qi_qtot(i, k) = 0.
     2608            rvc_seri(i, k) = 0.
     2609          ENDIF
     2610        ENDDO
     2611      ENDDO
    25872612    ENDIF
    25882613
     
    37383763
    37393764      !--mise à jour de flight_m et flight_h2o dans leur module
    3740       IF (ok_plane_h2o .OR. ok_plane_contrail) THEN
    3741         CALL airplane(debut, pphis, pplay, paprs, t_seri)
    3742       ENDIF
     3765      !IF (ok_plane_h2o .OR. ok_plane_contrail) THEN
     3766      !  CALL airplane(debut,pphis,pplay,paprs,t_seri)
     3767      !ENDIF
    37433768
    37443769      CALL lscp(klon, klev, phys_tstep, missing_val, paprs, pplay, &
    37453770              t_seri, q_seri, qs_ini, ptconv, ratqs, &
    3746               d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, rneblsvol, rneb_seri, &
     3771              d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, rneblsvol, &
    37473772              pfraclr, pfracld, cldfraliq, sigma2_icefracturb, mean_icefracturb, &
    37483773              radocond, picefra, rain_lsc, snow_lsc, &
     
    37503775              prfl, psfl, rhcl, &
    37513776              zqasc, fraca, ztv, zpspsk, ztla, zthl, iflag_cld_th, &
    3752               iflag_ice_thermo, ok_ice_sursat, zqsatl, zqsats, distcltop, temp_cltop, &
    3753               pbl_tke(:, :, is_ave), pbl_eps(:, :, is_ave), qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss, &
     3777              iflag_ice_thermo, distcltop, temp_cltop, &
     3778              pbl_tke(:, :, is_ave), pbl_eps(:, :, is_ave), &
     3779              cell_area, &
     3780              cf_seri, rvc_seri, u_seri, v_seri, &
     3781              qsub, qissr, qcld, subfra, issrfra, gamma_cond, ratio_qi_qtot, &
     3782              dcf_sub, dcf_con, dcf_mix, dqi_adj, dqi_sub, dqi_con, dqi_mix, &
     3783              dqvc_adj, dqvc_sub, dqvc_con, dqvc_mix, qsatliq, qsatice, &
    37543784              Tcontr, qcontr, qcontr2, fcontrN, fcontrP, &
     3785              dcf_avi, dqi_avi, dqvc_avi, flight_dist, flight_h2o, &
    37553786              cloudth_sth, cloudth_senv, cloudth_sigmath, cloudth_sigmaenv, &
    37563787              qraindiag, qsnowdiag, dqreva, dqssub, dqrauto, dqrcol, dqrmelt, &
     
    54215452          d_qx(i, k, isol) = (qs_seri(i, k) - qx(i, k, isol)) / phys_tstep
    54225453        ENDIF
    5423         !--ice_sursat: nqo=4, on ajoute rneb
    5424         IF (nqo>=4 .AND. ok_ice_sursat) THEN
    5425           d_qx(i, k, irneb) = (rneb_seri(i, k) - qx(i, k, irneb)) / phys_tstep
     5454        !--ice_supersat: nqo=5, we add cloud fraction and cloudy water vapor to total water vapor ratio
     5455        IF (nqo>=5 .and. ok_ice_supersat) THEN
     5456          d_qx(i, k, icf) = (cf_seri(i, k) - qx(i, k, icf)) / phys_tstep
     5457          d_qx(i, k, irvc) = (rvc_seri(i, k) - qx(i, k, irvc)) / phys_tstep
    54265458        ENDIF
    54275459
     
    54585490    qs_ancien(:, :) = qs_seri(:, :)
    54595491    qbs_ancien(:, :) = qbs_seri(:, :)
    5460     rneb_ancien(:, :) = rneb_seri(:, :)
     5492    cf_ancien(:, :) = cf_seri(:, :)
     5493    rvc_ancien(:, :) = rvc_seri(:, :)
    54615494    CALL water_int(klon, klev, q_ancien, zmasse, prw_ancien)
    54625495    CALL water_int(klon, klev, ql_ancien, zmasse, prlw_ancien)
Note: See TracChangeset for help on using the changeset viewer.