示例#1
0
def test_units(verbose=True, *args, **kwargs):

    # Test unit-ware arrays
    # RADIS pint-aware array
    a = uarray(np.linspace(10, 100, 10), 'Td')
    res = Q_(np.linspace(1e-16, 1e-15, 10), 'V * cm^2')  # pint definition

    assert (np.round(np.array(a.to('V * cm^2')) - np.array(res), 5)
            == np.zeros_like(res)).all()
#    b = (print(a.to('V * cm^2'))==print(res))

    # Test conversion
    convtable = [
        (500, 'nm', 0.5, 'µm'),
        (1, 'erg/s', 1e-7, 'W'),
        (1, 'm2', 10000, 'cm2')
    ]
    for a, f, r, t in convtable:
        cr = conv2(a, f, t)
        if verbose:
            print(('{0} {1} = {2} {3}'.format(a, f, cr, t)))
        assert isclose(cr, r)

    # Ensures that an error is raised if units with angles are converted 
    # (mathematically correct because angles are dimensionless, but prone 
    # to user errors)
    from radis.phys.units import DimensionalityError
    with pytest.raises(DimensionalityError):
        conv2(1, 'mW/cm2/sr/nm', 'mW/cm2/nm')
        
    return True
示例#2
0
def test_units(verbose=True, *args, **kwargs):

    # Test unit-ware arrays
    # RADIS pint-aware array
    #    b = (print(a.to('V * cm^2'))==print(res))

    # Test conversion
    convtable = [
        (500, "nm", 0.5, "µm"),
        (1, "erg/s", 1e-7, "W"),
        (1, "m**2", 10000, "cm**2"),
    ]
    for a, f, r, t in convtable:
        cr = conv2(a, f, t)
        if verbose:
            print(("{0} {1} = {2} {3}".format(a, f, cr, t)))
        assert isclose(cr, r)

    # Ensures that an error is raised if units with angles are converted
    # (mathematically correct because angles are dimensionless, but prone
    # to user errors)
    assert not is_homogeneous("mW/cm2/sr/nm", "mW/cm2/nm")
    with pytest.raises(TypeError):
        conv2(1, "mW/cm**2/sr/nm", "mW/cm**2/nm")

    return True
示例#3
0
文件: blackbody.py 项目: radis/radis
def planck_wn(wavenum, T, eps=1, unit="mW/sr/cm2/cm-1"):
    """Planck function for blackbody radiation, wavenumber version.

    Parameters
    ----------
    wavenum: np.array   (cm-1)
       wavenumber
    T: float    (K)
        equilibrium temperature
    eps: grey-body emissivity
        default 1
    unit: str
        output unit. Default 'mW/sr/cm2/cm-1'


    Returns
    -------
    planck: np.array   default (mW/sr/cm2/cm-1)
        equilibrium radiance
    """

    k = k_b_CGS
    h = h_CGS
    c = c_CGS

    iplanck = (eps * (2 * h * c**2 * wavenum**3) * 1 / (exp(h * c * wavenum /
                                                            (k * T)) - 1))
    # iplanck in erg/s/sr/cm2/cm-1
    iplanck *= 1e-4  # erg/s/sr/cm2/cm-1 > mW/sr/cm^2/cm-1

    if Q_(unit) != Q_("mW/sr/cm2/cm-1"):
        iplanck = conv2(iplanck, "mW/sr/cm2/cm-1", unit)

    return iplanck
示例#4
0
文件: blackbody.py 项目: radis/radis
def planck(lmbda, T, eps=1, unit="mW/sr/cm2/nm"):
    """Planck function for blackbody radiation.

    Parameters
    ----------
    λ: np.array   (nm)
       wavelength
    T: float    (K)
        equilibrium temperature
    eps: grey-body emissivity
        default 1
    unit: output unit
        default 'mW/sr/cm2/nm'


    Returns
    -------
    planck: np.array   (mW.sr-1.cm-2/nm)
        equilibrium radiance
    """

    k = k_b
    lbd = lmbda * 1e-9
    iplanck = (eps * (2 * h * c**2 / lbd**5) * 1 /
               (exp(h * c / (lbd * k * T)) - 1))  # S.I  (W.sr-1.m-3)
    iplanck *= 1e-10  # W.sr-1.m-3 >>> mW.sr-1.cm-2.nm-1

    if Q_(unit) != Q_("mW/sr/cm2/nm"):
        iplanck = conv2(iplanck, "mW/sr/cm2/nm", unit)

    return iplanck
