[Thermo] replace 'phase_id' by 'name'
* 'name' corresponds to the YAML entry * rename Solution keyword 'phaseid' to 'name' (instead of 'phase_id') * rename ck2yaml argument '--id' to '--name' (instead of '--phase-id') * ensure that C++ Phase::m_id is always the same as Phase::m_name
This commit is contained in:
parent
5928d63746
commit
6e5d45273a
12 changed files with 83 additions and 107 deletions
|
|
@ -64,8 +64,6 @@ protected:
|
||||||
shared_ptr<ThermoPhase> m_thermo; //! ThermoPhase manager
|
shared_ptr<ThermoPhase> m_thermo; //! ThermoPhase manager
|
||||||
shared_ptr<Kinetics> m_kinetics; //! Kinetics manager
|
shared_ptr<Kinetics> m_kinetics; //! Kinetics manager
|
||||||
shared_ptr<Transport> m_transport; //! Transport manager
|
shared_ptr<Transport> m_transport; //! Transport manager
|
||||||
|
|
||||||
std::string m_name; //! name of Solution object
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -140,8 +140,6 @@ cdef extern from "cantera/thermo/ThermoPhase.h" namespace "Cantera":
|
||||||
# miscellaneous
|
# miscellaneous
|
||||||
string type()
|
string type()
|
||||||
string report(cbool, double) except +translate_exception
|
string report(cbool, double) except +translate_exception
|
||||||
string id()
|
|
||||||
void setID(string)
|
|
||||||
double minTemp() except +translate_exception
|
double minTemp() except +translate_exception
|
||||||
double maxTemp() except +translate_exception
|
double maxTemp() except +translate_exception
|
||||||
double refPressure() except +translate_exception
|
double refPressure() except +translate_exception
|
||||||
|
|
|
||||||
|
|
@ -3,20 +3,18 @@
|
||||||
|
|
||||||
from collections import defaultdict as _defaultdict
|
from collections import defaultdict as _defaultdict
|
||||||
|
|
||||||
_phase_counts = _defaultdict(int)
|
|
||||||
|
|
||||||
cdef class _SolutionBase:
|
cdef class _SolutionBase:
|
||||||
def __cinit__(self, infile='', phase_id='', adjacent=(), origin=None,
|
def __cinit__(self, infile='', name='', adjacent=(), origin=None,
|
||||||
source=None, yaml=None, thermo=None, species=(),
|
source=None, yaml=None, thermo=None, species=(),
|
||||||
kinetics=None, reactions=(), **kwargs):
|
kinetics=None, reactions=(), **kwargs):
|
||||||
|
|
||||||
if 'phaseid' in kwargs:
|
if 'phaseid' in kwargs:
|
||||||
if phase_id is not '':
|
if name is not '':
|
||||||
raise AttributeError('duplicate specification of phase name')
|
raise AttributeError('duplicate specification of phase name')
|
||||||
|
|
||||||
warnings.warn("Keyword 'phase_id' replaces 'phaseid'",
|
warnings.warn("Keyword 'name' replaces 'phaseid'",
|
||||||
FutureWarning)
|
FutureWarning)
|
||||||
phase_id = kwargs['phaseid']
|
name = kwargs['phaseid']
|
||||||
|
|
||||||
if 'phases' in kwargs:
|
if 'phases' in kwargs:
|
||||||
if len(adjacent)>0:
|
if len(adjacent)>0:
|
||||||
|
|
@ -54,9 +52,9 @@ cdef class _SolutionBase:
|
||||||
|
|
||||||
# Parse inputs
|
# Parse inputs
|
||||||
if infile.endswith('.yml') or infile.endswith('.yaml') or yaml:
|
if infile.endswith('.yml') or infile.endswith('.yaml') or yaml:
|
||||||
self._init_yaml(infile, phase_id, adjacent, yaml)
|
self._init_yaml(infile, name, adjacent, yaml)
|
||||||
elif infile or source:
|
elif infile or source:
|
||||||
self._init_cti_xml(infile, phase_id, adjacent, source)
|
self._init_cti_xml(infile, name, adjacent, source)
|
||||||
elif thermo and species:
|
elif thermo and species:
|
||||||
self._init_parts(thermo, species, kinetics, adjacent, reactions)
|
self._init_parts(thermo, species, kinetics, adjacent, reactions)
|
||||||
else:
|
else:
|
||||||
|
|
@ -72,23 +70,17 @@ cdef class _SolutionBase:
|
||||||
if isinstance(self, Transport):
|
if isinstance(self, Transport):
|
||||||
assert self.transport is not NULL
|
assert self.transport is not NULL
|
||||||
|
|
||||||
phase_name = pystr(self.thermo.id())
|
phase_name = pystr(self.base.name())
|
||||||
name = kwargs.get('name')
|
name = kwargs.get('name')
|
||||||
if name is not None:
|
if name is not None:
|
||||||
self.name = name
|
self.name = name
|
||||||
elif phase_name in _phase_counts:
|
|
||||||
_phase_counts[phase_name] += 1
|
|
||||||
n = _phase_counts[phase_name]
|
|
||||||
self.name = '{0}_{1}'.format(phase_name, n)
|
|
||||||
else:
|
else:
|
||||||
_phase_counts[phase_name] = 0
|
|
||||||
self.name = phase_name
|
self.name = phase_name
|
||||||
|
|
||||||
property name:
|
property name:
|
||||||
"""
|
"""
|
||||||
The name assigned to this SolutionBase object. The default value
|
The name assigned to this object. The default value corresponds
|
||||||
is based on the phase identifier in the CTI/XML/YAML input file;
|
to the CTI/XML/YAML input file phase entry.
|
||||||
a numbered suffix is added if needed to create a unique name.
|
|
||||||
"""
|
"""
|
||||||
def __get__(self):
|
def __get__(self):
|
||||||
return pystr(self.base.name())
|
return pystr(self.base.name())
|
||||||
|
|
@ -111,7 +103,7 @@ cdef class _SolutionBase:
|
||||||
|
|
||||||
return thermo, kinetics, transport
|
return thermo, kinetics, transport
|
||||||
|
|
||||||
def _init_yaml(self, infile, phase_id, adjacent, source):
|
def _init_yaml(self, infile, name, adjacent, source):
|
||||||
"""
|
"""
|
||||||
Instantiate a set of new Cantera C++ objects from a YAML
|
Instantiate a set of new Cantera C++ objects from a YAML
|
||||||
phase definition
|
phase definition
|
||||||
|
|
@ -123,7 +115,7 @@ cdef class _SolutionBase:
|
||||||
root = AnyMapFromYamlString(stringify(source))
|
root = AnyMapFromYamlString(stringify(source))
|
||||||
|
|
||||||
phaseNode = root[stringify("phases")].getMapWhere(stringify("name"),
|
phaseNode = root[stringify("phases")].getMapWhere(stringify("name"),
|
||||||
stringify(phase_id))
|
stringify(name))
|
||||||
|
|
||||||
# Thermo
|
# Thermo
|
||||||
if isinstance(self, ThermoPhase):
|
if isinstance(self, ThermoPhase):
|
||||||
|
|
@ -146,7 +138,7 @@ cdef class _SolutionBase:
|
||||||
else:
|
else:
|
||||||
self.kinetics = NULL
|
self.kinetics = NULL
|
||||||
|
|
||||||
def _init_cti_xml(self, infile, phase_id, adjacent, source):
|
def _init_cti_xml(self, infile, name, adjacent, source):
|
||||||
"""
|
"""
|
||||||
Instantiate a set of new Cantera C++ objects from a CTI or XML
|
Instantiate a set of new Cantera C++ objects from a CTI or XML
|
||||||
phase definition
|
phase definition
|
||||||
|
|
@ -158,8 +150,8 @@ cdef class _SolutionBase:
|
||||||
|
|
||||||
# Get XML data
|
# Get XML data
|
||||||
cdef XML_Node* phaseNode
|
cdef XML_Node* phaseNode
|
||||||
if phase_id:
|
if name:
|
||||||
phaseNode = rootNode.findID(stringify(phase_id))
|
phaseNode = rootNode.findID(stringify(name))
|
||||||
else:
|
else:
|
||||||
phaseNode = rootNode.findByName(stringify('phase'))
|
phaseNode = rootNode.findByName(stringify('phase'))
|
||||||
if phaseNode is NULL:
|
if phaseNode is NULL:
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ Usage:
|
||||||
[--thermo=<filename>]
|
[--thermo=<filename>]
|
||||||
[--transport=<filename>]
|
[--transport=<filename>]
|
||||||
[--surface=<filename>]
|
[--surface=<filename>]
|
||||||
[--phase-id=<phase-id>]
|
[--name=<name>]
|
||||||
[--output=<filename>]
|
[--output=<filename>]
|
||||||
[--permissive]
|
[--permissive]
|
||||||
[-d | --debug]
|
[-d | --debug]
|
||||||
|
|
@ -32,7 +32,7 @@ specified as 'input' and the surface phase input file should be specified as
|
||||||
'surface'.
|
'surface'.
|
||||||
|
|
||||||
The '--permissive' option allows certain recoverable parsing errors (e.g.
|
The '--permissive' option allows certain recoverable parsing errors (e.g.
|
||||||
duplicate transport data) to be ignored. The '--phase-id=<phase-id>' option
|
duplicate transport data) to be ignored. The '--name=<name>' option
|
||||||
is used to override default phase names (i.e. 'gas').
|
is used to override default phase names (i.e. 'gas').
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
@ -2025,7 +2025,7 @@ def convert_mech(input_file, thermo_file=None, transport_file=None, surface_file
|
||||||
|
|
||||||
def main(argv):
|
def main(argv):
|
||||||
|
|
||||||
longOptions = ['input=', 'thermo=', 'transport=', 'surface=', 'phase-id=',
|
longOptions = ['input=', 'thermo=', 'transport=', 'surface=', 'name=',
|
||||||
'output=', 'permissive', 'help', 'debug', 'quiet',
|
'output=', 'permissive', 'help', 'debug', 'quiet',
|
||||||
'no-validate', 'id=']
|
'no-validate', 'id=']
|
||||||
|
|
||||||
|
|
@ -2059,9 +2059,9 @@ def main(argv):
|
||||||
if '--id' in options:
|
if '--id' in options:
|
||||||
phase_name = options.get('--id', 'gas')
|
phase_name = options.get('--id', 'gas')
|
||||||
logging.warning("\nFutureWarning: "
|
logging.warning("\nFutureWarning: "
|
||||||
"option '--id=...' is superseded by '--phase-id=...'")
|
"option '--id=...' is superseded by '--name=...'")
|
||||||
else:
|
else:
|
||||||
phase_name = options.get('--phase-id', 'gas')
|
phase_name = options.get('--name', 'gas')
|
||||||
|
|
||||||
if not input_file and not thermo_file:
|
if not input_file and not thermo_file:
|
||||||
print('At least one of the arguments "--input=..." or "--thermo=..."'
|
print('At least one of the arguments "--input=..." or "--thermo=..."'
|
||||||
|
|
|
||||||
|
|
@ -33,19 +33,16 @@ class Solution(ThermoPhase, Kinetics, Transport):
|
||||||
|
|
||||||
If an input file defines multiple phases, the corresponding key in the
|
If an input file defines multiple phases, the corresponding key in the
|
||||||
*phases* map (in YAML), *name* (in CTI), or *id* (in XML) can be used
|
*phases* map (in YAML), *name* (in CTI), or *id* (in XML) can be used
|
||||||
to specify the desired phase via the ``phase_id`` keyword argument of
|
to specify the desired phase via the ``name`` keyword argument of
|
||||||
the constructor::
|
the constructor::
|
||||||
|
|
||||||
gas = ct.Solution('diamond.yaml', phase_id='gas')
|
gas = ct.Solution('diamond.yaml', name='gas')
|
||||||
diamond = ct.Solution('diamond.yaml', phase_id='diamond')
|
diamond = ct.Solution('diamond.yaml', name='diamond')
|
||||||
|
|
||||||
The name of the `Solution` object needs to be unique and defaults to the
|
The name of the `Solution` object defaults to the *phase* specified in the
|
||||||
*phase* specified in the input file. If another object using the same
|
input file. Once instatiated, a custom name can assigned via::
|
||||||
constituting information already exists, the name is automatically appended
|
|
||||||
by a suffix. A custom name can be set via the ``name`` keyword argument of
|
|
||||||
the constructor, i.e.::
|
|
||||||
|
|
||||||
gas = ct.Solution('gri30.yaml', name='my_custom_name')
|
gas.name = 'my_custom_name'
|
||||||
|
|
||||||
`Solution` objects can also be constructed using `Species` and `Reaction`
|
`Solution` objects can also be constructed using `Species` and `Reaction`
|
||||||
objects which can themselves either be imported from input files or defined
|
objects which can themselves either be imported from input files or defined
|
||||||
|
|
@ -54,7 +51,7 @@ class Solution(ThermoPhase, Kinetics, Transport):
|
||||||
spec = ct.Species.listFromFile('gri30.yaml')
|
spec = ct.Species.listFromFile('gri30.yaml')
|
||||||
rxns = ct.Reaction.listFromFile('gri30.yaml')
|
rxns = ct.Reaction.listFromFile('gri30.yaml')
|
||||||
gas = ct.Solution(thermo='IdealGas', kinetics='GasKinetics',
|
gas = ct.Solution(thermo='IdealGas', kinetics='GasKinetics',
|
||||||
species=spec, reactions=rxns)
|
species=spec, reactions=rxns, name='my_custom_name')
|
||||||
|
|
||||||
where the ``thermo`` and ``kinetics`` keyword arguments are strings
|
where the ``thermo`` and ``kinetics`` keyword arguments are strings
|
||||||
specifying the thermodynamic and kinetics model, respectively, and
|
specifying the thermodynamic and kinetics model, respectively, and
|
||||||
|
|
@ -99,9 +96,9 @@ class Interface(InterfacePhase, InterfaceKinetics):
|
||||||
in reactions need to be created and then passed in as a list in the
|
in reactions need to be created and then passed in as a list in the
|
||||||
``adjacent`` argument to the constructor::
|
``adjacent`` argument to the constructor::
|
||||||
|
|
||||||
gas = ct.Solution('diamond.yaml', phase_id='gas')
|
gas = ct.Solution('diamond.yaml', name='gas')
|
||||||
diamond = ct.Solution('diamond.yaml', phase_id='diamond')
|
diamond = ct.Solution('diamond.yaml', name='diamond')
|
||||||
diamond_surf = ct.Interface('diamond.yaml', phase_id='diamond_100',
|
diamond_surf = ct.Interface('diamond.yaml', name='diamond_100',
|
||||||
adjacent=[gas, diamond])
|
adjacent=[gas, diamond])
|
||||||
"""
|
"""
|
||||||
__slots__ = ('_phase_indices',)
|
__slots__ = ('_phase_indices',)
|
||||||
|
|
|
||||||
|
|
@ -371,8 +371,8 @@ cdef class InterfaceKinetics(Kinetics):
|
||||||
A kinetics manager for heterogeneous reaction mechanisms. The
|
A kinetics manager for heterogeneous reaction mechanisms. The
|
||||||
reactions are assumed to occur at an interface between bulk phases.
|
reactions are assumed to occur at an interface between bulk phases.
|
||||||
"""
|
"""
|
||||||
def __init__(self, infile='', phase_id='', adjacent=(), *args, **kwargs):
|
def __init__(self, infile='', name='', adjacent=(), *args, **kwargs):
|
||||||
super().__init__(infile, phase_id, adjacent, *args, **kwargs)
|
super().__init__(infile, name, adjacent, *args, **kwargs)
|
||||||
if pystr(self.kinetics.kineticsType()) not in ("Surf", "Edge"):
|
if pystr(self.kinetics.kineticsType()) not in ("Surf", "Edge"):
|
||||||
raise TypeError("Underlying Kinetics class is not of the correct type.")
|
raise TypeError("Underlying Kinetics class is not of the correct type.")
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -660,7 +660,7 @@ class cti2yamlTest(utilities.CanteraTest):
|
||||||
Path(self.test_work_dir).joinpath('ptcombust.yaml'))
|
Path(self.test_work_dir).joinpath('ptcombust.yaml'))
|
||||||
ctiGas, yamlGas = self.checkConversion('ptcombust')
|
ctiGas, yamlGas = self.checkConversion('ptcombust')
|
||||||
ctiSurf, yamlSurf = self.checkConversion('ptcombust', ct.Interface,
|
ctiSurf, yamlSurf = self.checkConversion('ptcombust', ct.Interface,
|
||||||
phase_id='Pt_surf', ctiphases=[ctiGas], yamlphases=[yamlGas])
|
name='Pt_surf', ctiphases=[ctiGas], yamlphases=[yamlGas])
|
||||||
|
|
||||||
self.checkKinetics(ctiGas, yamlGas, [500, 1200], [1e4, 3e5])
|
self.checkKinetics(ctiGas, yamlGas, [500, 1200], [1e4, 3e5])
|
||||||
self.checkThermo(ctiSurf, yamlSurf, [400, 800, 1600])
|
self.checkThermo(ctiSurf, yamlSurf, [400, 800, 1600])
|
||||||
|
|
@ -670,16 +670,16 @@ class cti2yamlTest(utilities.CanteraTest):
|
||||||
cti2yaml.convert(Path(self.cantera_data).joinpath('sofc.cti'),
|
cti2yaml.convert(Path(self.cantera_data).joinpath('sofc.cti'),
|
||||||
Path(self.test_work_dir).joinpath('sofc.yaml'))
|
Path(self.test_work_dir).joinpath('sofc.yaml'))
|
||||||
ctiGas, yamlGas = self.checkConversion('sofc')
|
ctiGas, yamlGas = self.checkConversion('sofc')
|
||||||
ctiMetal, yamlMetal = self.checkConversion('sofc', phase_id='metal')
|
ctiMetal, yamlMetal = self.checkConversion('sofc', name='metal')
|
||||||
ctiOxide, yamlOxide = self.checkConversion('sofc', phase_id='oxide_bulk')
|
ctiOxide, yamlOxide = self.checkConversion('sofc', name='oxide_bulk')
|
||||||
ctiMSurf, yamlMSurf = self.checkConversion('sofc', ct.Interface,
|
ctiMSurf, yamlMSurf = self.checkConversion('sofc', ct.Interface,
|
||||||
phase_id='metal_surface', ctiphases=[ctiGas, ctiMetal],
|
name='metal_surface', ctiphases=[ctiGas, ctiMetal],
|
||||||
yamlphases=[yamlGas, yamlMetal])
|
yamlphases=[yamlGas, yamlMetal])
|
||||||
ctiOSurf, yamlOSurf = self.checkConversion('sofc', ct.Interface,
|
ctiOSurf, yamlOSurf = self.checkConversion('sofc', ct.Interface,
|
||||||
phase_id='oxide_surface', ctiphases=[ctiGas, ctiOxide],
|
name='oxide_surface', ctiphases=[ctiGas, ctiOxide],
|
||||||
yamlphases=[yamlGas, yamlOxide])
|
yamlphases=[yamlGas, yamlOxide])
|
||||||
cti_tpb, yaml_tpb = self.checkConversion('sofc', ct.Interface,
|
cti_tpb, yaml_tpb = self.checkConversion('sofc', ct.Interface,
|
||||||
phase_id='tpb', ctiphases=[ctiMetal, ctiMSurf, ctiOSurf],
|
name='tpb', ctiphases=[ctiMetal, ctiMSurf, ctiOSurf],
|
||||||
yamlphases=[yamlMetal, yamlMSurf, yamlOSurf])
|
yamlphases=[yamlMetal, yamlMSurf, yamlOSurf])
|
||||||
|
|
||||||
self.checkThermo(ctiMSurf, yamlMSurf, [900, 1000, 1100])
|
self.checkThermo(ctiMSurf, yamlMSurf, [900, 1000, 1100])
|
||||||
|
|
@ -694,7 +694,7 @@ class cti2yamlTest(utilities.CanteraTest):
|
||||||
Path(self.test_work_dir).joinpath('liquidvapor.yaml'))
|
Path(self.test_work_dir).joinpath('liquidvapor.yaml'))
|
||||||
for name in ['water', 'nitrogen', 'methane', 'hydrogen', 'oxygen',
|
for name in ['water', 'nitrogen', 'methane', 'hydrogen', 'oxygen',
|
||||||
'hfc134a', 'carbondioxide', 'heptane']:
|
'hfc134a', 'carbondioxide', 'heptane']:
|
||||||
ctiPhase, yamlPhase = self.checkConversion('liquidvapor', phase_id=name)
|
ctiPhase, yamlPhase = self.checkConversion('liquidvapor', name=name)
|
||||||
self.checkThermo(ctiPhase, yamlPhase,
|
self.checkThermo(ctiPhase, yamlPhase,
|
||||||
[1.3 * ctiPhase.min_temp, 0.7 * ctiPhase.max_temp])
|
[1.3 * ctiPhase.min_temp, 0.7 * ctiPhase.max_temp])
|
||||||
|
|
||||||
|
|
@ -717,10 +717,10 @@ class cti2yamlTest(utilities.CanteraTest):
|
||||||
def test_diamond(self):
|
def test_diamond(self):
|
||||||
cti2yaml.convert(Path(self.cantera_data).joinpath('diamond.cti'),
|
cti2yaml.convert(Path(self.cantera_data).joinpath('diamond.cti'),
|
||||||
Path(self.test_work_dir).joinpath('diamond.yaml'))
|
Path(self.test_work_dir).joinpath('diamond.yaml'))
|
||||||
ctiGas, yamlGas = self.checkConversion('diamond', phase_id='gas')
|
ctiGas, yamlGas = self.checkConversion('diamond', name='gas')
|
||||||
ctiSolid, yamlSolid = self.checkConversion('diamond', phase_id='diamond')
|
ctiSolid, yamlSolid = self.checkConversion('diamond', name='diamond')
|
||||||
ctiSurf, yamlSurf = self.checkConversion('diamond',
|
ctiSurf, yamlSurf = self.checkConversion('diamond',
|
||||||
ct.Interface, phase_id='diamond_100', ctiphases=[ctiGas, ctiSolid],
|
ct.Interface, name='diamond_100', ctiphases=[ctiGas, ctiSolid],
|
||||||
yamlphases=[yamlGas, yamlSolid])
|
yamlphases=[yamlGas, yamlSolid])
|
||||||
self.checkThermo(ctiSolid, yamlSolid, [300, 500])
|
self.checkThermo(ctiSolid, yamlSolid, [300, 500])
|
||||||
self.checkThermo(ctiSurf, yamlSurf, [330, 490])
|
self.checkThermo(ctiSurf, yamlSurf, [330, 490])
|
||||||
|
|
@ -730,16 +730,16 @@ class cti2yamlTest(utilities.CanteraTest):
|
||||||
cti2yaml.convert(Path(self.cantera_data).joinpath('lithium_ion_battery.cti'),
|
cti2yaml.convert(Path(self.cantera_data).joinpath('lithium_ion_battery.cti'),
|
||||||
Path(self.test_work_dir).joinpath('lithium_ion_battery.yaml'))
|
Path(self.test_work_dir).joinpath('lithium_ion_battery.yaml'))
|
||||||
name = 'lithium_ion_battery'
|
name = 'lithium_ion_battery'
|
||||||
ctiAnode, yamlAnode = self.checkConversion(name, phase_id='anode')
|
ctiAnode, yamlAnode = self.checkConversion(name, name='anode')
|
||||||
ctiCathode, yamlCathode = self.checkConversion(name, phase_id='cathode')
|
ctiCathode, yamlCathode = self.checkConversion(name, name='cathode')
|
||||||
ctiMetal, yamlMetal = self.checkConversion(name, phase_id='electron')
|
ctiMetal, yamlMetal = self.checkConversion(name, name='electron')
|
||||||
ctiElyt, yamlElyt = self.checkConversion(name, phase_id='electrolyte')
|
ctiElyt, yamlElyt = self.checkConversion(name, name='electrolyte')
|
||||||
ctiAnodeInt, yamlAnodeInt = self.checkConversion(name,
|
ctiAnodeInt, yamlAnodeInt = self.checkConversion(name,
|
||||||
phase_id='edge_anode_electrolyte',
|
name='edge_anode_electrolyte',
|
||||||
ctiphases=[ctiAnode, ctiMetal, ctiElyt],
|
ctiphases=[ctiAnode, ctiMetal, ctiElyt],
|
||||||
yamlphases=[yamlAnode, yamlMetal, yamlElyt])
|
yamlphases=[yamlAnode, yamlMetal, yamlElyt])
|
||||||
ctiCathodeInt, yamlCathodeInt = self.checkConversion(name,
|
ctiCathodeInt, yamlCathodeInt = self.checkConversion(name,
|
||||||
phase_id='edge_cathode_electrolyte',
|
name='edge_cathode_electrolyte',
|
||||||
ctiphases=[ctiCathode, ctiMetal, ctiElyt],
|
ctiphases=[ctiCathode, ctiMetal, ctiElyt],
|
||||||
yamlphases=[yamlCathode, yamlMetal, yamlElyt])
|
yamlphases=[yamlCathode, yamlMetal, yamlElyt])
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -929,9 +929,9 @@ class TestConstPressureReactor(utilities.CanteraTest):
|
||||||
self.gas.TPX = 900, 25*ct.one_atm, 'CO:0.5, H2O:0.2'
|
self.gas.TPX = 900, 25*ct.one_atm, 'CO:0.5, H2O:0.2'
|
||||||
|
|
||||||
self.gas1 = ct.Solution('gri30.xml')
|
self.gas1 = ct.Solution('gri30.xml')
|
||||||
self.gas1.phase_id = 'gas'
|
self.gas1.name = 'gas'
|
||||||
self.gas2 = ct.Solution('gri30.xml')
|
self.gas2 = ct.Solution('gri30.xml')
|
||||||
self.gas2.phase_id = 'gas'
|
self.gas2.name = 'gas'
|
||||||
resGas = ct.Solution('gri30.xml')
|
resGas = ct.Solution('gri30.xml')
|
||||||
solid = ct.Solution('diamond.xml', 'diamond')
|
solid = ct.Solution('diamond.xml', 'diamond')
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -323,7 +323,7 @@ class TestThermoPhase(utilities.CanteraTest):
|
||||||
self.assertIn('something', self.phase.report())
|
self.assertIn('something', self.phase.report())
|
||||||
|
|
||||||
def test_phase(self):
|
def test_phase(self):
|
||||||
self.assertEqual(self.phase.phase_id, 'ohmech')
|
self.assertEqual(self.phase.name, 'ohmech')
|
||||||
warnings.simplefilter("always")
|
warnings.simplefilter("always")
|
||||||
|
|
||||||
with warnings.catch_warnings(record=True) as w:
|
with warnings.catch_warnings(record=True) as w:
|
||||||
|
|
@ -335,7 +335,7 @@ class TestThermoPhase(utilities.CanteraTest):
|
||||||
|
|
||||||
with warnings.catch_warnings(record=True) as w:
|
with warnings.catch_warnings(record=True) as w:
|
||||||
self.phase.ID = 'something'
|
self.phase.ID = 'something'
|
||||||
self.assertEqual(self.phase.phase_id, 'something')
|
self.assertEqual(self.phase.name, 'something')
|
||||||
self.assertEqual(len(w), 1)
|
self.assertEqual(len(w), 1)
|
||||||
self.assertTrue(issubclass(w[-1].category, DeprecationWarning))
|
self.assertTrue(issubclass(w[-1].category, DeprecationWarning))
|
||||||
self.assertIn("To be removed after Cantera 2.5. ",
|
self.assertIn("To be removed after Cantera 2.5. ",
|
||||||
|
|
@ -345,7 +345,7 @@ class TestThermoPhase(utilities.CanteraTest):
|
||||||
gas = ct.Solution('h2o2.cti', phaseid='ohmech')
|
gas = ct.Solution('h2o2.cti', phaseid='ohmech')
|
||||||
self.assertEqual(len(w), 1)
|
self.assertEqual(len(w), 1)
|
||||||
self.assertTrue(issubclass(w[-1].category, FutureWarning))
|
self.assertTrue(issubclass(w[-1].category, FutureWarning))
|
||||||
self.assertIn("Keyword 'phase_id' replaces 'phaseid'",
|
self.assertIn("Keyword 'name' replaces 'phaseid'",
|
||||||
str(w[-1].message))
|
str(w[-1].message))
|
||||||
|
|
||||||
def test_badLength(self):
|
def test_badLength(self):
|
||||||
|
|
@ -881,7 +881,7 @@ class ImportTest(utilities.CanteraTest):
|
||||||
Test the various ways of creating a Solution object
|
Test the various ways of creating a Solution object
|
||||||
"""
|
"""
|
||||||
def check(self, gas, phase, T, P, nSpec, nElem):
|
def check(self, gas, phase, T, P, nSpec, nElem):
|
||||||
self.assertEqual(gas.phase_id, phase)
|
self.assertEqual(gas.name, phase)
|
||||||
self.assertNear(gas.T, T)
|
self.assertNear(gas.T, T)
|
||||||
self.assertNear(gas.P, P)
|
self.assertNear(gas.P, P)
|
||||||
self.assertEqual(gas.n_species, nSpec)
|
self.assertEqual(gas.n_species, nSpec)
|
||||||
|
|
|
||||||
|
|
@ -290,36 +290,24 @@ cdef class ThermoPhase(_SolutionBase):
|
||||||
def __call__(self, *args, **kwargs):
|
def __call__(self, *args, **kwargs):
|
||||||
print(self.report(*args, **kwargs))
|
print(self.report(*args, **kwargs))
|
||||||
|
|
||||||
property phase_id:
|
|
||||||
"""
|
|
||||||
The identifier of the object. The default value corresponds to the
|
|
||||||
CTI/XML/YAML input file phase entry, and should remain unchanged.
|
|
||||||
"""
|
|
||||||
def __get__(self):
|
|
||||||
return pystr(self.thermo.id())
|
|
||||||
def __set__(self, phase_id):
|
|
||||||
# may consider removing/deprecating, but resetting of the phase name
|
|
||||||
# is required to associate surface kinetics (with phase name being 'gas')
|
|
||||||
self.thermo.setID(stringify(phase_id))
|
|
||||||
|
|
||||||
property ID:
|
property ID:
|
||||||
"""
|
"""
|
||||||
The identifier of the object. The default value corresponds to the
|
The identifier of the object. The default value corresponds to the
|
||||||
CTI/XML/YAML input file phase entry, and should remain unchanged.
|
CTI/XML/YAML input file phase entry.
|
||||||
|
|
||||||
.. deprecated:: 2.5
|
.. deprecated:: 2.5
|
||||||
|
|
||||||
To be deprecated with version 2.5, and removed thereafter.
|
To be deprecated with version 2.5, and removed thereafter.
|
||||||
Renamed to `phase_ID`.
|
Usage merged with `name`.
|
||||||
"""
|
"""
|
||||||
def __get__(self):
|
def __get__(self):
|
||||||
warnings.warn("To be removed after Cantera 2.5. "
|
warnings.warn("To be removed after Cantera 2.5. "
|
||||||
"Use 'phase' attribute instead", DeprecationWarning)
|
"Use 'name' attribute instead", DeprecationWarning)
|
||||||
return pystr(self.thermo.id())
|
return pystr(self.base.name())
|
||||||
def __set__(self, id_):
|
def __set__(self, id_):
|
||||||
warnings.warn("To be removed after Cantera 2.5. "
|
warnings.warn("To be removed after Cantera 2.5. "
|
||||||
"Use 'phase' attribute instead", DeprecationWarning)
|
"Use 'name' attribute instead", DeprecationWarning)
|
||||||
self.thermo.setID(stringify(id_))
|
self.base.setName(stringify(id_))
|
||||||
|
|
||||||
property basis:
|
property basis:
|
||||||
"""
|
"""
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,7 @@
|
||||||
//! @file Solution.cpp
|
/**
|
||||||
|
* @file Solution.cpp
|
||||||
|
* Definition file for class Solution.
|
||||||
|
*/
|
||||||
|
|
||||||
// This file is part of Cantera. See License.txt in the top-level directory or
|
// This file is part of Cantera. See License.txt in the top-level directory or
|
||||||
// at https://cantera.org/license.txt for license and copyright information.
|
// at https://cantera.org/license.txt for license and copyright information.
|
||||||
|
|
@ -11,16 +14,24 @@
|
||||||
namespace Cantera
|
namespace Cantera
|
||||||
{
|
{
|
||||||
|
|
||||||
Solution::Solution() :
|
Solution::Solution() {}
|
||||||
m_name("<Solution_name>")
|
|
||||||
{}
|
|
||||||
|
|
||||||
std::string Solution::name() const {
|
std::string Solution::name() const {
|
||||||
return m_name;
|
if (m_thermo) {
|
||||||
|
return m_thermo->name();
|
||||||
|
} else {
|
||||||
|
throw CanteraError("Solution::name()",
|
||||||
|
"Requires associated 'ThermoPhase'");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Solution::setName(const std::string& name){
|
void Solution::setName(const std::string& name) {
|
||||||
m_name = name;
|
if (m_thermo) {
|
||||||
|
m_thermo->setName(name);
|
||||||
|
} else {
|
||||||
|
throw CanteraError("Solution::setName()",
|
||||||
|
"Requires associated 'ThermoPhase'");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Solution::setThermoPhase(shared_ptr<ThermoPhase> thermo) {
|
void Solution::setThermoPhase(shared_ptr<ThermoPhase> thermo) {
|
||||||
|
|
@ -43,4 +54,5 @@ void Solution::setTransport(shared_ptr<Transport> transport) {
|
||||||
m_transport->setRoot(shared_from_this());
|
m_transport->setRoot(shared_from_this());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
} // namespace Cantera
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,6 @@
|
||||||
#include "cantera/thermo/Phase.h"
|
#include "cantera/thermo/Phase.h"
|
||||||
#include "cantera/base/utilities.h"
|
#include "cantera/base/utilities.h"
|
||||||
#include "cantera/base/stringUtils.h"
|
#include "cantera/base/stringUtils.h"
|
||||||
#include "cantera/base/Solution.h"
|
|
||||||
#include "cantera/base/ctml.h"
|
#include "cantera/base/ctml.h"
|
||||||
#include "cantera/thermo/ThermoFactory.h"
|
#include "cantera/thermo/ThermoFactory.h"
|
||||||
|
|
||||||
|
|
@ -75,26 +74,18 @@ std::string Phase::id() const
|
||||||
void Phase::setID(const std::string& id_)
|
void Phase::setID(const std::string& id_)
|
||||||
{
|
{
|
||||||
m_id = id_;
|
m_id = id_;
|
||||||
|
m_name = id_;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string Phase::name() const
|
std::string Phase::name() const
|
||||||
{
|
{
|
||||||
auto root = m_root.lock();
|
return m_name;
|
||||||
if (root) {
|
|
||||||
return root->name();
|
|
||||||
} else {
|
|
||||||
return m_name;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Phase::setName(const std::string& name)
|
void Phase::setName(const std::string& name)
|
||||||
{
|
{
|
||||||
auto root = m_root.lock();
|
m_name = name;
|
||||||
if (root) {
|
m_id = name;
|
||||||
root->setName(name);
|
|
||||||
} else {
|
|
||||||
m_name = name;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t Phase::nElements() const
|
size_t Phase::nElements() const
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue