[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