示例#1
0
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)
示例#2
0
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)
示例#3
0
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
示例#4
0
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)
示例#5
0
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))
示例#6
0
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)
示例#7
0
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)
示例#8
0
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
示例#9
0
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])
示例#10
0
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))
示例#11
0
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)
示例#12
0
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]
示例#14
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)
示例#15
0
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)
示例#16
0
        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')