Removed constructPhaseFile and constructPhaseXML methods from IonsFromNeutralVPSSTP
This commit is contained in:
parent
ff5ca0ea1a
commit
b860262fae
3 changed files with 57 additions and 210 deletions
|
|
@ -581,67 +581,6 @@ public:
|
|||
|
||||
//@}
|
||||
|
||||
/**
|
||||
* @name Chemical Equilibrium
|
||||
* Routines that implement the Chemical equilibrium capability
|
||||
* for a single phase, based on the element-potential method.
|
||||
* @{
|
||||
*/
|
||||
|
||||
|
||||
|
||||
//@}
|
||||
|
||||
|
||||
|
||||
/// The following methods are used in the process of constructing
|
||||
/// the phase and setting its parameters from a specification in an
|
||||
/// input file. They are not normally used in application programs.
|
||||
/// To see how they are used, see files importCTML.cpp and
|
||||
/// ThermoFactory.cpp.
|
||||
|
||||
//! Initialization of an IonsFromNeutralVPSSTP phase using an xml file
|
||||
/*!
|
||||
* This routine is a precursor to initThermo(XML_Node*)
|
||||
* routine, which does most of the work.
|
||||
*
|
||||
* @param inputFile XML file containing the description of the
|
||||
* phase
|
||||
*
|
||||
* @param id Optional parameter identifying the name of the
|
||||
* phase. If none is given, the first XML
|
||||
* phase element will be used.
|
||||
*/
|
||||
void constructPhaseFile(std::string inputFile, std::string id);
|
||||
|
||||
//! Import and initialize an IonsFromNeutralVPSSTP phase
|
||||
//! specification in an XML tree into the current object.
|
||||
/*!
|
||||
* Here we read an XML description of the phase.
|
||||
* We import descriptions of the elements that make up the
|
||||
* species in a phase.
|
||||
* We import information about the species, including their
|
||||
* reference state thermodynamic polynomials. We then freeze
|
||||
* the state of the species.
|
||||
*
|
||||
* Then, we read the species molar volumes from the xml
|
||||
* tree to finish the initialization.
|
||||
*
|
||||
* @param phaseNode This object must be the phase node of a
|
||||
* complete XML tree
|
||||
* description of the phase, including all of the
|
||||
* species data. In other words while "phase" must
|
||||
* point to an XML phase object, it must have
|
||||
* sibling nodes "speciesData" that describe
|
||||
* the species in the phase.
|
||||
*
|
||||
* @param id ID of the phase. If nonnull, a check is done
|
||||
* to see if phaseNode is pointing to the phase
|
||||
* with the correct id.
|
||||
*/
|
||||
void constructPhaseXML(XML_Node& phaseNode, std::string id);
|
||||
|
||||
|
||||
/*!
|
||||
* @internal Initialize. This method is provided to allow
|
||||
* subclasses to perform any initialization required after all
|
||||
|
|
|
|||
|
|
@ -99,7 +99,7 @@ IonsFromNeutralVPSSTP::IonsFromNeutralVPSSTP(std::string inputFile, std::string
|
|||
if (neutralPhase) {
|
||||
IOwnNThermoPhase_ = false;
|
||||
}
|
||||
constructPhaseFile(inputFile, id);
|
||||
initThermoFile(inputFile, id);
|
||||
}
|
||||
//====================================================================================================================
|
||||
IonsFromNeutralVPSSTP::IonsFromNeutralVPSSTP(XML_Node& phaseRoot, std::string id,
|
||||
|
|
@ -122,7 +122,7 @@ IonsFromNeutralVPSSTP::IonsFromNeutralVPSSTP(XML_Node& phaseRoot, std::string id
|
|||
if (neutralPhase) {
|
||||
IOwnNThermoPhase_ = false;
|
||||
}
|
||||
constructPhaseXML(phaseRoot, id);
|
||||
importPhase(*findXMLPhase(&phaseRoot, id), this);
|
||||
}
|
||||
|
||||
//====================================================================================================================
|
||||
|
|
@ -962,145 +962,6 @@ doublereal IonsFromNeutralVPSSTP::err(std::string msg) const
|
|||
+msg+" called. Equation of state type: "+int2str(eosType()));
|
||||
return 0;
|
||||
}
|
||||
/*
|
||||
* Import, construct, and initialize a phase
|
||||
* specification from an XML tree into the current object.
|
||||
*
|
||||
* This routine is a precursor to constructPhaseXML(XML_Node*)
|
||||
* routine, which does most of the work.
|
||||
*
|
||||
* @param infile XML file containing the description of the
|
||||
* phase
|
||||
*
|
||||
* @param id Optional parameter identifying the name of the
|
||||
* phase. If none is given, the first XML
|
||||
* phase element will be used.
|
||||
*/
|
||||
void IonsFromNeutralVPSSTP::constructPhaseFile(std::string inputFile, std::string id)
|
||||
{
|
||||
|
||||
if (inputFile.size() == 0) {
|
||||
throw CanteraError("MargulesVPSSTP:constructPhaseFile",
|
||||
"input file is null");
|
||||
}
|
||||
string path = findInputFile(inputFile);
|
||||
std::ifstream fin(path.c_str());
|
||||
if (!fin) {
|
||||
throw CanteraError("MargulesVPSSTP:constructPhaseFile","could not open "
|
||||
+path+" for reading.");
|
||||
}
|
||||
/*
|
||||
* The phase object automatically constructs an XML object.
|
||||
* Use this object to store information.
|
||||
*/
|
||||
XML_Node& phaseNode_XML = xml();
|
||||
XML_Node* fxml = new XML_Node();
|
||||
fxml->build(fin);
|
||||
XML_Node* fxml_phase = findXMLPhase(fxml, id);
|
||||
if (!fxml_phase) {
|
||||
throw CanteraError("MargulesVPSSTP:constructPhaseFile",
|
||||
"ERROR: Can not find phase named " +
|
||||
id + " in file named " + inputFile);
|
||||
}
|
||||
fxml_phase->copy(&phaseNode_XML);
|
||||
constructPhaseXML(*fxml_phase, id);
|
||||
delete fxml;
|
||||
}
|
||||
|
||||
/*
|
||||
* Import, construct, and initialize a HMWSoln phase
|
||||
* specification from an XML tree into the current object.
|
||||
*
|
||||
* Most of the work is carried out by the cantera base
|
||||
* routine, importPhase(). That routine imports all of the
|
||||
* species and element data, including the standard states
|
||||
* of the species.
|
||||
*
|
||||
* Then, In this routine, we read the information
|
||||
* particular to the specification of the activity
|
||||
* coefficient model for the Pitzer parameterization.
|
||||
*
|
||||
* We also read information about the molar volumes of the
|
||||
* standard states if present in the XML file.
|
||||
*
|
||||
* @param phaseNode This object must be the phase node of a
|
||||
* complete XML tree
|
||||
* description of the phase, including all of the
|
||||
* species data. In other words while "phase" must
|
||||
* point to an XML phase object, it must have
|
||||
* sibling nodes "speciesData" that describe
|
||||
* the species in the phase.
|
||||
* @param id ID of the phase. If nonnull, a check is done
|
||||
* to see if phaseNode is pointing to the phase
|
||||
* with the correct id.
|
||||
*/
|
||||
void IonsFromNeutralVPSSTP::constructPhaseXML(XML_Node& phaseNode, std::string id)
|
||||
{
|
||||
string stemp;
|
||||
if (id.size() > 0) {
|
||||
string idp = phaseNode.id();
|
||||
if (idp != id) {
|
||||
throw CanteraError("IonsFromNeutralVPSSTP::constructPhaseXML",
|
||||
"phasenode and Id are incompatible");
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Find the Thermo XML node
|
||||
*/
|
||||
if (!phaseNode.hasChild("thermo")) {
|
||||
throw CanteraError("IonsFromNeutralVPSSTP::constructPhaseXML",
|
||||
"no thermo XML node");
|
||||
}
|
||||
XML_Node& thermoNode = phaseNode.child("thermo");
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Make sure that the thermo model is IonsFromNeutralMolecule
|
||||
*/
|
||||
stemp = thermoNode.attrib("model");
|
||||
string formString = lowercase(stemp);
|
||||
if (formString != "ionsfromneutralmolecule") {
|
||||
throw CanteraError("IonsFromNeutralVPSSTP::constructPhaseXML",
|
||||
"model name isn't IonsFromNeutralMolecule: " + formString);
|
||||
}
|
||||
|
||||
/*
|
||||
* Find the Neutral Molecule Phase
|
||||
*/
|
||||
if (!thermoNode.hasChild("neutralMoleculePhase")) {
|
||||
throw CanteraError("IonsFromNeutralVPSSTP::constructPhaseXML",
|
||||
"no neutralMoleculePhase XML node");
|
||||
}
|
||||
XML_Node& neutralMoleculeNode = thermoNode.child("neutralMoleculePhase");
|
||||
|
||||
string nsource = neutralMoleculeNode["datasrc"];
|
||||
XML_Node* neut_ptr = get_XML_Node(nsource, 0);
|
||||
if (!neut_ptr) {
|
||||
throw CanteraError("IonsFromNeutralVPSSTP::constructPhaseXML",
|
||||
"neut_ptr = 0");
|
||||
}
|
||||
|
||||
/*
|
||||
* Create the neutralMolecule ThermoPhase if we haven't already
|
||||
*/
|
||||
if (!neutralMoleculePhase_) {
|
||||
neutralMoleculePhase_ = newPhase(*neut_ptr);
|
||||
}
|
||||
|
||||
/*
|
||||
* Call the Cantera importPhase() function. This will import
|
||||
* all of the species into the phase. This will also handle
|
||||
* all of the solvent and solute standard states
|
||||
*/
|
||||
bool m_ok = importPhase(phaseNode, this);
|
||||
if (!m_ok) {
|
||||
throw CanteraError("IonsFromNeutralVPSSTP::constructPhaseXML",
|
||||
"importPhase failed ");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//====================================================================================================================
|
||||
/*
|
||||
|
|
@ -1198,6 +1059,60 @@ static double factorOverlap(const std::vector<std::string>& elnamesVN ,
|
|||
*/
|
||||
void IonsFromNeutralVPSSTP::initThermoXML(XML_Node& phaseNode, std::string id)
|
||||
{
|
||||
string stemp;
|
||||
if (id.size() > 0) {
|
||||
string idp = phaseNode.id();
|
||||
if (idp != id) {
|
||||
throw CanteraError("IonsFromNeutralVPSSTP::initThermoXML",
|
||||
"phasenode and Id are incompatible");
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Find the Thermo XML node
|
||||
*/
|
||||
if (!phaseNode.hasChild("thermo")) {
|
||||
throw CanteraError("IonsFromNeutralVPSSTP::initThermoXML",
|
||||
"no thermo XML node");
|
||||
}
|
||||
XML_Node& thermoNode = phaseNode.child("thermo");
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Make sure that the thermo model is IonsFromNeutralMolecule
|
||||
*/
|
||||
stemp = thermoNode.attrib("model");
|
||||
string formString = lowercase(stemp);
|
||||
if (formString != "ionsfromneutralmolecule") {
|
||||
throw CanteraError("IonsFromNeutralVPSSTP::initThermoXML",
|
||||
"model name isn't IonsFromNeutralMolecule: " + formString);
|
||||
}
|
||||
|
||||
/*
|
||||
* Find the Neutral Molecule Phase
|
||||
*/
|
||||
if (!thermoNode.hasChild("neutralMoleculePhase")) {
|
||||
throw CanteraError("IonsFromNeutralVPSSTP::initThermoXML",
|
||||
"no neutralMoleculePhase XML node");
|
||||
}
|
||||
XML_Node& neutralMoleculeNode = thermoNode.child("neutralMoleculePhase");
|
||||
|
||||
string nsource = neutralMoleculeNode["datasrc"];
|
||||
XML_Node* neut_ptr = get_XML_Node(nsource, 0);
|
||||
if (!neut_ptr) {
|
||||
throw CanteraError("IonsFromNeutralVPSSTP::initThermoXML",
|
||||
"neut_ptr = 0");
|
||||
}
|
||||
|
||||
/*
|
||||
* Create the neutralMolecule ThermoPhase if we haven't already
|
||||
*/
|
||||
if (!neutralMoleculePhase_) {
|
||||
neutralMoleculePhase_ = newPhase(*neut_ptr);
|
||||
}
|
||||
|
||||
|
||||
size_t k;
|
||||
/*
|
||||
* variables that need to be populated
|
||||
|
|
|
|||
|
|
@ -247,14 +247,7 @@ ThermoPhase* newPhase(XML_Node& xmlphase)
|
|||
const XML_Node& th = xmlphase.child("thermo");
|
||||
string model = th["model"];
|
||||
ThermoPhase* t = newThermoPhase(model);
|
||||
if (model == "singing cows") {
|
||||
throw CanteraError(" newPhase", "Cows don't sing");
|
||||
} else if (model == "IonsFromNeutralMolecule") {
|
||||
IonsFromNeutralVPSSTP* p = dynamic_cast<IonsFromNeutralVPSSTP*>(t);
|
||||
p->constructPhaseXML(xmlphase,"");
|
||||
} else {
|
||||
importPhase(xmlphase, t);
|
||||
}
|
||||
importPhase(xmlphase, t);
|
||||
return t;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue