diff --git a/include/cantera/thermo/MolarityIonicVPSSTP.h b/include/cantera/thermo/MolarityIonicVPSSTP.h index 8d1fec7dc..e94897e3e 100644 --- a/include/cantera/thermo/MolarityIonicVPSSTP.h +++ b/include/cantera/thermo/MolarityIonicVPSSTP.h @@ -141,47 +141,6 @@ public: */ virtual int eosType() const; - //! Initialization of a phase using an xml file - /*! - * This routine is a precursor to - * 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 a 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); - /** * @} * @name Molar Thermodynamic Properties diff --git a/src/thermo/MolarityIonicVPSSTP.cpp b/src/thermo/MolarityIonicVPSSTP.cpp index 517a9a2fd..253fd7f1c 100644 --- a/src/thermo/MolarityIonicVPSSTP.cpp +++ b/src/thermo/MolarityIonicVPSSTP.cpp @@ -63,7 +63,7 @@ MolarityIonicVPSSTP::MolarityIonicVPSSTP(std::string inputFile, std::string id) numPassThroughSpecies_(0), neutralPBindexStart(0) { - constructPhaseFile(inputFile, id); + initThermoFile(inputFile, id); } //==================================================================================================================== MolarityIonicVPSSTP::MolarityIonicVPSSTP(XML_Node& phaseRoot, std::string id) : @@ -76,7 +76,7 @@ MolarityIonicVPSSTP::MolarityIonicVPSSTP(XML_Node& phaseRoot, std::string id) : numPassThroughSpecies_(0), neutralPBindexStart(0) { - constructPhaseXML(phaseRoot, id); + importPhase(*findXMLPhase(&phaseRoot, id), this); } //==================================================================================================================== /* @@ -167,120 +167,6 @@ int MolarityIonicVPSSTP::eosType() const 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 MolarityIonicVPSSTP::constructPhaseFile(std::string inputFile, std::string id) -{ - - if ((int) inputFile.size() == 0) { - throw CanteraError("MolarityIonicVPSSTP:constructPhaseFile", - "input file is null"); - } - string path = findInputFile(inputFile); - std::ifstream fin(path.c_str()); - if (!fin) { - throw CanteraError("MolarityIonicVPSSTP: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("MolarityIonicVPSSTP: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 MolarityIonicVPSSTP::constructPhaseXML(XML_Node& phaseNode, std::string id) -{ - string stemp; - if ((int) id.size() > 0) { - string idp = phaseNode.id(); - if (idp != id) { - throw CanteraError("MolarityIonicVPSSTP::constructPhaseXML", - "phasenode and Id are incompatible"); - } - } - - /* - * Find the Thermo XML node - */ - if (!phaseNode.hasChild("thermo")) { - throw CanteraError("MolarityIonicVPSSTP::constructPhaseXML", - "no thermo XML node"); - } - XML_Node& thermoNode = phaseNode.child("thermo"); - - /* - * Make sure that the thermo model is MolarityIonic - */ - stemp = thermoNode.attrib("model"); - string formString = lowercase(stemp); - if (formString != "molarityionicvpss" && formString != "molarityionicvpsstp") { - throw CanteraError("MolarityIonicVPSSTP::constructPhaseXML", - "model name isn't MolarityIonicVPSSTP: " + formString); - } - - /* - * 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("MolarityIonicVPSSTP::constructPhaseXML","importPhase failed "); - } - -} //==================================================================================================================== /* * ------------ Molar Thermodynamic Properties ---------------------- @@ -684,11 +570,22 @@ void MolarityIonicVPSSTP::initThermoXML(XML_Node& phaseNode, std::string id) { std::string subname = "MolarityIonicVPSSTP::initThermoXML"; std::string stemp; - /* - * Check on the thermo field. Must have: - * - */ + if ((int) id.size() > 0) { + string idp = phaseNode.id(); + if (idp != id) { + throw CanteraError(subname, "phasenode and Id are incompatible"); + } + } + + /* + * Check on the thermo field. Must have one of: + * + * + */ + if (!phaseNode.hasChild("thermo")) { + throw CanteraError(subname, "no thermo XML node"); + } XML_Node& thermoNode = phaseNode.child("thermo"); std::string mStringa = thermoNode.attrib("model"); std::string mString = lowercase(mStringa); @@ -696,10 +593,7 @@ void MolarityIonicVPSSTP::initThermoXML(XML_Node& phaseNode, std::string id) throw CanteraError(subname.c_str(), "Unknown thermo model: " + mStringa + " - This object only knows \"MolarityIonicVPSSTP\" "); } - /* - * Go get all of the coefficients and factors in the - * activityCoefficients XML block - */ + /* * Go get all of the coefficients and factors in the * activityCoefficients XML block