示例#5
0
def test_units(verbose=True, *args, **kwargs):

    # Test unit-ware arrays
    a = uarray(np.linspace(10, 100, 10), 'Td')  # RADIS pint-aware array
    res = Q_(np.linspace(1e-16, 1e-15, 10), 'V * cm^2')  # pint definition

    assert (np.round(np.array(a.to('V * cm^2')) - np.array(res),
                     5) == np.zeros_like(res)).all()
    #    b = (print(a.to('V * cm^2'))==print(res))

    # Test conversion
    convtable = [(500, 'nm', 0.5, 'µm'), (1, 'erg/s', 1e-7, 'W'),
                 (1, 'm2', 10000, 'cm2')]
    for a, f, r, t in convtable:
        cr = conv2(a, f, t)
        if verbose: print(('{0} {1} = {2} {3}'.format(a, f, cr, t)))
        assert isclose(cr, r)

    return True
示例#6
0
def planck_wn(wavenum, T, eps=1, unit="mW/sr/cm2/cm-1"):
    r"""Planck function for blackbody radiation, wavenumber version.

    .. math::
        \epsilon 2h c^2 {\nu}^3 \frac{1}{\operatorname{exp}\left(\frac{h c \nu}{k T}\right)-1}

    Parameters
    ----------
    wavenum: np.array   (cm-1)
       wavenumber
    T: float    (K)
        equilibrium temperature
    eps: grey-body emissivity
        default 1
    unit: str
        output unit. Default 'mW/sr/cm2/cm-1'


    Returns
    -------
    np.array :  default (mW/sr/cm2/cm-1)
        equilibrium radiance

    See Also
    --------
    :py:func:`~radis.blackbody.sPlanck`, :py:func:`~radis.phys.blackbody.planck`
    """
    k = k_b_CGS
    h = h_CGS
    c = c_CGS

    iplanck = (
        eps
        * (2 * h * c ** 2 * wavenum ** 3)
        * (1 / (exp(h * c * wavenum / (k * T)) - 1))
    )
    # iplanck in erg/s/sr/cm2/cm-1
    iplanck *= 1e-4  # erg/s/sr/cm2/cm-1 > mW/sr/cm^2/cm-1

    if Q_(unit) != Q_("mW/sr/cm2/cm-1"):
        iplanck = conv2(iplanck, "mW/sr/cm2/cm-1", unit)

    return iplanck
示例#7
0
def planck(lmbda, T, eps=1, unit="mW/sr/cm2/nm"):
    r"""Planck function for blackbody radiation.

    .. math::
        \epsilon \frac{2h c^2}{{\lambda}^5} \frac{1}{\operatorname{exp}\left(\frac{h c}{\lambda k T}\right)-1}

    Parameters
    ----------
    λ: np.array   (nm)
       wavelength
    T: float    (K)
        equilibrium temperature
    eps: grey-body emissivity
        default 1
    unit: output unit
        default 'mW/sr/cm2/nm'

    Returns
    -------
    np.array :  (mW.sr-1.cm-2/nm)
        equilibrium radiance

    See Also
    --------
    :py:func:`~radis.blackbody.sPlanck`, :py:func:`~radis.phys.blackbody.planck_wn`
    """
    k = k_b
    lbd = lmbda * 1e-9
    iplanck = (
        eps * (2 * h * c ** 2 / lbd ** 5) * (1 / (exp(h * c / (lbd * k * T)) - 1))
    )  # S.I  (W.sr-1.m-3)
    iplanck *= 1e-10  # W.sr-1.m-3 >>> mW.sr-1.cm-2.nm-1

    if Q_(unit) != Q_("mW/sr/cm2/nm"):
        iplanck = conv2(iplanck, "mW/sr/cm2/nm", unit)

    return iplanck