def cmo_synth_lte(atmosData):
    with open(os.devnull, 'w') as f:
        with redirect_stdout(f):
            atmos = Atmosphere(ScaleType.Geometric,
                               depthScale=atmosData['height'],
                               temperature=atmosData['temp'],
                               vlos=atmosData['vlos'],
                               vturb=4000 * np.ones_like(atmosData['height']))

            aSet = RadiativeSet([
                H_3_atom(),
                C_atom(),
                O_atom(),
                Si_atom(),
                Al_atom(),
                CaII_atom(),
                Fe_atom(),
                He_atom(),
                MgII_atom(),
                N_atom(),
                Na_atom(),
                S_atom()
            ])
            aSet.set_active('Ca')

            spect = aSet.compute_wavelength_grid()

            atmos.convert_scales(Pgas=atmosData['pgas'])
            atmos.quadrature(5)

            eqPops = aSet.iterate_lte_ne_eq_pops(atmos)
            ctx = LwContext(atmos, spect, eqPops, conserveCharge=False)
            iterate_ctx(ctx, eqPops, prd=False)
            Iwave = ctx.compute_rays(wave, [1.0])
            return Iwave
Beispiel #2
0
    def inner():
        atmos = Atmosphere(ScaleType.Geometric,
                           depthScale=atmosData['height'],
                           temperature=atmosData['temp'],
                           vlos=atmosData['vlos'],
                           vturb=4000 * np.ones_like(atmosData['height']))

        aSet = RadiativeSet([
            H_3_atom(),
            C_atom(),
            O_atom(),
            Si_atom(),
            Al_atom(),
            CaII_atom(),
            Fe_atom(),
            He_atom(),
            MgII_atom(),
            N_atom(),
            Na_atom(),
            S_atom()
        ])
        aSet.set_active('Ca')

        spect = aSet.compute_wavelength_grid()

        atmos.convert_scales(Pgas=atmosData['pgas'])
        atmos.quadrature(5)

        mols = MolecularTable()
        eqPops = aSet.iterate_lte_ne_eq_pops(mols, atmos)
        ctx = LwContext(atmos, spect, eqPops, conserveCharge=False)
        iterate_ctx(ctx, prd=False)
        eqPops.update_lte_atoms_Hmin_pops(atmos)
        Iwave = ctx.compute_rays(wave, [1.0])
        return Iwave
Beispiel #3
0
def cmo_synth(atmosData, crsw=None):
    with open(os.devnull, 'w') as f:
        with redirect_stdout(f):
            if crsw is not None:
                crsw = crsw()
            atmos = Atmosphere(ScaleType.Geometric,
                               depthScale=atmosData['height'],
                               temperature=atmosData['temp'],
                               vlos=atmosData['vlos'],
                               vturb=4000 * np.ones_like(atmosData['height']))

            aSet = RadiativeSet([
                H_3_atom(),
                C_atom(),
                O_atom(),
                Si_atom(),
                Al_atom(),
                CaII_atom(),
                Fe_atom(),
                He_atom(),
                MgII_atom(),
                N_atom(),
                Na_atom(),
                S_atom()
            ])
            aSet.set_active('H', 'Ca')

            spect = aSet.compute_wavelength_grid()

            atmos.convert_scales(Pgas=atmosData['pgas'])
            atmos.quadrature(5)

            mols = MolecularTable()
            eqPops = aSet.iterate_lte_ne_eq_pops(mols, atmos)
            ctx = LwContext(atmos,
                            spect,
                            eqPops,
                            conserveCharge=True,
                            initSol=InitialSolution.Lte,
                            crswCallback=crsw)
            iterate_ctx(ctx, prd=False)
            eqPops.update_lte_atoms_Hmin_pops(atmos)
            Iwave = ctx.compute_rays(wave, [1.0])
            return Iwave
