diff --git a/advection/src/EulerAdvectionKernel.cpp b/advection/src/EulerAdvectionKernel.cpp index 01c76d9..4eebdc2 100644 --- a/advection/src/EulerAdvectionKernel.cpp +++ b/advection/src/EulerAdvectionKernel.cpp @@ -7,7 +7,7 @@ using namespace std; EulerAdvectionKernel::EulerAdvectionKernel(std::shared_ptr grid): grid(grid) { } std::pair EulerAdvectionKernel::advect(int time, double latitude, double longitude) const { - auto [u, v] = bilinearinterpolation(*grid, time, latitude, longitude); + auto [u, v] = bilinearinterpolate(*grid, time, latitude, longitude); return {latitude+metreToDegrees(u*DT), longitude+metreToDegrees(v*DT)}; } diff --git a/advection/src/RK4AdvectionKernel.cpp b/advection/src/RK4AdvectionKernel.cpp index ef03306..1edc9f9 100644 --- a/advection/src/RK4AdvectionKernel.cpp +++ b/advection/src/RK4AdvectionKernel.cpp @@ -6,27 +6,27 @@ using namespace std; RK4AdvectionKernel::RK4AdvectionKernel(std::shared_ptr grid): grid(grid) { } std::pair RK4AdvectionKernel::advect(int time, double latitude, double longitude) const { - auto [u1, v1] = bilinearinterpolation(*grid, time, latitude, longitude); + auto [u1, v1] = bilinearinterpolate(*grid, time, latitude, longitude); // lon1, lat1 = (particle.lon + u1*.5*particle.dt, particle.lat + v1*.5*particle.dt); double lon1 = longitude + metreToDegrees(u1 * 0.5*DT); double lat1 = latitude + metreToDegrees(v1 * 0.5*DT); // (u2, v2) = fieldset.UV[time + .5 * particle.dt, particle.depth, lat1, lon1, particle] - auto [u2, v2] = bilinearinterpolation(*grid, time + 0.5*DT, lat1, lon1); + auto [u2, v2] = bilinearinterpolate(*grid, time + 0.5 * DT, lat1, lon1); // lon2, lat2 = (particle.lon + u2*.5*particle.dt, particle.lat + v2*.5*particle.dt) double lon2 = longitude + metreToDegrees(u2 * 0.5 * DT); double lat2 = latitude + metreToDegrees(v2 * 0.5 * DT); // (u3, v3) = fieldset.UV[time + .5 * particle.dt, particle.depth, lat2, lon2, particle] - auto [u3, v3] = bilinearinterpolation(*grid, time + 0.5 * DT, lat2, lon2); + auto [u3, v3] = bilinearinterpolate(*grid, time + 0.5 * DT, lat2, lon2); // lon3, lat3 = (particle.lon + u3*particle.dt, particle.lat + v3*particle.dt) double lon3 = longitude + metreToDegrees(u3 * DT); double lat3 = latitude + metreToDegrees(v3 * DT); // (u4, v4) = fieldset.UV[time + particle.dt, particle.depth, lat3, lon3, particle] - auto [u4, v4] = bilinearinterpolation(*grid, time + DT, lat3, lon3); + auto [u4, v4] = bilinearinterpolate(*grid, time + DT, lat3, lon3); double lonFinal = longitude + metreToDegrees((u1 + 2 * u2 + 2 * u3 + u4) / 6.0 * DT); double latFinal = latitude + metreToDegrees((v1 + 2 * v2 + 2 * v3 + v4) / 6.0 * DT); diff --git a/advection/src/interpolate.cpp b/advection/src/interpolate.cpp index 70eb19e..7d3e0cc 100644 --- a/advection/src/interpolate.cpp +++ b/advection/src/interpolate.cpp @@ -2,7 +2,7 @@ using namespace std; -Vel bilinearinterpolation(const UVGrid &uvGrid, int time, double lat, double lon) { +Vel bilinearinterpolate(const UVGrid &uvGrid, int time, double lat, double lon) { double latStep = uvGrid.latStep(); double lonStep = uvGrid.lonStep(); int timeStep = uvGrid.timeStep(); @@ -40,7 +40,7 @@ vector bilinearinterpolation(const UVGrid &uvGrid, vector result; result.reserve(points.size()); for (auto [time, lat, lon]: points) { - result.push_back(bilinearinterpolation(uvGrid, time, lat, lon)); + result.push_back(bilinearinterpolate(uvGrid, time, lat, lon)); } return result; diff --git a/advection/src/interpolate.h b/advection/src/interpolate.h index f7e2924..80176d5 100644 --- a/advection/src/interpolate.h +++ b/advection/src/interpolate.h @@ -15,7 +15,7 @@ * @param lon longitude of point * @return interpolated velocity */ -Vel bilinearinterpolation(const UVGrid &uvGrid, int time, double lat, double lon); +Vel bilinearinterpolate(const UVGrid &uvGrid, int time, double lat, double lon); /** * Helper function for bilnearly interpolating a vector of points diff --git a/advection/src/main.cpp b/advection/src/main.cpp index eee999a..0e0fc01 100644 --- a/advection/src/main.cpp +++ b/advection/src/main.cpp @@ -37,25 +37,25 @@ void advectForSomeTime(const UVGrid &uvGrid, const AdvectionKernelImpl &kernel, void testGridIndexing(const UVGrid *uvGrid) { int time = 20000; cout << "=== land === (should all give 0)" << endl; - cout << bilinearinterpolation(*uvGrid, time, 53.80956379699079, -1.6496306344654406) << endl; - cout << bilinearinterpolation(*uvGrid, time, 55.31428895563707, -2.851581041325997) << endl; - cout << bilinearinterpolation(*uvGrid, time, 47.71548983067583, -1.8704054037408626) << endl; - cout << bilinearinterpolation(*uvGrid, time, 56.23521060314398, 8.505979324950573) << endl; - cout << bilinearinterpolation(*uvGrid, time, 53.135645440244375, 8.505979324950573) << endl; - cout << bilinearinterpolation(*uvGrid, time, 56.44761278775708, -4.140629303756164) << endl; - cout << bilinearinterpolation(*uvGrid, time, 52.67625153110339, 0.8978569759455872) << endl; - cout << bilinearinterpolation(*uvGrid, time, 52.07154079279377, 4.627951041411331) << endl; + cout << bilinearinterpolate(*uvGrid, time, 53.80956379699079, -1.6496306344654406) << endl; + cout << bilinearinterpolate(*uvGrid, time, 55.31428895563707, -2.851581041325997) << endl; + cout << bilinearinterpolate(*uvGrid, time, 47.71548983067583, -1.8704054037408626) << endl; + cout << bilinearinterpolate(*uvGrid, time, 56.23521060314398, 8.505979324950573) << endl; + cout << bilinearinterpolate(*uvGrid, time, 53.135645440244375, 8.505979324950573) << endl; + cout << bilinearinterpolate(*uvGrid, time, 56.44761278775708, -4.140629303756164) << endl; + cout << bilinearinterpolate(*uvGrid, time, 52.67625153110339, 0.8978569759455872) << endl; + cout << bilinearinterpolate(*uvGrid, time, 52.07154079279377, 4.627951041411331) << endl; cout << "=== ocean === (should give not 0)" << endl; - cout << bilinearinterpolation(*uvGrid, time, 47.43923166616274, -4.985451481829083) << endl; - cout << bilinearinterpolation(*uvGrid, time, 50.68943556852362, -9.306162999561733) << endl; - cout << bilinearinterpolation(*uvGrid, time, 53.70606799886677, -4.518347647034465) << endl; - cout << bilinearinterpolation(*uvGrid, time, 60.57987114267971, -12.208262973672621) << endl; - cout << bilinearinterpolation(*uvGrid, time, 46.532221548197285, -13.408189172582638) << endl; - cout << bilinearinterpolation(*uvGrid, time, 50.92725094937812, 1.3975824052375256) << endl; - cout << bilinearinterpolation(*uvGrid, time, 51.4028921682209, 2.4059571950925203) << endl; - cout << bilinearinterpolation(*uvGrid, time, 53.448445236769004, 0.7996966058017515) << endl; -// cout << bilinearinterpolation(*uvGrid, time, ) << endl; + cout << bilinearinterpolate(*uvGrid, time, 47.43923166616274, -4.985451481829083) << endl; + cout << bilinearinterpolate(*uvGrid, time, 50.68943556852362, -9.306162999561733) << endl; + cout << bilinearinterpolate(*uvGrid, time, 53.70606799886677, -4.518347647034465) << endl; + cout << bilinearinterpolate(*uvGrid, time, 60.57987114267971, -12.208262973672621) << endl; + cout << bilinearinterpolate(*uvGrid, time, 46.532221548197285, -13.408189172582638) << endl; + cout << bilinearinterpolate(*uvGrid, time, 50.92725094937812, 1.3975824052375256) << endl; + cout << bilinearinterpolate(*uvGrid, time, 51.4028921682209, 2.4059571950925203) << endl; + cout << bilinearinterpolate(*uvGrid, time, 53.448445236769004, 0.7996966058017515) << endl; +// cout << bilinearinterpolate(*uvGrid, time, ) << endl; } int main() {