diff --git a/include/cantera/thermo/PhaseCombo_Interaction.h b/include/cantera/thermo/PhaseCombo_Interaction.h index a91b23aa4..a8693494b 100644 --- a/include/cantera/thermo/PhaseCombo_Interaction.h +++ b/include/cantera/thermo/PhaseCombo_Interaction.h @@ -435,47 +435,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/PhaseCombo_Interaction.cpp b/src/thermo/PhaseCombo_Interaction.cpp index 9e37e6c2f..caa309163 100644 --- a/src/thermo/PhaseCombo_Interaction.cpp +++ b/src/thermo/PhaseCombo_Interaction.cpp @@ -51,7 +51,7 @@ PhaseCombo_Interaction::PhaseCombo_Interaction(std::string inputFile, std::strin formMargules_(0), formTempModel_(0) { - constructPhaseFile(inputFile, id); + initThermoFile(inputFile, id); } //==================================================================================================================== // @@ -65,7 +65,7 @@ PhaseCombo_Interaction::PhaseCombo_Interaction(XML_Node& phaseRoot, std::string formMargules_(0), formTempModel_(0) { - constructPhaseXML(phaseRoot, id); + importPhase(*findXMLPhase(&phaseRoot, id), this); } //==================================================================================================================== @@ -160,7 +160,7 @@ PhaseCombo_Interaction::PhaseCombo_Interaction(int testProb) : { - constructPhaseFile("PhaseCombo_Interaction.xml", ""); + initThermoFile("PhaseCombo_Interaction.xml", ""); numBinaryInteractions_ = 1; @@ -230,122 +230,7 @@ int PhaseCombo_Interaction::eosType() const { return cPhaseCombo_Interaction; } -//==================================================================================================================== -/* - * 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. - * - * HKM - Checked for Transition - */ -void PhaseCombo_Interaction::constructPhaseFile(std::string inputFile, std::string id) -{ - if ((int) inputFile.size() == 0) { - throw CanteraError("PhaseCombo_Interaction:constructPhaseFile", - "input file is null"); - } - string path = findInputFile(inputFile); - std::ifstream fin(path.c_str()); - if (!fin) { - throw CanteraError("PhaseCombo_Interaction: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("PhaseCombo_Interaction: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. - * - * HKM - Checked for Transition - */ -void PhaseCombo_Interaction::constructPhaseXML(XML_Node& phaseNode, std::string id) -{ - string stemp; - if ((int) id.size() > 0) { - string idp = phaseNode.id(); - if (idp != id) { - throw CanteraError("PhaseCombo_Interaction::constructPhaseXML", - "phasenode and Id are incompatible"); - } - } - - /* - * Find the Thermo XML node - */ - if (!phaseNode.hasChild("thermo")) { - throw CanteraError("PhaseCombo_Interaction::constructPhaseXML", - "no thermo XML node"); - } - XML_Node& thermoNode = phaseNode.child("thermo"); - - /* - * Make sure that the thermo model is PhaseCombo_Interaction - */ - stemp = thermoNode.attrib("model"); - string formString = lowercase(stemp); - if (formString != "phasecombo_interaction") { - throw CanteraError("PhaseCombo_Interaction::constructPhaseXML", - "model name isn't PhaseCombo_Interaction: " + formString); - } - - /* - * Call the Cantera importPhase() function. This will import - * all of the species into the phase. This will also handle - * all of the species standard states - */ - bool m_ok = importPhase(phaseNode, this); - if (!m_ok) { - throw CanteraError("PhaseCombo_Interaction::constructPhaseXML","importPhase failed "); - } -} //==================================================================================================================== /* * ------------ Molar Thermodynamic Properties ---------------------- @@ -683,24 +568,30 @@ void PhaseCombo_Interaction::initThermoXML(XML_Node& phaseNode, std::string id) { string subname = "PhaseCombo_Interaction::initThermoXML"; string stemp; + 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: - * + * */ - + if (!phaseNode.hasChild("thermo")) { + throw CanteraError(subname, + "no thermo XML node"); + } XML_Node& thermoNode = phaseNode.child("thermo"); - string mStringa = thermoNode.attrib("model"); - string mString = lowercase(mStringa); - if (mString != "phasecombo_interaction") { - throw CanteraError(subname.c_str(), "Unknown thermo model: " + mStringa); + stemp = thermoNode.attrib("model"); + string formString = lowercase(stemp); + if (formString != "phasecombo_interaction") { + throw CanteraError(subname, + "model name isn't PhaseCombo_Interaction: " + formString); } - - /* - * 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