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
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
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
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
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
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
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