Changeset 5761


Ignore:
Timestamp:
Jul 5, 2025, 11:31:07 PM (2 days ago)
Author:
jyg
Message:

Modifications of lmdz_wake.f90:
1/ reorganization of the computations relative to the vertical
differential advection, to the differential convective heating
and to the entrainment in the two columns (w) and (x).
2/ new implicit upstream scheme for the vertical differential
advection. The use of this scheme is controlled by the flag

flag_dadv_implicit.

True ==> use implicit upstream scheme
Default = False.

Location:
LMDZ6/trunk/libf/phylmd
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/libf/phylmd/lmdz_wake.f90

    r5499 r5761  
    55  IMPLICIT NONE; PRIVATE
    66 
    7   LOGICAL, PARAMETER :: phys_sub=.false.
     7!!!  LOGICAL, PARAMETER :: phys_sub=.false.
     8  LOGICAL, PARAMETER :: phys_sub=.true.
    89  LOGICAL            :: first_call=.true.
    910  !$OMP THREADPRIVATE(first_call)
     
    4243                dth, hw, wape, fip, gfl, &
    4344                dtls, dqls, ktopw, omgbdth, dp_omgb, tx, qx, &
    44                 dtke, dqke, omg, dp_deltomg, wkspread, cstar, &
     45!!!                dtke, dqke, omg, dp_deltomg, wkspread, cstar, &   ! changes in notation
     46                d_deltat_dcv, d_deltaq_dcv, omg, dp_deltomg, wkspread, cstar, &
    4547                d_deltat_gw, &                                                      ! tendencies
    4648                d_deltatw2, d_deltaqw2, d_sigmaw2, d_asigmaw2, d_wdens2, d_awdens2)             ! tendencies
     
    9698  ! wdens   : densite de poches
    9799  ! omgbdth: flux of Delta_Theta transported by LS omega
    98   ! dtKE   : differential heating (wake - unpertubed)
    99   ! dqKE   : differential moistening (wake - unpertubed)
     100  ! d_deltat_dcv   : differential heating (wake - unpertubed)
     101  ! d_deltat_dcv   : differential moistening (wake - unpertubed)
    100102  ! omg    : Delta_omg =vertical velocity diff. wake-undist. (Pa/s)
    101103  ! dp_deltomg  : vertical gradient of omg (s-1)
     
    168170  ! --------------------
    169171
    170   INTEGER, INTENT(IN) :: klon,klev
     172  INTEGER,                          INTENT(IN)          :: klon,klev
    171173  INTEGER, DIMENSION (klon),        INTENT(IN)          :: znatsurf
    172174  REAL, DIMENSION (klon, klev),     INTENT(IN)          :: p, pi
     
    197199  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: tx, qx
    198200  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: dtls, dqls
    199   REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: dtke, dqke
     201!!  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: dtke, dqke
     202  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: d_deltat_dcv, d_deltaq_dcv
    200203  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: wkspread    !  unused (jyg)
    201204  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: omgbdth, omg
     
    267270  ! Sub-timestep tendencies and related variables
    268271  REAL, DIMENSION (klon, klev)                          :: d_deltatw, d_deltaqw
     272  REAL, DIMENSION (klon, klev)                          :: d_deltat_dadv, d_deltaq_dadv
     273  REAL, DIMENSION (klon, klev)                          :: d_deltat_lsadv, d_deltaq_lsadv
     274  REAL, DIMENSION (klon, klev)                          :: d_deltat_entrp
     275  REAL, DIMENSION (klon, klev)                          :: d_deltat_spread, d_deltaq_spread
     276
    269277  REAL, DIMENSION (klon, klev)                          :: d_tb, d_qb
     278  REAL, DIMENSION (klon, klev)                          :: d_tb_dadv, d_qb_dadv
     279  REAL, DIMENSION (klon, klev)                          :: d_tb_spread, d_qb_spread
     280
    270281  REAL, DIMENSION (klon)                                :: d_wdens, d_awdens, d_sigmaw, d_asigmaw
    271282  REAL, DIMENSION (klon)                                :: d_sig_gen, d_sig_death, d_sig_col, d_sig_spread, d_sig_bnd
     
    279290  LOGICAL, DIMENSION (klon)                             :: wk_adv, ok_qx_qw
    280291
     292  ! Tests
     293  REAL, DIMENSION (klon, klev)                          :: c5p
     294
    281295  ! Autres variables internes
    282296  INTEGER                                               ::isubstep, k, i, igout
     
    288302  REAL                                                  :: d_sigmaw_targ
    289303  REAL                                                  :: d_wdens_targ
     304
     305  REAL, DIMENSION (klon)                                :: dsigspread  !rate of change of sigmaw due to spreading
    290306
    291307  REAL, DIMENSION (klon)                                :: sum_thx, sum_tx, sum_qx, sum_thvx
     
    317333  REAL, DIMENSION (klon, klev)                          :: omgbdq
    318334
    319   REAL, DIMENSION (klon)                                :: ff, gg
    320335  REAL, DIMENSION (klon)                                :: wape2, cstar2, heff
    321336                                                       
     
    327342  REAL, DIMENSION (klon)                                :: death_rate
    328343!!  REAL, DIMENSION (klon)                                :: nat_rate
    329   REAL, DIMENSION (klon, klev)                          :: entr
    330   REAL, DIMENSION (klon, klev)                          :: detr
     344  REAL, DIMENSION (klon, klev)                          :: entr   ! total entrainment into wakes (spread + birth)
     345  REAL, DIMENSION (klon, klev)                          :: entr_p ! entrainment into wakes (due to births)
     346  REAL, DIMENSION (klon, klev)                          :: detr   ! detrainment from wakes (due to deaths)
    331347
    332348  REAL, DIMENSION(klon)                                 :: sigmaw_in, asigmaw_in ! pour les prints
     
    341357  REAL, DIMENSION (klon)                                :: omega
    342358  REAL, DIMENSION (klon)                                :: h_zzz
     359
     360  !! Bidouilles
     361  REAL                                                  :: iwkadv
     362  REAL                                                  :: iokqxqw
    343363
    344364!print*,'WAKE LJYFz'
     
    438458      dqls(:,:) = 0.
    439459      d_deltat_gw(:,:) = 0.
     460
     461      detr(:,:) = 0.
     462      entr(:,:) = 0.
     463      entr_p(:,:) = 0.
     464      c5p(:,:) = 0.
     465
     466      th1(:,:) = 0.
     467      th2(:,:) = 0.
     468      q1(:,:) = 0.
     469      q2(:,:) = 0.
     470
    440471      d_tb(:,:) = 0.
     472      d_tb_dadv(:,:) = 0.
     473      d_tb_spread(:,:) = 0.
     474
    441475      d_qb(:,:) = 0.
     476      d_qb_dadv(:,:) = 0.
     477      d_qb_spread(:,:) = 0.
     478
    442479      d_deltatw(:,:) = 0.
     480      d_deltat_dadv  (:,:) = 0.
     481      d_deltat_lsadv (:,:) = 0.
     482      d_deltat_dcv   (:,:) = 0.
     483      d_deltat_spread(:,:) = 0.
     484
    443485      d_deltaqw(:,:) = 0.
     486      d_deltaq_dadv(:,:) = 0.
     487      d_deltaq_lsadv(:,:) = 0.
     488      d_deltaq_dcv(:,:) = 0.
     489      d_deltaq_spread(:,:) = 0.
     490
    444491      d_deltatw2(:,:) = 0.
    445492      d_deltaqw2(:,:) = 0.
     
    563610tx(:,:) = 0.
    564611qx(:,:) = 0.
    565 dtke(:,:) = 0.
    566 dqke(:,:) = 0.
     612d_deltat_dcv(:,:) = 0.
     613d_deltaq_dcv(:,:) = 0.
    567614wkspread(:,:) = 0.
    568615omgbdth(:,:) = 0.
     
    883930  !
    884931  ! ------------------------------------------------------------------------
     932  !
    885933    ! wk_adv is the logical flag enabling wake evolution in the time advance
    886934    ! loop
     
    888936      wk_adv(i) = ok_qx_qw(i) .AND. alpha(i) >= 1.
    889937    END DO
     938IF (CPPKEY_IOPHYS_WK) THEN
     939    IF (phys_sub) THEN
     940     iwkadv=0.
     941     IF (wk_adv(1)) iwkadv=1.
     942     iokqxqw=0.
     943     IF (ok_qx_qw(1)) iokqxqw=1.
     944     CALL iophys_ecrit('iwkadv',1,'iwkadv','',iwkadv)
     945     CALL iophys_ecrit('iokqxqw',1,'iokqxqw','',iokqxqw)
     946     CALL iophys_ecrit('alpha',1,'alpha','',alpha(1))
     947    ENDIF
     948END IF
    890949    IF (prt_level>=10) THEN
    891950      PRINT *, 'wake-4.1, isubstep,wk_adv(igout),cstar(igout),wape(igout), ptop(igout) ', &
     
    10211080    IF (phys_sub) THEN
    10221081     CALL iophys_ecrit('ptop',1,'ptop','Pa',ptop)
     1082     CALL iophys_ecrit('wape',1,'wape','J/kg',wape)
     1083     CALL iophys_ecrit('wgen',1,'wgen','1/(s.m2)',wgen)
    10231084     CALL iophys_ecrit('sigmaw',1,'sigmaw','',sigmaw)
    10241085     CALL iophys_ecrit('asigmaw',1,'asigmaw','',asigmaw)
    10251086     CALL iophys_ecrit('wdens',1,'wdens','1/m2',wdens)
    10261087     CALL iophys_ecrit('awdens',1,'awdens','1/m2',awdens)
    1027      CALL iophys_ecrit('rad_wk',1,'rad_wk','m',rad_wk)
    1028      CALL iophys_ecrit('arad_wk',1,'arad_wk','m',arad_wk)
    1029      CALL iophys_ecrit('irad_wk',1,'irad_wk','m',irad_wk)
    10301088    ENDIF
    10311089END IF
     
    10411099                             d_dens_gen, d_dens_death, d_dens_col, d_dens_bnd, &
    10421100                             d_adens_death, d_adens_icol, d_adens_acol, d_adens_bnd )
     1101IF (CPPKEY_IOPHYS_WK) THEN
     1102    IF (phys_sub) THEN
     1103     CALL iophys_ecrit('rad_wk',1,'rad_wk','m',rad_wk)
     1104     CALL iophys_ecrit('arad_wk',1,'arad_wk','m',arad_wk)
     1105     CALL iophys_ecrit('irad_wk',1,'irad_wk','m',irad_wk)
     1106    ENDIF
     1107END IF
    10431108sigmaw=sigmaw-d_sigmaw
    10441109asigmaw=asigmaw-d_asigmaw
     
    13131378    ENDIF
    13141379
     1380
     1381    ! -----------------------------------------------------------------
     1382          ! Compute redistribution (advective) term
     1383
     1384!     rate of change of sigmaw due to spreading
     1385          dsigspread(:) = gfl(:)*cstar(:)
     1386
     1387          CALL wake_dadv(klon, klev, dtimesub, ph, ppi, wk_adv, kupper, &
     1388                    omg, dp_deltomg, sigmaw, dsigspread, &
     1389                    th2, th1, q2, q1, &
     1390                    d_deltat_dadv, d_deltaq_dadv, d_tb_dadv, d_qb_dadv)
     1391
     1392    ! For the difference fields: convert to change per second in order to combine with the
     1393    ! other terms (d_deltat_ls, d_deltat_cv, d_deltat_gw)
     1394    d_deltat_dadv(:,:) = d_deltat_dadv(:,:)/dtimesub
     1395    d_deltaq_dadv(:,:) = d_deltaq_dadv(:,:)/dtimesub
     1396!
     1397    !   For the mean fields: tb and qb the computation of the tendencies due to wakes is
     1398    !   already complete.
     1399    d_tb(:,:) = d_tb_dadv(:,:)
     1400    d_qb(:,:) = d_qb_dadv(:,:)
     1401
    13151402    ! -----------------------------------------------------------------
    13161403    DO k = 1, klev-1
     
    13181405        IF (wk_adv(i) .AND. k<=kupper(i)-1) THEN
    13191406          ! -----------------------------------------------------------------
    1320 
    1321           ! Compute redistribution (advective) term
    1322 
    1323           d_deltatw(i, k) = dtimesub/(ph(i,k)-ph(i,k+1))* &
    1324             (rrd1*omg(i,k)*sigmaw(i)*d_th1(i,k) - &
    1325              rrd2*omg(i,k+1)*(1.-sigmaw(i))*d_th2(i,k+1)- &
    1326              (1.-alpha_up(i,k))*omgbdth(i,k)- &
     1407          d_deltat_lsadv(i, k) = 1./(ph(i,k)-ph(i,k+1))* &
     1408            (-(1.-alpha_up(i,k))*omgbdth(i,k)- &
    13271409             alpha_up(i,k+1)*omgbdth(i,k+1))*ppi(i, k)
    1328 !           print*,'d_d,k_ptop_provis(i)eltatw=', k, d_deltatw(i,k)
    1329 
    1330           d_deltaqw(i, k) = dtimesub/(ph(i,k)-ph(i,k+1))* &
    1331             (rrd1*omg(i,k)*sigmaw(i)*d_q1(i,k)- &
    1332              rrd2*omg(i,k+1)*(1.-sigmaw(i))*d_q2(i,k+1)- &
    1333              (1.-alpha_up(i,k))*omgbdq(i,k)- &
     1410
     1411          d_deltaq_lsadv(i, k) = 1./(ph(i,k)-ph(i,k+1))* &
     1412            (-(1.-alpha_up(i,k))*omgbdq(i,k)- &
    13341413             alpha_up(i,k+1)*omgbdq(i,k+1))
    1335 !           print*,'d_deltaqw=', k, d_deltaqw(i,k)
    1336 
    1337           ! and increment large scale tendencies
    1338 
    1339 
    1340 
    1341 
    1342           ! C
    1343           ! -----------------------------------------------------------------
    1344           d_tb(i, k) = dtimesub*((rre1(i)*omg(i,k)*sigmaw(i)*d_th1(i,k)- &
    1345                                   rre2(i)*omg(i,k+1)*(1.-sigmaw(i))*d_th2(i,k+1))/ &
    1346                                  (ph(i,k)-ph(i,k+1)) &
    1347                                  -sigmaw(i)*(1.-sigmaw(i))*dth(i,k)*(omg(i,k)-omg(i,k+1))/ &
    1348                                  (ph(i,k)-ph(i,k+1)) )*ppi(i, k)
    1349 
    1350           d_qb(i, k) = dtimesub*((rre1(i)*omg(i,k)*sigmaw(i)*d_q1(i,k)- &
    1351                                   rre2(i)*omg(i,k+1)*(1.-sigmaw(i))*d_q2(i,k+1))/ &
    1352                                  (ph(i,k)-ph(i,k+1)) &
    1353                                  -sigmaw(i)*(1.-sigmaw(i))*deltaqw(i,k)*(omg(i,k)-omg(i,k+1))/ &
    1354                                  (ph(i,k)-ph(i,k+1)) )
    1355         ELSE IF (wk_adv(i) .AND. k==kupper(i)) THEN
    1356           d_tb(i, k) = dtimesub*(rre1(i)*omg(i,k)*sigmaw(i)*d_th1(i,k)/(ph(i,k)-ph(i,k+1)))*ppi(i, k)
    1357 
    1358           d_qb(i, k) = dtimesub*(rre1(i)*omg(i,k)*sigmaw(i)*d_q1(i,k)/(ph(i,k)-ph(i,k+1)))
    13591414
    13601415        END IF
     
    13641419    ! ------------------------------------------------------------------
    13651420
    1366     IF (prt_level>=10) THEN
    1367       PRINT *, 'wake-4.3, d_deltatw(igout,k) ', (k,d_deltatw(igout,k), k=1,klev)
    1368       PRINT *, 'wake-4.3, d_deltaqw(igout,k) ', (k,d_deltaqw(igout,k), k=1,klev)
     1421!!    IF (prt_level>=10) THEN
     1422    IF (prt_level>=10 .and. wk_adv(igout)) THEN
     1423      PRINT *, 'wake-4.3, d_deltat_dadv(igout,k) ', (k,d_deltat_dadv(igout,k), k=1,klev)
     1424      PRINT *, 'wake-4.3, d_deltat_lsadv(igout,k) ', (k,d_deltat_lsadv(igout,k), k=1,klev)
     1425      PRINT *, 'wake-4.3, d_deltaq_dadv(igout,k) ', (k,d_deltaq_dadv(igout,k), k=1,klev)
     1426      PRINT *, 'wake-4.3, d_deltaq_lsadv(igout,k) ', (k,d_deltaq_lsadv(igout,k), k=1,klev)
    13691427    ENDIF
    13701428
     
    13761434          IF (wk_adv(i) .AND. k<=kupper(i)) THEN
    13771435            detr(i,k) = - d_sig_death(i) - d_sig_col(i)     
    1378             entr(i,k) = d_sig_gen(i)
     1436            entr_p(i,k) = d_sig_gen(i)
    13791437          ENDIF
    13801438        ENDDO
     
    13861444            detr(i, k) = 0.
    13871445   
    1388             entr(i, k) = 0.
     1446            entr_p(i, k) = 0.
    13891447          ENDIF
    13901448        ENDDO
     
    14261484          ! .                   /(1-sigmaw)
    14271485
    1428           dtke(i, k) = (dtdwn(i,k)/sigmaw(i)-dta(i,k)/(1.-sigmaw(i)))
    1429           dqke(i, k) = (dqdwn(i,k)/sigmaw(i)-dqa(i,k)/(1.-sigmaw(i)))
     1486          !! Differential heating (d_deltat_dcv) and moistening (d_deltaq_dcv) by deep convection
     1487          d_deltat_dcv(i, k) = (dtdwn(i,k)/sigmaw(i)-dta(i,k)/(1.-sigmaw(i)))
     1488!!          dtke(i, k) = (dtdwn(i,k)/sigmaw(i)-dta(i,k)/(1.-sigmaw(i)))        ! supprime
     1489          d_deltaq_dcv(i, k) = (dqdwn(i,k)/sigmaw(i)-dqa(i,k)/(1.-sigmaw(i)))
     1490!!          dqke(i, k) = (dqdwn(i,k)/sigmaw(i)-dqa(i,k)/(1.-sigmaw(i)))        ! supprime
    14301491          ! print*,'dtKE= ',dtKE(i,k),' dqKE= ',dqKE(i,k)
    14311492
     
    14401501!!              sigmaw(i)*(1.-sigmaw(i))*dp_deltomg(i, k)
    14411502!!
    1442             entr(i, k) = entr(i,k) + gfl(i)*cstar(i) + &
     1503            entr(i, k) = entr_p(i,k) + gfl(i)*cstar(i) + &
    14431504                         sigmaw(i)*(1.-sigmaw(i))*dp_deltomg(i, k)   
    14441505!>jyg
     
    14581519            dtimesub
    14591520          ! write(lunout,*)'wake.F ',i,k, dtimesub,d_deltatw(i,k)
    1460           ff(i) = d_deltatw(i, k)/dtimesub
    14611521
    14621522          ! Sans GW
     
    14711531          ! GW formule 2
    14721532
     1533          !! Entrainment due to spread is supposed to be included in the differential advection
     1534          !! term (d_deltat_dadv); hence only the entrainment due to population dynamics (entr_p)
     1535          !! appears in the expression of d_deltatw.
    14731536          IF (dtimesub*tgw(i,k)<1.E-10) THEN
    1474             d_deltatw(i, k) = dtimesub*(ff(i)+dtke(i,k) - &
    1475                entr(i,k)*deltatw(i,k)/sigmaw(i) - &
     1537!!!            d_deltatw(i, k) = dtimesub*(ff(i)+dtke(i,k) - &        ! nouvelle notation
     1538            d_deltatw(i, k) = dtimesub*(d_deltat_dadv(i,k)+d_deltat_lsadv(i,k)+d_deltat_dcv(i,k) - &
     1539               entr_p(i,k)*deltatw(i,k)/sigmaw(i) - &
    14761540               (death_rate(i)*sigmaw(i)+detr(i,k))*deltatw(i,k)/(1.-sigmaw(i)) - & ! cc
    14771541               tgw(i,k)*deltatw(i,k) )
    14781542          ELSE
    14791543            d_deltatw(i, k) = 1/tgw(i, k)*(1-exp(-dtimesub*tgw(i,k)))* &
    1480                (ff(i)+dtke(i,k) - &
    1481                 entr(i,k)*deltatw(i,k)/sigmaw(i) - &
     1544!!!               (ff(i)+dtke(i,k) - &                                ! nouvelle notation
     1545               (d_deltat_dadv(i,k)+d_deltat_lsadv(i,k)+d_deltat_dcv(i,k) - &
     1546                entr_p(i,k)*deltatw(i,k)/sigmaw(i) - &
    14821547                (death_rate(i)*sigmaw(i)+detr(i,k))*deltatw(i,k)/(1.-sigmaw(i)) - &
    14831548                tgw(i,k)*deltatw(i,k) )
     
    14851550
    14861551          dth(i, k) = deltatw(i, k)/ppi(i, k)
    1487 
    1488           gg(i) = d_deltaqw(i, k)/dtimesub
    1489 
    1490           d_deltaqw(i, k) = dtimesub*(gg(i)+dqke(i,k) - &
    1491             entr(i,k)*deltaqw(i,k)/sigmaw(i) - &
     1552          c5p(i,k) = - entr_p(i,k)*deltatw(i,k)/sigmaw(i)
     1553
     1554          !! Entrainment due to spread is supposed to be included in the differential advection
     1555          !! term (d_deltaq_dadv); hence only the entrainment due to population dynamics (entr_p)
     1556          !! appears in the expression of d_deltaqw.
     1557          d_deltaqw(i, k) = dtimesub*(d_deltaq_dadv(i,k)+d_deltaq_lsadv(i,k)+d_deltaq_dcv(i,k) - &
     1558            entr_p(i,k)*deltaqw(i,k)/sigmaw(i) - &
    14921559            (death_rate(i)*sigmaw(i)+detr(i,k))*deltaqw(i,k)/(1.-sigmaw(i)))
    14931560          ! cc
     
    15011568    END DO
    15021569
     1570!!    IF (prt_level>=10) THEN
     1571    IF (prt_level>=10 .and. wk_adv(igout)) THEN
     1572      PRINT *, 'wake-4.4, isubstep= ', isubstep,' c5p(igout,k) ', (k,c5p(igout,k), k=1,klev)
     1573      PRINT *, 'wake-4.4, isubstep= ', isubstep,' deltatw(igout,k) ', (k,deltatw(igout,k), k=1,klev)
     1574      PRINT *, 'wake-4.4, isubstep= ', isubstep,' d_deltat_dcv(igout,k) ', (k,d_deltat_dcv(igout,k), k=1,klev)
     1575      PRINT *, 'wake-4.4, isubstep= ', isubstep,' tgw(igout,k)*deltatw(igout,k) ', (k,tgw(igout,k)*deltatw(igout,k), k=1,klev)
     1576      PRINT *, 'wake-4.4, isubstep= ', isubstep,' death_rate(igout) ', death_rate(igout)
     1577      PRINT *, 'wake-4.4, isubstep= ', isubstep,' detr(igout,k) ',  (k,detr(igout,k), k=1,klev)
     1578      PRINT *, 'wake-4.4, isubstep= ', isubstep,' d_deltatw(igout,k) ', (k,d_deltatw(igout,k), k=1,klev)
     1579      PRINT *, 'wake-4.4, isubstep= ', isubstep,' d_deltaqw(igout,k) ', (k,d_deltaqw(igout,k), k=1,klev)
     1580      PRINT *, 'wake-4.4, isubstep= ', isubstep,' d_tb(igout,k) ', (k,d_tb(igout,k), k=1,klev)
     1581      PRINT *, 'wake-4.4, isubstep= ', isubstep,' d_qb(igout,k) ', (k,d_qb(igout,k), k=1,klev)
     1582    ENDIF
     1583
     1584!
     1585IF (CPPKEY_IOPHYS_WK) THEN
     1586    IF (phys_sub) THEN
     1587     DO k = 1,klev
     1588      d_deltat_entrp(:,k) = - entr_p(:,k)*deltatw(:,k)/sigmaw(:)
     1589     ENDDO
     1590     CALL iophys_ecrit('d_deltatw',klev,'d_deltatw','K/s',d_deltatw(:,1:klev))
     1591     CALL iophys_ecrit('d_deltat_dadv',klev,'d_deltat_dadv','K/s',d_deltat_dadv(:,1:klev))
     1592     CALL iophys_ecrit('d_deltat_lsadv',klev,'d_deltat_lsadv','K/s',d_deltat_lsadv(:,1:klev))
     1593     CALL iophys_ecrit('d_deltat_dcv',klev,'d_deltat_dcv','K/s',d_deltat_dcv(:,1:klev))
     1594     CALL iophys_ecrit('d_deltat_entrp',klev,'d_deltat_entrp','K/s',d_deltat_entrp(:,1:klev))
     1595
     1596    ENDIF
     1597END IF
    15031598
    15041599    ! Scale tendencies so that water vapour remains positive in w and x.
     
    18221917        wape(i) = -RG*hw0(i)*(av_dth(i)+epsim1*(av_thx(i)*av_dq(i) + &
    18231918                              av_dth(i)*av_qx(i)+av_dth(i)*av_dq(i)))/av_thvx(i)
     1919!!print *,'XXXXwake wape(i), hw0(i), av_dth(i), av_thx(i), av_dq(i), av_qx(i), av_thvx(i) ', &
     1920!!                  wape(i), hw0(i), av_dth(i), av_thx(i), av_dq(i), av_qx(i), av_thvx(i)
    18241921      END IF
    18251922    END DO
     
    18791976IF (CPPKEY_IOPHYS_WK) THEN
    18801977    IF (.not.phys_sub) CALL iophys_ecrit('wape_b',1,'wape_b','J/kg',wape)
     1978    IF (.not.phys_sub) CALL iophys_ecrit('alpha_mod',1,'alpha_modulation','-',alpha_tot)
    18811979END IF
    18821980  IF (prt_level>=10) THEN
     
    21362234IF (CPPKEY_IOPHYS_WK) THEN
    21372235      IF (.not.phys_sub) THEN
    2138        CALL iophys_ecrit('fip',1,'fip','J/kg',fip)
    2139        CALL iophys_ecrit('hw',1,'hw','J/kg',hw)
    2140        CALL iophys_ecrit('ptop',1,'ptop','J/kg',ptop)
    2141        CALL iophys_ecrit('wdens',1,'wdens','J/kg',wdens)
    2142        CALL iophys_ecrit('awdens',1,'awdens','m',awdens)
    2143        CALL iophys_ecrit('sigmaw',1,'sigmaw','m',sigmaw)
    2144        CALL iophys_ecrit('asigmaw',1,'asigmaw','m',asigmaw)
    2145 !   
    2146        CALL iophys_ecrit('rad_wk',1,'rad_wk','J/kg',rad_wk)
    2147        CALL iophys_ecrit('arad_wk',1,'arad_wk','J/kg',arad_wk)
    2148        CALL iophys_ecrit('irad_wk',1,'irad_wk','J/kg',irad_wk)
    2149 !   
    21502236       call iophys_ecrit('d_wdens2',1,'d_wdens2','',d_wdens2)
    21512237       call iophys_ecrit('d_dens_gen2',1,'d_dens_gen2','',d_dens_gen2)
     
    22812367IF (CPPKEY_IOPHYS_WK) THEN
    22822368  IF (.not.phys_sub) CALL iophys_ecrit('wape_c',1,'wape_c','J/kg',wape)
    2283 END IF
     2369  IF (iflag_wk_pop_dyn >= 3) THEN
     2370    IF (.not.phys_sub) THEN
     2371     CALL iophys_ecrit('fip',1,'fip','J/kg',fip)
     2372     CALL iophys_ecrit('hw',1,'hw','J/kg',hw)
     2373     CALL iophys_ecrit('ptop',1,'ptop','J/kg',ptop)
     2374     CALL iophys_ecrit('wdens',1,'wdens','J/kg',wdens)
     2375     CALL iophys_ecrit('awdens',1,'awdens','m',awdens)
     2376     CALL iophys_ecrit('sigmaw',1,'sigmaw','m',sigmaw)
     2377     CALL iophys_ecrit('asigmaw',1,'asigmaw','m',asigmaw)
     2378!
     2379     CALL iophys_ecrit('rad_wk',1,'rad_wk','J/kg',rad_wk)
     2380     CALL iophys_ecrit('arad_wk',1,'arad_wk','J/kg',arad_wk)
     2381     CALL iophys_ecrit('irad_wk',1,'irad_wk','J/kg',irad_wk)
     2382    ENDIF  ! (.not.phys_sub)
     2383  ENDIF  ! (iflag_wk_pop_dyn >= 3)
     2384END IF  !(CPPKEY_IOPHYS_WK)
    22842385
    22852386
     
    23632464
    23642465  ! Input
    2365   REAL qb(nlon, nl), d_qb(nlon, nl)
    2366   REAL deltaqw(nlon, nl), d_deltaqw(nlon, nl)
    2367   REAL sigmaw(nlon), d_sigmaw(nlon)
    2368   LOGICAL wk_adv(nlon)
    2369   INTEGER nl, nlon
     2466  INTEGER,                      INTENT(IN)               :: nl, nlon
     2467  REAL, DIMENSION(nlon, nl),    INTENT(IN)               :: qb, d_qb
     2468  REAL, DIMENSION(nlon, nl),    INTENT(IN)               :: deltaqw, d_deltaqw
     2469  REAL, DIMENSION(nlon),        INTENT(IN)               :: sigmaw, d_sigmaw
     2470  LOGICAL, DIMENSION(nlon),     INTENT(IN)               :: wk_adv
    23702471  ! Output
    2371   REAL alpha(nlon)
     2472  REAL, DIMENSION(nlon),        INTENT(INOUT)            :: alpha
    23722473  ! Internal variables
    23732474  REAL zeta(nlon, nl)
     
    32023303  REAL, DIMENSION (klon)                                :: is_wk           !! mean area of individual inactive wakes
    32033304  REAL, DIMENSION (klon)                                :: tau_wk_inv      !! tau = life time of wakes
    3204   REAL                                                  :: tau_wk_inv_min
    32053305  REAL, DIMENSION (klon)                                :: tau_prime       !! tau_prime = life time of actives wakes
    32063306  REAL                                                  :: d_wdens_targ, d_sigmaw_targ
     
    32293329!!
    32303330
     3331! Initialization
     3332 tau_wk_inv(:) = 0.
     3333! Initialization of output variables
     3334 rad_wk(:) = 0.
     3335 arad_wk(:) = 0.
     3336 irad_wk(:) = 0.
     3337 gfl(:) = 0.
     3338 agfl(:) = 0.
     3339!
     3340 d_wdens(:) = 0.
     3341 d_awdens(:) = 0.
     3342 d_sigmaw(:) = 0.
     3343 d_asigmaw (:) = 0.
     3344!
     3345 d_sig_gen(:) = 0.
     3346 d_sig_death(:) = 0.
     3347 d_sig_col(:) = 0.
     3348 d_sig_spread(:) = 0.
     3349 d_sig_bnd(:) = 0.
     3350 d_asig_death(:) = 0.
     3351 d_asig_aicol(:) = 0.
     3352 d_asig_iicol(:) = 0.
     3353 d_asig_spread(:) = 0.
     3354 d_asig_bnd(:) = 0.
     3355 d_dens_gen(:) = 0.
     3356 d_dens_death(:) = 0.
     3357 d_dens_col(:) = 0.
     3358 d_dens_bnd(:) = 0.
     3359 d_adens_death(:) = 0.
     3360 d_adens_icol(:) = 0.
     3361 d_adens_acol(:) = 0.
     3362 d_adens_bnd(:) = 0.
     3363
     3364
    32313365      DO i = 1, klon
    32323366        IF (wk_adv(i)) THEN
     
    32523386      DO i = 1, klon
    32533387        IF (wk_adv(i)) THEN
    3254           tau_wk_inv(i) = max( (3.*cstar(i))/(irad_wk(i)*((cstar(i)/cstart)**1.5 - 1)), 0.)
    3255           tau_wk_inv_min = min(tau_wk_inv(i), 1./dtimesub)
     3388!  print *,'ZZZZpopdyn3 wgen(1) ',wgen(1)
     3389!  print *,'ZZZZpopdyn3 cstar(1) ',cstar(1)
     3390!  print *,'ZZZZpopdyn3 isigmaw(1) ',isigmaw(1)
     3391!  print *,'ZZZZpopdyn3 gfl(1) ',gfl(1)
     3392!!          tau_wk_inv(i) = max( (3.*cstar(i))/(irad_wk(i)*((cstar(i)/cstart)**1.5 - 1)), 0.)
     3393          tau_wk_inv(i) = min(max( (3.*cstar(i))/(irad_wk(i)*((cstar(i)/cstart)**1.5 - 1)), 0.), 1./dtimesub)
    32563394          tau_prime(i) = tau_cv
    32573395
    32583396          d_sig_gen(i) = wgen(i)*aa0
    3259           d_sig_death(i) = - isigmaw(i)*tau_wk_inv_min
     3397          d_sig_death(i) = - isigmaw(i)*tau_wk_inv(i)
    32603398          d_sig_col(i) = - 2.*igfl(i)*cstar(i)*iwdens(i)*(2.*is_wk(i)-aa0)
    32613399          d_sig_spread(i) = gfl(i)*cstar(i)
     
    32663404          d_sig_spread(i) =  d_sig_spread(i)*dtimesub
    32673405          d_sigmaw(i) =  d_sig_gen(i) + d_sig_death(i) + d_sig_col(i) + d_sig_spread(i)
    3268 IF (CPPKEY_IOPHYS_WK) THEN
    3269           IF (phys_sub) call iophys_ecrit('d_sigmaw0',1,'d_sigmaw0','',d_sigmaw)
    3270 END IF
    3271 
    32723406         
    32733407          d_sigmaw_targ = max(d_sigmaw(i), sigmad-sigmaw(i))
     
    32773411          d_sigmaw(i) = d_sigmaw_targ
    32783412!!          d_sigmaw(i) = max(d_sigmaw(i), sigmad-sigmaw(i))
    3279 IF (CPPKEY_IOPHYS_WK) THEN
    3280           IF (phys_sub) THEN
    3281              call iophys_ecrit('tauwk_inv',1,'tau_wk_inv_min','',tau_wk_inv_min)
    3282              call iophys_ecrit('d_sigmaw',1,'d_sigmaw','',d_sigmaw)
    3283              call iophys_ecrit('d_sig_gen',1,'d_sig_gen','',d_sig_gen)
    3284              call iophys_ecrit('d_sig_death',1,'d_sig_death','',d_sig_death)
    3285              call iophys_ecrit('d_sig_col',1,'d_sig_col','',d_sig_col)
    3286              call iophys_ecrit('d_sig_spread',1,'d_sig_spread','',d_sig_spread)
    3287              call iophys_ecrit('d_sig_bnd',1,'d_sig_bnd','',d_sig_bnd)
    3288           ENDIF
    3289 END IF
    32903413          d_asig_death(i) = - asigmaw(i)/tau_prime(i)
    32913414          d_asig_aicol(i) = (agfl(i)*iwdens(i) + igfl(i)*awdens(i))*cstar(i)*is_wk(i)
     
    32983421          d_asig_spread(i) =  d_asig_spread(i)*dtimesub
    32993422          d_asigmaw(i) =  d_sig_gen(i) + d_asig_death(i) + d_asig_aicol(i) + d_asig_iicol(i) + d_asig_spread(i)
    3300 IF (CPPKEY_IOPHYS_WK) THEN
    3301           IF (phys_sub) call iophys_ecrit('d_asigmaw0',1,'d_asigmaw0','',d_asigmaw)
    3302 END IF
    3303 
     3423!
    33043424          d_sigmaw_targ = min(max(d_asigmaw(i),-asigmaw(i)), sigmaw(i)-asigmaw(i))
    33053425!!          d_dens_bnd(i) = d_dens_bnd(i) + d_sigmaw_targ - d_sigmaw(i)
    33063426          d_asig_bnd(i) = d_sigmaw_targ - d_asigmaw(i)
    33073427          d_asigmaw(i) = d_sigmaw_targ
    3308 IF (CPPKEY_IOPHYS_WK) THEN
    3309           IF (phys_sub) THEN
    3310              call iophys_ecrit('d_asigmaw',1,'d_asigmaw','',d_asigmaw)
    3311              call iophys_ecrit('d_asig_death',1,'d_asig_death','',d_asig_death)
    3312              call iophys_ecrit('d_asig_aicol',1,'d_asig_aicol','',d_asig_aicol)
    3313              call iophys_ecrit('d_asig_iicol',1,'d_asig_iicol','',d_asig_iicol)
    3314              call iophys_ecrit('d_asig_spread',1,'d_asig_spread','',d_asig_spread)
    3315              call iophys_ecrit('d_asig_bnd',1,'d_asig_bnd','',d_asig_bnd)
    3316           ENDIF
    3317 END IF
    33183428          d_dens_gen(i) = wgen(i)
    3319           d_dens_death(i) = - iwdens(i)*tau_wk_inv_min
     3429          d_dens_death(i) = - iwdens(i)*tau_wk_inv(i)
    33203430          d_dens_col(i) =  - 2.*gfl(i)*cstar(i)*wdens(i)
    33213431!
     
    33293439          d_dens_bnd(i) = d_wdens_targ - d_wdens(i)
    33303440          d_wdens(i) = d_wdens_targ
    3331 IF (CPPKEY_IOPHYS_WK) THEN
    3332     IF (phys_sub) THEN
    3333         call iophys_ecrit('d_wdens',1,'d_wdens','',d_wdens)
    3334         call iophys_ecrit('d_dens_gen',1,'d_dens_gen','',d_dens_gen)
    3335         call iophys_ecrit('d_dens_death',1,'d_dens_death','',d_dens_death)
    3336         call iophys_ecrit('d_dens_col',1,'d_dens_col','',d_dens_col)
    3337     ENDIF
    3338 END IF
    3339 
    33403441          d_adens_death(i) = -awdens(i)/tau_prime(i)
    33413442          d_adens_icol(i) =   2.*igfl(i)*cstar(i)*iwdens(i)
     
    33463447          d_adens_acol(i)  =   d_adens_acol(i)*dtimesub
    33473448          d_awdens(i) =   d_dens_gen(i) + d_adens_death(i) + d_adens_icol(i) + d_adens_acol(i)     
    3348 IF (CPPKEY_IOPHYS_WK) THEN
    3349     IF (phys_sub) THEN
    3350         call iophys_ecrit('d_awdens',1,'d_awdens','',d_awdens)
    3351         call iophys_ecrit('d_adens_death',1,'d_adens_death','',d_adens_death)
    3352         call iophys_ecrit('d_adens_icol',1,'d_adens_icol','',d_adens_icol)
    3353         call iophys_ecrit('d_adens_acol',1,'d_adens_acol','',d_adens_acol)
    3354     ENDIF
    3355 END IF
    33563449          d_wdens_targ = min(max(d_awdens(i),-awdens(i)), wdens(i)-awdens(i))
    33573450!!          d_dens_bnd(i) = d_dens_bnd(i) + d_wdens_targ - d_wdens(i)
     
    33703463        ENDIF
    33713464      ENDDO
     3465IF (CPPKEY_IOPHYS_WK) THEN
     3466    IF (phys_sub) THEN
     3467       call iophys_ecrit('d_sigmaw0',1,'d_sigmaw0','',d_sigmaw)
     3468!
     3469       call iophys_ecrit('cstar',1,'cstar','',cstar)
     3470       call iophys_ecrit('wgen_pd3',1,'wgen_popdyn3','',wgen)
     3471       call iophys_ecrit('tauwk_inv',1,'tau_wk_inv','',tau_wk_inv)
     3472       call iophys_ecrit('d_sigmaw',1,'d_sigmaw','',d_sigmaw)
     3473       call iophys_ecrit('d_sig_gen',1,'d_sig_gen','',d_sig_gen)
     3474       call iophys_ecrit('d_sig_death',1,'d_sig_death','',d_sig_death)
     3475       call iophys_ecrit('d_sig_col',1,'d_sig_col','',d_sig_col)
     3476       call iophys_ecrit('d_sig_spread',1,'d_sig_spread','',d_sig_spread)
     3477       call iophys_ecrit('d_sig_bnd',1,'d_sig_bnd','',d_sig_bnd)
     3478!
     3479       call iophys_ecrit('d_asigmaw0',1,'d_asigmaw0','',d_asigmaw)
     3480!
     3481       call iophys_ecrit('d_asigmaw',1,'d_asigmaw','',d_asigmaw)
     3482       call iophys_ecrit('d_asig_death',1,'d_asig_death','',d_asig_death)
     3483       call iophys_ecrit('d_asig_aicol',1,'d_asig_aicol','',d_asig_aicol)
     3484       call iophys_ecrit('d_asig_iicol',1,'d_asig_iicol','',d_asig_iicol)
     3485       call iophys_ecrit('d_asig_spread',1,'d_asig_spread','',d_asig_spread)
     3486       call iophys_ecrit('d_asig_bnd',1,'d_asig_bnd','',d_asig_bnd)
     3487!
     3488       call iophys_ecrit('d_wdens',1,'d_wdens','',d_wdens)
     3489       call iophys_ecrit('d_dens_gen',1,'d_dens_gen','',d_dens_gen)
     3490       call iophys_ecrit('d_dens_death',1,'d_dens_death','',d_dens_death)
     3491       call iophys_ecrit('d_dens_col',1,'d_dens_col','',d_dens_col)
     3492
     3493       call iophys_ecrit('d_awdens',1,'d_awdens','',d_awdens)
     3494       call iophys_ecrit('d_adens_death',1,'d_adens_death','',d_adens_death)
     3495       call iophys_ecrit('d_adens_icol',1,'d_adens_icol','',d_adens_icol)
     3496       call iophys_ecrit('d_adens_acol',1,'d_adens_acol','',d_adens_acol)
     3497    ENDIF
     3498END IF
     3499
    33723500
    33733501      IF (prt_level >= 10) THEN
     
    33863514    RETURN
    33873515    END SUBROUTINE wake_popdyn_3 
     3516   
     3517    SUBROUTINE wake_dadv(klon, klev, dtime, ph, ppi, wk_adv, kupper,  &
     3518                         deltomg, dp_deltomg, sigmaw, dsigspread,  &
     3519                         thw, thx, qw, qx, &
     3520                         d_deltat_dadv, d_deltaq_dadv, d_tb_dadv, d_qb_dadv)
     3521
     3522  USE lmdz_wake_ini , ONLY : flag_dadv_implicit
     3523
     3524IMPLICIT NONE
     3525
     3526  INTEGER, INTENT(IN)                                     :: klon, klev
     3527  REAL,                               INTENT(IN)          :: dtime
     3528  REAL, DIMENSION (klon, klev+1),     INTENT(IN)          :: ph
     3529  REAL, DIMENSION (klon, klev),       INTENT(IN)          :: ppi
     3530  LOGICAL, DIMENSION (klon),          INTENT(IN)          :: wk_adv
     3531  INTEGER, DIMENSION (klon),          INTENT(IN)          :: kupper
     3532  REAL, DIMENSION (klon, klev),       INTENT(IN)          :: deltomg
     3533  REAL, DIMENSION (klon, klev),       INTENT(IN)          :: dp_deltomg
     3534  REAL, DIMENSION (klon),             INTENT(IN)          :: sigmaw
     3535  REAL, DIMENSION (klon),             INTENT(IN)          :: dsigspread
     3536  REAL, DIMENSION (klon, klev),       INTENT(IN)          :: thw           ! component # 1
     3537  REAL, DIMENSION (klon, klev),       INTENT(IN)          :: thx           ! component # 2
     3538  REAL, DIMENSION (klon, klev),       INTENT(IN)          :: qw            ! component # 1
     3539  REAL, DIMENSION (klon, klev),       INTENT(IN)          :: qx            ! component # 2
     3540
     3541  REAL, DIMENSION (klon, klev),       INTENT(OUT)         :: d_deltat_dadv
     3542  REAL, DIMENSION (klon, klev),       INTENT(OUT)         :: d_deltaq_dadv
     3543  REAL, DIMENSION (klon, klev),       INTENT(OUT)         :: d_tb_dadv
     3544  REAL, DIMENSION (klon, klev),       INTENT(OUT)         :: d_qb_dadv
     3545
     3546! Internal variables
     3547  INTEGER                               :: i, k
     3548  REAL, DIMENSION (klon, klev)          :: entr_s    ! entrainment into wakes due to spread
     3549  REAL, DIMENSION (klon, klev)          :: thb, qb
     3550  REAL, DIMENSION (klon, klev)          :: delta_th, delta_q
     3551
     3552! Tests
     3553
     3554! Arrays used in the implicit scheme
     3555  REAL, DIMENSION (klon)                :: rr11, rr12, rr21, rr22
     3556
     3557  REAL, DIMENSION (klon, klev)          :: aa11, aa12, aa21, aa22
     3558  REAL, DIMENSION (klon, klev)          :: bb11, bb12, bb21, bb22
     3559  REAL, DIMENSION (klon, klev)          :: cc11, cc12, cc21, cc22
     3560
     3561  REAL, DIMENSION (klon, klev)          :: alpha11, alpha12, alpha21, alpha22
     3562  REAL, DIMENSION (klon, klev)          :: beta11, beta12, beta21, beta22
     3563  REAL, DIMENSION (klon, klev)          :: gamma11, gamma12, gamma21, gamma22
     3564  REAL, DIMENSION (klon, klev)          :: ai11, ai12, ai21, ai22             ! inverse of alpha
     3565
     3566  REAL, DIMENSION (klon, klev)          :: xt1, xt2, xq1, xq2
     3567  REAL, DIMENSION (klon, klev)          :: yt1, yt2, yq1, yq2
     3568  REAL, DIMENSION (klon, klev)          :: zt1, zt2, zq1, zq2
     3569  REAL, DIMENSION (klon, klev)          :: th1, th2, q1, q2
     3570
     3571  REAL                                  :: coef, det
     3572
     3573  REAL, DIMENSION (klon,klev)           :: xt1inv, xt2inv, xq1inv, xq2inv
     3574
     3575! Arrays used in the explicit scheme (vertical gradients)
     3576  REAL, DIMENSION (klon, klev)          :: d_thx, d_qx
     3577  REAL, DIMENSION (klon, klev)          :: d_thw, d_qw
     3578  REAL, DIMENSION (klon, klev)          :: d_dth, d_dq
     3579
     3580!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     3581
     3582    entr_s(:,:) = 0.
     3583    delta_th(:,:) = 0.
     3584   
     3585    d_deltat_dadv(:,:) = 0.
     3586    d_deltaq_dadv(:,:) = 0.
     3587    d_tb_dadv(:,:) = 0.
     3588    d_qb_dadv(:,:) = 0.
     3589
     3590
     3591    rr11(:) = sigmaw(:)
     3592    rr12(:) = 1.-sigmaw(:)
     3593    rr21(:) = 1.
     3594    rr22(:) = -1.
     3595
     3596    DO k = 1, klev
     3597      DO i = 1,klon
     3598        IF (wk_adv(i) .AND. k<=kupper(i)+1) THEN
     3599         thb(i,k)      = rr11(i)*thw(i,k)+rr12(i)*thx(i,k)
     3600         delta_th(i,k) = rr21(i)*thw(i,k)+rr22(i)*thx(i,k)
     3601       
     3602         qb(i,k)      = rr11(i)*qw(i,k)+rr12(i)*qx(i,k)
     3603         delta_q(i,k) = rr21(i)*qw(i,k)+rr22(i)*qx(i,k)
     3604        ENDIF
     3605      ENDDO
     3606    ENDDO
     3607
     3608    DO i = 1, klon
     3609        entr_s(i,klev) = 0.
     3610    ENDDO
     3611
     3612    DO k = 1, klev-1
     3613      DO i = 1,klon
     3614        IF (wk_adv(i) .AND. k<=kupper(i)+1) THEN
     3615!!        entr_s(i,k) = dsigspread(i) - sigmaw(i)*(1.-sigmaw(i))*(deltomg(i,k+1)-deltomg(i,k)) / &
     3616!!                     (ph(i,k)-ph(i,k+1))   
     3617
     3618          entr_s(i,k) = dsigspread(i) + sigmaw(i)*(1.-sigmaw(i))*dp_deltomg(i,k)
     3619!!  print *,'dadv, k, dp_deltomg(i,k), (deltomg(i,k)-deltomg(i,k+1))/(ph(i,k)-ph(i,k+1)) ', &
     3620!!                 k, dp_deltomg(i,k), (deltomg(i,k)-deltomg(i,k+1))/(ph(i,k)-ph(i,k+1))
     3621
     3622        ENDIF
     3623      ENDDO
     3624    ENDDO
     3625
     3626! -------------------------------------------------------------------------------------------
     3627!   Depending on flag_dadv_implicit, use implicit upstream scheme or explicit upstream scheme
     3628! -------------------------------------------------------------------------------------------
     3629
     3630  IF (flag_dadv_implicit) THEN
     3631
     3632!   Implicit scheme : solve for d_deltat_dadv and d_tb_dadv
     3633!                     (and similarly for d_deltaq_dadv and d_qb_dadv).
     3634!                     The system to be inverted is block-tridiagonal with 2x2 blocks.
     3635! -----------------------------------------------------------------------------------------
     3636
     3637!        Matrix indexing:                   Theta_w     Theta_x
     3638!
     3639!                                           /               
     3640!                           Theta_b        |  A11        A12 |
     3641!                                          |                 |
     3642!                           delta_theta    |  A21        A22 |
     3643!                                                           /
     3644!       Tridiagonal matrix
     3645!         /                                                         
     3646!         |   aa(1)   bb(1)  0                                       |
     3647!         |   cc(2)   aa(2)  bb(2)  0                                |
     3648!         |   0       cc(3)  aa(3)  bb(3)                            |
     3649!         |                                                          |
     3650!                     .      .      .       .                         
     3651!                                                                     
     3652!                            .      .       .       .                 
     3653!         |                                                          |
     3654!         |                         cc(n-2) aa(n-2) bb(n-2) 0        |   
     3655!         |                         0       cc(n-1) aa(n-1) bb(n-1)  |             
     3656!                                           0       cc(n)   aa(n)    /             
     3657! -----------------------------------------------------------------------------------------
     3658
     3659!! Building the tridiagonal matrix
     3660    DO i = 1,klon
     3661      IF (wk_adv(i)) THEN
     3662        k = kupper(i)
     3663        coef = dtime/(ph(i,k)-ph(i,k+1))
     3664        aa11(i,k) = rr11(i)+coef*sigmaw(i)*(1.-sigmaw(i))*deltomg(i,k)
     3665        aa12(i,k) = rr12(i)
     3666        aa21(i,k) = rr21(i)+coef*( dsigspread(i)/sigmaw(i)*(ph(i,k)-ph(i,k+1)) + &
     3667                                     (1.-sigmaw(i))*deltomg(i,k) )
     3668        aa22(i,k) = rr22(i)+coef*(-dsigspread(i)/sigmaw(i)*(ph(i,k)-ph(i,k+1)) - &
     3669                                     deltomg(i,k) )
     3670   
     3671        cc11(i,k) = 0.
     3672        cc12(i,k) = -coef*sigmaw(i)*(1.-sigmaw(i))*deltomg(i,k)
     3673        cc21(i,k) = 0.
     3674        cc22(i,k) = coef*sigmaw(i)*deltomg(i,k)
     3675      ENDIF  ! (wk_adv(i))
     3676    ENDDO
     3677    DO k = 2, klev-1
     3678      DO i = 1,klon
     3679        IF (wk_adv(i) .AND. k<=kupper(i)-1) THEN
     3680          coef = dtime/(ph(i,k)-ph(i,k+1))
     3681          aa11(i,k) = rr11(i)+coef*sigmaw(i)*(1.-sigmaw(i))*deltomg(i,k)
     3682          aa12(i,k) = rr12(i)+coef*sigmaw(i)*(1.-sigmaw(i))*deltomg(i,k+1)
     3683          aa21(i,k) = rr21(i)+coef*( dsigspread(i)/sigmaw(i)*(ph(i,k)-ph(i,k+1)) + &
     3684                                     (1.-sigmaw(i))*deltomg(i,k) )
     3685          aa22(i,k) = rr22(i)+coef*(-dsigspread(i)/sigmaw(i)*(ph(i,k)-ph(i,k+1)) + &
     3686                                     (1.-sigmaw(i))*(deltomg(i,k+1)-deltomg(i,k)) - &
     3687                                     sigmaw(i)*deltomg(i,k) )
     3688   
     3689          bb11(i,k) =  -coef*sigmaw(i)*(1.-sigmaw(i))*deltomg(i,k+1)
     3690          bb12(i,k) =  0.
     3691          bb21(i,k) =  -coef*(1.-sigmaw(i))*deltomg(i,k+1)
     3692          bb22(i,k) =  0.
     3693   
     3694          cc11(i,k) = 0.
     3695          cc12(i,k) = -coef*sigmaw(i)*(1.-sigmaw(i))*deltomg(i,k)
     3696          cc21(i,k) = 0.
     3697          cc22(i,k) = coef*sigmaw(i)*deltomg(i,k)
     3698        ENDIF  ! (wk_adv(i) .AND. k<=kupper(i))
     3699      ENDDO
     3700    ENDDO
     3701    DO i = 1,klon
     3702      IF (wk_adv(i)) THEN
     3703        coef = dtime/(ph(i,1)-ph(i,2))
     3704        aa11(i,1) = rr11(i)+coef*sigmaw(i)*(1.-sigmaw(i))*deltomg(i,1)
     3705        aa12(i,1) = rr12(i)+coef*sigmaw(i)*(1.-sigmaw(i))*deltomg(i,2)
     3706        aa21(i,1) = rr21(i)+coef*( dsigspread(i)/sigmaw(i)*(ph(i,1)-ph(i,2)) + &
     3707                                   (1.-sigmaw(i))*deltomg(i,1) )
     3708        aa22(i,1) = rr22(i)+coef*(-dsigspread(i)/sigmaw(i)*(ph(i,1)-ph(i,2)) + &
     3709                                   (1.-sigmaw(i))*(deltomg(i,2)-deltomg(i,1)) - &
     3710                                   sigmaw(i)*deltomg(i,1) )
     3711   
     3712        bb11(i,1) =  -coef*sigmaw(i)*(1.-sigmaw(i))*deltomg(i,2)
     3713        bb12(i,1) =  0.
     3714        bb21(i,1) =  -coef*(1.-sigmaw(i))*deltomg(i,2)
     3715        bb22(i,1) =  0.
     3716      ENDIF  ! (wk_adv(i))
     3717    ENDDO
     3718
     3719!!  printing the tridiagonal matrix
     3720!!!  First row
     3721!!   k = 1
     3722!!   print 1789, k, aa11(1,1), aa12(1,1), bb11(1,1), bb12(1,1)
     3723!!   print 1789, k, aa21(1,1), aa22(1,1), bb21(1,1), bb22(1,1)
     3724!!1789 FORMAT(1X, I3, 3(4X, 2E13.5))
     3725!!        coef = dtime/(ph(1,k)-ph(1,k+1))
     3726!!   print *,'rr22(1), coef, dsigspread(1), sigmaw(1), deltomg(1,1), deltomg(1,2) ', &
     3727!!            rr22(1), coef, dsigspread(1), sigmaw(1), deltomg(1,1), deltomg(1,2)
     3728!!
     3729!!!  Rows 2 to klev-1
     3730!!   DO k = 2, klev-1
     3731!!     print 1789, k, cc11(1,k), cc12(1,k), aa11(1,k), aa12(1,k), bb11(1,k), bb12(1,k)
     3732!!     print 1789, k, cc21(1,k), cc22(1,k), aa21(1,k), aa22(1,k), bb21(1,k), bb22(1,k)
     3733!!        coef = dtime/(ph(1,k)-ph(1,k+1))
     3734!!   print *,'rr22(1), coef, dsigspread(1), sigmaw(1), deltomg(1,k), deltomg(1,k+1) ', &
     3735!!            rr22(1), coef, dsigspread(1), sigmaw(1), deltomg(1,k), deltomg(1,k+1)
     3736!!   ENDDO
     3737!!
     3738!!!  Row klev
     3739!!     print 1789, klev, cc11(1,klev), cc12(1,klev), aa11(1,klev), aa12(1,klev)
     3740!!     print 1789, klev, cc21(1,klev), cc22(1,klev), aa21(1,klev), aa22(1,klev)
     3741!!        coef = dtime/(ph(1,klev)-ph(1,klev+1))
     3742!!   print *,'rr22(1), coef, dsigspread(1), sigmaw(1), deltomg(1,klev) ', &
     3743!!            rr22(1), coef, dsigspread(1), sigmaw(1), deltomg(1,klev)
     3744
     3745
     3746!! Downward loop
     3747
     3748   xt1(:,:) = thb(:,:)     
     3749   xt2(:,:) = delta_th(:,:)
     3750   xq1(:,:) = qb(:,:)     
     3751   xq2(:,:) = delta_q(:,:)
     3752
     3753    DO i = 1,klon
     3754      IF (wk_adv(i)) THEN
     3755        k = kupper(i)
     3756        alpha11(:,k)=aa11(:,k)
     3757        alpha12(:,k)=aa12(:,k)
     3758        alpha21(:,k)=aa21(:,k)
     3759        alpha22(:,k)=aa22(:,k)
     3760        beta11(:,k)=0.
     3761        beta12(:,k)=0.
     3762        beta21(:,k)=0.
     3763        beta22(:,k)=0.
     3764        yt1(i,k) = xt1(i,k)
     3765        yt2(i,k) = xt2(i,k)
     3766        yq1(i,k) = xq1(i,k)
     3767        yq2(i,k) = xq2(i,k)
     3768      ENDIF  ! (wk_adv(i))
     3769    ENDDO
     3770    DO i = 1,klon
     3771      IF (wk_adv(i)) THEN
     3772        k = kupper(i)
     3773        det=alpha11(i,k)*alpha22(i,k) - alpha12(i,k)*alpha21(i,k)
     3774        ai11(i,k)= alpha22(i,k)/det
     3775        ai12(i,k)=-alpha12(i,k)/det
     3776        ai21(i,k)=-alpha21(i,k)/det
     3777        ai22(i,k)= alpha11(i,k)/det
     3778        zt1(i,k) = ai11(i,k)*yt1(i,k) + ai12(i,k)*yt2(i,k)
     3779        zt2(i,k) = ai21(i,k)*yt1(i,k) + ai22(i,k)*yt2(i,k)
     3780        zq1(i,k) = ai11(i,k)*yq1(i,k) + ai12(i,k)*yq2(i,k)
     3781        zq2(i,k) = ai21(i,k)*yq1(i,k) + ai22(i,k)*yq2(i,k)
     3782      ENDIF  ! (wk_adv(i))
     3783    ENDDO
     3784
     3785    DO k = klev, 2, -1
     3786      DO i = 1,klon
     3787        IF (wk_adv(i) .AND. k<=kupper(i)) THEN
     3788          gamma11(i,k) = ai11(i,k)*cc11(i,k) + ai12(i,k)*cc21(i,k)
     3789          gamma12(i,k) = ai11(i,k)*cc12(i,k) + ai12(i,k)*cc22(i,k)
     3790          gamma21(i,k) = ai21(i,k)*cc11(i,k) + ai22(i,k)*cc21(i,k)
     3791          gamma22(i,k) = ai21(i,k)*cc12(i,k) + ai22(i,k)*cc22(i,k)
     3792   
     3793          alpha11(i,k-1) = aa11(i,k-1) - ( bb11(i,k-1)*gamma11(i,k)+bb12(i,k-1)*gamma21(i,k) )
     3794          alpha12(i,k-1) = aa12(i,k-1) - ( bb11(i,k-1)*gamma12(i,k)+bb12(i,k-1)*gamma22(i,k) )
     3795          alpha21(i,k-1) = aa21(i,k-1) - ( bb21(i,k-1)*gamma11(i,k)+bb22(i,k-1)*gamma21(i,k) )
     3796          alpha22(i,k-1) = aa22(i,k-1) - ( bb21(i,k-1)*gamma12(i,k)+bb22(i,k-1)*gamma22(i,k) )
     3797   
     3798          beta11(i,k-1) = bb11(i,k-1)*ai11(i,k)+bb12(i,k-1)*ai21(i,k)
     3799          beta12(i,k-1) = bb11(i,k-1)*ai12(i,k)+bb12(i,k-1)*ai22(i,k)
     3800          beta21(i,k-1) = bb21(i,k-1)*ai11(i,k)+bb22(i,k-1)*ai21(i,k)
     3801          beta22(i,k-1) = bb21(i,k-1)*ai12(i,k)+bb22(i,k-1)*ai22(i,k)
     3802   
     3803          yt1(i,k-1) = xt1(i,k-1) - ( beta11(i,k-1)*yt1(i,k) +beta12(i,k-1)*yt2(i,k) )
     3804          yt2(i,k-1) = xt2(i,k-1) - ( beta21(i,k-1)*yt1(i,k) +beta22(i,k-1)*yt2(i,k) )
     3805          yq1(i,k-1) = xq1(i,k-1) - ( beta11(i,k-1)*yq1(i,k) +beta12(i,k-1)*yq2(i,k) )
     3806          yq2(i,k-1) = xq2(i,k-1) - ( beta21(i,k-1)*yq1(i,k) +beta22(i,k-1)*yq2(i,k) )
     3807   
     3808          det=alpha11(i,k-1)*alpha22(i,k-1) - alpha12(i,k-1)*alpha21(i,k-1)
     3809          ai11(i,k-1)= alpha22(i,k-1)/det
     3810          ai12(i,k-1)=-alpha12(i,k-1)/det
     3811          ai21(i,k-1)=-alpha21(i,k-1)/det
     3812          ai22(i,k-1)= alpha11(i,k-1)/det
     3813   
     3814          zt1(i,k-1) = ai11(i,k-1)*yt1(i,k-1)+ai12(i,k-1)*yt2(i,k-1)
     3815          zt2(i,k-1) = ai21(i,k-1)*yt1(i,k-1)+ai22(i,k-1)*yt2(i,k-1)
     3816          zq1(i,k-1) = ai11(i,k-1)*yq1(i,k-1)+ai12(i,k-1)*yq2(i,k-1)
     3817          zq2(i,k-1) = ai21(i,k-1)*yq1(i,k-1)+ai22(i,k-1)*yq2(i,k-1)
     3818        ENDIF  ! (wk_adv(i) .AND. k<=kupper(i))
     3819      ENDDO
     3820    ENDDO
     3821       
     3822!! Upward loop
     3823
     3824    DO i = 1,klon
     3825      IF (wk_adv(i)) THEN
     3826       th1(i,1) = zt1(i,1)
     3827       th2(i,1) = zt2(i,1)
     3828       q1(i,1)  = zq1(i,1)
     3829       q2(i,1)  = zq2(i,1)
     3830     
     3831       d_tb_dadv(i,1) =     ( rr11(i)*(th1(i,1)-thw(i,1))+rr12(i)*(th2(i,1)-thx(i,1)) )*ppi(i,1)
     3832       d_deltat_dadv(i,1) = ( rr21(i)*(th1(i,1)-thw(i,1))+rr22(i)*(th2(i,1)-thx(i,1)) )*ppi(i,1)
     3833       d_qb_dadv(i,1) =       rr11(i)*(q1(i,1) -qw(i,1)) +rr12(i)*(q2(i,1)-qx(i,1))
     3834       d_deltaq_dadv(i,1) =   rr21(i)*(q1(i,1) -qw(i,1)) +rr22(i)*(q2(i,1)-qx(i,1))
     3835      ENDIF  ! (wk_adv(i))
     3836    ENDDO
     3837
     3838    DO k = 2, klev
     3839      DO i = 1,klon
     3840        IF (wk_adv(i) .AND. k<=kupper(i)) THEN
     3841          th1(i,k) = zt1(i,k) - ( gamma11(i,k)*th1(i,k-1)+gamma12(i,k)*th2(i,k-1) )
     3842          th2(i,k) = zt2(i,k) - ( gamma21(i,k)*th1(i,k-1)+gamma22(i,k)*th2(i,k-1) )
     3843          q1(i,k)  = zq1(i,k) - ( gamma11(i,k)*q1(i,k-1) +gamma12(i,k)*q2(i,k-1) )
     3844          q2(i,k)  = zq2(i,k) - ( gamma21(i,k)*q1(i,k-1) +gamma22(i,k)*q2(i,k-1) )
     3845   
     3846          d_tb_dadv(i,k) =     ( rr11(i)*(th1(i,k)-thw(i,k))+rr12(i)*(th2(i,k)-thx(i,k)) )*ppi(i,k)
     3847          d_deltat_dadv(i,k) = ( rr21(i)*(th1(i,k)-thw(i,k))+rr22(i)*(th2(i,k)-thx(i,k)) )*ppi(i,k)
     3848          d_qb_dadv(i,k) =       rr11(i)*(q1(i,k)-qw(i,k))  +rr12(i)*(q2(i,k)-qx(i,k))
     3849          d_deltaq_dadv(i,k) =   rr21(i)*(q1(i,k)-qw(i,k))  +rr22(i)*(q2(i,k)-qx(i,k))
     3850        ENDIF  ! (wk_adv(i) .AND. k<=kupper(i))
     3851      ENDDO
     3852    ENDDO
     3853
     3854!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     3855!!!!!!!!!!!!!!!!!!       Verification de l'inversion                !!!!!!!!!!!!!!!!!!!!!!!
     3856!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     3857!!
     3858!!    DO i = 1,klon
     3859!!        xt1inv(i,1) = aa11(i,1)*th1(i,1) + aa12(i,1)*th2(i,1) + bb11(i,1)*th1(i,2) + bb12(i,1)*th2(i,2)
     3860!!        xt2inv(i,1) = aa21(i,1)*th1(i,1) + aa22(i,1)*th2(i,1) + bb21(i,1)*th1(i,2) + bb22(i,1)*th2(i,2)
     3861!!        xq1inv(i,1)  = aa11(i,1)*q1(i,1)  + aa12(i,1)*q2(i,1)  + bb11(i,1)*q1(i,2)  + bb12(i,1)*q2(i,2)
     3862!!        xq2inv(i,1)  = aa21(i,1)*q1(i,1)  + aa22(i,1)*q2(i,1)  + bb21(i,1)*q1(i,2)  + bb22(i,1)*q2(i,2)
     3863!!    ENDDO
     3864!!   
     3865!!      DO k = 2, klev-1
     3866!!        DO i = 1,klon
     3867!!        xt1inv(i,k) = aa11(i,k)*th1(i,k) + aa12(i,k)*th2(i,k) + bb11(i,k)*th1(i,k+1) + bb12(i,k)*th2(i,k+1) &
     3868!!                                                              + cc11(i,k)*th1(i,k-1) + cc12(i,k)*th2(i,k-1)
     3869!!        xt2inv(i,k) = aa21(i,k)*th1(i,k) + aa22(i,k)*th2(i,k) + bb21(i,k)*th1(i,k+1) + bb22(i,k)*th2(i,k+1) &
     3870!!                                                              + cc21(i,k)*th1(i,k-1) + cc22(i,k)*th2(i,k-1)
     3871!!        xq1inv(i,k)  = aa11(i,k)*q1(i,k)  + aa12(i,k)*q2(i,k)  + bb11(i,k)*q1(i,k+1)  + bb12(i,k)*q2(i,k+1)  &
     3872!!                                                              + cc11(i,k)*q1(i,k-1)  + cc12(i,k)*q2(i,k-1)
     3873!!        xq2inv(i,k)  = aa21(i,k)*q1(i,k)  + aa22(i,k)*q2(i,k)  + bb21(i,k)*q1(i,k+1)  + bb22(i,k)*q2(i,k+1)  &
     3874!!                                                              + cc21(i,k)*q1(i,k-1)  + cc22(i,k)*q2(i,k-1)
     3875!!        ENDDO
     3876!!      ENDDO
     3877!!   
     3878!!    DO i = 1,klon
     3879!!        xt1inv(i,klev) = aa11(i,klev)*th1(i,klev) + aa12(i,klev)*th2(i,klev) + cc11(i,klev)*th1(i,klev-1) + cc12(i,klev)*th2(i,klev-1)
     3880!!        xt2inv(i,klev) = aa21(i,klev)*th1(i,klev) + aa22(i,klev)*th2(i,klev) + cc21(i,klev)*th1(i,klev-1) + cc22(i,klev)*th2(i,klev-1)
     3881!!        xq1inv(i,klev)  = aa11(i,klev)*q1(i,klev)  + aa12(i,klev)*q2(i,klev)  + cc11(i,klev)*q1(i,klev-1)  + cc12(i,klev)*q2(i,klev-1)
     3882!!        xq2inv(i,klev)  = aa21(i,klev)*q1(i,klev)  + aa22(i,klev)*q2(i,klev)  + cc21(i,klev)*q1(i,klev-1)  + cc22(i,klev)*q2(i,klev-1)
     3883!!    ENDDO
     3884!!   
     3885!!    DO k = 1, 20
     3886!!      IF (abs(xt1inv(1,k)-xt1(1,k)) .GT. 1.e-15*xt1(1,k) ) THEN
     3887!!        print *,'wake_dadv, k, xt1inv(1,k), xt1(1,k), xt1inv(1,k)-xt1(1,k) ', &
     3888!!                            k, xt1inv(1,k), xt1(1,k), xt1inv(1,k)-xt1(1,k)
     3889!!      ENDIF
     3890!!      IF (abs(xt2inv(1,k)-xt2(1,k)) .GT. 1.e-15*xt2(1,k) ) THEN
     3891!!        print *,'wake_dadv, k, xt2inv(1,k), xt2(1,k), xt2inv(1,k)-xt2(1,k) ', &
     3892!!                            k, xt2inv(1,k), xt2(1,k), xt2inv(1,k)-xt2(1,k)
     3893!!      ENDIF
     3894!!      IF (abs(xq1inv(1,k)-xq1(1,k)) .GT. 1.e-15*xq1(1,k) ) THEN
     3895!!        print *,'wake_dadv, k, xq1inv(1,k), xq1(1,k), xq1inv(1,k)-xq1(1,k) ', &
     3896!!                            k, xq1inv(1,k), xq1(1,k), xq1inv(1,k)-xq1(1,k)
     3897!!      ENDIF
     3898!!      IF (abs(xq2inv(1,k)-xq2(1,k)) .GT. 1.e-15*xq2(1,k) ) THEN
     3899!!        print *,'wake_dadv, k, xq2inv(1,k), xq2(1,k), xq2inv(1,k)-xq2(1,k) ', &
     3900!!                          k, xq2inv(1,k), xq2(1,k), xq2inv(1,k)-xq2(1,k)
     3901!!      ENDIF
     3902!!    ENDDO
     3903
     3904  ELSE  ! (flag_dadv_implicit)
     3905
     3906!   Explicit scheme : compute directly d_deltat_dadv and d_tb_dadv
     3907!                     (and similarly for d_deltaq_dadv and d_qb_dadv).
     3908! -----------------------------------------------------------------------------------------
     3909
     3910    DO i = 1, klon
     3911      IF (wk_adv(i)) THEN !!! nrlmd
     3912        d_thx(i, 1) = 0.
     3913        d_thw(i, 1) = 0.
     3914        d_dth(i, 1) = 0.
     3915        d_qx(i, 1) = 0.
     3916        d_qw(i, 1) = 0.
     3917        d_dq(i, 1) = 0.
     3918      END IF
     3919    END DO
     3920
     3921    DO k = 2, klev
     3922      DO i = 1, klon
     3923        IF (wk_adv(i) .AND. k<=kupper(i)+1) THEN
     3924          d_thx(i, k) = thx(i, k-1) - thx(i, k)
     3925          d_thw(i, k) = thw(i, k-1) - thw(i, k)
     3926          d_dth(i, k) = delta_th(i, k-1) - delta_th(i, k)
     3927          d_qx(i, k) = qx(i, k-1) - qx(i, k)
     3928          d_qw(i, k) = qw(i, k-1) - qw(i, k)
     3929          d_dq(i, k) = delta_q(i, k-1) - delta_q(i, k)
     3930        END IF ! (wk_adv(i) .AND. k<=kupper(i)+1)
     3931      END DO
     3932    END DO
     3933
     3934    DO k = 1, klev-1
     3935      DO i = 1, klon
     3936        IF (wk_adv(i) .AND. k<=kupper(i)-1) THEN
     3937          d_deltat_dadv(i, k) = dtime/(ph(i,k)-ph(i,k+1))* &
     3938            (rr22(i)*deltomg(i,k)*sigmaw(i)*d_thx(i,k) - &
     3939             rr21(i)*deltomg(i,k+1)*(1.-sigmaw(i))*d_thw(i,k+1) )*ppi(i, k) - &
     3940             dtime*entr_s(i,k)*delta_th(i,k)/sigmaw(i)*ppi(i, k)
     3941!
     3942          d_deltaq_dadv(i, k) = dtime/(ph(i,k)-ph(i,k+1))* &
     3943            (rr22(i)*deltomg(i,k)*sigmaw(i)*d_qx(i,k)- &
     3944             rr21(i)*deltomg(i,k+1)*(1.-sigmaw(i))*d_qw(i,k+1) ) - &
     3945             dtime*entr_s(i,k)*delta_q(i,k)/sigmaw(i)
     3946
     3947          ! and increment large scale tendencies
     3948          d_tb_dadv(i, k) = dtime*((rr12(i)*deltomg(i,k)*sigmaw(i)*d_thx(i,k)- &
     3949                                  rr11(i)*deltomg(i,k+1)*(1.-sigmaw(i))*d_thw(i,k+1))/ &
     3950                                 (ph(i,k)-ph(i,k+1)) &
     3951                                 -sigmaw(i)*(1.-sigmaw(i))*delta_th(i,k)*(deltomg(i,k)-deltomg(i,k+1))/ &
     3952                                 (ph(i,k)-ph(i,k+1)) )*ppi(i, k)
     3953
     3954          d_qb_dadv(i, k) = dtime*((rr12(i)*deltomg(i,k)*sigmaw(i)*d_qx(i,k)- &
     3955                                  rr11(i)*deltomg(i,k+1)*(1.-sigmaw(i))*d_qw(i,k+1))/ &
     3956                                 (ph(i,k)-ph(i,k+1)) &
     3957                                 -sigmaw(i)*(1.-sigmaw(i))*delta_q(i,k)*(deltomg(i,k)-deltomg(i,k+1))/ &
     3958                                 (ph(i,k)-ph(i,k+1)) )
     3959        ELSE IF (wk_adv(i) .AND. k==kupper(i)) THEN
     3960          d_tb_dadv(i, k) = dtime*(rr12(i)*deltomg(i, k)*sigmaw(i)*d_thx(i, k)/(ph(i, k)-ph(i, k+1)))*ppi(i, k)
     3961
     3962          d_qb_dadv(i, k) = dtime*(rr12(i)*deltomg(i, k)*sigmaw(i)*d_qx(i, k)/(ph(i, k)-ph(i, k+1)))
     3963        END IF ! (wk_adv(i) .AND. k<=kupper(i)-1)
     3964      END DO
     3965    END DO
     3966
     3967  ENDIF! (flag_dadv_implicit)
     3968
     3969    END SUBROUTINE wake_dadv
    33883970
    33893971END MODULE lmdz_wake
  • LMDZ6/trunk/libf/phylmd/lmdz_wake_ini.f90

    r5434 r5761  
    5555  INTEGER, SAVE, PROTECTED                                    :: iflag_wk_profile
    5656  !$OMP THREADPRIVATE(iflag_wk_profile)
     57
     58  LOGICAL, SAVE, PROTECTED                                    :: flag_dadv_implicit
     59  !$OMP THREADPRIVATE(flag_dadv_implicit)
    5760
    5861  INTEGER, SAVE, PROTECTED                                    :: wk_nsub
     
    250253  CALL getin_p('wk_frac_int_delta_t', wk_frac_int_delta_t)
    251254
     255  flag_dadv_implicit = .FALSE.
     256  CALL getin_p('flag_dadv_implicit', flag_dadv_implicit)
     257
    252258  CALL getin_p('CPPKEY_IOPHYS_WK', CPPKEY_IOPHYS_WK)
    253259
Note: See TracChangeset for help on using the changeset viewer.