Skip to content

Commit

Permalink
Clean up quadrature tests
Browse files Browse the repository at this point in the history
Fixes #207

See merge request gysela-developpers/gyselalibxx!539

--------------------------------------------
  • Loading branch information
Emily Bourne committed Jun 27, 2024
1 parent 6d20e94 commit 342c4bc
Show file tree
Hide file tree
Showing 8 changed files with 183 additions and 110 deletions.
1 change: 1 addition & 0 deletions tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,6 @@ add_subdirectory(geometryXYVxVy)
add_subdirectory(geometryRTheta)
add_subdirectory(multipatch)
add_subdirectory(pde_solvers)
add_subdirectory(quadrature)
add_subdirectory(timestepper)
add_subdirectory(utils)
24 changes: 0 additions & 24 deletions tests/geometryXVx/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ add_executable(unit_tests_${GEOMETRY_VARIANT}
kineticsource.cpp
krooksource.cpp
masks.cpp
quadrature.cpp
splitvlasovsolver.cpp
../main.cpp
)
Expand Down Expand Up @@ -108,26 +107,3 @@ add_subdirectory(geometryMX)
add_subdirectory(landau)

add_subdirectory(sheath)

foreach(GEOMETRY_VARIANT IN LISTS GEOMETRY_XVx_VARIANTS_LIST)
add_executable(spline_quadrature_tests_${GEOMETRY_VARIANT}
../main.cpp
quadrature_spline.cpp
neumann_quadrature_spline.cpp
)
target_compile_features(spline_quadrature_tests_${GEOMETRY_VARIANT} PUBLIC cxx_std_17)
target_link_libraries(spline_quadrature_tests_${GEOMETRY_VARIANT}
PUBLIC
DDC::PDI_Wrapper
GTest::gtest
GTest::gmock
paraconf::paraconf
sll::SLL
gslx::quadrature
gslx::geometry_${GEOMETRY_VARIANT}
)

gtest_discover_tests(spline_quadrature_tests_${GEOMETRY_VARIANT}
TEST_SUFFIX "_${GEOMETRY_VARIANT}"
DISCOVERY_MODE PRE_TEST)
endforeach()
23 changes: 0 additions & 23 deletions tests/geometryXYVxVy/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,26 +1,3 @@
# SPDX-License-Identifier: MIT

cmake_minimum_required(VERSION 3.15)

add_executable(unit_tests_xy_vxvy
../main.cpp
quadrature.cpp
)
target_compile_features(unit_tests_xy_vxvy PUBLIC cxx_std_17)
target_link_libraries(unit_tests_xy_vxvy
PUBLIC
DDC::PDI_Wrapper
GTest::gtest
GTest::gmock
paraconf::paraconf
gslx::geometry_xyvxvy
sll::SLL
gslx::quadrature
)

gtest_discover_tests(unit_tests_xy_vxvy
TEST_SUFFIX "_xy_vxvy"
DISCOVERY_MODE PRE_TEST)


add_subdirectory(landau)
43 changes: 43 additions & 0 deletions tests/quadrature/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# SPDX-License-Identifier: MIT

add_executable(unit_tests_quadrature
quadrature_1d.cpp
quadrature_2d.cpp
neumann_quadrature_spline.cpp
../main.cpp
)
target_link_libraries(unit_tests_quadrature
PUBLIC
DDC::DDC
GTest::gtest
GTest::gmock

sll::SLL

gslx::quadrature
gslx::utils
)
target_compile_definitions(unit_tests_quadrature PUBLIC)

foreach(GEOMETRY_VARIANT IN LISTS GEOMETRY_XVx_VARIANTS_LIST)
add_executable(spline_quadrature_tests_${GEOMETRY_VARIANT}
../main.cpp
quadrature_spline.cpp
)
target_compile_features(spline_quadrature_tests_${GEOMETRY_VARIANT} PUBLIC cxx_std_17)
target_link_libraries(spline_quadrature_tests_${GEOMETRY_VARIANT}
PUBLIC
DDC::DDC
GTest::gtest
GTest::gmock
paraconf::paraconf
sll::SLL
gslx::quadrature
gslx::utils
)

