Skip to content

Commit 7eb5673

Browse files
authored
Fix the ordering of derivatives the quadrature coefficients (CExA-project#1028)
* Fix the ordering of derivatives of the quadrature coefficients * Increase tolerance
1 parent f4630cc commit 7eb5673

File tree

3 files changed

+12
-18
lines changed

3 files changed

+12
-18
lines changed

include/ddc/kernels/splines/spline_builder.hpp

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -730,10 +730,7 @@ void SplineBuilder<ExecSpace, MemorySpace, BSplines, InterpolationDDim, BcLower,
730730
// iterate only to deg as last bspline is 0
731731
for (std::size_t i = 0; i < s_nbc_xmin; ++i) {
732732
for (std::size_t j = 0; j < bsplines_type::degree(); ++j) {
733-
m_matrix->set_element(
734-
i,
735-
j,
736-
DDC_MDSPAN_ACCESS_OP(derivs, j, s_nbc_xmin - i - 1 + s_odd));
733+
m_matrix->set_element(i, j, DDC_MDSPAN_ACCESS_OP(derivs, j, i + s_odd));
737734
}
738735
}
739736
}
@@ -868,12 +865,12 @@ operator()(
868865
KOKKOS_LAMBDA(
869866
typename batch_domain_type<BatchedInterpolationDDom>::discrete_element_type
870867
j) {
871-
for (int i = s_nbc_xmin; i > 0; --i) {
872-
spline(ddc::DiscreteElement<bsplines_type>(s_nbc_xmin - i), j)
868+
for (int i = 0; i < s_nbc_xmin; ++i) {
869+
spline(ddc::DiscreteElement<bsplines_type>(i), j)
873870
= derivs_xmin_values(
874-
ddc::DiscreteElement<deriv_type>(i + odd_proxy - 1),
871+
ddc::DiscreteElement<deriv_type>(i + odd_proxy),
875872
j)
876-
* ddc::detail::ipow(dx_proxy, i + odd_proxy - 1);
873+
* ddc::detail::ipow(dx_proxy, i + odd_proxy);
877874
}
878875
});
879876
}
@@ -1087,8 +1084,7 @@ SplineBuilder<ExecSpace, MemorySpace, BSplines, InterpolationDDim, BcLower, BcUp
10871084
coefficients_derivs_xmin(i) *= ddc::detail::
10881085
ipow(dx_proxy,
10891086
static_cast<std::size_t>(get<bsplines_type>(
1090-
s_nbc_xmin + odd_proxy - 1
1091-
- (i - coefficients_derivs_xmin.domain().front()))));
1087+
(i - coefficients_derivs_xmin.domain().front()) + odd_proxy)));
10921088
});
10931089
ddc::parallel_for_each(
10941090
exec_space(),
@@ -1097,15 +1093,14 @@ SplineBuilder<ExecSpace, MemorySpace, BSplines, InterpolationDDim, BcLower, BcUp
10971093
coefficients_derivs_xmax(i) *= ddc::detail::
10981094
ipow(dx_proxy,
10991095
static_cast<std::size_t>(get<bsplines_type>(
1100-
i - coefficients_derivs_xmax.domain().front() + odd_proxy)));
1096+
(i - coefficients_derivs_xmax.domain().front()) + odd_proxy)));
11011097
});
11021098

11031099
ddc::DiscreteElement<deriv_type> const first_deriv(s_odd);
11041100
// Allocate Chunk on deriv_type and interpolation_discrete_dimension_type and copy quadrature coefficients into it
11051101
ddc::Chunk coefficients_derivs_xmin_out(
1106-
ddc::DiscreteDomain<deriv_type>(
1107-
first_deriv, // These indices are wrong the order should be reversed
1108-
ddc::DiscreteVector<deriv_type>(s_nbc_xmin)),
1102+
ddc::DiscreteDomain<
1103+
deriv_type>(first_deriv, ddc::DiscreteVector<deriv_type>(s_nbc_xmin)),
11091104
ddc::KokkosAllocator<double, OutMemorySpace>());
11101105
ddc::Chunk coefficients_out(
11111106
interpolation_domain().take_first(

tests/splines/batched_2d_spline_builder.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -564,7 +564,7 @@ void TestBatched2dSpline()
564564
dx<I2>(ncells),
565565
s_degree,
566566
s_degree),
567-
1e-11 * max_norm_diff2));
567+
1e-10 * max_norm_diff2));
568568
EXPECT_LE(
569569
max_norm_error_diff12,
570570
std::
@@ -573,7 +573,7 @@ void TestBatched2dSpline()
573573
dx<I2>(ncells),
574574
s_degree,
575575
s_degree),
576-
1e-9 * max_norm_diff12));
576+
1e-8 * max_norm_diff12));
577577
}
578578

579579
} // namespace anonymous_namespace_workaround_batched_2d_spline_builder_cpp

tests/splines/non_periodic_spline_builder.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -234,8 +234,7 @@ void TestNonPeriodicSplineBuilderTestIdentity()
234234
0.0,
235235
ddc::reducer::sum<double>(),
236236
KOKKOS_LAMBDA(ddc::DiscreteElement<ddc::Deriv<DimX>> const ix) {
237-
return quadrature_coefficients_derivs_xmin(ix)
238-
* derivs_lhs(quadrature_coefficients_derivs_xmin.domain().back() - ix);
237+
return quadrature_coefficients_derivs_xmin(ix) * derivs_lhs(ix);
239238
});
240239
#else
241240
double const quadrature_integral_derivs_xmin = 0.;

0 commit comments

Comments
 (0)