Changeset 5551
- Timestamp:
- Feb 19, 2025, 5:40:06 PM (41 hours ago)
- Location:
- LMDZ6/branches/contrails
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/contrails/DefLists/field_def_lmdz.xml
r5547 r5551 908 908 <field id="rcontseri" long_name="Linear contrail fraction to cloud fraction ratio" unit="-" /> 909 909 <field id="drcontdyn" long_name="Dynamics linear contrail fraction to cloud fraction ratio tendency" unit="s-1" /> 910 <field id="Tcritcont" long_name="Temperature threshold for contrail formation" unit=" m/s/mesh" />911 <field id="qcritcont" long_name="Specific humidity threshold for contrail formation" unit="Pa" />910 <field id="Tcritcont" long_name="Temperature threshold for contrail formation" unit="K" /> 911 <field id="qcritcont" long_name="Specific humidity threshold for contrail formation" unit="kg/kg" /> 912 912 <field id="potcontfraP" long_name="Fraction with pontential persistent contrail" unit="-" /> 913 913 <field id="potcontfraNP" long_name="Fraction with potential non-persistent contrail" unit="-" /> … … 917 917 <field id="dqiavi" long_name="Aviation ice tendency" unit="kg/kg/s" /> 918 918 <field id="dqvcavi" long_name="Aviation cloudy water vapor tendency" unit="kg/kg/s" /> 919 <field id="flightdist" long_name="Aviation flown distance " unit="m/s/mesh" />920 <field id="flighth2o" long_name="Aviation H2O flight emission" unit="kg H2O/s/mesh" />919 <field id="flightdist" long_name="Aviation flown distance concentration" unit="m/s/m3" /> 920 <field id="flighth2o" long_name="Aviation emitted H2O concentration" unit="kg H2O/s/m3" /> 921 921 <field id="dqavi" long_name="Water vapor emissions from aviation tendency" unit="kg/kg/s" /> 922 922 -
LMDZ6/branches/contrails/libf/phylmd/lmdz_aviation.f90
r5549 r5551 8 8 9 9 SUBROUTINE aviation_water_emissions( & 10 klon, klev, dtime, p aprs, pplay, temp, qtot, cell_area, &10 klon, klev, dtime, pplay, temp, qtot, & 11 11 flight_h2o, d_q_avi & 12 12 ) 13 13 14 USE lmdz_lscp_ini, ONLY: RD , RG14 USE lmdz_lscp_ini, ONLY: RD 15 15 16 16 IMPLICIT NONE … … 18 18 INTEGER, INTENT(IN) :: klon, klev ! number of horizontal grid points and vertical levels 19 19 REAL, INTENT(IN) :: dtime ! time step [s] 20 REAL, DIMENSION(klon,klev+1), INTENT(IN) :: paprs ! inter-layer pressure [Pa]21 20 REAL, DIMENSION(klon,klev), INTENT(IN) :: pplay ! mid-layer pressure [Pa] 22 21 REAL, DIMENSION(klon,klev), INTENT(IN) :: temp ! temperature (K) 23 22 REAL, DIMENSION(klon,klev), INTENT(IN) :: qtot ! total specific humidity (in vapor phase) [kg/kg] 24 REAL, DIMENSION(klon), INTENT(IN) :: cell_area ! area of each cell [m2] 25 REAL, DIMENSION(klon,klev), INTENT(IN) :: flight_h2o ! aviation H2O emitted within the mesh [kgH2O/s/mesh] 23 REAL, DIMENSION(klon,klev), INTENT(IN) :: flight_h2o ! aviation emitted H2O concentration [kgH2O/s/m3] 26 24 REAL, DIMENSION(klon,klev), INTENT(OUT) :: d_q_avi ! water vapor tendency from aviation [kg/kg] 27 25 ! Local 28 26 INTEGER :: i, k 29 REAL :: rho , rhodz, dz, M_cell27 REAL :: rho 30 28 31 29 DO i=1, klon … … 34 32 rho = pplay(i,k) / temp(i,k) / RD 35 33 !--Dry air mass [kg/m2] 36 rhodz = ( paprs(i,k) - paprs(i,k+1) ) / RG34 !rhodz = ( paprs(i,k) - paprs(i,k+1) ) / RG 37 35 !--Cell thickness [m] 38 dz = rhodz / rho36 !dz = rhodz / rho 39 37 !--Cell dry air mass [kg] 40 M_cell = rhodz * cell_area(i)38 !M_cell = rhodz * cell_area(i) 41 39 42 40 !--q is the specific humidity (kg/kg humid air) hence the complicated equation to update q … … 44 42 ! = ( m_dry_air * qold + dm_h2O * (1-qold) ) / (m_dry_air + dm_H2O * (1-qold) ) 45 43 !--The equation is derived by writing m_humid_air = m_dry_air + m_H2O = m_dry_air / (1-q) 46 !--flight_h2O is in kg H2O / s / m esh44 !--flight_h2O is in kg H2O / s / m3 47 45 48 !d_q_avi(i,k) = ( M_cell * qtot(i,k) + flight_h2o(i,k) * dtime * ( 1. - qtot(i,k) ) ) & 49 ! / ( M_cell + flight_h2o(i,k) * dtime * ( 1. - qtot(i,k) ) ) & 46 !d_q_avi(i,k) = ( M_cell * qtot(i,k) + V_cell * flight_h2o(i,k) * dtime * ( 1. - qtot(i,k) ) ) & 47 ! / ( M_cell + V_cell * flight_h2o(i,k) * dtime * ( 1. - qtot(i,k) ) ) & 48 ! - qtot(i,k) 49 !--NB., M_cell = V_cell * rho 50 !d_q_avi(i,k) = ( rho * qtot(i,k) + flight_h2o(i,k) * dtime * ( 1. - qtot(i,k) ) ) & 51 ! / ( rho + flight_h2o(i,k) * dtime * ( 1. - qtot(i,k) ) ) & 50 52 ! - qtot(i,k) 51 53 !--Same formula, more computationally effective but less readable 52 54 d_q_avi(i,k) = flight_h2o(i,k) * ( 1. - qtot(i,k) ) & 53 / ( M_cell/ dtime / ( 1. - qtot(i,k) ) + flight_h2o(i,k) )55 / ( rho / dtime / ( 1. - qtot(i,k) ) + flight_h2o(i,k) ) 54 56 ENDDO 55 57 ENDDO … … 61 63 SUBROUTINE contrails_formation_evolution( & 62 64 dtime, pplay, temp, qsat, qsatl, gamma_cond, rcont_seri, flight_dist, & 63 cldfra, qvc, dz, V_cell,pdf_loc, pdf_scale, pdf_alpha, &65 cldfra, qvc, dz, pdf_loc, pdf_scale, pdf_alpha, & 64 66 Tcritcont, qcritcont, potcontfraP, potcontfraNP, contfra, & 65 67 dcontfra_cir, dcf_avi, dqvc_avi, dqi_avi & … … 85 87 REAL, INTENT(IN) :: gamma_cond ! condensation threshold w.r.t. qsat [-] 86 88 REAL, INTENT(IN) :: rcont_seri ! ratio of contrails fraction to total cloud fraction [-] 87 REAL, INTENT(IN) :: flight_dist ! aviation distance flown within the mesh [m/s/mesh]89 REAL, INTENT(IN) :: flight_dist ! aviation distance flown concentration [m/s/m3] 88 90 REAL, INTENT(IN) :: cldfra ! cloud fraction [-] 89 91 REAL, INTENT(IN) :: qvc ! gridbox-mean vapor in the cloud [kg/kg] 90 92 REAL, INTENT(IN) :: dz ! cell width [m] 91 REAL, INTENT(IN) :: V_cell ! cell volume [m3]92 93 REAL, INTENT(IN) :: pdf_loc ! location parameter of the clear sky PDF [%] 93 94 REAL, INTENT(IN) :: pdf_scale ! scale parameter of the clear sky PDF [%] … … 197 198 IF ( potcontfraP .GT. eps ) THEN 198 199 contrail_cross_section = CONTRAIL_CROSS_SECTION_ONERA(dz) 199 contfra_new = MIN(1., flight_dist * dtime * contrail_cross_section / V_cell)200 contfra_new = MIN(1., flight_dist * dtime * contrail_cross_section) 200 201 dcf_avi = potcontfraP * contfra_new 201 202 IF ( cldfra .GT. eps ) THEN … … 634 635 635 636 INTEGER, INTENT(IN) :: klon, klev ! number of horizontal grid points and vertical levels 636 REAL, DIMENSION(klon,klev), INTENT(OUT) :: flight_dist ! Aviation distance flown within the mesh [m/s/mesh]637 REAL, DIMENSION(klon,klev), INTENT(OUT) :: flight_h2o ! Aviation H2O emitted within the mesh [kgH2O/s/mesh]637 REAL, DIMENSION(klon,klev), INTENT(OUT) :: flight_dist ! Aviation distance flown concentration [m/s/m3] 638 REAL, DIMENSION(klon,klev), INTENT(OUT) :: flight_h2o ! Aviation emitted H2O [kgH2O/s/m3] 638 639 639 640 !---------------------------------------------------- … … 650 651 IF (is_omp_master) CALL xios_recv_field("KMFLOWN_interp", flight_dist_mpi(:,:,1)) 651 652 652 ! Propagate to other OMP threads: flight_dist_mpi(klon_mpi,klev) to flight_dist(klon,klev)653 ! (klon_mpi,klon) = (200,50) avec 80 MPI, 4 OMP, nbp40654 CALL scatter_omp(flight_dist_mpi(:,:,1), flight_dist)653 ! Propagate to other OMP threads: flight_dist_mpi(klon_mpi,klev) to flight_dist(klon,klev) 654 ! (klon_mpi,klon) = (200,50) avec 80 MPI, 4 OMP, nbp40 655 CALL scatter_omp(flight_dist_mpi(:,:,1), flight_dist) 655 656 656 657 END SUBROUTINE read_aviation_emissions -
LMDZ6/branches/contrails/libf/phylmd/lmdz_lscp.f90
r5545 r5551 175 175 !-------------------------------------------------- 176 176 REAL, DIMENSION(klon,klev), INTENT(INOUT):: rcont_seri ! ratio of contrails fraction to total cloud fraction [-] 177 REAL, DIMENSION(klon,klev), INTENT(IN) :: flight_dist ! aviation distance flown within the mesh [m/s/mesh]178 REAL, DIMENSION(klon,klev), INTENT(IN) :: flight_h2o ! aviation H2O emitted within the mesh [kgH2O/s/mesh]177 REAL, DIMENSION(klon,klev), INTENT(IN) :: flight_dist ! aviation distance flown concentration [m/s/m3] 178 REAL, DIMENSION(klon,klev), INTENT(IN) :: flight_h2o ! aviation emitted H2O concentration [kgH2O/s/m3] 179 179 180 180 ! OUTPUT variables -
LMDZ6/branches/contrails/libf/phylmd/lmdz_lscp_condensation.f90
r5456 r5551 158 158 ! 159 159 REAL, INTENT(INOUT), DIMENSION(klon) :: rcont_seri ! ratio of contrails fraction to total cloud fraction [-] 160 REAL, INTENT(IN), DIMENSION(klon) :: flight_dist ! aviation distance flown within the mesh [m/s/mesh]161 REAL, INTENT(IN), DIMENSION(klon) :: flight_h2o ! aviation H2O emitted within the mesh [kgH2O/s/mesh]160 REAL, INTENT(IN), DIMENSION(klon) :: flight_dist ! aviation distance flown concentration [m/s/m3] 161 REAL, INTENT(IN), DIMENSION(klon) :: flight_h2o ! aviation emitted H2O concentration [kgH2O/s/m3] 162 162 ! 163 163 ! Output … … 240 240 ! 241 241 ! for cell properties 242 REAL :: rho, rhodz, dz , V_cell242 REAL :: rho, rhodz, dz 243 243 244 244 qzero(:) = 0. … … 335 335 !--Cell thickness [m] 336 336 dz = rhodz / rho 337 !--Cell volume [m3]338 V_cell = dz * cell_area(i)339 337 340 338 … … 788 786 dtime, pplay(i), temp(i), qsat(i), qsatl(i), gamma_cond(i), & 789 787 rcont_seri(i), flight_dist(i), cldfra(i), qvc(i), & 790 dz, V_cell,pdf_loc, pdf_scale, pdf_alpha, &788 dz, pdf_loc, pdf_scale, pdf_alpha, & 791 789 Tcritcont(i), qcritcont(i), potcontfraP(i), potcontfraNP(i), contfra(i), & 792 790 dcontfra_cir(i), dcf_avi(i), dqvc_avi(i), dqi_avi(i) & -
LMDZ6/branches/contrails/libf/phylmd/phys_output_ctrlout_mod.F90
r5536 r5551 2193 2193 'dqvcavi', 'Aviation cloudy water vapor tendency', 'kg/kg/s', (/ ('', i=1, 10) /)) 2194 2194 TYPE(ctrl_out), SAVE :: o_flight_dist = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2195 'flightdist', 'Aviation flown distance ', 'm/s/mesh', (/ ('', i=1, 10) /))2195 'flightdist', 'Aviation flown distance concentration', 'm/s/m3', (/ ('', i=1, 10) /)) 2196 2196 TYPE(ctrl_out), SAVE :: o_flight_h2o = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2197 'flighth2o', 'Aviation H2O flight emission', 'kg H2O/s/mesh', (/ ('', i=1, 10) /))2197 'flighth2o', 'Aviation emitted H2O concentration', 'kg H2O/s/m3', (/ ('', i=1, 10) /)) 2198 2198 2199 2199 !!!!!!!!!!!!! Sorties niveaux standards de pression NMC -
LMDZ6/branches/contrails/libf/phylmd/physiq_mod.F90
r5549 r5551 3872 3872 !--Add the water emissions from aviation 3873 3873 IF ( ok_plane_h2o ) THEN 3874 CALL aviation_water_emissions(klon, klev, phys_tstep, p aprs, pplay, &3875 t_seri, q_seri, cell_area,flight_h2o, d_q_avi)3874 CALL aviation_water_emissions(klon, klev, phys_tstep, pplay, & 3875 t_seri, q_seri, flight_h2o, d_q_avi) 3876 3876 CALL add_phys_tend(du0, dv0, dt0, d_q_avi, dql0, dqi0, dqbs0, paprs, & 3877 3877 'avi', abortphy, flag_inhib_tend, itap, 0)
Note: See TracChangeset
for help on using the changeset viewer.