[1D] Refactored Domain1D::save and Domain1D::restore

Derived class implementations now call the parent class method to save/restore
information represented in the parent class.
This commit is contained in:
Ray Speth 2013-03-07 18:51:23 +00:00
parent 65fbb10bda
commit 01bc55e1bb
6 changed files with 70 additions and 57 deletions

View file

@ -389,18 +389,30 @@ public:
//! Save the current solution for this domain into an XML_Node
/*!
* Base class version of the general domain1D save function. This
* base class version will throw an error condition. Inherited classes
* will know how to save the solution vector.
* Base class version of the general domain1D save function. Derived
* classes should call the base class method in addition to saving their
* own data.
*
* @param o XML_Node to save the solution to.
* @param sol Current value of the solution vector.
* The object will pick out which part of the solution
* vector pertains to this object.
* @return XML_Node created to represent this domain
*/
virtual void save(XML_Node& o, const doublereal* const sol) {
throw CanteraError("Domain1D::save","base class method called");
}
virtual XML_Node& save(XML_Node& o, const doublereal* const sol);
//! Restore the solution for this domain from an XML_Node
/*!
* Base class version of the general Domain1D restore function. Derived
* classes should call the base class method in addition to restoring
* their own data.
*
* @param o XML_Node for this domain
* @param soln Current value of the solution vector, local to this object.
* @param loglevel 0 to suppress all output; 1 to show warnings; 2 for
* verbose output
*/
virtual void restore(const XML_Node& dom, doublereal* soln, int loglevel);
size_t size() const {
return m_nv*m_points;
@ -531,8 +543,6 @@ public:
virtual void showSolution_s(std::ostream& s, const doublereal* x) {}
virtual void showSolution(const doublereal* x);
virtual void restore(const XML_Node& dom, doublereal* soln, int loglevel) {}
doublereal z(size_t jlocal) const {
return m_z[jlocal];
}

View file

@ -186,7 +186,7 @@ public:
virtual void init();
virtual void eval(size_t jg, doublereal* xg, doublereal* rg,
integer* diagg, doublereal rdt);
virtual void save(XML_Node& o, const doublereal* const soln);
virtual XML_Node& save(XML_Node& o, const doublereal* const soln);
virtual void restore(const XML_Node& dom, doublereal* soln, int loglevel);
protected:
@ -221,7 +221,7 @@ public:
virtual void eval(size_t jg, doublereal* xg, doublereal* rg,
integer* diagg, doublereal rdt);
virtual void save(XML_Node& o, const doublereal* const soln);
virtual XML_Node& save(XML_Node& o, const doublereal* const soln);
virtual void restore(const XML_Node& dom, doublereal* soln, int loglevel);
virtual void _finalize(const doublereal* x) {}
virtual void _getInitialSoln(doublereal* x) {
@ -253,7 +253,7 @@ public:
virtual void eval(size_t jg, doublereal* xg, doublereal* rg,
integer* diagg, doublereal rdt);
virtual void save(XML_Node& o, const doublereal* const soln);
virtual XML_Node& save(XML_Node& o, const doublereal* const soln);
virtual void restore(const XML_Node& dom, doublereal* soln, int loglevel);
virtual void _finalize(const doublereal* x) {
; //m_temp = x[0];
@ -286,7 +286,7 @@ public:
virtual void eval(size_t jg, doublereal* xg, doublereal* rg,
integer* diagg, doublereal rdt);
virtual void save(XML_Node& o, const doublereal* const soln);
virtual XML_Node& save(XML_Node& o, const doublereal* const soln);
virtual void restore(const XML_Node& dom, doublereal* soln, int loglevel);
virtual void _finalize(const doublereal* x) {
; //m_temp = x[0];
@ -340,7 +340,7 @@ public:
virtual void init();
virtual void eval(size_t jg, doublereal* xg, doublereal* rg,
integer* diagg, doublereal rdt);
virtual void save(XML_Node& o, const doublereal* const soln);
virtual XML_Node& save(XML_Node& o, const doublereal* const soln);
virtual void restore(const XML_Node& dom, doublereal* soln, int loglevel);
protected:
@ -375,7 +375,7 @@ public:
virtual void eval(size_t jg, doublereal* xg, doublereal* rg,
integer* diagg, doublereal rdt);
virtual void save(XML_Node& o, const doublereal* const soln);
virtual XML_Node& save(XML_Node& o, const doublereal* const soln);
virtual void restore(const XML_Node& dom, doublereal* soln, int loglevel);
virtual void _getInitialSoln(doublereal* x) {
@ -438,7 +438,7 @@ public:
virtual void eval(size_t jg, doublereal* xg, doublereal* rg,
integer* diagg, doublereal rdt);
virtual void save(XML_Node& o, const doublereal* const soln);
virtual XML_Node& save(XML_Node& o, const doublereal* const soln);
virtual void restore(const XML_Node& dom, doublereal* soln, int loglevel);
virtual void _getInitialSoln(doublereal* x) {

View file

@ -190,7 +190,7 @@ public:
* The object will pick out which part of the solution
* vector pertains to this object.
*/
virtual void save(XML_Node& o, const doublereal* const sol);
virtual XML_Node& save(XML_Node& o, const doublereal* const sol);
virtual void restore(const XML_Node& dom, doublereal* soln,
int loglevel);

View file

@ -122,6 +122,18 @@ eval(size_t jg, doublereal* xg, doublereal* rg,
}
}
XML_Node& Domain1D::save(XML_Node& o, const doublereal* const sol)
{
XML_Node& d = o.addChild("domain");
d.addAttribute("points", nPoints());
d.addAttribute("components", nComponents());
d.addAttribute("id", id());
return d;
}
void Domain1D::restore(const XML_Node& dom, doublereal* soln, int loglevel)
{
}
// called to set up initial grid, and after grid refinement
void Domain1D::setupGrid(size_t n, const doublereal* z)

View file

@ -754,7 +754,7 @@ size_t StFlow::componentIndex(const std::string& name) const
void StFlow::restore(const XML_Node& dom, doublereal* soln, int loglevel)
{
Domain1D::restore(dom, soln, loglevel);
vector<string> ignored;
size_t nsp = m_thermo->nSpecies();
vector_int did_species(nsp, 0);
@ -891,17 +891,14 @@ void StFlow::restore(const XML_Node& dom, doublereal* soln, int loglevel)
void StFlow::save(XML_Node& o, const doublereal* const sol)
XML_Node& StFlow::save(XML_Node& o, const doublereal* const sol)
{
size_t k;
Array2D soln(m_nv, m_points, sol + loc());
XML_Node& flow = (XML_Node&)o.addChild("domain");
XML_Node& flow = Domain1D::save(o, sol);
flow.addAttribute("type",flowType());
flow.addAttribute("id",m_id);
flow.addAttribute("points", double(m_points));
flow.addAttribute("components", double(m_nv));
if (m_desc != "") {
addString(flow,"description",m_desc);
@ -936,6 +933,7 @@ void StFlow::save(XML_Node& o, const doublereal* const sol)
addFloatArray(gv,m_thermo->speciesName(k),
x.size(),DATA_PTR(x),"","massFraction",0.0,1.0);
}
return flow;
}
void StFlow::setJac(MultiJac* jac)

View file

@ -238,15 +238,12 @@ eval(size_t jg, doublereal* xg, doublereal* rg,
}
void Inlet1D::
XML_Node& Inlet1D::
save(XML_Node& o, const doublereal* const soln)
{
const doublereal* s = soln + loc();
XML_Node& inlt = o.addChild("domain");
inlt.addAttribute("id",id());
inlt.addAttribute("points",1);
XML_Node& inlt = Domain1D::save(o, soln);
inlt.addAttribute("type","inlet");
inlt.addAttribute("components", double(nComponents()));
for (size_t k = 0; k < nComponents(); k++) {
ctml::addFloat(inlt, componentName(k), s[k], "", "",lowerBound(k), upperBound(k));
}
@ -254,11 +251,13 @@ save(XML_Node& o, const doublereal* const soln)
ctml::addFloat(inlt, "massFraction", m_yin[k], "",
m_flow->phase().speciesName(k));
}
return inlt;
}
void Inlet1D::
restore(const XML_Node& dom, doublereal* soln, int loglevel)
{
Domain1D::restore(dom, soln, loglevel);
soln[0] = m_mdot = ctml::getFloat(dom, "mdot", "massflowrate");
soln[1] = m_temp = ctml::getFloat(dom, "temperature", "temperature");
@ -325,19 +324,18 @@ eval(size_t jg, doublereal* xg, doublereal* rg,
diag[0] = 0;
}
void Empty1D::
XML_Node& Empty1D::
save(XML_Node& o, const doublereal* const soln)
{
XML_Node& symm = o.addChild("domain");
symm.addAttribute("id",id());
symm.addAttribute("points",1);
XML_Node& symm = Domain1D::save(o, soln);
symm.addAttribute("type","empty");
symm.addAttribute("components", double(nComponents()));
return symm;
}
void Empty1D::
restore(const XML_Node& dom, doublereal* soln, int loglevel)
{
Domain1D::restore(dom, soln, loglevel);
resize(1,1);
}
@ -416,19 +414,18 @@ eval(size_t jg, doublereal* xg, doublereal* rg,
}
void Symm1D::
XML_Node& Symm1D::
save(XML_Node& o, const doublereal* const soln)
{
XML_Node& symm = o.addChild("domain");
symm.addAttribute("id",id());
symm.addAttribute("points",1);
XML_Node& symm = Domain1D::save(o, soln);
symm.addAttribute("type","symmetry");
symm.addAttribute("components", double(nComponents()));
return symm;
}
void Symm1D::
restore(const XML_Node& dom, doublereal* soln, int loglevel)
{
Domain1D::restore(dom, soln, loglevel);
resize(1,1);
}
@ -526,19 +523,18 @@ eval(size_t jg, doublereal* xg, doublereal* rg,
}
void Outlet1D::
XML_Node& Outlet1D::
save(XML_Node& o, const doublereal* const soln)
{
XML_Node& outlt = o.addChild("domain");
outlt.addAttribute("id",id());
outlt.addAttribute("points",1);
XML_Node& outlt = Domain1D::save(o, soln);
outlt.addAttribute("type","outlet");
outlt.addAttribute("components", double(nComponents()));
return outlt;
}
void Outlet1D::
restore(const XML_Node& dom, doublereal* soln, int loglevel)
{
Domain1D::restore(dom, soln, loglevel);
resize(1,1);
}
@ -675,24 +671,23 @@ eval(size_t jg, doublereal* xg, doublereal* rg,
}
void OutletRes1D::
XML_Node& OutletRes1D::
save(XML_Node& o, const doublereal* const soln)
{
XML_Node& outlt = o.addChild("domain");
outlt.addAttribute("id",id());
outlt.addAttribute("points",1);
XML_Node& outlt = Domain1D::save(o, soln);
outlt.addAttribute("type","outletres");
outlt.addAttribute("components", double(nComponents()));
ctml::addFloat(outlt, "temperature", m_temp, "K");
for (size_t k=0; k < m_nsp; k++) {
ctml::addFloat(outlt, "massFraction", m_yres[k], "",
m_flow->phase().speciesName(k));
}
return outlt;
}
void OutletRes1D::
restore(const XML_Node& dom, doublereal* soln, int loglevel)
{
Domain1D::restore(dom, soln, loglevel);
m_temp = ctml::getFloat(dom, "temperature");
m_yres.assign(m_nsp, 0.0);
@ -777,24 +772,23 @@ eval(size_t jg, doublereal* xg, doublereal* rg,
}
}
void Surf1D::
XML_Node& Surf1D::
save(XML_Node& o, const doublereal* const soln)
{
const doublereal* s = soln + loc();
//XML_Node& inlt = o.addChild("inlet");
XML_Node& inlt = o.addChild("domain");
inlt.addAttribute("id",id());
inlt.addAttribute("points",1);
XML_Node& inlt = Domain1D::save(o, soln);
inlt.addAttribute("type","surface");
inlt.addAttribute("components", double(nComponents()));
for (size_t k = 0; k < nComponents(); k++) {
ctml::addFloat(inlt, componentName(k), s[k], "", "",0.0, 1.0);
}
return inlt;
}
void Surf1D::
restore(const XML_Node& dom, doublereal* soln, int loglevel)
{
Domain1D::restore(dom, soln, loglevel);
soln[0] = m_temp = ctml::getFloat(dom, "temperature", "temperature");
resize(1,1);
}
@ -938,25 +932,24 @@ eval(size_t jg, doublereal* xg, doublereal* rg,
}
}
void ReactingSurf1D::
XML_Node& ReactingSurf1D::
save(XML_Node& o, const doublereal* const soln)
{
const doublereal* s = soln + loc();
XML_Node& dom = o.addChild("domain");
dom.addAttribute("id",id());
dom.addAttribute("points",1);
XML_Node& dom = Domain1D::save(o, soln);
dom.addAttribute("type","surface");
dom.addAttribute("components", double(nComponents()));
ctml::addFloat(dom, "temperature", s[0], "K");
for (size_t k=0; k < m_nsp; k++) {
ctml::addFloat(dom, "coverage", s[k+1], "",
m_sphase->speciesName(k));
}
return dom;
}
void ReactingSurf1D::
restore(const XML_Node& dom, doublereal* soln, int loglevel)
{
Domain1D::restore(dom, soln, loglevel);
soln[0] = m_temp = ctml::getFloat(dom, "temperature");
m_fixed_cov.assign(m_nsp, 0.0);