From a03d77d8566d194ca75f16a78670e7f5a78a4055 Mon Sep 17 00:00:00 2001 From: Leoni Janssen Date: Tue, 25 Nov 2025 14:42:52 +0100 Subject: [PATCH 01/26] added albedo updating agni --- input/albedo_test.toml | 425 +++++++++++++++++++++++++++++++ input/albedo_test_cloudfree.toml | 425 +++++++++++++++++++++++++++++++ src/proteus/atmos_clim/agni.py | 7 + src/proteus/proteus.py | 2 +- 4 files changed, 858 insertions(+), 1 deletion(-) create mode 100644 input/albedo_test.toml create mode 100644 input/albedo_test_cloudfree.toml diff --git a/input/albedo_test.toml b/input/albedo_test.toml new file mode 100644 index 000000000..3f78caaee --- /dev/null +++ b/input/albedo_test.toml @@ -0,0 +1,425 @@ +# PROTEUS configuration file + +# This is a comprehensive outline of all configuration options. It includes variables +# which have default values, in order to showcase the range of potential options available. +# Variable defaults are defined in `src/proteus/config/*.py` + +# Root tables should be physical, with the exception of "params" +# Software related options should go within the appropriate physical table +# For configuration see https://fwl-proteus.readthedocs.io/en/latest/config.html + +# ---------------------------------------------------- + +# The general structure is: +# [params] parameters for code execution, output files, time-stepping, convergence +# [star] stellar parameters, model selection +# [orbit] planetary orbital parameters +# [struct] planetary structure (mass, radius) +# [atmos_clim] atmosphere climate parameters, model selection +# [atmos_chem] atmosphere chemistry parameters, model selection +# [escape] escape parameters, model selection +# [interior] magma ocean model selection and parameters +# [outgas] outgassing parameters (fO2) and included volatiles +# [delivery] initial volatile inventory, and delivery model selection +# [observe] synthetic observations + +# ---------------------------------------------------- + +version = "2.0" + +# Parameters +[params] + # output files + [params.out] + path = "albedo_test_fluxscaling" + logging = "INFO" + plot_mod = 3 # Plotting frequency, 0: wait until completion | n: every n iterations | none: do not plot + plot_fmt = "png" # Plotting image file format, "png" or "pdf" recommended + write_mod = 1 # Write CSV frequency, 0: wait until completion | n: every n iterations + archive_mod = 5 # Archive frequency, 0: wait until completion | n: every n iterations | none: do not archive + remove_sf = false # Remove SOCRATES spectral file when simulation ends. + + # time-stepping + [params.dt] + minimum = 1e4 # absolute minimum time-step [years] + minimum_rel = 1e-5 # relative minimum time-step [dimensionless] + maximum = 1e7 # maximum time-step [yr] + initial = 3e1 # inital step size [yr] + starspec = 1e9 # interval to re-calculate the stellar spectrum [yr] + starinst = 1e1 # interval to re-calculate the instellation [yr] + method = "adaptive" # proportional | adaptive | maximum + + [params.dt.proportional] + propconst = 52.0 # Proportionality constant + + [params.dt.adaptive] + atol = 0.02 # Step size atol + rtol = 0.10 # Step size rtol + + # Termination criteria + # Set enabled=true/false in each section to enable/disable that termination criterion + [params.stop] + + # Require criteria to be satisfied twice before model will exit? + strict = false + + # required number of iterations + [params.stop.iters] + enabled = true + minimum = 5 + maximum = 9000 + + # required time constraints + [params.stop.time] + enabled = true + minimum = 1.0e3 # model will certainly run to t > minimum [yr] + maximum = 4.567e+9 # model will terminate when t > maximum [yr] + + # solidification + [params.stop.solid] + enabled = true + phi_crit = 0.01 # non-dim., model will terminate when global melt fraction < phi_crit + + # radiative equilibrium + [params.stop.radeqm] + enabled = true + atol = 0.2 # absolute tolerance [W m-2] + rtol = 1e-3 # relative tolerance + + [params.stop.escape] + enabled = true + p_stop = 5.0 # Stop surface pressure is less than this value + + # disintegration + [params.stop.disint] + enabled = false + + roche_enabled = true + offset_roche = 0 # correction to calculated Roche limit [m] + + spin_enabled = true + offset_spin = 0 # correction to calculated Breakup period [s] + + +# ---------------------------------------------------- +# Star +[star] + + # Physical parameters + mass = 1.0 # stellar mass [M_sun] + age_ini = 0.100 # model initialisation age [Gyr] + + module = "mors" + + [star.mors] + rot_pcntle = 50.0 # rotation percentile + rot_period = "none" # rotation period [days] + tracks = "spada" # evolution tracks: spada | baraffe + age_now = 4.567 # current age of star [Gyr] + spec = "stellar_spectra/Named/sun.txt" # path to stellar spectrum file + + [star.dummy] + radius = 1.0 # Constant stellar radius [R_sun] + calculate_radius = false # Calculate star radius using scaling from Teff? + Teff = 5772.0 # Star's brightness temperature [K] + +# Orbital system +[orbit] + instellation_method = 'sma' # whether to define orbit using semi major axis ('sma') or instellation flux ('inst') + instellationflux = 1.0 # instellation flux received from the planet in [Earth units] + semimajoraxis = 1.0 # initial semi-major axis of planet's orbit [AU] + eccentricity = 0.0 # initial eccentricity of planet's orbit [dimensionless] + zenith_angle = 48.19 # characteristic zenith angle [degrees] + s0_factor = 0.375 # instellation scale factor [dimensionless] + + evolve = false # whether to evolve the SMaxis and eccentricity + module = "lovepy" # module used to calculate tidal heating + + axial_period = "none" # planet's initial day length [hours]; will use orbital period if 'none' + satellite = false # include satellite (moon)? + mass_sat = 7.347e+22 # mass of satellite [kg] + semimajoraxis_sat = 3e8 # initial SMA of satellite's orbit [m] + + [orbit.dummy] + H_tide = 1e-7 # Fixed tidal power density [W kg-1] + Phi_tide = "<0.3" # Tidal heating applied when inequality locally satisfied + Imk2 = 0.0 # Fixed imaginary part of k2 love number, cannot be positive + + [orbit.lovepy] + visc_thresh = 1e9 # Minimum viscosity required for heating [Pa s] + +# Planetary structure - physics table +[struct] + mass_tot = 1.0 # M_earth + radius_int = "none" # R_earth + corefrac = 0.55 # non-dim., radius fraction + core_density = 10738.33 # Core density [kg m-3] + core_heatcap = 880.0 # Core specific heat capacity [J K-1 kg-1] + + module = "self" # self | zalmoxis + + [struct.zalmoxis] + verbose = false # verbose printing? + coremassfrac = 0.325 # core mass fraction [non-dim.] + inner_mantle_mass_fraction = 0 # inner mantle mass fraction [non-dim.] + weight_iron_frac = 0.325 # iron fraction in the planet [non-dim.] + num_levels = 150 # number of Zalmoxis radius layers + EOSchoice = "Tabulated:iron/silicate" # iron/silicate for super-Earths, water for water planets with Earth-like rocky cores + max_iterations_outer = 100 # max. iterations for the outer loop + tolerance_outer = 3e-3 # tolerance for the outer loop + max_iterations_inner = 100 # max. iterations for the inner loop + tolerance_inner = 1e-4 # tolerance for the inner loop + relative_tolerance = 1e-5 # relative tolerance for solve_ivp + absolute_tolerance = 1e-6 # absolute tolerance for solve_ivp + target_surface_pressure = 101325 # target surface pressure + pressure_tolerance = 1e9 # tolerance surface pressure + max_iterations_pressure = 200 # max. iterations for the innermost loop + pressure_adjustment_factor = 1.1 # factor for adjusting the pressure in the innermost loop + +# Atmosphere - physics table +[atmos_clim] + prevent_warming = true # do not allow the planet to heat up + surface_d = 0.01 # m, conductive skin thickness + surface_k = 2.0 # W m-1 K-1, conductive skin thermal conductivity + cloud_enabled = false # enable water cloud radiative effects + cloud_alpha = 0.0 # condensate retention fraction (1 -> fully retained) + surf_state = "fixed" # surface scheme: "mixed_layer" | "fixed" | "skin" + surf_greyalbedo = 0.1 # surface grey albedo + albedo_pl = "tests/data/integration/albedo_lookup/cloudy.csv" # Enforced input value of bond albedo; float (0 to 1) or str (path to CSV) + rayleigh = false # enable rayleigh scattering + tmp_minimum = 0.5 # temperature floor on solver + tmp_maximum = 5000.0 # temperature ceiling on solver + + module = "agni" # Which atmosphere module to use + + [atmos_clim.agni] + verbosity = 1 # output verbosity for agni (0:none, 1:info, 2:debug) + p_top = 1.0e-5 # bar, top of atmosphere grid pressure + p_obs = 0.02 # bar, level probed in transmission + spectral_group = "Honeyside" # which gas opacities to include + spectral_bands = "48" # how many spectral bands? + num_levels = 40 # Number of atmospheric grid levels + chemistry = "none" # "none" | "eq" + surf_material = "greybody" # surface material file for scattering + solve_energy = true # solve for energy-conserving atmosphere profile + solution_atol = 0.5 # solver absolute tolerance + solution_rtol = 0.15 # solver relative tolerance + overlap_method = "ee" # gas overlap method + surf_roughness = 1e-3 # characteristic surface roughness [m] + surf_windspeed = 2.0 # characteristic surface wind speed [m/s]. + rainout = true # include volatile condensation/evaporation aloft + latent_heat = false # include latent heat release when `rainout=true`? + oceans = true # form liquid oceans at planet surface? + convection = true # include convective heat transport, with MLT + conduction = true # include conductive heat transport, with Fourier's law + sens_heat = true # include sensible heat flux near surface, with TKE scheme + real_gas = false # use real-gas equations of state + psurf_thresh = 0.1 # bar, surface pressure where we switch to 'transparent' mode + dx_max_ini = 300.0 # initial maximum temperature step [kelvin] allowed by solver + dx_max = 35.0 # maximum temperature step [kelvin] allowed by solver + max_steps = 70 # max steps allowed by solver during each iteration + perturb_all = true # updated entire jacobian each step? + mlt_criterion = "s" # MLT convection stability criterion; (l)edoux or (s)chwarzschild + fastchem_floor = 150.0 # Minimum temperature allowed to be sent to FC + fastchem_maxiter_chem = 60000 # Maximum FC iterations (chemistry) + fastchem_maxiter_solv = 20000 # Maximum FC iterations (internal solver) + fastchem_xtol_chem = 1e-4 # FC solver tolerance (chemistry) + fastchem_xtol_elem = 1e-4 # FC solver tolerance (elemental) + ini_profile = 'isothermal' # Initial guess for temperature profile shape + ls_default = 2 # Default linesearch method (0:none, 1:gs, 2:bt) + fdo = 2 # finite-difference order (options: 2, 4) + + [atmos_clim.janus] + p_top = 1.0e-6 # bar, top of atmosphere grid pressure + p_obs = 1.0e-3 # bar, observed pressure level + spectral_group = "Honeyside" # which gas opacities to include + spectral_bands = "48" # how many spectral bands? + F_atm_bc = 0 # measure outgoing flux at: (0) TOA | (1) Surface + num_levels = 40 # Number of atmospheric grid levels + tropopause = "none" # none | skin | dynamic + overlap_method = "ee" # gas overlap method + + [atmos_clim.dummy] + gamma = 0.01 # atmosphere opacity between 0 and 1 + height_factor = 3.0 # observed height is this times the scale height + +# Volatile escape - physics table +[escape] + + module = "zephyrus" # Which escape module to use + reservoir = "outgas" # Reservoir that sets escaping gas composition + + [escape.zephyrus] + Pxuv = 5e-5 # Pressure at which XUV radiation become opaque in the planetary atmosphere [bar] + efficiency = 0.1 # Escape efficiency factor + tidal = false # Tidal contribution enabled + + [escape.dummy] + rate = 0.0 # Bulk unfractionated escape rate [kg s-1] + +# Interior - physics table +[interior] + grain_size = 0.1 # crystal settling grain size [m] + F_initial = 1e3 # Initial heat flux guess [W m-2] + radiogenic_heat = false # enable radiogenic heat production + tidal_heat = false # enable tidal heat production + rheo_phi_loc = 0.6 # Centre of rheological transition + rheo_phi_wid = 0.2 # Width of rheological transition + melting_dir = "Monteux-600" # Name of folder constaining melting curves + + + module = "aragog" # Which interior module to use + + [interior.spider] + num_levels = 100 # Number of SPIDER grid levels + mixing_length = 2 # Mixing length parameterization + tolerance = 1.0e-8 # absolute solver tolerance + tolerance_rel = 1.0e-8 # relative solver tolerance + solver_type = "bdf" # SUNDIALS solver method + tsurf_atol = 20.0 # tsurf_poststep_change + tsurf_rtol = 0.02 # tsurf_poststep_change_frac + ini_entropy = 3000.0 # Surface entropy conditions [J K-1 kg-1] + ini_dsdr = -4.698e-6 # Interior entropy gradient [J K-1 kg-1 m-1] + conduction = true # enable conductive heat transfer + convection = true # enable convective heat transfer + gravitational_separation = true # enable gravitational separation + mixing = true # enable mixing + matprop_smooth_width = 1e-2 # melt-fraction window width over which to smooth material properties + + [interior.aragog] + logging = "ERROR" # Aragog log verbosity + num_levels = 50 # Number of Aragog grid levels + tolerance = 1.0e-7 # solver tolerance + initial_condition = 3 # Initial T(p); 1: linear, 2: user defined, 3: adiabat + ini_tmagma = 3300.0 # Initial magma surface temperature [K] + basal_temperature = 7000.0 # CMB temperature when initial boundary = 1 + inner_boundary_condition = 1 # 1 = core cooling model, 2 = prescribed heat flux, 3 = prescribed temperature + inner_boundary_value = 4000 # core temperature [K], if inner_boundary_condition = 3. CMB heat flux [W/m^2], if if inner_boundary_condition = 2 + conduction = true # enable conductive heat transfer + convection = true # enable convective heat transfer + gravitational_separation = false # enable gravitational separation + mixing = false # enable mixing + dilatation = false # enable dilatation source term + mass_coordinates = false # enable mass coordinates + tsurf_poststep_change = 30 # threshold of maximum change on surface temperature + event_triggering = true # enable events triggering to avoid abrupt jumps in surface temperature + bulk_modulus = 260e9 # Adiabatic bulk modulus AW-EOS parameter [Pa]. + + [interior.dummy] + ini_tmagma = 3300.0 # Initial magma surface temperature [K] + tmagma_atol = 30.0 # Max absolute Tsurf change in each step + tmagma_rtol = 0.05 # Max relative Tsurf change in each step + mantle_tliq = 2700.0 # Liquidus temperature + mantle_tsol = 1700.0 # Solidus temperature + mantle_rho = 4550.0 # Mantle density [kg m-3] + mantle_cp = 1792.0 # Mantle heat capacity [J K-1 kg-1] + H_ratio = 0.0 # Radiogenic heating [W/kg] + +# Outgassing - physics table +[outgas] + fO2_shift_IW = 4 # atmosphere/interior boundary oxidation state [log10(ΔIW)] + + module = "calliope" # Which outgassing module to use + + [outgas.calliope] + include_H2O = true # Include H2O compound + include_CO2 = true # Include CO2 compound + include_N2 = true # Include N2 compound + include_S2 = true # Include S2 compound + include_SO2 = true # Include SO2 compound + include_H2S = true # Include H2S compound + include_NH3 = true # Include NH3 compound + include_H2 = true # Include H2 compound + include_CH4 = true # Include CH4 compound + include_CO = true # Include CO compound + T_floor = 700.0 # Temperature floor applied to outgassing calculation [K]. + rtol = 0.0001 # Relative mass tolerance + xtol = 1e-06 # Absolute mass tolerance + solubility = true # Enable solubility? + + [outgas.atmodeller] + some_parameter = "some_value" + +# Volatile delivery - physics table +[delivery] + + # Radionuclide parameters + radio_tref = 4.55 # Reference age for concentrations [Gyr] + radio_K = 310.0 # ppmw of potassium (all isotopes) + radio_U = 0.031 # ppmw of uranium (all isotopes) + radio_Th = 0.124 # ppmw of thorium (all isotopes) + + # Which initial inventory to use? + initial = 'elements' # 'elements' | 'volatiles' + + # No module for accretion as of yet + module = "none" + + # Set initial volatile inventory by planetary element abundances if [initial = 'elements'] + [delivery.elements] + use_metallicity = false # whether or not to specify the elemental abundances in terms of solar metallicity + metallicity = 1000 # metallicity relative to solar metallicity + + H_oceans = 5.0 # Hydrogen inventory in units of equivalent Earth oceans + # H_ppmw = 109.0 # Hydrogen inventory in ppmw relative to mantle mass + # H_kg = 1e20 # Hydrogen inventory in kg + + CH_ratio = 1.0 # C/H mass ratio in mantle/atmosphere system + # C_ppmw = 0.0 # Carbon inventory in ppmw relative to mantle mass + # C_kg = 1e20 # Carbon inventory in kg + + NH_ratio = 0.5 # N/H mass ratio in mantle/atmosphere system + # N_ppmw = 0.5 # Nitrogen inventory in ppmw relative to mantle mass + # N_kg = 1e20 # Nitrogen inventory in kg + + SH_ratio = 2.0 # S/H mass ratio in mantle/atmosphere system + # S_ppmw = 2.0 # Sulfur inventory in ppmw relative to mantle mass + # S_kg = 1e20 # Sulfur inventory in kg + + # Set initial volatile inventory by partial pressures in atmosphere if [initial = 'volatiles'] + [delivery.volatiles] + H2O = 20.0 # partial pressure of H2O + CO2 = 30.0 # partial pressure of CO2 + N2 = 0.0 # etc. + S2 = 0.0 + SO2 = 0.0 + H2S = 0.0 + NH3 = 0.0 + H2 = 0.0 + CH4 = 0.0 + CO = 0.0 + +# Atmospheric chemistry postprocessing +[atmos_chem] + + module = "vulcan" # Atmospheric chemistry module + when = "manually" # When to run chemistry (manually, offline, online) + + # Physics flags + photo_on = true # Enable photochemistry + Kzz_on = true # Enable eddy diffusion + Kzz_const = "none" # Constant eddy diffusion coefficient (none => use profile) + moldiff_on = true # Enable molecular diffusion in the atmosphere + updraft_const = 0.0 # Set constant updraft velocity + + # Vulcan-specific atmospheric chemistry parameters + [atmos_chem.vulcan] + clip_fl = 1e-20 # Floor on stellar spectrum [erg s-1 cm-2 nm-1] + clip_vmr = 1e-10 # Neglect species with vmr < clip_vmr + make_funs = true # Generate reaction network functions + ini_mix = "profile" # Initial mixing ratios (profile, outgas) + fix_surf = false # Fixed surface mixing ratios + network = "SNCHO" # Class of chemical network to use (CHO, NCHO, SNCHO) + save_frames = true # Plot frames during iterations + yconv_cri = 0.05 # Convergence criterion, value of mixing ratios + slope_cri = 0.0001 # Convergence criterion, rate of change of mixing ratios + +# Calculate simulated observations +[observe] + + # Module with which to calculate the synthetic observables + synthesis = "none" + + [observe.platon] + downsample = 8 # Factor to downsample opacities + clip_vmr = 1e-8 # Minimum VMR for a species to be included diff --git a/input/albedo_test_cloudfree.toml b/input/albedo_test_cloudfree.toml new file mode 100644 index 000000000..3e36197dc --- /dev/null +++ b/input/albedo_test_cloudfree.toml @@ -0,0 +1,425 @@ +# PROTEUS configuration file + +# This is a comprehensive outline of all configuration options. It includes variables +# which have default values, in order to showcase the range of potential options available. +# Variable defaults are defined in `src/proteus/config/*.py` + +# Root tables should be physical, with the exception of "params" +# Software related options should go within the appropriate physical table +# For configuration see https://fwl-proteus.readthedocs.io/en/latest/config.html + +# ---------------------------------------------------- + +# The general structure is: +# [params] parameters for code execution, output files, time-stepping, convergence +# [star] stellar parameters, model selection +# [orbit] planetary orbital parameters +# [struct] planetary structure (mass, radius) +# [atmos_clim] atmosphere climate parameters, model selection +# [atmos_chem] atmosphere chemistry parameters, model selection +# [escape] escape parameters, model selection +# [interior] magma ocean model selection and parameters +# [outgas] outgassing parameters (fO2) and included volatiles +# [delivery] initial volatile inventory, and delivery model selection +# [observe] synthetic observations + +# ---------------------------------------------------- + +version = "2.0" + +# Parameters +[params] + # output files + [params.out] + path = "albedo_test_cloudfree" + logging = "INFO" + plot_mod = 3 # Plotting frequency, 0: wait until completion | n: every n iterations | none: do not plot + plot_fmt = "png" # Plotting image file format, "png" or "pdf" recommended + write_mod = 1 # Write CSV frequency, 0: wait until completion | n: every n iterations + archive_mod = 5 # Archive frequency, 0: wait until completion | n: every n iterations | none: do not archive + remove_sf = false # Remove SOCRATES spectral file when simulation ends. + + # time-stepping + [params.dt] + minimum = 1e4 # absolute minimum time-step [years] + minimum_rel = 1e-5 # relative minimum time-step [dimensionless] + maximum = 1e7 # maximum time-step [yr] + initial = 3e1 # inital step size [yr] + starspec = 1e9 # interval to re-calculate the stellar spectrum [yr] + starinst = 1e1 # interval to re-calculate the instellation [yr] + method = "adaptive" # proportional | adaptive | maximum + + [params.dt.proportional] + propconst = 52.0 # Proportionality constant + + [params.dt.adaptive] + atol = 0.02 # Step size atol + rtol = 0.10 # Step size rtol + + # Termination criteria + # Set enabled=true/false in each section to enable/disable that termination criterion + [params.stop] + + # Require criteria to be satisfied twice before model will exit? + strict = false + + # required number of iterations + [params.stop.iters] + enabled = true + minimum = 5 + maximum = 9000 + + # required time constraints + [params.stop.time] + enabled = true + minimum = 1.0e3 # model will certainly run to t > minimum [yr] + maximum = 4.567e+9 # model will terminate when t > maximum [yr] + + # solidification + [params.stop.solid] + enabled = true + phi_crit = 0.01 # non-dim., model will terminate when global melt fraction < phi_crit + + # radiative equilibrium + [params.stop.radeqm] + enabled = true + atol = 0.2 # absolute tolerance [W m-2] + rtol = 1e-3 # relative tolerance + + [params.stop.escape] + enabled = true + p_stop = 5.0 # Stop surface pressure is less than this value + + # disintegration + [params.stop.disint] + enabled = false + + roche_enabled = true + offset_roche = 0 # correction to calculated Roche limit [m] + + spin_enabled = true + offset_spin = 0 # correction to calculated Breakup period [s] + + +# ---------------------------------------------------- +# Star +[star] + + # Physical parameters + mass = 1.0 # stellar mass [M_sun] + age_ini = 0.100 # model initialisation age [Gyr] + + module = "mors" + + [star.mors] + rot_pcntle = 50.0 # rotation percentile + rot_period = "none" # rotation period [days] + tracks = "spada" # evolution tracks: spada | baraffe + age_now = 4.567 # current age of star [Gyr] + spec = "stellar_spectra/Named/sun.txt" # path to stellar spectrum file + + [star.dummy] + radius = 1.0 # Constant stellar radius [R_sun] + calculate_radius = false # Calculate star radius using scaling from Teff? + Teff = 5772.0 # Star's brightness temperature [K] + +# Orbital system +[orbit] + instellation_method = 'sma' # whether to define orbit using semi major axis ('sma') or instellation flux ('inst') + instellationflux = 1.0 # instellation flux received from the planet in [Earth units] + semimajoraxis = 1.0 # initial semi-major axis of planet's orbit [AU] + eccentricity = 0.0 # initial eccentricity of planet's orbit [dimensionless] + zenith_angle = 48.19 # characteristic zenith angle [degrees] + s0_factor = 0.375 # instellation scale factor [dimensionless] + + evolve = false # whether to evolve the SMaxis and eccentricity + module = "lovepy" # module used to calculate tidal heating + + axial_period = "none" # planet's initial day length [hours]; will use orbital period if 'none' + satellite = false # include satellite (moon)? + mass_sat = 7.347e+22 # mass of satellite [kg] + semimajoraxis_sat = 3e8 # initial SMA of satellite's orbit [m] + + [orbit.dummy] + H_tide = 1e-7 # Fixed tidal power density [W kg-1] + Phi_tide = "<0.3" # Tidal heating applied when inequality locally satisfied + Imk2 = 0.0 # Fixed imaginary part of k2 love number, cannot be positive + + [orbit.lovepy] + visc_thresh = 1e9 # Minimum viscosity required for heating [Pa s] + +# Planetary structure - physics table +[struct] + mass_tot = 1.0 # M_earth + radius_int = "none" # R_earth + corefrac = 0.55 # non-dim., radius fraction + core_density = 10738.33 # Core density [kg m-3] + core_heatcap = 880.0 # Core specific heat capacity [J K-1 kg-1] + + module = "self" # self | zalmoxis + + [struct.zalmoxis] + verbose = false # verbose printing? + coremassfrac = 0.325 # core mass fraction [non-dim.] + inner_mantle_mass_fraction = 0 # inner mantle mass fraction [non-dim.] + weight_iron_frac = 0.325 # iron fraction in the planet [non-dim.] + num_levels = 150 # number of Zalmoxis radius layers + EOSchoice = "Tabulated:iron/silicate" # iron/silicate for super-Earths, water for water planets with Earth-like rocky cores + max_iterations_outer = 100 # max. iterations for the outer loop + tolerance_outer = 3e-3 # tolerance for the outer loop + max_iterations_inner = 100 # max. iterations for the inner loop + tolerance_inner = 1e-4 # tolerance for the inner loop + relative_tolerance = 1e-5 # relative tolerance for solve_ivp + absolute_tolerance = 1e-6 # absolute tolerance for solve_ivp + target_surface_pressure = 101325 # target surface pressure + pressure_tolerance = 1e9 # tolerance surface pressure + max_iterations_pressure = 200 # max. iterations for the innermost loop + pressure_adjustment_factor = 1.1 # factor for adjusting the pressure in the innermost loop + +# Atmosphere - physics table +[atmos_clim] + prevent_warming = true # do not allow the planet to heat up + surface_d = 0.01 # m, conductive skin thickness + surface_k = 2.0 # W m-1 K-1, conductive skin thermal conductivity + cloud_enabled = false # enable water cloud radiative effects + cloud_alpha = 0.0 # condensate retention fraction (1 -> fully retained) + surf_state = "fixed" # surface scheme: "mixed_layer" | "fixed" | "skin" + surf_greyalbedo = 0.1 # surface grey albedo + albedo_pl = "tests/data/integration/albedo_lookup/clear.csv" # Enforced input value of bond albedo; float (0 to 1) or str (path to CSV) + rayleigh = false # enable rayleigh scattering + tmp_minimum = 0.5 # temperature floor on solver + tmp_maximum = 5000.0 # temperature ceiling on solver + + module = "agni" # Which atmosphere module to use + + [atmos_clim.agni] + verbosity = 1 # output verbosity for agni (0:none, 1:info, 2:debug) + p_top = 1.0e-5 # bar, top of atmosphere grid pressure + p_obs = 0.02 # bar, level probed in transmission + spectral_group = "Honeyside" # which gas opacities to include + spectral_bands = "48" # how many spectral bands? + num_levels = 40 # Number of atmospheric grid levels + chemistry = "none" # "none" | "eq" + surf_material = "greybody" # surface material file for scattering + solve_energy = true # solve for energy-conserving atmosphere profile + solution_atol = 0.5 # solver absolute tolerance + solution_rtol = 0.15 # solver relative tolerance + overlap_method = "ee" # gas overlap method + surf_roughness = 1e-3 # characteristic surface roughness [m] + surf_windspeed = 2.0 # characteristic surface wind speed [m/s]. + rainout = true # include volatile condensation/evaporation aloft + latent_heat = false # include latent heat release when `rainout=true`? + oceans = true # form liquid oceans at planet surface? + convection = true # include convective heat transport, with MLT + conduction = true # include conductive heat transport, with Fourier's law + sens_heat = true # include sensible heat flux near surface, with TKE scheme + real_gas = false # use real-gas equations of state + psurf_thresh = 0.1 # bar, surface pressure where we switch to 'transparent' mode + dx_max_ini = 300.0 # initial maximum temperature step [kelvin] allowed by solver + dx_max = 35.0 # maximum temperature step [kelvin] allowed by solver + max_steps = 70 # max steps allowed by solver during each iteration + perturb_all = true # updated entire jacobian each step? + mlt_criterion = "s" # MLT convection stability criterion; (l)edoux or (s)chwarzschild + fastchem_floor = 150.0 # Minimum temperature allowed to be sent to FC + fastchem_maxiter_chem = 60000 # Maximum FC iterations (chemistry) + fastchem_maxiter_solv = 20000 # Maximum FC iterations (internal solver) + fastchem_xtol_chem = 1e-4 # FC solver tolerance (chemistry) + fastchem_xtol_elem = 1e-4 # FC solver tolerance (elemental) + ini_profile = 'isothermal' # Initial guess for temperature profile shape + ls_default = 2 # Default linesearch method (0:none, 1:gs, 2:bt) + fdo = 2 # finite-difference order (options: 2, 4) + + [atmos_clim.janus] + p_top = 1.0e-6 # bar, top of atmosphere grid pressure + p_obs = 1.0e-3 # bar, observed pressure level + spectral_group = "Honeyside" # which gas opacities to include + spectral_bands = "48" # how many spectral bands? + F_atm_bc = 0 # measure outgoing flux at: (0) TOA | (1) Surface + num_levels = 40 # Number of atmospheric grid levels + tropopause = "none" # none | skin | dynamic + overlap_method = "ee" # gas overlap method + + [atmos_clim.dummy] + gamma = 0.01 # atmosphere opacity between 0 and 1 + height_factor = 3.0 # observed height is this times the scale height + +# Volatile escape - physics table +[escape] + + module = "zephyrus" # Which escape module to use + reservoir = "outgas" # Reservoir that sets escaping gas composition + + [escape.zephyrus] + Pxuv = 5e-5 # Pressure at which XUV radiation become opaque in the planetary atmosphere [bar] + efficiency = 0.1 # Escape efficiency factor + tidal = false # Tidal contribution enabled + + [escape.dummy] + rate = 0.0 # Bulk unfractionated escape rate [kg s-1] + +# Interior - physics table +[interior] + grain_size = 0.1 # crystal settling grain size [m] + F_initial = 1e3 # Initial heat flux guess [W m-2] + radiogenic_heat = false # enable radiogenic heat production + tidal_heat = false # enable tidal heat production + rheo_phi_loc = 0.6 # Centre of rheological transition + rheo_phi_wid = 0.2 # Width of rheological transition + melting_dir = "Monteux-600" # Name of folder constaining melting curves + + + module = "aragog" # Which interior module to use + + [interior.spider] + num_levels = 100 # Number of SPIDER grid levels + mixing_length = 2 # Mixing length parameterization + tolerance = 1.0e-8 # absolute solver tolerance + tolerance_rel = 1.0e-8 # relative solver tolerance + solver_type = "bdf" # SUNDIALS solver method + tsurf_atol = 20.0 # tsurf_poststep_change + tsurf_rtol = 0.02 # tsurf_poststep_change_frac + ini_entropy = 3000.0 # Surface entropy conditions [J K-1 kg-1] + ini_dsdr = -4.698e-6 # Interior entropy gradient [J K-1 kg-1 m-1] + conduction = true # enable conductive heat transfer + convection = true # enable convective heat transfer + gravitational_separation = true # enable gravitational separation + mixing = true # enable mixing + matprop_smooth_width = 1e-2 # melt-fraction window width over which to smooth material properties + + [interior.aragog] + logging = "ERROR" # Aragog log verbosity + num_levels = 50 # Number of Aragog grid levels + tolerance = 1.0e-7 # solver tolerance + initial_condition = 3 # Initial T(p); 1: linear, 2: user defined, 3: adiabat + ini_tmagma = 3300.0 # Initial magma surface temperature [K] + basal_temperature = 7000.0 # CMB temperature when initial boundary = 1 + inner_boundary_condition = 1 # 1 = core cooling model, 2 = prescribed heat flux, 3 = prescribed temperature + inner_boundary_value = 4000 # core temperature [K], if inner_boundary_condition = 3. CMB heat flux [W/m^2], if if inner_boundary_condition = 2 + conduction = true # enable conductive heat transfer + convection = true # enable convective heat transfer + gravitational_separation = false # enable gravitational separation + mixing = false # enable mixing + dilatation = false # enable dilatation source term + mass_coordinates = false # enable mass coordinates + tsurf_poststep_change = 30 # threshold of maximum change on surface temperature + event_triggering = true # enable events triggering to avoid abrupt jumps in surface temperature + bulk_modulus = 260e9 # Adiabatic bulk modulus AW-EOS parameter [Pa]. + + [interior.dummy] + ini_tmagma = 3300.0 # Initial magma surface temperature [K] + tmagma_atol = 30.0 # Max absolute Tsurf change in each step + tmagma_rtol = 0.05 # Max relative Tsurf change in each step + mantle_tliq = 2700.0 # Liquidus temperature + mantle_tsol = 1700.0 # Solidus temperature + mantle_rho = 4550.0 # Mantle density [kg m-3] + mantle_cp = 1792.0 # Mantle heat capacity [J K-1 kg-1] + H_ratio = 0.0 # Radiogenic heating [W/kg] + +# Outgassing - physics table +[outgas] + fO2_shift_IW = 4 # atmosphere/interior boundary oxidation state [log10(ΔIW)] + + module = "calliope" # Which outgassing module to use + + [outgas.calliope] + include_H2O = true # Include H2O compound + include_CO2 = true # Include CO2 compound + include_N2 = true # Include N2 compound + include_S2 = true # Include S2 compound + include_SO2 = true # Include SO2 compound + include_H2S = true # Include H2S compound + include_NH3 = true # Include NH3 compound + include_H2 = true # Include H2 compound + include_CH4 = true # Include CH4 compound + include_CO = true # Include CO compound + T_floor = 700.0 # Temperature floor applied to outgassing calculation [K]. + rtol = 0.0001 # Relative mass tolerance + xtol = 1e-06 # Absolute mass tolerance + solubility = true # Enable solubility? + + [outgas.atmodeller] + some_parameter = "some_value" + +# Volatile delivery - physics table +[delivery] + + # Radionuclide parameters + radio_tref = 4.55 # Reference age for concentrations [Gyr] + radio_K = 310.0 # ppmw of potassium (all isotopes) + radio_U = 0.031 # ppmw of uranium (all isotopes) + radio_Th = 0.124 # ppmw of thorium (all isotopes) + + # Which initial inventory to use? + initial = 'elements' # 'elements' | 'volatiles' + + # No module for accretion as of yet + module = "none" + + # Set initial volatile inventory by planetary element abundances if [initial = 'elements'] + [delivery.elements] + use_metallicity = false # whether or not to specify the elemental abundances in terms of solar metallicity + metallicity = 1000 # metallicity relative to solar metallicity + + H_oceans = 5.0 # Hydrogen inventory in units of equivalent Earth oceans + # H_ppmw = 109.0 # Hydrogen inventory in ppmw relative to mantle mass + # H_kg = 1e20 # Hydrogen inventory in kg + + CH_ratio = 1.0 # C/H mass ratio in mantle/atmosphere system + # C_ppmw = 0.0 # Carbon inventory in ppmw relative to mantle mass + # C_kg = 1e20 # Carbon inventory in kg + + NH_ratio = 0.5 # N/H mass ratio in mantle/atmosphere system + # N_ppmw = 0.5 # Nitrogen inventory in ppmw relative to mantle mass + # N_kg = 1e20 # Nitrogen inventory in kg + + SH_ratio = 2.0 # S/H mass ratio in mantle/atmosphere system + # S_ppmw = 2.0 # Sulfur inventory in ppmw relative to mantle mass + # S_kg = 1e20 # Sulfur inventory in kg + + # Set initial volatile inventory by partial pressures in atmosphere if [initial = 'volatiles'] + [delivery.volatiles] + H2O = 20.0 # partial pressure of H2O + CO2 = 30.0 # partial pressure of CO2 + N2 = 0.0 # etc. + S2 = 0.0 + SO2 = 0.0 + H2S = 0.0 + NH3 = 0.0 + H2 = 0.0 + CH4 = 0.0 + CO = 0.0 + +# Atmospheric chemistry postprocessing +[atmos_chem] + + module = "vulcan" # Atmospheric chemistry module + when = "manually" # When to run chemistry (manually, offline, online) + + # Physics flags + photo_on = true # Enable photochemistry + Kzz_on = true # Enable eddy diffusion + Kzz_const = "none" # Constant eddy diffusion coefficient (none => use profile) + moldiff_on = true # Enable molecular diffusion in the atmosphere + updraft_const = 0.0 # Set constant updraft velocity + + # Vulcan-specific atmospheric chemistry parameters + [atmos_chem.vulcan] + clip_fl = 1e-20 # Floor on stellar spectrum [erg s-1 cm-2 nm-1] + clip_vmr = 1e-10 # Neglect species with vmr < clip_vmr + make_funs = true # Generate reaction network functions + ini_mix = "profile" # Initial mixing ratios (profile, outgas) + fix_surf = false # Fixed surface mixing ratios + network = "SNCHO" # Class of chemical network to use (CHO, NCHO, SNCHO) + save_frames = true # Plot frames during iterations + yconv_cri = 0.05 # Convergence criterion, value of mixing ratios + slope_cri = 0.0001 # Convergence criterion, rate of change of mixing ratios + +# Calculate simulated observations +[observe] + + # Module with which to calculate the synthetic observables + synthesis = "none" + + [observe.platon] + downsample = 8 # Factor to downsample opacities + clip_vmr = 1e-8 # Minimum VMR for a species to be included diff --git a/src/proteus/atmos_clim/agni.py b/src/proteus/atmos_clim/agni.py index ac574bc66..77630773b 100644 --- a/src/proteus/atmos_clim/agni.py +++ b/src/proteus/atmos_clim/agni.py @@ -309,6 +309,13 @@ def update_agni_atmos(atmos, hf_row:dict, dirs:dict, config:Config): # --------------------- # Update instellation flux atmos.instellation = float(hf_row["F_ins"]) + log.info("albedo of planet from tables:%.3f"%hf_row["albedo_pl"]) + #value=jl.getfield(atmos, jl.Symbol("albedo_b")) + #log.info("albedo of planet computed before reattributing:%.3f"%value) + setfield = getattr(jl, "setfield!") + setfield(atmos, jl.Symbol("albedo_b"), float(hf_row["albedo_pl"])) + value=jl.getfield(atmos, jl.Symbol("albedo_b")) + log.info("albedo of planet computed after reattributing:%.3f"%value) # --------------------- # Update compositions diff --git a/src/proteus/proteus.py b/src/proteus/proteus.py index c1caaa089..502e7a3d8 100644 --- a/src/proteus/proteus.py +++ b/src/proteus/proteus.py @@ -384,7 +384,7 @@ def start(self, *, resume: bool = False, offline: bool = False): self.sinst_prev = self.hf_row["Time"] update_stellar_quantities(self.hf_row, self.config, stellar_track=self.stellar_track) - + else: # Calculate a new (historical) stellar spectrum if (abs(self.hf_row["Time"] - self.sspec_prev) > self.config.params.dt.starspec) or ( self.loops["total"] == 0 From c8e0cf3024f0d969c538403915b4a74528ff0d44 Mon Sep 17 00:00:00 2001 From: Leoni Janssen Date: Tue, 25 Nov 2025 17:09:42 +0100 Subject: [PATCH 02/26] fixed line indentation proteus.py --- input/albedo_test.toml | 6 +++--- src/proteus/proteus.py | 7 +++---- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/input/albedo_test.toml b/input/albedo_test.toml index 3f78caaee..169e7a296 100644 --- a/input/albedo_test.toml +++ b/input/albedo_test.toml @@ -31,7 +31,7 @@ version = "2.0" [params] # output files [params.out] - path = "albedo_test_fluxscaling" + path = "run_colder_planet_cloudy" logging = "INFO" plot_mod = 3 # Plotting frequency, 0: wait until completion | n: every n iterations | none: do not plot plot_fmt = "png" # Plotting image file format, "png" or "pdf" recommended @@ -127,7 +127,7 @@ version = "2.0" [orbit] instellation_method = 'sma' # whether to define orbit using semi major axis ('sma') or instellation flux ('inst') instellationflux = 1.0 # instellation flux received from the planet in [Earth units] - semimajoraxis = 1.0 # initial semi-major axis of planet's orbit [AU] + semimajoraxis = 3.0 # initial semi-major axis of planet's orbit [AU] eccentricity = 0.0 # initial eccentricity of planet's orbit [dimensionless] zenith_angle = 48.19 # characteristic zenith angle [degrees] s0_factor = 0.375 # instellation scale factor [dimensionless] @@ -207,7 +207,7 @@ version = "2.0" overlap_method = "ee" # gas overlap method surf_roughness = 1e-3 # characteristic surface roughness [m] surf_windspeed = 2.0 # characteristic surface wind speed [m/s]. - rainout = true # include volatile condensation/evaporation aloft + rainout = false # include volatile condensation/evaporation aloft latent_heat = false # include latent heat release when `rainout=true`? oceans = true # form liquid oceans at planet surface? convection = true # include convective heat transport, with MLT diff --git a/src/proteus/proteus.py b/src/proteus/proteus.py index 502e7a3d8..c9e0d6567 100644 --- a/src/proteus/proteus.py +++ b/src/proteus/proteus.py @@ -384,11 +384,10 @@ def start(self, *, resume: bool = False, offline: bool = False): self.sinst_prev = self.hf_row["Time"] update_stellar_quantities(self.hf_row, self.config, stellar_track=self.stellar_track) - else: - # Calculate a new (historical) stellar spectrum + if (abs(self.hf_row["Time"] - self.sspec_prev) > self.config.params.dt.starspec) or ( - self.loops["total"] == 0 - ): + self.loops["total"] == 0): + self.sspec_prev = self.hf_row["Time"] update_stellar_spectrum = True From ff98eb2607e765a90c7ca389df8d1a909756ed3d Mon Sep 17 00:00:00 2001 From: Leoni Janssen Date: Tue, 13 Jan 2026 13:03:47 +0100 Subject: [PATCH 03/26] add outgassing with lavatmos --- environment.yml | 2 +- input/albedo_test.toml | 10 +- input/albedo_test_cloudfree.toml | 6 +- input/lavatmos_run.toml | 429 ++++++++++++++++++++++++ input/run_tests.toml | 429 ++++++++++++++++++++++++ src/proteus/config/_outgas.py | 3 + src/proteus/interior/spider.py | 1 + src/proteus/outgas/lavatmos.py | 86 +++++ src/proteus/outgas/wrapper.py | 32 ++ src/proteus/plot/cpl_atmosphere.py | 7 +- src/proteus/plot/cpl_chem_atmosphere.py | 2 +- src/proteus/proteus.py | 7 +- src/proteus/utils/constants.py | 5 +- src/proteus/utils/plot.py | 10 + tools/get_petsc.sh | 2 + 15 files changed, 1015 insertions(+), 16 deletions(-) create mode 100644 input/lavatmos_run.toml create mode 100644 input/run_tests.toml create mode 100644 src/proteus/outgas/lavatmos.py diff --git a/environment.yml b/environment.yml index f35807a00..ff439112b 100644 --- a/environment.yml +++ b/environment.yml @@ -3,7 +3,7 @@ channels: - conda-forge dependencies: # Core Python - - python=3.13 + - python=3.12 - pip - pytest diff --git a/input/albedo_test.toml b/input/albedo_test.toml index 169e7a296..109b8ede2 100644 --- a/input/albedo_test.toml +++ b/input/albedo_test.toml @@ -31,7 +31,7 @@ version = "2.0" [params] # output files [params.out] - path = "run_colder_planet_cloudy" + path = "small_planet_cloudy" logging = "INFO" plot_mod = 3 # Plotting frequency, 0: wait until completion | n: every n iterations | none: do not plot plot_fmt = "png" # Plotting image file format, "png" or "pdf" recommended @@ -127,7 +127,7 @@ version = "2.0" [orbit] instellation_method = 'sma' # whether to define orbit using semi major axis ('sma') or instellation flux ('inst') instellationflux = 1.0 # instellation flux received from the planet in [Earth units] - semimajoraxis = 3.0 # initial semi-major axis of planet's orbit [AU] + semimajoraxis = 1.0 # initial semi-major axis of planet's orbit [AU] eccentricity = 0.0 # initial eccentricity of planet's orbit [dimensionless] zenith_angle = 48.19 # characteristic zenith angle [degrees] s0_factor = 0.375 # instellation scale factor [dimensionless] @@ -199,7 +199,7 @@ version = "2.0" spectral_group = "Honeyside" # which gas opacities to include spectral_bands = "48" # how many spectral bands? num_levels = 40 # Number of atmospheric grid levels - chemistry = "none" # "none" | "eq" + chemistry = "eq" # "none" | "eq" surf_material = "greybody" # surface material file for scattering solve_energy = true # solve for energy-conserving atmosphere profile solution_atol = 0.5 # solver absolute tolerance @@ -268,7 +268,7 @@ version = "2.0" melting_dir = "Monteux-600" # Name of folder constaining melting curves - module = "aragog" # Which interior module to use + module = "spider" # Which interior module to use [interior.spider] num_levels = 100 # Number of SPIDER grid levels @@ -360,7 +360,7 @@ version = "2.0" use_metallicity = false # whether or not to specify the elemental abundances in terms of solar metallicity metallicity = 1000 # metallicity relative to solar metallicity - H_oceans = 5.0 # Hydrogen inventory in units of equivalent Earth oceans + H_oceans = 2.0 # Hydrogen inventory in units of equivalent Earth oceans # H_ppmw = 109.0 # Hydrogen inventory in ppmw relative to mantle mass # H_kg = 1e20 # Hydrogen inventory in kg diff --git a/input/albedo_test_cloudfree.toml b/input/albedo_test_cloudfree.toml index 3e36197dc..68c42df94 100644 --- a/input/albedo_test_cloudfree.toml +++ b/input/albedo_test_cloudfree.toml @@ -31,7 +31,7 @@ version = "2.0" [params] # output files [params.out] - path = "albedo_test_cloudfree" + path = "small_planet_cloudfree" logging = "INFO" plot_mod = 3 # Plotting frequency, 0: wait until completion | n: every n iterations | none: do not plot plot_fmt = "png" # Plotting image file format, "png" or "pdf" recommended @@ -268,7 +268,7 @@ version = "2.0" melting_dir = "Monteux-600" # Name of folder constaining melting curves - module = "aragog" # Which interior module to use + module = "spider" # Which interior module to use [interior.spider] num_levels = 100 # Number of SPIDER grid levels @@ -360,7 +360,7 @@ version = "2.0" use_metallicity = false # whether or not to specify the elemental abundances in terms of solar metallicity metallicity = 1000 # metallicity relative to solar metallicity - H_oceans = 5.0 # Hydrogen inventory in units of equivalent Earth oceans + H_oceans = 2.0 # Hydrogen inventory in units of equivalent Earth oceans # H_ppmw = 109.0 # Hydrogen inventory in ppmw relative to mantle mass # H_kg = 1e20 # Hydrogen inventory in kg diff --git a/input/lavatmos_run.toml b/input/lavatmos_run.toml new file mode 100644 index 000000000..6d32341a5 --- /dev/null +++ b/input/lavatmos_run.toml @@ -0,0 +1,429 @@ +# PROTEUS configuration file + +# This is a comprehensive outline of all configuration options. It includes variables +# which have default values, in order to showcase the range of potential options available. +# Variable defaults are defined in `src/proteus/config/*.py` + +# Root tables should be physical, with the exception of "params" +# Software related options should go within the appropriate physical table +# For configuration see https://fwl-proteus.readthedocs.io/en/latest/config.html + +# ---------------------------------------------------- + +# The general structure is: +# [params] parameters for code execution, output files, time-stepping, convergence +# [star] stellar parameters, model selection +# [orbit] planetary orbital parameters +# [struct] planetary structure (mass, radius) +# [atmos_clim] atmosphere climate parameters, model selection +# [atmos_chem] atmosphere chemistry parameters, model selection +# [escape] escape parameters, model selection +# [interior] magma ocean model selection and parameters +# [outgas] outgassing parameters (fO2) and included volatiles +# [delivery] initial volatile inventory, and delivery model selection +# [observe] synthetic observations + +# ---------------------------------------------------- + +version = "2.0" + +# Parameters +[params] + # output files + [params.out] + path = "run_lavatmos_FeO" + logging = "INFO" + plot_mod = 3 # Plotting frequency, 0: wait until completion | n: every n iterations | none: do not plot + plot_fmt = "png" # Plotting image file format, "png" or "pdf" recommended + write_mod = 1 # Write CSV frequency, 0: wait until completion | n: every n iterations + archive_mod = 5 # Archive frequency, 0: wait until completion | n: every n iterations | none: do not archive + remove_sf = false # Remove SOCRATES spectral file when simulation ends. + + # time-stepping + [params.dt] + minimum = 1e4 # absolute minimum time-step [years] + minimum_rel = 1e-5 # relative minimum time-step [dimensionless] + maximum = 1e7 # maximum time-step [yr] + initial = 3e1 # inital step size [yr] + starspec = 1e9 # interval to re-calculate the stellar spectrum [yr] + starinst = 1e1 # interval to re-calculate the instellation [yr] + method = "adaptive" # proportional | adaptive | maximum + + [params.dt.proportional] + propconst = 52.0 # Proportionality constant + + [params.dt.adaptive] + atol = 0.02 # Step size atol + rtol = 0.10 # Step size rtol + + # Termination criteria + # Set enabled=true/false in each section to enable/disable that termination criterion + [params.stop] + + # Require criteria to be satisfied twice before model will exit? + strict = false + + # required number of iterations + [params.stop.iters] + enabled = true + minimum = 5 + maximum = 9000 + + # required time constraints + [params.stop.time] + enabled = true + minimum = 1.0e3 # model will certainly run to t > minimum [yr] + maximum = 4.567e+9 # model will terminate when t > maximum [yr] + + # solidification + [params.stop.solid] + enabled = true + phi_crit = 0.01 # non-dim., model will terminate when global melt fraction < phi_crit + + # radiative equilibrium + [params.stop.radeqm] + enabled = true + atol = 0.2 # absolute tolerance [W m-2] + rtol = 1e-3 # relative tolerance + + [params.stop.escape] + enabled = true + p_stop = 5.0 # Stop surface pressure is less than this value + + # disintegration + [params.stop.disint] + enabled = false + + roche_enabled = true + offset_roche = 0 # correction to calculated Roche limit [m] + + spin_enabled = true + offset_spin = 0 # correction to calculated Breakup period [s] + + +# ---------------------------------------------------- +# Star +[star] + + # Physical parameters + mass = 1.0 # stellar mass [M_sun] + age_ini = 0.100 # model initialisation age [Gyr] + + module = "mors" + + [star.mors] + rot_pcntle = 50.0 # rotation percentile + rot_period = "none" # rotation period [days] + tracks = "spada" # evolution tracks: spada | baraffe + age_now = 4.567 # current age of star [Gyr] + spec = "stellar_spectra/Named/sun.txt" # path to stellar spectrum file + + [star.dummy] + radius = 1.0 # Constant stellar radius [R_sun] + calculate_radius = false # Calculate star radius using scaling from Teff? + Teff = 5772.0 # Star's brightness temperature [K] + +# Orbital system +[orbit] + instellation_method = 'sma' # whether to define orbit using semi major axis ('sma') or instellation flux ('inst') + instellationflux = 1.0 # instellation flux received from the planet in [Earth units] + semimajoraxis = 1.0 # initial semi-major axis of planet's orbit [AU] + eccentricity = 0.0 # initial eccentricity of planet's orbit [dimensionless] + zenith_angle = 48.19 # characteristic zenith angle [degrees] + s0_factor = 0.375 # instellation scale factor [dimensionless] + + evolve = false # whether to evolve the SMaxis and eccentricity + module = "lovepy" # module used to calculate tidal heating + + axial_period = "none" # planet's initial day length [hours]; will use orbital period if 'none' + satellite = false # include satellite (moon)? + mass_sat = 7.347e+22 # mass of satellite [kg] + semimajoraxis_sat = 3e8 # initial SMA of satellite's orbit [m] + + [orbit.dummy] + H_tide = 1e-7 # Fixed tidal power density [W kg-1] + Phi_tide = "<0.3" # Tidal heating applied when inequality locally satisfied + Imk2 = 0.0 # Fixed imaginary part of k2 love number, cannot be positive + + [orbit.lovepy] + visc_thresh = 1e9 # Minimum viscosity required for heating [Pa s] + +# Planetary structure - physics table +[struct] + mass_tot = 1.0 # M_earth + radius_int = "none" # R_earth + corefrac = 0.55 # non-dim., radius fraction + core_density = 10738.33 # Core density [kg m-3] + core_heatcap = 880.0 # Core specific heat capacity [J K-1 kg-1] + + module = "self" # self | zalmoxis + + [struct.zalmoxis] + verbose = false # verbose printing? + coremassfrac = 0.325 # core mass fraction [non-dim.] + inner_mantle_mass_fraction = 0 # inner mantle mass fraction [non-dim.] + weight_iron_frac = 0.325 # iron fraction in the planet [non-dim.] + num_levels = 150 # number of Zalmoxis radius layers + EOSchoice = "Tabulated:iron/silicate" # iron/silicate for super-Earths, water for water planets with Earth-like rocky cores + max_iterations_outer = 100 # max. iterations for the outer loop + tolerance_outer = 3e-3 # tolerance for the outer loop + max_iterations_inner = 100 # max. iterations for the inner loop + tolerance_inner = 1e-4 # tolerance for the inner loop + relative_tolerance = 1e-5 # relative tolerance for solve_ivp + absolute_tolerance = 1e-6 # absolute tolerance for solve_ivp + target_surface_pressure = 101325 # target surface pressure + pressure_tolerance = 1e9 # tolerance surface pressure + max_iterations_pressure = 200 # max. iterations for the innermost loop + pressure_adjustment_factor = 1.1 # factor for adjusting the pressure in the innermost loop + +# Atmosphere - physics table +[atmos_clim] + prevent_warming = true # do not allow the planet to heat up + surface_d = 0.01 # m, conductive skin thickness + surface_k = 2.0 # W m-1 K-1, conductive skin thermal conductivity + cloud_enabled = false # enable water cloud radiative effects + cloud_alpha = 0.0 # condensate retention fraction (1 -> fully retained) + surf_state = "fixed" # surface scheme: "mixed_layer" | "fixed" | "skin" + surf_greyalbedo = 0.1 # surface grey albedo + albedo_pl = "tests/data/integration/albedo_lookup/cloudy.csv" # Enforced input value of bond albedo; float (0 to 1) or str (path to CSV) + rayleigh = false # enable rayleigh scattering + tmp_minimum = 0.5 # temperature floor on solver + tmp_maximum = 5000.0 # temperature ceiling on solver + + module = "agni" # Which atmosphere module to use + + [atmos_clim.agni] + verbosity = 1 # output verbosity for agni (0:none, 1:info, 2:debug) + p_top = 1.0e-5 # bar, top of atmosphere grid pressure + p_obs = 0.02 # bar, level probed in transmission + spectral_group = "Honeyside" # which gas opacities to include + spectral_bands = "48" # how many spectral bands? + num_levels = 40 # Number of atmospheric grid levels + chemistry = "eq" # "none" | "eq" + surf_material = "greybody" # surface material file for scattering + solve_energy = true # solve for energy-conserving atmosphere profile + solution_atol = 0.5 # solver absolute tolerance + solution_rtol = 0.15 # solver relative tolerance + overlap_method = "ee" # gas overlap method + surf_roughness = 1e-3 # characteristic surface roughness [m] + surf_windspeed = 2.0 # characteristic surface wind speed [m/s]. + rainout = false # include volatile condensation/evaporation aloft + latent_heat = false # include latent heat release when `rainout=true`? + oceans = true # form liquid oceans at planet surface? + convection = true # include convective heat transport, with MLT + conduction = true # include conductive heat transport, with Fourier's law + sens_heat = true # include sensible heat flux near surface, with TKE scheme + real_gas = false # use real-gas equations of state + psurf_thresh = 0.1 # bar, surface pressure where we switch to 'transparent' mode + dx_max_ini = 300.0 # initial maximum temperature step [kelvin] allowed by solver + dx_max = 35.0 # maximum temperature step [kelvin] allowed by solver + max_steps = 70 # max steps allowed by solver during each iteration + perturb_all = true # updated entire jacobian each step? + mlt_criterion = "s" # MLT convection stability criterion; (l)edoux or (s)chwarzschild + fastchem_floor = 500.0 # Minimum temperature allowed to be sent to FC + fastchem_maxiter_chem = 60000 # Maximum FC iterations (chemistry) + fastchem_maxiter_solv = 20000 # Maximum FC iterations (internal solver) + fastchem_xtol_chem = 1e-4 # FC solver tolerance (chemistry) + fastchem_xtol_elem = 1e-4 # FC solver tolerance (elemental) + ini_profile = 'isothermal' # Initial guess for temperature profile shape + ls_default = 2 # Default linesearch method (0:none, 1:gs, 2:bt) + fdo = 2 # finite-difference order (options: 2, 4) + + [atmos_clim.janus] + p_top = 1.0e-6 # bar, top of atmosphere grid pressure + p_obs = 1.0e-3 # bar, observed pressure level + spectral_group = "Honeyside" # which gas opacities to include + spectral_bands = "48" # how many spectral bands? + F_atm_bc = 0 # measure outgoing flux at: (0) TOA | (1) Surface + num_levels = 40 # Number of atmospheric grid levels + tropopause = "none" # none | skin | dynamic + overlap_method = "ee" # gas overlap method + + [atmos_clim.dummy] + gamma = 0.01 # atmosphere opacity between 0 and 1 + height_factor = 3.0 # observed height is this times the scale height + +# Volatile escape - physics table +[escape] + + module = "zephyrus" # Which escape module to use + reservoir = "outgas" # Reservoir that sets escaping gas composition + + [escape.zephyrus] + Pxuv = 5e-5 # Pressure at which XUV radiation become opaque in the planetary atmosphere [bar] + efficiency = 0.1 # Escape efficiency factor + tidal = false # Tidal contribution enabled + + [escape.dummy] + rate = 0.0 # Bulk unfractionated escape rate [kg s-1] + +# Interior - physics table +[interior] + grain_size = 0.1 # crystal settling grain size [m] + F_initial = 1e3 # Initial heat flux guess [W m-2] + radiogenic_heat = false # enable radiogenic heat production + tidal_heat = false # enable tidal heat production + rheo_phi_loc = 0.6 # Centre of rheological transition + rheo_phi_wid = 0.2 # Width of rheological transition + melting_dir = "Monteux-600" # Name of folder constaining melting curves + + + module = "spider" # Which interior module to use + + [interior.spider] + num_levels = 100 # Number of SPIDER grid levels + mixing_length = 2 # Mixing length parameterization + tolerance = 1.0e-8 # absolute solver tolerance + tolerance_rel = 1.0e-8 # relative solver tolerance + solver_type = "bdf" # SUNDIALS solver method + tsurf_atol = 20.0 # tsurf_poststep_change + tsurf_rtol = 0.02 # tsurf_poststep_change_frac + ini_entropy = 3000.0 # Surface entropy conditions [J K-1 kg-1] + ini_dsdr = -4.698e-6 # Interior entropy gradient [J K-1 kg-1 m-1] + conduction = true # enable conductive heat transfer + convection = true # enable convective heat transfer + gravitational_separation = true # enable gravitational separation + mixing = true # enable mixing + matprop_smooth_width = 1e-2 # melt-fraction window width over which to smooth material properties + + [interior.aragog] + logging = "ERROR" # Aragog log verbosity + num_levels = 50 # Number of Aragog grid levels + tolerance = 1.0e-7 # solver tolerance + initial_condition = 3 # Initial T(p); 1: linear, 2: user defined, 3: adiabat + ini_tmagma = 3300.0 # Initial magma surface temperature [K] + basal_temperature = 7000.0 # CMB temperature when initial boundary = 1 + inner_boundary_condition = 1 # 1 = core cooling model, 2 = prescribed heat flux, 3 = prescribed temperature + inner_boundary_value = 4000 # core temperature [K], if inner_boundary_condition = 3. CMB heat flux [W/m^2], if if inner_boundary_condition = 2 + conduction = true # enable conductive heat transfer + convection = true # enable convective heat transfer + gravitational_separation = false # enable gravitational separation + mixing = false # enable mixing + dilatation = false # enable dilatation source term + mass_coordinates = false # enable mass coordinates + tsurf_poststep_change = 30 # threshold of maximum change on surface temperature + event_triggering = true # enable events triggering to avoid abrupt jumps in surface temperature + bulk_modulus = 260e9 # Adiabatic bulk modulus AW-EOS parameter [Pa]. + + [interior.dummy] + ini_tmagma = 3300.0 # Initial magma surface temperature [K] + tmagma_atol = 30.0 # Max absolute Tsurf change in each step + tmagma_rtol = 0.05 # Max relative Tsurf change in each step + mantle_tliq = 2700.0 # Liquidus temperature + mantle_tsol = 1700.0 # Solidus temperature + mantle_rho = 4550.0 # Mantle density [kg m-3] + mantle_cp = 1792.0 # Mantle heat capacity [J K-1 kg-1] + H_ratio = 0.0 # Radiogenic heating [W/kg] + +# Outgassing - physics table +[outgas] + fO2_shift_IW = 4 # atmosphere/interior boundary oxidation state [log10(ΔIW)] + + silicates = true + fastchempath ='/data3/leoni/LavAtmos/FastChem/fastchem3/output/' + + module = "calliope" # Which outgassing module to use + + + [outgas.calliope] + include_H2O = true # Include H2O compound + include_CO2 = true # Include CO2 compound + include_N2 = true # Include N2 compound + include_S2 = true # Include S2 compound + include_SO2 = true # Include SO2 compound + include_H2S = true # Include H2S compound + include_NH3 = true # Include NH3 compound + include_H2 = true # Include H2 compound + include_CH4 = true # Include CH4 compound + include_CO = true # Include CO compound + T_floor = 700.0 # Temperature floor applied to outgassing calculation [K]. + rtol = 0.0001 # Relative mass tolerance + xtol = 1e-06 # Absolute mass tolerance + solubility = true # Enable solubility? + + [outgas.atmodeller] + some_parameter = "some_value" + +# Volatile delivery - physics table +[delivery] + + # Radionuclide parameters + radio_tref = 4.55 # Reference age for concentrations [Gyr] + radio_K = 310.0 # ppmw of potassium (all isotopes) + radio_U = 0.031 # ppmw of uranium (all isotopes) + radio_Th = 0.124 # ppmw of thorium (all isotopes) + + # Which initial inventory to use? + initial = 'elements' # 'elements' | 'volatiles' + + # No module for accretion as of yet + module = "none" + + # Set initial volatile inventory by planetary element abundances if [initial = 'elements'] + [delivery.elements] + use_metallicity = false # whether or not to specify the elemental abundances in terms of solar metallicity + metallicity = 1000 # metallicity relative to solar metallicity + + H_oceans = 2.0 # Hydrogen inventory in units of equivalent Earth oceans + # H_ppmw = 109.0 # Hydrogen inventory in ppmw relative to mantle mass + # H_kg = 1e20 # Hydrogen inventory in kg + + CH_ratio = 1.0 # C/H mass ratio in mantle/atmosphere system + # C_ppmw = 0.0 # Carbon inventory in ppmw relative to mantle mass + # C_kg = 1e20 # Carbon inventory in kg + + NH_ratio = 0.5 # N/H mass ratio in mantle/atmosphere system + # N_ppmw = 0.5 # Nitrogen inventory in ppmw relative to mantle mass + # N_kg = 1e20 # Nitrogen inventory in kg + + SH_ratio = 2.0 # S/H mass ratio in mantle/atmosphere system + # S_ppmw = 2.0 # Sulfur inventory in ppmw relative to mantle mass + # S_kg = 1e20 # Sulfur inventory in kg + + # Set initial volatile inventory by partial pressures in atmosphere if [initial = 'volatiles'] + [delivery.volatiles] + H2O = 20.0 # partial pressure of H2O + CO2 = 30.0 # partial pressure of CO2 + N2 = 0.0 # etc. + S2 = 0.0 + SO2 = 0.0 + H2S = 0.0 + NH3 = 0.0 + H2 = 0.0 + CH4 = 0.0 + CO = 0.0 + +# Atmospheric chemistry postprocessing +[atmos_chem] + + module = "vulcan" # Atmospheric chemistry module + when = "manually" # When to run chemistry (manually, offline, online) + + # Physics flags + photo_on = true # Enable photochemistry + Kzz_on = true # Enable eddy diffusion + Kzz_const = "none" # Constant eddy diffusion coefficient (none => use profile) + moldiff_on = true # Enable molecular diffusion in the atmosphere + updraft_const = 0.0 # Set constant updraft velocity + + # Vulcan-specific atmospheric chemistry parameters + [atmos_chem.vulcan] + clip_fl = 1e-20 # Floor on stellar spectrum [erg s-1 cm-2 nm-1] + clip_vmr = 1e-10 # Neglect species with vmr < clip_vmr + make_funs = true # Generate reaction network functions + ini_mix = "profile" # Initial mixing ratios (profile, outgas) + fix_surf = false # Fixed surface mixing ratios + network = "SNCHO" # Class of chemical network to use (CHO, NCHO, SNCHO) + save_frames = true # Plot frames during iterations + yconv_cri = 0.05 # Convergence criterion, value of mixing ratios + slope_cri = 0.0001 # Convergence criterion, rate of change of mixing ratios + +# Calculate simulated observations +[observe] + + # Module with which to calculate the synthetic observables + synthesis = "none" + + [observe.platon] + downsample = 8 # Factor to downsample opacities + clip_vmr = 1e-8 # Minimum VMR for a species to be included diff --git a/input/run_tests.toml b/input/run_tests.toml new file mode 100644 index 000000000..378e430d1 --- /dev/null +++ b/input/run_tests.toml @@ -0,0 +1,429 @@ +# PROTEUS configuration file + +# This is a comprehensive outline of all configuration options. It includes variables +# which have default values, in order to showcase the range of potential options available. +# Variable defaults are defined in `src/proteus/config/*.py` + +# Root tables should be physical, with the exception of "params" +# Software related options should go within the appropriate physical table +# For configuration see https://fwl-proteus.readthedocs.io/en/latest/config.html + +# ---------------------------------------------------- + +# The general structure is: +# [params] parameters for code execution, output files, time-stepping, convergence +# [star] stellar parameters, model selection +# [orbit] planetary orbital parameters +# [struct] planetary structure (mass, radius) +# [atmos_clim] atmosphere climate parameters, model selection +# [atmos_chem] atmosphere chemistry parameters, model selection +# [escape] escape parameters, model selection +# [interior] magma ocean model selection and parameters +# [outgas] outgassing parameters (fO2) and included volatiles +# [delivery] initial volatile inventory, and delivery model selection +# [observe] synthetic observations + +# ---------------------------------------------------- + +version = "2.0" + +# Parameters +[params] + # output files + [params.out] + path = "run_lavatmos_test_Na_SiO" + logging = "INFO" + plot_mod = 3 # Plotting frequency, 0: wait until completion | n: every n iterations | none: do not plot + plot_fmt = "png" # Plotting image file format, "png" or "pdf" recommended + write_mod = 1 # Write CSV frequency, 0: wait until completion | n: every n iterations + archive_mod = 5 # Archive frequency, 0: wait until completion | n: every n iterations | none: do not archive + remove_sf = false # Remove SOCRATES spectral file when simulation ends. + + # time-stepping + [params.dt] + minimum = 1e4 # absolute minimum time-step [years] + minimum_rel = 1e-5 # relative minimum time-step [dimensionless] + maximum = 1e7 # maximum time-step [yr] + initial = 3e1 # inital step size [yr] + starspec = 1e9 # interval to re-calculate the stellar spectrum [yr] + starinst = 1e1 # interval to re-calculate the instellation [yr] + method = "adaptive" # proportional | adaptive | maximum + + [params.dt.proportional] + propconst = 52.0 # Proportionality constant + + [params.dt.adaptive] + atol = 0.02 # Step size atol + rtol = 0.10 # Step size rtol + + # Termination criteria + # Set enabled=true/false in each section to enable/disable that termination criterion + [params.stop] + + # Require criteria to be satisfied twice before model will exit? + strict = false + + # required number of iterations + [params.stop.iters] + enabled = true + minimum = 5 + maximum = 9000 + + # required time constraints + [params.stop.time] + enabled = true + minimum = 1.0e3 # model will certainly run to t > minimum [yr] + maximum = 4.567e+9 # model will terminate when t > maximum [yr] + + # solidification + [params.stop.solid] + enabled = true + phi_crit = 0.01 # non-dim., model will terminate when global melt fraction < phi_crit + + # radiative equilibrium + [params.stop.radeqm] + enabled = true + atol = 0.2 # absolute tolerance [W m-2] + rtol = 1e-3 # relative tolerance + + [params.stop.escape] + enabled = true + p_stop = 5.0 # Stop surface pressure is less than this value + + # disintegration + [params.stop.disint] + enabled = false + + roche_enabled = true + offset_roche = 0 # correction to calculated Roche limit [m] + + spin_enabled = true + offset_spin = 0 # correction to calculated Breakup period [s] + + +# ---------------------------------------------------- +# Star +[star] + + # Physical parameters + mass = 1.0 # stellar mass [M_sun] + age_ini = 0.100 # model initialisation age [Gyr] + + module = "mors" + + [star.mors] + rot_pcntle = 50.0 # rotation percentile + rot_period = "none" # rotation period [days] + tracks = "spada" # evolution tracks: spada | baraffe + age_now = 4.567 # current age of star [Gyr] + spec = "stellar_spectra/Named/sun.txt" # path to stellar spectrum file + + [star.dummy] + radius = 1.0 # Constant stellar radius [R_sun] + calculate_radius = false # Calculate star radius using scaling from Teff? + Teff = 5772.0 # Star's brightness temperature [K] + +# Orbital system +[orbit] + instellation_method = 'sma' # whether to define orbit using semi major axis ('sma') or instellation flux ('inst') + instellationflux = 1.0 # instellation flux received from the planet in [Earth units] + semimajoraxis = 1.0 # initial semi-major axis of planet's orbit [AU] + eccentricity = 0.0 # initial eccentricity of planet's orbit [dimensionless] + zenith_angle = 48.19 # characteristic zenith angle [degrees] + s0_factor = 0.375 # instellation scale factor [dimensionless] + + evolve = false # whether to evolve the SMaxis and eccentricity + module = "lovepy" # module used to calculate tidal heating + + axial_period = "none" # planet's initial day length [hours]; will use orbital period if 'none' + satellite = false # include satellite (moon)? + mass_sat = 7.347e+22 # mass of satellite [kg] + semimajoraxis_sat = 3e8 # initial SMA of satellite's orbit [m] + + [orbit.dummy] + H_tide = 1e-7 # Fixed tidal power density [W kg-1] + Phi_tide = "<0.3" # Tidal heating applied when inequality locally satisfied + Imk2 = 0.0 # Fixed imaginary part of k2 love number, cannot be positive + + [orbit.lovepy] + visc_thresh = 1e9 # Minimum viscosity required for heating [Pa s] + +# Planetary structure - physics table +[struct] + mass_tot = 1.0 # M_earth + radius_int = "none" # R_earth + corefrac = 0.55 # non-dim., radius fraction + core_density = 10738.33 # Core density [kg m-3] + core_heatcap = 880.0 # Core specific heat capacity [J K-1 kg-1] + + module = "self" # self | zalmoxis + + [struct.zalmoxis] + verbose = false # verbose printing? + coremassfrac = 0.325 # core mass fraction [non-dim.] + inner_mantle_mass_fraction = 0 # inner mantle mass fraction [non-dim.] + weight_iron_frac = 0.325 # iron fraction in the planet [non-dim.] + num_levels = 150 # number of Zalmoxis radius layers + EOSchoice = "Tabulated:iron/silicate" # iron/silicate for super-Earths, water for water planets with Earth-like rocky cores + max_iterations_outer = 100 # max. iterations for the outer loop + tolerance_outer = 3e-3 # tolerance for the outer loop + max_iterations_inner = 100 # max. iterations for the inner loop + tolerance_inner = 1e-4 # tolerance for the inner loop + relative_tolerance = 1e-5 # relative tolerance for solve_ivp + absolute_tolerance = 1e-6 # absolute tolerance for solve_ivp + target_surface_pressure = 101325 # target surface pressure + pressure_tolerance = 1e9 # tolerance surface pressure + max_iterations_pressure = 200 # max. iterations for the innermost loop + pressure_adjustment_factor = 1.1 # factor for adjusting the pressure in the innermost loop + +# Atmosphere - physics table +[atmos_clim] + prevent_warming = true # do not allow the planet to heat up + surface_d = 0.01 # m, conductive skin thickness + surface_k = 2.0 # W m-1 K-1, conductive skin thermal conductivity + cloud_enabled = false # enable water cloud radiative effects + cloud_alpha = 0.0 # condensate retention fraction (1 -> fully retained) + surf_state = "fixed" # surface scheme: "mixed_layer" | "fixed" | "skin" + surf_greyalbedo = 0.1 # surface grey albedo + albedo_pl = "tests/data/integration/albedo_lookup/cloudy.csv" # Enforced input value of bond albedo; float (0 to 1) or str (path to CSV) + rayleigh = false # enable rayleigh scattering + tmp_minimum = 0.5 # temperature floor on solver + tmp_maximum = 5000.0 # temperature ceiling on solver + + module = "agni" # Which atmosphere module to use + + [atmos_clim.agni] + verbosity = 1 # output verbosity for agni (0:none, 1:info, 2:debug) + p_top = 1.0e-5 # bar, top of atmosphere grid pressure + p_obs = 0.02 # bar, level probed in transmission + spectral_group = "Honeyside" # which gas opacities to include + spectral_bands = "48" # how many spectral bands? + num_levels = 40 # Number of atmospheric grid levels + chemistry = "eq" # "none" | "eq" + surf_material = "greybody" # surface material file for scattering + solve_energy = true # solve for energy-conserving atmosphere profile + solution_atol = 0.5 # solver absolute tolerance + solution_rtol = 0.15 # solver relative tolerance + overlap_method = "ee" # gas overlap method + surf_roughness = 1e-3 # characteristic surface roughness [m] + surf_windspeed = 2.0 # characteristic surface wind speed [m/s]. + rainout = false # include volatile condensation/evaporation aloft + latent_heat = false # include latent heat release when `rainout=true`? + oceans = true # form liquid oceans at planet surface? + convection = true # include convective heat transport, with MLT + conduction = true # include conductive heat transport, with Fourier's law + sens_heat = true # include sensible heat flux near surface, with TKE scheme + real_gas = false # use real-gas equations of state + psurf_thresh = 0.1 # bar, surface pressure where we switch to 'transparent' mode + dx_max_ini = 300.0 # initial maximum temperature step [kelvin] allowed by solver + dx_max = 35.0 # maximum temperature step [kelvin] allowed by solver + max_steps = 70 # max steps allowed by solver during each iteration + perturb_all = true # updated entire jacobian each step? + mlt_criterion = "s" # MLT convection stability criterion; (l)edoux or (s)chwarzschild + fastchem_floor = 500.0 # Minimum temperature allowed to be sent to FC + fastchem_maxiter_chem = 60000 # Maximum FC iterations (chemistry) + fastchem_maxiter_solv = 20000 # Maximum FC iterations (internal solver) + fastchem_xtol_chem = 1e-4 # FC solver tolerance (chemistry) + fastchem_xtol_elem = 1e-4 # FC solver tolerance (elemental) + ini_profile = 'isothermal' # Initial guess for temperature profile shape + ls_default = 2 # Default linesearch method (0:none, 1:gs, 2:bt) + fdo = 2 # finite-difference order (options: 2, 4) + + [atmos_clim.janus] + p_top = 1.0e-6 # bar, top of atmosphere grid pressure + p_obs = 1.0e-3 # bar, observed pressure level + spectral_group = "Honeyside" # which gas opacities to include + spectral_bands = "48" # how many spectral bands? + F_atm_bc = 0 # measure outgoing flux at: (0) TOA | (1) Surface + num_levels = 40 # Number of atmospheric grid levels + tropopause = "none" # none | skin | dynamic + overlap_method = "ee" # gas overlap method + + [atmos_clim.dummy] + gamma = 0.01 # atmosphere opacity between 0 and 1 + height_factor = 3.0 # observed height is this times the scale height + +# Volatile escape - physics table +[escape] + + module = "zephyrus" # Which escape module to use + reservoir = "outgas" # Reservoir that sets escaping gas composition + + [escape.zephyrus] + Pxuv = 5e-5 # Pressure at which XUV radiation become opaque in the planetary atmosphere [bar] + efficiency = 0.1 # Escape efficiency factor + tidal = false # Tidal contribution enabled + + [escape.dummy] + rate = 0.0 # Bulk unfractionated escape rate [kg s-1] + +# Interior - physics table +[interior] + grain_size = 0.1 # crystal settling grain size [m] + F_initial = 1e3 # Initial heat flux guess [W m-2] + radiogenic_heat = false # enable radiogenic heat production + tidal_heat = false # enable tidal heat production + rheo_phi_loc = 0.6 # Centre of rheological transition + rheo_phi_wid = 0.2 # Width of rheological transition + melting_dir = "Monteux-600" # Name of folder constaining melting curves + + + module = "dummy" # Which interior module to use + + [interior.spider] + num_levels = 100 # Number of SPIDER grid levels + mixing_length = 2 # Mixing length parameterization + tolerance = 1.0e-8 # absolute solver tolerance + tolerance_rel = 1.0e-8 # relative solver tolerance + solver_type = "bdf" # SUNDIALS solver method + tsurf_atol = 20.0 # tsurf_poststep_change + tsurf_rtol = 0.02 # tsurf_poststep_change_frac + ini_entropy = 3000.0 # Surface entropy conditions [J K-1 kg-1] + ini_dsdr = -4.698e-6 # Interior entropy gradient [J K-1 kg-1 m-1] + conduction = true # enable conductive heat transfer + convection = true # enable convective heat transfer + gravitational_separation = true # enable gravitational separation + mixing = true # enable mixing + matprop_smooth_width = 1e-2 # melt-fraction window width over which to smooth material properties + + [interior.aragog] + logging = "ERROR" # Aragog log verbosity + num_levels = 50 # Number of Aragog grid levels + tolerance = 1.0e-7 # solver tolerance + initial_condition = 3 # Initial T(p); 1: linear, 2: user defined, 3: adiabat + ini_tmagma = 3300.0 # Initial magma surface temperature [K] + basal_temperature = 7000.0 # CMB temperature when initial boundary = 1 + inner_boundary_condition = 1 # 1 = core cooling model, 2 = prescribed heat flux, 3 = prescribed temperature + inner_boundary_value = 4000 # core temperature [K], if inner_boundary_condition = 3. CMB heat flux [W/m^2], if if inner_boundary_condition = 2 + conduction = true # enable conductive heat transfer + convection = true # enable convective heat transfer + gravitational_separation = false # enable gravitational separation + mixing = false # enable mixing + dilatation = false # enable dilatation source term + mass_coordinates = false # enable mass coordinates + tsurf_poststep_change = 30 # threshold of maximum change on surface temperature + event_triggering = true # enable events triggering to avoid abrupt jumps in surface temperature + bulk_modulus = 260e9 # Adiabatic bulk modulus AW-EOS parameter [Pa]. + + [interior.dummy] + ini_tmagma = 3300.0 # Initial magma surface temperature [K] + tmagma_atol = 30.0 # Max absolute Tsurf change in each step + tmagma_rtol = 0.05 # Max relative Tsurf change in each step + mantle_tliq = 2700.0 # Liquidus temperature + mantle_tsol = 1700.0 # Solidus temperature + mantle_rho = 4550.0 # Mantle density [kg m-3] + mantle_cp = 1792.0 # Mantle heat capacity [J K-1 kg-1] + H_ratio = 0.0 # Radiogenic heating [W/kg] + +# Outgassing - physics table +[outgas] + fO2_shift_IW = 4 # atmosphere/interior boundary oxidation state [log10(ΔIW)] + + silicates = true + fastchempath ='/data3/leoni/LavAtmos/FastChem/fastchem3/output/' + + module = "calliope" # Which outgassing module to use + + + [outgas.calliope] + include_H2O = true # Include H2O compound + include_CO2 = true # Include CO2 compound + include_N2 = true # Include N2 compound + include_S2 = true # Include S2 compound + include_SO2 = true # Include SO2 compound + include_H2S = true # Include H2S compound + include_NH3 = true # Include NH3 compound + include_H2 = true # Include H2 compound + include_CH4 = true # Include CH4 compound + include_CO = true # Include CO compound + T_floor = 700.0 # Temperature floor applied to outgassing calculation [K]. + rtol = 0.0001 # Relative mass tolerance + xtol = 1e-06 # Absolute mass tolerance + solubility = true # Enable solubility? + + [outgas.atmodeller] + some_parameter = "some_value" + +# Volatile delivery - physics table +[delivery] + + # Radionuclide parameters + radio_tref = 4.55 # Reference age for concentrations [Gyr] + radio_K = 310.0 # ppmw of potassium (all isotopes) + radio_U = 0.031 # ppmw of uranium (all isotopes) + radio_Th = 0.124 # ppmw of thorium (all isotopes) + + # Which initial inventory to use? + initial = 'elements' # 'elements' | 'volatiles' + + # No module for accretion as of yet + module = "none" + + # Set initial volatile inventory by planetary element abundances if [initial = 'elements'] + [delivery.elements] + use_metallicity = false # whether or not to specify the elemental abundances in terms of solar metallicity + metallicity = 1000 # metallicity relative to solar metallicity + + H_oceans = 2.0 # Hydrogen inventory in units of equivalent Earth oceans + # H_ppmw = 109.0 # Hydrogen inventory in ppmw relative to mantle mass + # H_kg = 1e20 # Hydrogen inventory in kg + + CH_ratio = 1.0 # C/H mass ratio in mantle/atmosphere system + # C_ppmw = 0.0 # Carbon inventory in ppmw relative to mantle mass + # C_kg = 1e20 # Carbon inventory in kg + + NH_ratio = 0.5 # N/H mass ratio in mantle/atmosphere system + # N_ppmw = 0.5 # Nitrogen inventory in ppmw relative to mantle mass + # N_kg = 1e20 # Nitrogen inventory in kg + + SH_ratio = 2.0 # S/H mass ratio in mantle/atmosphere system + # S_ppmw = 2.0 # Sulfur inventory in ppmw relative to mantle mass + # S_kg = 1e20 # Sulfur inventory in kg + + # Set initial volatile inventory by partial pressures in atmosphere if [initial = 'volatiles'] + [delivery.volatiles] + H2O = 20.0 # partial pressure of H2O + CO2 = 30.0 # partial pressure of CO2 + N2 = 0.0 # etc. + S2 = 0.0 + SO2 = 0.0 + H2S = 0.0 + NH3 = 0.0 + H2 = 0.0 + CH4 = 0.0 + CO = 0.0 + +# Atmospheric chemistry postprocessing +[atmos_chem] + + module = "vulcan" # Atmospheric chemistry module + when = "manually" # When to run chemistry (manually, offline, online) + + # Physics flags + photo_on = true # Enable photochemistry + Kzz_on = true # Enable eddy diffusion + Kzz_const = "none" # Constant eddy diffusion coefficient (none => use profile) + moldiff_on = true # Enable molecular diffusion in the atmosphere + updraft_const = 0.0 # Set constant updraft velocity + + # Vulcan-specific atmospheric chemistry parameters + [atmos_chem.vulcan] + clip_fl = 1e-20 # Floor on stellar spectrum [erg s-1 cm-2 nm-1] + clip_vmr = 1e-10 # Neglect species with vmr < clip_vmr + make_funs = true # Generate reaction network functions + ini_mix = "profile" # Initial mixing ratios (profile, outgas) + fix_surf = false # Fixed surface mixing ratios + network = "SNCHO" # Class of chemical network to use (CHO, NCHO, SNCHO) + save_frames = true # Plot frames during iterations + yconv_cri = 0.05 # Convergence criterion, value of mixing ratios + slope_cri = 0.0001 # Convergence criterion, rate of change of mixing ratios + +# Calculate simulated observations +[observe] + + # Module with which to calculate the synthetic observables + synthesis = "none" + + [observe.platon] + downsample = 8 # Factor to downsample opacities + clip_vmr = 1e-8 # Minimum VMR for a species to be included diff --git a/src/proteus/config/_outgas.py b/src/proteus/config/_outgas.py index 2445d8752..7228af88f 100644 --- a/src/proteus/config/_outgas.py +++ b/src/proteus/config/_outgas.py @@ -93,3 +93,6 @@ class Outgas: calliope: Calliope = field(factory=Calliope) atmodeller: Atmodeller = field(factory=Atmodeller) + + silicates: bool = field(default=True) + fastchempath: str = field(default="/data3/leoni/LavAtmos/FastChem/fastchem3/output/") diff --git a/src/proteus/interior/spider.py b/src/proteus/interior/spider.py index f743faeaa..4a6e754d5 100644 --- a/src/proteus/interior/spider.py +++ b/src/proteus/interior/spider.py @@ -151,6 +151,7 @@ def get_all_output_times(odir:str): # locate times to process based on files located in odir/ file_l = [f for f in os.listdir(odir) if os.path.isfile(odir+f)] + print(file_l) if not file_l: raise Exception('Output data directory contains no files') diff --git a/src/proteus/outgas/lavatmos.py b/src/proteus/outgas/lavatmos.py new file mode 100644 index 000000000..3e3287732 --- /dev/null +++ b/src/proteus/outgas/lavatmos.py @@ -0,0 +1,86 @@ +# Function used to run LavAtmos 2.0 +from __future__ import annotations + +import logging +from typing import TYPE_CHECKING + +import pandas as pd + +if TYPE_CHECKING: + from proteus.config import Config + + +from proteus.utils.constants import element_list, gas_list + +log = logging.getLogger("fwl."+__name__) + +def run_lavatmos(config:Config,hf_row:dict): + + + ''' + + This function runs the Thermoengine module Lavatmos. Outgassing of refractory species + are computed from a melt temperature and atmospheric pressure. + + Parameters: + config : Config + Configuration object + hf_row : dict + Dictionary of helpfile variables, at this iteration only + + ''' + import os + import sys + + sys.path.insert(1, '/data3/leoni/LavAtmos') + from lavatmos_goot_runner import container_lavatmos + + print(element_list, gas_list) + lavatmos_dict={'P':0} + + #set element fractions in atmosphere for lavatmos run + input_eles=['H','C','N','S'] + for e in input_eles: + lavatmos_dict[e] = hf_row[e + "_kg_atm"]/hf_row["M_atm"] + + parameters = { + + # General parameters + 'run_name' : config.params.out.path, + + # Melt parameters + 'lava_comp' : 'BSE_palm', + 'silicate_abundances' : 'lavatmos2', # 'lavatmos1', 'lavatmos2', 'manual' + + # Volatile parameters + 'P_volatile' : hf_row['P_surf'], # bar + 'oxygen_abundance' : 'degassed', # 'degassed', 'manual' + 'volatile_comp' : lavatmos_dict, + } + + lavatmos_instance = container_lavatmos(parameters) + lavatmos_instance.run_lavatmos(hf_row["T_magma"]) + + #read in boa chemistry from last iteration of fastchem and lavatmos + fastchempath=config.outgas.fastchempath + if os.path.exists(fastchempath): + mmr_path = os.path.join(fastchempath, 'boa_chem.dat') + else: + raise RuntimeError('cannot find fastchem output from lavatmos loop!') + + #update abundances in output file for next calliope run + new_atmos_abundances=pd.read_csv(mmr_path,sep=r'\s+') + hf_row['M_tot']=0 + + #need to check here if this is correct still becuase fastchem outopout is in vmr .... maybe need to convert to mmrs first to scale to atmosphere mass ... + for vol in gas_list: + hf_row[vol + "_vmr"] = new_atmos_abundances[vol][0] + hf_row[vol + "_kg_atm"] = new_atmos_abundances[vol][0] * hf_row['M_atm'] + hf_row[vol + "_kg_total"] = new_atmos_abundances[vol][0]+ hf_row[vol + "_kg_solid"] + hf_row[vol + "_kg_liquid"] + + hf_row['M_tot']+= hf_row[e + "_kg_total"] + + #elements are not considered as atomic species but just as inventory + for e in element_list: + hf_row[e + "_kg_atm"]=new_atmos_abundances[e][0] * hf_row['M_atm'] + hf_row[e + "_kg_atm"]=new_atmos_abundances[e][0]+ hf_row[e + "_kg_solid"] + hf_row[e + "_kg_liquid"] diff --git a/src/proteus/outgas/wrapper.py b/src/proteus/outgas/wrapper.py index 3e09f1947..30e33b53f 100644 --- a/src/proteus/outgas/wrapper.py +++ b/src/proteus/outgas/wrapper.py @@ -8,6 +8,7 @@ from proteus.outgas.calliope import calc_surface_pressures, calc_target_masses from proteus.outgas.common import expected_keys +from proteus.outgas.lavatmos import run_lavatmos from proteus.utils.constants import element_list, gas_list if TYPE_CHECKING: @@ -94,6 +95,8 @@ def run_outgassing(dirs:dict, config:Config, hf_row:dict): log.info(" total = %-9.2f bar"%hf_row["P_surf"]) log.info(" mmw = %-9.5f g mol-1"%(hf_row["atm_kg_per_mol"]*1e3)) + + def run_desiccated(config:Config, hf_row:dict): ''' Handle desiccation of the planet. This substitutes for run_outgassing when the planet @@ -119,3 +122,32 @@ def run_desiccated(config:Config, hf_row:dict): for k in expected_keys(): if k not in excepted_keys: hf_row[k] = 0.0 + + +def lavatmos_calliope_loop(dirs:dict,config:Config, hf_row:dict): + + '''function which runs lavatmos and calliope in a loop until they have converged. + This allows for a consistentt computation of melt outgassing and dissolution + Parameters + ---------- + dirs : dict + Dictionary of directory paths + config : Config + Configuration object + hf_row : dict + Dictionary of helpfile variables, at this iteration only + ''' + + run_outgassing(dirs, config, hf_row) + print(config.outgas.silicates) + if config.outgas.silicates: + print(config.outgas.fastchempath) + xerr=hf_row['H2O_vmr']*0.01 + log.info("error threshold on water abundance: %.6f"%xerr) + err=1.0 + while abs(err)>xerr: + old_row=hf_row + run_lavatmos(config, hf_row) + run_outgassing(dirs, config, hf_row) + err=old_row['H2O_vmr']-hf_row['H2O_vmr'] + log.info("change in water abundance between the last iterations: %.6f"%err) diff --git a/src/proteus/plot/cpl_atmosphere.py b/src/proteus/plot/cpl_atmosphere.py index 1d487cae1..8f5ae157b 100644 --- a/src/proteus/plot/cpl_atmosphere.py +++ b/src/proteus/plot/cpl_atmosphere.py @@ -38,6 +38,7 @@ def plot_atmosphere( output_dir:str, times:list, profiles:list, plot_format="pdf pmax = 1.0 for i, t in enumerate( times ): + print('time at which temperature plot is created:',t) prof = profiles[i] label = latex_float(t)+" yr" color = sm.to_rgba(t) @@ -58,13 +59,17 @@ def plot_atmosphere( output_dir:str, times:list, profiles:list, plot_format="pdf ##### T-Z ax0.set_ylabel(r"Height [km]") ax0.set_ylim(bottom=0.0, top=zmax) + ax0.set_xlim([200,4000]) ##### T-P ax1.set_xlabel("Temperature [K]") ax1.set_ylabel("Pressure [bar]") ax1.invert_yaxis() ax1.set_yscale("log") - ax1.set_ylim(bottom=pmax, top=np.amin(parr)) + #ax1.set_ylim(bottom=pmax, top=np.amin(parr)) + ax1.set_ylim(bottom=100, top=10**-8) + + ax1.set_xlim([200,4000]) ax1.yaxis.set_major_locator(LogLocator(numticks=1000)) # Legend diff --git a/src/proteus/plot/cpl_chem_atmosphere.py b/src/proteus/plot/cpl_chem_atmosphere.py index f43847730..540c1484b 100644 --- a/src/proteus/plot/cpl_chem_atmosphere.py +++ b/src/proteus/plot/cpl_chem_atmosphere.py @@ -24,7 +24,7 @@ "CO2", "H2", "H2S", "HCN", "NH2", "NH3", "OCS", "S2", "S6", "S8", "SO2", "N2O", "NO", "NO2", "HNO3", "PH3", "C2H2", "NO3", "N2O5", "HONO", "HO2NO2", "H2O2", "C2H6", "CH3", "H2CO", "HO2", "C", - "N", "O", "S", "SO", "CS2",) + "N", "O", "S", "SO", "CS2","SiO","SiO2","TiO","FeO","MgO","Na") def plot_chem_atmosphere( output_dir:str, chem_module:str, plot_format="pdf", plot_gases:list=None, plot_offchem:bool=True, xmin:float=1e-14): diff --git a/src/proteus/proteus.py b/src/proteus/proteus.py index c9e0d6567..49b6176ec 100644 --- a/src/proteus/proteus.py +++ b/src/proteus/proteus.py @@ -125,8 +125,8 @@ def start(self, *, resume: bool = False, offline: bool = False): from proteus.outgas.wrapper import ( calc_target_elemental_inventories, check_desiccation, + lavatmos_calliope_loop, run_desiccated, - run_outgassing, ) # stellar spectrum and evolution @@ -384,7 +384,7 @@ def start(self, *, resume: bool = False, offline: bool = False): self.sinst_prev = self.hf_row["Time"] update_stellar_quantities(self.hf_row, self.config, stellar_track=self.stellar_track) - + if (abs(self.hf_row["Time"] - self.sspec_prev) > self.config.params.dt.starspec) or ( self.loops["total"] == 0): @@ -445,7 +445,8 @@ def start(self, *, resume: bool = False, offline: bool = False): # solve for atmosphere composition else: - run_outgassing(self.directories, self.config, self.hf_row) + #run_outgassing(self.directories, self.config, self.hf_row) + lavatmos_calliope_loop(self.directories, self.config, self.hf_row) # Add atmosphere mass to interior mass, to get total planet mass self.hf_row["M_planet"] = self.hf_row["M_int"] + self.hf_row["M_atm"] diff --git a/src/proteus/utils/constants.py b/src/proteus/utils/constants.py index 8ac1a4694..70d942e04 100644 --- a/src/proteus/utils/constants.py +++ b/src/proteus/utils/constants.py @@ -47,11 +47,12 @@ # Supported gases vol_list = ["H2O", "CO2", "O2", "H2", "CH4", "CO", "N2", "NH3", "S2", "SO2", "H2S"] -vap_list = ["SiO", "SiO2", "MgO", "FeO2"] +#vap_list = ["SiO", "SiO2", "MgO", "FeO2"] +vap_list = ["SiO", "SiO2", "MgO", "FeO", "Na" , "SiO"] gas_list = vol_list + vap_list # Supported elements -element_list = ["H", "O", "C", "N", "S", "Si", "Mg", "Fe", "Na"] +element_list = ["H", "O", "C", "N", "S", "Si", "Mg", "Fe", "Na", "Al", "Ti", "Ca"] ## Constant from Zephyrus ergcm2stoWm2 = 1e-3 # convert [erg s-1 cm-2] to [W m-2] diff --git a/src/proteus/utils/plot.py b/src/proteus/utils/plot.py index 396ac47e6..289c008a9 100644 --- a/src/proteus/utils/plot.py +++ b/src/proteus/utils/plot.py @@ -33,6 +33,14 @@ "SO2": "#00008B", "H2S": "#2eff90", "NH3": "#675200", + 'SiO':'#b2df8a', + 'MgO': '#a6cee3', + 'SiO2': '#1b9e77', + 'FeO':'#7f0000', + 'TiO':"#9C45BC", + 'TiO2':"#421e39", + + # Volatile elements "H": "#0000cc", @@ -47,6 +55,8 @@ "Si": "#aa2277", "Mg": "#996633", "Na": "#ccff00", + "Ti": "#0d2959", + # GLobal energy fluxes "OLR": "#dc143c", diff --git a/tools/get_petsc.sh b/tools/get_petsc.sh index 95031ff15..af20bbe7e 100755 --- a/tools/get_petsc.sh +++ b/tools/get_petsc.sh @@ -10,6 +10,8 @@ workpath=$(mkdir -p petsc && realpath petsc) #creating the folder to store the p # Set environment if [[ "$OSTYPE" == "linux-gnu"* ]]; then export PETSC_ARCH=arch-linux-c-opt +elif [[ "$OSTYPE" == "linux"* ]]; then + export PETSC_ARCH=arch-linux-c-opt elif [[ "$OSTYPE" == "darwin"* ]]; then export PETSC_ARCH=arch-darwin-c-opt else From 5585252f08db7c9f3b6ee58b51ff59e2bd4cdf66 Mon Sep 17 00:00:00 2001 From: Leoni Janssen Date: Thu, 15 Jan 2026 08:57:44 +0100 Subject: [PATCH 04/26] remove unnecessary print statement --- input/run_lavatmos_tests.toml | 429 ++++++++++++++++++++++++++++++++++ 1 file changed, 429 insertions(+) create mode 100644 input/run_lavatmos_tests.toml diff --git a/input/run_lavatmos_tests.toml b/input/run_lavatmos_tests.toml new file mode 100644 index 000000000..7ad91375d --- /dev/null +++ b/input/run_lavatmos_tests.toml @@ -0,0 +1,429 @@ +# PROTEUS configuration file + +# This is a comprehensive outline of all configuration options. It includes variables +# which have default values, in order to showcase the range of potential options available. +# Variable defaults are defined in `src/proteus/config/*.py` + +# Root tables should be physical, with the exception of "params" +# Software related options should go within the appropriate physical table +# For configuration see https://fwl-proteus.readthedocs.io/en/latest/config.html + +# ---------------------------------------------------- + +# The general structure is: +# [params] parameters for code execution, output files, time-stepping, convergence +# [star] stellar parameters, model selection +# [orbit] planetary orbital parameters +# [struct] planetary structure (mass, radius) +# [atmos_clim] atmosphere climate parameters, model selection +# [atmos_chem] atmosphere chemistry parameters, model selection +# [escape] escape parameters, model selection +# [interior] magma ocean model selection and parameters +# [outgas] outgassing parameters (fO2) and included volatiles +# [delivery] initial volatile inventory, and delivery model selection +# [observe] synthetic observations + +# ---------------------------------------------------- + +version = "2.0" + +# Parameters +[params] + # output files + [params.out] + path = "run_lavatmos_nosilicates" + logging = "INFO" + plot_mod = 3 # Plotting frequency, 0: wait until completion | n: every n iterations | none: do not plot + plot_fmt = "png" # Plotting image file format, "png" or "pdf" recommended + write_mod = 1 # Write CSV frequency, 0: wait until completion | n: every n iterations + archive_mod = 5 # Archive frequency, 0: wait until completion | n: every n iterations | none: do not archive + remove_sf = false # Remove SOCRATES spectral file when simulation ends. + + # time-stepping + [params.dt] + minimum = 1e4 # absolute minimum time-step [years] + minimum_rel = 1e-5 # relative minimum time-step [dimensionless] + maximum = 1e7 # maximum time-step [yr] + initial = 3e1 # inital step size [yr] + starspec = 1e9 # interval to re-calculate the stellar spectrum [yr] + starinst = 1e1 # interval to re-calculate the instellation [yr] + method = "adaptive" # proportional | adaptive | maximum + + [params.dt.proportional] + propconst = 52.0 # Proportionality constant + + [params.dt.adaptive] + atol = 0.02 # Step size atol + rtol = 0.10 # Step size rtol + + # Termination criteria + # Set enabled=true/false in each section to enable/disable that termination criterion + [params.stop] + + # Require criteria to be satisfied twice before model will exit? + strict = false + + # required number of iterations + [params.stop.iters] + enabled = true + minimum = 5 + maximum = 9000 + + # required time constraints + [params.stop.time] + enabled = true + minimum = 1.0e3 # model will certainly run to t > minimum [yr] + maximum = 4.567e+9 # model will terminate when t > maximum [yr] + + # solidification + [params.stop.solid] + enabled = true + phi_crit = 0.01 # non-dim., model will terminate when global melt fraction < phi_crit + + # radiative equilibrium + [params.stop.radeqm] + enabled = true + atol = 0.2 # absolute tolerance [W m-2] + rtol = 1e-3 # relative tolerance + + [params.stop.escape] + enabled = true + p_stop = 5.0 # Stop surface pressure is less than this value + + # disintegration + [params.stop.disint] + enabled = false + + roche_enabled = true + offset_roche = 0 # correction to calculated Roche limit [m] + + spin_enabled = true + offset_spin = 0 # correction to calculated Breakup period [s] + + +# ---------------------------------------------------- +# Star +[star] + + # Physical parameters + mass = 1.0 # stellar mass [M_sun] + age_ini = 0.100 # model initialisation age [Gyr] + + module = "mors" + + [star.mors] + rot_pcntle = 50.0 # rotation percentile + rot_period = "none" # rotation period [days] + tracks = "spada" # evolution tracks: spada | baraffe + age_now = 4.567 # current age of star [Gyr] + spec = "stellar_spectra/Named/sun.txt" # path to stellar spectrum file + + [star.dummy] + radius = 1.0 # Constant stellar radius [R_sun] + calculate_radius = false # Calculate star radius using scaling from Teff? + Teff = 5772.0 # Star's brightness temperature [K] + +# Orbital system +[orbit] + instellation_method = 'sma' # whether to define orbit using semi major axis ('sma') or instellation flux ('inst') + instellationflux = 1.0 # instellation flux received from the planet in [Earth units] + semimajoraxis = 1.0 # initial semi-major axis of planet's orbit [AU] + eccentricity = 0.0 # initial eccentricity of planet's orbit [dimensionless] + zenith_angle = 48.19 # characteristic zenith angle [degrees] + s0_factor = 0.375 # instellation scale factor [dimensionless] + + evolve = false # whether to evolve the SMaxis and eccentricity + module = "lovepy" # module used to calculate tidal heating + + axial_period = "none" # planet's initial day length [hours]; will use orbital period if 'none' + satellite = false # include satellite (moon)? + mass_sat = 7.347e+22 # mass of satellite [kg] + semimajoraxis_sat = 3e8 # initial SMA of satellite's orbit [m] + + [orbit.dummy] + H_tide = 1e-7 # Fixed tidal power density [W kg-1] + Phi_tide = "<0.3" # Tidal heating applied when inequality locally satisfied + Imk2 = 0.0 # Fixed imaginary part of k2 love number, cannot be positive + + [orbit.lovepy] + visc_thresh = 1e9 # Minimum viscosity required for heating [Pa s] + +# Planetary structure - physics table +[struct] + mass_tot = 1.0 # M_earth + radius_int = "none" # R_earth + corefrac = 0.55 # non-dim., radius fraction + core_density = 10738.33 # Core density [kg m-3] + core_heatcap = 880.0 # Core specific heat capacity [J K-1 kg-1] + + module = "self" # self | zalmoxis + + [struct.zalmoxis] + verbose = false # verbose printing? + coremassfrac = 0.325 # core mass fraction [non-dim.] + inner_mantle_mass_fraction = 0 # inner mantle mass fraction [non-dim.] + weight_iron_frac = 0.325 # iron fraction in the planet [non-dim.] + num_levels = 150 # number of Zalmoxis radius layers + EOSchoice = "Tabulated:iron/silicate" # iron/silicate for super-Earths, water for water planets with Earth-like rocky cores + max_iterations_outer = 100 # max. iterations for the outer loop + tolerance_outer = 3e-3 # tolerance for the outer loop + max_iterations_inner = 100 # max. iterations for the inner loop + tolerance_inner = 1e-4 # tolerance for the inner loop + relative_tolerance = 1e-5 # relative tolerance for solve_ivp + absolute_tolerance = 1e-6 # absolute tolerance for solve_ivp + target_surface_pressure = 101325 # target surface pressure + pressure_tolerance = 1e9 # tolerance surface pressure + max_iterations_pressure = 200 # max. iterations for the innermost loop + pressure_adjustment_factor = 1.1 # factor for adjusting the pressure in the innermost loop + +# Atmosphere - physics table +[atmos_clim] + prevent_warming = true # do not allow the planet to heat up + surface_d = 0.01 # m, conductive skin thickness + surface_k = 2.0 # W m-1 K-1, conductive skin thermal conductivity + cloud_enabled = false # enable water cloud radiative effects + cloud_alpha = 0.0 # condensate retention fraction (1 -> fully retained) + surf_state = "fixed" # surface scheme: "mixed_layer" | "fixed" | "skin" + surf_greyalbedo = 0.1 # surface grey albedo + albedo_pl = "tests/data/integration/albedo_lookup/cloudy.csv" # Enforced input value of bond albedo; float (0 to 1) or str (path to CSV) + rayleigh = false # enable rayleigh scattering + tmp_minimum = 0.5 # temperature floor on solver + tmp_maximum = 5000.0 # temperature ceiling on solver + + module = "agni" # Which atmosphere module to use + + [atmos_clim.agni] + verbosity = 1 # output verbosity for agni (0:none, 1:info, 2:debug) + p_top = 1.0e-5 # bar, top of atmosphere grid pressure + p_obs = 0.02 # bar, level probed in transmission + spectral_group = "Honeyside" # which gas opacities to include + spectral_bands = "48" # how many spectral bands? + num_levels = 40 # Number of atmospheric grid levels + chemistry = "eq" # "none" | "eq" + surf_material = "greybody" # surface material file for scattering + solve_energy = true # solve for energy-conserving atmosphere profile + solution_atol = 0.5 # solver absolute tolerance + solution_rtol = 0.15 # solver relative tolerance + overlap_method = "ee" # gas overlap method + surf_roughness = 1e-3 # characteristic surface roughness [m] + surf_windspeed = 2.0 # characteristic surface wind speed [m/s]. + rainout = false # include volatile condensation/evaporation aloft + latent_heat = false # include latent heat release when `rainout=true`? + oceans = true # form liquid oceans at planet surface? + convection = true # include convective heat transport, with MLT + conduction = true # include conductive heat transport, with Fourier's law + sens_heat = true # include sensible heat flux near surface, with TKE scheme + real_gas = false # use real-gas equations of state + psurf_thresh = 0.1 # bar, surface pressure where we switch to 'transparent' mode + dx_max_ini = 300.0 # initial maximum temperature step [kelvin] allowed by solver + dx_max = 35.0 # maximum temperature step [kelvin] allowed by solver + max_steps = 70 # max steps allowed by solver during each iteration + perturb_all = true # updated entire jacobian each step? + mlt_criterion = "s" # MLT convection stability criterion; (l)edoux or (s)chwarzschild + fastchem_floor = 500.0 # Minimum temperature allowed to be sent to FC + fastchem_maxiter_chem = 60000 # Maximum FC iterations (chemistry) + fastchem_maxiter_solv = 20000 # Maximum FC iterations (internal solver) + fastchem_xtol_chem = 1e-4 # FC solver tolerance (chemistry) + fastchem_xtol_elem = 1e-4 # FC solver tolerance (elemental) + ini_profile = 'isothermal' # Initial guess for temperature profile shape + ls_default = 2 # Default linesearch method (0:none, 1:gs, 2:bt) + fdo = 2 # finite-difference order (options: 2, 4) + + [atmos_clim.janus] + p_top = 1.0e-6 # bar, top of atmosphere grid pressure + p_obs = 1.0e-3 # bar, observed pressure level + spectral_group = "Honeyside" # which gas opacities to include + spectral_bands = "48" # how many spectral bands? + F_atm_bc = 0 # measure outgoing flux at: (0) TOA | (1) Surface + num_levels = 40 # Number of atmospheric grid levels + tropopause = "none" # none | skin | dynamic + overlap_method = "ee" # gas overlap method + + [atmos_clim.dummy] + gamma = 0.01 # atmosphere opacity between 0 and 1 + height_factor = 3.0 # observed height is this times the scale height + +# Volatile escape - physics table +[escape] + + module = "zephyrus" # Which escape module to use + reservoir = "outgas" # Reservoir that sets escaping gas composition + + [escape.zephyrus] + Pxuv = 5e-5 # Pressure at which XUV radiation become opaque in the planetary atmosphere [bar] + efficiency = 0.1 # Escape efficiency factor + tidal = false # Tidal contribution enabled + + [escape.dummy] + rate = 0.0 # Bulk unfractionated escape rate [kg s-1] + +# Interior - physics table +[interior] + grain_size = 0.1 # crystal settling grain size [m] + F_initial = 1e3 # Initial heat flux guess [W m-2] + radiogenic_heat = false # enable radiogenic heat production + tidal_heat = false # enable tidal heat production + rheo_phi_loc = 0.6 # Centre of rheological transition + rheo_phi_wid = 0.2 # Width of rheological transition + melting_dir = "Monteux-600" # Name of folder constaining melting curves + + + module = "dummy" # Which interior module to use + + [interior.spider] + num_levels = 100 # Number of SPIDER grid levels + mixing_length = 2 # Mixing length parameterization + tolerance = 1.0e-8 # absolute solver tolerance + tolerance_rel = 1.0e-8 # relative solver tolerance + solver_type = "bdf" # SUNDIALS solver method + tsurf_atol = 20.0 # tsurf_poststep_change + tsurf_rtol = 0.02 # tsurf_poststep_change_frac + ini_entropy = 3000.0 # Surface entropy conditions [J K-1 kg-1] + ini_dsdr = -4.698e-6 # Interior entropy gradient [J K-1 kg-1 m-1] + conduction = true # enable conductive heat transfer + convection = true # enable convective heat transfer + gravitational_separation = true # enable gravitational separation + mixing = true # enable mixing + matprop_smooth_width = 1e-2 # melt-fraction window width over which to smooth material properties + + [interior.aragog] + logging = "ERROR" # Aragog log verbosity + num_levels = 50 # Number of Aragog grid levels + tolerance = 1.0e-7 # solver tolerance + initial_condition = 3 # Initial T(p); 1: linear, 2: user defined, 3: adiabat + ini_tmagma = 3300.0 # Initial magma surface temperature [K] + basal_temperature = 7000.0 # CMB temperature when initial boundary = 1 + inner_boundary_condition = 1 # 1 = core cooling model, 2 = prescribed heat flux, 3 = prescribed temperature + inner_boundary_value = 4000 # core temperature [K], if inner_boundary_condition = 3. CMB heat flux [W/m^2], if if inner_boundary_condition = 2 + conduction = true # enable conductive heat transfer + convection = true # enable convective heat transfer + gravitational_separation = false # enable gravitational separation + mixing = false # enable mixing + dilatation = false # enable dilatation source term + mass_coordinates = false # enable mass coordinates + tsurf_poststep_change = 30 # threshold of maximum change on surface temperature + event_triggering = true # enable events triggering to avoid abrupt jumps in surface temperature + bulk_modulus = 260e9 # Adiabatic bulk modulus AW-EOS parameter [Pa]. + + [interior.dummy] + ini_tmagma = 3300.0 # Initial magma surface temperature [K] + tmagma_atol = 30.0 # Max absolute Tsurf change in each step + tmagma_rtol = 0.05 # Max relative Tsurf change in each step + mantle_tliq = 2700.0 # Liquidus temperature + mantle_tsol = 1700.0 # Solidus temperature + mantle_rho = 4550.0 # Mantle density [kg m-3] + mantle_cp = 1792.0 # Mantle heat capacity [J K-1 kg-1] + H_ratio = 0.0 # Radiogenic heating [W/kg] + +# Outgassing - physics table +[outgas] + fO2_shift_IW = 4 # atmosphere/interior boundary oxidation state [log10(ΔIW)] + + silicates = false + fastchempath ='/data3/leoni/LavAtmos/FastChem/fastchem3/output/' + + module = "calliope" # Which outgassing module to use + + + [outgas.calliope] + include_H2O = true # Include H2O compound + include_CO2 = true # Include CO2 compound + include_N2 = true # Include N2 compound + include_S2 = true # Include S2 compound + include_SO2 = true # Include SO2 compound + include_H2S = true # Include H2S compound + include_NH3 = true # Include NH3 compound + include_H2 = true # Include H2 compound + include_CH4 = true # Include CH4 compound + include_CO = true # Include CO compound + T_floor = 700.0 # Temperature floor applied to outgassing calculation [K]. + rtol = 0.0001 # Relative mass tolerance + xtol = 1e-06 # Absolute mass tolerance + solubility = true # Enable solubility? + + [outgas.atmodeller] + some_parameter = "some_value" + +# Volatile delivery - physics table +[delivery] + + # Radionuclide parameters + radio_tref = 4.55 # Reference age for concentrations [Gyr] + radio_K = 310.0 # ppmw of potassium (all isotopes) + radio_U = 0.031 # ppmw of uranium (all isotopes) + radio_Th = 0.124 # ppmw of thorium (all isotopes) + + # Which initial inventory to use? + initial = 'elements' # 'elements' | 'volatiles' + + # No module for accretion as of yet + module = "none" + + # Set initial volatile inventory by planetary element abundances if [initial = 'elements'] + [delivery.elements] + use_metallicity = false # whether or not to specify the elemental abundances in terms of solar metallicity + metallicity = 1000 # metallicity relative to solar metallicity + + H_oceans = 2.0 # Hydrogen inventory in units of equivalent Earth oceans + # H_ppmw = 109.0 # Hydrogen inventory in ppmw relative to mantle mass + # H_kg = 1e20 # Hydrogen inventory in kg + + CH_ratio = 1.0 # C/H mass ratio in mantle/atmosphere system + # C_ppmw = 0.0 # Carbon inventory in ppmw relative to mantle mass + # C_kg = 1e20 # Carbon inventory in kg + + NH_ratio = 0.5 # N/H mass ratio in mantle/atmosphere system + # N_ppmw = 0.5 # Nitrogen inventory in ppmw relative to mantle mass + # N_kg = 1e20 # Nitrogen inventory in kg + + SH_ratio = 2.0 # S/H mass ratio in mantle/atmosphere system + # S_ppmw = 2.0 # Sulfur inventory in ppmw relative to mantle mass + # S_kg = 1e20 # Sulfur inventory in kg + + # Set initial volatile inventory by partial pressures in atmosphere if [initial = 'volatiles'] + [delivery.volatiles] + H2O = 20.0 # partial pressure of H2O + CO2 = 30.0 # partial pressure of CO2 + N2 = 0.0 # etc. + S2 = 0.0 + SO2 = 0.0 + H2S = 0.0 + NH3 = 0.0 + H2 = 0.0 + CH4 = 0.0 + CO = 0.0 + +# Atmospheric chemistry postprocessing +[atmos_chem] + + module = "vulcan" # Atmospheric chemistry module + when = "manually" # When to run chemistry (manually, offline, online) + + # Physics flags + photo_on = true # Enable photochemistry + Kzz_on = true # Enable eddy diffusion + Kzz_const = "none" # Constant eddy diffusion coefficient (none => use profile) + moldiff_on = true # Enable molecular diffusion in the atmosphere + updraft_const = 0.0 # Set constant updraft velocity + + # Vulcan-specific atmospheric chemistry parameters + [atmos_chem.vulcan] + clip_fl = 1e-20 # Floor on stellar spectrum [erg s-1 cm-2 nm-1] + clip_vmr = 1e-10 # Neglect species with vmr < clip_vmr + make_funs = true # Generate reaction network functions + ini_mix = "profile" # Initial mixing ratios (profile, outgas) + fix_surf = false # Fixed surface mixing ratios + network = "SNCHO" # Class of chemical network to use (CHO, NCHO, SNCHO) + save_frames = true # Plot frames during iterations + yconv_cri = 0.05 # Convergence criterion, value of mixing ratios + slope_cri = 0.0001 # Convergence criterion, rate of change of mixing ratios + +# Calculate simulated observations +[observe] + + # Module with which to calculate the synthetic observables + synthesis = "none" + + [observe.platon] + downsample = 8 # Factor to downsample opacities + clip_vmr = 1e-8 # Minimum VMR for a species to be included From cd660789d1fc4816b53126bec6d6bd5ef868445e Mon Sep 17 00:00:00 2001 From: Leoni Janssen Date: Fri, 23 Jan 2026 10:01:01 +0100 Subject: [PATCH 05/26] chnaged plotting routines --- input/albedo_test_cloudfree.toml | 425 ----------------------- input/lavatmos_run.toml | 429 ------------------------ input/run_lavatmos_tests.toml | 429 ------------------------ input/run_tests.toml | 4 +- src/proteus/plot/cpl_chem_atmosphere.py | 1 + src/proteus/plot/cpl_escape.py | 8 + src/proteus/utils/constants.py | 2 +- 7 files changed, 12 insertions(+), 1286 deletions(-) delete mode 100644 input/albedo_test_cloudfree.toml delete mode 100644 input/lavatmos_run.toml delete mode 100644 input/run_lavatmos_tests.toml diff --git a/input/albedo_test_cloudfree.toml b/input/albedo_test_cloudfree.toml deleted file mode 100644 index 68c42df94..000000000 --- a/input/albedo_test_cloudfree.toml +++ /dev/null @@ -1,425 +0,0 @@ -# PROTEUS configuration file - -# This is a comprehensive outline of all configuration options. It includes variables -# which have default values, in order to showcase the range of potential options available. -# Variable defaults are defined in `src/proteus/config/*.py` - -# Root tables should be physical, with the exception of "params" -# Software related options should go within the appropriate physical table -# For configuration see https://fwl-proteus.readthedocs.io/en/latest/config.html - -# ---------------------------------------------------- - -# The general structure is: -# [params] parameters for code execution, output files, time-stepping, convergence -# [star] stellar parameters, model selection -# [orbit] planetary orbital parameters -# [struct] planetary structure (mass, radius) -# [atmos_clim] atmosphere climate parameters, model selection -# [atmos_chem] atmosphere chemistry parameters, model selection -# [escape] escape parameters, model selection -# [interior] magma ocean model selection and parameters -# [outgas] outgassing parameters (fO2) and included volatiles -# [delivery] initial volatile inventory, and delivery model selection -# [observe] synthetic observations - -# ---------------------------------------------------- - -version = "2.0" - -# Parameters -[params] - # output files - [params.out] - path = "small_planet_cloudfree" - logging = "INFO" - plot_mod = 3 # Plotting frequency, 0: wait until completion | n: every n iterations | none: do not plot - plot_fmt = "png" # Plotting image file format, "png" or "pdf" recommended - write_mod = 1 # Write CSV frequency, 0: wait until completion | n: every n iterations - archive_mod = 5 # Archive frequency, 0: wait until completion | n: every n iterations | none: do not archive - remove_sf = false # Remove SOCRATES spectral file when simulation ends. - - # time-stepping - [params.dt] - minimum = 1e4 # absolute minimum time-step [years] - minimum_rel = 1e-5 # relative minimum time-step [dimensionless] - maximum = 1e7 # maximum time-step [yr] - initial = 3e1 # inital step size [yr] - starspec = 1e9 # interval to re-calculate the stellar spectrum [yr] - starinst = 1e1 # interval to re-calculate the instellation [yr] - method = "adaptive" # proportional | adaptive | maximum - - [params.dt.proportional] - propconst = 52.0 # Proportionality constant - - [params.dt.adaptive] - atol = 0.02 # Step size atol - rtol = 0.10 # Step size rtol - - # Termination criteria - # Set enabled=true/false in each section to enable/disable that termination criterion - [params.stop] - - # Require criteria to be satisfied twice before model will exit? - strict = false - - # required number of iterations - [params.stop.iters] - enabled = true - minimum = 5 - maximum = 9000 - - # required time constraints - [params.stop.time] - enabled = true - minimum = 1.0e3 # model will certainly run to t > minimum [yr] - maximum = 4.567e+9 # model will terminate when t > maximum [yr] - - # solidification - [params.stop.solid] - enabled = true - phi_crit = 0.01 # non-dim., model will terminate when global melt fraction < phi_crit - - # radiative equilibrium - [params.stop.radeqm] - enabled = true - atol = 0.2 # absolute tolerance [W m-2] - rtol = 1e-3 # relative tolerance - - [params.stop.escape] - enabled = true - p_stop = 5.0 # Stop surface pressure is less than this value - - # disintegration - [params.stop.disint] - enabled = false - - roche_enabled = true - offset_roche = 0 # correction to calculated Roche limit [m] - - spin_enabled = true - offset_spin = 0 # correction to calculated Breakup period [s] - - -# ---------------------------------------------------- -# Star -[star] - - # Physical parameters - mass = 1.0 # stellar mass [M_sun] - age_ini = 0.100 # model initialisation age [Gyr] - - module = "mors" - - [star.mors] - rot_pcntle = 50.0 # rotation percentile - rot_period = "none" # rotation period [days] - tracks = "spada" # evolution tracks: spada | baraffe - age_now = 4.567 # current age of star [Gyr] - spec = "stellar_spectra/Named/sun.txt" # path to stellar spectrum file - - [star.dummy] - radius = 1.0 # Constant stellar radius [R_sun] - calculate_radius = false # Calculate star radius using scaling from Teff? - Teff = 5772.0 # Star's brightness temperature [K] - -# Orbital system -[orbit] - instellation_method = 'sma' # whether to define orbit using semi major axis ('sma') or instellation flux ('inst') - instellationflux = 1.0 # instellation flux received from the planet in [Earth units] - semimajoraxis = 1.0 # initial semi-major axis of planet's orbit [AU] - eccentricity = 0.0 # initial eccentricity of planet's orbit [dimensionless] - zenith_angle = 48.19 # characteristic zenith angle [degrees] - s0_factor = 0.375 # instellation scale factor [dimensionless] - - evolve = false # whether to evolve the SMaxis and eccentricity - module = "lovepy" # module used to calculate tidal heating - - axial_period = "none" # planet's initial day length [hours]; will use orbital period if 'none' - satellite = false # include satellite (moon)? - mass_sat = 7.347e+22 # mass of satellite [kg] - semimajoraxis_sat = 3e8 # initial SMA of satellite's orbit [m] - - [orbit.dummy] - H_tide = 1e-7 # Fixed tidal power density [W kg-1] - Phi_tide = "<0.3" # Tidal heating applied when inequality locally satisfied - Imk2 = 0.0 # Fixed imaginary part of k2 love number, cannot be positive - - [orbit.lovepy] - visc_thresh = 1e9 # Minimum viscosity required for heating [Pa s] - -# Planetary structure - physics table -[struct] - mass_tot = 1.0 # M_earth - radius_int = "none" # R_earth - corefrac = 0.55 # non-dim., radius fraction - core_density = 10738.33 # Core density [kg m-3] - core_heatcap = 880.0 # Core specific heat capacity [J K-1 kg-1] - - module = "self" # self | zalmoxis - - [struct.zalmoxis] - verbose = false # verbose printing? - coremassfrac = 0.325 # core mass fraction [non-dim.] - inner_mantle_mass_fraction = 0 # inner mantle mass fraction [non-dim.] - weight_iron_frac = 0.325 # iron fraction in the planet [non-dim.] - num_levels = 150 # number of Zalmoxis radius layers - EOSchoice = "Tabulated:iron/silicate" # iron/silicate for super-Earths, water for water planets with Earth-like rocky cores - max_iterations_outer = 100 # max. iterations for the outer loop - tolerance_outer = 3e-3 # tolerance for the outer loop - max_iterations_inner = 100 # max. iterations for the inner loop - tolerance_inner = 1e-4 # tolerance for the inner loop - relative_tolerance = 1e-5 # relative tolerance for solve_ivp - absolute_tolerance = 1e-6 # absolute tolerance for solve_ivp - target_surface_pressure = 101325 # target surface pressure - pressure_tolerance = 1e9 # tolerance surface pressure - max_iterations_pressure = 200 # max. iterations for the innermost loop - pressure_adjustment_factor = 1.1 # factor for adjusting the pressure in the innermost loop - -# Atmosphere - physics table -[atmos_clim] - prevent_warming = true # do not allow the planet to heat up - surface_d = 0.01 # m, conductive skin thickness - surface_k = 2.0 # W m-1 K-1, conductive skin thermal conductivity - cloud_enabled = false # enable water cloud radiative effects - cloud_alpha = 0.0 # condensate retention fraction (1 -> fully retained) - surf_state = "fixed" # surface scheme: "mixed_layer" | "fixed" | "skin" - surf_greyalbedo = 0.1 # surface grey albedo - albedo_pl = "tests/data/integration/albedo_lookup/clear.csv" # Enforced input value of bond albedo; float (0 to 1) or str (path to CSV) - rayleigh = false # enable rayleigh scattering - tmp_minimum = 0.5 # temperature floor on solver - tmp_maximum = 5000.0 # temperature ceiling on solver - - module = "agni" # Which atmosphere module to use - - [atmos_clim.agni] - verbosity = 1 # output verbosity for agni (0:none, 1:info, 2:debug) - p_top = 1.0e-5 # bar, top of atmosphere grid pressure - p_obs = 0.02 # bar, level probed in transmission - spectral_group = "Honeyside" # which gas opacities to include - spectral_bands = "48" # how many spectral bands? - num_levels = 40 # Number of atmospheric grid levels - chemistry = "none" # "none" | "eq" - surf_material = "greybody" # surface material file for scattering - solve_energy = true # solve for energy-conserving atmosphere profile - solution_atol = 0.5 # solver absolute tolerance - solution_rtol = 0.15 # solver relative tolerance - overlap_method = "ee" # gas overlap method - surf_roughness = 1e-3 # characteristic surface roughness [m] - surf_windspeed = 2.0 # characteristic surface wind speed [m/s]. - rainout = true # include volatile condensation/evaporation aloft - latent_heat = false # include latent heat release when `rainout=true`? - oceans = true # form liquid oceans at planet surface? - convection = true # include convective heat transport, with MLT - conduction = true # include conductive heat transport, with Fourier's law - sens_heat = true # include sensible heat flux near surface, with TKE scheme - real_gas = false # use real-gas equations of state - psurf_thresh = 0.1 # bar, surface pressure where we switch to 'transparent' mode - dx_max_ini = 300.0 # initial maximum temperature step [kelvin] allowed by solver - dx_max = 35.0 # maximum temperature step [kelvin] allowed by solver - max_steps = 70 # max steps allowed by solver during each iteration - perturb_all = true # updated entire jacobian each step? - mlt_criterion = "s" # MLT convection stability criterion; (l)edoux or (s)chwarzschild - fastchem_floor = 150.0 # Minimum temperature allowed to be sent to FC - fastchem_maxiter_chem = 60000 # Maximum FC iterations (chemistry) - fastchem_maxiter_solv = 20000 # Maximum FC iterations (internal solver) - fastchem_xtol_chem = 1e-4 # FC solver tolerance (chemistry) - fastchem_xtol_elem = 1e-4 # FC solver tolerance (elemental) - ini_profile = 'isothermal' # Initial guess for temperature profile shape - ls_default = 2 # Default linesearch method (0:none, 1:gs, 2:bt) - fdo = 2 # finite-difference order (options: 2, 4) - - [atmos_clim.janus] - p_top = 1.0e-6 # bar, top of atmosphere grid pressure - p_obs = 1.0e-3 # bar, observed pressure level - spectral_group = "Honeyside" # which gas opacities to include - spectral_bands = "48" # how many spectral bands? - F_atm_bc = 0 # measure outgoing flux at: (0) TOA | (1) Surface - num_levels = 40 # Number of atmospheric grid levels - tropopause = "none" # none | skin | dynamic - overlap_method = "ee" # gas overlap method - - [atmos_clim.dummy] - gamma = 0.01 # atmosphere opacity between 0 and 1 - height_factor = 3.0 # observed height is this times the scale height - -# Volatile escape - physics table -[escape] - - module = "zephyrus" # Which escape module to use - reservoir = "outgas" # Reservoir that sets escaping gas composition - - [escape.zephyrus] - Pxuv = 5e-5 # Pressure at which XUV radiation become opaque in the planetary atmosphere [bar] - efficiency = 0.1 # Escape efficiency factor - tidal = false # Tidal contribution enabled - - [escape.dummy] - rate = 0.0 # Bulk unfractionated escape rate [kg s-1] - -# Interior - physics table -[interior] - grain_size = 0.1 # crystal settling grain size [m] - F_initial = 1e3 # Initial heat flux guess [W m-2] - radiogenic_heat = false # enable radiogenic heat production - tidal_heat = false # enable tidal heat production - rheo_phi_loc = 0.6 # Centre of rheological transition - rheo_phi_wid = 0.2 # Width of rheological transition - melting_dir = "Monteux-600" # Name of folder constaining melting curves - - - module = "spider" # Which interior module to use - - [interior.spider] - num_levels = 100 # Number of SPIDER grid levels - mixing_length = 2 # Mixing length parameterization - tolerance = 1.0e-8 # absolute solver tolerance - tolerance_rel = 1.0e-8 # relative solver tolerance - solver_type = "bdf" # SUNDIALS solver method - tsurf_atol = 20.0 # tsurf_poststep_change - tsurf_rtol = 0.02 # tsurf_poststep_change_frac - ini_entropy = 3000.0 # Surface entropy conditions [J K-1 kg-1] - ini_dsdr = -4.698e-6 # Interior entropy gradient [J K-1 kg-1 m-1] - conduction = true # enable conductive heat transfer - convection = true # enable convective heat transfer - gravitational_separation = true # enable gravitational separation - mixing = true # enable mixing - matprop_smooth_width = 1e-2 # melt-fraction window width over which to smooth material properties - - [interior.aragog] - logging = "ERROR" # Aragog log verbosity - num_levels = 50 # Number of Aragog grid levels - tolerance = 1.0e-7 # solver tolerance - initial_condition = 3 # Initial T(p); 1: linear, 2: user defined, 3: adiabat - ini_tmagma = 3300.0 # Initial magma surface temperature [K] - basal_temperature = 7000.0 # CMB temperature when initial boundary = 1 - inner_boundary_condition = 1 # 1 = core cooling model, 2 = prescribed heat flux, 3 = prescribed temperature - inner_boundary_value = 4000 # core temperature [K], if inner_boundary_condition = 3. CMB heat flux [W/m^2], if if inner_boundary_condition = 2 - conduction = true # enable conductive heat transfer - convection = true # enable convective heat transfer - gravitational_separation = false # enable gravitational separation - mixing = false # enable mixing - dilatation = false # enable dilatation source term - mass_coordinates = false # enable mass coordinates - tsurf_poststep_change = 30 # threshold of maximum change on surface temperature - event_triggering = true # enable events triggering to avoid abrupt jumps in surface temperature - bulk_modulus = 260e9 # Adiabatic bulk modulus AW-EOS parameter [Pa]. - - [interior.dummy] - ini_tmagma = 3300.0 # Initial magma surface temperature [K] - tmagma_atol = 30.0 # Max absolute Tsurf change in each step - tmagma_rtol = 0.05 # Max relative Tsurf change in each step - mantle_tliq = 2700.0 # Liquidus temperature - mantle_tsol = 1700.0 # Solidus temperature - mantle_rho = 4550.0 # Mantle density [kg m-3] - mantle_cp = 1792.0 # Mantle heat capacity [J K-1 kg-1] - H_ratio = 0.0 # Radiogenic heating [W/kg] - -# Outgassing - physics table -[outgas] - fO2_shift_IW = 4 # atmosphere/interior boundary oxidation state [log10(ΔIW)] - - module = "calliope" # Which outgassing module to use - - [outgas.calliope] - include_H2O = true # Include H2O compound - include_CO2 = true # Include CO2 compound - include_N2 = true # Include N2 compound - include_S2 = true # Include S2 compound - include_SO2 = true # Include SO2 compound - include_H2S = true # Include H2S compound - include_NH3 = true # Include NH3 compound - include_H2 = true # Include H2 compound - include_CH4 = true # Include CH4 compound - include_CO = true # Include CO compound - T_floor = 700.0 # Temperature floor applied to outgassing calculation [K]. - rtol = 0.0001 # Relative mass tolerance - xtol = 1e-06 # Absolute mass tolerance - solubility = true # Enable solubility? - - [outgas.atmodeller] - some_parameter = "some_value" - -# Volatile delivery - physics table -[delivery] - - # Radionuclide parameters - radio_tref = 4.55 # Reference age for concentrations [Gyr] - radio_K = 310.0 # ppmw of potassium (all isotopes) - radio_U = 0.031 # ppmw of uranium (all isotopes) - radio_Th = 0.124 # ppmw of thorium (all isotopes) - - # Which initial inventory to use? - initial = 'elements' # 'elements' | 'volatiles' - - # No module for accretion as of yet - module = "none" - - # Set initial volatile inventory by planetary element abundances if [initial = 'elements'] - [delivery.elements] - use_metallicity = false # whether or not to specify the elemental abundances in terms of solar metallicity - metallicity = 1000 # metallicity relative to solar metallicity - - H_oceans = 2.0 # Hydrogen inventory in units of equivalent Earth oceans - # H_ppmw = 109.0 # Hydrogen inventory in ppmw relative to mantle mass - # H_kg = 1e20 # Hydrogen inventory in kg - - CH_ratio = 1.0 # C/H mass ratio in mantle/atmosphere system - # C_ppmw = 0.0 # Carbon inventory in ppmw relative to mantle mass - # C_kg = 1e20 # Carbon inventory in kg - - NH_ratio = 0.5 # N/H mass ratio in mantle/atmosphere system - # N_ppmw = 0.5 # Nitrogen inventory in ppmw relative to mantle mass - # N_kg = 1e20 # Nitrogen inventory in kg - - SH_ratio = 2.0 # S/H mass ratio in mantle/atmosphere system - # S_ppmw = 2.0 # Sulfur inventory in ppmw relative to mantle mass - # S_kg = 1e20 # Sulfur inventory in kg - - # Set initial volatile inventory by partial pressures in atmosphere if [initial = 'volatiles'] - [delivery.volatiles] - H2O = 20.0 # partial pressure of H2O - CO2 = 30.0 # partial pressure of CO2 - N2 = 0.0 # etc. - S2 = 0.0 - SO2 = 0.0 - H2S = 0.0 - NH3 = 0.0 - H2 = 0.0 - CH4 = 0.0 - CO = 0.0 - -# Atmospheric chemistry postprocessing -[atmos_chem] - - module = "vulcan" # Atmospheric chemistry module - when = "manually" # When to run chemistry (manually, offline, online) - - # Physics flags - photo_on = true # Enable photochemistry - Kzz_on = true # Enable eddy diffusion - Kzz_const = "none" # Constant eddy diffusion coefficient (none => use profile) - moldiff_on = true # Enable molecular diffusion in the atmosphere - updraft_const = 0.0 # Set constant updraft velocity - - # Vulcan-specific atmospheric chemistry parameters - [atmos_chem.vulcan] - clip_fl = 1e-20 # Floor on stellar spectrum [erg s-1 cm-2 nm-1] - clip_vmr = 1e-10 # Neglect species with vmr < clip_vmr - make_funs = true # Generate reaction network functions - ini_mix = "profile" # Initial mixing ratios (profile, outgas) - fix_surf = false # Fixed surface mixing ratios - network = "SNCHO" # Class of chemical network to use (CHO, NCHO, SNCHO) - save_frames = true # Plot frames during iterations - yconv_cri = 0.05 # Convergence criterion, value of mixing ratios - slope_cri = 0.0001 # Convergence criterion, rate of change of mixing ratios - -# Calculate simulated observations -[observe] - - # Module with which to calculate the synthetic observables - synthesis = "none" - - [observe.platon] - downsample = 8 # Factor to downsample opacities - clip_vmr = 1e-8 # Minimum VMR for a species to be included diff --git a/input/lavatmos_run.toml b/input/lavatmos_run.toml deleted file mode 100644 index 6d32341a5..000000000 --- a/input/lavatmos_run.toml +++ /dev/null @@ -1,429 +0,0 @@ -# PROTEUS configuration file - -# This is a comprehensive outline of all configuration options. It includes variables -# which have default values, in order to showcase the range of potential options available. -# Variable defaults are defined in `src/proteus/config/*.py` - -# Root tables should be physical, with the exception of "params" -# Software related options should go within the appropriate physical table -# For configuration see https://fwl-proteus.readthedocs.io/en/latest/config.html - -# ---------------------------------------------------- - -# The general structure is: -# [params] parameters for code execution, output files, time-stepping, convergence -# [star] stellar parameters, model selection -# [orbit] planetary orbital parameters -# [struct] planetary structure (mass, radius) -# [atmos_clim] atmosphere climate parameters, model selection -# [atmos_chem] atmosphere chemistry parameters, model selection -# [escape] escape parameters, model selection -# [interior] magma ocean model selection and parameters -# [outgas] outgassing parameters (fO2) and included volatiles -# [delivery] initial volatile inventory, and delivery model selection -# [observe] synthetic observations - -# ---------------------------------------------------- - -version = "2.0" - -# Parameters -[params] - # output files - [params.out] - path = "run_lavatmos_FeO" - logging = "INFO" - plot_mod = 3 # Plotting frequency, 0: wait until completion | n: every n iterations | none: do not plot - plot_fmt = "png" # Plotting image file format, "png" or "pdf" recommended - write_mod = 1 # Write CSV frequency, 0: wait until completion | n: every n iterations - archive_mod = 5 # Archive frequency, 0: wait until completion | n: every n iterations | none: do not archive - remove_sf = false # Remove SOCRATES spectral file when simulation ends. - - # time-stepping - [params.dt] - minimum = 1e4 # absolute minimum time-step [years] - minimum_rel = 1e-5 # relative minimum time-step [dimensionless] - maximum = 1e7 # maximum time-step [yr] - initial = 3e1 # inital step size [yr] - starspec = 1e9 # interval to re-calculate the stellar spectrum [yr] - starinst = 1e1 # interval to re-calculate the instellation [yr] - method = "adaptive" # proportional | adaptive | maximum - - [params.dt.proportional] - propconst = 52.0 # Proportionality constant - - [params.dt.adaptive] - atol = 0.02 # Step size atol - rtol = 0.10 # Step size rtol - - # Termination criteria - # Set enabled=true/false in each section to enable/disable that termination criterion - [params.stop] - - # Require criteria to be satisfied twice before model will exit? - strict = false - - # required number of iterations - [params.stop.iters] - enabled = true - minimum = 5 - maximum = 9000 - - # required time constraints - [params.stop.time] - enabled = true - minimum = 1.0e3 # model will certainly run to t > minimum [yr] - maximum = 4.567e+9 # model will terminate when t > maximum [yr] - - # solidification - [params.stop.solid] - enabled = true - phi_crit = 0.01 # non-dim., model will terminate when global melt fraction < phi_crit - - # radiative equilibrium - [params.stop.radeqm] - enabled = true - atol = 0.2 # absolute tolerance [W m-2] - rtol = 1e-3 # relative tolerance - - [params.stop.escape] - enabled = true - p_stop = 5.0 # Stop surface pressure is less than this value - - # disintegration - [params.stop.disint] - enabled = false - - roche_enabled = true - offset_roche = 0 # correction to calculated Roche limit [m] - - spin_enabled = true - offset_spin = 0 # correction to calculated Breakup period [s] - - -# ---------------------------------------------------- -# Star -[star] - - # Physical parameters - mass = 1.0 # stellar mass [M_sun] - age_ini = 0.100 # model initialisation age [Gyr] - - module = "mors" - - [star.mors] - rot_pcntle = 50.0 # rotation percentile - rot_period = "none" # rotation period [days] - tracks = "spada" # evolution tracks: spada | baraffe - age_now = 4.567 # current age of star [Gyr] - spec = "stellar_spectra/Named/sun.txt" # path to stellar spectrum file - - [star.dummy] - radius = 1.0 # Constant stellar radius [R_sun] - calculate_radius = false # Calculate star radius using scaling from Teff? - Teff = 5772.0 # Star's brightness temperature [K] - -# Orbital system -[orbit] - instellation_method = 'sma' # whether to define orbit using semi major axis ('sma') or instellation flux ('inst') - instellationflux = 1.0 # instellation flux received from the planet in [Earth units] - semimajoraxis = 1.0 # initial semi-major axis of planet's orbit [AU] - eccentricity = 0.0 # initial eccentricity of planet's orbit [dimensionless] - zenith_angle = 48.19 # characteristic zenith angle [degrees] - s0_factor = 0.375 # instellation scale factor [dimensionless] - - evolve = false # whether to evolve the SMaxis and eccentricity - module = "lovepy" # module used to calculate tidal heating - - axial_period = "none" # planet's initial day length [hours]; will use orbital period if 'none' - satellite = false # include satellite (moon)? - mass_sat = 7.347e+22 # mass of satellite [kg] - semimajoraxis_sat = 3e8 # initial SMA of satellite's orbit [m] - - [orbit.dummy] - H_tide = 1e-7 # Fixed tidal power density [W kg-1] - Phi_tide = "<0.3" # Tidal heating applied when inequality locally satisfied - Imk2 = 0.0 # Fixed imaginary part of k2 love number, cannot be positive - - [orbit.lovepy] - visc_thresh = 1e9 # Minimum viscosity required for heating [Pa s] - -# Planetary structure - physics table -[struct] - mass_tot = 1.0 # M_earth - radius_int = "none" # R_earth - corefrac = 0.55 # non-dim., radius fraction - core_density = 10738.33 # Core density [kg m-3] - core_heatcap = 880.0 # Core specific heat capacity [J K-1 kg-1] - - module = "self" # self | zalmoxis - - [struct.zalmoxis] - verbose = false # verbose printing? - coremassfrac = 0.325 # core mass fraction [non-dim.] - inner_mantle_mass_fraction = 0 # inner mantle mass fraction [non-dim.] - weight_iron_frac = 0.325 # iron fraction in the planet [non-dim.] - num_levels = 150 # number of Zalmoxis radius layers - EOSchoice = "Tabulated:iron/silicate" # iron/silicate for super-Earths, water for water planets with Earth-like rocky cores - max_iterations_outer = 100 # max. iterations for the outer loop - tolerance_outer = 3e-3 # tolerance for the outer loop - max_iterations_inner = 100 # max. iterations for the inner loop - tolerance_inner = 1e-4 # tolerance for the inner loop - relative_tolerance = 1e-5 # relative tolerance for solve_ivp - absolute_tolerance = 1e-6 # absolute tolerance for solve_ivp - target_surface_pressure = 101325 # target surface pressure - pressure_tolerance = 1e9 # tolerance surface pressure - max_iterations_pressure = 200 # max. iterations for the innermost loop - pressure_adjustment_factor = 1.1 # factor for adjusting the pressure in the innermost loop - -# Atmosphere - physics table -[atmos_clim] - prevent_warming = true # do not allow the planet to heat up - surface_d = 0.01 # m, conductive skin thickness - surface_k = 2.0 # W m-1 K-1, conductive skin thermal conductivity - cloud_enabled = false # enable water cloud radiative effects - cloud_alpha = 0.0 # condensate retention fraction (1 -> fully retained) - surf_state = "fixed" # surface scheme: "mixed_layer" | "fixed" | "skin" - surf_greyalbedo = 0.1 # surface grey albedo - albedo_pl = "tests/data/integration/albedo_lookup/cloudy.csv" # Enforced input value of bond albedo; float (0 to 1) or str (path to CSV) - rayleigh = false # enable rayleigh scattering - tmp_minimum = 0.5 # temperature floor on solver - tmp_maximum = 5000.0 # temperature ceiling on solver - - module = "agni" # Which atmosphere module to use - - [atmos_clim.agni] - verbosity = 1 # output verbosity for agni (0:none, 1:info, 2:debug) - p_top = 1.0e-5 # bar, top of atmosphere grid pressure - p_obs = 0.02 # bar, level probed in transmission - spectral_group = "Honeyside" # which gas opacities to include - spectral_bands = "48" # how many spectral bands? - num_levels = 40 # Number of atmospheric grid levels - chemistry = "eq" # "none" | "eq" - surf_material = "greybody" # surface material file for scattering - solve_energy = true # solve for energy-conserving atmosphere profile - solution_atol = 0.5 # solver absolute tolerance - solution_rtol = 0.15 # solver relative tolerance - overlap_method = "ee" # gas overlap method - surf_roughness = 1e-3 # characteristic surface roughness [m] - surf_windspeed = 2.0 # characteristic surface wind speed [m/s]. - rainout = false # include volatile condensation/evaporation aloft - latent_heat = false # include latent heat release when `rainout=true`? - oceans = true # form liquid oceans at planet surface? - convection = true # include convective heat transport, with MLT - conduction = true # include conductive heat transport, with Fourier's law - sens_heat = true # include sensible heat flux near surface, with TKE scheme - real_gas = false # use real-gas equations of state - psurf_thresh = 0.1 # bar, surface pressure where we switch to 'transparent' mode - dx_max_ini = 300.0 # initial maximum temperature step [kelvin] allowed by solver - dx_max = 35.0 # maximum temperature step [kelvin] allowed by solver - max_steps = 70 # max steps allowed by solver during each iteration - perturb_all = true # updated entire jacobian each step? - mlt_criterion = "s" # MLT convection stability criterion; (l)edoux or (s)chwarzschild - fastchem_floor = 500.0 # Minimum temperature allowed to be sent to FC - fastchem_maxiter_chem = 60000 # Maximum FC iterations (chemistry) - fastchem_maxiter_solv = 20000 # Maximum FC iterations (internal solver) - fastchem_xtol_chem = 1e-4 # FC solver tolerance (chemistry) - fastchem_xtol_elem = 1e-4 # FC solver tolerance (elemental) - ini_profile = 'isothermal' # Initial guess for temperature profile shape - ls_default = 2 # Default linesearch method (0:none, 1:gs, 2:bt) - fdo = 2 # finite-difference order (options: 2, 4) - - [atmos_clim.janus] - p_top = 1.0e-6 # bar, top of atmosphere grid pressure - p_obs = 1.0e-3 # bar, observed pressure level - spectral_group = "Honeyside" # which gas opacities to include - spectral_bands = "48" # how many spectral bands? - F_atm_bc = 0 # measure outgoing flux at: (0) TOA | (1) Surface - num_levels = 40 # Number of atmospheric grid levels - tropopause = "none" # none | skin | dynamic - overlap_method = "ee" # gas overlap method - - [atmos_clim.dummy] - gamma = 0.01 # atmosphere opacity between 0 and 1 - height_factor = 3.0 # observed height is this times the scale height - -# Volatile escape - physics table -[escape] - - module = "zephyrus" # Which escape module to use - reservoir = "outgas" # Reservoir that sets escaping gas composition - - [escape.zephyrus] - Pxuv = 5e-5 # Pressure at which XUV radiation become opaque in the planetary atmosphere [bar] - efficiency = 0.1 # Escape efficiency factor - tidal = false # Tidal contribution enabled - - [escape.dummy] - rate = 0.0 # Bulk unfractionated escape rate [kg s-1] - -# Interior - physics table -[interior] - grain_size = 0.1 # crystal settling grain size [m] - F_initial = 1e3 # Initial heat flux guess [W m-2] - radiogenic_heat = false # enable radiogenic heat production - tidal_heat = false # enable tidal heat production - rheo_phi_loc = 0.6 # Centre of rheological transition - rheo_phi_wid = 0.2 # Width of rheological transition - melting_dir = "Monteux-600" # Name of folder constaining melting curves - - - module = "spider" # Which interior module to use - - [interior.spider] - num_levels = 100 # Number of SPIDER grid levels - mixing_length = 2 # Mixing length parameterization - tolerance = 1.0e-8 # absolute solver tolerance - tolerance_rel = 1.0e-8 # relative solver tolerance - solver_type = "bdf" # SUNDIALS solver method - tsurf_atol = 20.0 # tsurf_poststep_change - tsurf_rtol = 0.02 # tsurf_poststep_change_frac - ini_entropy = 3000.0 # Surface entropy conditions [J K-1 kg-1] - ini_dsdr = -4.698e-6 # Interior entropy gradient [J K-1 kg-1 m-1] - conduction = true # enable conductive heat transfer - convection = true # enable convective heat transfer - gravitational_separation = true # enable gravitational separation - mixing = true # enable mixing - matprop_smooth_width = 1e-2 # melt-fraction window width over which to smooth material properties - - [interior.aragog] - logging = "ERROR" # Aragog log verbosity - num_levels = 50 # Number of Aragog grid levels - tolerance = 1.0e-7 # solver tolerance - initial_condition = 3 # Initial T(p); 1: linear, 2: user defined, 3: adiabat - ini_tmagma = 3300.0 # Initial magma surface temperature [K] - basal_temperature = 7000.0 # CMB temperature when initial boundary = 1 - inner_boundary_condition = 1 # 1 = core cooling model, 2 = prescribed heat flux, 3 = prescribed temperature - inner_boundary_value = 4000 # core temperature [K], if inner_boundary_condition = 3. CMB heat flux [W/m^2], if if inner_boundary_condition = 2 - conduction = true # enable conductive heat transfer - convection = true # enable convective heat transfer - gravitational_separation = false # enable gravitational separation - mixing = false # enable mixing - dilatation = false # enable dilatation source term - mass_coordinates = false # enable mass coordinates - tsurf_poststep_change = 30 # threshold of maximum change on surface temperature - event_triggering = true # enable events triggering to avoid abrupt jumps in surface temperature - bulk_modulus = 260e9 # Adiabatic bulk modulus AW-EOS parameter [Pa]. - - [interior.dummy] - ini_tmagma = 3300.0 # Initial magma surface temperature [K] - tmagma_atol = 30.0 # Max absolute Tsurf change in each step - tmagma_rtol = 0.05 # Max relative Tsurf change in each step - mantle_tliq = 2700.0 # Liquidus temperature - mantle_tsol = 1700.0 # Solidus temperature - mantle_rho = 4550.0 # Mantle density [kg m-3] - mantle_cp = 1792.0 # Mantle heat capacity [J K-1 kg-1] - H_ratio = 0.0 # Radiogenic heating [W/kg] - -# Outgassing - physics table -[outgas] - fO2_shift_IW = 4 # atmosphere/interior boundary oxidation state [log10(ΔIW)] - - silicates = true - fastchempath ='/data3/leoni/LavAtmos/FastChem/fastchem3/output/' - - module = "calliope" # Which outgassing module to use - - - [outgas.calliope] - include_H2O = true # Include H2O compound - include_CO2 = true # Include CO2 compound - include_N2 = true # Include N2 compound - include_S2 = true # Include S2 compound - include_SO2 = true # Include SO2 compound - include_H2S = true # Include H2S compound - include_NH3 = true # Include NH3 compound - include_H2 = true # Include H2 compound - include_CH4 = true # Include CH4 compound - include_CO = true # Include CO compound - T_floor = 700.0 # Temperature floor applied to outgassing calculation [K]. - rtol = 0.0001 # Relative mass tolerance - xtol = 1e-06 # Absolute mass tolerance - solubility = true # Enable solubility? - - [outgas.atmodeller] - some_parameter = "some_value" - -# Volatile delivery - physics table -[delivery] - - # Radionuclide parameters - radio_tref = 4.55 # Reference age for concentrations [Gyr] - radio_K = 310.0 # ppmw of potassium (all isotopes) - radio_U = 0.031 # ppmw of uranium (all isotopes) - radio_Th = 0.124 # ppmw of thorium (all isotopes) - - # Which initial inventory to use? - initial = 'elements' # 'elements' | 'volatiles' - - # No module for accretion as of yet - module = "none" - - # Set initial volatile inventory by planetary element abundances if [initial = 'elements'] - [delivery.elements] - use_metallicity = false # whether or not to specify the elemental abundances in terms of solar metallicity - metallicity = 1000 # metallicity relative to solar metallicity - - H_oceans = 2.0 # Hydrogen inventory in units of equivalent Earth oceans - # H_ppmw = 109.0 # Hydrogen inventory in ppmw relative to mantle mass - # H_kg = 1e20 # Hydrogen inventory in kg - - CH_ratio = 1.0 # C/H mass ratio in mantle/atmosphere system - # C_ppmw = 0.0 # Carbon inventory in ppmw relative to mantle mass - # C_kg = 1e20 # Carbon inventory in kg - - NH_ratio = 0.5 # N/H mass ratio in mantle/atmosphere system - # N_ppmw = 0.5 # Nitrogen inventory in ppmw relative to mantle mass - # N_kg = 1e20 # Nitrogen inventory in kg - - SH_ratio = 2.0 # S/H mass ratio in mantle/atmosphere system - # S_ppmw = 2.0 # Sulfur inventory in ppmw relative to mantle mass - # S_kg = 1e20 # Sulfur inventory in kg - - # Set initial volatile inventory by partial pressures in atmosphere if [initial = 'volatiles'] - [delivery.volatiles] - H2O = 20.0 # partial pressure of H2O - CO2 = 30.0 # partial pressure of CO2 - N2 = 0.0 # etc. - S2 = 0.0 - SO2 = 0.0 - H2S = 0.0 - NH3 = 0.0 - H2 = 0.0 - CH4 = 0.0 - CO = 0.0 - -# Atmospheric chemistry postprocessing -[atmos_chem] - - module = "vulcan" # Atmospheric chemistry module - when = "manually" # When to run chemistry (manually, offline, online) - - # Physics flags - photo_on = true # Enable photochemistry - Kzz_on = true # Enable eddy diffusion - Kzz_const = "none" # Constant eddy diffusion coefficient (none => use profile) - moldiff_on = true # Enable molecular diffusion in the atmosphere - updraft_const = 0.0 # Set constant updraft velocity - - # Vulcan-specific atmospheric chemistry parameters - [atmos_chem.vulcan] - clip_fl = 1e-20 # Floor on stellar spectrum [erg s-1 cm-2 nm-1] - clip_vmr = 1e-10 # Neglect species with vmr < clip_vmr - make_funs = true # Generate reaction network functions - ini_mix = "profile" # Initial mixing ratios (profile, outgas) - fix_surf = false # Fixed surface mixing ratios - network = "SNCHO" # Class of chemical network to use (CHO, NCHO, SNCHO) - save_frames = true # Plot frames during iterations - yconv_cri = 0.05 # Convergence criterion, value of mixing ratios - slope_cri = 0.0001 # Convergence criterion, rate of change of mixing ratios - -# Calculate simulated observations -[observe] - - # Module with which to calculate the synthetic observables - synthesis = "none" - - [observe.platon] - downsample = 8 # Factor to downsample opacities - clip_vmr = 1e-8 # Minimum VMR for a species to be included diff --git a/input/run_lavatmos_tests.toml b/input/run_lavatmos_tests.toml deleted file mode 100644 index 7ad91375d..000000000 --- a/input/run_lavatmos_tests.toml +++ /dev/null @@ -1,429 +0,0 @@ -# PROTEUS configuration file - -# This is a comprehensive outline of all configuration options. It includes variables -# which have default values, in order to showcase the range of potential options available. -# Variable defaults are defined in `src/proteus/config/*.py` - -# Root tables should be physical, with the exception of "params" -# Software related options should go within the appropriate physical table -# For configuration see https://fwl-proteus.readthedocs.io/en/latest/config.html - -# ---------------------------------------------------- - -# The general structure is: -# [params] parameters for code execution, output files, time-stepping, convergence -# [star] stellar parameters, model selection -# [orbit] planetary orbital parameters -# [struct] planetary structure (mass, radius) -# [atmos_clim] atmosphere climate parameters, model selection -# [atmos_chem] atmosphere chemistry parameters, model selection -# [escape] escape parameters, model selection -# [interior] magma ocean model selection and parameters -# [outgas] outgassing parameters (fO2) and included volatiles -# [delivery] initial volatile inventory, and delivery model selection -# [observe] synthetic observations - -# ---------------------------------------------------- - -version = "2.0" - -# Parameters -[params] - # output files - [params.out] - path = "run_lavatmos_nosilicates" - logging = "INFO" - plot_mod = 3 # Plotting frequency, 0: wait until completion | n: every n iterations | none: do not plot - plot_fmt = "png" # Plotting image file format, "png" or "pdf" recommended - write_mod = 1 # Write CSV frequency, 0: wait until completion | n: every n iterations - archive_mod = 5 # Archive frequency, 0: wait until completion | n: every n iterations | none: do not archive - remove_sf = false # Remove SOCRATES spectral file when simulation ends. - - # time-stepping - [params.dt] - minimum = 1e4 # absolute minimum time-step [years] - minimum_rel = 1e-5 # relative minimum time-step [dimensionless] - maximum = 1e7 # maximum time-step [yr] - initial = 3e1 # inital step size [yr] - starspec = 1e9 # interval to re-calculate the stellar spectrum [yr] - starinst = 1e1 # interval to re-calculate the instellation [yr] - method = "adaptive" # proportional | adaptive | maximum - - [params.dt.proportional] - propconst = 52.0 # Proportionality constant - - [params.dt.adaptive] - atol = 0.02 # Step size atol - rtol = 0.10 # Step size rtol - - # Termination criteria - # Set enabled=true/false in each section to enable/disable that termination criterion - [params.stop] - - # Require criteria to be satisfied twice before model will exit? - strict = false - - # required number of iterations - [params.stop.iters] - enabled = true - minimum = 5 - maximum = 9000 - - # required time constraints - [params.stop.time] - enabled = true - minimum = 1.0e3 # model will certainly run to t > minimum [yr] - maximum = 4.567e+9 # model will terminate when t > maximum [yr] - - # solidification - [params.stop.solid] - enabled = true - phi_crit = 0.01 # non-dim., model will terminate when global melt fraction < phi_crit - - # radiative equilibrium - [params.stop.radeqm] - enabled = true - atol = 0.2 # absolute tolerance [W m-2] - rtol = 1e-3 # relative tolerance - - [params.stop.escape] - enabled = true - p_stop = 5.0 # Stop surface pressure is less than this value - - # disintegration - [params.stop.disint] - enabled = false - - roche_enabled = true - offset_roche = 0 # correction to calculated Roche limit [m] - - spin_enabled = true - offset_spin = 0 # correction to calculated Breakup period [s] - - -# ---------------------------------------------------- -# Star -[star] - - # Physical parameters - mass = 1.0 # stellar mass [M_sun] - age_ini = 0.100 # model initialisation age [Gyr] - - module = "mors" - - [star.mors] - rot_pcntle = 50.0 # rotation percentile - rot_period = "none" # rotation period [days] - tracks = "spada" # evolution tracks: spada | baraffe - age_now = 4.567 # current age of star [Gyr] - spec = "stellar_spectra/Named/sun.txt" # path to stellar spectrum file - - [star.dummy] - radius = 1.0 # Constant stellar radius [R_sun] - calculate_radius = false # Calculate star radius using scaling from Teff? - Teff = 5772.0 # Star's brightness temperature [K] - -# Orbital system -[orbit] - instellation_method = 'sma' # whether to define orbit using semi major axis ('sma') or instellation flux ('inst') - instellationflux = 1.0 # instellation flux received from the planet in [Earth units] - semimajoraxis = 1.0 # initial semi-major axis of planet's orbit [AU] - eccentricity = 0.0 # initial eccentricity of planet's orbit [dimensionless] - zenith_angle = 48.19 # characteristic zenith angle [degrees] - s0_factor = 0.375 # instellation scale factor [dimensionless] - - evolve = false # whether to evolve the SMaxis and eccentricity - module = "lovepy" # module used to calculate tidal heating - - axial_period = "none" # planet's initial day length [hours]; will use orbital period if 'none' - satellite = false # include satellite (moon)? - mass_sat = 7.347e+22 # mass of satellite [kg] - semimajoraxis_sat = 3e8 # initial SMA of satellite's orbit [m] - - [orbit.dummy] - H_tide = 1e-7 # Fixed tidal power density [W kg-1] - Phi_tide = "<0.3" # Tidal heating applied when inequality locally satisfied - Imk2 = 0.0 # Fixed imaginary part of k2 love number, cannot be positive - - [orbit.lovepy] - visc_thresh = 1e9 # Minimum viscosity required for heating [Pa s] - -# Planetary structure - physics table -[struct] - mass_tot = 1.0 # M_earth - radius_int = "none" # R_earth - corefrac = 0.55 # non-dim., radius fraction - core_density = 10738.33 # Core density [kg m-3] - core_heatcap = 880.0 # Core specific heat capacity [J K-1 kg-1] - - module = "self" # self | zalmoxis - - [struct.zalmoxis] - verbose = false # verbose printing? - coremassfrac = 0.325 # core mass fraction [non-dim.] - inner_mantle_mass_fraction = 0 # inner mantle mass fraction [non-dim.] - weight_iron_frac = 0.325 # iron fraction in the planet [non-dim.] - num_levels = 150 # number of Zalmoxis radius layers - EOSchoice = "Tabulated:iron/silicate" # iron/silicate for super-Earths, water for water planets with Earth-like rocky cores - max_iterations_outer = 100 # max. iterations for the outer loop - tolerance_outer = 3e-3 # tolerance for the outer loop - max_iterations_inner = 100 # max. iterations for the inner loop - tolerance_inner = 1e-4 # tolerance for the inner loop - relative_tolerance = 1e-5 # relative tolerance for solve_ivp - absolute_tolerance = 1e-6 # absolute tolerance for solve_ivp - target_surface_pressure = 101325 # target surface pressure - pressure_tolerance = 1e9 # tolerance surface pressure - max_iterations_pressure = 200 # max. iterations for the innermost loop - pressure_adjustment_factor = 1.1 # factor for adjusting the pressure in the innermost loop - -# Atmosphere - physics table -[atmos_clim] - prevent_warming = true # do not allow the planet to heat up - surface_d = 0.01 # m, conductive skin thickness - surface_k = 2.0 # W m-1 K-1, conductive skin thermal conductivity - cloud_enabled = false # enable water cloud radiative effects - cloud_alpha = 0.0 # condensate retention fraction (1 -> fully retained) - surf_state = "fixed" # surface scheme: "mixed_layer" | "fixed" | "skin" - surf_greyalbedo = 0.1 # surface grey albedo - albedo_pl = "tests/data/integration/albedo_lookup/cloudy.csv" # Enforced input value of bond albedo; float (0 to 1) or str (path to CSV) - rayleigh = false # enable rayleigh scattering - tmp_minimum = 0.5 # temperature floor on solver - tmp_maximum = 5000.0 # temperature ceiling on solver - - module = "agni" # Which atmosphere module to use - - [atmos_clim.agni] - verbosity = 1 # output verbosity for agni (0:none, 1:info, 2:debug) - p_top = 1.0e-5 # bar, top of atmosphere grid pressure - p_obs = 0.02 # bar, level probed in transmission - spectral_group = "Honeyside" # which gas opacities to include - spectral_bands = "48" # how many spectral bands? - num_levels = 40 # Number of atmospheric grid levels - chemistry = "eq" # "none" | "eq" - surf_material = "greybody" # surface material file for scattering - solve_energy = true # solve for energy-conserving atmosphere profile - solution_atol = 0.5 # solver absolute tolerance - solution_rtol = 0.15 # solver relative tolerance - overlap_method = "ee" # gas overlap method - surf_roughness = 1e-3 # characteristic surface roughness [m] - surf_windspeed = 2.0 # characteristic surface wind speed [m/s]. - rainout = false # include volatile condensation/evaporation aloft - latent_heat = false # include latent heat release when `rainout=true`? - oceans = true # form liquid oceans at planet surface? - convection = true # include convective heat transport, with MLT - conduction = true # include conductive heat transport, with Fourier's law - sens_heat = true # include sensible heat flux near surface, with TKE scheme - real_gas = false # use real-gas equations of state - psurf_thresh = 0.1 # bar, surface pressure where we switch to 'transparent' mode - dx_max_ini = 300.0 # initial maximum temperature step [kelvin] allowed by solver - dx_max = 35.0 # maximum temperature step [kelvin] allowed by solver - max_steps = 70 # max steps allowed by solver during each iteration - perturb_all = true # updated entire jacobian each step? - mlt_criterion = "s" # MLT convection stability criterion; (l)edoux or (s)chwarzschild - fastchem_floor = 500.0 # Minimum temperature allowed to be sent to FC - fastchem_maxiter_chem = 60000 # Maximum FC iterations (chemistry) - fastchem_maxiter_solv = 20000 # Maximum FC iterations (internal solver) - fastchem_xtol_chem = 1e-4 # FC solver tolerance (chemistry) - fastchem_xtol_elem = 1e-4 # FC solver tolerance (elemental) - ini_profile = 'isothermal' # Initial guess for temperature profile shape - ls_default = 2 # Default linesearch method (0:none, 1:gs, 2:bt) - fdo = 2 # finite-difference order (options: 2, 4) - - [atmos_clim.janus] - p_top = 1.0e-6 # bar, top of atmosphere grid pressure - p_obs = 1.0e-3 # bar, observed pressure level - spectral_group = "Honeyside" # which gas opacities to include - spectral_bands = "48" # how many spectral bands? - F_atm_bc = 0 # measure outgoing flux at: (0) TOA | (1) Surface - num_levels = 40 # Number of atmospheric grid levels - tropopause = "none" # none | skin | dynamic - overlap_method = "ee" # gas overlap method - - [atmos_clim.dummy] - gamma = 0.01 # atmosphere opacity between 0 and 1 - height_factor = 3.0 # observed height is this times the scale height - -# Volatile escape - physics table -[escape] - - module = "zephyrus" # Which escape module to use - reservoir = "outgas" # Reservoir that sets escaping gas composition - - [escape.zephyrus] - Pxuv = 5e-5 # Pressure at which XUV radiation become opaque in the planetary atmosphere [bar] - efficiency = 0.1 # Escape efficiency factor - tidal = false # Tidal contribution enabled - - [escape.dummy] - rate = 0.0 # Bulk unfractionated escape rate [kg s-1] - -# Interior - physics table -[interior] - grain_size = 0.1 # crystal settling grain size [m] - F_initial = 1e3 # Initial heat flux guess [W m-2] - radiogenic_heat = false # enable radiogenic heat production - tidal_heat = false # enable tidal heat production - rheo_phi_loc = 0.6 # Centre of rheological transition - rheo_phi_wid = 0.2 # Width of rheological transition - melting_dir = "Monteux-600" # Name of folder constaining melting curves - - - module = "dummy" # Which interior module to use - - [interior.spider] - num_levels = 100 # Number of SPIDER grid levels - mixing_length = 2 # Mixing length parameterization - tolerance = 1.0e-8 # absolute solver tolerance - tolerance_rel = 1.0e-8 # relative solver tolerance - solver_type = "bdf" # SUNDIALS solver method - tsurf_atol = 20.0 # tsurf_poststep_change - tsurf_rtol = 0.02 # tsurf_poststep_change_frac - ini_entropy = 3000.0 # Surface entropy conditions [J K-1 kg-1] - ini_dsdr = -4.698e-6 # Interior entropy gradient [J K-1 kg-1 m-1] - conduction = true # enable conductive heat transfer - convection = true # enable convective heat transfer - gravitational_separation = true # enable gravitational separation - mixing = true # enable mixing - matprop_smooth_width = 1e-2 # melt-fraction window width over which to smooth material properties - - [interior.aragog] - logging = "ERROR" # Aragog log verbosity - num_levels = 50 # Number of Aragog grid levels - tolerance = 1.0e-7 # solver tolerance - initial_condition = 3 # Initial T(p); 1: linear, 2: user defined, 3: adiabat - ini_tmagma = 3300.0 # Initial magma surface temperature [K] - basal_temperature = 7000.0 # CMB temperature when initial boundary = 1 - inner_boundary_condition = 1 # 1 = core cooling model, 2 = prescribed heat flux, 3 = prescribed temperature - inner_boundary_value = 4000 # core temperature [K], if inner_boundary_condition = 3. CMB heat flux [W/m^2], if if inner_boundary_condition = 2 - conduction = true # enable conductive heat transfer - convection = true # enable convective heat transfer - gravitational_separation = false # enable gravitational separation - mixing = false # enable mixing - dilatation = false # enable dilatation source term - mass_coordinates = false # enable mass coordinates - tsurf_poststep_change = 30 # threshold of maximum change on surface temperature - event_triggering = true # enable events triggering to avoid abrupt jumps in surface temperature - bulk_modulus = 260e9 # Adiabatic bulk modulus AW-EOS parameter [Pa]. - - [interior.dummy] - ini_tmagma = 3300.0 # Initial magma surface temperature [K] - tmagma_atol = 30.0 # Max absolute Tsurf change in each step - tmagma_rtol = 0.05 # Max relative Tsurf change in each step - mantle_tliq = 2700.0 # Liquidus temperature - mantle_tsol = 1700.0 # Solidus temperature - mantle_rho = 4550.0 # Mantle density [kg m-3] - mantle_cp = 1792.0 # Mantle heat capacity [J K-1 kg-1] - H_ratio = 0.0 # Radiogenic heating [W/kg] - -# Outgassing - physics table -[outgas] - fO2_shift_IW = 4 # atmosphere/interior boundary oxidation state [log10(ΔIW)] - - silicates = false - fastchempath ='/data3/leoni/LavAtmos/FastChem/fastchem3/output/' - - module = "calliope" # Which outgassing module to use - - - [outgas.calliope] - include_H2O = true # Include H2O compound - include_CO2 = true # Include CO2 compound - include_N2 = true # Include N2 compound - include_S2 = true # Include S2 compound - include_SO2 = true # Include SO2 compound - include_H2S = true # Include H2S compound - include_NH3 = true # Include NH3 compound - include_H2 = true # Include H2 compound - include_CH4 = true # Include CH4 compound - include_CO = true # Include CO compound - T_floor = 700.0 # Temperature floor applied to outgassing calculation [K]. - rtol = 0.0001 # Relative mass tolerance - xtol = 1e-06 # Absolute mass tolerance - solubility = true # Enable solubility? - - [outgas.atmodeller] - some_parameter = "some_value" - -# Volatile delivery - physics table -[delivery] - - # Radionuclide parameters - radio_tref = 4.55 # Reference age for concentrations [Gyr] - radio_K = 310.0 # ppmw of potassium (all isotopes) - radio_U = 0.031 # ppmw of uranium (all isotopes) - radio_Th = 0.124 # ppmw of thorium (all isotopes) - - # Which initial inventory to use? - initial = 'elements' # 'elements' | 'volatiles' - - # No module for accretion as of yet - module = "none" - - # Set initial volatile inventory by planetary element abundances if [initial = 'elements'] - [delivery.elements] - use_metallicity = false # whether or not to specify the elemental abundances in terms of solar metallicity - metallicity = 1000 # metallicity relative to solar metallicity - - H_oceans = 2.0 # Hydrogen inventory in units of equivalent Earth oceans - # H_ppmw = 109.0 # Hydrogen inventory in ppmw relative to mantle mass - # H_kg = 1e20 # Hydrogen inventory in kg - - CH_ratio = 1.0 # C/H mass ratio in mantle/atmosphere system - # C_ppmw = 0.0 # Carbon inventory in ppmw relative to mantle mass - # C_kg = 1e20 # Carbon inventory in kg - - NH_ratio = 0.5 # N/H mass ratio in mantle/atmosphere system - # N_ppmw = 0.5 # Nitrogen inventory in ppmw relative to mantle mass - # N_kg = 1e20 # Nitrogen inventory in kg - - SH_ratio = 2.0 # S/H mass ratio in mantle/atmosphere system - # S_ppmw = 2.0 # Sulfur inventory in ppmw relative to mantle mass - # S_kg = 1e20 # Sulfur inventory in kg - - # Set initial volatile inventory by partial pressures in atmosphere if [initial = 'volatiles'] - [delivery.volatiles] - H2O = 20.0 # partial pressure of H2O - CO2 = 30.0 # partial pressure of CO2 - N2 = 0.0 # etc. - S2 = 0.0 - SO2 = 0.0 - H2S = 0.0 - NH3 = 0.0 - H2 = 0.0 - CH4 = 0.0 - CO = 0.0 - -# Atmospheric chemistry postprocessing -[atmos_chem] - - module = "vulcan" # Atmospheric chemistry module - when = "manually" # When to run chemistry (manually, offline, online) - - # Physics flags - photo_on = true # Enable photochemistry - Kzz_on = true # Enable eddy diffusion - Kzz_const = "none" # Constant eddy diffusion coefficient (none => use profile) - moldiff_on = true # Enable molecular diffusion in the atmosphere - updraft_const = 0.0 # Set constant updraft velocity - - # Vulcan-specific atmospheric chemistry parameters - [atmos_chem.vulcan] - clip_fl = 1e-20 # Floor on stellar spectrum [erg s-1 cm-2 nm-1] - clip_vmr = 1e-10 # Neglect species with vmr < clip_vmr - make_funs = true # Generate reaction network functions - ini_mix = "profile" # Initial mixing ratios (profile, outgas) - fix_surf = false # Fixed surface mixing ratios - network = "SNCHO" # Class of chemical network to use (CHO, NCHO, SNCHO) - save_frames = true # Plot frames during iterations - yconv_cri = 0.05 # Convergence criterion, value of mixing ratios - slope_cri = 0.0001 # Convergence criterion, rate of change of mixing ratios - -# Calculate simulated observations -[observe] - - # Module with which to calculate the synthetic observables - synthesis = "none" - - [observe.platon] - downsample = 8 # Factor to downsample opacities - clip_vmr = 1e-8 # Minimum VMR for a species to be included diff --git a/input/run_tests.toml b/input/run_tests.toml index 378e430d1..1e85360b6 100644 --- a/input/run_tests.toml +++ b/input/run_tests.toml @@ -31,9 +31,9 @@ version = "2.0" [params] # output files [params.out] - path = "run_lavatmos_test_Na_SiO" + path = "run_lavatmos_test_plots" logging = "INFO" - plot_mod = 3 # Plotting frequency, 0: wait until completion | n: every n iterations | none: do not plot + plot_mod = 1 # Plotting frequency, 0: wait until completion | n: every n iterations | none: do not plot plot_fmt = "png" # Plotting image file format, "png" or "pdf" recommended write_mod = 1 # Write CSV frequency, 0: wait until completion | n: every n iterations archive_mod = 5 # Archive frequency, 0: wait until completion | n: every n iterations | none: do not archive diff --git a/src/proteus/plot/cpl_chem_atmosphere.py b/src/proteus/plot/cpl_chem_atmosphere.py index 540c1484b..f5ed27933 100644 --- a/src/proteus/plot/cpl_chem_atmosphere.py +++ b/src/proteus/plot/cpl_chem_atmosphere.py @@ -83,6 +83,7 @@ def plot_chem_atmosphere( output_dir:str, chem_module:str, plot_format="pdf", # plot from netCDF (dashed lines) key = gas+"_vmr" if key in atm_profile.keys(): + log.info(key) xarr = list(atm_profile[key]) xarr = [xarr[0]] + xarr if np.amax(xarr) >= xmin: diff --git a/src/proteus/plot/cpl_escape.py b/src/proteus/plot/cpl_escape.py index 2bc08333f..4b4e70b4a 100644 --- a/src/proteus/plot/cpl_escape.py +++ b/src/proteus/plot/cpl_escape.py @@ -44,8 +44,11 @@ def plot_escape(hf_all:pd.DataFrame, output_dir:str, plot_format="pdf") : # By element total = np.zeros(len(time)) + log.info(element_list) for e in element_list: + log.info(e) + _lw = lw if e == 'H': _lw = lw * 1.8 @@ -53,7 +56,12 @@ def plot_escape(hf_all:pd.DataFrame, output_dir:str, plot_format="pdf") : # Plot planetary inventory of this element y = np.array(hf_crop[e+"_kg_total"])/M_uval + if y.ndim == 2: + y = y[:, 0] + #log.info("mass of element: ",hf_crop[e+"_kg_total"]) + log.info(y) total += y + #log.info("total mass in elements: ",total) axt.plot(time, y, lw=_lw, ls='dotted', color=col) # Plot atmospheric inventory of this element diff --git a/src/proteus/utils/constants.py b/src/proteus/utils/constants.py index 70d942e04..6133fd9b3 100644 --- a/src/proteus/utils/constants.py +++ b/src/proteus/utils/constants.py @@ -48,7 +48,7 @@ # Supported gases vol_list = ["H2O", "CO2", "O2", "H2", "CH4", "CO", "N2", "NH3", "S2", "SO2", "H2S"] #vap_list = ["SiO", "SiO2", "MgO", "FeO2"] -vap_list = ["SiO", "SiO2", "MgO", "FeO", "Na" , "SiO"] +vap_list = ["SiO", "SiO2", "MgO", "FeO", "SiO", "Na"] gas_list = vol_list + vap_list # Supported elements From 3cb72032983fd62c97b720445f1bfaba7f89335b Mon Sep 17 00:00:00 2001 From: Leoni Janssen Date: Mon, 26 Jan 2026 11:50:18 +0100 Subject: [PATCH 06/26] added the option to th einput file that the included refractory vapour species can be set by the user --- input/run_tests.toml | 5 ++-- src/proteus/atmos_clim/agni.py | 17 +++++++++--- src/proteus/atmos_clim/common.py | 2 ++ src/proteus/config/_outgas.py | 4 +++ src/proteus/outgas/calliope.py | 2 +- src/proteus/outgas/common.py | 16 +++++++++-- src/proteus/outgas/lavatmos.py | 4 +-- src/proteus/outgas/wrapper.py | 17 +++++++++--- src/proteus/plot/cpl_chem_atmosphere.py | 1 - src/proteus/proteus.py | 16 +++++------ src/proteus/utils/constants.py | 9 ++++--- src/proteus/utils/coupler.py | 35 +++++++++++++++++-------- 12 files changed, 91 insertions(+), 37 deletions(-) diff --git a/input/run_tests.toml b/input/run_tests.toml index 1e85360b6..3224715dc 100644 --- a/input/run_tests.toml +++ b/input/run_tests.toml @@ -31,9 +31,9 @@ version = "2.0" [params] # output files [params.out] - path = "run_lavatmos_test_plots" + path = "run_lavatmos_test_vaplist" logging = "INFO" - plot_mod = 1 # Plotting frequency, 0: wait until completion | n: every n iterations | none: do not plot + plot_mod = 3 # Plotting frequency, 0: wait until completion | n: every n iterations | none: do not plot plot_fmt = "png" # Plotting image file format, "png" or "pdf" recommended write_mod = 1 # Write CSV frequency, 0: wait until completion | n: every n iterations archive_mod = 5 # Archive frequency, 0: wait until completion | n: every n iterations | none: do not archive @@ -321,6 +321,7 @@ version = "2.0" silicates = true fastchempath ='/data3/leoni/LavAtmos/FastChem/fastchem3/output/' + vaplist = ["SiO", "MgO", "FeO", "Na", "TiO"] module = "calliope" # Which outgassing module to use diff --git a/src/proteus/atmos_clim/agni.py b/src/proteus/atmos_clim/agni.py index 77630773b..9b469f7f0 100644 --- a/src/proteus/atmos_clim/agni.py +++ b/src/proteus/atmos_clim/agni.py @@ -12,7 +12,7 @@ from scipy.interpolate import PchipInterpolator from proteus.atmos_clim.common import get_radius_from_pressure, get_spfile_path -from proteus.utils.constants import gas_list +from proteus.outgas.wrapper import get_gaslist from proteus.utils.helper import UpdateStatusfile, create_tmp_folder, multiple, safe_rm from proteus.utils.logs import GetCurrentLogfileIndex, GetLogfilePath @@ -69,7 +69,11 @@ def activate_julia(dirs:dict, verbosity:int): log.debug("AGNI will log to '%s'"%logpath) -def _construct_voldict(hf_row:dict, dirs:dict): +def _construct_voldict(hf_row:dict, dirs:dict, config:Config): + + gas_list=get_gaslist(config) + + print("list of gases used by agni: ",gas_list) # get from hf_row vol_dict = {} @@ -162,7 +166,7 @@ def init_agni_atmos(dirs:dict, config:Config, hf_row:dict): log.info(f"Temporary-file working dir: {io_dir}") # composition - vol_dict = _construct_voldict(hf_row, dirs) + vol_dict = _construct_voldict(hf_row, dirs,config) # set condensation condensates = [] @@ -319,7 +323,7 @@ def update_agni_atmos(atmos, hf_row:dict, dirs:dict, config:Config): # --------------------- # Update compositions - vol_dict = _construct_voldict(hf_row, dirs) + vol_dict = _construct_voldict(hf_row, dirs,config) for g in vol_dict.keys(): atmos.gas_vmr[g][:] = vol_dict[g] atmos.gas_ovmr[g][:] = vol_dict[g] @@ -523,11 +527,14 @@ def _solve_once(atmos, config:Config): Atmosphere struct """ + #set included vapur species + gas_list=get_gaslist(config) # set temperature profile # rainout volatiles at surface rained = jl.AGNI.chemistry.calc_composition_b(atmos, config.atmos_clim.agni.oceans, False, False) + rained = bool(rained) if rained: log.info(" gases are condensing at the surface") @@ -711,6 +718,8 @@ def run_agni(atmos, loops_total:int, dirs:dict, config:Config, output["ocean_maxdepth"]= float(atmos.ocean_maxdepth) output["P_surf_clim"] = float(atmos.p_boa) / 1e5 # Calculated Psurf [bar] + gas_list=get_gaslist(config) + for g in gas_list: if g in list(atmos.gas_names): output[g+"_ocean"] = float(atmos.ocean_tot[g]) diff --git a/src/proteus/atmos_clim/common.py b/src/proteus/atmos_clim/common.py index 1ce442c7a..f7e4816c5 100644 --- a/src/proteus/atmos_clim/common.py +++ b/src/proteus/atmos_clim/common.py @@ -134,6 +134,8 @@ def read_ncdf_profile(nc_fpath:str, extra_keys:list=[]): for igas,gas in enumerate(gas_l): gas_lbl = "".join( [c.decode(encoding="utf-8") for c in gas] ).strip() out[gas_lbl+"_vmr"] = np.array(gas_x[:,igas]) + #print("Names of gases saved in AGNI output:",gas_lbl) + #print("\n Mixing ratios of gases saved in AGNI output:",out[gas_lbl+"_vmr"]) else: out[key] = np.array(ds.variables[key][:]) diff --git a/src/proteus/config/_outgas.py b/src/proteus/config/_outgas.py index 7228af88f..e341322f6 100644 --- a/src/proteus/config/_outgas.py +++ b/src/proteus/config/_outgas.py @@ -84,6 +84,9 @@ class Outgas: Parameters for CALLIOPE module. atmodeller: Atmodeller Parameters for atmodeller module. + fastchempath: path to where the fastchem directory in the lavatmos directory is located + vaplist: list of gases which are not purely from volatile species and are to be included: needs to be specified only when + lavatmos is called, otherwise the default vaplist in constants.py module is used """ fO2_shift_IW: float @@ -96,3 +99,4 @@ class Outgas: silicates: bool = field(default=True) fastchempath: str = field(default="/data3/leoni/LavAtmos/FastChem/fastchem3/output/") + vaplist: list = field(default=['SiO','SiO2','MgO','FeO']) diff --git a/src/proteus/outgas/calliope.py b/src/proteus/outgas/calliope.py index 0889bce66..2a940593c 100644 --- a/src/proteus/outgas/calliope.py +++ b/src/proteus/outgas/calliope.py @@ -317,6 +317,6 @@ def calc_surface_pressures(dirs:dict, config:Config, hf_row:dict): raise e # Get result - for k in expected_keys(): + for k in expected_keys(config): if k in solvevol_result: hf_row[k] = solvevol_result[k] diff --git a/src/proteus/outgas/common.py b/src/proteus/outgas/common.py index 757eeb66b..54122541c 100644 --- a/src/proteus/outgas/common.py +++ b/src/proteus/outgas/common.py @@ -1,15 +1,27 @@ # Shared code for outgassing wrapper from __future__ import annotations -from proteus.utils.constants import element_list, gas_list +from typing import TYPE_CHECKING +if TYPE_CHECKING: + from proteus.config import Config -def expected_keys(): +from proteus.utils.constants import element_list, vap_list, vol_list + +#from proteus.outgas.wrapper import get_gaslist + + +def expected_keys(config:Config): copy_keys = ["P_surf", "M_atm", "atm_kg_per_mol"] # reservoirs res_list = ("atm","liquid","solid","total") + if config.outgas.silicates: + gas_list = vol_list + config.outgas.vaplist + else: + gas_list = vol_list + vap_list + # gases for s in gas_list: copy_keys.append(f"{s}_bar") diff --git a/src/proteus/outgas/lavatmos.py b/src/proteus/outgas/lavatmos.py index 3e3287732..77fd16285 100644 --- a/src/proteus/outgas/lavatmos.py +++ b/src/proteus/outgas/lavatmos.py @@ -10,7 +10,7 @@ from proteus.config import Config -from proteus.utils.constants import element_list, gas_list +from proteus.utils.constants import element_list, vol_list log = logging.getLogger("fwl."+__name__) @@ -35,7 +35,7 @@ def run_lavatmos(config:Config,hf_row:dict): sys.path.insert(1, '/data3/leoni/LavAtmos') from lavatmos_goot_runner import container_lavatmos - print(element_list, gas_list) + gas_list= vol_list + config.outgas.vaplist lavatmos_dict={'P':0} #set element fractions in atmosphere for lavatmos run diff --git a/src/proteus/outgas/wrapper.py b/src/proteus/outgas/wrapper.py index 30e33b53f..b58ee2561 100644 --- a/src/proteus/outgas/wrapper.py +++ b/src/proteus/outgas/wrapper.py @@ -9,13 +9,22 @@ from proteus.outgas.calliope import calc_surface_pressures, calc_target_masses from proteus.outgas.common import expected_keys from proteus.outgas.lavatmos import run_lavatmos -from proteus.utils.constants import element_list, gas_list +from proteus.utils.constants import element_list, vap_list, vol_list if TYPE_CHECKING: from proteus.config import Config log = logging.getLogger("fwl."+__name__) +def get_gaslist(config:Config): + + if config.outgas.silicates: + gas_list = vol_list + config.outgas.vaplist + else: + gas_list = vol_list + vap_list + + return gas_list + def calc_target_elemental_inventories(dirs:dict, config:Config, hf_row:dict): """ Calculate total amount of volatile elements in the planet @@ -69,6 +78,8 @@ def run_outgassing(dirs:dict, config:Config, hf_row:dict): log.info("Solving outgassing...") + gas_list=get_gaslist(config) + # Run outgassing calculation if config.outgas.module == 'calliope': calc_surface_pressures(dirs, config, hf_row) @@ -97,7 +108,7 @@ def run_outgassing(dirs:dict, config:Config, hf_row:dict): -def run_desiccated(config:Config, hf_row:dict): +def run_desiccated(hf_row:dict,config:Config): ''' Handle desiccation of the planet. This substitutes for run_outgassing when the planet has lost its entire volatile inventory. @@ -112,6 +123,7 @@ def run_desiccated(config:Config, hf_row:dict): # if desiccated, set all gas masses to zero log.info("Desiccation has occurred - no volatiles remaining") + gas_list=get_gaslist(config) # Do not set these to zero - avoid divide by zero elsewhere in the code excepted_keys = ["atm_kg_per_mol"] @@ -141,7 +153,6 @@ def lavatmos_calliope_loop(dirs:dict,config:Config, hf_row:dict): run_outgassing(dirs, config, hf_row) print(config.outgas.silicates) if config.outgas.silicates: - print(config.outgas.fastchempath) xerr=hf_row['H2O_vmr']*0.01 log.info("error threshold on water abundance: %.6f"%xerr) err=1.0 diff --git a/src/proteus/plot/cpl_chem_atmosphere.py b/src/proteus/plot/cpl_chem_atmosphere.py index f5ed27933..540c1484b 100644 --- a/src/proteus/plot/cpl_chem_atmosphere.py +++ b/src/proteus/plot/cpl_chem_atmosphere.py @@ -83,7 +83,6 @@ def plot_chem_atmosphere( output_dir:str, chem_module:str, plot_format="pdf", # plot from netCDF (dashed lines) key = gas+"_vmr" if key in atm_profile.keys(): - log.info(key) xarr = list(atm_profile[key]) xarr = [xarr[0]] + xarr if np.amax(xarr) >= xmin: diff --git a/src/proteus/proteus.py b/src/proteus/proteus.py index 49b6176ec..b68dc8e99 100644 --- a/src/proteus/proteus.py +++ b/src/proteus/proteus.py @@ -244,7 +244,7 @@ def start(self, *, resume: bool = False, offline: bool = False): self.interior_o.ic = 1 # Create an empty initial row for helpfile - self.hf_row = ZeroHelpfileRow() + self.hf_row = ZeroHelpfileRow(self.config) # Stellar mass update_stellar_mass(self.hf_row, self.config) @@ -296,7 +296,7 @@ def start(self, *, resume: bool = False, offline: bool = False): log.info("Resuming the simulation from the disk") # Read helpfile from disk - self.hf_all = ReadHelpfileFromCSV(self.directories["output"]) + self.hf_all = ReadHelpfileFromCSV(self.directories["output"],self.config) # Check length if len(self.hf_all) <= self.loops["init_loops"] + 1: @@ -485,14 +485,14 @@ def start(self, *, resume: bool = False, offline: bool = False): # Update full helpfile if self.loops["total"] > 1: # append row - self.hf_all = ExtendHelpfile(self.hf_all, self.hf_row) + self.hf_all = ExtendHelpfile(self.hf_all, self.hf_row,self.config) else: # first iter => generate new HF from dict - self.hf_all = CreateHelpfileFromDict(self.hf_row) + self.hf_all = CreateHelpfileFromDict(self.hf_row,self.config) # Write helpfile to disk if multiple(self.loops["total"], self.config.params.out.write_mod): - WriteHelpfileToCSV(self.directories["output"], self.hf_all) + WriteHelpfileToCSV(self.directories["output"], self.hf_all,self.config) # Print info to terminal and log file PrintCurrentState(self.hf_row) @@ -523,7 +523,7 @@ def start(self, *, resume: bool = False, offline: bool = False): # Write conditions at the end of simulation log.info("Writing data") - WriteHelpfileToCSV(self.directories["output"], self.hf_all) + WriteHelpfileToCSV(self.directories["output"], self.hf_all,self.config) # Run offline chemistry if self.config.atmos_chem.when == "offline": @@ -583,7 +583,7 @@ def observe(self): # Load data from helpfile from proteus.utils.coupler import ReadHelpfileFromCSV - hf_all = ReadHelpfileFromCSV(self.directories["output"]) + hf_all = ReadHelpfileFromCSV(self.directories["output"],self.config) # Check length if len(hf_all) < 1: @@ -603,7 +603,7 @@ def offline_chemistry(self): # Load data from helpfile from proteus.utils.coupler import ReadHelpfileFromCSV - hf_all = ReadHelpfileFromCSV(self.directories["output"]) + hf_all = ReadHelpfileFromCSV(self.directories["output"],self.config) # Check length if len(hf_all) < 1: diff --git a/src/proteus/utils/constants.py b/src/proteus/utils/constants.py index 6133fd9b3..e9248a0d4 100644 --- a/src/proteus/utils/constants.py +++ b/src/proteus/utils/constants.py @@ -5,6 +5,8 @@ # Astronomical constants from __future__ import annotations +#import config file from proteus to set the vapour species list + L_sun = 3.828e+26 # W, IAU definition R_sun = 6.957e8 # m R_sun_cm = 100 * R_sun # cm @@ -46,13 +48,14 @@ B_ein = 2.5 # Supported gases +vap_list = ["SiO", "SiO2", "MgO", "FeO2"] vol_list = ["H2O", "CO2", "O2", "H2", "CH4", "CO", "N2", "NH3", "S2", "SO2", "H2S"] #vap_list = ["SiO", "SiO2", "MgO", "FeO2"] -vap_list = ["SiO", "SiO2", "MgO", "FeO", "SiO", "Na"] -gas_list = vol_list + vap_list +#vap_list = ["SiO", "SiO2", "MgO", "FeO", "Na"] +#gas_list = vol_list + vap_list # Supported elements -element_list = ["H", "O", "C", "N", "S", "Si", "Mg", "Fe", "Na", "Al", "Ti", "Ca"] +element_list = ["H", "O", "C", "N", "S", "Si", "Mg", "Fe", "Na", "Al", "Ti", "Ca", "K"] ## Constant from Zephyrus ergcm2stoWm2 = 1e-3 # convert [erg s-1 cm-2] to [W m-2] diff --git a/src/proteus/utils/coupler.py b/src/proteus/utils/coupler.py index 6c8cd3f54..1f4f26e78 100644 --- a/src/proteus/utils/coupler.py +++ b/src/proteus/utils/coupler.py @@ -19,10 +19,18 @@ import numpy as np import pandas as pd -from proteus.utils.constants import element_list, gas_list, secs_per_hour, secs_per_minute +from proteus.utils.constants import ( + element_list, + secs_per_hour, + secs_per_minute, + vap_list, + vol_list, +) from proteus.utils.helper import UpdateStatusfile, create_tmp_folder, get_proteus_dir, safe_rm from proteus.utils.plot import sample_times +#from proteus.outgas.wrapper import get_gaslist + if TYPE_CHECKING: from proteus.config import Config @@ -448,7 +456,7 @@ def CreateLockFile(output_dir:str): fp.write("Removing this file will be interpreted by PROTEUS as a request to stop the simulation loop\n") return keepalive_file -def GetHelpfileKeys(): +def GetHelpfileKeys(config:Config): ''' Variables to be held in the helpfile. @@ -517,6 +525,11 @@ def GetHelpfileKeys(): "M_atm", "P_surf", "atm_kg_per_mol", # [kg], [bar], [kg mol-1] ] + if config.outgas.silicates: + gas_list = vol_list + config.outgas.vaplist + else: + gas_list = vol_list + vap_list + # gases from outgassing for s in gas_list: keys.append(s+"_mol_atm") @@ -560,48 +573,48 @@ def GetHelpfileKeys(): return keys -def CreateHelpfileFromDict(d:dict): +def CreateHelpfileFromDict(d:dict,config:Config): ''' Create helpfile to hold output variables. ''' log.debug("Creating new helpfile from dict") - return pd.DataFrame([d], columns=GetHelpfileKeys(), dtype=float) + return pd.DataFrame([d], columns=GetHelpfileKeys(config), dtype=float) -def ZeroHelpfileRow(): +def ZeroHelpfileRow(config:Config): ''' Get a dictionary with same keys as helpfile but with values of zero ''' out = {} - for k in GetHelpfileKeys(): + for k in GetHelpfileKeys(config): out[k] = 0.0 return out -def ExtendHelpfile(current_hf:pd.DataFrame, new_row:dict): +def ExtendHelpfile(current_hf:pd.DataFrame, new_row:dict,config:Config): ''' Extend helpfile with new row of variables ''' log.debug("Extending helpfile with new row") # validate keys - missing_keys = set(GetHelpfileKeys()) - set(new_row.keys()) + missing_keys = set(GetHelpfileKeys(config)) - set(new_row.keys()) if len(missing_keys)>0: raise Exception("There are mismatched keys in helpfile: %s"%missing_keys) # convert row to df - new_row = pd.DataFrame([new_row], columns=GetHelpfileKeys(), dtype=float) + new_row = pd.DataFrame([new_row], columns=GetHelpfileKeys(config), dtype=float) # concatenate and return return pd.concat([current_hf, new_row], ignore_index=True) -def WriteHelpfileToCSV(output_dir:str, current_hf:pd.DataFrame): +def WriteHelpfileToCSV(output_dir:str, current_hf:pd.DataFrame,config:Config): ''' Write helpfile to a CSV file ''' log.debug("Writing helpfile to CSV file") # check for invalid or missing keys - difference = set(GetHelpfileKeys()) - set(current_hf.keys()) + difference = set(GetHelpfileKeys(config)) - set(current_hf.keys()) if len(difference) > 0: raise Exception("There are mismatched keys in helpfile: "+str(difference)) From d40c26b4cb76ac528f84fc7a888d525143b017e9 Mon Sep 17 00:00:00 2001 From: Leoni Janssen Date: Tue, 27 Jan 2026 16:52:49 +0100 Subject: [PATCH 07/26] fixed bug geerated by plotting routine when running models with atomic species in the atmosphere and added a new plotting routine which allows comparison of TPS at different time steps between two models --- input/run_tests.toml | 6 +- src/proteus/cli.py | 1 - src/proteus/plot/compar_atmosphere_models.py | 359 +++++++++++++++++++ src/proteus/plot/cpl_global.py | 4 +- 4 files changed, 365 insertions(+), 5 deletions(-) create mode 100644 src/proteus/plot/compar_atmosphere_models.py diff --git a/input/run_tests.toml b/input/run_tests.toml index 3224715dc..9e6e53bea 100644 --- a/input/run_tests.toml +++ b/input/run_tests.toml @@ -31,7 +31,7 @@ version = "2.0" [params] # output files [params.out] - path = "run_lavatmos_test_vaplist" + path = "run_lavatmos_test_iron_species" logging = "INFO" plot_mod = 3 # Plotting frequency, 0: wait until completion | n: every n iterations | none: do not plot plot_fmt = "png" # Plotting image file format, "png" or "pdf" recommended @@ -185,7 +185,7 @@ version = "2.0" cloud_alpha = 0.0 # condensate retention fraction (1 -> fully retained) surf_state = "fixed" # surface scheme: "mixed_layer" | "fixed" | "skin" surf_greyalbedo = 0.1 # surface grey albedo - albedo_pl = "tests/data/integration/albedo_lookup/cloudy.csv" # Enforced input value of bond albedo; float (0 to 1) or str (path to CSV) + albedo_pl = 0.1 # Enforced input value of bond albedo; float (0 to 1) or str (path to CSV) rayleigh = false # enable rayleigh scattering tmp_minimum = 0.5 # temperature floor on solver tmp_maximum = 5000.0 # temperature ceiling on solver @@ -321,7 +321,7 @@ version = "2.0" silicates = true fastchempath ='/data3/leoni/LavAtmos/FastChem/fastchem3/output/' - vaplist = ["SiO", "MgO", "FeO", "Na", "TiO"] + vaplist = ["SiO", "Fe", "FeO"] module = "calliope" # Which outgassing module to use diff --git a/src/proteus/cli.py b/src/proteus/cli.py index dd9bde532..1d104ea46 100644 --- a/src/proteus/cli.py +++ b/src/proteus/cli.py @@ -101,7 +101,6 @@ def plot(plots, config_path: Path): cli.add_command(plot) - # ---------------- # 'start' command # ---------------- diff --git a/src/proteus/plot/compar_atmosphere_models.py b/src/proteus/plot/compar_atmosphere_models.py new file mode 100644 index 000000000..64abb3918 --- /dev/null +++ b/src/proteus/plot/compar_atmosphere_models.py @@ -0,0 +1,359 @@ +#This routine needs to be called via python3 src/proteus/plot/compar_atmosphere_models.py. +#then it needs the folders for outputdir1 and outputdir 2 in the terminal as +#sys.argv[1] and sys.argv[2]. + +from __future__ import annotations + +import glob +import logging +import os +import sys +from typing import TYPE_CHECKING + +import matplotlib as mpl +import matplotlib.pyplot as plt +import numpy as np +from cmcrameri import cm +from matplotlib.ticker import LogLocator, MultipleLocator +from mpl_toolkits.axes_grid1 import make_axes_locatable + +from proteus.utils.plot import sample_times + +if TYPE_CHECKING: + pass + +log = logging.getLogger("fwl."+__name__) + + +def read_ncdf_profile(nc_fpath:str, extra_keys:list=[]): + """Read data from atmosphere NetCDF output file. + + Automatically reads pressure (p), temperature (t), radius (z) arrays with + cell-centre (N) and cell-edge (N+1) values interleaved into a single combined array of + length (2*N+1). + + Extra keys can be read-in using the extra_keys parameter. These will be stored with + the same dimensions as in the NetCDF file. + + Parameters + ---------- + nc_fpath : str + Path to NetCDF file. + + extra_keys : list + List of extra keys (strings) to read from the file. + + Returns + ---------- + out : dict + Dictionary containing numpy arrays of data from the file. + """ + + import netCDF4 as nc + + # open file + if not os.path.isfile(nc_fpath): + log.error(f"Could not find NetCDF file '{nc_fpath}'") + return None + ds = nc.Dataset(nc_fpath) + + p = np.array(ds.variables["p"][:]) + pl = np.array(ds.variables["pl"][:]) + + t = np.array(ds.variables["tmp"][:]) + tl = np.array(ds.variables["tmpl"][:]) + + rp = float(ds.variables["planet_radius"][0]) + if "z" in ds.variables.keys(): + # probably from JANUS, which stores heights + z = np.array(ds.variables["z"][:]) + zl = np.array(ds.variables["zl"][:]) + r = np.array(z) + rp + rl = np.array(zl) + rp + else: + # probably from AGNI, which stores radii + r = np.array(ds.variables["r"][:]) + rl = np.array(ds.variables["rl"][:]) + z = np.array(r) - rp + zl = np.array(rl) - rp + + nlev_c = len(p) + + # read pressure, temperature, height data into dictionary values + out = {} + out["p"] = [pl[0]] + out["t"] = [tl[0]] + out["z"] = [zl[0]] + out["r"] = [rl[0]] + for i in range(nlev_c): + out["p"].append(p[i]) + out["p"].append(pl[i+1]) + + out["t"].append(t[i]) + out["t"].append(tl[i+1]) + + out["z"].append(z[i]) + out["z"].append(zl[i+1]) + + out["r"].append(r[i]) + out["r"].append(rl[i+1]) + + # flags + for fk in ("transparent", "solved", "converged"): + if fk in ds.variables.keys(): + out[fk] = ncdf_flag_to_bool(ds.variables[fk]) + else: + out[fk] = False # if not available + + # Read extra keys + for key in extra_keys: + + # Check that key exists + if key not in ds.variables.keys(): + log.error(f"Could not read '{key}' from NetCDF file") + continue + + # Reading composition + if key == "x_gas": + + gas_l = ds.variables["gases"][:] # names (bytes matrix) + gas_x = ds.variables["x_gas"][:] # vmrs (float matrix) + + # get data for each gas + for igas,gas in enumerate(gas_l): + gas_lbl = "".join( [c.decode(encoding="utf-8") for c in gas] ).strip() + out[gas_lbl+"_vmr"] = np.array(gas_x[:,igas]) + + else: + out[key] = np.array(ds.variables[key][:]) + + # close file + ds.close() + + # convert to np arrays + for key in out.keys(): + out[key] = np.array(out[key], dtype=float) + + return out + +def ncdf_flag_to_bool(var)->bool: + '''Convert NetCDF flag (y/n) to Python bool (true/false)''' + v = str(var[0].tobytes().decode()).lower() + + # check against expected + if v == 'y': + return True + elif v == 'n': + return False + else: + raise ValueError(f"Could not parse NetCDF atmos flag variable \n {var}") + +def read_2model_data(output_dir1:str, output_dir2:str, extension, tmin, nsamp, extra_keys=[]): + """ + Read all p,t,z profiles from NetCDF files in a PROTEUS output folder. + """ + + plot_times1, _1 = sample_output(output_dir1, extension, tmin, nsamp) + plot_times2, _2 = sample_output(output_dir2, extension, tmin, nsamp) + + print("printing times") + print(plot_times1[0]) + print(plot_times1[-1]) + + profiles1 = [read_ncdf_profile(os.path.join(output_dir1, "data", "%.0f_atm.nc"%t), + extra_keys=extra_keys) for t in plot_times1] + + profiles2 = [read_ncdf_profile(os.path.join(output_dir2, "data", "%.0f_atm.nc"%t), + extra_keys=extra_keys) for t in plot_times2] + + + if None in profiles2: + log.warning("One or more NetCDF files could not be found") + if os.path.exists(os.path.join(output_dir2,"data","data.tar")): + log.warning("You may need to extract archived data files") + return + if None in profiles1: + log.warning("One or more NetCDF files could not be found") + if os.path.exists(os.path.join(output_dir1,"data","data.tar")): + log.warning("You may need to extract archived data files") + return + + return plot_times1,plot_times2,profiles1, profiles2 + + + +def sample_output(output_dir, extension:str = "_atm.nc", tmin:float = 1.0, nsamp:int=8): + + """ + Sample output files from a model run based on their time stamps. + + This function searches the `/data` directory for files whose + names end with the given extension and whose base name is an integer + time stamp. It then selects up to `nsamp` representative output times + greater than or equal to `tmin`, using `sample_times`, and returns the + corresponding times and file paths. + + If no matching files are found, the function returns empty lists. If an + archive exists in the data directory, an error is logged indicating that + the archive should be extracted first. + + Parameters + ---------- + output_dir : str + Path to the model output directory containing a `data/` subdirectory. + extension : str, optional + File extension used to identify output files (default: "_atm.nc"). + tmin : float, optional + Minimum time to consider when sampling outputs (default: 1.0). + nsamp : int, optional + Number of output times to sample (default: 8). + + Returns + ------- + out_t : list + List of sampled output times. + out_f : list + List of file paths corresponding to the sampled times. + """ + + files = glob.glob(os.path.join(output_dir+"/data", "*"+extension)) + + # No files found? + if len(files) < 1: + log.error("No output files found, check if arxiv exists and Extract it.") + + # Return empty + return [], [] + + # get times + times = [int(f.split("/")[-1].split(extension)[0]) for f in files] + + out_t, out_i = sample_times(times, nsamp, tmin=tmin) + out_f = [files[i] for i in out_i] + + # return times and file paths + return out_t, out_f + + +def plot_atmosphere_comparison(output_dir1, output_dir2, extension="_atm.nc", tmin=1e4, nsamp=5, plot_format="pdf"): + + """ + Compare atmospheric temperature–pressure profiles from two model runs. + + This function reads atmospheric output files from two model output + directories, samples representative times from each run, and produces + a single plot comparing their temperature–pressure profiles. Profiles + from the first model are plotted with solid lines, while profiles from + the second model are plotted with dashed lines. Line colour encodes the + simulation time using a logarithmic colour scale. + + The resulting figure is saved to the `plots/` subdirectory of + `output_dir1`. + + Parameters + ---------- + output_dir1 : str + Path to the first model output directory. + output_dir2 : str + Path to the second model output directory. + extension : str, optional + File extension used to identify atmospheric output files + (default: "_atm.nc"). + tmin : float, optional + Minimum simulation time (in years) to consider when sampling outputs + (default: 1e4). + nsamp : int, optional + Number of time samples to plot from each model (default: 5). + plot_format : str, optional + File format for the saved plot (e.g., "pdf", "png") + (default: "pdf"). + + Returns + ------- + None + The function produces and saves a plot but does not return a value. + """ + + + plottimes1,plottimes2,profiles1,profiles2 = read_2model_data(output_dir1,output_dir2, extension, tmin, nsamp) + t1=int(str(plottimes1[0])) + t2=int(str(plottimes1[-1])) + print(plottimes1) + print(plottimes2) + + #if len(times1) < 2: + # log.warning("Insufficient data to make plot_atmosphere_cbar") + # return + + log.info("Plot atmosphere temperatures colourbar") + + norm = mpl.colors.LogNorm(vmin=max(t1,1), vmax=t2) + sm = plt.cm.ScalarMappable(cmap=cm.batlowK_r, norm=norm) + sm.set_array([]) + + # Initialise plot + scale = 1.1 + alpha = 0.6 + fig,ax = plt.subplots(1,1,figsize=(5*scale,4*scale)) + ax.set_ylabel("Pressure [bar]") + ax.set_xlabel("Temperature [K]") + ax.invert_yaxis() + ax.set_yscale("log") + + tmp_max = 1000.0 + prs_max = 1.0 + for i, t in enumerate( plottimes1 ): + prof1 = profiles1[i] + + + color = sm.to_rgba(t) + tmp1 = prof1["t"] + prs1 = prof1["p"]/1e5 + + tmp_max = max(tmp_max, np.amax(tmp1)) + prs_max = max(prs_max, np.amax(prs1)) + + ax.plot(tmp1, prs1, color=color, linestyle='-', alpha=alpha, zorder=3) + + for i, t in enumerate( plottimes2 ): + prof2 = profiles2[i] + + + color = sm.to_rgba(t) + + tmp2 = prof2["t"] + prs2 = prof2["p"]/1e5 + + tmp_max = max(tmp_max, np.amax(tmp2)) + prs_max = max(prs_max, np.amax(prs2)) + + ax.plot(tmp2, prs2, color=color, linestyle='--', alpha=alpha, zorder=3) + + # Grid + ax.grid(alpha=0.2, zorder=2) + ax.set_xlim(0,tmp_max+100) + ax.xaxis.set_minor_locator(MultipleLocator(base=250)) + + ax.set_ylim(bottom=prs_max, top=np.amin(prs1)) + ax.yaxis.set_major_locator(LogLocator()) + + # Plot colourbar + divider = make_axes_locatable(ax) + cax = divider.append_axes('right', size='5%', pad=0.05) + cbar = fig.colorbar(sm, cax=cax, orientation='vertical') + cbar.set_label("Time [yr]") + + # Save plot + fname = os.path.join(output_dir1,"plots","plot_atmosphere_comparison.%s"%plot_format) + fig.savefig(fname, bbox_inches='tight', dpi=200) + + + + + +if __name__ == "__main__": + + output_dir1=sys.argv[1] + output_dir2=sys.argv[2] + + plot_atmosphere_comparison(output_dir1, output_dir2, tmin=1e4, extension="_atm.nc", nsamp=5, plot_format="pdf") diff --git a/src/proteus/plot/cpl_global.py b/src/proteus/plot/cpl_global.py index 3530f04d3..d68c76212 100644 --- a/src/proteus/plot/cpl_global.py +++ b/src/proteus/plot/cpl_global.py @@ -9,7 +9,8 @@ import numpy as np import pandas as pd -from proteus.utils.constants import gas_list +#from proteus.utils.constants import gas_list +from proteus.outgas.wrapper import get_gaslist from proteus.utils.plot import get_colour, latexify if TYPE_CHECKING: @@ -53,6 +54,7 @@ def plot_global(hf_all: pd.DataFrame, output_dir: str, config: Config, vol_mol_tot = {} # Moles in total vol_intpart = {} # Partitioning into int + gas_list=get_gaslist(config) for vol in gas_list: # Check vmr for presence this_vmr = np.array(hf[vol+"_vmr"]) From 0d723fbdc29d2a1d8f8a30931d42f387aaf63001 Mon Sep 17 00:00:00 2001 From: Leoni Janssen Date: Wed, 28 Jan 2026 18:10:26 +0100 Subject: [PATCH 08/26] added a plotting routine where the temperature structures of two different runs are compared at similar timesteps --- input/run_tests.toml | 4 +- src/proteus/cli.py | 1 - src/proteus/plot/compar_atmosphere_models.py | 85 ++++++++++++++++---- 3 files changed, 71 insertions(+), 19 deletions(-) diff --git a/input/run_tests.toml b/input/run_tests.toml index 9e6e53bea..4a82d4ec7 100644 --- a/input/run_tests.toml +++ b/input/run_tests.toml @@ -31,7 +31,7 @@ version = "2.0" [params] # output files [params.out] - path = "run_lavatmos_test_iron_species" + path = "run_lavatmos_alkalis_iron_SiO" logging = "INFO" plot_mod = 3 # Plotting frequency, 0: wait until completion | n: every n iterations | none: do not plot plot_fmt = "png" # Plotting image file format, "png" or "pdf" recommended @@ -321,7 +321,7 @@ version = "2.0" silicates = true fastchempath ='/data3/leoni/LavAtmos/FastChem/fastchem3/output/' - vaplist = ["SiO", "Fe", "FeO"] + vaplist = ["SiO", "Fe", "FeO", "Na", "K"] module = "calliope" # Which outgassing module to use diff --git a/src/proteus/cli.py b/src/proteus/cli.py index 1d104ea46..7611e859f 100644 --- a/src/proteus/cli.py +++ b/src/proteus/cli.py @@ -45,7 +45,6 @@ required=True, ) - @click.group() @click.version_option(version=proteus_version) def cli(): diff --git a/src/proteus/plot/compar_atmosphere_models.py b/src/proteus/plot/compar_atmosphere_models.py index 64abb3918..2d23ac224 100644 --- a/src/proteus/plot/compar_atmosphere_models.py +++ b/src/proteus/plot/compar_atmosphere_models.py @@ -17,6 +17,7 @@ from matplotlib.ticker import LogLocator, MultipleLocator from mpl_toolkits.axes_grid1 import make_axes_locatable +from proteus.utils.helper import find_nearest from proteus.utils.plot import sample_times if TYPE_CHECKING: @@ -136,6 +137,32 @@ def read_ncdf_profile(nc_fpath:str, extra_keys:list=[]): return out +def compare_times(times,plottimes): + + # get samples on log-time scale + sample_t = [] + sample_i = [] + for s in plottimes: # Sample on log-scale + if s in times: + sample_t.append(int(s)) + print('time in list',s) + else: + print('time not in list') + remaining = [int(t) for t in set(times) - set(plottimes)] + if len(remaining) == 0: + break + # Get next nearest time + val,_ = find_nearest(remaining,s) + print('nearest value found',val) + sample_t.append(int(val)) + + # Get the index of this time in the original array + _,idx = find_nearest(times,val) + sample_i.append(int(idx)) + print(sample_t, sample_i) + + return sample_t, sample_i + def ncdf_flag_to_bool(var)->bool: '''Convert NetCDF flag (y/n) to Python bool (true/false)''' v = str(var[0].tobytes().decode()).lower() @@ -151,20 +178,49 @@ def ncdf_flag_to_bool(var)->bool: def read_2model_data(output_dir1:str, output_dir2:str, extension, tmin, nsamp, extra_keys=[]): """ Read all p,t,z profiles from NetCDF files in a PROTEUS output folder. + compare times at which to plot the output between the two folders and make sure that they agree """ - plot_times1, _1 = sample_output(output_dir1, extension, tmin, nsamp) - plot_times2, _2 = sample_output(output_dir2, extension, tmin, nsamp) + times1, plot_times1, _1 = sample_output(output_dir1, extension, tmin, nsamp) + times2, plot_times2, _2 = sample_output(output_dir2, extension, tmin, nsamp) + + + #set new array bound for the time arrays from two runs: same lower bound (higher minimum ) and same upper bound (lower maximum) + lower_bound = max(np.array(plot_times1).min(), np.array(plot_times2).min()) # higher minimum + upper_bound = min(np.array(plot_times1).max(), np.array(plot_times2).max()) # lower maximum + + #times1 = np.clip(times1, lower_bound, upper_bound) + #times2 = np.clip(times2, lower_bound, upper_bound) + + #check that values in array are not out of bounds + for name, arr in {"a": plot_times1, "b": plot_times2}.items(): + mask_low = arr < lower_bound + mask_high = arr > upper_bound + + if np.any(mask_low | mask_high): + if name == "a": + plot_times1[mask_low] = plot_times2[mask_low] + plot_times1[mask_high] = plot_times2[mask_high] + else: + plot_times2[mask_low] = plot_times1[mask_low] + plot_times2[mask_high] = plot_times1[mask_high] + + # replace only the remaining (in-bounds) values in times 2 to have the same array as in times 1 + mask2 = (plot_times2 < lower_bound) | (plot_times2 > upper_bound) + # replace only the remaining (in-bounds) values + plot_times2[~mask2] = plot_times1[~mask2] + + #now find nearest value + + final_times1,final_indices1=compare_times(times1,plot_times1) + final_times2,final_indices2=compare_times(times2,plot_times2) - print("printing times") - print(plot_times1[0]) - print(plot_times1[-1]) profiles1 = [read_ncdf_profile(os.path.join(output_dir1, "data", "%.0f_atm.nc"%t), - extra_keys=extra_keys) for t in plot_times1] + extra_keys=extra_keys) for t in final_times1] profiles2 = [read_ncdf_profile(os.path.join(output_dir2, "data", "%.0f_atm.nc"%t), - extra_keys=extra_keys) for t in plot_times2] + extra_keys=extra_keys) for t in final_times2] if None in profiles2: @@ -178,7 +234,7 @@ def read_2model_data(output_dir1:str, output_dir2:str, extension, tmin, nsamp, e log.warning("You may need to extract archived data files") return - return plot_times1,plot_times2,profiles1, profiles2 + return final_times1,final_times2,profiles1, profiles2 @@ -227,12 +283,14 @@ def sample_output(output_dir, extension:str = "_atm.nc", tmin:float = 1.0, nsamp # get times times = [int(f.split("/")[-1].split(extension)[0]) for f in files] + #print(times) out_t, out_i = sample_times(times, nsamp, tmin=tmin) out_f = [files[i] for i in out_i] # return times and file paths - return out_t, out_f + return np.array(times),np.array(out_t), np.array(out_f) + def plot_atmosphere_comparison(output_dir1, output_dir2, extension="_atm.nc", tmin=1e4, nsamp=5, plot_format="pdf"): @@ -275,15 +333,10 @@ def plot_atmosphere_comparison(output_dir1, output_dir2, extension="_atm.nc", tm """ - plottimes1,plottimes2,profiles1,profiles2 = read_2model_data(output_dir1,output_dir2, extension, tmin, nsamp) + plottimes1, plottimes2, profiles1, profiles2 = read_2model_data(output_dir1,output_dir2, extension, tmin, nsamp) t1=int(str(plottimes1[0])) t2=int(str(plottimes1[-1])) - print(plottimes1) - print(plottimes2) - #if len(times1) < 2: - # log.warning("Insufficient data to make plot_atmosphere_cbar") - # return log.info("Plot atmosphere temperatures colourbar") @@ -345,7 +398,7 @@ def plot_atmosphere_comparison(output_dir1, output_dir2, extension="_atm.nc", tm # Save plot fname = os.path.join(output_dir1,"plots","plot_atmosphere_comparison.%s"%plot_format) - fig.savefig(fname, bbox_inches='tight', dpi=200) + fig.savefig(fname, bbox_inches='tight', dpi=300) From f58aba7e0d632f10727da19dbedffa89e90215c0 Mon Sep 17 00:00:00 2001 From: Leoni Janssen Date: Tue, 10 Feb 2026 11:30:02 +0100 Subject: [PATCH 09/26] implemented lavatmos feed back of fO2 to calliope --- input/run_tests.toml | 6 +- src/proteus/outgas/calliope.py | 8 +- src/proteus/outgas/lavatmos.py | 273 +++++++++++- src/proteus/outgas/wrapper.py | 8 +- src/proteus/plot/compar_atmosphere_models.py | 99 ++++- src/proteus/plot/cpl_atmosphere.py | 4 +- src/proteus/plot/cpl_chem_atmosphere.py | 35 +- .../compar_atmosphere_models.py | 414 ++++++++++++++++++ src/proteus/proteus.py | 14 +- src/proteus/utils/plot.py | 1 + 10 files changed, 821 insertions(+), 41 deletions(-) create mode 100644 src/proteus/post_processing/compar_atmosphere_models.py diff --git a/input/run_tests.toml b/input/run_tests.toml index 4a82d4ec7..0d4b4d13d 100644 --- a/input/run_tests.toml +++ b/input/run_tests.toml @@ -31,7 +31,7 @@ version = "2.0" [params] # output files [params.out] - path = "run_lavatmos_alkalis_iron_SiO" + path = "test_1_iteration_Si_species" logging = "INFO" plot_mod = 3 # Plotting frequency, 0: wait until completion | n: every n iterations | none: do not plot plot_fmt = "png" # Plotting image file format, "png" or "pdf" recommended @@ -320,8 +320,8 @@ version = "2.0" fO2_shift_IW = 4 # atmosphere/interior boundary oxidation state [log10(ΔIW)] silicates = true - fastchempath ='/data3/leoni/LavAtmos/FastChem/fastchem3/output/' - vaplist = ["SiO", "Fe", "FeO", "Na", "K"] + fastchempath = '/data3/leoni/LavAtmos/FastChem/fastchem3/output/' + vaplist = ["SiO","SiO2","Si"]#, "Na", "K", "Ti", "TiO", "TiO2" , "Mg", "MgO", "Al", "HAlO2"] module = "calliope" # Which outgassing module to use diff --git a/src/proteus/outgas/calliope.py b/src/proteus/outgas/calliope.py index 2a940593c..1068f33e6 100644 --- a/src/proteus/outgas/calliope.py +++ b/src/proteus/outgas/calliope.py @@ -45,7 +45,13 @@ def construct_options(dirs:dict, config:Config, hf_row:dict): # Surface properties solvevol_inp["T_magma"] = hf_row["T_magma"] - solvevol_inp['fO2_shift_IW'] = config.outgas.fO2_shift_IW + + if hf_row['log10_fO2']: + solvevol_inp['fO2_shift_IW'] = hf_row['fO2_shift'] + print('oxygen fugacity from lavatmos') + else: + solvevol_inp['fO2_shift_IW'] = config.outgas.fO2_shift_IW + print('oxygen fugacity from input file') # Volatile inventory for s in vol_list: diff --git a/src/proteus/outgas/lavatmos.py b/src/proteus/outgas/lavatmos.py index 77fd16285..35666f73b 100644 --- a/src/proteus/outgas/lavatmos.py +++ b/src/proteus/outgas/lavatmos.py @@ -4,6 +4,7 @@ import logging from typing import TYPE_CHECKING +import numpy as np import pandas as pd if TYPE_CHECKING: @@ -14,6 +15,200 @@ log = logging.getLogger("fwl."+__name__) +class Species_db(object): + + def __init__(self, name, fc_name, weight): + + self.name = name + self.fc_name = fc_name # designation in Fastchem + self.weight = weight # weight in AMU or g/mol + + +species_lib = {} + +# neutral molecules +species_lib["CO2"] = Species_db(name="CO2", fc_name="C1O2", weight=44.01) +species_lib["H2O"] = Species_db(name="H2O", fc_name="H2O1", weight=18.0153) +species_lib["CO"] = Species_db(name="CO", fc_name="C1O1", weight=28.01) +species_lib["O2"] = Species_db(name="O2", fc_name="O2", weight=31.9988) +species_lib["CH4"] = Species_db(name="CH4", fc_name="C1H4", weight=16.04) +species_lib["HCN"] = Species_db(name="HCN", fc_name="H1C1N1", weight=27.0253) +species_lib["NH3"] = Species_db(name="NH3", fc_name="N1H3", weight=17.031) +species_lib["H2S"] = Species_db(name="H2S", fc_name="H2S1", weight=34.081) +species_lib["PH3"] = Species_db(name="PH3", fc_name="P1H3", weight=33.99758) +species_lib["O3"] = Species_db(name="O3", fc_name="O3", weight=47.9982) +species_lib["O3_IR"] = Species_db(name="O3_IR", fc_name="O3", weight=47.9982) +species_lib["O3_UV"] = Species_db(name="O3_UV", fc_name="O3", weight=47.9982) +species_lib["NO"] = Species_db(name="NO", fc_name="N1O1", weight=30.01) +species_lib["SO2"] = Species_db(name="SO2", fc_name="S1O2", weight=64.066) +species_lib["HS"] = Species_db(name="HS", fc_name="H1S1", weight=33.073) +species_lib["H2"] = Species_db(name="H2", fc_name="H2", weight=2.01588) +species_lib["N2"] = Species_db(name="N2", fc_name="N2", weight=28.0134) +species_lib["SO"] = Species_db(name="SO", fc_name="S1O1", weight=48.0644) +species_lib["OH"] = Species_db(name="OH", fc_name="O1H1", weight=17.007) +species_lib["COS"] = Species_db(name="COS", fc_name="C1O1S1", weight=60.0751) +species_lib["CS"] = Species_db(name="CS", fc_name="C1S1", weight=44.0757) +species_lib["HCHO"] = Species_db(name="HCHO", fc_name="H1C1H1O1", weight=30.02598) +species_lib["C2H4"] = Species_db(name="C2H4", fc_name="C2H4", weight=28.05316) +species_lib["C2H2"] = Species_db(name="C2H2", fc_name="C2H2", weight=26.04) +species_lib["CH3"] = Species_db(name="CH3", fc_name="C1H3", weight=37.04004) +species_lib["C3H"] = Species_db(name="C3H", fc_name="C3H1", weight=37.04004) +species_lib["C2H"] = Species_db(name="C2H", fc_name="C2H1", weight=25.02934) +species_lib["C2N2"] = Species_db(name="C2N2", fc_name="C2N2", weight=52.0348) +species_lib["C3O2"] = Species_db(name="C3O2", fc_name="C3O2", weight=68.0309) +species_lib["C4N2"] = Species_db(name="C4N2", fc_name="C4N2", weight=76.0562) +species_lib["C3"] = Species_db(name="C3", fc_name="C3", weight=36.0321) +species_lib["S2"] = Species_db(name="S2", fc_name="S2", weight=64.13) +species_lib["S3"] = Species_db(name="S3", fc_name="S3", weight=96.195) +species_lib["S2O"] = Species_db(name="S2O", fc_name="S2O1", weight=80.1294) +species_lib["CS2"] = Species_db(name="CS2", fc_name="C1S2", weight=76.1407) +species_lib["NO2"] = Species_db(name="NO2", fc_name="N1O2", weight=46.0055) +species_lib["N2O"] = Species_db(name="N2O", fc_name="N2O1", weight=44.013) +species_lib["HNO3"] = Species_db(name="HNO3", fc_name="H1N1O3", weight=63.01) +species_lib["HNO2"] = Species_db(name="HNO2", fc_name="H1N1O2", weight=47.01) +species_lib["SO3"] = Species_db(name="SO3", fc_name="S1O3", weight=80.066) +species_lib["H2SO4"] = Species_db(name="H2SO4", fc_name="H2S1O4", weight=98.0785) +species_lib["TiO"] = Species_db(name="TiO", fc_name="Ti1O1", weight=63.866) +species_lib["TiO2"] = Species_db(name="TiO2", fc_name="Ti1O2", weight=79.87) +species_lib["TiS"] = Species_db(name="TiS", fc_name="Ti1S1", weight=79.932) +species_lib["TiH"] = Species_db(name="TiH", fc_name="Ti1H1", weight=48.87) +species_lib["VO"] = Species_db(name="VO", fc_name="V1O1", weight=66.9409) +species_lib["SiO"] = Species_db(name="SiO", fc_name="Si1O1", weight=44.08) +species_lib["AlO"] = Species_db(name="AlO", fc_name="Al1O1", weight=42.98) +species_lib["CaO"] = Species_db(name="CaO", fc_name="Ca1O1", weight=56.0774) +species_lib["PO"] = Species_db(name="PO", fc_name="P1O1", weight=46.97316) +species_lib["PO2"] = Species_db(name="PO2", fc_name="P1O2", weight=62.97256) +species_lib["SiH"] = Species_db(name="SiH", fc_name="Si1H1", weight=29.09344) +species_lib["CaH"] = Species_db(name="CaH", fc_name="Ca1H1", weight=41.085899) +species_lib["AlH"] = Species_db(name="AlH", fc_name="Al1H1", weight=27.9889) +species_lib["MgH"] = Species_db(name="MgH", fc_name="Mg1H1", weight=25.3129) +species_lib["CrH"] = Species_db(name="CrH", fc_name="Cr1H1", weight=53.0040) +species_lib["NaH"] = Species_db(name="NaH", fc_name="Na1H1", weight=23.99771) +species_lib["SiO2"] = Species_db(name="SiO2", fc_name="Si1O2", weight=60.08) +species_lib["SiS"] = Species_db(name="SiS", fc_name="Si1S1", weight=60.15) +species_lib["PS"] = Species_db(name="PS", fc_name="P1S1", weight=63.0388) +species_lib["MgO"] = Species_db(name="MgO", fc_name="Mg1O1", weight=40.30440) +species_lib["CN"] = Species_db(name="CN", fc_name="C1N1", weight=26.0174) +species_lib["H2CO"] = Species_db(name="H2CO", fc_name="H2C1O1", weight=30.027) +species_lib["CH"] = Species_db(name="CH", fc_name="C1H1", weight=13.019) +species_lib["PC"] = Species_db(name="PC", fc_name="P1C1", weight=42.984) +species_lib["H2O2"] = Species_db(name="H2O2", fc_name="H2O2", weight=34.016) +species_lib["NH"] = Species_db(name="NH", fc_name="N1H1", weight=15.015) +species_lib["NS"] = Species_db(name="NS", fc_name="N1S1", weight=46.067) +species_lib["PH"] = Species_db(name="PH", fc_name="P1H1", weight=31.9817) +species_lib["PN"] = Species_db(name="PN", fc_name="P1N1", weight=44.98) +species_lib["HS"] = Species_db(name="HS", fc_name="H1S1", weight=33.068) +species_lib["C2"] = Species_db(name="C2", fc_name="C2", weight=24.022) +species_lib["CaOH"] = Species_db(name="CaOH", fc_name="Ca1O1H1", weight=69.096) +species_lib["FeH"] = Species_db(name="FeH", fc_name="Fe1H1", weight=56.853) +species_lib["FeO"] = Species_db(name="FeO", fc_name="Fe1O1", weight=71.844) +species_lib["KOH"] = Species_db(name="KOH", fc_name="K1O1H1", weight=56.109) +species_lib["SiH2"] = Species_db(name="SiH2", fc_name="Si1H2", weight=30.10138) +species_lib["SiH4"] = Species_db(name="SiH4", fc_name="Si1H4", weight=64.177) +species_lib["N2O"] = Species_db(name="N2O", fc_name="N2O1", weight=44.014) +species_lib["NaOH"] = Species_db(name="NaOH", fc_name="Na1O1H1", weight=54.004) +species_lib["N2"] = Species_db(name="N2", fc_name="N2", weight=28.014) +species_lib["NaO"] = Species_db(name="NaO", fc_name="Na1O1", weight=38.99) +species_lib["SiN"] = Species_db(name="SiN", fc_name="Si1N1", weight=74.152) +species_lib["AlN"] = Species_db(name="AlN", fc_name="Al1N1", weight=40.988) +species_lib["CaS"] = Species_db(name="CaS", fc_name="Ca1S1", weight=72.143) +species_lib["HO2"] = Species_db(name="HO2", fc_name="H1O2", weight=33.007) +species_lib["KO"] = Species_db(name="KO", fc_name="K1O1", weight=55.098) +species_lib["MgS"] = Species_db(name="MgS", fc_name="Mg1S1", weight=56.37) +species_lib["NaO"] = Species_db(name="NaO", fc_name="Na1O1", weight=38.989) +species_lib["FeO2H2"] = Species_db(name="FeO2H2", fc_name="Fe1O2H2", weight=89.86) +species_lib["HAlO2"] = Species_db(name="HAlO2", fc_name="H1Al1O2", weight= 59.99) +species_lib["Al2O"] = Species_db(name="Al2O", fc_name="Al2O1", weight=69.96) +species_lib["AlS"] = Species_db(name="AlS", fc_name="Al1S1", weight= 59.05) +species_lib["AlOH"] = Species_db(name="AlOH", fc_name="H1Al1O1", weight=43.99) +species_lib["MgO2H2"] = Species_db(name="MgO2H2", fc_name="Mg1O2H2", weight=58.32) +species_lib["MgOH"] = Species_db(name="MgOH", fc_name="Mg1O1H1", weight=41.31) +species_lib["CaO2H2"] = Species_db(name="CaO2H2", fc_name="Ca1O2H2", weight=74.09) +species_lib["VO"] = Species_db(name="VO", fc_name="V1O1", weight=66.94) +# neutral atoms +species_lib["H"] = Species_db(name="H", fc_name="H", weight=1.007825) +species_lib["He"] = Species_db(name="He", fc_name="He", weight=4.0026) +species_lib["C"] = Species_db(name="C", fc_name="C", weight=12.0096) +species_lib["N"] = Species_db(name="N", fc_name="N", weight=14.007) +species_lib["O"] = Species_db(name="O", fc_name="O", weight=15.999) +species_lib["F"] = Species_db(name="F", fc_name="F", weight=18.9984) +species_lib["Na"] = Species_db(name="Na", fc_name="Na", weight=22.989769) +species_lib["Ne"] = Species_db(name="Ne", fc_name="Ne", weight=20.1797) +species_lib["Ni"] = Species_db(name="Ni", fc_name="Ni", weight=58.6934) +species_lib["Mg"] = Species_db(name="Mg", fc_name="Mg", weight=24.305) +species_lib["Mn"] = Species_db(name="Mn", fc_name="Mn", weight=54.938044) +species_lib["Al"] = Species_db(name="Al", fc_name="Al", weight=26.9815385) +species_lib["Ar"] = Species_db(name="Ar", fc_name="Ar", weight=39.948) +species_lib["Si"] = Species_db(name="Si", fc_name="Si", weight=28.085) +species_lib["P"] = Species_db(name="P", fc_name="P", weight=30.973761998) +species_lib["S"] = Species_db(name="S", fc_name="S", weight=32.06) +species_lib["Cl"] = Species_db(name="Cl", fc_name="Cl", weight=35.45) +species_lib["K"] = Species_db(name="K", fc_name="K", weight=39.0983) +species_lib["Ca"] = Species_db(name="Ca", fc_name="Ca", weight=40.078) +species_lib["Ti"] = Species_db(name="Ti", fc_name="Ti", weight=47.867) +species_lib["V"] = Species_db(name="V", fc_name="V", weight=50.9415) +species_lib["Co"] = Species_db(name="Co", fc_name="Co", weight=58.933194) +species_lib["Cr"] = Species_db(name="Cr", fc_name="Cr", weight=51.9961) +species_lib["Cu"] = Species_db(name="Cu", fc_name="Cu", weight=63.546) +species_lib["Fe"] = Species_db(name="Fe", fc_name="Fe", weight=55.845) +species_lib["Zn"] = Species_db(name="Zn", fc_name="Zn", weight=65.38) + +# ions +species_lib["H-_bf"] = Species_db(name="H-_bf", fc_name="H1-", weight=species_lib["H"].weight) +species_lib["H-_ff"] = Species_db(name="H-_ff", fc_name="H&e-", weight=species_lib["H"].weight) +species_lib["He-"] = Species_db(name="He-", fc_name="He&e-", weight=species_lib["He"].weight) +species_lib["H3+"] = Species_db(name="H3+", fc_name="H3+ is not included in FastChem...sorry!", weight=3.02382) +species_lib["HeH+"] = Species_db(name="HeH+", fc_name="HeH+ is not included in FastChem...sorry!", weight=5.01054) +species_lib["Fe+"] = Species_db(name="Fe+", fc_name="Fe1+", weight=55.845) +species_lib["Mg+"] = Species_db(name="Mg+", fc_name="Mg1+", weight=24.305) +species_lib["Si+"] = Species_db(name="Si+", fc_name="Si1+", weight=28.086) +species_lib["Ti+"] = Species_db(name="Ti+", fc_name="Ti1+", weight=47.867) +species_lib["H2_p"] = Species_db(name="H2_p", fc_name="H2+", weight=2.016) +species_lib["H2_m"] = Species_db(name="H2_m", fc_name="H2-", weight=2.016) +species_lib["H3O_p"] = Species_db(name="H3O_p", fc_name="H3O1+", weight=19.023) +species_lib["OH_p"] = Species_db(name="OH_p", fc_name="O1H1+", weight=17.008) + +# don't forget the electrons! (they may be tiny but they are important) +species_lib["e-"] = Species_db(name="e-", fc_name="e-", weight=5.4858e-4) + +# CIA pairs (Note: those come pre-calculated in opacity units (cm2/g) dividing by the weight of the 2nd collision partner in writing order) +species_lib["CIA_H2H2"] = Species_db(name="CIA_H2H2", fc_name="H2&H2", weight=species_lib["H2"].weight) +species_lib["CIA_H2He"] = Species_db(name="CIA_H2He", fc_name="H2&He", weight=species_lib["He"].weight) +species_lib["CIA_CO2CO2"] = Species_db(name="CIA_CO2CO2", fc_name="C1O2&C1O2", weight=species_lib["CO2"].weight) +species_lib["CIA_O2CO2"] = Species_db(name="CIA_O2CO2", fc_name="O2&C1O2", weight=species_lib["CO2"].weight) +species_lib["CIA_O2O2"] = Species_db(name="CIA_O2O2", fc_name="O2&O2", weight=species_lib["O2"].weight) +species_lib["CIA_O2N2"] = Species_db(name="CIA_O2N2", fc_name="O2&N2", weight=species_lib["N2"].weight) +species_lib["CIA_N2N2"] = Species_db(name="CIA_N2N2", fc_name="N2&N2", weight=species_lib["N2"].weight) +species_lib["CIA_N2H2"] = Species_db(name="CIA_N2H2", fc_name="N2&H2", weight=species_lib["H2"].weight) +species_lib["CIA_O2N2"] = Species_db(name="CIA_O2N2", fc_name="O2&N2", weight=species_lib["N2"].weight) +species_lib["CIA_N2N2"] = Species_db(name="CIA_N2N2", fc_name="N2&N2", weight=species_lib["N2"].weight) +species_lib["CIA_N2H2"] = Species_db(name="CIA_N2H2", fc_name="N2&H2", weight=species_lib["H2"].weight) +species_lib["CIA_H2H"] = Species_db(name="CIA_H2H", fc_name="H2&H", weight=species_lib["H"].weight) +species_lib["CIA_CO2H2"] = Species_db(name="CIA_H2H", fc_name="CO2&H2", weight=species_lib["H2"].weight) + +mp = 1.6726231e-21 #kg +kB = 1.38064e-23 #JK-1 +particles_per_mol = 6.02214076e+23 + +class FO2shift: + ''' models are taken from caliope. oxygen fugacity pO2 need to be in log10 ''' + def __init__(self, model='oneill'): + self.callmodel = getattr(self, model) + + def __call__(self, T, log10pO2): + '''Return log10 fO2''' + return log10pO2 - self.callmodel(T) + + def fischer(self, T): + '''Fischer et al. (2011) IW''' + return 6.94059 -28.1808*1E3/T + + def oneill(self, T): + '''O'Neill and Eggins (2002) IW''' + return 2*(-244118+115.559*T-8.474*T*np.log(T))/(np.log(10)*8.31441*T) + + + def run_lavatmos(config:Config,hf_row:dict): @@ -27,21 +222,29 @@ def run_lavatmos(config:Config,hf_row:dict): Configuration object hf_row : dict Dictionary of helpfile variables, at this iteration only + obudget: oxygen budget already present in the atmosphere before running the outgassing ''' import os import sys + import numpy as np + sys.path.insert(1, '/data3/leoni/LavAtmos') from lavatmos_goot_runner import container_lavatmos gas_list= vol_list + config.outgas.vaplist - lavatmos_dict={'P':0} + lavatmos_dict={'P':0.0} #set element fractions in atmosphere for lavatmos run - input_eles=['H','C','N','S'] + input_eles=['H','C','N','S','O'] + + total_weight = species_lib['H'].weight + species_lib['C'].weight + species_lib['N'].weight + species_lib['O'].weight + species_lib['S'].weight + print('total_weight: ',total_weight) + #lavatmos takes in the abundnace fractions of element not mass fractions so divide by atomic number for e in input_eles: - lavatmos_dict[e] = hf_row[e + "_kg_atm"]/hf_row["M_atm"] + lavatmos_dict[e] = (hf_row[e + "_kg_atm"] / hf_row["M_atm"]) * (total_weight / ( 5 * species_lib[e].weight)) + print(e,lavatmos_dict[e]) parameters = { @@ -50,14 +253,32 @@ def run_lavatmos(config:Config,hf_row:dict): # Melt parameters 'lava_comp' : 'BSE_palm', - 'silicate_abundances' : 'lavatmos2', # 'lavatmos1', 'lavatmos2', 'manual' + 'silicate_abundances' : 'lavatmos3', # 'lavatmos1', 'lavatmos2', 'manual' # Volatile parameters 'P_volatile' : hf_row['P_surf'], # bar - 'oxygen_abundance' : 'degassed', # 'degassed', 'manual' + 'oxygen_abundance' : 'degassed', # 'degassed', 'manual', 'volatile_comp' : lavatmos_dict, } + #compute density for the previous run with calliope output from hf_row: + kg_per_particle = hf_row['atm_kg_per_mol']/particles_per_mol + + if hf_row['T_surf'] == 0.0 : #make sure that not zero surface temperature in first iteration + Tsurf=hf_row["T_magma"] + else: + Tsurf=hf_row['T_surf'] + rho_old = kg_per_particle * hf_row['P_surf']/(kB*Tsurf) + + M_atmo_old = hf_row['M_atm'] + M_total = hf_row['M_core'] + hf_row['M_atm'] + hf_row['M_mantle'] + M_mantle_old = hf_row['M_mantle'] + + log.info('Mass of the planet mantle before running lavatmos: %s'% M_mantle_old) + log.info('Mass of the planet atmosphere before running lavatmos: %s'% M_atmo_old) + log.info('Mass of the total planet before running lavatmos: %s'% M_total) + + lavatmos_instance = container_lavatmos(parameters) lavatmos_instance.run_lavatmos(hf_row["T_magma"]) @@ -70,17 +291,45 @@ def run_lavatmos(config:Config,hf_row:dict): #update abundances in output file for next calliope run new_atmos_abundances=pd.read_csv(mmr_path,sep=r'\s+') - hf_row['M_tot']=0 + mu_outgassed=new_atmos_abundances['mu'][0] + + #rho of armosphere after lavatmos + #n=rho/mu*mp + rho_new = kg_per_particle * new_atmos_abundances['Pbar'][0]/(kB*Tsurf) + M_atmo_new = M_atmo_old/rho_old * rho_new #kg assuming volum edoes not change - #need to check here if this is correct still becuase fastchem outopout is in vmr .... maybe need to convert to mmrs first to scale to atmosphere mass ... for vol in gas_list: + new_pp = new_atmos_abundances[vol][0]* new_atmos_abundances['Pbar'][0] + hf_row[vol + "_bar"] = new_pp + #here need to update it in terms of pressure as well, since this is input for calliiope hf_row[vol + "_vmr"] = new_atmos_abundances[vol][0] - hf_row[vol + "_kg_atm"] = new_atmos_abundances[vol][0] * hf_row['M_atm'] - hf_row[vol + "_kg_total"] = new_atmos_abundances[vol][0]+ hf_row[vol + "_kg_solid"] + hf_row[vol + "_kg_liquid"] - - hf_row['M_tot']+= hf_row[e + "_kg_total"] + hf_row[vol + "_kg_atm"] = new_atmos_abundances[vol][0] * M_atmo_new * species_lib[vol].weight/mu_outgassed #kg + hf_row[vol + "_kg_tot"] = hf_row[vol + "_kg_atm"] + hf_row[vol + "_kg_solid"] + hf_row[vol + "_kg_liquid"] #elements are not considered as atomic species but just as inventory for e in element_list: - hf_row[e + "_kg_atm"]=new_atmos_abundances[e][0] * hf_row['M_atm'] + hf_row[e + "_kg_atm"]=new_atmos_abundances[e][0] * M_atmo_new * species_lib[e].weight/mu_outgassed hf_row[e + "_kg_atm"]=new_atmos_abundances[e][0]+ hf_row[e + "_kg_solid"] + hf_row[e + "_kg_liquid"] + + + + #saving new oxygen fugacity for calliope + log10_fO2 = np.log10(new_atmos_abundances['O2'][0]) + + fO2_shift = FO2shift() + hf_row['fO2_shift'] = fO2_shift(hf_row["T_magma"], log10_fO2) + + print('shift compared to iron wustite buffer:', hf_row['fO2_shift']) + + + + + #in above, M_atmo should be updated. we can use this to uodate also the mantle mass of the planet + # M_mantle_new = M_total - hf_row['M_core'] - M_atmo_new + + #M_mantle_liquid_new = M_mantle_new - M_solid_old + #hf_row['M_mantle_liquid'] = M_mantle_liquid_new + #hf_row['M_mantle'] = M_mantle_new + + #log.info('Mass of the planet mantle after running lavatmos: %s'% M_mantle_new) + #log.info('Mass of the planet atmosphere after running lavatmos: %s'% M_atmo_new) diff --git a/src/proteus/outgas/wrapper.py b/src/proteus/outgas/wrapper.py index b58ee2561..3a8553d7d 100644 --- a/src/proteus/outgas/wrapper.py +++ b/src/proteus/outgas/wrapper.py @@ -84,7 +84,8 @@ def run_outgassing(dirs:dict, config:Config, hf_row:dict): if config.outgas.module == 'calliope': calc_surface_pressures(dirs, config, hf_row) - # calculate total atmosphere mass (from sum of volatile masses) + + # calculate total atmosphere mass from sum of gas species hf_row["M_atm"] = 0.0 for s in gas_list: hf_row["M_atm"] += hf_row[s + "_kg_atm"] @@ -136,6 +137,7 @@ def run_desiccated(hf_row:dict,config:Config): hf_row[k] = 0.0 + def lavatmos_calliope_loop(dirs:dict,config:Config, hf_row:dict): '''function which runs lavatmos and calliope in a loop until they have converged. @@ -150,14 +152,14 @@ def lavatmos_calliope_loop(dirs:dict,config:Config, hf_row:dict): Dictionary of helpfile variables, at this iteration only ''' + hf_row['fO2_shift'] = config.outgas.fO2_shift_IW run_outgassing(dirs, config, hf_row) - print(config.outgas.silicates) if config.outgas.silicates: xerr=hf_row['H2O_vmr']*0.01 log.info("error threshold on water abundance: %.6f"%xerr) err=1.0 while abs(err)>xerr: - old_row=hf_row + old_row = hf_row run_lavatmos(config, hf_row) run_outgassing(dirs, config, hf_row) err=old_row['H2O_vmr']-hf_row['H2O_vmr'] diff --git a/src/proteus/plot/compar_atmosphere_models.py b/src/proteus/plot/compar_atmosphere_models.py index 2d23ac224..955d30d42 100644 --- a/src/proteus/plot/compar_atmosphere_models.py +++ b/src/proteus/plot/compar_atmosphere_models.py @@ -17,14 +17,19 @@ from matplotlib.ticker import LogLocator, MultipleLocator from mpl_toolkits.axes_grid1 import make_axes_locatable +from proteus.utils.constants import vol_list from proteus.utils.helper import find_nearest -from proteus.utils.plot import sample_times +from proteus.utils.plot import get_colour, latexify, sample_times if TYPE_CHECKING: pass log = logging.getLogger("fwl."+__name__) +GASES_STANDARD = ("CO", "H2O", "N2", "O2", "O3", "OH", "H", "SO", "CH4", + "CO2", "H2", "H2S", "HCN", "NH3", "SO2", "Al","HAlO2", + "N2O", "NO", "NO2", "HNO3", "PH3", "Fe", "Si", "Ti", "K", "Mg", + "N", "O", "S", "SiO", "SiO2","TiO","FeO","MgO","Na","TiO2",) def read_ncdf_profile(nc_fpath:str, extra_keys:list=[]): """Read data from atmosphere NetCDF output file. @@ -184,6 +189,7 @@ def read_2model_data(output_dir1:str, output_dir2:str, extension, tmin, nsamp, e times1, plot_times1, _1 = sample_output(output_dir1, extension, tmin, nsamp) times2, plot_times2, _2 = sample_output(output_dir2, extension, tmin, nsamp) + print() #set new array bound for the time arrays from two runs: same lower bound (higher minimum ) and same upper bound (lower maximum) lower_bound = max(np.array(plot_times1).min(), np.array(plot_times2).min()) # higher minimum @@ -289,7 +295,8 @@ def sample_output(output_dir, extension:str = "_atm.nc", tmin:float = 1.0, nsamp out_f = [files[i] for i in out_i] # return times and file paths - return np.array(times),np.array(out_t), np.array(out_f) + print(np.array(times), np.array(out_t), np.array(out_f)) + return np.array(times), np.array(out_t), np.array(out_f) @@ -337,7 +344,6 @@ def plot_atmosphere_comparison(output_dir1, output_dir2, extension="_atm.nc", tm t1=int(str(plottimes1[0])) t2=int(str(plottimes1[-1])) - log.info("Plot atmosphere temperatures colourbar") norm = mpl.colors.LogNorm(vmin=max(t1,1), vmax=t2) @@ -371,7 +377,6 @@ def plot_atmosphere_comparison(output_dir1, output_dir2, extension="_atm.nc", tm for i, t in enumerate( plottimes2 ): prof2 = profiles2[i] - color = sm.to_rgba(t) tmp2 = prof2["t"] @@ -401,6 +406,89 @@ def plot_atmosphere_comparison(output_dir1, output_dir2, extension="_atm.nc", tm fig.savefig(fname, bbox_inches='tight', dpi=300) +def plot_chemistry_multipple_timesteps(plottimes,profiles,outputdir): + + t1=int(str(plottimes[0])) + t2=int(str(plottimes[-1])) + + plot_gases = list(vol_list) + list(GASES_STANDARD) + plot_gases = list(dict.fromkeys(plot_gases)) + log.info("Plot atmosphere temperatures colourbar") + + norm = mpl.colors.LogNorm(vmin=max(t1,1), vmax=t2) + sm = plt.cm.ScalarMappable(cmap=cm.batlowK_r, norm=norm) + sm.set_array([]) + + xmin=10**-14 + # init plot + scale = 1.2 + fig,ax = plt.subplots(1,1, figsize=(6*scale,5*scale)) + + # plot species profiles + lw = 0.9 + al = 0.8 + vmr_surf = [] + for j, t in enumerate(plottimes): + atm_profile=profiles[j] + parr = atm_profile["pl"] * 1e-5 # convert to bar + # Get year + year = float(outputdir.split("/")[-1].split("_atm")[0]) + for i,gas in enumerate(plot_gases): + print(gas) + + col = get_colour(gas) + lbl = latexify(gas) + vmr = 0.0 + + _lw = lw + if gas in vol_list: + _lw *= 1.25 + + # plot from netCDF (dashed lines) + key = gas+"_vmr" + if key in atm_profile.keys(): + print('gas output exists from agni:', key) + xarr = list(atm_profile[key]) + xarr = [xarr[0]] + xarr + if np.amax(xarr) >= xmin: + print('min vmr > minimum') + ax.plot(xarr, parr, ls = 'dashed', color=col, lw=_lw, alpha=al,label=lbl) + else: + print(np.amax(xarr)) + # create legend entry and store surface vmr + # create legend entry and store surface vmr + if vmr > 0.0: + ax.plot(1e30, 1e30, ls='solid', color=col, lw=_lw, alpha=al, label=lbl) + vmr_surf.append(vmr) + + ax.set_xscale("log") + ax.set_xlim(left=xmin, right=1.1) + ax.set_xlabel("Volume mixing ratio, at t=%.2e yr"%year) + ax.xaxis.set_major_locator(LogLocator(numticks=1000)) + + ax.set_ylabel("Pressure [bar]") + ax.set_yscale("log") + ax.set_ylim(bottom=np.amax(parr), top=np.amin(parr)) + ax.yaxis.set_major_locator(LogLocator(numticks=1000)) + + # Legend (handles sorted by surface vmr) + handles, labels = ax.get_legend_handles_labels() + order = np.argsort(vmr_surf)[::-1] + ax.legend([handles[idx] for idx in order],[labels[idx] for idx in order], + loc='lower center', bbox_to_anchor=(0.5, 1), + ncols=11, fontsize=9, borderpad=0.4, + labelspacing=0.3, columnspacing=1.0, handlelength=1.5, handletextpad=0.3) + + # Save file + fpath = os.path.join(outputdir, "plots", "plot_chem_atmosphere_{}.png".format(t)) + fig.savefig(fpath, dpi=200, bbox_inches='tight') + +def plot_two_chemistries(output_dir1,output_dir2, extension, tmin, nsamp): + + plottimes1, plottimes2, profiles1, profiles2 = read_2model_data(output_dir1,output_dir2, extension, tmin, nsamp) + + plot_chemistry_multipple_timesteps(plottimes1,profiles1,output_dir1) + plot_chemistry_multipple_timesteps(plottimes2,profiles2,output_dir2) @@ -409,4 +497,5 @@ def plot_atmosphere_comparison(output_dir1, output_dir2, extension="_atm.nc", tm output_dir1=sys.argv[1] output_dir2=sys.argv[2] - plot_atmosphere_comparison(output_dir1, output_dir2, tmin=1e4, extension="_atm.nc", nsamp=5, plot_format="pdf") + plot_atmosphere_comparison(output_dir1, output_dir2, tmin=1e4, extension="_atm.nc", nsamp=5, plot_format="png") + plot_two_chemistries(output_dir1,output_dir2, extension="_atm.nc", tmin=1e4, nsamp=5) diff --git a/src/proteus/plot/cpl_atmosphere.py b/src/proteus/plot/cpl_atmosphere.py index 8f5ae157b..536a45450 100644 --- a/src/proteus/plot/cpl_atmosphere.py +++ b/src/proteus/plot/cpl_atmosphere.py @@ -66,8 +66,8 @@ def plot_atmosphere( output_dir:str, times:list, profiles:list, plot_format="pdf ax1.set_ylabel("Pressure [bar]") ax1.invert_yaxis() ax1.set_yscale("log") - #ax1.set_ylim(bottom=pmax, top=np.amin(parr)) - ax1.set_ylim(bottom=100, top=10**-8) + ax1.set_ylim(bottom=pmax, top=np.amin(parr)) + #ax1.set_ylim(bottom=100, top=10**-8) ax1.set_xlim([200,4000]) ax1.yaxis.set_major_locator(LogLocator(numticks=1000)) diff --git a/src/proteus/plot/cpl_chem_atmosphere.py b/src/proteus/plot/cpl_chem_atmosphere.py index 540c1484b..5490a83ee 100644 --- a/src/proteus/plot/cpl_chem_atmosphere.py +++ b/src/proteus/plot/cpl_chem_atmosphere.py @@ -20,21 +20,31 @@ log = logging.getLogger("fwl."+__name__) -GASES_STANDARD = ("C2H4", "CO", "H2O", "H2SO4", "N2", "O2", "O3", "OH", "H", "SO", "CH4", - "CO2", "H2", "H2S", "HCN", "NH2", "NH3", "OCS", "S2", "S6", "S8", "SO2", - "N2O", "NO", "NO2", "HNO3", "PH3", "C2H2", "NO3", "N2O5", "HONO", - "HO2NO2", "H2O2", "C2H6", "CH3", "H2CO", "HO2", "C", - "N", "O", "S", "SO", "CS2","SiO","SiO2","TiO","FeO","MgO","Na") +#GASES_STANDARD = ("C2H4", "CO", "H2O", "H2SO4", "N2", "O2", "O3", "OH", "H", "SO", "CH4", +# "CO2", "H2", "H2S", "HCN", "NH2", "NH3", "OCS", "S2", "S6", "S8", "SO2", +# "N2O", "NO", "NO2", "HNO3", "PH3", "C2H2", "NO3", "N2O5", "HONO", + # "HO2NO2", "H2O2", "C2H6", "CH3", "H2CO", "HO2", "C", + # "N", "O", "S", "SO", "CS2","SiO","SiO2","TiO","FeO","MgO","Na") -def plot_chem_atmosphere( output_dir:str, chem_module:str, plot_format="pdf", +GASES_STANDARD = ("CO", "H2O", "N2", "O2", "O3", "OH", "H", "SO", "CH4", + "CO2", "H2", "H2S", "HCN", "NH3", "SO2", "Al","HAlO2", + "N2O", "NO", "NO2", "HNO3", "PH3", + "N", "O", "S") + +REFRACTORY_GASES = ("Fe", "Si", "Ti", "K", "Mg", "SiO", "SiO2","TiO","FeO","MgO","Na","TiO2") + + + +def plot_chem_atmosphere(output_dir:str, chem_module:str, plot_format="pdf", plot_gases:list=None, plot_offchem:bool=True, xmin:float=1e-14): log.info("Plot atmosphere chemical composition") # Default species. # Ensure that members of gas_list are first + if not plot_gases: - plot_gases = list(vol_list) + list(GASES_STANDARD) + plot_gases = list(vol_list) + list(GASES_STANDARD) + list(REFRACTORY_GASES) # Remove duplicates, preserving order plot_gases = list(dict.fromkeys(plot_gases)) @@ -71,23 +81,28 @@ def plot_chem_atmosphere( output_dir:str, chem_module:str, plot_format="pdf", al = 0.8 vmr_surf = [] for i,gas in enumerate(plot_gases): + print(gas) col = get_colour(gas) lbl = latexify(gas) vmr = 0.0 _lw = lw - if gas in vol_list: - _lw *= 1.25 + #if gas in vol_list: + #_lw *= 1.25 # plot from netCDF (dashed lines) + print(atm_profile.keys()) key = gas+"_vmr" if key in atm_profile.keys(): xarr = list(atm_profile[key]) xarr = [xarr[0]] + xarr - if np.amax(xarr) >= xmin: + if (np.amax(xarr) >= xmin or key in list(REFRACTORY_GASES) ): + print('min vmr > minimum') vmr = float(xarr[-1]) ax.plot(xarr, parr, ls = 'dashed', color=col, lw=_lw, alpha=al) + else: + print(np.amax(xarr)) # plot from offline chemistry, if available (solid lines) if has_offchem and (gas in atm_offchem.keys()): diff --git a/src/proteus/post_processing/compar_atmosphere_models.py b/src/proteus/post_processing/compar_atmosphere_models.py new file mode 100644 index 000000000..01d0b8b3b --- /dev/null +++ b/src/proteus/post_processing/compar_atmosphere_models.py @@ -0,0 +1,414 @@ +#This routine needs to be called via python3 src/proteus/plot/compar_atmosphere_models.py. +#then it needs the folders for outputdir1 and outputdir 2 in the terminal as +#sys.argv[1] and sys.argv[2]. + +from __future__ import annotations + +import glob +import logging +import os +import sys +from typing import TYPE_CHECKING + +import matplotlib as mpl +import matplotlib.pyplot as plt +import numpy as np +from cmcrameri import cm +from matplotlib.ticker import LogLocator, MultipleLocator +from mpl_toolkits.axes_grid1 import make_axes_locatable + +from proteus.utils.helper import find_nearest +from proteus.utils.plot import sample_times + +if TYPE_CHECKING: + pass + +log = logging.getLogger("fwl."+__name__) + + +def read_ncdf_profile(nc_fpath:str, extra_keys:list=[]): + """Read data from atmosphere NetCDF output file. + + Automatically reads pressure (p), temperature (t), radius (z) arrays with + cell-centre (N) and cell-edge (N+1) values interleaved into a single combined array of + length (2*N+1). + + Extra keys can be read-in using the extra_keys parameter. These will be stored with + the same dimensions as in the NetCDF file. + + Parameters + ---------- + nc_fpath : str + Path to NetCDF file. + + extra_keys : list + List of extra keys (strings) to read from the file. + + Returns + ---------- + out : dict + Dictionary containing numpy arrays of data from the file. + """ + + import netCDF4 as nc + + # open file + if not os.path.isfile(nc_fpath): + log.error(f"Could not find NetCDF file '{nc_fpath}'") + return None + ds = nc.Dataset(nc_fpath) + + p = np.array(ds.variables["p"][:]) + pl = np.array(ds.variables["pl"][:]) + + t = np.array(ds.variables["tmp"][:]) + tl = np.array(ds.variables["tmpl"][:]) + + rp = float(ds.variables["planet_radius"][0]) + if "z" in ds.variables.keys(): + # probably from JANUS, which stores heights + z = np.array(ds.variables["z"][:]) + zl = np.array(ds.variables["zl"][:]) + r = np.array(z) + rp + rl = np.array(zl) + rp + else: + # probably from AGNI, which stores radii + r = np.array(ds.variables["r"][:]) + rl = np.array(ds.variables["rl"][:]) + z = np.array(r) - rp + zl = np.array(rl) - rp + + nlev_c = len(p) + + # read pressure, temperature, height data into dictionary values + out = {} + out["p"] = [pl[0]] + out["t"] = [tl[0]] + out["z"] = [zl[0]] + out["r"] = [rl[0]] + for i in range(nlev_c): + out["p"].append(p[i]) + out["p"].append(pl[i+1]) + + out["t"].append(t[i]) + out["t"].append(tl[i+1]) + + out["z"].append(z[i]) + out["z"].append(zl[i+1]) + + out["r"].append(r[i]) + out["r"].append(rl[i+1]) + + # flags + for fk in ("transparent", "solved", "converged"): + if fk in ds.variables.keys(): + out[fk] = ncdf_flag_to_bool(ds.variables[fk]) + else: + out[fk] = False # if not available + + # Read extra keys + for key in extra_keys: + + # Check that key exists + if key not in ds.variables.keys(): + log.error(f"Could not read '{key}' from NetCDF file") + continue + + # Reading composition + if key == "x_gas": + + gas_l = ds.variables["gases"][:] # names (bytes matrix) + gas_x = ds.variables["x_gas"][:] # vmrs (float matrix) + + # get data for each gas + for igas,gas in enumerate(gas_l): + gas_lbl = "".join( [c.decode(encoding="utf-8") for c in gas] ).strip() + out[gas_lbl+"_vmr"] = np.array(gas_x[:,igas]) + + else: + out[key] = np.array(ds.variables[key][:]) + + # close file + ds.close() + + # convert to np arrays + for key in out.keys(): + out[key] = np.array(out[key], dtype=float) + + return out + +def compare_times(times,plottimes): + + # get samples on log-time scale + sample_t = [] + sample_i = [] + for s in plottimes: # Sample on log-scale + if s in times: + sample_t.append(int(s)) + print('time in list',s) + else: + print('time not in list') + remaining = [int(t) for t in set(times) - set(plottimes)] + if len(remaining) == 0: + break + # Get next nearest time + val,_ = find_nearest(remaining,s) + print('nearest value found',val) + sample_t.append(int(val)) + + # Get the index of this time in the original array + _,idx = find_nearest(times,val) + sample_i.append(int(idx)) + print(sample_t, sample_i) + + return sample_t, sample_i + +def ncdf_flag_to_bool(var)->bool: + '''Convert NetCDF flag (y/n) to Python bool (true/false)''' + v = str(var[0].tobytes().decode()).lower() + + # check against expected + if v == 'y': + return True + elif v == 'n': + return False + else: + raise ValueError(f"Could not parse NetCDF atmos flag variable \n {var}") + +def read_2model_data(output_dir1:str, output_dir2:str, extension, tmin, nsamp, extra_keys=[]): + """ + Read all p,t,z profiles from NetCDF files in a PROTEUS output folder. + compare times at which to plot the output between the two folders and make sure that they agree + """ + + times1, plot_times1, _1 = sample_output(output_dir1, extension, tmin, nsamp) + times2, plot_times2, _2 = sample_output(output_dir2, extension, tmin, nsamp) + + print() + + #set new array bound for the time arrays from two runs: same lower bound (higher minimum ) and same upper bound (lower maximum) + lower_bound = max(np.array(plot_times1).min(), np.array(plot_times2).min()) # higher minimum + upper_bound = min(np.array(plot_times1).max(), np.array(plot_times2).max()) # lower maximum + + #times1 = np.clip(times1, lower_bound, upper_bound) + #times2 = np.clip(times2, lower_bound, upper_bound) + + #check that values in array are not out of bounds + for name, arr in {"a": plot_times1, "b": plot_times2}.items(): + mask_low = arr < lower_bound + mask_high = arr > upper_bound + + if np.any(mask_low | mask_high): + if name == "a": + plot_times1[mask_low] = plot_times2[mask_low] + plot_times1[mask_high] = plot_times2[mask_high] + else: + plot_times2[mask_low] = plot_times1[mask_low] + plot_times2[mask_high] = plot_times1[mask_high] + + # replace only the remaining (in-bounds) values in times 2 to have the same array as in times 1 + mask2 = (plot_times2 < lower_bound) | (plot_times2 > upper_bound) + # replace only the remaining (in-bounds) values + plot_times2[~mask2] = plot_times1[~mask2] + + #now find nearest value + + final_times1,final_indices1=compare_times(times1,plot_times1) + final_times2,final_indices2=compare_times(times2,plot_times2) + + + profiles1 = [read_ncdf_profile(os.path.join(output_dir1, "data", "%.0f_atm.nc"%t), + extra_keys=extra_keys) for t in final_times1] + + profiles2 = [read_ncdf_profile(os.path.join(output_dir2, "data", "%.0f_atm.nc"%t), + extra_keys=extra_keys) for t in final_times2] + + + if None in profiles2: + log.warning("One or more NetCDF files could not be found") + if os.path.exists(os.path.join(output_dir2,"data","data.tar")): + log.warning("You may need to extract archived data files") + return + if None in profiles1: + log.warning("One or more NetCDF files could not be found") + if os.path.exists(os.path.join(output_dir1,"data","data.tar")): + log.warning("You may need to extract archived data files") + return + + return final_times1,final_times2,profiles1, profiles2 + + + +def sample_output(output_dir, extension:str = "_atm.nc", tmin:float = 1.0, nsamp:int=8): + + """ + Sample output files from a model run based on their time stamps. + + This function searches the `/data` directory for files whose + names end with the given extension and whose base name is an integer + time stamp. It then selects up to `nsamp` representative output times + greater than or equal to `tmin`, using `sample_times`, and returns the + corresponding times and file paths. + + If no matching files are found, the function returns empty lists. If an + archive exists in the data directory, an error is logged indicating that + the archive should be extracted first. + + Parameters + ---------- + output_dir : str + Path to the model output directory containing a `data/` subdirectory. + extension : str, optional + File extension used to identify output files (default: "_atm.nc"). + tmin : float, optional + Minimum time to consider when sampling outputs (default: 1.0). + nsamp : int, optional + Number of output times to sample (default: 8). + + Returns + ------- + out_t : list + List of sampled output times. + out_f : list + List of file paths corresponding to the sampled times. + """ + + files = glob.glob(os.path.join(output_dir+"/data", "*"+extension)) + + # No files found? + if len(files) < 1: + log.error("No output files found, check if arxiv exists and Extract it.") + + # Return empty + return [], [] + + # get times + times = [int(f.split("/")[-1].split(extension)[0]) for f in files] + #print(times) + + out_t, out_i = sample_times(times, nsamp, tmin=tmin) + out_f = [files[i] for i in out_i] + + # return times and file paths + print(np.array(times), np.array(out_t), np.array(out_f)) + return np.array(times), np.array(out_t), np.array(out_f) + + + +def plot_atmosphere_comparison(output_dir1, output_dir2, extension="_atm.nc", tmin=1e4, nsamp=5, plot_format="pdf"): + + """ + Compare atmospheric temperature–pressure profiles from two model runs. + + This function reads atmospheric output files from two model output + directories, samples representative times from each run, and produces + a single plot comparing their temperature–pressure profiles. Profiles + from the first model are plotted with solid lines, while profiles from + the second model are plotted with dashed lines. Line colour encodes the + simulation time using a logarithmic colour scale. + + The resulting figure is saved to the `plots/` subdirectory of + `output_dir1`. + + Parameters + ---------- + output_dir1 : str + Path to the first model output directory. + output_dir2 : str + Path to the second model output directory. + extension : str, optional + File extension used to identify atmospheric output files + (default: "_atm.nc"). + tmin : float, optional + Minimum simulation time (in years) to consider when sampling outputs + (default: 1e4). + nsamp : int, optional + Number of time samples to plot from each model (default: 5). + plot_format : str, optional + File format for the saved plot (e.g., "pdf", "png") + (default: "pdf"). + + Returns + ------- + None + The function produces and saves a plot but does not return a value. + """ + + + plottimes1, plottimes2, profiles1, profiles2 = read_2model_data(output_dir1,output_dir2, extension, tmin, nsamp) + t1=int(str(plottimes1[0])) + t2=int(str(plottimes1[-1])) + + + log.info("Plot atmosphere temperatures colourbar") + + norm = mpl.colors.LogNorm(vmin=max(t1,1), vmax=t2) + sm = plt.cm.ScalarMappable(cmap=cm.batlowK_r, norm=norm) + sm.set_array([]) + + # Initialise plot + scale = 1.1 + alpha = 0.6 + fig,ax = plt.subplots(1,1,figsize=(5*scale,4*scale)) + ax.set_ylabel("Pressure [bar]") + ax.set_xlabel("Temperature [K]") + ax.invert_yaxis() + ax.set_yscale("log") + + tmp_max = 1000.0 + prs_max = 1.0 + for i, t in enumerate( plottimes1 ): + prof1 = profiles1[i] + + + color = sm.to_rgba(t) + tmp1 = prof1["t"] + prs1 = prof1["p"]/1e5 + + tmp_max = max(tmp_max, np.amax(tmp1)) + prs_max = max(prs_max, np.amax(prs1)) + + ax.plot(tmp1, prs1, color=color, linestyle='-', alpha=alpha, zorder=3) + + for i, t in enumerate( plottimes2 ): + prof2 = profiles2[i] + + + color = sm.to_rgba(t) + + tmp2 = prof2["t"] + prs2 = prof2["p"]/1e5 + + tmp_max = max(tmp_max, np.amax(tmp2)) + prs_max = max(prs_max, np.amax(prs2)) + + ax.plot(tmp2, prs2, color=color, linestyle='--', alpha=alpha, zorder=3) + + # Grid + ax.grid(alpha=0.2, zorder=2) + ax.set_xlim(0,tmp_max+100) + ax.xaxis.set_minor_locator(MultipleLocator(base=250)) + + ax.set_ylim(bottom=prs_max, top=np.amin(prs1)) + ax.yaxis.set_major_locator(LogLocator()) + + # Plot colourbar + divider = make_axes_locatable(ax) + cax = divider.append_axes('right', size='5%', pad=0.05) + cbar = fig.colorbar(sm, cax=cax, orientation='vertical') + cbar.set_label("Time [yr]") + + # Save plot + fname = os.path.join(output_dir1,"plots","plot_atmosphere_comparison.%s"%plot_format) + fig.savefig(fname, bbox_inches='tight', dpi=300) + + + + + +if __name__ == "__main__": + + output_dir1=sys.argv[1] + output_dir2=sys.argv[2] + + plot_atmosphere_comparison(output_dir1, output_dir2, tmin=1e4, extension="_atm.nc", nsamp=5, plot_format="pdf") diff --git a/src/proteus/proteus.py b/src/proteus/proteus.py index b68dc8e99..0487c4660 100644 --- a/src/proteus/proteus.py +++ b/src/proteus/proteus.py @@ -9,8 +9,8 @@ import proteus.utils.archive as archive from proteus.config import read_config_object +from proteus.outgas.wrapper import get_gaslist from proteus.utils.constants import ( - vap_list, vol_list, ) from proteus.utils.helper import ( @@ -263,6 +263,9 @@ def start(self, *, resume: bool = False, offline: bool = False): # Store partial pressures and list of included volatiles inc_gases = [] + + gas_list=get_gaslist(self.config) + for s in vol_list: if s != "O2": pp_val = self.config.delivery.volatiles.get_pressure(s) @@ -276,16 +279,17 @@ def start(self, *, resume: bool = False, offline: bool = False): self.hf_row[s + "_bar"] = max(1.0e-30, float(pp_val)) else: self.hf_row[s + "_bar"] = 0.0 - for s in vap_list: - inc_gases.append(s) - self.hf_row[s + "_bar"] = 0.0 + for s in gas_list: + if s not in vol_list: + inc_gases.append(s) + self.hf_row[s + "_bar"] = 0.0 # Inform user log.info("Initial inventory set by '%s'"%self.config.delivery.initial) log.info("Included gases:") for s in inc_gases: write = " " - write += "vapour " if s in vap_list else "volatile" + write += "vapour " if s in vol_list else "volatile" write += " %-8s" % s if self.config.delivery.initial == "volatiles": write += " : %6.2f bar"%self.hf_row[s + "_bar"] diff --git a/src/proteus/utils/plot.py b/src/proteus/utils/plot.py index 289c008a9..8621a62d6 100644 --- a/src/proteus/utils/plot.py +++ b/src/proteus/utils/plot.py @@ -56,6 +56,7 @@ "Mg": "#996633", "Na": "#ccff00", "Ti": "#0d2959", + "K": "#2e8b57", # GLobal energy fluxes From a54c7e1eef5a3ff9d09d51a4dd8e58a6900908ad Mon Sep 17 00:00:00 2001 From: Leoni Janssen Date: Tue, 10 Feb 2026 16:23:02 +0100 Subject: [PATCH 10/26] updated the feedback between lavatmos and calliope: fO2 is now passed on from lavatmos --- src/proteus/outgas/calliope.py | 6 +++--- src/proteus/outgas/lavatmos.py | 12 ++++++------ src/proteus/outgas/wrapper.py | 18 ++++++++++++------ 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/src/proteus/outgas/calliope.py b/src/proteus/outgas/calliope.py index 1068f33e6..b10852c1d 100644 --- a/src/proteus/outgas/calliope.py +++ b/src/proteus/outgas/calliope.py @@ -46,12 +46,12 @@ def construct_options(dirs:dict, config:Config, hf_row:dict): # Surface properties solvevol_inp["T_magma"] = hf_row["T_magma"] - if hf_row['log10_fO2']: + if 'fO2_shift' in hf_row.keys(): solvevol_inp['fO2_shift_IW'] = hf_row['fO2_shift'] - print('oxygen fugacity from lavatmos') else: solvevol_inp['fO2_shift_IW'] = config.outgas.fO2_shift_IW - print('oxygen fugacity from input file') + + print('fO2 shift used by calliope:', solvevol_inp['fO2_shift_IW']) # Volatile inventory for s in vol_list: diff --git a/src/proteus/outgas/lavatmos.py b/src/proteus/outgas/lavatmos.py index 35666f73b..5f4c2e46e 100644 --- a/src/proteus/outgas/lavatmos.py +++ b/src/proteus/outgas/lavatmos.py @@ -271,12 +271,12 @@ def run_lavatmos(config:Config,hf_row:dict): rho_old = kg_per_particle * hf_row['P_surf']/(kB*Tsurf) M_atmo_old = hf_row['M_atm'] - M_total = hf_row['M_core'] + hf_row['M_atm'] + hf_row['M_mantle'] - M_mantle_old = hf_row['M_mantle'] + #M_total = hf_row['M_core'] + hf_row['M_atm'] + hf_row['M_mantle'] + # M_mantle_old = hf_row['M_mantle'] - log.info('Mass of the planet mantle before running lavatmos: %s'% M_mantle_old) - log.info('Mass of the planet atmosphere before running lavatmos: %s'% M_atmo_old) - log.info('Mass of the total planet before running lavatmos: %s'% M_total) + #log.info('Mass of the planet mantle before running lavatmos: %s'% M_mantle_old) + #log.info('Mass of the planet atmosphere before running lavatmos: %s'% M_atmo_old) + #log.info('Mass of the total planet before running lavatmos: %s'% M_total) lavatmos_instance = container_lavatmos(parameters) @@ -314,7 +314,7 @@ def run_lavatmos(config:Config,hf_row:dict): #saving new oxygen fugacity for calliope - log10_fO2 = np.log10(new_atmos_abundances['O2'][0]) + log10_fO2 = np.log10(new_atmos_abundances['O2'][0]) + np.log10(new_atmos_abundances['Pbar'][0]) # is this really partical pressure ? Maybe this is actually abundances fO2_shift = FO2shift() hf_row['fO2_shift'] = fO2_shift(hf_row["T_magma"], log10_fO2) diff --git a/src/proteus/outgas/wrapper.py b/src/proteus/outgas/wrapper.py index 3a8553d7d..ae8bfd9de 100644 --- a/src/proteus/outgas/wrapper.py +++ b/src/proteus/outgas/wrapper.py @@ -153,14 +153,20 @@ def lavatmos_calliope_loop(dirs:dict,config:Config, hf_row:dict): ''' hf_row['fO2_shift'] = config.outgas.fO2_shift_IW + log.info("initial fO2_shift : %.6f"%config.outgas.fO2_shift_IW) run_outgassing(dirs, config, hf_row) if config.outgas.silicates: - xerr=hf_row['H2O_vmr']*0.01 - log.info("error threshold on water abundance: %.6f"%xerr) + xerr=1e-3 err=1.0 - while abs(err)>xerr: - old_row = hf_row + log.info("silicates are outgassed") + log.info("error threshold on fO2 shift : %.6f"%xerr) + log.info("current error : %.6f"%err) + while err > xerr: + old_fO2shift= hf_row['fO2_shift'] + log.info("fO2 shift before runnning lavatmos: %.6f"%old_fO2shift) run_lavatmos(config, hf_row) + log.info("new fO2 shift : %.6f"%hf_row["fO2_shift"]) run_outgassing(dirs, config, hf_row) - err=old_row['H2O_vmr']-hf_row['H2O_vmr'] - log.info("change in water abundance between the last iterations: %.6f"%err) + err=abs(old_fO2shift - hf_row['fO2_shift']) + log.info("fO2 shift after runnning lavatmos: %.6f"%hf_row['fO2_shift']) + log.info("change in fO2 between the last iterations: %.6f"%err) From 2ce4c1e8932f01ae4423aa6febc4a522fdfbf703 Mon Sep 17 00:00:00 2001 From: Leoni Janssen Date: Thu, 12 Feb 2026 18:24:19 +0100 Subject: [PATCH 11/26] removed unnecessary printing statements --- input/run_tests.toml | 6 ++-- src/proteus/outgas/lavatmos.py | 35 +++----------------- src/proteus/outgas/wrapper.py | 7 ++-- src/proteus/plot/compar_atmosphere_models.py | 11 +++--- src/proteus/plot/cpl_chem_atmosphere.py | 5 --- 5 files changed, 17 insertions(+), 47 deletions(-) diff --git a/input/run_tests.toml b/input/run_tests.toml index 0d4b4d13d..f15514159 100644 --- a/input/run_tests.toml +++ b/input/run_tests.toml @@ -31,7 +31,7 @@ version = "2.0" [params] # output files [params.out] - path = "test_1_iteration_Si_species" + path = "calliope_lavatmos_coupling_xerr001" logging = "INFO" plot_mod = 3 # Plotting frequency, 0: wait until completion | n: every n iterations | none: do not plot plot_fmt = "png" # Plotting image file format, "png" or "pdf" recommended @@ -319,9 +319,9 @@ version = "2.0" [outgas] fO2_shift_IW = 4 # atmosphere/interior boundary oxidation state [log10(ΔIW)] - silicates = true + silicates = false fastchempath = '/data3/leoni/LavAtmos/FastChem/fastchem3/output/' - vaplist = ["SiO","SiO2","Si"]#, "Na", "K", "Ti", "TiO", "TiO2" , "Mg", "MgO", "Al", "HAlO2"] + vaplist = ["SiO","SiO2","Si"]# "Na", "K", "Ti", "TiO", "TiO2" , "Mg", "MgO", "Al", "HAlO2"] module = "calliope" # Which outgassing module to use diff --git a/src/proteus/outgas/lavatmos.py b/src/proteus/outgas/lavatmos.py index 5f4c2e46e..f0a2f3a88 100644 --- a/src/proteus/outgas/lavatmos.py +++ b/src/proteus/outgas/lavatmos.py @@ -15,6 +15,8 @@ log = logging.getLogger("fwl."+__name__) + +#species db class comes from HELIOS code Kitzmann+2017 class Species_db(object): def __init__(self, name, fc_name, weight): @@ -153,39 +155,9 @@ def __init__(self, name, fc_name, weight): species_lib["Fe"] = Species_db(name="Fe", fc_name="Fe", weight=55.845) species_lib["Zn"] = Species_db(name="Zn", fc_name="Zn", weight=65.38) -# ions -species_lib["H-_bf"] = Species_db(name="H-_bf", fc_name="H1-", weight=species_lib["H"].weight) -species_lib["H-_ff"] = Species_db(name="H-_ff", fc_name="H&e-", weight=species_lib["H"].weight) -species_lib["He-"] = Species_db(name="He-", fc_name="He&e-", weight=species_lib["He"].weight) -species_lib["H3+"] = Species_db(name="H3+", fc_name="H3+ is not included in FastChem...sorry!", weight=3.02382) -species_lib["HeH+"] = Species_db(name="HeH+", fc_name="HeH+ is not included in FastChem...sorry!", weight=5.01054) -species_lib["Fe+"] = Species_db(name="Fe+", fc_name="Fe1+", weight=55.845) -species_lib["Mg+"] = Species_db(name="Mg+", fc_name="Mg1+", weight=24.305) -species_lib["Si+"] = Species_db(name="Si+", fc_name="Si1+", weight=28.086) -species_lib["Ti+"] = Species_db(name="Ti+", fc_name="Ti1+", weight=47.867) -species_lib["H2_p"] = Species_db(name="H2_p", fc_name="H2+", weight=2.016) -species_lib["H2_m"] = Species_db(name="H2_m", fc_name="H2-", weight=2.016) -species_lib["H3O_p"] = Species_db(name="H3O_p", fc_name="H3O1+", weight=19.023) -species_lib["OH_p"] = Species_db(name="OH_p", fc_name="O1H1+", weight=17.008) - # don't forget the electrons! (they may be tiny but they are important) species_lib["e-"] = Species_db(name="e-", fc_name="e-", weight=5.4858e-4) -# CIA pairs (Note: those come pre-calculated in opacity units (cm2/g) dividing by the weight of the 2nd collision partner in writing order) -species_lib["CIA_H2H2"] = Species_db(name="CIA_H2H2", fc_name="H2&H2", weight=species_lib["H2"].weight) -species_lib["CIA_H2He"] = Species_db(name="CIA_H2He", fc_name="H2&He", weight=species_lib["He"].weight) -species_lib["CIA_CO2CO2"] = Species_db(name="CIA_CO2CO2", fc_name="C1O2&C1O2", weight=species_lib["CO2"].weight) -species_lib["CIA_O2CO2"] = Species_db(name="CIA_O2CO2", fc_name="O2&C1O2", weight=species_lib["CO2"].weight) -species_lib["CIA_O2O2"] = Species_db(name="CIA_O2O2", fc_name="O2&O2", weight=species_lib["O2"].weight) -species_lib["CIA_O2N2"] = Species_db(name="CIA_O2N2", fc_name="O2&N2", weight=species_lib["N2"].weight) -species_lib["CIA_N2N2"] = Species_db(name="CIA_N2N2", fc_name="N2&N2", weight=species_lib["N2"].weight) -species_lib["CIA_N2H2"] = Species_db(name="CIA_N2H2", fc_name="N2&H2", weight=species_lib["H2"].weight) -species_lib["CIA_O2N2"] = Species_db(name="CIA_O2N2", fc_name="O2&N2", weight=species_lib["N2"].weight) -species_lib["CIA_N2N2"] = Species_db(name="CIA_N2N2", fc_name="N2&N2", weight=species_lib["N2"].weight) -species_lib["CIA_N2H2"] = Species_db(name="CIA_N2H2", fc_name="N2&H2", weight=species_lib["H2"].weight) -species_lib["CIA_H2H"] = Species_db(name="CIA_H2H", fc_name="H2&H", weight=species_lib["H"].weight) -species_lib["CIA_CO2H2"] = Species_db(name="CIA_H2H", fc_name="CO2&H2", weight=species_lib["H2"].weight) - mp = 1.6726231e-21 #kg kB = 1.38064e-23 #JK-1 particles_per_mol = 6.02214076e+23 @@ -209,6 +181,8 @@ def oneill(self, T): + + def run_lavatmos(config:Config,hf_row:dict): @@ -259,6 +233,7 @@ def run_lavatmos(config:Config,hf_row:dict): 'P_volatile' : hf_row['P_surf'], # bar 'oxygen_abundance' : 'degassed', # 'degassed', 'manual', 'volatile_comp' : lavatmos_dict, + 'melt_fraction' : 1.0 } #compute density for the previous run with calliope output from hf_row: diff --git a/src/proteus/outgas/wrapper.py b/src/proteus/outgas/wrapper.py index ae8bfd9de..4b1ee33cc 100644 --- a/src/proteus/outgas/wrapper.py +++ b/src/proteus/outgas/wrapper.py @@ -156,15 +156,14 @@ def lavatmos_calliope_loop(dirs:dict,config:Config, hf_row:dict): log.info("initial fO2_shift : %.6f"%config.outgas.fO2_shift_IW) run_outgassing(dirs, config, hf_row) if config.outgas.silicates: - xerr=1e-3 + xerr=0.01 #0.1 #1e-3 err=1.0 log.info("silicates are outgassed") log.info("error threshold on fO2 shift : %.6f"%xerr) log.info("current error : %.6f"%err) while err > xerr: - old_fO2shift= hf_row['fO2_shift'] - log.info("fO2 shift before runnning lavatmos: %.6f"%old_fO2shift) - run_lavatmos(config, hf_row) + old_fO2shift = hf_row['fO2_shift'] + run_lavatmos(config, hf_row) #in run_lavatmos add a criterion for temperature and melt fraction ? log.info("new fO2 shift : %.6f"%hf_row["fO2_shift"]) run_outgassing(dirs, config, hf_row) err=abs(old_fO2shift - hf_row['fO2_shift']) diff --git a/src/proteus/plot/compar_atmosphere_models.py b/src/proteus/plot/compar_atmosphere_models.py index 955d30d42..398127a7f 100644 --- a/src/proteus/plot/compar_atmosphere_models.py +++ b/src/proteus/plot/compar_atmosphere_models.py @@ -406,7 +406,7 @@ def plot_atmosphere_comparison(output_dir1, output_dir2, extension="_atm.nc", tm fig.savefig(fname, bbox_inches='tight', dpi=300) -def plot_chemistry_multipple_timesteps(plottimes,profiles,outputdir): +def plot_chemistry_multiple_timesteps(plottimes,profiles,outputdir): t1=int(str(plottimes[0])) t2=int(str(plottimes[-1])) @@ -430,9 +430,10 @@ def plot_chemistry_multipple_timesteps(plottimes,profiles,outputdir): vmr_surf = [] for j, t in enumerate(plottimes): atm_profile=profiles[j] - parr = atm_profile["pl"] * 1e-5 # convert to bar + parr = atm_profile["p"] * 1e-5 # convert to bar # Get year - year = float(outputdir.split("/")[-1].split("_atm")[0]) + print(outputdir.split("/")[-1].split("_atm")[0]) + year=t for i,gas in enumerate(plot_gases): print(gas) @@ -487,8 +488,8 @@ def plot_two_chemistries(output_dir1,output_dir2, extension, tmin, nsamp): plottimes1, plottimes2, profiles1, profiles2 = read_2model_data(output_dir1,output_dir2, extension, tmin, nsamp) - plot_chemistry_multipple_timesteps(plottimes1,profiles1,output_dir1) - plot_chemistry_multipple_timesteps(plottimes2,profiles2,output_dir2) + plot_chemistry_multiple_timesteps(plottimes1,profiles1,output_dir1) + plot_chemistry_multiple_timesteps(plottimes2,profiles2,output_dir2) diff --git a/src/proteus/plot/cpl_chem_atmosphere.py b/src/proteus/plot/cpl_chem_atmosphere.py index 5490a83ee..9387743df 100644 --- a/src/proteus/plot/cpl_chem_atmosphere.py +++ b/src/proteus/plot/cpl_chem_atmosphere.py @@ -81,24 +81,19 @@ def plot_chem_atmosphere(output_dir:str, chem_module:str, plot_format="pdf", al = 0.8 vmr_surf = [] for i,gas in enumerate(plot_gases): - print(gas) - col = get_colour(gas) lbl = latexify(gas) vmr = 0.0 - _lw = lw #if gas in vol_list: #_lw *= 1.25 # plot from netCDF (dashed lines) - print(atm_profile.keys()) key = gas+"_vmr" if key in atm_profile.keys(): xarr = list(atm_profile[key]) xarr = [xarr[0]] + xarr if (np.amax(xarr) >= xmin or key in list(REFRACTORY_GASES) ): - print('min vmr > minimum') vmr = float(xarr[-1]) ax.plot(xarr, parr, ls = 'dashed', color=col, lw=_lw, alpha=al) else: From dcd74775069908f22b9107651ce9fb32497ae18c Mon Sep 17 00:00:00 2001 From: Leoni Janssen Date: Fri, 13 Feb 2026 11:30:19 +0100 Subject: [PATCH 12/26] add key of fO2 shift to helpfile --- input/run_tests.toml | 2 +- src/proteus/utils/coupler.py | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/input/run_tests.toml b/input/run_tests.toml index f15514159..f09bacb9e 100644 --- a/input/run_tests.toml +++ b/input/run_tests.toml @@ -319,7 +319,7 @@ version = "2.0" [outgas] fO2_shift_IW = 4 # atmosphere/interior boundary oxidation state [log10(ΔIW)] - silicates = false + silicates = true fastchempath = '/data3/leoni/LavAtmos/FastChem/fastchem3/output/' vaplist = ["SiO","SiO2","Si"]# "Na", "K", "Ti", "TiO", "TiO2" , "Mg", "MgO", "Al", "HAlO2"] diff --git a/src/proteus/utils/coupler.py b/src/proteus/utils/coupler.py index 1f4f26e78..83609a489 100644 --- a/src/proteus/utils/coupler.py +++ b/src/proteus/utils/coupler.py @@ -571,6 +571,8 @@ def GetHelpfileKeys(config:Config): # Wall-clock runtime keys.append("runtime") # [s] + keys.append("fO2_shift") #relative to IW buffer + return keys def CreateHelpfileFromDict(d:dict,config:Config): From 6660d069664a9da8fb5a7988452c6eb4dc1b650a Mon Sep 17 00:00:00 2001 From: Leoni Janssen Date: Fri, 13 Feb 2026 17:07:02 +0100 Subject: [PATCH 13/26] added new plotting routine to plot selected timesteps and added a 1500K temperature cap for lavatmos --- input/run_tests.toml | 4 +- src/proteus/outgas/lavatmos.py | 30 ++-- src/proteus/plot/compar_atmosphere_models.py | 154 ++++++++++++++++++- 3 files changed, 161 insertions(+), 27 deletions(-) diff --git a/input/run_tests.toml b/input/run_tests.toml index f09bacb9e..981f020b7 100644 --- a/input/run_tests.toml +++ b/input/run_tests.toml @@ -31,7 +31,7 @@ version = "2.0" [params] # output files [params.out] - path = "calliope_lavatmos_coupling_xerr001" + path = "xerr001_morerefracs_fO2saved" logging = "INFO" plot_mod = 3 # Plotting frequency, 0: wait until completion | n: every n iterations | none: do not plot plot_fmt = "png" # Plotting image file format, "png" or "pdf" recommended @@ -321,7 +321,7 @@ version = "2.0" silicates = true fastchempath = '/data3/leoni/LavAtmos/FastChem/fastchem3/output/' - vaplist = ["SiO","SiO2","Si"]# "Na", "K", "Ti", "TiO", "TiO2" , "Mg", "MgO", "Al", "HAlO2"] + vaplist = ["SiO", "SiO2","Si", "Na", "K", "Ti", "TiO", "TiO2" , "Mg", "MgO", "Al", "HAlO2"] module = "calliope" # Which outgassing module to use diff --git a/src/proteus/outgas/lavatmos.py b/src/proteus/outgas/lavatmos.py index f0a2f3a88..77b3b15bd 100644 --- a/src/proteus/outgas/lavatmos.py +++ b/src/proteus/outgas/lavatmos.py @@ -246,16 +246,18 @@ def run_lavatmos(config:Config,hf_row:dict): rho_old = kg_per_particle * hf_row['P_surf']/(kB*Tsurf) M_atmo_old = hf_row['M_atm'] - #M_total = hf_row['M_core'] + hf_row['M_atm'] + hf_row['M_mantle'] - # M_mantle_old = hf_row['M_mantle'] - - #log.info('Mass of the planet mantle before running lavatmos: %s'% M_mantle_old) - #log.info('Mass of the planet atmosphere before running lavatmos: %s'% M_atmo_old) - #log.info('Mass of the total planet before running lavatmos: %s'% M_total) lavatmos_instance = container_lavatmos(parameters) - lavatmos_instance.run_lavatmos(hf_row["T_magma"]) + + #make sure that surface temperature is at least 1500K, otherwise lavatmos crashes + if hf_row["T_magma"] > 1500 : + Toutgas = hf_row["T_magma"] + else: + Toutgas = 1500 + + lavatmos_instance.run_lavatmos(Toutgas) + #read in boa chemistry from last iteration of fastchem and lavatmos fastchempath=config.outgas.fastchempath @@ -285,6 +287,7 @@ def run_lavatmos(config:Config,hf_row:dict): for e in element_list: hf_row[e + "_kg_atm"]=new_atmos_abundances[e][0] * M_atmo_new * species_lib[e].weight/mu_outgassed hf_row[e + "_kg_atm"]=new_atmos_abundances[e][0]+ hf_row[e + "_kg_solid"] + hf_row[e + "_kg_liquid"] + hf_row[e + "_kg_tot"] = hf_row[e + "_kg_atm"] + hf_row[e + "_kg_solid"] + hf_row[e + "_kg_liquid"] @@ -295,16 +298,3 @@ def run_lavatmos(config:Config,hf_row:dict): hf_row['fO2_shift'] = fO2_shift(hf_row["T_magma"], log10_fO2) print('shift compared to iron wustite buffer:', hf_row['fO2_shift']) - - - - - #in above, M_atmo should be updated. we can use this to uodate also the mantle mass of the planet - # M_mantle_new = M_total - hf_row['M_core'] - M_atmo_new - - #M_mantle_liquid_new = M_mantle_new - M_solid_old - #hf_row['M_mantle_liquid'] = M_mantle_liquid_new - #hf_row['M_mantle'] = M_mantle_new - - #log.info('Mass of the planet mantle after running lavatmos: %s'% M_mantle_new) - #log.info('Mass of the planet atmosphere after running lavatmos: %s'% M_atmo_new) diff --git a/src/proteus/plot/compar_atmosphere_models.py b/src/proteus/plot/compar_atmosphere_models.py index 398127a7f..3c4631fa3 100644 --- a/src/proteus/plot/compar_atmosphere_models.py +++ b/src/proteus/plot/compar_atmosphere_models.py @@ -7,7 +7,6 @@ import glob import logging import os -import sys from typing import TYPE_CHECKING import matplotlib as mpl @@ -300,6 +299,145 @@ def sample_output(output_dir, extension:str = "_atm.nc", tmin:float = 1.0, nsamp + +def plot_atmosphere_selected_times(output_dir,times,extra_keys=[]): + + profiles = [read_ncdf_profile(os.path.join(output_dir, "data", "%.0f_atm.nc"%t), + extra_keys=extra_keys) for t in times] + + + log.info("Plot atmosphere temperatures colourbar") + + norm = mpl.colors.LogNorm(vmin=max(times[0],1), vmax=times[-1]) + sm = plt.cm.ScalarMappable(cmap=cm.batlowK_r, norm=norm) + sm.set_array([]) + + # Initialise plot + scale = 1.1 + alpha = 0.6 + fig,ax = plt.subplots(1,1,figsize=(5*scale,4*scale)) + ax.set_ylabel("Pressure [bar]") + ax.set_xlabel("Temperature [K]") + ax.invert_yaxis() + ax.set_yscale("log") + + tmp_max = 1000.0 + prs_max = 1.0 + + print(profiles) + for i, t in enumerate(times): + prof1 = profiles[i] + + + color = sm.to_rgba(t) + tmp1 = prof1["t"] + prs1 = prof1["p"]/1e5 + + tmp_max = max(tmp_max, np.amax(tmp1)) + prs_max = max(prs_max, np.amax(prs1)) + + ax.plot(tmp1, prs1, color=color, linestyle='-', alpha=alpha, zorder=3) + + # Grid + ax.grid(alpha=0.2, zorder=2) + ax.set_xlim(0,tmp_max+100) + ax.xaxis.set_minor_locator(MultipleLocator(base=250)) + + ax.set_ylim(bottom=prs_max, top=np.amin(prs1)) + ax.yaxis.set_major_locator(LogLocator()) + + # Plot colourbar + divider = make_axes_locatable(ax) + cax = divider.append_axes('right', size='5%', pad=0.05) + cbar = fig.colorbar(sm, cax=cax, orientation='vertical') + cbar.set_label("Time [yr]") + + # Save plot + fname = os.path.join(output_dir,"plots","plot_atmosphere_selected_times.png") + fig.savefig(fname, bbox_inches='tight', dpi=300) + + +def plot_chemistry_selected_times(output_dir,times,extra_keys=[]): + + profiles = [read_ncdf_profile(os.path.join(output_dir, "data", "%.0f_atm.nc"%t), + extra_keys=extra_keys) for t in times] + + plot_gases = list(vol_list) + list(GASES_STANDARD) + plot_gases = list(dict.fromkeys(plot_gases)) + log.info("Plot atmosphere temperatures colourbar") + + norm = mpl.colors.LogNorm(vmin=max(times[0],1), vmax=times[-1]) + sm = plt.cm.ScalarMappable(cmap=cm.batlowK_r, norm=norm) + sm.set_array([]) + + xmin=10**-14 + # init plot + scale = 1.2 + + # plot species profiles + lw = 0.9 + al = 0.8 + vmr_surf = [] + for j, t in enumerate(times): + + fig,ax = plt.subplots(1,1, figsize=(6*scale,5*scale)) + atm_profile=profiles[j] + parr = atm_profile["p"] * 1e-5 # convert to bar + # Get year + print(output_dir.split("/")[-1].split("_atm")[0]) + year=t + for i,gas in enumerate(plot_gases): + print(gas) + + col = get_colour(gas) + lbl = latexify(gas) + vmr = 0.0 + + _lw = lw + if gas in vol_list: + _lw *= 1.25 + + # plot from netCDF (dashed lines) + key = gas+"_vmr" + if key in atm_profile.keys(): + print('gas output exists from agni:', key) + xarr = list(atm_profile[key]) + xarr = [xarr[0]] + xarr + if np.amax(xarr) >= xmin: + print('min vmr > minimum') + print('plotting') + ax.plot(xarr, parr, ls = 'dashed', color=col, lw=_lw, alpha=al,label=lbl) + else: + print(np.amax(xarr)) + # create legend entry and store surface vmr + if vmr > 0.0: + print('vmr added to surface vmrs') + vmr_surf.append(vmr) + + ax.set_xscale("log") + ax.set_xlim(left=xmin, right=1.1) + ax.set_xlabel("Volume mixing ratio, at t=%.2e yr"%year) + ax.xaxis.set_major_locator(LogLocator(numticks=1000)) + + ax.set_ylabel("Pressure [bar]") + ax.set_yscale("log") + ax.set_ylim(bottom=np.amax(parr), top=np.amin(parr)) + ax.yaxis.set_major_locator(LogLocator(numticks=1000)) + + # Legend (handles sorted by surface vmr) + handles, labels = ax.get_legend_handles_labels() + order = np.argsort(vmr_surf)[::-1] + ax.legend([handles[idx] for idx in order],[labels[idx] for idx in order], + loc='lower center', bbox_to_anchor=(0.5, 1), + ncols=11, fontsize=9, borderpad=0.4, + labelspacing=0.3, columnspacing=1.0, handlelength=1.5, handletextpad=0.3) + + # Save file + fpath = os.path.join(output_dir, "plots", "plot_chem_atmosphere_selected_times_{}.png".format(t)) + fig.savefig(fpath, dpi=200, bbox_inches='tight') + + + def plot_atmosphere_comparison(output_dir1, output_dir2, extension="_atm.nc", tmin=1e4, nsamp=5, plot_format="pdf"): """ @@ -495,8 +633,14 @@ def plot_two_chemistries(output_dir1,output_dir2, extension, tmin, nsamp): if __name__ == "__main__": - output_dir1=sys.argv[1] - output_dir2=sys.argv[2] + #output_dir1=sys.argv[1] + #output_dir2=sys.argv[2] + + #plot_atmosphere_comparison(output_dir1, output_dir2, tmin=1e4, extension="_atm.nc", nsamp=5, plot_format="png") + #plot_two_chemistries(output_dir1,output_dir2, extension="_atm.nc", tmin=1e4, nsamp=5) + + output_dir='/data3/leoni/PROTEUS/output/calliope_lavatmos_coupling_xerr001' + plottimes=[124027,134027,142186,152186] - plot_atmosphere_comparison(output_dir1, output_dir2, tmin=1e4, extension="_atm.nc", nsamp=5, plot_format="png") - plot_two_chemistries(output_dir1,output_dir2, extension="_atm.nc", tmin=1e4, nsamp=5) + plot_atmosphere_selected_times(output_dir, plottimes) + plot_chemistry_selected_times(output_dir, plottimes) From a5a23533b5b78e9aabc393fff375ad48fd29972a Mon Sep 17 00:00:00 2001 From: Leoni Janssen Date: Tue, 17 Feb 2026 13:28:52 +0100 Subject: [PATCH 14/26] added copilot sggestions --- .../compar_atmosphere_models.py | 0 src/proteus/atmos_clim/agni.py | 2 +- src/proteus/atmos_clim/janus.py | 6 +++- src/proteus/config/_outgas.py | 26 +++++++++++++++-- src/proteus/outgas/calliope.py | 2 +- src/proteus/outgas/lavatmos.py | 11 ++++---- src/proteus/outgas/wrapper.py | 28 ++++++++++++++++--- src/proteus/plot/cpl_chem_atmosphere.py | 2 +- src/proteus/plot/cpl_escape.py | 3 -- src/proteus/proteus.py | 4 +-- src/proteus/utils/coupler.py | 27 ++---------------- tests/outgas/test_outgas.py | 13 ++++++++- 12 files changed, 77 insertions(+), 47 deletions(-) rename {src/proteus/plot => examples/plot_comparison_runs}/compar_atmosphere_models.py (100%) diff --git a/src/proteus/plot/compar_atmosphere_models.py b/examples/plot_comparison_runs/compar_atmosphere_models.py similarity index 100% rename from src/proteus/plot/compar_atmosphere_models.py rename to examples/plot_comparison_runs/compar_atmosphere_models.py diff --git a/src/proteus/atmos_clim/agni.py b/src/proteus/atmos_clim/agni.py index 611d0671c..e6a83fbd0 100644 --- a/src/proteus/atmos_clim/agni.py +++ b/src/proteus/atmos_clim/agni.py @@ -74,7 +74,7 @@ def _construct_voldict(hf_row:dict, dirs:dict, config:Config): gas_list=get_gaslist(config) - print("list of gases used by agni: ",gas_list) + log.debug("list of gases used by agni: %s", gas_list) # get from hf_row vol_dict = {} diff --git a/src/proteus/atmos_clim/janus.py b/src/proteus/atmos_clim/janus.py index 945a47200..c9511d14d 100644 --- a/src/proteus/atmos_clim/janus.py +++ b/src/proteus/atmos_clim/janus.py @@ -11,8 +11,9 @@ import pandas as pd from proteus.atmos_clim.common import get_oarr_from_parr -from proteus.utils.constants import gas_list, vap_list, vol_list +from proteus.utils.constants import vap_list, vol_list from proteus.utils.helper import UpdateStatusfile, create_tmp_folder +from proteus.outgas.wrapper import get_gaslist if TYPE_CHECKING: from proteus.config import Config @@ -20,6 +21,7 @@ log = logging.getLogger('fwl.' + __name__) + def InitStellarSpectrum(dirs: dict, wl: list, fl: list, spectral_file_nostar): from janus.utils import InsertStellarSpectrum, PrepareStellarSpectrum @@ -330,6 +332,8 @@ def RunJANUS( output['ocean_maxdepth'] = 0.0 # set composition at Pxuv + gas_list=get_gaslist(config) + for g in gas_list: if g in atm.x_gas.keys(): _, x_xuv = get_oarr_from_parr(atm.p, atm.x_gas[g], p_xuv * 1e5) diff --git a/src/proteus/config/_outgas.py b/src/proteus/config/_outgas.py index 00689de17..2d9e26bef 100644 --- a/src/proteus/config/_outgas.py +++ b/src/proteus/config/_outgas.py @@ -102,6 +102,26 @@ class Outgas: calliope: Calliope = field(factory=Calliope) atmodeller: Atmodeller = field(factory=Atmodeller) - silicates: bool = field(default=True) - fastchempath: str = field(default="/data3/leoni/LavAtmos/FastChem/fastchem3/output/") - vaplist: list = field(default=['SiO','SiO2','MgO','FeO']) + # LavAtmos / silicate coupling is opt-in: default to disabled. + silicates: bool = field(default=False) + # Path to FastChem output directory used by LavAtmos; must be set when silicate coupling is enabled. + fastchempath: str = field(default='') + # List of vapour species for LavAtmos; must be set when silicate coupling is enabled. + vaplist: list = field(factory=list) + + def __attrs_post_init__(self) -> None: + """ + Perform cross-field validation after initialization. + + When silicate (LavAtmos) coupling is enabled via `silicates=True`, + ensure that `fastchempath` and `vaplist` are explicitly configured. + """ + if self.silicates: + if not self.fastchempath: + raise ValueError( + "Outgas.fastchempath must be set when silicate (LavAtmos) coupling is enabled." + ) + if not self.vaplist: + raise ValueError( + "Outgas.vaplist must be set when silicate (LavAtmos) coupling is enabled." + ) diff --git a/src/proteus/outgas/calliope.py b/src/proteus/outgas/calliope.py index a702356b0..bd857de30 100644 --- a/src/proteus/outgas/calliope.py +++ b/src/proteus/outgas/calliope.py @@ -52,7 +52,7 @@ def construct_options(dirs: dict, config: Config, hf_row: dict): else: solvevol_inp['fO2_shift_IW'] = config.outgas.fO2_shift_IW - print('fO2 shift used by calliope:', solvevol_inp['fO2_shift_IW']) + log.info('fO2 shift used by calliope:%s', solvevol_inp['fO2_shift_IW']) # Volatile inventory for s in vol_list: diff --git a/src/proteus/outgas/lavatmos.py b/src/proteus/outgas/lavatmos.py index 77b3b15bd..675a167d6 100644 --- a/src/proteus/outgas/lavatmos.py +++ b/src/proteus/outgas/lavatmos.py @@ -158,7 +158,7 @@ def __init__(self, name, fc_name, weight): # don't forget the electrons! (they may be tiny but they are important) species_lib["e-"] = Species_db(name="e-", fc_name="e-", weight=5.4858e-4) -mp = 1.6726231e-21 #kg +mp = 1.6726231e-27 #kg kB = 1.38064e-23 #JK-1 particles_per_mol = 6.02214076e+23 @@ -243,7 +243,9 @@ def run_lavatmos(config:Config,hf_row:dict): Tsurf=hf_row["T_magma"] else: Tsurf=hf_row['T_surf'] - rho_old = kg_per_particle * hf_row['P_surf']/(kB*Tsurf) + # hf_row['P_surf'] is in bar; convert to Pascals for use in the ideal gas law + P_surf_Pa = hf_row['P_surf'] * 1.0e5 + rho_old = kg_per_particle * P_surf_Pa/(kB*Tsurf) M_atmo_old = hf_row['M_atm'] @@ -281,13 +283,12 @@ def run_lavatmos(config:Config,hf_row:dict): #here need to update it in terms of pressure as well, since this is input for calliiope hf_row[vol + "_vmr"] = new_atmos_abundances[vol][0] hf_row[vol + "_kg_atm"] = new_atmos_abundances[vol][0] * M_atmo_new * species_lib[vol].weight/mu_outgassed #kg - hf_row[vol + "_kg_tot"] = hf_row[vol + "_kg_atm"] + hf_row[vol + "_kg_solid"] + hf_row[vol + "_kg_liquid"] + hf_row[vol + "_kg_total"] = hf_row[vol + "_kg_atm"] + hf_row[vol + "_kg_solid"] + hf_row[vol + "_kg_liquid"] #elements are not considered as atomic species but just as inventory for e in element_list: hf_row[e + "_kg_atm"]=new_atmos_abundances[e][0] * M_atmo_new * species_lib[e].weight/mu_outgassed - hf_row[e + "_kg_atm"]=new_atmos_abundances[e][0]+ hf_row[e + "_kg_solid"] + hf_row[e + "_kg_liquid"] - hf_row[e + "_kg_tot"] = hf_row[e + "_kg_atm"] + hf_row[e + "_kg_solid"] + hf_row[e + "_kg_liquid"] + hf_row[e + "_kg_total"] = hf_row[e + "_kg_atm"] + hf_row[e + "_kg_solid"] + hf_row[e + "_kg_liquid"] diff --git a/src/proteus/outgas/wrapper.py b/src/proteus/outgas/wrapper.py index abf48b5ba..0ed57eab4 100644 --- a/src/proteus/outgas/wrapper.py +++ b/src/proteus/outgas/wrapper.py @@ -144,7 +144,7 @@ def run_desiccated(config: Config, hf_row: dict): excepted_keys.append(f'{g}_vmr') # Set most values to zero - for k in expected_keys(): + for k in expected_keys(config): if k not in excepted_keys: hf_row[k] = 0.0 @@ -170,14 +170,34 @@ def lavatmos_calliope_loop(dirs:dict,config:Config, hf_row:dict): if config.outgas.silicates: xerr=0.01 #0.1 #1e-3 err=1.0 + # Maximum number of LavAtmos/Calliope iterations; allow configuration with a sensible default + max_iterations = getattr(getattr(config, "outgas", config), "max_lavatmos_iterations", 100) + iteration = 0 log.info("silicates are outgassed") log.info("error threshold on fO2 shift : %.6f"%xerr) - log.info("current error : %.6f"%err) - while err > xerr: + log.info("initial error : %.6f"%err) + log.info("maximum LavAtmos/Calliope iterations : %d"%max_iterations) + while err > xerr and iteration < max_iterations: + iteration += 1 + log.info("LavAtmos/Calliope iteration %d"%iteration) old_fO2shift = hf_row['fO2_shift'] run_lavatmos(config, hf_row) #in run_lavatmos add a criterion for temperature and melt fraction ? log.info("new fO2 shift : %.6f"%hf_row["fO2_shift"]) run_outgassing(dirs, config, hf_row) err=abs(old_fO2shift - hf_row['fO2_shift']) - log.info("fO2 shift after runnning lavatmos: %.6f"%hf_row['fO2_shift']) + log.info("fO2 shift after running lavatmos: %.6f"%hf_row['fO2_shift']) log.info("change in fO2 between the last iterations: %.6f"%err) + if err > xerr: + log.error( + "LavAtmos/Calliope did not converge within %d iterations " + "(final |ΔfO2_shift| = %.6f, threshold = %.6f)", + max_iterations, + err, + xerr, + ) + raise RuntimeError( + "LavAtmos/Calliope convergence failed: " + "maximum number of iterations (%d) exceeded without reaching " + "the fO2_shift error threshold (final error = %.6f, threshold = %.6f)" + % (max_iterations, err, xerr) + ) diff --git a/src/proteus/plot/cpl_chem_atmosphere.py b/src/proteus/plot/cpl_chem_atmosphere.py index a5147ac09..661dbe3e0 100644 --- a/src/proteus/plot/cpl_chem_atmosphere.py +++ b/src/proteus/plot/cpl_chem_atmosphere.py @@ -95,7 +95,7 @@ def plot_chem_atmosphere( if key in atm_profile.keys(): xarr = list(atm_profile[key]) xarr = [xarr[0]] + xarr - if (np.amax(xarr) >= xmin or key in list(REFRACTORY_GASES) ): + if (np.amax(xarr) >= xmin or gas in list(REFRACTORY_GASES)): vmr = float(xarr[-1]) ax.plot(xarr, parr, ls = 'dashed', color=col, lw=_lw, alpha=al) else: diff --git a/src/proteus/plot/cpl_escape.py b/src/proteus/plot/cpl_escape.py index 8f2936f5b..de2ca8bb1 100644 --- a/src/proteus/plot/cpl_escape.py +++ b/src/proteus/plot/cpl_escape.py @@ -48,11 +48,8 @@ def plot_escape(hf_all: pd.DataFrame, output_dir: str, plot_format='pdf'): # By element total = np.zeros(len(time)) - log.info(element_list) for e in element_list: - log.info(e) - _lw = lw if e == 'H': _lw = lw * 1.8 diff --git a/src/proteus/proteus.py b/src/proteus/proteus.py index d4d3da1d0..220480ebc 100644 --- a/src/proteus/proteus.py +++ b/src/proteus/proteus.py @@ -304,7 +304,7 @@ def start(self, *, resume: bool = False, offline: bool = False): log.info('Included gases:') for s in inc_gases: write = " " - write += "vapour " if s in vol_list else "volatile" + write += "volatile " if s in vol_list else "vapour" write += " %-8s" % s if self.config.delivery.initial == "volatiles": write += " : %6.2f bar"%self.hf_row[s + "_bar"] @@ -315,7 +315,7 @@ def start(self, *, resume: bool = False, offline: bool = False): log.info('Resuming the simulation from the disk') # Read helpfile from disk - self.hf_all = ReadHelpfileFromCSV(self.directories["output"],self.config) + self.hf_all = ReadHelpfileFromCSV(self.directories["output"]) # Check length if len(self.hf_all) <= self.loops['init_loops'] + 1: diff --git a/src/proteus/utils/coupler.py b/src/proteus/utils/coupler.py index fbea934ed..74ce0a00a 100644 --- a/src/proteus/utils/coupler.py +++ b/src/proteus/utils/coupler.py @@ -19,12 +19,11 @@ import numpy as np import pandas as pd +from proteus.outgas.wrapper import get_gaslist from proteus.utils.constants import ( element_list, secs_per_hour, secs_per_minute, - vap_list, - vol_list, ) from proteus.utils.helper import UpdateStatusfile, create_tmp_folder, get_proteus_dir, safe_rm from proteus.utils.plot import sample_times @@ -613,31 +612,9 @@ def GetHelpfileKeys(config:Config): # Stellar "M_star", "R_star", "age_star", # [kg], [m], [yr] "T_star", # [K] - - - # Observational (from infinity) - "p_obs", # observered radius [bar] - "R_obs", # observed radius [m] - "rho_obs", # observed bulk density [kg m-3] - "transit_depth", "eclipse_depth", # [1], [1] - - "albedo_pl", # input bond albedo [1] - "bond_albedo", # output bond albedo [1] - - # Imaginary part of k2 Love Number - "Imk2", # [1] - - # Escape - "esc_rate_total", "p_xuv", "R_xuv", # [kg s-1], [bar], [m] - - # Atmospheric composition from outgassing - "M_atm", "P_surf", "atm_kg_per_mol", # [kg], [bar], [kg mol-1] ] - if config.outgas.silicates: - gas_list = vol_list + config.outgas.vaplist - else: - gas_list = vol_list + vap_list + gas_list=get_gaslist(config) # gases from outgassing for s in gas_list: diff --git a/tests/outgas/test_outgas.py b/tests/outgas/test_outgas.py index b1c867b14..acb2616c3 100644 --- a/tests/outgas/test_outgas.py +++ b/tests/outgas/test_outgas.py @@ -34,10 +34,11 @@ from proteus.outgas.wrapper import ( calc_target_elemental_inventories, check_desiccation, + get_galist, run_desiccated, run_outgassing, ) -from proteus.utils.constants import element_list, gas_list +from proteus.utils.constants import element_list @pytest.mark.unit @@ -178,6 +179,8 @@ def test_run_outgassing_calliope_calculation(): # Setup hf_row with gas masses and VMR (typical early Earth steam atmosphere) hf_row = {} + gas_list=get_galist(config) + for s in gas_list: hf_row[s + '_kg_atm'] = 1e19 if s == 'H2O' else 1e16 # H2O-dominated hf_row[s + '_vmr'] = 0.95 if s == 'H2O' else 0.01 # Volume mixing ratios @@ -229,6 +232,9 @@ def test_run_outgassing_atmosphere_mass_conservation(): 1e11, 1e10, ] + + gas_list=get_galist(config) + for i, s in enumerate(gas_list): hf_row[s + '_kg_atm'] = gas_masses[i] hf_row[s + '_vmr'] = 0.1 / len(gas_list) # Equal fractional mixing @@ -259,6 +265,7 @@ def test_run_outgassing_disabled_module(): # Setup with fixed gas masses hf_row = {} + gas_list=get_galist(config) for s in gas_list: hf_row[s + '_kg_atm'] = 1e18 # Fixed 1 exagram per species hf_row[s + '_vmr'] = 1.0 / len(gas_list) # Equal mixing @@ -290,6 +297,7 @@ def test_run_desiccated_zeros_outgassing_keys(): # Setup hf_row with outgassing data hf_row = {} + gas_list=get_galist(config) for s in gas_list: hf_row[s + '_kg_atm'] = 1e18 # Non-zero before desiccation hf_row[s + '_vmr'] = 0.1 # VMR preserved to avoid divide-by-zero @@ -332,6 +340,7 @@ def test_run_desiccated_preserves_critical_keys(): } # Add VMR and mass for all gases in gas_list + gas_list=get_galist(config) for s in gas_list: if s == 'H2O': hf_row[s + '_vmr'] = 0.9 @@ -369,6 +378,7 @@ def test_run_outgassing_zero_atmosphere_mass(): # All gases have zero mass hf_row = {} + gas_list=get_galist(config) for s in gas_list: hf_row[s + '_kg_atm'] = 0.0 hf_row[s + '_vmr'] = 0.0 @@ -444,6 +454,7 @@ def test_run_outgassing_mixed_species_dominance(): 'FeO2_kg_atm': 0.0, } + gas_list=get_galist(config) for s in gas_list: if s in ['N2', 'O2']: hf_row[s + '_vmr'] = 0.5 # ~50% each for simplicity From 304a839bcb59dcd7ffd6c579792163c07f7b5069 Mon Sep 17 00:00:00 2001 From: Leoni Janssen Date: Tue, 17 Feb 2026 16:18:05 +0100 Subject: [PATCH 15/26] made required changes by copilot --- input/albedo_test.toml | 1 + input/run_tests.toml | 3 +- src/proteus/atmos_clim/agni.py | 39 +- src/proteus/atmos_clim/janus.py | 3 +- src/proteus/cli.py | 1 + src/proteus/config/_outgas.py | 8 +- src/proteus/outgas/calliope.py | 2 +- src/proteus/outgas/common.py | 6 +- src/proteus/outgas/lavatmos.py | 420 +++++++++--------- src/proteus/outgas/wrapper.py | 64 +-- src/proteus/plot/cpl_atmosphere.py | 10 +- src/proteus/plot/cpl_chem_atmosphere.py | 65 ++- src/proteus/plot/cpl_escape.py | 1 - src/proteus/plot/cpl_global.py | 4 +- .../compar_atmosphere_models.py | 228 +++++----- src/proteus/proteus.py | 46 +- src/proteus/utils/constants.py | 36 +- src/proteus/utils/coupler.py | 29 +- src/proteus/utils/plot.py | 45 +- tests/outgas/test_outgas.py | 14 +- 20 files changed, 537 insertions(+), 488 deletions(-) diff --git a/input/albedo_test.toml b/input/albedo_test.toml index 109b8ede2..9bf1e5318 100644 --- a/input/albedo_test.toml +++ b/input/albedo_test.toml @@ -116,6 +116,7 @@ version = "2.0" rot_period = "none" # rotation period [days] tracks = "spada" # evolution tracks: spada | baraffe age_now = 4.567 # current age of star [Gyr] + star_name = "sun" spec = "stellar_spectra/Named/sun.txt" # path to stellar spectrum file [star.dummy] diff --git a/input/run_tests.toml b/input/run_tests.toml index 981f020b7..47da0b2d2 100644 --- a/input/run_tests.toml +++ b/input/run_tests.toml @@ -31,7 +31,7 @@ version = "2.0" [params] # output files [params.out] - path = "xerr001_morerefracs_fO2saved" + path = "updated_element_tracking" logging = "INFO" plot_mod = 3 # Plotting frequency, 0: wait until completion | n: every n iterations | none: do not plot plot_fmt = "png" # Plotting image file format, "png" or "pdf" recommended @@ -116,6 +116,7 @@ version = "2.0" rot_period = "none" # rotation period [days] tracks = "spada" # evolution tracks: spada | baraffe age_now = 4.567 # current age of star [Gyr] + star_name = "sun" spec = "stellar_spectra/Named/sun.txt" # path to stellar spectrum file [star.dummy] diff --git a/src/proteus/atmos_clim/agni.py b/src/proteus/atmos_clim/agni.py index e6a83fbd0..2f0b4a9ad 100644 --- a/src/proteus/atmos_clim/agni.py +++ b/src/proteus/atmos_clim/agni.py @@ -70,11 +70,10 @@ def activate_julia(dirs: dict, verbosity: int): log.debug("AGNI will log to '%s'" % logpath) -def _construct_voldict(hf_row:dict, dirs:dict, config:Config): +def _construct_voldict(hf_row: dict, dirs: dict, config: Config): + gas_list = get_gaslist(config) - gas_list=get_gaslist(config) - - log.debug("list of gases used by agni: %s", gas_list) + log.debug('list of gases used by agni: %s', gas_list) # get from hf_row vol_dict = {} @@ -167,7 +166,7 @@ def init_agni_atmos(dirs: dict, config: Config, hf_row: dict): log.info(f'Temporary-file working dir: {io_dir}') # composition - vol_dict = _construct_voldict(hf_row, dirs,config) + vol_dict = _construct_voldict(hf_row, dirs, config) # set condensation condensates = [] @@ -322,18 +321,18 @@ def update_agni_atmos(atmos, hf_row: dict, dirs: dict, config: Config): # --------------------- # Update instellation flux - atmos.instellation = float(hf_row["F_ins"]) - log.info("albedo of planet from tables:%.3f"%hf_row["albedo_pl"]) - #value=jl.getfield(atmos, jl.Symbol("albedo_b")) - #log.info("albedo of planet computed before reattributing:%.3f"%value) - setfield = getattr(jl, "setfield!") - setfield(atmos, jl.Symbol("albedo_b"), float(hf_row["albedo_pl"])) - value=jl.getfield(atmos, jl.Symbol("albedo_b")) - log.info("albedo of planet computed after reattributing:%.3f"%value) + atmos.instellation = float(hf_row['F_ins']) + log.info('albedo of planet from tables:%.3f' % hf_row['albedo_pl']) + # value=jl.getfield(atmos, jl.Symbol("albedo_b")) + # log.info("albedo of planet computed before reattributing:%.3f"%value) + setfield = getattr(jl, 'setfield!') + setfield(atmos, jl.Symbol('albedo_b'), float(hf_row['albedo_pl'])) + value = jl.getfield(atmos, jl.Symbol('albedo_b')) + log.info('albedo of planet computed after reattributing:%.3f' % value) # --------------------- # Update compositions - vol_dict = _construct_voldict(hf_row, dirs,config) + vol_dict = _construct_voldict(hf_row, dirs, config) for g in vol_dict.keys(): atmos.gas_vmr[g][:] = vol_dict[g] atmos.gas_ovmr[g][:] = vol_dict[g] @@ -537,13 +536,13 @@ def _solve_once(atmos, config: Config): Atmosphere struct """ - #set included vapur species - gas_list=get_gaslist(config) + # set included vapur species + gas_list = get_gaslist(config) # set temperature profile # rainout volatiles at surface - rained = jl.AGNI.chemistry.calc_composition_b(atmos, - config.atmos_clim.agni.oceans, - False, False) + rained = jl.AGNI.chemistry.calc_composition_b( + atmos, config.atmos_clim.agni.oceans, False, False + ) rained = bool(rained) if rained: @@ -736,7 +735,7 @@ def run_agni(atmos, loops_total: int, dirs: dict, config: Config, hf_row: dict): output['ocean_maxdepth'] = float(atmos.ocean_maxdepth) output['P_surf_clim'] = float(atmos.p_boa) / 1e5 # Calculated Psurf [bar] - gas_list=get_gaslist(config) + gas_list = get_gaslist(config) for g in gas_list: if g in list(atmos.gas_names): diff --git a/src/proteus/atmos_clim/janus.py b/src/proteus/atmos_clim/janus.py index c9511d14d..56f46156e 100644 --- a/src/proteus/atmos_clim/janus.py +++ b/src/proteus/atmos_clim/janus.py @@ -21,7 +21,6 @@ log = logging.getLogger('fwl.' + __name__) - def InitStellarSpectrum(dirs: dict, wl: list, fl: list, spectral_file_nostar): from janus.utils import InsertStellarSpectrum, PrepareStellarSpectrum @@ -332,7 +331,7 @@ def RunJANUS( output['ocean_maxdepth'] = 0.0 # set composition at Pxuv - gas_list=get_gaslist(config) + gas_list = get_gaslist(config) for g in gas_list: if g in atm.x_gas.keys(): diff --git a/src/proteus/cli.py b/src/proteus/cli.py index 4b8f176b9..60e23eba2 100644 --- a/src/proteus/cli.py +++ b/src/proteus/cli.py @@ -42,6 +42,7 @@ required=True, ) + @click.group() @click.version_option(version=proteus_version) def cli(): diff --git a/src/proteus/config/_outgas.py b/src/proteus/config/_outgas.py index 2d9e26bef..c5df73d1b 100644 --- a/src/proteus/config/_outgas.py +++ b/src/proteus/config/_outgas.py @@ -99,8 +99,8 @@ class Outgas: mass_thresh: float = field(default=1e16, validator=validators.gt(0.0)) - calliope: Calliope = field(factory=Calliope) - atmodeller: Atmodeller = field(factory=Atmodeller) + calliope: Calliope = field(factory=Calliope) + atmodeller: Atmodeller = field(factory=Atmodeller) # LavAtmos / silicate coupling is opt-in: default to disabled. silicates: bool = field(default=False) @@ -119,9 +119,9 @@ def __attrs_post_init__(self) -> None: if self.silicates: if not self.fastchempath: raise ValueError( - "Outgas.fastchempath must be set when silicate (LavAtmos) coupling is enabled." + 'Outgas.fastchempath must be set when silicate (LavAtmos) coupling is enabled.' ) if not self.vaplist: raise ValueError( - "Outgas.vaplist must be set when silicate (LavAtmos) coupling is enabled." + 'Outgas.vaplist must be set when silicate (LavAtmos) coupling is enabled.' ) diff --git a/src/proteus/outgas/calliope.py b/src/proteus/outgas/calliope.py index bd857de30..62d2dd280 100644 --- a/src/proteus/outgas/calliope.py +++ b/src/proteus/outgas/calliope.py @@ -45,7 +45,7 @@ def construct_options(dirs: dict, config: Config, hf_row: dict): solvevol_inp['Phi_global'] = 0.0 # Surface properties - solvevol_inp["T_magma"] = hf_row["T_magma"] + solvevol_inp['T_magma'] = hf_row['T_magma'] if 'fO2_shift' in hf_row.keys(): solvevol_inp['fO2_shift_IW'] = hf_row['fO2_shift'] diff --git a/src/proteus/outgas/common.py b/src/proteus/outgas/common.py index 12bb5acca..3f8712a71 100644 --- a/src/proteus/outgas/common.py +++ b/src/proteus/outgas/common.py @@ -8,11 +8,11 @@ from proteus.utils.constants import element_list, vap_list, vol_list -#from proteus.outgas.wrapper import get_gaslist +# from proteus.outgas.wrapper import get_gaslist -def expected_keys(config:Config): - copy_keys = ["P_surf", "M_atm", "atm_kg_per_mol"] +def expected_keys(config: Config): + copy_keys = ['P_surf', 'M_atm', 'atm_kg_per_mol'] # reservoirs res_list = ('atm', 'liquid', 'solid', 'total') diff --git a/src/proteus/outgas/lavatmos.py b/src/proteus/outgas/lavatmos.py index 675a167d6..55ef5994a 100644 --- a/src/proteus/outgas/lavatmos.py +++ b/src/proteus/outgas/lavatmos.py @@ -13,14 +13,12 @@ from proteus.utils.constants import element_list, vol_list -log = logging.getLogger("fwl."+__name__) +log = logging.getLogger('fwl.' + __name__) -#species db class comes from HELIOS code Kitzmann+2017 +# species db class comes from HELIOS code Kitzmann+2017 class Species_db(object): - def __init__(self, name, fc_name, weight): - self.name = name self.fc_name = fc_name # designation in Fastchem self.weight = weight # weight in AMU or g/mol @@ -29,164 +27,161 @@ def __init__(self, name, fc_name, weight): species_lib = {} # neutral molecules -species_lib["CO2"] = Species_db(name="CO2", fc_name="C1O2", weight=44.01) -species_lib["H2O"] = Species_db(name="H2O", fc_name="H2O1", weight=18.0153) -species_lib["CO"] = Species_db(name="CO", fc_name="C1O1", weight=28.01) -species_lib["O2"] = Species_db(name="O2", fc_name="O2", weight=31.9988) -species_lib["CH4"] = Species_db(name="CH4", fc_name="C1H4", weight=16.04) -species_lib["HCN"] = Species_db(name="HCN", fc_name="H1C1N1", weight=27.0253) -species_lib["NH3"] = Species_db(name="NH3", fc_name="N1H3", weight=17.031) -species_lib["H2S"] = Species_db(name="H2S", fc_name="H2S1", weight=34.081) -species_lib["PH3"] = Species_db(name="PH3", fc_name="P1H3", weight=33.99758) -species_lib["O3"] = Species_db(name="O3", fc_name="O3", weight=47.9982) -species_lib["O3_IR"] = Species_db(name="O3_IR", fc_name="O3", weight=47.9982) -species_lib["O3_UV"] = Species_db(name="O3_UV", fc_name="O3", weight=47.9982) -species_lib["NO"] = Species_db(name="NO", fc_name="N1O1", weight=30.01) -species_lib["SO2"] = Species_db(name="SO2", fc_name="S1O2", weight=64.066) -species_lib["HS"] = Species_db(name="HS", fc_name="H1S1", weight=33.073) -species_lib["H2"] = Species_db(name="H2", fc_name="H2", weight=2.01588) -species_lib["N2"] = Species_db(name="N2", fc_name="N2", weight=28.0134) -species_lib["SO"] = Species_db(name="SO", fc_name="S1O1", weight=48.0644) -species_lib["OH"] = Species_db(name="OH", fc_name="O1H1", weight=17.007) -species_lib["COS"] = Species_db(name="COS", fc_name="C1O1S1", weight=60.0751) -species_lib["CS"] = Species_db(name="CS", fc_name="C1S1", weight=44.0757) -species_lib["HCHO"] = Species_db(name="HCHO", fc_name="H1C1H1O1", weight=30.02598) -species_lib["C2H4"] = Species_db(name="C2H4", fc_name="C2H4", weight=28.05316) -species_lib["C2H2"] = Species_db(name="C2H2", fc_name="C2H2", weight=26.04) -species_lib["CH3"] = Species_db(name="CH3", fc_name="C1H3", weight=37.04004) -species_lib["C3H"] = Species_db(name="C3H", fc_name="C3H1", weight=37.04004) -species_lib["C2H"] = Species_db(name="C2H", fc_name="C2H1", weight=25.02934) -species_lib["C2N2"] = Species_db(name="C2N2", fc_name="C2N2", weight=52.0348) -species_lib["C3O2"] = Species_db(name="C3O2", fc_name="C3O2", weight=68.0309) -species_lib["C4N2"] = Species_db(name="C4N2", fc_name="C4N2", weight=76.0562) -species_lib["C3"] = Species_db(name="C3", fc_name="C3", weight=36.0321) -species_lib["S2"] = Species_db(name="S2", fc_name="S2", weight=64.13) -species_lib["S3"] = Species_db(name="S3", fc_name="S3", weight=96.195) -species_lib["S2O"] = Species_db(name="S2O", fc_name="S2O1", weight=80.1294) -species_lib["CS2"] = Species_db(name="CS2", fc_name="C1S2", weight=76.1407) -species_lib["NO2"] = Species_db(name="NO2", fc_name="N1O2", weight=46.0055) -species_lib["N2O"] = Species_db(name="N2O", fc_name="N2O1", weight=44.013) -species_lib["HNO3"] = Species_db(name="HNO3", fc_name="H1N1O3", weight=63.01) -species_lib["HNO2"] = Species_db(name="HNO2", fc_name="H1N1O2", weight=47.01) -species_lib["SO3"] = Species_db(name="SO3", fc_name="S1O3", weight=80.066) -species_lib["H2SO4"] = Species_db(name="H2SO4", fc_name="H2S1O4", weight=98.0785) -species_lib["TiO"] = Species_db(name="TiO", fc_name="Ti1O1", weight=63.866) -species_lib["TiO2"] = Species_db(name="TiO2", fc_name="Ti1O2", weight=79.87) -species_lib["TiS"] = Species_db(name="TiS", fc_name="Ti1S1", weight=79.932) -species_lib["TiH"] = Species_db(name="TiH", fc_name="Ti1H1", weight=48.87) -species_lib["VO"] = Species_db(name="VO", fc_name="V1O1", weight=66.9409) -species_lib["SiO"] = Species_db(name="SiO", fc_name="Si1O1", weight=44.08) -species_lib["AlO"] = Species_db(name="AlO", fc_name="Al1O1", weight=42.98) -species_lib["CaO"] = Species_db(name="CaO", fc_name="Ca1O1", weight=56.0774) -species_lib["PO"] = Species_db(name="PO", fc_name="P1O1", weight=46.97316) -species_lib["PO2"] = Species_db(name="PO2", fc_name="P1O2", weight=62.97256) -species_lib["SiH"] = Species_db(name="SiH", fc_name="Si1H1", weight=29.09344) -species_lib["CaH"] = Species_db(name="CaH", fc_name="Ca1H1", weight=41.085899) -species_lib["AlH"] = Species_db(name="AlH", fc_name="Al1H1", weight=27.9889) -species_lib["MgH"] = Species_db(name="MgH", fc_name="Mg1H1", weight=25.3129) -species_lib["CrH"] = Species_db(name="CrH", fc_name="Cr1H1", weight=53.0040) -species_lib["NaH"] = Species_db(name="NaH", fc_name="Na1H1", weight=23.99771) -species_lib["SiO2"] = Species_db(name="SiO2", fc_name="Si1O2", weight=60.08) -species_lib["SiS"] = Species_db(name="SiS", fc_name="Si1S1", weight=60.15) -species_lib["PS"] = Species_db(name="PS", fc_name="P1S1", weight=63.0388) -species_lib["MgO"] = Species_db(name="MgO", fc_name="Mg1O1", weight=40.30440) -species_lib["CN"] = Species_db(name="CN", fc_name="C1N1", weight=26.0174) -species_lib["H2CO"] = Species_db(name="H2CO", fc_name="H2C1O1", weight=30.027) -species_lib["CH"] = Species_db(name="CH", fc_name="C1H1", weight=13.019) -species_lib["PC"] = Species_db(name="PC", fc_name="P1C1", weight=42.984) -species_lib["H2O2"] = Species_db(name="H2O2", fc_name="H2O2", weight=34.016) -species_lib["NH"] = Species_db(name="NH", fc_name="N1H1", weight=15.015) -species_lib["NS"] = Species_db(name="NS", fc_name="N1S1", weight=46.067) -species_lib["PH"] = Species_db(name="PH", fc_name="P1H1", weight=31.9817) -species_lib["PN"] = Species_db(name="PN", fc_name="P1N1", weight=44.98) -species_lib["HS"] = Species_db(name="HS", fc_name="H1S1", weight=33.068) -species_lib["C2"] = Species_db(name="C2", fc_name="C2", weight=24.022) -species_lib["CaOH"] = Species_db(name="CaOH", fc_name="Ca1O1H1", weight=69.096) -species_lib["FeH"] = Species_db(name="FeH", fc_name="Fe1H1", weight=56.853) -species_lib["FeO"] = Species_db(name="FeO", fc_name="Fe1O1", weight=71.844) -species_lib["KOH"] = Species_db(name="KOH", fc_name="K1O1H1", weight=56.109) -species_lib["SiH2"] = Species_db(name="SiH2", fc_name="Si1H2", weight=30.10138) -species_lib["SiH4"] = Species_db(name="SiH4", fc_name="Si1H4", weight=64.177) -species_lib["N2O"] = Species_db(name="N2O", fc_name="N2O1", weight=44.014) -species_lib["NaOH"] = Species_db(name="NaOH", fc_name="Na1O1H1", weight=54.004) -species_lib["N2"] = Species_db(name="N2", fc_name="N2", weight=28.014) -species_lib["NaO"] = Species_db(name="NaO", fc_name="Na1O1", weight=38.99) -species_lib["SiN"] = Species_db(name="SiN", fc_name="Si1N1", weight=74.152) -species_lib["AlN"] = Species_db(name="AlN", fc_name="Al1N1", weight=40.988) -species_lib["CaS"] = Species_db(name="CaS", fc_name="Ca1S1", weight=72.143) -species_lib["HO2"] = Species_db(name="HO2", fc_name="H1O2", weight=33.007) -species_lib["KO"] = Species_db(name="KO", fc_name="K1O1", weight=55.098) -species_lib["MgS"] = Species_db(name="MgS", fc_name="Mg1S1", weight=56.37) -species_lib["NaO"] = Species_db(name="NaO", fc_name="Na1O1", weight=38.989) -species_lib["FeO2H2"] = Species_db(name="FeO2H2", fc_name="Fe1O2H2", weight=89.86) -species_lib["HAlO2"] = Species_db(name="HAlO2", fc_name="H1Al1O2", weight= 59.99) -species_lib["Al2O"] = Species_db(name="Al2O", fc_name="Al2O1", weight=69.96) -species_lib["AlS"] = Species_db(name="AlS", fc_name="Al1S1", weight= 59.05) -species_lib["AlOH"] = Species_db(name="AlOH", fc_name="H1Al1O1", weight=43.99) -species_lib["MgO2H2"] = Species_db(name="MgO2H2", fc_name="Mg1O2H2", weight=58.32) -species_lib["MgOH"] = Species_db(name="MgOH", fc_name="Mg1O1H1", weight=41.31) -species_lib["CaO2H2"] = Species_db(name="CaO2H2", fc_name="Ca1O2H2", weight=74.09) -species_lib["VO"] = Species_db(name="VO", fc_name="V1O1", weight=66.94) +species_lib['CO2'] = Species_db(name='CO2', fc_name='C1O2', weight=44.01) +species_lib['H2O'] = Species_db(name='H2O', fc_name='H2O1', weight=18.0153) +species_lib['CO'] = Species_db(name='CO', fc_name='C1O1', weight=28.01) +species_lib['O2'] = Species_db(name='O2', fc_name='O2', weight=31.9988) +species_lib['CH4'] = Species_db(name='CH4', fc_name='C1H4', weight=16.04) +species_lib['HCN'] = Species_db(name='HCN', fc_name='H1C1N1', weight=27.0253) +species_lib['NH3'] = Species_db(name='NH3', fc_name='N1H3', weight=17.031) +species_lib['H2S'] = Species_db(name='H2S', fc_name='H2S1', weight=34.081) +species_lib['PH3'] = Species_db(name='PH3', fc_name='P1H3', weight=33.99758) +species_lib['O3'] = Species_db(name='O3', fc_name='O3', weight=47.9982) +species_lib['O3_IR'] = Species_db(name='O3_IR', fc_name='O3', weight=47.9982) +species_lib['O3_UV'] = Species_db(name='O3_UV', fc_name='O3', weight=47.9982) +species_lib['NO'] = Species_db(name='NO', fc_name='N1O1', weight=30.01) +species_lib['SO2'] = Species_db(name='SO2', fc_name='S1O2', weight=64.066) +species_lib['HS'] = Species_db(name='HS', fc_name='H1S1', weight=33.073) +species_lib['H2'] = Species_db(name='H2', fc_name='H2', weight=2.01588) +species_lib['N2'] = Species_db(name='N2', fc_name='N2', weight=28.0134) +species_lib['SO'] = Species_db(name='SO', fc_name='S1O1', weight=48.0644) +species_lib['OH'] = Species_db(name='OH', fc_name='O1H1', weight=17.007) +species_lib['COS'] = Species_db(name='COS', fc_name='C1O1S1', weight=60.0751) +species_lib['CS'] = Species_db(name='CS', fc_name='C1S1', weight=44.0757) +species_lib['HCHO'] = Species_db(name='HCHO', fc_name='H1C1H1O1', weight=30.02598) +species_lib['C2H4'] = Species_db(name='C2H4', fc_name='C2H4', weight=28.05316) +species_lib['C2H2'] = Species_db(name='C2H2', fc_name='C2H2', weight=26.04) +species_lib['CH3'] = Species_db(name='CH3', fc_name='C1H3', weight=37.04004) +species_lib['C3H'] = Species_db(name='C3H', fc_name='C3H1', weight=37.04004) +species_lib['C2H'] = Species_db(name='C2H', fc_name='C2H1', weight=25.02934) +species_lib['C2N2'] = Species_db(name='C2N2', fc_name='C2N2', weight=52.0348) +species_lib['C3O2'] = Species_db(name='C3O2', fc_name='C3O2', weight=68.0309) +species_lib['C4N2'] = Species_db(name='C4N2', fc_name='C4N2', weight=76.0562) +species_lib['C3'] = Species_db(name='C3', fc_name='C3', weight=36.0321) +species_lib['S2'] = Species_db(name='S2', fc_name='S2', weight=64.13) +species_lib['S3'] = Species_db(name='S3', fc_name='S3', weight=96.195) +species_lib['S2O'] = Species_db(name='S2O', fc_name='S2O1', weight=80.1294) +species_lib['CS2'] = Species_db(name='CS2', fc_name='C1S2', weight=76.1407) +species_lib['NO2'] = Species_db(name='NO2', fc_name='N1O2', weight=46.0055) +species_lib['N2O'] = Species_db(name='N2O', fc_name='N2O1', weight=44.013) +species_lib['HNO3'] = Species_db(name='HNO3', fc_name='H1N1O3', weight=63.01) +species_lib['HNO2'] = Species_db(name='HNO2', fc_name='H1N1O2', weight=47.01) +species_lib['SO3'] = Species_db(name='SO3', fc_name='S1O3', weight=80.066) +species_lib['H2SO4'] = Species_db(name='H2SO4', fc_name='H2S1O4', weight=98.0785) +species_lib['TiO'] = Species_db(name='TiO', fc_name='Ti1O1', weight=63.866) +species_lib['TiO2'] = Species_db(name='TiO2', fc_name='Ti1O2', weight=79.87) +species_lib['TiS'] = Species_db(name='TiS', fc_name='Ti1S1', weight=79.932) +species_lib['TiH'] = Species_db(name='TiH', fc_name='Ti1H1', weight=48.87) +species_lib['VO'] = Species_db(name='VO', fc_name='V1O1', weight=66.9409) +species_lib['SiO'] = Species_db(name='SiO', fc_name='Si1O1', weight=44.08) +species_lib['AlO'] = Species_db(name='AlO', fc_name='Al1O1', weight=42.98) +species_lib['CaO'] = Species_db(name='CaO', fc_name='Ca1O1', weight=56.0774) +species_lib['PO'] = Species_db(name='PO', fc_name='P1O1', weight=46.97316) +species_lib['PO2'] = Species_db(name='PO2', fc_name='P1O2', weight=62.97256) +species_lib['SiH'] = Species_db(name='SiH', fc_name='Si1H1', weight=29.09344) +species_lib['CaH'] = Species_db(name='CaH', fc_name='Ca1H1', weight=41.085899) +species_lib['AlH'] = Species_db(name='AlH', fc_name='Al1H1', weight=27.9889) +species_lib['MgH'] = Species_db(name='MgH', fc_name='Mg1H1', weight=25.3129) +species_lib['CrH'] = Species_db(name='CrH', fc_name='Cr1H1', weight=53.0040) +species_lib['NaH'] = Species_db(name='NaH', fc_name='Na1H1', weight=23.99771) +species_lib['SiO2'] = Species_db(name='SiO2', fc_name='Si1O2', weight=60.08) +species_lib['SiS'] = Species_db(name='SiS', fc_name='Si1S1', weight=60.15) +species_lib['PS'] = Species_db(name='PS', fc_name='P1S1', weight=63.0388) +species_lib['MgO'] = Species_db(name='MgO', fc_name='Mg1O1', weight=40.30440) +species_lib['CN'] = Species_db(name='CN', fc_name='C1N1', weight=26.0174) +species_lib['H2CO'] = Species_db(name='H2CO', fc_name='H2C1O1', weight=30.027) +species_lib['CH'] = Species_db(name='CH', fc_name='C1H1', weight=13.019) +species_lib['PC'] = Species_db(name='PC', fc_name='P1C1', weight=42.984) +species_lib['H2O2'] = Species_db(name='H2O2', fc_name='H2O2', weight=34.016) +species_lib['NH'] = Species_db(name='NH', fc_name='N1H1', weight=15.015) +species_lib['NS'] = Species_db(name='NS', fc_name='N1S1', weight=46.067) +species_lib['PH'] = Species_db(name='PH', fc_name='P1H1', weight=31.9817) +species_lib['PN'] = Species_db(name='PN', fc_name='P1N1', weight=44.98) +species_lib['HS'] = Species_db(name='HS', fc_name='H1S1', weight=33.068) +species_lib['C2'] = Species_db(name='C2', fc_name='C2', weight=24.022) +species_lib['CaOH'] = Species_db(name='CaOH', fc_name='Ca1O1H1', weight=69.096) +species_lib['FeH'] = Species_db(name='FeH', fc_name='Fe1H1', weight=56.853) +species_lib['FeO'] = Species_db(name='FeO', fc_name='Fe1O1', weight=71.844) +species_lib['KOH'] = Species_db(name='KOH', fc_name='K1O1H1', weight=56.109) +species_lib['SiH2'] = Species_db(name='SiH2', fc_name='Si1H2', weight=30.10138) +species_lib['SiH4'] = Species_db(name='SiH4', fc_name='Si1H4', weight=64.177) +species_lib['N2O'] = Species_db(name='N2O', fc_name='N2O1', weight=44.014) +species_lib['NaOH'] = Species_db(name='NaOH', fc_name='Na1O1H1', weight=54.004) +species_lib['N2'] = Species_db(name='N2', fc_name='N2', weight=28.014) +species_lib['NaO'] = Species_db(name='NaO', fc_name='Na1O1', weight=38.99) +species_lib['SiN'] = Species_db(name='SiN', fc_name='Si1N1', weight=74.152) +species_lib['AlN'] = Species_db(name='AlN', fc_name='Al1N1', weight=40.988) +species_lib['CaS'] = Species_db(name='CaS', fc_name='Ca1S1', weight=72.143) +species_lib['HO2'] = Species_db(name='HO2', fc_name='H1O2', weight=33.007) +species_lib['KO'] = Species_db(name='KO', fc_name='K1O1', weight=55.098) +species_lib['MgS'] = Species_db(name='MgS', fc_name='Mg1S1', weight=56.37) +species_lib['NaO'] = Species_db(name='NaO', fc_name='Na1O1', weight=38.989) +species_lib['FeO2H2'] = Species_db(name='FeO2H2', fc_name='Fe1O2H2', weight=89.86) +species_lib['HAlO2'] = Species_db(name='HAlO2', fc_name='H1Al1O2', weight=59.99) +species_lib['Al2O'] = Species_db(name='Al2O', fc_name='Al2O1', weight=69.96) +species_lib['AlS'] = Species_db(name='AlS', fc_name='Al1S1', weight=59.05) +species_lib['AlOH'] = Species_db(name='AlOH', fc_name='H1Al1O1', weight=43.99) +species_lib['MgO2H2'] = Species_db(name='MgO2H2', fc_name='Mg1O2H2', weight=58.32) +species_lib['MgOH'] = Species_db(name='MgOH', fc_name='Mg1O1H1', weight=41.31) +species_lib['CaO2H2'] = Species_db(name='CaO2H2', fc_name='Ca1O2H2', weight=74.09) +species_lib['VO'] = Species_db(name='VO', fc_name='V1O1', weight=66.94) # neutral atoms -species_lib["H"] = Species_db(name="H", fc_name="H", weight=1.007825) -species_lib["He"] = Species_db(name="He", fc_name="He", weight=4.0026) -species_lib["C"] = Species_db(name="C", fc_name="C", weight=12.0096) -species_lib["N"] = Species_db(name="N", fc_name="N", weight=14.007) -species_lib["O"] = Species_db(name="O", fc_name="O", weight=15.999) -species_lib["F"] = Species_db(name="F", fc_name="F", weight=18.9984) -species_lib["Na"] = Species_db(name="Na", fc_name="Na", weight=22.989769) -species_lib["Ne"] = Species_db(name="Ne", fc_name="Ne", weight=20.1797) -species_lib["Ni"] = Species_db(name="Ni", fc_name="Ni", weight=58.6934) -species_lib["Mg"] = Species_db(name="Mg", fc_name="Mg", weight=24.305) -species_lib["Mn"] = Species_db(name="Mn", fc_name="Mn", weight=54.938044) -species_lib["Al"] = Species_db(name="Al", fc_name="Al", weight=26.9815385) -species_lib["Ar"] = Species_db(name="Ar", fc_name="Ar", weight=39.948) -species_lib["Si"] = Species_db(name="Si", fc_name="Si", weight=28.085) -species_lib["P"] = Species_db(name="P", fc_name="P", weight=30.973761998) -species_lib["S"] = Species_db(name="S", fc_name="S", weight=32.06) -species_lib["Cl"] = Species_db(name="Cl", fc_name="Cl", weight=35.45) -species_lib["K"] = Species_db(name="K", fc_name="K", weight=39.0983) -species_lib["Ca"] = Species_db(name="Ca", fc_name="Ca", weight=40.078) -species_lib["Ti"] = Species_db(name="Ti", fc_name="Ti", weight=47.867) -species_lib["V"] = Species_db(name="V", fc_name="V", weight=50.9415) -species_lib["Co"] = Species_db(name="Co", fc_name="Co", weight=58.933194) -species_lib["Cr"] = Species_db(name="Cr", fc_name="Cr", weight=51.9961) -species_lib["Cu"] = Species_db(name="Cu", fc_name="Cu", weight=63.546) -species_lib["Fe"] = Species_db(name="Fe", fc_name="Fe", weight=55.845) -species_lib["Zn"] = Species_db(name="Zn", fc_name="Zn", weight=65.38) +species_lib['H'] = Species_db(name='H', fc_name='H', weight=1.007825) +species_lib['He'] = Species_db(name='He', fc_name='He', weight=4.0026) +species_lib['C'] = Species_db(name='C', fc_name='C', weight=12.0096) +species_lib['N'] = Species_db(name='N', fc_name='N', weight=14.007) +species_lib['O'] = Species_db(name='O', fc_name='O', weight=15.999) +species_lib['F'] = Species_db(name='F', fc_name='F', weight=18.9984) +species_lib['Na'] = Species_db(name='Na', fc_name='Na', weight=22.989769) +species_lib['Ne'] = Species_db(name='Ne', fc_name='Ne', weight=20.1797) +species_lib['Ni'] = Species_db(name='Ni', fc_name='Ni', weight=58.6934) +species_lib['Mg'] = Species_db(name='Mg', fc_name='Mg', weight=24.305) +species_lib['Mn'] = Species_db(name='Mn', fc_name='Mn', weight=54.938044) +species_lib['Al'] = Species_db(name='Al', fc_name='Al', weight=26.9815385) +species_lib['Ar'] = Species_db(name='Ar', fc_name='Ar', weight=39.948) +species_lib['Si'] = Species_db(name='Si', fc_name='Si', weight=28.085) +species_lib['P'] = Species_db(name='P', fc_name='P', weight=30.973761998) +species_lib['S'] = Species_db(name='S', fc_name='S', weight=32.06) +species_lib['Cl'] = Species_db(name='Cl', fc_name='Cl', weight=35.45) +species_lib['K'] = Species_db(name='K', fc_name='K', weight=39.0983) +species_lib['Ca'] = Species_db(name='Ca', fc_name='Ca', weight=40.078) +species_lib['Ti'] = Species_db(name='Ti', fc_name='Ti', weight=47.867) +species_lib['V'] = Species_db(name='V', fc_name='V', weight=50.9415) +species_lib['Co'] = Species_db(name='Co', fc_name='Co', weight=58.933194) +species_lib['Cr'] = Species_db(name='Cr', fc_name='Cr', weight=51.9961) +species_lib['Cu'] = Species_db(name='Cu', fc_name='Cu', weight=63.546) +species_lib['Fe'] = Species_db(name='Fe', fc_name='Fe', weight=55.845) +species_lib['Zn'] = Species_db(name='Zn', fc_name='Zn', weight=65.38) # don't forget the electrons! (they may be tiny but they are important) -species_lib["e-"] = Species_db(name="e-", fc_name="e-", weight=5.4858e-4) +species_lib['e-'] = Species_db(name='e-', fc_name='e-', weight=5.4858e-4) + +mp = 1.6726231e-27 # kg +kB = 1.38064e-23 # JK-1 +particles_per_mol = 6.02214076e23 -mp = 1.6726231e-27 #kg -kB = 1.38064e-23 #JK-1 -particles_per_mol = 6.02214076e+23 class FO2shift: - ''' models are taken from caliope. oxygen fugacity pO2 need to be in log10 ''' + """models are taken from caliope. oxygen fugacity pO2 need to be in log10""" + def __init__(self, model='oneill'): self.callmodel = getattr(self, model) def __call__(self, T, log10pO2): - '''Return log10 fO2''' + """Return log10 fO2""" return log10pO2 - self.callmodel(T) def fischer(self, T): - '''Fischer et al. (2011) IW''' - return 6.94059 -28.1808*1E3/T + """Fischer et al. (2011) IW""" + return 6.94059 - 28.1808 * 1e3 / T def oneill(self, T): - '''O'Neill and Eggins (2002) IW''' - return 2*(-244118+115.559*T-8.474*T*np.log(T))/(np.log(10)*8.31441*T) - + """O'Neill and Eggins (2002) IW""" + return 2 * (-244118 + 115.559 * T - 8.474 * T * np.log(T)) / (np.log(10) * 8.31441 * T) - - -def run_lavatmos(config:Config,hf_row:dict): - - - ''' +def run_lavatmos(config: Config, hf_row: dict): + """ This function runs the Thermoengine module Lavatmos. Outgassing of refractory species are computed from a melt temperature and atmospheric pressure. @@ -198,7 +193,7 @@ def run_lavatmos(config:Config,hf_row:dict): Dictionary of helpfile variables, at this iteration only obudget: oxygen budget already present in the atmosphere before running the outgassing - ''' + """ import os import sys @@ -207,95 +202,108 @@ def run_lavatmos(config:Config,hf_row:dict): sys.path.insert(1, '/data3/leoni/LavAtmos') from lavatmos_goot_runner import container_lavatmos - gas_list= vol_list + config.outgas.vaplist - lavatmos_dict={'P':0.0} - - #set element fractions in atmosphere for lavatmos run - input_eles=['H','C','N','S','O'] - - total_weight = species_lib['H'].weight + species_lib['C'].weight + species_lib['N'].weight + species_lib['O'].weight + species_lib['S'].weight - print('total_weight: ',total_weight) - #lavatmos takes in the abundnace fractions of element not mass fractions so divide by atomic number + gas_list = vol_list + config.outgas.vaplist + lavatmos_dict = {'P': 0.0} + + # set element fractions in atmosphere for lavatmos run + input_eles = ['H', 'C', 'N', 'S', 'O'] + + total_weight = ( + species_lib['H'].weight + + species_lib['C'].weight + + species_lib['N'].weight + + species_lib['O'].weight + + species_lib['S'].weight + ) + print('total_weight: ', total_weight) + # lavatmos takes in the abundnace fractions of element not mass fractions so divide by atomic number for e in input_eles: - lavatmos_dict[e] = (hf_row[e + "_kg_atm"] / hf_row["M_atm"]) * (total_weight / ( 5 * species_lib[e].weight)) - print(e,lavatmos_dict[e]) + lavatmos_dict[e] = (hf_row[e + '_kg_atm'] / hf_row['M_atm']) * ( + total_weight / (5 * species_lib[e].weight) + ) + print(e, lavatmos_dict[e]) parameters = { - - # General parameters - 'run_name' : config.params.out.path, - - # Melt parameters - 'lava_comp' : 'BSE_palm', - 'silicate_abundances' : 'lavatmos3', # 'lavatmos1', 'lavatmos2', 'manual' - - # Volatile parameters - 'P_volatile' : hf_row['P_surf'], # bar - 'oxygen_abundance' : 'degassed', # 'degassed', 'manual', - 'volatile_comp' : lavatmos_dict, - 'melt_fraction' : 1.0 + # General parameters + 'run_name': config.params.out.path, + # Melt parameters + 'lava_comp': 'BSE_palm', + 'silicate_abundances': 'lavatmos3', # 'lavatmos1', 'lavatmos2', 'manual' + # Volatile parameters + 'P_volatile': hf_row['P_surf'], # bar + 'oxygen_abundance': 'degassed', # 'degassed', 'manual', + 'volatile_comp': lavatmos_dict, + 'melt_fraction': 1.0, } - #compute density for the previous run with calliope output from hf_row: - kg_per_particle = hf_row['atm_kg_per_mol']/particles_per_mol + # compute density for the previous run with calliope output from hf_row: + kg_per_particle = hf_row['atm_kg_per_mol'] / particles_per_mol - if hf_row['T_surf'] == 0.0 : #make sure that not zero surface temperature in first iteration - Tsurf=hf_row["T_magma"] + if ( + hf_row['T_surf'] == 0.0 + ): # make sure that not zero surface temperature in first iteration + Tsurf = hf_row['T_magma'] else: - Tsurf=hf_row['T_surf'] + Tsurf = hf_row['T_surf'] # hf_row['P_surf'] is in bar; convert to Pascals for use in the ideal gas law P_surf_Pa = hf_row['P_surf'] * 1.0e5 - rho_old = kg_per_particle * P_surf_Pa/(kB*Tsurf) + rho_old = kg_per_particle * P_surf_Pa / (kB * Tsurf) M_atmo_old = hf_row['M_atm'] - lavatmos_instance = container_lavatmos(parameters) - #make sure that surface temperature is at least 1500K, otherwise lavatmos crashes - if hf_row["T_magma"] > 1500 : - Toutgas = hf_row["T_magma"] + # make sure that surface temperature is at least 1500K, otherwise lavatmos crashes + if hf_row['T_magma'] > 1500: + Toutgas = hf_row['T_magma'] else: Toutgas = 1500 lavatmos_instance.run_lavatmos(Toutgas) - - #read in boa chemistry from last iteration of fastchem and lavatmos - fastchempath=config.outgas.fastchempath + # read in boa chemistry from last iteration of fastchem and lavatmos + fastchempath = config.outgas.fastchempath if os.path.exists(fastchempath): mmr_path = os.path.join(fastchempath, 'boa_chem.dat') else: raise RuntimeError('cannot find fastchem output from lavatmos loop!') - #update abundances in output file for next calliope run - new_atmos_abundances=pd.read_csv(mmr_path,sep=r'\s+') - mu_outgassed=new_atmos_abundances['mu'][0] + # update abundances in output file for next calliope run + new_atmos_abundances = pd.read_csv(mmr_path, sep=r'\s+') + mu_outgassed = new_atmos_abundances['mu'][0] - #rho of armosphere after lavatmos - #n=rho/mu*mp - rho_new = kg_per_particle * new_atmos_abundances['Pbar'][0]/(kB*Tsurf) - M_atmo_new = M_atmo_old/rho_old * rho_new #kg assuming volum edoes not change + # rho of armosphere after lavatmos + # n=rho/mu*mp + rho_new = kg_per_particle * new_atmos_abundances['Pbar'][0] / (kB * Tsurf) + M_atmo_new = M_atmo_old / rho_old * rho_new # kg assuming volum edoes not change for vol in gas_list: - new_pp = new_atmos_abundances[vol][0]* new_atmos_abundances['Pbar'][0] - hf_row[vol + "_bar"] = new_pp - #here need to update it in terms of pressure as well, since this is input for calliiope - hf_row[vol + "_vmr"] = new_atmos_abundances[vol][0] - hf_row[vol + "_kg_atm"] = new_atmos_abundances[vol][0] * M_atmo_new * species_lib[vol].weight/mu_outgassed #kg - hf_row[vol + "_kg_total"] = hf_row[vol + "_kg_atm"] + hf_row[vol + "_kg_solid"] + hf_row[vol + "_kg_liquid"] - - #elements are not considered as atomic species but just as inventory + new_pp = new_atmos_abundances[vol][0] * new_atmos_abundances['Pbar'][0] + hf_row[vol + '_bar'] = new_pp + # here need to update it in terms of pressure as well, since this is input for calliiope + hf_row[vol + '_vmr'] = new_atmos_abundances[vol][0] + hf_row[vol + '_kg_atm'] = ( + new_atmos_abundances[vol][0] * M_atmo_new * species_lib[vol].weight / mu_outgassed + ) # kg + hf_row[vol + '_kg_total'] = ( + hf_row[vol + '_kg_atm'] + hf_row[vol + '_kg_solid'] + hf_row[vol + '_kg_liquid'] + ) + + # elements are not considered as atomic species but just as inventory for e in element_list: - hf_row[e + "_kg_atm"]=new_atmos_abundances[e][0] * M_atmo_new * species_lib[e].weight/mu_outgassed - hf_row[e + "_kg_total"] = hf_row[e + "_kg_atm"] + hf_row[e + "_kg_solid"] + hf_row[e + "_kg_liquid"] - - - - #saving new oxygen fugacity for calliope - log10_fO2 = np.log10(new_atmos_abundances['O2'][0]) + np.log10(new_atmos_abundances['Pbar'][0]) # is this really partical pressure ? Maybe this is actually abundances + hf_row[e + '_kg_atm'] = ( + new_atmos_abundances[e][0] * M_atmo_new * species_lib[e].weight / mu_outgassed + ) + hf_row[e + '_kg_total'] = ( + hf_row[e + '_kg_atm'] + hf_row[e + '_kg_solid'] + hf_row[e + '_kg_liquid'] + ) + + # saving new oxygen fugacity for calliope + log10_fO2 = np.log10(new_atmos_abundances['O2'][0]) + np.log10( + new_atmos_abundances['Pbar'][0] + ) # is this really partical pressure ? Maybe this is actually abundances fO2_shift = FO2shift() - hf_row['fO2_shift'] = fO2_shift(hf_row["T_magma"], log10_fO2) + hf_row['fO2_shift'] = fO2_shift(hf_row['T_magma'], log10_fO2) print('shift compared to iron wustite buffer:', hf_row['fO2_shift']) diff --git a/src/proteus/outgas/wrapper.py b/src/proteus/outgas/wrapper.py index 0ed57eab4..a7f5e564e 100644 --- a/src/proteus/outgas/wrapper.py +++ b/src/proteus/outgas/wrapper.py @@ -16,8 +16,8 @@ log = logging.getLogger('fwl.' + __name__) -def get_gaslist(config:Config): +def get_gaslist(config: Config): if config.outgas.silicates: gas_list = vol_list + config.outgas.vaplist else: @@ -25,7 +25,8 @@ def get_gaslist(config:Config): return gas_list -def calc_target_elemental_inventories(dirs:dict, config:Config, hf_row:dict): + +def calc_target_elemental_inventories(dirs: dict, config: Config, hf_row: dict): """ Calculate total amount of volatile elements in the planet """ @@ -91,15 +92,14 @@ def run_outgassing(dirs: dict, config: Config, hf_row: dict): log.info('Solving outgassing...') - gas_list=get_gaslist(config) + gas_list = get_gaslist(config) # Run outgassing calculation if config.outgas.module == 'calliope': calc_surface_pressures(dirs, config, hf_row) - # calculate total atmosphere mass from sum of gas species - hf_row["M_atm"] = 0.0 + hf_row['M_atm'] = 0.0 for s in gas_list: hf_row['M_atm'] += hf_row[s + '_kg_atm'] @@ -135,8 +135,8 @@ def run_desiccated(config: Config, hf_row: dict): """ # if desiccated, set all gas masses to zero - log.info("Desiccation has occurred - no volatiles remaining") - gas_list=get_gaslist(config) + log.info('Desiccation has occurred - no volatiles remaining') + gas_list = get_gaslist(config) # Do not set these to zero - avoid divide by zero elsewhere in the code excepted_keys = ['atm_kg_per_mol'] @@ -149,10 +149,8 @@ def run_desiccated(config: Config, hf_row: dict): hf_row[k] = 0.0 - -def lavatmos_calliope_loop(dirs:dict,config:Config, hf_row:dict): - - '''function which runs lavatmos and calliope in a loop until they have converged. +def lavatmos_calliope_loop(dirs: dict, config: Config, hf_row: dict): + """function which runs lavatmos and calliope in a loop until they have converged. This allows for a consistentt computation of melt outgassing and dissolution Parameters ---------- @@ -162,42 +160,46 @@ def lavatmos_calliope_loop(dirs:dict,config:Config, hf_row:dict): Configuration object hf_row : dict Dictionary of helpfile variables, at this iteration only - ''' + """ hf_row['fO2_shift'] = config.outgas.fO2_shift_IW - log.info("initial fO2_shift : %.6f"%config.outgas.fO2_shift_IW) + log.info('initial fO2_shift : %.6f' % config.outgas.fO2_shift_IW) run_outgassing(dirs, config, hf_row) if config.outgas.silicates: - xerr=0.01 #0.1 #1e-3 - err=1.0 + xerr = 0.01 # 0.1 #1e-3 + err = 1.0 # Maximum number of LavAtmos/Calliope iterations; allow configuration with a sensible default - max_iterations = getattr(getattr(config, "outgas", config), "max_lavatmos_iterations", 100) + max_iterations = getattr( + getattr(config, 'outgas', config), 'max_lavatmos_iterations', 100 + ) iteration = 0 - log.info("silicates are outgassed") - log.info("error threshold on fO2 shift : %.6f"%xerr) - log.info("initial error : %.6f"%err) - log.info("maximum LavAtmos/Calliope iterations : %d"%max_iterations) + log.info('silicates are outgassed') + log.info('error threshold on fO2 shift : %.6f' % xerr) + log.info('initial error : %.6f' % err) + log.info('maximum LavAtmos/Calliope iterations : %d' % max_iterations) while err > xerr and iteration < max_iterations: iteration += 1 - log.info("LavAtmos/Calliope iteration %d"%iteration) + log.info('LavAtmos/Calliope iteration %d' % iteration) old_fO2shift = hf_row['fO2_shift'] - run_lavatmos(config, hf_row) #in run_lavatmos add a criterion for temperature and melt fraction ? - log.info("new fO2 shift : %.6f"%hf_row["fO2_shift"]) + run_lavatmos( + config, hf_row + ) # in run_lavatmos add a criterion for temperature and melt fraction ? + log.info('new fO2 shift : %.6f' % hf_row['fO2_shift']) run_outgassing(dirs, config, hf_row) - err=abs(old_fO2shift - hf_row['fO2_shift']) - log.info("fO2 shift after running lavatmos: %.6f"%hf_row['fO2_shift']) - log.info("change in fO2 between the last iterations: %.6f"%err) + err = abs(old_fO2shift - hf_row['fO2_shift']) + log.info('fO2 shift after running lavatmos: %.6f' % hf_row['fO2_shift']) + log.info('change in fO2 between the last iterations: %.6f' % err) if err > xerr: log.error( - "LavAtmos/Calliope did not converge within %d iterations " - "(final |ΔfO2_shift| = %.6f, threshold = %.6f)", + 'LavAtmos/Calliope did not converge within %d iterations ' + '(final |ΔfO2_shift| = %.6f, threshold = %.6f)', max_iterations, err, xerr, ) raise RuntimeError( - "LavAtmos/Calliope convergence failed: " - "maximum number of iterations (%d) exceeded without reaching " - "the fO2_shift error threshold (final error = %.6f, threshold = %.6f)" + 'LavAtmos/Calliope convergence failed: ' + 'maximum number of iterations (%d) exceeded without reaching ' + 'the fO2_shift error threshold (final error = %.6f, threshold = %.6f)' % (max_iterations, err, xerr) ) diff --git a/src/proteus/plot/cpl_atmosphere.py b/src/proteus/plot/cpl_atmosphere.py index 9e9ab3c1b..41bd936d6 100644 --- a/src/proteus/plot/cpl_atmosphere.py +++ b/src/proteus/plot/cpl_atmosphere.py @@ -36,8 +36,8 @@ def plot_atmosphere(output_dir: str, times: list, profiles: list, plot_format='p zmax = 100.0 pmax = 1.0 - for i, t in enumerate( times ): - #print('time at which temperature plot is created:',t) + for i, t in enumerate(times): + # print('time at which temperature plot is created:',t) prof = profiles[i] label = latex_float(t) + ' yr' color = sm.to_rgba(t) @@ -58,7 +58,7 @@ def plot_atmosphere(output_dir: str, times: list, profiles: list, plot_format='p ##### T-Z ax0.set_ylabel(r'Height [km]') ax0.set_ylim(bottom=0.0, top=zmax) - ax0.set_xlim([200,4000]) + ax0.set_xlim([200, 4000]) ##### T-P ax1.set_xlabel('Temperature [K]') @@ -66,9 +66,9 @@ def plot_atmosphere(output_dir: str, times: list, profiles: list, plot_format='p ax1.invert_yaxis() ax1.set_yscale('log') ax1.set_ylim(bottom=pmax, top=np.amin(parr)) - #ax1.set_ylim(bottom=100, top=10**-8) + # ax1.set_ylim(bottom=100, top=10**-8) - ax1.set_xlim([200,4000]) + ax1.set_xlim([200, 4000]) ax1.yaxis.set_major_locator(LogLocator(numticks=1000)) # Legend diff --git a/src/proteus/plot/cpl_chem_atmosphere.py b/src/proteus/plot/cpl_chem_atmosphere.py index 661dbe3e0..4059c72f5 100644 --- a/src/proteus/plot/cpl_chem_atmosphere.py +++ b/src/proteus/plot/cpl_chem_atmosphere.py @@ -20,18 +20,55 @@ log = logging.getLogger('fwl.' + __name__) -#GASES_STANDARD = ("C2H4", "CO", "H2O", "H2SO4", "N2", "O2", "O3", "OH", "H", "SO", "CH4", +# GASES_STANDARD = ("C2H4", "CO", "H2O", "H2SO4", "N2", "O2", "O3", "OH", "H", "SO", "CH4", # "CO2", "H2", "H2S", "HCN", "NH2", "NH3", "OCS", "S2", "S6", "S8", "SO2", # "N2O", "NO", "NO2", "HNO3", "PH3", "C2H2", "NO3", "N2O5", "HONO", - # "HO2NO2", "H2O2", "C2H6", "CH3", "H2CO", "HO2", "C", - # "N", "O", "S", "SO", "CS2","SiO","SiO2","TiO","FeO","MgO","Na") +# "HO2NO2", "H2O2", "C2H6", "CH3", "H2CO", "HO2", "C", +# "N", "O", "S", "SO", "CS2","SiO","SiO2","TiO","FeO","MgO","Na") + +GASES_STANDARD = ( + 'CO', + 'H2O', + 'N2', + 'O2', + 'O3', + 'OH', + 'H', + 'SO', + 'CH4', + 'CO2', + 'H2', + 'H2S', + 'HCN', + 'NH3', + 'SO2', + 'Al', + 'HAlO2', + 'N2O', + 'NO', + 'NO2', + 'HNO3', + 'PH3', + 'N', + 'O', + 'S', +) + +REFRACTORY_GASES = ( + 'Fe', + 'Si', + 'Ti', + 'K', + 'Mg', + 'SiO', + 'SiO2', + 'TiO', + 'FeO', + 'MgO', + 'Na', + 'TiO2', +) -GASES_STANDARD = ("CO", "H2O", "N2", "O2", "O3", "OH", "H", "SO", "CH4", - "CO2", "H2", "H2S", "HCN", "NH3", "SO2", "Al","HAlO2", - "N2O", "NO", "NO2", "HNO3", "PH3", - "N", "O", "S") - -REFRACTORY_GASES = ("Fe", "Si", "Ti", "K", "Mg", "SiO", "SiO2","TiO","FeO","MgO","Na","TiO2") def plot_chem_atmosphere( output_dir: str, @@ -82,22 +119,22 @@ def plot_chem_atmosphere( lw = 0.9 al = 0.8 vmr_surf = [] - for i,gas in enumerate(plot_gases): + for i, gas in enumerate(plot_gases): col = get_colour(gas) lbl = latexify(gas) vmr = 0.0 _lw = lw - #if gas in vol_list: - #_lw *= 1.25 + # if gas in vol_list: + # _lw *= 1.25 # plot from netCDF (dashed lines) key = gas + '_vmr' if key in atm_profile.keys(): xarr = list(atm_profile[key]) xarr = [xarr[0]] + xarr - if (np.amax(xarr) >= xmin or gas in list(REFRACTORY_GASES)): + if np.amax(xarr) >= xmin or gas in list(REFRACTORY_GASES): vmr = float(xarr[-1]) - ax.plot(xarr, parr, ls = 'dashed', color=col, lw=_lw, alpha=al) + ax.plot(xarr, parr, ls='dashed', color=col, lw=_lw, alpha=al) else: print(np.amax(xarr)) diff --git a/src/proteus/plot/cpl_escape.py b/src/proteus/plot/cpl_escape.py index de2ca8bb1..595d4519a 100644 --- a/src/proteus/plot/cpl_escape.py +++ b/src/proteus/plot/cpl_escape.py @@ -49,7 +49,6 @@ def plot_escape(hf_all: pd.DataFrame, output_dir: str, plot_format='pdf'): # By element total = np.zeros(len(time)) for e in element_list: - _lw = lw if e == 'H': _lw = lw * 1.8 diff --git a/src/proteus/plot/cpl_global.py b/src/proteus/plot/cpl_global.py index 6f1e82ef7..f53d95607 100644 --- a/src/proteus/plot/cpl_global.py +++ b/src/proteus/plot/cpl_global.py @@ -9,7 +9,7 @@ import numpy as np import pandas as pd -#from proteus.utils.constants import gas_list +# from proteus.utils.constants import gas_list from proteus.outgas.wrapper import get_gaslist from proteus.utils.plot import get_colour, latexify @@ -60,7 +60,7 @@ def plot_global( vol_mol_tot = {} # Moles in total vol_intpart = {} # Partitioning into int - gas_list=get_gaslist(config) + gas_list = get_gaslist(config) for vol in gas_list: # Check vmr for presence this_vmr = np.array(hf[vol + '_vmr']) diff --git a/src/proteus/post_processing/compar_atmosphere_models.py b/src/proteus/post_processing/compar_atmosphere_models.py index 01d0b8b3b..8d9cf4f81 100644 --- a/src/proteus/post_processing/compar_atmosphere_models.py +++ b/src/proteus/post_processing/compar_atmosphere_models.py @@ -1,6 +1,6 @@ -#This routine needs to be called via python3 src/proteus/plot/compar_atmosphere_models.py. -#then it needs the folders for outputdir1 and outputdir 2 in the terminal as -#sys.argv[1] and sys.argv[2]. +# This routine needs to be called via python3 src/proteus/plot/compar_atmosphere_models.py. +# then it needs the folders for outputdir1 and outputdir 2 in the terminal as +# sys.argv[1] and sys.argv[2]. from __future__ import annotations @@ -23,10 +23,10 @@ if TYPE_CHECKING: pass -log = logging.getLogger("fwl."+__name__) +log = logging.getLogger('fwl.' + __name__) -def read_ncdf_profile(nc_fpath:str, extra_keys:list=[]): +def read_ncdf_profile(nc_fpath: str, extra_keys: list = []): """Read data from atmosphere NetCDF output file. Automatically reads pressure (p), temperature (t), radius (z) arrays with @@ -58,72 +58,70 @@ def read_ncdf_profile(nc_fpath:str, extra_keys:list=[]): return None ds = nc.Dataset(nc_fpath) - p = np.array(ds.variables["p"][:]) - pl = np.array(ds.variables["pl"][:]) + p = np.array(ds.variables['p'][:]) + pl = np.array(ds.variables['pl'][:]) - t = np.array(ds.variables["tmp"][:]) - tl = np.array(ds.variables["tmpl"][:]) + t = np.array(ds.variables['tmp'][:]) + tl = np.array(ds.variables['tmpl'][:]) - rp = float(ds.variables["planet_radius"][0]) - if "z" in ds.variables.keys(): + rp = float(ds.variables['planet_radius'][0]) + if 'z' in ds.variables.keys(): # probably from JANUS, which stores heights - z = np.array(ds.variables["z"][:]) - zl = np.array(ds.variables["zl"][:]) - r = np.array(z) + rp + z = np.array(ds.variables['z'][:]) + zl = np.array(ds.variables['zl'][:]) + r = np.array(z) + rp rl = np.array(zl) + rp else: # probably from AGNI, which stores radii - r = np.array(ds.variables["r"][:]) - rl = np.array(ds.variables["rl"][:]) - z = np.array(r) - rp + r = np.array(ds.variables['r'][:]) + rl = np.array(ds.variables['rl'][:]) + z = np.array(r) - rp zl = np.array(rl) - rp nlev_c = len(p) # read pressure, temperature, height data into dictionary values out = {} - out["p"] = [pl[0]] - out["t"] = [tl[0]] - out["z"] = [zl[0]] - out["r"] = [rl[0]] + out['p'] = [pl[0]] + out['t'] = [tl[0]] + out['z'] = [zl[0]] + out['r'] = [rl[0]] for i in range(nlev_c): - out["p"].append(p[i]) - out["p"].append(pl[i+1]) + out['p'].append(p[i]) + out['p'].append(pl[i + 1]) - out["t"].append(t[i]) - out["t"].append(tl[i+1]) + out['t'].append(t[i]) + out['t'].append(tl[i + 1]) - out["z"].append(z[i]) - out["z"].append(zl[i+1]) + out['z'].append(z[i]) + out['z'].append(zl[i + 1]) - out["r"].append(r[i]) - out["r"].append(rl[i+1]) + out['r'].append(r[i]) + out['r'].append(rl[i + 1]) # flags - for fk in ("transparent", "solved", "converged"): + for fk in ('transparent', 'solved', 'converged'): if fk in ds.variables.keys(): out[fk] = ncdf_flag_to_bool(ds.variables[fk]) else: - out[fk] = False # if not available + out[fk] = False # if not available # Read extra keys for key in extra_keys: - # Check that key exists if key not in ds.variables.keys(): log.error(f"Could not read '{key}' from NetCDF file") continue # Reading composition - if key == "x_gas": - - gas_l = ds.variables["gases"][:] # names (bytes matrix) - gas_x = ds.variables["x_gas"][:] # vmrs (float matrix) + if key == 'x_gas': + gas_l = ds.variables['gases'][:] # names (bytes matrix) + gas_x = ds.variables['x_gas'][:] # vmrs (float matrix) # get data for each gas - for igas,gas in enumerate(gas_l): - gas_lbl = "".join( [c.decode(encoding="utf-8") for c in gas] ).strip() - out[gas_lbl+"_vmr"] = np.array(gas_x[:,igas]) + for igas, gas in enumerate(gas_l): + gas_lbl = ''.join([c.decode(encoding='utf-8') for c in gas]).strip() + out[gas_lbl + '_vmr'] = np.array(gas_x[:, igas]) else: out[key] = np.array(ds.variables[key][:]) @@ -137,34 +135,35 @@ def read_ncdf_profile(nc_fpath:str, extra_keys:list=[]): return out -def compare_times(times,plottimes): +def compare_times(times, plottimes): # get samples on log-time scale sample_t = [] sample_i = [] - for s in plottimes: # Sample on log-scale + for s in plottimes: # Sample on log-scale if s in times: sample_t.append(int(s)) - print('time in list',s) + print('time in list', s) else: print('time not in list') remaining = [int(t) for t in set(times) - set(plottimes)] if len(remaining) == 0: break # Get next nearest time - val,_ = find_nearest(remaining,s) - print('nearest value found',val) + val, _ = find_nearest(remaining, s) + print('nearest value found', val) sample_t.append(int(val)) # Get the index of this time in the original array - _,idx = find_nearest(times,val) + _, idx = find_nearest(times, val) sample_i.append(int(idx)) print(sample_t, sample_i) return sample_t, sample_i -def ncdf_flag_to_bool(var)->bool: - '''Convert NetCDF flag (y/n) to Python bool (true/false)''' + +def ncdf_flag_to_bool(var) -> bool: + """Convert NetCDF flag (y/n) to Python bool (true/false)""" v = str(var[0].tobytes().decode()).lower() # check against expected @@ -173,9 +172,10 @@ def ncdf_flag_to_bool(var)->bool: elif v == 'n': return False else: - raise ValueError(f"Could not parse NetCDF atmos flag variable \n {var}") + raise ValueError(f'Could not parse NetCDF atmos flag variable \n {var}') -def read_2model_data(output_dir1:str, output_dir2:str, extension, tmin, nsamp, extra_keys=[]): + +def read_2model_data(output_dir1: str, output_dir2: str, extension, tmin, nsamp, extra_keys=[]): """ Read all p,t,z profiles from NetCDF files in a PROTEUS output folder. compare times at which to plot the output between the two folders and make sure that they agree @@ -186,20 +186,22 @@ def read_2model_data(output_dir1:str, output_dir2:str, extension, tmin, nsamp, e print() - #set new array bound for the time arrays from two runs: same lower bound (higher minimum ) and same upper bound (lower maximum) - lower_bound = max(np.array(plot_times1).min(), np.array(plot_times2).min()) # higher minimum - upper_bound = min(np.array(plot_times1).max(), np.array(plot_times2).max()) # lower maximum + # set new array bound for the time arrays from two runs: same lower bound (higher minimum ) and same upper bound (lower maximum) + lower_bound = max( + np.array(plot_times1).min(), np.array(plot_times2).min() + ) # higher minimum + upper_bound = min(np.array(plot_times1).max(), np.array(plot_times2).max()) # lower maximum - #times1 = np.clip(times1, lower_bound, upper_bound) - #times2 = np.clip(times2, lower_bound, upper_bound) + # times1 = np.clip(times1, lower_bound, upper_bound) + # times2 = np.clip(times2, lower_bound, upper_bound) - #check that values in array are not out of bounds - for name, arr in {"a": plot_times1, "b": plot_times2}.items(): + # check that values in array are not out of bounds + for name, arr in {'a': plot_times1, 'b': plot_times2}.items(): mask_low = arr < lower_bound mask_high = arr > upper_bound if np.any(mask_low | mask_high): - if name == "a": + if name == 'a': plot_times1[mask_low] = plot_times2[mask_low] plot_times1[mask_high] = plot_times2[mask_high] else: @@ -211,36 +213,40 @@ def read_2model_data(output_dir1:str, output_dir2:str, extension, tmin, nsamp, e # replace only the remaining (in-bounds) values plot_times2[~mask2] = plot_times1[~mask2] - #now find nearest value - - final_times1,final_indices1=compare_times(times1,plot_times1) - final_times2,final_indices2=compare_times(times2,plot_times2) + # now find nearest value + final_times1, final_indices1 = compare_times(times1, plot_times1) + final_times2, final_indices2 = compare_times(times2, plot_times2) - profiles1 = [read_ncdf_profile(os.path.join(output_dir1, "data", "%.0f_atm.nc"%t), - extra_keys=extra_keys) for t in final_times1] - - profiles2 = [read_ncdf_profile(os.path.join(output_dir2, "data", "%.0f_atm.nc"%t), - extra_keys=extra_keys) for t in final_times2] + profiles1 = [ + read_ncdf_profile( + os.path.join(output_dir1, 'data', '%.0f_atm.nc' % t), extra_keys=extra_keys + ) + for t in final_times1 + ] + profiles2 = [ + read_ncdf_profile( + os.path.join(output_dir2, 'data', '%.0f_atm.nc' % t), extra_keys=extra_keys + ) + for t in final_times2 + ] if None in profiles2: - log.warning("One or more NetCDF files could not be found") - if os.path.exists(os.path.join(output_dir2,"data","data.tar")): - log.warning("You may need to extract archived data files") + log.warning('One or more NetCDF files could not be found') + if os.path.exists(os.path.join(output_dir2, 'data', 'data.tar')): + log.warning('You may need to extract archived data files') return if None in profiles1: - log.warning("One or more NetCDF files could not be found") - if os.path.exists(os.path.join(output_dir1,"data","data.tar")): - log.warning("You may need to extract archived data files") + log.warning('One or more NetCDF files could not be found') + if os.path.exists(os.path.join(output_dir1, 'data', 'data.tar')): + log.warning('You may need to extract archived data files') return - return final_times1,final_times2,profiles1, profiles2 - + return final_times1, final_times2, profiles1, profiles2 -def sample_output(output_dir, extension:str = "_atm.nc", tmin:float = 1.0, nsamp:int=8): - +def sample_output(output_dir, extension: str = '_atm.nc', tmin: float = 1.0, nsamp: int = 8): """ Sample output files from a model run based on their time stamps. @@ -273,18 +279,18 @@ def sample_output(output_dir, extension:str = "_atm.nc", tmin:float = 1.0, nsamp List of file paths corresponding to the sampled times. """ - files = glob.glob(os.path.join(output_dir+"/data", "*"+extension)) + files = glob.glob(os.path.join(output_dir + '/data', '*' + extension)) # No files found? if len(files) < 1: - log.error("No output files found, check if arxiv exists and Extract it.") + log.error('No output files found, check if arxiv exists and Extract it.') # Return empty return [], [] # get times - times = [int(f.split("/")[-1].split(extension)[0]) for f in files] - #print(times) + times = [int(f.split('/')[-1].split(extension)[0]) for f in files] + # print(times) out_t, out_i = sample_times(times, nsamp, tmin=tmin) out_f = [files[i] for i in out_i] @@ -294,9 +300,9 @@ def sample_output(output_dir, extension:str = "_atm.nc", tmin:float = 1.0, nsamp return np.array(times), np.array(out_t), np.array(out_f) - -def plot_atmosphere_comparison(output_dir1, output_dir2, extension="_atm.nc", tmin=1e4, nsamp=5, plot_format="pdf"): - +def plot_atmosphere_comparison( + output_dir1, output_dir2, extension='_atm.nc', tmin=1e4, nsamp=5, plot_format='pdf' +): """ Compare atmospheric temperature–pressure profiles from two model runs. @@ -334,50 +340,48 @@ def plot_atmosphere_comparison(output_dir1, output_dir2, extension="_atm.nc", tm The function produces and saves a plot but does not return a value. """ + plottimes1, plottimes2, profiles1, profiles2 = read_2model_data( + output_dir1, output_dir2, extension, tmin, nsamp + ) + t1 = int(str(plottimes1[0])) + t2 = int(str(plottimes1[-1])) - plottimes1, plottimes2, profiles1, profiles2 = read_2model_data(output_dir1,output_dir2, extension, tmin, nsamp) - t1=int(str(plottimes1[0])) - t2=int(str(plottimes1[-1])) - - - log.info("Plot atmosphere temperatures colourbar") + log.info('Plot atmosphere temperatures colourbar') - norm = mpl.colors.LogNorm(vmin=max(t1,1), vmax=t2) + norm = mpl.colors.LogNorm(vmin=max(t1, 1), vmax=t2) sm = plt.cm.ScalarMappable(cmap=cm.batlowK_r, norm=norm) sm.set_array([]) # Initialise plot scale = 1.1 alpha = 0.6 - fig,ax = plt.subplots(1,1,figsize=(5*scale,4*scale)) - ax.set_ylabel("Pressure [bar]") - ax.set_xlabel("Temperature [K]") + fig, ax = plt.subplots(1, 1, figsize=(5 * scale, 4 * scale)) + ax.set_ylabel('Pressure [bar]') + ax.set_xlabel('Temperature [K]') ax.invert_yaxis() - ax.set_yscale("log") + ax.set_yscale('log') tmp_max = 1000.0 prs_max = 1.0 - for i, t in enumerate( plottimes1 ): + for i, t in enumerate(plottimes1): prof1 = profiles1[i] - color = sm.to_rgba(t) - tmp1 = prof1["t"] - prs1 = prof1["p"]/1e5 + tmp1 = prof1['t'] + prs1 = prof1['p'] / 1e5 tmp_max = max(tmp_max, np.amax(tmp1)) prs_max = max(prs_max, np.amax(prs1)) ax.plot(tmp1, prs1, color=color, linestyle='-', alpha=alpha, zorder=3) - for i, t in enumerate( plottimes2 ): + for i, t in enumerate(plottimes2): prof2 = profiles2[i] - color = sm.to_rgba(t) - tmp2 = prof2["t"] - prs2 = prof2["p"]/1e5 + tmp2 = prof2['t'] + prs2 = prof2['p'] / 1e5 tmp_max = max(tmp_max, np.amax(tmp2)) prs_max = max(prs_max, np.amax(prs2)) @@ -386,7 +390,7 @@ def plot_atmosphere_comparison(output_dir1, output_dir2, extension="_atm.nc", tm # Grid ax.grid(alpha=0.2, zorder=2) - ax.set_xlim(0,tmp_max+100) + ax.set_xlim(0, tmp_max + 100) ax.xaxis.set_minor_locator(MultipleLocator(base=250)) ax.set_ylim(bottom=prs_max, top=np.amin(prs1)) @@ -396,19 +400,17 @@ def plot_atmosphere_comparison(output_dir1, output_dir2, extension="_atm.nc", tm divider = make_axes_locatable(ax) cax = divider.append_axes('right', size='5%', pad=0.05) cbar = fig.colorbar(sm, cax=cax, orientation='vertical') - cbar.set_label("Time [yr]") + cbar.set_label('Time [yr]') # Save plot - fname = os.path.join(output_dir1,"plots","plot_atmosphere_comparison.%s"%plot_format) + fname = os.path.join(output_dir1, 'plots', 'plot_atmosphere_comparison.%s' % plot_format) fig.savefig(fname, bbox_inches='tight', dpi=300) +if __name__ == '__main__': + output_dir1 = sys.argv[1] + output_dir2 = sys.argv[2] - - -if __name__ == "__main__": - - output_dir1=sys.argv[1] - output_dir2=sys.argv[2] - - plot_atmosphere_comparison(output_dir1, output_dir2, tmin=1e4, extension="_atm.nc", nsamp=5, plot_format="pdf") + plot_atmosphere_comparison( + output_dir1, output_dir2, tmin=1e4, extension='_atm.nc', nsamp=5, plot_format='pdf' + ) diff --git a/src/proteus/proteus.py b/src/proteus/proteus.py index 220480ebc..df8f667a3 100644 --- a/src/proteus/proteus.py +++ b/src/proteus/proteus.py @@ -279,7 +279,7 @@ def start(self, *, resume: bool = False, offline: bool = False): # Store partial pressures and list of included volatiles inc_gases = [] - gas_list=get_gaslist(self.config) + gas_list = get_gaslist(self.config) for s in vol_list: if s != 'O2': @@ -293,21 +293,21 @@ def start(self, *, resume: bool = False, offline: bool = False): inc_gases.append(s) self.hf_row[s + '_bar'] = max(1.0e-30, float(pp_val)) else: - self.hf_row[s + "_bar"] = 0.0 + self.hf_row[s + '_bar'] = 0.0 for s in gas_list: if s not in vol_list: inc_gases.append(s) - self.hf_row[s + "_bar"] = 0.0 + self.hf_row[s + '_bar'] = 0.0 # Inform user log.info("Initial inventory set by '%s'" % self.config.delivery.initial) log.info('Included gases:') for s in inc_gases: - write = " " - write += "volatile " if s in vol_list else "vapour" - write += " %-8s" % s - if self.config.delivery.initial == "volatiles": - write += " : %6.2f bar"%self.hf_row[s + "_bar"] + write = ' ' + write += 'volatile ' if s in vol_list else 'vapour' + write += ' %-8s' % s + if self.config.delivery.initial == 'volatiles': + write += ' : %6.2f bar' % self.hf_row[s + '_bar'] log.info(write) else: @@ -315,7 +315,7 @@ def start(self, *, resume: bool = False, offline: bool = False): log.info('Resuming the simulation from the disk') # Read helpfile from disk - self.hf_all = ReadHelpfileFromCSV(self.directories["output"]) + self.hf_all = ReadHelpfileFromCSV(self.directories['output']) # Check length if len(self.hf_all) <= self.loops['init_loops'] + 1: @@ -408,10 +408,10 @@ def start(self, *, resume: bool = False, offline: bool = False): self.hf_row, self.config, stellar_track=self.stellar_track ) - if (abs(self.hf_row["Time"] - self.sspec_prev) > self.config.params.dt.starspec) or ( - self.loops["total"] == 0): - - self.sspec_prev = self.hf_row["Time"] + if ( + abs(self.hf_row['Time'] - self.sspec_prev) > self.config.params.dt.starspec + ) or (self.loops['total'] == 0): + self.sspec_prev = self.hf_row['Time'] update_stellar_spectrum = True # Get the new spectrum using the appropriate module @@ -467,7 +467,7 @@ def start(self, *, resume: bool = False, offline: bool = False): # solve for atmosphere composition else: - #run_outgassing(self.directories, self.config, self.hf_row) + # run_outgassing(self.directories, self.config, self.hf_row) lavatmos_calliope_loop(self.directories, self.config, self.hf_row) # Add mass of total volatile element mass (M_ele) to total mass of mantle+core @@ -515,14 +515,14 @@ def start(self, *, resume: bool = False, offline: bool = False): # Update full helpfile if self.loops['total'] > 1: # append row - self.hf_all = ExtendHelpfile(self.hf_all, self.hf_row,self.config) + self.hf_all = ExtendHelpfile(self.hf_all, self.hf_row, self.config) else: # first iter => generate new HF from dict - self.hf_all = CreateHelpfileFromDict(self.hf_row,self.config) + self.hf_all = CreateHelpfileFromDict(self.hf_row, self.config) # Write helpfile to disk - if multiple(self.loops["total"], self.config.params.out.write_mod): - WriteHelpfileToCSV(self.directories["output"], self.hf_all,self.config) + if multiple(self.loops['total'], self.config.params.out.write_mod): + WriteHelpfileToCSV(self.directories['output'], self.hf_all, self.config) # Print info to terminal and log file PrintCurrentState(self.hf_row) @@ -554,8 +554,8 @@ def start(self, *, resume: bool = False, offline: bool = False): ############### / HOUSEKEEPING AND CONVERGENCE CHECK # Write conditions at the end of simulation - log.info("Writing data") - WriteHelpfileToCSV(self.directories["output"], self.hf_all,self.config) + log.info('Writing data') + WriteHelpfileToCSV(self.directories['output'], self.hf_all, self.config) # Run offline chemistry if self.config.atmos_chem.when == 'offline': @@ -616,7 +616,8 @@ def observe(self): # Load data from helpfile from proteus.utils.coupler import ReadHelpfileFromCSV - hf_all = ReadHelpfileFromCSV(self.directories["output"],self.config) + + hf_all = ReadHelpfileFromCSV(self.directories['output'], self.config) # Check length if len(hf_all) < 1: @@ -636,7 +637,8 @@ def offline_chemistry(self): # Load data from helpfile from proteus.utils.coupler import ReadHelpfileFromCSV - hf_all = ReadHelpfileFromCSV(self.directories["output"],self.config) + + hf_all = ReadHelpfileFromCSV(self.directories['output'], self.config) # Check length if len(hf_all) < 1: diff --git a/src/proteus/utils/constants.py b/src/proteus/utils/constants.py index 184436871..3ec5516e0 100644 --- a/src/proteus/utils/constants.py +++ b/src/proteus/utils/constants.py @@ -1,19 +1,19 @@ # Physical, numerical, etc constants from __future__ import annotations -#import config file from proteus to set the vapour species list +# import config file from proteus to set the vapour species list -L_sun = 3.828e+26 # W, IAU definition -R_sun = 6.957e8 # m -R_sun_cm = 100 * R_sun # cm -M_sun = 1.988416e30 # kg -AU = 1.495978707e+11 # m -AU_cm = AU * 100.0 # cm -M_earth = 5.972E24 # kg -R_earth = 6.335439e6 # m -R_core_earth = 3485000.0 # m -M_core_earth = 1.94E24 # kg -mol = 6.02214076e+23 # mol definition +L_sun = 3.828e26 # W, IAU definition +R_sun = 6.957e8 # m +R_sun_cm = 100 * R_sun # cm +M_sun = 1.988416e30 # kg +AU = 1.495978707e11 # m +AU_cm = AU * 100.0 # cm +M_earth = 5.972e24 # kg +R_earth = 6.335439e6 # m +R_core_earth = 3485000.0 # m +M_core_earth = 1.94e24 # kg +mol = 6.02214076e23 # mol definition # Earth heat flux, globally averaged [W m-2] # https://se.copernicus.org/articles/1/5/2010/ @@ -44,14 +44,14 @@ B_ein = 2.5 # Supported gases -vap_list = ["SiO", "SiO2", "MgO", "FeO2"] -vol_list = ["H2O", "CO2", "O2", "H2", "CH4", "CO", "N2", "NH3", "S2", "SO2", "H2S"] -#vap_list = ["SiO", "SiO2", "MgO", "FeO2"] -#vap_list = ["SiO", "SiO2", "MgO", "FeO", "Na"] -#gas_list = vol_list + vap_list +vap_list = ['SiO', 'SiO2', 'MgO', 'FeO2'] +vol_list = ['H2O', 'CO2', 'O2', 'H2', 'CH4', 'CO', 'N2', 'NH3', 'S2', 'SO2', 'H2S'] +# vap_list = ["SiO", "SiO2", "MgO", "FeO2"] +# vap_list = ["SiO", "SiO2", "MgO", "FeO", "Na"] +# gas_list = vol_list + vap_list # Supported elements -element_list = ["H", "O", "C", "N", "S", "Si", "Mg", "Fe", "Na", "Al", "Ti", "Ca", "K"] +element_list = ['H', 'O', 'C', 'N', 'S', 'Si', 'Mg', 'Fe', 'Na', 'Al', 'Ti', 'Ca', 'K'] element_mmw = { 'H': 1.008000000e-03, 'He': 4.002000000e-03, diff --git a/src/proteus/utils/coupler.py b/src/proteus/utils/coupler.py index 74ce0a00a..50f364953 100644 --- a/src/proteus/utils/coupler.py +++ b/src/proteus/utils/coupler.py @@ -28,7 +28,7 @@ from proteus.utils.helper import UpdateStatusfile, create_tmp_folder, get_proteus_dir, safe_rm from proteus.utils.plot import sample_times -#from proteus.outgas.wrapper import get_gaslist +# from proteus.outgas.wrapper import get_gaslist if TYPE_CHECKING: from proteus.config import Config @@ -522,8 +522,8 @@ def CreateLockFile(output_dir: str): ) return keepalive_file -def GetHelpfileKeys(config:Config): +def GetHelpfileKeys(config: Config): """ Variables to be held in the helpfile. @@ -665,23 +665,26 @@ def GetHelpfileKeys(config:Config): return keys -def CreateHelpfileFromDict(d:dict,config:Config): - ''' + +def CreateHelpfileFromDict(d: dict, config: Config): + """ Create helpfile to hold output variables. - ''' - log.debug("Creating new helpfile from dict") + """ + log.debug('Creating new helpfile from dict') return pd.DataFrame([d], columns=GetHelpfileKeys(config), dtype=float) -def ZeroHelpfileRow(config:Config): - ''' + +def ZeroHelpfileRow(config: Config): + """ Get a dictionary with same keys as helpfile but with values of zero - ''' + """ out = {} for k in GetHelpfileKeys(config): out[k] = 0.0 return out -def ExtendHelpfile(current_hf:pd.DataFrame, new_row:dict,config:Config): + +def ExtendHelpfile(current_hf: pd.DataFrame, new_row: dict, config: Config): """ Extend helpfile with new row of variables @@ -690,8 +693,8 @@ def ExtendHelpfile(current_hf:pd.DataFrame, new_row:dict,config:Config): # validate keys missing_keys = set(GetHelpfileKeys(config)) - set(new_row.keys()) - if len(missing_keys)>0: - raise Exception("There are mismatched keys in helpfile: %s"%missing_keys) + if len(missing_keys) > 0: + raise Exception('There are mismatched keys in helpfile: %s' % missing_keys) # convert row to df new_row = pd.DataFrame([new_row], columns=GetHelpfileKeys(config), dtype=float) @@ -700,7 +703,7 @@ def ExtendHelpfile(current_hf:pd.DataFrame, new_row:dict,config:Config): return pd.concat([current_hf, new_row], ignore_index=True) -def WriteHelpfileToCSV(output_dir:str, current_hf:pd.DataFrame,config:Config): +def WriteHelpfileToCSV(output_dir: str, current_hf: pd.DataFrame, config: Config): """ Write helpfile to a CSV file """ diff --git a/src/proteus/utils/plot.py b/src/proteus/utils/plot.py index 32a68a363..0800df30d 100644 --- a/src/proteus/utils/plot.py +++ b/src/proteus/utils/plot.py @@ -22,25 +22,22 @@ # Default colour '_fallback': '#ff00ff', # Volatile gases - "H2O": "#027FB1", - "CO2": "#D24901", - "H2" : "#008C01", - "CH4": "#C720DD", - "CO" : "#D1AC02", - "N2" : "#870036", - "S2" : "#FF8FA1", - "SO2": "#00008B", - "H2S": "#2eff90", - "NH3": "#675200", - 'SiO':'#b2df8a', + 'H2O': '#027FB1', + 'CO2': '#D24901', + 'H2': '#008C01', + 'CH4': '#C720DD', + 'CO': '#D1AC02', + 'N2': '#870036', + 'S2': '#FF8FA1', + 'SO2': '#00008B', + 'H2S': '#2eff90', + 'NH3': '#675200', + 'SiO': '#b2df8a', 'MgO': '#a6cee3', 'SiO2': '#1b9e77', - 'FeO':'#7f0000', - 'TiO':"#9C45BC", - 'TiO2':"#421e39", - - - + 'FeO': '#7f0000', + 'TiO': '#9C45BC', + 'TiO2': '#421e39', # Volatile elements 'H': '#0000cc', 'C': '#ff0000', @@ -49,14 +46,12 @@ 'S': '#ff22ff', 'P': '#33ccff', # refractory elements - "Fe": "#888888", - "Si": "#aa2277", - "Mg": "#996633", - "Na": "#ccff00", - "Ti": "#0d2959", - "K": "#2e8b57", - - + 'Fe': '#888888', + 'Si': '#aa2277', + 'Mg': '#996633', + 'Na': '#ccff00', + 'Ti': '#0d2959', + 'K': '#2e8b57', # GLobal energy fluxes 'OLR': '#dc143c', 'ASF': '#4169e1', diff --git a/tests/outgas/test_outgas.py b/tests/outgas/test_outgas.py index acb2616c3..2946b6714 100644 --- a/tests/outgas/test_outgas.py +++ b/tests/outgas/test_outgas.py @@ -179,7 +179,7 @@ def test_run_outgassing_calliope_calculation(): # Setup hf_row with gas masses and VMR (typical early Earth steam atmosphere) hf_row = {} - gas_list=get_galist(config) + gas_list = get_galist(config) for s in gas_list: hf_row[s + '_kg_atm'] = 1e19 if s == 'H2O' else 1e16 # H2O-dominated @@ -233,7 +233,7 @@ def test_run_outgassing_atmosphere_mass_conservation(): 1e10, ] - gas_list=get_galist(config) + gas_list = get_galist(config) for i, s in enumerate(gas_list): hf_row[s + '_kg_atm'] = gas_masses[i] @@ -265,7 +265,7 @@ def test_run_outgassing_disabled_module(): # Setup with fixed gas masses hf_row = {} - gas_list=get_galist(config) + gas_list = get_galist(config) for s in gas_list: hf_row[s + '_kg_atm'] = 1e18 # Fixed 1 exagram per species hf_row[s + '_vmr'] = 1.0 / len(gas_list) # Equal mixing @@ -297,7 +297,7 @@ def test_run_desiccated_zeros_outgassing_keys(): # Setup hf_row with outgassing data hf_row = {} - gas_list=get_galist(config) + gas_list = get_galist(config) for s in gas_list: hf_row[s + '_kg_atm'] = 1e18 # Non-zero before desiccation hf_row[s + '_vmr'] = 0.1 # VMR preserved to avoid divide-by-zero @@ -340,7 +340,7 @@ def test_run_desiccated_preserves_critical_keys(): } # Add VMR and mass for all gases in gas_list - gas_list=get_galist(config) + gas_list = get_galist(config) for s in gas_list: if s == 'H2O': hf_row[s + '_vmr'] = 0.9 @@ -378,7 +378,7 @@ def test_run_outgassing_zero_atmosphere_mass(): # All gases have zero mass hf_row = {} - gas_list=get_galist(config) + gas_list = get_galist(config) for s in gas_list: hf_row[s + '_kg_atm'] = 0.0 hf_row[s + '_vmr'] = 0.0 @@ -454,7 +454,7 @@ def test_run_outgassing_mixed_species_dominance(): 'FeO2_kg_atm': 0.0, } - gas_list=get_galist(config) + gas_list = get_galist(config) for s in gas_list: if s in ['N2', 'O2']: hf_row[s + '_vmr'] = 0.5 # ~50% each for simplicity From e5a968d43cc3160867a423f8e9ba4818b1095ae9 Mon Sep 17 00:00:00 2001 From: Leoni Janssen Date: Thu, 19 Feb 2026 15:01:41 +0100 Subject: [PATCH 16/26] lavatmos-calliope loop with removing oxygen each iteration --- .../plot_comparison_runs/plot_elements.py | 99 +++++++++++++ input/albedo_test.toml | 1 - input/run_tests.toml | 4 +- src/proteus/outgas/calliope.py | 3 +- src/proteus/outgas/lavatmos.py | 132 +++++++++++------- src/proteus/outgas/wrapper.py | 30 ++-- src/proteus/plot/cpl_escape.py | 9 +- src/proteus/utils/constants.py | 1 + src/proteus/utils/plot.py | 2 + 9 files changed, 215 insertions(+), 66 deletions(-) create mode 100644 examples/plot_comparison_runs/plot_elements.py diff --git a/examples/plot_comparison_runs/plot_elements.py b/examples/plot_comparison_runs/plot_elements.py new file mode 100644 index 000000000..4f47c327c --- /dev/null +++ b/examples/plot_comparison_runs/plot_elements.py @@ -0,0 +1,99 @@ +#This routine needs to be called via python3 src/proteus/plot/compar_atmosphere_models.py. +# Functions used to help run PROTEUS which are mostly module agnostic. + +# Import utils-specific modules +from __future__ import annotations + +import glob +import logging +import os +import sys +import subprocess +from datetime import datetime +from typing import TYPE_CHECKING + +import matplotlib as mpl +import matplotlib.pyplot as plt +import numpy as np +from cmcrameri import cm +from matplotlib.ticker import LogLocator, MultipleLocator +from mpl_toolkits.axes_grid1 import make_axes_locatable + +mpl.use('Agg') # noqa +from string import ascii_letters + +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd + +from proteus.utils.constants import vol_list, element_list +from proteus.utils.helper import find_nearest +from proteus.utils.plot import get_colour, latexify, sample_times + +if TYPE_CHECKING: + from proteus.config import Config + +log = logging.getLogger('fwl.' + __name__) + + + + +def plot_atmosphere(output_dir): + + df = pd.read_csv(output_dir + 'runtime_helpfile.csv',sep='\t') + log.info("Plot element inventroy during the evolution") + + + # Initialise plot + scale = 1.1 + alpha = 0.6 + fig,ax = plt.subplots(1,1,figsize=(5*scale,4*scale)) + ax.set_ylabel("element inventroy [kg]") + ax.set_xlabel("time") + ax.set_yscale("log") + ax.set_xscale("log") + + + for e in element_list: + color = get_colour(e) + ax.plot(df['Time'], df[e+'_kg_total'], color=color, linestyle='-',label=e, alpha=alpha, zorder=3) + ax.plot(df['Time'], df[e+'_kg_atm'], color=color, linestyle='dotted',label=e, alpha=alpha, zorder=3) + + ax.set_ylim(10**4, max(df['O_kg_total'])*10) + plt.legend(fontsize=6) + # Save plot + fname = os.path.join(output_dir,"plots","element_inventory.png") + fig.savefig(fname, bbox_inches='tight', dpi=300) + + +def plot_fO2_shift(output_dir): + + df = pd.read_csv(output_dir + 'runtime_helpfile.csv',sep='\t') + log.info("Plot element inventroy during the evolution") + + + # Initialise plot + scale = 1.1 + alpha = 0.6 + fig,ax = plt.subplots(1,1,figsize=(5*scale,4*scale)) + ax.set_ylabel("fO2 shift wrt IW buffer") + ax.set_xlabel("time") + ax.set_xscale("log") + + color = 'black' + ax.plot(df['Time'], df['fO2_shift'], color=color, linestyle='-',label='fO2_shift dIW', alpha=alpha, zorder=3) + + ax.set_ylim(-10, max(df['fO2_shift'])*1.1) + plt.legend(fontsize=6) + # Save plot + fname = os.path.join(output_dir,"plots","fO2_shift.png") + fig.savefig(fname, bbox_inches='tight', dpi=300) + + + + +if __name__ == "__main__": + + output_dir=sys.argv[1] + plot_atmosphere(output_dir) + plot_fO2_shift(output_dir) \ No newline at end of file diff --git a/input/albedo_test.toml b/input/albedo_test.toml index 9bf1e5318..109b8ede2 100644 --- a/input/albedo_test.toml +++ b/input/albedo_test.toml @@ -116,7 +116,6 @@ version = "2.0" rot_period = "none" # rotation period [days] tracks = "spada" # evolution tracks: spada | baraffe age_now = 4.567 # current age of star [Gyr] - star_name = "sun" spec = "stellar_spectra/Named/sun.txt" # path to stellar spectrum file [star.dummy] diff --git a/input/run_tests.toml b/input/run_tests.toml index 47da0b2d2..e211934bb 100644 --- a/input/run_tests.toml +++ b/input/run_tests.toml @@ -31,7 +31,7 @@ version = "2.0" [params] # output files [params.out] - path = "updated_element_tracking" + path = "check_self_consistency" logging = "INFO" plot_mod = 3 # Plotting frequency, 0: wait until completion | n: every n iterations | none: do not plot plot_fmt = "png" # Plotting image file format, "png" or "pdf" recommended @@ -321,7 +321,7 @@ version = "2.0" fO2_shift_IW = 4 # atmosphere/interior boundary oxidation state [log10(ΔIW)] silicates = true - fastchempath = '/data3/leoni/LavAtmos/FastChem/fastchem3/output/' + fastchempath = '/data3/leoni/LavAtmos/FastChem/fastchem3/' vaplist = ["SiO", "SiO2","Si", "Na", "K", "Ti", "TiO", "TiO2" , "Mg", "MgO", "Al", "HAlO2"] module = "calliope" # Which outgassing module to use diff --git a/src/proteus/outgas/calliope.py b/src/proteus/outgas/calliope.py index 62d2dd280..ded4dbc9a 100644 --- a/src/proteus/outgas/calliope.py +++ b/src/proteus/outgas/calliope.py @@ -52,7 +52,7 @@ def construct_options(dirs: dict, config: Config, hf_row: dict): else: solvevol_inp['fO2_shift_IW'] = config.outgas.fO2_shift_IW - log.info('fO2 shift used by calliope:%s', solvevol_inp['fO2_shift_IW']) + log.info('fO2 shift used by calliope:%.6f', solvevol_inp['fO2_shift_IW']) # Volatile inventory for s in vol_list: @@ -295,6 +295,7 @@ def calc_surface_pressures(dirs: dict, config: Config, hf_row: dict): if e != 'O': target[e] = hf_row[e + '_kg_total'] + log.debug('amount of available elements for calliope computations: %s', target) # construct guess for CALLIOPE p_guess = construct_guess(hf_row, target, config.outgas.mass_thresh) diff --git a/src/proteus/outgas/lavatmos.py b/src/proteus/outgas/lavatmos.py index 55ef5994a..3a71e4c84 100644 --- a/src/proteus/outgas/lavatmos.py +++ b/src/proteus/outgas/lavatmos.py @@ -179,6 +179,25 @@ def oneill(self, T): """O'Neill and Eggins (2002) IW""" return 2 * (-244118 + 115.559 * T - 8.474 * T * np.log(T)) / (np.log(10) * 8.31441 * T) +def read_in_element_fracs(input_path): + + + # read file (skip comment line, split on whitespace) + + df = pd.read_csv( + input_path + "element_abundances/element_abundances_output.dat", + comment="#", # ignore lines starting with # + sep=r"\s+", # split on any whitespace + header=None + ) + + # make first column the headers and second column the data row + df = pd.DataFrame([df[1].values], columns=df[0].values) + + df_frac= np.power(10, df-12) + #dataframe has been multiplied by 1e20, so need to renormalise to get real fractions + return df_frac/1e20 + def run_lavatmos(config: Config, hf_row: dict): """ @@ -208,24 +227,23 @@ def run_lavatmos(config: Config, hf_row: dict): # set element fractions in atmosphere for lavatmos run input_eles = ['H', 'C', 'N', 'S', 'O'] - total_weight = ( - species_lib['H'].weight - + species_lib['C'].weight - + species_lib['N'].weight - + species_lib['O'].weight - + species_lib['S'].weight - ) - print('total_weight: ', total_weight) - # lavatmos takes in the abundnace fractions of element not mass fractions so divide by atomic number + # lavatmos takes in the abudance fractions of element not mass fractions so divide by atomic number + Mtot=0 + weighted_mass={} + for e in input_eles: + Mtot+=hf_row[e + '_kg_atm'] + weighted_mass[e]=hf_row[e + '_kg_atm']/species_lib[e].weight + for e in input_eles: - lavatmos_dict[e] = (hf_row[e + '_kg_atm'] / hf_row['M_atm']) * ( - total_weight / (5 * species_lib[e].weight) - ) - print(e, lavatmos_dict[e]) + lavatmos_dict[e] = weighted_mass[e] / Mtot + + + log.info('volatile elements read in by lavatmos: %s',lavatmos_dict) + parameters = { # General parameters - 'run_name': config.params.out.path, + 'run_name': 'proteus_run', # Melt parameters 'lava_comp': 'BSE_palm', 'silicate_abundances': 'lavatmos3', # 'lavatmos1', 'lavatmos2', 'manual' @@ -236,22 +254,6 @@ def run_lavatmos(config: Config, hf_row: dict): 'melt_fraction': 1.0, } - # compute density for the previous run with calliope output from hf_row: - kg_per_particle = hf_row['atm_kg_per_mol'] / particles_per_mol - - if ( - hf_row['T_surf'] == 0.0 - ): # make sure that not zero surface temperature in first iteration - Tsurf = hf_row['T_magma'] - else: - Tsurf = hf_row['T_surf'] - # hf_row['P_surf'] is in bar; convert to Pascals for use in the ideal gas law - P_surf_Pa = hf_row['P_surf'] * 1.0e5 - rho_old = kg_per_particle * P_surf_Pa / (kB * Tsurf) - - M_atmo_old = hf_row['M_atm'] - - lavatmos_instance = container_lavatmos(parameters) # make sure that surface temperature is at least 1500K, otherwise lavatmos crashes if hf_row['T_magma'] > 1500: @@ -259,12 +261,18 @@ def run_lavatmos(config: Config, hf_row: dict): else: Toutgas = 1500 + #print('melt fraction as given in parameters: ',parameters['melt_fraction']) + lavatmos_instance = container_lavatmos(parameters) lavatmos_instance.run_lavatmos(Toutgas) + #convert the element abundances from lavatmos file to element fractions, normalized to unity + input_fc=config.outgas.fastchempath + 'input/' + element_fracs=read_in_element_fracs(input_fc) + # read in boa chemistry from last iteration of fastchem and lavatmos - fastchempath = config.outgas.fastchempath - if os.path.exists(fastchempath): - mmr_path = os.path.join(fastchempath, 'boa_chem.dat') + output_fc = config.outgas.fastchempath + 'output/' + if os.path.exists(output_fc): + mmr_path = os.path.join(output_fc, 'boa_chem.dat') else: raise RuntimeError('cannot find fastchem output from lavatmos loop!') @@ -272,38 +280,60 @@ def run_lavatmos(config: Config, hf_row: dict): new_atmos_abundances = pd.read_csv(mmr_path, sep=r'\s+') mu_outgassed = new_atmos_abundances['mu'][0] + # compute density for the previous run with calliope output from hf_row: + kg_per_particle = hf_row['atm_kg_per_mol'] / particles_per_mol + + if ( + hf_row['T_surf'] == 0.0 + ): # make sure that not zero surface temperature in first iteration + Tsurf = hf_row['T_magma'] + else: + Tsurf = hf_row['T_surf'] + + # hf_row['P_surf'] is in bar; convert to Pascals for use in the ideal gas law + P_surf_Pa = hf_row['P_surf'] * 1.0e5 + rho_old = kg_per_particle * P_surf_Pa / (kB * Tsurf) + M_atmo_old = hf_row['M_atm'] + + log.debug('old atmospheric mass:%.4f'%M_atmo_old) + # rho of armosphere after lavatmos # n=rho/mu*mp - rho_new = kg_per_particle * new_atmos_abundances['Pbar'][0] / (kB * Tsurf) - M_atmo_new = M_atmo_old / rho_old * rho_new # kg assuming volum edoes not change + P_new_pa = new_atmos_abundances['Pbar'][0] * 1.0e5 #convert pressure to Pascals + rho_new = kg_per_particle * P_new_pa / (kB * Tsurf) + M_atmo_new = M_atmo_old / rho_old * rho_new # kg assuming volum does not change + + log.debug('new atmospheric mass:%.4f'%M_atmo_new) for vol in gas_list: new_pp = new_atmos_abundances[vol][0] * new_atmos_abundances['Pbar'][0] hf_row[vol + '_bar'] = new_pp # here need to update it in terms of pressure as well, since this is input for calliiope hf_row[vol + '_vmr'] = new_atmos_abundances[vol][0] - hf_row[vol + '_kg_atm'] = ( - new_atmos_abundances[vol][0] * M_atmo_new * species_lib[vol].weight / mu_outgassed - ) # kg - hf_row[vol + '_kg_total'] = ( - hf_row[vol + '_kg_atm'] + hf_row[vol + '_kg_solid'] + hf_row[vol + '_kg_liquid'] - ) + hf_row[vol + '_kg_atm'] = (new_atmos_abundances[vol][0] * M_atmo_new * species_lib[vol].weight / mu_outgassed ) # kg + hf_row[vol + '_kg_total'] = (hf_row[vol + '_kg_atm'] + hf_row[vol + '_kg_solid'] + hf_row[vol + '_kg_liquid']) + # elements are not considered as atomic species but just as inventory + #print('element fractions predicted by fastchem:',element_fracs) + + atmos_fracs={} #for debug + total_fracs={} #for debug for e in element_list: - hf_row[e + '_kg_atm'] = ( - new_atmos_abundances[e][0] * M_atmo_new * species_lib[e].weight / mu_outgassed - ) - hf_row[e + '_kg_total'] = ( - hf_row[e + '_kg_atm'] + hf_row[e + '_kg_solid'] + hf_row[e + '_kg_liquid'] - ) + hf_row[e + '_kg_atm'] = element_fracs[e][0] * M_atmo_new * species_lib[e].weight / mu_outgassed + + hf_row[e + '_kg_total'] = (hf_row[e + '_kg_atm'] + hf_row[e + '_kg_solid'] + hf_row[e + '_kg_liquid']) + + atmos_fracs[e] = hf_row[e + '_kg_atm'] + total_fracs[e] = hf_row[e + '_kg_total'] + + log.debug('atmospheric mass of elements from fastchem: %s',atmos_fracs) + log.info('total mass of elements after fastchem: %s',total_fracs) # saving new oxygen fugacity for calliope - log10_fO2 = np.log10(new_atmos_abundances['O2'][0]) + np.log10( - new_atmos_abundances['Pbar'][0] - ) # is this really partical pressure ? Maybe this is actually abundances + log10_fO2 = np.log10(new_atmos_abundances['O2'][0]) + np.log10( new_atmos_abundances['Pbar'][0]) # is this really partical pressure ? Maybe this is actually abundances fO2_shift = FO2shift() hf_row['fO2_shift'] = fO2_shift(hf_row['T_magma'], log10_fO2) - print('shift compared to iron wustite buffer:', hf_row['fO2_shift']) + log.info('shift compared to iron wustite buffer: %.6f'%hf_row['fO2_shift']) diff --git a/src/proteus/outgas/wrapper.py b/src/proteus/outgas/wrapper.py index a7f5e564e..b6c7200a9 100644 --- a/src/proteus/outgas/wrapper.py +++ b/src/proteus/outgas/wrapper.py @@ -164,9 +164,13 @@ def lavatmos_calliope_loop(dirs: dict, config: Config, hf_row: dict): hf_row['fO2_shift'] = config.outgas.fO2_shift_IW log.info('initial fO2_shift : %.6f' % config.outgas.fO2_shift_IW) + run_outgassing(dirs, config, hf_row) + + O_orig=hf_row['O_kg_total'] #track total oxygen inventory before running lavatmos + if config.outgas.silicates: - xerr = 0.01 # 0.1 #1e-3 + xerr =0.01 #1e-3 # 0.1 err = 1.0 # Maximum number of LavAtmos/Calliope iterations; allow configuration with a sensible default max_iterations = getattr( @@ -174,21 +178,29 @@ def lavatmos_calliope_loop(dirs: dict, config: Config, hf_row: dict): ) iteration = 0 log.info('silicates are outgassed') - log.info('error threshold on fO2 shift : %.6f' % xerr) - log.info('initial error : %.6f' % err) log.info('maximum LavAtmos/Calliope iterations : %d' % max_iterations) + while err > xerr and iteration < max_iterations: + + O_atm=hf_row['O_kg_atm'] #oxygen in atmosphere before running lavatmos + iteration += 1 - log.info('LavAtmos/Calliope iteration %d' % iteration) old_fO2shift = hf_row['fO2_shift'] - run_lavatmos( - config, hf_row - ) # in run_lavatmos add a criterion for temperature and melt fraction ? - log.info('new fO2 shift : %.6f' % hf_row['fO2_shift']) + + run_lavatmos(config, hf_row) + + delta_O = hf_row['O_kg_atm'] - O_atm #added oxygen by lavatmos to atmosphere + + #log.info('new fO2 shift : %.6f' % hf_row['fO2_shift']) + + hf_row['O_kg_total'] = O_orig + delta_O #new total oxygen abundance to consider for the next calliope run + run_outgassing(dirs, config, hf_row) + err = abs(old_fO2shift - hf_row['fO2_shift']) - log.info('fO2 shift after running lavatmos: %.6f' % hf_row['fO2_shift']) + log.info('change in fO2 between the last iterations: %.6f' % err) + if err > xerr: log.error( 'LavAtmos/Calliope did not converge within %d iterations ' diff --git a/src/proteus/plot/cpl_escape.py b/src/proteus/plot/cpl_escape.py index 595d4519a..7878f87b2 100644 --- a/src/proteus/plot/cpl_escape.py +++ b/src/proteus/plot/cpl_escape.py @@ -55,16 +55,21 @@ def plot_escape(hf_all: pd.DataFrame, output_dir: str, plot_format='pdf'): col = get_colour(e) # Plot planetary inventory of this element - y = np.array(hf_crop[e + '_kg_total']) / M_uval - total += y + y = np.array(hf_crop[e+"_kg_total"])/M_uval + if y.ndim == 2: + y = y[:, 0] ax0.plot(time, y, lw=_lw, ls='dotted', color=col) # Plot atmospheric inventory of this element y = np.array(hf_crop[f'{e}_kg_atm']) / M_uval + if y.ndim == 2: + y = y[:, 0] ax0.plot(time, y, lw=_lw, ls='solid', color=col, label=e) # Plot escape rate of this element y = np.array(hf_crop[f'esc_rate_{e}']) * secs_per_year * 1e6 / M_uval + if y.ndim == 2: + y = y[:, 0] ax1.plot(time, y, lw=_lw, ls='solid', color=col) # Planetary element sum inventory diff --git a/src/proteus/utils/constants.py b/src/proteus/utils/constants.py index 3ec5516e0..0cf342bec 100644 --- a/src/proteus/utils/constants.py +++ b/src/proteus/utils/constants.py @@ -52,6 +52,7 @@ # Supported elements element_list = ['H', 'O', 'C', 'N', 'S', 'Si', 'Mg', 'Fe', 'Na', 'Al', 'Ti', 'Ca', 'K'] + element_mmw = { 'H': 1.008000000e-03, 'He': 4.002000000e-03, diff --git a/src/proteus/utils/plot.py b/src/proteus/utils/plot.py index 0800df30d..f81479911 100644 --- a/src/proteus/utils/plot.py +++ b/src/proteus/utils/plot.py @@ -52,6 +52,8 @@ 'Na': '#ccff00', 'Ti': '#0d2959', 'K': '#2e8b57', + 'Al':"#5e2172", + 'Ca':"#167A9B", # GLobal energy fluxes 'OLR': '#dc143c', 'ASF': '#4169e1', From 129d970aa36c3ed8ae9a31c83fbb048a3c76e94e Mon Sep 17 00:00:00 2001 From: Leoni Janssen Date: Fri, 20 Feb 2026 17:24:29 +0100 Subject: [PATCH 17/26] made an option to run calliope and lavatmos without coupling for fO2, only for element budget. updated the file path for the elemnt abundance file output from lavatmos, such that the correct volatile abundances arae read in each iteration --- input/run_tests.toml | 4 +- src/proteus/config/_outgas.py | 3 + src/proteus/outgas/calliope.py | 11 ++- src/proteus/outgas/lavatmos.py | 153 ++++++++++++++++++++++++++++++++- src/proteus/outgas/wrapper.py | 21 ++++- src/proteus/proteus.py | 6 +- src/proteus/utils/coupler.py | 8 +- 7 files changed, 190 insertions(+), 16 deletions(-) diff --git a/input/run_tests.toml b/input/run_tests.toml index e211934bb..a8798b76d 100644 --- a/input/run_tests.toml +++ b/input/run_tests.toml @@ -31,7 +31,7 @@ version = "2.0" [params] # output files [params.out] - path = "check_self_consistency" + path = "update_elements_withLA" logging = "INFO" plot_mod = 3 # Plotting frequency, 0: wait until completion | n: every n iterations | none: do not plot plot_fmt = "png" # Plotting image file format, "png" or "pdf" recommended @@ -321,7 +321,9 @@ version = "2.0" fO2_shift_IW = 4 # atmosphere/interior boundary oxidation state [log10(ΔIW)] silicates = true + converge_fO2 = false fastchempath = '/data3/leoni/LavAtmos/FastChem/fastchem3/' + elementfile = '/data3/leoni/LavAtmos/input/fastchem3/' vaplist = ["SiO", "SiO2","Si", "Na", "K", "Ti", "TiO", "TiO2" , "Mg", "MgO", "Al", "HAlO2"] module = "calliope" # Which outgassing module to use diff --git a/src/proteus/config/_outgas.py b/src/proteus/config/_outgas.py index c5df73d1b..3278b70ff 100644 --- a/src/proteus/config/_outgas.py +++ b/src/proteus/config/_outgas.py @@ -104,8 +104,11 @@ class Outgas: # LavAtmos / silicate coupling is opt-in: default to disabled. silicates: bool = field(default=False) + converge_fO2: bool = field(default=False) # Path to FastChem output directory used by LavAtmos; must be set when silicate coupling is enabled. fastchempath: str = field(default='') + # Path to FastChem input directory used by LavAtmos; must be set when silicate coupling is enabled. + elementfile: str = field(default='') # List of vapour species for LavAtmos; must be set when silicate coupling is enabled. vaplist: list = field(factory=list) diff --git a/src/proteus/outgas/calliope.py b/src/proteus/outgas/calliope.py index ded4dbc9a..98b72695b 100644 --- a/src/proteus/outgas/calliope.py +++ b/src/proteus/outgas/calliope.py @@ -47,7 +47,7 @@ def construct_options(dirs: dict, config: Config, hf_row: dict): # Surface properties solvevol_inp['T_magma'] = hf_row['T_magma'] - if 'fO2_shift' in hf_row.keys(): + if config.outgas.converge_fO2 and 'fO2_shift' in hf_row.keys(): solvevol_inp['fO2_shift_IW'] = hf_row['fO2_shift'] else: solvevol_inp['fO2_shift_IW'] = config.outgas.fO2_shift_IW @@ -291,9 +291,12 @@ def calc_surface_pressures(dirs: dict, config: Config, hf_row: dict): # convert masses to dict for calliope target = {} - for e in element_list: - if e != 'O': - target[e] = hf_row[e + '_kg_total'] + #for e in element_list: + #if e != 'O': + #target[e] = hf_row[e + '_kg_total'] + vol_elements=['H','C','N','S'] + for e in vol_elements: + target[e] = hf_row[e + '_kg_total'] log.debug('amount of available elements for calliope computations: %s', target) # construct guess for CALLIOPE diff --git a/src/proteus/outgas/lavatmos.py b/src/proteus/outgas/lavatmos.py index 3a71e4c84..61d4576d6 100644 --- a/src/proteus/outgas/lavatmos.py +++ b/src/proteus/outgas/lavatmos.py @@ -160,6 +160,10 @@ def __init__(self, name, fc_name, weight): kB = 1.38064e-23 # JK-1 particles_per_mol = 6.02214076e23 +def get_gaslist(config: Config): + gas_list = vol_list + config.outgas.vaplist + return gas_list + class FO2shift: """models are taken from caliope. oxygen fugacity pO2 need to be in log10""" @@ -199,7 +203,7 @@ def read_in_element_fracs(input_path): return df_frac/1e20 -def run_lavatmos(config: Config, hf_row: dict): +def run_lavatmos_in_loop(config: Config, hf_row: dict): """ This function runs the Thermoengine module Lavatmos. Outgassing of refractory species @@ -221,7 +225,7 @@ def run_lavatmos(config: Config, hf_row: dict): sys.path.insert(1, '/data3/leoni/LavAtmos') from lavatmos_goot_runner import container_lavatmos - gas_list = vol_list + config.outgas.vaplist + gas_list = get_gaslist(config) lavatmos_dict = {'P': 0.0} # set element fractions in atmosphere for lavatmos run @@ -329,11 +333,152 @@ def run_lavatmos(config: Config, hf_row: dict): total_fracs[e] = hf_row[e + '_kg_total'] log.debug('atmospheric mass of elements from fastchem: %s',atmos_fracs) - log.info('total mass of elements after fastchem: %s',total_fracs) + log.debug('total mass of elements after fastchem: %s',total_fracs) # saving new oxygen fugacity for calliope log10_fO2 = np.log10(new_atmos_abundances['O2'][0]) + np.log10( new_atmos_abundances['Pbar'][0]) # is this really partical pressure ? Maybe this is actually abundances fO2_shift = FO2shift() hf_row['fO2_shift'] = fO2_shift(hf_row['T_magma'], log10_fO2) - log.info('shift compared to iron wustite buffer: %.6f'%hf_row['fO2_shift']) + log.debug('shift compared to iron wustite buffer: %.6f'%hf_row['fO2_shift']) + +def run_lavatmos(config: Config, hf_row: dict): + """ + + This function runs the Thermoengine module Lavatmos. Outgassing of refractory species + are computed from a melt temperature and atmospheric pressure. + + Parameters: + config : Config + Configuration object + hf_row : dict + Dictionary of helpfile variables, at this iteration only + obudget: oxygen budget already present in the atmosphere before running the outgassing + + """ + import os + import sys + + import numpy as np + + sys.path.insert(1, '/data3/leoni/LavAtmos') + from lavatmos_goot_runner import container_lavatmos + gas_list = get_gaslist(config) + lavatmos_dict = {'P': 0.0} + + # set element fractions in atmosphere for lavatmos run + input_eles = ['H', 'C', 'N', 'S', 'O'] + + # lavatmos takes in the abudance fractions of element not mass fractions so divide by atomic number + Mtot=0 + weighted_mass={} + for e in input_eles: + Mtot+=hf_row[e + '_kg_atm'] + weighted_mass[e]=hf_row[e + '_kg_atm']/species_lib[e].weight + + for e in input_eles: + lavatmos_dict[e] = weighted_mass[e] / Mtot + + + log.debug('volatile elements read in by lavatmos: %s',lavatmos_dict) + + + parameters = { + # General parameters + 'run_name': 'proteus_run', + # Melt parameters + 'lava_comp': 'BSE_palm', + 'silicate_abundances': 'lavatmos3', # 'lavatmos1', 'lavatmos2', 'manual' + # Volatile parameters + 'P_volatile': hf_row['P_surf'], # bar + 'oxygen_abundance': 'degassed', # 'degassed', 'manual', + 'volatile_comp': lavatmos_dict, + 'melt_fraction': 1.0, + } + + + # make sure that surface temperature is at least 1500K, otherwise lavatmos crashes + if hf_row['T_magma'] > 1500: + Toutgas = hf_row['T_magma'] + else: + Toutgas = 1500 + + #print('melt fraction as given in parameters: ',parameters['melt_fraction']) + lavatmos_instance = container_lavatmos(parameters) + lavatmos_instance.run_lavatmos(Toutgas) + + #convert the element abundances from lavatmos file to element fractions, normalized to unity + #input_fc=config.outgas.fastcheminput + element_fracs=read_in_element_fracs(config.outgas.elementfile) + + # read in boa chemistry from last iteration of fastchem and lavatmos + output_fc = config.outgas.fastchempath + 'output/' + if os.path.exists(output_fc): + mmr_path = os.path.join(output_fc, 'boa_chem.dat') + print(mmr_path) + else: + raise RuntimeError('cannot find fastchem output from lavatmos loop!') + + # update abundances in output file for next calliope run + new_atmos_abundances = pd.read_csv(mmr_path, sep=r'\s+') + mu_outgassed = new_atmos_abundances['mu'][0] + + # compute density for the previous run with calliope output from hf_row: + kg_per_particle = hf_row['atm_kg_per_mol'] / particles_per_mol + + if ( + hf_row['T_surf'] == 0.0 + ): # make sure that not zero surface temperature in first iteration + Tsurf = hf_row['T_magma'] + else: + Tsurf = hf_row['T_surf'] + + # hf_row['P_surf'] is in bar; convert to Pascals for use in the ideal gas law + P_surf_Pa = hf_row['P_surf'] * 1.0e5 + rho_old = kg_per_particle * P_surf_Pa / (kB * Tsurf) + M_atmo_old = hf_row['M_atm'] + + log.debug('old atmospheric mass:%.4f'%M_atmo_old) + + # rho of armosphere after lavatmos + # n=rho/mu*mp + P_new_pa = new_atmos_abundances['Pbar'][0] * 1.0e5 #convert pressure to Pascals + rho_new = kg_per_particle * P_new_pa / (kB * Tsurf) + M_atmo_new = M_atmo_old / rho_old * rho_new # kg assuming volum does not change + + log.debug('new atmospheric mass:%.4f'%M_atmo_new) + + for vol in gas_list: + new_pp = new_atmos_abundances[vol][0] * new_atmos_abundances['Pbar'][0] + hf_row[vol + '_bar'] = new_pp + # here need to update it in terms of pressure as well, since this is input for calliiope + hf_row[vol + '_vmr'] = new_atmos_abundances[vol][0] + hf_row[vol + '_kg_atm'] = (new_atmos_abundances[vol][0] * M_atmo_new * species_lib[vol].weight / mu_outgassed ) # kg + hf_row[vol + '_kg_total'] = (hf_row[vol + '_kg_atm'] + hf_row[vol + '_kg_solid'] + hf_row[vol + '_kg_liquid']) + + + # elements are not considered as atomic species but just as inventory + #print('element fractions predicted by fastchem:',element_fracs) + + atmos_fracs={} #for debug + total_fracs={} #for debug + for e in element_list: + # if e in input_eles and e !='O': #only update atmospheric masses of non volatile species + #continue + #else: + hf_row[e + '_kg_atm'] = element_fracs[e][0] * M_atmo_new * species_lib[e].weight / mu_outgassed + + hf_row[e + '_kg_total'] = (hf_row[e + '_kg_atm'] + hf_row[e + '_kg_solid'] + hf_row[e + '_kg_liquid']) + + atmos_fracs[e] = hf_row[e + '_kg_atm'] + total_fracs[e] = hf_row[e + '_kg_total'] + + log.debug('atmospheric mass of elements from fastchem: %s',atmos_fracs) + log.debug('total mass of elements after fastchem: %s',total_fracs) + # saving new oxygen fugacity for calliope + log10_fO2 = np.log10(new_atmos_abundances['O2'][0]) + np.log10(new_atmos_abundances['Pbar'][0]) # is this really partical pressure ? Maybe this is actually abundances + + fO2_shift = FO2shift() + hf_row['fO2_shift'] = fO2_shift(hf_row['T_magma'], log10_fO2) + + log.debug('shift compared to iron wustite buffer: %.6f'%hf_row['fO2_shift']) diff --git a/src/proteus/outgas/wrapper.py b/src/proteus/outgas/wrapper.py index b6c7200a9..b56238807 100644 --- a/src/proteus/outgas/wrapper.py +++ b/src/proteus/outgas/wrapper.py @@ -8,7 +8,7 @@ from proteus.outgas.calliope import calc_surface_pressures, calc_target_masses from proteus.outgas.common import expected_keys -from proteus.outgas.lavatmos import run_lavatmos +from proteus.outgas.lavatmos import run_lavatmos, run_lavatmos_in_loop from proteus.utils.constants import element_list, vap_list, vol_list if TYPE_CHECKING: @@ -187,7 +187,7 @@ def lavatmos_calliope_loop(dirs: dict, config: Config, hf_row: dict): iteration += 1 old_fO2shift = hf_row['fO2_shift'] - run_lavatmos(config, hf_row) + run_lavatmos_in_loop(config, hf_row) delta_O = hf_row['O_kg_atm'] - O_atm #added oxygen by lavatmos to atmosphere @@ -215,3 +215,20 @@ def lavatmos_calliope_loop(dirs: dict, config: Config, hf_row: dict): 'the fO2_shift error threshold (final error = %.6f, threshold = %.6f)' % (max_iterations, err, xerr) ) + +def lavatmos_calliope_run(dirs: dict, config: Config, hf_row: dict): + """function which runs lavatmos and calliope in a loop until they have converged. + This allows for a consistentt computation of melt outgassing and dissolution + Parameters + ---------- + dirs : dict + Dictionary of directory paths + config : Config + Configuration object + hf_row : dict + Dictionary of helpfile variables, at this iteration only + """ + + run_outgassing(dirs, config, hf_row) + if config.outgas.silicates: + run_lavatmos(config, hf_row) diff --git a/src/proteus/proteus.py b/src/proteus/proteus.py index df8f667a3..608cd2862 100644 --- a/src/proteus/proteus.py +++ b/src/proteus/proteus.py @@ -135,6 +135,7 @@ def start(self, *, resume: bool = False, offline: bool = False): calc_target_elemental_inventories, check_desiccation, lavatmos_calliope_loop, + lavatmos_calliope_run, run_desiccated, ) @@ -468,7 +469,10 @@ def start(self, *, resume: bool = False, offline: bool = False): # solve for atmosphere composition else: # run_outgassing(self.directories, self.config, self.hf_row) - lavatmos_calliope_loop(self.directories, self.config, self.hf_row) + if self.config.outgas.converge_fO2 : + lavatmos_calliope_loop(self.directories, self.config, self.hf_row) + else: + lavatmos_calliope_run(self.directories, self.config, self.hf_row) # Add mass of total volatile element mass (M_ele) to total mass of mantle+core update_planet_mass(self.hf_row) diff --git a/src/proteus/utils/coupler.py b/src/proteus/utils/coupler.py index 50f364953..4c025cf1f 100644 --- a/src/proteus/utils/coupler.py +++ b/src/proteus/utils/coupler.py @@ -778,7 +778,7 @@ def UpdatePlots(hf_all: pd.DataFrame, dirs: dict, config: Config, end=False, num from proteus.plot.cpl_sflux_cross import plot_sflux_cross from proteus.plot.cpl_spectra import plot_spectra from proteus.plot.cpl_structure import plot_structure - from proteus.plot.cpl_visual import plot_visual + #from proteus.plot.cpl_visual import plot_visual # Directories output_dir = dirs['output'] @@ -787,7 +787,7 @@ def UpdatePlots(hf_all: pd.DataFrame, dirs: dict, config: Config, end=False, num # Check model configuration dummy_atm = config.atmos_clim.module == 'dummy' dummy_int = config.interior.module == 'dummy' - agni = config.atmos_clim.module == 'agni' + #agni = config.atmos_clim.module == 'agni' spider = config.interior.module == 'spider' aragog = config.interior.module == 'aragog' observed = bool(config.observe.synthesis is not None) @@ -896,8 +896,8 @@ def UpdatePlots(hf_all: pd.DataFrame, dirs: dict, config: Config, end=False, num ) # Visualise planet and star - if agni: - plot_visual(hf_all, output_dir, idx=-1, plot_format=config.params.out.plot_fmt) + #if agni: + #plot_visual(hf_all, output_dir, idx=-1, plot_format=config.params.out.plot_fmt) # Check that the simulation ran for long enough to make useful plots if len(hf_all['Time']) >= 3: From 9b195cb13f60d697a7bba18594c06a837b5c0bf2 Mon Sep 17 00:00:00 2001 From: Leoni Janssen Date: Wed, 25 Feb 2026 14:17:31 +0100 Subject: [PATCH 18/26] removed the fO2 loop --- .../compar_atmosphere_models.py | 4 +- input/{run_tests.toml => run_silicates.toml} | 7 +- src/proteus/config/_outgas.py | 1 - src/proteus/outgas/calliope.py | 2 +- src/proteus/outgas/common.py | 9 +- src/proteus/outgas/lavatmos.py | 211 ++++-------------- src/proteus/outgas/wrapper.py | 68 +----- src/proteus/proteus.py | 13 +- src/proteus/utils/constants.py | 3 - src/proteus/utils/coupler.py | 2 +- 10 files changed, 57 insertions(+), 263 deletions(-) rename input/{run_tests.toml => run_silicates.toml} (99%) diff --git a/examples/plot_comparison_runs/compar_atmosphere_models.py b/examples/plot_comparison_runs/compar_atmosphere_models.py index 3c4631fa3..41080c1c6 100644 --- a/examples/plot_comparison_runs/compar_atmosphere_models.py +++ b/examples/plot_comparison_runs/compar_atmosphere_models.py @@ -633,13 +633,13 @@ def plot_two_chemistries(output_dir1,output_dir2, extension, tmin, nsamp): if __name__ == "__main__": - #output_dir1=sys.argv[1] + output_dir1=sys.argv[1] #output_dir2=sys.argv[2] #plot_atmosphere_comparison(output_dir1, output_dir2, tmin=1e4, extension="_atm.nc", nsamp=5, plot_format="png") #plot_two_chemistries(output_dir1,output_dir2, extension="_atm.nc", tmin=1e4, nsamp=5) - output_dir='/data3/leoni/PROTEUS/output/calliope_lavatmos_coupling_xerr001' + #output_dir='/data3/leoni/PROTEUS/output/calliope_lavatmos_coupling_xerr001' plottimes=[124027,134027,142186,152186] plot_atmosphere_selected_times(output_dir, plottimes) diff --git a/input/run_tests.toml b/input/run_silicates.toml similarity index 99% rename from input/run_tests.toml rename to input/run_silicates.toml index a8798b76d..ac20a5716 100644 --- a/input/run_tests.toml +++ b/input/run_silicates.toml @@ -31,7 +31,7 @@ version = "2.0" [params] # output files [params.out] - path = "update_elements_withLA" + path = "run_02AU" logging = "INFO" plot_mod = 3 # Plotting frequency, 0: wait until completion | n: every n iterations | none: do not plot plot_fmt = "png" # Plotting image file format, "png" or "pdf" recommended @@ -128,7 +128,7 @@ version = "2.0" [orbit] instellation_method = 'sma' # whether to define orbit using semi major axis ('sma') or instellation flux ('inst') instellationflux = 1.0 # instellation flux received from the planet in [Earth units] - semimajoraxis = 1.0 # initial semi-major axis of planet's orbit [AU] + semimajoraxis = 0.2 # initial semi-major axis of planet's orbit [AU] eccentricity = 0.0 # initial eccentricity of planet's orbit [dimensionless] zenith_angle = 48.19 # characteristic zenith angle [degrees] s0_factor = 0.375 # instellation scale factor [dimensionless] @@ -321,10 +321,9 @@ version = "2.0" fO2_shift_IW = 4 # atmosphere/interior boundary oxidation state [log10(ΔIW)] silicates = true - converge_fO2 = false fastchempath = '/data3/leoni/LavAtmos/FastChem/fastchem3/' elementfile = '/data3/leoni/LavAtmos/input/fastchem3/' - vaplist = ["SiO", "SiO2","Si", "Na", "K", "Ti", "TiO", "TiO2" , "Mg", "MgO", "Al", "HAlO2"] + vaplist = ["SiO", "SiO2","Si", "Na", "K", "Ti", "TiO", "TiO2" , "Mg", "MgO", "Al", "HAlO2", "SiH","SiH4"] module = "calliope" # Which outgassing module to use diff --git a/src/proteus/config/_outgas.py b/src/proteus/config/_outgas.py index 3278b70ff..264843d4c 100644 --- a/src/proteus/config/_outgas.py +++ b/src/proteus/config/_outgas.py @@ -104,7 +104,6 @@ class Outgas: # LavAtmos / silicate coupling is opt-in: default to disabled. silicates: bool = field(default=False) - converge_fO2: bool = field(default=False) # Path to FastChem output directory used by LavAtmos; must be set when silicate coupling is enabled. fastchempath: str = field(default='') # Path to FastChem input directory used by LavAtmos; must be set when silicate coupling is enabled. diff --git a/src/proteus/outgas/calliope.py b/src/proteus/outgas/calliope.py index 98b72695b..7a9b1107a 100644 --- a/src/proteus/outgas/calliope.py +++ b/src/proteus/outgas/calliope.py @@ -298,7 +298,7 @@ def calc_surface_pressures(dirs: dict, config: Config, hf_row: dict): for e in vol_elements: target[e] = hf_row[e + '_kg_total'] - log.debug('amount of available elements for calliope computations: %s', target) + log.info('amount of available elements for calliope computations: %s', target) # construct guess for CALLIOPE p_guess = construct_guess(hf_row, target, config.outgas.mass_thresh) diff --git a/src/proteus/outgas/common.py b/src/proteus/outgas/common.py index 3f8712a71..7cbad9b0f 100644 --- a/src/proteus/outgas/common.py +++ b/src/proteus/outgas/common.py @@ -6,7 +6,8 @@ if TYPE_CHECKING: from proteus.config import Config -from proteus.utils.constants import element_list, vap_list, vol_list +from proteus.outgas.wrapper import get_gaslist +from proteus.utils.constants import element_list # from proteus.outgas.wrapper import get_gaslist @@ -17,11 +18,7 @@ def expected_keys(config: Config): # reservoirs res_list = ('atm', 'liquid', 'solid', 'total') - if config.outgas.silicates: - gas_list = vol_list + config.outgas.vaplist - else: - gas_list = vol_list + vap_list - + gas_list=get_gaslist(config) # gases for s in gas_list: copy_keys.append(f'{s}_bar') diff --git a/src/proteus/outgas/lavatmos.py b/src/proteus/outgas/lavatmos.py index 61d4576d6..4cb2aea5b 100644 --- a/src/proteus/outgas/lavatmos.py +++ b/src/proteus/outgas/lavatmos.py @@ -11,7 +11,8 @@ from proteus.config import Config -from proteus.utils.constants import element_list, vol_list +from proteus.outgas.wrapper import get_gaslist +from proteus.utils.constants import element_list log = logging.getLogger('fwl.' + __name__) @@ -160,9 +161,9 @@ def __init__(self, name, fc_name, weight): kB = 1.38064e-23 # JK-1 particles_per_mol = 6.02214076e23 -def get_gaslist(config: Config): - gas_list = vol_list + config.outgas.vaplist - return gas_list +#def get_gaslist(config: Config): + # gas_list = vol_list + config.outgas.vaplist + #return gas_list class FO2shift: @@ -203,145 +204,6 @@ def read_in_element_fracs(input_path): return df_frac/1e20 -def run_lavatmos_in_loop(config: Config, hf_row: dict): - """ - - This function runs the Thermoengine module Lavatmos. Outgassing of refractory species - are computed from a melt temperature and atmospheric pressure. - - Parameters: - config : Config - Configuration object - hf_row : dict - Dictionary of helpfile variables, at this iteration only - obudget: oxygen budget already present in the atmosphere before running the outgassing - - """ - import os - import sys - - import numpy as np - - sys.path.insert(1, '/data3/leoni/LavAtmos') - from lavatmos_goot_runner import container_lavatmos - - gas_list = get_gaslist(config) - lavatmos_dict = {'P': 0.0} - - # set element fractions in atmosphere for lavatmos run - input_eles = ['H', 'C', 'N', 'S', 'O'] - - # lavatmos takes in the abudance fractions of element not mass fractions so divide by atomic number - Mtot=0 - weighted_mass={} - for e in input_eles: - Mtot+=hf_row[e + '_kg_atm'] - weighted_mass[e]=hf_row[e + '_kg_atm']/species_lib[e].weight - - for e in input_eles: - lavatmos_dict[e] = weighted_mass[e] / Mtot - - - log.info('volatile elements read in by lavatmos: %s',lavatmos_dict) - - - parameters = { - # General parameters - 'run_name': 'proteus_run', - # Melt parameters - 'lava_comp': 'BSE_palm', - 'silicate_abundances': 'lavatmos3', # 'lavatmos1', 'lavatmos2', 'manual' - # Volatile parameters - 'P_volatile': hf_row['P_surf'], # bar - 'oxygen_abundance': 'degassed', # 'degassed', 'manual', - 'volatile_comp': lavatmos_dict, - 'melt_fraction': 1.0, - } - - - # make sure that surface temperature is at least 1500K, otherwise lavatmos crashes - if hf_row['T_magma'] > 1500: - Toutgas = hf_row['T_magma'] - else: - Toutgas = 1500 - - #print('melt fraction as given in parameters: ',parameters['melt_fraction']) - lavatmos_instance = container_lavatmos(parameters) - lavatmos_instance.run_lavatmos(Toutgas) - - #convert the element abundances from lavatmos file to element fractions, normalized to unity - input_fc=config.outgas.fastchempath + 'input/' - element_fracs=read_in_element_fracs(input_fc) - - # read in boa chemistry from last iteration of fastchem and lavatmos - output_fc = config.outgas.fastchempath + 'output/' - if os.path.exists(output_fc): - mmr_path = os.path.join(output_fc, 'boa_chem.dat') - else: - raise RuntimeError('cannot find fastchem output from lavatmos loop!') - - # update abundances in output file for next calliope run - new_atmos_abundances = pd.read_csv(mmr_path, sep=r'\s+') - mu_outgassed = new_atmos_abundances['mu'][0] - - # compute density for the previous run with calliope output from hf_row: - kg_per_particle = hf_row['atm_kg_per_mol'] / particles_per_mol - - if ( - hf_row['T_surf'] == 0.0 - ): # make sure that not zero surface temperature in first iteration - Tsurf = hf_row['T_magma'] - else: - Tsurf = hf_row['T_surf'] - - # hf_row['P_surf'] is in bar; convert to Pascals for use in the ideal gas law - P_surf_Pa = hf_row['P_surf'] * 1.0e5 - rho_old = kg_per_particle * P_surf_Pa / (kB * Tsurf) - M_atmo_old = hf_row['M_atm'] - - log.debug('old atmospheric mass:%.4f'%M_atmo_old) - - # rho of armosphere after lavatmos - # n=rho/mu*mp - P_new_pa = new_atmos_abundances['Pbar'][0] * 1.0e5 #convert pressure to Pascals - rho_new = kg_per_particle * P_new_pa / (kB * Tsurf) - M_atmo_new = M_atmo_old / rho_old * rho_new # kg assuming volum does not change - - log.debug('new atmospheric mass:%.4f'%M_atmo_new) - - for vol in gas_list: - new_pp = new_atmos_abundances[vol][0] * new_atmos_abundances['Pbar'][0] - hf_row[vol + '_bar'] = new_pp - # here need to update it in terms of pressure as well, since this is input for calliiope - hf_row[vol + '_vmr'] = new_atmos_abundances[vol][0] - hf_row[vol + '_kg_atm'] = (new_atmos_abundances[vol][0] * M_atmo_new * species_lib[vol].weight / mu_outgassed ) # kg - hf_row[vol + '_kg_total'] = (hf_row[vol + '_kg_atm'] + hf_row[vol + '_kg_solid'] + hf_row[vol + '_kg_liquid']) - - - # elements are not considered as atomic species but just as inventory - #print('element fractions predicted by fastchem:',element_fracs) - - atmos_fracs={} #for debug - total_fracs={} #for debug - for e in element_list: - - hf_row[e + '_kg_atm'] = element_fracs[e][0] * M_atmo_new * species_lib[e].weight / mu_outgassed - - hf_row[e + '_kg_total'] = (hf_row[e + '_kg_atm'] + hf_row[e + '_kg_solid'] + hf_row[e + '_kg_liquid']) - - atmos_fracs[e] = hf_row[e + '_kg_atm'] - total_fracs[e] = hf_row[e + '_kg_total'] - - log.debug('atmospheric mass of elements from fastchem: %s',atmos_fracs) - log.debug('total mass of elements after fastchem: %s',total_fracs) - # saving new oxygen fugacity for calliope - log10_fO2 = np.log10(new_atmos_abundances['O2'][0]) + np.log10( new_atmos_abundances['Pbar'][0]) # is this really partical pressure ? Maybe this is actually abundances - - fO2_shift = FO2shift() - hf_row['fO2_shift'] = fO2_shift(hf_row['T_magma'], log10_fO2) - - log.debug('shift compared to iron wustite buffer: %.6f'%hf_row['fO2_shift']) - def run_lavatmos(config: Config, hf_row: dict): """ @@ -364,23 +226,23 @@ def run_lavatmos(config: Config, hf_row: dict): sys.path.insert(1, '/data3/leoni/LavAtmos') from lavatmos_goot_runner import container_lavatmos gas_list = get_gaslist(config) - lavatmos_dict = {'P': 0.0} # set element fractions in atmosphere for lavatmos run input_eles = ['H', 'C', 'N', 'S', 'O'] # lavatmos takes in the abudance fractions of element not mass fractions so divide by atomic number - Mtot=0 - weighted_mass={} - for e in input_eles: - Mtot+=hf_row[e + '_kg_atm'] - weighted_mass[e]=hf_row[e + '_kg_atm']/species_lib[e].weight + molfracs={} + nfrac={'P': 0.0} + total_mols=0.0 for e in input_eles: - lavatmos_dict[e] = weighted_mass[e] / Mtot - + molfracs[e]= hf_row[e + '_kg_atm']/species_lib[e].weight + total_mols+= molfracs[e] + for e in input_eles: + nfrac[e]= molfracs[e]/total_mols + #log.info('volatile element carbon read in by lavatmos: %s',lavatmos_dict['C']) + log.debug('volatile element fractions : %s',nfrac) - log.debug('volatile elements read in by lavatmos: %s',lavatmos_dict) parameters = { @@ -392,7 +254,7 @@ def run_lavatmos(config: Config, hf_row: dict): # Volatile parameters 'P_volatile': hf_row['P_surf'], # bar 'oxygen_abundance': 'degassed', # 'degassed', 'manual', - 'volatile_comp': lavatmos_dict, + 'volatile_comp': nfrac, 'melt_fraction': 1.0, } @@ -408,9 +270,10 @@ def run_lavatmos(config: Config, hf_row: dict): lavatmos_instance.run_lavatmos(Toutgas) #convert the element abundances from lavatmos file to element fractions, normalized to unity - #input_fc=config.outgas.fastcheminput element_fracs=read_in_element_fracs(config.outgas.elementfile) + log.debug('elements passed to fastchem runs from lavatmos output: %s',element_fracs) + # read in boa chemistry from last iteration of fastchem and lavatmos output_fc = config.outgas.fastchempath + 'output/' if os.path.exists(output_fc): @@ -426,24 +289,21 @@ def run_lavatmos(config: Config, hf_row: dict): # compute density for the previous run with calliope output from hf_row: kg_per_particle = hf_row['atm_kg_per_mol'] / particles_per_mol - if ( - hf_row['T_surf'] == 0.0 - ): # make sure that not zero surface temperature in first iteration - Tsurf = hf_row['T_magma'] - else: - Tsurf = hf_row['T_surf'] + #print('kg per particle before lavatmos:',kg_per_particle) # hf_row['P_surf'] is in bar; convert to Pascals for use in the ideal gas law P_surf_Pa = hf_row['P_surf'] * 1.0e5 - rho_old = kg_per_particle * P_surf_Pa / (kB * Tsurf) + rho_old = kg_per_particle * P_surf_Pa / (kB * hf_row['T_magma']) M_atmo_old = hf_row['M_atm'] log.debug('old atmospheric mass:%.4f'%M_atmo_old) # rho of armosphere after lavatmos # n=rho/mu*mp + kg_pp_new = mu_outgassed * mp + print('kg per particle after lavatmos:',kg_pp_new) P_new_pa = new_atmos_abundances['Pbar'][0] * 1.0e5 #convert pressure to Pascals - rho_new = kg_per_particle * P_new_pa / (kB * Tsurf) + rho_new = kg_pp_new * P_new_pa / (kB * hf_row['T_magma']) M_atmo_new = M_atmo_old / rho_old * rho_new # kg assuming volum does not change log.debug('new atmospheric mass:%.4f'%M_atmo_new) @@ -462,16 +322,31 @@ def run_lavatmos(config: Config, hf_row: dict): atmos_fracs={} #for debug total_fracs={} #for debug + + mmw_elements=0 + #log.info('elements in element list: %s'%element_list) + #log.info('elements in lavatmos:%s'%element_fracs.columns.tolist()) + for e in element_fracs.columns.tolist(): + mmw_elements += element_fracs[e][0] * species_lib[e].weight + for e in element_list: - # if e in input_eles and e !='O': #only update atmospheric masses of non volatile species + + #if e in input_eles and e !='O': #only update atmospheric masses of non volatile species - safest is to keep volatiles non updated (except for O ?) #continue #else: - hf_row[e + '_kg_atm'] = element_fracs[e][0] * M_atmo_new * species_lib[e].weight / mu_outgassed + log.debug('element: %s, %s',e, element_fracs[e][0]) + log.debug('total mass of element before updating with lavatmos: %s',hf_row[e + '_kg_atm']) + + #hf_row[e + '_kg_atm'] = element_fracs[e][0] * M_atmo_new * species_lib[e].weight / mu_outgassed + hf_row[e + '_kg_atm'] = element_fracs[e][0] * M_atmo_new * species_lib[e].weight / mmw_elements - hf_row[e + '_kg_total'] = (hf_row[e + '_kg_atm'] + hf_row[e + '_kg_solid'] + hf_row[e + '_kg_liquid']) + #hf_row[e + '_kg_total'] = (hf_row[e + '_kg_atm'] + hf_row[e + '_kg_solid'] + hf_row[e + '_kg_liquid']) + log.debug('total mass of element after updating with lavatmos: %s',hf_row[e + '_kg_atm']) + #option2 = element_fracs[e][0] * M_atmo_old * species_lib[e].weight / mmw_elements + #log.info('total mass of element after updating with lavatmos using old atmospheric mass : %s'%option2) + atmos_fracs[e] = hf_row[e + '_kg_atm'] + total_fracs[e] = hf_row[e + '_kg_total'] - atmos_fracs[e] = hf_row[e + '_kg_atm'] - total_fracs[e] = hf_row[e + '_kg_total'] log.debug('atmospheric mass of elements from fastchem: %s',atmos_fracs) log.debug('total mass of elements after fastchem: %s',total_fracs) @@ -479,6 +354,6 @@ def run_lavatmos(config: Config, hf_row: dict): log10_fO2 = np.log10(new_atmos_abundances['O2'][0]) + np.log10(new_atmos_abundances['Pbar'][0]) # is this really partical pressure ? Maybe this is actually abundances fO2_shift = FO2shift() - hf_row['fO2_shift'] = fO2_shift(hf_row['T_magma'], log10_fO2) + hf_row['fO2_shift_LavAtmos'] = fO2_shift(hf_row['T_magma'], log10_fO2) log.debug('shift compared to iron wustite buffer: %.6f'%hf_row['fO2_shift']) diff --git a/src/proteus/outgas/wrapper.py b/src/proteus/outgas/wrapper.py index b56238807..14818e81a 100644 --- a/src/proteus/outgas/wrapper.py +++ b/src/proteus/outgas/wrapper.py @@ -8,7 +8,7 @@ from proteus.outgas.calliope import calc_surface_pressures, calc_target_masses from proteus.outgas.common import expected_keys -from proteus.outgas.lavatmos import run_lavatmos, run_lavatmos_in_loop +from proteus.outgas.lavatmos import run_lavatmos from proteus.utils.constants import element_list, vap_list, vol_list if TYPE_CHECKING: @@ -149,72 +149,6 @@ def run_desiccated(config: Config, hf_row: dict): hf_row[k] = 0.0 -def lavatmos_calliope_loop(dirs: dict, config: Config, hf_row: dict): - """function which runs lavatmos and calliope in a loop until they have converged. - This allows for a consistentt computation of melt outgassing and dissolution - Parameters - ---------- - dirs : dict - Dictionary of directory paths - config : Config - Configuration object - hf_row : dict - Dictionary of helpfile variables, at this iteration only - """ - - hf_row['fO2_shift'] = config.outgas.fO2_shift_IW - log.info('initial fO2_shift : %.6f' % config.outgas.fO2_shift_IW) - - run_outgassing(dirs, config, hf_row) - - O_orig=hf_row['O_kg_total'] #track total oxygen inventory before running lavatmos - - if config.outgas.silicates: - xerr =0.01 #1e-3 # 0.1 - err = 1.0 - # Maximum number of LavAtmos/Calliope iterations; allow configuration with a sensible default - max_iterations = getattr( - getattr(config, 'outgas', config), 'max_lavatmos_iterations', 100 - ) - iteration = 0 - log.info('silicates are outgassed') - log.info('maximum LavAtmos/Calliope iterations : %d' % max_iterations) - - while err > xerr and iteration < max_iterations: - - O_atm=hf_row['O_kg_atm'] #oxygen in atmosphere before running lavatmos - - iteration += 1 - old_fO2shift = hf_row['fO2_shift'] - - run_lavatmos_in_loop(config, hf_row) - - delta_O = hf_row['O_kg_atm'] - O_atm #added oxygen by lavatmos to atmosphere - - #log.info('new fO2 shift : %.6f' % hf_row['fO2_shift']) - - hf_row['O_kg_total'] = O_orig + delta_O #new total oxygen abundance to consider for the next calliope run - - run_outgassing(dirs, config, hf_row) - - err = abs(old_fO2shift - hf_row['fO2_shift']) - - log.info('change in fO2 between the last iterations: %.6f' % err) - - if err > xerr: - log.error( - 'LavAtmos/Calliope did not converge within %d iterations ' - '(final |ΔfO2_shift| = %.6f, threshold = %.6f)', - max_iterations, - err, - xerr, - ) - raise RuntimeError( - 'LavAtmos/Calliope convergence failed: ' - 'maximum number of iterations (%d) exceeded without reaching ' - 'the fO2_shift error threshold (final error = %.6f, threshold = %.6f)' - % (max_iterations, err, xerr) - ) def lavatmos_calliope_run(dirs: dict, config: Config, hf_row: dict): """function which runs lavatmos and calliope in a loop until they have converged. diff --git a/src/proteus/proteus.py b/src/proteus/proteus.py index 608cd2862..3c4d02625 100644 --- a/src/proteus/proteus.py +++ b/src/proteus/proteus.py @@ -13,10 +13,7 @@ import proteus.utils.archive as archive from proteus.config import read_config_object -from proteus.outgas.wrapper import get_gaslist -from proteus.utils.constants import ( - vol_list, -) +from proteus.utils.constants import vol_list from proteus.utils.helper import ( CleanDir, PrintHalfSeparator, @@ -134,7 +131,7 @@ def start(self, *, resume: bool = False, offline: bool = False): from proteus.outgas.wrapper import ( calc_target_elemental_inventories, check_desiccation, - lavatmos_calliope_loop, + get_gaslist, lavatmos_calliope_run, run_desiccated, ) @@ -468,11 +465,7 @@ def start(self, *, resume: bool = False, offline: bool = False): # solve for atmosphere composition else: - # run_outgassing(self.directories, self.config, self.hf_row) - if self.config.outgas.converge_fO2 : - lavatmos_calliope_loop(self.directories, self.config, self.hf_row) - else: - lavatmos_calliope_run(self.directories, self.config, self.hf_row) + lavatmos_calliope_run(self.directories, self.config, self.hf_row) # Add mass of total volatile element mass (M_ele) to total mass of mantle+core update_planet_mass(self.hf_row) diff --git a/src/proteus/utils/constants.py b/src/proteus/utils/constants.py index 0cf342bec..25e85698a 100644 --- a/src/proteus/utils/constants.py +++ b/src/proteus/utils/constants.py @@ -46,9 +46,6 @@ # Supported gases vap_list = ['SiO', 'SiO2', 'MgO', 'FeO2'] vol_list = ['H2O', 'CO2', 'O2', 'H2', 'CH4', 'CO', 'N2', 'NH3', 'S2', 'SO2', 'H2S'] -# vap_list = ["SiO", "SiO2", "MgO", "FeO2"] -# vap_list = ["SiO", "SiO2", "MgO", "FeO", "Na"] -# gas_list = vol_list + vap_list # Supported elements element_list = ['H', 'O', 'C', 'N', 'S', 'Si', 'Mg', 'Fe', 'Na', 'Al', 'Ti', 'Ca', 'K'] diff --git a/src/proteus/utils/coupler.py b/src/proteus/utils/coupler.py index 4c025cf1f..8d1bf58e7 100644 --- a/src/proteus/utils/coupler.py +++ b/src/proteus/utils/coupler.py @@ -661,7 +661,7 @@ def GetHelpfileKeys(config: Config): # Simulation's computational variables keys.append('runtime') # Simulation wall-clock runtime [s] - keys.append("fO2_shift") #relative to IW buffer + keys.append("fO2_shift_LavAtmos") #relative to IW buffer return keys From 2e5c03cac99449b5850e5e4baaadfb99e297bdfe Mon Sep 17 00:00:00 2001 From: Leoni Janssen Date: Fri, 27 Feb 2026 16:31:00 +0100 Subject: [PATCH 19/26] added wrapperfunctions from lavatmos_goot_runner and the path setting function to the lavatmos.py script. This allos later coupling to alavatmos folder in the PROTEUS/Thermoengine directory. --- get_lavatmos.sh | 23 +++++ input/run_silicates.toml | 6 +- src/proteus/atmos_clim/agni.py | 17 +++- src/proteus/atmos_clim/dummy.py | 7 +- src/proteus/atmos_clim/janus.py | 6 +- src/proteus/outgas/calliope.py | 8 +- src/proteus/outgas/common.py | 9 +- src/proteus/outgas/lavatmos.py | 115 ++++++++++++++++++++++-- src/proteus/outgas/wrapper.py | 32 ++++--- src/proteus/plot/cpl_chem_atmosphere.py | 2 + src/proteus/plot/cpl_global.py | 9 +- src/proteus/proteus.py | 8 +- src/proteus/utils/coupler.py | 8 +- 13 files changed, 202 insertions(+), 48 deletions(-) create mode 100644 get_lavatmos.sh diff --git a/get_lavatmos.sh b/get_lavatmos.sh new file mode 100644 index 000000000..684b47f32 --- /dev/null +++ b/get_lavatmos.sh @@ -0,0 +1,23 @@ +#!/bin/bash +# Download lavatmos + +set -e + +root=$(dirname $(realpath $0)) +root=$(realpath "$root/..") + +# Download via HTTPS only +lavapath="$root/Thermoengine/LavAtmos" +rm -rf "$lavapath" + +git clone https://github.com/leojola/LavAtmos.git "$lavapath" + + +cd "$lavapath" +cd $root +export LAVATMOS_DIR=$lavapath + +echo "LavAtmos has been installed" +echo "It is recommended that you add the following line to your shell rc file" +echo "export LAVATMOS_DIR='$lavapath'" +exit 0 diff --git a/input/run_silicates.toml b/input/run_silicates.toml index ac20a5716..c5773e389 100644 --- a/input/run_silicates.toml +++ b/input/run_silicates.toml @@ -31,7 +31,7 @@ version = "2.0" [params] # output files [params.out] - path = "run_02AU" + path = "run_02AU_silicates_1H2O" logging = "INFO" plot_mod = 3 # Plotting frequency, 0: wait until completion | n: every n iterations | none: do not plot plot_fmt = "png" # Plotting image file format, "png" or "pdf" recommended @@ -82,7 +82,7 @@ version = "2.0" # radiative equilibrium [params.stop.radeqm] - enabled = true + enabled = false atol = 0.2 # absolute tolerance [W m-2] rtol = 1e-3 # relative tolerance @@ -367,7 +367,7 @@ version = "2.0" use_metallicity = false # whether or not to specify the elemental abundances in terms of solar metallicity metallicity = 1000 # metallicity relative to solar metallicity - H_oceans = 2.0 # Hydrogen inventory in units of equivalent Earth oceans + H_oceans = 1.0 # Hydrogen inventory in units of equivalent Earth oceans # H_ppmw = 109.0 # Hydrogen inventory in ppmw relative to mantle mass # H_kg = 1e20 # Hydrogen inventory in kg diff --git a/src/proteus/atmos_clim/agni.py b/src/proteus/atmos_clim/agni.py index 2f0b4a9ad..e1c274082 100644 --- a/src/proteus/atmos_clim/agni.py +++ b/src/proteus/atmos_clim/agni.py @@ -12,7 +12,7 @@ from scipy.interpolate import PchipInterpolator from proteus.atmos_clim.common import get_oarr_from_parr, get_spfile_path -from proteus.outgas.wrapper import get_gaslist +from proteus.utils.constants import vap_list, vol_list from proteus.utils.helper import UpdateStatusfile, create_tmp_folder, multiple, safe_rm from proteus.utils.logs import GetCurrentLogfileIndex, GetLogfilePath @@ -71,7 +71,10 @@ def activate_julia(dirs: dict, verbosity: int): def _construct_voldict(hf_row: dict, dirs: dict, config: Config): - gas_list = get_gaslist(config) + if config.outgas.silicates: + gas_list = vol_list + config.outgas.vaplist + else: + gas_list = vol_list + vap_list log.debug('list of gases used by agni: %s', gas_list) @@ -537,7 +540,10 @@ def _solve_once(atmos, config: Config): """ # set included vapur species - gas_list = get_gaslist(config) + if config.outgas.silicates: + gas_list = vol_list + config.outgas.vaplist + else: + gas_list = vol_list + vap_list # set temperature profile # rainout volatiles at surface rained = jl.AGNI.chemistry.calc_composition_b( @@ -735,7 +741,10 @@ def run_agni(atmos, loops_total: int, dirs: dict, config: Config, hf_row: dict): output['ocean_maxdepth'] = float(atmos.ocean_maxdepth) output['P_surf_clim'] = float(atmos.p_boa) / 1e5 # Calculated Psurf [bar] - gas_list = get_gaslist(config) + if config.outgas.silicates: + gas_list = vol_list + config.outgas.vaplist + else: + gas_list = vol_list + vap_list for g in gas_list: if g in list(atmos.gas_names): diff --git a/src/proteus/atmos_clim/dummy.py b/src/proteus/atmos_clim/dummy.py index c6f00749f..a88af39f3 100644 --- a/src/proteus/atmos_clim/dummy.py +++ b/src/proteus/atmos_clim/dummy.py @@ -6,7 +6,7 @@ import numpy as np -from proteus.utils.constants import const_R, const_sigma, gas_list +from proteus.utils.constants import const_R, const_sigma, vap_list, vol_list from proteus.utils.helper import UpdateStatusfile if TYPE_CHECKING: @@ -127,6 +127,11 @@ def _resid(x): output['P_surf_clim'] = hf_row['P_surf'] # Gas composition for escape equal to surface composition + if config.outgas.silicates: + gas_list = vol_list + config.outgas.vaplist + else: + gas_list = vol_list + vap_list + for g in gas_list: hf_row[f'{g}_vmr_xuv'] = float(hf_row.get(f'{g}_vmr', 0.0)) diff --git a/src/proteus/atmos_clim/janus.py b/src/proteus/atmos_clim/janus.py index 56f46156e..b3e6f2224 100644 --- a/src/proteus/atmos_clim/janus.py +++ b/src/proteus/atmos_clim/janus.py @@ -13,7 +13,6 @@ from proteus.atmos_clim.common import get_oarr_from_parr from proteus.utils.constants import vap_list, vol_list from proteus.utils.helper import UpdateStatusfile, create_tmp_folder -from proteus.outgas.wrapper import get_gaslist if TYPE_CHECKING: from proteus.config import Config @@ -331,7 +330,10 @@ def RunJANUS( output['ocean_maxdepth'] = 0.0 # set composition at Pxuv - gas_list = get_gaslist(config) + if config.outgas.silicates: + gas_list = vol_list + config.outgas.vaplist + else: + gas_list = vol_list + vap_list for g in gas_list: if g in atm.x_gas.keys(): diff --git a/src/proteus/outgas/calliope.py b/src/proteus/outgas/calliope.py index 7a9b1107a..7da194590 100644 --- a/src/proteus/outgas/calliope.py +++ b/src/proteus/outgas/calliope.py @@ -47,12 +47,10 @@ def construct_options(dirs: dict, config: Config, hf_row: dict): # Surface properties solvevol_inp['T_magma'] = hf_row['T_magma'] - if config.outgas.converge_fO2 and 'fO2_shift' in hf_row.keys(): - solvevol_inp['fO2_shift_IW'] = hf_row['fO2_shift'] - else: - solvevol_inp['fO2_shift_IW'] = config.outgas.fO2_shift_IW - log.info('fO2 shift used by calliope:%.6f', solvevol_inp['fO2_shift_IW']) + solvevol_inp['fO2_shift_IW'] = config.outgas.fO2_shift_IW + + log.debug('fO2 shift used by calliope:%.6f', solvevol_inp['fO2_shift_IW']) # Volatile inventory for s in vol_list: diff --git a/src/proteus/outgas/common.py b/src/proteus/outgas/common.py index 7cbad9b0f..c74eb2255 100644 --- a/src/proteus/outgas/common.py +++ b/src/proteus/outgas/common.py @@ -6,19 +6,22 @@ if TYPE_CHECKING: from proteus.config import Config -from proteus.outgas.wrapper import get_gaslist -from proteus.utils.constants import element_list +from proteus.utils.constants import element_list, vap_list, vol_list # from proteus.outgas.wrapper import get_gaslist + def expected_keys(config: Config): copy_keys = ['P_surf', 'M_atm', 'atm_kg_per_mol'] # reservoirs res_list = ('atm', 'liquid', 'solid', 'total') - gas_list=get_gaslist(config) + if config.outgas.silicates: + gas_list = vol_list + config.outgas.vaplist + else: + gas_list = vol_list + vap_list # gases for s in gas_list: copy_keys.append(f'{s}_bar') diff --git a/src/proteus/outgas/lavatmos.py b/src/proteus/outgas/lavatmos.py index 4cb2aea5b..c135bcd6e 100644 --- a/src/proteus/outgas/lavatmos.py +++ b/src/proteus/outgas/lavatmos.py @@ -2,6 +2,7 @@ from __future__ import annotations import logging +import os from typing import TYPE_CHECKING import numpy as np @@ -11,13 +12,111 @@ from proteus.config import Config -from proteus.outgas.wrapper import get_gaslist -from proteus.utils.constants import element_list +from proteus.utils.constants import element_list, vol_list log = logging.getLogger('fwl.' + __name__) # species db class comes from HELIOS code Kitzmann+2017 + +# Custom modules +class paths_importer: + + def __init__(self): + + ''' + + Change the paths as needed. If you don't change the dir structure, + it should be enough to only change the wkdir. + + ''' + + # General directory structure + self.wkdir = os.environ.get("LAVATMOS_DIR") + self.output_dir = self.wkdir+'output/' + self.input_dir = self.wkdir+'input/' + + # Inputs + self.lava_comps = self.input_dir+'lava_compositions/' + + # LavAtmos + self.lavatmos_run = self.wkdir+'ThermoEngine/LavAtmos/lavatmos_run.py' + + # FastChem 3 + self.fastchem3_dir = os.environ.get("FC_DIR") + #self.fastchem3_dir = self.wkdir+'FastChem/fastchem3/' + self.fastchem3_input = self.wkdir+'input/fastchem3/' + self.fastchem3_config_template = self.fastchem3_input+'config_template.input' + self.element_abundances3 = self.fastchem3_input+'element_abundances/' + + # Singularity + self.singularity_cache = self.wkdir+'singularity/' + + + +class container_lavatmos(): + + def __init__(self, parameters): + + ''' + + Imports parameters and paths needed for the LavAtmos run. + + - Parameters are passed in dictionary format. + + ''' + + # Parameters + self.silicate_abundances = parameters['silicate_abundances'] + self.P_volatile = parameters['P_volatile'] + self.comp_melt_name = parameters['lava_comp'] + self.volatile_comp = parameters['volatile_comp'] + self.run_name = parameters['run_name'] + self.melt_fraction = parameters['melt_fraction'] + + # Paths + self.paths = paths_importer() + + # Saving volatile comp to csv for so that LavAtmos can read it later + if parameters['volatile_comp'] != 'None': + comp_vol = pd.Series(parameters['volatile_comp']) + comp_vol.to_csv(f'{self.paths.input_dir}volatile_comp.csv',\ + header=['mole_fraction']) + + def run_lavatmos(self,T_boa): + + ''' + + This function effectively runs a bash command which calls + singularity. Singularity opens the ThermoEngine docker and within + this runs lavatmos_run.py. When LavAtmos is done, it writes the results + to a csv file. This csv file is read by this function and returned. + + - T_boa: T at the "bottom of atmosphere" for which to run LavAtmos [K]. + + ''' + + T_boa = int(T_boa) + + os.system(f'export APPTAINER_CACHEDIR="{self.paths.singularity_cache}"') + os.system(f'singularity exec --bind {self.paths.wkdir} \ + {self.paths.wkdir}thermoengine_master.sif \ + python {self.paths.lavatmos_run} \ + {T_boa}\ + {self.P_volatile}\ + {self.comp_melt_name}\ + {self.paths.output_dir}\ + {self.silicate_abundances}\ + {self.run_name}\ + {self.melt_fraction}') + + # Read LavAtmos output + # partial_pressures = pd.read_csv(self.run_output_dir+'lavatmos/degassed_partial_pressure.csv',\ + # index_col=0) + + # return partial_pressures + + class Species_db(object): def __init__(self, name, fc_name, weight): self.name = name @@ -161,10 +260,6 @@ def __init__(self, name, fc_name, weight): kB = 1.38064e-23 # JK-1 particles_per_mol = 6.02214076e23 -#def get_gaslist(config: Config): - # gas_list = vol_list + config.outgas.vaplist - #return gas_list - class FO2shift: """models are taken from caliope. oxygen fugacity pO2 need to be in log10""" @@ -204,7 +299,7 @@ def read_in_element_fracs(input_path): return df_frac/1e20 -def run_lavatmos(config: Config, hf_row: dict): +def compute_silicate_outgassing(config: Config, hf_row: dict): """ This function runs the Thermoengine module Lavatmos. Outgassing of refractory species @@ -225,7 +320,6 @@ def run_lavatmos(config: Config, hf_row: dict): sys.path.insert(1, '/data3/leoni/LavAtmos') from lavatmos_goot_runner import container_lavatmos - gas_list = get_gaslist(config) # set element fractions in atmosphere for lavatmos run input_eles = ['H', 'C', 'N', 'S', 'O'] @@ -308,6 +402,9 @@ def run_lavatmos(config: Config, hf_row: dict): log.debug('new atmospheric mass:%.4f'%M_atmo_new) + gas_list = vol_list + config.outgas.vaplist + + for vol in gas_list: new_pp = new_atmos_abundances[vol][0] * new_atmos_abundances['Pbar'][0] hf_row[vol + '_bar'] = new_pp @@ -356,4 +453,4 @@ def run_lavatmos(config: Config, hf_row: dict): fO2_shift = FO2shift() hf_row['fO2_shift_LavAtmos'] = fO2_shift(hf_row['T_magma'], log10_fO2) - log.debug('shift compared to iron wustite buffer: %.6f'%hf_row['fO2_shift']) + log.debug('shift compared to iron wustite buffer: %.6f'%hf_row['fO2_shift_LavAtmos']) diff --git a/src/proteus/outgas/wrapper.py b/src/proteus/outgas/wrapper.py index 14818e81a..b7f6037f7 100644 --- a/src/proteus/outgas/wrapper.py +++ b/src/proteus/outgas/wrapper.py @@ -8,7 +8,7 @@ from proteus.outgas.calliope import calc_surface_pressures, calc_target_masses from proteus.outgas.common import expected_keys -from proteus.outgas.lavatmos import run_lavatmos +from proteus.outgas.lavatmos import compute_silicate_outgassing from proteus.utils.constants import element_list, vap_list, vol_list if TYPE_CHECKING: @@ -17,14 +17,6 @@ log = logging.getLogger('fwl.' + __name__) -def get_gaslist(config: Config): - if config.outgas.silicates: - gas_list = vol_list + config.outgas.vaplist - else: - gas_list = vol_list + vap_list - - return gas_list - def calc_target_elemental_inventories(dirs: dict, config: Config, hf_row: dict): """ @@ -92,7 +84,10 @@ def run_outgassing(dirs: dict, config: Config, hf_row: dict): log.info('Solving outgassing...') - gas_list = get_gaslist(config) + if config.outgas.silicates: + gas_list = vol_list + config.outgas.vaplist + else: + gas_list = vol_list + vap_list # Run outgassing calculation if config.outgas.module == 'calliope': @@ -136,7 +131,11 @@ def run_desiccated(config: Config, hf_row: dict): # if desiccated, set all gas masses to zero log.info('Desiccation has occurred - no volatiles remaining') - gas_list = get_gaslist(config) + + if config.outgas.silicates: + gas_list = vol_list + config.outgas.vaplist + else: + gas_list = vol_list + vap_list # Do not set these to zero - avoid divide by zero elsewhere in the code excepted_keys = ['atm_kg_per_mol'] @@ -162,7 +161,14 @@ def lavatmos_calliope_run(dirs: dict, config: Config, hf_row: dict): hf_row : dict Dictionary of helpfile variables, at this iteration only """ - run_outgassing(dirs, config, hf_row) if config.outgas.silicates: - run_lavatmos(config, hf_row) + + #this needs to be commented out for runninglavatmos with the installation from github + #lavadir = os.environ.get("LAVATMOS_DIR") + #if lavadir: + #log.info('Lavatmos directory found: %s' % lavadir) + #else: + #log.warning('Lavatmos directory not found, did you set the LAVATMOS_DIR environment variable?') + + compute_silicate_outgassing(config, hf_row) diff --git a/src/proteus/plot/cpl_chem_atmosphere.py b/src/proteus/plot/cpl_chem_atmosphere.py index 4059c72f5..49ccf6e32 100644 --- a/src/proteus/plot/cpl_chem_atmosphere.py +++ b/src/proteus/plot/cpl_chem_atmosphere.py @@ -67,6 +67,8 @@ 'MgO', 'Na', 'TiO2', + 'SiH', + 'SiH4', ) diff --git a/src/proteus/plot/cpl_global.py b/src/proteus/plot/cpl_global.py index f53d95607..ae0d2adc1 100644 --- a/src/proteus/plot/cpl_global.py +++ b/src/proteus/plot/cpl_global.py @@ -9,8 +9,7 @@ import numpy as np import pandas as pd -# from proteus.utils.constants import gas_list -from proteus.outgas.wrapper import get_gaslist +from proteus.utils.constants import vap_list, vol_list from proteus.utils.plot import get_colour, latexify if TYPE_CHECKING: @@ -60,7 +59,11 @@ def plot_global( vol_mol_tot = {} # Moles in total vol_intpart = {} # Partitioning into int - gas_list = get_gaslist(config) + if config.outgas.silicates: + gas_list = vol_list + config.outgas.vaplist + else: + gas_list = vol_list + vap_list + for vol in gas_list: # Check vmr for presence this_vmr = np.array(hf[vol + '_vmr']) diff --git a/src/proteus/proteus.py b/src/proteus/proteus.py index 3c4d02625..7dba390d9 100644 --- a/src/proteus/proteus.py +++ b/src/proteus/proteus.py @@ -13,7 +13,7 @@ import proteus.utils.archive as archive from proteus.config import read_config_object -from proteus.utils.constants import vol_list +from proteus.utils.constants import vap_list, vol_list from proteus.utils.helper import ( CleanDir, PrintHalfSeparator, @@ -131,7 +131,6 @@ def start(self, *, resume: bool = False, offline: bool = False): from proteus.outgas.wrapper import ( calc_target_elemental_inventories, check_desiccation, - get_gaslist, lavatmos_calliope_run, run_desiccated, ) @@ -277,7 +276,10 @@ def start(self, *, resume: bool = False, offline: bool = False): # Store partial pressures and list of included volatiles inc_gases = [] - gas_list = get_gaslist(self.config) + if self.config.outgas.silicates: + gas_list = vol_list + self.config.outgas.vaplist + else: + gas_list = vol_list + vap_list for s in vol_list: if s != 'O2': diff --git a/src/proteus/utils/coupler.py b/src/proteus/utils/coupler.py index 8d1bf58e7..e77de247b 100644 --- a/src/proteus/utils/coupler.py +++ b/src/proteus/utils/coupler.py @@ -19,11 +19,12 @@ import numpy as np import pandas as pd -from proteus.outgas.wrapper import get_gaslist from proteus.utils.constants import ( element_list, secs_per_hour, secs_per_minute, + vap_list, + vol_list, ) from proteus.utils.helper import UpdateStatusfile, create_tmp_folder, get_proteus_dir, safe_rm from proteus.utils.plot import sample_times @@ -614,7 +615,10 @@ def GetHelpfileKeys(config: Config): "T_star", # [K] ] - gas_list=get_gaslist(config) + if config.outgas.silicates: + gas_list = vol_list + config.outgas.vaplist + else: + gas_list = vol_list + vap_list # gases from outgassing for s in gas_list: From fe67cafa9de70d2e7315d299219ec5df1ab9e57c Mon Sep 17 00:00:00 2001 From: Leoni Janssen Date: Wed, 4 Mar 2026 09:56:09 +0100 Subject: [PATCH 20/26] added bash script to run a grid of proteus runs --- input/run_silicates.toml | 8 ++++---- run_PROTEUS.bash | 29 +++++++++++++++++++++++++++++ tools_leoni/edit_input_file.py | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 66 insertions(+), 4 deletions(-) create mode 100644 run_PROTEUS.bash create mode 100644 tools_leoni/edit_input_file.py diff --git a/input/run_silicates.toml b/input/run_silicates.toml index c5773e389..fec707d86 100644 --- a/input/run_silicates.toml +++ b/input/run_silicates.toml @@ -31,7 +31,7 @@ version = "2.0" [params] # output files [params.out] - path = "run_02AU_silicates_1H2O" + path = "run_005AU_2Hocean_noradstop" logging = "INFO" plot_mod = 3 # Plotting frequency, 0: wait until completion | n: every n iterations | none: do not plot plot_fmt = "png" # Plotting image file format, "png" or "pdf" recommended @@ -88,7 +88,7 @@ version = "2.0" [params.stop.escape] enabled = true - p_stop = 5.0 # Stop surface pressure is less than this value + p_stop = 1.0 # Stop surface pressure is less than this value # disintegration [params.stop.disint] @@ -128,7 +128,7 @@ version = "2.0" [orbit] instellation_method = 'sma' # whether to define orbit using semi major axis ('sma') or instellation flux ('inst') instellationflux = 1.0 # instellation flux received from the planet in [Earth units] - semimajoraxis = 0.2 # initial semi-major axis of planet's orbit [AU] + semimajoraxis = 0.05 # initial semi-major axis of planet's orbit [AU] eccentricity = 0.0 # initial eccentricity of planet's orbit [dimensionless] zenith_angle = 48.19 # characteristic zenith angle [degrees] s0_factor = 0.375 # instellation scale factor [dimensionless] @@ -367,7 +367,7 @@ version = "2.0" use_metallicity = false # whether or not to specify the elemental abundances in terms of solar metallicity metallicity = 1000 # metallicity relative to solar metallicity - H_oceans = 1.0 # Hydrogen inventory in units of equivalent Earth oceans + H_oceans = 2.0 # Hydrogen inventory in units of equivalent Earth oceans # H_ppmw = 109.0 # Hydrogen inventory in ppmw relative to mantle mass # H_kg = 1e20 # Hydrogen inventory in kg diff --git a/run_PROTEUS.bash b/run_PROTEUS.bash new file mode 100644 index 000000000..ffc644500 --- /dev/null +++ b/run_PROTEUS.bash @@ -0,0 +1,29 @@ +#bash script to run multiple proteus runs one after other +MIXFILE=vertical_mix +orb_dist=("0.01" "0.05" "0.1" "0.5" "1") +fO2=("-5" "-4" "-3" "-2" "-1" "1" "2" "3" "4" "5") +Hoceans=("1" "2" "3" "4") +silicates("true" "false") +CH_ratio=("1") +input_file=input/run_silicates.toml + +# make directories for each composition and make fastchem grids for all compositions that don't have grids yet + +for ofug in "${fO2[@]}"; do + echo $ofug + for orbit in "${orb_dist[@]}"; do + echo $orbit + for Hocean in "${Hoceans[@]}"; do + echo $Hocean + for sil in "${silicates[@]}"; do + echo "silicates are: "$sil + for CH in "${CHratio[@]}"; do + echo $CH + python3 /data3/leoni/PROTEUS/tools_leoni/edit_input_file.py ${input_file} ${ofug} ${orbit} ${Hocean} ${CH} ${sil} + proteus start -c ${input_file} + + done + done + done + done + done diff --git a/tools_leoni/edit_input_file.py b/tools_leoni/edit_input_file.py new file mode 100644 index 000000000..b0771e115 --- /dev/null +++ b/tools_leoni/edit_input_file.py @@ -0,0 +1,33 @@ +from __future__ import annotations + +import sys + +from tomlkit import dumps, parse + + +def param_edit(inputfile,fO2,orbdist,Hocean,CHratio,silicates): + ''' function which writes a new HELIOS parameter file using the newly calculated tp profile from Helios''' + with open(inputfile, "r") as f: + data = parse(f.read()) + + # modify values + data["params"]["params.out"]["path"] = 'gridrun_{}IW_{}AU_{}Hocean_{}CH_{}'.format(fO2,orbdist,Hocean,CHratio,silicates) + data["orbit"]["semimajoraxis"] = orbdist + data["outgas"]["fO2_shift_IW"] = fO2 + data["outgas"]["silicates"] = silicates + data["delivery"]["delivery.elements"]["H_oceans"] = Hocean + data["delivery"]["delivery.elements"]["CH_ratio"] = CHratio + + # write back + with open("input.toml", "w") as f: + f.write(dumps(data)) + + + +if __name__ == "__main__": + inputfile=sys.argv[1] + fO2=sys.argv[2] + orbdist=sys.argv[3] + Hocean=sys.argv[4] + CHratio=sys.argv[5] + silicates=sys.argv[6] From c3cb41b8188b3099134847cb7838d2a7f2d3f36f Mon Sep 17 00:00:00 2001 From: Leoni Janssen Date: Thu, 5 Mar 2026 17:07:47 +0100 Subject: [PATCH 21/26] added code to convert vmrs from ncdf files as well as TPs to dataframe format that can be used by ARCiS --- input.toml | 432 ++++++++++++++++++ input/run_bashscript.toml | 432 ++++++++++++++++++ input/run_silicates.toml | 8 +- run_PROTEUS.bash | 28 +- .../compar_atmosphere_models.py | 5 +- tools_leoni/covert_to_ARCiSformat.py | 153 +++++++ tools_leoni/edit_input_file.py | 18 +- .../plot_elements.py | 23 +- 8 files changed, 1052 insertions(+), 47 deletions(-) create mode 100644 input.toml create mode 100644 input/run_bashscript.toml rename {examples/plot_comparison_runs => tools_leoni}/compar_atmosphere_models.py (99%) create mode 100644 tools_leoni/covert_to_ARCiSformat.py rename {examples/plot_comparison_runs => tools_leoni}/plot_elements.py (79%) diff --git a/input.toml b/input.toml new file mode 100644 index 000000000..676061e52 --- /dev/null +++ b/input.toml @@ -0,0 +1,432 @@ +# PROTEUS configuration file + +# This is a comprehensive outline of all configuration options. It includes variables +# which have default values, in order to showcase the range of potential options available. +# Variable defaults are defined in `src/proteus/config/*.py` + +# Root tables should be physical, with the exception of "params" +# Software related options should go within the appropriate physical table +# For configuration see https://fwl-proteus.readthedocs.io/en/latest/config.html + +# ---------------------------------------------------- + +# The general structure is: +# [params] parameters for code execution, output files, time-stepping, convergence +# [star] stellar parameters, model selection +# [orbit] planetary orbital parameters +# [struct] planetary structure (mass, radius) +# [atmos_clim] atmosphere climate parameters, model selection +# [atmos_chem] atmosphere chemistry parameters, model selection +# [escape] escape parameters, model selection +# [interior] magma ocean model selection and parameters +# [outgas] outgassing parameters (fO2) and included volatiles +# [delivery] initial volatile inventory, and delivery model selection +# [observe] synthetic observations + +# ---------------------------------------------------- + +version = "2.0" + +# Parameters +[params] + # output files + [params.out] + path = "gridrun_-5IW_0.01AU_1Hocean_1CH_false" + logging = "INFO" + plot_mod = 3 # Plotting frequency, 0: wait until completion | n: every n iterations | none: do not plot + plot_fmt = "png" # Plotting image file format, "png" or "pdf" recommended + write_mod = 1 # Write CSV frequency, 0: wait until completion | n: every n iterations + archive_mod = 5 # Archive frequency, 0: wait until completion | n: every n iterations | none: do not archive + remove_sf = false # Remove SOCRATES spectral file when simulation ends. + + # time-stepping + [params.dt] + minimum = 1e4 # absolute minimum time-step [years] + minimum_rel = 1e-5 # relative minimum time-step [dimensionless] + maximum = 1e7 # maximum time-step [yr] + initial = 3e1 # inital step size [yr] + starspec = 1e9 # interval to re-calculate the stellar spectrum [yr] + starinst = 1e1 # interval to re-calculate the instellation [yr] + method = "adaptive" # proportional | adaptive | maximum + + [params.dt.proportional] + propconst = 52.0 # Proportionality constant + + [params.dt.adaptive] + atol = 0.02 # Step size atol + rtol = 0.10 # Step size rtol + + # Termination criteria + # Set enabled=true/false in each section to enable/disable that termination criterion + [params.stop] + + # Require criteria to be satisfied twice before model will exit? + strict = false + + # required number of iterations + [params.stop.iters] + enabled = true + minimum = 5 + maximum = 9000 + + # required time constraints + [params.stop.time] + enabled = true + minimum = 1.0e3 # model will certainly run to t > minimum [yr] + maximum = 4.567e+9 # model will terminate when t > maximum [yr] + + # solidification + [params.stop.solid] + enabled = true + phi_crit = 0.01 # non-dim., model will terminate when global melt fraction < phi_crit + + # radiative equilibrium + [params.stop.radeqm] + enabled = false + atol = 0.2 # absolute tolerance [W m-2] + rtol = 1e-3 # relative tolerance + + [params.stop.escape] + enabled = true + p_stop = 1.0 # Stop surface pressure is less than this value + + # disintegration + [params.stop.disint] + enabled = false + + roche_enabled = true + offset_roche = 0 # correction to calculated Roche limit [m] + + spin_enabled = true + offset_spin = 0 # correction to calculated Breakup period [s] + + +# ---------------------------------------------------- +# Star +[star] + + # Physical parameters + mass = 1.0 # stellar mass [M_sun] + age_ini = 0.100 # model initialisation age [Gyr] + + module = "mors" + + [star.mors] + rot_pcntle = 50.0 # rotation percentile + rot_period = "none" # rotation period [days] + tracks = "spada" # evolution tracks: spada | baraffe + age_now = 4.567 # current age of star [Gyr] + star_name = "sun" + spec = "stellar_spectra/Named/sun.txt" # path to stellar spectrum file + + [star.dummy] + radius = 1.0 # Constant stellar radius [R_sun] + calculate_radius = false # Calculate star radius using scaling from Teff? + Teff = 5772.0 # Star's brightness temperature [K] + +# Orbital system +[orbit] + instellation_method = 'sma' # whether to define orbit using semi major axis ('sma') or instellation flux ('inst') + instellationflux = 1.0 # instellation flux received from the planet in [Earth units] + semimajoraxis = "0.01" # initial semi-major axis of planet's orbit [AU] + eccentricity = 0.0 # initial eccentricity of planet's orbit [dimensionless] + zenith_angle = 48.19 # characteristic zenith angle [degrees] + s0_factor = 0.375 # instellation scale factor [dimensionless] + + evolve = false # whether to evolve the SMaxis and eccentricity + module = "lovepy" # module used to calculate tidal heating + + axial_period = "none" # planet's initial day length [hours]; will use orbital period if 'none' + satellite = false # include satellite (moon)? + mass_sat = 7.347e+22 # mass of satellite [kg] + semimajoraxis_sat = 3e8 # initial SMA of satellite's orbit [m] + + [orbit.dummy] + H_tide = 1e-7 # Fixed tidal power density [W kg-1] + Phi_tide = "<0.3" # Tidal heating applied when inequality locally satisfied + Imk2 = 0.0 # Fixed imaginary part of k2 love number, cannot be positive + + [orbit.lovepy] + visc_thresh = 1e9 # Minimum viscosity required for heating [Pa s] + +# Planetary structure - physics table +[struct] + mass_tot = 1.0 # M_earth + radius_int = "none" # R_earth + corefrac = 0.55 # non-dim., radius fraction + core_density = 10738.33 # Core density [kg m-3] + core_heatcap = 880.0 # Core specific heat capacity [J K-1 kg-1] + + module = "self" # self | zalmoxis + + [struct.zalmoxis] + verbose = false # verbose printing? + coremassfrac = 0.325 # core mass fraction [non-dim.] + inner_mantle_mass_fraction = 0 # inner mantle mass fraction [non-dim.] + weight_iron_frac = 0.325 # iron fraction in the planet [non-dim.] + num_levels = 150 # number of Zalmoxis radius layers + EOSchoice = "Tabulated:iron/silicate" # iron/silicate for super-Earths, water for water planets with Earth-like rocky cores + max_iterations_outer = 100 # max. iterations for the outer loop + tolerance_outer = 3e-3 # tolerance for the outer loop + max_iterations_inner = 100 # max. iterations for the inner loop + tolerance_inner = 1e-4 # tolerance for the inner loop + relative_tolerance = 1e-5 # relative tolerance for solve_ivp + absolute_tolerance = 1e-6 # absolute tolerance for solve_ivp + target_surface_pressure = 101325 # target surface pressure + pressure_tolerance = 1e9 # tolerance surface pressure + max_iterations_pressure = 200 # max. iterations for the innermost loop + pressure_adjustment_factor = 1.1 # factor for adjusting the pressure in the innermost loop + +# Atmosphere - physics table +[atmos_clim] + prevent_warming = true # do not allow the planet to heat up + surface_d = 0.01 # m, conductive skin thickness + surface_k = 2.0 # W m-1 K-1, conductive skin thermal conductivity + cloud_enabled = false # enable water cloud radiative effects + cloud_alpha = 0.0 # condensate retention fraction (1 -> fully retained) + surf_state = "fixed" # surface scheme: "mixed_layer" | "fixed" | "skin" + surf_greyalbedo = 0.1 # surface grey albedo + albedo_pl = 0.1 # Enforced input value of bond albedo; float (0 to 1) or str (path to CSV) + rayleigh = false # enable rayleigh scattering + tmp_minimum = 0.5 # temperature floor on solver + tmp_maximum = 5000.0 # temperature ceiling on solver + + module = "agni" # Which atmosphere module to use + + [atmos_clim.agni] + verbosity = 1 # output verbosity for agni (0:none, 1:info, 2:debug) + p_top = 1.0e-5 # bar, top of atmosphere grid pressure + p_obs = 0.02 # bar, level probed in transmission + spectral_group = "Honeyside" # which gas opacities to include + spectral_bands = "48" # how many spectral bands? + num_levels = 40 # Number of atmospheric grid levels + chemistry = "eq" # "none" | "eq" + surf_material = "greybody" # surface material file for scattering + solve_energy = true # solve for energy-conserving atmosphere profile + solution_atol = 0.5 # solver absolute tolerance + solution_rtol = 0.15 # solver relative tolerance + overlap_method = "ee" # gas overlap method + surf_roughness = 1e-3 # characteristic surface roughness [m] + surf_windspeed = 2.0 # characteristic surface wind speed [m/s]. + rainout = false # include volatile condensation/evaporation aloft + latent_heat = false # include latent heat release when `rainout=true`? + oceans = true # form liquid oceans at planet surface? + convection = true # include convective heat transport, with MLT + conduction = true # include conductive heat transport, with Fourier's law + sens_heat = true # include sensible heat flux near surface, with TKE scheme + real_gas = false # use real-gas equations of state + psurf_thresh = 0.1 # bar, surface pressure where we switch to 'transparent' mode + dx_max_ini = 300.0 # initial maximum temperature step [kelvin] allowed by solver + dx_max = 35.0 # maximum temperature step [kelvin] allowed by solver + max_steps = 70 # max steps allowed by solver during each iteration + perturb_all = true # updated entire jacobian each step? + mlt_criterion = "s" # MLT convection stability criterion; (l)edoux or (s)chwarzschild + fastchem_floor = 500.0 # Minimum temperature allowed to be sent to FC + fastchem_maxiter_chem = 60000 # Maximum FC iterations (chemistry) + fastchem_maxiter_solv = 20000 # Maximum FC iterations (internal solver) + fastchem_xtol_chem = 1e-4 # FC solver tolerance (chemistry) + fastchem_xtol_elem = 1e-4 # FC solver tolerance (elemental) + ini_profile = 'isothermal' # Initial guess for temperature profile shape + ls_default = 2 # Default linesearch method (0:none, 1:gs, 2:bt) + fdo = 2 # finite-difference order (options: 2, 4) + + [atmos_clim.janus] + p_top = 1.0e-6 # bar, top of atmosphere grid pressure + p_obs = 1.0e-3 # bar, observed pressure level + spectral_group = "Honeyside" # which gas opacities to include + spectral_bands = "48" # how many spectral bands? + F_atm_bc = 0 # measure outgoing flux at: (0) TOA | (1) Surface + num_levels = 40 # Number of atmospheric grid levels + tropopause = "none" # none | skin | dynamic + overlap_method = "ee" # gas overlap method + + [atmos_clim.dummy] + gamma = 0.01 # atmosphere opacity between 0 and 1 + height_factor = 3.0 # observed height is this times the scale height + +# Volatile escape - physics table +[escape] + + module = "zephyrus" # Which escape module to use + reservoir = "outgas" # Reservoir that sets escaping gas composition + + [escape.zephyrus] + Pxuv = 5e-5 # Pressure at which XUV radiation become opaque in the planetary atmosphere [bar] + efficiency = 0.1 # Escape efficiency factor + tidal = false # Tidal contribution enabled + + [escape.dummy] + rate = 0.0 # Bulk unfractionated escape rate [kg s-1] + +# Interior - physics table +[interior] + grain_size = 0.1 # crystal settling grain size [m] + F_initial = 1e3 # Initial heat flux guess [W m-2] + radiogenic_heat = false # enable radiogenic heat production + tidal_heat = false # enable tidal heat production + rheo_phi_loc = 0.6 # Centre of rheological transition + rheo_phi_wid = 0.2 # Width of rheological transition + melting_dir = "Monteux-600" # Name of folder constaining melting curves + + + module = "dummy" # Which interior module to use + + [interior.spider] + num_levels = 100 # Number of SPIDER grid levels + mixing_length = 2 # Mixing length parameterization + tolerance = 1.0e-8 # absolute solver tolerance + tolerance_rel = 1.0e-8 # relative solver tolerance + solver_type = "bdf" # SUNDIALS solver method + tsurf_atol = 20.0 # tsurf_poststep_change + tsurf_rtol = 0.02 # tsurf_poststep_change_frac + ini_entropy = 3000.0 # Surface entropy conditions [J K-1 kg-1] + ini_dsdr = -4.698e-6 # Interior entropy gradient [J K-1 kg-1 m-1] + conduction = true # enable conductive heat transfer + convection = true # enable convective heat transfer + gravitational_separation = true # enable gravitational separation + mixing = true # enable mixing + matprop_smooth_width = 1e-2 # melt-fraction window width over which to smooth material properties + + [interior.aragog] + logging = "ERROR" # Aragog log verbosity + num_levels = 50 # Number of Aragog grid levels + tolerance = 1.0e-7 # solver tolerance + initial_condition = 3 # Initial T(p); 1: linear, 2: user defined, 3: adiabat + ini_tmagma = 3300.0 # Initial magma surface temperature [K] + basal_temperature = 7000.0 # CMB temperature when initial boundary = 1 + inner_boundary_condition = 1 # 1 = core cooling model, 2 = prescribed heat flux, 3 = prescribed temperature + inner_boundary_value = 4000 # core temperature [K], if inner_boundary_condition = 3. CMB heat flux [W/m^2], if if inner_boundary_condition = 2 + conduction = true # enable conductive heat transfer + convection = true # enable convective heat transfer + gravitational_separation = false # enable gravitational separation + mixing = false # enable mixing + dilatation = false # enable dilatation source term + mass_coordinates = false # enable mass coordinates + tsurf_poststep_change = 30 # threshold of maximum change on surface temperature + event_triggering = true # enable events triggering to avoid abrupt jumps in surface temperature + bulk_modulus = 260e9 # Adiabatic bulk modulus AW-EOS parameter [Pa]. + + [interior.dummy] + ini_tmagma = 3300.0 # Initial magma surface temperature [K] + tmagma_atol = 30.0 # Max absolute Tsurf change in each step + tmagma_rtol = 0.05 # Max relative Tsurf change in each step + mantle_tliq = 2700.0 # Liquidus temperature + mantle_tsol = 1700.0 # Solidus temperature + mantle_rho = 4550.0 # Mantle density [kg m-3] + mantle_cp = 1792.0 # Mantle heat capacity [J K-1 kg-1] + H_ratio = 0.0 # Radiogenic heating [W/kg] + +# Outgassing - physics table +[outgas] + fO2_shift_IW = "-5" # atmosphere/interior boundary oxidation state [log10(ΔIW)] + + silicates = "false" + fastchempath = '/data3/leoni/LavAtmos/FastChem/fastchem3/' + elementfile = '/data3/leoni/LavAtmos/input/fastchem3/' + vaplist = ["SiO", "SiO2","Si", "Na", "K", "Ti", "TiO", "TiO2" , "Mg", "MgO", "Al", "HAlO2", "SiH","SiH4"] + + module = "calliope" # Which outgassing module to use + + + [outgas.calliope] + include_H2O = true # Include H2O compound + include_CO2 = true # Include CO2 compound + include_N2 = true # Include N2 compound + include_S2 = true # Include S2 compound + include_SO2 = true # Include SO2 compound + include_H2S = true # Include H2S compound + include_NH3 = true # Include NH3 compound + include_H2 = true # Include H2 compound + include_CH4 = true # Include CH4 compound + include_CO = true # Include CO compound + T_floor = 700.0 # Temperature floor applied to outgassing calculation [K]. + rtol = 0.0001 # Relative mass tolerance + xtol = 1e-06 # Absolute mass tolerance + solubility = true # Enable solubility? + + [outgas.atmodeller] + some_parameter = "some_value" + +# Volatile delivery - physics table +[delivery] + + # Radionuclide parameters + radio_tref = 4.55 # Reference age for concentrations [Gyr] + radio_K = 310.0 # ppmw of potassium (all isotopes) + radio_U = 0.031 # ppmw of uranium (all isotopes) + radio_Th = 0.124 # ppmw of thorium (all isotopes) + + # Which initial inventory to use? + initial = 'elements' # 'elements' | 'volatiles' + + # No module for accretion as of yet + module = "none" + + # Set initial volatile inventory by planetary element abundances if [initial = 'elements'] + [delivery.elements] + use_metallicity = false # whether or not to specify the elemental abundances in terms of solar metallicity + metallicity = 1000 # metallicity relative to solar metallicity + + H_oceans = "1" # Hydrogen inventory in units of equivalent Earth oceans + # H_ppmw = 109.0 # Hydrogen inventory in ppmw relative to mantle mass + # H_kg = 1e20 # Hydrogen inventory in kg + + CH_ratio = "1" # C/H mass ratio in mantle/atmosphere system + # C_ppmw = 0.0 # Carbon inventory in ppmw relative to mantle mass + # C_kg = 1e20 # Carbon inventory in kg + + NH_ratio = 0.5 # N/H mass ratio in mantle/atmosphere system + # N_ppmw = 0.5 # Nitrogen inventory in ppmw relative to mantle mass + # N_kg = 1e20 # Nitrogen inventory in kg + + SH_ratio = 2.0 # S/H mass ratio in mantle/atmosphere system + # S_ppmw = 2.0 # Sulfur inventory in ppmw relative to mantle mass + # S_kg = 1e20 # Sulfur inventory in kg + + # Set initial volatile inventory by partial pressures in atmosphere if [initial = 'volatiles'] + [delivery.volatiles] + H2O = 20.0 # partial pressure of H2O + CO2 = 30.0 # partial pressure of CO2 + N2 = 0.0 # etc. + S2 = 0.0 + SO2 = 0.0 + H2S = 0.0 + NH3 = 0.0 + H2 = 0.0 + CH4 = 0.0 + CO = 0.0 + +# Atmospheric chemistry postprocessing +[atmos_chem] + + module = "vulcan" # Atmospheric chemistry module + when = "manually" # When to run chemistry (manually, offline, online) + + # Physics flags + photo_on = true # Enable photochemistry + Kzz_on = true # Enable eddy diffusion + Kzz_const = "none" # Constant eddy diffusion coefficient (none => use profile) + moldiff_on = true # Enable molecular diffusion in the atmosphere + updraft_const = 0.0 # Set constant updraft velocity + + # Vulcan-specific atmospheric chemistry parameters + [atmos_chem.vulcan] + clip_fl = 1e-20 # Floor on stellar spectrum [erg s-1 cm-2 nm-1] + clip_vmr = 1e-10 # Neglect species with vmr < clip_vmr + make_funs = true # Generate reaction network functions + ini_mix = "profile" # Initial mixing ratios (profile, outgas) + fix_surf = false # Fixed surface mixing ratios + network = "SNCHO" # Class of chemical network to use (CHO, NCHO, SNCHO) + save_frames = true # Plot frames during iterations + yconv_cri = 0.05 # Convergence criterion, value of mixing ratios + slope_cri = 0.0001 # Convergence criterion, rate of change of mixing ratios + +# Calculate simulated observations +[observe] + + # Module with which to calculate the synthetic observables + synthesis = "none" + + [observe.platon] + downsample = 8 # Factor to downsample opacities + clip_vmr = 1e-8 # Minimum VMR for a species to be included diff --git a/input/run_bashscript.toml b/input/run_bashscript.toml new file mode 100644 index 000000000..2f2715ace --- /dev/null +++ b/input/run_bashscript.toml @@ -0,0 +1,432 @@ +# PROTEUS configuration file + +# This is a comprehensive outline of all configuration options. It includes variables +# which have default values, in order to showcase the range of potential options available. +# Variable defaults are defined in `src/proteus/config/*.py` + +# Root tables should be physical, with the exception of "params" +# Software related options should go within the appropriate physical table +# For configuration see https://fwl-proteus.readthedocs.io/en/latest/config.html + +# ---------------------------------------------------- + +# The general structure is: +# [params] parameters for code execution, output files, time-stepping, convergence +# [star] stellar parameters, model selection +# [orbit] planetary orbital parameters +# [struct] planetary structure (mass, radius) +# [atmos_clim] atmosphere climate parameters, model selection +# [atmos_chem] atmosphere chemistry parameters, model selection +# [escape] escape parameters, model selection +# [interior] magma ocean model selection and parameters +# [outgas] outgassing parameters (fO2) and included volatiles +# [delivery] initial volatile inventory, and delivery model selection +# [observe] synthetic observations + +# ---------------------------------------------------- + +version = "2.0" + +# Parameters +[params] + # output files + [params.out] + path = "gridrun_-2IW_1AU_3Hocean_1CH_false" + logging = "INFO" + plot_mod = 3 # Plotting frequency, 0: wait until completion | n: every n iterations | none: do not plot + plot_fmt = "png" # Plotting image file format, "png" or "pdf" recommended + write_mod = 1 # Write CSV frequency, 0: wait until completion | n: every n iterations + archive_mod = 5 # Archive frequency, 0: wait until completion | n: every n iterations | none: do not archive + remove_sf = false # Remove SOCRATES spectral file when simulation ends. + + # time-stepping + [params.dt] + minimum = 1e4 # absolute minimum time-step [years] + minimum_rel = 1e-5 # relative minimum time-step [dimensionless] + maximum = 1e7 # maximum time-step [yr] + initial = 3e1 # inital step size [yr] + starspec = 1e9 # interval to re-calculate the stellar spectrum [yr] + starinst = 1e1 # interval to re-calculate the instellation [yr] + method = "adaptive" # proportional | adaptive | maximum + + [params.dt.proportional] + propconst = 52.0 # Proportionality constant + + [params.dt.adaptive] + atol = 0.02 # Step size atol + rtol = 0.10 # Step size rtol + + # Termination criteria + # Set enabled=true/false in each section to enable/disable that termination criterion + [params.stop] + + # Require criteria to be satisfied twice before model will exit? + strict = false + + # required number of iterations + [params.stop.iters] + enabled = true + minimum = 5 + maximum = 9000 + + # required time constraints + [params.stop.time] + enabled = true + minimum = 1.0e3 # model will certainly run to t > minimum [yr] + maximum = 4.567e+9 # model will terminate when t > maximum [yr] + + # solidification + [params.stop.solid] + enabled = true + phi_crit = 0.01 # non-dim., model will terminate when global melt fraction < phi_crit + + # radiative equilibrium + [params.stop.radeqm] + enabled = false + atol = 0.2 # absolute tolerance [W m-2] + rtol = 1e-3 # relative tolerance + + [params.stop.escape] + enabled = true + p_stop = 1.0 # Stop surface pressure is less than this value + + # disintegration + [params.stop.disint] + enabled = false + + roche_enabled = true + offset_roche = 0 # correction to calculated Roche limit [m] + + spin_enabled = true + offset_spin = 0 # correction to calculated Breakup period [s] + + +# ---------------------------------------------------- +# Star +[star] + + # Physical parameters + mass = 1.0 # stellar mass [M_sun] + age_ini = 0.100 # model initialisation age [Gyr] + + module = "mors" + + [star.mors] + rot_pcntle = 50.0 # rotation percentile + rot_period = "none" # rotation period [days] + tracks = "spada" # evolution tracks: spada | baraffe + age_now = 4.567 # current age of star [Gyr] + star_name = "sun" + spec = "stellar_spectra/Named/sun.txt" # path to stellar spectrum file + + [star.dummy] + radius = 1.0 # Constant stellar radius [R_sun] + calculate_radius = false # Calculate star radius using scaling from Teff? + Teff = 5772.0 # Star's brightness temperature [K] + +# Orbital system +[orbit] + instellation_method = 'sma' # whether to define orbit using semi major axis ('sma') or instellation flux ('inst') + instellationflux = 1.0 # instellation flux received from the planet in [Earth units] + semimajoraxis = 1.0 # initial semi-major axis of planet's orbit [AU] + eccentricity = 0.0 # initial eccentricity of planet's orbit [dimensionless] + zenith_angle = 48.19 # characteristic zenith angle [degrees] + s0_factor = 0.375 # instellation scale factor [dimensionless] + + evolve = false # whether to evolve the SMaxis and eccentricity + module = "lovepy" # module used to calculate tidal heating + + axial_period = "none" # planet's initial day length [hours]; will use orbital period if 'none' + satellite = false # include satellite (moon)? + mass_sat = 7.347e+22 # mass of satellite [kg] + semimajoraxis_sat = 3e8 # initial SMA of satellite's orbit [m] + + [orbit.dummy] + H_tide = 1e-7 # Fixed tidal power density [W kg-1] + Phi_tide = "<0.3" # Tidal heating applied when inequality locally satisfied + Imk2 = 0.0 # Fixed imaginary part of k2 love number, cannot be positive + + [orbit.lovepy] + visc_thresh = 1e9 # Minimum viscosity required for heating [Pa s] + +# Planetary structure - physics table +[struct] + mass_tot = 1.0 # M_earth + radius_int = "none" # R_earth + corefrac = 0.55 # non-dim., radius fraction + core_density = 10738.33 # Core density [kg m-3] + core_heatcap = 880.0 # Core specific heat capacity [J K-1 kg-1] + + module = "self" # self | zalmoxis + + [struct.zalmoxis] + verbose = false # verbose printing? + coremassfrac = 0.325 # core mass fraction [non-dim.] + inner_mantle_mass_fraction = 0 # inner mantle mass fraction [non-dim.] + weight_iron_frac = 0.325 # iron fraction in the planet [non-dim.] + num_levels = 150 # number of Zalmoxis radius layers + EOSchoice = "Tabulated:iron/silicate" # iron/silicate for super-Earths, water for water planets with Earth-like rocky cores + max_iterations_outer = 100 # max. iterations for the outer loop + tolerance_outer = 3e-3 # tolerance for the outer loop + max_iterations_inner = 100 # max. iterations for the inner loop + tolerance_inner = 1e-4 # tolerance for the inner loop + relative_tolerance = 1e-5 # relative tolerance for solve_ivp + absolute_tolerance = 1e-6 # absolute tolerance for solve_ivp + target_surface_pressure = 101325 # target surface pressure + pressure_tolerance = 1e9 # tolerance surface pressure + max_iterations_pressure = 200 # max. iterations for the innermost loop + pressure_adjustment_factor = 1.1 # factor for adjusting the pressure in the innermost loop + +# Atmosphere - physics table +[atmos_clim] + prevent_warming = true # do not allow the planet to heat up + surface_d = 0.01 # m, conductive skin thickness + surface_k = 2.0 # W m-1 K-1, conductive skin thermal conductivity + cloud_enabled = false # enable water cloud radiative effects + cloud_alpha = 0.0 # condensate retention fraction (1 -> fully retained) + surf_state = "fixed" # surface scheme: "mixed_layer" | "fixed" | "skin" + surf_greyalbedo = 0.1 # surface grey albedo + albedo_pl = 0.1 # Enforced input value of bond albedo; float (0 to 1) or str (path to CSV) + rayleigh = false # enable rayleigh scattering + tmp_minimum = 0.5 # temperature floor on solver + tmp_maximum = 5000.0 # temperature ceiling on solver + + module = "agni" # Which atmosphere module to use + + [atmos_clim.agni] + verbosity = 1 # output verbosity for agni (0:none, 1:info, 2:debug) + p_top = 1.0e-5 # bar, top of atmosphere grid pressure + p_obs = 0.02 # bar, level probed in transmission + spectral_group = "Honeyside" # which gas opacities to include + spectral_bands = "48" # how many spectral bands? + num_levels = 40 # Number of atmospheric grid levels + chemistry = "eq" # "none" | "eq" + surf_material = "greybody" # surface material file for scattering + solve_energy = true # solve for energy-conserving atmosphere profile + solution_atol = 0.5 # solver absolute tolerance + solution_rtol = 0.15 # solver relative tolerance + overlap_method = "ee" # gas overlap method + surf_roughness = 1e-3 # characteristic surface roughness [m] + surf_windspeed = 2.0 # characteristic surface wind speed [m/s]. + rainout = false # include volatile condensation/evaporation aloft + latent_heat = false # include latent heat release when `rainout=true`? + oceans = true # form liquid oceans at planet surface? + convection = true # include convective heat transport, with MLT + conduction = true # include conductive heat transport, with Fourier's law + sens_heat = true # include sensible heat flux near surface, with TKE scheme + real_gas = false # use real-gas equations of state + psurf_thresh = 0.1 # bar, surface pressure where we switch to 'transparent' mode + dx_max_ini = 300.0 # initial maximum temperature step [kelvin] allowed by solver + dx_max = 35.0 # maximum temperature step [kelvin] allowed by solver + max_steps = 70 # max steps allowed by solver during each iteration + perturb_all = true # updated entire jacobian each step? + mlt_criterion = "s" # MLT convection stability criterion; (l)edoux or (s)chwarzschild + fastchem_floor = 500.0 # Minimum temperature allowed to be sent to FC + fastchem_maxiter_chem = 60000 # Maximum FC iterations (chemistry) + fastchem_maxiter_solv = 20000 # Maximum FC iterations (internal solver) + fastchem_xtol_chem = 1e-4 # FC solver tolerance (chemistry) + fastchem_xtol_elem = 1e-4 # FC solver tolerance (elemental) + ini_profile = 'isothermal' # Initial guess for temperature profile shape + ls_default = 2 # Default linesearch method (0:none, 1:gs, 2:bt) + fdo = 2 # finite-difference order (options: 2, 4) + + [atmos_clim.janus] + p_top = 1.0e-6 # bar, top of atmosphere grid pressure + p_obs = 1.0e-3 # bar, observed pressure level + spectral_group = "Honeyside" # which gas opacities to include + spectral_bands = "48" # how many spectral bands? + F_atm_bc = 0 # measure outgoing flux at: (0) TOA | (1) Surface + num_levels = 40 # Number of atmospheric grid levels + tropopause = "none" # none | skin | dynamic + overlap_method = "ee" # gas overlap method + + [atmos_clim.dummy] + gamma = 0.01 # atmosphere opacity between 0 and 1 + height_factor = 3.0 # observed height is this times the scale height + +# Volatile escape - physics table +[escape] + + module = "zephyrus" # Which escape module to use + reservoir = "outgas" # Reservoir that sets escaping gas composition + + [escape.zephyrus] + Pxuv = 5e-5 # Pressure at which XUV radiation become opaque in the planetary atmosphere [bar] + efficiency = 0.1 # Escape efficiency factor + tidal = false # Tidal contribution enabled + + [escape.dummy] + rate = 0.0 # Bulk unfractionated escape rate [kg s-1] + +# Interior - physics table +[interior] + grain_size = 0.1 # crystal settling grain size [m] + F_initial = 1e3 # Initial heat flux guess [W m-2] + radiogenic_heat = false # enable radiogenic heat production + tidal_heat = false # enable tidal heat production + rheo_phi_loc = 0.6 # Centre of rheological transition + rheo_phi_wid = 0.2 # Width of rheological transition + melting_dir = "Monteux-600" # Name of folder constaining melting curves + + + module = "dummy" # Which interior module to use + + [interior.spider] + num_levels = 100 # Number of SPIDER grid levels + mixing_length = 2 # Mixing length parameterization + tolerance = 1.0e-8 # absolute solver tolerance + tolerance_rel = 1.0e-8 # relative solver tolerance + solver_type = "bdf" # SUNDIALS solver method + tsurf_atol = 20.0 # tsurf_poststep_change + tsurf_rtol = 0.02 # tsurf_poststep_change_frac + ini_entropy = 3000.0 # Surface entropy conditions [J K-1 kg-1] + ini_dsdr = -4.698e-6 # Interior entropy gradient [J K-1 kg-1 m-1] + conduction = true # enable conductive heat transfer + convection = true # enable convective heat transfer + gravitational_separation = true # enable gravitational separation + mixing = true # enable mixing + matprop_smooth_width = 1e-2 # melt-fraction window width over which to smooth material properties + + [interior.aragog] + logging = "ERROR" # Aragog log verbosity + num_levels = 50 # Number of Aragog grid levels + tolerance = 1.0e-7 # solver tolerance + initial_condition = 3 # Initial T(p); 1: linear, 2: user defined, 3: adiabat + ini_tmagma = 3300.0 # Initial magma surface temperature [K] + basal_temperature = 7000.0 # CMB temperature when initial boundary = 1 + inner_boundary_condition = 1 # 1 = core cooling model, 2 = prescribed heat flux, 3 = prescribed temperature + inner_boundary_value = 4000 # core temperature [K], if inner_boundary_condition = 3. CMB heat flux [W/m^2], if if inner_boundary_condition = 2 + conduction = true # enable conductive heat transfer + convection = true # enable convective heat transfer + gravitational_separation = false # enable gravitational separation + mixing = false # enable mixing + dilatation = false # enable dilatation source term + mass_coordinates = false # enable mass coordinates + tsurf_poststep_change = 30 # threshold of maximum change on surface temperature + event_triggering = true # enable events triggering to avoid abrupt jumps in surface temperature + bulk_modulus = 260e9 # Adiabatic bulk modulus AW-EOS parameter [Pa]. + + [interior.dummy] + ini_tmagma = 3300.0 # Initial magma surface temperature [K] + tmagma_atol = 30.0 # Max absolute Tsurf change in each step + tmagma_rtol = 0.05 # Max relative Tsurf change in each step + mantle_tliq = 2700.0 # Liquidus temperature + mantle_tsol = 1700.0 # Solidus temperature + mantle_rho = 4550.0 # Mantle density [kg m-3] + mantle_cp = 1792.0 # Mantle heat capacity [J K-1 kg-1] + H_ratio = 0.0 # Radiogenic heating [W/kg] + +# Outgassing - physics table +[outgas] + fO2_shift_IW = -2.0 # atmosphere/interior boundary oxidation state [log10(ΔIW)] + + silicates = true + fastchempath = '/data3/leoni/LavAtmos/FastChem/fastchem3/' + elementfile = '/data3/leoni/LavAtmos/input/fastchem3/' + vaplist = ["SiO", "SiO2", "Si", "Na", "K", "Ti", "TiO", "TiO2", "Mg", "MgO", "Al", "HAlO2", "SiH", "SiH4", "Fe", "FeO"] + + module = "calliope" # Which outgassing module to use + + + [outgas.calliope] + include_H2O = true # Include H2O compound + include_CO2 = true # Include CO2 compound + include_N2 = true # Include N2 compound + include_S2 = true # Include S2 compound + include_SO2 = true # Include SO2 compound + include_H2S = true # Include H2S compound + include_NH3 = true # Include NH3 compound + include_H2 = true # Include H2 compound + include_CH4 = true # Include CH4 compound + include_CO = true # Include CO compound + T_floor = 700.0 # Temperature floor applied to outgassing calculation [K]. + rtol = 0.0001 # Relative mass tolerance + xtol = 1e-06 # Absolute mass tolerance + solubility = true # Enable solubility? + + [outgas.atmodeller] + some_parameter = "some_value" + +# Volatile delivery - physics table +[delivery] + + # Radionuclide parameters + radio_tref = 4.55 # Reference age for concentrations [Gyr] + radio_K = 310.0 # ppmw of potassium (all isotopes) + radio_U = 0.031 # ppmw of uranium (all isotopes) + radio_Th = 0.124 # ppmw of thorium (all isotopes) + + # Which initial inventory to use? + initial = 'elements' # 'elements' | 'volatiles' + + # No module for accretion as of yet + module = "none" + + # Set initial volatile inventory by planetary element abundances if [initial = 'elements'] + [delivery.elements] + use_metallicity = false # whether or not to specify the elemental abundances in terms of solar metallicity + metallicity = 1000 # metallicity relative to solar metallicity + + H_oceans = 3.0 # Hydrogen inventory in units of equivalent Earth oceans + # H_ppmw = 109.0 # Hydrogen inventory in ppmw relative to mantle mass + # H_kg = 1e20 # Hydrogen inventory in kg + + CH_ratio = 1.0 # C/H mass ratio in mantle/atmosphere system + # C_ppmw = 0.0 # Carbon inventory in ppmw relative to mantle mass + # C_kg = 1e20 # Carbon inventory in kg + + NH_ratio = 0.5 # N/H mass ratio in mantle/atmosphere system + # N_ppmw = 0.5 # Nitrogen inventory in ppmw relative to mantle mass + # N_kg = 1e20 # Nitrogen inventory in kg + + SH_ratio = 2.0 # S/H mass ratio in mantle/atmosphere system + # S_ppmw = 2.0 # Sulfur inventory in ppmw relative to mantle mass + # S_kg = 1e20 # Sulfur inventory in kg + + # Set initial volatile inventory by partial pressures in atmosphere if [initial = 'volatiles'] + [delivery.volatiles] + H2O = 20.0 # partial pressure of H2O + CO2 = 30.0 # partial pressure of CO2 + N2 = 0.0 # etc. + S2 = 0.0 + SO2 = 0.0 + H2S = 0.0 + NH3 = 0.0 + H2 = 0.0 + CH4 = 0.0 + CO = 0.0 + +# Atmospheric chemistry postprocessing +[atmos_chem] + + module = "vulcan" # Atmospheric chemistry module + when = "manually" # When to run chemistry (manually, offline, online) + + # Physics flags + photo_on = true # Enable photochemistry + Kzz_on = true # Enable eddy diffusion + Kzz_const = "none" # Constant eddy diffusion coefficient (none => use profile) + moldiff_on = true # Enable molecular diffusion in the atmosphere + updraft_const = 0.0 # Set constant updraft velocity + + # Vulcan-specific atmospheric chemistry parameters + [atmos_chem.vulcan] + clip_fl = 1e-20 # Floor on stellar spectrum [erg s-1 cm-2 nm-1] + clip_vmr = 1e-10 # Neglect species with vmr < clip_vmr + make_funs = true # Generate reaction network functions + ini_mix = "profile" # Initial mixing ratios (profile, outgas) + fix_surf = false # Fixed surface mixing ratios + network = "SNCHO" # Class of chemical network to use (CHO, NCHO, SNCHO) + save_frames = true # Plot frames during iterations + yconv_cri = 0.05 # Convergence criterion, value of mixing ratios + slope_cri = 0.0001 # Convergence criterion, rate of change of mixing ratios + +# Calculate simulated observations +[observe] + + # Module with which to calculate the synthetic observables + synthesis = "none" + + [observe.platon] + downsample = 8 # Factor to downsample opacities + clip_vmr = 1e-8 # Minimum VMR for a species to be included diff --git a/input/run_silicates.toml b/input/run_silicates.toml index fec707d86..b440f9d79 100644 --- a/input/run_silicates.toml +++ b/input/run_silicates.toml @@ -31,7 +31,7 @@ version = "2.0" [params] # output files [params.out] - path = "run_005AU_2Hocean_noradstop" + path = "gridrun_-5IW_0.1AU_2Hocean_1CH_true" logging = "INFO" plot_mod = 3 # Plotting frequency, 0: wait until completion | n: every n iterations | none: do not plot plot_fmt = "png" # Plotting image file format, "png" or "pdf" recommended @@ -128,7 +128,7 @@ version = "2.0" [orbit] instellation_method = 'sma' # whether to define orbit using semi major axis ('sma') or instellation flux ('inst') instellationflux = 1.0 # instellation flux received from the planet in [Earth units] - semimajoraxis = 0.05 # initial semi-major axis of planet's orbit [AU] + semimajoraxis = 0.1 # initial semi-major axis of planet's orbit [AU] eccentricity = 0.0 # initial eccentricity of planet's orbit [dimensionless] zenith_angle = 48.19 # characteristic zenith angle [degrees] s0_factor = 0.375 # instellation scale factor [dimensionless] @@ -318,12 +318,12 @@ version = "2.0" # Outgassing - physics table [outgas] - fO2_shift_IW = 4 # atmosphere/interior boundary oxidation state [log10(ΔIW)] + fO2_shift_IW = -5.0 # atmosphere/interior boundary oxidation state [log10(ΔIW)] silicates = true fastchempath = '/data3/leoni/LavAtmos/FastChem/fastchem3/' elementfile = '/data3/leoni/LavAtmos/input/fastchem3/' - vaplist = ["SiO", "SiO2","Si", "Na", "K", "Ti", "TiO", "TiO2" , "Mg", "MgO", "Al", "HAlO2", "SiH","SiH4"] + vaplist = ["SiO", "SiO2", "Si", "Na", "K", "Ti", "TiO", "TiO2", "Mg", "MgO", "Al", "HAlO2", "SiH", "SiH4", "Fe", "FeO"] module = "calliope" # Which outgassing module to use diff --git a/run_PROTEUS.bash b/run_PROTEUS.bash index ffc644500..35c2c1cbf 100644 --- a/run_PROTEUS.bash +++ b/run_PROTEUS.bash @@ -1,29 +1,25 @@ #bash script to run multiple proteus runs one after other MIXFILE=vertical_mix -orb_dist=("0.01" "0.05" "0.1" "0.5" "1") -fO2=("-5" "-4" "-3" "-2" "-1" "1" "2" "3" "4" "5") -Hoceans=("1" "2" "3" "4") -silicates("true" "false") -CH_ratio=("1") +orb_dist=("0.01" "0.1" "1") +fO2=("-5" "-3" "-1" "1" "3" "5") +Hoceans=("1" "2" "4") +silicates=("true" "false") +CHratio=("1") input_file=input/run_silicates.toml # make directories for each composition and make fastchem grids for all compositions that don't have grids yet for ofug in "${fO2[@]}"; do - echo $ofug for orbit in "${orb_dist[@]}"; do - echo $orbit for Hocean in "${Hoceans[@]}"; do - echo $Hocean for sil in "${silicates[@]}"; do echo "silicates are: "$sil - for CH in "${CHratio[@]}"; do - echo $CH - python3 /data3/leoni/PROTEUS/tools_leoni/edit_input_file.py ${input_file} ${ofug} ${orbit} ${Hocean} ${CH} ${sil} - proteus start -c ${input_file} + for CH in "${CHratio[@]}"; do + python3 tools_leoni/edit_input_file.py $input_file $ofug $orbit $Hocean $CH $sil + proteus start -c $input_file + done + done + done done - done - done - done - done +done diff --git a/examples/plot_comparison_runs/compar_atmosphere_models.py b/tools_leoni/compar_atmosphere_models.py similarity index 99% rename from examples/plot_comparison_runs/compar_atmosphere_models.py rename to tools_leoni/compar_atmosphere_models.py index 41080c1c6..40860b93a 100644 --- a/examples/plot_comparison_runs/compar_atmosphere_models.py +++ b/tools_leoni/compar_atmosphere_models.py @@ -7,6 +7,7 @@ import glob import logging import os +import sys from typing import TYPE_CHECKING import matplotlib as mpl @@ -633,8 +634,8 @@ def plot_two_chemistries(output_dir1,output_dir2, extension, tmin, nsamp): if __name__ == "__main__": - output_dir1=sys.argv[1] - #output_dir2=sys.argv[2] + output_dir=sys.argv[1] + #plot_atmosphere_comparison(output_dir1, output_dir2, tmin=1e4, extension="_atm.nc", nsamp=5, plot_format="png") #plot_two_chemistries(output_dir1,output_dir2, extension="_atm.nc", tmin=1e4, nsamp=5) diff --git a/tools_leoni/covert_to_ARCiSformat.py b/tools_leoni/covert_to_ARCiSformat.py new file mode 100644 index 000000000..09a3f6347 --- /dev/null +++ b/tools_leoni/covert_to_ARCiSformat.py @@ -0,0 +1,153 @@ +from __future__ import annotations + +import glob +import logging +import os +import sys +from typing import TYPE_CHECKING + +import pandas as pd +from compar_atmosphere_models import sample_output + +from proteus.atmos_clim.common import read_ncdf_profile +from proteus.utils.constants import vol_list +from proteus.utils.helper import natural_sort + +if TYPE_CHECKING: + pass + +log = logging.getLogger('fwl.' + __name__) + +GASES_STANDARD = ( + 'CO', + 'H2O', + 'N2', + 'O2', + 'O3', + 'OH', + 'H', + 'SO', + 'CH4', + 'CO2', + 'H2', + 'H2S', + 'HCN', + 'NH3', + 'SO2', + 'Al', + 'HAlO2', + 'N2O', + 'NO', + 'NO2', + 'HNO3', + 'PH3', + 'N', + 'O', + 'S', +) + +REFRACTORY_GASES = ( + 'Fe', + 'Si', + 'Ti', + 'K', + 'Mg', + 'SiO', + 'SiO2', + 'TiO', + 'FeO', + 'MgO', + 'Na', + 'TiO2', + 'SiH', + 'SiH4', +) + + +def make_vmr_dataframe(file,relevant_gases): + + atm_profile = read_ncdf_profile(file, extra_keys=['pl','x_gas']) + + parr = atm_profile['pl'][:-1]* 1e-5 # convert to bar + df = pd.DataFrame(parr, columns=["Pbar"]) + + for i, gas in enumerate(relevant_gases): + key = gas + '_vmr' + if key in atm_profile.keys(): + print(key) + df[gas] = list(atm_profile[key]) + return df + + +def get_chem_atmosphere(runname: str, nsamp: int, relevant_gases: list = None): + + log.info('Plot atmosphere chemical composition') + + input_dir='/data3/leoni/PROTEUS/output/{}/'.format(runname) + output_dir='/data3/leoni/evolution_project/VMRs/{}'.format(runname) + + #check if output directory exists + os.makedirs(output_dir, exist_ok=True) + + if not relevant_gases: + relevant_gases = list(vol_list) + list(GASES_STANDARD) + list(REFRACTORY_GASES) + + # Remove duplicates, preserving order + relevant_gases = list(dict.fromkeys(relevant_gases)) + + # get sampled times at which to get chemistry for arcis + if nsamp>1: + times, sample_times, files = sample_output(input_dir, nsamp=nsamp) + else: + allfiles = glob.glob(os.path.join(input_dir, 'data', '*_atm.nc')) + files=[natural_sort(allfiles)[-1]] + + + if len(files) == 0: + log.warning('No atmosphere NetCDF files found in output folder') + return + + for i,file in enumerate(files): + time = sample_times[i] + vmrs = make_vmr_dataframe(file,relevant_gases) + fpath = os.path.join(output_dir,'vmrs_time_%s'%time+'.dat') + vmrs.to_csv(fpath,sep='\t',index=False) + + +def create_tp_df(file): + + atm_profile = read_ncdf_profile(file, extra_keys=['pl','tmpl']) + parr = atm_profile['pl'][:-1] * 1e-5 + print(len(parr)) + df = pd.DataFrame(parr, columns=["Pbar"]) + df['temperature[K]']=atm_profile['tmpl'][:-1] + + return df + + +def get_tps(runname: str, nsamp: int): + + input_dir='/data3/leoni/PROTEUS/output/{}/'.format(runname) + output_dir='/data3/leoni/evolution_project/TPss/{}'.format(runname) + #check if output directory exists + os.makedirs(output_dir, exist_ok=True) + + if nsamp>1: + plot_times, sample_times, files = sample_output(input_dir, nsamp=nsamp) + else: + allfiles = glob.glob(os.path.join(input_dir, 'data', '*_atm.nc')) + files=[natural_sort(allfiles)[-1]] + + for i,file in enumerate(files): + df= create_tp_df(file) + time=sample_times[i] + fpath = os.path.join(output_dir, 'tp_time_%s'%time+'.dat') + df.to_csv(fpath,sep='\t',index=False) + + + +if __name__ == "__main__": + runname=sys.argv[1] + nsamp = 5 + get_chem_atmosphere(runname,nsamp) + get_tps(runname,nsamp) diff --git a/tools_leoni/edit_input_file.py b/tools_leoni/edit_input_file.py index b0771e115..5515cbc26 100644 --- a/tools_leoni/edit_input_file.py +++ b/tools_leoni/edit_input_file.py @@ -10,16 +10,16 @@ def param_edit(inputfile,fO2,orbdist,Hocean,CHratio,silicates): with open(inputfile, "r") as f: data = parse(f.read()) - # modify values - data["params"]["params.out"]["path"] = 'gridrun_{}IW_{}AU_{}Hocean_{}CH_{}'.format(fO2,orbdist,Hocean,CHratio,silicates) - data["orbit"]["semimajoraxis"] = orbdist - data["outgas"]["fO2_shift_IW"] = fO2 - data["outgas"]["silicates"] = silicates - data["delivery"]["delivery.elements"]["H_oceans"] = Hocean - data["delivery"]["delivery.elements"]["CH_ratio"] = CHratio + #modify lines in input file + data["params"]["out"]["path"] = 'gridrun_{}IW_{}AU_{}Hocean_{}CH_{}'.format(fO2,orbdist,Hocean,CHratio,silicates) + data["orbit"]["semimajoraxis"] = float(orbdist) + data["outgas"]["fO2_shift_IW"] = float(fO2) + data["outgas"]["silicates"] = bool(silicates) + data["delivery"]["elements"]["H_oceans"] = float(Hocean) + data["delivery"]["elements"]["CH_ratio"] = float(CHratio) # write back - with open("input.toml", "w") as f: + with open(inputfile, "w") as f: f.write(dumps(data)) @@ -31,3 +31,5 @@ def param_edit(inputfile,fO2,orbdist,Hocean,CHratio,silicates): Hocean=sys.argv[4] CHratio=sys.argv[5] silicates=sys.argv[6] + + param_edit(inputfile,fO2,orbdist,Hocean,CHratio,silicates) diff --git a/examples/plot_comparison_runs/plot_elements.py b/tools_leoni/plot_elements.py similarity index 79% rename from examples/plot_comparison_runs/plot_elements.py rename to tools_leoni/plot_elements.py index 4f47c327c..e9fa36e0f 100644 --- a/examples/plot_comparison_runs/plot_elements.py +++ b/tools_leoni/plot_elements.py @@ -4,34 +4,23 @@ # Import utils-specific modules from __future__ import annotations -import glob import logging import os import sys -import subprocess -from datetime import datetime from typing import TYPE_CHECKING import matplotlib as mpl import matplotlib.pyplot as plt -import numpy as np -from cmcrameri import cm -from matplotlib.ticker import LogLocator, MultipleLocator -from mpl_toolkits.axes_grid1 import make_axes_locatable mpl.use('Agg') # noqa -from string import ascii_letters -import matplotlib.pyplot as plt -import numpy as np import pandas as pd -from proteus.utils.constants import vol_list, element_list -from proteus.utils.helper import find_nearest -from proteus.utils.plot import get_colour, latexify, sample_times +from proteus.utils.constants import element_list +from proteus.utils.plot import get_colour if TYPE_CHECKING: - from proteus.config import Config + pass log = logging.getLogger('fwl.' + __name__) @@ -52,7 +41,7 @@ def plot_atmosphere(output_dir): ax.set_xlabel("time") ax.set_yscale("log") ax.set_xscale("log") - + for e in element_list: color = get_colour(e) @@ -79,7 +68,7 @@ def plot_fO2_shift(output_dir): ax.set_ylabel("fO2 shift wrt IW buffer") ax.set_xlabel("time") ax.set_xscale("log") - + color = 'black' ax.plot(df['Time'], df['fO2_shift'], color=color, linestyle='-',label='fO2_shift dIW', alpha=alpha, zorder=3) @@ -96,4 +85,4 @@ def plot_fO2_shift(output_dir): output_dir=sys.argv[1] plot_atmosphere(output_dir) - plot_fO2_shift(output_dir) \ No newline at end of file + plot_fO2_shift(output_dir) From 66c8e7a5c47cbd38aeb65c26def67d660600abe5 Mon Sep 17 00:00:00 2001 From: Leoni Janssen Date: Thu, 5 Mar 2026 17:23:34 +0100 Subject: [PATCH 22/26] fixed choice of pressure and temeprature values to layer centers --- tools_leoni/covert_to_ARCiSformat.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/tools_leoni/covert_to_ARCiSformat.py b/tools_leoni/covert_to_ARCiSformat.py index 09a3f6347..83b3b421f 100644 --- a/tools_leoni/covert_to_ARCiSformat.py +++ b/tools_leoni/covert_to_ARCiSformat.py @@ -66,9 +66,11 @@ def make_vmr_dataframe(file,relevant_gases): - atm_profile = read_ncdf_profile(file, extra_keys=['pl','x_gas']) + atm_profile = read_ncdf_profile(file, extra_keys=['x_gas']) - parr = atm_profile['pl'][:-1]* 1e-5 # convert to bar + parr = atm_profile['p'] [1::2]* 1e-5 # convert to bar and select only pressures at center of layers + print(parr) + print(len(parr)) df = pd.DataFrame(parr, columns=["Pbar"]) for i, gas in enumerate(relevant_gases): @@ -116,11 +118,11 @@ def get_chem_atmosphere(runname: str, nsamp: int, relevant_gases: list = None): def create_tp_df(file): - atm_profile = read_ncdf_profile(file, extra_keys=['pl','tmpl']) - parr = atm_profile['pl'][:-1] * 1e-5 + atm_profile = read_ncdf_profile(file, extra_keys=[]) + parr = atm_profile['p'][1::2]* 1e-5 # convert to bar and select only pressures at center of layers print(len(parr)) df = pd.DataFrame(parr, columns=["Pbar"]) - df['temperature[K]']=atm_profile['tmpl'][:-1] + df['temperature[K]']=atm_profile['t'][1::2] # again, select only temperatures at center of layers return df From 074588f156f06c685d11dbe12a8c57acc374620c Mon Sep 17 00:00:00 2001 From: Leoni Janssen Date: Fri, 6 Mar 2026 12:19:04 +0100 Subject: [PATCH 23/26] added python routine to edit ARCiS config file and bash file to run ARCiS --- input/run_silicates.toml | 6 +-- tools_leoni/covert_to_ARCiSformat.py | 81 ++++++++++++++++++++++++++-- 2 files changed, 81 insertions(+), 6 deletions(-) diff --git a/input/run_silicates.toml b/input/run_silicates.toml index b440f9d79..0a12e2afc 100644 --- a/input/run_silicates.toml +++ b/input/run_silicates.toml @@ -31,7 +31,7 @@ version = "2.0" [params] # output files [params.out] - path = "gridrun_-5IW_0.1AU_2Hocean_1CH_true" + path = "gridrun_-3IW_0.01AU_2Hocean_1CH_false" logging = "INFO" plot_mod = 3 # Plotting frequency, 0: wait until completion | n: every n iterations | none: do not plot plot_fmt = "png" # Plotting image file format, "png" or "pdf" recommended @@ -128,7 +128,7 @@ version = "2.0" [orbit] instellation_method = 'sma' # whether to define orbit using semi major axis ('sma') or instellation flux ('inst') instellationflux = 1.0 # instellation flux received from the planet in [Earth units] - semimajoraxis = 0.1 # initial semi-major axis of planet's orbit [AU] + semimajoraxis = 0.01 # initial semi-major axis of planet's orbit [AU] eccentricity = 0.0 # initial eccentricity of planet's orbit [dimensionless] zenith_angle = 48.19 # characteristic zenith angle [degrees] s0_factor = 0.375 # instellation scale factor [dimensionless] @@ -318,7 +318,7 @@ version = "2.0" # Outgassing - physics table [outgas] - fO2_shift_IW = -5.0 # atmosphere/interior boundary oxidation state [log10(ΔIW)] + fO2_shift_IW = -3.0 # atmosphere/interior boundary oxidation state [log10(ΔIW)] silicates = true fastchempath = '/data3/leoni/LavAtmos/FastChem/fastchem3/' diff --git a/tools_leoni/covert_to_ARCiSformat.py b/tools_leoni/covert_to_ARCiSformat.py index 83b3b421f..93aa95e40 100644 --- a/tools_leoni/covert_to_ARCiSformat.py +++ b/tools_leoni/covert_to_ARCiSformat.py @@ -63,6 +63,18 @@ 'SiH4', ) +GASES_ARCiS=('CO', + 'H2O', + 'N2', + 'O2', + 'H', + 'SO', + 'CH4', + 'CO2', + 'H2', + 'H2S', + 'SO2') + def make_vmr_dataframe(file,relevant_gases): @@ -109,11 +121,15 @@ def get_chem_atmosphere(runname: str, nsamp: int, relevant_gases: list = None): log.warning('No atmosphere NetCDF files found in output folder') return + paths=[] for i,file in enumerate(files): time = sample_times[i] vmrs = make_vmr_dataframe(file,relevant_gases) fpath = os.path.join(output_dir,'vmrs_time_%s'%time+'.dat') vmrs.to_csv(fpath,sep='\t',index=False) + paths.append(fpath) + + return paths def create_tp_df(file): @@ -123,7 +139,6 @@ def create_tp_df(file): print(len(parr)) df = pd.DataFrame(parr, columns=["Pbar"]) df['temperature[K]']=atm_profile['t'][1::2] # again, select only temperatures at center of layers - return df @@ -140,16 +155,76 @@ def get_tps(runname: str, nsamp: int): allfiles = glob.glob(os.path.join(input_dir, 'data', '*_atm.nc')) files=[natural_sort(allfiles)[-1]] + paths=[] for i,file in enumerate(files): df= create_tp_df(file) time=sample_times[i] fpath = os.path.join(output_dir, 'tp_time_%s'%time+'.dat') df.to_csv(fpath,sep='\t',index=False) + paths.append(fpath) + + return paths + + + +def config_ARCiS(input_file, tp_file_path, vmr_file_path, species): + '''function which modifies the ARCiS input file by updating the elementfile from which the abundances are read + Input Tsurf is not mandatory since then ARCiS will converge to s surface temperature itself''' + vmrs=pd.read_csv(vmr_file_path,sep='\t').iloc[0] + + tp=pd.read_csv(tp_file_path,sep='\t') + Psurf=tp['Pbar'][0] + Tsurface=tp['temperature[K]'][0] + + output_lines = [] + + with open(input_file, "r") as f: + for line in f: + stripped_line = line.strip() + key = stripped_line.split("=")[0] + replaced = False + + if key in species: + output_lines.append(f"{key}={vmrs[key]}\n") + print(f"{key}={vmrs[key]}") + replaced=True + + if replaced: + continue + + if key=="TPfile": + output_lines.append(f"TPfile={tp_file_path}\n") + + elif key=="pmax": + output_lines.append("pmax="+str(Psurf)+"d0\n") + + elif key=="Pp": + output_lines.append("Pp="+str(Psurf)+"d0\n") + + elif key=="Tsurface": + output_lines.append("Tsurface="+str(Tsurface)+"d0\n") + + else: + output_lines.append(line) + + print(output_lines) + # Write the updated lines back to the file + with open(input_file, "w") as f: + f.writelines(output_lines) + if __name__ == "__main__": runname=sys.argv[1] nsamp = 5 - get_chem_atmosphere(runname,nsamp) - get_tps(runname,nsamp) + vmrpaths=get_chem_atmosphere(runname,nsamp) + tppaths=get_tps(runname,nsamp) + + tp_file_path=tppaths[0] + vmr_file_path=vmrpaths[0] + + species=list(GASES_ARCiS) + + input_file='/data3/leoni/ARCiS/input_PROTEUS.dat' + config_ARCiS(input_file, tp_file_path, vmr_file_path, species) From c9bf2bf7d02fd4f657a6775ab95297ea5bbb36b4 Mon Sep 17 00:00:00 2001 From: Leoni Janssen Date: Thu, 12 Mar 2026 18:14:36 +0100 Subject: [PATCH 24/26] corrected the updating of volatile species mass after outgassing happens. Their abundances should not be scaled with the increases mass of teh atmosphere but stay as before lavatmos --- elementfiles/element_abundances_0.0.dat | 20 ++ elementfiles/element_abundances_1.0.dat | 20 ++ .../element_abundances_13851.561067997187.dat | 20 ++ elementfiles/element_abundances_2.0.dat | 20 ++ .../element_abundances_23851.562453153296.dat | 20 ++ elementfiles/element_abundances_32.0.dat | 20 ++ .../element_abundances_33851.56483830954.dat | 20 ++ .../element_abundances_3851.5606828411183.dat | 20 ++ .../element_abundances_49780.70354442499.dat | 20 ++ .../element_abundances_59780.70852249535.dat | 20 ++ elementfiles/element_abundances_62.0.dat | 20 ++ .../element_abundances_75780.71648740792.dat | 20 ++ elementfiles/element_abundances_92.0.dat | 20 ++ .../element_abundances_94855.8892003798.dat | 20 ++ input/run_silicates.toml | 4 +- run_PROTEUS.bash | 9 +- src/proteus/atmos_clim/common.py | 1 + src/proteus/outgas/lavatmos.py | 45 +-- tools_leoni/compar_atmosphere_models.py | 2 - tools_leoni/convert_to_ARCiSformat.py | 310 ++++++++++++++++++ tools_leoni/edit_input_file.py | 8 +- ...vert_to_ARCiSformat.py => read_in_time.py} | 27 +- 22 files changed, 631 insertions(+), 55 deletions(-) create mode 100644 elementfiles/element_abundances_0.0.dat create mode 100644 elementfiles/element_abundances_1.0.dat create mode 100644 elementfiles/element_abundances_13851.561067997187.dat create mode 100644 elementfiles/element_abundances_2.0.dat create mode 100644 elementfiles/element_abundances_23851.562453153296.dat create mode 100644 elementfiles/element_abundances_32.0.dat create mode 100644 elementfiles/element_abundances_33851.56483830954.dat create mode 100644 elementfiles/element_abundances_3851.5606828411183.dat create mode 100644 elementfiles/element_abundances_49780.70354442499.dat create mode 100644 elementfiles/element_abundances_59780.70852249535.dat create mode 100644 elementfiles/element_abundances_62.0.dat create mode 100644 elementfiles/element_abundances_75780.71648740792.dat create mode 100644 elementfiles/element_abundances_92.0.dat create mode 100644 elementfiles/element_abundances_94855.8892003798.dat create mode 100644 tools_leoni/convert_to_ARCiSformat.py rename tools_leoni/{covert_to_ARCiSformat.py => read_in_time.py} (94%) diff --git a/elementfiles/element_abundances_0.0.dat b/elementfiles/element_abundances_0.0.dat new file mode 100644 index 000000000..c56839441 --- /dev/null +++ b/elementfiles/element_abundances_0.0.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.326347796198355 +H 31.50347327914622 +He 0 +N 30.886304788116604 +O 31.522651092808786 +P 0 +S 26.288038869561884 +Si 30.676136543100064 +Ti 25.915301073658725 +V 0 +Cl 0 +K 28.502073039190474 +Na 29.718582602778298 +Mg 29.398675491608774 +F 0 +Ca 25.669421847087918 +Fe 29.556083415787615 +Al 26.906354079582016 +e- 0 diff --git a/elementfiles/element_abundances_1.0.dat b/elementfiles/element_abundances_1.0.dat new file mode 100644 index 000000000..09c2d67ad --- /dev/null +++ b/elementfiles/element_abundances_1.0.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.414535133816216 +H 31.401084235667444 +He 0 +N 30.95664230259505 +O 31.548434036398376 +P 0 +S 26.17570111372174 +Si 30.555109644630896 +Ti 25.74903797739576 +V 0 +Cl 0 +K 28.35055306834164 +Na 29.567121765309274 +Mg 29.275055015837705 +F 0 +Ca 25.54385647945451 +Fe 29.43171222048319 +Al 26.776965962597217 +e- 0 diff --git a/elementfiles/element_abundances_13851.561067997187.dat b/elementfiles/element_abundances_13851.561067997187.dat new file mode 100644 index 000000000..3d1e23438 --- /dev/null +++ b/elementfiles/element_abundances_13851.561067997187.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.516620447800587 +H 31.242630957155413 +He 0 +N 31.0365117460057 +O 31.56743877218692 +P 0 +S 26.06483636673304 +Si 30.155597740111805 +Ti 25.100347928851598 +V 0 +Cl 0 +K 27.992451716977722 +Na 29.226281034531695 +Mg 28.960259670091105 +F 0 +Ca 25.078408431490644 +Fe 29.16799695284076 +Al 26.16314997858465 +e- 0 diff --git a/elementfiles/element_abundances_2.0.dat b/elementfiles/element_abundances_2.0.dat new file mode 100644 index 000000000..ebeb9390e --- /dev/null +++ b/elementfiles/element_abundances_2.0.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.4625232641181 +H 31.318717688784375 +He 0 +N 30.992482443028514 +O 31.565176574119832 +P 0 +S 26.084478916150566 +Si 30.46469320036851 +Ti 25.62644275572514 +V 0 +Cl 0 +K 28.237740842549552 +Na 29.454350654811723 +Mg 29.18294191976141 +F 0 +Ca 25.450460344752507 +Fe 29.33910488085414 +Al 26.681809888099565 +e- 0 diff --git a/elementfiles/element_abundances_23851.562453153296.dat b/elementfiles/element_abundances_23851.562453153296.dat new file mode 100644 index 000000000..06fefeff0 --- /dev/null +++ b/elementfiles/element_abundances_23851.562453153296.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.47672116511036 +H 31.34705849513083 +He 0 +N 31.014460659235077 +O 31.54506468311504 +P 0 +S 26.17977931433365 +Si 30.262026470655755 +Ti 25.23293979701561 +V 0 +Cl 0 +K 28.119421444901644 +Na 29.35323093868048 +Mg 29.067218389823825 +F 0 +Ca 25.185917592775198 +Fe 29.27534741158016 +Al 26.267229114754063 +e- 0 diff --git a/elementfiles/element_abundances_32.0.dat b/elementfiles/element_abundances_32.0.dat new file mode 100644 index 000000000..70ffa2185 --- /dev/null +++ b/elementfiles/element_abundances_32.0.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.48749401834572 +H 31.264133638415274 +He 0 +N 31.00985007086905 +O 31.57458564517812 +P 0 +S 26.023521503485902 +Si 30.40603388545155 +Ti 25.546648387971327 +V 0 +Cl 0 +K 28.16506874411077 +Na 29.381786988602414 +Mg 29.12368772322488 +F 0 +Ca 25.389714434204368 +Fe 29.279802878939282 +Al 26.619679405555093 +e- 0 diff --git a/elementfiles/element_abundances_33851.56483830954.dat b/elementfiles/element_abundances_33851.56483830954.dat new file mode 100644 index 000000000..6a1da32b7 --- /dev/null +++ b/elementfiles/element_abundances_33851.56483830954.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.38822052461502 +H 31.497402066571226 +He 0 +N 30.95834551543317 +O 31.499510217978642 +P 0 +S 26.342777247983186 +Si 30.42124596023619 +Ti 25.42807435185324 +V 0 +Cl 0 +K 28.305766578271655 +Na 29.53954984463938 +Mg 29.22721714643358 +F 0 +Ca 25.34672380788281 +Fe 29.43592101395064 +Al 26.424995395881425 +e- 0 diff --git a/elementfiles/element_abundances_3851.5606828411183.dat b/elementfiles/element_abundances_3851.5606828411183.dat new file mode 100644 index 000000000..e309300b9 --- /dev/null +++ b/elementfiles/element_abundances_3851.5606828411183.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.53451571667539 +H 31.182719462116705 +He 0 +N 31.04535671876907 +O 31.57780547185047 +P 0 +S 25.997964368313653 +Si 30.095009629678216 +Ti 25.024098221002617 +V 0 +Cl 0 +K 27.919209497155023 +Na 29.153051054165203 +Mg 28.899368598990982 +F 0 +Ca 25.01720228874077 +Fe 29.106881693883338 +Al 26.10454444623432 +e- 0 diff --git a/elementfiles/element_abundances_49780.70354442499.dat b/elementfiles/element_abundances_49780.70354442499.dat new file mode 100644 index 000000000..c3f157d32 --- /dev/null +++ b/elementfiles/element_abundances_49780.70354442499.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.825441288448328 +He 0 +N 28.97516114206447 +O 31.321440950352372 +P 0 +S 26.69978017010255 +Si 30.947089383939005 +Ti 26.1523883926848 +V 0 +Cl 0 +K 28.965983937807426 +Na 30.199628783458003 +Mg 29.758689624301585 +F 0 +Ca 25.88395170423309 +Fe 29.971498777699434 +Al 26.97063749518697 +e- 0 diff --git a/elementfiles/element_abundances_59780.70852249535.dat b/elementfiles/element_abundances_59780.70852249535.dat new file mode 100644 index 000000000..20e032c68 --- /dev/null +++ b/elementfiles/element_abundances_59780.70852249535.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.854268947448883 +He 0 +N 29.099303041904953 +O 31.258833304326252 +P 0 +S 26.727630526304583 +Si 30.885464645769318 +Ti 25.99070459978186 +V 0 +Cl 0 +K 28.839317030309665 +Na 30.07303156211716 +Mg 29.693918397378035 +F 0 +Ca 25.81598067671656 +Fe 29.904443379972605 +Al 26.893946797098444 +e- 0 diff --git a/elementfiles/element_abundances_62.0.dat b/elementfiles/element_abundances_62.0.dat new file mode 100644 index 000000000..78093ae0b --- /dev/null +++ b/elementfiles/element_abundances_62.0.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.503026630666085 +H 31.224229939937885 +He 0 +N 31.01999547076154 +O 31.580805529176253 +P 0 +S 25.978655566327035 +Si 30.364770031654324 +Ti 25.49099969231338 +V 0 +Cl 0 +K 28.11336771266993 +Na 29.33010404976217 +Mg 29.081736616450446 +F 0 +Ca 25.347238330564693 +Fe 29.23764902010418 +Al 26.57701065618799 +e- 0 diff --git a/elementfiles/element_abundances_75780.71648740792.dat b/elementfiles/element_abundances_75780.71648740792.dat new file mode 100644 index 000000000..9f2c9329a --- /dev/null +++ b/elementfiles/element_abundances_75780.71648740792.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.950068660981113 +He 0 +N 29.293337809019157 +O 30.848636314179185 +P 0 +S 26.82209137588132 +Si 30.460968418715247 +Ti 25.218619311823254 +V 0 +Cl 0 +K 28.119140580295397 +Na 29.353153684994886 +Mg 29.262598342333003 +F 0 +Ca 25.377589518647035 +Fe 29.468089225680096 +Al 26.532802713208593 +e- 0 diff --git a/elementfiles/element_abundances_92.0.dat b/elementfiles/element_abundances_92.0.dat new file mode 100644 index 000000000..77e8c75b8 --- /dev/null +++ b/elementfiles/element_abundances_92.0.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.514390267979568 +H 31.191559514476424 +He 0 +N 31.027037935776328 +O 31.585493147618223 +P 0 +S 25.941969272125327 +Si 30.331396591379168 +Ti 25.44600495158669 +V 0 +Cl 0 +K 28.071446630122665 +Na 29.288197574292198 +Mg 29.047823390633866 +F 0 +Ca 25.312911787510274 +Fe 29.203576255872356 +Al 26.542690465339234 +e- 0 diff --git a/elementfiles/element_abundances_94855.8892003798.dat b/elementfiles/element_abundances_94855.8892003798.dat new file mode 100644 index 000000000..0af8c8a27 --- /dev/null +++ b/elementfiles/element_abundances_94855.8892003798.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 0 +He 0 +N 0 +O 31.770998816525573 +P 0 +S 25.67396318786686 +Si 31.35917905303831 +Ti 27.429404168982533 +V 0 +Cl 0 +K 29.855417452925117 +Na 31.087711663033932 +Mg 30.257691131076506 +F 0 +Ca 26.456040292702653 +Fe 30.523944125862844 +Al 27.71430466173889 +e- 0 diff --git a/input/run_silicates.toml b/input/run_silicates.toml index 0a12e2afc..823e88a47 100644 --- a/input/run_silicates.toml +++ b/input/run_silicates.toml @@ -31,7 +31,7 @@ version = "2.0" [params] # output files [params.out] - path = "gridrun_-3IW_0.01AU_2Hocean_1CH_false" + path = "gridrun_-3IW_0.01AU_1Hocean_1CH_True" logging = "INFO" plot_mod = 3 # Plotting frequency, 0: wait until completion | n: every n iterations | none: do not plot plot_fmt = "png" # Plotting image file format, "png" or "pdf" recommended @@ -367,7 +367,7 @@ version = "2.0" use_metallicity = false # whether or not to specify the elemental abundances in terms of solar metallicity metallicity = 1000 # metallicity relative to solar metallicity - H_oceans = 2.0 # Hydrogen inventory in units of equivalent Earth oceans + H_oceans = 1.0 # Hydrogen inventory in units of equivalent Earth oceans # H_ppmw = 109.0 # Hydrogen inventory in ppmw relative to mantle mass # H_kg = 1e20 # Hydrogen inventory in kg diff --git a/run_PROTEUS.bash b/run_PROTEUS.bash index 35c2c1cbf..220ff340d 100644 --- a/run_PROTEUS.bash +++ b/run_PROTEUS.bash @@ -1,9 +1,9 @@ #bash script to run multiple proteus runs one after other MIXFILE=vertical_mix -orb_dist=("0.01" "0.1" "1") -fO2=("-5" "-3" "-1" "1" "3" "5") -Hoceans=("1" "2" "4") -silicates=("true" "false") +orb_dist=("0.01") +fO2=("-3") +Hoceans=("1") +silicates=("true") CHratio=("1") input_file=input/run_silicates.toml @@ -17,7 +17,6 @@ for ofug in "${fO2[@]}"; do for CH in "${CHratio[@]}"; do python3 tools_leoni/edit_input_file.py $input_file $ofug $orbit $Hocean $CH $sil proteus start -c $input_file - done done done diff --git a/src/proteus/atmos_clim/common.py b/src/proteus/atmos_clim/common.py index ea82060e0..2df42eee1 100644 --- a/src/proteus/atmos_clim/common.py +++ b/src/proteus/atmos_clim/common.py @@ -71,6 +71,7 @@ def read_ncdf_profile(nc_fpath: str, extra_keys: list = []): log.error(f"Could not find NetCDF file '{nc_fpath}'") return None ds = nc.Dataset(nc_fpath) + #print(ds.variables.keys()) p = np.array(ds.variables['p'][:]) pl = np.array(ds.variables['pl'][:]) diff --git a/src/proteus/outgas/lavatmos.py b/src/proteus/outgas/lavatmos.py index c135bcd6e..cec5f95a7 100644 --- a/src/proteus/outgas/lavatmos.py +++ b/src/proteus/outgas/lavatmos.py @@ -3,6 +3,7 @@ import logging import os +import shutil from typing import TYPE_CHECKING import numpy as np @@ -279,7 +280,7 @@ def oneill(self, T): """O'Neill and Eggins (2002) IW""" return 2 * (-244118 + 115.559 * T - 8.474 * T * np.log(T)) / (np.log(10) * 8.31441 * T) -def read_in_element_fracs(input_path): +def read_in_element_fracs(input_path,time): # read file (skip comment line, split on whitespace) @@ -290,7 +291,7 @@ def read_in_element_fracs(input_path): sep=r"\s+", # split on any whitespace header=None ) - + shutil.copy(input_path + "element_abundances/element_abundances_output.dat", "/data3/leoni/PROTEUS/elementfiles/element_abundances_{}.dat".format(str(time))) # make first column the headers and second column the data row df = pd.DataFrame([df[1].values], columns=df[0].values) @@ -364,15 +365,16 @@ def compute_silicate_outgassing(config: Config, hf_row: dict): lavatmos_instance.run_lavatmos(Toutgas) #convert the element abundances from lavatmos file to element fractions, normalized to unity - element_fracs=read_in_element_fracs(config.outgas.elementfile) + element_fracs=read_in_element_fracs(config.outgas.elementfile,hf_row['Time']) + + + log.info('elements passed to fastchem runs from lavatmos output: %s',element_fracs) - log.debug('elements passed to fastchem runs from lavatmos output: %s',element_fracs) # read in boa chemistry from last iteration of fastchem and lavatmos output_fc = config.outgas.fastchempath + 'output/' if os.path.exists(output_fc): mmr_path = os.path.join(output_fc, 'boa_chem.dat') - print(mmr_path) else: raise RuntimeError('cannot find fastchem output from lavatmos loop!') @@ -390,17 +392,16 @@ def compute_silicate_outgassing(config: Config, hf_row: dict): rho_old = kg_per_particle * P_surf_Pa / (kB * hf_row['T_magma']) M_atmo_old = hf_row['M_atm'] - log.debug('old atmospheric mass:%.4f'%M_atmo_old) + log.info('old atmospheric mass:%.4f'%M_atmo_old) # rho of armosphere after lavatmos # n=rho/mu*mp kg_pp_new = mu_outgassed * mp - print('kg per particle after lavatmos:',kg_pp_new) P_new_pa = new_atmos_abundances['Pbar'][0] * 1.0e5 #convert pressure to Pascals rho_new = kg_pp_new * P_new_pa / (kB * hf_row['T_magma']) M_atmo_new = M_atmo_old / rho_old * rho_new # kg assuming volum does not change - log.debug('new atmospheric mass:%.4f'%M_atmo_new) + log.info('new atmospheric mass:%.4f'%M_atmo_new) gas_list = vol_list + config.outgas.vaplist @@ -417,9 +418,6 @@ def compute_silicate_outgassing(config: Config, hf_row: dict): # elements are not considered as atomic species but just as inventory #print('element fractions predicted by fastchem:',element_fracs) - atmos_fracs={} #for debug - total_fracs={} #for debug - mmw_elements=0 #log.info('elements in element list: %s'%element_list) #log.info('elements in lavatmos:%s'%element_fracs.columns.tolist()) @@ -427,26 +425,17 @@ def compute_silicate_outgassing(config: Config, hf_row: dict): mmw_elements += element_fracs[e][0] * species_lib[e].weight for e in element_list: + log.info('element: %s, %s',e, element_fracs[e][0]) + log.info('total mass of element before updating with lavatmos: %s',hf_row[e + '_kg_atm']) + if e in input_eles and e!='O': + hf_row[e + '_kg_atm'] = hf_row[e + '_kg_atm'] + else: + hf_row[e + '_kg_atm'] = element_fracs[e][0] * M_atmo_new * species_lib[e].weight / mmw_elements - #if e in input_eles and e !='O': #only update atmospheric masses of non volatile species - safest is to keep volatiles non updated (except for O ?) - #continue - #else: - log.debug('element: %s, %s',e, element_fracs[e][0]) - log.debug('total mass of element before updating with lavatmos: %s',hf_row[e + '_kg_atm']) - - #hf_row[e + '_kg_atm'] = element_fracs[e][0] * M_atmo_new * species_lib[e].weight / mu_outgassed - hf_row[e + '_kg_atm'] = element_fracs[e][0] * M_atmo_new * species_lib[e].weight / mmw_elements - - #hf_row[e + '_kg_total'] = (hf_row[e + '_kg_atm'] + hf_row[e + '_kg_solid'] + hf_row[e + '_kg_liquid']) - log.debug('total mass of element after updating with lavatmos: %s',hf_row[e + '_kg_atm']) - #option2 = element_fracs[e][0] * M_atmo_old * species_lib[e].weight / mmw_elements - #log.info('total mass of element after updating with lavatmos using old atmospheric mass : %s'%option2) - atmos_fracs[e] = hf_row[e + '_kg_atm'] - total_fracs[e] = hf_row[e + '_kg_total'] + hf_row[e + '_kg_total'] = (hf_row[e + '_kg_atm'] + hf_row[e + '_kg_solid'] + hf_row[e + '_kg_liquid']) + log.info('total mass of element after updating with lavatmos: %s',hf_row[e + '_kg_atm']) - log.debug('atmospheric mass of elements from fastchem: %s',atmos_fracs) - log.debug('total mass of elements after fastchem: %s',total_fracs) # saving new oxygen fugacity for calliope log10_fO2 = np.log10(new_atmos_abundances['O2'][0]) + np.log10(new_atmos_abundances['Pbar'][0]) # is this really partical pressure ? Maybe this is actually abundances diff --git a/tools_leoni/compar_atmosphere_models.py b/tools_leoni/compar_atmosphere_models.py index 40860b93a..4089ef2ff 100644 --- a/tools_leoni/compar_atmosphere_models.py +++ b/tools_leoni/compar_atmosphere_models.py @@ -189,7 +189,6 @@ def read_2model_data(output_dir1:str, output_dir2:str, extension, tmin, nsamp, e times1, plot_times1, _1 = sample_output(output_dir1, extension, tmin, nsamp) times2, plot_times2, _2 = sample_output(output_dir2, extension, tmin, nsamp) - print() #set new array bound for the time arrays from two runs: same lower bound (higher minimum ) and same upper bound (lower maximum) lower_bound = max(np.array(plot_times1).min(), np.array(plot_times2).min()) # higher minimum @@ -295,7 +294,6 @@ def sample_output(output_dir, extension:str = "_atm.nc", tmin:float = 1.0, nsamp out_f = [files[i] for i in out_i] # return times and file paths - print(np.array(times), np.array(out_t), np.array(out_f)) return np.array(times), np.array(out_t), np.array(out_f) diff --git a/tools_leoni/convert_to_ARCiSformat.py b/tools_leoni/convert_to_ARCiSformat.py new file mode 100644 index 000000000..0db922ef0 --- /dev/null +++ b/tools_leoni/convert_to_ARCiSformat.py @@ -0,0 +1,310 @@ +from __future__ import annotations + +import glob +import logging +import os +import sys +from typing import TYPE_CHECKING + +import pandas as pd +from compar_atmosphere_models import sample_output + +from proteus.atmos_clim.common import read_ncdf_profile +from proteus.outgas.lavatmos import species_lib +from proteus.utils.constants import element_list, vol_list +from proteus.utils.helper import natural_sort + +if TYPE_CHECKING: + pass + +log = logging.getLogger('fwl.' + __name__) + +GASES_STANDARD = ( + 'CO', + 'H2O', + 'N2', + 'O2', + 'O3', + 'OH', + 'H', + 'SO', + 'CH4', + 'CO2', + 'H2', + 'H2S', + 'HCN', + 'NH3', + 'SO2', + 'Al', + 'HAlO2', + 'N2O', + 'NO', + 'NO2', + 'HNO3', + 'PH3', + 'N', + 'O', + 'S', +) + +REFRACTORY_GASES = ( + 'Fe', + 'Si', + 'Ti', + 'K', + 'Mg', + 'SiO', + 'SiO2', + 'TiO', + 'FeO', + 'MgO', + 'Na', + 'TiO2', + 'SiH', + 'SiH4', +) + +GASES_ARCiS=('CO', + 'H2O', + 'N2', + 'O2', + 'CH4', + 'CO2', + 'H2', + 'H2S', + 'SO2', + 'NH3', + 'HCN', + 'N2O', + 'O3',) + + + + +def get_element_abun(model,time): + + df=pd.read_csv('/data3/leoni/PROTEUS/output/%s/runtime_helpfile.csv'%model,sep='\t') + hf_row = df.loc[(df["Time"] - time).abs().idxmin()] + molfracs={} + + nfrac={'H': 0.0,'He':0.0,'C': 0.0,'N':0.0, + 'O': 0.0,'Na':0.0,'Mg': 0.0,'Si':0.0, + 'Fe': 0.0,'Al':0.0,'Ca': 0.0,'Ti':0.0, + 'S': 0.0,'Cl':0.0,'K': 0.0,'F':0.0,'P': 0.0,'V':0.0} + + total_mols=0.0 + for e in element_list: + molfracs[e]= hf_row[e + '_kg_atm']/species_lib[e].weight + total_mols+= molfracs[e] + for e in element_list: + nfrac[e]= molfracs[e]/total_mols + + element_folder='/data3/leoni/evolution_project/elements_ARCiS/{}/{}/'.format(model,time) + + os.makedirs(element_folder, exist_ok=True) + with open(element_folder+'elements.dat', "w") as f: + for key in nfrac: + f.write(f"{key} {float(nfrac[key]):.3E} \n") + print('elements in ARCiS format written to {}elements.dat'.format(element_folder)) + + + + +def make_vmr_dataframe(file,relevant_gases): + + atm_profile = read_ncdf_profile(file, extra_keys=['x_gas']) + + parr = atm_profile['p'] [1::2]* 1e-5 # convert to bar and select only pressures at center of layers + df = pd.DataFrame(parr, columns=["Pbar"]) + + for i, gas in enumerate(relevant_gases): + key = gas + '_vmr' + if key in atm_profile.keys(): + df[gas] = list(atm_profile[key]) + return df + + +def create_mixrat_df(file): + + tp=create_tp_df(file) + vmrs=make_vmr_dataframe(file,list(GASES_ARCiS)) + + cols_to_use = vmrs.columns.difference(tp.columns) + dfNew = tp.merge(vmrs[cols_to_use], left_index=True, right_index=True, how='outer') + + return dfNew + +def get_chem_atmosphere(runname: str, nsamp: int, relevant_gases: list = None, mixratfile=True): + + log.info('Plot atmosphere chemical composition') + + input_dir='/data3/leoni/PROTEUS/output/{}/'.format(runname) + output_dir='/data3/leoni/evolution_project/VMRs/{}'.format(runname) + + #check if output directory exists + os.makedirs(output_dir, exist_ok=True) + + if not relevant_gases: + relevant_gases = list(vol_list) + list(GASES_STANDARD) + list(REFRACTORY_GASES) + + # Remove duplicates, preserving order + relevant_gases = list(dict.fromkeys(relevant_gases)) + + # get sampled times at which to get chemistry for arcis + if nsamp>1: + times, sample_times, files = sample_output(input_dir, nsamp=nsamp) + else: + allfiles = glob.glob(os.path.join(input_dir, 'data', '*_atm.nc')) + files=[natural_sort(allfiles)[-1]] + + + if len(files) == 0: + log.warning('No atmosphere NetCDF files found in output folder') + return + + paths=[] + mixratpaths=[] + for i,file in enumerate(files): + time = sample_times[i] + vmrs = make_vmr_dataframe(file,relevant_gases) + fpath = os.path.join(output_dir,'vmrs_time_%s'%time+'.dat') + vmrs.to_csv(fpath,sep='\t',index=False) + paths.append(fpath) + + if mixratfile: + print('mixingratio file for ARCiS is created ...') + mixrats = create_mixrat_df(file) + mixratpath=os.path.join(output_dir,'mixingratios_time_%s'%time+'.dat') + names=mixrats.columns.tolist() + indices=[0,1] #pressure and temperature + molecule_names = [i for j, i in enumerate(names) if j not in indices] + print(molecule_names) + #write number of species in first row and names in second row + with open(mixratpath, "w") as f: + f.write(f"{len(molecule_names)}\n") + for item in molecule_names: + f.write(str(item) + '\t') + f.write("\n") + # append dataframe data including pressure and temperature + mixrats.to_csv(mixratpath, mode="a", sep='\t',index=False,header=False) + mixratpaths.append(mixratpath) + return paths,mixratpaths + + +def create_tp_df(file): + + atm_profile = read_ncdf_profile(file, extra_keys=[]) + parr = atm_profile['p'][1::2]* 1e-5 # convert to bar and select only pressures at center of layers + df = pd.DataFrame(parr, columns=["Pbar"]) + df['temperature[K]']=atm_profile['t'][1::2] # again, select only temperatures at center of layers + return df + + +def get_tps(runname: str, nsamp: int): + + input_dir='/data3/leoni/PROTEUS/output/{}/'.format(runname) + output_dir='/data3/leoni/evolution_project/TPss/{}'.format(runname) + + #check if output directory exists + os.makedirs(output_dir, exist_ok=True) + + if nsamp>1: + plot_times, sample_times, files = sample_output(input_dir, nsamp=nsamp) + else: + allfiles = glob.glob(os.path.join(input_dir, 'data', '*_atm.nc')) + files=[natural_sort(allfiles)[-1]] + + paths=[] + for i,file in enumerate(files): + df= create_tp_df(file) + time=sample_times[i] + fpath = os.path.join(output_dir, 'tptime_%s'%time+'.dat') + df[::-1].to_csv(fpath,sep='\t',index=False) + paths.append(fpath) + + return sample_times,paths + + + +def config_ARCiS(input_file, tp_file_path, vmr_file_path, elementfile, species,mixratfile=False, mixrat_file_path='mixingratios.dat'): + + '''function which modifies the ARCiS input file by updating the elementfile from which the abundances are read + Input Tsurf is not mandatory since then ARCiS will converge to s surface temperature itself''' + + + vmrs=pd.read_csv(vmr_file_path,sep='\t').iloc[0] + + tp=pd.read_csv(tp_file_path,sep='\t') + Psurf=tp['Pbar'][0] + Tsurface=tp['temperature[K]'][0] + + output_lines = [] + + with open(input_file, "r") as f: + for line in f: + stripped_line = line.strip() + key = stripped_line.split("=")[0] + replaced = False + + if key in species: + output_lines.append(f"{key}={vmrs[key]}\n") + print(key,vmrs[key]) + replaced=True + + if replaced: + continue + + if key=="TPfile": + if mixratfile: + output_lines.append(f"TPfile={mixrat_file_path}\n") + else: + output_lines.append(f"TPfile={tp_file_path}\n") + + elif key=="elementfile": + output_lines.append(f"elementfile={elementfile}\n") + + elif key=="pmax": + output_lines.append("pmax="+str(Psurf)+"d0\n") + + elif key=="Pp": + output_lines.append("Pp="+str(Psurf)+"d0\n") + + elif key=="Tsurface": + output_lines.append("Tsurface="+str(Tsurface)+"d0\n") + + else: + output_lines.append(line) + + # Write the updated lines back to the file + with open(input_file, "w") as f: + f.writelines(output_lines) + +if __name__ == "__main__": + runname=sys.argv[1] + nsamp=int(sys.argv[2]) + time=int(sys.argv[3]) + mixratfile=bool(sys.argv[4]) + + vmrpaths,mixratpaths=get_chem_atmosphere(runname,nsamp) + sample_times,tppaths=get_tps(runname,nsamp) + + tp_file_path = next(t for t in tppaths if t.endswith("_{}.dat".format(time))) + vmr_file_path = next(vmr for vmr in vmrpaths if vmr.endswith("_{}.dat".format(time))) + + if mixratfile: + mixrat_file_path = next(vmr for vmr in mixratpaths if vmr.endswith("_{}.dat".format(time))) + else: + mixrat_file_path='mixingratios.dat' + #time=sample_times[sample-1] + #vmr_file_path=vmrpaths[sample-1] + + species=list(GASES_ARCiS) + + if mixratfile: + input_file='/data3/leoni/ARCiS/input_PROTEUS_mixratfile.dat' + else: + input_file='/data3/leoni/ARCiS/input_PROTEUS.dat' + + elementpath='/data3/leoni/evolution_project/elements_ARCiS/{}/{}/elements.dat'.format(runname,time) + get_element_abun(runname,time) + config_ARCiS(input_file, tp_file_path, vmr_file_path, elementpath,species,mixratfile=mixratfile,mixrat_file_path=mixrat_file_path) diff --git a/tools_leoni/edit_input_file.py b/tools_leoni/edit_input_file.py index 5515cbc26..c61437be9 100644 --- a/tools_leoni/edit_input_file.py +++ b/tools_leoni/edit_input_file.py @@ -5,8 +5,9 @@ from tomlkit import dumps, parse -def param_edit(inputfile,fO2,orbdist,Hocean,CHratio,silicates): +def param_edit(inputfile,fO2,orbdist,Hocean,CHratio,silicates:bool): ''' function which writes a new HELIOS parameter file using the newly calculated tp profile from Helios''' + with open(inputfile, "r") as f: data = parse(f.read()) @@ -14,10 +15,9 @@ def param_edit(inputfile,fO2,orbdist,Hocean,CHratio,silicates): data["params"]["out"]["path"] = 'gridrun_{}IW_{}AU_{}Hocean_{}CH_{}'.format(fO2,orbdist,Hocean,CHratio,silicates) data["orbit"]["semimajoraxis"] = float(orbdist) data["outgas"]["fO2_shift_IW"] = float(fO2) - data["outgas"]["silicates"] = bool(silicates) + data["outgas"]["silicates"] = silicates data["delivery"]["elements"]["H_oceans"] = float(Hocean) data["delivery"]["elements"]["CH_ratio"] = float(CHratio) - # write back with open(inputfile, "w") as f: f.write(dumps(data)) @@ -30,6 +30,6 @@ def param_edit(inputfile,fO2,orbdist,Hocean,CHratio,silicates): orbdist=sys.argv[3] Hocean=sys.argv[4] CHratio=sys.argv[5] - silicates=sys.argv[6] + silicates = sys.argv[6].lower() == "true" param_edit(inputfile,fO2,orbdist,Hocean,CHratio,silicates) diff --git a/tools_leoni/covert_to_ARCiSformat.py b/tools_leoni/read_in_time.py similarity index 94% rename from tools_leoni/covert_to_ARCiSformat.py rename to tools_leoni/read_in_time.py index 93aa95e40..e551ff8f0 100644 --- a/tools_leoni/covert_to_ARCiSformat.py +++ b/tools_leoni/read_in_time.py @@ -67,13 +67,13 @@ 'H2O', 'N2', 'O2', - 'H', 'SO', 'CH4', 'CO2', 'H2', 'H2S', - 'SO2') + 'SO2', + 'NH3') def make_vmr_dataframe(file,relevant_gases): @@ -81,14 +81,11 @@ def make_vmr_dataframe(file,relevant_gases): atm_profile = read_ncdf_profile(file, extra_keys=['x_gas']) parr = atm_profile['p'] [1::2]* 1e-5 # convert to bar and select only pressures at center of layers - print(parr) - print(len(parr)) df = pd.DataFrame(parr, columns=["Pbar"]) for i, gas in enumerate(relevant_gases): key = gas + '_vmr' if key in atm_profile.keys(): - print(key) df[gas] = list(atm_profile[key]) return df @@ -136,7 +133,6 @@ def create_tp_df(file): atm_profile = read_ncdf_profile(file, extra_keys=[]) parr = atm_profile['p'][1::2]* 1e-5 # convert to bar and select only pressures at center of layers - print(len(parr)) df = pd.DataFrame(parr, columns=["Pbar"]) df['temperature[K]']=atm_profile['t'][1::2] # again, select only temperatures at center of layers return df @@ -160,10 +156,10 @@ def get_tps(runname: str, nsamp: int): df= create_tp_df(file) time=sample_times[i] fpath = os.path.join(output_dir, 'tp_time_%s'%time+'.dat') - df.to_csv(fpath,sep='\t',index=False) + df[::-1].to_csv(fpath,sep='\t',index=False) paths.append(fpath) - return paths + return sample_times,paths @@ -189,7 +185,6 @@ def config_ARCiS(input_file, tp_file_path, vmr_file_path, species): if key in species: output_lines.append(f"{key}={vmrs[key]}\n") - print(f"{key}={vmrs[key]}") replaced=True if replaced: @@ -210,21 +205,25 @@ def config_ARCiS(input_file, tp_file_path, vmr_file_path, species): else: output_lines.append(line) - print(output_lines) # Write the updated lines back to the file with open(input_file, "w") as f: f.writelines(output_lines) if __name__ == "__main__": runname=sys.argv[1] - nsamp = 5 + nsamp=int(sys.argv[2]) + sample=int(sys.argv[3]) + vmrpaths=get_chem_atmosphere(runname,nsamp) - tppaths=get_tps(runname,nsamp) + sample_times,tppaths=get_tps(runname,nsamp) - tp_file_path=tppaths[0] - vmr_file_path=vmrpaths[0] + tp_file_path=tppaths[sample-1] + time=sample_times[sample-1] + vmr_file_path=vmrpaths[sample-1] species=list(GASES_ARCiS) input_file='/data3/leoni/ARCiS/input_PROTEUS.dat' config_ARCiS(input_file, tp_file_path, vmr_file_path, species) + + sys.exit(time) From 5816652e5915849c583d5449ae1962f9143e2299 Mon Sep 17 00:00:00 2001 From: Leoni Janssen Date: Thu, 12 Mar 2026 18:24:15 +0100 Subject: [PATCH 25/26] changed back to the old abuundance conversion by changing the 0 conversion of logarithms from the lavatmos output element file --- elementfiles/element_abundances_0.0.dat | 26 +++++++++---------- elementfiles/element_abundances_1.0.dat | 26 +++++++++---------- .../element_abundances_10092.0000092.dat | 20 ++++++++++++++ elementfiles/element_abundances_2.0.dat | 26 +++++++++---------- .../element_abundances_20092.0010184.dat | 20 ++++++++++++++ elementfiles/element_abundances_32.0.dat | 26 +++++++++---------- .../element_abundances_36092.00263312.dat | 20 ++++++++++++++ elementfiles/element_abundances_62.0.dat | 26 +++++++++---------- elementfiles/element_abundances_92.0.dat | 26 +++++++++---------- src/proteus/outgas/lavatmos.py | 10 +++---- 10 files changed, 143 insertions(+), 83 deletions(-) create mode 100644 elementfiles/element_abundances_10092.0000092.dat create mode 100644 elementfiles/element_abundances_20092.0010184.dat create mode 100644 elementfiles/element_abundances_36092.00263312.dat diff --git a/elementfiles/element_abundances_0.0.dat b/elementfiles/element_abundances_0.0.dat index c56839441..5b2e5a1a9 100644 --- a/elementfiles/element_abundances_0.0.dat +++ b/elementfiles/element_abundances_0.0.dat @@ -1,20 +1,20 @@ # Abundances determined using atmosphere_builder -C 31.326347796198355 -H 31.50347327914622 +C 31.326347796771508 +H 31.503473277542735 He 0 -N 30.886304788116604 -O 31.522651092808786 +N 30.886304792436476 +O 31.522651093039535 P 0 -S 26.288038869561884 -Si 30.676136543100064 -Ti 25.915301073658725 +S 26.288038869286613 +Si 30.67613654270745 +Ti 25.915301074111213 V 0 Cl 0 -K 28.502073039190474 -Na 29.718582602778298 -Mg 29.398675491608774 +K 28.502073039357807 +Na 29.718582602944505 +Mg 29.398675491267014 F 0 -Ca 25.669421847087918 -Fe 29.556083415787615 -Al 26.906354079582016 +Ca 25.669421846784097 +Fe 29.55608341546052 +Al 26.906354079362615 e- 0 diff --git a/elementfiles/element_abundances_1.0.dat b/elementfiles/element_abundances_1.0.dat index 09c2d67ad..47abd0638 100644 --- a/elementfiles/element_abundances_1.0.dat +++ b/elementfiles/element_abundances_1.0.dat @@ -1,20 +1,20 @@ # Abundances determined using atmosphere_builder -C 31.414535133816216 -H 31.401084235667444 +C 31.32634779677555 +H 31.503473277692244 He 0 -N 30.95664230259505 -O 31.548434036398376 +N 30.886304791537043 +O 31.52265109308541 P 0 -S 26.17570111372174 -Si 30.555109644630896 -Ti 25.74903797739576 +S 26.288038865223825 +Si 30.676136542798282 +Ti 25.91530107421823 V 0 Cl 0 -K 28.35055306834164 -Na 29.567121765309274 -Mg 29.275055015837705 +K 28.50207303945936 +Na 29.71858260304604 +Mg 29.398675491358823 F 0 -Ca 25.54385647945451 -Fe 29.43171222048319 -Al 26.776965962597217 +Ca 25.66942184687663 +Fe 29.556083415552607 +Al 26.90635407945676 e- 0 diff --git a/elementfiles/element_abundances_10092.0000092.dat b/elementfiles/element_abundances_10092.0000092.dat new file mode 100644 index 000000000..282939a51 --- /dev/null +++ b/elementfiles/element_abundances_10092.0000092.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 30.87220478568377 +H 31.704448238886496 +He 0 +N 30.55818339972982 +O 31.440951549381463 +P 0 +S 26.503252904375966 +Si 30.9278207990945 +Ti 26.24740286121829 +V 0 +Cl 0 +K 28.80665233874551 +Na 30.02313301323255 +Mg 29.656074706391184 +F 0 +Ca 25.93002252632664 +Fe 29.81526511384669 +Al 27.176091960274462 +e- 0 diff --git a/elementfiles/element_abundances_2.0.dat b/elementfiles/element_abundances_2.0.dat index ebeb9390e..dc541e4bf 100644 --- a/elementfiles/element_abundances_2.0.dat +++ b/elementfiles/element_abundances_2.0.dat @@ -1,20 +1,20 @@ # Abundances determined using atmosphere_builder -C 31.4625232641181 -H 31.318717688784375 +C 31.326347796778787 +H 31.503473277841003 He 0 -N 30.992482443028514 -O 31.565176574119832 +N 30.886304790636864 +O 31.522651093130683 P 0 -S 26.084478916150566 -Si 30.46469320036851 -Ti 25.62644275572514 +S 26.2880388611602 +Si 30.676136542901123 +Ti 25.915301074327562 V 0 Cl 0 -K 28.237740842549552 -Na 29.454350654811723 -Mg 29.18294191976141 +K 28.502073039566504 +Na 29.718582603153173 +Mg 29.39867549146205 F 0 -Ca 25.450460344752507 -Fe 29.33910488085414 -Al 26.681809888099565 +Ca 25.669421846980153 +Fe 29.55608341565595 +Al 26.906354079560934 e- 0 diff --git a/elementfiles/element_abundances_20092.0010184.dat b/elementfiles/element_abundances_20092.0010184.dat new file mode 100644 index 000000000..8e2ca9972 --- /dev/null +++ b/elementfiles/element_abundances_20092.0010184.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 30.538561999082344 +H 31.732869964147646 +He 0 +N 30.287894686529288 +O 31.437787692772293 +P 0 +S 26.536225938762605 +Si 31.011998416211703 +Ti 26.40019448145818 +V 0 +Cl 0 +K 28.933236294924495 +Na 30.14961337808371 +Mg 29.745521155782722 +F 0 +Ca 26.023284746089036 +Fe 29.90620455581912 +Al 27.279942656841097 +e- 0 diff --git a/elementfiles/element_abundances_32.0.dat b/elementfiles/element_abundances_32.0.dat index 70ffa2185..01446a9b3 100644 --- a/elementfiles/element_abundances_32.0.dat +++ b/elementfiles/element_abundances_32.0.dat @@ -1,20 +1,20 @@ # Abundances determined using atmosphere_builder -C 31.48749401834572 -H 31.264133638415274 +C 31.326028970727414 +H 31.504113487554406 He 0 -N 31.00985007086905 -O 31.57458564517812 +N 30.886097840855662 +O 31.522332310567077 P 0 -S 26.023521503485902 -Si 30.40603388545155 -Ti 25.546648387971327 +S 26.288716393345055 +Si 30.67578503732293 +Ti 25.914067023132514 V 0 Cl 0 -K 28.16506874411077 -Na 29.381786988602414 -Mg 29.12368772322488 +K 28.502168047518616 +Na 29.718760834650816 +Mg 29.39871601664718 F 0 -Ca 25.389714434204368 -Fe 29.279802878939282 -Al 26.619679405555093 +Ca 25.66872749117737 +Fe 29.55637426551223 +Al 26.904864723576097 e- 0 diff --git a/elementfiles/element_abundances_36092.00263312.dat b/elementfiles/element_abundances_36092.00263312.dat new file mode 100644 index 000000000..6c970058b --- /dev/null +++ b/elementfiles/element_abundances_36092.00263312.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 30.562129626057416 +H 31.855318910754406 +He 0 +N 30.327477717399947 +O 30.621127720674327 +P 0 +S 26.65975926428863 +Si 31.1553700287609 +Ti 26.57217757475871 +V 0 +Cl 0 +K 29.0938868559499 +Na 30.3102176285252 +Mg 29.891325693747213 +F 0 +Ca 26.17082473515859 +Fe 30.052690696564294 +Al 27.432311470518385 +e- 0 diff --git a/elementfiles/element_abundances_62.0.dat b/elementfiles/element_abundances_62.0.dat index 78093ae0b..88c452f5c 100644 --- a/elementfiles/element_abundances_62.0.dat +++ b/elementfiles/element_abundances_62.0.dat @@ -1,20 +1,20 @@ # Abundances determined using atmosphere_builder -C 31.503026630666085 -H 31.224229939937885 +C 31.325555721855125 +H 31.50455610635745 He 0 -N 31.01999547076154 -O 31.580805529176253 +N 30.885731460259304 +O 31.52220019336049 P 0 -S 25.978655566327035 -Si 30.364770031654324 -Ti 25.49099969231338 +S 26.289194601672122 +Si 30.67629723542361 +Ti 25.91475192858422 V 0 Cl 0 -K 28.11336771266993 -Na 29.33010404976217 -Mg 29.081736616450446 +K 28.502794698480184 +Na 29.71938725679771 +Mg 29.399238566502312 F 0 -Ca 25.347238330564693 -Fe 29.23764902010418 -Al 26.57701065618799 +Ca 25.669257776777563 +Fe 29.556899818582707 +Al 26.90541221561176 e- 0 diff --git a/elementfiles/element_abundances_92.0.dat b/elementfiles/element_abundances_92.0.dat index 77e8c75b8..add53abc2 100644 --- a/elementfiles/element_abundances_92.0.dat +++ b/elementfiles/element_abundances_92.0.dat @@ -1,20 +1,20 @@ # Abundances determined using atmosphere_builder -C 31.514390267979568 -H 31.191559514476424 +C 31.325082268980058 +H 31.50499787470571 He 0 -N 31.027037935776328 -O 31.585493147618223 +N 30.885364831241596 +O 31.522068211370406 P 0 -S 25.941969272125327 -Si 30.331396591379168 -Ti 25.44600495158669 +S 26.28967188232741 +Si 30.676808800342766 +Ti 25.915435914068937 V 0 Cl 0 -K 28.071446630122665 -Na 29.288197574292198 -Mg 29.047823390633866 +K 28.503420511946935 +Na 29.720012841796706 +Mg 29.39976046982614 F 0 -Ca 25.312911787510274 -Fe 29.203576255872356 -Al 26.542690465339234 +Ca 25.669787405555226 +Fe 29.55742472115669 +Al 26.905959041091847 e- 0 diff --git a/src/proteus/outgas/lavatmos.py b/src/proteus/outgas/lavatmos.py index cec5f95a7..f9cc60dbd 100644 --- a/src/proteus/outgas/lavatmos.py +++ b/src/proteus/outgas/lavatmos.py @@ -295,7 +295,7 @@ def read_in_element_fracs(input_path,time): # make first column the headers and second column the data row df = pd.DataFrame([df[1].values], columns=df[0].values) - df_frac= np.power(10, df-12) + df_frac = (10**(df - 12)).where(df != 0, 0) #dataframe has been multiplied by 1e20, so need to renormalise to get real fractions return df_frac/1e20 @@ -427,10 +427,10 @@ def compute_silicate_outgassing(config: Config, hf_row: dict): for e in element_list: log.info('element: %s, %s',e, element_fracs[e][0]) log.info('total mass of element before updating with lavatmos: %s',hf_row[e + '_kg_atm']) - if e in input_eles and e!='O': - hf_row[e + '_kg_atm'] = hf_row[e + '_kg_atm'] - else: - hf_row[e + '_kg_atm'] = element_fracs[e][0] * M_atmo_new * species_lib[e].weight / mmw_elements + #if e in input_eles and e!='O': + hf_row[e + '_kg_atm'] = hf_row[e + '_kg_atm'] + #else: + hf_row[e + '_kg_atm'] = element_fracs[e][0] * M_atmo_new * species_lib[e].weight / mmw_elements hf_row[e + '_kg_total'] = (hf_row[e + '_kg_atm'] + hf_row[e + '_kg_solid'] + hf_row[e + '_kg_liquid']) log.info('total mass of element after updating with lavatmos: %s',hf_row[e + '_kg_atm']) From 511fb9ed911a2904db794a7c5c409f09802056ff Mon Sep 17 00:00:00 2001 From: Leoni Janssen Date: Tue, 17 Mar 2026 17:58:22 +0100 Subject: [PATCH 26/26] updated the bash script and python routines how to run the proteus grid: split the convert_ARCiSformat.py into two routines --- elementfiles/element_abundances_0.0.dat | 26 +-- elementfiles/element_abundances_1.0.dat | 26 +-- .../element_abundances_10092.0000092.dat | 26 +-- .../element_abundances_101248.85193439838.dat | 20 ++ .../element_abundances_104641.08200679332.dat | 20 ++ .../element_abundances_105900.41858576344.dat | 20 ++ .../element_abundances_105913.58789933729.dat | 20 ++ .../element_abundances_106247.24942115354.dat | 20 ++ .../element_abundances_1066380.091816709.dat | 20 ++ .../element_abundances_1066885.2583350732.dat | 20 ++ .../element_abundances_108246.60067925722.dat | 20 ++ .../element_abundances_112295.11169366694.dat | 20 ++ .../element_abundances_112652.01961555614.dat | 20 ++ .../element_abundances_1128749.9466383653.dat | 20 ++ .../element_abundances_1133223.9695499486.dat | 20 ++ .../element_abundances_113340.73409906306.dat | 20 ++ .../element_abundances_113636.52311865713.dat | 20 ++ .../element_abundances_1149734.6870918784.dat | 20 ++ .../element_abundances_115696.34587109213.dat | 20 ++ .../element_abundances_116247.26004587847.dat | 20 ++ .../element_abundances_11658567.006774511.dat | 20 ++ .../element_abundances_118652.02417467521.dat | 20 ++ .../element_abundances_1189893.3532400012.dat | 20 ++ .../element_abundances_1189907.8520920817.dat | 20 ++ .../element_abundances_1231464.4297983614.dat | 20 ++ .../element_abundances_1236794.808950034.dat | 20 ++ .../element_abundances_12483719.898671612.dat | 20 ++ .../element_abundances_12483734.39916113.dat | 20 ++ .../element_abundances_12525295.670139339.dat | 20 ++ .../element_abundances_126247.27167060447.dat | 20 ++ .../element_abundances_128652.03603987762.dat | 20 ++ .../element_abundances_1303092.7095017824.dat | 20 ++ .../element_abundances_1308741.605356239.dat | 20 ++ .../element_abundances_134800.13592790216.dat | 20 ++ .../element_abundances_135083.43267812103.dat | 20 ++ .../element_abundances_136247.28429533163.dat | 20 ++ .../element_abundances_137935.80596413644.dat | 20 ++ .../element_abundances_13851.540243927773.dat | 20 ++ .../element_abundances_13851.571967890028.dat | 20 ++ .../element_abundances_140644.28179969772.dat | 20 ++ .../element_abundances_1409979.1118734349.dat | 20 ++ .../element_abundances_1417821.4787787495.dat | 20 ++ .../element_abundances_142208.87227055765.dat | 20 ++ .../element_abundances_144299.5775328795.dat | 20 ++ .../element_abundances_144666.8640716984.dat | 20 ++ .../element_abundances_144699.2143378657.dat | 20 ++ .../element_abundances_146247.29792006005.dat | 20 ++ .../element_abundances_1496383.5672867657.dat | 20 ++ .../element_abundances_151323.55043223692.dat | 20 ++ .../element_abundances_15347933.391977733.dat | 20 ++ .../element_abundances_156247.31254478983.dat | 20 ++ .../element_abundances_158188.0001454483.dat | 20 ++ .../element_abundances_1619392.1905037467.dat | 20 ++ .../element_abundances_1619406.6894180984.dat | 20 ++ .../element_abundances_162277.40360978342.dat | 20 ++ .../element_abundances_16247.198798660364.dat | 20 ++ .../element_abundances_16496.18995811324.dat | 20 ++ .../element_abundances_1660963.4456072713.dat | 20 ++ .../element_abundances_1661.4690748796243.dat | 20 ++ .../element_abundances_166247.3281695211.dat | 20 ++ .../element_abundances_176247.3447942539.dat | 20 ++ .../element_abundances_177307.73883882235.dat | 20 ++ .../element_abundances_178188.03278304992.dat | 20 ++ .../element_abundances_179172.53693135455.dat | 20 ++ .../element_abundances_180081.62725064292.dat | 20 ++ .../element_abundances_180430.01906572023.dat | 20 ++ .../element_abundances_184188.04127432837.dat | 20 ++ .../element_abundances_186247.36241898837.dat | 20 ++ .../element_abundances_190081.64525880566.dat | 20 ++ .../element_abundances_190430.03710872214.dat | 20 ++ .../element_abundances_194188.05969313247.dat | 20 ++ .../element_abundances_1944.6224992904913.dat | 20 ++ .../element_abundances_1959737.5439641965.dat | 20 ++ .../element_abundances_196247.3810437246.dat | 20 ++ .../element_abundances_19689514.663194325.dat | 20 ++ .../element_abundances_19689529.164728574.dat | 20 ++ .../element_abundances_19731093.430152837.dat | 20 ++ .../element_abundances_197837.63052414532.dat | 20 ++ .../element_abundances_198083.80630259047.dat | 20 ++ .../element_abundances_1995937.6102277595.dat | 20 ++ elementfiles/element_abundances_2.0.dat | 26 +-- .../element_abundances_20092.0010184.dat | 26 +-- .../element_abundances_202237.15327629726.dat | 20 ++ .../element_abundances_202325.63724276182.dat | 20 ++ .../element_abundances_203471.83570159713.dat | 20 ++ .../element_abundances_206081.67407186603.dat | 20 ++ .../element_abundances_206180.31331218343.dat | 20 ++ .../element_abundances_206247.4006684627.dat | 20 ++ .../element_abundances_206430.0659775252.dat | 20 ++ .../element_abundances_207744.90480841248.dat | 20 ++ .../element_abundances_209665.52893557615.dat | 20 ++ .../element_abundances_210039.81540069683.dat | 20 ++ .../element_abundances_2105018.2332329913.dat | 20 ++ .../element_abundances_21076.50361024537.dat | 20 ++ .../element_abundances_212325.65747532554.dat | 20 ++ .../element_abundances_21250919.608302888.dat | 20 ++ .../element_abundances_212533.6091627321.dat | 20 ++ .../element_abundances_216247.4212932028.dat | 20 ++ .../element_abundances_2183580.861609474.dat | 20 ++ .../element_abundances_218882.44028935902.dat | 20 ++ .../element_abundances_222210.6912566784.dat | 20 ++ .../element_abundances_226247.44291794492.dat | 20 ++ .../element_abundances_228196.28514835323.dat | 20 ++ .../element_abundances_228325.6898474275.dat | 20 ++ .../element_abundances_2306590.33012574.dat | 20 ++ .../element_abundances_2306604.8291397253.dat | 20 ++ .../element_abundances_231681.72017276264.dat | 20 ++ .../element_abundances_232030.1121676101.dat | 20 ++ .../element_abundances_232245.6130367092.dat | 20 ++ .../element_abundances_232245.66160723867.dat | 20 ++ .../element_abundances_232277.34205576548.dat | 20 ++ .../element_abundances_232277.39062659835.dat | 20 ++ .../element_abundances_2348161.870901527.dat | 20 ++ .../element_abundances_236047.1749844709.dat | 20 ++ .../element_abundances_236148.99023894512.dat | 20 ++ .../element_abundances_236247.4655426892.dat | 20 ++ .../element_abundances_23851.541629081796.dat | 20 ++ .../element_abundances_23851.573353047224.dat | 20 ++ .../element_abundances_240576.074826936.dat | 20 ++ .../element_abundances_242277.36528349968.dat | 20 ++ .../element_abundances_242277.4138543374.dat | 20 ++ .../element_abundances_243301.88680014445.dat | 20 ++ .../element_abundances_243318.6930994205.dat | 20 ++ .../element_abundances_246247.48916743576.dat | 20 ++ .../element_abundances_252192.86014480845.dat | 20 ++ .../element_abundances_252945.7169240378.dat | 20 ++ .../element_abundances_253301.91113033314.dat | 20 ++ .../element_abundances_253318.71743128978.dat | 20 ++ .../element_abundances_253925.74164279067.dat | 20 ++ .../element_abundances_256127.61205938825.dat | 20 ++ .../element_abundances_256247.51379218468.dat | 20 ++ .../element_abundances_26092.000023919998.dat | 20 ++ .../element_abundances_26247.200423380244.dat | 20 ++ .../element_abundances_263045.6002419173.dat | 20 ++ .../element_abundances_263301.9364605243.dat | 20 ++ .../element_abundances_263318.74276316154.dat | 20 ++ .../element_abundances_26496.191607732235.dat | 20 ++ .../element_abundances_266247.53941693605.dat | 20 ++ .../element_abundances_268264.8529118522.dat | 20 ++ .../element_abundances_272641.7939341972.dat | 20 ++ .../element_abundances_272990.18607174593.dat | 20 ++ .../element_abundances_276247.56604169.dat | 20 ++ .../element_abundances_278326.4404665442.dat | 20 ++ .../element_abundances_279301.9769888301.dat | 20 ++ .../element_abundances_279318.78329415637.dat | 20 ++ .../element_abundances_27942436.208924945.dat | 20 ++ .../element_abundances_2839351.0353094153.dat | 20 ++ .../element_abundances_284030.1590316704.dat | 20 ++ .../element_abundances_286247.5936664466.dat | 20 ++ .../element_abundances_288256.311379256.dat | 20 ++ .../element_abundances_289045.6686337734.dat | 20 ++ .../element_abundances_289160.26954839175.dat | 20 ++ .../element_abundances_289264.9130765203.dat | 20 ++ .../element_abundances_294885.82451537176.dat | 20 ++ .../element_abundances_295034.4401347139.dat | 20 ++ .../element_abundances_296247.622291206.dat | 20 ++ .../element_abundances_29689514.663194325.dat | 20 ++ .../element_abundances_29689529.164728574.dat | 20 ++ .../element_abundances_29731093.430152837.dat | 20 ++ .../element_abundances_299160.2984644187.dat | 20 ++ .../element_abundances_300164.33036581654.dat | 20 ++ .../element_abundances_30092.003027600098.dat | 20 ++ .../element_abundances_301529.1705235336.dat | 20 ++ .../element_abundances_30317578.97656208.dat | 20 ++ .../element_abundances_304902.04183411936.dat | 20 ++ .../element_abundances_304918.84814374807.dat | 20 ++ .../element_abundances_305034.4696381579.dat | 20 ++ .../element_abundances_305310.2486647136.dat | 20 ++ .../element_abundances_305313.680649544.dat | 20 ++ .../element_abundances_306247.6519159682.dat | 20 ++ .../element_abundances_3095451.218022192.dat | 20 ++ .../element_abundances_31076.505717895732.dat | 20 ++ .../element_abundances_311529.2006764506.dat | 20 ++ .../element_abundances_312602.55686898023.dat | 20 ++ .../element_abundances_315160.34473006177.dat | 20 ++ .../element_abundances_315310.27919573843.dat | 20 ++ .../element_abundances_315313.71118091204.dat | 20 ++ .../element_abundances_316247.6825407334.dat | 20 ++ .../element_abundances_317641.73510571645.dat | 20 ++ .../element_abundances_318033.85657612095.dat | 20 ++ elementfiles/element_abundances_32.0.dat | 26 +-- .../element_abundances_3204533.0403597783.dat | 20 ++ .../element_abundances_321034.51684366836.dat | 20 ++ .../element_abundances_32217693.190671787.dat | 20 ++ .../element_abundances_326247.7141655017.dat | 20 ++ .../element_abundances_327529.24892111786.dat | 20 ++ .../element_abundances_3283096.5325258067.dat | 20 ++ .../element_abundances_329788.19560689235.dat | 20 ++ .../element_abundances_331310.3280453782.dat | 20 ++ .../element_abundances_331313.7600311009.dat | 20 ++ .../element_abundances_336247.7467902731.dat | 20 ++ .../element_abundances_33737784.56195955.dat | 20 ++ .../element_abundances_338177.91195249255.dat | 20 ++ .../element_abundances_33851.54401423596.dat | 20 ++ .../element_abundances_33851.575738204556.dat | 20 ++ .../element_abundances_338526.3043183633.dat | 20 ++ .../element_abundances_3406107.353520929.dat | 20 ++ .../element_abundances_3406121.8526943284.dat | 20 ++ .../element_abundances_340760.41875509074.dat | 20 ++ .../element_abundances_344124.58527572174.dat | 20 ++ .../element_abundances_3447679.351372336.dat | 20 ++ .../element_abundances_346247.7804150478.dat | 20 ++ .../element_abundances_346634.592372485.dat | 20 ++ .../element_abundances_346923.74483638286.dat | 20 ++ .../element_abundances_34953857.65898976.dat | 20 ++ .../element_abundances_3497.2872375278293.dat | 20 ++ .../element_abundances_353129.32611258543.dat | 20 ++ .../element_abundances_3543041.8283855906.dat | 20 ++ .../element_abundances_355117.96568008646.dat | 20 ++ .../element_abundances_356247.8150398258.dat | 20 ++ .../element_abundances_356910.40620480187.dat | 20 ++ .../element_abundances_356913.838191403.dat | 20 ++ .../element_abundances_356923.7795287573.dat | 20 ++ .../element_abundances_357287.64676137205.dat | 20 ++ .../element_abundances_357288.77501205594.dat | 20 ++ .../element_abundances_36092.00263312.dat | 26 +-- .../element_abundances_3618.61258293657.dat | 20 ++ .../element_abundances_36247.20304810029.dat | 20 ++ .../element_abundances_365589.5266374889.dat | 20 ++ .../element_abundances_365677.9288911048.dat | 20 ++ .../element_abundances_366247.8506646073.dat | 20 ++ .../element_abundances_367287.6824901367.dat | 20 ++ .../element_abundances_367288.81074093346.dat | 20 ++ .../element_abundances_367600.1162713222.dat | 20 ++ .../element_abundances_367721.47136916424.dat | 20 ++ .../element_abundances_36899574.61423809.dat | 20 ++ .../element_abundances_372923.83503655647.dat | 20 ++ .../element_abundances_376247.88728939235.dat | 20 ++ .../element_abundances_377287.71921890497.dat | 20 ++ .../element_abundances_377288.84746981453.dat | 20 ++ .../element_abundances_377721.50814131135.dat | 20 ++ .../element_abundances_381720.5371951371.dat | 20 ++ .../element_abundances_3851.5398587737877.dat | 20 ++ .../element_abundances_3851.57158273287.dat | 20 ++ .../element_abundances_386247.92491418106.dat | 20 ++ .../element_abundances_387287.7569476769.dat | 20 ++ .../element_abundances_387288.88519869925.dat | 20 ++ .../element_abundances_393320.7653433659.dat | 20 ++ .../element_abundances_393721.5669767467.dat | 20 ++ .../element_abundances_394722.5354036104.dat | 20 ++ .../element_abundances_396247.96353897353.dat | 20 ++ .../element_abundances_39689514.66319433.dat | 20 ++ .../element_abundances_39689529.164728574.dat | 20 ++ .../element_abundances_39731093.43015283.dat | 20 ++ .../element_abundances_398523.9238490351.dat | 20 ++ .../element_abundances_398877.5304493238.dat | 20 ++ .../element_abundances_40012721.74263542.dat | 20 ++ .../element_abundances_403287.817313712.dat | 20 ++ .../element_abundances_403288.9455649148.dat | 20 ++ .../element_abundances_404722.5748758639.dat | 20 ++ .../element_abundances_406248.0031637699.dat | 20 ++ .../element_abundances_408877.57033707685.dat | 20 ++ .../element_abundances_415079.9345990785.dat | 20 ++ .../element_abundances_416248.0437885702.dat | 20 ++ .../element_abundances_417.4408232539793.dat | 20 ++ .../element_abundances_418877.6112248339.dat | 20 ++ .../element_abundances_419321.6611134433.dat | 20 ++ .../element_abundances_420722.63803146954.dat | 20 ++ .../element_abundances_420778.4298562734.dat | 20 ++ .../element_abundances_42532.537147565.dat | 20 ++ .../element_abundances_426248.0854133746.dat | 20 ++ .../element_abundances_428877.65311259497.dat | 20 ++ .../element_abundances_428887.91389936814.dat | 20 ++ .../element_abundances_428889.04215085966.dat | 20 ++ .../element_abundances_430817.7603962677.dat | 20 ++ .../element_abundances_436248.12803818315.dat | 20 ++ .../element_abundances_441387.8784899409.dat | 20 ++ .../element_abundances_443035.70078176504.dat | 20 ++ .../element_abundances_443384.0935129511.dat | 20 ++ .../element_abundances_444877.72013301274.dat | 20 ++ .../element_abundances_446248.17166299594.dat | 20 ++ .../element_abundances_446322.73908043856.dat | 20 ++ .../element_abundances_447256.72669921134.dat | 20 ++ .../element_abundances_44993757.14807115.dat | 20 ++ .../element_abundances_45073390.06298962.dat | 20 ++ .../element_abundances_45120298.52614186.dat | 20 ++ .../element_abundances_45157825.29666365.dat | 20 ++ .../element_abundances_451802.3543921758.dat | 20 ++ .../element_abundances_45187846.713081084.dat | 20 ++ .../element_abundances_45235880.97934898.dat | 20 ++ .../element_abundances_45312735.80537761.dat | 20 ++ .../element_abundances_45375.76396432932.dat | 20 ++ .../element_abundances_45435703.52702342.dat | 20 ++ .../element_abundances_456248.2162878131.dat | 20 ++ .../element_abundances_45632451.881656714.dat | 20 ++ .../element_abundances_45947249.24906998.dat | 20 ++ .../element_abundances_460281.8117321579.dat | 20 ++ .../element_abundances_46092.00624232026.dat | 20 ++ .../element_abundances_46247.20667282059.dat | 20 ++ .../element_abundances_46450925.03693121.dat | 20 ++ .../element_abundances_466248.2619126347.dat | 20 ++ .../element_abundances_4668947.097307472.dat | 20 ++ .../element_abundances_469848.068436418.dat | 20 ++ .../element_abundances_469849.1966883715.dat | 20 ++ .../element_abundances_470477.8273656812.dat | 20 ++ .../element_abundances_470728.6111094832.dat | 20 ++ .../element_abundances_470743.1098572943.dat | 20 ++ .../element_abundances_47076.509090136315.dat | 20 ++ .../element_abundances_47147699.712703936.dat | 20 ++ .../element_abundances_47184511.08880002.dat | 20 ++ .../element_abundances_476248.3085374609.dat | 20 ++ .../element_abundances_480374.8001658886.dat | 20 ++ .../element_abundances_480728.6581823443.dat | 20 ++ .../element_abundances_480743.1569316053.dat | 20 ++ .../element_abundances_48084.23729292775.dat | 20 ++ .../element_abundances_4854672.990493284.dat | 20 ++ .../element_abundances_486248.3561622918.dat | 20 ++ .../element_abundances_490728.7062552101.dat | 20 ++ .../element_abundances_490743.205005921.dat | 20 ++ .../element_abundances_49577.342793754.dat | 20 ++ .../element_abundances_4963756.731762637.dat | 20 ++ .../element_abundances_49648.82631560399.dat | 20 ++ .../element_abundances_49689514.66319433.dat | 20 ++ .../element_abundances_49689529.164728574.dat | 20 ++ .../element_abundances_49731093.43015283.dat | 20 ++ .../element_abundances_49780.863602481695.dat | 20 ++ .../element_abundances_49781.003633519795.dat | 20 ++ .../element_abundances_500728.75532808073.dat | 20 ++ .../element_abundances_500743.25408024155.dat | 20 ++ .../element_abundances_502248.4323620211.dat | 20 ++ .../element_abundances_508939.2314005431.dat | 20 ++ .../element_abundances_511019.08486946573.dat | 20 ++ .../element_abundances_511437.9989379507.dat | 20 ++ .../element_abundances_512299.3887068774.dat | 20 ++ .../element_abundances_5165334.590953232.dat | 20 ++ .../element_abundances_5165349.090381693.dat | 20 ++ .../element_abundances_516728.83384467376.dat | 20 ++ .../element_abundances_516743.3325991544.dat | 20 ++ .../element_abundances_51692.000047472.dat | 20 ++ .../element_abundances_5206907.320125631.dat | 20 ++ .../element_abundances_52092.00680784.dat | 20 ++ .../element_abundances_522299.4399368163.dat | 20 ++ .../element_abundances_52532.54140081872.dat | 20 ++ .../element_abundances_525818.0527221012.dat | 20 ++ .../element_abundances_527848.5542815881.dat | 20 ++ .../element_abundances_532299.4921667603.dat | 20 ++ .../element_abundances_542299.5453967095.dat | 20 ++ .../element_abundances_542328.9594712226.dat | 20 ++ .../element_abundances_542343.4582294149.dat | 20 ++ .../element_abundances_548328.6518172416.dat | 20 ++ .../element_abundances_552114.6299057301.dat | 20 ++ .../element_abundances_55375.76850190572.dat | 20 ++ .../element_abundances_558299.6305646282.dat | 20 ++ .../element_abundances_56247.21129754126.dat | 20 ++ .../element_abundances_58084.242101351476.dat | 20 ++ .../element_abundances_581096.8078742871.dat | 20 ++ .../element_abundances_583289.1604737007.dat | 20 ++ .../element_abundances_583303.6592378317.dat | 20 ++ .../element_abundances_583899.7668332981.dat | 20 ++ .../element_abundances_59577.347751488276.dat | 20 ++ .../element_abundances_59648.83128048662.dat | 20 ++ .../element_abundances_59689514.66319433.dat | 20 ++ .../element_abundances_59689529.164728574.dat | 20 ++ .../element_abundances_59731093.43015283.dat | 20 ++ .../element_abundances_59780.86858056806.dat | 20 ++ .../element_abundances_59781.00861162016.dat | 20 ++ .../element_abundances_610808.1629086011.dat | 20 ++ .../element_abundances_611156.5562242916.dat | 20 ++ elementfiles/element_abundances_62.0.dat | 26 +-- .../element_abundances_62092.01201704068.dat | 20 ++ .../element_abundances_624859.9848631701.dat | 20 ++ .../element_abundances_62523.73937651717.dat | 20 ++ .../element_abundances_630676.0383060105.dat | 20 ++ .../element_abundances_633525.85756556.dat | 20 ++ .../element_abundances_63639.42912723771.dat | 20 ++ .../element_abundances_6470395.5275824815.dat | 20 ++ .../element_abundances_648825.4820776657.dat | 20 ++ .../element_abundances_648839.9808512987.dat | 20 ++ .../element_abundances_649996.5138713747.dat | 20 ++ .../element_abundances_656.8139139887417.dat | 20 ++ .../element_abundances_66247.21692226239.dat | 20 ++ .../element_abundances_664521.7253020853.dat | 20 ++ .../element_abundances_68532.54820602467.dat | 20 ++ .../element_abundances_690396.3337109651.dat | 20 ++ .../element_abundances_6944.576627495595.dat | 20 ++ .../element_abundances_69689514.66319433.dat | 20 ++ .../element_abundances_69689529.16472858.dat | 20 ++ .../element_abundances_69731093.43015283.dat | 20 ++ .../element_abundances_699253.2166432283.dat | 20 ++ .../element_abundances_71375.77576202794.dat | 20 ++ .../element_abundances_71504.83212265192.dat | 20 ++ .../element_abundances_71505.1231199585.dat | 20 ++ .../element_abundances_71692.01138587252.dat | 20 ++ .../element_abundances_717412.3370715966.dat | 20 ++ .../element_abundances_719887.2750361603.dat | 20 ++ .../element_abundances_720237.8669689845.dat | 20 ++ .../element_abundances_7219.3038213961945.dat | 20 ++ .../element_abundances_72676.51448572124.dat | 20 ++ .../element_abundances_74084.24979482943.dat | 20 ++ .../element_abundances_748810.3894409421.dat | 20 ++ .../element_abundances_753683.5966440098.dat | 20 ++ .../element_abundances_753698.0954328458.dat | 20 ++ .../element_abundances_75577.35568386312.dat | 20 ++ .../element_abundances_75648.83922429883.dat | 20 ++ .../element_abundances_75780.87654550624.dat | 20 ++ .../element_abundances_75781.01657658073.dat | 20 ++ .../element_abundances_76247.22354698408.dat | 20 ++ .../element_abundances_77692.013487392.dat | 20 ++ .../element_abundances_7778514.638007212.dat | 20 ++ .../element_abundances_795254.4918674373.dat | 20 ++ .../element_abundances_7980098.170844916.dat | 20 ++ .../element_abundances_7980112.670681477.dat | 20 ++ .../element_abundances_798448.8152402655.dat | 20 ++ .../element_abundances_79854.52230298946.dat | 20 ++ .../element_abundances_8021672.070130903.dat | 20 ++ .../element_abundances_80555.40737819686.dat | 20 ++ .../element_abundances_82246.57929514661.dat | 20 ++ .../element_abundances_82755.31565486285.dat | 20 ++ .../element_abundances_851630.7042812553.dat | 20 ++ .../element_abundances_86247.23117170643.dat | 20 ++ .../element_abundances_875688.1658247052.dat | 20 ++ .../element_abundances_87692.02125659335.dat | 20 ++ .../element_abundances_87890.51744911529.dat | 20 ++ .../element_abundances_879244.1023115388.dat | 20 ++ .../element_abundances_879592.4965624362.dat | 20 ++ .../element_abundances_882530.2934266294.dat | 20 ++ .../element_abundances_892530.3816796588.dat | 20 ++ .../element_abundances_89955.36735312775.dat | 20 ++ .../element_abundances_903850.3546642854.dat | 20 ++ .../element_abundances_910125.9499942765.dat | 20 ++ .../element_abundances_919992.6713570596.dat | 20 ++ elementfiles/element_abundances_92.0.dat | 26 +-- .../element_abundances_921456.5799501603.dat | 20 ++ .../element_abundances_921471.0787633212.dat | 20 ++ .../element_abundances_92246.58751980454.dat | 20 ++ .../element_abundances_923191.004358654.dat | 20 ++ .../element_abundances_92652.0000851552.dat | 20 ++ .../element_abundances_933869.2942179943.dat | 20 ++ .../element_abundances_9352713.016022498.dat | 20 ++ .../element_abundances_94265.21122784214.dat | 20 ++ .../element_abundances_943869.3876049237.dat | 20 ++ .../element_abundances_94856.04204838244.dat | 20 ++ .../element_abundances_94856.17690142244.dat | 20 ++ .../element_abundances_953869.4819918624.dat | 20 ++ .../element_abundances_954169.3398090069.dat | 20 ++ .../element_abundances_96247.23979642955.dat | 20 ++ .../element_abundances_963027.5449177927.dat | 20 ++ .../element_abundances_964169.4352259409.dat | 20 ++ .../element_abundances_96975.78737822351.dat | 20 ++ .../element_abundances_974169.5316428844.dat | 20 ++ .../element_abundances_974709.2668392234.dat | 20 ++ .../element_abundances_97890.52623816703.dat | 20 ++ .../element_abundances_979.9322358832528.dat | 20 ++ .../element_abundances_984709.3643101502.dat | 20 ++ .../element_abundances_988323.5072448484.dat | 20 ++ .../element_abundances_994709.4627810866.dat | 20 ++ .../element_abundances_99684.26210439416.dat | 20 ++ input/run_silicates.toml | 14 +- run_PROTEUS.bash | 8 +- tools_leoni/config_ARCiS.py | 213 ++++++++++++++++++ tools_leoni/convert_to_ARCiSformat.py | 34 +-- tools_leoni/edit_input_file.py | 2 +- 452 files changed, 9111 insertions(+), 154 deletions(-) create mode 100644 elementfiles/element_abundances_101248.85193439838.dat create mode 100644 elementfiles/element_abundances_104641.08200679332.dat create mode 100644 elementfiles/element_abundances_105900.41858576344.dat create mode 100644 elementfiles/element_abundances_105913.58789933729.dat create mode 100644 elementfiles/element_abundances_106247.24942115354.dat create mode 100644 elementfiles/element_abundances_1066380.091816709.dat create mode 100644 elementfiles/element_abundances_1066885.2583350732.dat create mode 100644 elementfiles/element_abundances_108246.60067925722.dat create mode 100644 elementfiles/element_abundances_112295.11169366694.dat create mode 100644 elementfiles/element_abundances_112652.01961555614.dat create mode 100644 elementfiles/element_abundances_1128749.9466383653.dat create mode 100644 elementfiles/element_abundances_1133223.9695499486.dat create mode 100644 elementfiles/element_abundances_113340.73409906306.dat create mode 100644 elementfiles/element_abundances_113636.52311865713.dat create mode 100644 elementfiles/element_abundances_1149734.6870918784.dat create mode 100644 elementfiles/element_abundances_115696.34587109213.dat create mode 100644 elementfiles/element_abundances_116247.26004587847.dat create mode 100644 elementfiles/element_abundances_11658567.006774511.dat create mode 100644 elementfiles/element_abundances_118652.02417467521.dat create mode 100644 elementfiles/element_abundances_1189893.3532400012.dat create mode 100644 elementfiles/element_abundances_1189907.8520920817.dat create mode 100644 elementfiles/element_abundances_1231464.4297983614.dat create mode 100644 elementfiles/element_abundances_1236794.808950034.dat create mode 100644 elementfiles/element_abundances_12483719.898671612.dat create mode 100644 elementfiles/element_abundances_12483734.39916113.dat create mode 100644 elementfiles/element_abundances_12525295.670139339.dat create mode 100644 elementfiles/element_abundances_126247.27167060447.dat create mode 100644 elementfiles/element_abundances_128652.03603987762.dat create mode 100644 elementfiles/element_abundances_1303092.7095017824.dat create mode 100644 elementfiles/element_abundances_1308741.605356239.dat create mode 100644 elementfiles/element_abundances_134800.13592790216.dat create mode 100644 elementfiles/element_abundances_135083.43267812103.dat create mode 100644 elementfiles/element_abundances_136247.28429533163.dat create mode 100644 elementfiles/element_abundances_137935.80596413644.dat create mode 100644 elementfiles/element_abundances_13851.540243927773.dat create mode 100644 elementfiles/element_abundances_13851.571967890028.dat create mode 100644 elementfiles/element_abundances_140644.28179969772.dat create mode 100644 elementfiles/element_abundances_1409979.1118734349.dat create mode 100644 elementfiles/element_abundances_1417821.4787787495.dat create mode 100644 elementfiles/element_abundances_142208.87227055765.dat create mode 100644 elementfiles/element_abundances_144299.5775328795.dat create mode 100644 elementfiles/element_abundances_144666.8640716984.dat create mode 100644 elementfiles/element_abundances_144699.2143378657.dat create mode 100644 elementfiles/element_abundances_146247.29792006005.dat create mode 100644 elementfiles/element_abundances_1496383.5672867657.dat create mode 100644 elementfiles/element_abundances_151323.55043223692.dat create mode 100644 elementfiles/element_abundances_15347933.391977733.dat create mode 100644 elementfiles/element_abundances_156247.31254478983.dat create mode 100644 elementfiles/element_abundances_158188.0001454483.dat create mode 100644 elementfiles/element_abundances_1619392.1905037467.dat create mode 100644 elementfiles/element_abundances_1619406.6894180984.dat create mode 100644 elementfiles/element_abundances_162277.40360978342.dat create mode 100644 elementfiles/element_abundances_16247.198798660364.dat create mode 100644 elementfiles/element_abundances_16496.18995811324.dat create mode 100644 elementfiles/element_abundances_1660963.4456072713.dat create mode 100644 elementfiles/element_abundances_1661.4690748796243.dat create mode 100644 elementfiles/element_abundances_166247.3281695211.dat create mode 100644 elementfiles/element_abundances_176247.3447942539.dat create mode 100644 elementfiles/element_abundances_177307.73883882235.dat create mode 100644 elementfiles/element_abundances_178188.03278304992.dat create mode 100644 elementfiles/element_abundances_179172.53693135455.dat create mode 100644 elementfiles/element_abundances_180081.62725064292.dat create mode 100644 elementfiles/element_abundances_180430.01906572023.dat create mode 100644 elementfiles/element_abundances_184188.04127432837.dat create mode 100644 elementfiles/element_abundances_186247.36241898837.dat create mode 100644 elementfiles/element_abundances_190081.64525880566.dat create mode 100644 elementfiles/element_abundances_190430.03710872214.dat create mode 100644 elementfiles/element_abundances_194188.05969313247.dat create mode 100644 elementfiles/element_abundances_1944.6224992904913.dat create mode 100644 elementfiles/element_abundances_1959737.5439641965.dat create mode 100644 elementfiles/element_abundances_196247.3810437246.dat create mode 100644 elementfiles/element_abundances_19689514.663194325.dat create mode 100644 elementfiles/element_abundances_19689529.164728574.dat create mode 100644 elementfiles/element_abundances_19731093.430152837.dat create mode 100644 elementfiles/element_abundances_197837.63052414532.dat create mode 100644 elementfiles/element_abundances_198083.80630259047.dat create mode 100644 elementfiles/element_abundances_1995937.6102277595.dat create mode 100644 elementfiles/element_abundances_202237.15327629726.dat create mode 100644 elementfiles/element_abundances_202325.63724276182.dat create mode 100644 elementfiles/element_abundances_203471.83570159713.dat create mode 100644 elementfiles/element_abundances_206081.67407186603.dat create mode 100644 elementfiles/element_abundances_206180.31331218343.dat create mode 100644 elementfiles/element_abundances_206247.4006684627.dat create mode 100644 elementfiles/element_abundances_206430.0659775252.dat create mode 100644 elementfiles/element_abundances_207744.90480841248.dat create mode 100644 elementfiles/element_abundances_209665.52893557615.dat create mode 100644 elementfiles/element_abundances_210039.81540069683.dat create mode 100644 elementfiles/element_abundances_2105018.2332329913.dat create mode 100644 elementfiles/element_abundances_21076.50361024537.dat create mode 100644 elementfiles/element_abundances_212325.65747532554.dat create mode 100644 elementfiles/element_abundances_21250919.608302888.dat create mode 100644 elementfiles/element_abundances_212533.6091627321.dat create mode 100644 elementfiles/element_abundances_216247.4212932028.dat create mode 100644 elementfiles/element_abundances_2183580.861609474.dat create mode 100644 elementfiles/element_abundances_218882.44028935902.dat create mode 100644 elementfiles/element_abundances_222210.6912566784.dat create mode 100644 elementfiles/element_abundances_226247.44291794492.dat create mode 100644 elementfiles/element_abundances_228196.28514835323.dat create mode 100644 elementfiles/element_abundances_228325.6898474275.dat create mode 100644 elementfiles/element_abundances_2306590.33012574.dat create mode 100644 elementfiles/element_abundances_2306604.8291397253.dat create mode 100644 elementfiles/element_abundances_231681.72017276264.dat create mode 100644 elementfiles/element_abundances_232030.1121676101.dat create mode 100644 elementfiles/element_abundances_232245.6130367092.dat create mode 100644 elementfiles/element_abundances_232245.66160723867.dat create mode 100644 elementfiles/element_abundances_232277.34205576548.dat create mode 100644 elementfiles/element_abundances_232277.39062659835.dat create mode 100644 elementfiles/element_abundances_2348161.870901527.dat create mode 100644 elementfiles/element_abundances_236047.1749844709.dat create mode 100644 elementfiles/element_abundances_236148.99023894512.dat create mode 100644 elementfiles/element_abundances_236247.4655426892.dat create mode 100644 elementfiles/element_abundances_23851.541629081796.dat create mode 100644 elementfiles/element_abundances_23851.573353047224.dat create mode 100644 elementfiles/element_abundances_240576.074826936.dat create mode 100644 elementfiles/element_abundances_242277.36528349968.dat create mode 100644 elementfiles/element_abundances_242277.4138543374.dat create mode 100644 elementfiles/element_abundances_243301.88680014445.dat create mode 100644 elementfiles/element_abundances_243318.6930994205.dat create mode 100644 elementfiles/element_abundances_246247.48916743576.dat create mode 100644 elementfiles/element_abundances_252192.86014480845.dat create mode 100644 elementfiles/element_abundances_252945.7169240378.dat create mode 100644 elementfiles/element_abundances_253301.91113033314.dat create mode 100644 elementfiles/element_abundances_253318.71743128978.dat create mode 100644 elementfiles/element_abundances_253925.74164279067.dat create mode 100644 elementfiles/element_abundances_256127.61205938825.dat create mode 100644 elementfiles/element_abundances_256247.51379218468.dat create mode 100644 elementfiles/element_abundances_26092.000023919998.dat create mode 100644 elementfiles/element_abundances_26247.200423380244.dat create mode 100644 elementfiles/element_abundances_263045.6002419173.dat create mode 100644 elementfiles/element_abundances_263301.9364605243.dat create mode 100644 elementfiles/element_abundances_263318.74276316154.dat create mode 100644 elementfiles/element_abundances_26496.191607732235.dat create mode 100644 elementfiles/element_abundances_266247.53941693605.dat create mode 100644 elementfiles/element_abundances_268264.8529118522.dat create mode 100644 elementfiles/element_abundances_272641.7939341972.dat create mode 100644 elementfiles/element_abundances_272990.18607174593.dat create mode 100644 elementfiles/element_abundances_276247.56604169.dat create mode 100644 elementfiles/element_abundances_278326.4404665442.dat create mode 100644 elementfiles/element_abundances_279301.9769888301.dat create mode 100644 elementfiles/element_abundances_279318.78329415637.dat create mode 100644 elementfiles/element_abundances_27942436.208924945.dat create mode 100644 elementfiles/element_abundances_2839351.0353094153.dat create mode 100644 elementfiles/element_abundances_284030.1590316704.dat create mode 100644 elementfiles/element_abundances_286247.5936664466.dat create mode 100644 elementfiles/element_abundances_288256.311379256.dat create mode 100644 elementfiles/element_abundances_289045.6686337734.dat create mode 100644 elementfiles/element_abundances_289160.26954839175.dat create mode 100644 elementfiles/element_abundances_289264.9130765203.dat create mode 100644 elementfiles/element_abundances_294885.82451537176.dat create mode 100644 elementfiles/element_abundances_295034.4401347139.dat create mode 100644 elementfiles/element_abundances_296247.622291206.dat create mode 100644 elementfiles/element_abundances_29689514.663194325.dat create mode 100644 elementfiles/element_abundances_29689529.164728574.dat create mode 100644 elementfiles/element_abundances_29731093.430152837.dat create mode 100644 elementfiles/element_abundances_299160.2984644187.dat create mode 100644 elementfiles/element_abundances_300164.33036581654.dat create mode 100644 elementfiles/element_abundances_30092.003027600098.dat create mode 100644 elementfiles/element_abundances_301529.1705235336.dat create mode 100644 elementfiles/element_abundances_30317578.97656208.dat create mode 100644 elementfiles/element_abundances_304902.04183411936.dat create mode 100644 elementfiles/element_abundances_304918.84814374807.dat create mode 100644 elementfiles/element_abundances_305034.4696381579.dat create mode 100644 elementfiles/element_abundances_305310.2486647136.dat create mode 100644 elementfiles/element_abundances_305313.680649544.dat create mode 100644 elementfiles/element_abundances_306247.6519159682.dat create mode 100644 elementfiles/element_abundances_3095451.218022192.dat create mode 100644 elementfiles/element_abundances_31076.505717895732.dat create mode 100644 elementfiles/element_abundances_311529.2006764506.dat create mode 100644 elementfiles/element_abundances_312602.55686898023.dat create mode 100644 elementfiles/element_abundances_315160.34473006177.dat create mode 100644 elementfiles/element_abundances_315310.27919573843.dat create mode 100644 elementfiles/element_abundances_315313.71118091204.dat create mode 100644 elementfiles/element_abundances_316247.6825407334.dat create mode 100644 elementfiles/element_abundances_317641.73510571645.dat create mode 100644 elementfiles/element_abundances_318033.85657612095.dat create mode 100644 elementfiles/element_abundances_3204533.0403597783.dat create mode 100644 elementfiles/element_abundances_321034.51684366836.dat create mode 100644 elementfiles/element_abundances_32217693.190671787.dat create mode 100644 elementfiles/element_abundances_326247.7141655017.dat create mode 100644 elementfiles/element_abundances_327529.24892111786.dat create mode 100644 elementfiles/element_abundances_3283096.5325258067.dat create mode 100644 elementfiles/element_abundances_329788.19560689235.dat create mode 100644 elementfiles/element_abundances_331310.3280453782.dat create mode 100644 elementfiles/element_abundances_331313.7600311009.dat create mode 100644 elementfiles/element_abundances_336247.7467902731.dat create mode 100644 elementfiles/element_abundances_33737784.56195955.dat create mode 100644 elementfiles/element_abundances_338177.91195249255.dat create mode 100644 elementfiles/element_abundances_33851.54401423596.dat create mode 100644 elementfiles/element_abundances_33851.575738204556.dat create mode 100644 elementfiles/element_abundances_338526.3043183633.dat create mode 100644 elementfiles/element_abundances_3406107.353520929.dat create mode 100644 elementfiles/element_abundances_3406121.8526943284.dat create mode 100644 elementfiles/element_abundances_340760.41875509074.dat create mode 100644 elementfiles/element_abundances_344124.58527572174.dat create mode 100644 elementfiles/element_abundances_3447679.351372336.dat create mode 100644 elementfiles/element_abundances_346247.7804150478.dat create mode 100644 elementfiles/element_abundances_346634.592372485.dat create mode 100644 elementfiles/element_abundances_346923.74483638286.dat create mode 100644 elementfiles/element_abundances_34953857.65898976.dat create mode 100644 elementfiles/element_abundances_3497.2872375278293.dat create mode 100644 elementfiles/element_abundances_353129.32611258543.dat create mode 100644 elementfiles/element_abundances_3543041.8283855906.dat create mode 100644 elementfiles/element_abundances_355117.96568008646.dat create mode 100644 elementfiles/element_abundances_356247.8150398258.dat create mode 100644 elementfiles/element_abundances_356910.40620480187.dat create mode 100644 elementfiles/element_abundances_356913.838191403.dat create mode 100644 elementfiles/element_abundances_356923.7795287573.dat create mode 100644 elementfiles/element_abundances_357287.64676137205.dat create mode 100644 elementfiles/element_abundances_357288.77501205594.dat create mode 100644 elementfiles/element_abundances_3618.61258293657.dat create mode 100644 elementfiles/element_abundances_36247.20304810029.dat create mode 100644 elementfiles/element_abundances_365589.5266374889.dat create mode 100644 elementfiles/element_abundances_365677.9288911048.dat create mode 100644 elementfiles/element_abundances_366247.8506646073.dat create mode 100644 elementfiles/element_abundances_367287.6824901367.dat create mode 100644 elementfiles/element_abundances_367288.81074093346.dat create mode 100644 elementfiles/element_abundances_367600.1162713222.dat create mode 100644 elementfiles/element_abundances_367721.47136916424.dat create mode 100644 elementfiles/element_abundances_36899574.61423809.dat create mode 100644 elementfiles/element_abundances_372923.83503655647.dat create mode 100644 elementfiles/element_abundances_376247.88728939235.dat create mode 100644 elementfiles/element_abundances_377287.71921890497.dat create mode 100644 elementfiles/element_abundances_377288.84746981453.dat create mode 100644 elementfiles/element_abundances_377721.50814131135.dat create mode 100644 elementfiles/element_abundances_381720.5371951371.dat create mode 100644 elementfiles/element_abundances_3851.5398587737877.dat create mode 100644 elementfiles/element_abundances_3851.57158273287.dat create mode 100644 elementfiles/element_abundances_386247.92491418106.dat create mode 100644 elementfiles/element_abundances_387287.7569476769.dat create mode 100644 elementfiles/element_abundances_387288.88519869925.dat create mode 100644 elementfiles/element_abundances_393320.7653433659.dat create mode 100644 elementfiles/element_abundances_393721.5669767467.dat create mode 100644 elementfiles/element_abundances_394722.5354036104.dat create mode 100644 elementfiles/element_abundances_396247.96353897353.dat create mode 100644 elementfiles/element_abundances_39689514.66319433.dat create mode 100644 elementfiles/element_abundances_39689529.164728574.dat create mode 100644 elementfiles/element_abundances_39731093.43015283.dat create mode 100644 elementfiles/element_abundances_398523.9238490351.dat create mode 100644 elementfiles/element_abundances_398877.5304493238.dat create mode 100644 elementfiles/element_abundances_40012721.74263542.dat create mode 100644 elementfiles/element_abundances_403287.817313712.dat create mode 100644 elementfiles/element_abundances_403288.9455649148.dat create mode 100644 elementfiles/element_abundances_404722.5748758639.dat create mode 100644 elementfiles/element_abundances_406248.0031637699.dat create mode 100644 elementfiles/element_abundances_408877.57033707685.dat create mode 100644 elementfiles/element_abundances_415079.9345990785.dat create mode 100644 elementfiles/element_abundances_416248.0437885702.dat create mode 100644 elementfiles/element_abundances_417.4408232539793.dat create mode 100644 elementfiles/element_abundances_418877.6112248339.dat create mode 100644 elementfiles/element_abundances_419321.6611134433.dat create mode 100644 elementfiles/element_abundances_420722.63803146954.dat create mode 100644 elementfiles/element_abundances_420778.4298562734.dat create mode 100644 elementfiles/element_abundances_42532.537147565.dat create mode 100644 elementfiles/element_abundances_426248.0854133746.dat create mode 100644 elementfiles/element_abundances_428877.65311259497.dat create mode 100644 elementfiles/element_abundances_428887.91389936814.dat create mode 100644 elementfiles/element_abundances_428889.04215085966.dat create mode 100644 elementfiles/element_abundances_430817.7603962677.dat create mode 100644 elementfiles/element_abundances_436248.12803818315.dat create mode 100644 elementfiles/element_abundances_441387.8784899409.dat create mode 100644 elementfiles/element_abundances_443035.70078176504.dat create mode 100644 elementfiles/element_abundances_443384.0935129511.dat create mode 100644 elementfiles/element_abundances_444877.72013301274.dat create mode 100644 elementfiles/element_abundances_446248.17166299594.dat create mode 100644 elementfiles/element_abundances_446322.73908043856.dat create mode 100644 elementfiles/element_abundances_447256.72669921134.dat create mode 100644 elementfiles/element_abundances_44993757.14807115.dat create mode 100644 elementfiles/element_abundances_45073390.06298962.dat create mode 100644 elementfiles/element_abundances_45120298.52614186.dat create mode 100644 elementfiles/element_abundances_45157825.29666365.dat create mode 100644 elementfiles/element_abundances_451802.3543921758.dat create mode 100644 elementfiles/element_abundances_45187846.713081084.dat create mode 100644 elementfiles/element_abundances_45235880.97934898.dat create mode 100644 elementfiles/element_abundances_45312735.80537761.dat create mode 100644 elementfiles/element_abundances_45375.76396432932.dat create mode 100644 elementfiles/element_abundances_45435703.52702342.dat create mode 100644 elementfiles/element_abundances_456248.2162878131.dat create mode 100644 elementfiles/element_abundances_45632451.881656714.dat create mode 100644 elementfiles/element_abundances_45947249.24906998.dat create mode 100644 elementfiles/element_abundances_460281.8117321579.dat create mode 100644 elementfiles/element_abundances_46092.00624232026.dat create mode 100644 elementfiles/element_abundances_46247.20667282059.dat create mode 100644 elementfiles/element_abundances_46450925.03693121.dat create mode 100644 elementfiles/element_abundances_466248.2619126347.dat create mode 100644 elementfiles/element_abundances_4668947.097307472.dat create mode 100644 elementfiles/element_abundances_469848.068436418.dat create mode 100644 elementfiles/element_abundances_469849.1966883715.dat create mode 100644 elementfiles/element_abundances_470477.8273656812.dat create mode 100644 elementfiles/element_abundances_470728.6111094832.dat create mode 100644 elementfiles/element_abundances_470743.1098572943.dat create mode 100644 elementfiles/element_abundances_47076.509090136315.dat create mode 100644 elementfiles/element_abundances_47147699.712703936.dat create mode 100644 elementfiles/element_abundances_47184511.08880002.dat create mode 100644 elementfiles/element_abundances_476248.3085374609.dat create mode 100644 elementfiles/element_abundances_480374.8001658886.dat create mode 100644 elementfiles/element_abundances_480728.6581823443.dat create mode 100644 elementfiles/element_abundances_480743.1569316053.dat create mode 100644 elementfiles/element_abundances_48084.23729292775.dat create mode 100644 elementfiles/element_abundances_4854672.990493284.dat create mode 100644 elementfiles/element_abundances_486248.3561622918.dat create mode 100644 elementfiles/element_abundances_490728.7062552101.dat create mode 100644 elementfiles/element_abundances_490743.205005921.dat create mode 100644 elementfiles/element_abundances_49577.342793754.dat create mode 100644 elementfiles/element_abundances_4963756.731762637.dat create mode 100644 elementfiles/element_abundances_49648.82631560399.dat create mode 100644 elementfiles/element_abundances_49689514.66319433.dat create mode 100644 elementfiles/element_abundances_49689529.164728574.dat create mode 100644 elementfiles/element_abundances_49731093.43015283.dat create mode 100644 elementfiles/element_abundances_49780.863602481695.dat create mode 100644 elementfiles/element_abundances_49781.003633519795.dat create mode 100644 elementfiles/element_abundances_500728.75532808073.dat create mode 100644 elementfiles/element_abundances_500743.25408024155.dat create mode 100644 elementfiles/element_abundances_502248.4323620211.dat create mode 100644 elementfiles/element_abundances_508939.2314005431.dat create mode 100644 elementfiles/element_abundances_511019.08486946573.dat create mode 100644 elementfiles/element_abundances_511437.9989379507.dat create mode 100644 elementfiles/element_abundances_512299.3887068774.dat create mode 100644 elementfiles/element_abundances_5165334.590953232.dat create mode 100644 elementfiles/element_abundances_5165349.090381693.dat create mode 100644 elementfiles/element_abundances_516728.83384467376.dat create mode 100644 elementfiles/element_abundances_516743.3325991544.dat create mode 100644 elementfiles/element_abundances_51692.000047472.dat create mode 100644 elementfiles/element_abundances_5206907.320125631.dat create mode 100644 elementfiles/element_abundances_52092.00680784.dat create mode 100644 elementfiles/element_abundances_522299.4399368163.dat create mode 100644 elementfiles/element_abundances_52532.54140081872.dat create mode 100644 elementfiles/element_abundances_525818.0527221012.dat create mode 100644 elementfiles/element_abundances_527848.5542815881.dat create mode 100644 elementfiles/element_abundances_532299.4921667603.dat create mode 100644 elementfiles/element_abundances_542299.5453967095.dat create mode 100644 elementfiles/element_abundances_542328.9594712226.dat create mode 100644 elementfiles/element_abundances_542343.4582294149.dat create mode 100644 elementfiles/element_abundances_548328.6518172416.dat create mode 100644 elementfiles/element_abundances_552114.6299057301.dat create mode 100644 elementfiles/element_abundances_55375.76850190572.dat create mode 100644 elementfiles/element_abundances_558299.6305646282.dat create mode 100644 elementfiles/element_abundances_56247.21129754126.dat create mode 100644 elementfiles/element_abundances_58084.242101351476.dat create mode 100644 elementfiles/element_abundances_581096.8078742871.dat create mode 100644 elementfiles/element_abundances_583289.1604737007.dat create mode 100644 elementfiles/element_abundances_583303.6592378317.dat create mode 100644 elementfiles/element_abundances_583899.7668332981.dat create mode 100644 elementfiles/element_abundances_59577.347751488276.dat create mode 100644 elementfiles/element_abundances_59648.83128048662.dat create mode 100644 elementfiles/element_abundances_59689514.66319433.dat create mode 100644 elementfiles/element_abundances_59689529.164728574.dat create mode 100644 elementfiles/element_abundances_59731093.43015283.dat create mode 100644 elementfiles/element_abundances_59780.86858056806.dat create mode 100644 elementfiles/element_abundances_59781.00861162016.dat create mode 100644 elementfiles/element_abundances_610808.1629086011.dat create mode 100644 elementfiles/element_abundances_611156.5562242916.dat create mode 100644 elementfiles/element_abundances_62092.01201704068.dat create mode 100644 elementfiles/element_abundances_624859.9848631701.dat create mode 100644 elementfiles/element_abundances_62523.73937651717.dat create mode 100644 elementfiles/element_abundances_630676.0383060105.dat create mode 100644 elementfiles/element_abundances_633525.85756556.dat create mode 100644 elementfiles/element_abundances_63639.42912723771.dat create mode 100644 elementfiles/element_abundances_6470395.5275824815.dat create mode 100644 elementfiles/element_abundances_648825.4820776657.dat create mode 100644 elementfiles/element_abundances_648839.9808512987.dat create mode 100644 elementfiles/element_abundances_649996.5138713747.dat create mode 100644 elementfiles/element_abundances_656.8139139887417.dat create mode 100644 elementfiles/element_abundances_66247.21692226239.dat create mode 100644 elementfiles/element_abundances_664521.7253020853.dat create mode 100644 elementfiles/element_abundances_68532.54820602467.dat create mode 100644 elementfiles/element_abundances_690396.3337109651.dat create mode 100644 elementfiles/element_abundances_6944.576627495595.dat create mode 100644 elementfiles/element_abundances_69689514.66319433.dat create mode 100644 elementfiles/element_abundances_69689529.16472858.dat create mode 100644 elementfiles/element_abundances_69731093.43015283.dat create mode 100644 elementfiles/element_abundances_699253.2166432283.dat create mode 100644 elementfiles/element_abundances_71375.77576202794.dat create mode 100644 elementfiles/element_abundances_71504.83212265192.dat create mode 100644 elementfiles/element_abundances_71505.1231199585.dat create mode 100644 elementfiles/element_abundances_71692.01138587252.dat create mode 100644 elementfiles/element_abundances_717412.3370715966.dat create mode 100644 elementfiles/element_abundances_719887.2750361603.dat create mode 100644 elementfiles/element_abundances_720237.8669689845.dat create mode 100644 elementfiles/element_abundances_7219.3038213961945.dat create mode 100644 elementfiles/element_abundances_72676.51448572124.dat create mode 100644 elementfiles/element_abundances_74084.24979482943.dat create mode 100644 elementfiles/element_abundances_748810.3894409421.dat create mode 100644 elementfiles/element_abundances_753683.5966440098.dat create mode 100644 elementfiles/element_abundances_753698.0954328458.dat create mode 100644 elementfiles/element_abundances_75577.35568386312.dat create mode 100644 elementfiles/element_abundances_75648.83922429883.dat create mode 100644 elementfiles/element_abundances_75780.87654550624.dat create mode 100644 elementfiles/element_abundances_75781.01657658073.dat create mode 100644 elementfiles/element_abundances_76247.22354698408.dat create mode 100644 elementfiles/element_abundances_77692.013487392.dat create mode 100644 elementfiles/element_abundances_7778514.638007212.dat create mode 100644 elementfiles/element_abundances_795254.4918674373.dat create mode 100644 elementfiles/element_abundances_7980098.170844916.dat create mode 100644 elementfiles/element_abundances_7980112.670681477.dat create mode 100644 elementfiles/element_abundances_798448.8152402655.dat create mode 100644 elementfiles/element_abundances_79854.52230298946.dat create mode 100644 elementfiles/element_abundances_8021672.070130903.dat create mode 100644 elementfiles/element_abundances_80555.40737819686.dat create mode 100644 elementfiles/element_abundances_82246.57929514661.dat create mode 100644 elementfiles/element_abundances_82755.31565486285.dat create mode 100644 elementfiles/element_abundances_851630.7042812553.dat create mode 100644 elementfiles/element_abundances_86247.23117170643.dat create mode 100644 elementfiles/element_abundances_875688.1658247052.dat create mode 100644 elementfiles/element_abundances_87692.02125659335.dat create mode 100644 elementfiles/element_abundances_87890.51744911529.dat create mode 100644 elementfiles/element_abundances_879244.1023115388.dat create mode 100644 elementfiles/element_abundances_879592.4965624362.dat create mode 100644 elementfiles/element_abundances_882530.2934266294.dat create mode 100644 elementfiles/element_abundances_892530.3816796588.dat create mode 100644 elementfiles/element_abundances_89955.36735312775.dat create mode 100644 elementfiles/element_abundances_903850.3546642854.dat create mode 100644 elementfiles/element_abundances_910125.9499942765.dat create mode 100644 elementfiles/element_abundances_919992.6713570596.dat create mode 100644 elementfiles/element_abundances_921456.5799501603.dat create mode 100644 elementfiles/element_abundances_921471.0787633212.dat create mode 100644 elementfiles/element_abundances_92246.58751980454.dat create mode 100644 elementfiles/element_abundances_923191.004358654.dat create mode 100644 elementfiles/element_abundances_92652.0000851552.dat create mode 100644 elementfiles/element_abundances_933869.2942179943.dat create mode 100644 elementfiles/element_abundances_9352713.016022498.dat create mode 100644 elementfiles/element_abundances_94265.21122784214.dat create mode 100644 elementfiles/element_abundances_943869.3876049237.dat create mode 100644 elementfiles/element_abundances_94856.04204838244.dat create mode 100644 elementfiles/element_abundances_94856.17690142244.dat create mode 100644 elementfiles/element_abundances_953869.4819918624.dat create mode 100644 elementfiles/element_abundances_954169.3398090069.dat create mode 100644 elementfiles/element_abundances_96247.23979642955.dat create mode 100644 elementfiles/element_abundances_963027.5449177927.dat create mode 100644 elementfiles/element_abundances_964169.4352259409.dat create mode 100644 elementfiles/element_abundances_96975.78737822351.dat create mode 100644 elementfiles/element_abundances_974169.5316428844.dat create mode 100644 elementfiles/element_abundances_974709.2668392234.dat create mode 100644 elementfiles/element_abundances_97890.52623816703.dat create mode 100644 elementfiles/element_abundances_979.9322358832528.dat create mode 100644 elementfiles/element_abundances_984709.3643101502.dat create mode 100644 elementfiles/element_abundances_988323.5072448484.dat create mode 100644 elementfiles/element_abundances_994709.4627810866.dat create mode 100644 elementfiles/element_abundances_99684.26210439416.dat create mode 100644 tools_leoni/config_ARCiS.py diff --git a/elementfiles/element_abundances_0.0.dat b/elementfiles/element_abundances_0.0.dat index 5b2e5a1a9..5949ea6f2 100644 --- a/elementfiles/element_abundances_0.0.dat +++ b/elementfiles/element_abundances_0.0.dat @@ -1,20 +1,20 @@ # Abundances determined using atmosphere_builder -C 31.326347796771508 -H 31.503473277542735 +C 30.534470505135875 +H 30.152318522695243 He 0 -N 30.886304792436476 -O 31.522651093039535 +N 31.275553280903257 +O 31.764930257913814 P 0 -S 26.288038869286613 -Si 30.67613654270745 -Ti 25.915301074111213 +S 31.254614270091718 +Si 28.86375863776548 +Ti 25.144501233229494 V 0 Cl 0 -K 28.502073039357807 -Na 29.718582602944505 -Mg 29.398675491267014 +K 27.28102676306397 +Na 28.493327798969585 +Mg 27.790669254764097 F 0 -Ca 25.669421846784097 -Fe 29.55608341546052 -Al 26.906354079362615 +Ca 24.168711262144342 +Fe 27.992707036090664 +Al 25.537168719930825 e- 0 diff --git a/elementfiles/element_abundances_1.0.dat b/elementfiles/element_abundances_1.0.dat index 47abd0638..8c6ac4978 100644 --- a/elementfiles/element_abundances_1.0.dat +++ b/elementfiles/element_abundances_1.0.dat @@ -1,20 +1,20 @@ # Abundances determined using atmosphere_builder -C 31.32634779677555 -H 31.503473277692244 +C 30.55207127508565 +H 30.10592597507962 He 0 -N 30.886304791537043 -O 31.52265109308541 +N 31.309815173469723 +O 31.75352135931247 P 0 -S 26.288038865223825 -Si 30.676136542798282 -Ti 25.91530107421823 +S 31.25401796329841 +Si 28.816638163129266 +Ti 25.102494667878368 V 0 Cl 0 -K 28.50207303945936 -Na 29.71858260304604 -Mg 29.398675491358823 +K 27.23761215338637 +Na 28.44995400962075 +Mg 27.745748667645316 F 0 -Ca 25.66942184687663 -Fe 29.556083415552607 -Al 26.90635407945676 +Ca 24.123871122685916 +Fe 27.94859375199561 +Al 25.491913446355376 e- 0 diff --git a/elementfiles/element_abundances_10092.0000092.dat b/elementfiles/element_abundances_10092.0000092.dat index 282939a51..4d463b601 100644 --- a/elementfiles/element_abundances_10092.0000092.dat +++ b/elementfiles/element_abundances_10092.0000092.dat @@ -1,20 +1,20 @@ # Abundances determined using atmosphere_builder -C 30.87220478568377 -H 31.704448238886496 +C 30.59935280409514 +H 29.94496228311196 He 0 -N 30.55818339972982 -O 31.440951549381463 +N 31.412273866847766 +O 31.714166291727178 P 0 -S 26.503252904375966 -Si 30.9278207990945 -Ti 26.24740286121829 +S 31.241749056401503 +Si 28.654635163100092 +Ti 24.95740050229667 V 0 Cl 0 -K 28.80665233874551 -Na 30.02313301323255 -Mg 29.656074706391184 +K 27.0849832715104 +Na 28.2971431632935 +Mg 27.590844831668335 F 0 -Ca 25.93002252632664 -Fe 29.81526511384669 -Al 27.176091960274462 +Ca 23.971513845409113 +Fe 27.794833579494927 +Al 25.339480583291582 e- 0 diff --git a/elementfiles/element_abundances_101248.85193439838.dat b/elementfiles/element_abundances_101248.85193439838.dat new file mode 100644 index 000000000..c31338884 --- /dev/null +++ b/elementfiles/element_abundances_101248.85193439838.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.725426479611563 +He 0 +N 0 +O 31.546075596867706 +P 0 +S 29.35784847388061 +Si 30.88891280833268 +Ti 26.86689414209222 +V 0 +Cl 0 +K 29.141958815435245 +Na 30.35661099210795 +Mg 29.715207962673954 +F 0 +Ca 26.049073407282094 +Fe 29.898764672266104 +Al 27.401968127806587 +e- 0 diff --git a/elementfiles/element_abundances_104641.08200679332.dat b/elementfiles/element_abundances_104641.08200679332.dat new file mode 100644 index 000000000..9c4066a6c --- /dev/null +++ b/elementfiles/element_abundances_104641.08200679332.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.002151106372715 +H 31.891650464053015 +He 0 +N 30.359667258799917 +O 30.833806641365666 +P 0 +S 25.71048730271462 +Si 30.408718604016457 +Ti 25.09758147497292 +V 0 +Cl 0 +K 27.405718863483145 +Na 28.624198610905047 +Mg 29.1103897897378 +F 0 +Ca 25.364703489681744 +Fe 29.261809887632694 +Al 27.143890498255132 +e- 0 diff --git a/elementfiles/element_abundances_105900.41858576344.dat b/elementfiles/element_abundances_105900.41858576344.dat new file mode 100644 index 000000000..94c30cfa2 --- /dev/null +++ b/elementfiles/element_abundances_105900.41858576344.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.883148777095066 +He 0 +N 0 +O 31.348267968813747 +P 0 +S 28.548363109100755 +Si 29.98127498507016 +Ti 25.5037858999289 +V 0 +Cl 0 +K 27.98199379466712 +Na 29.19813334410201 +Mg 28.727589725424224 +F 0 +Ca 25.01429626046638 +Fe 28.89180293185923 +Al 26.294859121428622 +e- 0 diff --git a/elementfiles/element_abundances_105913.58789933729.dat b/elementfiles/element_abundances_105913.58789933729.dat new file mode 100644 index 000000000..3ee09f814 --- /dev/null +++ b/elementfiles/element_abundances_105913.58789933729.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.883078611792026 +He 0 +N 0 +O 31.348406856486474 +P 0 +S 28.548190853179996 +Si 29.983057239836977 +Ti 25.505788138850157 +V 0 +Cl 0 +K 27.983903204819683 +Na 29.200042318317006 +Mg 28.729395983739128 +F 0 +Ca 25.01611888522649 +Fe 28.893615689925138 +Al 26.29672263631523 +e- 0 diff --git a/elementfiles/element_abundances_106247.24942115354.dat b/elementfiles/element_abundances_106247.24942115354.dat new file mode 100644 index 000000000..dc93a81aa --- /dev/null +++ b/elementfiles/element_abundances_106247.24942115354.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.419618832238587 +H 30.437062499546233 +He 0 +N 31.11276056212032 +O 31.747605758790588 +P 0 +S 30.320704544709763 +Si 26.55000363330405 +Ti 20.617955143129993 +V 0 +Cl 0 +K 25.762423043123142 +Na 27.137486681427944 +Mg 25.98696673851628 +F 0 +Ca 20.94818674890654 +Fe 26.739862330216262 +Al 20.94387903628982 +e- 0 diff --git a/elementfiles/element_abundances_1066380.091816709.dat b/elementfiles/element_abundances_1066380.091816709.dat new file mode 100644 index 000000000..d3d226897 --- /dev/null +++ b/elementfiles/element_abundances_1066380.091816709.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.42468762077317 +H 30.395426450776814 +He 0 +N 31.124568603319965 +O 31.746874410341597 +P 0 +S 30.24842531498385 +Si 26.33568168426939 +Ti 20.352126529731144 +V 0 +Cl 0 +K 25.588731370674306 +Na 26.969066697042436 +Mg 25.791926954960818 +F 0 +Ca 20.71138349909603 +Fe 26.56761673102817 +Al 20.679686881617442 +e- 0 diff --git a/elementfiles/element_abundances_1066885.2583350732.dat b/elementfiles/element_abundances_1066885.2583350732.dat new file mode 100644 index 000000000..53d9c9a1b --- /dev/null +++ b/elementfiles/element_abundances_1066885.2583350732.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.136773280833648 +He 0 +N 0 +O 31.811143427825836 +P 0 +S 0 +Si 31.007808085554124 +Ti 27.395166650097828 +V 0 +Cl 0 +K 29.668161281381742 +Na 30.898826020547457 +Mg 29.994763937933254 +F 0 +Ca 26.24574037490334 +Fe 30.30094748999452 +Al 27.530409757063136 +e- 0 diff --git a/elementfiles/element_abundances_108246.60067925722.dat b/elementfiles/element_abundances_108246.60067925722.dat new file mode 100644 index 000000000..2543f3314 --- /dev/null +++ b/elementfiles/element_abundances_108246.60067925722.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.96010762841182 +He 0 +N 0 +O 30.795525000521284 +P 0 +S 27.85892059784538 +Si 30.333018117870616 +Ti 25.14841778540412 +V 0 +Cl 0 +K 27.78171484372296 +Na 28.99893846309008 +Mg 29.039287088845303 +F 0 +Ca 25.296464664055264 +Fe 29.191989159132763 +Al 26.62402487505056 +e- 0 diff --git a/elementfiles/element_abundances_112295.11169366694.dat b/elementfiles/element_abundances_112295.11169366694.dat new file mode 100644 index 000000000..45c877e31 --- /dev/null +++ b/elementfiles/element_abundances_112295.11169366694.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.965137849617335 +He 0 +N 0 +O 30.71620524976555 +P 0 +S 27.072159083249844 +Si 30.333447875883284 +Ti 25.10510368456176 +V 0 +Cl 0 +K 27.71087738276313 +Na 28.928234341731546 +Mg 29.03864920951192 +F 0 +Ca 25.294999068098186 +Fe 29.19102538347343 +Al 26.67434677959401 +e- 0 diff --git a/elementfiles/element_abundances_112652.01961555614.dat b/elementfiles/element_abundances_112652.01961555614.dat new file mode 100644 index 000000000..dbb0ee7cd --- /dev/null +++ b/elementfiles/element_abundances_112652.01961555614.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.18249729819671 +He 0 +N 0 +O 31.809845746800995 +P 0 +S 0 +Si 31.069787598749095 +Ti 27.410019923691607 +V 0 +Cl 0 +K 29.52100864805236 +Na 30.732738065802327 +Mg 30.022302024654127 +F 0 +Ca 26.40861110330239 +Fe 30.228836891470433 +Al 27.77612693967572 +e- 0 diff --git a/elementfiles/element_abundances_1128749.9466383653.dat b/elementfiles/element_abundances_1128749.9466383653.dat new file mode 100644 index 000000000..280300cfa --- /dev/null +++ b/elementfiles/element_abundances_1128749.9466383653.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 0 +He 0 +N 0 +O 31.78741971105431 +P 0 +S 23.35429317320456 +Si 31.407220999052452 +Ti 27.450497449069367 +V 0 +Cl 0 +K 29.695662930395383 +Na 30.909952694339005 +Mg 30.251384727271873 +F 0 +Ca 26.594068789479724 +Fe 30.438696514409017 +Al 27.952925652313624 +e- 0 diff --git a/elementfiles/element_abundances_1133223.9695499486.dat b/elementfiles/element_abundances_1133223.9695499486.dat new file mode 100644 index 000000000..fc9d6b82f --- /dev/null +++ b/elementfiles/element_abundances_1133223.9695499486.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 0 +He 0 +N 0 +O 31.83990636156622 +P 0 +S 31.463356480526443 +Si 30.016864357075097 +Ti 26.3307620532104 +V 0 +Cl 0 +K 28.453399097892053 +Na 29.66543510414035 +Mg 28.95783567834806 +F 0 +Ca 25.340181410022474 +Fe 29.16257945999848 +Al 26.708053970271113 +e- 0 diff --git a/elementfiles/element_abundances_113340.73409906306.dat b/elementfiles/element_abundances_113340.73409906306.dat new file mode 100644 index 000000000..7ba087bd6 --- /dev/null +++ b/elementfiles/element_abundances_113340.73409906306.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 30.996127079428646 +H 31.75881321443037 +He 0 +N 30.576427553656966 +O 31.369521124567004 +P 0 +S 28.1123655587657 +Si 30.65145878447131 +Ti 25.79243301716186 +V 0 +Cl 0 +K 28.410752702151623 +Na 29.627470493769323 +Mg 29.36913008484304 +F 0 +Ca 25.63517011751138 +Fe 29.525250386924693 +Al 26.865142633575573 +e- 0 diff --git a/elementfiles/element_abundances_113636.52311865713.dat b/elementfiles/element_abundances_113636.52311865713.dat new file mode 100644 index 000000000..8ae888d5d --- /dev/null +++ b/elementfiles/element_abundances_113636.52311865713.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.40493558205188 +He 0 +N 0 +O 31.7102333016772 +P 0 +S 30.33470896224528 +Si 31.04751758339553 +Ti 27.23161258406702 +V 0 +Cl 0 +K 29.60270794922211 +Na 30.834555441333922 +Mg 29.97254447337259 +F 0 +Ca 26.188515463812514 +Fe 30.25203748367305 +Al 27.460418593427008 +e- 0 diff --git a/elementfiles/element_abundances_1149734.6870918784.dat b/elementfiles/element_abundances_1149734.6870918784.dat new file mode 100644 index 000000000..7d95d8220 --- /dev/null +++ b/elementfiles/element_abundances_1149734.6870918784.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 30.287603250509697 +He 0 +N 0 +O 31.788231810527208 +P 0 +S 30.19606739356524 +Si 31.2784505204759 +Ti 27.413478586534193 +V 0 +Cl 0 +K 29.808259882676648 +Na 31.04031482579019 +Mg 30.191396677634913 +F 0 +Ca 26.399560338355975 +Fe 30.465007241758926 +Al 27.66615444300688 +e- 0 diff --git a/elementfiles/element_abundances_115696.34587109213.dat b/elementfiles/element_abundances_115696.34587109213.dat new file mode 100644 index 000000000..2edcf6d56 --- /dev/null +++ b/elementfiles/element_abundances_115696.34587109213.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 0 +He 0 +N 0 +O 31.787430617406788 +P 0 +S 27.561773826275815 +Si 31.40715368573197 +Ti 27.450488043634493 +V 0 +Cl 0 +K 29.695627016629587 +Na 30.909916434560873 +Mg 30.251334136413345 +F 0 +Ca 26.594026201254067 +Fe 30.438649351055012 +Al 27.952887695418305 +e- 0 diff --git a/elementfiles/element_abundances_116247.26004587847.dat b/elementfiles/element_abundances_116247.26004587847.dat new file mode 100644 index 000000000..a82e70b28 --- /dev/null +++ b/elementfiles/element_abundances_116247.26004587847.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.419409757795204 +H 30.442516980039997 +He 0 +N 31.11240791565932 +O 31.747538244808418 +P 0 +S 30.320159067647378 +Si 26.52870143845415 +Ti 20.588989234005787 +V 0 +Cl 0 +K 25.747892146770297 +Na 27.12379016774789 +Mg 25.96873811725382 +F 0 +Ca 20.92334162453855 +Fe 26.725233903056953 +Al 20.91442350268602 +e- 0 diff --git a/elementfiles/element_abundances_11658567.006774511.dat b/elementfiles/element_abundances_11658567.006774511.dat new file mode 100644 index 000000000..408404982 --- /dev/null +++ b/elementfiles/element_abundances_11658567.006774511.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.398521520916375 +H 30.661847847047305 +He 0 +N 31.07285839407252 +O 31.74623024808667 +P 0 +S 30.447026408233864 +Si 26.45345871892727 +Ti 20.424616687199386 +V 0 +Cl 0 +K 25.74384120575786 +Na 27.12892972761849 +Mg 25.926816161074136 +F 0 +Ca 20.80869932152792 +Fe 26.723163987529592 +Al 20.752407222726383 +e- 0 diff --git a/elementfiles/element_abundances_118652.02417467521.dat b/elementfiles/element_abundances_118652.02417467521.dat new file mode 100644 index 000000000..1ff299b2f --- /dev/null +++ b/elementfiles/element_abundances_118652.02417467521.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.474777817881474 +He 0 +N 0 +O 31.740722310378562 +P 0 +S 0 +Si 30.951627886495444 +Ti 27.252645018521534 +V 0 +Cl 0 +K 29.381005559148804 +Na 30.593184607260454 +Mg 29.88709613320378 +F 0 +Ca 26.26750182484969 +Fe 30.090966451426038 +Al 27.635480187398226 +e- 0 diff --git a/elementfiles/element_abundances_1189893.3532400012.dat b/elementfiles/element_abundances_1189893.3532400012.dat new file mode 100644 index 000000000..5a898b101 --- /dev/null +++ b/elementfiles/element_abundances_1189893.3532400012.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 27.969915412928124 +He 0 +N 0 +O 31.963415169003554 +P 0 +S 0 +Si 30.387498778600435 +Ti 25.266440399851085 +V 0 +Cl 0 +K 29.268876738009332 +Na 30.583523600149626 +Mg 29.58401305283687 +F 0 +Ca 25.032372472772487 +Fe 30.0887028710399 +Al 25.400879179197386 +e- 0 diff --git a/elementfiles/element_abundances_1189907.8520920817.dat b/elementfiles/element_abundances_1189907.8520920817.dat new file mode 100644 index 000000000..4dcd64533 --- /dev/null +++ b/elementfiles/element_abundances_1189907.8520920817.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 27.96946708789735 +He 0 +N 0 +O 31.963415254876068 +P 0 +S 0 +Si 30.38749814374514 +Ti 25.266440380405566 +V 0 +Cl 0 +K 29.268876451573714 +Na 30.583523313684967 +Mg 29.584012418541153 +F 0 +Ca 25.032371842856406 +Fe 30.08870224456801 +Al 25.40087858017567 +e- 0 diff --git a/elementfiles/element_abundances_1231464.4297983614.dat b/elementfiles/element_abundances_1231464.4297983614.dat new file mode 100644 index 000000000..a7394622b --- /dev/null +++ b/elementfiles/element_abundances_1231464.4297983614.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 27.970168642807046 +He 0 +N 0 +O 31.96341516604615 +P 0 +S 0 +Si 30.38749842948788 +Ti 25.266440367279486 +V 0 +Cl 0 +K 29.268876568109242 +Na 30.583523430234596 +Mg 29.58401270401214 +F 0 +Ca 25.032372126200457 +Fe 30.088702526239416 +Al 25.400878848516086 +e- 0 diff --git a/elementfiles/element_abundances_1236794.808950034.dat b/elementfiles/element_abundances_1236794.808950034.dat new file mode 100644 index 000000000..c9853e2de --- /dev/null +++ b/elementfiles/element_abundances_1236794.808950034.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 0 +He 0 +N 0 +O 31.78925338271775 +P 0 +S 29.42707292310583 +Si 31.400240929553146 +Ti 27.45002202385889 +V 0 +Cl 0 +K 29.692210119123683 +Na 30.906460727356308 +Mg 30.246292984515083 +F 0 +Ca 26.589877845922707 +Fe 30.43399080798693 +Al 27.94924757444044 +e- 0 diff --git a/elementfiles/element_abundances_12483719.898671612.dat b/elementfiles/element_abundances_12483719.898671612.dat new file mode 100644 index 000000000..b48c34630 --- /dev/null +++ b/elementfiles/element_abundances_12483719.898671612.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 25.54710425407309 +He 0 +N 0 +O 31.963457354996294 +P 0 +S 0 +Si 30.387518307622642 +Ti 25.266460544150817 +V 0 +Cl 0 +K 29.26889661537634 +Na 30.583543477487602 +Mg 29.584032582418537 +F 0 +Ca 25.03239200673285 +Fe 30.088722408443715 +Al 25.400898744045477 +e- 0 diff --git a/elementfiles/element_abundances_12483734.39916113.dat b/elementfiles/element_abundances_12483734.39916113.dat new file mode 100644 index 000000000..17117dbc5 --- /dev/null +++ b/elementfiles/element_abundances_12483734.39916113.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 25.54662914485703 +He 0 +N 0 +O 31.963457355171617 +P 0 +S 0 +Si 30.387518307699306 +Ti 25.26646054422748 +V 0 +Cl 0 +K 29.268896615453002 +Na 30.583543477564263 +Mg 29.584032582495198 +F 0 +Ca 25.03239200680951 +Fe 30.088722408520375 +Al 25.400898744122138 +e- 0 diff --git a/elementfiles/element_abundances_12525295.670139339.dat b/elementfiles/element_abundances_12525295.670139339.dat new file mode 100644 index 000000000..11d7a424e --- /dev/null +++ b/elementfiles/element_abundances_12525295.670139339.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 25.547410882768254 +He 0 +N 0 +O 31.963457354883847 +P 0 +S 0 +Si 30.38751830756389 +Ti 25.266460544092062 +V 0 +Cl 0 +K 29.268896615317587 +Na 30.583543477428847 +Mg 29.584032582359782 +F 0 +Ca 25.032392006674094 +Fe 30.08872240838496 +Al 25.400898743986723 +e- 0 diff --git a/elementfiles/element_abundances_126247.27167060447.dat b/elementfiles/element_abundances_126247.27167060447.dat new file mode 100644 index 000000000..5cc73b1b0 --- /dev/null +++ b/elementfiles/element_abundances_126247.27167060447.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.419260563311127 +H 30.446783337268073 +He 0 +N 31.11217353903725 +O 31.74747844053393 +P 0 +S 30.319413246317097 +Si 26.515568741918813 +Ti 20.567496955634276 +V 0 +Cl 0 +K 25.738088645713738 +Na 27.114614762656565 +Mg 25.95791378176263 +F 0 +Ca 20.907537283561318 +Fe 26.717117944356936 +Al 20.89634416220245 +e- 0 diff --git a/elementfiles/element_abundances_128652.03603987762.dat b/elementfiles/element_abundances_128652.03603987762.dat new file mode 100644 index 000000000..e96b1f86e --- /dev/null +++ b/elementfiles/element_abundances_128652.03603987762.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.750312463360274 +He 0 +N 0 +O 31.52499946369307 +P 0 +S 29.01935505812042 +Si 30.840282578079357 +Ti 26.779659927415345 +V 0 +Cl 0 +K 29.07239169890416 +Na 30.28723419419411 +Mg 29.656907854258016 +F 0 +Ca 25.98576841777256 +Fe 29.838352865255 +Al 27.334459966798786 +e- 0 diff --git a/elementfiles/element_abundances_1303092.7095017824.dat b/elementfiles/element_abundances_1303092.7095017824.dat new file mode 100644 index 000000000..90e6345c2 --- /dev/null +++ b/elementfiles/element_abundances_1303092.7095017824.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 0 +He 0 +N 0 +O 31.78924880331034 +P 0 +S 29.42373412440676 +Si 31.400274562876042 +Ti 27.450037020816502 +V 0 +Cl 0 +K 29.69223364585927 +Na 30.90648436711396 +Mg 30.246321178920734 +F 0 +Ca 26.589903454065926 +Fe 30.434017893398433 +Al 27.949271734410488 +e- 0 diff --git a/elementfiles/element_abundances_1308741.605356239.dat b/elementfiles/element_abundances_1308741.605356239.dat new file mode 100644 index 000000000..6495d56e0 --- /dev/null +++ b/elementfiles/element_abundances_1308741.605356239.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 30.792537299803065 +He 0 +N 0 +O 31.846189767710623 +P 0 +S 0 +Si 31.047191748927183 +Ti 27.435410745894693 +V 0 +Cl 0 +K 29.707991337036248 +Na 30.938649677245404 +Mg 30.034453731131556 +F 0 +Ca 26.285584764885808 +Fe 30.340756283511332 +Al 27.57027814190389 +e- 0 diff --git a/elementfiles/element_abundances_134800.13592790216.dat b/elementfiles/element_abundances_134800.13592790216.dat new file mode 100644 index 000000000..a1dbaed0d --- /dev/null +++ b/elementfiles/element_abundances_134800.13592790216.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.742252005887327 +He 0 +N 0 +O 31.995648242622337 +P 0 +S 0 +Si 29.44386830105459 +Ti 25.625207314399628 +V 0 +Cl 0 +K 27.807393342103513 +Na 29.020711229604185 +Mg 28.33259759094567 +F 0 +Ca 24.695092857381162 +Fe 28.528505250780796 +Al 26.061634566377748 +e- 0 diff --git a/elementfiles/element_abundances_135083.43267812103.dat b/elementfiles/element_abundances_135083.43267812103.dat new file mode 100644 index 000000000..6de3969a4 --- /dev/null +++ b/elementfiles/element_abundances_135083.43267812103.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 30.52857710418934 +H 31.84484743169139 +He 0 +N 30.13752306503582 +O 31.249558660689047 +P 0 +S 27.24527689873993 +Si 30.79363654305434 +Ti 25.835570938091635 +V 0 +Cl 0 +K 28.47748756459256 +Na 29.694330871657208 +Mg 29.506979226840045 +F 0 +Ca 25.769689961776557 +Fe 29.66181560096854 +Al 27.003366624250848 +e- 0 diff --git a/elementfiles/element_abundances_136247.28429533163.dat b/elementfiles/element_abundances_136247.28429533163.dat new file mode 100644 index 000000000..b522b5906 --- /dev/null +++ b/elementfiles/element_abundances_136247.28429533163.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.41916112341232 +H 30.45008667048784 +He 0 +N 31.112035622840338 +O 31.747425644251237 +P 0 +S 30.318502446758632 +Si 26.496831556293724 +Ti 20.54453068257866 +V 0 +Cl 0 +K 25.725522438991394 +Na 27.10267849302027 +Mg 25.941486901823353 +F 0 +Ca 20.886118717806163 +Fe 26.70341525540235 +Al 20.870755955949207 +e- 0 diff --git a/elementfiles/element_abundances_137935.80596413644.dat b/elementfiles/element_abundances_137935.80596413644.dat new file mode 100644 index 000000000..f48b871cd --- /dev/null +++ b/elementfiles/element_abundances_137935.80596413644.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.554644384775038 +He 0 +N 0 +O 31.671930643783707 +P 0 +S 30.34393228613909 +Si 30.97435490768061 +Ti 27.134236488141624 +V 0 +Cl 0 +K 29.326167467710782 +Na 30.539657644024835 +Mg 29.855521055028575 +F 0 +Ca 26.214856665484366 +Fe 30.05004288956627 +Al 27.580642441371307 +e- 0 diff --git a/elementfiles/element_abundances_13851.540243927773.dat b/elementfiles/element_abundances_13851.540243927773.dat new file mode 100644 index 000000000..cc7c8aba0 --- /dev/null +++ b/elementfiles/element_abundances_13851.540243927773.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.51662068798789 +H 31.242630195925695 +He 0 +N 31.036511858571426 +O 31.567438881904874 +P 0 +S 26.06483552760113 +Si 30.155597875853676 +Ti 25.100347325362623 +V 0 +Cl 0 +K 27.992451262055386 +Na 29.22628058017993 +Mg 28.9602597912857 +F 0 +Ca 25.078408537563433 +Fe 29.16799706327479 +Al 26.163150197359617 +e- 0 diff --git a/elementfiles/element_abundances_13851.571967890028.dat b/elementfiles/element_abundances_13851.571967890028.dat new file mode 100644 index 000000000..09dc77a25 --- /dev/null +++ b/elementfiles/element_abundances_13851.571967890028.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.51662042493299 +H 31.24263062383031 +He 0 +N 31.03651255721614 +O 31.56743868330227 +P 0 +S 26.064835945288944 +Si 30.155598359834173 +Ti 25.1003478336151 +V 0 +Cl 0 +K 27.99245176542982 +Na 29.226281083535632 +Mg 28.960260275743842 +F 0 +Ca 25.078409022518088 +Fe 29.167997548086245 +Al 26.16315067861378 +e- 0 diff --git a/elementfiles/element_abundances_140644.28179969772.dat b/elementfiles/element_abundances_140644.28179969772.dat new file mode 100644 index 000000000..17887946d --- /dev/null +++ b/elementfiles/element_abundances_140644.28179969772.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.65120721079175 +He 0 +N 0 +O 31.656227209990305 +P 0 +S 30.03931198708701 +Si 30.721004376253067 +Ti 27.00113624384059 +V 0 +Cl 0 +K 29.138810565210942 +Na 30.351212379854474 +Mg 29.64774766312237 +F 0 +Ca 26.025008294999743 +Fe 29.850206537777048 +Al 27.393057289084418 +e- 0 diff --git a/elementfiles/element_abundances_1409979.1118734349.dat b/elementfiles/element_abundances_1409979.1118734349.dat new file mode 100644 index 000000000..96cee34de --- /dev/null +++ b/elementfiles/element_abundances_1409979.1118734349.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.424408738294566 +H 30.39914907666191 +He 0 +N 31.123932461909696 +O 31.74688898733506 +P 0 +S 30.251668253014472 +Si 26.34023087012252 +Ti 20.356178418765808 +V 0 +Cl 0 +K 25.592939568844514 +Na 26.973274906014296 +Mg 25.796476200146756 +F 0 +Ca 20.715932504105265 +Fe 26.572165367007862 +Al 20.684471026618215 +e- 0 diff --git a/elementfiles/element_abundances_1417821.4787787495.dat b/elementfiles/element_abundances_1417821.4787787495.dat new file mode 100644 index 000000000..189aa9c56 --- /dev/null +++ b/elementfiles/element_abundances_1417821.4787787495.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 30.946150620112178 +He 0 +N 0 +O 31.833020413376335 +P 0 +S 0 +Si 31.035979881154503 +Ti 27.428963631372945 +V 0 +Cl 0 +K 29.69925178257507 +Na 30.929874431639753 +Mg 30.024944176599043 +F 0 +Ca 26.27693190221862 +Fe 30.331906341170352 +Al 27.561753959603692 +e- 0 diff --git a/elementfiles/element_abundances_142208.87227055765.dat b/elementfiles/element_abundances_142208.87227055765.dat new file mode 100644 index 000000000..649e38e28 --- /dev/null +++ b/elementfiles/element_abundances_142208.87227055765.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.689011330959207 +He 0 +N 0 +O 31.573375896574177 +P 0 +S 29.42283273258423 +Si 30.951420244275837 +Ti 26.96863642478538 +V 0 +Cl 0 +K 29.225734117147116 +Na 30.440175029452075 +Mg 29.7882179252534 +F 0 +Ca 26.127332128782474 +Fe 29.97400434980752 +Al 27.48398584287655 +e- 0 diff --git a/elementfiles/element_abundances_144299.5775328795.dat b/elementfiles/element_abundances_144299.5775328795.dat new file mode 100644 index 000000000..af6616f18 --- /dev/null +++ b/elementfiles/element_abundances_144299.5775328795.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 0 +He 0 +N 0 +O 31.787419713780515 +P 0 +S 23.58208362897821 +Si 31.407220992360237 +Ti 27.450497446342425 +V 0 +Cl 0 +K 29.69566292585327 +Na 30.9099526897732 +Mg 30.251384721724683 +F 0 +Ca 26.594068784480513 +Fe 30.438696509096523 +Al 27.952925647631584 +e- 0 diff --git a/elementfiles/element_abundances_144666.8640716984.dat b/elementfiles/element_abundances_144666.8640716984.dat new file mode 100644 index 000000000..ebfbfa6ac --- /dev/null +++ b/elementfiles/element_abundances_144666.8640716984.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.896075885118027 +He 0 +N 0 +O 31.321428944266007 +P 0 +S 28.5815356870045 +Si 29.33519655659129 +Ti 24.81916220848154 +V 0 +Cl 0 +K 27.313499504708123 +Na 28.529712839508534 +Mg 28.077468652832216 +F 0 +Ca 24.361396960147374 +Fe 28.24058063558378 +Al 25.634846032567964 +e- 0 diff --git a/elementfiles/element_abundances_144699.2143378657.dat b/elementfiles/element_abundances_144699.2143378657.dat new file mode 100644 index 000000000..88d44654c --- /dev/null +++ b/elementfiles/element_abundances_144699.2143378657.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.89600781958471 +He 0 +N 0 +O 31.321577839941614 +P 0 +S 28.58076000905455 +Si 29.343148958652897 +Ti 24.827303513250463 +V 0 +Cl 0 +K 27.32156245123399 +Na 28.537775436560512 +Mg 28.08544009397283 +F 0 +Ca 24.36938158789418 +Fe 28.248557293647664 +Al 25.642865208655827 +e- 0 diff --git a/elementfiles/element_abundances_146247.29792006005.dat b/elementfiles/element_abundances_146247.29792006005.dat new file mode 100644 index 000000000..2a9fd3d35 --- /dev/null +++ b/elementfiles/element_abundances_146247.29792006005.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.41910251026948 +H 30.452607146360446 +He 0 +N 31.111976087466367 +O 31.747378639298034 +P 0 +S 30.317454781909277 +Si 26.490816632268675 +Ti 20.530297724017935 +V 0 +Cl 0 +K 25.719948148665086 +Na 27.09752536444512 +Mg 25.93701421362733 +F 0 +Ca 20.87830759063381 +Fe 26.700757189296745 +Al 20.862652292699693 +e- 0 diff --git a/elementfiles/element_abundances_1496383.5672867657.dat b/elementfiles/element_abundances_1496383.5672867657.dat new file mode 100644 index 000000000..fc3ae1bec --- /dev/null +++ b/elementfiles/element_abundances_1496383.5672867657.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 30.997812778967276 +He 0 +N 0 +O 31.82736697191808 +P 0 +S 0 +Si 31.03098377194283 +Ti 27.42604021159238 +V 0 +Cl 0 +K 29.695331335061592 +Na 30.925938321894634 +Mg 30.02069233163694 +F 0 +Ca 26.2730530273931 +Fe 30.32794175905321 +Al 27.55792885465705 +e- 0 diff --git a/elementfiles/element_abundances_151323.55043223692.dat b/elementfiles/element_abundances_151323.55043223692.dat new file mode 100644 index 000000000..436cf10a4 --- /dev/null +++ b/elementfiles/element_abundances_151323.55043223692.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 30.66458128437193 +H 31.873276284305373 +He 0 +N 30.278660992960873 +O 31.147119223725902 +P 0 +S 27.269953589922572 +Si 30.602515060543798 +Ti 25.508136913239262 +V 0 +Cl 0 +K 28.161536244631783 +Na 29.378575879067267 +Mg 29.311222245016324 +F 0 +Ca 25.570312881360472 +Fe 29.46466507890369 +Al 26.838224989824653 +e- 0 diff --git a/elementfiles/element_abundances_15347933.391977733.dat b/elementfiles/element_abundances_15347933.391977733.dat new file mode 100644 index 000000000..c1bb57dd0 --- /dev/null +++ b/elementfiles/element_abundances_15347933.391977733.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.378719497954044 +H 30.777390896377145 +He 0 +N 31.038794663485383 +O 31.745240519988425 +P 0 +S 30.54828145894463 +Si 26.578474717135606 +Ti 20.54650781861035 +V 0 +Cl 0 +K 25.86669741034776 +Na 27.25178599511295 +Mg 26.051832510687547 +F 0 +Ca 20.933714381757127 +Fe 26.848176992993025 +Al 20.878961336790283 +e- 0 diff --git a/elementfiles/element_abundances_156247.31254478983.dat b/elementfiles/element_abundances_156247.31254478983.dat new file mode 100644 index 000000000..983bb7966 --- /dev/null +++ b/elementfiles/element_abundances_156247.31254478983.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.419081208505766 +H 30.45442841872671 +He 0 +N 31.111987051460467 +O 31.747337458293554 +P 0 +S 30.316283380424007 +Si 26.474420436476862 +Ti 20.513302749130283 +V 0 +Cl 0 +K 25.709212796953413 +Na 27.08721186777695 +Mg 25.92216041904075 +F 0 +Ca 20.860113132988523 +Fe 26.68773263368762 +Al 20.84063582979267 +e- 0 diff --git a/elementfiles/element_abundances_158188.0001454483.dat b/elementfiles/element_abundances_158188.0001454483.dat new file mode 100644 index 000000000..7aa78dba7 --- /dev/null +++ b/elementfiles/element_abundances_158188.0001454483.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 30.249745133985474 +H 30.482097991943913 +He 0 +N 29.241632159507816 +O 31.87964483400237 +P 0 +S 31.278174145041238 +Si 29.172980769810053 +Ti 25.402323694532882 +V 0 +Cl 0 +K 27.562798489516535 +Na 28.775697951638566 +Mg 28.07951733556797 +F 0 +Ca 24.449152983471127 +Fe 28.278577628302298 +Al 25.81682131053705 +e- 0 diff --git a/elementfiles/element_abundances_1619392.1905037467.dat b/elementfiles/element_abundances_1619392.1905037467.dat new file mode 100644 index 000000000..27d1f64fc --- /dev/null +++ b/elementfiles/element_abundances_1619392.1905037467.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 27.575805267857373 +He 0 +N 0 +O 31.96344044396834 +P 0 +S 0 +Si 30.3875102080189 +Ti 25.266452444612355 +V 0 +Cl 0 +K 29.268888515809557 +Na 30.583535377920814 +Mg 29.58402448281485 +F 0 +Ca 25.032383907129628 +Fe 30.08871430884086 +Al 25.400890644445532 +e- 0 diff --git a/elementfiles/element_abundances_1619406.6894180984.dat b/elementfiles/element_abundances_1619406.6894180984.dat new file mode 100644 index 000000000..e0e52646c --- /dev/null +++ b/elementfiles/element_abundances_1619406.6894180984.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 27.575347846706073 +He 0 +N 0 +O 31.96344046193915 +P 0 +S 0 +Si 30.387510216625117 +Ti 25.26645245321892 +V 0 +Cl 0 +K 29.26888852441597 +Na 30.583535386527227 +Mg 29.58402449142107 +F 0 +Ca 25.03238391573585 +Fe 30.08871431744708 +Al 25.40089065305177 +e- 0 diff --git a/elementfiles/element_abundances_162277.40360978342.dat b/elementfiles/element_abundances_162277.40360978342.dat new file mode 100644 index 000000000..d6df9c32e --- /dev/null +++ b/elementfiles/element_abundances_162277.40360978342.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.32508100218915 +H 31.593233326020872 +He 0 +N 30.917323691746137 +O 31.457510807129683 +P 0 +S 27.903893264838196 +Si 30.350756288727165 +Ti 25.39828870881895 +V 0 +Cl 0 +K 28.039127593536136 +Na 29.25596365722898 +Mg 29.064319687438793 +F 0 +Ca 25.32720147387061 +Fe 29.21922193165714 +Al 26.56030926887609 +e- 0 diff --git a/elementfiles/element_abundances_16247.198798660364.dat b/elementfiles/element_abundances_16247.198798660364.dat new file mode 100644 index 000000000..c3038a071 --- /dev/null +++ b/elementfiles/element_abundances_16247.198798660364.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.42826677536151 +H 30.20534533121892 +He 0 +N 31.13310052167259 +O 31.74814108682955 +P 0 +S 30.301248047553248 +Si 27.121458810348255 +Ti 21.5089588182663 +V 0 +Cl 0 +K 26.149280183019787 +Na 27.49636485797365 +Mg 26.45190705253001 +F 0 +Ca 21.63622792540333 +Fe 27.086362363753146 +Al 21.77724098747484 +e- 0 diff --git a/elementfiles/element_abundances_16496.18995811324.dat b/elementfiles/element_abundances_16496.18995811324.dat new file mode 100644 index 000000000..b91fa0719 --- /dev/null +++ b/elementfiles/element_abundances_16496.18995811324.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 30.695955796393157 +H 30.254190044508572 +He 0 +N 31.50022947368232 +O 31.642418071429667 +P 0 +S 31.24794386289633 +Si 27.20397555774168 +Ti 22.01357241450546 +V 0 +Cl 0 +K 26.098683722040853 +Na 27.4173161248531 +Mg 26.417506761448607 +F 0 +Ca 21.832973886496738 +Fe 26.937406521326523 +Al 22.166231304746702 +e- 0 diff --git a/elementfiles/element_abundances_1660963.4456072713.dat b/elementfiles/element_abundances_1660963.4456072713.dat new file mode 100644 index 000000000..fe8f34258 --- /dev/null +++ b/elementfiles/element_abundances_1660963.4456072713.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 27.57618509149921 +He 0 +N 0 +O 31.9634404290321 +P 0 +S 0 +Si 30.3875102008615 +Ti 25.266452437454838 +V 0 +Cl 0 +K 29.26888850865209 +Na 30.583535370763347 +Mg 29.58402447565745 +F 0 +Ca 25.032383899972224 +Fe 30.088714301683456 +Al 25.400890637288125 +e- 0 diff --git a/elementfiles/element_abundances_1661.4690748796243.dat b/elementfiles/element_abundances_1661.4690748796243.dat new file mode 100644 index 000000000..0d4e25ac6 --- /dev/null +++ b/elementfiles/element_abundances_1661.4690748796243.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 30.665629484002565 +H 29.95715067690496 +He 0 +N 31.495346891775036 +O 31.65552011687732 +P 0 +S 31.253543029618008 +Si 27.507698562500853 +Ti 23.9112796141277 +V 0 +Cl 0 +K 26.422237084104587 +Na 27.67575896581235 +Mg 26.536053889394278 +F 0 +Ca 22.60567024788076 +Fe 26.950066876412993 +Al 23.778819833069434 +e- 0 diff --git a/elementfiles/element_abundances_166247.3281695211.dat b/elementfiles/element_abundances_166247.3281695211.dat new file mode 100644 index 000000000..3ea9eba42 --- /dev/null +++ b/elementfiles/element_abundances_166247.3281695211.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.419091272413798 +H 30.455661473040397 +He 0 +N 31.112057073662253 +O 31.747301059120964 +P 0 +S 30.315005696986532 +Si 26.46917374013588 +Ti 20.50465246516405 +V 0 +Cl 0 +K 25.704678436381855 +Na 27.08288883113751 +Mg 25.91768571497675 +F 0 +Ca 20.853964128230615 +Fe 26.684170194719023 +Al 20.83401424439528 +e- 0 diff --git a/elementfiles/element_abundances_176247.3447942539.dat b/elementfiles/element_abundances_176247.3447942539.dat new file mode 100644 index 000000000..fd485dd95 --- /dev/null +++ b/elementfiles/element_abundances_176247.3447942539.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.419126725795195 +H 30.456424716638367 +He 0 +N 31.11217437036741 +O 31.747268867153707 +P 0 +S 30.313643048958994 +Si 26.455300533425294 +Ti 20.48837586526298 +V 0 +Cl 0 +K 25.695249983601194 +Na 27.073883580695004 +Mg 25.905356782916037 +F 0 +Ca 20.838284164221193 +Fe 26.673674939996566 +Al 20.815339827197533 +e- 0 diff --git a/elementfiles/element_abundances_177307.73883882235.dat b/elementfiles/element_abundances_177307.73883882235.dat new file mode 100644 index 000000000..7c01ac1e4 --- /dev/null +++ b/elementfiles/element_abundances_177307.73883882235.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 30.74883443041596 +H 31.88881698536694 +He 0 +N 30.366848681948692 +O 31.06679852922906 +P 0 +S 27.280704342684714 +Si 30.406080611550255 +Ti 25.22052156264018 +V 0 +Cl 0 +K 27.853387303597856 +Na 29.070613391118275 +Mg 29.11232562734658 +F 0 +Ca 25.36948449689978 +Fe 29.265020394073936 +Al 26.697960924222688 +e- 0 diff --git a/elementfiles/element_abundances_178188.03278304992.dat b/elementfiles/element_abundances_178188.03278304992.dat new file mode 100644 index 000000000..a59e0df54 --- /dev/null +++ b/elementfiles/element_abundances_178188.03278304992.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.00477410461694 +He 0 +N 0 +O 31.831108822405376 +P 0 +S 0 +Si 31.1044196290872 +Ti 27.461742619938633 +V 0 +Cl 0 +K 29.56521355724319 +Na 30.776733343303615 +Mg 30.064636217546052 +F 0 +Ca 26.453512487595432 +Fe 30.272336011405883 +Al 27.820701386638042 +e- 0 diff --git a/elementfiles/element_abundances_179172.53693135455.dat b/elementfiles/element_abundances_179172.53693135455.dat new file mode 100644 index 000000000..9ce0fb3e8 --- /dev/null +++ b/elementfiles/element_abundances_179172.53693135455.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.417279794146516 +He 0 +N 0 +O 31.707406765802226 +P 0 +S 30.34090834776068 +Si 31.038263095628857 +Ti 27.223754556174956 +V 0 +Cl 0 +K 29.594175506417187 +Na 30.826016727935304 +Mg 29.963649012731576 +F 0 +Ca 26.179846619873054 +Fe 30.243313156499145 +Al 27.451888038267953 +e- 0 diff --git a/elementfiles/element_abundances_180081.62725064292.dat b/elementfiles/element_abundances_180081.62725064292.dat new file mode 100644 index 000000000..831f5edd9 --- /dev/null +++ b/elementfiles/element_abundances_180081.62725064292.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.301813032435625 +He 0 +N 0 +O 31.783583609195496 +P 0 +S 0 +Si 30.96268544971463 +Ti 27.33043309122024 +V 0 +Cl 0 +K 29.61286952975015 +Na 30.843676368181228 +Mg 29.942769468923345 +F 0 +Ca 26.19023196917457 +Fe 30.24625081510403 +Al 27.47429066018516 +e- 0 diff --git a/elementfiles/element_abundances_180430.01906572023.dat b/elementfiles/element_abundances_180430.01906572023.dat new file mode 100644 index 000000000..c239dc934 --- /dev/null +++ b/elementfiles/element_abundances_180430.01906572023.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.30575793482839 +He 0 +N 0 +O 31.782752938952722 +P 0 +S 0 +Si 30.961311395328785 +Ti 27.328524594820415 +V 0 +Cl 0 +K 29.611218471046687 +Na 30.84202908354531 +Mg 29.941210956163776 +F 0 +Ca 26.188577968338116 +Fe 30.244618942864655 +Al 27.472618284623916 +e- 0 diff --git a/elementfiles/element_abundances_184188.04127432837.dat b/elementfiles/element_abundances_184188.04127432837.dat new file mode 100644 index 000000000..37e85f5b2 --- /dev/null +++ b/elementfiles/element_abundances_184188.04127432837.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.268037795405284 +He 0 +N 0 +O 31.795231365044856 +P 0 +S 0 +Si 31.04601941941885 +Ti 27.375878542968742 +V 0 +Cl 0 +K 29.491446589642905 +Na 30.703299095209722 +Mg 29.993940081038044 +F 0 +Ca 26.378688807612587 +Fe 30.19976873648594 +Al 27.74636706362402 +e- 0 diff --git a/elementfiles/element_abundances_186247.36241898837.dat b/elementfiles/element_abundances_186247.36241898837.dat new file mode 100644 index 000000000..46ee22277 --- /dev/null +++ b/elementfiles/element_abundances_186247.36241898837.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.419184975859643 +H 30.45676402825536 +He 0 +N 31.112334150843836 +O 31.747240324471466 +P 0 +S 30.312201605438982 +Si 26.448308251391005 +Ti 20.47930000278477 +V 0 +Cl 0 +K 25.689881582925643 +Na 27.068727128473054 +Mg 25.899137159655442 +F 0 +Ca 20.830386211518494 +Fe 26.668372729932052 +Al 20.80635304458506 +e- 0 diff --git a/elementfiles/element_abundances_190081.64525880566.dat b/elementfiles/element_abundances_190081.64525880566.dat new file mode 100644 index 000000000..3f4d77c1f --- /dev/null +++ b/elementfiles/element_abundances_190081.64525880566.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.324913368209135 +He 0 +N 0 +O 31.778580830766657 +P 0 +S 0 +Si 30.954388154203254 +Ti 27.31896906259245 +V 0 +Cl 0 +K 29.602930990545055 +Na 30.83376011689077 +Mg 29.933381368434677 +F 0 +Ca 26.180278298942184 +Fe 30.236428265635425 +Al 27.46422675618927 +e- 0 diff --git a/elementfiles/element_abundances_190430.03710872214.dat b/elementfiles/element_abundances_190430.03710872214.dat new file mode 100644 index 000000000..8a5ae7fdd --- /dev/null +++ b/elementfiles/element_abundances_190430.03710872214.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.328003114846876 +He 0 +N 0 +O 31.777885757188255 +P 0 +S 0 +Si 30.95323080014198 +Ti 27.317381466898887 +V 0 +Cl 0 +K 29.601550669231155 +Na 30.832382809869376 +Mg 29.932076216536426 +F 0 +Ca 26.178896349465695 +Fe 30.23506413089974 +Al 27.46282957753094 +e- 0 diff --git a/elementfiles/element_abundances_194188.05969313247.dat b/elementfiles/element_abundances_194188.05969313247.dat new file mode 100644 index 000000000..e93dafc1d --- /dev/null +++ b/elementfiles/element_abundances_194188.05969313247.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.831035907002303 +He 0 +N 0 +O 31.434681834622765 +P 0 +S 28.820691680694132 +Si 30.559775038459826 +Ti 26.25906527307402 +V 0 +Cl 0 +K 28.660446120393836 +Na 29.876168574477212 +Mg 29.329258502445704 +F 0 +Ca 25.631083727091777 +Fe 29.499538630543626 +Al 26.944106793938925 +e- 0 diff --git a/elementfiles/element_abundances_1944.6224992904913.dat b/elementfiles/element_abundances_1944.6224992904913.dat new file mode 100644 index 000000000..fab29282c --- /dev/null +++ b/elementfiles/element_abundances_1944.6224992904913.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.436738109508514 +H 29.720416690948273 +He 0 +N 31.178958847036984 +O 31.74149609950566 +P 0 +S 30.2735869260159 +Si 27.766043505621127 +Ti 23.624020924450527 +V 0 +Cl 0 +K 26.688091854771454 +Na 27.965442445829666 +Mg 26.810238529172437 +F 0 +Ca 22.599736738253913 +Fe 27.220232006702474 +Al 23.50220871397206 +e- 0 diff --git a/elementfiles/element_abundances_1959737.5439641965.dat b/elementfiles/element_abundances_1959737.5439641965.dat new file mode 100644 index 000000000..10d835441 --- /dev/null +++ b/elementfiles/element_abundances_1959737.5439641965.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.423835216056812 +H 30.40669134002144 +He 0 +N 31.122629478203322 +O 31.74691798311895 +P 0 +S 30.25824196076894 +Si 26.353671939309677 +Ti 20.365540018861083 +V 0 +Cl 0 +K 25.60357789619549 +Na 26.983913322474393 +Mg 25.809917753418002 +F 0 +Ca 20.729372097470876 +Fe 26.585601948982656 +Al 20.69984883221692 +e- 0 diff --git a/elementfiles/element_abundances_196247.3810437246.dat b/elementfiles/element_abundances_196247.3810437246.dat new file mode 100644 index 000000000..2cfc10910 --- /dev/null +++ b/elementfiles/element_abundances_196247.3810437246.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.419261763949727 +H 30.456758242115235 +He 0 +N 31.11252833234643 +O 31.74721485867234 +P 0 +S 30.310695952495244 +Si 26.44367468402618 +Ti 20.470877997482283 +V 0 +Cl 0 +K 25.68570766715873 +Na 27.064765417740066 +Mg 25.895276733426897 +F 0 +Ca 20.824845023604055 +Fe 26.66542870356637 +Al 20.800520231661142 +e- 0 diff --git a/elementfiles/element_abundances_19689514.663194325.dat b/elementfiles/element_abundances_19689514.663194325.dat new file mode 100644 index 000000000..e9e5eccab --- /dev/null +++ b/elementfiles/element_abundances_19689514.663194325.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 25.142107983361882 +He 0 +N 0 +O 31.963457431356566 +P 0 +S 0 +Si 30.387518672934256 +Ti 25.266460610617152 +V 0 +Cl 0 +K 29.26889681149407 +Na 30.58354367361943 +Mg 29.584032947458414 +F 0 +Ca 25.032392369645958 +Fe 30.08872276968431 +Al 25.400899091956134 +e- 0 diff --git a/elementfiles/element_abundances_19689529.164728574.dat b/elementfiles/element_abundances_19689529.164728574.dat new file mode 100644 index 000000000..a8b4947da --- /dev/null +++ b/elementfiles/element_abundances_19689529.164728574.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 25.141631397515805 +He 0 +N 0 +O 31.963457431425535 +P 0 +S 0 +Si 30.387518672967285 +Ti 25.266460610650185 +V 0 +Cl 0 +K 29.2688968115271 +Na 30.58354367365246 +Mg 29.584032947491444 +F 0 +Ca 25.032392369678988 +Fe 30.08872276971734 +Al 25.40089909198916 +e- 0 diff --git a/elementfiles/element_abundances_19731093.430152837.dat b/elementfiles/element_abundances_19731093.430152837.dat new file mode 100644 index 000000000..0bdfb2cee --- /dev/null +++ b/elementfiles/element_abundances_19731093.430152837.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 25.14245492564241 +He 0 +N 0 +O 31.9634574313061 +P 0 +S 0 +Si 30.38751867291256 +Ti 25.26646061059546 +V 0 +Cl 0 +K 29.268896811472374 +Na 30.583543673597735 +Mg 29.584032947436718 +F 0 +Ca 25.03239236962426 +Fe 30.088722769662613 +Al 25.400899091934434 +e- 0 diff --git a/elementfiles/element_abundances_197837.63052414532.dat b/elementfiles/element_abundances_197837.63052414532.dat new file mode 100644 index 000000000..a0a9c7362 --- /dev/null +++ b/elementfiles/element_abundances_197837.63052414532.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.883352601860512 +He 0 +N 0 +O 31.347867827089107 +P 0 +S 28.54567100963517 +Si 29.97607690273299 +Ti 25.497955422128904 +V 0 +Cl 0 +K 27.976430127769795 +Na 29.192570929435927 +Mg 28.722322699560422 +F 0 +Ca 25.008982218090008 +Fe 28.886517234726472 +Al 26.289427544394947 +e- 0 diff --git a/elementfiles/element_abundances_198083.80630259047.dat b/elementfiles/element_abundances_198083.80630259047.dat new file mode 100644 index 000000000..68325b565 --- /dev/null +++ b/elementfiles/element_abundances_198083.80630259047.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.879981439126436 +He 0 +N 0 +O 31.35446698914318 +P 0 +S 28.54476768492922 +Si 30.054803617432604 +Ti 25.58732178454234 +V 0 +Cl 0 +K 28.06129840385018 +Na 29.27741794364283 +Mg 28.802221313620937 +F 0 +Ca 25.08967831715525 +Fe 28.966732710800496 +Al 26.37210351180928 +e- 0 diff --git a/elementfiles/element_abundances_1995937.6102277595.dat b/elementfiles/element_abundances_1995937.6102277595.dat new file mode 100644 index 000000000..a4c9d9113 --- /dev/null +++ b/elementfiles/element_abundances_1995937.6102277595.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 30.973698748078668 +He 0 +N 0 +O 31.83009492116589 +P 0 +S 0 +Si 31.0334077033583 +Ti 27.427463053877354 +V 0 +Cl 0 +K 29.697235717264476 +Na 30.927850279189638 +Mg 30.02275650631321 +F 0 +Ca 26.274937038426145 +Fe 30.32986716401168 +Al 27.55978706175309 +e- 0 diff --git a/elementfiles/element_abundances_2.0.dat b/elementfiles/element_abundances_2.0.dat index dc541e4bf..b7e93a135 100644 --- a/elementfiles/element_abundances_2.0.dat +++ b/elementfiles/element_abundances_2.0.dat @@ -1,20 +1,20 @@ # Abundances determined using atmosphere_builder -C 31.326347796778787 -H 31.503473277841003 +C 30.566743205493523 +H 30.062859105484677 He 0 -N 30.886304790636864 -O 31.522651093130683 +N 31.339656671770147 +O 31.742908202714684 P 0 -S 26.2880388611602 -Si 30.676136542901123 -Ti 25.915301074327562 +S 31.25219861022257 +Si 28.774307805299127 +Ti 25.064804282218144 V 0 Cl 0 -K 28.502073039566504 -Na 29.718582603153173 -Mg 29.39867549146205 +K 27.197851528322023 +Na 28.410144181623014 +Mg 27.70535044375208 F 0 -Ca 25.669421846980153 -Fe 29.55608341565595 -Al 26.906354079560934 +Ca 24.084171593056404 +Fe 27.90850894510053 +Al 25.45220142440605 e- 0 diff --git a/elementfiles/element_abundances_20092.0010184.dat b/elementfiles/element_abundances_20092.0010184.dat index 8e2ca9972..88d9efd3c 100644 --- a/elementfiles/element_abundances_20092.0010184.dat +++ b/elementfiles/element_abundances_20092.0010184.dat @@ -1,20 +1,20 @@ # Abundances determined using atmosphere_builder -C 30.538561999082344 -H 31.732869964147646 +C 0 +H 31.19436545319043 He 0 -N 30.287894686529288 -O 31.437787692772293 +N 0 +O 31.753798721123363 P 0 -S 26.536225938762605 -Si 31.011998416211703 -Ti 26.40019448145818 +S 30.108473812945952 +Si 31.226648960434964 +Ti 27.351441478002304 V 0 Cl 0 -K 28.933236294924495 -Na 30.14961337808371 -Mg 29.745521155782722 +K 29.55935057691832 +Na 30.773104512356255 +Mg 30.09596294304045 F 0 -Ca 26.023284746089036 -Fe 29.90620455581912 -Al 27.279942656841097 +Ca 26.450186628405337 +Fe 30.288254662841855 +Al 27.81439152640813 e- 0 diff --git a/elementfiles/element_abundances_202237.15327629726.dat b/elementfiles/element_abundances_202237.15327629726.dat new file mode 100644 index 000000000..86ebcc1ef --- /dev/null +++ b/elementfiles/element_abundances_202237.15327629726.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.2965885521931 +He 0 +N 0 +O 31.997214291851666 +P 0 +S 0 +Si 29.439853560365727 +Ti 25.62587030577571 +V 0 +Cl 0 +K 27.805934930800763 +Na 29.01921409357343 +Mg 28.33026385172132 +F 0 +Ca 24.69345087549683 +Fe 28.526475671613596 +Al 26.060136413113838 +e- 0 diff --git a/elementfiles/element_abundances_202325.63724276182.dat b/elementfiles/element_abundances_202325.63724276182.dat new file mode 100644 index 000000000..b7bbef4fb --- /dev/null +++ b/elementfiles/element_abundances_202325.63724276182.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.725716222728018 +He 0 +N 0 +O 31.995774155393455 +P 0 +S 0 +Si 29.35578563746704 +Ti 25.571802977164594 +V 0 +Cl 0 +K 27.927479063496875 +Na 29.15917776867111 +Mg 28.28923645175428 +F 0 +Ca 24.510445200834702 +Fe 28.57269042031071 +Al 25.78533153820707 +e- 0 diff --git a/elementfiles/element_abundances_203471.83570159713.dat b/elementfiles/element_abundances_203471.83570159713.dat new file mode 100644 index 000000000..ca805e8c0 --- /dev/null +++ b/elementfiles/element_abundances_203471.83570159713.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.4039444663755 +He 0 +N 0 +O 31.718702338372903 +P 0 +S 30.378345285333328 +Si 31.100958246212933 +Ti 27.252513532629223 +V 0 +Cl 0 +K 29.448231555804124 +Na 30.661786289153703 +Mg 29.979254481242904 +F 0 +Ca 26.337370517864166 +Fe 30.173242923867058 +Al 27.70282009311476 +e- 0 diff --git a/elementfiles/element_abundances_206081.67407186603.dat b/elementfiles/element_abundances_206081.67407186603.dat new file mode 100644 index 000000000..0e2f7ec0d --- /dev/null +++ b/elementfiles/element_abundances_206081.67407186603.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.354132930170586 +He 0 +N 0 +O 31.77175069098854 +P 0 +S 0 +Si 30.942949168582064 +Ti 27.303405621508773 +V 0 +Cl 0 +K 29.589354721285495 +Na 30.820212608732607 +Mg 29.92052949022625 +F 0 +Ca 26.166690636023713 +Fe 30.22301138223926 +Al 27.4504906053218 +e- 0 diff --git a/elementfiles/element_abundances_206180.31331218343.dat b/elementfiles/element_abundances_206180.31331218343.dat new file mode 100644 index 000000000..565103a21 --- /dev/null +++ b/elementfiles/element_abundances_206180.31331218343.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.451989138569665 +He 0 +N 0 +O 31.748468791494545 +P 0 +S 0 +Si 30.966048849629832 +Ti 27.270249911715734 +V 0 +Cl 0 +K 29.39719415333953 +Na 30.609338252816062 +Mg 29.902868699885797 +F 0 +Ca 26.283753968298523 +Fe 30.10695473820065 +Al 27.651710511715372 +e- 0 diff --git a/elementfiles/element_abundances_206247.4006684627.dat b/elementfiles/element_abundances_206247.4006684627.dat new file mode 100644 index 000000000..735d63ce1 --- /dev/null +++ b/elementfiles/element_abundances_206247.4006684627.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.41935537358361 +H 30.456440421742794 +He 0 +N 31.112753634228216 +O 31.747192290254773 +P 0 +S 30.309131409975745 +Si 26.4343864295966 +Ti 20.461215069414393 +V 0 +Cl 0 +K 25.67921916079013 +Na 27.05848925964533 +Mg 25.886761484316658 +F 0 +Ca 20.81464915321701 +Fe 26.657835334986046 +Al 20.788433942489313 +e- 0 diff --git a/elementfiles/element_abundances_206430.0659775252.dat b/elementfiles/element_abundances_206430.0659775252.dat new file mode 100644 index 000000000..e4b2f0cc2 --- /dev/null +++ b/elementfiles/element_abundances_206430.0659775252.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.355761985306366 +He 0 +N 0 +O 31.771352420146396 +P 0 +S 0 +Si 30.94227758912443 +Ti 27.302500702689745 +V 0 +Cl 0 +K 29.588562236633503 +Na 30.819421742250437 +Mg 29.919778240459536 +F 0 +Ca 26.165897788210927 +Fe 30.222228196189487 +Al 27.449689189998146 +e- 0 diff --git a/elementfiles/element_abundances_207744.90480841248.dat b/elementfiles/element_abundances_207744.90480841248.dat new file mode 100644 index 000000000..487b0c60c --- /dev/null +++ b/elementfiles/element_abundances_207744.90480841248.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.673542994725384 +He 0 +N 0 +O 31.583785905305113 +P 0 +S 29.445701365071862 +Si 30.974405098506306 +Ti 27.003043761511307 +V 0 +Cl 0 +K 29.254910898109983 +Na 30.469286668977315 +Mg 29.814392388949152 +F 0 +Ca 26.15506343706465 +Fe 30.000843154089917 +Al 27.512711957739 +e- 0 diff --git a/elementfiles/element_abundances_209665.52893557615.dat b/elementfiles/element_abundances_209665.52893557615.dat new file mode 100644 index 000000000..9ab9c7db8 --- /dev/null +++ b/elementfiles/element_abundances_209665.52893557615.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.87386022507906 +He 0 +N 0 +O 31.366050433207842 +P 0 +S 28.546161191715253 +Si 30.167513517805606 +Ti 25.719789289112235 +V 0 +Cl 0 +K 28.185363096672564 +Na 29.401442028409775 +Mg 28.917176133746995 +F 0 +Ca 25.206150791413204 +Fe 29.082291496387594 +Al 26.492262141761778 +e- 0 diff --git a/elementfiles/element_abundances_210039.81540069683.dat b/elementfiles/element_abundances_210039.81540069683.dat new file mode 100644 index 000000000..2ce400b06 --- /dev/null +++ b/elementfiles/element_abundances_210039.81540069683.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 30.89463831630578 +He 0 +N 0 +O 31.962456301411407 +P 0 +S 0 +Si 29.437134112265475 +Ti 25.607790853577978 +V 0 +Cl 0 +K 27.79482553283156 +Na 29.008230275281296 +Mg 28.32206795814612 +F 0 +Ca 24.682987352061268 +Fe 28.51728373284631 +Al 26.04917254506855 +e- 0 diff --git a/elementfiles/element_abundances_2105018.2332329913.dat b/elementfiles/element_abundances_2105018.2332329913.dat new file mode 100644 index 000000000..15b152f18 --- /dev/null +++ b/elementfiles/element_abundances_2105018.2332329913.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.037290811305077 +He 0 +N 0 +O 31.822592672718244 +P 0 +S 0 +Si 31.026535468477075 +Ti 27.42310237100463 +V 0 +Cl 0 +K 29.69166699088387 +Na 30.922262511421472 +Mg 30.0167878421109 +F 0 +Ca 26.26942045135413 +Fe 30.324246733926604 +Al 27.554334625073885 +e- 0 diff --git a/elementfiles/element_abundances_21076.50361024537.dat b/elementfiles/element_abundances_21076.50361024537.dat new file mode 100644 index 000000000..9c4b22288 --- /dev/null +++ b/elementfiles/element_abundances_21076.50361024537.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.47246452047246 +He 0 +N 0 +O 31.69318664914689 +P 0 +S 30.36136660100055 +Si 30.99272634326127 +Ti 27.1839573212422 +V 0 +Cl 0 +K 29.551606265725496 +Na 30.78342149101488 +Mg 29.919596906762848 +F 0 +Ca 26.136728382510782 +Fe 30.199966507914855 +Al 27.40933069809393 +e- 0 diff --git a/elementfiles/element_abundances_212325.65747532554.dat b/elementfiles/element_abundances_212325.65747532554.dat new file mode 100644 index 000000000..05d62090f --- /dev/null +++ b/elementfiles/element_abundances_212325.65747532554.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.641134706417517 +He 0 +N 0 +O 31.996190562312748 +P 0 +S 0 +Si 29.354580622516103 +Ti 25.571986481904947 +V 0 +Cl 0 +K 27.926991792865707 +Na 29.15868376037817 +Mg 28.28840825836149 +F 0 +Ca 24.509847484839028 +Fe 28.572036788360247 +Al 25.7848551303574 +e- 0 diff --git a/elementfiles/element_abundances_21250919.608302888.dat b/elementfiles/element_abundances_21250919.608302888.dat new file mode 100644 index 000000000..8c8613e87 --- /dev/null +++ b/elementfiles/element_abundances_21250919.608302888.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.2907194885852 +H 31.058785762014313 +He 0 +N 30.894404065308702 +O 31.739402042780558 +P 0 +S 30.79890603624153 +Si 26.868739563424096 +Ti 20.839862253901874 +V 0 +Cl 0 +K 26.159097700715087 +Na 27.54418622328314 +Mg 26.34209700955269 +F 0 +Ca 21.22398015539836 +Fe 27.13844479812056 +Al 21.167705377396807 +e- 0 diff --git a/elementfiles/element_abundances_212533.6091627321.dat b/elementfiles/element_abundances_212533.6091627321.dat new file mode 100644 index 000000000..33f147f57 --- /dev/null +++ b/elementfiles/element_abundances_212533.6091627321.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.875794993225092 +He 0 +N 0 +O 31.362442988650205 +P 0 +S 28.545694243998604 +Si 30.135179337679766 +Ti 25.68115300606224 +V 0 +Cl 0 +K 28.149413926488446 +Na 29.365505973535885 +Mg 28.88411604551275 +F 0 +Ca 25.172601395470963 +Fe 29.04903654557866 +Al 26.457536077492968 +e- 0 diff --git a/elementfiles/element_abundances_216247.4212932028.dat b/elementfiles/element_abundances_216247.4212932028.dat new file mode 100644 index 000000000..e25818594 --- /dev/null +++ b/elementfiles/element_abundances_216247.4212932028.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.41946386572472 +H 30.45584176602087 +He 0 +N 31.11300663711072 +O 31.74717216721752 +P 0 +S 30.307513023373506 +Si 26.432589270320342 +Ti 20.453591375850053 +V 0 +Cl 0 +K 25.67648821296655 +Na 27.05597100017637 +Mg 25.885738262914685 +F 0 +Ca 20.81194101924367 +Fe 26.657728299333534 +Al 20.786397053731 +e- 0 diff --git a/elementfiles/element_abundances_2183580.861609474.dat b/elementfiles/element_abundances_2183580.861609474.dat new file mode 100644 index 000000000..7234a53c8 --- /dev/null +++ b/elementfiles/element_abundances_2183580.861609474.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.117342389684676 +He 0 +N 0 +O 31.813628663864083 +P 0 +S 0 +Si 31.011867321263374 +Ti 27.401171626426837 +V 0 +Cl 0 +K 29.673229995246057 +Na 30.903880244010445 +Mg 29.999515998368434 +F 0 +Ca 26.250842080361387 +Fe 30.305968702342252 +Al 27.53556539211324 +e- 0 diff --git a/elementfiles/element_abundances_218882.44028935902.dat b/elementfiles/element_abundances_218882.44028935902.dat new file mode 100644 index 000000000..d830cc7d7 --- /dev/null +++ b/elementfiles/element_abundances_218882.44028935902.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 0 +He 0 +N 0 +O 31.91902303520433 +P 0 +S 31.223832694434495 +Si 29.212062194650464 +Ti 25.452101198149848 +V 0 +Cl 0 +K 27.607758152547902 +Na 28.820557740445164 +Mg 28.122736288535336 +F 0 +Ca 24.49397332951618 +Fe 28.32250760609239 +Al 25.86178929298555 +e- 0 diff --git a/elementfiles/element_abundances_222210.6912566784.dat b/elementfiles/element_abundances_222210.6912566784.dat new file mode 100644 index 000000000..25464d759 --- /dev/null +++ b/elementfiles/element_abundances_222210.6912566784.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.598168610114218 +He 0 +N 0 +O 31.64989765813117 +P 0 +S 30.55870348293542 +Si 30.80022026839927 +Ti 27.005344975157925 +V 0 +Cl 0 +K 29.366282961887904 +Na 30.598033739011584 +Mg 29.73074532883122 +F 0 +Ca 25.950153559405674 +Fe 30.012836375526078 +Al 27.224063816835237 +e- 0 diff --git a/elementfiles/element_abundances_226247.44291794492.dat b/elementfiles/element_abundances_226247.44291794492.dat new file mode 100644 index 000000000..15e9aee3d --- /dev/null +++ b/elementfiles/element_abundances_226247.44291794492.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.419583618729515 +H 30.455030388419832 +He 0 +N 31.113280532947368 +O 31.74715404430621 +P 0 +S 30.305853460002965 +Si 26.426569216084346 +Ti 20.45018085656772 +V 0 +Cl 0 +K 25.672258389329215 +Na 27.051741118760468 +Mg 25.879717896008053 +F 0 +Ca 20.80592194206065 +Fe 26.65171119072338 +Al 20.77914765671717 +e- 0 diff --git a/elementfiles/element_abundances_228196.28514835323.dat b/elementfiles/element_abundances_228196.28514835323.dat new file mode 100644 index 000000000..71ff74f09 --- /dev/null +++ b/elementfiles/element_abundances_228196.28514835323.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 7.012889726421904 +H 31.858748418069684 +He 0 +N 0 +O 31.392615865855728 +P 0 +S 28.558728989860672 +Si 30.356371189522662 +Ti 25.95936694747489 +V 0 +Cl 0 +K 28.403098872491476 +Na 29.61906632982882 +Mg 29.112226017929295 +F 0 +Ca 25.405319696595797 +Fe 29.27898695148326 +Al 26.700887305320574 +e- 0 diff --git a/elementfiles/element_abundances_228325.6898474275.dat b/elementfiles/element_abundances_228325.6898474275.dat new file mode 100644 index 000000000..97982f45b --- /dev/null +++ b/elementfiles/element_abundances_228325.6898474275.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.51356519701164 +He 0 +N 0 +O 31.996684017908194 +P 0 +S 0 +Si 29.352845715104387 +Ti 25.572198126999666 +V 0 +Cl 0 +K 27.92626307746967 +Na 29.15794556100698 +Mg 28.287203092708896 +F 0 +Ca 24.508965783658788 +Fe 28.571076649595202 +Al 25.784142304071132 +e- 0 diff --git a/elementfiles/element_abundances_2306590.33012574.dat b/elementfiles/element_abundances_2306590.33012574.dat new file mode 100644 index 000000000..e7fd7490e --- /dev/null +++ b/elementfiles/element_abundances_2306590.33012574.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 27.17524642285437 +He 0 +N 0 +O 31.96345072053789 +P 0 +S 0 +Si 30.387515243026034 +Ti 25.26645737638446 +V 0 +Cl 0 +K 29.268893492369273 +Na 30.5835403544854 +Mg 29.584029517728116 +F 0 +Ca 25.032388941308206 +Fe 30.088719342441674 +Al 25.40089567344156 +e- 0 diff --git a/elementfiles/element_abundances_2306604.8291397253.dat b/elementfiles/element_abundances_2306604.8291397253.dat new file mode 100644 index 000000000..db0205416 --- /dev/null +++ b/elementfiles/element_abundances_2306604.8291397253.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 27.174785707107663 +He 0 +N 0 +O 31.963450727734273 +P 0 +S 0 +Si 30.387515246472308 +Ti 25.26645737983082 +V 0 +Cl 0 +K 29.268893495815593 +Na 30.583540357931724 +Mg 29.58402952117439 +F 0 +Ca 25.032388944754484 +Fe 30.088719345887952 +Al 25.400895676887842 +e- 0 diff --git a/elementfiles/element_abundances_231681.72017276264.dat b/elementfiles/element_abundances_231681.72017276264.dat new file mode 100644 index 000000000..ffde9a871 --- /dev/null +++ b/elementfiles/element_abundances_231681.72017276264.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.386049877392463 +He 0 +N 0 +O 31.763590669724554 +P 0 +S 0 +Si 30.929064101127977 +Ti 27.284895422884684 +V 0 +Cl 0 +K 29.5730733429387 +Na 30.803963127041207 +Mg 29.905070492036174 +F 0 +Ca 26.150407688499122 +Fe 30.20691994154246 +Al 27.434034489129914 +e- 0 diff --git a/elementfiles/element_abundances_232030.1121676101.dat b/elementfiles/element_abundances_232030.1121676101.dat new file mode 100644 index 000000000..8a829f708 --- /dev/null +++ b/elementfiles/element_abundances_232030.1121676101.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.385446967661206 +He 0 +N 0 +O 31.763751992880636 +P 0 +S 0 +Si 30.92934141093041 +Ti 27.285260954725217 +V 0 +Cl 0 +K 29.57339635710005 +Na 30.804285536280556 +Mg 29.905377720379438 +F 0 +Ca 26.150730621599998 +Fe 30.207239221849868 +Al 27.434360791444963 +e- 0 diff --git a/elementfiles/element_abundances_232245.6130367092.dat b/elementfiles/element_abundances_232245.6130367092.dat new file mode 100644 index 000000000..6299deac2 --- /dev/null +++ b/elementfiles/element_abundances_232245.6130367092.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 28.930107373975066 +He 0 +N 0 +O 31.99771545183708 +P 0 +S 0 +Si 29.437517178868983 +Ti 25.626055328485123 +V 0 +Cl 0 +K 27.804976943059344 +Na 29.01823505506506 +Mg 28.32883838431895 +F 0 +Ca 24.692398687936908 +Fe 28.52521444505471 +Al 26.059158662976408 +e- 0 diff --git a/elementfiles/element_abundances_232245.66160723867.dat b/elementfiles/element_abundances_232245.66160723867.dat new file mode 100644 index 000000000..128ed5f13 --- /dev/null +++ b/elementfiles/element_abundances_232245.66160723867.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 28.930105014969566 +He 0 +N 0 +O 31.99771545393775 +P 0 +S 0 +Si 29.437517155811154 +Ti 25.626055329915637 +V 0 +Cl 0 +K 27.804976933390364 +Na 29.01823504519103 +Mg 28.328838370124494 +F 0 +Ca 24.692398677369173 +Fe 28.525214432456373 +Al 26.059158653121138 +e- 0 diff --git a/elementfiles/element_abundances_232277.34205576548.dat b/elementfiles/element_abundances_232277.34205576548.dat new file mode 100644 index 000000000..3778845e0 --- /dev/null +++ b/elementfiles/element_abundances_232277.34205576548.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.36054173608454 +He 0 +N 0 +O 31.99711406005815 +P 0 +S 0 +Si 29.350945336384722 +Ti 25.57237539016819 +V 0 +Cl 0 +K 27.92543664430255 +Na 29.15710895533205 +Mg 28.2858700395513 +F 0 +Ca 24.507978440259187 +Fe 28.570005523216008 +Al 25.78333368139908 +e- 0 diff --git a/elementfiles/element_abundances_232277.39062659835.dat b/elementfiles/element_abundances_232277.39062659835.dat new file mode 100644 index 000000000..4b40d6051 --- /dev/null +++ b/elementfiles/element_abundances_232277.39062659835.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.36053938162571 +He 0 +N 0 +O 31.997114066981332 +P 0 +S 0 +Si 29.350944896759696 +Ti 25.57237538536145 +V 0 +Cl 0 +K 27.92543642943694 +Na 29.157108738332084 +Mg 28.285869718865296 +F 0 +Ca 24.507978191974598 +Fe 28.570005257390182 +Al 25.78333347035298 +e- 0 diff --git a/elementfiles/element_abundances_2348161.870901527.dat b/elementfiles/element_abundances_2348161.870901527.dat new file mode 100644 index 000000000..c61d93d73 --- /dev/null +++ b/elementfiles/element_abundances_2348161.870901527.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 27.17569741292339 +He 0 +N 0 +O 31.963450713485265 +P 0 +S 0 +Si 30.38751523965755 +Ti 25.266457373016003 +V 0 +Cl 0 +K 29.268893489000803 +Na 30.583540351116934 +Mg 29.58402951435963 +F 0 +Ca 25.03238893793972 +Fe 30.08871933907319 +Al 25.40089567007308 +e- 0 diff --git a/elementfiles/element_abundances_236047.1749844709.dat b/elementfiles/element_abundances_236047.1749844709.dat new file mode 100644 index 000000000..9ae07c1a3 --- /dev/null +++ b/elementfiles/element_abundances_236047.1749844709.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.854734144180313 +He 0 +N 0 +O 31.399224824032142 +P 0 +S 28.564083006822052 +Si 30.39407041706778 +Ti 26.010918708788 +V 0 +Cl 0 +K 28.448623840153168 +Na 29.664558898029806 +Mg 29.151729255884643 +F 0 +Ca 25.446004738834745 +Fe 29.318964047975875 +Al 26.74413766306663 +e- 0 diff --git a/elementfiles/element_abundances_236148.99023894512.dat b/elementfiles/element_abundances_236148.99023894512.dat new file mode 100644 index 000000000..be1dff0d5 --- /dev/null +++ b/elementfiles/element_abundances_236148.99023894512.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 30.894217783091964 +He 0 +N 0 +O 31.962492111433185 +P 0 +S 0 +Si 29.437166729041415 +Ti 25.607811428271226 +V 0 +Cl 0 +K 27.794851576520486 +Na 29.008256415658348 +Mg 28.32209633025276 +F 0 +Ca 24.683013950837044 +Fe 28.51731132716696 +Al 26.049198719832454 +e- 0 diff --git a/elementfiles/element_abundances_236247.4655426892.dat b/elementfiles/element_abundances_236247.4655426892.dat new file mode 100644 index 000000000..872b8a424 --- /dev/null +++ b/elementfiles/element_abundances_236247.4655426892.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.41971279787794 +H 30.45403755960133 +He 0 +N 31.11357199737127 +O 31.747137600384907 +P 0 +S 30.304158700901475 +Si 26.41809791311521 +Ti 20.440768926587225 +V 0 +Cl 0 +K 25.6662056652606 +Na 27.045901194797562 +Mg 25.872020221570594 +F 0 +Ca 20.796540193025923 +Fe 26.644936968857152 +Al 20.768136973700557 +e- 0 diff --git a/elementfiles/element_abundances_23851.541629081796.dat b/elementfiles/element_abundances_23851.541629081796.dat new file mode 100644 index 000000000..2ac781302 --- /dev/null +++ b/elementfiles/element_abundances_23851.541629081796.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.476722034206055 +H 31.34705657598163 +He 0 +N 31.014461149286184 +O 31.545065157842362 +P 0 +S 26.179777223864797 +Si 30.26202435081415 +Ti 25.23293733957041 +V 0 +Cl 0 +K 28.119419064498388 +Na 29.353228558528638 +Mg 29.067216262944115 +F 0 +Ca 25.185915458592383 +Fe 29.27534527950229 +Al 26.267227017888025 +e- 0 diff --git a/elementfiles/element_abundances_23851.573353047224.dat b/elementfiles/element_abundances_23851.573353047224.dat new file mode 100644 index 000000000..01af2f375 --- /dev/null +++ b/elementfiles/element_abundances_23851.573353047224.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.476721455172854 +H 31.347057579321 +He 0 +N 31.014461640815863 +O 31.54506480459395 +P 0 +S 26.179778274013657 +Si 30.26202532460448 +Ti 25.232938544914745 +V 0 +Cl 0 +K 28.119420217001554 +Na 29.35322971085937 +Mg 29.067217241561707 +F 0 +Ca 25.185916442218996 +Fe 29.275346261685172 +Al 26.26722797591996 +e- 0 diff --git a/elementfiles/element_abundances_240576.074826936.dat b/elementfiles/element_abundances_240576.074826936.dat new file mode 100644 index 000000000..e7beb30d0 --- /dev/null +++ b/elementfiles/element_abundances_240576.074826936.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.05726245740239 +H 31.756163842710084 +He 0 +N 30.626879524254345 +O 31.359506558211812 +P 0 +S 28.10282766845277 +Si 30.560061486819492 +Ti 25.646477450892945 +V 0 +Cl 0 +K 28.278908708102183 +Na 29.49569516780827 +Mg 29.275233939869477 +F 0 +Ca 25.539358597790176 +Fe 29.430615076917128 +Al 26.769808458035524 +e- 0 diff --git a/elementfiles/element_abundances_242277.36528349968.dat b/elementfiles/element_abundances_242277.36528349968.dat new file mode 100644 index 000000000..a3a3a8613 --- /dev/null +++ b/elementfiles/element_abundances_242277.36528349968.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.30519702493345 +He 0 +N 0 +O 31.997236103570526 +P 0 +S 0 +Si 29.350314807055756 +Ti 25.572424037162925 +V 0 +Cl 0 +K 27.925157183734015 +Na 29.156826158185545 +Mg 28.28542539577334 +F 0 +Ca 24.50764691114325 +Fe 28.56964659165947 +Al 25.783060233786365 +e- 0 diff --git a/elementfiles/element_abundances_242277.4138543374.dat b/elementfiles/element_abundances_242277.4138543374.dat new file mode 100644 index 000000000..20c95b581 --- /dev/null +++ b/elementfiles/element_abundances_242277.4138543374.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.305208411653602 +He 0 +N 0 +O 31.997236101015268 +P 0 +S 0 +Si 29.35030872307925 +Ti 25.572423927777955 +V 0 +Cl 0 +K 27.925154188042896 +Na 29.156823133118582 +Mg 28.285420947935403 +F 0 +Ca 24.507643458579032 +Fe 28.569642898010557 +Al 25.783057291407275 +e- 0 diff --git a/elementfiles/element_abundances_243301.88680014445.dat b/elementfiles/element_abundances_243301.88680014445.dat new file mode 100644 index 000000000..8114ff7f6 --- /dev/null +++ b/elementfiles/element_abundances_243301.88680014445.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.76405740820729 +He 0 +N 0 +O 31.99550056226161 +P 0 +S 0 +Si 29.24991990771349 +Ti 25.508678120819546 +V 0 +Cl 0 +K 28.055606423398487 +Na 29.30627926428473 +Mg 28.23941102123334 +F 0 +Ca 24.308960921313833 +Fe 28.611000382913062 +Al 25.48284151749973 +e- 0 diff --git a/elementfiles/element_abundances_243318.6930994205.dat b/elementfiles/element_abundances_243318.6930994205.dat new file mode 100644 index 000000000..cde6e795a --- /dev/null +++ b/elementfiles/element_abundances_243318.6930994205.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.763984699766937 +He 0 +N 0 +O 31.995500980741312 +P 0 +S 0 +Si 29.24992231174593 +Ti 25.50867835795279 +V 0 +Cl 0 +K 28.055607750841816 +Na 29.306280597591243 +Mg 28.239413003088647 +F 0 +Ca 24.308962513932283 +Fe 28.611001974568744 +Al 25.482842804866408 +e- 0 diff --git a/elementfiles/element_abundances_246247.48916743576.dat b/elementfiles/element_abundances_246247.48916743576.dat new file mode 100644 index 000000000..14fc69415 --- /dev/null +++ b/elementfiles/element_abundances_246247.48916743576.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.41985072882666 +H 30.45287130231617 +He 0 +N 31.1138800189494 +O 31.747122557257125 +P 0 +S 30.30242933035315 +Si 26.42058868871065 +Ti 20.4396873902273 +V 0 +Cl 0 +K 25.666246240274482 +Na 27.045941848509763 +Mg 25.874511424861087 +F 0 +Ca 20.799029640471772 +Fe 26.64742373182668 +Al 20.772311519332888 +e- 0 diff --git a/elementfiles/element_abundances_252192.86014480845.dat b/elementfiles/element_abundances_252192.86014480845.dat new file mode 100644 index 000000000..19bf15bac --- /dev/null +++ b/elementfiles/element_abundances_252192.86014480845.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.555607341493772 +He 0 +N 0 +O 31.66762737224974 +P 0 +S 30.572614367061306 +Si 30.85795902853076 +Ti 27.06372736665614 +V 0 +Cl 0 +K 29.424354445495016 +Na 30.656102183991464 +Mg 29.788655478526852 +F 0 +Ca 26.008169724275703 +Fe 30.07082673648987 +Al 27.282138862570296 +e- 0 diff --git a/elementfiles/element_abundances_252945.7169240378.dat b/elementfiles/element_abundances_252945.7169240378.dat new file mode 100644 index 000000000..796310a55 --- /dev/null +++ b/elementfiles/element_abundances_252945.7169240378.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.83321778710635 +He 0 +N 0 +O 31.431835152625446 +P 0 +S 28.600036410701556 +Si 30.548273594295836 +Ti 26.24116056281045 +V 0 +Cl 0 +K 28.645387690137902 +Na 29.86112796895404 +Mg 29.316768522915368 +F 0 +Ca 25.61797537224426 +Fe 29.486798033103085 +Al 26.92987280329411 +e- 0 diff --git a/elementfiles/element_abundances_253301.91113033314.dat b/elementfiles/element_abundances_253301.91113033314.dat new file mode 100644 index 000000000..8724e4017 --- /dev/null +++ b/elementfiles/element_abundances_253301.91113033314.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.617072045370683 +He 0 +N 0 +O 31.996240557459988 +P 0 +S 0 +Si 29.247109720982184 +Ti 25.509011553179505 +V 0 +Cl 0 +K 28.054357907451333 +Na 29.30502220882179 +Mg 28.237215094685194 +F 0 +Ca 24.307330558188937 +Fe 28.609371417781738 +Al 25.481652173937285 +e- 0 diff --git a/elementfiles/element_abundances_253318.71743128978.dat b/elementfiles/element_abundances_253318.71743128978.dat new file mode 100644 index 000000000..1c4914543 --- /dev/null +++ b/elementfiles/element_abundances_253318.71743128978.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.61701033645876 +He 0 +N 0 +O 31.996240772182944 +P 0 +S 0 +Si 29.2471227862218 +Ti 25.509011817266718 +V 0 +Cl 0 +K 28.054364614154455 +Na 29.30502895043499 +Mg 28.237225651332313 +F 0 +Ca 24.307338808239848 +Fe 28.609379662134767 +Al 25.481658635501176 +e- 0 diff --git a/elementfiles/element_abundances_253925.74164279067.dat b/elementfiles/element_abundances_253925.74164279067.dat new file mode 100644 index 000000000..9130c1c4b --- /dev/null +++ b/elementfiles/element_abundances_253925.74164279067.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.330364629090045 +He 0 +N 0 +O 31.997182502747766 +P 0 +S 0 +Si 29.35060069310713 +Ti 25.572402834211456 +V 0 +Cl 0 +K 27.925284334429413 +Na 29.1569548181974 +Mg 28.28562720767932 +F 0 +Ca 24.507797572082772 +Fe 28.5698096434379 +Al 25.783184654085282 +e- 0 diff --git a/elementfiles/element_abundances_256127.61205938825.dat b/elementfiles/element_abundances_256127.61205938825.dat new file mode 100644 index 000000000..f67a14266 --- /dev/null +++ b/elementfiles/element_abundances_256127.61205938825.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.836974606948925 +He 0 +N 0 +O 31.426460733495723 +P 0 +S 28.59288863693723 +Si 30.525748304504784 +Ti 26.2052160444863 +V 0 +Cl 0 +K 28.615395531350153 +Na 29.83117240946195 +Mg 29.292211185220225 +F 0 +Ca 25.59213968072818 +Fe 29.461723269160487 +Al 26.90165843272873 +e- 0 diff --git a/elementfiles/element_abundances_256247.51379218468.dat b/elementfiles/element_abundances_256247.51379218468.dat new file mode 100644 index 000000000..839b87eb3 --- /dev/null +++ b/elementfiles/element_abundances_256247.51379218468.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.419997231712955 +H 30.45153839617298 +He 0 +N 31.114204078802775 +O 31.747109130120116 +P 0 +S 30.300667220287572 +Si 26.412307925524246 +Ti 20.430339895868343 +V 0 +Cl 0 +K 25.660301784164155 +Na 27.040210415058922 +Mg 25.867004583274017 +F 0 +Ca 20.789837080119952 +Fe 26.64084134459828 +Al 20.761547237382153 +e- 0 diff --git a/elementfiles/element_abundances_26092.000023919998.dat b/elementfiles/element_abundances_26092.000023919998.dat new file mode 100644 index 000000000..265d8fd40 --- /dev/null +++ b/elementfiles/element_abundances_26092.000023919998.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 30.595993353088463 +H 29.958579506512407 +He 0 +N 31.403973255483084 +O 31.717665728600302 +P 0 +S 31.243496498032293 +Si 28.66877542973784 +Ti 24.970060464291677 +V 0 +Cl 0 +K 27.09830179694065 +Na 28.310477914656822 +Mg 27.604357183508604 +F 0 +Ca 23.984803227630483 +Fe 27.808245647769247 +Al 25.35277986508722 +e- 0 diff --git a/elementfiles/element_abundances_26247.200423380244.dat b/elementfiles/element_abundances_26247.200423380244.dat new file mode 100644 index 000000000..cf445e8d5 --- /dev/null +++ b/elementfiles/element_abundances_26247.200423380244.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.425940293094875 +H 30.27813997982105 +He 0 +N 31.12654345108948 +O 31.74830467384141 +P 0 +S 30.308641337503587 +Si 26.95488384044811 +Ti 21.23252435690194 +V 0 +Cl 0 +K 26.03629451533573 +Na 27.39227216439621 +Mg 26.320061334578604 +F 0 +Ca 21.433138165748296 +Fe 26.991683110583793 +Al 21.52624830942404 +e- 0 diff --git a/elementfiles/element_abundances_263045.6002419173.dat b/elementfiles/element_abundances_263045.6002419173.dat new file mode 100644 index 000000000..0d2be6075 --- /dev/null +++ b/elementfiles/element_abundances_263045.6002419173.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.0938965581989 +H 31.84678237181407 +He 0 +N 30.156654174932505 +O 31.0748770834421 +P 0 +S 25.330878998474745 +Si 30.544792620548478 +Ti 25.232883546919712 +V 0 +Cl 0 +K 27.562706516949945 +Na 28.781098570831556 +Mg 29.24673392565215 +F 0 +Ca 25.501117009319756 +Fe 29.398200417572678 +Al 27.25448415174573 +e- 0 diff --git a/elementfiles/element_abundances_263301.9364605243.dat b/elementfiles/element_abundances_263301.9364605243.dat new file mode 100644 index 000000000..f6eeac888 --- /dev/null +++ b/elementfiles/element_abundances_263301.9364605243.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.49199902283579 +He 0 +N 0 +O 31.996701110743647 +P 0 +S 0 +Si 29.244915217672453 +Ti 25.509213426711284 +V 0 +Cl 0 +K 28.053353614169552 +Na 29.30401136063932 +Mg 28.235491248555633 +F 0 +Ca 24.306039019058144 +Fe 28.6080809460233 +Al 25.480694374098203 +e- 0 diff --git a/elementfiles/element_abundances_263318.74276316154.dat b/elementfiles/element_abundances_263318.74276316154.dat new file mode 100644 index 000000000..60988d0d6 --- /dev/null +++ b/elementfiles/element_abundances_263318.74276316154.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.491947773442387 +He 0 +N 0 +O 31.996701299689583 +P 0 +S 0 +Si 29.24490640777388 +Ti 25.50921341580142 +V 0 +Cl 0 +K 28.053349174072427 +Na 29.304006896401493 +Mg 28.235484170658246 +F 0 +Ca 24.306033530375657 +Fe 28.608075461262647 +Al 25.480690106928172 +e- 0 diff --git a/elementfiles/element_abundances_26496.191607732235.dat b/elementfiles/element_abundances_26496.191607732235.dat new file mode 100644 index 000000000..667accd88 --- /dev/null +++ b/elementfiles/element_abundances_26496.191607732235.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 30.697175385684602 +H 30.2813383345167 +He 0 +N 31.499637504168522 +O 31.641711108622097 +P 0 +S 31.24758187055559 +Si 27.141821098494987 +Ti 21.880751773499846 +V 0 +Cl 0 +K 26.052360302132527 +Na 27.37522092684926 +Mg 26.373347305535418 +F 0 +Ca 21.754051299555943 +Fe 26.909688142584326 +Al 22.052695619789837 +e- 0 diff --git a/elementfiles/element_abundances_266247.53941693605.dat b/elementfiles/element_abundances_266247.53941693605.dat new file mode 100644 index 000000000..893aae1c4 --- /dev/null +++ b/elementfiles/element_abundances_266247.53941693605.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.420148621596475 +H 30.45010294098506 +He 0 +N 31.11453758200217 +O 31.747096548383254 +P 0 +S 30.29888353871989 +Si 26.406402473981796 +Ti 20.426996735682334 +V 0 +Cl 0 +K 25.65615361506113 +Na 27.03606218977219 +Mg 25.86109882531642 +F 0 +Ca 20.783932574198012 +Fe 26.634938756060066 +Al 20.75443308200145 +e- 0 diff --git a/elementfiles/element_abundances_268264.8529118522.dat b/elementfiles/element_abundances_268264.8529118522.dat new file mode 100644 index 000000000..9d363736f --- /dev/null +++ b/elementfiles/element_abundances_268264.8529118522.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.258550810803513 +He 0 +N 0 +O 31.797032464495977 +P 0 +S 0 +Si 31.048958231607674 +Ti 27.380035303748695 +V 0 +Cl 0 +K 29.495065060816998 +Na 30.706903273009967 +Mg 29.997415094569195 +F 0 +Ca 26.38234709364137 +Fe 30.203326626706414 +Al 27.75000772961591 +e- 0 diff --git a/elementfiles/element_abundances_272641.7939341972.dat b/elementfiles/element_abundances_272641.7939341972.dat new file mode 100644 index 000000000..57b88a6d2 --- /dev/null +++ b/elementfiles/element_abundances_272641.7939341972.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.409577103973714 +He 0 +N 0 +O 31.757065795261987 +P 0 +S 0 +Si 30.917746407280376 +Ti 27.27011547242806 +V 0 +Cl 0 +K 29.55996211196661 +Na 30.790875529725852 +Mg 29.892581819963752 +F 0 +Ca 26.13730305145833 +Fe 30.193958652705362 +Al 27.42079558966776 +e- 0 diff --git a/elementfiles/element_abundances_272990.18607174593.dat b/elementfiles/element_abundances_272990.18607174593.dat new file mode 100644 index 000000000..93fc969dc --- /dev/null +++ b/elementfiles/element_abundances_272990.18607174593.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.407396657433328 +He 0 +N 0 +O 31.75768967696301 +P 0 +S 0 +Si 30.918838038652208 +Ti 27.27152911651759 +V 0 +Cl 0 +K 29.5612205442395 +Na 30.792131772637703 +Mg 29.89378209956149 +F 0 +Ca 26.138560589592796 +Fe 30.19520285897838 +Al 27.422065783018553 +e- 0 diff --git a/elementfiles/element_abundances_276247.56604169.dat b/elementfiles/element_abundances_276247.56604169.dat new file mode 100644 index 000000000..b6dbf37e6 --- /dev/null +++ b/elementfiles/element_abundances_276247.56604169.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.420306331904964 +H 30.448535984674464 +He 0 +N 31.114883251523054 +O 31.747085035267766 +P 0 +S 30.297073335957712 +Si 26.404022333895632 +Ti 20.424616594982922 +V 0 +Cl 0 +K 25.65377347455485 +Na 27.03368204926592 +Mg 25.858718685230333 +F 0 +Ca 20.781552434111624 +Fe 26.632558615973217 +Al 20.752052942203793 +e- 0 diff --git a/elementfiles/element_abundances_278326.4404665442.dat b/elementfiles/element_abundances_278326.4404665442.dat new file mode 100644 index 000000000..de75a5053 --- /dev/null +++ b/elementfiles/element_abundances_278326.4404665442.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.809105871961314 +He 0 +N 0 +O 31.463525646757187 +P 0 +S 28.65608207987724 +Si 30.66499350253264 +Ti 26.44316046070896 +V 0 +Cl 0 +K 28.80920289782407 +Na 30.024684970104275 +Mg 29.447709152597973 +F 0 +Ca 25.757596650514714 +Fe 29.621276191737206 +Al 27.083884506739533 +e- 0 diff --git a/elementfiles/element_abundances_279301.9769888301.dat b/elementfiles/element_abundances_279301.9769888301.dat new file mode 100644 index 000000000..39c386598 --- /dev/null +++ b/elementfiles/element_abundances_279301.9769888301.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.31056186625964 +He 0 +N 0 +O 31.997173789064526 +P 0 +S 0 +Si 29.242061335538004 +Ti 25.50941327588744 +V 0 +Cl 0 +K 28.052016117780102 +Na 29.302665454089578 +Mg 28.233240160567377 +F 0 +Ca 24.304340297870276 +Fe 28.60638358708826 +Al 25.479417866508108 +e- 0 diff --git a/elementfiles/element_abundances_279318.78329415637.dat b/elementfiles/element_abundances_279318.78329415637.dat new file mode 100644 index 000000000..01826feb9 --- /dev/null +++ b/elementfiles/element_abundances_279318.78329415637.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.31051691904228 +He 0 +N 0 +O 31.997173885582054 +P 0 +S 0 +Si 29.242060073256116 +Ti 25.509413309409332 +V 0 +Cl 0 +K 28.052015498878678 +Na 29.30266483160576 +Mg 28.23323915479446 +F 0 +Ca 24.304339526835296 +Fe 28.606382816631825 +Al 25.479417273901163 +e- 0 diff --git a/elementfiles/element_abundances_27942436.208924945.dat b/elementfiles/element_abundances_27942436.208924945.dat new file mode 100644 index 000000000..ab6413571 --- /dev/null +++ b/elementfiles/element_abundances_27942436.208924945.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.550647994925427 +He 0 +N 0 +O 31.68064685245115 +P 0 +S 31.217781508345222 +Si 27.39369360592449 +Ti 21.364471661387327 +V 0 +Cl 0 +K 26.6838138285433 +Na 28.068902358025603 +Mg 26.867051090933685 +F 0 +Ca 21.74893409413245 +Fe 27.663398509532612 +Al 21.692828591026615 +e- 0 diff --git a/elementfiles/element_abundances_2839351.0353094153.dat b/elementfiles/element_abundances_2839351.0353094153.dat new file mode 100644 index 000000000..7c436d903 --- /dev/null +++ b/elementfiles/element_abundances_2839351.0353094153.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.422747571934984 +H 30.420597036818315 +He 0 +N 31.120178569581405 +O 31.746969619004695 +P 0 +S 30.27037173785189 +Si 26.361827777571932 +Ti 20.378272621026863 +V 0 +Cl 0 +K 25.614877462601097 +Na 26.99521278896927 +Mg 25.8180730482636 +F 0 +Ca 20.73752959239784 +Fe 26.593762824328493 +Al 20.705832975867658 +e- 0 diff --git a/elementfiles/element_abundances_284030.1590316704.dat b/elementfiles/element_abundances_284030.1590316704.dat new file mode 100644 index 000000000..ff24a94fd --- /dev/null +++ b/elementfiles/element_abundances_284030.1590316704.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.492557738995373 +He 0 +N 0 +O 31.68735491551961 +P 0 +S 30.371918836477533 +Si 30.973167336569897 +Ti 27.166476190850354 +V 0 +Cl 0 +K 29.533121539222588 +Na 30.764927263617274 +Mg 29.90057897888302 +F 0 +Ca 26.118049512553107 +Fe 30.18120480089695 +Al 27.390851923354106 +e- 0 diff --git a/elementfiles/element_abundances_286247.5936664466.dat b/elementfiles/element_abundances_286247.5936664466.dat new file mode 100644 index 000000000..395bb0e18 --- /dev/null +++ b/elementfiles/element_abundances_286247.5936664466.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.420468037049805 +H 30.44688159365136 +He 0 +N 31.115236743569664 +O 31.74707428975131 +P 0 +S 30.295244996140486 +Si 26.397140793058266 +Ti 20.415659665408462 +V 0 +Cl 0 +K 25.64853924322566 +Na 27.028661083437424 +Mg 25.85261146503331 +F 0 +Ca 20.773757405601387 +Fe 26.627375738158573 +Al 20.74316011795233 +e- 0 diff --git a/elementfiles/element_abundances_288256.311379256.dat b/elementfiles/element_abundances_288256.311379256.dat new file mode 100644 index 000000000..64a38add3 --- /dev/null +++ b/elementfiles/element_abundances_288256.311379256.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.801347554042348 +He 0 +N 0 +O 31.47279734350599 +P 0 +S 28.676947923922018 +Si 30.694999230089056 +Ti 26.499426221147054 +V 0 +Cl 0 +K 28.85360717418229 +Na 30.06899982690954 +Mg 29.482578606353957 +F 0 +Ca 25.795332129519444 +Fe 29.657322795383532 +Al 27.1257453156854 +e- 0 diff --git a/elementfiles/element_abundances_289045.6686337734.dat b/elementfiles/element_abundances_289045.6686337734.dat new file mode 100644 index 000000000..b176a7f91 --- /dev/null +++ b/elementfiles/element_abundances_289045.6686337734.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 30.87605986817971 +He 0 +N 0 +O 31.841519880082007 +P 0 +S 0 +Si 31.12082461150793 +Ti 27.48625535399532 +V 0 +Cl 0 +K 29.58617224498425 +Na 30.79758951508076 +Mg 30.08475337672832 +F 0 +Ca 26.474845473775126 +Fe 30.293006194970268 +Al 27.84185449299446 +e- 0 diff --git a/elementfiles/element_abundances_289160.26954839175.dat b/elementfiles/element_abundances_289160.26954839175.dat new file mode 100644 index 000000000..08ed3546f --- /dev/null +++ b/elementfiles/element_abundances_289160.26954839175.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.202526812939286 +He 0 +N 0 +O 31.80167111464018 +P 0 +S 0 +Si 30.992348993941093 +Ti 27.372559077370557 +V 0 +Cl 0 +K 29.648994300422796 +Na 30.879711661736074 +Mg 29.97677659848907 +F 0 +Ca 26.226469963836674 +Fe 30.281972887386456 +Al 27.510930965391253 +e- 0 diff --git a/elementfiles/element_abundances_289264.9130765203.dat b/elementfiles/element_abundances_289264.9130765203.dat new file mode 100644 index 000000000..458522060 --- /dev/null +++ b/elementfiles/element_abundances_289264.9130765203.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.854172105071942 +He 0 +N 0 +O 31.39987060865031 +P 0 +S 28.781757351975646 +Si 30.398071866464388 +Ti 26.01581078501952 +V 0 +Cl 0 +K 28.45312760073108 +Na 29.669060545132396 +Mg 29.15584841008866 +F 0 +Ca 25.450200719737033 +Fe 29.323114033374523 +Al 26.748498150751367 +e- 0 diff --git a/elementfiles/element_abundances_294885.82451537176.dat b/elementfiles/element_abundances_294885.82451537176.dat new file mode 100644 index 000000000..06ddea869 --- /dev/null +++ b/elementfiles/element_abundances_294885.82451537176.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.085915836885338 +He 0 +N 0 +O 31.997593110509268 +P 0 +S 0 +Si 29.348110476363647 +Ti 25.572559887981466 +V 0 +Cl 0 +K 27.92416249650664 +Na 29.155819931895024 +Mg 28.283863174052918 +F 0 +Ca 24.50647482578218 +Fe 28.568380035822567 +Al 25.782086985121623 +e- 0 diff --git a/elementfiles/element_abundances_295034.4401347139.dat b/elementfiles/element_abundances_295034.4401347139.dat new file mode 100644 index 000000000..dbf960331 --- /dev/null +++ b/elementfiles/element_abundances_295034.4401347139.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.550318546407283 +He 0 +N 0 +O 31.996502634202322 +P 0 +S 0 +Si 29.245925602000145 +Ti 25.50912722781122 +V 0 +Cl 0 +K 28.05381938460067 +Na 29.30448013547346 +Mg 28.23628600092251 +F 0 +Ca 24.306635821189765 +Fe 28.608677259545065 +Al 25.48113872010088 +e- 0 diff --git a/elementfiles/element_abundances_296247.622291206.dat b/elementfiles/element_abundances_296247.622291206.dat new file mode 100644 index 000000000..ff63b4387 --- /dev/null +++ b/elementfiles/element_abundances_296247.622291206.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.420632618294736 +H 30.445158103826106 +He 0 +N 31.115596144262927 +O 31.747064014115928 +P 0 +S 30.293401238298895 +Si 26.39476954136932 +Ti 20.413288415189832 +V 0 +Cl 0 +K 25.646167992544328 +Na 27.026289832756063 +Mg 25.850240213344186 +F 0 +Ca 20.771386153912978 +Fe 26.625004486471262 +Al 20.74078886557036 +e- 0 diff --git a/elementfiles/element_abundances_29689514.663194325.dat b/elementfiles/element_abundances_29689514.663194325.dat new file mode 100644 index 000000000..a1f1edd66 --- /dev/null +++ b/elementfiles/element_abundances_29689514.663194325.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 24.804176575620108 +He 0 +N 0 +O 31.96345744358143 +P 0 +S 0 +Si 30.387519027248043 +Ti 25.266460648322855 +V 0 +Cl 0 +K 29.26889698655739 +Na 30.58354384869769 +Mg 29.584033301484318 +F 0 +Ca 25.032392721418685 +Fe 30.088723119685113 +Al 25.40089942783476 +e- 0 diff --git a/elementfiles/element_abundances_29689529.164728574.dat b/elementfiles/element_abundances_29689529.164728574.dat new file mode 100644 index 000000000..6d7fb189c --- /dev/null +++ b/elementfiles/element_abundances_29689529.164728574.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 24.80370653476383 +He 0 +N 0 +O 31.96345744361324 +P 0 +S 0 +Si 30.38751902725651 +Ti 25.266460648331325 +V 0 +Cl 0 +K 29.268896986565856 +Na 30.583543848706157 +Mg 29.584033301492784 +F 0 +Ca 25.03239272142715 +Fe 30.08872311969358 +Al 25.40089942784322 +e- 0 diff --git a/elementfiles/element_abundances_29731093.430152837.dat b/elementfiles/element_abundances_29731093.430152837.dat new file mode 100644 index 000000000..ab2b2eae7 --- /dev/null +++ b/elementfiles/element_abundances_29731093.430152837.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 24.80448174582417 +He 0 +N 0 +O 31.96345744356093 +P 0 +S 0 +Si 30.38751902724057 +Ti 25.266460648315388 +V 0 +Cl 0 +K 29.26889698654992 +Na 30.58354384869022 +Mg 29.584033301476847 +F 0 +Ca 25.032392721411213 +Fe 30.088723119677642 +Al 25.400899427827284 +e- 0 diff --git a/elementfiles/element_abundances_299160.2984644187.dat b/elementfiles/element_abundances_299160.2984644187.dat new file mode 100644 index 000000000..90dddcb68 --- /dev/null +++ b/elementfiles/element_abundances_299160.2984644187.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.214152282436814 +He 0 +N 0 +O 31.799807794910887 +P 0 +S 0 +Si 30.989306490191513 +Ti 27.368160270476476 +V 0 +Cl 0 +K 29.645248433233895 +Na 30.875975670785582 +Mg 29.973257434857086 +F 0 +Ca 26.222707633022246 +Fe 30.27826669388723 +Al 27.50712726789005 +e- 0 diff --git a/elementfiles/element_abundances_300164.33036581654.dat b/elementfiles/element_abundances_300164.33036581654.dat new file mode 100644 index 000000000..6a32f2784 --- /dev/null +++ b/elementfiles/element_abundances_300164.33036581654.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.453084626948648 +He 0 +N 0 +O 31.701014298316274 +P 0 +S 30.5749400194972 +Si 30.965213169372404 +Ti 27.165935569749657 +V 0 +Cl 0 +K 29.5290000582833 +Na 30.760771491989004 +Mg 29.894570948455456 +F 0 +Ca 26.113255337476375 +Fe 30.176114462740006 +Al 27.386758801839576 +e- 0 diff --git a/elementfiles/element_abundances_30092.003027600098.dat b/elementfiles/element_abundances_30092.003027600098.dat new file mode 100644 index 000000000..ef1694dc9 --- /dev/null +++ b/elementfiles/element_abundances_30092.003027600098.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.133641529122738 +He 0 +N 0 +O 31.79502013929045 +P 0 +S 30.971074597775818 +Si 30.938008346536257 +Ti 27.24119688934159 +V 0 +Cl 0 +K 29.368591420996996 +Na 30.58074666337348 +Mg 29.874397755929113 +F 0 +Ca 26.255130514431244 +Fe 30.078415179020652 +Al 27.623094307925783 +e- 0 diff --git a/elementfiles/element_abundances_301529.1705235336.dat b/elementfiles/element_abundances_301529.1705235336.dat new file mode 100644 index 000000000..a5bb5850e --- /dev/null +++ b/elementfiles/element_abundances_301529.1705235336.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.650742839434557 +He 0 +N 0 +O 31.62153654537818 +P 0 +S 30.708721238427866 +Si 30.51950183682269 +Ti 26.766639541859263 +V 0 +Cl 0 +K 29.31941235068284 +Na 30.570116182910223 +Mg 29.506753176538354 +F 0 +Ca 25.57422777820452 +Fe 29.87626209429308 +Al 26.746446557674368 +e- 0 diff --git a/elementfiles/element_abundances_30317578.97656208.dat b/elementfiles/element_abundances_30317578.97656208.dat new file mode 100644 index 000000000..5c882669c --- /dev/null +++ b/elementfiles/element_abundances_30317578.97656208.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.696294540339554 +He 0 +N 0 +O 31.61105464177293 +P 0 +S 30.976173011769195 +Si 26.426891539416946 +Ti 20.137792735784917 +V 0 +Cl 0 +K 25.98573080579942 +Na 27.401797660104258 +Mg 26.007151654783346 +F 0 +Ca 20.64584974689103 +Fe 26.940073708962213 +Al 20.420470908329307 +e- 0 diff --git a/elementfiles/element_abundances_304902.04183411936.dat b/elementfiles/element_abundances_304902.04183411936.dat new file mode 100644 index 000000000..5d2ae3b4b --- /dev/null +++ b/elementfiles/element_abundances_304902.04183411936.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.067135485963544 +He 0 +N 0 +O 31.997566906910496 +P 0 +S 0 +Si 29.23894288017622 +Ti 25.509570630071586 +V 0 +Cl 0 +K 28.05052393524521 +Na 29.301164177962793 +Mg 28.23077212703217 +F 0 +Ca 24.30246662998514 +Fe 28.604511383095282 +Al 25.47799328256303 +e- 0 diff --git a/elementfiles/element_abundances_304918.84814374807.dat b/elementfiles/element_abundances_304918.84814374807.dat new file mode 100644 index 000000000..49d5a4318 --- /dev/null +++ b/elementfiles/element_abundances_304918.84814374807.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.067110645224723 +He 0 +N 0 +O 31.997566941032463 +P 0 +S 0 +Si 29.238941331813866 +Ti 25.509570628680358 +V 0 +Cl 0 +K 28.050523154779995 +Na 29.301163393185547 +Mg 28.230770886755117 +F 0 +Ca 24.30246567083789 +Fe 28.604510424639965 +Al 25.47799253455318 +e- 0 diff --git a/elementfiles/element_abundances_305034.4696381579.dat b/elementfiles/element_abundances_305034.4696381579.dat new file mode 100644 index 000000000..f381f2e3e --- /dev/null +++ b/elementfiles/element_abundances_305034.4696381579.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.435851142330293 +He 0 +N 0 +O 31.996868754452123 +P 0 +S 0 +Si 29.24399018276375 +Ti 25.509285357646625 +V 0 +Cl 0 +K 28.052923679315565 +Na 29.303578687147745 +Mg 28.234762636732654 +F 0 +Ca 24.305490559758546 +Fe 28.607532931208628 +Al 25.480284135781787 +e- 0 diff --git a/elementfiles/element_abundances_305310.2486647136.dat b/elementfiles/element_abundances_305310.2486647136.dat new file mode 100644 index 000000000..ba8966962 --- /dev/null +++ b/elementfiles/element_abundances_305310.2486647136.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.566736710224916 +He 0 +N 0 +O 31.99522747469316 +P 0 +S 0 +Si 29.36246116769048 +Ti 25.43601522298867 +V 0 +Cl 0 +K 28.31331969490564 +Na 29.584154627888 +Mg 28.393505709136974 +F 0 +Ca 24.261822380395515 +Fe 28.809856373009055 +Al 25.272277724964532 +e- 0 diff --git a/elementfiles/element_abundances_305313.680649544.dat b/elementfiles/element_abundances_305313.680649544.dat new file mode 100644 index 000000000..2be2a6ffd --- /dev/null +++ b/elementfiles/element_abundances_305313.680649544.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.56679376201898 +He 0 +N 0 +O 31.99522726275096 +P 0 +S 0 +Si 29.362461061537815 +Ti 25.436015116815526 +V 0 +Cl 0 +K 28.313319588742825 +Na 29.584154521725203 +Mg 28.393505602982675 +F 0 +Ca 24.26182227423848 +Fe 28.809856266851394 +Al 25.272277618802114 +e- 0 diff --git a/elementfiles/element_abundances_306247.6519159682.dat b/elementfiles/element_abundances_306247.6519159682.dat new file mode 100644 index 000000000..7b433854a --- /dev/null +++ b/elementfiles/element_abundances_306247.6519159682.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.420800310810492 +H 30.4433607220585 +He 0 +N 31.11596187256032 +O 31.747054298601004 +P 0 +S 30.291541733724614 +Si 26.392402783052674 +Ti 20.41092165598574 +V 0 +Cl 0 +K 25.643801233619513 +Na 27.023923073831263 +Mg 25.847873455027646 +F 0 +Ca 20.769019395596004 +Fe 26.622637728153627 +Al 20.738422107672 +e- 0 diff --git a/elementfiles/element_abundances_3095451.218022192.dat b/elementfiles/element_abundances_3095451.218022192.dat new file mode 100644 index 000000000..f38b2d985 --- /dev/null +++ b/elementfiles/element_abundances_3095451.218022192.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.425061911996572 +He 0 +N 0 +O 31.752517884056637 +P 0 +S 0 +Si 30.909723279076065 +Ti 27.25980220822934 +V 0 +Cl 0 +K 29.550752762731133 +Na 30.781681699762576 +Mg 29.883787530563332 +F 0 +Ca 26.128101724150095 +Fe 30.184852137436835 +Al 27.41150326308459 +e- 0 diff --git a/elementfiles/element_abundances_31076.505717895732.dat b/elementfiles/element_abundances_31076.505717895732.dat new file mode 100644 index 000000000..85c51bf52 --- /dev/null +++ b/elementfiles/element_abundances_31076.505717895732.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.45939240841153 +He 0 +N 0 +O 31.696801341774172 +P 0 +S 30.35732648036827 +Si 31.00422942971085 +Ti 27.19417568506033 +V 0 +Cl 0 +K 29.562445127164594 +Na 30.79426620283454 +Mg 29.93076640857492 +F 0 +Ca 26.14768850638181 +Fe 30.21097781044442 +Al 27.42016631679533 +e- 0 diff --git a/elementfiles/element_abundances_311529.2006764506.dat b/elementfiles/element_abundances_311529.2006764506.dat new file mode 100644 index 000000000..fb061d5cb --- /dev/null +++ b/elementfiles/element_abundances_311529.2006764506.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.66855991774864 +He 0 +N 0 +O 31.611868397431643 +P 0 +S 30.695907908710684 +Si 30.476755371579614 +Ti 26.71852352718891 +V 0 +Cl 0 +K 29.273995222081492 +Na 30.52471307443989 +Mg 29.462988022848222 +F 0 +Ca 25.52951188862637 +Fe 29.831543839207896 +Al 26.700946051524596 +e- 0 diff --git a/elementfiles/element_abundances_312602.55686898023.dat b/elementfiles/element_abundances_312602.55686898023.dat new file mode 100644 index 000000000..1591020ed --- /dev/null +++ b/elementfiles/element_abundances_312602.55686898023.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.73310737581427 +He 0 +N 0 +O 31.539752216039506 +P 0 +S 29.343545311190127 +Si 30.87386187574378 +Ti 26.840550474486868 +V 0 +Cl 0 +K 29.12078508633153 +Na 30.335494663199007 +Mg 29.697261469504465 +F 0 +Ca 26.029645928018738 +Fe 29.880191845140313 +Al 27.381362073767974 +e- 0 diff --git a/elementfiles/element_abundances_315160.34473006177.dat b/elementfiles/element_abundances_315160.34473006177.dat new file mode 100644 index 000000000..d8f36abba --- /dev/null +++ b/elementfiles/element_abundances_315160.34473006177.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.23377645007043 +He 0 +N 0 +O 31.796520236914336 +P 0 +S 0 +Si 30.98393426972156 +Ti 27.360435257855386 +V 0 +Cl 0 +K 29.63865618836434 +Na 30.86940047751478 +Mg 29.967060636290693 +F 0 +Ca 26.216089224184937 +Fe 30.271745674852895 +Al 27.50043570643669 +e- 0 diff --git a/elementfiles/element_abundances_315310.27919573843.dat b/elementfiles/element_abundances_315310.27919573843.dat new file mode 100644 index 000000000..c415b225f --- /dev/null +++ b/elementfiles/element_abundances_315310.27919573843.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.440195792654336 +He 0 +N 0 +O 31.995635054751226 +P 0 +S 0 +Si 29.36266516725701 +Ti 25.436219228684298 +V 0 +Cl 0 +K 28.31352369750929 +Na 29.584358630486783 +Mg 28.39370970919296 +F 0 +Ca 24.26202638127109 +Fe 28.810060374070513 +Al 25.27248172744917 +e- 0 diff --git a/elementfiles/element_abundances_315313.71118091204.dat b/elementfiles/element_abundances_315313.71118091204.dat new file mode 100644 index 000000000..86cb8accc --- /dev/null +++ b/elementfiles/element_abundances_315313.71118091204.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.440221916626392 +He 0 +N 0 +O 31.995634982310776 +P 0 +S 0 +Si 29.362665129995158 +Ti 25.436219191407496 +V 0 +Cl 0 +K 28.31352366024003 +Na 29.584358593217537 +Mg 28.393709671929916 +F 0 +Ca 24.262026344006053 +Fe 28.810060336805016 +Al 25.2724816901802 +e- 0 diff --git a/elementfiles/element_abundances_316247.6825407334.dat b/elementfiles/element_abundances_316247.6825407334.dat new file mode 100644 index 000000000..835dc3b8e --- /dev/null +++ b/elementfiles/element_abundances_316247.6825407334.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.420970695265233 +H 30.44149569192092 +He 0 +N 31.1163332345359 +O 31.747045030479704 +P 0 +S 30.289667502244175 +Si 26.393217915148533 +Ti 20.409420629009176 +V 0 +Cl 0 +K 25.643027512651635 +Na 27.023149403459655 +Mg 25.848688863528743 +F 0 +Ca 20.76983367993887 +Fe 26.623450288092574 +Al 20.7403316090978 +e- 0 diff --git a/elementfiles/element_abundances_317641.73510571645.dat b/elementfiles/element_abundances_317641.73510571645.dat new file mode 100644 index 000000000..832469913 --- /dev/null +++ b/elementfiles/element_abundances_317641.73510571645.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.763444800214177 +He 0 +N 0 +O 31.51288312537508 +P 0 +S 28.77891180654093 +Si 30.810014526428894 +Ti 26.722687702461258 +V 0 +Cl 0 +K 29.02762610737231 +Na 30.24259091285431 +Mg 29.620320891245367 +F 0 +Ca 25.945817980648194 +Fe 29.800354651500832 +Al 27.29131982064055 +e- 0 diff --git a/elementfiles/element_abundances_318033.85657612095.dat b/elementfiles/element_abundances_318033.85657612095.dat new file mode 100644 index 000000000..be3726d81 --- /dev/null +++ b/elementfiles/element_abundances_318033.85657612095.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.77402588366997 +He 0 +N 0 +O 31.502471438025196 +P 0 +S 28.751199901128338 +Si 30.78202752002153 +Ti 26.66852504195416 +V 0 +Cl 0 +K 28.985411261038333 +Na 30.20048908168415 +Mg 29.586423217938524 +F 0 +Ca 25.90870528195198 +Fe 29.765113935239746 +Al 27.250865751248856 +e- 0 diff --git a/elementfiles/element_abundances_32.0.dat b/elementfiles/element_abundances_32.0.dat index 01446a9b3..c7b0a9a0d 100644 --- a/elementfiles/element_abundances_32.0.dat +++ b/elementfiles/element_abundances_32.0.dat @@ -1,20 +1,20 @@ # Abundances determined using atmosphere_builder -C 31.326028970727414 -H 31.504113487554406 +C 30.582305935227613 +H 30.0249090781543 He 0 -N 30.886097840855662 -O 31.522332310567077 +N 31.36943410388904 +O 31.730531344596976 P 0 -S 26.288716393345055 -Si 30.67578503732293 -Ti 25.914067023132514 +S 31.2516645297336 +Si 28.70905851728462 +Ti 25.006277197115587 V 0 Cl 0 -K 28.502168047518616 -Na 29.718760834650816 -Mg 29.39871601664718 +K 27.14685417783959 +Na 28.360215381982215 +Mg 27.64385209841631 F 0 -Ca 25.66872749117737 -Fe 29.55637426551223 -Al 26.904864723576097 +Ca 24.01539489392624 +Fe 27.853074619017484 +Al 25.378520670306877 e- 0 diff --git a/elementfiles/element_abundances_3204533.0403597783.dat b/elementfiles/element_abundances_3204533.0403597783.dat new file mode 100644 index 000000000..c15f7b7bb --- /dev/null +++ b/elementfiles/element_abundances_3204533.0403597783.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.405287416219014 +He 0 +N 0 +O 31.758289352708132 +P 0 +S 0 +Si 30.919885509815543 +Ti 27.272887917310193 +V 0 +Cl 0 +K 29.562429284430824 +Na 30.793338394405378 +Mg 29.89493466519513 +F 0 +Ca 26.13976852009725 +Fe 30.19639789981761 +Al 27.423285916102117 +e- 0 diff --git a/elementfiles/element_abundances_321034.51684366836.dat b/elementfiles/element_abundances_321034.51684366836.dat new file mode 100644 index 000000000..c060c3240 --- /dev/null +++ b/elementfiles/element_abundances_321034.51684366836.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.26845188720573 +He 0 +N 0 +O 31.997258191274554 +P 0 +S 0 +Si 29.241481378765155 +Ti 25.509448117042375 +V 0 +Cl 0 +K 28.051741407673536 +Na 29.30238904300028 +Mg 28.23278197419582 +F 0 +Ca 24.303993516867592 +Fe 28.606037080624258 +Al 25.479155671453704 +e- 0 diff --git a/elementfiles/element_abundances_32217693.190671787.dat b/elementfiles/element_abundances_32217693.190671787.dat new file mode 100644 index 000000000..594caa575 --- /dev/null +++ b/elementfiles/element_abundances_32217693.190671787.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.710548202516193 +He 0 +N 0 +O 31.60418619278648 +P 0 +S 30.926777238753534 +Si 26.47512517070156 +Ti 20.187358783849636 +V 0 +Cl 0 +K 26.03489483673704 +Na 27.45096167659827 +Mg 26.055385188032684 +F 0 +Ca 20.694083500213708 +Fe 26.988307898796464 +Al 20.467957408109854 +e- 0 diff --git a/elementfiles/element_abundances_326247.7141655017.dat b/elementfiles/element_abundances_326247.7141655017.dat new file mode 100644 index 000000000..b7ec84ab2 --- /dev/null +++ b/elementfiles/element_abundances_326247.7141655017.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.42114353112275 +H 30.43956903593552 +He 0 +N 31.11670972719041 +O 31.74703626014644 +P 0 +S 30.28777972859158 +Si 26.38813673119951 +Ti 20.406322320953386 +V 0 +Cl 0 +K 25.639306748613812 +Na 27.019428596088414 +Mg 25.84360744304158 +F 0 +Ca 20.76475322148044 +Fe 26.61837130533975 +Al 20.734313201234514 +e- 0 diff --git a/elementfiles/element_abundances_327529.24892111786.dat b/elementfiles/element_abundances_327529.24892111786.dat new file mode 100644 index 000000000..ee551eb72 --- /dev/null +++ b/elementfiles/element_abundances_327529.24892111786.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.641530997275687 +He 0 +N 0 +O 31.62632368459716 +P 0 +S 30.71713200134382 +Si 30.538095824872144 +Ti 26.787424372920846 +V 0 +Cl 0 +K 29.33909569108255 +Na 30.5897937488979 +Mg 29.525765740365248 +F 0 +Ca 25.593629749181012 +Fe 29.89566503264817 +Al 26.766165628975457 +e- 0 diff --git a/elementfiles/element_abundances_3283096.5325258067.dat b/elementfiles/element_abundances_3283096.5325258067.dat new file mode 100644 index 000000000..334afc040 --- /dev/null +++ b/elementfiles/element_abundances_3283096.5325258067.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.433709162031928 +He 0 +N 0 +O 31.7498863520559 +P 0 +S 0 +Si 30.905024809628756 +Ti 27.253824164064124 +V 0 +Cl 0 +K 29.545391555645633 +Na 30.77632912475141 +Mg 29.878659361631925 +F 0 +Ca 26.122746269540265 +Fe 30.179549654532504 +Al 27.406096202232515 +e- 0 diff --git a/elementfiles/element_abundances_329788.19560689235.dat b/elementfiles/element_abundances_329788.19560689235.dat new file mode 100644 index 000000000..844de8768 --- /dev/null +++ b/elementfiles/element_abundances_329788.19560689235.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.80578890225962 +He 0 +N 0 +O 31.38520893522318 +P 0 +S 28.187386052618926 +Si 30.965599066539745 +Ti 26.332308550007255 +V 0 +Cl 0 +K 28.873713172816686 +Na 30.090123757789314 +Mg 29.697388779586486 +F 0 +Ca 25.973906014175004 +Fe 29.857583666947242 +Al 27.22708062194217 +e- 0 diff --git a/elementfiles/element_abundances_331310.3280453782.dat b/elementfiles/element_abundances_331310.3280453782.dat new file mode 100644 index 000000000..672b9492c --- /dev/null +++ b/elementfiles/element_abundances_331310.3280453782.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.258513646989016 +He 0 +N 0 +O 31.99604658623889 +P 0 +S 0 +Si 29.362870872744345 +Ti 25.43642491981521 +V 0 +Cl 0 +K 28.31372939588266 +Na 29.584564328871558 +Mg 28.39391541353382 +F 0 +Ca 24.262232083692197 +Fe 28.810266076056216 +Al 25.272687426101307 +e- 0 diff --git a/elementfiles/element_abundances_331313.7600311009.dat b/elementfiles/element_abundances_331313.7600311009.dat new file mode 100644 index 000000000..8b75680b5 --- /dev/null +++ b/elementfiles/element_abundances_331313.7600311009.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.258500727021886 +He 0 +N 0 +O 31.99604660993014 +P 0 +S 0 +Si 29.362870858570098 +Ti 25.436424931309972 +V 0 +Cl 0 +K 28.313729394428044 +Na 29.58456432739655 +Mg 28.393915401409448 +F 0 +Ca 24.262232075000313 +Fe 28.81026606814282 +Al 25.272687424148252 +e- 0 diff --git a/elementfiles/element_abundances_336247.7467902731.dat b/elementfiles/element_abundances_336247.7467902731.dat new file mode 100644 index 000000000..a1630074e --- /dev/null +++ b/elementfiles/element_abundances_336247.7467902731.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.421318171403133 +H 30.43759059871582 +He 0 +N 31.11709025908183 +O 31.747027802329356 +P 0 +S 30.285880139695934 +Si 26.383672912637046 +Ti 20.39802853793379 +V 0 +Cl 0 +K 25.63528907722469 +Na 27.015624449061 +Mg 25.839918432123568 +F 0 +Ca 20.75937396908382 +Fe 26.615605653497713 +Al 20.72866686315357 +e- 0 diff --git a/elementfiles/element_abundances_33737784.56195955.dat b/elementfiles/element_abundances_33737784.56195955.dat new file mode 100644 index 000000000..0dcfa4d3d --- /dev/null +++ b/elementfiles/element_abundances_33737784.56195955.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.722973788969757 +He 0 +N 0 +O 31.597605783472833 +P 0 +S 30.878637564739506 +Si 26.521058305002473 +Ti 20.233132887719087 +V 0 +Cl 0 +K 26.080716982869415 +Na 27.496783824451995 +Mg 26.10131833405077 +F 0 +Ca 20.740016619929506 +Fe 27.034240966342146 +Al 20.513979630025972 +e- 0 diff --git a/elementfiles/element_abundances_338177.91195249255.dat b/elementfiles/element_abundances_338177.91195249255.dat new file mode 100644 index 000000000..9578dad3b --- /dev/null +++ b/elementfiles/element_abundances_338177.91195249255.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.404800467355905 +He 0 +N 0 +O 31.758427379907083 +P 0 +S 0 +Si 30.920125764547297 +Ti 27.273200041326636 +V 0 +Cl 0 +K 29.56270676778419 +Na 30.793615388491386 +Mg 29.895199187684142 +F 0 +Ca 26.14004582418896 +Fe 30.196672228364335 +Al 27.42356603253569 +e- 0 diff --git a/elementfiles/element_abundances_33851.54401423596.dat b/elementfiles/element_abundances_33851.54401423596.dat new file mode 100644 index 000000000..a5b9a7819 --- /dev/null +++ b/elementfiles/element_abundances_33851.54401423596.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.388223721736402 +H 31.497397865807912 +He 0 +N 30.958347572752466 +O 31.499511710312436 +P 0 +S 26.34277273825745 +Si 30.421242639414377 +Ti 25.42806928898721 +V 0 +Cl 0 +K 28.30576196892984 +Na 29.539545236547674 +Mg 29.22721378629116 +F 0 +Ca 25.34672040705712 +Fe 29.43591762483884 +Al 26.42499209955837 +e- 0 diff --git a/elementfiles/element_abundances_33851.575738204556.dat b/elementfiles/element_abundances_33851.575738204556.dat new file mode 100644 index 000000000..a1a660060 --- /dev/null +++ b/elementfiles/element_abundances_33851.575738204556.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.388221921866297 +H 31.49740009282127 +He 0 +N 30.95834721780913 +O 31.499510859839706 +P 0 +S 26.342775098822734 +Si 30.421243712014043 +Ti 25.428071725059464 +V 0 +Cl 0 +K 28.30576405003552 +Na 29.539547316674913 +Mg 29.227214889666477 +F 0 +Ca 25.34672154227463 +Fe 29.43591875088806 +Al 26.42499315298285 +e- 0 diff --git a/elementfiles/element_abundances_338526.3043183633.dat b/elementfiles/element_abundances_338526.3043183633.dat new file mode 100644 index 000000000..0802fc39c --- /dev/null +++ b/elementfiles/element_abundances_338526.3043183633.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.401167198987196 +He 0 +N 0 +O 31.759450128450247 +P 0 +S 0 +Si 30.92190743935846 +Ti 27.27551744338829 +V 0 +Cl 0 +K 29.56476595495806 +Na 30.795670925768363 +Mg 29.897161842774093 +F 0 +Ca 26.14210376553673 +Fe 30.19870798927891 +Al 27.42564488352601 +e- 0 diff --git a/elementfiles/element_abundances_3406107.353520929.dat b/elementfiles/element_abundances_3406107.353520929.dat new file mode 100644 index 000000000..de9bc1daf --- /dev/null +++ b/elementfiles/element_abundances_3406107.353520929.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 26.770303988790857 +He 0 +N 0 +O 31.96345483630234 +P 0 +S 0 +Si 30.38751721414935 +Ti 25.266459347501353 +V 0 +Cl 0 +K 29.268895463488953 +Na 30.583542325605084 +Mg 29.584031488851426 +F 0 +Ca 25.032390912431474 +Fe 30.088721313564907 +Al 25.40089764456451 +e- 0 diff --git a/elementfiles/element_abundances_3406121.8526943284.dat b/elementfiles/element_abundances_3406121.8526943284.dat new file mode 100644 index 000000000..650e01509 --- /dev/null +++ b/elementfiles/element_abundances_3406121.8526943284.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 26.769841866888846 +He 0 +N 0 +O 31.96345483914404 +P 0 +S 0 +Si 30.387517215503443 +Ti 25.266459348855477 +V 0 +Cl 0 +K 29.268895464843066 +Na 30.583542326959194 +Mg 29.584031490205522 +F 0 +Ca 25.03239091378557 +Fe 30.088721314919 +Al 25.4008976459186 +e- 0 diff --git a/elementfiles/element_abundances_340760.41875509074.dat b/elementfiles/element_abundances_340760.41875509074.dat new file mode 100644 index 000000000..10473544e --- /dev/null +++ b/elementfiles/element_abundances_340760.41875509074.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.264301953912415 +He 0 +N 0 +O 31.791027156501602 +P 0 +S 0 +Si 30.97493941358147 +Ti 27.347624993717375 +V 0 +Cl 0 +K 29.627683160622414 +Na 30.85845488514753 +Mg 29.95673476284214 +F 0 +Ca 26.205080236547445 +Fe 30.260894637465647 +Al 27.489304316653538 +e- 0 diff --git a/elementfiles/element_abundances_344124.58527572174.dat b/elementfiles/element_abundances_344124.58527572174.dat new file mode 100644 index 000000000..2e817409d --- /dev/null +++ b/elementfiles/element_abundances_344124.58527572174.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.879790391881244 +He 0 +N 0 +O 31.22977027793827 +P 0 +S 28.25184953818256 +Si 30.767925671670923 +Ti 25.902993187559346 +V 0 +Cl 0 +K 28.52295399391731 +Na 29.739679218542047 +Mg 29.485311954792127 +F 0 +Ca 25.751134444166354 +Fe 29.6413482264748 +Al 26.980999689625598 +e- 0 diff --git a/elementfiles/element_abundances_3447679.351372336.dat b/elementfiles/element_abundances_3447679.351372336.dat new file mode 100644 index 000000000..fc0c92015 --- /dev/null +++ b/elementfiles/element_abundances_3447679.351372336.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 26.770642484373436 +He 0 +N 0 +O 31.963454834219704 +P 0 +S 0 +Si 30.38751721314777 +Ti 25.266459346499747 +V 0 +Cl 0 +K 29.268895462487357 +Na 30.583542324603485 +Mg 29.584031487849845 +F 0 +Ca 25.032390911429893 +Fe 30.088721312563322 +Al 25.40089764356292 +e- 0 diff --git a/elementfiles/element_abundances_346247.7804150478.dat b/elementfiles/element_abundances_346247.7804150478.dat new file mode 100644 index 000000000..8c7c1db90 --- /dev/null +++ b/elementfiles/element_abundances_346247.7804150478.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.421494611279417 +H 30.43556017826253 +He 0 +N 31.117474877067743 +O 31.747019637642275 +P 0 +S 30.283968182855904 +Si 26.38031534204257 +Ti 20.395399782099815 +V 0 +Cl 0 +K 25.632431876639885 +Na 27.012767232588338 +Mg 25.836560774878436 +F 0 +Ca 20.75601666263759 +Fe 26.61224888605252 +Al 20.72496387732214 +e- 0 diff --git a/elementfiles/element_abundances_346634.592372485.dat b/elementfiles/element_abundances_346634.592372485.dat new file mode 100644 index 000000000..a898cc37e --- /dev/null +++ b/elementfiles/element_abundances_346634.592372485.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.03905338928704 +He 0 +N 0 +O 31.99759976140916 +P 0 +S 0 +Si 29.238645365025246 +Ti 25.509583348679207 +V 0 +Cl 0 +K 28.050380414455063 +Na 29.301019792091562 +Mg 28.23053641372445 +F 0 +Ca 24.302287303619707 +Fe 28.604332195503726 +Al 25.477856280527284 +e- 0 diff --git a/elementfiles/element_abundances_346923.74483638286.dat b/elementfiles/element_abundances_346923.74483638286.dat new file mode 100644 index 000000000..cda14a31f --- /dev/null +++ b/elementfiles/element_abundances_346923.74483638286.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.539551648706734 +He 0 +N 0 +O 31.995325351612216 +P 0 +S 0 +Si 29.362510154560848 +Ti 25.436064239221686 +V 0 +Cl 0 +K 28.31336869632593 +Na 29.584203629284964 +Mg 28.39355469835218 +F 0 +Ca 24.26187137353713 +Fe 28.809905367041175 +Al 25.272326725814658 +e- 0 diff --git a/elementfiles/element_abundances_34953857.65898976.dat b/elementfiles/element_abundances_34953857.65898976.dat new file mode 100644 index 000000000..a22eb26cb --- /dev/null +++ b/elementfiles/element_abundances_34953857.65898976.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.73369338633653 +He 0 +N 0 +O 31.591470718803162 +P 0 +S 30.832278902324628 +Si 26.56215716251608 +Ti 20.27443166560338 +V 0 +Cl 0 +K 26.12195536324936 +Na 27.53802220266811 +Mg 26.142417176833774 +F 0 +Ca 20.781115495779204 +Fe 27.07533990777904 +Al 20.554966497468037 +e- 0 diff --git a/elementfiles/element_abundances_3497.2872375278293.dat b/elementfiles/element_abundances_3497.2872375278293.dat new file mode 100644 index 000000000..dd8146e7d --- /dev/null +++ b/elementfiles/element_abundances_3497.2872375278293.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 30.682262780366454 +H 29.967655866671855 +He 0 +N 31.514342853913828 +O 31.64364070925726 +P 0 +S 31.244260864615324 +Si 27.384002865649414 +Ti 23.339629450005425 +V 0 +Cl 0 +K 26.31882295992716 +Na 27.593209277330075 +Mg 26.42076924944432 +F 0 +Ca 22.244832248902362 +Fe 26.83226775120378 +Al 23.198165185115684 +e- 0 diff --git a/elementfiles/element_abundances_353129.32611258543.dat b/elementfiles/element_abundances_353129.32611258543.dat new file mode 100644 index 000000000..29d6c0067 --- /dev/null +++ b/elementfiles/element_abundances_353129.32611258543.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.550869553490642 +He 0 +N 0 +O 31.665346081889634 +P 0 +S 30.74226595562351 +Si 30.699330667634733 +Ti 26.956510269248632 +V 0 +Cl 0 +K 29.504232828723573 +Na 30.754909932612282 +Mg 29.688514669270734 +F 0 +Ca 25.757781227527445 +Fe 30.059819988058877 +Al 26.931438985775237 +e- 0 diff --git a/elementfiles/element_abundances_3543041.8283855906.dat b/elementfiles/element_abundances_3543041.8283855906.dat new file mode 100644 index 000000000..8e26f5917 --- /dev/null +++ b/elementfiles/element_abundances_3543041.8283855906.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.42177489620722 +H 30.433190593505138 +He 0 +N 31.118052260137212 +O 31.7469938410908 +P 0 +S 30.280274742395466 +Si 26.36858705467118 +Ti 20.3829592405759 +V 0 +Cl 0 +K 25.62329191477021 +Na 27.003840948279848 +Mg 25.82560720247001 +F 0 +Ca 20.743372759671765 +Fe 26.602223643686116 +Al 20.710575263930792 +e- 0 diff --git a/elementfiles/element_abundances_355117.96568008646.dat b/elementfiles/element_abundances_355117.96568008646.dat new file mode 100644 index 000000000..609dd83aa --- /dev/null +++ b/elementfiles/element_abundances_355117.96568008646.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.73048167038925 +He 0 +N 0 +O 31.542162665765765 +P 0 +S 28.855799601577147 +Si 30.88376630204983 +Ti 26.857692982180875 +V 0 +Cl 0 +K 29.134614048862115 +Na 30.349287004083877 +Mg 29.709015360946786 +F 0 +Ca 26.04234748205704 +Fe 29.89234637712258 +Al 27.394823944028808 +e- 0 diff --git a/elementfiles/element_abundances_356247.8150398258.dat b/elementfiles/element_abundances_356247.8150398258.dat new file mode 100644 index 000000000..48731bc54 --- /dev/null +++ b/elementfiles/element_abundances_356247.8150398258.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.421672504856357 +H 30.433482942959376 +He 0 +N 31.11786296253231 +O 31.747011705646052 +P 0 +S 30.282045365455275 +Si 26.378948226125004 +Ti 20.393313291523615 +V 0 +Cl 0 +K 25.630570873853088 +Na 27.010906245483426 +Mg 25.835193744490134 +F 0 +Ca 20.75464928599041 +Fe 26.61088097738004 +Al 20.72393769920653 +e- 0 diff --git a/elementfiles/element_abundances_356910.40620480187.dat b/elementfiles/element_abundances_356910.40620480187.dat new file mode 100644 index 000000000..8f76fe8e3 --- /dev/null +++ b/elementfiles/element_abundances_356910.40620480187.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.01420435169348 +He 0 +N 0 +O 31.996387160073642 +P 0 +S 0 +Si 29.363040837258424 +Ti 25.436594921421204 +V 0 +Cl 0 +K 28.313899378776707 +Na 29.58473431173614 +Mg 28.394085381009983 +F 0 +Ca 24.26240205612833 +Fe 28.810436049617273 +Al 25.272857408275108 +e- 0 diff --git a/elementfiles/element_abundances_356913.838191403.dat b/elementfiles/element_abundances_356913.838191403.dat new file mode 100644 index 000000000..e39e3cd5c --- /dev/null +++ b/elementfiles/element_abundances_356913.838191403.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.01414908966743 +He 0 +N 0 +O 31.99638719244609 +P 0 +S 0 +Si 29.36304573219207 +Ti 25.436595001848563 +V 0 +Cl 0 +K 28.313901888002167 +Na 29.584736824786297 +Mg 28.394089891469118 +F 0 +Ca 24.262405922789146 +Fe 28.810439770264356 +Al 25.272860010990563 +e- 0 diff --git a/elementfiles/element_abundances_356923.7795287573.dat b/elementfiles/element_abundances_356923.7795287573.dat new file mode 100644 index 000000000..9d3cab9bc --- /dev/null +++ b/elementfiles/element_abundances_356923.7795287573.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.41716067345266 +He 0 +N 0 +O 31.995697217716845 +P 0 +S 0 +Si 29.36270561979686 +Ti 25.43625043941174 +V 0 +Cl 0 +K 28.313559570499145 +Na 29.584394510818406 +Mg 28.393749423708122 +F 0 +Ca 24.262064859970724 +Fe 28.810098572486424 +Al 25.27251777990412 +e- 0 diff --git a/elementfiles/element_abundances_357287.64676137205.dat b/elementfiles/element_abundances_357287.64676137205.dat new file mode 100644 index 000000000..206ec59ec --- /dev/null +++ b/elementfiles/element_abundances_357287.64676137205.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.662282153098978 +He 0 +N 0 +O 31.985982344869136 +P 0 +S 0 +Si 29.957774629470265 +Ti 25.358808228072434 +V 0 +Cl 0 +K 28.829051551525765 +Na 30.12105680505944 +Mg 29.056509084515323 +F 0 +Ca 24.69874837468751 +Fe 29.48633002886651 +Al 25.34606832460119 +e- 0 diff --git a/elementfiles/element_abundances_357288.77501205594.dat b/elementfiles/element_abundances_357288.77501205594.dat new file mode 100644 index 000000000..437fdac38 --- /dev/null +++ b/elementfiles/element_abundances_357288.77501205594.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.662308726639218 +He 0 +N 0 +O 31.98598222700469 +P 0 +S 0 +Si 29.95777425149603 +Ti 25.358808156031202 +V 0 +Cl 0 +K 28.829051333978388 +Na 30.121056587481316 +Mg 29.056508709238084 +F 0 +Ca 24.698748008405275 +Fe 29.486329667192145 +Al 25.346068045515313 +e- 0 diff --git a/elementfiles/element_abundances_36092.00263312.dat b/elementfiles/element_abundances_36092.00263312.dat index 6c970058b..3b573a220 100644 --- a/elementfiles/element_abundances_36092.00263312.dat +++ b/elementfiles/element_abundances_36092.00263312.dat @@ -1,20 +1,20 @@ # Abundances determined using atmosphere_builder -C 30.562129626057416 -H 31.855318910754406 +C 0 +H 31.718826265558917 He 0 -N 30.327477717399947 -O 30.621127720674327 +N 0 +O 31.483753365189568 P 0 -S 26.65975926428863 -Si 31.1553700287609 -Ti 26.57217757475871 +S 27.027911271948636 +Si 31.11104955494141 +Ti 26.7026313910321 V 0 Cl 0 -K 29.0938868559499 -Na 30.3102176285252 -Mg 29.891325693747213 +K 29.15131027881196 +Na 30.36730377965059 +Mg 29.86545514533601 F 0 -Ca 26.17082473515859 -Fe 30.052690696564294 -Al 27.432311470518385 +Ca 26.157593527669214 +Fe 30.031833602948367 +Al 27.451039534526135 e- 0 diff --git a/elementfiles/element_abundances_3618.61258293657.dat b/elementfiles/element_abundances_3618.61258293657.dat new file mode 100644 index 000000000..bcc825f2c --- /dev/null +++ b/elementfiles/element_abundances_3618.61258293657.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.435276897077202 +H 29.855449512588457 +He 0 +N 31.165518655352233 +O 31.74420339866106 +P 0 +S 30.27718426250233 +Si 27.771556747183666 +Ti 22.978830139782573 +V 0 +Cl 0 +K 26.62728962211021 +Na 27.926123765990283 +Mg 26.89947917501864 +F 0 +Ca 22.481052714429552 +Fe 27.348376827799605 +Al 23.024803884832096 +e- 0 diff --git a/elementfiles/element_abundances_36247.20304810029.dat b/elementfiles/element_abundances_36247.20304810029.dat new file mode 100644 index 000000000..21870de00 --- /dev/null +++ b/elementfiles/element_abundances_36247.20304810029.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.424296791106983 +H 30.32341693956829 +He 0 +N 31.12247216175795 +O 31.74827176813608 +P 0 +S 30.313327227370714 +Si 26.848762752848522 +Ti 21.06339892266767 +V 0 +Cl 0 +K 25.96467295002664 +Na 27.326033590845036 +Mg 26.234567811146384 +F 0 +Ca 21.304689562461274 +Fe 26.928903768855115 +Al 21.37011778476551 +e- 0 diff --git a/elementfiles/element_abundances_365589.5266374889.dat b/elementfiles/element_abundances_365589.5266374889.dat new file mode 100644 index 000000000..2d49a515d --- /dev/null +++ b/elementfiles/element_abundances_365589.5266374889.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.952636557283007 +He 0 +N 0 +O 30.916627781170952 +P 0 +S 28.32503175899461 +Si 30.23826620727809 +Ti 25.152378939664622 +V 0 +Cl 0 +K 27.80615831532086 +Na 29.023183887298224 +Mg 28.94722514135154 +F 0 +Ca 25.206513453119094 +Fe 29.100744156092023 +Al 26.470803147210837 +e- 0 diff --git a/elementfiles/element_abundances_365677.9288911048.dat b/elementfiles/element_abundances_365677.9288911048.dat new file mode 100644 index 000000000..02bdb1a9c --- /dev/null +++ b/elementfiles/element_abundances_365677.9288911048.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.717949247680423 +He 0 +N 0 +O 31.552204194362332 +P 0 +S 28.8813306926369 +Si 30.907741603291136 +Ti 26.898235414485626 +V 0 +Cl 0 +K 29.1675706561782 +Na 30.382157493625332 +Mg 29.737310889180126 +F 0 +Ca 26.072833100743473 +Fe 29.921569733659183 +Al 27.426983621130038 +e- 0 diff --git a/elementfiles/element_abundances_366247.8506646073.dat b/elementfiles/element_abundances_366247.8506646073.dat new file mode 100644 index 000000000..9243d7975 --- /dev/null +++ b/elementfiles/element_abundances_366247.8506646073.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.421849389302807 +H 30.431407636187938 +He 0 +N 31.118249819689982 +O 31.74700368459096 +P 0 +S 30.280121275581433 +Si 26.373735827220006 +Ti 20.39018067594408 +V 0 +Cl 0 +K 25.626785515861357 +Na 27.00712084222942 +Mg 25.829981097911045 +F 0 +Ca 20.749437642047834 +Fe 26.605670873982397 +Al 20.717741023027507 +e- 0 diff --git a/elementfiles/element_abundances_367287.6824901367.dat b/elementfiles/element_abundances_367287.6824901367.dat new file mode 100644 index 000000000..dbcc1874c --- /dev/null +++ b/elementfiles/element_abundances_367287.6824901367.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.59018746503489 +He 0 +N 0 +O 31.986293116905127 +P 0 +S 0 +Si 29.957930695839508 +Ti 25.358962542925937 +V 0 +Cl 0 +K 28.829206699425253 +Na 30.12121195313494 +Mg 29.056665135443836 +F 0 +Ca 24.69890437411832 +Fe 29.486486001916575 +Al 25.34622382481929 +e- 0 diff --git a/elementfiles/element_abundances_367288.81074093346.dat b/elementfiles/element_abundances_367288.81074093346.dat new file mode 100644 index 000000000..e1e9546d9 --- /dev/null +++ b/elementfiles/element_abundances_367288.81074093346.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.590214987723602 +He 0 +N 0 +O 31.98629280463571 +P 0 +S 0 +Si 29.957940506821608 +Ti 25.35896280943383 +V 0 +Cl 0 +K 28.829211505417874 +Na 30.1212167600867 +Mg 29.05667486228641 +F 0 +Ca 24.69891382033969 +Fe 29.486495304383954 +Al 25.346230550713624 +e- 0 diff --git a/elementfiles/element_abundances_367600.1162713222.dat b/elementfiles/element_abundances_367600.1162713222.dat new file mode 100644 index 000000000..a342bce77 --- /dev/null +++ b/elementfiles/element_abundances_367600.1162713222.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 30.90318662392532 +He 0 +N 0 +O 31.839438722261526 +P 0 +S 0 +Si 31.118108512333258 +Ti 27.482802962823406 +V 0 +Cl 0 +K 29.583042268657636 +Na 30.79446893179236 +Mg 30.08169861102773 +F 0 +Ca 26.471680357454172 +Fe 30.289901200970945 +Al 27.83870635065427 +e- 0 diff --git a/elementfiles/element_abundances_367721.47136916424.dat b/elementfiles/element_abundances_367721.47136916424.dat new file mode 100644 index 000000000..f5e9e3f07 --- /dev/null +++ b/elementfiles/element_abundances_367721.47136916424.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.222700691748216 +He 0 +N 0 +O 31.798398086321946 +P 0 +S 0 +Si 30.987003907345546 +Ti 27.36484253189457 +V 0 +Cl 0 +K 29.64241943174203 +Na 30.873154039067277 +Mg 29.970598716634555 +F 0 +Ca 26.21986696967801 +Fe 30.27546805001226 +Al 27.504255258616723 +e- 0 diff --git a/elementfiles/element_abundances_36899574.61423809.dat b/elementfiles/element_abundances_36899574.61423809.dat new file mode 100644 index 000000000..1ad754ed0 --- /dev/null +++ b/elementfiles/element_abundances_36899574.61423809.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 10.571503523977626 +H 31.75358042603643 +He 0 +N 0 +O 31.578876959934025 +P 0 +S 30.730238775085624 +Si 26.640983428945567 +Ti 20.35199758000941 +V 0 +Cl 0 +K 26.199901613334596 +Na 27.615968466413094 +Mg 26.221243536013034 +F 0 +Ca 20.85994164675112 +Fe 27.154165645775393 +Al 20.634499396649908 +e- 0 diff --git a/elementfiles/element_abundances_372923.83503655647.dat b/elementfiles/element_abundances_372923.83503655647.dat new file mode 100644 index 000000000..ee8b0dc69 --- /dev/null +++ b/elementfiles/element_abundances_372923.83503655647.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.240800169433648 +He 0 +N 0 +O 31.996078216437503 +P 0 +S 0 +Si 29.36289012348016 +Ti 25.43644076189914 +V 0 +Cl 0 +K 28.313746957546385 +Na 29.58458189324316 +Mg 28.393934392062782 +F 0 +Ca 24.262250606413936 +Fe 28.810284495400712 +Al 25.272705053955164 +e- 0 diff --git a/elementfiles/element_abundances_376247.88728939235.dat b/elementfiles/element_abundances_376247.88728939235.dat new file mode 100644 index 000000000..a0a5bf2a3 --- /dev/null +++ b/elementfiles/element_abundances_376247.88728939235.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.42202750303171 +H 30.429288917088183 +He 0 +N 31.118639770342252 +O 31.746995842739768 +P 0 +S 30.27818689362147 +Si 26.371379157498517 +Ti 20.38782400510887 +V 0 +Cl 0 +K 25.624428845376375 +Na 27.00476417174446 +Mg 25.827624428189687 +F 0 +Ca 20.74708097232594 +Fe 26.603314204259675 +Al 20.715384353831944 +e- 0 diff --git a/elementfiles/element_abundances_377287.71921890497.dat b/elementfiles/element_abundances_377287.71921890497.dat new file mode 100644 index 000000000..9af4b25f3 --- /dev/null +++ b/elementfiles/element_abundances_377287.71921890497.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.524003440162637 +He 0 +N 0 +O 31.98653628438206 +P 0 +S 0 +Si 29.958049931795568 +Ti 25.359083052913704 +V 0 +Cl 0 +K 28.829326603465304 +Na 30.12133185704696 +Mg 29.056784382631292 +F 0 +Ca 24.699023658764574 +Fe 29.48660530575186 +Al 25.346343472586838 +e- 0 diff --git a/elementfiles/element_abundances_377288.84746981453.dat b/elementfiles/element_abundances_377288.84746981453.dat new file mode 100644 index 000000000..80eb5bfea --- /dev/null +++ b/elementfiles/element_abundances_377288.84746981453.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.524063965208345 +He 0 +N 0 +O 31.986535922968013 +P 0 +S 0 +Si 29.95805738599115 +Ti 25.35908319645567 +V 0 +Cl 0 +K 28.829330224057134 +Na 30.121335478373453 +Mg 29.05679177237929 +F 0 +Ca 24.699030833567768 +Fe 29.486612370445176 +Al 25.34634856373238 +e- 0 diff --git a/elementfiles/element_abundances_377721.50814131135.dat b/elementfiles/element_abundances_377721.50814131135.dat new file mode 100644 index 000000000..dc3cdf292 --- /dev/null +++ b/elementfiles/element_abundances_377721.50814131135.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.23345471096494 +He 0 +N 0 +O 31.796575676591193 +P 0 +S 0 +Si 30.98402466091769 +Ti 27.360564914894454 +V 0 +Cl 0 +K 29.63876693949504 +Na 30.86951094490891 +Mg 29.96716476510237 +F 0 +Ca 26.216200387013362 +Fe 30.27185521226323 +Al 27.50054810464816 +e- 0 diff --git a/elementfiles/element_abundances_381720.5371951371.dat b/elementfiles/element_abundances_381720.5371951371.dat new file mode 100644 index 000000000..b09441764 --- /dev/null +++ b/elementfiles/element_abundances_381720.5371951371.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.30649114240409 +He 0 +N 0 +O 31.782597353744123 +P 0 +S 0 +Si 30.961054568135253 +Ti 27.328168137055982 +V 0 +Cl 0 +K 29.610910005467364 +Na 30.84172132096021 +Mg 29.94091975871479 +F 0 +Ca 26.18826897172594 +Fe 30.244314071479316 +Al 27.472305852322336 +e- 0 diff --git a/elementfiles/element_abundances_3851.5398587737877.dat b/elementfiles/element_abundances_3851.5398587737877.dat new file mode 100644 index 000000000..ef8093534 --- /dev/null +++ b/elementfiles/element_abundances_3851.5398587737877.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.53451574146313 +H 31.182719404716885 +He 0 +N 31.045356730987944 +O 31.577805512908657 +P 0 +S 25.997964306633232 +Si 30.09500854147134 +Ti 25.024097759289013 +V 0 +Cl 0 +K 27.919208920896555 +Na 29.15305047741079 +Mg 28.899367522695986 +F 0 +Ca 25.01720122483939 +Fe 29.106880626406404 +Al 26.104543269585836 +e- 0 diff --git a/elementfiles/element_abundances_3851.57158273287.dat b/elementfiles/element_abundances_3851.57158273287.dat new file mode 100644 index 000000000..39e0a11e5 --- /dev/null +++ b/elementfiles/element_abundances_3851.57158273287.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.534515609875086 +H 31.18271944331278 +He 0 +N 31.045357504293268 +O 31.577805385273816 +P 0 +S 25.99796428555944 +Si 30.09500864906584 +Ti 25.024097780212237 +V 0 +Cl 0 +K 27.919208957666342 +Na 29.15305051424919 +Mg 28.89936762864255 +F 0 +Ca 25.017201329071376 +Fe 29.106880731133046 +Al 26.10454338941561 +e- 0 diff --git a/elementfiles/element_abundances_386247.92491418106.dat b/elementfiles/element_abundances_386247.92491418106.dat new file mode 100644 index 000000000..8d84b6530 --- /dev/null +++ b/elementfiles/element_abundances_386247.92491418106.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.4222063958145 +H 30.42713454306491 +He 0 +N 31.119032008151283 +O 31.746988089864853 +P 0 +S 30.276243767346394 +Si 26.373519935721752 +Ti 20.386690082393493 +V 0 +Cl 0 +K 25.624321533708276 +Na 27.004656931448437 +Mg 25.829765595832377 +F 0 +Ca 20.749220563442982 +Fe 26.605451373052144 +Al 20.71907686465778 +e- 0 diff --git a/elementfiles/element_abundances_387287.7569476769.dat b/elementfiles/element_abundances_387287.7569476769.dat new file mode 100644 index 000000000..836d41fda --- /dev/null +++ b/elementfiles/element_abundances_387287.7569476769.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.462812526994814 +He 0 +N 0 +O 31.986730205742663 +P 0 +S 0 +Si 29.9581504819147 +Ti 25.359179316575805 +V 0 +Cl 0 +K 28.829424905827242 +Na 30.121430159839655 +Mg 29.05688489496273 +F 0 +Ca 24.699124045066963 +Fe 29.486705627493297 +Al 25.346442637175944 +e- 0 diff --git a/elementfiles/element_abundances_387288.88519869925.dat b/elementfiles/element_abundances_387288.88519869925.dat new file mode 100644 index 000000000..ebad61c82 --- /dev/null +++ b/elementfiles/element_abundances_387288.88519869925.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.462888462888056 +He 0 +N 0 +O 31.986730091862555 +P 0 +S 0 +Si 29.95814501437437 +Ti 25.359179031429946 +V 0 +Cl 0 +K 28.829422155860808 +Na 30.121427409352428 +Mg 29.056879473108367 +F 0 +Ca 24.69911877558387 +Fe 29.486700436065487 +Al 25.346438844764236 +e- 0 diff --git a/elementfiles/element_abundances_393320.7653433659.dat b/elementfiles/element_abundances_393320.7653433659.dat new file mode 100644 index 000000000..2f8b23bfe --- /dev/null +++ b/elementfiles/element_abundances_393320.7653433659.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.36646431131263 +He 0 +N 0 +O 31.7123833362285 +P 0 +S 30.62238601223306 +Si 30.92503010961264 +Ti 27.16119483763274 +V 0 +Cl 0 +K 29.71948181553736 +Na 30.970214100596664 +Mg 29.91021054083691 +F 0 +Ca 25.975747833824983 +Fe 30.277777324239725 +Al 27.146351973373747 +e- 0 diff --git a/elementfiles/element_abundances_393721.5669767467.dat b/elementfiles/element_abundances_393721.5669767467.dat new file mode 100644 index 000000000..c7425c269 --- /dev/null +++ b/elementfiles/element_abundances_393721.5669767467.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.250629580044556 +He 0 +N 0 +O 31.793546875620912 +P 0 +S 0 +Si 30.97906878498743 +Ti 27.35348637737325 +V 0 +Cl 0 +K 29.632710484326093 +Na 30.863469787542904 +Mg 29.96146740863328 +F 0 +Ca 26.21012289169804 +Fe 30.265865588314682 +Al 27.494403116652506 +e- 0 diff --git a/elementfiles/element_abundances_394722.5354036104.dat b/elementfiles/element_abundances_394722.5354036104.dat new file mode 100644 index 000000000..6ff355c6c --- /dev/null +++ b/elementfiles/element_abundances_394722.5354036104.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.578919618633318 +He 0 +N 0 +O 31.58712538197253 +P 0 +S 30.79892150136162 +Si 30.73648812524645 +Ti 26.81004224304239 +V 0 +Cl 0 +K 29.687346683430796 +Na 30.95818161636351 +Mg 29.76753267168388 +F 0 +Ca 25.63584935129969 +Fe 30.183883345808656 +Al 26.646304712276113 +e- 0 diff --git a/elementfiles/element_abundances_396247.96353897353.dat b/elementfiles/element_abundances_396247.96353897353.dat new file mode 100644 index 000000000..4a2da3848 --- /dev/null +++ b/elementfiles/element_abundances_396247.96353897353.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.422386124072105 +H 30.424946405521 +He 0 +N 31.119426521485533 +O 31.746980567484815 +P 0 +S 30.27429229876702 +Si 26.36666738715678 +Ti 20.383112197427373 +V 0 +Cl 0 +K 25.61971704943688 +Na 27.000052375805772 +Mg 25.822912657852406 +F 0 +Ca 20.742369201970615 +Fe 26.59860243387663 +Al 20.710672601123 +e- 0 diff --git a/elementfiles/element_abundances_39689514.66319433.dat b/elementfiles/element_abundances_39689514.66319433.dat new file mode 100644 index 000000000..3bc542784 --- /dev/null +++ b/elementfiles/element_abundances_39689514.66319433.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 24.594305633503986 +He 0 +N 0 +O 31.963457454592515 +P 0 +S 0 +Si 30.387519033196902 +Ti 25.266460654271732 +V 0 +Cl 0 +K 29.268896992506257 +Na 30.583543854646557 +Mg 29.584033307433174 +F 0 +Ca 25.032392727367544 +Fe 30.088723125633972 +Al 25.400899433783614 +e- 0 diff --git a/elementfiles/element_abundances_39689529.164728574.dat b/elementfiles/element_abundances_39689529.164728574.dat new file mode 100644 index 000000000..39954c437 --- /dev/null +++ b/elementfiles/element_abundances_39689529.164728574.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 24.593837477059083 +He 0 +N 0 +O 31.963457454611707 +P 0 +S 0 +Si 30.387519033206086 +Ti 25.26646065428092 +V 0 +Cl 0 +K 29.268896992515444 +Na 30.583543854655744 +Mg 29.58403330744236 +F 0 +Ca 25.032392727376727 +Fe 30.088723125643156 +Al 25.4008994337928 +e- 0 diff --git a/elementfiles/element_abundances_39731093.43015283.dat b/elementfiles/element_abundances_39731093.43015283.dat new file mode 100644 index 000000000..e81ac6140 --- /dev/null +++ b/elementfiles/element_abundances_39731093.43015283.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 24.59463158859141 +He 0 +N 0 +O 31.963457454578943 +P 0 +S 0 +Si 30.387519033192724 +Ti 25.266460654267554 +V 0 +Cl 0 +K 29.26889699250208 +Na 30.58354385464238 +Mg 29.584033307429 +F 0 +Ca 25.032392727363366 +Fe 30.088723125629794 +Al 25.400899433779436 +e- 0 diff --git a/elementfiles/element_abundances_398523.9238490351.dat b/elementfiles/element_abundances_398523.9238490351.dat new file mode 100644 index 000000000..28f104bc0 --- /dev/null +++ b/elementfiles/element_abundances_398523.9238490351.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.002329241242165 +He 0 +N 0 +O 31.996399320348022 +P 0 +S 0 +Si 29.363046904065676 +Ti 25.436600988612486 +V 0 +Cl 0 +K 28.313905445774257 +Na 29.584740378733382 +Mg 28.394091447847906 +F 0 +Ca 24.262408123017607 +Fe 28.810442116518193 +Al 25.272863475265197 +e- 0 diff --git a/elementfiles/element_abundances_398877.5304493238.dat b/elementfiles/element_abundances_398877.5304493238.dat new file mode 100644 index 000000000..618634494 --- /dev/null +++ b/elementfiles/element_abundances_398877.5304493238.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.650679557669342 +He 0 +N 0 +O 31.986035907771477 +P 0 +S 0 +Si 29.95780223652465 +Ti 25.358834866519054 +V 0 +Cl 0 +K 28.829078650656143 +Na 30.121083904287154 +Mg 29.056536683030803 +F 0 +Ca 24.69877594472416 +Fe 29.4863575843143 +Al 25.346095618567524 +e- 0 diff --git a/elementfiles/element_abundances_40012721.74263542.dat b/elementfiles/element_abundances_40012721.74263542.dat new file mode 100644 index 000000000..17fd81b83 --- /dev/null +++ b/elementfiles/element_abundances_40012721.74263542.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 8.550627221601797 +H 31.796414520627927 +He 0 +N 0 +O 31.54616436863408 +P 0 +S 30.35109876130762 +Si 26.8077302344432 +Ti 20.51979855221877 +V 0 +Cl 0 +K 26.367384539645066 +Na 27.78345138129547 +Mg 26.387990263953 +F 0 +Ca 21.02668854879576 +Fe 27.32091289315357 +Al 20.800655069515866 +e- 0 diff --git a/elementfiles/element_abundances_403287.817313712.dat b/elementfiles/element_abundances_403287.817313712.dat new file mode 100644 index 000000000..3798bd86e --- /dev/null +++ b/elementfiles/element_abundances_403287.817313712.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.369617459857018 +He 0 +N 0 +O 31.98697783021998 +P 0 +S 0 +Si 29.958267711238186 +Ti 25.359301674627083 +V 0 +Cl 0 +K 28.82954482458259 +Na 30.121550078079604 +Mg 29.05700216949908 +F 0 +Ca 24.69924147039668 +Fe 29.486823130069986 +Al 25.34656152428108 +e- 0 diff --git a/elementfiles/element_abundances_403288.9455649148.dat b/elementfiles/element_abundances_403288.9455649148.dat new file mode 100644 index 000000000..3c5e942e6 --- /dev/null +++ b/elementfiles/element_abundances_403288.9455649148.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.36953985301769 +He 0 +N 0 +O 31.98697794962396 +P 0 +S 0 +Si 29.95827097591162 +Ti 25.35930186914453 +V 0 +Cl 0 +K 28.829546479310153 +Na 30.121551733115695 +Mg 29.05700540710715 +F 0 +Ca 24.69924461773671 +Fe 29.486826231168383 +Al 25.34656379657307 +e- 0 diff --git a/elementfiles/element_abundances_404722.5748758639.dat b/elementfiles/element_abundances_404722.5748758639.dat new file mode 100644 index 000000000..e14a66457 --- /dev/null +++ b/elementfiles/element_abundances_404722.5748758639.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.557833810227088 +He 0 +N 0 +O 31.587569388194833 +P 0 +S 30.77114141488034 +Si 30.7877771787832 +Ti 26.861331288160294 +V 0 +Cl 0 +K 29.738635732795803 +Na 31.009470665735204 +Mg 29.818821724548325 +F 0 +Ca 25.687138403038354 +Fe 30.235172397291997 +Al 26.69759376180459 +e- 0 diff --git a/elementfiles/element_abundances_406248.0031637699.dat b/elementfiles/element_abundances_406248.0031637699.dat new file mode 100644 index 000000000..644127768 --- /dev/null +++ b/elementfiles/element_abundances_406248.0031637699.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.422564216436598 +H 30.422769416312235 +He 0 +N 31.119818778709817 +O 31.746972747143186 +P 0 +S 30.272341120817263 +Si 26.365583460375934 +Ti 20.381098297355773 +V 0 +Cl 0 +K 25.617995337891095 +Na 26.998330684470425 +Mg 25.821828841970223 +F 0 +Ca 20.741284937167713 +Fe 26.597517479310433 +Al 20.710028261254564 +e- 0 diff --git a/elementfiles/element_abundances_408877.57033707685.dat b/elementfiles/element_abundances_408877.57033707685.dat new file mode 100644 index 000000000..c5aec90e8 --- /dev/null +++ b/elementfiles/element_abundances_408877.57033707685.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.57955522326886 +He 0 +N 0 +O 31.986334597702168 +P 0 +S 0 +Si 29.957957585161097 +Ti 25.358983384127164 +V 0 +Cl 0 +K 28.82923041719745 +Na 30.121235671514928 +Mg 29.056691971447876 +F 0 +Ca 24.69893103229828 +Fe 29.486512569002507 +Al 25.346248759185656 +e- 0 diff --git a/elementfiles/element_abundances_415079.9345990785.dat b/elementfiles/element_abundances_415079.9345990785.dat new file mode 100644 index 000000000..fa3bf19be --- /dev/null +++ b/elementfiles/element_abundances_415079.9345990785.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.686508856249713 +He 0 +N 0 +O 31.57516002937846 +P 0 +S 28.934537614789377 +Si 30.960641370133384 +Ti 26.98141841472073 +V 0 +Cl 0 +K 29.236885461815444 +Na 30.451306248975804 +Mg 29.798426904128615 +F 0 +Ca 26.138025097858907 +Fe 29.984419712014805 +Al 27.49499379547334 +e- 0 diff --git a/elementfiles/element_abundances_416248.0437885702.dat b/elementfiles/element_abundances_416248.0437885702.dat new file mode 100644 index 000000000..93cd0c5c8 --- /dev/null +++ b/elementfiles/element_abundances_416248.0437885702.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.422742831744756 +H 30.420561144783036 +He 0 +N 31.120212871933834 +O 31.74696497598638 +P 0 +S 30.27038203384659 +Si 26.36813580693442 +Ti 20.380077063825297 +V 0 +Cl 0 +K 25.618092126509403 +Na 26.998427551181972 +Mg 25.82438161240058 +F 0 +Ca 20.743835991448467 +Fe 26.600065896730193 +Al 20.714277812312023 +e- 0 diff --git a/elementfiles/element_abundances_417.4408232539793.dat b/elementfiles/element_abundances_417.4408232539793.dat new file mode 100644 index 000000000..4b614ae95 --- /dev/null +++ b/elementfiles/element_abundances_417.4408232539793.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.43413608905462 +H 29.719566675205602 +He 0 +N 31.172513107956885 +O 31.7413007409021 +P 0 +S 30.352899049664636 +Si 28.369829992813585 +Ti 24.75545855693041 +V 0 +Cl 0 +K 27.09100510257015 +Na 28.32769011312055 +Mg 27.36381170502502 +F 0 +Ca 23.567788542178 +Fe 27.698118490005434 +Al 24.82436390449836 +e- 0 diff --git a/elementfiles/element_abundances_418877.6112248339.dat b/elementfiles/element_abundances_418877.6112248339.dat new file mode 100644 index 000000000..5946572b6 --- /dev/null +++ b/elementfiles/element_abundances_418877.6112248339.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.514233212732385 +He 0 +N 0 +O 31.986569063737775 +P 0 +S 0 +Si 29.95806945960127 +Ti 25.35909943619253 +V 0 +Cl 0 +K 28.829344482325897 +Na 30.121349736223557 +Mg 29.056803882716064 +F 0 +Ca 24.699043066394847 +Fe 29.486624666020433 +Al 25.346361983972862 +e- 0 diff --git a/elementfiles/element_abundances_419321.6611134433.dat b/elementfiles/element_abundances_419321.6611134433.dat new file mode 100644 index 000000000..3c43c0dca --- /dev/null +++ b/elementfiles/element_abundances_419321.6611134433.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.27590120317235 +He 0 +N 0 +O 31.78881090060285 +P 0 +S 0 +Si 30.971299661109043 +Ti 27.342486754288874 +V 0 +Cl 0 +K 29.62326658222792 +Na 30.854049009214194 +Mg 29.952574339156026 +F 0 +Ca 26.200651726642086 +Fe 30.256528166884998 +Al 27.484826451246544 +e- 0 diff --git a/elementfiles/element_abundances_420722.63803146954.dat b/elementfiles/element_abundances_420722.63803146954.dat new file mode 100644 index 000000000..a3046e81c --- /dev/null +++ b/elementfiles/element_abundances_420722.63803146954.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.510659291231114 +He 0 +N 0 +O 31.587337554977328 +P 0 +S 30.682434495800877 +Si 30.88486059150432 +Ti 26.958414663806913 +V 0 +Cl 0 +K 29.835719127145584 +Na 31.106554060114437 +Mg 29.91590513430875 +F 0 +Ca 25.784221807841142 +Fe 30.332255800970387 +Al 26.794677156874286 +e- 0 diff --git a/elementfiles/element_abundances_420778.4298562734.dat b/elementfiles/element_abundances_420778.4298562734.dat new file mode 100644 index 000000000..b9b7fbe91 --- /dev/null +++ b/elementfiles/element_abundances_420778.4298562734.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.689281186930447 +He 0 +N 0 +O 31.573254128598904 +P 0 +S 28.930658450066925 +Si 30.95633749504264 +Ti 26.974963340063635 +V 0 +Cl 0 +K 29.23141549186997 +Na 30.445848456660848 +Mg 29.79352554470566 +F 0 +Ca 26.13283120209207 +Fe 29.979393593341428 +Al 27.489610136507565 +e- 0 diff --git a/elementfiles/element_abundances_42532.537147565.dat b/elementfiles/element_abundances_42532.537147565.dat new file mode 100644 index 000000000..d5082e62f --- /dev/null +++ b/elementfiles/element_abundances_42532.537147565.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 29.406293387308857 +H 31.763650904442898 +He 0 +N 0 +O 31.443581977221527 +P 0 +S 27.855793129794343 +Si 31.028335776534274 +Ti 26.526896092429972 +V 0 +Cl 0 +K 29.015158881173434 +Na 30.231344871821236 +Mg 29.77210094193294 +F 0 +Ca 26.057060405625936 +Fe 29.935621159521116 +Al 27.333189070968395 +e- 0 diff --git a/elementfiles/element_abundances_426248.0854133746.dat b/elementfiles/element_abundances_426248.0854133746.dat new file mode 100644 index 000000000..869d69bd8 --- /dev/null +++ b/elementfiles/element_abundances_426248.0854133746.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.422920726515034 +H 30.418348776082148 +He 0 +N 31.120606329041525 +O 31.74695716756316 +P 0 +S 30.268420392122724 +Si 26.36435815677173 +Ti 20.37732828278491 +V 0 +Cl 0 +K 25.615022234101996 +Na 26.995357636220263 +Mg 25.820603840570172 +F 0 +Ca 20.740058712269814 +Fe 26.596289374511777 +Al 20.710010212967305 +e- 0 diff --git a/elementfiles/element_abundances_428877.65311259497.dat b/elementfiles/element_abundances_428877.65311259497.dat new file mode 100644 index 000000000..a5d577319 --- /dev/null +++ b/elementfiles/element_abundances_428877.65311259497.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.45378046412942 +He 0 +N 0 +O 31.98675670120882 +P 0 +S 0 +Si 29.95815819222323 +Ti 25.359192209361836 +V 0 +Cl 0 +K 28.829435333753207 +Na 30.12144058724482 +Mg 29.05689265095796 +F 0 +Ca 24.699131953435902 +Fe 29.486713613918774 +Al 25.346452022639937 +e- 0 diff --git a/elementfiles/element_abundances_428887.91389936814.dat b/elementfiles/element_abundances_428887.91389936814.dat new file mode 100644 index 000000000..2884186e8 --- /dev/null +++ b/elementfiles/element_abundances_428887.91389936814.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.231359091219606 +He 0 +N 0 +O 31.987259453234085 +P 0 +S 0 +Si 29.958414890810563 +Ti 25.35944129215291 +V 0 +Cl 0 +K 28.8296880387247 +Na 30.12169329298164 +Mg 29.05714928240759 +F 0 +Ca 24.69938836096868 +Fe 29.48696990674557 +Al 25.346706259542714 +e- 0 diff --git a/elementfiles/element_abundances_428889.04215085966.dat b/elementfiles/element_abundances_428889.04215085966.dat new file mode 100644 index 000000000..e875498c9 --- /dev/null +++ b/elementfiles/element_abundances_428889.04215085966.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.231324491584083 +He 0 +N 0 +O 31.98725948743681 +P 0 +S 0 +Si 29.95841616755726 +Ti 25.35944136227677 +V 0 +Cl 0 +K 28.829688682735057 +Na 30.121693937113253 +Mg 29.057150548517306 +F 0 +Ca 24.699389591602056 +Fe 29.48697111920546 +Al 25.346707146269825 +e- 0 diff --git a/elementfiles/element_abundances_430817.7603962677.dat b/elementfiles/element_abundances_430817.7603962677.dat new file mode 100644 index 000000000..b3ae83eb1 --- /dev/null +++ b/elementfiles/element_abundances_430817.7603962677.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.077945517151115 +H 31.83517404736392 +He 0 +N 30.14569244994568 +O 31.14257703802878 +P 0 +S 25.384457178147432 +Si 30.578698665097747 +Ti 25.26696302741 +V 0 +Cl 0 +K 27.64148367971768 +Na 28.859700158080102 +Mg 29.281100841476707 +F 0 +Ca 25.53563668037348 +Fe 29.432662534303102 +Al 27.234708870738757 +e- 0 diff --git a/elementfiles/element_abundances_436248.12803818315.dat b/elementfiles/element_abundances_436248.12803818315.dat new file mode 100644 index 000000000..c70cb61d4 --- /dev/null +++ b/elementfiles/element_abundances_436248.12803818315.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.423099049919983 +H 30.416107574192115 +He 0 +N 31.1210014342676 +O 31.746949422114753 +P 0 +S 30.26645116139146 +Si 26.360476229089258 +Ti 20.374551784903087 +V 0 +Cl 0 +K 25.611900027468902 +Na 26.992235405418185 +Mg 25.816721781834033 +F 0 +Ca 20.7361771841453 +Fe 26.592408661671428 +Al 20.70560305682423 +e- 0 diff --git a/elementfiles/element_abundances_441387.8784899409.dat b/elementfiles/element_abundances_441387.8784899409.dat new file mode 100644 index 000000000..172b32e0e --- /dev/null +++ b/elementfiles/element_abundances_441387.8784899409.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 0 +He 0 +N 0 +O 31.789584258324098 +P 0 +S 29.58973293810424 +Si 31.398119100421628 +Ti 27.44917240301544 +V 0 +Cl 0 +K 29.69077822439224 +Na 30.9050211057404 +Mg 30.244542833014588 +F 0 +Ca 26.588304317900178 +Fe 30.432316401884822 +Al 27.947772617008887 +e- 0 diff --git a/elementfiles/element_abundances_443035.70078176504.dat b/elementfiles/element_abundances_443035.70078176504.dat new file mode 100644 index 000000000..2a19eb2b8 --- /dev/null +++ b/elementfiles/element_abundances_443035.70078176504.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.33078977124531 +He 0 +N 0 +O 31.777253685252084 +P 0 +S 0 +Si 30.952176141724987 +Ti 27.31593761225472 +V 0 +Cl 0 +K 29.60029431826561 +Na 30.831129182795355 +Mg 29.93088794310721 +F 0 +Ca 26.177638613836237 +Fe 30.233822510506723 +Al 27.46155801345302 +e- 0 diff --git a/elementfiles/element_abundances_443384.0935129511.dat b/elementfiles/element_abundances_443384.0935129511.dat new file mode 100644 index 000000000..c8389b4ab --- /dev/null +++ b/elementfiles/element_abundances_443384.0935129511.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.326994386301564 +He 0 +N 0 +O 31.778113411422076 +P 0 +S 0 +Si 30.953609800600592 +Ti 27.31790112915821 +V 0 +Cl 0 +K 29.602002565437846 +Na 30.832833720955342 +Mg 29.932503526964155 +F 0 +Ca 26.179348766718313 +Fe 30.235510723853846 +Al 27.46328698042067 +e- 0 diff --git a/elementfiles/element_abundances_444877.72013301274.dat b/elementfiles/element_abundances_444877.72013301274.dat new file mode 100644 index 000000000..294e89168 --- /dev/null +++ b/elementfiles/element_abundances_444877.72013301274.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.361530225485815 +He 0 +N 0 +O 31.98699687086386 +P 0 +S 0 +Si 29.958278705125412 +Ti 25.35931116254175 +V 0 +Cl 0 +K 28.82955502875944 +Na 30.121560282407795 +Mg 29.057013150110183 +F 0 +Ca 24.699252406729435 +Fe 29.486834043720265 +Al 25.346572031385037 +e- 0 diff --git a/elementfiles/element_abundances_446248.17166299594.dat b/elementfiles/element_abundances_446248.17166299594.dat new file mode 100644 index 000000000..64f2453fc --- /dev/null +++ b/elementfiles/element_abundances_446248.17166299594.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.423277713143165 +H 30.413838762594608 +He 0 +N 31.12139803802217 +O 31.746941721644504 +P 0 +S 30.264474683112695 +Si 26.356766747118396 +Ti 20.371822988308715 +V 0 +Cl 0 +K 25.608863927537932 +Na 26.98919928410058 +Mg 25.81301218330969 +F 0 +Ca 20.732468057485008 +Fe 26.58870026002844 +Al 20.701428637160685 +e- 0 diff --git a/elementfiles/element_abundances_446322.73908043856.dat b/elementfiles/element_abundances_446322.73908043856.dat new file mode 100644 index 000000000..d353f4f94 --- /dev/null +++ b/elementfiles/element_abundances_446322.73908043856.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.415500595827954 +He 0 +N 0 +O 31.586762847633047 +P 0 +S 30.36727239016704 +Si 31.02145581470374 +Ti 27.095009856290496 +V 0 +Cl 0 +K 29.972314335124544 +Na 31.243149268117797 +Mg 30.05250035505527 +F 0 +Ca 25.920817024480304 +Fe 30.468851016678002 +Al 26.931272365449683 +e- 0 diff --git a/elementfiles/element_abundances_447256.72669921134.dat b/elementfiles/element_abundances_447256.72669921134.dat new file mode 100644 index 000000000..9d5a40ba3 --- /dev/null +++ b/elementfiles/element_abundances_447256.72669921134.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.35388728030929 +He 0 +N 0 +O 31.77181059664528 +P 0 +S 0 +Si 30.943050047485237 +Ti 27.30354173183411 +V 0 +Cl 0 +K 29.58947385550981 +Na 30.820331498549624 +Mg 29.920642400832346 +F 0 +Ca 26.166809827701343 +Fe 30.22312911510663 +Al 27.45061108903402 +e- 0 diff --git a/elementfiles/element_abundances_44993757.14807115.dat b/elementfiles/element_abundances_44993757.14807115.dat new file mode 100644 index 000000000..1e464b506 --- /dev/null +++ b/elementfiles/element_abundances_44993757.14807115.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.8257320050342 +He 0 +N 0 +O 31.518780879301172 +P 0 +S 0 +Si 27.352435930180725 +Ti 21.065112794050457 +V 0 +Cl 0 +K 26.912514858208063 +Na 28.328581693275193 +Mg 26.93269591483049 +F 0 +Ca 21.571394300372248 +Fe 27.865618844464677 +Al 21.345019985070536 +e- 0 diff --git a/elementfiles/element_abundances_45073390.06298962.dat b/elementfiles/element_abundances_45073390.06298962.dat new file mode 100644 index 000000000..9218e155e --- /dev/null +++ b/elementfiles/element_abundances_45073390.06298962.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.825678719047367 +He 0 +N 0 +O 31.51929374645758 +P 0 +S 0 +Si 25.763452900369963 +Ti 19.25373603447357 +V 0 +Cl 0 +K 25.661684443644717 +Na 27.111569102399862 +Mg 25.452402270249294 +F 0 +Ca 19.828683162812897 +Fe 26.537847400769003 +Al 19.39229758900577 +e- 0 diff --git a/elementfiles/element_abundances_45120298.52614186.dat b/elementfiles/element_abundances_45120298.52614186.dat new file mode 100644 index 000000000..f397150ea --- /dev/null +++ b/elementfiles/element_abundances_45120298.52614186.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.825678512083496 +He 0 +N 0 +O 31.519293544557847 +P 0 +S 0 +Si 25.77404334316533 +Ti 19.266018356457447 +V 0 +Cl 0 +K 25.67340416927724 +Na 27.123288820181443 +Mg 25.46299263411679 +F 0 +Ca 19.83927364614572 +Fe 26.54843817781918 +Al 19.401935352186783 +e- 0 diff --git a/elementfiles/element_abundances_45157825.29666365.dat b/elementfiles/element_abundances_45157825.29666365.dat new file mode 100644 index 000000000..6fd153052 --- /dev/null +++ b/elementfiles/element_abundances_45157825.29666365.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.825678321343506 +He 0 +N 0 +O 31.519293357993963 +P 0 +S 0 +Si 25.784326219624937 +Ti 19.276326927561847 +V 0 +Cl 0 +K 25.683704184845787 +Na 27.133588835631002 +Mg 25.47327550937532 +F 0 +Ca 19.849556523222162 +Fe 26.55872105936514 +Al 19.41220377649653 +e- 0 diff --git a/elementfiles/element_abundances_451802.3543921758.dat b/elementfiles/element_abundances_451802.3543921758.dat new file mode 100644 index 000000000..edb71082e --- /dev/null +++ b/elementfiles/element_abundances_451802.3543921758.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.610989235101876 +He 0 +N 0 +O 31.642913734900564 +P 0 +S 30.381439908030078 +Si 30.827272986445305 +Ti 27.02654750082229 +V 0 +Cl 0 +K 29.390311361931293 +Na 30.622089541285956 +Mg 29.756248752900486 +F 0 +Ca 25.97469556681871 +Fe 30.03761260771213 +Al 27.24806369186563 +e- 0 diff --git a/elementfiles/element_abundances_45187846.713081084.dat b/elementfiles/element_abundances_45187846.713081084.dat new file mode 100644 index 000000000..50eea6778 --- /dev/null +++ b/elementfiles/element_abundances_45187846.713081084.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.82567816606065 +He 0 +N 0 +O 31.519293206104052 +P 0 +S 0 +Si 25.79253170626274 +Ti 19.284532369434462 +V 0 +Cl 0 +K 25.691909641624147 +Na 27.141794292409564 +Mg 25.48148099601521 +F 0 +Ca 19.857762009858888 +Fe 26.56692654599408 +Al 19.420409288312428 +e- 0 diff --git a/elementfiles/element_abundances_45235880.97934898.dat b/elementfiles/element_abundances_45235880.97934898.dat new file mode 100644 index 000000000..c519f92a4 --- /dev/null +++ b/elementfiles/element_abundances_45235880.97934898.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.82567786229755 +He 0 +N 0 +O 31.519292908214403 +P 0 +S 0 +Si 25.809244938831817 +Ti 19.29909970854426 +V 0 +Cl 0 +K 25.707190326223852 +Na 27.157074986971665 +Mg 25.498194328645454 +F 0 +Ca 19.874475191035543 +Fe 26.583639354807044 +Al 19.43833116970598 +e- 0 diff --git a/elementfiles/element_abundances_45312735.80537761.dat b/elementfiles/element_abundances_45312735.80537761.dat new file mode 100644 index 000000000..64908ce54 --- /dev/null +++ b/elementfiles/element_abundances_45312735.80537761.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.825677426036037 +He 0 +N 0 +O 31.519292482248876 +P 0 +S 0 +Si 25.82963768302889 +Ti 19.321638374982204 +V 0 +Cl 0 +K 25.729015637588304 +Na 27.178900288373587 +Mg 25.518586972780014 +F 0 +Ca 19.894867986625727 +Fe 26.604032522765927 +Al 19.45751524889042 +e- 0 diff --git a/elementfiles/element_abundances_45375.76396432932.dat b/elementfiles/element_abundances_45375.76396432932.dat new file mode 100644 index 000000000..a20d67ac9 --- /dev/null +++ b/elementfiles/element_abundances_45375.76396432932.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.743193212296962 +He 0 +N 0 +O 31.564976318867817 +P 0 +S 30.107619837259712 +Si 30.627307373225197 +Ti 26.754259153919733 +V 0 +Cl 0 +K 28.961183694922497 +Na 30.174922015253603 +Mg 29.497332460493002 +F 0 +Ca 25.851868523055913 +Fe 29.689760032835927 +Al 27.21618316785881 +e- 0 diff --git a/elementfiles/element_abundances_45435703.52702342.dat b/elementfiles/element_abundances_45435703.52702342.dat new file mode 100644 index 000000000..cf1f285e7 --- /dev/null +++ b/elementfiles/element_abundances_45435703.52702342.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.825676491076468 +He 0 +N 0 +O 31.51929156591613 +P 0 +S 0 +Si 25.87463027559746 +Ti 19.362259664200714 +V 0 +Cl 0 +K 25.7710875315407 +Na 27.22097220267262 +Mg 25.563579768651476 +F 0 +Ca 19.93986047476598 +Fe 26.649024254318277 +Al 19.504973517420606 +e- 0 diff --git a/elementfiles/element_abundances_456248.2162878131.dat b/elementfiles/element_abundances_456248.2162878131.dat new file mode 100644 index 000000000..b54ccc0fb --- /dev/null +++ b/elementfiles/element_abundances_456248.2162878131.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.423454471235654 +H 30.411587998498167 +He 0 +N 31.121791809894212 +O 31.746933747604515 +P 0 +S 30.2625000168477 +Si 26.352494596299906 +Ti 20.3689394240049 +V 0 +Cl 0 +K 25.60554427053192 +Na 26.985879596900432 +Mg 25.808739866993456 +F 0 +Ca 20.728196411120088 +Fe 26.584429643039044 +Al 20.69649980203316 +e- 0 diff --git a/elementfiles/element_abundances_45632451.881656714.dat b/elementfiles/element_abundances_45632451.881656714.dat new file mode 100644 index 000000000..11861ae00 --- /dev/null +++ b/elementfiles/element_abundances_45632451.881656714.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.825674820524284 +He 0 +N 0 +O 31.51928993193389 +P 0 +S 0 +Si 25.941504129248067 +Ti 19.42990408006363 +V 0 +Cl 0 +K 25.838476958438957 +Na 27.288361625969166 +Mg 25.63045358661458 +F 0 +Ca 20.006734346750616 +Fe 26.715898259120298 +Al 19.57141170247928 +e- 0 diff --git a/elementfiles/element_abundances_45947249.24906998.dat b/elementfiles/element_abundances_45947249.24906998.dat new file mode 100644 index 000000000..76951a6b1 --- /dev/null +++ b/elementfiles/element_abundances_45947249.24906998.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.825671077685627 +He 0 +N 0 +O 31.519286272610312 +P 0 +S 0 +Si 26.060726304918774 +Ti 19.552727022521374 +V 0 +Cl 0 +K 25.960104276586872 +Na 27.409988927372037 +Mg 25.7496755946687 +F 0 +Ca 20.125956608516233 +Fe 26.83512114466089 +Al 19.688603856353915 +e- 0 diff --git a/elementfiles/element_abundances_460281.8117321579.dat b/elementfiles/element_abundances_460281.8117321579.dat new file mode 100644 index 000000000..f9d2a8206 --- /dev/null +++ b/elementfiles/element_abundances_460281.8117321579.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.30871334996931 +He 0 +N 0 +O 31.782124243374525 +P 0 +S 0 +Si 30.960270996928617 +Ti 27.327082159955594 +V 0 +Cl 0 +K 29.609969699056276 +Na 30.84078314723827 +Mg 29.94003189605625 +F 0 +Ca 26.187327087052424 +Fe 30.243384708024898 +Al 27.47135351960842 +e- 0 diff --git a/elementfiles/element_abundances_46092.00624232026.dat b/elementfiles/element_abundances_46092.00624232026.dat new file mode 100644 index 000000000..66a796988 --- /dev/null +++ b/elementfiles/element_abundances_46092.00624232026.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.784749244441443 +He 0 +N 0 +O 31.40383369230184 +P 0 +S 27.085942921986728 +Si 31.032545785723553 +Ti 26.404757992217114 +V 0 +Cl 0 +K 28.944033600378017 +Na 30.160435704227982 +Mg 29.76477186203951 +F 0 +Ca 26.041603720645192 +Fe 29.92508998881758 +Al 27.29565745098904 +e- 0 diff --git a/elementfiles/element_abundances_46247.20667282059.dat b/elementfiles/element_abundances_46247.20667282059.dat new file mode 100644 index 000000000..259007c6c --- /dev/null +++ b/elementfiles/element_abundances_46247.20667282059.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.42306186017005 +H 30.354948803938058 +He 0 +N 31.11965346394526 +O 31.74818087366217 +P 0 +S 30.31643771384816 +Si 26.773348812686848 +Ti 20.945180401122247 +V 0 +Cl 0 +K 25.91368699631567 +Na 27.27878616427273 +Mg 26.17326352247828 +F 0 +Ca 21.21362191843496 +Fe 26.88346954498472 +Al 21.260426748133682 +e- 0 diff --git a/elementfiles/element_abundances_46450925.03693121.dat b/elementfiles/element_abundances_46450925.03693121.dat new file mode 100644 index 000000000..32b6af973 --- /dev/null +++ b/elementfiles/element_abundances_46450925.03693121.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.825658816283802 +He 0 +N 0 +O 31.519274278506007 +P 0 +S 0 +Si 26.315539380807625 +Ti 19.80699792214123 +V 0 +Cl 0 +K 26.21455563245909 +Na 27.66444028575664 +Mg 26.00448869588603 +F 0 +Ca 20.380769671397 +Fe 27.08993411328745 +Al 19.943721986379902 +e- 0 diff --git a/elementfiles/element_abundances_466248.2619126347.dat b/elementfiles/element_abundances_466248.2619126347.dat new file mode 100644 index 000000000..d52f8fdb9 --- /dev/null +++ b/elementfiles/element_abundances_466248.2619126347.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.423631469174232 +H 30.40931006796794 +He 0 +N 31.122186953593637 +O 31.74692574729867 +P 0 +S 30.26051815564418 +Si 26.353795101048384 +Ti 20.367568366474543 +V 0 +Cl 0 +K 25.605011218547745 +Na 26.985346603099735 +Mg 25.810040689665286 +F 0 +Ca 20.729495946741707 +Fe 26.585727201114803 +Al 20.699065436363213 +e- 0 diff --git a/elementfiles/element_abundances_4668947.097307472.dat b/elementfiles/element_abundances_4668947.097307472.dat new file mode 100644 index 000000000..a99dac64a --- /dev/null +++ b/elementfiles/element_abundances_4668947.097307472.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.420095785304827 +H 30.453042036288416 +He 0 +N 31.11438914369306 +O 31.747053391287242 +P 0 +S 30.29759472835419 +Si 26.39214548089393 +Ti 20.40438286704684 +V 0 +Cl 0 +K 25.645385023111622 +Na 27.025934102922655 +Mg 25.849165882291686 +F 0 +Ca 20.766930417604048 +Fe 26.625779728888183 +Al 20.73514594168327 +e- 0 diff --git a/elementfiles/element_abundances_469848.068436418.dat b/elementfiles/element_abundances_469848.068436418.dat new file mode 100644 index 000000000..3cf06de74 --- /dev/null +++ b/elementfiles/element_abundances_469848.068436418.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.034886560679066 +He 0 +N 0 +O 31.98753292627298 +P 0 +S 0 +Si 29.95854511272686 +Ti 25.359576205155328 +V 0 +Cl 0 +K 28.829820720580713 +Na 30.12182597436624 +Mg 29.05727954567842 +F 0 +Ca 24.699518762164665 +Fe 29.48710037859654 +Al 25.34683799777515 +e- 0 diff --git a/elementfiles/element_abundances_469849.1966883715.dat b/elementfiles/element_abundances_469849.1966883715.dat new file mode 100644 index 000000000..6696e945d --- /dev/null +++ b/elementfiles/element_abundances_469849.1966883715.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.034989679825816 +He 0 +N 0 +O 31.98753287112311 +P 0 +S 0 +Si 29.958542222891925 +Ti 25.35957605703892 +V 0 +Cl 0 +K 28.82981926846374 +Na 30.121824521973746 +Mg 29.057276680013466 +F 0 +Ca 24.699515977111112 +Fe 29.487097634837816 +Al 25.346835994159264 +e- 0 diff --git a/elementfiles/element_abundances_470477.8273656812.dat b/elementfiles/element_abundances_470477.8273656812.dat new file mode 100644 index 000000000..1a85a0160 --- /dev/null +++ b/elementfiles/element_abundances_470477.8273656812.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.224534473355998 +He 0 +N 0 +O 31.98727121520233 +P 0 +S 0 +Si 29.958418463731977 +Ti 25.359447011655668 +V 0 +Cl 0 +K 28.82969273728344 +Na 30.12169799132467 +Mg 29.05715287425226 +F 0 +Ca 24.69939201592597 +Fe 29.486973594033596 +Al 25.34671052631009 +e- 0 diff --git a/elementfiles/element_abundances_470728.6111094832.dat b/elementfiles/element_abundances_470728.6111094832.dat new file mode 100644 index 000000000..dbc7c131b --- /dev/null +++ b/elementfiles/element_abundances_470728.6111094832.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.771362065334767 +He 0 +N 0 +O 31.96077194728333 +P 0 +S 0 +Si 30.386226383867946 +Ti 25.265168019687767 +V 0 +Cl 0 +K 29.26760435152531 +Na 30.582251213664915 +Mg 29.58274065811763 +F 0 +Ca 25.031100078156932 +Fe 30.08743047650588 +Al 25.399606785313217 +e- 0 diff --git a/elementfiles/element_abundances_470743.1098572943.dat b/elementfiles/element_abundances_470743.1098572943.dat new file mode 100644 index 000000000..5e6551ff1 --- /dev/null +++ b/elementfiles/element_abundances_470743.1098572943.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.771205043347138 +He 0 +N 0 +O 31.960772898902082 +P 0 +S 0 +Si 30.386227194166715 +Ti 25.265168511554993 +V 0 +Cl 0 +K 29.267604981541222 +Na 30.582251843695854 +Mg 29.582741468126855 +F 0 +Ca 25.031100885900003 +Fe 30.087431282466827 +Al 25.399607577070714 +e- 0 diff --git a/elementfiles/element_abundances_47076.509090136315.dat b/elementfiles/element_abundances_47076.509090136315.dat new file mode 100644 index 000000000..2621102b7 --- /dev/null +++ b/elementfiles/element_abundances_47076.509090136315.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.441779360748598 +He 0 +N 0 +O 31.701422390185776 +P 0 +S 30.351033258362186 +Si 31.019003150916202 +Ti 27.207136752214325 +V 0 +Cl 0 +K 29.57628165670692 +Na 30.808110955946056 +Mg 29.945070706538385 +F 0 +Ca 26.161697722025888 +Fe 30.22505918528952 +Al 27.433998839075407 +e- 0 diff --git a/elementfiles/element_abundances_47147699.712703936.dat b/elementfiles/element_abundances_47147699.712703936.dat new file mode 100644 index 000000000..6b47da6e6 --- /dev/null +++ b/elementfiles/element_abundances_47147699.712703936.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.825579624468254 +He 0 +N 0 +O 31.519196816873393 +P 0 +S 0 +Si 26.90242773931275 +Ti 20.39420157512142 +V 0 +Cl 0 +K 26.801654362203436 +Na 28.251539014039565 +Mg 26.591377039665648 +F 0 +Ca 20.96765803746485 +Fe 27.676822534153107 +Al 20.530432918926557 +e- 0 diff --git a/elementfiles/element_abundances_47184511.08880002.dat b/elementfiles/element_abundances_47184511.08880002.dat new file mode 100644 index 000000000..fda28922d --- /dev/null +++ b/elementfiles/element_abundances_47184511.08880002.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.825507623831946 +He 0 +N 0 +O 31.51965979092592 +P 0 +S 0 +Si 24.62826704629338 +Ti 17.98440905921263 +V 0 +Cl 0 +K 24.74535714169891 +Na 26.312752822749705 +Mg 24.263017043858802 +F 0 +Ca 18.50862401692062 +Fe 25.63813141825505 +Al 17.784122565883035 +e- 0 diff --git a/elementfiles/element_abundances_476248.3085374609.dat b/elementfiles/element_abundances_476248.3085374609.dat new file mode 100644 index 000000000..97933aab4 --- /dev/null +++ b/elementfiles/element_abundances_476248.3085374609.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.423807255411504 +H 30.407036649815545 +He 0 +N 31.12258057995488 +O 31.746917591975123 +P 0 +S 30.258535432678045 +Si 26.352672398908222 +Ti 20.36553829879096 +V 0 +Cl 0 +K 25.603264807966667 +Na 26.98360021236712 +Mg 25.808918095045364 +F 0 +Ca 20.72837291678551 +Fe 26.58460350226467 +Al 20.698374039561266 +e- 0 diff --git a/elementfiles/element_abundances_480374.8001658886.dat b/elementfiles/element_abundances_480374.8001658886.dat new file mode 100644 index 000000000..db88e8147 --- /dev/null +++ b/elementfiles/element_abundances_480374.8001658886.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.807667011266687 +He 0 +N 0 +O 31.464683374051692 +P 0 +S 29.158699277943423 +Si 30.667512901994886 +Ti 26.44521682523615 +V 0 +Cl 0 +K 28.811468032604836 +Na 30.026951636703604 +Mg 29.45014492652478 +F 0 +Ca 25.759982699020618 +Fe 29.6236915824865 +Al 27.08619637945604 +e- 0 diff --git a/elementfiles/element_abundances_480728.6581823443.dat b/elementfiles/element_abundances_480728.6581823443.dat new file mode 100644 index 000000000..2a6e2a9f2 --- /dev/null +++ b/elementfiles/element_abundances_480728.6581823443.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.71112493033733 +He 0 +N 0 +O 31.9611206441539 +P 0 +S 0 +Si 30.386394417062558 +Ti 25.265336555280633 +V 0 +Cl 0 +K 29.26777266915713 +Na 30.58241953127303 +Mg 29.582908691769056 +F 0 +Ca 25.03126811538373 +Fe 30.0875985165444 +Al 25.39977484776105 +e- 0 diff --git a/elementfiles/element_abundances_480743.1569316053.dat b/elementfiles/element_abundances_480743.1569316053.dat new file mode 100644 index 000000000..f312e051a --- /dev/null +++ b/elementfiles/element_abundances_480743.1569316053.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.710945505713994 +He 0 +N 0 +O 31.96112161177802 +P 0 +S 0 +Si 30.38639488458351 +Ti 25.265337022790554 +V 0 +Cl 0 +K 29.26777313667184 +Na 30.582419998787735 +Mg 29.58290915929 +F 0 +Ca 25.031268582904598 +Fe 30.087598984065203 +Al 25.39977531528136 +e- 0 diff --git a/elementfiles/element_abundances_48084.23729292775.dat b/elementfiles/element_abundances_48084.23729292775.dat new file mode 100644 index 000000000..8f1aa7618 --- /dev/null +++ b/elementfiles/element_abundances_48084.23729292775.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.60161168232775 +He 0 +N 0 +O 31.665999827581974 +P 0 +S 30.98434082869458 +Si 30.383612313282242 +Ti 26.666100565671925 +V 0 +Cl 0 +K 28.802722088403097 +Na 30.015099322039887 +Mg 29.311327782424172 +F 0 +Ca 25.688943128304462 +Fe 29.513945564220016 +Al 27.056990552750968 +e- 0 diff --git a/elementfiles/element_abundances_4854672.990493284.dat b/elementfiles/element_abundances_4854672.990493284.dat new file mode 100644 index 000000000..98934ebf2 --- /dev/null +++ b/elementfiles/element_abundances_4854672.990493284.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.469257401255668 +He 0 +N 0 +O 31.73833405300713 +P 0 +S 0 +Si 30.883847267155076 +Ti 27.227417879311318 +V 0 +Cl 0 +K 29.521506173111227 +Na 30.752478726986645 +Mg 29.85573465821273 +F 0 +Ca 26.09889386892148 +Fe 30.155913685668384 +Al 27.382027223274946 +e- 0 diff --git a/elementfiles/element_abundances_486248.3561622918.dat b/elementfiles/element_abundances_486248.3561622918.dat new file mode 100644 index 000000000..dc9316f89 --- /dev/null +++ b/elementfiles/element_abundances_486248.3561622918.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.423982536954266 +H 30.404753666595216 +He 0 +N 31.122974043816633 +O 31.746909394296 +P 0 +S 30.25654898354022 +Si 26.34769769655882 +Ti 20.36245708101065 +V 0 +Cl 0 +K 25.599591102049423 +Na 26.97992646508044 +Mg 25.803943168059938 +F 0 +Ca 20.72339889928812 +Fe 26.579630882193946 +Al 20.692500223667977 +e- 0 diff --git a/elementfiles/element_abundances_490728.7062552101.dat b/elementfiles/element_abundances_490728.7062552101.dat new file mode 100644 index 000000000..2783e64eb --- /dev/null +++ b/elementfiles/element_abundances_490728.7062552101.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.65496830920143 +He 0 +N 0 +O 31.961404711865523 +P 0 +S 0 +Si 30.386531475428136 +Ti 25.26547371882834 +V 0 +Cl 0 +K 29.267909787072494 +Na 30.582556649183427 +Mg 29.583045750230276 +F 0 +Ca 25.031405174593495 +Fe 30.08773557634282 +Al 25.399911912251106 +e- 0 diff --git a/elementfiles/element_abundances_490743.205005921.dat b/elementfiles/element_abundances_490743.205005921.dat new file mode 100644 index 000000000..286b56c8d --- /dev/null +++ b/elementfiles/element_abundances_490743.205005921.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.65477025180929 +He 0 +N 0 +O 31.96140560318362 +P 0 +S 0 +Si 30.386532651008586 +Ti 25.265474216005863 +V 0 +Cl 0 +K 29.267910578569136 +Na 30.582557440712083 +Mg 29.58304692519387 +F 0 +Ca 25.031406344729156 +Fe 30.08773674268174 +Al 25.399913048330074 +e- 0 diff --git a/elementfiles/element_abundances_49577.342793754.dat b/elementfiles/element_abundances_49577.342793754.dat new file mode 100644 index 000000000..343f49324 --- /dev/null +++ b/elementfiles/element_abundances_49577.342793754.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.759471551164136 +He 0 +N 29.47116855116783 +O 31.43118676264478 +P 0 +S 26.56636910165308 +Si 31.073005775698046 +Ti 26.502667782002085 +V 0 +Cl 0 +K 29.019217670727695 +Na 30.235526956492585 +Mg 29.810102977820986 +F 0 +Ca 26.090410610588233 +Fe 29.971786110826518 +Al 27.35412722161407 +e- 0 diff --git a/elementfiles/element_abundances_4963756.731762637.dat b/elementfiles/element_abundances_4963756.731762637.dat new file mode 100644 index 000000000..843c0ce89 --- /dev/null +++ b/elementfiles/element_abundances_4963756.731762637.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.13323787586048 +He 0 +N 0 +O 31.811605495901986 +P 0 +S 0 +Si 31.008562702507 +Ti 27.39628081059095 +V 0 +Cl 0 +K 29.66910242711567 +Na 30.89976449410148 +Mg 29.99564642792941 +F 0 +Ca 26.24668746124292 +Fe 30.301879701607394 +Al 27.531366898260877 +e- 0 diff --git a/elementfiles/element_abundances_49648.82631560399.dat b/elementfiles/element_abundances_49648.82631560399.dat new file mode 100644 index 000000000..b87202abc --- /dev/null +++ b/elementfiles/element_abundances_49648.82631560399.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.78301408643981 +He 0 +N 0 +O 31.492727314218072 +P 0 +S 29.21816697036699 +Si 30.75246621085275 +Ti 26.608864664654998 +V 0 +Cl 0 +K 28.93946200454775 +Na 30.154661924608945 +Mg 29.550399933184895 +F 0 +Ca 25.86908862429768 +Fe 29.727596396781543 +Al 27.20715596179261 +e- 0 diff --git a/elementfiles/element_abundances_49689514.66319433.dat b/elementfiles/element_abundances_49689514.66319433.dat new file mode 100644 index 000000000..f8ceb3cc9 --- /dev/null +++ b/elementfiles/element_abundances_49689514.66319433.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 24.437029845597277 +He 0 +N 0 +O 31.963457459945307 +P 0 +S 0 +Si 30.387519036470422 +Ti 25.266460657520234 +V 0 +Cl 0 +K 29.268896995765612 +Na 30.583543857905916 +Mg 29.584033310706673 +F 0 +Ca 25.03239273064086 +Fe 30.08872312890715 +Al 25.400899437055678 +e- 0 diff --git a/elementfiles/element_abundances_49689529.164728574.dat b/elementfiles/element_abundances_49689529.164728574.dat new file mode 100644 index 000000000..ce29acf59 --- /dev/null +++ b/elementfiles/element_abundances_49689529.164728574.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 24.43655751162528 +He 0 +N 0 +O 31.963457459958786 +P 0 +S 0 +Si 30.387519036476878 +Ti 25.26646065752669 +V 0 +Cl 0 +K 29.268896995772067 +Na 30.58354385791237 +Mg 29.584033310713128 +F 0 +Ca 25.032392730647317 +Fe 30.088723128913607 +Al 25.400899437062133 +e- 0 diff --git a/elementfiles/element_abundances_49731093.43015283.dat b/elementfiles/element_abundances_49731093.43015283.dat new file mode 100644 index 000000000..c5c195b84 --- /dev/null +++ b/elementfiles/element_abundances_49731093.43015283.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 24.43736243473301 +He 0 +N 0 +O 31.963457459934997 +P 0 +S 0 +Si 30.387519036475073 +Ti 25.26646065752489 +V 0 +Cl 0 +K 29.268896995770262 +Na 30.583543857910566 +Mg 29.584033310711323 +F 0 +Ca 25.032392730645512 +Fe 30.088723128911802 +Al 25.400899437060332 +e- 0 diff --git a/elementfiles/element_abundances_49780.863602481695.dat b/elementfiles/element_abundances_49780.863602481695.dat new file mode 100644 index 000000000..8bda0bd42 --- /dev/null +++ b/elementfiles/element_abundances_49780.863602481695.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.82544143039403 +He 0 +N 28.975047544362898 +O 31.321440985549167 +P 0 +S 26.69978039957097 +Si 30.9470893774201 +Ti 26.15238889145939 +V 0 +Cl 0 +K 28.965984249086915 +Na 30.19962909437801 +Mg 29.7586896354996 +F 0 +Ca 25.883951733321986 +Fe 29.971498801681722 +Al 26.9706375861911 +e- 0 diff --git a/elementfiles/element_abundances_49781.003633519795.dat b/elementfiles/element_abundances_49781.003633519795.dat new file mode 100644 index 000000000..ef1699693 --- /dev/null +++ b/elementfiles/element_abundances_49781.003633519795.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.825441476375957 +He 0 +N 28.974926011091004 +O 31.321441233153536 +P 0 +S 26.699780543927638 +Si 30.94708961772677 +Ti 26.15238940877385 +V 0 +Cl 0 +K 28.965984663614332 +Na 30.199629508708355 +Mg 29.7586898855189 +F 0 +Ca 25.88395199314928 +Fe 29.97149905870952 +Al 26.970637879961117 +e- 0 diff --git a/elementfiles/element_abundances_500728.75532808073.dat b/elementfiles/element_abundances_500728.75532808073.dat new file mode 100644 index 000000000..2ea996e3c --- /dev/null +++ b/elementfiles/element_abundances_500728.75532808073.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.602368990125544 +He 0 +N 0 +O 31.96163927538298 +P 0 +S 0 +Si 30.386645305811758 +Ti 25.265586936630413 +V 0 +Cl 0 +K 29.268023270637663 +Na 30.582670132777505 +Mg 29.58315958005689 +F 0 +Ca 25.031519000060598 +Fe 30.08784939838156 +Al 25.400025706965824 +e- 0 diff --git a/elementfiles/element_abundances_500743.25408024155.dat b/elementfiles/element_abundances_500743.25408024155.dat new file mode 100644 index 000000000..3cc360dc6 --- /dev/null +++ b/elementfiles/element_abundances_500743.25408024155.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.602154899807555 +He 0 +N 0 +O 31.96164020798279 +P 0 +S 0 +Si 30.386645199279698 +Ti 25.265587336352006 +V 0 +Cl 0 +K 29.268023450725583 +Na 30.582670312841536 +Mg 29.58315947398516 +F 0 +Ca 25.03151889759168 +Fe 30.087849298745933 +Al 25.400025629911475 +e- 0 diff --git a/elementfiles/element_abundances_502248.4323620211.dat b/elementfiles/element_abundances_502248.4323620211.dat new file mode 100644 index 000000000..6c7e1fcd9 --- /dev/null +++ b/elementfiles/element_abundances_502248.4323620211.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.42414803933376 +H 30.402588726878005 +He 0 +N 31.12334678642503 +O 31.74690139030315 +P 0 +S 30.25465813957906 +Si 26.34312347131864 +Ti 20.35956831827376 +V 0 +Cl 0 +K 25.59617315874731 +Na 26.976508485115406 +Mg 25.79936874200989 +F 0 +Ca 20.718825286145822 +Fe 26.575058518079075 +Al 20.68712866796149 +e- 0 diff --git a/elementfiles/element_abundances_508939.2314005431.dat b/elementfiles/element_abundances_508939.2314005431.dat new file mode 100644 index 000000000..0a9ab44d2 --- /dev/null +++ b/elementfiles/element_abundances_508939.2314005431.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.70856018786376 +He 0 +N 0 +O 31.55937947644108 +P 0 +S 28.898863785114187 +Si 30.92454199835069 +Ti 26.92557706889645 +V 0 +Cl 0 +K 29.190084984318194 +Na 30.404615316430153 +Mg 29.756923986368516 +F 0 +Ca 26.093854556853913 +Fe 29.9417809041072 +Al 27.449021774286926 +e- 0 diff --git a/elementfiles/element_abundances_511019.08486946573.dat b/elementfiles/element_abundances_511019.08486946573.dat new file mode 100644 index 000000000..847631a1d --- /dev/null +++ b/elementfiles/element_abundances_511019.08486946573.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.68956469107894 +He 0 +N 0 +O 31.57305806587179 +P 0 +S 28.92985988812935 +Si 30.955895983018262 +Ti 26.97429771443693 +V 0 +Cl 0 +K 29.230852496184546 +Na 30.445286726211467 +Mg 29.79302190918902 +F 0 +Ca 26.132297115656904 +Fe 29.978876974056966 +Al 27.48905618811652 +e- 0 diff --git a/elementfiles/element_abundances_511437.9989379507.dat b/elementfiles/element_abundances_511437.9989379507.dat new file mode 100644 index 000000000..d1ebb42c8 --- /dev/null +++ b/elementfiles/element_abundances_511437.9989379507.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.03002898127941 +He 0 +N 0 +O 31.987538154052483 +P 0 +S 0 +Si 29.958551902702926 +Ti 25.359578964556825 +V 0 +Cl 0 +K 28.829825396980148 +Na 30.121830651170715 +Mg 29.0572863001227 +F 0 +Ca 24.699525398103763 +Fe 29.487106953828935 +Al 25.346843484934034 +e- 0 diff --git a/elementfiles/element_abundances_512299.3887068774.dat b/elementfiles/element_abundances_512299.3887068774.dat new file mode 100644 index 000000000..aa4016007 --- /dev/null +++ b/elementfiles/element_abundances_512299.3887068774.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.766519387033778 +He 0 +N 0 +O 31.960801809557935 +P 0 +S 0 +Si 30.386240830350122 +Ti 25.26518246602789 +V 0 +Cl 0 +K 29.26761879792706 +Na 30.58226566006667 +Mg 29.582755104599674 +F 0 +Ca 25.031114524637964 +Fe 30.08744492298612 +Al 25.39962123178712 +e- 0 diff --git a/elementfiles/element_abundances_5165334.590953232.dat b/elementfiles/element_abundances_5165334.590953232.dat new file mode 100644 index 000000000..ece8a6ce5 --- /dev/null +++ b/elementfiles/element_abundances_5165334.590953232.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 26.36274749841548 +He 0 +N 0 +O 31.963456449144346 +P 0 +S 0 +Si 30.387518201594048 +Ti 25.266460139261902 +V 0 +Cl 0 +K 29.268896340145346 +Na 30.583543202270707 +Mg 29.584032476118193 +F 0 +Ca 25.03239189830563 +Fe 30.088722298343896 +Al 25.40089862061505 +e- 0 diff --git a/elementfiles/element_abundances_5165349.090381693.dat b/elementfiles/element_abundances_5165349.090381693.dat new file mode 100644 index 000000000..9d3655f12 --- /dev/null +++ b/elementfiles/element_abundances_5165349.090381693.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 26.362284810811012 +He 0 +N 0 +O 31.96345645025789 +P 0 +S 0 +Si 30.3875182021199 +Ti 25.266460139787778 +V 0 +Cl 0 +K 29.268896340671212 +Na 30.583543202796573 +Mg 29.584032476644044 +F 0 +Ca 25.03239189883148 +Fe 30.08872229886975 +Al 25.400898621140904 +e- 0 diff --git a/elementfiles/element_abundances_516728.83384467376.dat b/elementfiles/element_abundances_516728.83384467376.dat new file mode 100644 index 000000000..f1bcd3313 --- /dev/null +++ b/elementfiles/element_abundances_516728.83384467376.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.521723211369387 +He 0 +N 0 +O 31.961947919707605 +P 0 +S 0 +Si 30.386793704981315 +Ti 25.265735647586787 +V 0 +Cl 0 +K 29.26817184632809 +Na 30.582818708453217 +Mg 29.58330797950995 +F 0 +Ca 25.031667401732527 +Fe 30.08799780179843 +Al 25.40017412428982 +e- 0 diff --git a/elementfiles/element_abundances_516743.3325991544.dat b/elementfiles/element_abundances_516743.3325991544.dat new file mode 100644 index 000000000..a57c1db9f --- /dev/null +++ b/elementfiles/element_abundances_516743.3325991544.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.521483108955834 +He 0 +N 0 +O 31.961948733825615 +P 0 +S 0 +Si 30.38679444161919 +Ti 25.26573607063821 +V 0 +Cl 0 +K 29.268172405426217 +Na 30.582819267566144 +Mg 29.58330871586269 +F 0 +Ca 25.03166813585359 +Fe 30.08799853416448 +Al 25.40017484266847 +e- 0 diff --git a/elementfiles/element_abundances_51692.000047472.dat b/elementfiles/element_abundances_51692.000047472.dat new file mode 100644 index 000000000..d14b0a068 --- /dev/null +++ b/elementfiles/element_abundances_51692.000047472.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 30.58362173456905 +H 30.004773369697578 +He 0 +N 31.373370556787318 +O 31.729850555584076 +P 0 +S 31.249390000419456 +Si 28.716453076392717 +Ti 25.012624787345935 +V 0 +Cl 0 +K 27.143142562675635 +Na 28.355374288363866 +Mg 27.649875337500063 +F 0 +Ca 24.0295512103789 +Fe 27.85341762483461 +Al 25.39755723662016 +e- 0 diff --git a/elementfiles/element_abundances_5206907.320125631.dat b/elementfiles/element_abundances_5206907.320125631.dat new file mode 100644 index 000000000..6b359a8a0 --- /dev/null +++ b/elementfiles/element_abundances_5206907.320125631.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 26.36304691472187 +He 0 +N 0 +O 31.963456448423866 +P 0 +S 0 +Si 30.387518201244873 +Ti 25.266460138912716 +V 0 +Cl 0 +K 29.268896339796164 +Na 30.58354320192153 +Mg 29.584032475769018 +F 0 +Ca 25.032391897956455 +Fe 30.088722297994725 +Al 25.400898620265874 +e- 0 diff --git a/elementfiles/element_abundances_52092.00680784.dat b/elementfiles/element_abundances_52092.00680784.dat new file mode 100644 index 000000000..5862ec401 --- /dev/null +++ b/elementfiles/element_abundances_52092.00680784.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.851313296999756 +He 0 +N 0 +O 31.300301476453512 +P 0 +S 27.62488951155062 +Si 30.8607489800435 +Ti 26.08338939009695 +V 0 +Cl 0 +K 28.67670580293858 +Na 29.89331918137003 +Mg 29.582758219797253 +F 0 +Ca 25.852079622545276 +Fe 29.740148685979076 +Al 27.086738895390006 +e- 0 diff --git a/elementfiles/element_abundances_522299.4399368163.dat b/elementfiles/element_abundances_522299.4399368163.dat new file mode 100644 index 000000000..0ca1b0571 --- /dev/null +++ b/elementfiles/element_abundances_522299.4399368163.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.706656390393128 +He 0 +N 0 +O 31.961144588796916 +P 0 +S 0 +Si 30.38640653985814 +Ti 25.265348173515203 +V 0 +Cl 0 +K 29.267784506291036 +Na 30.582431368430743 +Mg 29.582920814105854 +F 0 +Ca 25.031280234129767 +Fe 30.08761063246661 +Al 25.399786941177478 +e- 0 diff --git a/elementfiles/element_abundances_52532.54140081872.dat b/elementfiles/element_abundances_52532.54140081872.dat new file mode 100644 index 000000000..a40dae0db --- /dev/null +++ b/elementfiles/element_abundances_52532.54140081872.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 29.57582014500773 +H 31.771530215385756 +He 0 +N 0 +O 31.433262970380962 +P 0 +S 27.86069599477098 +Si 31.01401124099822 +Ti 26.482782101195973 +V 0 +Cl 0 +K 28.98339869053356 +Na 30.199639765160974 +Mg 29.75477601981499 +F 0 +Ca 26.03765724330088 +Fe 29.917474054126345 +Al 27.30834065737446 +e- 0 diff --git a/elementfiles/element_abundances_525818.0527221012.dat b/elementfiles/element_abundances_525818.0527221012.dat new file mode 100644 index 000000000..2bb6e3cf5 --- /dev/null +++ b/elementfiles/element_abundances_525818.0527221012.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.342160025860572 +He 0 +N 0 +O 31.7746200546245 +P 0 +S 0 +Si 30.947772548762355 +Ti 27.30993367177767 +V 0 +Cl 0 +K 29.595061413868574 +Na 30.825907450609975 +Mg 29.925935760661538 +F 0 +Ca 26.172400896377184 +Fe 30.22865105799065 +Al 27.456262913167514 +e- 0 diff --git a/elementfiles/element_abundances_527848.5542815881.dat b/elementfiles/element_abundances_527848.5542815881.dat new file mode 100644 index 000000000..61db6cb06 --- /dev/null +++ b/elementfiles/element_abundances_527848.5542815881.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.424299905732745 +H 30.400585983301852 +He 0 +N 31.12368974027756 +O 31.746893892222655 +P 0 +S 30.252915271013425 +Si 26.346495203201002 +Ti 20.35897052421972 +V 0 +Cl 0 +K 25.59681898368377 +Na 26.977154396641737 +Mg 25.80274094554921 +F 0 +Ca 20.722195580176695 +Fe 26.57842587815705 +Al 20.69238275415822 +e- 0 diff --git a/elementfiles/element_abundances_532299.4921667603.dat b/elementfiles/element_abundances_532299.4921667603.dat new file mode 100644 index 000000000..2a45a7d97 --- /dev/null +++ b/elementfiles/element_abundances_532299.4921667603.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.65082526918852 +He 0 +N 0 +O 31.961424236278205 +P 0 +S 0 +Si 30.386541014481423 +Ti 25.265483152029006 +V 0 +Cl 0 +K 29.26791926619639 +Na 30.582566128312322 +Mg 29.583055289187314 +F 0 +Ca 25.03141471279722 +Fe 30.08774511395413 +Al 25.399921445140876 +e- 0 diff --git a/elementfiles/element_abundances_542299.5453967095.dat b/elementfiles/element_abundances_542299.5453967095.dat new file mode 100644 index 000000000..e1adb3ffa --- /dev/null +++ b/elementfiles/element_abundances_542299.5453967095.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.598510281292516 +He 0 +N 0 +O 31.961655423805237 +P 0 +S 0 +Si 30.38665253617508 +Ti 25.26559467321716 +V 0 +Cl 0 +K 29.268030787603852 +Na 30.582677649719805 +Mg 29.583166810880513 +F 0 +Ca 25.03152623448682 +Fe 30.087856635640904 +Al 25.4000329668051 +e- 0 diff --git a/elementfiles/element_abundances_542328.9594712226.dat b/elementfiles/element_abundances_542328.9594712226.dat new file mode 100644 index 000000000..a21f64ad3 --- /dev/null +++ b/elementfiles/element_abundances_542328.9594712226.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.401211094628323 +He 0 +N 0 +O 31.962314154072512 +P 0 +S 0 +Si 30.38696997612908 +Ti 25.26591191745716 +V 0 +Cl 0 +K 29.268348116752648 +Na 30.582994978877835 +Mg 29.583484250656554 +F 0 +Ca 25.03184367287004 +Fe 30.088174072928794 +Al 25.40035039536321 +e- 0 diff --git a/elementfiles/element_abundances_542343.4582294149.dat b/elementfiles/element_abundances_542343.4582294149.dat new file mode 100644 index 000000000..e548487ff --- /dev/null +++ b/elementfiles/element_abundances_542343.4582294149.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.400933330121333 +He 0 +N 0 +O 31.962314899318013 +P 0 +S 0 +Si 30.38697012111956 +Ti 25.265912256737337 +V 0 +Cl 0 +K 29.26834837174195 +Na 30.582995233857975 +Mg 29.583484395823696 +F 0 +Ca 25.03184381941987 +Fe 30.08817422056598 +Al 25.400350551666644 +e- 0 diff --git a/elementfiles/element_abundances_548328.6518172416.dat b/elementfiles/element_abundances_548328.6518172416.dat new file mode 100644 index 000000000..b99969e60 --- /dev/null +++ b/elementfiles/element_abundances_548328.6518172416.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.424458278883638 +H 30.398486687276424 +He 0 +N 31.124048207185613 +O 31.746885999577483 +P 0 +S 30.25108833398462 +Si 26.344312590211814 +Ti 20.35678892423963 +V 0 +Cl 0 +K 25.59463706752996 +Na 26.97497248046572 +Mg 25.800558332440225 +F 0 +Ca 20.72001296755279 +Fe 26.576243266278468 +Al 20.690199658792913 +e- 0 diff --git a/elementfiles/element_abundances_552114.6299057301.dat b/elementfiles/element_abundances_552114.6299057301.dat new file mode 100644 index 000000000..082cfbab9 --- /dev/null +++ b/elementfiles/element_abundances_552114.6299057301.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.384272459685317 +He 0 +N 0 +O 31.764065402633978 +P 0 +S 0 +Si 30.929879967723167 +Ti 27.285971443684915 +V 0 +Cl 0 +K 29.574023985615774 +Na 30.804911985501114 +Mg 29.90597459568198 +F 0 +Ca 26.151358104551647 +Fe 30.207859586013118 +Al 27.434994833110956 +e- 0 diff --git a/elementfiles/element_abundances_55375.76850190572.dat b/elementfiles/element_abundances_55375.76850190572.dat new file mode 100644 index 000000000..af10abe7d --- /dev/null +++ b/elementfiles/element_abundances_55375.76850190572.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.726789615913045 +He 0 +N 0 +O 31.577703998917496 +P 0 +S 30.148176920154707 +Si 30.677118275704505 +Ti 26.8135003246571 +V 0 +Cl 0 +K 29.01612684832929 +Na 30.229796043992263 +Mg 29.550276875344238 +F 0 +Ca 25.9061807161333 +Fe 29.743299943252925 +Al 27.27095544519208 +e- 0 diff --git a/elementfiles/element_abundances_558299.6305646282.dat b/elementfiles/element_abundances_558299.6305646282.dat new file mode 100644 index 000000000..e138cf52c --- /dev/null +++ b/elementfiles/element_abundances_558299.6305646282.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.51828031848694 +He 0 +N 0 +O 31.961959836845836 +P 0 +S 0 +Si 30.38679978918256 +Ti 25.26574141814909 +V 0 +Cl 0 +K 29.268177752959872 +Na 30.5828246150998 +Mg 29.58331406342601 +F 0 +Ca 25.03167348341654 +Fe 30.088003881727136 +Al 25.400180190228784 +e- 0 diff --git a/elementfiles/element_abundances_56247.21129754126.dat b/elementfiles/element_abundances_56247.21129754126.dat new file mode 100644 index 000000000..66c697fcc --- /dev/null +++ b/elementfiles/element_abundances_56247.21129754126.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.42209952983379 +H 30.37837180408049 +He 0 +N 31.117582494082644 +O 31.74807331685336 +P 0 +S 30.3185295120199 +Si 26.7125411027337 +Ti 20.855193766056743 +V 0 +Cl 0 +K 25.873029150531956 +Na 27.240928650684246 +Mg 26.12291138727354 +F 0 +Ca 21.1410125382097 +Fe 26.845057810879208 +Al 21.173147883937734 +e- 0 diff --git a/elementfiles/element_abundances_58084.242101351476.dat b/elementfiles/element_abundances_58084.242101351476.dat new file mode 100644 index 000000000..18bd65e95 --- /dev/null +++ b/elementfiles/element_abundances_58084.242101351476.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.605848626890378 +He 0 +N 0 +O 31.664963632402817 +P 0 +S 30.958513366832634 +Si 30.412170707575388 +Ti 26.694800982653078 +V 0 +Cl 0 +K 28.831359067250034 +Na 30.043734814932733 +Mg 29.339944870555883 +F 0 +Ca 25.717581597022026 +Fe 29.54257223285801 +Al 27.085628874169092 +e- 0 diff --git a/elementfiles/element_abundances_581096.8078742871.dat b/elementfiles/element_abundances_581096.8078742871.dat new file mode 100644 index 000000000..e222eaeaa --- /dev/null +++ b/elementfiles/element_abundances_581096.8078742871.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.424599395579655 +H 30.396606780936626 +He 0 +N 31.124368403802332 +O 31.74687889770823 +P 0 +S 30.249452200591012 +Si 26.336908131284115 +Ti 20.353352954786615 +V 0 +Cl 0 +K 25.589957802635166 +Na 26.97029312900377 +Mg 25.793153401978167 +F 0 +Ca 20.712609946102766 +Fe 26.568843178018604 +Al 20.68091333900189 +e- 0 diff --git a/elementfiles/element_abundances_583289.1604737007.dat b/elementfiles/element_abundances_583289.1604737007.dat new file mode 100644 index 000000000..1a1acb5e4 --- /dev/null +++ b/elementfiles/element_abundances_583289.1604737007.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.228007971985654 +He 0 +N 0 +O 31.962690505339033 +P 0 +S 0 +Si 30.387150533416875 +Ti 25.266092772356203 +V 0 +Cl 0 +K 29.26852884253567 +Na 30.583175704646816 +Mg 29.58366480821496 +F 0 +Ca 25.032024232546433 +Fe 30.088354634270793 +Al 25.400530969980103 +e- 0 diff --git a/elementfiles/element_abundances_583303.6592378317.dat b/elementfiles/element_abundances_583303.6592378317.dat new file mode 100644 index 000000000..3d0f0774d --- /dev/null +++ b/elementfiles/element_abundances_583303.6592378317.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.22769430492283 +He 0 +N 0 +O 31.962691017391187 +P 0 +S 0 +Si 30.387151453859314 +Ti 25.266093078801568 +V 0 +Cl 0 +K 29.268529415358245 +Na 30.583176277498364 +Mg 29.583665728099103 +F 0 +Ca 25.032025148060995 +Fe 30.088355546349067 +Al 25.400531854671215 +e- 0 diff --git a/elementfiles/element_abundances_583899.7668332981.dat b/elementfiles/element_abundances_583899.7668332981.dat new file mode 100644 index 000000000..5347465c3 --- /dev/null +++ b/elementfiles/element_abundances_583899.7668332981.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.398345709859385 +He 0 +N 0 +O 31.962321702272355 +P 0 +S 0 +Si 30.38697327821401 +Ti 25.265915518388255 +V 0 +Cl 0 +K 29.268351588031962 +Na 30.58299845014305 +Mg 29.583487553013217 +F 0 +Ca 25.031846977353478 +Fe 30.08817737908475 +Al 25.400353714849146 +e- 0 diff --git a/elementfiles/element_abundances_59577.347751488276.dat b/elementfiles/element_abundances_59577.347751488276.dat new file mode 100644 index 000000000..440cc7dc5 --- /dev/null +++ b/elementfiles/element_abundances_59577.347751488276.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.825265821423308 +He 0 +N 29.66096081960656 +O 31.32441980035136 +P 0 +S 26.629492947896203 +Si 30.969232818993625 +Ti 26.18064200507208 +V 0 +Cl 0 +K 28.777626691678133 +Na 29.99425470629183 +Mg 29.690599124571545 +F 0 +Ca 25.959437701868474 +Fe 29.847802371294943 +Al 27.193138191884106 +e- 0 diff --git a/elementfiles/element_abundances_59648.83128048662.dat b/elementfiles/element_abundances_59648.83128048662.dat new file mode 100644 index 000000000..f55dca209 --- /dev/null +++ b/elementfiles/element_abundances_59648.83128048662.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.771052103465852 +He 0 +N 0 +O 31.505056498329953 +P 0 +S 29.25033577962681 +Si 30.78633107044262 +Ti 26.67558610738421 +V 0 +Cl 0 +K 28.991214616695732 +Na 30.206280839216596 +Mg 29.591336499064965 +F 0 +Ca 25.91395335385991 +Fe 29.770166801943432 +Al 27.25647558208125 +e- 0 diff --git a/elementfiles/element_abundances_59689514.66319433.dat b/elementfiles/element_abundances_59689514.66319433.dat new file mode 100644 index 000000000..3a94b172c --- /dev/null +++ b/elementfiles/element_abundances_59689514.66319433.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 24.310714755648096 +He 0 +N 0 +O 31.9634575052435 +P 0 +S 0 +Si 30.38751838278072 +Ti 25.266460619316597 +V 0 +Cl 0 +K 29.268896690538778 +Na 30.58354355265004 +Mg 29.584032657576618 +F 0 +Ca 25.032392081890983 +Fe 30.088722483601895 +Al 25.400898819204002 +e- 0 diff --git a/elementfiles/element_abundances_59689529.164728574.dat b/elementfiles/element_abundances_59689529.164728574.dat new file mode 100644 index 000000000..2c0a71b06 --- /dev/null +++ b/elementfiles/element_abundances_59689529.164728574.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 24.31024160310054 +He 0 +N 0 +O 31.963457505253587 +P 0 +S 0 +Si 30.38751838278565 +Ti 25.266460619321528 +V 0 +Cl 0 +K 29.268896690543706 +Na 30.583543552654966 +Mg 29.58403265758155 +F 0 +Ca 25.032392081895914 +Fe 30.088722483606823 +Al 25.40089881920893 +e- 0 diff --git a/elementfiles/element_abundances_59731093.43015283.dat b/elementfiles/element_abundances_59731093.43015283.dat new file mode 100644 index 000000000..2516c4a83 --- /dev/null +++ b/elementfiles/element_abundances_59731093.43015283.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 24.311070885807244 +He 0 +N 0 +O 31.963457505235695 +P 0 +S 0 +Si 30.387518382779337 +Ti 25.26646061931521 +V 0 +Cl 0 +K 29.268896690537396 +Na 30.583543552648653 +Mg 29.584032657575236 +F 0 +Ca 25.032392081889604 +Fe 30.08872248360051 +Al 25.400898819202617 +e- 0 diff --git a/elementfiles/element_abundances_59780.86858056806.dat b/elementfiles/element_abundances_59780.86858056806.dat new file mode 100644 index 000000000..5a0f3b473 --- /dev/null +++ b/elementfiles/element_abundances_59780.86858056806.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.854268973864713 +He 0 +N 29.09918989385671 +O 31.258833725351547 +P 0 +S 26.727630691590207 +Si 30.885465068807 +Ti 25.99070542666022 +V 0 +Cl 0 +K 28.83931772550824 +Na 30.073032257037475 +Mg 29.693918831757074 +F 0 +Ca 25.815981122709395 +Fe 29.90444382263386 +Al 26.893947262128414 +e- 0 diff --git a/elementfiles/element_abundances_59781.00861162016.dat b/elementfiles/element_abundances_59781.00861162016.dat new file mode 100644 index 000000000..400d31b32 --- /dev/null +++ b/elementfiles/element_abundances_59781.00861162016.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.85426936407273 +He 0 +N 29.099070132601156 +O 31.258833301085982 +P 0 +S 26.727631224746574 +Si 30.88546463578988 +Ti 25.990704189353416 +V 0 +Cl 0 +K 28.839316750455 +Na 30.073031282538416 +Mg 29.693918376152507 +F 0 +Ca 25.815980643974783 +Fe 29.904443350534425 +Al 26.89394674547956 +e- 0 diff --git a/elementfiles/element_abundances_610808.1629086011.dat b/elementfiles/element_abundances_610808.1629086011.dat new file mode 100644 index 000000000..ab9a3b367 --- /dev/null +++ b/elementfiles/element_abundances_610808.1629086011.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.13853579497713 +He 0 +N 0 +O 31.810911284823664 +P 0 +S 0 +Si 31.007429486986243 +Ti 27.394607864318324 +V 0 +Cl 0 +K 29.667689204178068 +Na 30.898355281597635 +Mg 29.994321280746618 +F 0 +Ca 26.245265347101725 +Fe 30.300479916878437 +Al 27.529929674934746 +e- 0 diff --git a/elementfiles/element_abundances_611156.5562242916.dat b/elementfiles/element_abundances_611156.5562242916.dat new file mode 100644 index 000000000..7a4c945da --- /dev/null +++ b/elementfiles/element_abundances_611156.5562242916.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.12693070744439 +He 0 +N 0 +O 31.81241871873446 +P 0 +S 0 +Si 31.009891282253943 +Ti 27.39824464706403 +V 0 +Cl 0 +K 29.67076058216179 +Na 30.901417921818062 +Mg 29.997201105934305 +F 0 +Ca 26.24835628501171 +Fe 30.30352224497031 +Al 27.533053388163626 +e- 0 diff --git a/elementfiles/element_abundances_62.0.dat b/elementfiles/element_abundances_62.0.dat index 88c452f5c..54b49a78b 100644 --- a/elementfiles/element_abundances_62.0.dat +++ b/elementfiles/element_abundances_62.0.dat @@ -1,20 +1,20 @@ # Abundances determined using atmosphere_builder -C 31.325555721855125 -H 31.50455610635745 +C 30.594956905797158 +H 29.990640710447323 He 0 -N 30.885731460259304 -O 31.52220019336049 +N 31.3946802624198 +O 31.71944206939534 P 0 -S 26.289194601672122 -Si 30.67629723542361 -Ti 25.91475192858422 +S 31.250009097372544 +Si 28.64867773666451 +Ti 24.95196098206094 V 0 Cl 0 -K 28.502794698480184 -Na 29.71938725679771 -Mg 29.399238566502312 +K 27.099554014219457 +Na 28.313901962866588 +Mg 27.586861654124643 F 0 -Ca 25.669257776777563 -Fe 29.556899818582707 -Al 26.90541221561176 +Ca 23.951665107301036 +Fe 27.80167653313135 +Al 25.310278127799116 e- 0 diff --git a/elementfiles/element_abundances_62092.01201704068.dat b/elementfiles/element_abundances_62092.01201704068.dat new file mode 100644 index 000000000..4ab69bb99 --- /dev/null +++ b/elementfiles/element_abundances_62092.01201704068.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.934289192327416 +He 0 +N 0 +O 30.98363720421659 +P 0 +S 27.23099001701174 +Si 30.57021575585126 +Ti 25.46836658997593 +V 0 +Cl 0 +K 28.1212661293877 +Na 29.338318460018098 +Mg 29.278704959892192 +F 0 +Ca 25.537624389728897 +Fe 29.432081785224796 +Al 26.80894493098842 +e- 0 diff --git a/elementfiles/element_abundances_624859.9848631701.dat b/elementfiles/element_abundances_624859.9848631701.dat new file mode 100644 index 000000000..4b74ace47 --- /dev/null +++ b/elementfiles/element_abundances_624859.9848631701.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 29.225878141043722 +He 0 +N 0 +O 31.96269426064495 +P 0 +S 0 +Si 30.387152337030958 +Ti 25.266094575958036 +V 0 +Cl 0 +K 29.268530646142814 +Na 30.58317750825396 +Mg 29.58366661182903 +F 0 +Ca 25.032026036160417 +Fe 30.088356437884705 +Al 25.400532773593472 +e- 0 diff --git a/elementfiles/element_abundances_62523.73937651717.dat b/elementfiles/element_abundances_62523.73937651717.dat new file mode 100644 index 000000000..fd76cd72e --- /dev/null +++ b/elementfiles/element_abundances_62523.73937651717.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 30.99800614147949 +H 31.883862314643093 +He 0 +N 30.353705231513036 +O 30.900338823029184 +P 0 +S 25.714115754290695 +Si 30.46206193520378 +Ti 25.1506545445735 +V 0 +Cl 0 +K 27.464937784636845 +Na 28.683392507537746 +Mg 29.163813868268704 +F 0 +Ca 25.418147001797728 +Fe 29.31524716611269 +Al 27.190049916908457 +e- 0 diff --git a/elementfiles/element_abundances_630676.0383060105.dat b/elementfiles/element_abundances_630676.0383060105.dat new file mode 100644 index 000000000..65e595069 --- /dev/null +++ b/elementfiles/element_abundances_630676.0383060105.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.356128540932765 +He 0 +N 0 +O 31.771262625900192 +P 0 +S 0 +Si 30.942125670131617 +Ti 27.302296296175207 +V 0 +Cl 0 +K 29.588383121296726 +Na 30.819242990774026 +Mg 29.919608404254333 +F 0 +Ca 26.165718595339428 +Fe 30.222051176640353 +Al 27.449508067477275 +e- 0 diff --git a/elementfiles/element_abundances_633525.85756556.dat b/elementfiles/element_abundances_633525.85756556.dat new file mode 100644 index 000000000..ab14135ff --- /dev/null +++ b/elementfiles/element_abundances_633525.85756556.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.424713499591157 +H 30.395077894302332 +He 0 +N 31.12462809484403 +O 31.746872935324895 +P 0 +S 30.24812142721894 +Si 26.341046808875006 +Ti 20.353322677521767 +V 0 +Cl 0 +K 25.591233376807683 +Na 26.971568794138797 +Mg 25.79729257480473 +F 0 +Ca 20.71674711394636 +Fe 26.57297726521253 +Al 20.68702935535111 +e- 0 diff --git a/elementfiles/element_abundances_63639.42912723771.dat b/elementfiles/element_abundances_63639.42912723771.dat new file mode 100644 index 000000000..36815e560 --- /dev/null +++ b/elementfiles/element_abundances_63639.42912723771.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 30.582895056816863 +H 31.801125768028086 +He 0 +N 30.154757349956064 +O 31.359843465956153 +P 0 +S 28.170488129684752 +Si 30.83671320590343 +Ti 26.085134974070588 +V 0 +Cl 0 +K 28.66979191774484 +Na 29.8863712134946 +Mg 29.560258509621082 +F 0 +Ca 25.830728515322 +Fe 29.71809482434136 +Al 27.06790744111408 +e- 0 diff --git a/elementfiles/element_abundances_6470395.5275824815.dat b/elementfiles/element_abundances_6470395.5275824815.dat new file mode 100644 index 000000000..5fc114c5a --- /dev/null +++ b/elementfiles/element_abundances_6470395.5275824815.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.416859336567132 +H 30.488585254855128 +He 0 +N 31.107474983644885 +O 31.74714284373073 +P 0 +S 30.32866389281952 +Si 26.42668332955696 +Ti 20.44066367075133 +V 0 +Cl 0 +K 25.68111943063979 +Na 27.061668472629922 +Mg 25.883703524000637 +F 0 +Ca 20.801468893257464 +Fe 26.6603194880172 +Al 20.768856999035282 +e- 0 diff --git a/elementfiles/element_abundances_648825.4820776657.dat b/elementfiles/element_abundances_648825.4820776657.dat new file mode 100644 index 000000000..3bc2141e9 --- /dev/null +++ b/elementfiles/element_abundances_648825.4820776657.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 28.992660634803084 +He 0 +N 0 +O 31.963011498093085 +P 0 +S 0 +Si 30.387305334768715 +Ti 25.266246911385167 +V 0 +Cl 0 +K 29.268683268907566 +Na 30.583330131049966 +Mg 29.583819608964564 +F 0 +Ca 25.03217902858254 +Fe 30.088509426600154 +Al 25.400685732766753 +e- 0 diff --git a/elementfiles/element_abundances_648839.9808512987.dat b/elementfiles/element_abundances_648839.9808512987.dat new file mode 100644 index 000000000..40fe9c1dc --- /dev/null +++ b/elementfiles/element_abundances_648839.9808512987.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 28.992308367154685 +He 0 +N 0 +O 31.96301186305655 +P 0 +S 0 +Si 30.387305458606882 +Ti 25.26624708185947 +V 0 +Cl 0 +K 29.268683419149195 +Na 30.583330281289392 +Mg 29.583819732845136 +F 0 +Ca 25.032179152795003 +Fe 30.088509551073617 +Al 25.400685859320397 +e- 0 diff --git a/elementfiles/element_abundances_649996.5138713747.dat b/elementfiles/element_abundances_649996.5138713747.dat new file mode 100644 index 000000000..5bb69d39f --- /dev/null +++ b/elementfiles/element_abundances_649996.5138713747.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.78226260060957 +He 0 +N 0 +O 31.493971512919654 +P 0 +S 28.73359057100113 +Si 30.758292228415268 +Ti 26.622085877868564 +V 0 +Cl 0 +K 28.94931757174571 +Na 30.164488240178294 +Mg 29.557781154126946 +F 0 +Ca 25.877342283275546 +Fe 29.73533974572546 +Al 27.216439399665724 +e- 0 diff --git a/elementfiles/element_abundances_656.8139139887417.dat b/elementfiles/element_abundances_656.8139139887417.dat new file mode 100644 index 000000000..982f00c36 --- /dev/null +++ b/elementfiles/element_abundances_656.8139139887417.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 30.64400665565419 +H 29.953281803803765 +He 0 +N 31.467983979875935 +O 31.674079666290112 +P 0 +S 31.25719987084836 +Si 28.080660546677493 +Ti 24.432659774780696 +V 0 +Cl 0 +K 26.75652066368033 +Na 27.990711232830094 +Mg 27.060012068931023 +F 0 +Ca 23.279053186446607 +Fe 27.37663765544019 +Al 24.54690347244651 +e- 0 diff --git a/elementfiles/element_abundances_66247.21692226239.dat b/elementfiles/element_abundances_66247.21692226239.dat new file mode 100644 index 000000000..f7a829269 --- /dev/null +++ b/elementfiles/element_abundances_66247.21692226239.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.421338687670964 +H 30.396363141469475 +He 0 +N 31.11601917536828 +O 31.747964500191873 +P 0 +S 30.319888746927106 +Si 26.668518918226518 +Ti 20.789570742169598 +V 0 +Cl 0 +K 25.843206541413355 +Na 27.213130532422632 +Mg 26.086388836753997 +F 0 +Ca 21.088417114267813 +Fe 26.81719076901902 +Al 21.11035200318714 +e- 0 diff --git a/elementfiles/element_abundances_664521.7253020853.dat b/elementfiles/element_abundances_664521.7253020853.dat new file mode 100644 index 000000000..ecce0deaa --- /dev/null +++ b/elementfiles/element_abundances_664521.7253020853.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.773015362142893 +He 0 +N 0 +O 31.503487723821124 +P 0 +S 28.758314404539746 +Si 30.784795191254343 +Ti 26.673913917679954 +V 0 +Cl 0 +K 28.98960460422277 +Na 30.204671401735652 +Mg 29.589770408569446 +F 0 +Ca 25.912370692081385 +Fe 29.76859380084616 +Al 27.25487509095729 +e- 0 diff --git a/elementfiles/element_abundances_68532.54820602467.dat b/elementfiles/element_abundances_68532.54820602467.dat new file mode 100644 index 000000000..5d6c3e95c --- /dev/null +++ b/elementfiles/element_abundances_68532.54820602467.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 30.146855520639203 +H 31.86254638347009 +He 0 +N 0 +O 31.266317635112756 +P 0 +S 27.934586437491426 +Si 30.77103318456685 +Ti 25.921507017343355 +V 0 +Cl 0 +K 28.5371350136381 +Na 29.753840834546338 +Mg 29.489170589449422 +F 0 +Ca 25.75556586704344 +Fe 29.645428157219797 +Al 26.98578397985498 +e- 0 diff --git a/elementfiles/element_abundances_690396.3337109651.dat b/elementfiles/element_abundances_690396.3337109651.dat new file mode 100644 index 000000000..15c2e618b --- /dev/null +++ b/elementfiles/element_abundances_690396.3337109651.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 28.991344271985618 +He 0 +N 0 +O 31.96301285163249 +P 0 +S 0 +Si 30.38730593286407 +Ti 25.26624755608662 +V 0 +Cl 0 +K 29.268683893389376 +Na 30.583330755529577 +Mg 29.5838202071023 +F 0 +Ca 25.03217962705195 +Fe 30.0885100253304 +Al 25.40068633357584 +e- 0 diff --git a/elementfiles/element_abundances_6944.576627495595.dat b/elementfiles/element_abundances_6944.576627495595.dat new file mode 100644 index 000000000..489388ec9 --- /dev/null +++ b/elementfiles/element_abundances_6944.576627495595.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 30.69083144763952 +H 30.095192621750662 +He 0 +N 31.510018529634692 +O 31.64230961917489 +P 0 +S 31.245387989046023 +Si 27.410603044163146 +Ti 22.706135467645957 +V 0 +Cl 0 +K 26.272827438323915 +Na 27.568486409579876 +Mg 26.52488440766678 +F 0 +Ca 22.134289013126185 +Fe 26.964406497956286 +Al 22.724259717335478 +e- 0 diff --git a/elementfiles/element_abundances_69689514.66319433.dat b/elementfiles/element_abundances_69689514.66319433.dat new file mode 100644 index 000000000..42c5f24ac --- /dev/null +++ b/elementfiles/element_abundances_69689514.66319433.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 24.207628566494886 +He 0 +N 0 +O 31.963457507145066 +P 0 +S 0 +Si 30.387518384373966 +Ti 25.266460620909864 +V 0 +Cl 0 +K 29.268896692132035 +Na 30.583543554243295 +Mg 29.584032659169864 +F 0 +Ca 25.032392083484233 +Fe 30.08872248519514 +Al 25.40089882079725 +e- 0 diff --git a/elementfiles/element_abundances_69689529.16472858.dat b/elementfiles/element_abundances_69689529.16472858.dat new file mode 100644 index 000000000..e32761c3a --- /dev/null +++ b/elementfiles/element_abundances_69689529.16472858.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 24.207153395343354 +He 0 +N 0 +O 31.96345750715307 +P 0 +S 0 +Si 30.38751838437771 +Ti 25.266460620913605 +V 0 +Cl 0 +K 29.26889669213578 +Na 30.58354355424704 +Mg 29.58403265917361 +F 0 +Ca 25.032392083487977 +Fe 30.088722485198886 +Al 25.40089882080099 +e- 0 diff --git a/elementfiles/element_abundances_69731093.43015283.dat b/elementfiles/element_abundances_69731093.43015283.dat new file mode 100644 index 000000000..fdd8e5741 --- /dev/null +++ b/elementfiles/element_abundances_69731093.43015283.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 24.20799618738281 +He 0 +N 0 +O 31.963457507138692 +P 0 +S 0 +Si 30.387518384373063 +Ti 25.266460620908965 +V 0 +Cl 0 +K 29.268896692131136 +Na 30.583543554242397 +Mg 29.584032659168965 +F 0 +Ca 25.03239208348333 +Fe 30.08872248519424 +Al 25.40089882079635 +e- 0 diff --git a/elementfiles/element_abundances_699253.2166432283.dat b/elementfiles/element_abundances_699253.2166432283.dat new file mode 100644 index 000000000..79dee38ba --- /dev/null +++ b/elementfiles/element_abundances_699253.2166432283.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.06480298164282 +H 31.829961789873806 +He 0 +N 30.139439749730933 +O 31.184241457721306 +P 0 +S 25.460209555768937 +Si 30.555650240807392 +Ti 25.253247933543157 +V 0 +Cl 0 +K 27.71501203786509 +Na 28.93290324059148 +Mg 29.258816804919775 +F 0 +Ca 25.51372547324126 +Fe 29.41057860219545 +Al 27.10201987759169 +e- 0 diff --git a/elementfiles/element_abundances_71375.77576202794.dat b/elementfiles/element_abundances_71375.77576202794.dat new file mode 100644 index 000000000..45758c614 --- /dev/null +++ b/elementfiles/element_abundances_71375.77576202794.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.698143242536293 +He 0 +N 0 +O 31.597961179778668 +P 0 +S 30.204505314158602 +Si 30.7499175096286 +Ti 26.89727052742304 +V 0 +Cl 0 +K 29.09490096852481 +Na 30.308487809626182 +Mg 29.626778966937177 +F 0 +Ca 25.984280969269527 +Fe 29.820499174829106 +Al 27.349551700466783 +e- 0 diff --git a/elementfiles/element_abundances_71504.83212265192.dat b/elementfiles/element_abundances_71504.83212265192.dat new file mode 100644 index 000000000..2a667dc50 --- /dev/null +++ b/elementfiles/element_abundances_71504.83212265192.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 3.8507996088795817 +H 31.960941293636793 +He 0 +N 0 +O 30.85510647190554 +P 0 +S 27.734057726942947 +Si 30.082456065761775 +Ti 24.971315969984445 +V 0 +Cl 0 +K 27.62336285657042 +Na 28.840431439239754 +Mg 28.79067867126497 +F 0 +Ca 25.049388669011336 +Fe 28.943974707014462 +Al 26.325255713988476 +e- 0 diff --git a/elementfiles/element_abundances_71505.1231199585.dat b/elementfiles/element_abundances_71505.1231199585.dat new file mode 100644 index 000000000..738a1e946 --- /dev/null +++ b/elementfiles/element_abundances_71505.1231199585.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.960946082928515 +He 0 +N 0 +O 30.855067660935436 +P 0 +S 27.734062912393746 +Si 30.082345386767617 +Ti 24.97119075960738 +V 0 +Cl 0 +K 27.623236102527976 +Na 28.84030471104424 +Mg 28.79056757911435 +F 0 +Ca 25.049277252275118 +Fe 28.94386348961162 +Al 26.325151687234875 +e- 0 diff --git a/elementfiles/element_abundances_71692.01138587252.dat b/elementfiles/element_abundances_71692.01138587252.dat new file mode 100644 index 000000000..8c7835a88 --- /dev/null +++ b/elementfiles/element_abundances_71692.01138587252.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.285604042627863 +He 0 +N 0 +O 31.79176454770843 +P 0 +S 0 +Si 31.040348621171105 +Ti 27.367911589027123 +V 0 +Cl 0 +K 29.484494893002516 +Na 30.6963742317433 +Mg 29.987260689816466 +F 0 +Ca 26.371663857401167 +Fe 30.192933133964843 +Al 27.73937426883271 +e- 0 diff --git a/elementfiles/element_abundances_717412.3370715966.dat b/elementfiles/element_abundances_717412.3370715966.dat new file mode 100644 index 000000000..00331c963 --- /dev/null +++ b/elementfiles/element_abundances_717412.3370715966.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.42478551350458 +H 30.394111134247012 +He 0 +N 31.12479219546367 +O 31.74686923305301 +P 0 +S 30.247279852676524 +Si 26.334315298239204 +Ti 20.350760126267055 +V 0 +Cl 0 +K 25.587364972692544 +Na 26.96770029906105 +Mg 25.79056056893271 +F 0 +Ca 20.7100171130595 +Fe 26.566250344978698 +Al 20.67832050381999 +e- 0 diff --git a/elementfiles/element_abundances_719887.2750361603.dat b/elementfiles/element_abundances_719887.2750361603.dat new file mode 100644 index 000000000..88a924ada --- /dev/null +++ b/elementfiles/element_abundances_719887.2750361603.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.337505013117024 +He 0 +N 0 +O 31.775708992909557 +P 0 +S 0 +Si 30.949595129817354 +Ti 27.312413852398677 +V 0 +Cl 0 +K 29.597224761063096 +Na 30.828066212517093 +Mg 29.927983602095587 +F 0 +Ca 26.17456604981659 +Fe 30.230788982441947 +Al 27.458451747367725 +e- 0 diff --git a/elementfiles/element_abundances_720237.8669689845.dat b/elementfiles/element_abundances_720237.8669689845.dat new file mode 100644 index 000000000..4e25b8f55 --- /dev/null +++ b/elementfiles/element_abundances_720237.8669689845.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.591824897954872 +He 0 +N 0 +O 31.65147243608038 +P 0 +S 30.38857456665343 +Si 30.8550729308949 +Ti 27.054467777145184 +V 0 +Cl 0 +K 29.418173514695262 +Na 30.64995113433144 +Mg 29.784080410196815 +F 0 +Ca 26.002546959358426 +Fe 30.065459188317394 +Al 27.275926361469608 +e- 0 diff --git a/elementfiles/element_abundances_7219.3038213961945.dat b/elementfiles/element_abundances_7219.3038213961945.dat new file mode 100644 index 000000000..f7a76ce49 --- /dev/null +++ b/elementfiles/element_abundances_7219.3038213961945.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.432825479849328 +H 30.013727899272528 +He 0 +N 31.150600230590314 +O 31.746581356695923 +P 0 +S 30.2848724173411 +Si 27.524643176808112 +Ti 22.279156021233256 +V 0 +Cl 0 +K 26.431508804423054 +Na 27.753420957909626 +Mg 26.752155355649567 +F 0 +Ca 22.140641308142982 +Fe 27.284784862731122 +Al 22.446805074807905 +e- 0 diff --git a/elementfiles/element_abundances_72676.51448572124.dat b/elementfiles/element_abundances_72676.51448572124.dat new file mode 100644 index 000000000..411ee1b49 --- /dev/null +++ b/elementfiles/element_abundances_72676.51448572124.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.420910863003968 +He 0 +N 0 +O 31.706549041574455 +P 0 +S 30.342333348882228 +Si 31.035522410339137 +Ti 27.221405601063545 +V 0 +Cl 0 +K 29.59163736445584 +Na 30.823476823159126 +Mg 29.96100919460311 +F 0 +Ca 26.177270413795164 +Fe 30.240721380024937 +Al 27.4493504966524 +e- 0 diff --git a/elementfiles/element_abundances_74084.24979482943.dat b/elementfiles/element_abundances_74084.24979482943.dat new file mode 100644 index 000000000..2de4ed187 --- /dev/null +++ b/elementfiles/element_abundances_74084.24979482943.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.613178205064013 +He 0 +N 0 +O 31.663185149129237 +P 0 +S 30.907093929558666 +Si 30.461207284430053 +Ti 26.743786483838214 +V 0 +Cl 0 +K 28.880367382509494 +Na 30.09274366464439 +Mg 29.3889603380279 +F 0 +Ca 25.766589375367953 +Fe 29.591584254850932 +Al 27.134636706177048 +e- 0 diff --git a/elementfiles/element_abundances_748810.3894409421.dat b/elementfiles/element_abundances_748810.3894409421.dat new file mode 100644 index 000000000..6bc1a9310 --- /dev/null +++ b/elementfiles/element_abundances_748810.3894409421.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.743235103267697 +He 0 +N 0 +O 31.53107305572819 +P 0 +S 29.32750277988879 +Si 30.852751673804622 +Ti 26.802436674230158 +V 0 +Cl 0 +K 29.090453098423424 +Na 30.305246386961585 +Mg 29.67189609258925 +F 0 +Ca 26.002076846003277 +Fe 29.853896763561668 +Al 27.351938586867437 +e- 0 diff --git a/elementfiles/element_abundances_753683.5966440098.dat b/elementfiles/element_abundances_753683.5966440098.dat new file mode 100644 index 000000000..6b3d12a72 --- /dev/null +++ b/elementfiles/element_abundances_753683.5966440098.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 28.695310582996065 +He 0 +N 0 +O 31.96323266342289 +P 0 +S 0 +Si 30.387410985939432 +Ti 25.266352924266286 +V 0 +Cl 0 +K 29.26878912486383 +Na 30.58343598698916 +Mg 29.583925260464174 +F 0 +Ca 25.032284682656304 +Fe 30.088615082698258 +Al 25.400791404998806 +e- 0 diff --git a/elementfiles/element_abundances_753698.0954328458.dat b/elementfiles/element_abundances_753698.0954328458.dat new file mode 100644 index 000000000..9236671df --- /dev/null +++ b/elementfiles/element_abundances_753698.0954328458.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 28.69491252241727 +He 0 +N 0 +O 31.963232869450163 +P 0 +S 0 +Si 30.387411084686114 +Ti 25.266353023014556 +V 0 +Cl 0 +K 29.26878922361141 +Na 30.583436085736743 +Mg 29.58392535921086 +F 0 +Ca 25.032284781402996 +Fe 30.08861518144496 +Al 25.40079150374558 +e- 0 diff --git a/elementfiles/element_abundances_75577.35568386312.dat b/elementfiles/element_abundances_75577.35568386312.dat new file mode 100644 index 000000000..dea45490d --- /dev/null +++ b/elementfiles/element_abundances_75577.35568386312.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.943010095777087 +He 0 +N 29.844833053801718 +O 30.8870822654149 +P 0 +S 26.745452891656285 +Si 30.519390277424293 +Ti 25.353078764250302 +V 0 +Cl 0 +K 27.993494299786835 +Na 29.21067359223858 +Mg 29.22612280725611 +F 0 +Ca 25.48366302482811 +Fe 29.378966116034167 +Al 26.795171076099102 +e- 0 diff --git a/elementfiles/element_abundances_75648.83922429883.dat b/elementfiles/element_abundances_75648.83922429883.dat new file mode 100644 index 000000000..4ed5ed9ac --- /dev/null +++ b/elementfiles/element_abundances_75648.83922429883.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.753296833808985 +He 0 +N 0 +O 31.522060328387866 +P 0 +S 29.295614765702318 +Si 30.83045366041211 +Ti 26.7608636906703 +V 0 +Cl 0 +K 29.057696139622106 +Na 30.27258052578466 +Mg 29.644923903435675 +F 0 +Ca 25.972645782185843 +Fe 29.825890433838826 +Al 27.320291441225827 +e- 0 diff --git a/elementfiles/element_abundances_75780.87654550624.dat b/elementfiles/element_abundances_75780.87654550624.dat new file mode 100644 index 000000000..92084ecd2 --- /dev/null +++ b/elementfiles/element_abundances_75780.87654550624.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.95006894038666 +He 0 +N 29.293224915962913 +O 30.84863607119585 +P 0 +S 26.822091902482384 +Si 30.46096815595809 +Ti 25.218618828944592 +V 0 +Cl 0 +K 28.119140054904694 +Na 29.353153159902792 +Mg 29.262598076646636 +F 0 +Ca 25.377589249924316 +Fe 29.46808895783188 +Al 26.532802599045645 +e- 0 diff --git a/elementfiles/element_abundances_75781.01657658073.dat b/elementfiles/element_abundances_75781.01657658073.dat new file mode 100644 index 000000000..2fc87b638 --- /dev/null +++ b/elementfiles/element_abundances_75781.01657658073.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.950069331748814 +He 0 +N 29.29310490148929 +O 30.8486351172795 +P 0 +S 26.82209256138306 +Si 30.46096694561388 +Ti 25.218616878944445 +V 0 +Cl 0 +K 28.119137962053482 +Na 29.35315106805497 +Mg 29.262596856459652 +F 0 +Ca 25.377588019534546 +Fe 29.46808773038062 +Al 26.53280188801203 +e- 0 diff --git a/elementfiles/element_abundances_76247.22354698408.dat b/elementfiles/element_abundances_76247.22354698408.dat new file mode 100644 index 000000000..8e9befe68 --- /dev/null +++ b/elementfiles/element_abundances_76247.22354698408.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.420739010943507 +H 30.410366775789097 +He 0 +N 31.11483425473442 +O 31.74786160946752 +P 0 +S 30.320677446818316 +Si 26.631571362584346 +Ti 20.730536604887085 +V 0 +Cl 0 +K 25.81761180489417 +Na 27.189371783881807 +Mg 26.056283293216474 +F 0 +Ca 21.043725483441854 +Fe 26.7949564332582 +Al 21.05755150516433 +e- 0 diff --git a/elementfiles/element_abundances_77692.013487392.dat b/elementfiles/element_abundances_77692.013487392.dat new file mode 100644 index 000000000..33ebf4e0c --- /dev/null +++ b/elementfiles/element_abundances_77692.013487392.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.484892163964485 +He 0 +N 0 +O 31.727934663377415 +P 0 +S 30.57326119728654 +Si 30.863016634287487 +Ti 27.154077626340424 +V 0 +Cl 0 +K 29.286873133194355 +Na 30.49915976298815 +Mg 29.79429516513605 +F 0 +Ca 26.173201327911457 +Fe 29.99749182040023 +Al 27.54122920990889 +e- 0 diff --git a/elementfiles/element_abundances_7778514.638007212.dat b/elementfiles/element_abundances_7778514.638007212.dat new file mode 100644 index 000000000..ea6c26086 --- /dev/null +++ b/elementfiles/element_abundances_7778514.638007212.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.43755579289936 +He 0 +N 0 +O 31.748694016755984 +P 0 +S 0 +Si 30.90288146269433 +Ti 27.251112109752242 +V 0 +Cl 0 +K 29.542953664587362 +Na 30.7738950612684 +Mg 29.87632530446087 +F 0 +Ca 26.120311227672293 +Fe 30.177138155204794 +Al 27.403638048285327 +e- 0 diff --git a/elementfiles/element_abundances_795254.4918674373.dat b/elementfiles/element_abundances_795254.4918674373.dat new file mode 100644 index 000000000..ae1000a71 --- /dev/null +++ b/elementfiles/element_abundances_795254.4918674373.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 28.694743934144505 +He 0 +N 0 +O 31.963232977160125 +P 0 +S 0 +Si 30.387410808018107 +Ti 25.266353045215105 +V 0 +Cl 0 +K 29.268789116150465 +Na 30.583435978261694 +Mg 29.583925082814606 +F 0 +Ca 25.032284507133678 +Fe 30.088614908848285 +Al 25.400791244479883 +e- 0 diff --git a/elementfiles/element_abundances_7980098.170844916.dat b/elementfiles/element_abundances_7980098.170844916.dat new file mode 100644 index 000000000..9ad24bebc --- /dev/null +++ b/elementfiles/element_abundances_7980098.170844916.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 25.954560681618194 +He 0 +N 0 +O 31.963457064262492 +P 0 +S 0 +Si 30.3875188441524 +Ti 25.266460465186114 +V 0 +Cl 0 +K 29.268896803438476 +Na 30.583543665578777 +Mg 29.584033118388636 +F 0 +Ca 25.03239253832271 +Fe 30.08872293658891 +Al 25.40089924473672 +e- 0 diff --git a/elementfiles/element_abundances_7980112.670681477.dat b/elementfiles/element_abundances_7980112.670681477.dat new file mode 100644 index 000000000..b2a44e4e3 --- /dev/null +++ b/elementfiles/element_abundances_7980112.670681477.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 25.954106605454932 +He 0 +N 0 +O 31.96345706468919 +P 0 +S 0 +Si 30.38751884435673 +Ti 25.266460465390452 +V 0 +Cl 0 +K 29.26889680364281 +Na 30.583543665783115 +Mg 29.584033118592966 +F 0 +Ca 25.03239253852704 +Fe 30.08872293679324 +Al 25.40089924494105 +e- 0 diff --git a/elementfiles/element_abundances_798448.8152402655.dat b/elementfiles/element_abundances_798448.8152402655.dat new file mode 100644 index 000000000..864ca4991 --- /dev/null +++ b/elementfiles/element_abundances_798448.8152402655.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.3068400318617 +He 0 +N 0 +O 31.78252335226322 +P 0 +S 0 +Si 30.960931682971292 +Ti 27.327997793218024 +V 0 +Cl 0 +K 29.610762522616398 +Na 30.841574172915507 +Mg 29.94078050321584 +F 0 +Ca 26.18812123784656 +Fe 30.244168302639242 +Al 27.472156480728298 +e- 0 diff --git a/elementfiles/element_abundances_79854.52230298946.dat b/elementfiles/element_abundances_79854.52230298946.dat new file mode 100644 index 000000000..8eb3b978c --- /dev/null +++ b/elementfiles/element_abundances_79854.52230298946.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 30.96823348709784 +H 31.862427574479522 +He 0 +N 30.327637002192684 +O 31.061429989203152 +P 0 +S 25.766054853862073 +Si 30.566297338547102 +Ti 25.25473501993281 +V 0 +Cl 0 +K 27.633964513710502 +Na 28.852162883195128 +Mg 29.268743180242502 +F 0 +Ca 25.52329615114617 +Fe 29.42031499158766 +Al 27.216559851492697 +e- 0 diff --git a/elementfiles/element_abundances_8021672.070130903.dat b/elementfiles/element_abundances_8021672.070130903.dat new file mode 100644 index 000000000..729eda89f --- /dev/null +++ b/elementfiles/element_abundances_8021672.070130903.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 25.954861167320296 +He 0 +N 0 +O 31.963457063979668 +P 0 +S 0 +Si 30.38751884401945 +Ti 25.266460465053157 +V 0 +Cl 0 +K 29.268896803305523 +Na 30.583543665445823 +Mg 29.584033118255686 +F 0 +Ca 25.03239253818976 +Fe 30.08872293645596 +Al 25.40089924460377 +e- 0 diff --git a/elementfiles/element_abundances_80555.40737819686.dat b/elementfiles/element_abundances_80555.40737819686.dat new file mode 100644 index 000000000..eda05148e --- /dev/null +++ b/elementfiles/element_abundances_80555.40737819686.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.97976965322963 +He 0 +N 0 +O 30.546474615049203 +P 0 +S 27.27804885328687 +Si 29.947923570150703 +Ti 24.701400453706114 +V 0 +Cl 0 +K 27.289155941942226 +Na 28.506586826968203 +Mg 28.652687306494943 +F 0 +Ca 24.908704050044793 +Fe 28.804929774844634 +Al 26.317873368346035 +e- 0 diff --git a/elementfiles/element_abundances_82246.57929514661.dat b/elementfiles/element_abundances_82246.57929514661.dat new file mode 100644 index 000000000..16e86df2a --- /dev/null +++ b/elementfiles/element_abundances_82246.57929514661.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.84242847337602 +He 0 +N 0 +O 31.3010721830813 +P 0 +S 27.742291040852386 +Si 30.925937000364176 +Ti 26.111927705590325 +V 0 +Cl 0 +K 28.71696086862632 +Na 29.933621618239325 +Mg 29.64590451533113 +F 0 +Ca 25.913688418187654 +Fe 29.802699201252363 +Al 27.145562742507707 +e- 0 diff --git a/elementfiles/element_abundances_82755.31565486285.dat b/elementfiles/element_abundances_82755.31565486285.dat new file mode 100644 index 000000000..2498579d3 --- /dev/null +++ b/elementfiles/element_abundances_82755.31565486285.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 30.53249321535005 +H 31.804000278345402 +He 0 +N 30.103148474513095 +O 31.358834701528135 +P 0 +S 28.17422472146877 +Si 30.84691466591806 +Ti 26.10140342203509 +V 0 +Cl 0 +K 28.683976862225432 +Na 29.90054802746704 +Mg 29.57083399887849 +F 0 +Ca 25.841582635916282 +Fe 29.728778569323318 +Al 27.079414688916508 +e- 0 diff --git a/elementfiles/element_abundances_851630.7042812553.dat b/elementfiles/element_abundances_851630.7042812553.dat new file mode 100644 index 000000000..632d5feb8 --- /dev/null +++ b/elementfiles/element_abundances_851630.7042812553.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.424790416946855 +H 30.394044689637578 +He 0 +N 31.124803430749996 +O 31.746868941157892 +P 0 +S 30.247221998075325 +Si 26.337004845218843 +Ti 20.35143974723383 +V 0 +Cl 0 +K 25.588675452716735 +Na 26.96901082282347 +Mg 25.793250355287235 +F 0 +Ca 20.712705930377098 +Fe 26.568937673377008 +Al 20.681961197591868 +e- 0 diff --git a/elementfiles/element_abundances_86247.23117170643.dat b/elementfiles/element_abundances_86247.23117170643.dat new file mode 100644 index 000000000..b7bef0b86 --- /dev/null +++ b/elementfiles/element_abundances_86247.23117170643.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.42026797386308 +H 30.42138892845798 +He 0 +N 31.113936030644005 +O 31.74776722912051 +P 0 +S 30.321019140897015 +Si 26.600315150453568 +Ti 20.688455845821192 +V 0 +Cl 0 +K 25.796707818199348 +Na 27.169700340754982 +Mg 26.029613116435527 +F 0 +Ca 21.007267927435493 +Fe 26.773587767955938 +Al 21.013964330075353 +e- 0 diff --git a/elementfiles/element_abundances_875688.1658247052.dat b/elementfiles/element_abundances_875688.1658247052.dat new file mode 100644 index 000000000..4dec34730 --- /dev/null +++ b/elementfiles/element_abundances_875688.1658247052.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.8180157502229 +He 0 +N 0 +O 31.45234336477749 +P 0 +S 28.640773020305332 +Si 30.626550221396524 +Ti 26.37357207298337 +V 0 +Cl 0 +K 28.7536247909897 +Na 29.96920659405356 +Mg 29.4038012718115 +F 0 +Ca 25.71040702731584 +Fe 29.57602602364972 +Al 27.031601967623743 +e- 0 diff --git a/elementfiles/element_abundances_87692.02125659335.dat b/elementfiles/element_abundances_87692.02125659335.dat new file mode 100644 index 000000000..7a264d11a --- /dev/null +++ b/elementfiles/element_abundances_87692.02125659335.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.656415407542724 +He 0 +N 0 +O 31.594556661079498 +P 0 +S 29.18006425266956 +Si 31.00193750751541 +Ti 27.041215432030683 +V 0 +Cl 0 +K 29.288211387150923 +Na 30.502524932332303 +Mg 29.84495038371754 +F 0 +Ca 26.187082602464905 +Fe 30.0320259049464 +Al 27.5456168301098 +e- 0 diff --git a/elementfiles/element_abundances_87890.51744911529.dat b/elementfiles/element_abundances_87890.51744911529.dat new file mode 100644 index 000000000..0ec30735e --- /dev/null +++ b/elementfiles/element_abundances_87890.51744911529.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.812104229228375 +He 0 +N 0 +O 31.354825850255043 +P 0 +S 26.919930754896747 +Si 30.999205635873 +Ti 26.259650088443003 +V 0 +Cl 0 +K 28.84016211701411 +Na 30.056725256347317 +Mg 29.723496910829247 +F 0 +Ca 25.994522216769834 +Fe 29.88154901371286 +Al 27.233016369351695 +e- 0 diff --git a/elementfiles/element_abundances_879244.1023115388.dat b/elementfiles/element_abundances_879244.1023115388.dat new file mode 100644 index 000000000..ec3819bd7 --- /dev/null +++ b/elementfiles/element_abundances_879244.1023115388.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 30.88116276556701 +He 0 +N 0 +O 31.83919186019762 +P 0 +S 0 +Si 31.041310997659735 +Ti 27.4320459837947 +V 0 +Cl 0 +K 29.703415994078096 +Na 30.934055542107583 +Mg 30.029470376721417 +F 0 +Ca 26.28105365595497 +Fe 30.33612109941866 +Al 27.5658158650459 +e- 0 diff --git a/elementfiles/element_abundances_879592.4965624362.dat b/elementfiles/element_abundances_879592.4965624362.dat new file mode 100644 index 000000000..bd0ff5ae4 --- /dev/null +++ b/elementfiles/element_abundances_879592.4965624362.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 30.862902973096926 +He 0 +N 0 +O 31.84075813796339 +P 0 +S 0 +Si 31.042642772544724 +Ti 27.432810849863444 +V 0 +Cl 0 +K 29.704453616329594 +Na 30.935097409222866 +Mg 30.030599656017742 +F 0 +Ca 26.282081009810625 +Fe 30.337171902072953 +Al 27.566827882337833 +e- 0 diff --git a/elementfiles/element_abundances_882530.2934266294.dat b/elementfiles/element_abundances_882530.2934266294.dat new file mode 100644 index 000000000..4cc41045e --- /dev/null +++ b/elementfiles/element_abundances_882530.2934266294.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.616069255990187 +He 0 +N 0 +O 31.66899957166509 +P 0 +S 0 +Si 30.64641033307546 +Ti 27.011846919987015 +V 0 +Cl 0 +K 29.504883770501394 +Na 30.755225287838066 +Mg 29.658843984188167 +F 0 +Ca 25.748523535272067 +Fe 30.05061164805111 +Al 26.935314755393932 +e- 0 diff --git a/elementfiles/element_abundances_892530.3816796588.dat b/elementfiles/element_abundances_892530.3816796588.dat new file mode 100644 index 000000000..c6e9533e7 --- /dev/null +++ b/elementfiles/element_abundances_892530.3816796588.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.829122819477114 +He 0 +N 0 +O 31.506130571412545 +P 0 +S 0 +Si 29.22881535684294 +Ti 25.581807536396518 +V 0 +Cl 0 +K 28.081153206822872 +Na 29.33153818550064 +Mg 28.238340890417977 +F 0 +Ca 24.325577375654085 +Fe 28.62765970361973 +Al 25.51108140023677 +e- 0 diff --git a/elementfiles/element_abundances_89955.36735312775.dat b/elementfiles/element_abundances_89955.36735312775.dat new file mode 100644 index 000000000..f3c899039 --- /dev/null +++ b/elementfiles/element_abundances_89955.36735312775.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 30.47895345285278 +H 31.92715929823012 +He 0 +N 0 +O 31.026008870972177 +P 0 +S 27.99937254432919 +Si 30.18073105535794 +Ti 25.09015021651328 +V 0 +Cl 0 +K 27.74374350592373 +Na 28.96077680505561 +Mg 28.889550293550588 +F 0 +Ca 25.148728923313378 +Fe 29.043027042628843 +Al 26.414988875903795 +e- 0 diff --git a/elementfiles/element_abundances_903850.3546642854.dat b/elementfiles/element_abundances_903850.3546642854.dat new file mode 100644 index 000000000..9b3fcf981 --- /dev/null +++ b/elementfiles/element_abundances_903850.3546642854.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.833547972727775 +He 0 +N 0 +O 31.501579631323036 +P 0 +S 0 +Si 28.555934496037136 +Ti 24.943585465889402 +V 0 +Cl 0 +K 27.425345819872426 +Na 28.675606182008973 +Mg 27.57371997149871 +F 0 +Ca 23.667817923276186 +Fe 27.96991641568324 +Al 24.856764029718324 +e- 0 diff --git a/elementfiles/element_abundances_910125.9499942765.dat b/elementfiles/element_abundances_910125.9499942765.dat new file mode 100644 index 000000000..041b30053 --- /dev/null +++ b/elementfiles/element_abundances_910125.9499942765.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.824487871167726 +He 0 +N 0 +O 31.443841696639815 +P 0 +S 28.627012009186462 +Si 30.59544403346973 +Ti 26.319480516477284 +V 0 +Cl 0 +K 28.70982731337216 +Na 29.925478606077437 +Mg 29.368865351903516 +F 0 +Ca 25.67313136473304 +Fe 29.540136760764398 +Al 26.99044201412807 +e- 0 diff --git a/elementfiles/element_abundances_919992.6713570596.dat b/elementfiles/element_abundances_919992.6713570596.dat new file mode 100644 index 000000000..4f29e9005 --- /dev/null +++ b/elementfiles/element_abundances_919992.6713570596.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.83194250529213 +He 0 +N 0 +O 31.50318932587262 +P 0 +S 0 +Si 28.932578567231936 +Ti 25.300565889554377 +V 0 +Cl 0 +K 27.79230889001564 +Na 29.04264132500415 +Mg 27.945616210304202 +F 0 +Ca 24.035799406681114 +Fe 28.33788870796671 +Al 25.22284734993319 +e- 0 diff --git a/elementfiles/element_abundances_92.0.dat b/elementfiles/element_abundances_92.0.dat index add53abc2..721ed5e12 100644 --- a/elementfiles/element_abundances_92.0.dat +++ b/elementfiles/element_abundances_92.0.dat @@ -1,20 +1,20 @@ # Abundances determined using atmosphere_builder -C 31.325082268980058 -H 31.50499787470571 +C 30.605420956629246 +H 29.959582017399228 He 0 -N 30.885364831241596 -O 31.522068211370406 +N 31.416377836853062 +O 31.709426713393416 P 0 -S 26.28967188232741 -Si 30.676808800342766 -Ti 25.915435914068937 +S 31.247653754195163 +Si 28.592997699352658 +Ti 24.90183506692921 V 0 Cl 0 -K 28.503420511946935 -Na 29.720012841796706 -Mg 29.39976046982614 +K 27.055847080934726 +Na 28.271096842426775 +Mg 27.534274580781542 F 0 -Ca 25.669787405555226 -Fe 29.55742472115669 -Al 26.905959041091847 +Ca 23.892913289297894 +Fe 27.75421014622161 +Al 25.24740889665823 e- 0 diff --git a/elementfiles/element_abundances_921456.5799501603.dat b/elementfiles/element_abundances_921456.5799501603.dat new file mode 100644 index 000000000..425ca0617 --- /dev/null +++ b/elementfiles/element_abundances_921456.5799501603.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 28.348254729231606 +He 0 +N 0 +O 31.963356409493453 +P 0 +S 0 +Si 30.38747006888571 +Ti 25.266412202413996 +V 0 +Cl 0 +K 29.268848318325116 +Na 30.583495180441236 +Mg 29.583984343587947 +F 0 +Ca 25.032343767169245 +Fe 30.088674168303665 +Al 25.400850499311126 +e- 0 diff --git a/elementfiles/element_abundances_921471.0787633212.dat b/elementfiles/element_abundances_921471.0787633212.dat new file mode 100644 index 000000000..eb6eed24f --- /dev/null +++ b/elementfiles/element_abundances_921471.0787633212.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 28.347824432957765 +He 0 +N 0 +O 31.963356516709798 +P 0 +S 0 +Si 30.387470006782298 +Ti 25.266412243609558 +V 0 +Cl 0 +K 29.268848314705327 +Na 30.583495176816573 +Mg 29.58398428157846 +F 0 +Ca 25.032343705894903 +Fe 30.088674107607442 +Al 25.400850443222545 +e- 0 diff --git a/elementfiles/element_abundances_92246.58751980454.dat b/elementfiles/element_abundances_92246.58751980454.dat new file mode 100644 index 000000000..9d41f7dbf --- /dev/null +++ b/elementfiles/element_abundances_92246.58751980454.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.893396406047177 +He 0 +N 0 +O 31.16285158529374 +P 0 +S 27.792053692544492 +Si 30.776057295707425 +Ti 25.802716337339405 +V 0 +Cl 0 +K 28.44738542880036 +Na 29.664248682462485 +Mg 29.488811098237818 +F 0 +Ca 25.75106480609439 +Fe 29.643471513568198 +Al 26.986557333280402 +e- 0 diff --git a/elementfiles/element_abundances_923191.004358654.dat b/elementfiles/element_abundances_923191.004358654.dat new file mode 100644 index 000000000..2325c9806 --- /dev/null +++ b/elementfiles/element_abundances_923191.004358654.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.863414640430022 +He 0 +N 0 +O 31.383664939166184 +P 0 +S 29.07732839143318 +Si 30.303385450009984 +Ti 25.887230958814907 +V 0 +Cl 0 +K 28.33925280320216 +Na 29.555263630961345 +Mg 29.05682749932535 +F 0 +Ca 25.348327810605884 +Fe 29.222950769203642 +Al 26.640332721132044 +e- 0 diff --git a/elementfiles/element_abundances_92652.0000851552.dat b/elementfiles/element_abundances_92652.0000851552.dat new file mode 100644 index 000000000..d992e54a2 --- /dev/null +++ b/elementfiles/element_abundances_92652.0000851552.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 30.5440879514586 +H 30.12169905147477 +He 0 +N 31.276246815532843 +O 31.76234725062984 +P 0 +S 31.262817384244016 +Si 28.834823568655676 +Ti 25.11726653922426 +V 0 +Cl 0 +K 27.25390828863371 +Na 28.46628599593896 +Mg 27.762520326508014 +F 0 +Ca 24.14012885554034 +Fe 27.965135053771803 +Al 25.508176325693523 +e- 0 diff --git a/elementfiles/element_abundances_933869.2942179943.dat b/elementfiles/element_abundances_933869.2942179943.dat new file mode 100644 index 000000000..f0e5d7276 --- /dev/null +++ b/elementfiles/element_abundances_933869.2942179943.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.82530603264268 +He 0 +N 0 +O 31.510183389413342 +P 0 +S 0 +Si 29.444861939386584 +Ti 25.789692138891265 +V 0 +Cl 0 +K 28.293172410294034 +Na 29.543585145948914 +Mg 28.452514581297272 +F 0 +Ca 24.53816163281514 +Fe 28.840240179688386 +Al 25.72279007318302 +e- 0 diff --git a/elementfiles/element_abundances_9352713.016022498.dat b/elementfiles/element_abundances_9352713.016022498.dat new file mode 100644 index 000000000..a3a7da079 --- /dev/null +++ b/elementfiles/element_abundances_9352713.016022498.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.410026578145825 +H 30.554112291423298 +He 0 +N 31.09339193873026 +O 31.747241508421315 +P 0 +S 30.386142893399157 +Si 26.49423229221781 +Ti 20.508604441751196 +V 0 +Cl 0 +K 25.74893712737461 +Na 27.129486160885037 +Mg 25.951252440020966 +F 0 +Ca 20.869017997205265 +Fe 26.72786888119276 +Al 20.836220518684897 +e- 0 diff --git a/elementfiles/element_abundances_94265.21122784214.dat b/elementfiles/element_abundances_94265.21122784214.dat new file mode 100644 index 000000000..9d8dcbc5b --- /dev/null +++ b/elementfiles/element_abundances_94265.21122784214.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.956459709536162 +He 0 +N 29.8761842554008 +O 30.770474585860175 +P 0 +S 26.758794094703916 +Si 30.39379068129558 +Ti 25.182904559491185 +V 0 +Cl 0 +K 27.80183145311201 +Na 29.019129334703706 +Mg 29.09941308309685 +F 0 +Ca 25.35608758246942 +Fe 29.251917872625622 +Al 26.712016388647292 +e- 0 diff --git a/elementfiles/element_abundances_943869.3876049237.dat b/elementfiles/element_abundances_943869.3876049237.dat new file mode 100644 index 000000000..9f4d97226 --- /dev/null +++ b/elementfiles/element_abundances_943869.3876049237.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.803774835078826 +He 0 +N 0 +O 31.53262193608443 +P 0 +S 0 +Si 29.92804081099046 +Ti 26.27026789158043 +V 0 +Cl 0 +K 28.775066288632114 +Na 30.02548775501329 +Mg 28.935101815730718 +F 0 +Ca 25.020244131055826 +Fe 29.322321474311092 +Al 26.204588088454614 +e- 0 diff --git a/elementfiles/element_abundances_94856.04204838244.dat b/elementfiles/element_abundances_94856.04204838244.dat new file mode 100644 index 000000000..a0da078fe --- /dev/null +++ b/elementfiles/element_abundances_94856.04204838244.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 0 +He 0 +N 0 +O 31.7709988165259 +P 0 +S 25.673964230877164 +Si 31.359179053036843 +Ti 27.42940416898002 +V 0 +Cl 0 +K 29.855417452923106 +Na 31.087711663031925 +Mg 30.257691131074818 +F 0 +Ca 26.456040292700813 +Fe 30.523944125861043 +Al 27.714304661736904 +e- 0 diff --git a/elementfiles/element_abundances_94856.17690142244.dat b/elementfiles/element_abundances_94856.17690142244.dat new file mode 100644 index 000000000..88266ea6f --- /dev/null +++ b/elementfiles/element_abundances_94856.17690142244.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 0 +He 0 +N 0 +O 31.77099881652495 +P 0 +S 25.673965081676663 +Si 31.359179053037458 +Ti 27.429404168979474 +V 0 +Cl 0 +K 29.85541745292312 +Na 31.087711663031943 +Mg 30.25769113107519 +F 0 +Ca 26.456040292701015 +Fe 30.523944125861288 +Al 27.714304661736943 +e- 0 diff --git a/elementfiles/element_abundances_953869.4819918624.dat b/elementfiles/element_abundances_953869.4819918624.dat new file mode 100644 index 000000000..b9e6c255a --- /dev/null +++ b/elementfiles/element_abundances_953869.4819918624.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.74417745600881 +He 0 +N 0 +O 31.586268411856228 +P 0 +S 0 +Si 30.34414711215916 +Ti 26.696870646053206 +V 0 +Cl 0 +K 29.19635244416568 +Na 30.44673834576098 +Mg 29.353610568531344 +F 0 +Ca 25.440794574477493 +Fe 29.742876777821838 +Al 26.626270175411733 +e- 0 diff --git a/elementfiles/element_abundances_954169.3398090069.dat b/elementfiles/element_abundances_954169.3398090069.dat new file mode 100644 index 000000000..a1bef58b1 --- /dev/null +++ b/elementfiles/element_abundances_954169.3398090069.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.80399018622971 +He 0 +N 0 +O 31.503190298809482 +P 0 +S 0 +Si 30.152550333261402 +Ti 26.22610438822772 +V 0 +Cl 0 +K 29.103408860312115 +Na 30.37424379329474 +Mg 29.183594874681393 +F 0 +Ca 25.05191154589556 +Fe 29.599945538499032 +Al 26.062366890377447 +e- 0 diff --git a/elementfiles/element_abundances_96247.23979642955.dat b/elementfiles/element_abundances_96247.23979642955.dat new file mode 100644 index 000000000..768be8508 --- /dev/null +++ b/elementfiles/element_abundances_96247.23979642955.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.419899199532534 +H 30.43015712844235 +He 0 +N 31.113256844006592 +O 31.74768185624889 +P 0 +S 30.321011701323467 +Si 26.569246750330713 +Ti 20.646397661248827 +V 0 +Cl 0 +K 25.775983729099945 +Na 27.150216355942643 +Mg 26.003140422672345 +F 0 +Ca 20.97095329480629 +Fe 26.75245593705359 +Al 20.970555192242465 +e- 0 diff --git a/elementfiles/element_abundances_963027.5449177927.dat b/elementfiles/element_abundances_963027.5449177927.dat new file mode 100644 index 000000000..d04bf7fc0 --- /dev/null +++ b/elementfiles/element_abundances_963027.5449177927.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 28.348210907473362 +He 0 +N 0 +O 31.963356406275604 +P 0 +S 0 +Si 30.387470282174675 +Ti 25.266412220133425 +V 0 +Cl 0 +K 29.268848420890667 +Na 30.583495283016013 +Mg 29.583984556699086 +F 0 +Ca 25.03234397888859 +Fe 30.088674378928488 +Al 25.40085070121261 +e- 0 diff --git a/elementfiles/element_abundances_964169.4352259409.dat b/elementfiles/element_abundances_964169.4352259409.dat new file mode 100644 index 000000000..af81fe429 --- /dev/null +++ b/elementfiles/element_abundances_964169.4352259409.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.743782372739773 +He 0 +N 0 +O 31.509920474169043 +P 0 +S 0 +Si 30.58941460341975 +Ti 26.662968737695905 +V 0 +Cl 0 +K 29.540273169770455 +Na 30.811108102690074 +Mg 29.62045915117326 +F 0 +Ca 25.488775832992822 +Fe 30.036809828001598 +Al 26.499231198295757 +e- 0 diff --git a/elementfiles/element_abundances_96975.78737822351.dat b/elementfiles/element_abundances_96975.78737822351.dat new file mode 100644 index 000000000..c806ac727 --- /dev/null +++ b/elementfiles/element_abundances_96975.78737822351.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.64707072078781 +He 0 +N 0 +O 31.628859372657054 +P 0 +S 30.274288012307174 +Si 30.849736852075686 +Ti 27.00666442928067 +V 0 +Cl 0 +K 29.19993863628671 +Na 30.41345186019892 +Mg 29.729880683842246 +F 0 +Ca 26.08878317561769 +Fe 29.924212993434505 +Al 27.454452431697685 +e- 0 diff --git a/elementfiles/element_abundances_974169.5316428844.dat b/elementfiles/element_abundances_974169.5316428844.dat new file mode 100644 index 000000000..5a22b119e --- /dev/null +++ b/elementfiles/element_abundances_974169.5316428844.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.678534757814514 +He 0 +N 0 +O 31.523728225550805 +P 0 +S 0 +Si 30.779088571028282 +Ti 26.85264267414224 +V 0 +Cl 0 +K 29.729947121937343 +Na 31.000782054881718 +Mg 29.810133116293244 +F 0 +Ca 25.67844979394576 +Fe 30.226483788009453 +Al 26.68890515106775 +e- 0 diff --git a/elementfiles/element_abundances_974709.2668392234.dat b/elementfiles/element_abundances_974709.2668392234.dat new file mode 100644 index 000000000..17b1869de --- /dev/null +++ b/elementfiles/element_abundances_974709.2668392234.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.715801103093543 +He 0 +N 0 +O 31.43262088541276 +P 0 +S 0 +Si 30.844840073656645 +Ti 26.245873990244533 +V 0 +Cl 0 +K 29.716117162459273 +Na 31.008122415960994 +Mg 29.943574531504954 +F 0 +Ca 25.58581383102652 +Fe 30.37339548999492 +Al 26.233133871571795 +e- 0 diff --git a/elementfiles/element_abundances_97890.52623816703.dat b/elementfiles/element_abundances_97890.52623816703.dat new file mode 100644 index 000000000..e85e31809 --- /dev/null +++ b/elementfiles/element_abundances_97890.52623816703.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.889738218758986 +He 0 +N 0 +O 31.165804378767803 +P 0 +S 26.996790458530295 +Si 30.809428327591064 +Ti 25.82349308321275 +V 0 +Cl 0 +K 28.470211160813687 +Na 29.68709109537702 +Mg 29.521710965840434 +F 0 +Ca 25.78359833709887 +Fe 29.67623037261206 +Al 27.020895691097593 +e- 0 diff --git a/elementfiles/element_abundances_979.9322358832528.dat b/elementfiles/element_abundances_979.9322358832528.dat new file mode 100644 index 000000000..acc22f4b2 --- /dev/null +++ b/elementfiles/element_abundances_979.9322358832528.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 31.436021871643817 +H 29.715908616256225 +He 0 +N 31.177008059333655 +O 31.740950684175743 +P 0 +S 30.31457422709714 +Si 27.79348112215606 +Ti 24.214286143486262 +V 0 +Cl 0 +K 26.74834913818546 +Na 28.00461753887724 +Mg 26.831681786642704 +F 0 +Ca 22.881344809306988 +Fe 27.261678172687773 +Al 24.041439158839715 +e- 0 diff --git a/elementfiles/element_abundances_984709.3643101502.dat b/elementfiles/element_abundances_984709.3643101502.dat new file mode 100644 index 000000000..2d4684e01 --- /dev/null +++ b/elementfiles/element_abundances_984709.3643101502.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.663318874205274 +He 0 +N 0 +O 31.405125128663077 +P 0 +S 0 +Si 30.978942819671026 +Ti 26.37997671852615 +V 0 +Cl 0 +K 29.85021989917485 +Na 31.14222515267835 +Mg 30.07767727736301 +F 0 +Ca 25.719916576363197 +Fe 30.507498235064514 +Al 26.367236611854317 +e- 0 diff --git a/elementfiles/element_abundances_988323.5072448484.dat b/elementfiles/element_abundances_988323.5072448484.dat new file mode 100644 index 000000000..e8ed4337e --- /dev/null +++ b/elementfiles/element_abundances_988323.5072448484.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.145902686352816 +He 0 +N 0 +O 31.809929143712797 +P 0 +S 0 +Si 31.005825880425007 +Ti 27.392244418309435 +V 0 +Cl 0 +K 29.665691412799724 +Na 30.89636312678554 +Mg 29.9924477309311 +F 0 +Ca 26.243255308399387 +Fe 30.298501315144133 +Al 27.527898210105285 +e- 0 diff --git a/elementfiles/element_abundances_994709.4627810866.dat b/elementfiles/element_abundances_994709.4627810866.dat new file mode 100644 index 000000000..f33f943fa --- /dev/null +++ b/elementfiles/element_abundances_994709.4627810866.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.614043456871723 +He 0 +N 0 +O 31.382174361705207 +P 0 +S 0 +Si 31.06497214176763 +Ti 26.46600603489577 +V 0 +Cl 0 +K 29.936249218268305 +Na 31.22825447177238 +Mg 30.163706599409124 +F 0 +Ca 25.805945898240928 +Fe 30.59352755685599 +Al 26.453265932099757 +e- 0 diff --git a/elementfiles/element_abundances_99684.26210439416.dat b/elementfiles/element_abundances_99684.26210439416.dat new file mode 100644 index 000000000..089fe16a2 --- /dev/null +++ b/elementfiles/element_abundances_99684.26210439416.dat @@ -0,0 +1,20 @@ +# Abundances determined using atmosphere_builder +C 0 +H 31.626480051681906 +He 0 +N 0 +O 31.660113381987063 +P 0 +S 30.780260148782396 +Si 30.549735298545055 +Ti 26.831588254347707 +V 0 +Cl 0 +K 28.968493570550375 +Na 30.18087744500166 +Mg 29.47718835596049 +F 0 +Ca 25.854708064082214 +Fe 29.679763286263082 +Al 27.222756074179134 +e- 0 diff --git a/input/run_silicates.toml b/input/run_silicates.toml index 823e88a47..85ab86590 100644 --- a/input/run_silicates.toml +++ b/input/run_silicates.toml @@ -31,7 +31,7 @@ version = "2.0" [params] # output files [params.out] - path = "gridrun_-3IW_0.01AU_1Hocean_1CH_True" + path = "extended_atmo_5IW_0.1AU_4Hocean_0.1CH_True" logging = "INFO" plot_mod = 3 # Plotting frequency, 0: wait until completion | n: every n iterations | none: do not plot plot_fmt = "png" # Plotting image file format, "png" or "pdf" recommended @@ -88,7 +88,7 @@ version = "2.0" [params.stop.escape] enabled = true - p_stop = 1.0 # Stop surface pressure is less than this value + p_stop = 0.1 # Stop surface pressure is less than this value # disintegration [params.stop.disint] @@ -128,7 +128,7 @@ version = "2.0" [orbit] instellation_method = 'sma' # whether to define orbit using semi major axis ('sma') or instellation flux ('inst') instellationflux = 1.0 # instellation flux received from the planet in [Earth units] - semimajoraxis = 0.01 # initial semi-major axis of planet's orbit [AU] + semimajoraxis = 0.1 # initial semi-major axis of planet's orbit [AU] eccentricity = 0.0 # initial eccentricity of planet's orbit [dimensionless] zenith_angle = 48.19 # characteristic zenith angle [degrees] s0_factor = 0.375 # instellation scale factor [dimensionless] @@ -195,7 +195,7 @@ version = "2.0" [atmos_clim.agni] verbosity = 1 # output verbosity for agni (0:none, 1:info, 2:debug) - p_top = 1.0e-5 # bar, top of atmosphere grid pressure + p_top = 1.0e-8 # bar, top of atmosphere grid pressure p_obs = 0.02 # bar, level probed in transmission spectral_group = "Honeyside" # which gas opacities to include spectral_bands = "48" # how many spectral bands? @@ -318,7 +318,7 @@ version = "2.0" # Outgassing - physics table [outgas] - fO2_shift_IW = -3.0 # atmosphere/interior boundary oxidation state [log10(ΔIW)] + fO2_shift_IW = 5.0 # atmosphere/interior boundary oxidation state [log10(ΔIW)] silicates = true fastchempath = '/data3/leoni/LavAtmos/FastChem/fastchem3/' @@ -367,11 +367,11 @@ version = "2.0" use_metallicity = false # whether or not to specify the elemental abundances in terms of solar metallicity metallicity = 1000 # metallicity relative to solar metallicity - H_oceans = 1.0 # Hydrogen inventory in units of equivalent Earth oceans + H_oceans = 4.0 # Hydrogen inventory in units of equivalent Earth oceans # H_ppmw = 109.0 # Hydrogen inventory in ppmw relative to mantle mass # H_kg = 1e20 # Hydrogen inventory in kg - CH_ratio = 1.0 # C/H mass ratio in mantle/atmosphere system + CH_ratio = 0.1 # C/H mass ratio in mantle/atmosphere system # C_ppmw = 0.0 # Carbon inventory in ppmw relative to mantle mass # C_kg = 1e20 # Carbon inventory in kg diff --git a/run_PROTEUS.bash b/run_PROTEUS.bash index 220ff340d..9336fe931 100644 --- a/run_PROTEUS.bash +++ b/run_PROTEUS.bash @@ -1,10 +1,10 @@ #bash script to run multiple proteus runs one after other MIXFILE=vertical_mix -orb_dist=("0.01") -fO2=("-3") -Hoceans=("1") +orb_dist=("0.01" "0.1" "1") +fO2=("5" "-5" "1" "-1") +Hoceans=("4") silicates=("true") -CHratio=("1") +CHratio=("0.1") input_file=input/run_silicates.toml # make directories for each composition and make fastchem grids for all compositions that don't have grids yet diff --git a/tools_leoni/config_ARCiS.py b/tools_leoni/config_ARCiS.py new file mode 100644 index 000000000..c7456de9c --- /dev/null +++ b/tools_leoni/config_ARCiS.py @@ -0,0 +1,213 @@ +from __future__ import annotations + +import glob +import logging +import os +import sys +from typing import TYPE_CHECKING + +import pandas as pd + +from proteus.outgas.lavatmos import species_lib +from proteus.utils.constants import element_list + +if TYPE_CHECKING: + pass + +log = logging.getLogger('fwl.' + __name__) + +GASES_STANDARD = ( + 'CO', + 'H2O', + 'N2', + 'O2', + 'O3', + 'OH', + 'H', + 'SO', + 'CH4', + 'CO2', + 'H2', + 'H2S', + 'HCN', + 'NH3', + 'SO2', + 'Al', + 'HAlO2', + 'N2O', + 'NO', + 'NO2', + 'HNO3', + 'PH3', + 'N', + 'O', + 'S', +) + +REFRACTORY_GASES = ( + 'Fe', + 'Si', + 'Ti', + 'K', + 'Mg', + 'SiO', + 'SiO2', + 'TiO', + 'FeO', + 'MgO', + 'Na', + 'TiO2', + 'SiH', + 'SiH4', +) + +GASES_ARCiS=('CO', + 'H2O', + 'N2', + 'O2', + 'CH4', + 'CO2', + 'H2', + 'H2S', + 'SO2', + 'NH3', + 'HCN', + 'N2O', + 'O3',) + + + + +def get_element_abun(model,time): + + df=pd.read_csv('/data3/leoni/PROTEUS/output/%s/runtime_helpfile.csv'%model,sep='\t') + print(df) + hf_row = df.loc[(df["Time"] - time).abs().idxmin()] + molfracs={} + + nfrac={'H': 0.0,'He':0.0,'C': 0.0,'N':0.0, + 'O': 0.0,'Na':0.0,'Mg': 0.0,'Si':0.0, + 'Fe': 0.0,'Al':0.0,'Ca': 0.0,'Ti':0.0, + 'S': 0.0,'Cl':0.0,'K': 0.0,'F':0.0,'P': 0.0,'V':0.0} + + total_mols=0.0 + for e in element_list: + molfracs[e]= hf_row[e + '_kg_atm']/species_lib[e].weight + total_mols+= molfracs[e] + for e in element_list: + nfrac[e]= molfracs[e]/total_mols + + element_folder='/data3/leoni/evolution_project/elements_ARCiS/{}/{}/'.format(model,time) + + print(element_folder) + os.makedirs(element_folder, exist_ok=True) + with open(element_folder+'elements.dat', "w") as f: + for key in nfrac: + f.write(f"{key} {float(nfrac[key]):.3E} \n") + print('elements in ARCiS format written to {}elements.dat'.format(element_folder)) + + + +def config_ARCiS(input_file, tp_file_path, vmr_file_path, elementfile, species, mixratfile=False, mixrat_file_path='mixingratios.dat'): + + '''function which modifies the ARCiS input file by updating the elementfile from which the abundances are read + Input Tsurf is not mandatory since then ARCiS will converge to s surface temperature itself''' + + + vmrs=pd.read_csv(vmr_file_path,sep='\t').iloc[0] + + tp=pd.read_csv(tp_file_path,sep='\t') + Psurf=tp['Pbar'][0] + print(tp_file_path) + print('surface temperature output by PROTEUS:',tp['temperature[K]'][0]) + Tsurface=tp['temperature[K]'][0] + + output_lines = [] + + with open(input_file, "r") as f: + for line in f: + stripped_line = line.strip() + key = stripped_line.split("=")[0] + replaced = False + + if key in species: + output_lines.append(f"{key}={vmrs[key]}\n") + replaced=True + + if replaced: + continue + + if key=="TPfile": + if mixratfile: + output_lines.append(f"TPfile={mixrat_file_path}\n") + else: + output_lines.append(f"TPfile={tp_file_path}\n") + + elif key=="elementfile": + output_lines.append(f"elementfile={elementfile}\n") + + elif key=="pmax": + output_lines.append("pmax="+str(Psurf)+"d0\n") + + elif key=="Pp": + output_lines.append("Pp="+str(Psurf)+"d0\n") + + elif key=="Tsurface": + output_lines.append("Tsurface="+str(Tsurface)+"d0\n") + + else: + output_lines.append(line) + + # Write the updated lines back to the file + with open(input_file, "w") as f: + f.writelines(output_lines) + +def read_tps(runname: str): + + '''reads in TP files of tPs folder and times''' + + output_dir='/data3/leoni/evolution_project/TPss/{}/'.format(runname) + tpfiles= [f for f in glob.glob(output_dir + "*.dat")] + times=[] + for filename in tpfiles: + time = filename.split('_')[2] + times.append(time) + return times,tpfiles + +def read_vmrs(runname: str, mixratfile: bool): + + '''reads in VMRS files of VMRs folder''' + + output_dir='/data3/leoni/evolution_project/VMRs/{}/'.format(runname) + files = [f for f in glob.glob(output_dir+'vmrs_time_*.dat')] + if mixratfile: + mixratfiles = [f for f in glob.glob(output_dir + 'mixingratios_time_*.dat')] + return files,mixratfiles + else: + return files + +if __name__ == "__main__": + + input_path='/data3/leoni/ARCiS/' + runname=sys.argv[1] + time=int(sys.argv[2]) + mixratfile = sys.argv[3].lower() == "true" + input_file = sys.argv[4] + + times,tppaths=read_tps(runname) + + if mixratfile: + vmrpaths,mixratpaths = read_vmrs(runname, mixratfile=True) + mixrat_file_path = next(vmr for vmr in mixratpaths if vmr.endswith("_{}.dat".format(time))) + else: + vmrpaths = read_vmrs(runname, mixratfile=False) + mixrat_file_path='mixingratios.dat' + + tp_file_path = next(t for t in tppaths if t.endswith("_{}.dat".format(time))) + vmr_file_path = next(vmr for vmr in vmrpaths if vmr.endswith("_{}.dat".format(time))) + + species=list(GASES_ARCiS) + + elementpath='/data3/leoni/evolution_project/elements_ARCiS/{}/{}/elements.dat'.format(runname,time) + get_element_abun(runname,time) + config_ARCiS(input_path+input_file, tp_file_path, vmr_file_path, elementpath, species,mixratfile=mixratfile,mixrat_file_path=mixrat_file_path) diff --git a/tools_leoni/convert_to_ARCiSformat.py b/tools_leoni/convert_to_ARCiSformat.py index 0db922ef0..81d46e1ea 100644 --- a/tools_leoni/convert_to_ARCiSformat.py +++ b/tools_leoni/convert_to_ARCiSformat.py @@ -84,6 +84,7 @@ def get_element_abun(model,time): df=pd.read_csv('/data3/leoni/PROTEUS/output/%s/runtime_helpfile.csv'%model,sep='\t') + print(df) hf_row = df.loc[(df["Time"] - time).abs().idxmin()] molfracs={} @@ -101,6 +102,7 @@ def get_element_abun(model,time): element_folder='/data3/leoni/evolution_project/elements_ARCiS/{}/{}/'.format(model,time) + print(element_folder) os.makedirs(element_folder, exist_ok=True) with open(element_folder+'elements.dat', "w") as f: for key in nfrac: @@ -208,6 +210,7 @@ def get_tps(runname: str, nsamp: int): #check if output directory exists os.makedirs(output_dir, exist_ok=True) + print(input_dir) if nsamp>1: plot_times, sample_times, files = sample_output(input_dir, nsamp=nsamp) else: @@ -222,20 +225,23 @@ def get_tps(runname: str, nsamp: int): df[::-1].to_csv(fpath,sep='\t',index=False) paths.append(fpath) - return sample_times,paths + return sample_times, paths -def config_ARCiS(input_file, tp_file_path, vmr_file_path, elementfile, species,mixratfile=False, mixrat_file_path='mixingratios.dat'): +def config_ARCiS(input_file, tp_file_path, vmr_file_path, elementfile, species, mixratfile=False, mixrat_file_path='mixingratios.dat'): '''function which modifies the ARCiS input file by updating the elementfile from which the abundances are read Input Tsurf is not mandatory since then ARCiS will converge to s surface temperature itself''' + print(input_file) vmrs=pd.read_csv(vmr_file_path,sep='\t').iloc[0] tp=pd.read_csv(tp_file_path,sep='\t') Psurf=tp['Pbar'][0] + print(tp_file_path) + print('surface temperature output by PROTEUS:',tp['temperature[K]'][0]) Tsurface=tp['temperature[K]'][0] output_lines = [] @@ -282,29 +288,7 @@ def config_ARCiS(input_file, tp_file_path, vmr_file_path, elementfile, species,m if __name__ == "__main__": runname=sys.argv[1] nsamp=int(sys.argv[2]) - time=int(sys.argv[3]) - mixratfile=bool(sys.argv[4]) + vmrpaths,mixratpaths=get_chem_atmosphere(runname,nsamp) sample_times,tppaths=get_tps(runname,nsamp) - - tp_file_path = next(t for t in tppaths if t.endswith("_{}.dat".format(time))) - vmr_file_path = next(vmr for vmr in vmrpaths if vmr.endswith("_{}.dat".format(time))) - - if mixratfile: - mixrat_file_path = next(vmr for vmr in mixratpaths if vmr.endswith("_{}.dat".format(time))) - else: - mixrat_file_path='mixingratios.dat' - #time=sample_times[sample-1] - #vmr_file_path=vmrpaths[sample-1] - - species=list(GASES_ARCiS) - - if mixratfile: - input_file='/data3/leoni/ARCiS/input_PROTEUS_mixratfile.dat' - else: - input_file='/data3/leoni/ARCiS/input_PROTEUS.dat' - - elementpath='/data3/leoni/evolution_project/elements_ARCiS/{}/{}/elements.dat'.format(runname,time) - get_element_abun(runname,time) - config_ARCiS(input_file, tp_file_path, vmr_file_path, elementpath,species,mixratfile=mixratfile,mixrat_file_path=mixrat_file_path) diff --git a/tools_leoni/edit_input_file.py b/tools_leoni/edit_input_file.py index c61437be9..b942843d2 100644 --- a/tools_leoni/edit_input_file.py +++ b/tools_leoni/edit_input_file.py @@ -12,7 +12,7 @@ def param_edit(inputfile,fO2,orbdist,Hocean,CHratio,silicates:bool): data = parse(f.read()) #modify lines in input file - data["params"]["out"]["path"] = 'gridrun_{}IW_{}AU_{}Hocean_{}CH_{}'.format(fO2,orbdist,Hocean,CHratio,silicates) + data["params"]["out"]["path"] = 'extended_atmo_{}IW_{}AU_{}Hocean_{}CH_{}'.format(fO2,orbdist,Hocean,CHratio,silicates) data["orbit"]["semimajoraxis"] = float(orbdist) data["outgas"]["fO2_shift_IW"] = float(fO2) data["outgas"]["silicates"] = silicates