13 template <
class ObserveMethodType>
14 void RegressionTestBase<ObserveMethodType>::writeToXml(ObservedQuantityRecording<VariableType>* observe_method,
size_t iteration)
16 this->parallel_exec();
17 std::string element_name_ =
"Snapshot_" + std::to_string(iteration);
18 SimTK::Xml::Element &element_ = observe_xml_engine_.root_element_;
19 observe_xml_engine_.addElementToXmlDoc(element_name_);
20 for (
size_t i = 0; i != this->base_particles_->total_real_particles_; ++i)
22 xmlmemory_io_.writeDataToXmlMemory(observe_xml_engine_, element_,
23 element_name_, i, (*this->interpolated_quantities_)[i], this->quantity_name_);
27 template <
class ObserveMethodType>
28 template <
typename ReduceType>
29 void RegressionTestBase<ObserveMethodType>::writeToXml(BodyReducedQuantityRecording<ReduceType>* reduce_method,
size_t iteration)
31 std::string element_name_ =
"Snapshot_" + std::to_string(iteration);
32 SimTK::Xml::Element &element_ = observe_xml_engine_.root_element_;
33 observe_xml_engine_.addElementToXmlDoc(element_name_);
34 xmlmemory_io_.writeDataToXmlMemory(observe_xml_engine_, element_,
35 element_name_, 0, this->reduce_method_.parallel_exec(), this->quantity_name_);
38 template <
class ObserveMethodType>
39 void RegressionTestBase<ObserveMethodType>::readFromXml(ObservedQuantityRecording<VariableType>* observe_method)
41 observe_xml_engine_.loadXmlFile(in_output_filefullpath_);
42 size_t number_of_particle_ = this->base_particles_->total_real_particles_;
43 size_t number_of_snapshot_ = std::distance(observe_xml_engine_.root_element_.element_begin(),
44 observe_xml_engine_.root_element_.element_end());
45 DoubleVec<VariableType> current_result_temp_(number_of_snapshot_, StdVec<VariableType>(number_of_particle_));
47 current_result_ = current_result_temp_;
48 element_tag_ = element_tag_temp_;
49 SimTK::Xml::Element &element_ = observe_xml_engine_.root_element_;
50 for (
size_t j = 0; j != number_of_particle_; ++j)
52 xmlmemory_io_.readDataFromXmlMemory(observe_xml_engine_, element_, j, current_result_, this->quantity_name_);
53 xmlmemory_io_.readTagFromXmlMemory(element_, element_tag_);
57 template <
class ObserveMethodType>
58 template <
typename ReduceType>
59 void RegressionTestBase<ObserveMethodType>::readFromXml(BodyReducedQuantityRecording<ReduceType>* reduce_method)
61 observe_xml_engine_.loadXmlFile(in_output_filefullpath_);
62 size_t number_of_particle_ = 1;
63 size_t number_of_snapshot_ = std::distance(observe_xml_engine_.root_element_.element_begin(),
64 observe_xml_engine_.root_element_.element_end());
65 DoubleVec<VariableType> current_result_temp_(number_of_snapshot_, StdVec<VariableType>(number_of_particle_));
67 current_result_ = current_result_temp_;
68 element_tag_ = element_tag_temp_;
69 SimTK::Xml::Element &element_ = observe_xml_engine_.root_element_;
70 for (
size_t j = 0; j != number_of_particle_; ++j)
72 xmlmemory_io_.readDataFromXmlMemory(observe_xml_engine_, element_, j, current_result_, this->quantity_name_);
73 xmlmemory_io_.readTagFromXmlMemory(element_, element_tag_);
77 template<
class ObserveMethodType>
78 void RegressionTestBase<ObserveMethodType>::transposeTheIndex()
80 int number_of_snapshot = this->current_result_.size();
81 int number_of_observation = this->current_result_[0].size();
82 DoubleVec<VariableType> temp(number_of_observation, StdVec<VariableType>(number_of_snapshot));
83 current_result_trans_ = temp;
84 for (
int snapshot_index = 0; snapshot_index != number_of_snapshot; ++snapshot_index)
85 for (
int observation_index = 0; observation_index != number_of_observation; ++observation_index)
86 current_result_trans_[observation_index][snapshot_index] = this->current_result_[snapshot_index][observation_index];
89 template<
class ObserveMethodType>
92 if (number_of_run_ > 1)
95 DoubleVec<VariableType> result_in_(SMAX(snapshot_, number_of_snapshot_old_), StdVec<VariableType>(observation_));
96 for (
int run_index_ = 0; run_index_ != number_of_run_ - 1; ++run_index_)
98 std::string node_name_ =
"Round_" + std::to_string(run_index_);
99 SimTK::Xml::Element father_element_ = result_xml_engine_in_.getChildElement(node_name_);
100 for (
int observation_index_ = 0; observation_index_ != observation_; ++observation_index_)
101 xmlmemory_io_.readDataFromXmlMemory(result_xml_engine_in_, father_element_, observation_index_, result_in_, this->quantity_name_);
102 DoubleVec<VariableType> result_temp_ = result_in_;
103 for (
int delete_ = 0; delete_ != difference_; ++delete_)
104 result_temp_.pop_back();
105 result_.push_back(result_temp_);
107 result_.push_back(this->current_result_);
111 template<
class ObserveMethodType>
114 for (
int run_index_ = 0; run_index_ != number_of_run_; ++run_index_)
116 std::string node_name_ =
"Round_" + std::to_string(run_index_);
117 result_xml_engine_out_.addElementToXmlDoc(node_name_);
118 SimTK::Xml::Element father_element_ =
119 result_xml_engine_out_.getChildElement(node_name_);
120 xmlmemory_io_.writeDataToXmlMemory(result_xml_engine_out_, father_element_, result_[run_index_],
121 SMIN(snapshot_, number_of_snapshot_old_), observation_, this->quantity_name_, this->element_tag_);
123 result_xml_engine_out_.writeToXmlFile(result_filefullpath_);
126 template<
class ObserveMethodType>
129 if (number_of_run_ > 1)
131 result_filefullpath_ = input_folder_path_ +
"/" + this->body_name_ +
"_" + this->quantity_name_ +
132 "_Run_" + std::to_string(index_of_run_) +
"_result.xml";
135 if (converged ==
"false")
137 if (!fs::exists(result_filefullpath_))
139 std::cout <<
"\n Error: the input file:" << result_filefullpath_ <<
" is not exists" << std::endl;
140 std::cout << __FILE__ <<
':' << __LINE__ << std::endl;
146 result_xml_engine_in_.loadXmlFile(result_filefullpath_);
147 SimTK::Xml::Element snapshot_element_ = result_xml_engine_in_.getChildElement(
"Snapshot_Element");
148 SimTK::Xml::element_iterator ele_ite = snapshot_element_.element_begin();
149 result_xml_engine_in_.getRequiredAttributeValue(ele_ite,
"number_of_snapshot_for_local_result_", snapshot_);
151 DoubleVec<VariableType> result_temp_(observation_, StdVec<VariableType>(snapshot_));
152 result_in_ = result_temp_;
153 SimTK::Xml::Element result_element_ = result_xml_engine_in_.getChildElement(
"Result_Element");
154 for (
int snapshot_index = 0; snapshot_index != snapshot_; ++snapshot_index)
156 int observation_index = 0;
157 SimTK::Xml::element_iterator ele_ite = result_element_.element_begin();
158 for (; ele_ite != result_element_.element_end(); ++ele_ite)
160 std::string attribute_name_ =
"snapshot_" + std::to_string(snapshot_index);
161 result_xml_engine_in_.getRequiredAttributeValue(ele_ite, attribute_name_, result_in_[observation_index][snapshot_index]);
168 template<
class ObserveMethodType>
173 int total_snapshot_ = current_result_trans_[0].size();
174 result_filefullpath_ = input_folder_path_ +
"/" + this->body_name_ +
"_" + this->quantity_name_ +
175 "_Run_" + std::to_string(index_of_run_) +
"_result.xml";
176 result_xml_engine_out_.addElementToXmlDoc(
"Snapshot_Element");
177 SimTK::Xml::Element snapshot_element_ = result_xml_engine_out_.getChildElement(
"Snapshot_Element");
178 result_xml_engine_out_.addChildToElement(snapshot_element_,
"Snapshot");
179 SimTK::Xml::element_iterator ele_ite = snapshot_element_.element_begin();
180 result_xml_engine_out_.setAttributeToElement(ele_ite,
"number_of_snapshot_for_local_result_", total_snapshot_);
182 result_xml_engine_out_.addElementToXmlDoc(
"Result_Element");
183 SimTK::Xml::Element result_element_ = result_xml_engine_out_.getChildElement(
"Result_Element");
184 for (
int observation_index = 0; observation_index != observation_; ++observation_index)
186 std::string element_name_ =
"Particle_" + std::to_string(observation_index);
187 result_xml_engine_out_.addChildToElement(result_element_, element_name_);
188 for (
int snapshot_index = 0; snapshot_index != total_snapshot_; ++snapshot_index)
190 SimTK::Xml::element_iterator ele_ite = result_element_.element_begin(element_name_);
191 std::string attribute_name_ =
"snapshot_" + std::to_string(snapshot_index);
192 result_xml_engine_out_.setAttributeToElement(ele_ite, attribute_name_, current_result_trans_[observation_index][snapshot_index]);
195 result_xml_engine_out_.writeToXmlFile(result_filefullpath_);
198 template<
class ObserveMethodType>
201 if (converged ==
"false")
205 if (fs::exists(runtimes_filefullpath_))
207 fs::remove(runtimes_filefullpath_);
209 std::ofstream out_file(runtimes_filefullpath_.c_str());
210 out_file << converged;
212 out_file << number_of_run_;
214 out_file << label_for_repeat_;
void writeResultToXml()
Definition: regression_test_base.hpp:112
Base classes for comparisons between validated and tested results.
void readResultFromXml()
Definition: regression_test_base.hpp:90
The base of regression test for various method (time-averaged, ensemble-averaged, dynamic time warpin...
Definition: regression_test_base.h:45
Definition: solid_body_supplementary.cpp:9