Skip to content

Commit

Permalink
Sync ddc
Browse files Browse the repository at this point in the history
This MR prepares the work of synchronizing DDC with the new feature of reusing predefined static attributes. For example it allows to define `IDimX1 : ddc::UniformPointSampling<RDimX>{};` and `IDimX2 : ddc::UniformPointSampling<RDimX>{};` which was not possible before.

The changes are basically:
- transform aliases `using IDimX = ddc::UniformPointSampling<RDimX>;` into new types `IDimX : ddc::UniformPointSampling<RDimX>{};`,
- update classes `SpeciesInformation`, `Moments`, `PolarBSplines` and `Bernstein` to fulfill the new DDC requirements for static attributes,
- some functions are now template on the name of the discrete dimension like `GrevillePoints::get_sampling` or `ielec`.

Regarding the generation of discrete dimensions in the tests, I think we should come up with a guideline (helper class, use template fixtures...) satisfying the restrictions of CUDA/nvcc. Classes in `.cpp` files should be put in an anonymous namespace to avoid surprises at link time.

Testing on AMD GPU is not easy for now, let us wait #217

See merge request gysela-developpers/gyselalibxx!404

--------------------------------------------
  • Loading branch information
EmilyBourne committed May 27, 2024
1 parent a38fbd1 commit b6b7610
Show file tree
Hide file tree
Showing 139 changed files with 2,120 additions and 1,688 deletions.
16 changes: 8 additions & 8 deletions simulations/geometryRTheta/diocotron/diocotron.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@
#include "paraconfpp.hpp"
#include "params.yaml.hpp"
#include "pdi_out.yml.hpp"
#include "poisson_rhs_function.hpp"
#include "polarpoissonsolver.hpp"
#include "poisson_like_rhs_function.hpp"
#include "polarpoissonlikesolver.hpp"
#include "quadrature.hpp"
#include "rk3.hpp"
#include "rk4.hpp"
Expand All @@ -42,7 +42,7 @@


