Skip to content

Commit

Permalink
Merge branch 'main' into clarify-spline-names
Browse files Browse the repository at this point in the history
  • Loading branch information
blegouix authored Apr 3, 2024
2 parents 84a5ca7 + 214e3ae commit 5b67b46
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 18 deletions.
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,7 @@ if( FFTW_FOUND AND "${Kokkos_ENABLE_OPENMP}")
target_compile_definitions(DDC INTERFACE fftw_omp_AVAIL)
endif()

if( CUDAToolkit_FOUND )
if( CUDAToolkit_FOUND AND "${Kokkos_ENABLE_CUDA}")
target_link_libraries( DDC INTERFACE CUDA::cufft )
target_compile_definitions(DDC INTERFACE cufft_AVAIL)
endif()
Expand Down
7 changes: 6 additions & 1 deletion examples/heat_equation_spectral.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,12 @@ int main(int argc, char** argv)
ddc::DiscreteElement<DDimT> last_output = time_domain.front();
//! [initial output]

ddc::init_fourier_space<X, Y>(initial_temp.domain());
ddc::init_discrete_space<ddc::PeriodicSampling<ddc::Fourier<X>>>(
ddc::init_fourier_space(
ddc::DiscreteDomain<DDimX>(initial_temp.domain())));
ddc::init_discrete_space<ddc::PeriodicSampling<ddc::Fourier<Y>>>(
ddc::init_fourier_space(
ddc::DiscreteDomain<DDimY>(initial_temp.domain())));
ddc::DiscreteDomain<
ddc::PeriodicSampling<ddc::Fourier<X>>,
ddc::PeriodicSampling<ddc::Fourier<Y>>> const k_mesh
Expand Down
19 changes: 5 additions & 14 deletions include/ddc/kernels/fft.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -578,10 +578,13 @@ void core(
KOKKOS_LAMBDA(const int& i) { out_data[i] = out_data[i] * norm_coef; });
}
}
} // namespace ddc::detail::fft

namespace ddc {

template <typename X>
typename ddc::PeriodicSampling<ddc::Fourier<X>>::template Impl<Kokkos::HostSpace> FourierSampling(
ddc::DiscreteDomain<ddc::UniformPointSampling<X>> x_mesh)
typename ddc::PeriodicSampling<ddc::Fourier<X>>::template Impl<Kokkos::HostSpace>
init_fourier_space(ddc::DiscreteDomain<ddc::UniformPointSampling<X>> x_mesh)
{
auto [impl, ddom] = ddc::PeriodicSampling<ddc::Fourier<X>>::
init(ddc::Coordinate<ddc::Fourier<X>>(0),
Expand All @@ -595,18 +598,6 @@ typename ddc::PeriodicSampling<ddc::Fourier<X>>::template Impl<Kokkos::HostSpace
ddc::detail::fft::N<X>(x_mesh)));
return std::move(impl);
}
} // namespace ddc::detail::fft

namespace ddc {

template <typename... X>
void init_fourier_space(ddc::DiscreteDomain<ddc::UniformPointSampling<X>...> x_mesh)
{
return (ddc::init_discrete_space<ddc::PeriodicSampling<ddc::Fourier<X>>>(
ddc::detail::fft::FourierSampling(
ddc::select<ddc::UniformPointSampling<X>>(x_mesh))),
...);
}

// FourierMesh, first element corresponds to mode 0
template <typename... X>
Expand Down
7 changes: 5 additions & 2 deletions tests/fft.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,9 @@ static void test_fft()
init(ddc::Coordinate<X>(a + (b - a) / Nx / 2),
ddc::Coordinate<X>(b - (b - a) / Nx / 2),
DVect<DDim<X>>(Nx)))...);
ddc::init_fourier_space<X...>(x_mesh);
(ddc::init_discrete_space<ddc::PeriodicSampling<ddc::Fourier<X>>>(
ddc::init_fourier_space(ddc::DiscreteDomain<DDim<X>>(x_mesh))),
...);
DDom<DFDim<ddc::Fourier<X>>...> const k_mesh = ddc::FourierMesh(x_mesh, full_fft);

ddc::Chunk f_alloc(x_mesh, ddc::KokkosAllocator<Tin, MemorySpace>());
Expand Down Expand Up @@ -129,7 +131,8 @@ static void test_fft_norm(ddc::FFT_Normalization const norm)
init(ddc::Coordinate<X>(-1. / 4),
ddc::Coordinate<X>(1. / 4),
DVect<DDim<X>>(2)));
ddc::init_fourier_space<X>(x_mesh);
ddc::init_discrete_space<ddc::PeriodicSampling<ddc::Fourier<X>>>(
ddc::init_fourier_space<X>(x_mesh));
DDom<DFDim<ddc::Fourier<X>>> const k_mesh = ddc::FourierMesh(x_mesh, full_fft);

ddc::Chunk f_alloc = ddc::Chunk(x_mesh, ddc::KokkosAllocator<Tin, MemorySpace>());
Expand Down

0 comments on commit 5b67b46

Please sign in to comment.