Ignore:
Timestamp:
Jul 28, 2025, 7:23:15 PM (6 days ago)
Author:
aborella
Message:

Merge with trunk r5789

Location:
LMDZ6/branches/contrails
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/contrails

  • LMDZ6/branches/contrails/libf/phylmd/cv3_routines.f90

    r5717 r5791  
    11
    22! $Id$
    3 
    4 
    5 
     3MODULE cv3_routines_mod
     4  PRIVATE
     5! for cv3_feed
     6  LOGICAL, SAVE :: cv3_feed_first =.TRUE.
     7  LOGICAL, SAVE :: ok_new_feed
     8!$OMP THREADPRIVATE (cv3_feed_first,ok_new_feed)
     9  PUBLIC cv3_param, cv3_incrcount, cv3_prelim, cv3_feed, cv3_undilute1, cv3_trigger, cv3_compress, &
     10         icefrac, cv3_undilute2, cv3_closure, cv3_mixing, cv3_unsat, cv3_yield, cv3_tracer, cv3_uncompress,&
     11         cv3_epmax_fn_cape, cv3_routine_pre
     12CONTAINS
     13
     14SUBROUTINE cv3_routine_pre(ok_conserv_q)
     15  LOGICAL, INTENT (IN)                               :: ok_conserv_q
     16 
     17  CALL cv3_feed_pre(ok_conserv_q)
     18
     19END SUBROUTINE cv3_routine_pre
    620
    721SUBROUTINE cv3_param(nd, k_upper, delt)
     
    1226  USE conema3_mod_h
    1327  USE lmdz_cv_ini, ONLY : alpha,alpha1,beta,betad,coef_peel,cv_flag_feed,delta,dpbase,dtcrit,dtovsh,dttrig,ejectice,ejectliq,elcrit,flag_epkeorig,flag_wb,minorig,nl,nlm,nlp,noconv_stop,noff,omtrain,pbcrit,ptcrit,sigdz,spfac,t_top_max,tau,tau_stop,tlcrit,wbmax
    14   USE lmdz_cv_ini, ONLY : keep_bug_indices_cv3_tracer
     28  USE lmdz_cv_ini, ONLY : keep_bug_indices_cv3_tracer,restore_bug_cvdn
    1529
    1630
     
    4559
    4660! Local variables
    47   CHARACTER (LEN=20) :: modname = 'cv3_param'
     61  CHARACTER (LEN=20),PARAMETER :: modname = 'cv3_param'
    4862  CHARACTER (LEN=80) :: abort_message
    4963
     
    142156     keep_bug_indices_cv3_tracer = .FALSE.
    143157     CALL getin_p('keep_bug_indices_cv3_tracer', keep_bug_indices_cv3_tracer)
     158     restore_bug_cvdn=.false.
     159     CALL getin_p('restore_bug_cvdn',restore_bug_cvdn)
    144160
    145161
     
    169185    WRITE (*, *) 'keepbug_ice_frac =', keepbug_ice_frac
    170186    WRITE (*, *) 'keep_bug_indices_cv3_tracer =', keep_bug_indices_cv3_tracer
     187    WRITE (*, *) 'restore_bug_cvdn=',restore_bug_cvdn
    171188
    172189    first = .FALSE.
     
    304321END SUBROUTINE cv3_prelim
    305322
     323
     324SUBROUTINE cv3_feed_pre(ok_conserv_q)
     325USE mod_phys_lmdz_transfert_para, ONLY : bcast
     326IMPLICIT NONE
     327  LOGICAL, INTENT (IN)                               :: ok_conserv_q
     328  INTEGER :: iostat
     329
     330  IF (cv3_feed_first) THEN
     331
     332!$OMP MASTER
     333    ok_new_feed = ok_conserv_q
     334    OPEN (98, FILE='cv3feed_param.data', STATUS='old', FORM='formatted', IOSTAT=iostat)
     335    IF (iostat==0) THEN
     336      READ (98, *, END=998) ok_new_feed
     337998   CONTINUE
     338      CLOSE (98)
     339    END IF
     340    PRINT *, ' ok_new_feed: ', ok_new_feed
     341!$OMP END MASTER
     342    call bcast(ok_new_feed)
     343    cv3_feed_first = .FALSE.   
     344  END IF
     345
     346END SUBROUTINE cv3_feed_pre
     347
     348
    306349SUBROUTINE cv3_feed(len, nd, ok_conserv_q, &
    307350                    t, q, u, v, p, ph, h, gz, &
     
    310353                    cpnk, hnk, nk, icb, icbmax, iflag, gznk, plcl)
    311354
    312   USE mod_phys_lmdz_transfert_para, ONLY : bcast
    313355  USE add_phys_tend_mod, ONLY: fl_cor_ebil
    314356  USE print_control_mod, ONLY: prt_level
    315357  USE lmdz_cv_ini, ONLY : cpd,cpv,cv_flag_feed,minorig,nl,nlm,cl
     358  USE cv3_estatmix_mod, ONLY : cv3_estatmix
     359  USE cv3_enthalpmix_mod, ONLY : cv3_enthalpmix
    316360  IMPLICIT NONE
    317361
     
    362406
    363407!jyg20140217<
    364   INTEGER iostat
    365   LOGICAL, SAVE :: first
    366   LOGICAL, SAVE :: ok_new_feed
    367   REAL, SAVE :: dp_lcl_feed
    368 !$OMP THREADPRIVATE (first,ok_new_feed,dp_lcl_feed)
    369   DATA first/.TRUE./
    370   DATA dp_lcl_feed/2./
    371 
    372   IF (first) THEN
    373 !$OMP MASTER
    374     ok_new_feed = ok_conserv_q
    375     OPEN (98, FILE='cv3feed_param.data', STATUS='old', FORM='formatted', IOSTAT=iostat)
    376     IF (iostat==0) THEN
    377       READ (98, *, END=998) ok_new_feed
    378 998   CONTINUE
    379       CLOSE (98)
    380     END IF
    381     PRINT *, ' ok_new_feed: ', ok_new_feed
    382 !$OMP END MASTER
    383     call bcast(ok_new_feed)
    384     first = .FALSE.   
    385   END IF
     408  REAL, PARAMETER :: dp_lcl_feed = 2.
     409
    386410!jyg>
    387411! -------------------------------------------------------------------
     
    590614
    591615! Compute icbmax.
    592 
     616 
     617  !ym do not do that, independance between column !
    593618  icbmax = 2
    594619  DO i = 1, len
     
    676701
    677702! Re-compute icbsmax (icbsmax2):                          !convect3
    678 !                                                         !convect3
    679   icbsmax2 = 2                                            !convect3
    680   DO i = 1, len                                           !convect3
    681     icbsmax2 = max(icbsmax2, icbs(i))                     !convect3
    682   END DO                                                  !convect3
     703!
     704!ym column independant, do not use reduction                                                         !convect3
     705!ym  icbsmax2 = 2                                            !convect3
     706!ym  DO i = 1, len                                           !convect3
     707!ym    icbsmax2 = max(icbsmax2, icbs(i))                     !convect3
     708!ym  END DO                                                  !convect3
    683709
    684710! initialization outputs:
    685711
    686   DO k = 1, icbsmax2                                      ! convect3
     712!ym  DO k = 1, icbsmax2                                      ! convect3
     713  DO k = 1, nd                                      ! convect3
    687714    DO i = 1, len                                         ! convect3
    688       tp(i, k) = 0.0                                      ! convect3
    689       tvp(i, k) = 0.0                                     ! convect3
    690       clw(i, k) = 0.0                                     ! convect3
     715      IF (k<=MAX(2,icbs(i))) THEN
     716        tp(i, k) = 0.0                                      ! convect3
     717        tvp(i, k) = 0.0                                     ! convect3
     718        clw(i, k) = 0.0                                     ! convect3
     719      ENDIF
    691720    END DO                                                ! convect3
    692721  END DO                                                  ! convect3
     
    694723! tp and tvp below cloud base:
    695724
    696   DO k = minorig, icbsmax2 - 1
     725!ym  DO k = minorig, icbsmax2 - 1
     726  DO k = minorig, nd
    697727    DO i = 1, len
    698       tp(i, k) = tnk(i) - (gz(i,k)-gznk(i))*cpinv(i)
    699       tvp(i, k) = tp(i, k)*(1.+qnk(i)/eps-qnk(i))        !whole thing (convect3)
     728      IF (k<=MAX(2,icbs(i))-1) THEN
     729        tp(i, k) = tnk(i) - (gz(i,k)-gznk(i))*cpinv(i)
     730        tvp(i, k) = tp(i, k)*(1.+qnk(i)/eps-qnk(i))        !whole thing (convect3)
     731      ENDIF
    700732    END DO
    701733  END DO
     
    12071239  REAL                                               :: fracg
    12081240  REAL                                               :: deltap
    1209   REAL, SAVE                                         :: Tx, Tm
    1210   DATA Tx/263.15/, Tm/243.15/
    1211 !$OMP THREADPRIVATE(Tx, Tm)
     1241  REAL, PARAMETER                                    :: Tx=263.15
     1242  REAL, PARAMETER                                    :: Tm=243.15
    12121243  REAL                                               :: aa, bb, dd, ddelta, discr
    12131244  REAL                                               :: ff, fp
     
    21032134! compute icbmax:
    21042135
    2105   icbmax = 2
    2106   DO i = 1, ncum
    2107     icbmax = max(icbmax, icb(i))
    2108   END DO
     2136!ym  icbmax = 2
     2137!ym  DO i = 1, ncum
     2138!ym    icbmax = max(icbmax, icb(i))
     2139!ym  END DO
    21092140
    21102141! update sig and w0 below cloud base:
    21112142
    2112   DO k = 1, icbmax
     2143!ym  DO k = 1, icbmax
     2144  DO k = 1, nd
    21132145    DO i = 1, ncum
    2114       IF (k<=icb(i)) THEN
    2115         sig(i, k) = beta*sig(i, k) - &
    2116                     2.*alpha*buoy(i, icb(i))*buoy(i, icb(i))
    2117         sig(i, k) = max(sig(i,k), 0.0)
    2118         w0(i, k) = beta*w0(i, k)
    2119       END IF
     2146      IF (k<=MAX(2,icb(i))) THEN
     2147        IF (k<=icb(i)) THEN
     2148          sig(i, k) = beta*sig(i, k) - &
     2149                      2.*alpha*buoy(i, icb(i))*buoy(i, icb(i))
     2150          sig(i, k) = max(sig(i,k), 0.0)
     2151          w0(i, k) = beta*w0(i, k)
     2152        END IF
     2153      ENDIF
    21202154    END DO
    21212155  END DO
     
    23322366! ori        do 360 i=1,ncum*nlp
    23332367  DO j = 1, nl
    2334     DO i = 1, ncum
    2335       nent(i, j) = 0
     2368    DO il = 1, ncum
     2369      nent(il, j) = 0
    23362370! in convect3, m is computed in cv3_closure
    23372371! ori          m(i,1)=0.0
     
    23432377  DO j = 1, nl
    23442378    DO k = 1, nl
    2345       DO i = 1, ncum
    2346         qent(i, k, j) = rr(i, j)
    2347         uent(i, k, j) = u(i, j)
    2348         vent(i, k, j) = v(i, j)
    2349         elij(i, k, j) = 0.0
     2379      DO il = 1, ncum
     2380        qent(il, k, j) = rr(il, j)
     2381        uent(il, k, j) = u(il, j)
     2382        vent(il, k, j) = v(il, j)
     2383        elij(il, k, j) = 0.0
    23502384!ym            ment(i,k,j)=0.0
    23512385!ym            sij(i,k,j)=0.0
     
    24972531! ---  TO REPRESENT EQUAL PROBABILITIES OF MIXING
    24982532! =====================================================================
    2499 
    2500   CALL zilch(asum, nloc*nd)
    2501   CALL zilch(csum, nloc*nd)
    2502   CALL zilch(csum, nloc*nd)
     2533  asum(1:nloc,1:nd) = 0.
     2534  csum(1:nloc,1:nd) = 0.
    25032535
    25042536  DO il = 1, ncum
     
    25122544      IF (i>=icb(il) .AND. i<=inb(il)) num1 = num1 + 1
    25132545    END DO
    2514     IF (num1<=0) GO TO 789
    2515 
     2546!ym    IF (num1<=0) GO TO 789
     2547    IF (num1<=0) CYCLE
    25162548
    25172549    DO il = 1, ncum
     
    25512583            lwork(il)) num2 = num2 + 1
    25522584      END DO
    2553       IF (num2<=0) GO TO 175
     2585!ym      IF (num2<=0) GO TO 175
     2586      IF (num2<=0) CYCLE
    25542587
    25552588      DO il = 1, ncum
     
    26652698
    26662699! MAF: renormalisation de MENT
    2667   CALL zilch(zm, nloc*na)
     2700  zm(1:nloc,1:na) = 0.
     2701 
    26682702  DO jm = 1, nl
    26692703    DO im = 1, nl
     
    28942928      IF (i<=inb(il) .AND. lwork(il)) num1 = num1 + 1
    28952929    END DO
    2896     IF (num1<=0) GO TO 400
    2897 
    2898     CALL zilch(wdtrain, ncum)
     2930!ym    IF (num1<=0) GO TO 400
     2931    IF (num1<=0) CYCLE
     2932
     2933    wdtrain(1:ncum) = 0.0
    28992934
    29002935
     
    34573492    USE cvflag_mod_h
    34583493   USE lmdz_cv_ini, ONLY : grav,minorig,nl,nlp,rowl,rrd,nl,ci,cl,cpd,cpv
     3494   USE lmdz_cv_ini, ONLY : restore_bug_cvdn
     3495
    34593496  IMPLICIT NONE
    34603497
     
    40254062      IF (i<=inb(il) .AND. iflag(il)<=1) num1 = num1 + 1
    40264063    END DO
    4027     IF (num1<=0) GO TO 500
     4064!ym    IF (num1<=0) GO TO 500
     4065    IF (num1<=0) CYCLE
    40284066
    40294067!
     
    40324070           IF (ok_optim_yield) THEN                       !|
    40334071!-----------------------------------------------------------
     4072
     4073    ! Restoring a bug that was found and corrected in svn release
     4074    ! 5544; which appears to have a much stronger impact than initially
     4075    ! thought
     4076
     4077    if ( restore_bug_cvdn ) then
     4078      DO il = 1, ncum
     4079         amp1(il) = upwd(il,i+1)
     4080         ad(il) = dnwd(il,i)
     4081      ENDDO
     4082    else
    40344083      DO il = 1, ncum
    40354084         amp1(il) = upwd(il,i+1)
    40364085         ad(il) = - dnwd(il,i)
    40374086      ENDDO
     4087    endif
    40384088!-----------------------------------------------------------
    40394089        ELSE !(ok_optim_yield)                            !|
     
    52965346      end subroutine cv3_epmax_fn_cape
    52975347
    5298 
    5299 
     5348END MODULE cv3_routines_mod
     5349
Note: See TracChangeset for help on using the changeset viewer.