53 std::vector<std::string> dynamicsList;
54 for (
size_t i = 0; i < momentaLists.size(); i++) {
55 std::string dynamicsString =
"dynamics::" + momentaLists[i][0] + momentaLists[i][1] +
"," +
56 momentaLists[i][2] +
"," + momentaLists[i][3] +
"," +
57 momentaLists[i][4] +
">," + equilibriaList[i] +
"," +
58 collisionList[i] +
",Default>";
59 dynamicsList.push_back(dynamicsString);
66 tinyxml2::XMLDocument doc;
67 if (doc.LoadFile(filename.c_str()) != tinyxml2::XML_SUCCESS) {
68 std::cerr <<
"Failed to load file: " << filename << std::endl;
72 tinyxml2::XMLElement* paramElement = doc.FirstChildElement(
"Param");
74 std::cerr <<
"No 'Param' element found in XML. Exiting.\n";
78 tinyxml2::XMLElement* tuplesElement = paramElement->FirstChildElement(
"Methods");
80 std::cerr <<
"No 'Methods' element found in 'Param'. Exiting.\n";
84 std::vector<std::string> dynamics;
87 for (tinyxml2::XMLElement* mapElement = tuplesElement->FirstChildElement(
"Map");
88 mapElement; mapElement = mapElement->NextSiblingElement(
"Map")) {
89 for (tinyxml2::XMLElement* dynamicElement = mapElement->FirstChildElement(
"Dynamic");
90 dynamicElement; dynamicElement = dynamicElement->NextSiblingElement(
"Dynamic")) {
91 std::string dynamicString;
93 clout << dynamicString << std::endl;
94 dynamics.push_back(
"dynamics::Tuple<" + dynamicString +
",Default>");
105 tinyxml2::XMLElement* childElement = element->FirstChildElement();
107 bool hasTextContent =
false;
108 while (childElement) {
109 if (hasTextContent) {
110 dynamicString +=
",";
112 if (childElement->FirstChildElement()) {
113 dynamicString += childElement->Value();
114 dynamicString +=
"<";
116 dynamicString +=
">";
118 dynamicString += childElement->Value();
119 hasTextContent =
true;
121 childElement = childElement->NextSiblingElement();
127 if (!dynamicElement) {
131 tinyxml2::XMLElement* momentaElement = dynamicElement->FirstChildElement(
"Momenta");
132 tinyxml2::XMLElement* equilibriaElement = dynamicElement->FirstChildElement(
"Equilibria");
133 tinyxml2::XMLElement* collisionElement = dynamicElement->FirstChildElement(
"Collision");
135 if (momentaElement) {
136 dynamicString +=
"Momenta<";
138 dynamicString +=
">,";
141 if (equilibriaElement) {
142 dynamicString += equilibriaElement->FirstChild()->Value();
143 dynamicString +=
",";
146 if (collisionElement) {
150 if (!dynamicString.empty() && dynamicString.back() ==
',') {
151 dynamicString.pop_back();
156 tinyxml2::XMLDocument doc;
157 if (doc.LoadFile(filename.c_str()) != tinyxml2::XML_SUCCESS) {
158 std::cerr <<
"Failed to load file: " << filename << std::endl;
162 tinyxml2::XMLElement* paramElement = doc.FirstChildElement(
"Param");
164 std::cerr <<
"No 'Param' element found in XML. Exiting.\n";
168 tinyxml2::XMLElement* tuplesElement = paramElement->FirstChildElement(
"Methods");
169 if (!tuplesElement) {
170 std::cerr <<
"No 'Methods' element found in 'Param'. Exiting.\n";
175 for (tinyxml2::XMLElement* mapElement = tuplesElement->FirstChildElement(
"Map");
176 mapElement; mapElement = mapElement->NextSiblingElement(
"Map")) {
177 tinyxml2::XMLElement* indicatorElement = mapElement->FirstChildElement(
"Indicator");
178 if (indicatorElement) {
179 const char* indicatorText = indicatorElement->GetText();
181 indicators.push_back(std::stoi(indicatorText));
189 tinyxml2::XMLDocument doc;
190 if (doc.LoadFile(filename.c_str()) != tinyxml2::XML_SUCCESS) {
191 std::cerr <<
"Failed to load file: " << filename << std::endl;
195 tinyxml2::XMLElement* paramElement = doc.FirstChildElement(
"Param");
197 std::cerr <<
"No 'Param' element found in XML. Exiting.\n";
201 tinyxml2::XMLElement* methodsElement = paramElement->FirstChildElement(
"Methods");
202 if (!methodsElement) {
203 std::cerr <<
"No 'Methods' element found in 'Param'. Exiting.\n";
207 std::map<std::string, float> parameterMap;
210 for (tinyxml2::XMLElement* mapElement = methodsElement->FirstChildElement(
"Map");
211 mapElement; mapElement = mapElement->NextSiblingElement(
"Map")) {
212 tinyxml2::XMLElement* dynamicElement = mapElement->FirstChildElement(
"Dynamic");
213 if (!dynamicElement) {
214 std::cerr <<
"No 'Dynamic' element found in 'Map'. Skipping.\n";
218 tinyxml2::XMLElement* parameterElement = dynamicElement->FirstChildElement(
"Parameter");
219 if (parameterElement) {
221 for (tinyxml2::XMLElement* childElement = parameterElement->FirstChildElement();
222 childElement; childElement = childElement->NextSiblingElement()) {
223 std::string tagName = childElement->Value();
224 std::string tagValue = childElement->GetText() ? childElement->GetText() :
"";
226 float value = std::stof(tagValue);
227 parameterMap[tagName] = value;
228 }
catch (
const std::invalid_argument& e) {
229 std::cerr <<
"Invalid value for tag " << tagName <<
": " << tagValue << std::endl;
230 }
catch (
const std::out_of_range& e) {
231 std::cerr <<
"Value out of range for tag " << tagName <<
": " << tagValue << std::endl;