From 1342b369e727c4903c873c4083dc4beed2c468d4 Mon Sep 17 00:00:00 2001 From: Thomas Robitaille Date: Thu, 27 Aug 2015 17:11:45 +0100 Subject: [PATCH 1/2] Better deal with division by zero in mean opacity calculations --- hyperion/dust/mean_opacities.py | 29 +++++++++++----------- hyperion/dust/tests/test_mean_opacities.py | 16 +++++++++++- 2 files changed, 29 insertions(+), 16 deletions(-) diff --git a/hyperion/dust/mean_opacities.py b/hyperion/dust/mean_opacities.py index 06a26a2b..4c47952a 100644 --- a/hyperion/dust/mean_opacities.py +++ b/hyperion/dust/mean_opacities.py @@ -64,9 +64,6 @@ def compute(self, optical_properties, n_temp=1200, temp_min=0.1, temp_max=100000 kappa_nu = interp1d_fast_loglog(optical_properties.nu, optical_properties.kappa, nu) - # Set mean opacity variable - self.var_name = 'specific_energy' - # Initialize mean opacity arrays self.chi_planck = np.zeros(n_temp) self.kappa_planck = np.zeros(n_temp) @@ -82,29 +79,31 @@ def compute(self, optical_properties, n_temp=1200, temp_min=0.1, temp_max=100000 b_nu = B_nu(nu, T) db_nu_dt = dB_nu_dT(nu, T) + # We use np.divide here to do the right thing with division by zero + # Compute planck mean opacity - self.chi_planck[it] = (integrate_loglog(nu, b_nu * chi_nu) / - integrate_loglog(nu, b_nu)) + self.chi_planck[it] = np.divide(integrate_loglog(nu, b_nu * chi_nu), + integrate_loglog(nu, b_nu)) # Compute planck mean absoptive opacity - self.kappa_planck[it] = (integrate_loglog(nu, b_nu * kappa_nu) / - integrate_loglog(nu, b_nu)) + self.kappa_planck[it] = np.divide(integrate_loglog(nu, b_nu * kappa_nu), + integrate_loglog(nu, b_nu)) # Compute reciprocal planck mean opacity - self.chi_inv_planck[it] = (integrate_loglog(nu, b_nu) / - integrate_loglog(nu, b_nu / chi_nu)) + self.chi_inv_planck[it] = np.divide(integrate_loglog(nu, b_nu), + integrate_loglog(nu, b_nu / chi_nu)) # Compute reciprocal planck mean aborptive opacity - self.kappa_inv_planck[it] = (integrate_loglog(nu, b_nu) / - integrate_loglog(nu, b_nu / kappa_nu)) + self.kappa_inv_planck[it] = np.divide(integrate_loglog(nu, b_nu), + integrate_loglog(nu, b_nu / kappa_nu)) # Compute rosseland mean opacity - self.chi_rosseland[it] = (integrate_loglog(nu, db_nu_dt) / - integrate_loglog(nu, db_nu_dt / chi_nu)) + self.chi_rosseland[it] = np.divide(integrate_loglog(nu, db_nu_dt), + integrate_loglog(nu, db_nu_dt / chi_nu)) # Compute rosseland mean aborptive opacity - self.kappa_rosseland[it] = (integrate_loglog(nu, db_nu_dt) / - integrate_loglog(nu, db_nu_dt / kappa_nu)) + self.kappa_rosseland[it] = np.divide(integrate_loglog(nu, db_nu_dt), + integrate_loglog(nu, db_nu_dt / kappa_nu)) self.temperature = temperatures self.specific_energy = 4. * sigma * temperatures ** 4. * self.kappa_planck diff --git a/hyperion/dust/tests/test_mean_opacities.py b/hyperion/dust/tests/test_mean_opacities.py index 1441e854..f780eb3f 100644 --- a/hyperion/dust/tests/test_mean_opacities.py +++ b/hyperion/dust/tests/test_mean_opacities.py @@ -9,7 +9,7 @@ from ..optical_properties import OpticalProperties from ..mean_opacities import MeanOpacities from ...util.functions import virtual_file, B_nu -from ...util.constants import sigma +from ...util.constants import sigma, c class TestMeanOpacities(object): @@ -65,3 +65,17 @@ def test_plot(self): m.plot(fig, 111) plt.close(fig) + + +def test_zero_emissivities(): + + wav = np.array([2.0, 0.5]) + nu = c / (wav * 1.e-4) + + o = OpticalProperties() + o.nu = nu + o.chi = np.array([1.e-2, 1]) + o.albedo = np.array([0., 0.5]) + + m = MeanOpacities() + m.compute(o) From 2d029c66c910358a04623ce9cef2e3dbdf19f7ba Mon Sep 17 00:00:00 2001 From: Thomas Robitaille Date: Fri, 15 May 2020 09:21:44 +0100 Subject: [PATCH 2/2] Don't run with Python 2.7 on Travis due to conda-forge issues --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 4da8820d..a8abfd45 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,7 +12,6 @@ env: - SETUP_CMD='test' - MPLBACKEND='Agg' matrix: - - PYTHON_VERSION=2.7 - PYTHON_VERSION=3.6 - PYTHON_VERSION=3.7