Ignore:
Timestamp:
Apr 16, 2025, 9:25:21 PM (8 weeks ago)
Author:
evignon
Message:

commission pour la conservation de l'eau dans la convection profonde.
1/ integre les corrections apportees par JYG dans cv3routines.
2/ par defaut, conserve dx*masse quand on appelle la convection tous les n pas de temps
Cette commission conduit à une perte de convergence

File:
1 edited

Legend:

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

    r5560 r5622  
    1212  USE conema3_mod_h
    1313  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
     14  USE lmdz_cv_ini, ONLY : keep_bug_indices_cv3_tracer
    1515
    1616
     
    142142     keep_bug_indices_cv3_tracer = .FALSE.
    143143     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)
    146144
    147145
     
    171169    WRITE (*, *) 'keepbug_ice_frac =', keepbug_ice_frac
    172170    WRITE (*, *) 'keep_bug_indices_cv3_tracer =', keep_bug_indices_cv3_tracer
    173     WRITE (*, *) 'keep_bug_q_nocons_cv =', keep_bug_q_nocons_cv
    174171
    175172    first = .FALSE.
     
    27072704                     wdtrainA, wdtrainS, wdtrainM)                                      ! RomP
    27082705  USE lmdz_cv_ini, ONLY : cpd,ginv,grav,nl,nlp,sigdz
    2709   USE lmdz_cv_ini, ONLY : keep_bug_q_nocons_cv
    27102706  USE cvflag_mod_h
    27112707  USE print_control_mod, ONLY: prt_level, lunout
     
    29122908  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    29132909  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    2914   IF (keep_bug_q_nocons_cv) THEN
    2915   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    2916         DO il = 1, ncum
    2917           IF (i<=inb(il) .AND. lwork(il)) THEN
    2918             wdtrain(il) = grav*ep(il, i)*m(il, i)*clw(il, i)
    2919             wdtrainS(il, i) = wdtrain(il)/grav                                            !   Ps   jyg
    2920           END IF
    2921         END DO
    2922    
    2923         IF (i>1) THEN
    2924           DO j = 1, i - 1
    2925             DO il = 1, ncum
    2926               IF (i<=inb(il) .AND. lwork(il)) THEN
    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
    2931               END IF
    2932             END DO
    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   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    29702910        DO il = 1, ncum
    29712911          IF (i<=inb(il) .AND. lwork(il)) THEN
     
    30232963        ENDIF  ! ( i > 1)
    30242964   
    3025   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    3026   ENDIF ! (keep_bug_q_nocons_cv)
    30272965  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    30282966  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     
    35193457    USE cvflag_mod_h
    35203458   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
    35223459  IMPLICIT NONE
    35233460
     
    40954032           IF (ok_optim_yield) THEN                       !|
    40964033!-----------------------------------------------------------
    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)
    41034034      DO il = 1, ncum
    41044035         amp1(il) = upwd(il,i+1)
    41054036         ad(il) = - dnwd(il,i)
    41064037      ENDDO
    4107     ENDIF  ! (keep_bug_q_nocons_cv)
    41084038!-----------------------------------------------------------
    41094039        ELSE !(ok_optim_yield)                            !|
Note: See TracChangeset for help on using the changeset viewer.