diff --git a/include/cantera/thermo/HMWSoln.h b/include/cantera/thermo/HMWSoln.h
index 1dc878d9c..dc6187a79 100644
--- a/include/cantera/thermo/HMWSoln.h
+++ b/include/cantera/thermo/HMWSoln.h
@@ -2048,48 +2048,6 @@ public:
* -------------- Utilities -------------------------------
*/
-
- //! Initialization of a HMWSoln 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 a HMWSoln 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 initialization required after all species have
//! been added
/*!
diff --git a/src/thermo/HMWSoln.cpp b/src/thermo/HMWSoln.cpp
index 6454d1e23..541984549 100644
--- a/src/thermo/HMWSoln.cpp
+++ b/src/thermo/HMWSoln.cpp
@@ -139,7 +139,7 @@ HMWSoln::HMWSoln(std::string inputFile, std::string id) :
elambda[i] = 0.0;
elambda1[i] = 0.0;
}
- constructPhaseFile(inputFile, id);
+ initThermoFile(inputFile, id);
}
HMWSoln::HMWSoln(XML_Node& phaseRoot, std::string id) :
@@ -190,7 +190,7 @@ HMWSoln::HMWSoln(XML_Node& phaseRoot, std::string id) :
elambda[i] = 0.0;
elambda1[i] = 0.0;
}
- constructPhaseXML(phaseRoot, id);
+ importPhase(*findXMLPhase(&phaseRoot, id), this);
}
/*
@@ -481,7 +481,7 @@ HMWSoln::HMWSoln(int testProb) :
exit(EXIT_FAILURE);
}
- constructPhaseFile("HMW_NaCl.xml", "");
+ initThermoFile("HMW_NaCl.xml", "");
size_t i = speciesIndex("Cl-");
size_t j = speciesIndex("H+");
diff --git a/src/thermo/HMWSoln_input.cpp b/src/thermo/HMWSoln_input.cpp
index 27a38c87c..87c080efa 100644
--- a/src/thermo/HMWSoln_input.cpp
+++ b/src/thermo/HMWSoln_input.cpp
@@ -1047,66 +1047,12 @@ void HMWSoln::initThermo()
initLengths();
}
-/*
- * Import, construct, and initialize a HMWSoln phase
- * specification from an XML tree into the current object.
+/**
+ * Process the XML file after species are set up.
*
- * 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 HMWSoln::constructPhaseFile(std::string inputFile, std::string id)
-{
-
- if (inputFile.size() == 0) {
- throw CanteraError("HMWSoln:constructPhaseFile",
- "input file is null");
- }
- string path = findInputFile(inputFile);
- std::ifstream fin(path.c_str());
- if (!fin) {
- throw CanteraError("HMWSoln: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("HMWSoln: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.
+ * This gets called from importPhase(). It processes the XML file
+ * after the species are set up. This is the main routine for
+ * reading in activity coefficient parameters.
*
* @param phaseNode This object must be the phase node of a
* complete XML tree
@@ -1119,13 +1065,14 @@ void HMWSoln::constructPhaseFile(std::string inputFile, std::string id)
* to see if phaseNode is pointing to the phase
* with the correct id.
*/
-void HMWSoln::constructPhaseXML(XML_Node& phaseNode, std::string id)
+void HMWSoln::
+initThermoXML(XML_Node& phaseNode, std::string id)
{
string stemp;
if (id.size() > 0) {
string idp = phaseNode.id();
if (idp != id) {
- throw CanteraError("HMWSoln::constructPhaseXML",
+ throw CanteraError("HMWSoln::initThermoXML",
"phasenode and Id are incompatible");
}
}
@@ -1134,7 +1081,7 @@ void HMWSoln::constructPhaseXML(XML_Node& phaseNode, std::string id)
* Find the Thermo XML node
*/
if (!phaseNode.hasChild("thermo")) {
- throw CanteraError("HMWSoln::constructPhaseXML",
+ throw CanteraError("HMWSoln::initThermoXML",
"no thermo XML node");
}
XML_Node& thermoNode = phaseNode.child("thermo");
@@ -1159,27 +1106,11 @@ void HMWSoln::constructPhaseXML(XML_Node& phaseNode, std::string id)
} else if (formString == "solvent_volume") {
m_formGC = 2;
} else {
- throw CanteraError("HMWSoln::constructPhaseXML",
+ throw CanteraError("HMWSoln::initThermoXML",
"Unknown standardConc model: " + formString);
}
}
}
- /*
- * Get the Name of the Solvent:
- * solventName
- */
- string solventName = "";
- if (thermoNode.hasChild("solvent")) {
- XML_Node& scNode = thermoNode.child("solvent");
- vector nameSolventa;
- getStringArray(scNode, nameSolventa);
- int nsp = static_cast(nameSolventa.size());
- if (nsp != 1) {
- throw CanteraError("HMWSoln::constructPhaseXML",
- "badly formed solvent XML node");
- }
- solventName = nameSolventa[0];
- }
/*
* Determine the form of the Pitzer model,
@@ -1195,7 +1126,7 @@ void HMWSoln::constructPhaseXML(XML_Node& phaseNode, std::string id)
} else if (formString == "base") {
m_formPitzer = PITZERFORM_BASE;
} else {
- throw CanteraError("HMWSoln::constructPhaseXML",
+ throw CanteraError("HMWSoln::initThermoXML",
"Unknown Pitzer ActivityCoeff model: "
+ formString);
}
@@ -1215,7 +1146,7 @@ void HMWSoln::constructPhaseXML(XML_Node& phaseNode, std::string id)
} else if (formString == "complex" || formString == "complex1") {
m_formPitzerTemp = PITZER_TEMP_COMPLEX1;
} else {
- throw CanteraError("HMWSoln::constructPhaseXML",
+ throw CanteraError("HMWSoln::initThermoXML",
"Unknown Pitzer ActivityCoeff Temp model: "
+ formString);
}
@@ -1236,49 +1167,6 @@ void HMWSoln::constructPhaseXML(XML_Node& phaseNode, std::string id)
}
- /*
- * 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("HMWSoln::constructPhaseXML","importPhase failed ");
- }
-
-}
-
-/**
- * Process the XML file after species are set up.
- *
- * This gets called from importPhase(). It processes the XML file
- * after the species are set up. This is the main routine for
- * reading in activity coefficient parameters.
- *
- * @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 HMWSoln::
-initThermoXML(XML_Node& phaseNode, std::string id)
-{
- string stemp;
- /*
- * Find the Thermo XML node
- */
- if (!phaseNode.hasChild("thermo")) {
- throw CanteraError("HMWSoln::initThermoXML",
- "no thermo XML node");
- }
- XML_Node& thermoNode = phaseNode.child("thermo");
-
/*
* Get the Name of the Solvent:
* solventName
diff --git a/src/thermo/ThermoFactory.cpp b/src/thermo/ThermoFactory.cpp
index f5bea5aca..c0e78c883 100644
--- a/src/thermo/ThermoFactory.cpp
+++ b/src/thermo/ThermoFactory.cpp
@@ -249,9 +249,6 @@ ThermoPhase* newPhase(XML_Node& xmlphase)
ThermoPhase* t = newThermoPhase(model);
if (model == "singing cows") {
throw CanteraError(" newPhase", "Cows don't sing");
- } else if (model == "HMW") {
- HMWSoln* p = dynamic_cast(t);
- p->constructPhaseXML(xmlphase,"");
} else if (model == "IonsFromNeutralMolecule") {
IonsFromNeutralVPSSTP* p = dynamic_cast(t);
p->constructPhaseXML(xmlphase,"");
diff --git a/src/thermo/ThermoPhase.cpp b/src/thermo/ThermoPhase.cpp
index 1af6388be..498bc00f7 100644
--- a/src/thermo/ThermoPhase.cpp
+++ b/src/thermo/ThermoPhase.cpp
@@ -10,6 +10,7 @@
#include "cantera/thermo/ThermoPhase.h"
#include "cantera/base/mdp_allo.h"
#include "cantera/base/stringUtils.h"
+#include "cantera/thermo/ThermoFactory.h"
#include
#include
@@ -942,7 +943,7 @@ void ThermoPhase::initThermoFile(std::string inputFile, std::string id)
* The phase object automatically constructs an XML object.
* Use this object to store information.
*/
- XML_Node& phaseNode_XML = xml();
+ //XML_Node& phaseNode_XML = xml();
XML_Node* fxml = new XML_Node();
fxml->build(fin);
XML_Node* fxml_phase = findXMLPhase(fxml, id);
@@ -951,8 +952,12 @@ void ThermoPhase::initThermoFile(std::string inputFile, std::string id)
"ERROR: Can not find phase named " +
id + " in file named " + inputFile);
}
- fxml_phase->copy(&phaseNode_XML);
- initThermoXML(*fxml_phase, id);
+ //fxml_phase->copy(&phaseNode_XML);
+ //initThermoXML(*fxml_phase, id);
+ bool m_ok = importPhase(*fxml_phase, this);
+ if (!m_ok) {
+ throw CanteraError("ThermoPhase::initThermoFile","importPhase failed ");
+ }
delete fxml;
}
//=================================================================================================================