77// TODO: this include statement list looks good
88#include < H5Cpp.h>
99#include < hydroc/h5fileinfo.h>
10- #include < filesystem> // std::filesystem::absolute
10+ #include < filesystem> // std::filesystem::absolute
1111
1212using namespace chrono ; // TODO narrow this using namespace to specify what we use from chrono or put chrono:: in front
1313 // of it all?
1414
15-
1615H5FileInfo::H5FileInfo (std::string file, int num_bod) {
1716 h5_file_name_ = file;
1817 num_bodies_ = num_bod;
@@ -41,7 +40,7 @@ HydroData H5FileInfo::ReadH5Data() {
4140 for (int i = 0 ; i < num_bodies_; i++) {
4241 // body data
4342 data_to_init.body_data_ [i].body_name = " body" + std::to_string (i + 1 );
44- std::string bodyName = data_to_init.body_data_ [i].body_name ; // shortcut for reading later
43+ std::string bodyName = data_to_init.body_data_ [i].body_name ; // shortcut for reading later
4544 data_to_init.body_data_ [i].body_num = i;
4645
4746 InitScalar (userH5File, bodyName + " /properties/disp_vol" , data_to_init.body_data_ [i].disp_vol );
@@ -54,7 +53,8 @@ HydroData H5FileInfo::ReadH5Data() {
5453
5554 Init1D (userH5File, bodyName + " /properties/cg" , data_to_init.body_data_ [i].cg );
5655 Init1D (userH5File, bodyName + " /properties/cb" , data_to_init.body_data_ [i].cb );
57- Init2D (userH5File, bodyName + " /hydro_coeffs/linear_restoring_stiffness" , data_to_init.body_data_ [i].lin_matrix );
56+ Init2D (userH5File, bodyName + " /hydro_coeffs/linear_restoring_stiffness" ,
57+ data_to_init.body_data_ [i].lin_matrix );
5858 Init2D (userH5File, bodyName + " /hydro_coeffs/added_mass/inf_freq" , data_to_init.body_data_ [i].inf_added_mass );
5959 data_to_init.body_data_ [i].inf_added_mass *= rho;
6060 Init3D (userH5File, bodyName + " /hydro_coeffs/radiation_damping/impulse_response_fun/K" ,
@@ -242,5 +242,17 @@ int HydroData::GetRIRFDims(int i) const {
242242}
243243
244244Eigen::VectorXd HydroData::GetRIRFTimeVector () const {
245- return body_data_[0 ].rirf_time_vector ;
245+ double tol = 1e-10 ;
246+ // check if all time vectors are the same within tolerance
247+ auto & rirf_time_vector = body_data_[0 ].rirf_time_vector ;
248+ for (size_t ii = 1 ; ii < body_data_.size (); ii++) {
249+ for (size_t jj = 0 ; jj < body_data_[ii].rirf_time_vector .size (); jj++) {
250+ if (abs (body_data_[ii].rirf_time_vector [jj] - rirf_time_vector[jj]) > tol) {
251+ throw std::runtime_error (
252+ " RIRF time vectors have to be exactly the same for all bodies. Difference found in body " +
253+ std::to_string (jj) + " at time index " + std::to_string (jj) + " ." );
254+ }
255+ }
256+ }
257+ return rirf_time_vector;
246258}
0 commit comments