Skip to content

Commit

Permalink
Remove duplicate continuous dimension in XVx poisson FEM
Browse files Browse the repository at this point in the history
Related to #229

See merge request gysela-developpers/gyselalibxx!533

--------------------------------------------
  • Loading branch information
Emily Bourne committed Jun 25, 2024
1 parent dd66f44 commit 5387383
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 30 deletions.
8 changes: 4 additions & 4 deletions src/geometryXVx/poisson/femnonperiodicqnsolver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,16 +54,16 @@ FemNonPeriodicQNSolver::FemNonPeriodicQNSolver(
BSDomainX const
domain(ddc::DiscreteElement<BSplinesX>(0),
ddc::DiscreteVector<BSplinesX>(m_ncells + 1));
ddc::Chunk<ddc::Coordinate<QDimX>, BSDomainX> knots(domain);
ddc::Chunk<ddc::Coordinate<RDimX>, BSDomainX> knots(domain);

for (ddc::DiscreteElement<BSplinesX> const i : domain) {
knots(i) = quad_point_from_coord(ddc::discrete_space<NUBSplinesX>().get_knot(i.uid()));
}

// Calculate the integration coefficients
GaussLegendre<QDimX> const gl(s_npts_gauss);
std::vector<ddc::Coordinate<QDimX>> eval_pts_data(m_quad_coef_alloc.domain().size());
ddc::ChunkSpan<ddc::Coordinate<QDimX>, ddc::DiscreteDomain<QMeshX>> const
GaussLegendre<RDimX> const gl(s_npts_gauss);
std::vector<ddc::Coordinate<RDimX>> eval_pts_data(m_quad_coef_alloc.domain().size());
ddc::ChunkSpan<ddc::Coordinate<RDimX>, ddc::DiscreteDomain<QMeshX>> const
eval_pts(eval_pts_data.data(), m_quad_coef_alloc.domain());
auto quad_coef_host = ddc::create_mirror_and_copy(m_quad_coef_alloc.span_view());
gl.compute_points_and_weights_on_mesh(eval_pts, quad_coef_host.span_view(), knots.span_cview());
Expand Down
19 changes: 6 additions & 13 deletions src/geometryXVx/poisson/femnonperiodicqnsolver.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,15 +39,8 @@ using NUBSplineXEvaluator_1d = ddc::SplineEvaluator<
class FemNonPeriodicQNSolver : public IQNSolver
{
public:
/**
* A tag to represent the dimension where the quadrature points
* are defined.
*/
struct QDimX
{
};

struct QMeshX : ddc::NonUniformPointSampling<QDimX>
/// The discrete dimension of the quadrature points.
struct QMeshX : ddc::NonUniformPointSampling<RDimX>
{
};

Expand Down Expand Up @@ -82,16 +75,16 @@ class FemNonPeriodicQNSolver : public IQNSolver
std::unique_ptr<Matrix> m_fem_matrix;

private:
static KOKKOS_FUNCTION ddc::Coordinate<QDimX> quad_point_from_coord(
static KOKKOS_FUNCTION ddc::Coordinate<RDimX> quad_point_from_coord(
ddc::Coordinate<RDimX> const& coord)
{
return ddc::Coordinate<QDimX>(ddc::get<RDimX>(coord));
return ddc::Coordinate<RDimX>(ddc::get<RDimX>(coord));
}

static KOKKOS_FUNCTION ddc::Coordinate<RDimX> coord_from_quad_point(
ddc::Coordinate<QDimX> const& coord)
ddc::Coordinate<RDimX> const& coord)
{
return ddc::Coordinate<RDimX>(ddc::get<QDimX>(coord));
return ddc::Coordinate<RDimX>(ddc::get<RDimX>(coord));
}

public:
Expand Down
8 changes: 4 additions & 4 deletions src/geometryXVx/poisson/femperiodicqnsolver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,16 +27,16 @@ FemPeriodicQNSolver::FemPeriodicQNSolver(
BSDomainX const
domain(ddc::DiscreteElement<BSplinesX>(0),
ddc::DiscreteVector<BSplinesX>(m_ncells + 1));
ddc::Chunk<ddc::Coordinate<QDimX>, BSDomainX> knots(domain);
ddc::Chunk<ddc::Coordinate<RDimX>, BSDomainX> knots(domain);

for (ddc::DiscreteElement<BSplinesX> const i : domain) {
knots(i) = quad_point_from_coord(ddc::discrete_space<BSplinesX>().get_knot(i.uid()));
}

// Calculate the integration coefficients
GaussLegendre<QDimX> const gl(s_npts_gauss);
std::vector<ddc::Coordinate<QDimX>> eval_pts_data(m_quad_coef_alloc.domain().size());
ddc::ChunkSpan<ddc::Coordinate<QDimX>, ddc::DiscreteDomain<QMeshX>> const
GaussLegendre<RDimX> const gl(s_npts_gauss);
std::vector<ddc::Coordinate<RDimX>> eval_pts_data(m_quad_coef_alloc.domain().size());
ddc::ChunkSpan<ddc::Coordinate<RDimX>, ddc::DiscreteDomain<QMeshX>> const
eval_pts(eval_pts_data.data(), m_quad_coef_alloc.domain());
auto quad_coef_host = ddc::create_mirror_and_copy(m_quad_coef_alloc.span_view());
gl.compute_points_and_weights_on_mesh(eval_pts, quad_coef_host.span_view(), knots.span_cview());
Expand Down
15 changes: 6 additions & 9 deletions src/geometryXVx/poisson/femperiodicqnsolver.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,8 @@
class FemPeriodicQNSolver : public IQNSolver
{
public:
struct QDimX
{
};

struct QMeshX : ddc::NonUniformPointSampling<QDimX>
/// The discrete dimension of the quadrature points.
struct QMeshX : ddc::NonUniformPointSampling<RDimX>
{
};

Expand Down Expand Up @@ -59,16 +56,16 @@ class FemPeriodicQNSolver : public IQNSolver
std::unique_ptr<Matrix> m_fem_matrix;

private:
static KOKKOS_FUNCTION ddc::Coordinate<QDimX> quad_point_from_coord(
static KOKKOS_FUNCTION ddc::Coordinate<RDimX> quad_point_from_coord(
ddc::Coordinate<RDimX> const& coord)
{
return ddc::Coordinate<QDimX>(ddc::get<RDimX>(coord));
return ddc::Coordinate<RDimX>(ddc::get<RDimX>(coord));
}

static KOKKOS_FUNCTION ddc::Coordinate<RDimX> coord_from_quad_point(
ddc::Coordinate<QDimX> const& coord)
ddc::Coordinate<RDimX> const& coord)
{
return ddc::Coordinate<RDimX>(ddc::get<QDimX>(coord));
return ddc::Coordinate<RDimX>(ddc::get<RDimX>(coord));
}

public:
Expand Down

0 comments on commit 5387383

Please sign in to comment.