def test_pressure_floats(): ptop = 1e-8 pbottom = 1e3 nlayers = 15 units = "bar" pressure = pa.pressure(ptop, pbottom, nlayers, units) np.testing.assert_allclose(pressure, expected_pressure)
def test_read_write_atm_ptqr(tmpdir): atmfile = "WASP-00b.atm" atm = "{}/{}".format(tmpdir, atmfile) nlayers = 11 pressure = pa.pressure('1e-8 bar', '1e2 bar', nlayers) temperature = pa.tmodels.Isothermal(nlayers)(1500.0) species = ["H2", "He", "H2O", "CO", "CO2", "CH4"] abundances = [0.8496, 0.15, 1e-4, 1e-4, 1e-8, 1e-4] qprofiles = pa.uniform(pressure, temperature, species, abundances) radius = pa.hydro_g(pressure, temperature, 2.3, 2479.0, pc.bar, pc.rjup) io.write_atm(atm, pressure, temperature, species, qprofiles, radius=radius, punits='bar', runits='km', header='# Test write atm\n') assert atmfile in os.listdir(str(tmpdir)) atm_input = io.read_atm(atm) assert atm_input[0] == ('bar', 'kelvin', 'volume', 'km') np.testing.assert_equal(atm_input[1], np.array(species)) np.testing.assert_allclose(atm_input[2], pressure / pc.bar) np.testing.assert_allclose(atm_input[3], temperature) np.testing.assert_allclose(atm_input[4], qprofiles) np.testing.assert_allclose(atm_input[5], radius / pc.km, rtol=1e-5)
def test_qcapcheck(qcap, qcap_result): nlayers = 11 pressure = pa.pressure(1e-8, 1e2, nlayers, units='bar') temperature = np.tile(1500.0, nlayers) species = ["H2", "He", "H2O"] abundances = [0.8495, 0.15, 5e-4] qprofiles = pa.uniform(pressure, temperature, species, abundances) ibulk = [0, 1] assert pa.qcapcheck(qprofiles, qcap, ibulk) == qcap_result
def test_ideal_gas_density(): nlayers = 11 pressure = pa.pressure(1e-8, 1e2, nlayers, units='bar') temperature = np.tile(1500.0, nlayers) species = ["H2", "He", "H2O", "CO", "CO2", "CH4"] abundances = [0.8496, 0.15, 1e-4, 1e-4, 1e-8, 1e-4] qprofiles = pa.uniform(pressure, temperature, species, abundances) dens = pa.ideal_gas_density(qprofiles, pressure, temperature) for i, density in enumerate(dens): np.testing.assert_allclose(density, expected_dens * 10**i, rtol=1e-7)
def test_uniform(): nlayers = 11 pressure = pa.pressure(1e-8, 1e2, nlayers, units='bar') temperature = np.tile(1500.0, nlayers) species = ["H2", "He", "H2O", "CO", "CO2", "CH4"] abundances = [0.8496, 0.15, 1e-4, 1e-4, 1e-8, 1e-4] qprofiles = pa.uniform(pressure, temperature, species, abundances) assert np.shape(qprofiles) == (nlayers, len(species)) for q in qprofiles: np.testing.assert_equal(q, np.array(abundances))
def test_hydro_m(): nlayers = 11 pressure = pa.pressure(1e-8, 1e2, nlayers, units='bar') tmodel = pa.tmodels.Isothermal(nlayers) temperature = tmodel(1500.0) mu = np.tile(2.3, nlayers) Mp = 1.0 * pc.mjup r0 = 1.0 * pc.rjup p0 = 1.0 * pc.bar radius = pa.hydro_m(pressure, temperature, mu, Mp, p0, r0) / pc.rjup # Radius profile in Jupiter radii: np.testing.assert_allclose(radius, radius_m)
def test_abundances_tea(): nlayers = 15 punits = 'bar' pressure = pa.pressure(1e-10, 1e3, nlayers, punits) tmodel = pa.tmodels.Isothermal(nlayers) temperature = tmodel(1500.0) species = 'H He C O H2 H2O CO CO2 CH4'.split() elements = 'H He C O'.split() qtea = pa.abundance(pressure, temperature, species, elements, punits=punits) np.testing.assert_allclose(qtea, qtea_expected)
def test_read_write_atm_pt(tmpdir): atmfile = "WASP-00b.atm" atm = "{}/{}".format(tmpdir, atmfile) nlayers = 11 pressure = pa.pressure('1e-8 bar', '1e2 bar', nlayers) temperature = pa.tmodels.Isothermal(nlayers)(1500.0) io.write_atm(atm, pressure, temperature, punits='bar') assert atmfile in os.listdir(str(tmpdir)) atm_input = io.read_atm(atm) assert atm_input[0] == ('bar', 'kelvin', None, None) assert atm_input[1] is None np.testing.assert_allclose(atm_input[2], pressure / pc.bar) np.testing.assert_allclose(atm_input[3], temperature) assert atm_input[4] is None assert atm_input[5] is None
def test_abundances_tea_xsolar_escale(xsolar, escale): nlayers = 9 punits = 'bar' pressure = pa.pressure(1e-5, 1e3, nlayers, punits) tmodel = pa.tmodels.Isothermal(nlayers) temperature = tmodel(1500.0) species = 'H He C O H2 H2O CO CO2 CH4'.split() elements = 'H He C O'.split() q = pa.abundance(pressure, temperature, species, elements, punits=punits, xsolar=xsolar, escale=escale) np.testing.assert_allclose(q[:, 5], q_H2O[xsolar > 1]['C' in escale])
def test_abundance_uniform(): atmfile = "outputs/atm_test.dat" nlayers = 11 punits = 'bar' pressure = pa.pressure(1e-8, 1e2, nlayers, punits) tmodel = pa.tmodels.Isothermal(nlayers) temperature = tmodel(1500.0) species = ["H2", "He", "H2O", "CO", "CO2", "CH4"] abundances = [0.8496, 0.15, 1e-4, 1e-4, 1e-8, 1e-4] qprofiles = pa.abundance(pressure, temperature, species, quniform=abundances, atmfile=atmfile, punits=punits) assert np.shape(qprofiles) == (nlayers, len(species)) for q in qprofiles: np.testing.assert_equal(q, np.array(abundances))
def test_hydro_m_ultra_puff(): nlayers = 15 pressure = pa.pressure(1e-8, 1e2, nlayers, units='bar') tmodel = pa.tmodels.Isothermal(nlayers) temperature = tmodel(1500.0) mu = np.tile(2.3, nlayers) Mp = 0.1 * pc.mjup r0 = 2.0 * pc.rjup p0 = 1.0 * pc.bar radius = pa.hydro_m(pressure, temperature, mu, Mp, p0, r0) / pc.rjup puff_radius = np.array([ 23.59979187, 10.78753812, 6.99174271, 5.17191017, 4.10376853, 3.40130545, 2.90418177, 2.5338435, 2.24727349, 2.01893776, 1.83272274, 1.67795772, 1.54729571 ]) assert np.isinf(radius[0]) assert np.isinf(radius[1]) np.testing.assert_allclose(radius[2:], puff_radius)
import os import pytest import numpy as np from cycler import cycler import matplotlib.pyplot as plt import pyratbay as pb import pyratbay.plots as pp import pyratbay.constants as pc import pyratbay.atmosphere as pa os.chdir(pb.constants.ROOT + 'tests') nlayers = 51 pressure = pa.pressure('1e-6 bar', '1e2 bar', nlayers) temperature = pa.temperature('isothermal', pressure, params=1000.0) species = 'H2O CH4 CO CO2 NH3 C2H2 C2H4 HCN N2 TiO VO H2 H He Na K'.split() Q = pa.abundance(pressure, temperature, species, ncpu=3) # Templates, I don't know how to truly automatize this since I'd # need to see the output plots to be OK, but a not-breaking-code # is the minimum testing I can guarantee at the moment. @pytest.mark.parametrize("ndim", ['1d', '2d']) def test_temperature_minimal(ndim): tmodel = pa.tmodels.TCEA(pressure) profile = tmodel([-4.0, -1.0, 0.0, 0.0, 1000.0, 0.0]) if ndim == '2d': profile = [profile]
source='exomol', read_all=False) xs_CO = io.import_xs( f'{HOME}/inputs/taurex/C-O-NatAbund__Li2015.R15000_0.3-50mu.xsec.TauREx.h5', source='exomol', read_all=False) wl_exomol = 1.0 / (wn_exomol * pc.um) xs_H2O = xs_H2O[3::3] xs_CO = xs_CO[3::3] xs_CO2 = xs_CO2[3::3] press_exomol = press_exomol[3::3] # Create an atmospheric file at same selected pressures: nlayers = 7 press = pa.pressure('1e-4 bar', '1e2 bar', nlayers) temp = np.tile(1000.0, nlayers) species = 'H2 He H2O CH4 CO CO2'.split() abundances = [0.86, 0.14, 1e-4, 1e-4, 1e-4, 1e-4] atmfile = 'exomol_opacity_benchmark.atm' q_atm = pa.uniform(press, temp, species, abundances, atmfile=atmfile) # ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ipress = 3 itemp = 9 pyrat = pb.run('H2O_spectrum.cfg', run_step='init') wl_pyrat = 1.0 / (pyrat.spec.wn * pc.um) ec_H2O = pyrat.get_ec(ipress)[0][0]
def test_pressure_with_units(): ptop = "1e-8 bar" pbottom = "1e3 bar" nlayers = 15 pressure = pa.pressure(ptop, pbottom, nlayers) np.testing.assert_allclose(pressure, expected_pressure)
def test_pressure_default_units(): ptop = 1e-8 pbottom = 1e3 nlayers = 15 pressure = pa.pressure(ptop, pbottom, nlayers) np.testing.assert_allclose(pressure, expected_pressure)
ax2.set_ylim(ax.get_ylim()) if xaxis: ax2 = ax.twiny() ax2.tick_params(axis='x', direction='in', which='both') ax2.set_xscale(ax.get_xscale()) ax2.set_xticklabels([]) ax2.set_xticks(ax.get_xticks()) ax2.set_xlim(ax.get_xlim()) # :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: # Transmission model with only H2 Rayleigh and CIA opacity: nlayers = 41 T0 = 1300.0 pressure = pa.pressure('1e-8 bar', '100 bar', nlayers) temperature = pa.tmodels.Isothermal(nlayers)(T0) species = 'H2 He Na K H2O CH4 CO CO2'.split() q = [0.85, 0.1492, 3.0e-06, 1.0e-06, 4.0e-04, 1.0e-04, 3.0e-04, 1.0e-07] Q = pa.uniform(pressure, temperature, species, q) mu = pa.mean_weight(Q, species) iH2 = species.index('H2') iHe = species.index('He') iH2O = species.index('H2O') iCO = species.index('CO') iCH4 = species.index('CH4') iNa = species.index('Na') iK = species.index('K')