Changeset 5560 for LMDZ6/trunk


Ignore:
Timestamp:
Feb 25, 2025, 6:59:53 PM (3 months ago)
Author:
jyg
Message:

Protection by the flag "keep_bug_q_nocons_cv" of the bug fix of commit
5544.
Default : the flag is false.

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

Legend:

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

    r5544 r5560  
    1111  use mod_phys_lmdz_para
    1212  USE conema3_mod_h
    13   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,keep_bug_indices_cv3_tracer
     13  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, keep_bug_q_nocons_cv
    1415
    1516
     
    141142     keep_bug_indices_cv3_tracer = .FALSE.
    142143     CALL getin_p('keep_bug_indices_cv3_tracer', keep_bug_indices_cv3_tracer)
     144     keep_bug_q_nocons_cv = .TRUE.
     145     CALL getin_p('keep_bug_q_nocons_cv', keep_bug_q_nocons_cv)
    143146
    144147
     
    168171    WRITE (*, *) 'keepbug_ice_frac =', keepbug_ice_frac
    169172    WRITE (*, *) 'keep_bug_indices_cv3_tracer =', keep_bug_indices_cv3_tracer
     173    WRITE (*, *) 'keep_bug_q_nocons_cv =', keep_bug_q_nocons_cv
    170174
    171175    first = .FALSE.
     
    27032707                     wdtrainA, wdtrainS, wdtrainM)                                      ! RomP
    27042708  USE lmdz_cv_ini, ONLY : cpd,ginv,grav,nl,nlp,sigdz
     2709  USE lmdz_cv_ini, ONLY : keep_bug_q_nocons_cv
    27052710  USE cvflag_mod_h
    27062711  USE print_control_mod, ONLY: prt_level, lunout
     
    29052910
    29062911
    2907     DO il = 1, ncum
    2908       IF (i<=inb(il) .AND. lwork(il)) THEN
    2909         wdtrainS(il, i) = ep(il, i)*m(il, i)*clw(il, i)                               ! jyg
    2910 !!jyg        wdtrain(il) = grav*ep(il, i)*m(il, i)*clw(il, i)
    2911 !!jyg        wdtrainS(il, i) = wdtrain(il)/grav                                            !   Ps   jyg
    2912 !!jyg        wdtrainA(il, i) = wdtrain(il)/grav                                          !   Ps   RomP
    2913       END IF
    2914     END DO
    2915 
    2916     IF (i>1) THEN
    2917       DO j = 1, i - 1
     2912  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     2913  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     2914  IF (keep_bug_q_nocons_cv) THEN
     2915  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    29182916        DO il = 1, ncum
    29192917          IF (i<=inb(il) .AND. lwork(il)) THEN
    2920             awat = elij(il, j, i) - (1.-ep(il,i))*clw(il, i)
    2921             awat = max(awat, 0.0)
    2922             wdtrainM(il, i) = wdtrainM(il, i) + awat*ment(il, j, i)                   ! jyg
    2923 !!jyg            wdtrain(il) = wdtrain(il) + grav*awat*ment(il, j, i)
    2924 !!jyg            wdtrainM(il, i) = wdtrain(il)/grav - wdtrainS(il, i)    !   Pm  jyg
    2925 !!jyg            wdtrainM(il, i) = wdtrain(il)/grav - wdtrainA(il, i)  !   Pm  RomP
     2918            wdtrain(il) = grav*ep(il, i)*m(il, i)*clw(il, i)
     2919            wdtrainS(il, i) = wdtrain(il)/grav                                            !   Ps   jyg
    29262920          END IF
    29272921        END DO
    2928       END DO
    2929     END IF
    2930 
    2931     IF (cvflag_prec_eject) THEN
    2932 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    2933       IF (adiab_ascent_mass_flux_depends_on_ejectliq) THEN
    2934 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    2935 !!! Warning : this option leads to water conservation violation
    2936 !!!           Expert only
    2937 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    2938           IF ( i > 1) THEN
     2922   
     2923        IF (i>1) THEN
     2924          DO j = 1, i - 1
    29392925            DO il = 1, ncum
    29402926              IF (i<=inb(il) .AND. lwork(il)) THEN
    2941                 wdtrainA(il,i) = ma(il, i+1)*(qta(il, i-1)-qta(il,i))/(1. - qta(il, i-1))    !   Pa   jygprl
    2942 !!jyg                wdtrain(il) = wdtrain(il) + grav*wdtrainA(il,i)
     2927                awat = elij(il, j, i) - (1.-ep(il,i))*clw(il, i)
     2928                awat = max(awat, 0.0)
     2929                wdtrain(il) = wdtrain(il) + grav*awat*ment(il, j, i)
     2930                wdtrainM(il, i) = wdtrain(il)/grav - wdtrainS(il, i)    !   Pm  jyg
    29432931              END IF
    29442932            END DO
    2945           ENDIF  ! ( i > 1)
    2946 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    2947       ELSE ! (adiab_ascent_mass_flux_depends_on_ejectliq)
    2948 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    2949           IF ( i > 1) THEN
     2933          END DO
     2934        END IF
     2935   
     2936        IF (cvflag_prec_eject) THEN
     2937    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     2938          IF (adiab_ascent_mass_flux_depends_on_ejectliq) THEN
     2939    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     2940    !!! Warning : this option leads to water conservation violation
     2941    !!!           Expert only
     2942    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     2943              IF ( i > 1) THEN
     2944                DO il = 1, ncum
     2945                  IF (i<=inb(il) .AND. lwork(il)) THEN
     2946                    wdtrainA(il,i) = ma(il, i+1)*(qta(il, i-1)-qta(il,i))/(1. - qta(il, i-1))    !   Pa   jygprl
     2947                    wdtrain(il) = wdtrain(il) + grav*wdtrainA(il,i)
     2948                  END IF
     2949                END DO
     2950              ENDIF  ! ( i > 1)
     2951    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     2952          ELSE ! (adiab_ascent_mass_flux_depends_on_ejectliq)
     2953    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     2954              IF ( i > 1) THEN
     2955                DO il = 1, ncum
     2956                  IF (i<=inb(il) .AND. lwork(il)) THEN
     2957                    wdtrainA(il,i) = ma(il, i+1)*(qta(il, i-1)-qta(il,i))                        !   Pa   jygprl
     2958                    wdtrain(il) = wdtrain(il) + grav*wdtrainA(il,i)
     2959                  END IF
     2960                END DO
     2961              ENDIF  ! ( i > 1)
     2962   
     2963          ENDIF ! (adiab_ascent_mass_flux_depends_on_ejectliq) ELSE
     2964    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     2965        ENDIF  ! (cvflag_prec_eject)
     2966   
     2967  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     2968  ELSE ! (keep_bug_q_nocons_cv)
     2969  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     2970        DO il = 1, ncum
     2971          IF (i<=inb(il) .AND. lwork(il)) THEN
     2972            wdtrainS(il, i) = ep(il, i)*m(il, i)*clw(il, i)                               ! jyg
     2973          END IF
     2974        END DO
     2975   
     2976        IF (i>1) THEN
     2977          DO j = 1, i - 1
    29502978            DO il = 1, ncum
    29512979              IF (i<=inb(il) .AND. lwork(il)) THEN
    2952                 wdtrainA(il,i) = ma(il, i+1)*(qta(il, i-1)-qta(il,i))                        !   Pa   jygprl
    2953 !!jyg                wdtrain(il) = wdtrain(il) + grav*wdtrainA(il,i)
     2980                awat = elij(il, j, i) - (1.-ep(il,i))*clw(il, i)
     2981                awat = max(awat, 0.0)
     2982                wdtrainM(il, i) = wdtrainM(il, i) + awat*ment(il, j, i)                   ! jyg
    29542983              END IF
    29552984            END DO
    2956           ENDIF  ! ( i > 1)
    2957 
    2958       ENDIF ! (adiab_ascent_mass_flux_depends_on_ejectliq) ELSE
    2959 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    2960     ENDIF  ! (cvflag_prec_eject)
    2961 
    2962     IF ( i > 1) THEN
    2963       DO il = 1, ncum
    2964         IF (i<=inb(il) .AND. lwork(il)) THEN
    2965           wdtrain(il) = grav*(wdtrainS(il,i) + wdtrainM(il,i) + wdtrainA(il,i))
     2985          END DO
    29662986        END IF
    2967       END DO
    2968     ENDIF  ! ( i > 1)
     2987   
     2988        IF (cvflag_prec_eject) THEN
     2989    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     2990          IF (adiab_ascent_mass_flux_depends_on_ejectliq) THEN
     2991    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     2992    !!! Warning : this option leads to water conservation violation
     2993    !!!           Expert only
     2994    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     2995              IF ( i > 1) THEN
     2996                DO il = 1, ncum
     2997                  IF (i<=inb(il) .AND. lwork(il)) THEN
     2998                    wdtrainA(il,i) = ma(il, i+1)*(qta(il, i-1)-qta(il,i))/(1. - qta(il, i-1))    !   Pa   jygprl
     2999                  END IF
     3000                END DO
     3001              ENDIF  ! ( i > 1)
     3002    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     3003          ELSE ! (adiab_ascent_mass_flux_depends_on_ejectliq)
     3004    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     3005              IF ( i > 1) THEN
     3006                DO il = 1, ncum
     3007                  IF (i<=inb(il) .AND. lwork(il)) THEN
     3008                    wdtrainA(il,i) = ma(il, i+1)*(qta(il, i-1)-qta(il,i))                        !   Pa   jygprl
     3009                  END IF
     3010                END DO
     3011              ENDIF  ! ( i > 1)
     3012   
     3013          ENDIF ! (adiab_ascent_mass_flux_depends_on_ejectliq) ELSE
     3014    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     3015        ENDIF  ! (cvflag_prec_eject)
     3016   
     3017        IF ( i > 1) THEN
     3018          DO il = 1, ncum
     3019            IF (i<=inb(il) .AND. lwork(il)) THEN
     3020              wdtrain(il) = grav*(wdtrainS(il,i) + wdtrainM(il,i) + wdtrainA(il,i))
     3021            END IF
     3022          END DO
     3023        ENDIF  ! ( i > 1)
     3024   
     3025  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     3026  ENDIF ! (keep_bug_q_nocons_cv)
     3027  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     3028  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    29693029
    29703030! ***    find rain water and evaporation using provisional   ***
     
    34593519    USE cvflag_mod_h
    34603520   USE lmdz_cv_ini, ONLY : grav,minorig,nl,nlp,rowl,rrd,nl,ci,cl,cpd,cpv
     3521   USE lmdz_cv_ini, ONLY : keep_bug_q_nocons_cv
    34613522  IMPLICIT NONE
    34623523
     
    35453606! -------------------------------------------------------------
    35463607
     3608
    35473609! initialization:
    35483610
     
    40334095           IF (ok_optim_yield) THEN                       !|
    40344096!-----------------------------------------------------------
    4035 DO il = 1, ncum
    4036    amp1(il) = upwd(il,i+1)
    4037 !!jyg20250215   ad(il) = dnwd(il,i)
    4038    ad(il) = -dnwd(il,i)
    4039 ENDDO
     4097    IF (keep_bug_q_nocons_cv) THEN    !!jyg20250215
     4098      DO il = 1, ncum
     4099         amp1(il) = upwd(il,i+1)
     4100         ad(il) = dnwd(il,i)
     4101      ENDDO
     4102    ELSE  ! (keep_bug_q_nocons_cv)
     4103      DO il = 1, ncum
     4104         amp1(il) = upwd(il,i+1)
     4105         ad(il) = - dnwd(il,i)
     4106      ENDDO
     4107    ENDIF  ! (keep_bug_q_nocons_cv)
    40404108!-----------------------------------------------------------
    40414109        ELSE !(ok_optim_yield)                            !|
  • LMDZ6/trunk/libf/phylmd/lmdz_cv_ini.f90

    r5502 r5560  
    1313          delta, betad, ejectliq, ejectice, flag_wb, flag_epKEorig, cv_flag_feed, noff, minorig, &
    1414          nl, nlp, nlm
    15   PUBLIC cpd, cpv, cl, ci, rrv, rrd, lv0, lf0, g, rowl, t0, clmcpv, clmcpd, cpdmcp, cpvmcpd, cpvmcl  &
    16           , clmci, eps, epsi, epsim1, ginv, hrd, grav, keep_bug_indices_cv3_tracer
     15  PUBLIC cpd, cpv, cl, ci, rrv, rrd, lv0, lf0, g, rowl, t0, clmcpv, clmcpd, cpdmcp, cpvmcpd, cpvmcl,  &
     16          clmci, eps, epsi, epsim1, ginv, hrd, grav, keep_bug_indices_cv3_tracer, &
     17          keep_bug_q_nocons_cv
    1718
    1819
     
    7172LOGICAL keep_bug_indices_cv3_tracer
    7273 !$OMP THREADPRIVATE( keep_bug_indices_cv3_tracer)
     74LOGICAL keep_bug_q_nocons_cv
     75 !$OMP THREADPRIVATE( keep_bug_q_nocons_cv)
    7376
    7477END MODULE lmdz_cv_ini
Note: See TracChangeset for help on using the changeset viewer.