namespace {
using PoissonSolver = PolarSplineFEMPoissonSolver;
using PoissonSolver = PolarSplineFEMPoissonLikeSolver;
using DiscreteMapping
= DiscreteToCartesian<RDimX, RDimY, SplineRPBuilder, SplineRPEvaluatorConstBound>;
using Mapping = CircularToCartesian<RDimX, RDimY, RDimR, RDimP>;
Expand Down Expand Up @@ -126,11 +126,11 @@ int main(int argc, char** argv)
ddc::init_discrete_space<BSplinesR>(r_knots);
ddc::init_discrete_space<BSplinesP>(p_knots);

ddc::init_discrete_space<IDimR>(SplineInterpPointsR::get_sampling());
ddc::init_discrete_space<IDimP>(SplineInterpPointsP::get_sampling());
ddc::init_discrete_space<IDimR>(SplineInterpPointsR::get_sampling<IDimR>());
ddc::init_discrete_space<IDimP>(SplineInterpPointsP::get_sampling<IDimP>());

IDomainR const interpolation_domain_R(SplineInterpPointsR::get_domain());
IDomainP const interpolation_domain_P(SplineInterpPointsP::get_domain());
IDomainR const interpolation_domain_R(SplineInterpPointsR::get_domain<IDimR>());
IDomainP const interpolation_domain_P(SplineInterpPointsP::get_domain<IDimP>());
IDomainRP const grid(interpolation_domain_R, interpolation_domain_P);

FieldRP<CoordRP> coords(grid);
Expand Down Expand Up @@ -310,7 +310,7 @@ int main(int argc, char** argv)
DFieldRP phi_eq(grid);
Spline2D rho_coef_eq(dom_bsplinesRP);
builder(rho_coef_eq.span_view(), rho_eq.span_cview());
PoissonRHSFunction poisson_rhs_eq(rho_coef_eq, spline_evaluator);
PoissonLikeRHSFunction poisson_rhs_eq(rho_coef_eq, spline_evaluator);
poisson_solver(poisson_rhs_eq, coords.span_cview(), phi_eq.span_view());


Expand Down
16 changes: 8 additions & 8 deletions simulations/geometryRTheta/vortex_merger/vortex_merger.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@
#include "paraconfpp.hpp"
#include "params.yaml.hpp"
#include "pdi_out.yml.hpp"
#include "poisson_rhs_function.hpp"
#include "polarpoissonsolver.hpp"
#include "poisson_like_rhs_function.hpp"
#include "polarpoissonlikesolver.hpp"
#include "quadrature.hpp"
#include "rk3.hpp"
#include "rk4.hpp"
Expand All @@ -43,7 +43,7 @@


namespace {
using PoissonSolver = PolarSplineFEMPoissonSolver;
using PoissonSolver = PolarSplineFEMPoissonLikeSolver;
using DiscreteMapping
= DiscreteToCartesian<RDimX, RDimY, SplineRPBuilder, SplineRPEvaluatorConstBound>;
using CircularMapping = CircularToCartesian<RDimX, RDimY, RDimR, RDimP>;
Expand Down Expand Up @@ -121,11 +121,11 @@ int main(int argc, char** argv)
ddc::init_discrete_space<BSplinesR>(r_knots);
ddc::init_discrete_space<BSplinesP>(p_knots);

ddc::init_discrete_space<IDimR>(SplineInterpPointsR::get_sampling());
ddc::init_discrete_space<IDimP>(SplineInterpPointsP::get_sampling());
ddc::init_discrete_space<IDimR>(SplineInterpPointsR::get_sampling<IDimR>());
ddc::init_discrete_space<IDimP>(SplineInterpPointsP::get_sampling<IDimP>());

IDomainR const interpolation_domain_R(SplineInterpPointsR::get_domain());
IDomainP const interpolation_domain_P(SplineInterpPointsP::get_domain());
IDomainR const interpolation_domain_R(SplineInterpPointsR::get_domain<IDimR>());
IDomainP const interpolation_domain_P(SplineInterpPointsP::get_domain<IDimP>());
IDomainRP const grid(interpolation_domain_R, interpolation_domain_P);

FieldRP<CoordRP> coords(grid);
Expand Down Expand Up @@ -275,7 +275,7 @@ int main(int argc, char** argv)
DFieldRP phi_eq(grid);
Spline2D rho_coef_eq(dom_bsplinesRP);
builder(rho_coef_eq.span_view(), rho_eq.span_cview());
PoissonRHSFunction poisson_rhs_eq(rho_coef_eq.span_view(), spline_evaluator);
PoissonLikeRHSFunction poisson_rhs_eq(rho_coef_eq.span_view(), spline_evaluator);
poisson_solver(poisson_rhs_eq, coords.span_cview(), phi_eq.span_view());


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,10 +88,10 @@ int main(int argc, char** argv)

ddc::init_discrete_space<BSplinesVx>(vx_min, vx_max, vx_ncells);

ddc::init_discrete_space<IDimX>(SplineInterpPointsX::get_sampling());
ddc::init_discrete_space<IDimVx>(SplineInterpPointsVx::get_sampling());
IDomainX interpolation_domain_x(SplineInterpPointsX::get_domain());
IDomainVx interpolation_domain_vx(SplineInterpPointsVx::get_domain());
ddc::init_discrete_space<IDimX>(SplineInterpPointsX::get_sampling<IDimX>());
ddc::init_discrete_space<IDimVx>(SplineInterpPointsVx::get_sampling<IDimVx>());
IDomainX interpolation_domain_x(SplineInterpPointsX::get_domain<IDimX>());
IDomainVx interpolation_domain_vx(SplineInterpPointsVx::get_domain<IDimVx>());
IDomainXVx meshXVx(interpolation_domain_x, interpolation_domain_vx);

IVectSp const nb_kinspecies(PCpp_len(conf_voicexx, ".SpeciesInfo"));
Expand Down
11 changes: 6 additions & 5 deletions simulations/geometryXVx/bump_on_tail/bumpontail_fft.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -84,10 +84,10 @@ int main(int argc, char** argv)

ddc::init_discrete_space<BSplinesVx>(vx_min, vx_max, vx_ncells);

ddc::init_discrete_space<IDimX>(SplineInterpPointsX::get_sampling());
ddc::init_discrete_space<IDimVx>(SplineInterpPointsVx::get_sampling());
IDomainX interpolation_domain_x(SplineInterpPointsX::get_domain());
IDomainVx interpolation_domain_vx(SplineInterpPointsVx::get_domain());
ddc::init_discrete_space<IDimX>(SplineInterpPointsX::get_sampling<IDimX>());
ddc::init_discrete_space<IDimVx>(SplineInterpPointsVx::get_sampling<IDimVx>());
IDomainX interpolation_domain_x(SplineInterpPointsX::get_domain<IDimX>());
IDomainVx interpolation_domain_vx(SplineInterpPointsVx::get_domain<IDimVx>());
IDomainXVx meshXVx(interpolation_domain_x, interpolation_domain_vx);

IVectSp const nb_kinspecies(PCpp_len(conf_voicexx, ".SpeciesInfo"));
Expand Down Expand Up @@ -209,7 +209,8 @@ int main(int argc, char** argv)

SplitVlasovSolver const vlasov(advection_x, advection_vx);

ddc::init_discrete_space<IDimFx>(ddc::init_fourier_space<RDimX>(ddc::select<IDimX>(meshSpXVx)));
ddc::init_discrete_space<IDimFx>(
ddc::init_fourier_space<IDimFx>(ddc::select<IDimX>(meshSpXVx)));

host_t<DFieldVx> const quadrature_coeffs_host
= neumann_spline_quadrature_coefficients(gridvx, builder_vx_poisson);
Expand Down
8 changes: 4 additions & 4 deletions simulations/geometryXVx/landau/landau_fem_uniform.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -87,10 +87,10 @@ int main(int argc, char** argv)

ddc::init_discrete_space<BSplinesVx>(vx_min, vx_max, vx_ncells);

ddc::init_discrete_space<IDimX>(SplineInterpPointsX::get_sampling());
ddc::init_discrete_space<IDimVx>(SplineInterpPointsVx::get_sampling());
IDomainX interpolation_domain_x(SplineInterpPointsX::get_domain());
IDomainVx interpolation_domain_vx(SplineInterpPointsVx::get_domain());
ddc::init_discrete_space<IDimX>(SplineInterpPointsX::get_sampling<IDimX>());
ddc::init_discrete_space<IDimVx>(SplineInterpPointsVx::get_sampling<IDimVx>());
IDomainX interpolation_domain_x(SplineInterpPointsX::get_domain<IDimX>());
IDomainVx interpolation_domain_vx(SplineInterpPointsVx::get_domain<IDimVx>());
IDomainXVx meshXVx(interpolation_domain_x, interpolation_domain_vx);

IVectSp const nb_kinspecies(PCpp_len(conf_voicexx, ".SpeciesInfo"));
Expand Down
11 changes: 6 additions & 5 deletions simulations/geometryXVx/landau/landau_fft.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -84,10 +84,10 @@ int main(int argc, char** argv)

ddc::init_discrete_space<BSplinesVx>(vx_min, vx_max, vx_ncells);

ddc::init_discrete_space<IDimX>(SplineInterpPointsX::get_sampling());
ddc::init_discrete_space<IDimVx>(SplineInterpPointsVx::get_sampling());
IDomainX interpolation_domain_x(SplineInterpPointsX::get_domain());
IDomainVx interpolation_domain_vx(SplineInterpPointsVx::get_domain());
ddc::init_discrete_space<IDimX>(SplineInterpPointsX::get_sampling<IDimX>());
ddc::init_discrete_space<IDimVx>(SplineInterpPointsVx::get_sampling<IDimVx>());
IDomainX interpolation_domain_x(SplineInterpPointsX::get_domain<IDimX>());
IDomainVx interpolation_domain_vx(SplineInterpPointsVx::get_domain<IDimVx>());
IDomainXVx meshXVx(interpolation_domain_x, interpolation_domain_vx);

IVectSp const nb_kinspecies(PCpp_len(conf_voicexx, ".SpeciesInfo"));
Expand Down Expand Up @@ -209,7 +209,8 @@ int main(int argc, char** argv)

SplitVlasovSolver const vlasov(advection_x, advection_vx);

ddc::init_discrete_space<IDimFx>(ddc::init_fourier_space<RDimX>(ddc::select<IDimX>(meshSpXVx)));
ddc::init_discrete_space<IDimFx>(
ddc::init_fourier_space<IDimFx>(ddc::select<IDimX>(meshSpXVx)));

host_t<DFieldVx> const quadrature_coeffs_host
= neumann_spline_quadrature_coefficients(gridvx, builder_vx_poisson);
Expand Down
11 changes: 6 additions & 5 deletions simulations/geometryXVx/sheath/sheath.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -100,10 +100,10 @@ int main(int argc, char** argv)

ddc::init_discrete_space<BSplinesVx>(vx_min, vx_max, vx_ncells);

ddc::init_discrete_space<IDimX>(SplineInterpPointsX::get_sampling());
ddc::init_discrete_space<IDimVx>(SplineInterpPointsVx::get_sampling());
IDomainX interpolation_domain_x(SplineInterpPointsX::get_domain());
IDomainVx interpolation_domain_vx(SplineInterpPointsVx::get_domain());
ddc::init_discrete_space<IDimX>(SplineInterpPointsX::get_sampling<IDimX>());
ddc::init_discrete_space<IDimVx>(SplineInterpPointsVx::get_sampling<IDimVx>());
IDomainX interpolation_domain_x(SplineInterpPointsX::get_domain<IDimX>());
IDomainVx interpolation_domain_vx(SplineInterpPointsVx::get_domain<IDimVx>());
IDomainXVx meshXVx(interpolation_domain_x, interpolation_domain_vx);

IVectSp const nb_kinspecies(PCpp_len(conf_voicexx, ".SpeciesInfo"));
Expand Down Expand Up @@ -309,7 +309,8 @@ int main(int argc, char** argv)
quadrature_coeffs_host.span_view());
ChargeDensityCalculator rhs(quadrature_coeffs);
#ifdef PERIODIC_RDIMX
ddc::init_discrete_space<IDimFx>(ddc::init_fourier_space<RDimX>(ddc::select<IDimX>(meshSpXVx)));
ddc::init_discrete_space<IDimFx>(
ddc::init_fourier_space<IDimFx>(ddc::select<IDimX>(meshSpXVx)));
FftPoissonSolver const poisson(rhs);
#else
FemNonPeriodicPoissonSolver const poisson(builder_x_poisson, spline_x_evaluator_poisson, rhs);
Expand Down
20 changes: 10 additions & 10 deletions simulations/geometryXYVxVy/landau/landau4d_fft.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -82,18 +82,18 @@ int main(int argc, char** argv)
ddc::init_discrete_space<BSplinesY>(y_min, y_max, y_ncells);
ddc::init_discrete_space<BSplinesVx>(vx_min, vx_max, vx_ncells);
ddc::init_discrete_space<BSplinesVy>(vy_min, vy_max, vy_ncells);
ddc::init_discrete_space<IDimX>(SplineInterpPointsX::get_sampling());
ddc::init_discrete_space<IDimY>(SplineInterpPointsY::get_sampling());
ddc::init_discrete_space<IDimVx>(SplineInterpPointsVx::get_sampling());
ddc::init_discrete_space<IDimVy>(SplineInterpPointsVy::get_sampling());
ddc::init_discrete_space<IDimX>(SplineInterpPointsX::get_sampling<IDimX>());
ddc::init_discrete_space<IDimY>(SplineInterpPointsY::get_sampling<IDimY>());
ddc::init_discrete_space<IDimVx>(SplineInterpPointsVx::get_sampling<IDimVx>());
ddc::init_discrete_space<IDimVy>(SplineInterpPointsVy::get_sampling<IDimVy>());

IVectSp const nb_kinspecies(PCpp_len(conf_voicexx, ".SpeciesInfo"));
IDomainSp const dom_kinsp(IndexSp(0), nb_kinspecies);

IDomainX interpolation_domain_x(SplineInterpPointsX::get_domain());
IDomainY interpolation_domain_y(SplineInterpPointsY::get_domain());
IDomainVx interpolation_domain_vx(SplineInterpPointsVx::get_domain());
IDomainVy interpolation_domain_vy(SplineInterpPointsVy::get_domain());
IDomainX interpolation_domain_x(SplineInterpPointsX::get_domain<IDimX>());
IDomainY interpolation_domain_y(SplineInterpPointsY::get_domain<IDimY>());
IDomainVx interpolation_domain_vx(SplineInterpPointsVx::get_domain<IDimVx>());
IDomainVy interpolation_domain_vy(SplineInterpPointsVy::get_domain<IDimVy>());
IDomainVxVy interpolation_domain_vxvy(interpolation_domain_vx, interpolation_domain_vy);

IDomainXYVxVy meshXYVxVy(
Expand Down Expand Up @@ -210,9 +210,9 @@ int main(int argc, char** argv)
SplitVlasovSolver const vlasov(advection_x, advection_y, advection_vx, advection_vy);

ddc::init_discrete_space<IDimFx>(
ddc::init_fourier_space<RDimX>(ddc::select<IDimX>(meshSpXYVxVy)));
ddc::init_fourier_space<IDimFx>(ddc::select<IDimX>(meshSpXYVxVy)));
ddc::init_discrete_space<IDimFy>(
ddc::init_fourier_space<RDimY>(ddc::select<IDimY>(meshSpXYVxVy)));
ddc::init_fourier_space<IDimFy>(ddc::select<IDimY>(meshSpXYVxVy)));

