diff --git a/Lagrange__interpolator_8hpp_source.html b/Lagrange__interpolator_8hpp_source.html index 9cb42555e..22eae04d0 100644 --- a/Lagrange__interpolator_8hpp_source.html +++ b/Lagrange__interpolator_8hpp_source.html @@ -142,35 +142,34 @@
58  evaluator(m_degree, inout_data, m_domain, m_ghost);
59 
60  ddc::for_each(
-
61  ddc::policies::serial_host,
-
62  coordinates.domain(),
-
63  KOKKOS_LAMBDA(ddc::DiscreteElement<DDim> const ix) {
-
64  inout_data(ix) = evaluator.evaluate(coordinates(ix));
-
65  });
-
66 
-
67  return inout_data;
-
68  }
-
69 };
-
70 
-
77 template <class DDim, BCond BcMin, BCond BcMax>
-
78 class PreallocatableLagrangeInterpolator : public IPreallocatableInterpolator<DDim>
-
79 {
-
80  LagrangeInterpolator<DDim, BcMin, BcMax> const& evaluator;
-
81 
-
82 public:
-
87  explicit PreallocatableLagrangeInterpolator(
-
88  LagrangeInterpolator<DDim, BcMin, BcMax> const& evaluator)
-
89  : evaluator(evaluator)
-
90  {
-
91  }
-
92 
-
93  ~PreallocatableLagrangeInterpolator() override = default;
-
94 
-
100  std::unique_ptr<IInterpolator<DDim>> preallocate() const override
-
101  {
-
102  return std::make_unique<LagrangeInterpolator<DDim, BcMin, BcMax>>(evaluator);
-
103  }
-
104 };
+
61  coordinates.domain(),
+
62  KOKKOS_LAMBDA(ddc::DiscreteElement<DDim> const ix) {
+
63  inout_data(ix) = evaluator.evaluate(coordinates(ix));
+
64  });
+
65 
+
66  return inout_data;
+
67  }
+
68 };
+
69 
+
76 template <class DDim, BCond BcMin, BCond BcMax>
+
77 class PreallocatableLagrangeInterpolator : public IPreallocatableInterpolator<DDim>
+
78 {
+
79  LagrangeInterpolator<DDim, BcMin, BcMax> const& evaluator;
+
80 
+
81 public:
+
86  explicit PreallocatableLagrangeInterpolator(
+
87  LagrangeInterpolator<DDim, BcMin, BcMax> const& evaluator)
+
88  : evaluator(evaluator)
+
89  {
+
90  }
+
91 
+
92  ~PreallocatableLagrangeInterpolator() override = default;
+
93 
+
99  std::unique_ptr<IInterpolator<DDim>> preallocate() const override
+
100  {
+
101  return std::make_unique<LagrangeInterpolator<DDim, BcMin, BcMax>>(evaluator);
+
102  }
+
103 };
IInterpolator
A class which provides an interpolating function.
Definition: i_interpolator.hpp:18
IPreallocatableInterpolator
A class which provides access to an interpolating function which can be preallocated where useful.
Definition: i_interpolator.hpp:63
LagrangeInterpolator
A class for interpolating a function using Lagrange polynomials.
Definition: Lagrange_interpolator.hpp:15
@@ -178,9 +177,9 @@
LagrangeInterpolator::operator()
ddc::ChunkSpan< double, ddc::DiscreteDomain< DDim > > operator()(ddc::ChunkSpan< double, ddc::DiscreteDomain< DDim >> const inout_data, ddc::ChunkSpan< const ddc::Coordinate< CDim >, ddc::DiscreteDomain< DDim >> const coordinates) const override
Approximate the value of a function at a set of coordinates using the current values at a known set o...
Definition: Lagrange_interpolator.hpp:52
Lagrange
A class which implements Lagrange polynomials.
Definition: Lagrange.hpp:20
Lagrange::evaluate
KOKKOS_FUNCTION double evaluate(double x_interp) const
Evaluates the approximated value of a function on a point current values at a known set of interpolat...
Definition: Lagrange.hpp:166
-
PreallocatableLagrangeInterpolator
A class which stores information necessary to create an instance of the LagrangeInterpolator class.
Definition: Lagrange_interpolator.hpp:79
-
PreallocatableLagrangeInterpolator::PreallocatableLagrangeInterpolator
PreallocatableLagrangeInterpolator(LagrangeInterpolator< DDim, BcMin, BcMax > const &evaluator)
Create an object capable of creating LagrangeInterpolator objects.
Definition: Lagrange_interpolator.hpp:87
-
PreallocatableLagrangeInterpolator::preallocate
std::unique_ptr< IInterpolator< DDim > > preallocate() const override
Create an instance of the LagrangeInterpolator class.
Definition: Lagrange_interpolator.hpp:100
+
PreallocatableLagrangeInterpolator
A class which stores information necessary to create an instance of the LagrangeInterpolator class.
Definition: Lagrange_interpolator.hpp:78
+
PreallocatableLagrangeInterpolator::PreallocatableLagrangeInterpolator
PreallocatableLagrangeInterpolator(LagrangeInterpolator< DDim, BcMin, BcMax > const &evaluator)
Create an object capable of creating LagrangeInterpolator objects.
Definition: Lagrange_interpolator.hpp:86
+
PreallocatableLagrangeInterpolator::preallocate
std::unique_ptr< IInterpolator< DDim > > preallocate() const override
Create an instance of the LagrangeInterpolator class.
Definition: Lagrange_interpolator.hpp:99
diff --git a/Lagrange__interpolator__batched_8hpp_source.html b/Lagrange__interpolator__batched_8hpp_source.html index ea4ba2a9d..1fb31feb1 100644 --- a/Lagrange__interpolator__batched_8hpp_source.html +++ b/Lagrange__interpolator__batched_8hpp_source.html @@ -145,8 +145,8 @@
60  auto inout_data_tmp = inout_data_tmp_alloc.span_view();
61  auto batch_domain
62  = ddc::remove_dims_of(inout_data.domain(), inout_data.template domain<DDimI>());
-
63  ddc::for_each(
-
64  ddc::policies::parallel_device,
+
63  ddc::parallel_for_each(
+
64  Kokkos::DefaultExecutionSpace(),
65  batch_domain,
66  KOKKOS_LAMBDA(typename decltype(batch_domain)::discrete_element_type const i) {
67  Lagrange<Kokkos::DefaultExecutionSpace, DDimI, BcMin, BcMax> evaluator(
diff --git a/advection__domain_8hpp_source.html b/advection__domain_8hpp_source.html index 5fdfcad7d..fcace0cea 100644 --- a/advection__domain_8hpp_source.html +++ b/advection__domain_8hpp_source.html @@ -179,10 +179,10 @@
177  {
178  auto const rp_dom = advection_field.domain();
179 
-
180  ddc::deepcopy(
+
180  ddc::parallel_deepcopy(
181  ddcHelper::get<RDimX_adv>(advection_field_physical),
182  ddcHelper::get<RDimX>(advection_field));
-
183  ddc::deepcopy(
+
183  ddc::parallel_deepcopy(
184  ddcHelper::get<RDimY_adv>(advection_field_physical),
185  ddcHelper::get<RDimY>(advection_field));
186  ;
diff --git a/bsl__advection__vx_8hpp_source.html b/bsl__advection__vx_8hpp_source.html index 2ead0314d..de83e3165 100644 --- a/bsl__advection__vx_8hpp_source.html +++ b/bsl__advection__vx_8hpp_source.html @@ -182,18 +182,18 @@
91  });
92 
93  // copy the slice in contiguous memory
-
94  ddc::deepcopy(contiguous_slice, allfdistribu_host[ic][isp][ix]);
+
94  ddc::parallel_deepcopy(contiguous_slice, allfdistribu_host[ic][isp][ix]);
95 
96  // build a spline representation of the data
97  interpolator_v(contiguous_slice, feet_coords.span_cview());
98 
99  // copy back
-
100  ddc::deepcopy(allfdistribu_host[ic][isp][ix], contiguous_slice);
+
100  ddc::parallel_deepcopy(allfdistribu_host[ic][isp][ix], contiguous_slice);
101  });
102  });
103  });
104 
-
105  ddc::deepcopy(allfdistribu, allfdistribu_host);
+
105  ddc::parallel_deepcopy(allfdistribu, allfdistribu_host);
106  Kokkos::Profiling::popRegion();
107  return allfdistribu;
108  }
diff --git a/bsl__advection__vx__batched_8hpp_source.html b/bsl__advection__vx__batched_8hpp_source.html index 0b74cd6f9..6bc6b2cc4 100644 --- a/bsl__advection__vx__batched_8hpp_source.html +++ b/bsl__advection__vx__batched_8hpp_source.html @@ -172,8 +172,8 @@
81  double const charge_proxy
82  = charge(isp); // TODO: consider proper way to access charge from device
83  double const sqrt_me_on_mspecies = std::sqrt(mass(ielec()) / mass(isp));
-
84  ddc::for_each(
-
85  ddc::policies::parallel_device,
+
84  ddc::parallel_for_each(
+
85  Kokkos::DefaultExecutionSpace(),
86  c_dom,
87  KOKKOS_LAMBDA(DElemC const ic) {
88  DElemSpatial const ix(ic);
diff --git a/bsl__advection__x_8hpp_source.html b/bsl__advection__x_8hpp_source.html index 532f2b2d2..48809b507 100644 --- a/bsl__advection__x_8hpp_source.html +++ b/bsl__advection__x_8hpp_source.html @@ -177,18 +177,18 @@
85  });
86 
87  // copy the slice in contiguous memory
-
88  ddc::deepcopy(contiguous_slice, allfdistribu_host[ic][isp][iv]);
+
88  ddc::parallel_deepcopy(contiguous_slice, allfdistribu_host[ic][isp][iv]);
89 
90  // interpolate the function at the feet using the provided interpolator
91  interpolator_x(contiguous_slice, feet_coords.span_cview());
92 
93  // copy back
-
94  ddc::deepcopy(allfdistribu_host[ic][isp][iv], contiguous_slice);
+
94  ddc::parallel_deepcopy(allfdistribu_host[ic][isp][iv], contiguous_slice);
95  });
96  });
97  });
98 
-
99  ddc::deepcopy(allfdistribu_host, allfdistribu);
+
99  ddc::parallel_deepcopy(allfdistribu_host, allfdistribu);
100  Kokkos::Profiling::popRegion();
101  return allfdistribu;
102  }
diff --git a/bsl__advection__x__batched_8hpp_source.html b/bsl__advection__x__batched_8hpp_source.html index 8bbe31182..598eaebaa 100644 --- a/bsl__advection__x__batched_8hpp_source.html +++ b/bsl__advection__x__batched_8hpp_source.html @@ -170,8 +170,8 @@
78 
79  for (DElemSp const isp : sp_dom) {
80  double const sqrt_me_on_mspecies = std::sqrt(mass(ielec()) / mass(isp));
-
81  ddc::for_each(
-
82  ddc::policies::parallel_device,
+
81  ddc::parallel_for_each(
+
82  Kokkos::DefaultExecutionSpace(),
83  c_dom,
84  KOKKOS_LAMBDA(DElemC const ic) {
85  for (DElemV const iv : v_dom) {
diff --git a/bsl__predcorr_8hpp_source.html b/bsl__predcorr_8hpp_source.html index 9377f2fb7..8d973518a 100644 --- a/bsl__predcorr_8hpp_source.html +++ b/bsl__predcorr_8hpp_source.html @@ -199,7 +199,7 @@
145  ddcHelper::get<RDimX>(advection_field)(idx)
146  = -ddcHelper::get<RDimY>(electric_field)(idx);
147  });
-
148  ddc::deepcopy(
+
148  ddc::parallel_deepcopy(
149  ddcHelper::get<RDimY>(advection_field),
150  ddcHelper::get<RDimX>(electric_field));
151  };
diff --git a/bsl__predcorr__second__order__explicit_8hpp_source.html b/bsl__predcorr__second__order__explicit_8hpp_source.html index 65faab0cd..b10cd221e 100644 --- a/bsl__predcorr__second__order__explicit_8hpp_source.html +++ b/bsl__predcorr__second__order__explicit_8hpp_source.html @@ -231,7 +231,7 @@
186  ddcHelper::get<RDimX>(advection_field)(idx)
187  = -ddcHelper::get<RDimY>(electric_field)(idx);
188  });
-
189  ddc::deepcopy(
+
189  ddc::parallel_deepcopy(
190  ddcHelper::get<RDimY>(advection_field),
191  ddcHelper::get<RDimX>(electric_field));
192 
@@ -239,7 +239,7 @@
194  // STEP 3: From rho^n and A^n, we compute rho^P: Vlasov equation
195  // --- Copy rho^n because it will be modified:
196  DFieldRP allfdistribu_predicted(grid);
-
197  ddc::deepcopy(allfdistribu_predicted.span_view(), allfdistribu);
+
197  ddc::parallel_deepcopy(allfdistribu_predicted.span_view(), allfdistribu);
198  m_advection_solver(allfdistribu_predicted.span_view(), advection_field.span_view(), dt);
199 
200  // --- advect also the feet because it is needed for the next step
@@ -261,7 +261,7 @@
216  ddcHelper::get<RDimX>(advection_field_predicted)(idx)
217  = -ddcHelper::get<RDimY>(electric_field_predicted)(idx);
218  });
-
219  ddc::deepcopy(
+
219  ddc::parallel_deepcopy(
220  ddcHelper::get<RDimY>(advection_field_predicted),
221  ddcHelper::get<RDimX>(electric_field_predicted));
222 
@@ -339,7 +339,7 @@
SplineFootFinder
Define a base class for all the time integration methods used for the advection.
Definition: spline_foot_finder.hpp:19
SplineInterpolatorRP
A class for interpolating a function using splines in polar coordinates.
Definition: spline_interpolator_2d_rp.hpp:16
VectorField
Pre-declaration of VectorField.
Definition: vector_field.hpp:34
-
VectorField::span_view
view_type span_view() const
Get a constant reference to this vector field.
Definition: vector_field.hpp:182
+
VectorField::span_view
view_type span_view() const
Get a constant reference to this vector field.
Definition: vector_field.hpp:157
VlasovPoissonSolver
Solve the Poisson equation and return the electric field for the coupled Vlasov equation.
Definition: vlasovpoissonsolver.hpp:89
diff --git a/bsl__predcorr__second__order__implicit_8hpp_source.html b/bsl__predcorr__second__order__implicit_8hpp_source.html index 8c6a8da56..c8fe275a6 100644 --- a/bsl__predcorr__second__order__implicit_8hpp_source.html +++ b/bsl__predcorr__second__order__implicit_8hpp_source.html @@ -217,7 +217,7 @@
174  ddcHelper::get<RDimX>(advection_field)(idx)
175  = -ddcHelper::get<RDimY>(electric_field)(idx);
176  });
-
177  ddc::deepcopy(
+
177  ddc::parallel_deepcopy(
178  ddcHelper::get<RDimY>(advection_field),
179  ddcHelper::get<RDimX>(electric_field));
180 
@@ -272,7 +272,7 @@
229  // X^P = X^n - dt/2 * ( E^n(X^n) + E^n(X^P) )/2:
230  // --- Copy phi^n because it will be modified:
231  DFieldRP allfdistribu_predicted(grid);
-
232  ddc::deepcopy(allfdistribu_predicted, allfdistribu);
+
232  ddc::parallel_deepcopy(allfdistribu_predicted, allfdistribu);
233  m_advection_solver(
234  allfdistribu_predicted.span_view(),
235  advection_field_k_tot.span_cview(),
@@ -293,7 +293,7 @@
250  ddcHelper::get<RDimX>(advection_field)(idx)
251  = -ddcHelper::get<RDimY>(electric_field)(idx);
252  });
-
253  ddc::deepcopy(
+
253  ddc::parallel_deepcopy(
254  ddcHelper::get<RDimY>(advection_field),
255  ddcHelper::get<RDimX>(electric_field));
256 
@@ -412,7 +412,7 @@
369  });
370 
371  // X^{k-1} = X^k:
-
372  ddc::deepcopy(feet_coords_tmp, feet_coords);
+
372  ddc::parallel_deepcopy(feet_coords_tmp, feet_coords);
373 
374  // X^k = X^n - dt* X^k:
375  ddc::for_each(grid, [&](IndexRP const irp) {
@@ -451,7 +451,7 @@
SplineInterpolatorRP
A class for interpolating a function using splines in polar coordinates.
Definition: spline_interpolator_2d_rp.hpp:16
VectorFieldSpan
Pre-declaration of VectorFieldSpan.
Definition: vector_field_span.hpp:45
VectorField
Pre-declaration of VectorField.
Definition: vector_field.hpp:34
-
VectorField::span_cview
view_type span_cview() const
Get a constant reference to this vector field.
Definition: vector_field.hpp:172
+
VectorField::span_cview
view_type span_cview() const
Get a constant reference to this vector field.
Definition: vector_field.hpp:147
VlasovPoissonSolver
Solve the Poisson equation and return the electric field for the coupled Vlasov equation.
Definition: vlasovpoissonsolver.hpp:89
diff --git a/bumpontailequilibrium_8hpp_source.html b/bumpontailequilibrium_8hpp_source.html index bf484fe7b..80188daa7 100644 --- a/bumpontailequilibrium_8hpp_source.html +++ b/bumpontailequilibrium_8hpp_source.html @@ -126,10 +126,10 @@
45  double epsilon_bot,
46  double temperature_bot,
47  double mean_velocity_bot) const;
-
54  BumpontailEquilibrium(
-
55  host_t<DViewSp> epsilon_bot,
-
56  host_t<DViewSp> temperature_bot,
-
57  host_t<DViewSp> mean_velocity_bot);
+
54  BumpontailEquilibrium(
+
55  host_t<DFieldSp> epsilon_bot,
+
56  host_t<DFieldSp> temperature_bot,
+
57  host_t<DFieldSp> mean_velocity_bot);
58 
59  ~BumpontailEquilibrium() override = default;
60 
@@ -152,11 +152,11 @@
94 };
BumpontailEquilibrium
A class that initializes the distribution function as a sum of two Maxwellian functions.
Definition: bumpontailequilibrium.hpp:20
BumpontailEquilibrium::epsilon_bot
host_t< DViewSp > epsilon_bot() const
A method for accessing the m_epsilon_bot member variable of the class.
Definition: bumpontailequilibrium.hpp:72
-
BumpontailEquilibrium::BumpontailEquilibrium
BumpontailEquilibrium(host_t< DViewSp > epsilon_bot, host_t< DViewSp > temperature_bot, host_t< DViewSp > mean_velocity_bot)
Creates an instance of the BumpontailEquilibrium class.
BumpontailEquilibrium::operator()
DSpanSpVx operator()(DSpanSpVx allfequilibrium) const override
Initializes the distribution function as the sum of a bulk and a bump-on-tail Maxwellians.
BumpontailEquilibrium::compute_twomaxwellian
void compute_twomaxwellian(DSpanVx fMaxwellian, double epsilon_bot, double temperature_bot, double mean_velocity_bot) const
Compute a distribution function defined as a sum of two Maxwellians.
BumpontailEquilibrium::mean_velocity_bot
host_t< DViewSp > mean_velocity_bot() const
A method for accessing the m_mean_velocity_bot member variable of the class.
Definition: bumpontailequilibrium.hpp:90
BumpontailEquilibrium::temperature_bot
host_t< DViewSp > temperature_bot() const
A method for accessing the m_temperature_bot member variable of the class.
Definition: bumpontailequilibrium.hpp:81
+
BumpontailEquilibrium::BumpontailEquilibrium
BumpontailEquilibrium(host_t< DFieldSp > epsilon_bot, host_t< DFieldSp > temperature_bot, host_t< DFieldSp > mean_velocity_bot)
Creates an instance of the BumpontailEquilibrium class.
IEquilibrium
An abstract class for initializing a distribution function that does not depend on space.
Definition: iequilibrium.hpp:11
diff --git a/classBumpontailEquilibrium-members.html b/classBumpontailEquilibrium-members.html index 66017a996..9a27e5511 100644 --- a/classBumpontailEquilibrium-members.html +++ b/classBumpontailEquilibrium-members.html @@ -106,7 +106,7 @@

