[cig-commits] [commit] master: Write tests, fix up some validation (1801d7c)

cig_noreply at geodynamics.org cig_noreply at geodynamics.org
Sun Jan 4 06:44:30 PST 2015


Repository : https://github.com/geodynamics/burnman

On branch  : master
Link       : https://github.com/geodynamics/burnman/compare/3f851f06618bcb112ae159cb61326e211911be2e...1f0b803e9189e4c6cc1ff3065bbc5da699dc80b6

>---------------------------------------------------------------

commit 1801d7c22264d831d250b984130666c3c2ae7250
Author: Ian Rose <ian.r.rose at gmail.com>
Date:   Sun Dec 14 22:32:50 2014 -0800

    Write tests, fix up some validation


>---------------------------------------------------------------

1801d7c22264d831d250b984130666c3c2ae7250
 burnman/eos/mie_grueneisen_debye.py |   6 +-
 burnman/eos/slb.py                  |  10 +--
 tests/test_eos.py                   | 117 ++++++++++++++++++++++++++++++++++++
 3 files changed, 126 insertions(+), 7 deletions(-)

diff --git a/burnman/eos/mie_grueneisen_debye.py b/burnman/eos/mie_grueneisen_debye.py
index be52fce..0a242c5 100644
--- a/burnman/eos/mie_grueneisen_debye.py
+++ b/burnman/eos/mie_grueneisen_debye.py
@@ -196,13 +196,13 @@ class MGDBase(eos.EquationOfState):
             warnings.warn( 'Unusual value for K_0', stacklevel=2 )
         if params['Kprime_0'] < -5. or params['Kprime_0'] > 10.:
             warnings.warn( 'Unusual value for Kprime_0', stacklevel=2 )
-        if params['G_0'] is not float('nan') and (params['G_0'] < 0. or params['G_0'] > 1.e13):
+        if params['G_0'] < 0. or params['G_0'] > 1.e13:
             warnings.warn( 'Unusual value for G_0', stacklevel=2 )
-        if params['Gprime_0'] is not float('nan') and (params['Gprime_0'] < -5. or params['Gprime_0'] > 10.):
+        if params['Gprime_0'] < -5. or params['Gprime_0'] > 10.:
             warnings.warn( 'Unusual value for Gprime_0', stacklevel=2 )
         if params['molar_mass'] < 0.001 or params['molar_mass'] > 1.:
             warnings.warn( 'Unusual value for molar_mass' , stacklevel=2)
-        if params['n'] < 1. or params['n'] > 100. or not float(params['n']).is_integer():
+        if params['n'] < 1. or params['n'] > 1000. or float(params['n']).is_integer()==False:
             warnings.warn( 'Unusual value for n' , stacklevel=2)
         if params['Debye_0'] < 1. or params['Debye_0'] > 10000.:
             warnings.warn( 'Unusual value for Debye_0' , stacklevel=2)
diff --git a/burnman/eos/slb.py b/burnman/eos/slb.py
index c0c1012..d338a53 100644
--- a/burnman/eos/slb.py
+++ b/burnman/eos/slb.py
@@ -267,6 +267,8 @@ class SLBBase(eos.EquationOfState):
             params['Gprime_0'] = float('nan')
         if 'eta_s_0' not in params:
             params['eta_s_0'] = float('nan')
+        if 'F_0' not in params:
+            params['F_0'] = float('nan')
   
         #check that all the required keys are in the dictionary
         expected_keys = ['V_0', 'K_0', 'Kprime_0', 'G_0', 'Gprime_0', 'molar_mass', 'n', 'Debye_0', 'grueneisen_0', 'q_0', 'eta_s_0']
@@ -281,15 +283,15 @@ class SLBBase(eos.EquationOfState):
             warnings.warn( 'Unusual value for V_0', stacklevel=2 )
         if params['K_0'] < 1.e9 or params['K_0'] > 1.e13:
             warnings.warn( 'Unusual value for K_0', stacklevel=2 )
-        if params['Kprime_0'] < -5. or params['Kprime_0'] > 10.:
+        if params['Kprime_0'] < 0. or params['Kprime_0'] > 10.:
             warnings.warn( 'Unusual value for Kprime_0', stacklevel=2 )
-        if params['G_0'] is not float('nan') and (params['G_0'] < 0. or params['G_0'] > 1.e13):
+        if params['G_0'] < 0. or params['G_0'] > 1.e13:
             warnings.warn( 'Unusual value for G_0', stacklevel=2 )
-        if params['Gprime_0'] is not float('nan') and (params['Gprime_0'] < -5. or params['Gprime_0'] > 10.):
+        if params['Gprime_0'] < -5. or params['Gprime_0'] > 10.:
             warnings.warn( 'Unusual value for Gprime_0', stacklevel=2 )
         if params['molar_mass'] < 0.001 or params['molar_mass'] > 10.:
             warnings.warn( 'Unusual value for molar_mass', stacklevel=2 )
