mirror of
https://github.com/Cantera/cantera.git
synced 2025-02-25 18:55:29 -06:00
[Python] Add access to input data for Solution objects
This commit is contained in:
committed by
Ingmar Schoegl
parent
17497d0528
commit
b01c8b4e3f
@@ -163,6 +163,8 @@ cdef extern from "cantera/thermo/ThermoPhase.h" namespace "Cantera":
|
||||
# miscellaneous
|
||||
string type()
|
||||
string phaseOfMatter() except +translate_exception
|
||||
CxxAnyMap& input()
|
||||
void getParameters(CxxAnyMap&) except +translate_exception
|
||||
string report(cbool, double) except +translate_exception
|
||||
cbool hasPhaseTransition()
|
||||
cbool isPure()
|
||||
@@ -470,6 +472,7 @@ cdef extern from "cantera/kinetics/Kinetics.h" namespace "Cantera":
|
||||
void addReaction(shared_ptr[CxxReaction]) except +translate_exception
|
||||
void modifyReaction(int, shared_ptr[CxxReaction]) except +translate_exception
|
||||
void invalidateCache() except +translate_exception
|
||||
void getParameters(CxxAnyMap&) except +translate_exception
|
||||
|
||||
shared_ptr[CxxReaction] reaction(size_t) except +translate_exception
|
||||
cbool isReversible(int) except +translate_exception
|
||||
@@ -495,6 +498,7 @@ cdef extern from "cantera/transport/TransportBase.h" namespace "Cantera":
|
||||
cdef cppclass CxxTransport "Cantera::Transport":
|
||||
CxxTransport(CxxThermoPhase*)
|
||||
string transportType()
|
||||
void getParameters(CxxAnyMap&) except +translate_exception
|
||||
double viscosity() except +translate_exception
|
||||
double thermalConductivity() except +translate_exception
|
||||
double electricalConductivity() except +translate_exception
|
||||
|
||||
@@ -223,6 +223,17 @@ cdef class _SolutionBase:
|
||||
for reaction in reactions:
|
||||
self.kinetics.addReaction(reaction._reaction)
|
||||
|
||||
property input_data:
|
||||
def __get__(self):
|
||||
cdef CxxAnyMap params
|
||||
if self.thermo:
|
||||
self.thermo.getParameters(params)
|
||||
if self.kinetics:
|
||||
self.kinetics.getParameters(params)
|
||||
if self.transport:
|
||||
self.transport.getParameters(params)
|
||||
return mergeAnyMap(params, self.thermo.input())
|
||||
|
||||
def __getitem__(self, selection):
|
||||
copy = self.__class__(origin=self)
|
||||
if isinstance(selection, slice):
|
||||
|
||||
@@ -422,3 +422,40 @@ class TestRestorePureFluid(utilities.CanteraTest):
|
||||
b = ct.SolutionArray(self.water)
|
||||
b.restore_data(data)
|
||||
check(a, b)
|
||||
|
||||
|
||||
class TestSolutionSerialization(utilities.CanteraTest):
|
||||
def test_input_data_simple(self):
|
||||
gas = ct.Solution('h2o2.yaml')
|
||||
data = gas.input_data
|
||||
self.assertEqual(data['name'], 'ohmech')
|
||||
self.assertEqual(data['thermo'], 'ideal-gas')
|
||||
self.assertEqual(data['kinetics'], 'gas')
|
||||
self.assertEqual(data['transport'], 'mixture-averaged')
|
||||
|
||||
def test_input_data_state(self):
|
||||
gas = ct.Solution('h2o2.yaml')
|
||||
data = gas.input_data
|
||||
self.assertEqual(gas.T, data['state']['T'])
|
||||
self.assertEqual(gas.density, data['state']['density'])
|
||||
|
||||
gas.TP = 500, 3.14e5
|
||||
data = gas.input_data
|
||||
self.assertEqual(gas.T, data['state']['T'])
|
||||
self.assertEqual(gas.density, data['state']['density'])
|
||||
|
||||
def test_input_data_custom(self):
|
||||
gas = ct.Solution('ideal-gas.yaml')
|
||||
data = gas.input_data
|
||||
self.assertEqual(data['custom-field']['first'], True)
|
||||
self.assertEqual(data['custom-field']['last'], [100, 200, 300])
|
||||
|
||||
def test_input_data_debye_huckel(self):
|
||||
soln = ct.Solution('thermo-models.yaml', 'debye-huckel-B-dot-ak')
|
||||
data = soln.input_data
|
||||
self.assertEqual(data['thermo'], 'Debye-Huckel')
|
||||
act_data = data['activity-data']
|
||||
self.assertEqual(act_data['model'], 'B-dot-with-variable-a')
|
||||
self.assertEqual(act_data['default-ionic-radius'], 4e-10)
|
||||
self.assertNotIn('kinetics', data)
|
||||
self.assertNotIn('transport', data)
|
||||
|
||||
Reference in New Issue
Block a user