Changeset 5622 for LMDZ6/trunk
- Timestamp:
- Apr 16, 2025, 9:25:21 PM (7 weeks ago)
- Location:
- LMDZ6/trunk/libf/phylmd
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmd/clesphys_mod_h.f90
r5472 r5622 51 51 , iflag_phytrac, ok_new_lscp, ok_bs, ok_rad_bs & 52 52 , iflag_thermals, nsplit_thermals & 53 , iflag_physiq, ok_3Deffect, ok_water_mass_fixer 53 , iflag_physiq, ok_3Deffect, ok_water_mass_fixer & 54 , ok_mass_dtcon, ok_mass_dqcon, ok_mass_duvcon 54 55 55 56 … … 158 159 !OB flag to activate water mass fixer in physiq 159 160 LOGICAL :: ok_water_mass_fixer 161 162 ! for conservation when calling deep convection every n time steps 163 LOGICAL :: ok_mass_dtcon, ok_mass_dqcon, ok_mass_duvcon 164 160 165 161 166 … … 207 212 !$OMP , iflag_phytrac, ok_new_lscp, ok_bs, ok_rad_bs & 208 213 !$OMP , iflag_thermals, nsplit_thermals & 209 !$OMP , iflag_physiq, ok_3Deffect, ok_water_mass_fixer) 214 !$OMP , iflag_physiq, ok_3Deffect, ok_water_mass_fixer & 215 !$OMP , ok_mass_dtcon, ok_mass_dqcon, ok_mass_duvcon ) 210 216 211 217 END MODULE clesphys_mod_h -
LMDZ6/trunk/libf/phylmd/conf_phys_m.f90
r5470 r5622 247 247 INTEGER,SAVE :: kz0_omp 248 248 LOGICAL, SAVE :: ok_bs_omp, ok_rad_bs_omp 249 249 LOGICAL, SAVE :: ok_mass_dtcon_omp, ok_mass_dqcon_omp, ok_mass_duvcon_omp 250 250 251 251 INTEGER, INTENT(OUT):: read_climoz ! read ozone climatology, OpenMP shared … … 1010 1010 ok_conserv_q_omp = .FALSE. 1011 1011 CALL getin('ok_conserv_q',ok_conserv_q_omp) 1012 1013 1014 1015 !Config Key = ok_mass_dtcon 1016 !Config Desc = for conservation when calling deep convection every n time steps 1017 !Config Def = y 1018 !Config Help = for conservation when calling deep convection every n time steps 1019 ok_mass_dtcon_omp = .TRUE. 1020 CALL getin('ok_mass_dtcon',ok_mass_dtcon_omp) 1021 1022 !Config Key = ok_mass_dqcon 1023 !Config Desc = for conservation when calling deep convection every n time steps 1024 !Config Def = y 1025 !Config Help = for conservation when calling deep convection every n time steps 1026 ok_mass_dqcon_omp = .TRUE. 1027 CALL getin('ok_mass_dqcon',ok_mass_dqcon_omp) 1028 1029 !Config Key = ok_mass_duvcon 1030 !Config Desc = for conservation when calling deep convection every n time steps 1031 !Config Def = y 1032 !Config Help = for conservation when calling deep convection every n time steps 1033 ok_mass_dtcon_omp = .TRUE. 1034 CALL getin('ok_mass_duvcon',ok_mass_duvcon_omp) 1035 1012 1036 1013 1037 ! … … 2323 2347 nbapp_wk = nbapp_wk_omp 2324 2348 iflag_ener_conserv = iflag_ener_conserv_omp 2349 ok_mass_dtcon = ok_mass_dtcon_omp 2350 ok_mass_dqcon = ok_mass_dqcon_omp 2351 ok_mass_duvcon = ok_mass_duvcon_omp 2325 2352 ok_conserv_q = ok_conserv_q_omp 2326 2353 epmax = epmax_omp … … 2743 2770 WRITE(lunout,*) ' iflag_ener_conserv=',iflag_ener_conserv 2744 2771 WRITE(lunout,*) ' ok_conserv_q=',ok_conserv_q 2772 WRITE(lunout,*) ' ok_mass_dtcon=',ok_mass_dtcon 2773 WRITE(lunout,*) ' ok_mass_dqcon=',ok_mass_dqcon 2774 WRITE(lunout,*) ' ok_mass_duvcon=',ok_mass_duvcon 2745 2775 WRITE(lunout,*) ' epmax = ', epmax 2746 2776 WRITE(lunout,*) ' coef_epmax_cape = ', coef_epmax_cape -
LMDZ6/trunk/libf/phylmd/cv3_routines.f90
r5560 r5622 12 12 USE conema3_mod_h 13 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_cv14 USE lmdz_cv_ini, ONLY : keep_bug_indices_cv3_tracer 15 15 16 16 … … 142 142 keep_bug_indices_cv3_tracer = .FALSE. 143 143 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)146 144 147 145 … … 171 169 WRITE (*, *) 'keepbug_ice_frac =', keepbug_ice_frac 172 170 WRITE (*, *) 'keep_bug_indices_cv3_tracer =', keep_bug_indices_cv3_tracer 173 WRITE (*, *) 'keep_bug_q_nocons_cv =', keep_bug_q_nocons_cv174 171 175 172 first = .FALSE. … … 2707 2704 wdtrainA, wdtrainS, wdtrainM) ! RomP 2708 2705 USE lmdz_cv_ini, ONLY : cpd,ginv,grav,nl,nlp,sigdz 2709 USE lmdz_cv_ini, ONLY : keep_bug_q_nocons_cv2710 2706 USE cvflag_mod_h 2711 2707 USE print_control_mod, ONLY: prt_level, lunout … … 2912 2908 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 2913 2909 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 2914 IF (keep_bug_q_nocons_cv) THEN2915 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!2916 DO il = 1, ncum2917 IF (i<=inb(il) .AND. lwork(il)) THEN2918 wdtrain(il) = grav*ep(il, i)*m(il, i)*clw(il, i)2919 wdtrainS(il, i) = wdtrain(il)/grav ! Ps jyg2920 END IF2921 END DO2922 2923 IF (i>1) THEN2924 DO j = 1, i - 12925 DO il = 1, ncum2926 IF (i<=inb(il) .AND. lwork(il)) THEN2927 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 jyg2931 END IF2932 END DO2933 END DO2934 END IF2935 2936 IF (cvflag_prec_eject) THEN2937 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!2938 IF (adiab_ascent_mass_flux_depends_on_ejectliq) THEN2939 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!2940 !!! Warning : this option leads to water conservation violation2941 !!! Expert only2942 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!2943 IF ( i > 1) THEN2944 DO il = 1, ncum2945 IF (i<=inb(il) .AND. lwork(il)) THEN2946 wdtrainA(il,i) = ma(il, i+1)*(qta(il, i-1)-qta(il,i))/(1. - qta(il, i-1)) ! Pa jygprl2947 wdtrain(il) = wdtrain(il) + grav*wdtrainA(il,i)2948 END IF2949 END DO2950 ENDIF ! ( i > 1)2951 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!2952 ELSE ! (adiab_ascent_mass_flux_depends_on_ejectliq)2953 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!2954 IF ( i > 1) THEN2955 DO il = 1, ncum2956 IF (i<=inb(il) .AND. lwork(il)) THEN2957 wdtrainA(il,i) = ma(il, i+1)*(qta(il, i-1)-qta(il,i)) ! Pa jygprl2958 wdtrain(il) = wdtrain(il) + grav*wdtrainA(il,i)2959 END IF2960 END DO2961 ENDIF ! ( i > 1)2962 2963 ENDIF ! (adiab_ascent_mass_flux_depends_on_ejectliq) ELSE2964 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!2965 ENDIF ! (cvflag_prec_eject)2966 2967 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!2968 ELSE ! (keep_bug_q_nocons_cv)2969 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!2970 2910 DO il = 1, ncum 2971 2911 IF (i<=inb(il) .AND. lwork(il)) THEN … … 3023 2963 ENDIF ! ( i > 1) 3024 2964 3025 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!3026 ENDIF ! (keep_bug_q_nocons_cv)3027 2965 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 3028 2966 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! … … 3519 3457 USE cvflag_mod_h 3520 3458 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_cv3522 3459 IMPLICIT NONE 3523 3460 … … 4095 4032 IF (ok_optim_yield) THEN !| 4096 4033 !----------------------------------------------------------- 4097 IF (keep_bug_q_nocons_cv) THEN !!jyg202502154098 DO il = 1, ncum4099 amp1(il) = upwd(il,i+1)4100 ad(il) = dnwd(il,i)4101 ENDDO4102 ELSE ! (keep_bug_q_nocons_cv)4103 4034 DO il = 1, ncum 4104 4035 amp1(il) = upwd(il,i+1) 4105 4036 ad(il) = - dnwd(il,i) 4106 4037 ENDDO 4107 ENDIF ! (keep_bug_q_nocons_cv)4108 4038 !----------------------------------------------------------- 4109 4039 ELSE !(ok_optim_yield) !| -
LMDZ6/trunk/libf/phylmd/lmdz_cv_ini.f90
r5560 r5622 14 14 nl, nlp, nlm 15 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 16 clmci, eps, epsi, epsim1, ginv, hrd, grav, keep_bug_indices_cv3_tracer 18 17 19 18 … … 72 71 LOGICAL keep_bug_indices_cv3_tracer 73 72 !$OMP THREADPRIVATE( keep_bug_indices_cv3_tracer) 74 LOGICAL keep_bug_q_nocons_cv75 !$OMP THREADPRIVATE( keep_bug_q_nocons_cv)76 73 77 74 END MODULE lmdz_cv_ini -
LMDZ6/trunk/libf/phylmd/phys_local_var_mod.F90
r5614 r5622 47 47 REAL, SAVE, ALLOCATABLE :: d_tr_dyn(:,:,:) 48 48 !$OMP THREADPRIVATE(d_tr_dyn) 49 REAL, SAVE, ALLOCATABLE :: d_t_con(:,:),d_q_con(:,:) ,d_q_con_zmasse(:,:)50 !$OMP THREADPRIVATE(d_t_con,d_q_con ,d_q_con_zmasse)49 REAL, SAVE, ALLOCATABLE :: d_t_con(:,:),d_q_con(:,:) 50 !$OMP THREADPRIVATE(d_t_con,d_q_con) 51 51 REAL, SAVE, ALLOCATABLE :: d_u_con(:,:),d_v_con(:,:) 52 52 !$OMP THREADPRIVATE(d_u_con,d_v_con) 53 REAL, SAVE, ALLOCATABLE :: d_t_con_zmasse(:,:),d_q_con_zmasse(:,:) 54 !$OMP THREADPRIVATE(d_t_con_zmasse,d_q_con_zmasse) 55 REAL, SAVE, ALLOCATABLE :: d_u_con_zmasse(:,:),d_v_con_zmasse(:,:) 56 !$OMP THREADPRIVATE(d_u_con_zmasse,d_v_con_zmasse) 53 57 REAL, SAVE, ALLOCATABLE :: d_t_wake(:,:),d_q_wake(:,:) 54 58 !$OMP THREADPRIVATE( d_t_wake,d_q_wake) … … 860 864 ALLOCATE(d_cf_dyn(klon,klev),d_rvc_dyn(klon,klev)) 861 865 ALLOCATE(d_tr_dyn(klon,klev,nbtr)) !RomP 862 ALLOCATE(d_t_con(klon,klev),d_q_con(klon,klev) ,d_q_con_zmasse(klon,klev))866 ALLOCATE(d_t_con(klon,klev),d_q_con(klon,klev)) 863 867 ALLOCATE(d_u_con(klon,klev),d_v_con(klon,klev)) 868 ALLOCATE(d_t_con_zmasse(klon,klev),d_q_con_zmasse(klon,klev)) 869 ALLOCATE(d_u_con_zmasse(klon,klev),d_v_con_zmasse(klon,klev)) 864 870 ALLOCATE(d_t_wake(klon,klev),d_q_wake(klon,klev)) 865 871 ALLOCATE(d_t_lsc(klon,klev),d_q_lsc(klon,klev)) … … 1330 1336 DEALLOCATE(d_cf_dyn,d_rvc_dyn) 1331 1337 DEALLOCATE(d_tr_dyn) !RomP 1332 DEALLOCATE(d_t_con,d_q_con ,d_q_con_zmasse)1338 DEALLOCATE(d_t_con,d_q_con) 1333 1339 DEALLOCATE(d_u_con,d_v_con) 1340 DEALLOCATE(d_t_con_zmasse,d_q_con_zmasse) 1341 DEALLOCATE(d_u_con_zmasse,d_v_con_zmasse) 1334 1342 DEALLOCATE(d_t_wake,d_q_wake) 1335 1343 DEALLOCATE(d_t_lsc,d_q_lsc) -
LMDZ6/trunk/libf/phylmd/physiq_mod.F90
r5614 r5622 155 155 d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d,d_qbs_dyn2d, & 156 156 ! Physic tendencies 157 d_t_con,d_q_con,d_q_con_zmasse,d_u_con,d_v_con, & 157 d_t_con,d_q_con,d_u_con,d_v_con, & 158 d_t_con_zmasse,d_q_con_zmasse,d_u_con_zmasse,d_v_con_zmasse, & 158 159 d_tr, & !! to be removed?? (jyg) 159 160 d_t_wake,d_q_wake, & … … 1253 1254 REAL qql1(klon),qql2(klon),corrqql 1254 1255 1255 !--OB flag to activate better conservation of water tendency when convection is not called every timestep1256 LOGICAL, PARAMETER :: ok_conserv_d_q_con=.FALSE.1257 1258 1256 REAL, dimension(klon,klev) :: t_env,q_env 1259 1257 … … 3416 3414 ENDIF 3417 3415 3418 !--saving d_ q_con * zmass for next timestep if convection is not called every timestep3419 IF (ok_ conserv_d_q_con) THEN3416 !--saving d_X_con * zmass for next timestep if convection is not called every timestep 3417 IF (ok_mass_dqcon) THEN 3420 3418 d_q_con_zmasse(:,:) = d_q_con(:,:) * zmasse(:,:) 3421 3419 ENDIF 3420 3421 IF (ok_mass_dtcon) THEN 3422 d_t_con_zmasse(:,:) = d_t_con(:,:) * zmasse(:,:) 3423 ENDIF 3424 3425 IF (ok_mass_duvcon) THEN 3426 d_u_con_zmasse(:,:) = d_u_con(:,:) * zmasse(:,:) 3427 d_v_con_zmasse(:,:) = d_v_con(:,:) * zmasse(:,:) 3428 ENDIF 3429 3422 3430 3423 3431 ! CALL homogene(paprs, q_seri, d_q_con, u_seri,v_seri, … … 3451 3459 !! 3452 3460 3453 !--recompute d_ q_con with zmasse from new timestep3454 IF (ok_ conserv_d_q_con) THEN3461 !--recompute d_X_con with zmasse from new timestep 3462 IF (ok_mass_dqcon) THEN 3455 3463 d_q_con(:,:)=d_q_con_zmasse(:,:)/zmasse(:,:) 3456 3464 ENDIF 3465 3466 IF (ok_mass_dtcon) THEN 3467 d_t_con(:,:)=d_t_con_zmasse(:,:)/zmasse(:,:) 3468 ENDIF 3469 3470 IF (ok_mass_duvcon) THEN 3471 d_u_con(:,:)=d_u_con_zmasse(:,:)/zmasse(:,:) 3472 d_v_con(:,:)=d_v_con_zmasse(:,:)/zmasse(:,:) 3473 ENDIF 3474 3475 3457 3476 3458 3477 CALL add_phys_tend(d_u_con, d_v_con, d_t_con, d_q_con, dql0, dqi0, dqbs0, paprs, &
Note: See TracChangeset
for help on using the changeset viewer.