-        if params['n'] < 1. or params['n'] > 1000.:
+        if params['n'] < 1. or params['n'] > 1000. or float(params['n']).is_integer() == False:
             warnings.warn( 'Unusual value for n', stacklevel=2 )
         if params['Debye_0'] < 1. or params['Debye_0'] > 10000.:
             warnings.warn( 'Unusual value for Debye_0', stacklevel=2 )
diff --git a/tests/test_eos.py b/tests/test_eos.py
index bf45d61..adc62df 100644
--- a/tests/test_eos.py
+++ b/tests/test_eos.py
@@ -68,5 +68,122 @@ class eos(BurnManTest):
             self.assertFloatEqual(Grun_test, rock.params['grueneisen_0'])
 
 
+    
+
+
+
+class test_eos_validation(BurnManTest):
+    def test_no_shear_error(self):
+        #The validation should place nans in for the shear parameters
+        #If any exceptions or warnings are raised, fail.
+        class mymineralwithoutshear(burnman.Mineral):
+            def __init__(self):
+                self.params = {
+                    'equation_of_state': 'slb3',
+                    'V_0': 11.24e-6,
+                    'K_0': 161.0e9,
+                    'Kprime_0': 3.8,
+                    'molar_mass': .0403,
+                    'n': 2,
+                    'Debye_0': 773.,
+                    'grueneisen_0': 1.5,
+                    'q_0': 1.5,
+                    'eta_s_0': 2.8}
+                burnman.Mineral.__init__(self)
+
+        with warnings.catch_warnings(record=True) as w:
+            # Cause all warnings to always be triggered.
+            warnings.simplefilter("always")
+            #Trigger warning
+            shearless = mymineralwithoutshear()
+            if len(w) != 0:
+                self.fail("Caught unexpected warning: "+str(w[-1]))
+            try:
+                x = shearless.params['G_0']
+                y = shearless.params['Gprime_0']
+                z = shearless.params['F_0']
+                z = shearless.params['eta_s_0']
+            except KeyError:
+                self.fail('Parameter padding failed in validation')
+                pass
+
+    def test_dumb_parameter_values(self):
+
+        class mymineralwithnegativekprime(burnman.Mineral):
+            def __init__(self):
+                self.params = {
+                    'equation_of_state': 'slb3',
+                    'V_0': 11.24e-6,
+                    'K_0': 161.0e9,
+                    'Kprime_0': -4.,
+                    'molar_mass': .0403,
+                    'n': 2,
+                    'Debye_0': 773.,
+                    'grueneisen_0': 1.5,
+                    'q_0': 1.5,
+                    'eta_s_0': 2.8}
+                burnman.Mineral.__init__(self)
+
+        with warnings.catch_warnings(record=True) as w:
+            # Cause all warnings to always be triggered.
+            warnings.simplefilter("always")
+            #Trigger warning
+            negative_Kprime = mymineralwithnegativekprime()
+            if len(w) == 0:
+                print negative_Kprime.params
+                self.fail("Did not catch expected warning for negative K prime")
+     
+        class mymineralwithkingigapascals(burnman.Mineral):
+            def __init__(self):
+                self.params = {
+                    'equation_of_state': 'slb3',
+                    'V_0': 11.24e-6,
+                    'K_0': 161.0,
+                    'Kprime_0': 3.8,
+                    'molar_mass': .0403,
+                    'n': 3.14159,
+                    'Debye_0': 773.,
+                    'grueneisen_0': 1.5,
+                    'q_0': 1.5,
+                    'eta_s_0': 2.8}
+                burnman.Mineral.__init__(self)
+
+        with warnings.catch_warnings(record=True) as w:
+            # Cause all warnings to always be triggered.
+            warnings.simplefilter("always")
+            #Trigger warning
+            low_K = mymineralwithkingigapascals()
+            if len(w) == 0:
+                self.fail("Did not catch expected warning K in Gpa")
+
+        class mymineralwithfractionalatoms(burnman.Mineral):
+            def __init__(self):
+                self.params = {
+                    'equation_of_state': 'slb3',
+                    'V_0': 11.24e-6,
+                    'K_0': 161.0e9,
+                    'Kprime_0': 3.8,
+                    'molar_mass': .0403,
+                    'n': 3.14159,
+                    'Debye_0': 773.,
+                    'grueneisen_0': 1.5,
+                    'q_0': 1.5,
+                    'eta_s_0': 2.8}
+                burnman.Mineral.__init__(self)
+
+        with warnings.catch_warnings(record=True) as w:
+            # Cause all warnings to always be triggered.
+            warnings.simplefilter("always")
+            #Trigger warning
+            fractional_atoms = mymineralwithfractionalatoms()
+            if len(w) == 0:
+                self.fail("Did not catch expected warning for fractional atoms")
+     
+     
+
+
+     
+
+
 if __name__ == '__main__':
     unittest.main()



More information about the CIG-COMMITS mailing list