Ejemplo n.º 1
0
class test_OpacityTable(object):
    """OpacityTable"""
    
    def setup(self):
        """Set up this test suite"""
        self.o = OpacityTable("GN93hz",load=False)

    def test_solar_composition(self):
        """Interpolated Values Succeed. logrho=[0.3,-4.0], logT=[6.3,5.0]"""
        self.o.composition(X=0.7,Y=0.28)
        assert self.o.n == 72, u"Table Mismatch, %g ≠ %g" % (self.o.n,72)
        v1 = self.o.lookup(logrho=0.3,logT=6.3)
        a1 = 1.885
        assert v1 - a1 < 1e-10, u"κ mismatch: %g ≠ %g" % (v1, a1)
        v2 = self.o.lookup(logrho=-4.0,logT=5.0)
        a2 = 3.436
        assert v2 - a2 < 1e-10, u"κ mismatch: %g ≠ %g" % (v2, a2)
        
    @nt.raises(AssertionError)
    def test_sanity_comp(self):
        """Composition should fail if X+Y > 1.0."""
        self.o.composition(X=0.7,Y=0.7)
        
    @nt.raises(ValueError)
    def test_lower_logR_bound(self):
        """Values below logR=-8.0 fail."""
        self.o.composition(X=0.70,Y=0.28)
        logrho, logT = self.o.invert_points(logR=-9.0,logT=5.00).T
        v1 = self.o.lookup(logrho=logrho,logT=logT)
        
    @nt.raises(ValueError)
    def test_upper_logR_bound(self):
        """Values above logR=1.0 fail."""
        self.o.composition(X=0.70,Y=0.28)
        logrho, logT = self.o.invert_points(logR=2.0,logT=5.00).T
        v1 = self.o.lookup(logrho=logrho,logT=logT)
        
    @nt.raises(ValueError)
    def test_lower_logT_bound(self):
        """Values below logT=3.00 fail."""
        self.o.composition(X=0.70,Y=0.28)
        logrho, logT = self.o.invert_points(logR=-4.0,logT=3.00).T
        v1 = self.o.lookup(logrho=logrho,logT=logT)
        
    @nt.raises(ValueError)
    def test_upper_logT_bound(self):
        """Values above logT=9.00 fail."""
        self.o.composition(X=0.70,Y=0.28)
        logrho, logT = self.o.invert_points(logR=-4.0,logT=9.00).T
        v1 = self.o.lookup(logrho=logrho,logT=logT)
        
    @nt.raises(ValueError)
    def test_corner_a_NaNs(self):
        """Values in the bottom right corner of the table should fail. logR=0.5, logT=8.5"""
        self.o.composition(X=0.70,Y=0.28)
        logrho, logT = self.o.invert_points(logR=0.5,logT=8.50).T
        v1 = self.o.lookup(logrho=logrho,logT=logT)
        assert v1 == 1.0
        
    @nt.raises(ValueError)
    def test_corner_b_NaNs(self):
        """Values in the top left corner of the Y=1.000 table should fail. logR=-8.0, logT=3.75"""
        self.o.composition(X=0.00,Y=1.00)
        logrho, logT = self.o.invert_points(logR=-8.0,logT=3.75).T
        v1 = self.o.lookup(logrho=logrho,logT=logT)
        assert v1 == 1.0
        
    def test_corner_a_valid(self):
        """Values in the bottom left corner of the table should succeed. logR=-8.0, logT=8.70"""
        self.o.composition(X=0.70,Y=0.28)
        logrho, logT = self.o.invert_points(logR=-8.0,logT=8.70).T
        v1 = self.o.lookup(logrho=logrho,logT=logT)
        a1 = -0.582
        assert v1 - a1  < 1e-10, u"κ mismatch: %g ≠ %g" % (v1, a1)
        
    def test_corner_b_valid(self):
        """Values in the top right corner of the table should succeed. logR=1.0, logT=3.75"""
        self.o.composition(X=0.70,Y=0.28)
        logrho, logT = self.o.invert_points(logR=1.0,logT=3.75).T
        v1 = self.o.lookup(logrho=logrho,logT=logT)
        a1 = 0.131
        assert v1 - a1  < 1e-10, u"κ mismatch: %g ≠ %g" % (v1, a1)
        
    def test_midtable_valid(self):
        """Direct values succeed. logR=-4.0, logT=5.45"""
        self.o.composition(X=0.70,Y=0.28)
        logrho, logT = self.o.invert_points(logR=-4.0,logT=5.45).T
        v1 = self.o.lookup(logrho=logrho,logT=logT)
        a1 = 0.680
        assert v1 - a1  < 1e-10, u"κ mismatch: %g ≠ %g" % (v1, a1)
