diff --git a/linear-interpolation/src/CMakeLists.txt b/linear-interpolation/src/CMakeLists.txt index 9428e41..faeeaa7 100644 --- a/linear-interpolation/src/CMakeLists.txt +++ b/linear-interpolation/src/CMakeLists.txt @@ -6,6 +6,10 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) +# Make flags for release compilation +# set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -Wall -DNDEBUG") + + find_package(netCDF REQUIRED) add_executable(LinearInterpolate main.cpp @@ -16,6 +20,7 @@ add_executable(LinearInterpolate main.cpp UVGrid.cpp UVGrid.h Vel.h + to_vector.h Vel.cpp) execute_process( diff --git a/linear-interpolation/src/UVGrid.cpp b/linear-interpolation/src/UVGrid.cpp index 16eabc6..f209a12 100644 --- a/linear-interpolation/src/UVGrid.cpp +++ b/linear-interpolation/src/UVGrid.cpp @@ -1,8 +1,8 @@ #include -#include #include "UVGrid.h" #include "readdata.h" +#include "to_vector.h" #define sizeError2 "The sizes of the hydrodynamic data files are different" #define sizeError "The sizes of the hydrodynamicU or -V files does not correspond with the sizes of the grid file" @@ -27,11 +27,12 @@ UVGrid::UVGrid() { throw domain_error(sizeError); } - uvData = views::zip(us, vs) - | views::transform([](auto pair) { - return Vel(pair); - }) - | ranges::to(); + uvData = to_vector(views::transform(views::zip(us, vs), [](auto pair){return Vel(pair);})); +// uvData = views::zip(us, vs) +// | views::transform([](auto pair) { +// return Vel(pair); +// }) +// | ranges::to(); } const Vel &UVGrid::operator[](size_t timeIndex, size_t latIndex, size_t lonIndex) const { @@ -55,8 +56,8 @@ void UVGrid::printSlice(size_t t) { for (int x = 0; x < latSize; x++) { for (int y = 0; y < lonSize; y++) { auto [u,v] = (*this)[t,x,y]; - print("({:>7.4f}, {:>7.4f}) ", u, v); + printf("%7.4f, %7.4f", u, v); } - println(""); + cout << endl; } } diff --git a/linear-interpolation/src/interpolate.cpp b/linear-interpolation/src/interpolate.cpp index 579e241..26c46b3 100644 --- a/linear-interpolation/src/interpolate.cpp +++ b/linear-interpolation/src/interpolate.cpp @@ -1,8 +1,8 @@ #include #include -#include #include "interpolate.h" +#include "to_vector.h" using namespace std; @@ -41,11 +41,9 @@ Vel bilinearInterpolate(const UVGrid &uvGrid, int time, double lat, double lon) } vector bilinearInterpolate(const UVGrid &uvGrid, vector> points) { - auto results = points - | std::views::transform([&uvGrid](const auto &point) { + auto results = points | std::views::transform([&uvGrid](const auto &point) { auto [time, lat, lon] = point; return bilinearInterpolate(uvGrid, time, lat, lon); - }) - | std::ranges::to>(); - return results; + }); + return to_vector(results); } diff --git a/linear-interpolation/src/main.cpp b/linear-interpolation/src/main.cpp index 8d2c16e..ebcd487 100644 --- a/linear-interpolation/src/main.cpp +++ b/linear-interpolation/src/main.cpp @@ -1,7 +1,7 @@ #include "interpolate.h" #include "Vel.h" -#include #include +#include using namespace std; @@ -39,14 +39,14 @@ int main() { auto duration = std::chrono::duration_cast(stop - start); - println("Time taken for {} points was {} seconds", N, duration.count()/1000.); + printf("Time taken for %d points was %lf seconds\n", N, duration.count()/1000.); // Do something with result in case of optimisation double sum = 0; for (auto [u,v]: x) { sum += u + v; } - println("Sum = {}", sum); + printf("Sum = %lf\n", sum); return 0; } diff --git a/linear-interpolation/src/readdata.cpp b/linear-interpolation/src/readdata.cpp index d556c6f..85a56e8 100644 --- a/linear-interpolation/src/readdata.cpp +++ b/linear-interpolation/src/readdata.cpp @@ -1,4 +1,3 @@ -#include #include #include @@ -46,4 +45,4 @@ tuple, vector, vector> readGrid() { vector latitude = getVarVector(vars.find("latitude")->second); return {time, latitude, longitude}; -} \ No newline at end of file +}