From b860262fae01bc64c8bd1c3f0f3a430de48b6657 Mon Sep 17 00:00:00 2001 From: Ray Speth Date: Wed, 8 Aug 2012 22:16:16 +0000 Subject: [PATCH] Removed constructPhaseFile and constructPhaseXML methods from IonsFromNeutralVPSSTP --- .../cantera/thermo/IonsFromNeutralVPSSTP.h | 61 ------ src/thermo/IonsFromNeutralVPSSTP.cpp | 197 +++++------------- src/thermo/ThermoFactory.cpp | 9 +- 3 files changed, 57 insertions(+), 210 deletions(-) diff --git a/include/cantera/thermo/IonsFromNeutralVPSSTP.h b/include/cantera/thermo/IonsFromNeutralVPSSTP.h index 78c107aa7..f85b04e2c 100644 --- a/include/cantera/thermo/IonsFromNeutralVPSSTP.h +++ b/include/cantera/thermo/IonsFromNeutralVPSSTP.h @@ -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 diff --git a/src/thermo/IonsFromNeutralVPSSTP.cpp b/src/thermo/IonsFromNeutralVPSSTP.cpp index 30668b6a9..d984341d8 100644 --- a/src/thermo/IonsFromNeutralVPSSTP.cpp +++ b/src/thermo/IonsFromNeutralVPSSTP.cpp @@ -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& 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 diff --git a/src/thermo/ThermoFactory.cpp b/src/thermo/ThermoFactory.cpp index c0e78c883..36610892e 100644 --- a/src/thermo/ThermoFactory.cpp +++ b/src/thermo/ThermoFactory.cpp @@ -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(t); - p->constructPhaseXML(xmlphase,""); - } else { - importPhase(xmlphase, t); - } + importPhase(xmlphase, t); return t; }