- Timestamp:
- Apr 23, 2025, 10:51:22 AM (7 weeks ago)
- Location:
- LMDZ6/branches/contrails/libf
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/contrails/libf/dynphy_lonlat/phylmd/etat0phys_netcdf.f90
r5609 r5626 44 44 solsw, solswfdiff, radsol, t_ancien, wake_deltat, wake_s, rain_fall, qsol, z0h, & 45 45 sollw,sollwdown, rugoro, q_ancien, wake_deltaq, wake_pe, snow_fall, ratqs,w01, & 46 sig1, ftsol, c wcon, clwcon, fm_therm, wake_Cstar, pctsrf, entr_therm,radpas, f0,&46 sig1, ftsol, clwcon, fm_therm, wake_Cstar, pctsrf, entr_therm,radpas, f0,& 47 47 zmax0,fevap, rnebcon,falb_dir, falb_dif, wake_fip, agesno, detr_therm, pbl_tke, & 48 48 phys_state_var_init, ql_ancien, qs_ancien, prlw_ancien, prsw_ancien, & … … 50 50 ale_bl, ale_bl_trig, alp_bl, & 51 51 ale_wake, ale_bl_stat, AWAKE_S, & 52 cf_ancien, qvc_ancien, cfa_ancien, pcf_ancien, qva_ancien, qia_ancien52 cf_ancien, qvc_ancien, qvcon, qccon, cfa_ancien, pcf_ancien, qva_ancien, qia_ancien 53 53 54 54 USE comconst_mod, ONLY: pi, dtvr … … 243 243 cf_ancien = 0. 244 244 qvc_ancien = 0. 245 cwcon = 0. 245 qvcon = 0. 246 qccon = 0. 246 247 cfa_ancien = 0. 247 248 pcf_ancien = 0. -
LMDZ6/branches/contrails/libf/phylmd/create_etat0_unstruct_mod.f90
r5609 r5626 260 260 cf_ancien = 0. 261 261 qvc_ancien = 0. 262 cwcon = 0. 262 qvcon = 0. 263 qccon = 0. 263 264 264 265 wake_delta_pbl_TKE(:,:,:)=0 -
LMDZ6/branches/contrails/libf/phylmd/dyn1d/old_lmdz1d.f90
r5609 r5626 10 10 USE ioipsl, only: ju2ymds, ymds2ju, ioconf_calendar,getin 11 11 USE phys_state_var_mod, ONLY : phys_state_var_init, phys_state_var_end, & 12 c wcon, clwcon, detr_therm, &12 clwcon, detr_therm, & 13 13 qsol, fevap, z0m, z0h, agesno, & 14 14 du_gwd_rando, du_gwd_front, entr_therm, f0, fm_therm, & … … 23 23 zstd, zthe, zval, ale_bl, ale_bl_trig, alp_bl, & 24 24 ql_ancien, qs_ancien, qbs_ancien, & 25 cf_ancien, qvc_ancien, cfa_ancien, pcf_ancien, qva_ancien, qia_ancien, &25 cf_ancien, qvc_ancien, qvcon, qccon, cfa_ancien, pcf_ancien, qva_ancien, qia_ancien, & 26 26 prlw_ancien, prsw_ancien, prbsw_ancien, prw_ancien, & 27 27 u10m,v10m,ale_wake,ale_bl_stat … … 874 874 cf_ancien = 0. 875 875 qvc_ancien = 0. 876 cwcon = 0. 876 qvcon = 0. 877 qccon = 0. 877 878 ENDIF 878 879 IF ( ok_plane_contrail ) THEN -
LMDZ6/branches/contrails/libf/phylmd/dyn1d/scm.f90
r5609 r5626 6 6 USE ioipsl, only: ju2ymds, ymds2ju, ioconf_calendar,getin 7 7 USE phys_state_var_mod, ONLY : phys_state_var_init, phys_state_var_end, & 8 c wcon, clwcon, detr_therm, &8 clwcon, detr_therm, & 9 9 qsol, fevap, z0m, z0h, agesno, & 10 10 du_gwd_rando, du_gwd_front, entr_therm, f0, fm_therm, & … … 19 19 zstd, zthe, zval, ale_bl, ale_bl_trig, alp_bl, & 20 20 ql_ancien, qs_ancien, qbs_ancien, & 21 cf_ancien, qvc_ancien, cfa_ancien, pcf_ancien, qva_ancien, qia_ancien, &21 cf_ancien, qvc_ancien, qvcon, qccon, cfa_ancien, pcf_ancien, qva_ancien, qia_ancien, & 22 22 prlw_ancien, prsw_ancien, prbsw_ancien, prw_ancien, & 23 23 u10m,v10m,ale_wake,ale_bl_stat, ratqs_inter_ … … 616 616 cf_ancien = 0. 617 617 qvc_ancien = 0. 618 cwcon = 0. 618 qvcon = 0. 619 qccon = 0. 619 620 ENDIF 620 621 IF ( ok_plane_contrail ) THEN -
LMDZ6/branches/contrails/libf/phylmd/lmdz_lscp.f90
r5625 r5626 156 156 LOGICAL, DIMENSION(klon,klev), INTENT(IN) :: ptconv ! grid points where deep convection scheme is active 157 157 REAL, DIMENSION(klon,klev), INTENT(IN) :: cfcon_old ! cloud fraction from deep convection from previous timestep [-] 158 REAL, DIMENSION(klon,klev), INTENT(IN ):: qvcon_old ! in-cloud vapor specific humidity from deep convection from previous timestep [kg/kg]159 REAL, DIMENSION(klon,klev), INTENT(IN ):: qccon_old ! in-cloud condensed specific humidity from deep convection from previous timestep [kg/kg]158 REAL, DIMENSION(klon,klev), INTENT(INOUT):: qvcon_old ! in-cloud vapor specific humidity from deep convection from previous timestep [kg/kg] 159 REAL, DIMENSION(klon,klev), INTENT(INOUT):: qccon_old ! in-cloud condensed specific humidity from deep convection from previous timestep [kg/kg] 160 160 REAL, DIMENSION(klon,klev), INTENT(IN) :: cfcon ! cloud fraction from deep convection [-] 161 161 REAL, DIMENSION(klon,klev), INTENT(IN) :: qvcon ! in-cloud vapor specific humidity from deep convection [kg/kg] … … 683 683 zq_nodeep(i) = zq(i) - ( qvcon(i,k) + qccon(i,k) ) * cfcon(i,k) 684 684 685 IF ( ( cfcon(i,k) * qccon(i,k) ) .LT. ( cfcon_old(i,k) * qccon_old(i,k)) ) THEN685 IF ( cfcon(i,k) .LT. cfcon_old(i,k) ) THEN 686 686 !--If deep convection is weakening, we add the clouds that are not anymore 687 687 !--'in' deep convection to the advected clouds 688 cldfra_in(i) = cldfra_in(i) + MAX(0., cfcon_old(i,k) - cfcon(i,k)) 689 qvc_in(i) = qvc_in(i) + qvcon_old(i,k) * MAX(0., cfcon_old(i,k) - cfcon(i,k)) 690 qice_in(i) = qice_in(i) + ( qccon_old(i,k) * cfcon_old(i,k) & 691 - qccon(i,k) * cfcon(i,k) ) 692 ELSEIF ( cfcon(i,k) .GT. cfcon_old(i,k) ) THEN 688 cldfra_in(i) = cldfra_in(i) + ( cfcon_old(i,k) - cfcon(i,k) ) 689 qvc_in(i) = qvc_in(i) + qvcon_old(i,k) * ( cfcon_old(i,k) - cfcon(i,k) ) 690 qice_in(i) = qice_in(i) + qccon_old(i,k) * ( cfcon_old(i,k) - cfcon(i,k) ) 691 ELSE 693 692 !--Else if deep convection is strengthening, it consumes the existing cloud 694 693 !--fraction (which does not at this moment represent deep convection) 695 !--NB. if deep convection is strengthening while the fraction decreases,696 !--clear sky water vapor will be transfered in priority697 694 cldfra_in(i) = cldfra_in(i) * ( 1. & 698 695 - ( cfcon(i,k) - cfcon_old(i,k) ) / ( 1. - cfcon_old(i,k) ) ) … … 1231 1228 qvc_seri(i,k) = qvc(i) 1232 1229 1230 !--We keep convective clouds properties in memory, and account for 1231 !--the sink of condensed water from precipitation 1232 IF ( ptconv(i,k) ) THEN 1233 qvcon_old(i,k) = qvcon(i,k) 1234 qccon_old(i,k) = qccon(i,k) * zcond(i) / zoliq(i) 1235 ELSE 1236 qvcon_old(i,k) = 0. 1237 qccon_old(i,k) = 0. 1238 ENDIF 1239 1233 1240 !--Deep convection clouds properties are removed from radiative properties 1234 1241 !--outputed from lscp (NB. rneb and radocond are only used for the radiative … … 1237 1244 IF ( ptconv(i,k) .AND. pt_pron_clds(i) ) THEN 1238 1245 rneb(i,k) = rneb(i,k) - cfcon(i,k) 1239 radocond(i,k) = radocond(i,k) - qccon (i,k) * cfcon(i,k)1246 radocond(i,k) = radocond(i,k) - qccon_old(i,k) * cfcon(i,k) 1240 1247 ENDIF 1241 1248 -
LMDZ6/branches/contrails/libf/phylmd/lmdz_lscp_condensation.f90
r5625 r5626 238 238 ! for unadjusted clouds 239 239 REAL :: qiceincld, qvapincld, qvapincld_new 240 REAL :: qice_ratio 240 241 ! 241 242 ! for deposition / sublimation … … 538 539 !--Exact explicit integration (qvc exact, qice explicit) 539 540 tauinv_depsub = depo_coef_cirrus * qiceincld**(1./3.) * kappa_depsub 541 qvapincld_new = qsat(i) + ( qvapincld - qsat(i) ) * EXP( - dtime * tauinv_depsub ) 540 542 ELSE 541 543 !--If the cloud is initially subsaturated 542 !--Exact explicit integration (qvc exact, qice explicit) 543 !--Same but depo_coef_cirrus = 1 544 !!--Exact explicit integration (qvc exact, qice explicit) 545 !!--Same but depo_coef_cirrus = 1 546 !tauinv_depsub = qiceincld**(1./3.) * kappa_depsub 547 !qvapincld_new = qsat(i) + ( qvapincld - qsat(i) ) * EXP( - dtime * tauinv_depsub ) 548 !--Exact explicit integration (qice exact, qvc explicit) 549 !--The barrier is set so that the resulting vapor in cloud 550 !--cannot be greater than qsat 551 !--qice_ratio is the ratio between the new ice content and 552 !--the old one, it is comprised between 0 and 1 544 553 tauinv_depsub = qiceincld**(1./3.) * kappa_depsub 554 qice_ratio = tauinv_depsub * dtime / 1.5 / qiceinmix * ( qsat(i) - qvapincld ) 555 !--The new vapor in the cloud is increased with the 556 !--sublimated ice 557 qvapincld_new = qvapincld + qiceincld * ( 1. - MAX(0., 1. - qice_ratio)**1.5 ) 558 !--The new vapor in the cloud cannot be greater than qsat 559 qvapincld_new = MIN(qvapincld_new, qsat(i)) 560 !--If all the ice is sublimated 561 IF ( qvapincld_new .GE. ( qvapincld + qiceincld ) ) qvapincld_new = 0. 545 562 ENDIF ! qvapincld .GT. qsat 546 qvapincld_new = qsat(i) + ( qvapincld - qsat(i) ) * EXP( - dtime * tauinv_depsub )547 !--If all the ice is sublimated548 IF ( qvapincld_new .GE. ( qvapincld + qiceincld ) ) qvapincld_new = 0.549 563 ELSE 550 564 !--We keep the saturation adjustment hypothesis, and the vapor in the … … 836 850 qiceinmix = ( qcld(i) - qvc(i) ) / cldfra(i) / ( 1. + clrfra_mix / cldfra_mix ) 837 851 tauinv_depsub = qiceinmix**(1./3.) * kappa_depsub 838 qvapinmix_lim = qsat(i) - qiceinmix / ( 1. - EXP( - dtime * tauinv_depsub ) ) 852 !qvapinmix_lim = qsat(i) - qiceinmix / ( 1. - EXP( - dtime * tauinv_depsub ) ) 853 qvapinmix_lim = qsat(i) - qiceinmix * MAX(1., 1.5 / ( dtime * tauinv_depsub )) 839 854 qvapinclr_lim = qvapinmix_lim * ( 1. + cldfra_mix / clrfra_mix ) & 840 855 - qvc(i) / cldfra(i) * cldfra_mix / clrfra_mix -
LMDZ6/branches/contrails/libf/phylmd/phyetat0_mod.f90
r5618 r5626 18 18 USE surface_data, ONLY : type_ocean, version_ocean 19 19 USE phyetat0_get_mod, ONLY : phyetat0_get, phyetat0_srf 20 USE phys_state_var_mod, ONLY : ancien_ok, c wcon, clwcon, detr_therm, phys_tstep, &20 USE phys_state_var_mod, ONLY : ancien_ok, clwcon, detr_therm, phys_tstep, & 21 21 qsol, fevap, z0m, z0h, agesno, & 22 22 du_gwd_rando, du_gwd_front, entr_therm, f0, fm_therm, & 23 23 falb_dir, falb_dif, prw_ancien, prlw_ancien, prsw_ancien, prbsw_ancien, & 24 24 ftsol, pbl_tke, pctsrf, q_ancien, ql_ancien, qs_ancien, qbs_ancien, & 25 cf_ancien, qvc_ancien, cfa_ancien, pcf_ancien, qva_ancien, qia_ancien, &25 cf_ancien, qvc_ancien, qvcon, qccon, cfa_ancien, pcf_ancien, qva_ancien, qia_ancien, & 26 26 radpas, radsol, rain_fall, & 27 27 ratqs, rnebcon, rugoro, sig1, snow_fall, bs_fall, solaire_etat0, sollw, sollwdown, & … … 416 416 ancien_ok=ancien_ok.AND.phyetat0_get(cf_ancien,"CFANCIEN","CFANCIEN",0.) 417 417 ancien_ok=ancien_ok.AND.phyetat0_get(qvc_ancien,"QVCANCIEN","QVCANCIEN",0.) 418 found=phyetat0_get(cwcon,"CWCON","CWCON",0.) 418 found=phyetat0_get(qvcon,"QVCON","QVCON",0.) 419 found=phyetat0_get(qccon,"QCCON","QCCON",0.) 419 420 ELSE 420 421 cf_ancien(:,:)=0. -
LMDZ6/branches/contrails/libf/phylmd/phyredem.f90
r5618 r5626 23 23 prw_ancien, prlw_ancien, prsw_ancien, prbsw_ancien, & 24 24 ql_ancien, qs_ancien, qbs_ancien, cf_ancien, & 25 qvcon, qccon, & 25 26 qvc_ancien, cfa_ancien, pcf_ancien, & 26 27 qva_ancien, qia_ancien, u_ancien, v_ancien, & 27 c wcon, clwcon, rnebcon, ratqs, pbl_tke,&28 clwcon, rnebcon, ratqs, pbl_tke, & 28 29 wake_delta_pbl_tke, zmax0, f0, sig1, w01, & 29 30 wake_deltat, wake_deltaq, wake_s, awake_s, & … … 255 256 CALL put_field(pass,"CFANCIEN", "CFANCIEN", cf_ancien) 256 257 CALL put_field(pass,"QVCANCIEN", "QVCANCIEN", qvc_ancien) 257 CALL put_field(pass,"CWCON", "CWCON", cwcon) 258 CALL put_field(pass,"QVCON", "QVCON", qvcon) 259 CALL put_field(pass,"QCCON", "QCCON", qccon) 258 260 ENDIF 259 261 -
LMDZ6/branches/contrails/libf/phylmd/phys_state_var_mod.F90
r5618 r5626 94 94 REAL, ALLOCATABLE, SAVE :: cf_ancien(:,:), qvc_ancien(:,:) 95 95 !$OMP THREADPRIVATE(cf_ancien, qvc_ancien) 96 REAL, ALLOCATABLE, SAVE :: qvcon(:,:), qccon(:,:) 97 !$OMP THREADPRIVATE(qvcon, qccon) 96 98 REAL, ALLOCATABLE, SAVE :: cfa_ancien(:,:), pcf_ancien(:,:) 97 99 !$OMP THREADPRIVATE(cfa_ancien, pcf_ancien) 98 100 REAL, ALLOCATABLE, SAVE :: qva_ancien(:,:), qia_ancien(:,:) 99 101 !$OMP THREADPRIVATE(qva_ancien, qia_ancien) 100 REAL, ALLOCATABLE, SAVE :: cwcon(:,:), cwcon0(:,:)101 !$OMP THREADPRIVATE(cwcon, cwcon0)102 102 !!! RomP >>> 103 103 REAL, ALLOCATABLE, SAVE :: tr_ancien(:,:,:) … … 596 596 ALLOCATE(cfa_ancien(klon,klev), pcf_ancien(klon,klev)) 597 597 ALLOCATE(qva_ancien(klon,klev), qia_ancien(klon,klev)) 598 ALLOCATE( cwcon(klon,klev), cwcon0(klon,klev))598 ALLOCATE(qvcon(klon,klev), qccon(klon,klev)) 599 599 !!! Rom P >>> 600 600 ALLOCATE(tr_ancien(klon,klev,nbtr)) … … 826 826 DEALLOCATE(cf_ancien, qvc_ancien, cfa_ancien, pcf_ancien) 827 827 DEALLOCATE(qva_ancien, qia_ancien) 828 DEALLOCATE( cwcon, cwcon0)828 DEALLOCATE(qvcon, qccon) 829 829 DEALLOCATE(tr_ancien) !RomP 830 830 DEALLOCATE(ratqs, pbl_tke,coefh,coefm) -
LMDZ6/branches/contrails/libf/phylmd/physiq_mod.F90
r5623 r5626 1628 1628 clwcon(:,:) = 0.0 1629 1629 !--AB for prognostic clouds 1630 cwcon0(:,:) = 0.01631 cwcon(:,:) = 0.01630 qvcon(:,:) = 0.0 1631 qccon(:,:) = 0.0 1632 1632 1633 1633 ! … … 3950 3950 DO i = 1, klon 3951 3951 qvc_seri(i,k) = qvc_seri(i,k) * q_seri(i,k) 3952 cwcon0(i,k) = zqsat(i,k)3953 3952 ENDDO 3954 3953 ENDDO … … 3971 3970 CALL lscp(klon,klev,phys_tstep,missing_val,paprs,pplay,omega, & 3972 3971 t_seri, q_seri, ql_seri_lscp, qi_seri_lscp, ratqs, sigma_qtherm, & 3973 ptconv, rnebcon, cwcon, clwcon, rnebcon0, cwcon0, clwcon0, &3972 ptconv, rnebcon, qvcon, qccon, rnebcon0, zqsat, clwcon0, & 3974 3973 d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, rneblsvol, & 3975 3974 pfraclr, pfracld, cldfraliq, sigma2_icefracturb, mean_icefracturb, & … … 3991 3990 dqrfreez, dqsauto, dqsagg, dqsrim, dqsmelt, dqsfreez, & 3992 3991 dqised, dcfsed, dqvcsed) 3993 3994 IF (ok_ice_supersat) cwcon(:,:) = cwcon0(:,:)3995 3992 3996 3993 ELSE
Note: See TracChangeset
for help on using the changeset viewer.