diff --git a/.gitignore b/.gitignore index 9b6e850..be20c38 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ -build +build/ .vscode -data \ No newline at end of file +data/ \ No newline at end of file diff --git a/build/main b/build/main deleted file mode 100755 index 4093b44..0000000 Binary files a/build/main and /dev/null differ diff --git a/build/main.o b/build/main.o deleted file mode 100644 index d5059a5..0000000 Binary files a/build/main.o and /dev/null differ diff --git a/src/hurricanedata/datareader.cu b/src/hurricanedata/datareader.cu index 6052937..ed0c5ce 100644 --- a/src/hurricanedata/datareader.cu +++ b/src/hurricanedata/datareader.cu @@ -22,4 +22,33 @@ std::vector readData(std::string path, std::string variableName) { var.getVar(vec.data()); return vec; +} + +struct cudaArray* loadDataToDevice(std::string path, std::string variableName) { + netCDF::NcFile data(path, netCDF::NcFile::read); + + multimap vars = data.getVars(); + + NcVar var = vars.find(variableName)->second; + + struct cudaChannelFormatDesc arrayType = { + .x = 32, + .y = 0, + .z = 0, + .w = 0, + .f = cudaChannelFormatKindFloat + }; // Float-32 + + struct cudaExtent extent = { + .width = var.getDim(3).getSize(), // longitude + .height = var.getDim(2).getSize(), // latitude + .depth = var.getDim(1).getSize(), // level + }; + + struct cudaArray *array; + + cudaError_t error = cudaMalloc3DArray(&array, &arrayType, extent, 0); + cout << "cuda error: " << error << "\n"; + + return array; } \ No newline at end of file diff --git a/src/hurricanedata/datareader.h b/src/hurricanedata/datareader.h index 7e628cc..d7e3733 100644 --- a/src/hurricanedata/datareader.h +++ b/src/hurricanedata/datareader.h @@ -5,5 +5,6 @@ #include std::vector readData(std::string path, std::string variableName); +struct cudaArray* loadDataToDevice(std::string path, std::string variableName); #endif //DATAREADER_H diff --git a/src/main.cu b/src/main.cu index 2d27d29..f472f37 100644 --- a/src/main.cu +++ b/src/main.cu @@ -8,15 +8,8 @@ int main() { std::string path = "data/MERRA2_400.inst6_3d_ana_Np.20120101.nc4"; std::string variable = "U"; - auto x = readData(path, variable); - - // Print some values from the file to see that it worked - int num = 0; - for(int i = 0; i < x.size(); i++) { - if (x[i] < 1E14) std::cout << x[i] << "\n"; - if(num > 10000) break; - num++; - } + auto arr = loadDataToDevice(path, variable); + cudaFreeArray(arr); return 0; }