Ejemplo n.º 2
0
for i,(logT,logrho) in enumerate(zip(logTs,logrhos)):
    kappa = opacity1.lookup(logrho=logrho,logT=logT)
    print u"1: log(T)=%5.3f, log(ρ)=%6.3f → κ=%5.3f" % (logT,logrho,kappa)
    kappa = opacity2.lookup(logrho=logrho,logT=logT)
    print u"2: log(T)=%5.3f, log(ρ)=%6.3f → κ=%5.3f" % (logT,logrho,kappa)
    kappa = opacity3.lookup(logrho=logrhosmall[i],logT=logTsmall[i])
    print u"3: log(T)=%5.3f, log(ρ)=%6.3f → κ=%5.3f" % (logTsmall[i],logrhosmall[i],kappa)
    kappa = opacity2.lookup(logrho=logrhosmall[i],logT=logTsmall[i])
    print u"2s log(T)=%5.3f, log(ρ)=%6.3f → κ=%5.3f" % (logTsmall[i],logrhosmall[i],kappa)
    
    
    
opacity1.composition(X=0.00,Y=1.00)
opacity2.composition(X=0.00,Y=1.00)
print u"1: Fixed composition at X=%.3g,Y=%.3g,Z=%.3g" % (opacity1.X,opacity1.Y,opacity1.Z)
print u"2: Fixed composition at X=%.3g,Y=%.3g,Z=%.3g" % (opacity2.X,opacity2.Y,opacity2.Z)
print u"1: Using table %d" % opacity1.n
print u"2: Using table %d" % opacity2.n

logrho, logT = opacity1.invert_points(logR=-8.0,logT=3.75).T
try:
    kappa = opacity1.lookup(logrho=logrho,logT=logT)
    print u"1: log(T)=%5.3f, log(ρ)=%6.3f → κ=%5.3f" % (logT,logrho,kappa)
except ValueError:
    print u"1: log(T)=%5.3f, log(ρ)=%6.3f → κ=NaN" % (logT,logrho)
    
try:
    kappa = opacity2.lookup(logrho=logrho,logT=logT)
    print u"2: log(T)=%5.3f, log(ρ)=%6.3f → κ=%5.3f" % (logT,logrho,kappa)
except ValueError:
    print u"2: log(T)=%5.3f, log(ρ)=%6.3f → κ=NaN" % (logT,logrho)