host_t<DFieldVxVy> const quadrature_coeffs_host = neumann_spline_quadrature_coefficients(
interpolation_domain_vxvy,
Expand Down
5 changes: 2 additions & 3 deletions src/advection/bsl_advection_vx.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,10 @@
template <class Geometry, class DDimV>
class BslAdvectionVelocity : public IAdvectionVelocity<Geometry, DDimV>
{
using DDimSp = typename Geometry::DDimSp;
using FdistribuDDom = typename Geometry::FdistribuDDom;
using SpatialDDom = typename Geometry::SpatialDDom;
using DElemV = ddc::DiscreteElement<DDimV>;
using DElemSp = ddc::DiscreteElement<DDimSp>;
using DElemSp = ddc::DiscreteElement<IDimSp>;
using CDimV = typename DDimV::continuous_dimension_type;

private:
Expand Down Expand Up @@ -61,7 +60,7 @@ class BslAdvectionVelocity : public IAdvectionVelocity<Geometry, DDimV>
Kokkos::Profiling::pushRegion("BslAdvectionVelocity");
FdistribuDDom const dom = allfdistribu.domain();
ddc::DiscreteDomain<DDimV> const v_dom = ddc::select<DDimV>(dom);
ddc::DiscreteDomain<DDimSp> const sp_dom = ddc::select<DDimSp>(dom);
ddc::DiscreteDomain<IDimSp> const sp_dom = ddc::select<IDimSp>(dom);

// pre-allocate some memory to prevent allocation later in loop
ddc::Chunk feet_coords_alloc(
Expand Down
9 changes: 4 additions & 5 deletions src/advection/bsl_advection_x.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,12 @@
template <class Geometry, class DDimX>
class BslAdvectionSpatial : public IAdvectionSpatial<Geometry, DDimX>
{
using DDimSp = typename Geometry::DDimSp;
using DDimV = typename Geometry::template velocity_dim_for<DDimX>;
using DDom = typename Geometry::FdistribuDDom;
using DElemX = ddc::DiscreteElement<DDimX>;
using DElemV = ddc::DiscreteElement<DDimV>;
using DElemSp = ddc::DiscreteElement<DDimSp>;
using DElemSpV = ddc::DiscreteElement<DDimSp, DDimV>;
using DElemSp = ddc::DiscreteElement<IDimSp>;
using DElemSpV = ddc::DiscreteElement<IDimSp, DDimV>;
using CDimX = typename DDimX::continuous_dimension_type;
using CDimV = typename DDimV::continuous_dimension_type;

Expand Down Expand Up @@ -62,7 +61,7 @@ class BslAdvectionSpatial : public IAdvectionSpatial<Geometry, DDimX>
DDom const dom = allfdistribu.domain();
ddc::DiscreteDomain<DDimX> const x_dom = ddc::select<DDimX>(dom);
ddc::DiscreteDomain<DDimV> const v_dom = ddc::select<DDimV>(dom);
ddc::DiscreteDomain<DDimSp> const sp_dom = ddc::select<DDimSp>(dom);
ddc::DiscreteDomain<IDimSp> const sp_dom = ddc::select<IDimSp>(dom);

// pre-allocate some memory to prevent allocation later in loop
ddc::Chunk feet_coords_alloc(
Expand All @@ -72,7 +71,7 @@ class BslAdvectionSpatial : public IAdvectionSpatial<Geometry, DDimX>
std::unique_ptr<InterpolatorType> const interpolator_x_ptr = m_interpolator_x.preallocate();
InterpolatorType const& interpolator_x = *interpolator_x_ptr;

auto c_dom = ddc::remove_dims_of(dom, ddc::DiscreteDomain<DDimSp, DDimX>(sp_dom, x_dom));
auto c_dom = ddc::remove_dims_of(dom, ddc::DiscreteDomain<IDimSp, DDimX>(sp_dom, x_dom));
using DElemC = typename decltype(c_dom)::discrete_element_type;

for (DElemSp const isp : sp_dom) {
Expand Down
22 changes: 16 additions & 6 deletions src/geometry5D/geometry/geometry.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
*
*/

using Species = SpeciesInformation;
using Species = IDimSp;
using IdxSp = ddc::DiscreteElement<Species>;
using DVecSp = ddc::DiscreteVector<Species>;
using DDomSp = ddc::DiscreteDomain<Species>;
Expand Down Expand Up @@ -93,11 +93,21 @@ using CoordVpar = ddc::Coordinate<Vpar>;
using CoordMu = ddc::Coordinate<Mu>;
using CoordV2D = ddc::Coordinate<Mu, Vpar>;

using GridTor1 = ddc::NonUniformPointSampling<Tor1>;
using GridTor2 = ddc::NonUniformPointSampling<Tor2>;
using GridTor3 = ddc::NonUniformPointSampling<Tor3>;
using GridVpar = ddc::NonUniformPointSampling<Vpar>;
using GridMu = ddc::NonUniformPointSampling<Mu>;
struct GridTor1 : ddc::NonUniformPointSampling<Tor1>
{
};
struct GridTor2 : ddc::NonUniformPointSampling<Tor2>
{
};
struct GridTor3 : ddc::NonUniformPointSampling<Tor3>
{
};
struct GridVpar : ddc::NonUniformPointSampling<Vpar>
{
};
struct GridMu : ddc::NonUniformPointSampling<Mu>
{
};

using IdxTor1 = ddc::DiscreteElement<GridTor1>;
using IdxTor2 = ddc::DiscreteElement<GridTor2>;
Expand Down
2 changes: 1 addition & 1 deletion src/geometryRTheta/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ The `geometryRTheta` folder contains all the code describing methods which are s

- [interpolation](./interpolation/README.md) - Code describing interpolation methods on 2D polar domain.

- [poisson](./poisson/README.md) - Code describing the polar Poisson solver.
- [poisson](./poisson/README.md) - Code describing the polar Quasi-Neutrality solver.

- [time\_solver](./time_solver/README.md) - The methods to solve in time the equations system.

Expand Down
6 changes: 3 additions & 3 deletions src/geometryRTheta/advection_field/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,12 @@ E = - \nabla \phi, \\

with $`\rho`$ the density, $`\phi`$ the electrostatic potential and $`E`$ the electrical field.

The AdvectionFieldFinder computes the advection field $`A`$ from the electrical field $`\phi`$ returned by the PolarSplineFEMPoissonSolver.
The AdvectionFieldFinder computes the advection field $`A`$ from the electrical field $`\phi`$ returned by the PolarSplineFEMPoissonLikeSolver.
It has two types of `operator()`:
* one returning the advection field along the axis of the physical domain: $`A = (A_x, A_y)`$
* and the another returning the advection field along the axis of the logical domain: $`A = (A_r, A_\theta)`$.

The PolarSplineFEMPoissonSolver can return the solution $`\phi`$ of the Poisson equation under two forms:
The PolarSplineFEMPoissonLikeSolver can return the solution $`\phi`$ of the PDE under two forms:
* a Chunk of values of the solution on the mesh points of the grid;
* a PolarSpline representation of the solution.

Expand Down Expand Up @@ -255,4 +255,4 @@ method of characteristics and spline finite elements", https://doi.org/10.1016/j

# Contents

* advection\_field\_rp.hpp : containing AdvectionFieldFinder with the advection field computation for the guiding center simulation.
* advection\_field\_rp.hpp : containing AdvectionFieldFinder with the advection field computation for the guiding center simulation.
Loading

0 comments on commit b6b7610

Please sign in to comment.