void Sim1D::restore(const std::string& fname, const std::string& id, int loglevel) { ifstream s(fname.c_str()); if (!s) throw CanteraError("Sim1D::restore", "could not open input file "+fname); XML_Node root; root.build(s); s.close(); XML_Node* f = root.findID(id); if (!f) { throw CanteraError("Sim1D::restore","No solution with id = "+id); } vector<XML_Node*> xd; f->getChildren("domain", xd); if (xd.size() != m_nd) { throw CanteraError("Sim1D::restore", "Solution does not contain the " " correct number of domains. Found " + int2str(xd.size()) + "expected " + int2str(m_nd) + ".\n"); } size_t sz = 0; for (size_t m = 0; m < m_nd; m++) { if (loglevel > 0 && xd[m]->attrib("id") != domain(m).id()) { writelog("Warning: domain names do not match: '" + (*xd[m])["id"] + + "' and '" + domain(m).id() + "'\n"); } sz += domain(m).nComponents() * intValue((*xd[m])["points"]); } m_x.resize(sz); m_xnew.resize(sz); for (size_t m = 0; m < m_nd; m++) { domain(m).restore(*xd[m], DATA_PTR(m_x) + domain(m).loc(), loglevel); } resize(); finalize(); }