Ejemplo n.º 3
0
class test_OpacityTable(object):
    """OpacityTable"""
    def setup(self):
        """Set up this test suite"""
        self.o = OpacityTable("GN93hz", load=False)

    def test_solar_composition(self):
        """Interpolated Values Succeed. logrho=[0.3,-4.0], logT=[6.3,5.0]"""
        self.o.composition(X=0.7, Y=0.28)
        assert self.o.n == 72, u"Table Mismatch, %g ≠ %g" % (self.o.n, 72)
        v1 = self.o.lookup(logrho=0.3, logT=6.3)
        a1 = 1.885
        assert v1 - a1 < 1e-10, u"κ mismatch: %g ≠ %g" % (v1, a1)
        v2 = self.o.lookup(logrho=-4.0, logT=5.0)
        a2 = 3.436
        assert v2 - a2 < 1e-10, u"κ mismatch: %g ≠ %g" % (v2, a2)

    @nt.raises(AssertionError)
    def test_sanity_comp(self):
        """Composition should fail if X+Y > 1.0."""
        self.o.composition(X=0.7, Y=0.7)

    @nt.raises(ValueError)
    def test_lower_logR_bound(self):
        """Values below logR=-8.0 fail."""
        self.o.composition(X=0.70, Y=0.28)
        logrho, logT = self.o.invert_points(logR=-9.0, logT=5.00).T
        v1 = self.o.lookup(logrho=logrho, logT=logT)

    @nt.raises(ValueError)
    def test_upper_logR_bound(self):
        """Values above logR=1.0 fail."""
        self.o.composition(X=0.70, Y=0.28)
        logrho, logT = self.o.invert_points(logR=2.0, logT=5.00).T
        v1 = self.o.lookup(logrho=logrho, logT=logT)

    @nt.raises(ValueError)
    def test_lower_logT_bound(self):
        """Values below logT=3.00 fail."""
        self.o.composition(X=0.70, Y=0.28)
        logrho, logT = self.o.invert_points(logR=-4.0, logT=3.00).T
        v1 = self.o.lookup(logrho=logrho, logT=logT)

    @nt.raises(ValueError)
    def test_upper_logT_bound(self):
        """Values above logT=9.00 fail."""
        self.o.composition(X=0.70, Y=0.28)
        logrho, logT = self.o.invert_points(logR=-4.0, logT=9.00).T
        v1 = self.o.lookup(logrho=logrho, logT=logT)

    @nt.raises(ValueError)
    def test_corner_a_NaNs(self):
        """Values in the bottom right corner of the table should fail. logR=0.5, logT=8.5"""
        self.o.composition(X=0.70, Y=0.28)
        logrho, logT = self.o.invert_points(logR=0.5, logT=8.50).T
        v1 = self.o.lookup(logrho=logrho, logT=logT)
        assert v1 == 1.0

    @nt.raises(ValueError)
    def test_corner_b_NaNs(self):
        """Values in the top left corner of the Y=1.000 table should fail. logR=-8.0, logT=3.75"""
        self.o.composition(X=0.00, Y=1.00)
        logrho, logT = self.o.invert_points(logR=-8.0, logT=3.75).T
        v1 = self.o.lookup(logrho=logrho, logT=logT)
        assert v1 == 1.0

    def test_corner_a_valid(self):
        """Values in the bottom left corner of the table should succeed. logR=-8.0, logT=8.70"""
        self.o.composition(X=0.70, Y=0.28)
        logrho, logT = self.o.invert_points(logR=-8.0, logT=8.70).T
        v1 = self.o.lookup(logrho=logrho, logT=logT)
        a1 = -0.582
        assert v1 - a1 < 1e-10, u"κ mismatch: %g ≠ %g" % (v1, a1)

    def test_corner_b_valid(self):
        """Values in the top right corner of the table should succeed. logR=1.0, logT=3.75"""
        self.o.composition(X=0.70, Y=0.28)
        logrho, logT = self.o.invert_points(logR=1.0, logT=3.75).T
        v1 = self.o.lookup(logrho=logrho, logT=logT)
        a1 = 0.131
        assert v1 - a1 < 1e-10, u"κ mismatch: %g ≠ %g" % (v1, a1)

    def test_midtable_valid(self):
        """Direct values succeed. logR=-4.0, logT=5.45"""
        self.o.composition(X=0.70, Y=0.28)
        logrho, logT = self.o.invert_points(logR=-4.0, logT=5.45).T
        v1 = self.o.lookup(logrho=logrho, logT=logT)
        a1 = 0.680
        assert v1 - a1 < 1e-10, u"κ mismatch: %g ≠ %g" % (v1, a1)