gtest_discover_tests(spline_quadrature_tests_${GEOMETRY_VARIANT}
TEST_SUFFIX "_${GEOMETRY_VARIANT}"
DISCOVERY_MODE PRE_TEST)
endforeach()
target_compile_definitions(spline_quadrature_tests_xperiod_vx INTERFACE PERIODIC_RDIMX)
Original file line number Diff line number Diff line change
Expand Up @@ -3,37 +3,71 @@
#include <gmock/gmock.h>
#include <gtest/gtest.h>

#include "geometry.hpp"
#include "ddc_helper.hpp"
#include "neumann_spline_quadrature.hpp"
#include "quadrature.hpp"

namespace {

TEST(NeumannSplineQuadratureTest, ExactForConstantFunc)
struct X
{
CoordVx const vx_min(0.0);
CoordVx const vx_max(M_PI);
IVectVx const vx_size(10);
static bool constexpr PERIODIC = false;
};

using CoordX = ddc::Coordinate<X>;

struct BSplinesX : ddc::UniformBSplines<X, 3>
{
};

auto constexpr SplineXBoundary = ddc::BoundCond::HERMITE;

using SplineInterpPointsX
= ddc::KnotsAsInterpolationPoints<BSplinesX, SplineXBoundary, SplineXBoundary>;

struct IDimX : SplineInterpPointsX::interpolation_mesh_type
{
};

using SplineXBuilder_1d = ddc::SplineBuilder<
Kokkos::DefaultExecutionSpace,
Kokkos::DefaultExecutionSpace::memory_space,
BSplinesX,
IDimX,
SplineXBoundary,
SplineXBoundary,
ddc::SplineSolver::GINKGO,
IDimX>;

using IVectX = ddc::DiscreteVector<IDimX>;
using IDomainX = ddc::DiscreteDomain<IDimX>;

using DFieldX = ddc::Chunk<double, IDomainX>;

TEST(NeumannSplineUniformQuadrature1D, ExactForConstantFunc)
{
CoordX const x_min(0.0);
CoordX const x_max(M_PI);
IVectX const x_size(10);

// Creating mesh & supports
ddc::init_discrete_space<BSplinesVx>(vx_min, vx_max, vx_size);
ddc::init_discrete_space<BSplinesX>(x_min, x_max, x_size);

ddc::init_discrete_space<IDimVx>(SplineInterpPointsVx::get_sampling<IDimVx>());
ddc::DiscreteDomain<IDimVx> interpolation_domain_vx(SplineInterpPointsVx::get_domain<IDimVx>());
ddc::init_discrete_space<IDimX>(SplineInterpPointsX::get_sampling<IDimX>());
ddc::DiscreteDomain<IDimX> interpolation_domain_x(SplineInterpPointsX::get_domain<IDimX>());

SplineVxBuilder_1d const builder_vx(interpolation_domain_vx);
SplineXBuilder_1d const builder_x(interpolation_domain_x);

IDomainVx const gridvx = builder_vx.interpolation_domain();
IDomainX const gridx = builder_x.interpolation_domain();

host_t<DFieldVx> const quadrature_coeffs
= neumann_spline_quadrature_coefficients(gridvx, builder_vx);
DFieldX const quadrature_coeffs = neumann_spline_quadrature_coefficients(gridx, builder_x);
Quadrature const integrate(quadrature_coeffs.span_cview());

host_t<DFieldVx> values(gridvx);
DFieldX values(gridx);

ddc::for_each(gridvx, [&](ddc::DiscreteElement<IDimVx> const idx) { values(idx) = 1.0; });
ddc::for_each(gridx, [&](ddc::DiscreteElement<IDimX> const idx) { values(idx) = 1.0; });
double integral = integrate(values);
double expected_val = vx_max - vx_min;
double expected_val = x_max - x_min;
EXPECT_LE(abs(integral - expected_val), 1e-15);
}

Expand Down Expand Up @@ -104,7 +138,7 @@ std::array<double, sizeof...(Is)> compute_errors(std::index_sequence<Is...>, int
return std::array<double, sizeof...(Is)> {compute_error<Is>(n_elems *= 2)...};
}

TEST(NeumannSplineQuadratureTest, UniformConverge)
TEST(NeumannSplineUniformQuadrature1D, Convergence)
{
constexpr int NTESTS(3);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ struct IDimXPeriod : ddc::NonUniformPointSampling<RDimXPeriod>
using IDomXPeriod = ddc::DiscreteDomain<IDimXPeriod>;
using CoordXPeriod = ddc::Coordinate<RDimXPeriod>;

TEST(QuadratureTest, TrapezExactForConstantFunc)
TEST(TrapezoidUniformPeriodicQuadrature1D, ExactForConstantFunc)
{
CoordXPeriod const x_min(0.0);
CoordXPeriod const x_max(M_PI);
Expand Down Expand Up @@ -53,7 +53,7 @@ TEST(QuadratureTest, TrapezExactForConstantFunc)
EXPECT_LE(abs(integral - expected_val), 1e-9);
}

TEST(QuadratureTest, SimpsonExactForConstantFunc)
TEST(SimpsonUniformPeriodicQuadrature1D, ExactForConstantFunc)
{
CoordXPeriod const x_min(0.0);
CoordXPeriod const x_max(M_PI);
Expand Down Expand Up @@ -151,7 +151,7 @@ std::array<double, sizeof...(Is)> compute_errors_simpson(std::index_sequence<Is.
return std::array<double, sizeof...(Is)> {compute_error<Is>(n_elems *= 2, Method::SIMPSON)...};
}

TEST(QuadratureTest, TrapezUniformConverge)
TEST(TrapezoidUniformPeriodicQuadrature1D, Convergence)
{
constexpr int NTESTS(10);

Expand All @@ -166,7 +166,7 @@ TEST(QuadratureTest, TrapezUniformConverge)
}


TEST(QuadratureTest, SimpsonUniformConverge)
TEST(SimpsonUniformPeriodicQuadrature1D, Convergence)
{
constexpr int NTESTS(10);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,47 @@
// SPDX-License-Identifier: MIT

#include <ddc/ddc.hpp>

#include <gmock/gmock.h>
#include <gtest/gtest.h>

#include "geometry.hpp"
#include "ddc_helper.hpp"
#include "quadrature.hpp"
#include "trapezoid_quadrature.hpp"

TEST(QuadratureTest, ExactForConstantFunc)
namespace {

struct X
{
static constexpr bool PERIODIC = false;
};

struct Y
{
static constexpr bool PERIODIC = false;
};

using CoordX = ddc::Coordinate<X>;
using CoordY = ddc::Coordinate<Y>;

struct IDimX : ddc::UniformPointSampling<X>
{
};

struct IDimY : ddc::UniformPointSampling<Y>
{
};

using IVectX = ddc::DiscreteVector<IDimX>;
using IVectY = ddc::DiscreteVector<IDimY>;

using IDomainX = ddc::DiscreteDomain<IDimX>;
using IDomainY = ddc::DiscreteDomain<IDimY>;
using IDomainXY = ddc::DiscreteDomain<IDimX, IDimY>;

using DFieldXY = device_t<ddc::Chunk<double, IDomainXY>>;

TEST(TrapezoidUniformNonPeriodicQuadrature2D, ExactForConstantFunc)
{
CoordX const x_min(0.0);
CoordX const x_max(M_PI);
Expand All @@ -18,14 +52,8 @@ TEST(QuadratureTest, ExactForConstantFunc)
IVectY const y_size(10);

// Creating mesh & supports
ddc::init_discrete_space<BSplinesX>(x_min, x_max, x_size);
ddc::init_discrete_space<BSplinesY>(y_min, y_max, y_size);

ddc::init_discrete_space<IDimX>(SplineInterpPointsX::get_sampling<IDimX>());
ddc::init_discrete_space<IDimY>(SplineInterpPointsY::get_sampling<IDimY>());

IDomainX const gridx(SplineInterpPointsX::get_domain<IDimX>());
IDomainY const gridy(SplineInterpPointsY::get_domain<IDimY>());
IDomainX const gridx = ddc::init_discrete_space<IDimX>(IDimX::init(x_min, x_max, x_size));
IDomainY const gridy = ddc::init_discrete_space<IDimY>(IDimY::init(y_min, y_max, y_size));

IDomainXY const gridxy(gridx, gridy);

Expand All @@ -51,24 +79,10 @@ struct ComputeErrorTraits
{
static bool constexpr PERIODIC = false;
};
struct BSplinesX : ddc::UniformBSplines<X, 3>
{
};
struct BSplinesY : ddc::UniformBSplines<Y, 3>
struct IDimX : ddc::UniformPointSampling<X>
{
};
using GrevillePointsX = ddc::GrevilleInterpolationPoints<
BSplinesX,
ddc::BoundCond::GREVILLE,
ddc::BoundCond::GREVILLE>;
using GrevillePointsY = ddc::GrevilleInterpolationPoints<
BSplinesY,
ddc::BoundCond::GREVILLE,
ddc::BoundCond::GREVILLE>;
struct IDimX : GrevillePointsX::interpolation_mesh_type
{
};
struct IDimY : GrevillePointsY::interpolation_mesh_type
struct IDimY : ddc::UniformPointSampling<Y>
{
};
};
Expand All @@ -78,30 +92,27 @@ double compute_error(int n_elems)
{
using DimX = typename ComputeErrorTraits<N>::X;
using DimY = typename ComputeErrorTraits<N>::Y;
using BSplinesX = typename ComputeErrorTraits<N>::BSplinesX;
using BSplinesY = typename ComputeErrorTraits<N>::BSplinesY;
using GrevillePointsX = typename ComputeErrorTraits<N>::GrevillePointsX;
using GrevillePointsY = typename ComputeErrorTraits<N>::GrevillePointsY;
using IDimX = typename ComputeErrorTraits<N>::IDimX;
using IDimY = typename ComputeErrorTraits<N>::IDimY;
using IVectX = ddc::DiscreteVector<IDimX>;
using IVectY = ddc::DiscreteVector<IDimY>;
using IDomainX = ddc::DiscreteDomain<IDimX>;
using IDomainY = ddc::DiscreteDomain<IDimY>;
using IDomainXY = ddc::DiscreteDomain<IDimX, IDimY>;
using DFieldXY = ddc::Chunk<double, IDomainXY>;

ddc::Coordinate<DimX> const x_min(0.0);
ddc::Coordinate<DimX> const x_max(M_PI);
IVectX x_size(n_elems);

ddc::Coordinate<DimY> const y_min(0.0);
ddc::Coordinate<DimY> const y_max(M_PI);
IVectY y_size(n_elems);

ddc::init_discrete_space<BSplinesX>(x_min, x_max, n_elems);
ddc::init_discrete_space<BSplinesY>(y_min, y_max, n_elems);

ddc::init_discrete_space<IDimX>(GrevillePointsX::template get_sampling<IDimX>());
ddc::init_discrete_space<IDimY>(GrevillePointsY::template get_sampling<IDimY>());
IDomainX const gridx(GrevillePointsX::template get_domain<IDimX>());
IDomainY const gridy(GrevillePointsY::template get_domain<IDimY>());
IDomainX const gridx
= ddc::init_discrete_space<IDimX>(IDimX::template init<IDimX>(x_min, x_max, x_size));
IDomainY const gridy
= ddc::init_discrete_space<IDimY>(IDimY::template init<IDimY>(y_min, y_max, y_size));
IDomainXY const gridxy(gridx, gridy);

host_t<DFieldXY> const quadrature_coeffs = trapezoid_quadrature_coefficients(gridxy);
Expand All @@ -123,7 +134,7 @@ std::array<double, sizeof...(Is)> compute_errors(std::index_sequence<Is...>, int
return std::array<double, sizeof...(Is)> {compute_error<Is>(n_elems *= 2)...};
}

TEST(QuadratureTest, UniformConverge)
TEST(TrapezoidUniformNonPeriodicQuadrature2D, Convergence)
{
constexpr int NTESTS(4);

Expand All @@ -136,3 +147,4 @@ TEST(QuadratureTest, UniformConverge)
EXPECT_LE(order_error, 1e-1);
}
}
} // namespace
Loading

0 comments on commit 342c4bc

Please sign in to comment.