Beispiel #4
0
def cmo_synth_given(atmosData):
    with open(os.devnull, 'w') as f:
        with redirect_stdout(f):
            at = get_global_atomic_table()
            atmos = Atmosphere(ScaleType.Geometric,
                               depthScale=atmosData['height'],
                               temperature=atmosData['temp'],
                               vlos=atmosData['vlos'],
                               vturb=4000 * np.ones_like(atmosData['height']),
                               ne=atmosData['ne'],
                               nHTot=(atmosData['density'] /
                                      (at.weightPerH * Const.Amu)))

            aSet = RadiativeSet([
                H_3_atom(),
                C_atom(),
                O_atom(),
                Si_atom(),
                Al_atom(),
                CaII_atom(),
                Fe_atom(),
                He_atom(),
                MgII_atom(),
                N_atom(),
                Na_atom(),
                S_atom()
            ])
            aSet.set_active('Ca')

            spect = aSet.compute_wavelength_grid()

            atmos.convert_scales()
            atmos.quadrature(5)

            mols = MolecularTable()
            eqPops = aSet.iterate_lte_ne_eq_pops(mols, atmos)
            ctx = LwContext(atmos, spect, eqPops, conserveCharge=False)
            iterate_ctx(ctx, prd=False)
            Iwave = ctx.compute_rays(wave, [1.0])
            return Iwave
def cmo_synth(atmosData, crsw=None, NmaxIter=1000):
    with open(os.devnull, 'w') as f:
        with redirect_stdout(f):
            if crsw is not None:
                crsw = crsw()
            atmos = Atmosphere(ScaleType.Geometric,
                               depthScale=atmosData['height'],
                               temperature=atmosData['temp'],
                               vlos=atmosData['vlos'],
                               vturb=4000 * np.ones_like(atmosData['height']))

            aSet = RadiativeSet([
                H_6_atom(),
                C_atom(),
                O_atom(),
                Si_atom(),
                Al_atom(),
                CaII_atom(),
                Fe_atom(),
                He_atom(),
                MgII_atom(),
                N_atom(),
                Na_atom(),
                S_atom()
            ])
            aSet.set_active('H', 'Ca')

            spect = aSet.compute_wavelength_grid()

            atmos.convert_scales(Pgas=atmosData['pgas'])
            atmos.quadrature(5)

            eqPops = aSet.iterate_lte_ne_eq_pops(atmos)
            ctx = lw.Context(atmos,
                             spect,
                             eqPops,
                             conserveCharge=False,
                             initSol=InitialSolution.Lte,
                             crswCallback=crsw)
            converged = True
            exploding = False
            try:
                nIter = iterate_ctx(ctx,
                                    eqPops,
                                    prd=False,
                                    NmaxIter=NmaxIter,
                                    nr=True)
            except ConvergenceError:
                converged = False
                nIter = NmaxIter
            except ExplodingMatrixError:
                converged = False
                exploding = True
                nIter = NmaxIter

            if converged:
                eqPops.update_lte_atoms_Hmin_pops(atmos)
                Iwave = ctx.compute_rays(wave, [1.0])
                return {
                    'Iwave': Iwave,
                    'eqPops': eqPops,
                    'converged': converged,
                    'nIter': nIter,
                    'atmosData': atmosData,
                    'exploding': exploding
                }
            else:
                return {
                    'converged': converged,
                    'nIter': nIter,
                    'atmosData': atmosData,
                    'exploding': exploding
                }
Beispiel #6
0
atmoses = atmos_hierarchy(atmos, 3)
for atmos in atmoses:
    atmos.quadrature(7)
baseAtmos = deepcopy(atmoses[-1])
baseAtmos.quadrature(7)

aSet = lw.RadiativeSet([
    H_6_atom(),
    C_atom(),
    O_atom(),
    Si_atom(),
    Al_atom(),
    CaII_atom(),
    Fe_atom(),
    He_atom(),
    Mg_atom(),
    N_atom(),
    Na_atom(),
    S_atom()
])
aSet.set_active('Ca')
spect = aSet.compute_wavelength_grid()

# molPaths = [get_default_molecule_path() + m + '.molecule' for m in ['H2']]
# mols = lw.MolecularTable(molPaths)

baseEqPops = aSet.compute_eq_pops(baseAtmos)
baseCtx = lw.Context(baseAtmos, spect, baseEqPops, Nthreads=8)
eqPopses = [aSet.compute_eq_pops(a) for a in atmoses]
ctxs = [lw.Context(a, spect, e, Nthreads=8) for a, e in zip(atmoses, eqPopses)]