This is the complete list of members for BumpontailEquilibrium, including all inherited members.

- + diff --git a/classBumpontailEquilibrium.html b/classBumpontailEquilibrium.html index 755712965..3afd4204f 100644 --- a/classBumpontailEquilibrium.html +++ b/classBumpontailEquilibrium.html @@ -124,9 +124,9 @@ - - - + + + @@ -148,8 +148,8 @@

A class that initializes the distribution function as a sum of two Maxwellian functions.

This class initializes the distribution function as a sum of two Maxwellian, enabling the study of the so-called bump-on-tail instability. One of the Maxwellians represents the bulk of the distribution function that has no mean velocity, and the other Maxwellian corresponds to high velocity particles. The second Maxwellian is referred to as the "bump-on-tail" Maxwellian.

Constructor & Destructor Documentation

- -

◆ BumpontailEquilibrium()

+ +

◆ BumpontailEquilibrium()

@@ -157,19 +157,19 @@

BumpontailEquilibrium::BumpontailEquilibrium

- + - + - + diff --git a/classBumpontailEquilibrium.js b/classBumpontailEquilibrium.js index 487c198ce..53492213a 100644 --- a/classBumpontailEquilibrium.js +++ b/classBumpontailEquilibrium.js @@ -1,6 +1,6 @@ var classBumpontailEquilibrium = [ - [ "BumpontailEquilibrium", "classBumpontailEquilibrium.html#a3d08f6633ffa3867429c946e9ec19db5", null ], + [ "BumpontailEquilibrium", "classBumpontailEquilibrium.html#ae9e416e1ecca5bbacacb03e68e6c8dfe", null ], [ "~BumpontailEquilibrium", "classBumpontailEquilibrium.html#a3c79c23553031c7a766db33feb02050d", null ], [ "compute_twomaxwellian", "classBumpontailEquilibrium.html#a8b3d639a3f0cc35ac93ec19818bbd86e", null ], [ "operator()", "classBumpontailEquilibrium.html#a4cd4ddf29a44f068db013ed7dc2a0215", null ], diff --git a/classVectorField-members.html b/classVectorField-members.html index def9b6d5a..d1816a02c 100644 --- a/classVectorField-members.html +++ b/classVectorField-members.html @@ -124,11 +124,10 @@ - - - - - + + + +
BumpontailEquilibrium(host_t< DViewSp > epsilon_bot, host_t< DViewSp > temperature_bot, host_t< DViewSp > mean_velocity_bot)BumpontailEquilibrium
BumpontailEquilibrium(host_t< DFieldSp > epsilon_bot, host_t< DFieldSp > temperature_bot, host_t< DFieldSp > mean_velocity_bot)BumpontailEquilibrium
compute_twomaxwellian(DSpanVx fMaxwellian, double epsilon_bot, double temperature_bot, double mean_velocity_bot) constBumpontailEquilibrium
epsilon_bot() constBumpontailEquilibriuminline
mean_velocity_bot() constBumpontailEquilibriuminline
void compute_twomaxwellian (DSpanVx fMaxwellian, double epsilon_bot, double temperature_bot, double mean_velocity_bot) const
 Compute a distribution function defined as a sum of two Maxwellians. More...
 
 BumpontailEquilibrium (host_t< DViewSp > epsilon_bot, host_t< DViewSp > temperature_bot, host_t< DViewSp > mean_velocity_bot)
 Creates an instance of the BumpontailEquilibrium class. More...
 
 BumpontailEquilibrium (host_t< DFieldSp > epsilon_bot, host_t< DFieldSp > temperature_bot, host_t< DFieldSp > mean_velocity_bot)
 Creates an instance of the BumpontailEquilibrium class. More...
 
DSpanSpVx operator() (DSpanSpVx allfequilibrium) const override
 Initializes the distribution function as the sum of a bulk and a bump-on-tail Maxwellians. More...
 
(host_t< DViewSp > host_t< DFieldSp >  epsilon_bot,
host_t< DViewSp > host_t< DFieldSp >  temperature_bot,
host_t< DViewSp > host_t< DFieldSp >  mean_velocity_bot 
span_view()VectorField< ElementType, Domain, NDTag, Allocator >inline
VectorField()=defaultVectorField< ElementType, Domain, NDTag, Allocator >
VectorField(mdomain_type const &domain, Allocator allocator=Allocator())VectorField< ElementType, Domain, NDTag, Allocator >inlineexplicit
VectorField(VectorFieldSpan< OElementType, Domain, NDTag, LayoutDomain, MemorySpace > field_span)VectorField< ElementType, Domain, NDTag, Allocator >inlineexplicit
VectorField(VectorField const &other)=deleteVectorField< ElementType, Domain, NDTag, Allocator >
VectorField(VectorField &&other)=defaultVectorField< ElementType, Domain, NDTag, Allocator >
view_type typedefVectorField< ElementType, Domain, NDTag, Allocator >
~VectorField()=default (defined in VectorField< ElementType, Domain, NDTag, Allocator >)VectorField< ElementType, Domain, NDTag, Allocator >
VectorField(VectorField const &other)=deleteVectorField< ElementType, Domain, NDTag, Allocator >
VectorField(VectorField &&other)=defaultVectorField< ElementType, Domain, NDTag, Allocator >
view_type typedefVectorField< ElementType, Domain, NDTag, Allocator >
~VectorField()=default (defined in VectorField< ElementType, Domain, NDTag, Allocator >)VectorField< ElementType, Domain, NDTag, Allocator >
diff --git a/classVectorField.html b/classVectorField.html index d2de30b6f..d127e082f 100644 --- a/classVectorField.html +++ b/classVectorField.html @@ -156,10 +156,6 @@  VectorField (mdomain_type const &domain, Allocator allocator=Allocator())  Construct a VectorField on a domain with uninitialized values. More...
  -template<class OElementType , class LayoutDomain , class MemorySpace > - VectorField (VectorFieldSpan< OElementType, Domain, NDTag, LayoutDomain, MemorySpace > field_span) - Construct a VectorField from a deepcopy of a VectorFieldSpan. More...
 VectorField (VectorField const &other)=delete  Deleted: use deepcopy instead.
@@ -216,7 +212,7 @@

A class which describes a vector field. In other words a class which maps a position on a domain to a vector (x,y,z,...). This is done by storing the values at the positions in individual Chunks.

Constructor & Destructor Documentation

-

◆ VectorField() [1/3]

+

◆ VectorField() [1/2]

@@ -260,48 +256,10 @@

-

◆ VectorField() [2/3]

- -
-
-
-template<class ElementType , class Domain , class NDTag , class Allocator >
-
-template<class OElementType , class LayoutDomain , class MemorySpace >
- - - - - -
- - - - - - - - -
VectorField< ElementType, Domain, NDTag, Allocator >::VectorField (VectorFieldSpan< OElementType, Domain, NDTag, LayoutDomain, MemorySpace > field_span)
-
-inlineexplicit
-
- -

Construct a VectorField from a deepcopy of a VectorFieldSpan.

-
Parameters
- - -
[in,out]field_spanA reference to another vector field.
-
-
-
-

◆ VectorField() [3/3]

+

◆ VectorField() [2/2]

diff --git a/classVectorField.js b/classVectorField.js index 6b9b48ee9..025678b82 100644 --- a/classVectorField.js +++ b/classVectorField.js @@ -8,7 +8,6 @@ var classVectorField = [ "memory_space", "classVectorField.html#a7df5bf4cd762372ba4ae06c99b6ed478", null ], [ "VectorField", "classVectorField.html#affcf9abd0e02dde4aa553233de0b57c8", null ], [ "VectorField", "classVectorField.html#a9355ed87913f63a941e03f6b61a4c9e0", null ], - [ "VectorField", "classVectorField.html#a8e6b67ec99341f76401f77a27575cbfc", null ], [ "VectorField", "classVectorField.html#a4838971fca188dc404dc50d8af9ef3d9", null ], [ "VectorField", "classVectorField.html#ae23926389df672431636ef26e20f7780", null ], [ "~VectorField", "classVectorField.html#a0a1908a2429ba38ef8d891567cbc22c9", null ], diff --git a/collisions__utils_8hpp_source.html b/collisions__utils_8hpp_source.html index 9f24254b3..1a5e6f2d0 100644 --- a/collisions__utils_8hpp_source.html +++ b/collisions__utils_8hpp_source.html @@ -130,8 +130,8 @@
44  DViewSpX density,
45  DViewSpX temperature)
46 {
-
47  ddc::for_each(
-
48  ddc::policies::parallel_device,
+
47  ddc::parallel_for_each(
+
48  Kokkos::DefaultExecutionSpace(),
49  Dcoll.domain(),
50  KOKKOS_LAMBDA(ddc::DiscreteElement<IDimSp, IDimX, IDimension> const ispxdimx) {
51  double const vT(
@@ -171,8 +171,8 @@
92  DViewSpX density,
93  DViewSpX temperature)
94 {
-
95  ddc::for_each(
-
96  ddc::policies::parallel_device,
+
95  ddc::parallel_for_each(
+
96  Kokkos::DefaultExecutionSpace(),
97  dvDcoll.domain(),
98  KOKKOS_LAMBDA(ddc::DiscreteElement<IDimSp, IDimX, IDimension> const ispxdimx) {
99  double const vT(
@@ -241,8 +241,8 @@
185  auto I3mean_integrand = I3mean_integrand_alloc.span_view();
186  auto I4mean_integrand = I4mean_integrand_alloc.span_view();
187 
-
188  ddc::for_each(
-
189  ddc::policies::parallel_device,
+
188  ddc::parallel_for_each(
+
189  Kokkos::DefaultExecutionSpace(),
190  allfdistribu.domain(),
191  KOKKOS_LAMBDA(IndexSpXVx const ispxvx) {
192  ddc::DiscreteElement<IDimension> const idimx(ddc::select<IDimVx>(ispxvx).uid() + 1);
@@ -270,14 +270,14 @@
214  auto I2mean = I2mean_alloc.span_view();
215  auto I3mean = I3mean_alloc.span_view();
216  auto I4mean = I4mean_alloc.span_view();
-
217  ddc::fill(I0mean, 0.);
-
218  ddc::fill(I1mean, 0.);
-
219  ddc::fill(I2mean, 0.);
-
220  ddc::fill(I3mean, 0.);
-
221  ddc::fill(I4mean, 0.);
+
217  ddc::parallel_fill(I0mean, 0.);
+
218  ddc::parallel_fill(I1mean, 0.);
+
219  ddc::parallel_fill(I2mean, 0.);
+
220  ddc::parallel_fill(I3mean, 0.);
+
221  ddc::parallel_fill(I4mean, 0.);
222 
-
223  ddc::for_each(
-
224  ddc::policies::parallel_device,
+
223  ddc::parallel_for_each(
+
224  Kokkos::DefaultExecutionSpace(),
225  grid_sp_x,
226  KOKKOS_LAMBDA(IndexSpX const ispx) {
227  for (IndexVx const ivx : allfdistribu.domain<IDimVx>()) {
@@ -312,8 +312,8 @@
263  DViewSpX Vcoll,
264  DViewSpX Tcoll)
265 {
-
266  ddc::for_each(
-
267  ddc::policies::parallel_device,
+
266  ddc::parallel_for_each(
+
267  Kokkos::DefaultExecutionSpace(),
268  Dcoll.domain(),
269  KOKKOS_LAMBDA(ddc::DiscreteElement<IDimSp, IDimX, IDimension> const ispxdimx) {
270  double const coordv(ddc::coordinate(ddc::select<IDimension>(ispxdimx)));
diff --git a/crank__nicolson_8hpp_source.html b/crank__nicolson_8hpp_source.html index 1e8372a40..58f02acda 100644 --- a/crank__nicolson_8hpp_source.html +++ b/crank__nicolson_8hpp_source.html @@ -165,8 +165,8 @@
124  accessible,
125  "MemorySpace has to be accessible for ExecutionSpace.");
126  update(exec_space, y, dt, dy, [&](ValSpan y, DerivView dy, double dt) {
-
127  ddc::for_each(
-
128  ddc::policies::policy(exec_space),
+
127  ddc::parallel_for_each(
+
128  exec_space,
129  y.domain(),
130  KOKKOS_LAMBDA(Index const idx) { y(idx) = y(idx) + dy(idx) * dt; });
131  });
@@ -216,16 +216,16 @@
190 
191  // Calculation of step
192  if constexpr (is_field_v<DerivChunk>) {
-
193  ddc::for_each(
-
194  ddc::policies::policy(exec_space),
+
193  ddc::parallel_for_each(
+
194  exec_space,
195  m_k_total.domain(),
196  KOKKOS_CLASS_LAMBDA(Index const i) {
197  // k_total = k1 + k_new
198  fill_k_total(i, m_k_total, m_k1(i) + m_k_new(i));
199  });
200  } else {
-
201  ddc::for_each(
-
202  ddc::policies::policy(exec_space),
+
201  ddc::parallel_for_each(
+
202  exec_space,
203  m_k_total.domain(),
204  KOKKOS_CLASS_LAMBDA(Index const i) {
205  // k_total = k1 + k_new
@@ -256,15 +256,15 @@
246  {
247  auto const dom = y_old.domain();
248 
-
249  double norm_old = ddc::transform_reduce(
-
250  ddc::policies::policy(exec_space),
+
249  double norm_old = ddc::parallel_transform_reduce(
+
250  exec_space,
251  dom,
252  0.,
253  ddc::reducer::max<double>(),
254  KOKKOS_LAMBDA(Index const idx) { return norm_inf(y_old(idx)); });
255 
-
256  double max_diff = ddc::transform_reduce(
-
257  ddc::policies::policy(exec_space),
+
256  double max_diff = ddc::parallel_transform_reduce(
+
257  exec_space,
258  dom,
259  0.,
260  ddc::reducer::max<double>(),
@@ -279,7 +279,7 @@
269  if constexpr (is_field_v<ValSpan>) {
270  ddcHelper::deepcopy(copy_to, copy_from);
271  } else {
-
272  ddc::deepcopy(copy_to, copy_from);
+
272  ddc::parallel_deepcopy(copy_to, copy_from);
273  }
274  }
275 
diff --git a/euler_8hpp_source.html b/euler_8hpp_source.html index 618659cb8..548ae28b7 100644 --- a/euler_8hpp_source.html +++ b/euler_8hpp_source.html @@ -158,8 +158,8 @@
108  accessible,
109  "MemorySpace has to be accessible for ExecutionSpace.");
110  update(exec_space, y, dt, dy, [&](ValSpan y, DerivView dy, double dt) {
-
111  ddc::for_each(
-
112  ddc::policies::policy(exec_space),
+
111  ddc::parallel_for_each(
+
112  exec_space,
113  y.domain(),
114  KOKKOS_LAMBDA(Index const idx) { y(idx) = y(idx) + dy(idx) * dt; });
115  });
diff --git a/navtreedata.js b/navtreedata.js index c863f03a6..944ad0f12 100644 --- a/navtreedata.js +++ b/navtreedata.js @@ -67,9 +67,9 @@ var NAVTREEINDEX = "classCurvilinear2DToCartesian.html#aaf43cce0853afcd23bbd60a9563c50f4", "classMatrix.html#a15badbcf214a7842a0a654f9210f39a1", "classPredCorr.html", -"classVectorFieldSpan.html#ad3abef65badf2ce5915d6b9b86b0ebdc", -"fluid__moments_8hpp_source.html", -"tests_geometryRTheta_advection_2d_rp.html#tests_geometryRTheta_advection_2d_rp__Contents" +"classVectorFieldSpan.html#ad70b8f79a45666e097299ac974f76046", +"gauss__legendre__integration_8hpp_source.html", +"tests_geometryRTheta_advection_2d_rp.html#tests_geometryRTheta_advection_2d_rp__Python_tests" ]; var SYNCONMSG = 'click to disable panel synchronisation'; diff --git a/navtreeindex0.js b/navtreeindex0.js index 04633ca7d..33ba1e72b 100644 --- a/navtreeindex0.js +++ b/navtreeindex0.js @@ -126,11 +126,11 @@ var NAVTREEINDEX0 = "classBumpontailEquilibrium.html":[11,20], "classBumpontailEquilibrium.html#a364f262c4b5d89461566bf23c6ec6e70":[11,20,4], "classBumpontailEquilibrium.html#a3c79c23553031c7a766db33feb02050d":[11,20,1], -"classBumpontailEquilibrium.html#a3d08f6633ffa3867429c946e9ec19db5":[11,20,0], "classBumpontailEquilibrium.html#a4cd4ddf29a44f068db013ed7dc2a0215":[11,20,3], "classBumpontailEquilibrium.html#a8b3d639a3f0cc35ac93ec19818bbd86e":[11,20,2], "classBumpontailEquilibrium.html#a92c189484ec209d152b6f5beb3c9387e":[11,20,6], "classBumpontailEquilibrium.html#aa96295ff0b0e3f60f29c53eb2c5c9fe8":[11,20,5], +"classBumpontailEquilibrium.html#ae9e416e1ecca5bbacacb03e68e6c8dfe":[11,20,0], "classCartesianSolution.html":[11,24], "classCartesianSolution.html#a451cd0cae3b100165ad5e7850f0572a8":[11,24,2], "classCartesianSolution.html#a6b7df1d82066dec5c620bddb7369e969":[11,24,3], diff --git a/navtreeindex1.js b/navtreeindex1.js index 4b272b849..ce6f97572 100644 --- a/navtreeindex1.js +++ b/navtreeindex1.js @@ -165,8 +165,8 @@ var NAVTREEINDEX1 = "classIFootFinder.html#a430abc49f8be3d1315d3b270c33c2860":[11,65,1], "classIInitialization.html":[11,66], "classIInitialization.html#a5c066d7173ca9686cda27a8bbc54667e":[11,66,2], -"classIInitialization.html#a5d604e8e8cde8d05154434b6f0256558":[11,66,1], "classIInitialization.html#a5d604e8e8cde8d05154434b6f0256558":[11,66,0], +"classIInitialization.html#a5d604e8e8cde8d05154434b6f0256558":[11,66,1], "classIInitialization.html#a9f426856e221de98fd68e2a4ea757819":[11,66,3], "classIInterpolator.html":[11,67], "classIInterpolator.html#a5321defe083a5f46ab01233ead86ed6a":[11,67,1], diff --git a/navtreeindex3.js b/navtreeindex3.js index e9c6d8166..dbd112747 100644 --- a/navtreeindex3.js +++ b/navtreeindex3.js @@ -207,28 +207,27 @@ var NAVTREEINDEX3 = "classUniformBSplines_1_1Impl.html#af2e32bbd9bf5ed8e5946ae7008a1e64d":[11,156,0,14], "classUniformBSplines_1_1Impl.html#afbb52253d31711933be3c5b0c950a398":[11,156,0,17], "classVectorField.html":[11,157], -"classVectorField.html#a06536f7ec56093a9b87f4ee0c1d5b64c":[11,157,18], -"classVectorField.html#a0a1908a2429ba38ef8d891567cbc22c9":[11,157,11], +"classVectorField.html#a06536f7ec56093a9b87f4ee0c1d5b64c":[11,157,17], +"classVectorField.html#a0a1908a2429ba38ef8d891567cbc22c9":[11,157,10], "classVectorField.html#a17028a562655b6e58926450f8849b066":[11,157,0], -"classVectorField.html#a31bf11f64d085382acf099a2454fa9bf":[11,157,12], +"classVectorField.html#a31bf11f64d085382acf099a2454fa9bf":[11,157,11], "classVectorField.html#a3ec69912b7bbe42bf8302013b4ee3bcd":[11,157,3], -"classVectorField.html#a40800a9ffc0b36a09ae8154aac00759b":[11,157,16], -"classVectorField.html#a4838971fca188dc404dc50d8af9ef3d9":[11,157,9], -"classVectorField.html#a4b839128727925cdffed6fbfca8da63e":[11,157,13], -"classVectorField.html#a4db1434ddd534be7882315c50bb25396":[11,157,21], -"classVectorField.html#a572811a19242a05acf2106e0543ae5df":[11,157,22], +"classVectorField.html#a40800a9ffc0b36a09ae8154aac00759b":[11,157,15], +"classVectorField.html#a4838971fca188dc404dc50d8af9ef3d9":[11,157,8], +"classVectorField.html#a4b839128727925cdffed6fbfca8da63e":[11,157,12], +"classVectorField.html#a4db1434ddd534be7882315c50bb25396":[11,157,20], +"classVectorField.html#a572811a19242a05acf2106e0543ae5df":[11,157,21], "classVectorField.html#a7d71d064cda609eb5a4bd7a5b8ca870d":[11,157,1], "classVectorField.html#a7df5bf4cd762372ba4ae06c99b6ed478":[11,157,5], -"classVectorField.html#a86ea12473bc7ea9364085826a7c5d512":[11,157,20], -"classVectorField.html#a8e6b67ec99341f76401f77a27575cbfc":[11,157,8], -"classVectorField.html#a925526e030fc6967c04e66771fc13e2a":[11,157,19], +"classVectorField.html#a86ea12473bc7ea9364085826a7c5d512":[11,157,19], +"classVectorField.html#a925526e030fc6967c04e66771fc13e2a":[11,157,18], "classVectorField.html#a9355ed87913f63a941e03f6b61a4c9e0":[11,157,7], "classVectorField.html#a94d0034047dacae6e8a7f87d8b21fc41":[11,157,2], "classVectorField.html#ab896e267b63db730e4344e1e15f2956f":[11,157,4], -"classVectorField.html#acb1058aa8ea2bd2cc6e2449c3b5c3eb6":[11,157,17], -"classVectorField.html#acb9821e3a1405005d7251bfbfea66f89":[11,157,15], -"classVectorField.html#ae23926389df672431636ef26e20f7780":[11,157,10], -"classVectorField.html#ae5421322e080a9f2ae63ff7796da6ed3":[11,157,14], +"classVectorField.html#acb1058aa8ea2bd2cc6e2449c3b5c3eb6":[11,157,16], +"classVectorField.html#acb9821e3a1405005d7251bfbfea66f89":[11,157,14], +"classVectorField.html#ae23926389df672431636ef26e20f7780":[11,157,9], +"classVectorField.html#ae5421322e080a9f2ae63ff7796da6ed3":[11,157,13], "classVectorField.html#affcf9abd0e02dde4aa553233de0b57c8":[11,157,6], "classVectorFieldSpan.html":[11,159], "classVectorFieldSpan.html#a02615c4513fb510c9fdc12db6d776df4":[11,159,5], @@ -249,5 +248,6 @@ var NAVTREEINDEX3 = "classVectorFieldSpan.html#ab10f4b73b4233a02e5f25c2b4afcb6b8":[11,159,12], "classVectorFieldSpan.html#ab9abf5d8db080b9e814bdf95d56fa9e9":[11,159,14], "classVectorFieldSpan.html#ac9835c4b3c61102263bc404c948c551c":[11,159,17], -"classVectorFieldSpan.html#acc499084ae93b3118644c458e16b3549":[11,159,18] +"classVectorFieldSpan.html#acc499084ae93b3118644c458e16b3549":[11,159,18], +"classVectorFieldSpan.html#ad3abef65badf2ce5915d6b9b86b0ebdc":[11,159,15] }; diff --git a/navtreeindex4.js b/navtreeindex4.js index 38ad527aa..799dde2fb 100644 --- a/navtreeindex4.js +++ b/navtreeindex4.js @@ -1,6 +1,5 @@ var NAVTREEINDEX4 = { -"classVectorFieldSpan.html#ad3abef65badf2ce5915d6b9b86b0ebdc":[11,159,15], "classVectorFieldSpan.html#ad70b8f79a45666e097299ac974f76046":[11,159,21], "classVectorFieldSpan.html#ae15150e6af873478dfe5132a30fe168a":[11,159,9], "classVectorFieldSpan.html#ae3ef9487bd121b575f80db5989536a2f":[11,159,3], @@ -249,5 +248,6 @@ var NAVTREEINDEX4 = "evaluator__2d_8hpp_source.html":[12,2,0,1,1], "femnonperiodicpoissonsolver_8hpp_source.html":[12,0,2,3,1], "femperiodicpoissonsolver_8hpp_source.html":[12,0,2,3,2], -"files.html":[12] +"files.html":[12], +"fluid__moments_8hpp_source.html":[12,0,2,6,0] }; diff --git a/navtreeindex5.js b/navtreeindex5.js index 64a5f614c..7773dd027 100644 --- a/navtreeindex5.js +++ b/navtreeindex5.js @@ -1,6 +1,5 @@ var NAVTREEINDEX5 = { -"fluid__moments_8hpp_source.html":[12,0,2,6,0], "gauss__legendre__integration_8hpp_source.html":[12,2,0,0,0,33], "geometryRTheta_2geometry_2geometry_8hpp_source.html":[12,0,1,1,0], "geometryRTheta_2poisson_2ipoissonsolver_8hpp_source.html":[12,0,1,4,0], @@ -249,5 +248,6 @@ var NAVTREEINDEX5 = "tests_geometryRTheta_advection_2d_rp.html":[9,0,0], "tests_geometryRTheta_advection_2d_rp.html#autotoc_md50":[21], "tests_geometryRTheta_advection_2d_rp.html#autotoc_md51":[22], -"tests_geometryRTheta_advection_2d_rp.html#autotoc_md52":[23] +"tests_geometryRTheta_advection_2d_rp.html#autotoc_md52":[23], +"tests_geometryRTheta_advection_2d_rp.html#tests_geometryRTheta_advection_2d_rp__Contents":[9,0,0,3] }; diff --git a/navtreeindex6.js b/navtreeindex6.js index 05279402c..53fd84a43 100644 --- a/navtreeindex6.js +++ b/navtreeindex6.js @@ -1,6 +1,5 @@ var NAVTREEINDEX6 = { -"tests_geometryRTheta_advection_2d_rp.html#tests_geometryRTheta_advection_2d_rp__Contents":[9,0,0,3], "tests_geometryRTheta_advection_2d_rp.html#tests_geometryRTheta_advection_2d_rp__Python_tests":[9,0,0,1], "tests_geometryRTheta_advection_2d_rp.html#tests_geometryRTheta_advection_2d_rp__References":[9,0,0,2], "tests_geometryRTheta_advection_2d_rp.html#tests_geometryRTheta_advection_2d_rp__Tests_on_the_2D_polar_advection_operator":[9,0,0,0], diff --git a/polar__bsplines_8hpp_source.html b/polar__bsplines_8hpp_source.html index 737823e50..82feb3687 100644 --- a/polar__bsplines_8hpp_source.html +++ b/polar__bsplines_8hpp_source.html @@ -333,229 +333,231 @@
228  {
229  for (std::size_t i = 0; i < m_singular_basis_elements.size(); ++i) {
230  m_singular_basis_elements[i] = Spline2D(impl.m_singular_basis_elements[i].domain());
-
231  ddc::deepcopy(m_singular_basis_elements[i], impl.m_singular_basis_elements[i]);
-
232  }
-
233  }
-
234 
-
235  Impl(Impl const& x) = default;
+
231  ddc::parallel_deepcopy(
+
232  m_singular_basis_elements[i],
+
233  impl.m_singular_basis_elements[i]);
+
234  }
+
235  }
236 
-
237  Impl(Impl&& x) = default;
+
237  Impl(Impl const& x) = default;
238 
-
239  ~Impl() = default;
+
239  Impl(Impl&& x) = default;
240 
-
241  Impl& operator=(Impl const& x) = default;
+
241  ~Impl() = default;
242 
-
243  Impl& operator=(Impl&& x) = default;
+
243  Impl& operator=(Impl const& x) = default;
244 
-
245  ddc::DiscreteElement<BSplinesR, BSplinesP> eval_basis(
-
246  DSpan1D singular_values,
-
247  DSpan2D values,
-
248  ddc::Coordinate<DimR, DimP> p) const;
-
249  ddc::DiscreteElement<BSplinesR, BSplinesP> eval_deriv_r(
-
250  DSpan1D singular_derivs,
-
251  DSpan2D derivs,
-
252  ddc::Coordinate<DimR, DimP> p) const;
-
253  ddc::DiscreteElement<BSplinesR, BSplinesP> eval_deriv_p(
-
254  DSpan1D singular_derivs,
-
255  DSpan2D derivs,
-
256  ddc::Coordinate<DimR, DimP> p) const;
-
257  ddc::DiscreteElement<BSplinesR, BSplinesP> eval_deriv_r_and_p(
-
258  DSpan1D singular_derivs,
-
259  DSpan2D derivs,
-
260  ddc::Coordinate<DimR, DimP> p) const;
-
261  void integrals(DSpan1D singular_int_vals, DSpan2D int_vals) const;
-
262 
-
263  std::size_t nbasis() const noexcept
-
264  {
-
265  std::size_t nr = ddc::discrete_space<BSplinesR>().nbasis() - C - 1;
-
266  std::size_t np = ddc::discrete_space<BSplinesP>().nbasis();
-
267  return n_singular_basis() + nr * np;
-
268  }
-
269 
-
270  discrete_domain_type full_domain() const noexcept
-
271  {
-
272  return discrete_domain_type(discrete_element_type {0}, discrete_vector_type {nbasis()});
-
273  }
-
274 
-
278  discrete_domain_type non_singular_domain() const noexcept
-
279  {
-
280  return full_domain().remove_first(discrete_vector_type {n_singular_basis()});
-
281  }
-
282 
-
283  private:
-
284  template <class EvalTypeR, class EvalTypeP>
-
285  ddc::DiscreteElement<BSplinesR, BSplinesP> eval(
-
286  DSpan1D singular_values,
-
287  DSpan2D values,
-
288  ddc::Coordinate<DimR, DimP> coord_eval,
-
289  EvalTypeR const,
-
290  EvalTypeP const) const;
-
291  };
-
292 };
-
293 
-
294 template <class BSplinesR, class BSplinesP, int C>
-
295 template <class MemorySpace>
-
296 ddc::DiscreteElement<BSplinesR, BSplinesP> PolarBSplines<BSplinesR, BSplinesP, C>::
- -
298  DSpan1D singular_values,
-
299  DSpan2D values,
-
300  ddc::Coordinate<DimR, DimP> p) const
-
301 {
-
302  return eval(singular_values, values, p, eval_type(), eval_type());
-
303 }
-
304 
-
305 template <class BSplinesR, class BSplinesP, int C>
-
306 template <class MemorySpace>
-
307 ddc::DiscreteElement<BSplinesR, BSplinesP> PolarBSplines<BSplinesR, BSplinesP, C>::
- -
309  DSpan1D singular_derivs,
-
310  DSpan2D derivs,
-
311  ddc::Coordinate<DimR, DimP> p) const
-
312 {
-
313  return eval(singular_derivs, derivs, p, eval_deriv_type(), eval_type());
-
314 }
-
315 
-
316 template <class BSplinesR, class BSplinesP, int C>
-
317 template <class MemorySpace>
-
318 ddc::DiscreteElement<BSplinesR, BSplinesP> PolarBSplines<BSplinesR, BSplinesP, C>::
- -
320  DSpan1D singular_derivs,
-
321  DSpan2D derivs,
-
322  ddc::Coordinate<DimR, DimP> p) const
-
323 {
-
324  return eval(singular_derivs, derivs, p, eval_type(), eval_deriv_type());
-
325 }
-
326 
-
327 template <class BSplinesR, class BSplinesP, int C>
-
328 template <class MemorySpace>
-
329 ddc::DiscreteElement<BSplinesR, BSplinesP> PolarBSplines<BSplinesR, BSplinesP, C>::
- -
331  DSpan1D singular_derivs,
-
332  DSpan2D derivs,
-
333  ddc::Coordinate<DimR, DimP> p) const
-
334 {
-
335  return eval(singular_derivs, derivs, p, eval_deriv_type(), eval_deriv_type());
-
336 }
-
337 
-
338 template <class BSplinesR, class BSplinesP, int C>
-
339 template <class MemorySpace>
-
340 template <class EvalTypeR, class EvalTypeP>
-
341 ddc::DiscreteElement<BSplinesR, BSplinesP> PolarBSplines<BSplinesR, BSplinesP, C>::
- -
343  DSpan1D singular_values,
-
344  DSpan2D values,
-
345  ddc::Coordinate<DimR, DimP> coord_eval,
-
346  EvalTypeR const,
-
347  EvalTypeP const) const
-
348 {
-
349  assert(singular_values.extent(0) == n_singular_basis());
-
350  assert(values.extent(0) == BSplinesR::degree() + 1);
-
351  assert(values.extent(1) == BSplinesP::degree() + 1);
-
352  ddc::DiscreteElement<BSplinesR> jmin_r;
-
353  ddc::DiscreteElement<BSplinesP> jmin_p;
-
354  double vals_r_data[BSplinesR::degree() + 1];
-
355  double vals_p_data[BSplinesP::degree() + 1];
-
356  DSpan1D vals_r(vals_r_data, BSplinesR::degree() + 1);
-
357  DSpan1D vals_p(vals_p_data, BSplinesP::degree() + 1);
-
358  static_assert(
-
359  std::is_same_v<EvalTypeR, eval_type> || std::is_same_v<EvalTypeR, eval_deriv_type>);
+
245  Impl& operator=(Impl&& x) = default;
+
246 
+
247  ddc::DiscreteElement<BSplinesR, BSplinesP> eval_basis(
+
248  DSpan1D singular_values,
+
249  DSpan2D values,
+
250  ddc::Coordinate<DimR, DimP> p) const;
+
251  ddc::DiscreteElement<BSplinesR, BSplinesP> eval_deriv_r(
+
252  DSpan1D singular_derivs,
+
253  DSpan2D derivs,
+
254  ddc::Coordinate<DimR, DimP> p) const;
+
255  ddc::DiscreteElement<BSplinesR, BSplinesP> eval_deriv_p(
+
256  DSpan1D singular_derivs,
+
257  DSpan2D derivs,
+
258  ddc::Coordinate<DimR, DimP> p) const;
+
259  ddc::DiscreteElement<BSplinesR, BSplinesP> eval_deriv_r_and_p(
+
260  DSpan1D singular_derivs,
+
261  DSpan2D derivs,
+
262  ddc::Coordinate<DimR, DimP> p) const;
+
263  void integrals(DSpan1D singular_int_vals, DSpan2D int_vals) const;
+
264 
+
265  std::size_t nbasis() const noexcept
+
266  {
+
267  std::size_t nr = ddc::discrete_space<BSplinesR>().nbasis() - C - 1;
+
268  std::size_t np = ddc::discrete_space<BSplinesP>().nbasis();
+
269  return n_singular_basis() + nr * np;
+
270  }
+
271 
+
272  discrete_domain_type full_domain() const noexcept
+
273  {
+
274  return discrete_domain_type(discrete_element_type {0}, discrete_vector_type {nbasis()});
+
275  }
+
276 
+
280  discrete_domain_type non_singular_domain() const noexcept
+
281  {
+
282  return full_domain().remove_first(discrete_vector_type {n_singular_basis()});
+
283  }
+
284 
+
285  private:
+
286  template <class EvalTypeR, class EvalTypeP>
+
287  ddc::DiscreteElement<BSplinesR, BSplinesP> eval(
+
288  DSpan1D singular_values,
+
289  DSpan2D values,
+
290  ddc::Coordinate<DimR, DimP> coord_eval,
+
291  EvalTypeR const,
+
292  EvalTypeP const) const;
+
293  };
+
294 };
+
295 
+
296 template <class BSplinesR, class BSplinesP, int C>
+
297 template <class MemorySpace>
+
298 ddc::DiscreteElement<BSplinesR, BSplinesP> PolarBSplines<BSplinesR, BSplinesP, C>::
+ +
300  DSpan1D singular_values,
+
301  DSpan2D values,
+
302  ddc::Coordinate<DimR, DimP> p) const
+
303 {
+
304  return eval(singular_values, values, p, eval_type(), eval_type());
+
305 }
+
306 
+
307 template <class BSplinesR, class BSplinesP, int C>
+
308 template <class MemorySpace>
+
309 ddc::DiscreteElement<BSplinesR, BSplinesP> PolarBSplines<BSplinesR, BSplinesP, C>::
+ +
311  DSpan1D singular_derivs,
+
312  DSpan2D derivs,
+
313  ddc::Coordinate<DimR, DimP> p) const
+
314 {
+
315  return eval(singular_derivs, derivs, p, eval_deriv_type(), eval_type());
+
316 }
+
317 
+
318 template <class BSplinesR, class BSplinesP, int C>
+
319 template <class MemorySpace>
+
320 ddc::DiscreteElement<BSplinesR, BSplinesP> PolarBSplines<BSplinesR, BSplinesP, C>::
+ +
322  DSpan1D singular_derivs,
+
323  DSpan2D derivs,
+
324  ddc::Coordinate<DimR, DimP> p) const
+
325 {
+
326  return eval(singular_derivs, derivs, p, eval_type(), eval_deriv_type());
+
327 }
+
328 
+
329 template <class BSplinesR, class BSplinesP, int C>
+
330 template <class MemorySpace>
+
331 ddc::DiscreteElement<BSplinesR, BSplinesP> PolarBSplines<BSplinesR, BSplinesP, C>::
+ +
333  DSpan1D singular_derivs,
+
334  DSpan2D derivs,
+
335  ddc::Coordinate<DimR, DimP> p) const
+
336 {
+
337  return eval(singular_derivs, derivs, p, eval_deriv_type(), eval_deriv_type());
+
338 }
+
339 
+
340 template <class BSplinesR, class BSplinesP, int C>
+
341 template <class MemorySpace>
+
342 template <class EvalTypeR, class EvalTypeP>
+
343 ddc::DiscreteElement<BSplinesR, BSplinesP> PolarBSplines<BSplinesR, BSplinesP, C>::
+ +
345  DSpan1D singular_values,
+
346  DSpan2D values,
+
347  ddc::Coordinate<DimR, DimP> coord_eval,
+
348  EvalTypeR const,
+
349  EvalTypeP const) const
+
350 {
+
351  assert(singular_values.extent(0) == n_singular_basis());
+
352  assert(values.extent(0) == BSplinesR::degree() + 1);
+
353  assert(values.extent(1) == BSplinesP::degree() + 1);
+
354  ddc::DiscreteElement<BSplinesR> jmin_r;
+
355  ddc::DiscreteElement<BSplinesP> jmin_p;
+
356  double vals_r_data[BSplinesR::degree() + 1];
+
357  double vals_p_data[BSplinesP::degree() + 1];
+
358  DSpan1D vals_r(vals_r_data, BSplinesR::degree() + 1);
+
359  DSpan1D vals_p(vals_p_data, BSplinesP::degree() + 1);
360  static_assert(
-
361  std::is_same_v<EvalTypeP, eval_type> || std::is_same_v<EvalTypeP, eval_deriv_type>);
-
362 
-
363  if constexpr (std::is_same_v<EvalTypeR, eval_type>) {
-
364  jmin_r = ddc::discrete_space<BSplinesR>().eval_basis(vals_r, ddc::select<DimR>(coord_eval));
-
365  } else if constexpr (std::is_same_v<EvalTypeR, eval_deriv_type>) {
-
366  jmin_r = ddc::discrete_space<BSplinesR>().eval_deriv(vals_r, ddc::select<DimR>(coord_eval));
-
367  }
-
368  if constexpr (std::is_same_v<EvalTypeP, eval_type>) {
-
369  jmin_p = ddc::discrete_space<BSplinesP>().eval_basis(vals_p, ddc::select<DimP>(coord_eval));
-
370  } else if constexpr (std::is_same_v<EvalTypeP, eval_deriv_type>) {
-
371  jmin_p = ddc::discrete_space<BSplinesP>().eval_deriv(vals_p, ddc::select<DimP>(coord_eval));
-
372  }
-
373  std::size_t nr = vals_r.size();
-
374  std::size_t np = vals_p.size();
-
375  std::size_t nr_done = 0;
-
376 
-
377  if (jmin_r.uid() < C + 1) {
-
378  nr_done = C + 1 - jmin_r.uid();
-
379  std::size_t np_eval = BSplinesP::degree() + 1;
-
380  for (std::size_t k(0); k < n_singular_basis(); ++k) {
-
381  singular_values(k) = 0.0;
-
382  for (std::size_t i(0); i < nr_done; ++i) {
-
383  for (std::size_t j(0); j < np_eval; ++j) {
-
384  ddc::DiscreteElement<BSplinesR, BSplinesP> icoeff(jmin_r + i, jmin_p + j);
-
385  singular_values(k)
-
386  += m_singular_basis_elements[k](icoeff) * vals_r(i) * vals_p(j);
-
387  }
-
388  }
-
389  }
-
390  } else {
-
391  for (std::size_t k(0); k < n_singular_basis(); ++k) {
-
392  singular_values(k) = 0.0;
-
393  }
-
394  }
-
395 
-
396  for (std::size_t i(0); i < nr - nr_done; ++i) {
-
397  for (std::size_t j(0); j < np; ++j) {
-
398  values(i, j) = vals_r(i + nr_done) * vals_p(j);
-
399  }
-
400  }
-
401  for (std::size_t i(nr - nr_done); i < nr; ++i) {
-
402  for (std::size_t j(0); j < np; ++j) {
-
403  values(i, j) = 0.0;
-
404  }
-
405  }
-
406  return ddc::DiscreteElement<BSplinesR, BSplinesP>(jmin_r, jmin_p);
-
407 }
-
408 
-
409 template <class BSplinesR, class BSplinesP, int C>
-
410 template <class MemorySpace>
- -
412  DSpan1D singular_int_vals,
-
413  DSpan2D int_vals) const
-
414 {
-
415  const int nr = ddc::discrete_space<BSplinesR>().ncells() + BSplinesR::degree() - C - 1;
-
416  const int np = ddc::discrete_space<BSplinesP>().ncells() + BSplinesP::degree();
-
417  assert(singular_int_vals.extent(0) == n_singular_basis());
-
418  assert(int_vals.extent(0) == nr);
-
419  assert(int_vals.extent(1) == np
-
420  || int_vals.extent(1) == ddc::discrete_space<BSplinesP>().ncells());
-
421 
-
422  std::vector<double> r_integrals_data(nr);
-
423  std::vector<double> p_integrals_data(ddc::discrete_space<BSplinesP>().ncells());
-
424  DSpan1D r_integrals(r_integrals_data.data(), nr);
-
425  DSpan1D p_integrals(p_integrals_data.data(), ddc::discrete_space<BSplinesP>().ncells());
-
426  ddc::discrete_space<BSplinesR>().integrals(r_integrals);
-
427  ddc::discrete_space<BSplinesP>().integrals(p_integrals);
-
428 
-
429  for (int k(0); k < n_singular_basis(); ++k) {
-
430  singular_int_vals(k) = 0.0;
-
431  ddc::for_each(
-
432  m_singular_basis_elements[k].domain(),
-
433  [=](ddc::DiscreteElement<BSplinesR, BSplinesP> const i) {
-
434  singular_int_vals(k) += m_singular_basis_elements[k](i)
-
435  * r_integrals(ddc::select<BSplinesR>(i))
-
436  * p_integrals(ddc::select<BSplinesP>(i));
-
437  });
-
438  }
-
439  for (int i(n_singular_basis()); i < nr; ++i) {
-
440  for (int j(0); j < ddc::discrete_space<BSplinesP>().ncells(); ++j) {
-
441  int_vals(i, j) = r_integrals(i) * p_integrals(j);
-
442  }
-
443  }
-
444  if (int_vals.extent(1) == np) {
-
445  for (int i(n_singular_basis()); i < nr; ++i) {
-
446  for (int j(0); j < BSplinesP::degree(); ++j) {
-
447  int_vals(i, j) = int_vals(i, j + ddc::discrete_space<BSplinesP>().ncells());
-
448  }
-
449  }
-
450  }
-
451 }
+
361  std::is_same_v<EvalTypeR, eval_type> || std::is_same_v<EvalTypeR, eval_deriv_type>);
+
362  static_assert(
+
363  std::is_same_v<EvalTypeP, eval_type> || std::is_same_v<EvalTypeP, eval_deriv_type>);
+
364 
+
365  if constexpr (std::is_same_v<EvalTypeR, eval_type>) {
+
366  jmin_r = ddc::discrete_space<BSplinesR>().eval_basis(vals_r, ddc::select<DimR>(coord_eval));
+
367  } else if constexpr (std::is_same_v<EvalTypeR, eval_deriv_type>) {
+
368  jmin_r = ddc::discrete_space<BSplinesR>().eval_deriv(vals_r, ddc::select<DimR>(coord_eval));
+
369  }
+
370  if constexpr (std::is_same_v<EvalTypeP, eval_type>) {
+
371  jmin_p = ddc::discrete_space<BSplinesP>().eval_basis(vals_p, ddc::select<DimP>(coord_eval));
+
372  } else if constexpr (std::is_same_v<EvalTypeP, eval_deriv_type>) {
+
373  jmin_p = ddc::discrete_space<BSplinesP>().eval_deriv(vals_p, ddc::select<DimP>(coord_eval));
+
374  }
+
375  std::size_t nr = vals_r.size();
+
376  std::size_t np = vals_p.size();
+
377  std::size_t nr_done = 0;
+
378 
+
379  if (jmin_r.uid() < C + 1) {
+
380  nr_done = C + 1 - jmin_r.uid();
+
381  std::size_t np_eval = BSplinesP::degree() + 1;
+
382  for (std::size_t k(0); k < n_singular_basis(); ++k) {
+
383  singular_values(k) = 0.0;
+
384  for (std::size_t i(0); i < nr_done; ++i) {
+
385  for (std::size_t j(0); j < np_eval; ++j) {
+
386  ddc::DiscreteElement<BSplinesR, BSplinesP> icoeff(jmin_r + i, jmin_p + j);
+
387  singular_values(k)
+
388  += m_singular_basis_elements[k](icoeff) * vals_r(i) * vals_p(j);
+
389  }
+
390  }
+
391  }
+
392  } else {
+
393  for (std::size_t k(0); k < n_singular_basis(); ++k) {
+
394  singular_values(k) = 0.0;
+
395  }
+
396  }
+
397 
+
398  for (std::size_t i(0); i < nr - nr_done; ++i) {
+
399  for (std::size_t j(0); j < np; ++j) {
+
400  values(i, j) = vals_r(i + nr_done) * vals_p(j);
+
401  }
+
402  }
+
403  for (std::size_t i(nr - nr_done); i < nr; ++i) {
+
404  for (std::size_t j(0); j < np; ++j) {
+
405  values(i, j) = 0.0;
+
406  }
+
407  }
+
408  return ddc::DiscreteElement<BSplinesR, BSplinesP>(jmin_r, jmin_p);
+
409 }
+
410 
+
411 template <class BSplinesR, class BSplinesP, int C>
+
412 template <class MemorySpace>
+ +
414  DSpan1D singular_int_vals,
+
415  DSpan2D int_vals) const
+
416 {
+
417  const int nr = ddc::discrete_space<BSplinesR>().ncells() + BSplinesR::degree() - C - 1;
+
418  const int np = ddc::discrete_space<BSplinesP>().ncells() + BSplinesP::degree();
+
419  assert(singular_int_vals.extent(0) == n_singular_basis());
+
420  assert(int_vals.extent(0) == nr);
+
421  assert(int_vals.extent(1) == np
+
422  || int_vals.extent(1) == ddc::discrete_space<BSplinesP>().ncells());
+
423 
+
424  std::vector<double> r_integrals_data(nr);
+
425  std::vector<double> p_integrals_data(ddc::discrete_space<BSplinesP>().ncells());
+
426  DSpan1D r_integrals(r_integrals_data.data(), nr);
+
427  DSpan1D p_integrals(p_integrals_data.data(), ddc::discrete_space<BSplinesP>().ncells());
+
428  ddc::discrete_space<BSplinesR>().integrals(r_integrals);
+
429  ddc::discrete_space<BSplinesP>().integrals(p_integrals);
+
430 
+
431  for (int k(0); k < n_singular_basis(); ++k) {
+
432  singular_int_vals(k) = 0.0;
+
433  ddc::for_each(
+
434  m_singular_basis_elements[k].domain(),
+
435  [=](ddc::DiscreteElement<BSplinesR, BSplinesP> const i) {
+
436  singular_int_vals(k) += m_singular_basis_elements[k](i)
+
437  * r_integrals(ddc::select<BSplinesR>(i))
+
438  * p_integrals(ddc::select<BSplinesP>(i));
+
439  });
+
440  }
+
441  for (int i(n_singular_basis()); i < nr; ++i) {
+
442  for (int j(0); j < ddc::discrete_space<BSplinesP>().ncells(); ++j) {
+
443  int_vals(i, j) = r_integrals(i) * p_integrals(j);
+
444  }
+
445  }
+
446  if (int_vals.extent(1) == np) {
+
447  for (int i(n_singular_basis()); i < nr; ++i) {
+
448  for (int j(0); j < BSplinesP::degree(); ++j) {
+
449  int_vals(i, j) = int_vals(i, j + ddc::discrete_space<BSplinesP>().ncells());
+
450  }
+
451  }
+
452  }
+
453 }
Definition: bernstein.hpp:16
Definition: barycentric_coordinates.hpp:7
A class for describing discrete 2D mappings from the logical domain to the physical domain.
Definition: discrete_mapping_to_cartesian.hpp:32
Definition: polar_bsplines.hpp:94
-
discrete_domain_type non_singular_domain() const noexcept
Returns the ddc::DiscreteDomain containing the indices of the non-singular b-splines.
Definition: polar_bsplines.hpp:278
+
discrete_domain_type non_singular_domain() const noexcept
Returns the ddc::DiscreteDomain containing the indices of the non-singular b-splines.
Definition: polar_bsplines.hpp:280
Definition: polar_bsplines.hpp:105
Definition: polar_bsplines.hpp:108
Definition: polar_bsplines.hpp:111
diff --git a/rk2_8hpp_source.html b/rk2_8hpp_source.html index cf90e338c..a0369c075 100644 --- a/rk2_8hpp_source.html +++ b/rk2_8hpp_source.html @@ -160,8 +160,8 @@
113  accessible,
114  "MemorySpace has to be accessible for ExecutionSpace.");
115  update(exec_space, y, dt, dy, [&](ValSpan y, DerivView dy, double dt) {
-
116  ddc::for_each(
-
117  ddc::policies::policy(exec_space),
+
116  ddc::parallel_for_each(
+
117  exec_space,
118  y.domain(),
119  KOKKOS_LAMBDA(Index const idx) { y(idx) = y(idx) + dy(idx) * dt; });
120  });
@@ -184,7 +184,7 @@
152  if constexpr (is_field_v<ValChunk>) {
153  ddcHelper::deepcopy(m_y_prime, y);
154  } else {
-
155  ddc::deepcopy(m_y_prime, y);
+
155  ddc::parallel_deepcopy(m_y_prime, y);
156  }
157 
158  // --------- Calculate k1 ------------
diff --git a/rk3_8hpp_source.html b/rk3_8hpp_source.html index 8f1d4cfc0..8da600cb0 100644 --- a/rk3_8hpp_source.html +++ b/rk3_8hpp_source.html @@ -157,8 +157,8 @@
111  "MemorySpace has to be accessible for ExecutionSpace.");
112  static_assert(ddc::is_chunk_v<ValChunk>);
113  update(exec_space, y, dt, dy, [&](ValSpan y, DerivView dy, double dt) {
-
114  ddc::for_each(
-
115  ddc::policies::policy(exec_space),
+
114  ddc::parallel_for_each(
+
115  exec_space,
116  y.domain(),
117  KOKKOS_LAMBDA(Index const idx) { y(idx) = y(idx) + dy(idx) * dt; });
118  });
@@ -208,16 +208,16 @@
177  // --------- Calculate k3 ------------
178  // Calculation of step
179  if constexpr (is_field_v<DerivChunk>) {
-
180  ddc::for_each(
-
181  ddc::policies::policy(exec_space),
+
180  ddc::parallel_for_each(
+
181  exec_space,
182  m_k_total.domain(),
183  KOKKOS_CLASS_LAMBDA(Index const i) {
184  // k_total = 2 * k2 - k1
185  fill_k_total(i, m_k_total, 2 * m_k2(i) - m_k1(i));
186  });
187  } else {
-
188  ddc::for_each(
-
189  ddc::policies::policy(exec_space),
+
188  ddc::parallel_for_each(
+
189  exec_space,
190  m_k_total.domain(),
191  KOKKOS_LAMBDA(Index const i) {
192  // k_total = 2 * k2 - k1
@@ -237,16 +237,16 @@
206  // --------- Update y ------------
207  // Calculation of step
208  if constexpr (is_field_v<DerivChunk>) {
-
209  ddc::for_each(
-
210  ddc::policies::policy(exec_space),
+
209  ddc::parallel_for_each(
+
210  exec_space,
211  m_k_total.domain(),
212  KOKKOS_CLASS_LAMBDA(Index const i) {
213  // k_total = k1 + 4 * k2 + k3
214  fill_k_total(i, m_k_total, m_k1(i) + 4 * m_k2(i) + m_k3(i));
215  });
216  } else {
-
217  ddc::for_each(
-
218  ddc::policies::policy(exec_space),
+
217  ddc::parallel_for_each(
+
218  exec_space,
219  m_k_total.domain(),
220  KOKKOS_LAMBDA(Index const i) {
221  // k_total = k1 + 4 * k2 + k3
@@ -264,7 +264,7 @@
233  if constexpr (is_field_v<ValSpan>) {
234  ddcHelper::deepcopy(copy_to, copy_from);
235  } else {
-
236  ddc::deepcopy(copy_to, copy_from);
+
236  ddc::parallel_deepcopy(copy_to, copy_from);
237  }
238  }
239 
diff --git a/rk4_8hpp_source.html b/rk4_8hpp_source.html index deec17932..f6bb22912 100644 --- a/rk4_8hpp_source.html +++ b/rk4_8hpp_source.html @@ -157,8 +157,8 @@
111  accessible,
112  "MemorySpace has to be accessible for ExecutionSpace.");
113  update(exec_space, y, dt, dy, [&](ValSpan y, DerivView dy, double dt) {
-
114  ddc::for_each(
-
115  ddc::policies::policy(exec_space),
+
114  ddc::parallel_for_each(
+
115  exec_space,
116  y.domain(),
117  KOKKOS_LAMBDA(Index const idx) { y(idx) = y(idx) + dy(idx) * dt; });
118  });
@@ -230,16 +230,16 @@
199  // --------- Update y ------------
200  // Calculation of step
201  if constexpr (is_field_v<DerivChunk>) {
-
202  ddc::for_each(
-
203  ddc::policies::policy(exec_space),
+
202  ddc::parallel_for_each(
+
203  exec_space,
204  m_k_total.domain(),
205  KOKKOS_CLASS_LAMBDA(Index const i) {
206  // k_total = k1 + 4 * k2 + k3
207  fill_k_total(i, m_k_total, m_k1(i) + 2 * m_k2(i) + 2 * m_k3(i) + m_k4(i));
208  });
209  } else {
-
210  ddc::for_each(
-
211  ddc::policies::policy(exec_space),
+
210  ddc::parallel_for_each(
+
211  exec_space,
212  m_k_total.domain(),
213  KOKKOS_LAMBDA(Index const i) {
214  // k_total = k1 + 4 * k2 + k3
@@ -257,7 +257,7 @@
226  if constexpr (is_field_v<ValSpan>) {
227  ddcHelper::deepcopy(copy_to, copy_from);
228  } else {
-
229  ddc::deepcopy(copy_to, copy_from);
+
229  ddc::parallel_deepcopy(copy_to, copy_from);
230  }
231  }
232 
diff --git a/search/all_1.js b/search/all_1.js index 447fa2694..3950948a8 100644 --- a/search/all_1.js +++ b/search/all_1.js @@ -30,5 +30,5 @@ var searchData= ['bsplinesr_45',['BSplinesR',['../classPolarSplineEvaluator.html#af95eaa07f8890667fe4feade36d50423',1,'PolarSplineEvaluator']]], ['builder_5ftype1_46',['builder_type1',['../classSplineBuilder2D.html#a32fa22d267cdeb0722572c33fd6c6e11',1,'SplineBuilder2D']]], ['builder_5ftype2_47',['builder_type2',['../classSplineBuilder2D.html#a0a33a10b79cf3d7273c5f20337727dff',1,'SplineBuilder2D']]], - ['bumpontailequilibrium_48',['BumpontailEquilibrium',['../classBumpontailEquilibrium.html#a3d08f6633ffa3867429c946e9ec19db5',1,'BumpontailEquilibrium::BumpontailEquilibrium()'],['../classBumpontailEquilibrium.html',1,'BumpontailEquilibrium']]] + ['bumpontailequilibrium_48',['BumpontailEquilibrium',['../classBumpontailEquilibrium.html#ae9e416e1ecca5bbacacb03e68e6c8dfe',1,'BumpontailEquilibrium::BumpontailEquilibrium()'],['../classBumpontailEquilibrium.html',1,'BumpontailEquilibrium']]] ]; diff --git a/search/all_15.js b/search/all_15.js index bb262ab3c..a810782ac 100644 --- a/search/all_15.js +++ b/search/all_15.js @@ -1,6 +1,6 @@ var searchData= [ - ['vectorfield_453',['VectorField',['../classVectorField.html#affcf9abd0e02dde4aa553233de0b57c8',1,'VectorField::VectorField()=default'],['../classVectorField.html#a9355ed87913f63a941e03f6b61a4c9e0',1,'VectorField::VectorField(mdomain_type const &domain, Allocator allocator=Allocator())'],['../classVectorField.html#a8e6b67ec99341f76401f77a27575cbfc',1,'VectorField::VectorField(VectorFieldSpan< OElementType, Domain, NDTag, LayoutDomain, MemorySpace > field_span)'],['../classVectorField.html#a4838971fca188dc404dc50d8af9ef3d9',1,'VectorField::VectorField(VectorField const &other)=delete'],['../classVectorField.html#ae23926389df672431636ef26e20f7780',1,'VectorField::VectorField(VectorField &&other)=default'],['../classVectorField.html',1,'VectorField< ElementType, Domain, NDTag, Allocator >']]], + ['vectorfield_453',['VectorField',['../classVectorField.html#affcf9abd0e02dde4aa553233de0b57c8',1,'VectorField::VectorField()=default'],['../classVectorField.html#a9355ed87913f63a941e03f6b61a4c9e0',1,'VectorField::VectorField(mdomain_type const &domain, Allocator allocator=Allocator())'],['../classVectorField.html#a4838971fca188dc404dc50d8af9ef3d9',1,'VectorField::VectorField(VectorField const &other)=delete'],['../classVectorField.html#ae23926389df672431636ef26e20f7780',1,'VectorField::VectorField(VectorField &&other)=default'],['../classVectorField.html',1,'VectorField< ElementType, Domain, NDTag, Allocator >']]], ['vectorfieldcommon_454',['VectorFieldCommon',['../classVectorFieldCommon.html',1,'']]], ['vectorfieldcommon_3c_20ddc_3a_3achunk_3c_20elementtype_2c_20domain_2c_20allocator_20_3e_2c_20ndtag_20_3e_455',['VectorFieldCommon< ddc::Chunk< ElementType, Domain, Allocator >, NDTag >',['../classVectorFieldCommon.html',1,'']]], ['vectorfieldcommon_3c_20ddc_3a_3achunkspan_3c_20elementtype_2c_20domain_2c_20layoutstridedpolicy_2c_20memoryspace_20_3e_2c_20ndtag_20_3e_456',['VectorFieldCommon< ddc::ChunkSpan< ElementType, Domain, LayoutStridedPolicy, MemorySpace >, NDTag >',['../classVectorFieldCommon.html',1,'']]], diff --git a/search/functions_1.js b/search/functions_1.js index 41c190eeb..8be91ce6e 100644 --- a/search/functions_1.js +++ b/search/functions_1.js @@ -8,5 +8,5 @@ var searchData= ['bslexplicitpredcorrrp_713',['BslExplicitPredCorrRP',['../classBslExplicitPredCorrRP.html#a1723b95b68fc8c51197ece578f738665',1,'BslExplicitPredCorrRP']]], ['bslimplicitpredcorrrp_714',['BslImplicitPredCorrRP',['../classBslImplicitPredCorrRP.html#a8fa4c330fe220d22f8ca4a1ca5946709',1,'BslImplicitPredCorrRP']]], ['bslpredcorrrp_715',['BslPredCorrRP',['../classBslPredCorrRP.html#a0aa06c1ea8888d1bdb795ce74658e1e9',1,'BslPredCorrRP']]], - ['bumpontailequilibrium_716',['BumpontailEquilibrium',['../classBumpontailEquilibrium.html#a3d08f6633ffa3867429c946e9ec19db5',1,'BumpontailEquilibrium']]] + ['bumpontailequilibrium_716',['BumpontailEquilibrium',['../classBumpontailEquilibrium.html#ae9e416e1ecca5bbacacb03e68e6c8dfe',1,'BumpontailEquilibrium']]] ]; diff --git a/search/functions_15.js b/search/functions_15.js index a417dccc5..a7d223571 100644 --- a/search/functions_15.js +++ b/search/functions_15.js @@ -1,6 +1,6 @@ var searchData= [ - ['vectorfield_873',['VectorField',['../classVectorField.html#affcf9abd0e02dde4aa553233de0b57c8',1,'VectorField::VectorField()=default'],['../classVectorField.html#a9355ed87913f63a941e03f6b61a4c9e0',1,'VectorField::VectorField(mdomain_type const &domain, Allocator allocator=Allocator())'],['../classVectorField.html#a8e6b67ec99341f76401f77a27575cbfc',1,'VectorField::VectorField(VectorFieldSpan< OElementType, Domain, NDTag, LayoutDomain, MemorySpace > field_span)'],['../classVectorField.html#a4838971fca188dc404dc50d8af9ef3d9',1,'VectorField::VectorField(VectorField const &other)=delete'],['../classVectorField.html#ae23926389df672431636ef26e20f7780',1,'VectorField::VectorField(VectorField &&other)=default']]], + ['vectorfield_873',['VectorField',['../classVectorField.html#affcf9abd0e02dde4aa553233de0b57c8',1,'VectorField::VectorField()=default'],['../classVectorField.html#a9355ed87913f63a941e03f6b61a4c9e0',1,'VectorField::VectorField(mdomain_type const &domain, Allocator allocator=Allocator())'],['../classVectorField.html#a4838971fca188dc404dc50d8af9ef3d9',1,'VectorField::VectorField(VectorField const &other)=delete'],['../classVectorField.html#ae23926389df672431636ef26e20f7780',1,'VectorField::VectorField(VectorField &&other)=default']]], ['vectorfieldspan_874',['VectorFieldSpan',['../classVectorFieldSpan.html#a496be86209bed2fe0c4637c2068f2e9d',1,'VectorFieldSpan::VectorFieldSpan()=default'],['../classVectorFieldSpan.html#ae15150e6af873478dfe5132a30fe168a',1,'VectorFieldSpan::VectorFieldSpan(VectorFieldSpan const &other)=default'],['../classVectorFieldSpan.html#aa4aea470e10596cd64dbb912ac9c9dfb',1,'VectorFieldSpan::VectorFieldSpan(VectorFieldSpan &&other)=default'],['../classVectorFieldSpan.html#aa4f77f6e758b991a7c18bb9b25c0ae30',1,'VectorFieldSpan::VectorFieldSpan(VectorField< OElementType, Domain, NDTag, Allocator > &other) noexcept'],['../classVectorFieldSpan.html#ab10f4b73b4233a02e5f25c2b4afcb6b8',1,'VectorFieldSpan::VectorFieldSpan(VectorField< OElementType, Domain, NDTag, Allocator > const &other) noexcept'],['../classVectorFieldSpan.html#a6d06815cd2394ffa4549a154ee796280',1,'VectorFieldSpan::VectorFieldSpan(VectorFieldSpan< OElementType, mdomain_type, NDTag, LayoutStridedPolicy, MemorySpace > const &other) noexcept'],['../classVectorFieldSpan.html#ab9abf5d8db080b9e814bdf95d56fa9e9',1,'VectorFieldSpan::VectorFieldSpan(mdomain_type const &domain, OElementType *... ptr)']]], ['vlasovpoissonsolver_875',['VlasovPoissonSolver',['../classVlasovPoissonSolver.html#abe5fd578bfe6e432514cfc0c1e1777c4',1,'VlasovPoissonSolver']]], ['vortexmergerdensitysolution_876',['VortexMergerDensitySolution',['../classVortexMergerDensitySolution.html#a75f051a4a9d1ccfee6c1976e4a914c75',1,'VortexMergerDensitySolution']]], diff --git a/species__info_8hpp_source.html b/species__info_8hpp_source.html index 8d6c93f26..d22e078e9 100644 --- a/species__info_8hpp_source.html +++ b/species__info_8hpp_source.html @@ -155,8 +155,8 @@
61  {
62  m_charge_view = m_charge.span_cview();
63  m_mass_view = m_mass.span_cview();
-
64  ddc::deepcopy(m_charge, impl.m_charge);
-
65  ddc::deepcopy(m_mass, impl.m_mass);
+
64  ddc::parallel_deepcopy(m_charge, impl.m_charge);
+
65  ddc::parallel_deepcopy(m_mass, impl.m_mass);
66  }
67 
73  Impl(ddc::Chunk<int, discrete_domain_type, ddc::KokkosAllocator<int, MemorySpace>> charge,
diff --git a/spline__builder__2d_8hpp_source.html b/spline__builder__2d_8hpp_source.html index 4365a48ff..bf47c582c 100644 --- a/spline__builder__2d_8hpp_source.html +++ b/spline__builder__2d_8hpp_source.html @@ -330,7 +330,7 @@
382  // Get interpolated values
383  ddc::Chunk<double, interpolation_domain_type1> vals1(
384  spline_builder1.interpolation_domain());
-
385  ddc::deepcopy(vals1, vals[i]);
+
385  ddc::parallel_deepcopy(vals1, vals[i]);
386 
387  // Get interpolated derivatives
388  const std::optional<CDSpan1D> deriv_l(
diff --git a/spline__foot__finder_8hpp_source.html b/spline__foot__finder_8hpp_source.html index f9d5a8929..5ea37e7d6 100644 --- a/spline__foot__finder_8hpp_source.html +++ b/spline__foot__finder_8hpp_source.html @@ -244,7 +244,7 @@
void operator()(SpanRP< CoordRP > feet, VectorDViewRP< RDimX, RDimY > advection_field, double dt) const final
Advect the feet over .
Definition: spline_foot_finder.hpp:97
Pre-declaration of VectorFieldSpan.
Definition: vector_field_span.hpp:45
Pre-declaration of VectorField.
Definition: vector_field.hpp:34
-
view_type span_view() const
Get a constant reference to this vector field.
Definition: vector_field.hpp:182
+
view_type span_view() const
Get a constant reference to this vector field.
Definition: vector_field.hpp:157
KOKKOS_FUNCTION double norm_inf(ddc::Coordinate< Tags... > coord)
Compute the infinity norm.
Definition: utils_tools.hpp:23

diff --git a/spline__interpolator__batched_8hpp_source.html b/spline__interpolator__batched_8hpp_source.html index 2256ca5f2..c656c4924 100644 --- a/spline__interpolator__batched_8hpp_source.html +++ b/spline__interpolator__batched_8hpp_source.html @@ -162,8 +162,8 @@
74  , m_derivs_min_alloc(builder.derivs_xmin_domain())
75  , m_derivs_max_alloc(builder.derivs_xmax_domain())
76  {
-
77  ddc::fill(m_derivs_min_alloc, 0.);
-
78  ddc::fill(m_derivs_max_alloc, 0.);
+
77  ddc::parallel_fill(m_derivs_min_alloc, 0.);
+
78  ddc::parallel_fill(m_derivs_max_alloc, 0.);
79  }
80 
81  ~SplineInterpolatorBatched() override = default;
diff --git a/vector__field_8hpp_source.html b/vector__field_8hpp_source.html index a3de8dfa3..a88ef7df1 100644 --- a/vector__field_8hpp_source.html +++ b/vector__field_8hpp_source.html @@ -162,124 +162,108 @@
87  {
88  }
89 
-
95  template <class OElementType, class LayoutDomain, class MemorySpace, std::size_t... Is>
-
96  explicit VectorField(
-
97  VectorFieldSpan<OElementType, Domain, NDTag, LayoutDomain, MemorySpace> field_span,
-
98  std::index_sequence<Is...> const&)
-
99  : base_type(chunk_type(ddcHelper::get<ddc::type_seq_element_t<Is, NDTag>>(field_span))...)
-
100  {
-
101  }
-
102 
-
107  template <class... ODDims, typename T, T... ints>
-
108  element_type operator()(
-
109  ddc::DiscreteElement<ODDims...> const& delems,
-
110  std::integer_sequence<T, ints...>) const noexcept
-
111  {
-
112  return element_type((base_type::m_values[ints](delems))...);
-
113  }
-
114 
-
115 public:
-
117  VectorField() = default;
-
118 
-
125  explicit VectorField(mdomain_type const& domain, Allocator allocator = Allocator())
-
126  : VectorField(domain, allocator, std::make_index_sequence<base_type::NDims> {})
-
127  {
-
128  }
-
129 
-
135  template <class OElementType, class LayoutDomain, class MemorySpace>
-
136  explicit VectorField(
-
137  VectorFieldSpan<OElementType, Domain, NDTag, LayoutDomain, MemorySpace> field_span)
-
138  : VectorField(field_span, std::make_index_sequence<base_type::NDims> {})
-
139  {
-
140  }
+
94  template <class... ODDims, typename T, T... ints>
+
95  element_type operator()(
+
96  ddc::DiscreteElement<ODDims...> const& delems,
+
97  std::integer_sequence<T, ints...>) const noexcept
+
98  {
+
99  return element_type((base_type::m_values[ints](delems))...);
+
100  }
+
101 
+
102 public:
+
104  VectorField() = default;
+
105 
+
112  explicit VectorField(mdomain_type const& domain, Allocator allocator = Allocator())
+
113  : VectorField(domain, allocator, std::make_index_sequence<base_type::NDims> {})
+
114  {
+
115  }
+
116 
+
118  VectorField(VectorField const& other) = delete;
+
119 
+
124  VectorField(VectorField&& other) = default;
+
125 
+
131  VectorField& operator=(VectorField const& other) = default;
+
132 
+
138  VectorField& operator=(VectorField&& other) = default;
+
139 
+
140  ~VectorField() = default;
141 
-
143  VectorField(VectorField const& other) = delete;
-
144 
-
149  VectorField(VectorField&& other) = default;
-
150 
-
156  VectorField& operator=(VectorField const& other) = default;
-
157 
-
163  VectorField& operator=(VectorField&& other) = default;
-
164 
-
165  ~VectorField() = default;
-
166 
-
172  view_type span_cview() const
-
173  {
-
174  return view_type(*this);
-
175  }
-
176 
-
182  view_type span_view() const
-
183  {
-
184  return view_type(*this);
-
185  }
-
186 
-
192  span_type span_view()
-
193  {
-
194  return span_type(*this);
-
195  }
-
196 
-
201  template <class... ODDims>
-
202  element_type operator()(ddc::DiscreteElement<ODDims> const&... delems) const noexcept
-
203  {
-
204  ddc::DiscreteElement<ODDims...> delem_idx(delems...);
-
205  return this->
-
206  operator()(delem_idx, std::make_integer_sequence<int, element_type::size()> {});
-
207  }
-
208 
-
213  template <class... ODDims, class = std::enable_if_t<sizeof...(ODDims) != 1>>
-
214  element_type operator()(ddc::DiscreteElement<ODDims...> const& delems) const noexcept
-
215  {
-
216  return this->operator()(delems, std::make_integer_sequence<int, element_type::size()> {});
-
217  }
-
218 
-
219 
-
230  template <class... QueryDDims>
-
231  auto operator[](ddc::DiscreteElement<QueryDDims...> const& slice_spec) const
-
232  {
-
233  return span_cview()[slice_spec];
-
234  }
-
235 
-
246  template <class... QueryDDims>
-
247  auto operator[](ddc::DiscreteElement<QueryDDims...> const& slice_spec)
-
248  {
-
249  return span_view()[slice_spec];
-
250  }
-
251 
-
261  template <class... QueryDDims>
-
262  auto operator[](ddc::DiscreteDomain<QueryDDims...> const& odomain) const
-
263  {
-
264  return span_cview()[odomain];
-
265  }
-
266 
-
276  template <class... QueryDDims>
-
277  auto operator[](ddc::DiscreteDomain<QueryDDims...> const& odomain)
-
278  {
-
279  return span_view()[odomain];
-
280  }
-
281 };
+
147  view_type span_cview() const
+
148  {
+
149  return view_type(*this);
+
150  }
+
151 
+
157  view_type span_view() const
+
158  {
+
159  return view_type(*this);
+
160  }
+
161 
+
167  span_type span_view()
+
168  {
+
169  return span_type(*this);
+
170  }
+
171 
+
176  template <class... ODDims>
+
177  element_type operator()(ddc::DiscreteElement<ODDims> const&... delems) const noexcept
+
178  {
+
179  ddc::DiscreteElement<ODDims...> delem_idx(delems...);
+
180  return this->
+
181  operator()(delem_idx, std::make_integer_sequence<int, element_type::size()> {});
+
182  }
+
183 
+
188  template <class... ODDims, class = std::enable_if_t<sizeof...(ODDims) != 1>>
+
189  element_type operator()(ddc::DiscreteElement<ODDims...> const& delems) const noexcept
+
190  {
+
191  return this->operator()(delems, std::make_integer_sequence<int, element_type::size()> {});
+
192  }
+
193 
+
194 
+
205  template <class... QueryDDims>
+
206  auto operator[](ddc::DiscreteElement<QueryDDims...> const& slice_spec) const
+
207  {
+
208  return span_cview()[slice_spec];
+
209  }
+
210 
+
221  template <class... QueryDDims>
+
222  auto operator[](ddc::DiscreteElement<QueryDDims...> const& slice_spec)
+
223  {
+
224  return span_view()[slice_spec];
+
225  }
+
226 
+
236  template <class... QueryDDims>
+
237  auto operator[](ddc::DiscreteDomain<QueryDDims...> const& odomain) const
+
238  {
+
239  return span_cview()[odomain];
+
240  }
+
241 
+
251  template <class... QueryDDims>
+
252  auto operator[](ddc::DiscreteDomain<QueryDDims...> const& odomain)
+
253  {
+
254  return span_view()[odomain];
+
255  }
+
256 };
Definition: vector_field_common.hpp:8
Pre-declaration of VectorFieldSpan.
Definition: vector_field_span.hpp:45
Pre-declaration of VectorField.
Definition: vector_field.hpp:34
ddc::Chunk< ElementType, Domain, Allocator > chunk_type
Type describing the object which can be extracted from this VectorField using the get<> function.
Definition: vector_field.hpp:39
VectorField & operator=(VectorField const &other)=default
Copy-assigns a new value to this VectorFieldSpan, yields a new view to the same data.
VectorFieldSpan< const ElementType, Domain, NDTag, std::experimental::layout_right, typename Allocator::memory_space > view_type
A type which can hold a constant reference to this VectorField.
Definition: vector_field.hpp:67
-
span_type span_view()
Get a modifiable reference to this vector field.
Definition: vector_field.hpp:192
+
span_type span_view()
Get a modifiable reference to this vector field.
Definition: vector_field.hpp:167
VectorField(VectorField const &other)=delete
Deleted: use deepcopy instead.
VectorField & operator=(VectorField &&other)=default
Move-assigns a new value to this VectorFieldSpan.
-
auto operator[](ddc::DiscreteDomain< QueryDDims... > const &odomain) const
Slice out some dimensions.
Definition: vector_field.hpp:262
-
auto operator[](ddc::DiscreteDomain< QueryDDims... > const &odomain)
Slice out some dimensions.
Definition: vector_field.hpp:277
+
auto operator[](ddc::DiscreteDomain< QueryDDims... > const &odomain) const
Slice out some dimensions.
Definition: vector_field.hpp:237
+
auto operator[](ddc::DiscreteDomain< QueryDDims... > const &odomain)
Slice out some dimensions.
Definition: vector_field.hpp:252
typename base_type::element_type element_type
The type of an element in one of the Chunks comprising the VectorField.
Definition: vector_field.hpp:46
typename chunk_type::memory_space memory_space
The type of the memory space where the field is saved (CPU vs GPU).
Definition: vector_field.hpp:77
-
auto operator[](ddc::DiscreteElement< QueryDDims... > const &slice_spec)
Slice out some dimensions.
Definition: vector_field.hpp:247
-
VectorField(VectorFieldSpan< OElementType, Domain, NDTag, LayoutDomain, MemorySpace > field_span)
Construct a VectorField from a deepcopy of a VectorFieldSpan.
Definition: vector_field.hpp:136
-
auto operator[](ddc::DiscreteElement< QueryDDims... > const &slice_spec) const
Slice out some dimensions.
Definition: vector_field.hpp:231
-
VectorField(mdomain_type const &domain, Allocator allocator=Allocator())
Construct a VectorField on a domain with uninitialized values.
Definition: vector_field.hpp:125
+
auto operator[](ddc::DiscreteElement< QueryDDims... > const &slice_spec)
Slice out some dimensions.
Definition: vector_field.hpp:222
+
auto operator[](ddc::DiscreteElement< QueryDDims... > const &slice_spec) const
Slice out some dimensions.
Definition: vector_field.hpp:206
+
VectorField(mdomain_type const &domain, Allocator allocator=Allocator())
Construct a VectorField on a domain with uninitialized values.
Definition: vector_field.hpp:112
VectorFieldSpan< ElementType, Domain, NDTag, std::experimental::layout_right, typename Allocator::memory_space > span_type
A type which can hold a reference to this VectorField.
Definition: vector_field.hpp:57
typename base_type::mdomain_type mdomain_type
The type of the domain on which the field is defined.
Definition: vector_field.hpp:72
-
element_type operator()(ddc::DiscreteElement< ODDims > const &... delems) const noexcept
Element access using a list of DiscreteElement.
Definition: vector_field.hpp:202
-
view_type span_view() const
Get a constant reference to this vector field.
Definition: vector_field.hpp:182
+
element_type operator()(ddc::DiscreteElement< ODDims > const &... delems) const noexcept
Element access using a list of DiscreteElement.
Definition: vector_field.hpp:177
+
view_type span_view() const
Get a constant reference to this vector field.
Definition: vector_field.hpp:157
VectorField(VectorField &&other)=default
Constructs a new VectorField by move.
-
view_type span_cview() const
Get a constant reference to this vector field.
Definition: vector_field.hpp:172
+
view_type span_cview() const
Get a constant reference to this vector field.
Definition: vector_field.hpp:147
VectorField()=default
Empty VectorField.
diff --git a/vector__field__common_8hpp_source.html b/vector__field__common_8hpp_source.html index 731c628f1..372ee36a5 100644 --- a/vector__field__common_8hpp_source.html +++ b/vector__field__common_8hpp_source.html @@ -231,7 +231,7 @@
132  template <class FieldSrc>
133  void deepcopy(FieldSrc const& src)
134  {
-
135  ((ddc::deepcopy(this->get<DDims>(), src.template get<DDims>())), ...);
+
135  ((ddc::parallel_deepcopy(this->get<DDims>(), src.template get<DDims>())), ...);
136  }
137 
138  template <class QueryTag>