removed mdspan requirement

This commit is contained in:
robin
2024-04-23 12:21:08 +02:00
parent 51fe302920
commit b2415d8c4d
16 changed files with 255 additions and 197 deletions

View File

@@ -22,45 +22,20 @@ vector<T> getVarVector(const NcVar &var) {
return vec;
}
/**
* Read a 3D matrix from a NetCDF variable.
* Reads data into a contiguous 1D data vector.
* Returns a pair of the size of the matrix (in the form of an extent) with the data vector.
*
* Inteded usage of this function involves using the two returned values
* to create an mdspan:
*
* auto arr = mdspan(vec.data(), size);
*/
template <typename T>
pair<vector<T>, std::dextents<std::size_t, 3>> get3DMat(const NcVar &var) {
if(var.getDimCount() != 3) {
throw invalid_argument("Variable is not 3D");
}
int timeLength = var.getDim(0).getSize();
int latLength = var.getDim(1).getSize();
int longLength = var.getDim(2).getSize();
vector<T> vec(timeLength*latLength*longLength);
var.getVar(vec.data());
auto arr = std::mdspan(vec.data(), timeLength, latLength, longLength);
return {vec, arr.extents()};
}
pair<vector<double>, std::dextents<std::size_t, 3>> readHydrodynamicU() {
vector<double> readHydrodynamicU() {
netCDF::NcFile data("../../../../data/hydrodynamic_U.h5", netCDF::NcFile::read);
multimap< string, NcVar > vars = data.getVars();
return get3DMat<double>(vars.find("uo")->second);
return getVarVector<double>(vars.find("uo")->second);
}
pair<vector<double>, std::dextents<std::size_t, 3>> readHydrodynamicV() {
vector<double> readHydrodynamicV() {
netCDF::NcFile data("../../../../data/hydrodynamic_V.h5", netCDF::NcFile::read);
multimap< string, NcVar > vars = data.getVars();
return get3DMat<double>(vars.find("vo")->second);
return getVarVector<double>(vars.find("vo")->second);
}
tuple<vector<int>, vector<double>, vector<double>> readGrid() {