mirror of
https://github.com/CHN-beta/ufo.git
synced 2024-10-22 19:58:44 +08:00
fix hdf5 read/write bug
This commit is contained in:
parent
7cf384bf6c
commit
9721976e4c
@ -104,23 +104,32 @@ namespace ufo
|
|||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
class Hdf5File
|
class Hdf5file
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
inline Hdf5File(std::string filename) : File_(filename, HighFive::File::ReadWrite
|
inline Hdf5file& open_for_read(std::string filename)
|
||||||
| HighFive::File::Create | HighFive::File::Truncate) {}
|
|
||||||
template <typename T> inline Hdf5File& read(T& object, std::string name)
|
|
||||||
{
|
{
|
||||||
object = File_.getDataSet(name).read<std::remove_cvref_t<decltype(object)>>();
|
File_ = HighFive::File(filename, HighFive::File::ReadOnly);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
template <typename T> inline Hdf5File& write(const T& object, std::string name)
|
inline Hdf5file& open_for_write(std::string filename)
|
||||||
{
|
{
|
||||||
File_.createDataSet(name, object);
|
File_ = HighFive::File(filename, HighFive::File::ReadWrite | HighFive::File::Create
|
||||||
|
| HighFive::File::Truncate);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
template <typename T> inline Hdf5file& read(T& object, std::string name)
|
||||||
|
{
|
||||||
|
object = File_->getDataSet(name).read<std::remove_cvref_t<decltype(object)>>();
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
template <typename T> inline Hdf5file& write(const T& object, std::string name)
|
||||||
|
{
|
||||||
|
File_->createDataSet(name, object);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
protected:
|
protected:
|
||||||
HighFive::File File_;
|
std::optional<HighFive::File> File_;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -60,7 +60,7 @@ namespace ufo
|
|||||||
{
|
{
|
||||||
std::vector resolution{ Resolution.first, Resolution.second };
|
std::vector resolution{ Resolution.first, Resolution.second };
|
||||||
std::vector range{ Range.first, Range.second };
|
std::vector range{ Range.first, Range.second };
|
||||||
Hdf5File(filename).write(Values, "Values")
|
Hdf5file{}.open_for_write(filename).write(Values, "Values")
|
||||||
.write(XTicks, "XTicks")
|
.write(XTicks, "XTicks")
|
||||||
.write(YTicks, "YTicks")
|
.write(YTicks, "YTicks")
|
||||||
.write(resolution, "Resolution")
|
.write(resolution, "Resolution")
|
||||||
|
@ -135,7 +135,7 @@ namespace ufo
|
|||||||
{
|
{
|
||||||
std::vector<std::vector<std::vector<double>>> frequency, path;
|
std::vector<std::vector<std::vector<double>>> frequency, path;
|
||||||
std::vector<std::vector<std::vector<std::vector<PhonopyComplex>>>> eigenvector_vector;
|
std::vector<std::vector<std::vector<std::vector<PhonopyComplex>>>> eigenvector_vector;
|
||||||
Hdf5File(QpointDataInputFile.FileName).read(frequency, "/frequency")
|
Hdf5file{}.open_for_read(QpointDataInputFile.FileName).read(frequency, "/frequency")
|
||||||
.read(eigenvector_vector, "/eigenvector")
|
.read(eigenvector_vector, "/eigenvector")
|
||||||
.read(path, "/path");
|
.read(path, "/path");
|
||||||
std::vector size = { frequency.size(), frequency[0].size(), frequency[0][0].size() };
|
std::vector size = { frequency.size(), frequency[0].size(), frequency[0][0].size() };
|
||||||
@ -247,7 +247,7 @@ namespace ufo
|
|||||||
Weight.back().push_back(mode.Weight);
|
Weight.back().push_back(mode.Weight);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Hdf5File(filename).write(Qpoint, "/Qpoint")
|
Hdf5file{}.open_for_write(filename).write(Qpoint, "/Qpoint")
|
||||||
.write(Source, "/Source")
|
.write(Source, "/Source")
|
||||||
.write(Frequency, "/Frequency")
|
.write(Frequency, "/Frequency")
|
||||||
.write(Weight, "/Weight");
|
.write(Weight, "/Weight");
|
||||||
|
Loading…
Reference in New Issue
Block a user