9 #ifndef _COMPADRE_SOLUTIONSET_HPP_
10 #define _COMPADRE_SOLUTIONSET_HPP_
14 #include <Kokkos_Core.hpp>
20 template <
typename memory_space = device_memory_space>
24 Kokkos::View<TargetOperation*, memory_space>
_lro;
46 Kokkos::View<double*, layout_right, memory_space>
_alphas;
101 template <
typename other_memory_space>
115 if (
_lro.extent(0) != other.
_lro.extent(0)) {
116 Kokkos::resize(
_lro, other.
_lro.extent(0));
136 Kokkos::deep_copy(
_lro, other.
_lro);
157 template<typename ms=memory_space, enable_if_t<!std::is_same<host_memory_space, ms>::value,
int> = 0>
158 KOKKOS_INLINE_FUNCTION
159 int getTargetOffsetIndex(
const int lro_num,
const int input_component,
const int output_component,
const int evaluation_site_local_index = 0)
const {
163 + output_component );
167 template<typename ms=memory_space, enable_if_t<!std::is_same<host_memory_space, ms>::value,
int> = 0>
168 KOKKOS_INLINE_FUNCTION
171 return getAlpha(lro, target_index, 0, 0, neighbor_index, 0, 0, evaluation_site_local_index);
175 template<typename ms=memory_space, enable_if_t<!std::is_same<host_memory_space, ms>::value,
int> = 0>
176 KOKKOS_INLINE_FUNCTION
179 return getAlpha(lro, target_index, output_component, 0, neighbor_index, 0, 0, evaluation_site_local_index);
183 template<typename ms=memory_space, enable_if_t<!std::is_same<host_memory_space, ms>::value,
int> = 0>
184 KOKKOS_INLINE_FUNCTION
185 double getAlpha0TensorTo2Tensor(
TargetOperation lro,
const int target_index,
const int output_component_axis_1,
const int output_component_axis_2,
const int neighbor_index,
const int evaluation_site_local_index = 0)
const {
186 return getAlpha(lro, target_index, output_component_axis_1, output_component_axis_2, neighbor_index, 0, 0, evaluation_site_local_index);
190 template<typename ms=memory_space, enable_if_t<!std::is_same<host_memory_space, ms>::value,
int> = 0>
191 KOKKOS_INLINE_FUNCTION
194 return getAlpha(lro, target_index, 0, 0, neighbor_index, input_component, 0, evaluation_site_local_index);
198 template<typename ms=memory_space, enable_if_t<!std::is_same<host_memory_space, ms>::value,
int> = 0>
199 KOKKOS_INLINE_FUNCTION
200 double getAlpha1TensorTo1Tensor(
TargetOperation lro,
const int target_index,
const int output_component,
const int neighbor_index,
const int input_component,
const int evaluation_site_local_index = 0)
const {
202 return getAlpha(lro, target_index, output_component, 0, neighbor_index, input_component, 0, evaluation_site_local_index);
206 template<typename ms=memory_space, enable_if_t<!std::is_same<host_memory_space, ms>::value,
int> = 0>
207 KOKKOS_INLINE_FUNCTION
208 double getAlpha1TensorTo2Tensor(
TargetOperation lro,
const int target_index,
const int output_component_axis_1,
const int output_component_axis_2,
const int neighbor_index,
const int input_component,
const int evaluation_site_local_index = 0)
const {
210 return getAlpha(lro, target_index, output_component_axis_1, output_component_axis_2, neighbor_index, input_component, 0, evaluation_site_local_index);
214 template<typename ms=memory_space, enable_if_t<!std::is_same<host_memory_space, ms>::value,
int> = 0>
215 KOKKOS_INLINE_FUNCTION
216 double getAlpha2TensorTo0Tensor(
TargetOperation lro,
const int target_index,
const int neighbor_index,
const int input_component_axis_1,
const int input_component_axis_2,
const int evaluation_site_local_index = 0)
const {
217 return getAlpha(lro, target_index, 0, 0, neighbor_index, input_component_axis_1, input_component_axis_2, evaluation_site_local_index);
221 template<typename ms=memory_space, enable_if_t<!std::is_same<host_memory_space, ms>::value,
int> = 0>
222 KOKKOS_INLINE_FUNCTION
223 double getAlpha2TensorTo1Tensor(
TargetOperation lro,
const int target_index,
const int output_component,
const int neighbor_index,
const int input_component_axis_1,
const int input_component_axis_2,
const int evaluation_site_local_index = 0)
const {
224 return getAlpha(lro, target_index, output_component, 0, neighbor_index, input_component_axis_1, input_component_axis_2, evaluation_site_local_index);
228 template<typename ms=memory_space, enable_if_t<!std::is_same<host_memory_space, ms>::value,
int> = 0>
229 KOKKOS_INLINE_FUNCTION
230 double getAlpha2TensorTo2Tensor(
TargetOperation lro,
const int target_index,
const int output_component_axis_1,
const int output_component_axis_2,
const int neighbor_index,
const int input_component_axis_1,
const int input_component_axis_2,
const int evaluation_site_local_index = 0)
const {
231 return getAlpha(lro, target_index, output_component_axis_1, output_component_axis_2, neighbor_index, input_component_axis_1, input_component_axis_2, evaluation_site_local_index);
236 template<typename ms=memory_space, enable_if_t<!std::is_same<host_memory_space, ms>::value,
int> = 0>
237 KOKKOS_INLINE_FUNCTION
245 return (total_neighbors_before_target+
TO_GLOBAL(total_added_alphas_before_target))
247 +
TO_GLOBAL(alpha_column_offset*alphas_per_tile_per_target);
254 template<typename ms=memory_space, enable_if_t<!std::is_same<host_memory_space, ms>::value,
int> = 0>
255 KOKKOS_INLINE_FUNCTION
257 const int output_component_axis_2,
const int input_component_axis_1,
258 const int input_component_axis_2,
const int evaluation_site_local_index = 0)
const {
270 return getTargetOffsetIndex(lro_number, input_index, output_index, evaluation_site_local_index);
274 template<typename ms=memory_space, enable_if_t<!std::is_same<host_memory_space, ms>::value,
int> = 0>
275 KOKKOS_INLINE_FUNCTION
276 double getAlpha(
TargetOperation lro,
const int target_index,
const int output_component_axis_1,
const int output_component_axis_2,
const int neighbor_index,
const int input_component_axis_1,
const int input_component_axis_2,
const int evaluation_site_local_index = 0)
const {
298 "getAlpha called on SolutionSet with _contains_valid_alphas=false");
301 output_component_axis_2, input_component_axis_1, input_component_axis_2, evaluation_site_local_index);
303 auto alphas_index = this->
getAlphaIndex(target_index, alpha_column_offset);
304 return _alphas(alphas_index + neighbor_index);
310 template<typename ms=memory_space, enable_if_t<!std::is_same<host_memory_space, ms>::value,
int> = 0>
311 KOKKOS_INLINE_FUNCTION
317 template<typename ms=memory_space, enable_if_t<std::is_same<host_memory_space, ms>::value,
int> = 0>
318 int getTargetOffsetIndex(
const int lro_num,
const int input_component,
const int output_component,
const int evaluation_site_local_index = 0)
const {
322 + output_component );
326 template<typename ms=memory_space, enable_if_t<std::is_same<host_memory_space, ms>::value,
int> = 0>
329 return getAlpha(lro, target_index, 0, 0, neighbor_index, 0, 0, evaluation_site_local_index);
333 template<typename ms=memory_space, enable_if_t<std::is_same<host_memory_space, ms>::value,
int> = 0>
336 return getAlpha(lro, target_index, output_component, 0, neighbor_index, 0, 0, evaluation_site_local_index);
340 template<typename ms=memory_space, enable_if_t<std::is_same<host_memory_space, ms>::value,
int> = 0>
341 double getAlpha0TensorTo2Tensor(
TargetOperation lro,
const int target_index,
const int output_component_axis_1,
const int output_component_axis_2,
const int neighbor_index,
const int evaluation_site_local_index = 0)
const {
342 return getAlpha(lro, target_index, output_component_axis_1, output_component_axis_2, neighbor_index, 0, 0, evaluation_site_local_index);
346 template<typename ms=memory_space, enable_if_t<std::is_same<host_memory_space, ms>::value,
int> = 0>
349 return getAlpha(lro, target_index, 0, 0, neighbor_index, input_component, 0, evaluation_site_local_index);
353 template<typename ms=memory_space, enable_if_t<std::is_same<host_memory_space, ms>::value,
int> = 0>
354 double getAlpha1TensorTo1Tensor(
TargetOperation lro,
const int target_index,
const int output_component,
const int neighbor_index,
const int input_component,
const int evaluation_site_local_index = 0)
const {
356 return getAlpha(lro, target_index, output_component, 0, neighbor_index, input_component, 0, evaluation_site_local_index);
360 template<typename ms=memory_space, enable_if_t<std::is_same<host_memory_space, ms>::value,
int> = 0>
361 double getAlpha1TensorTo2Tensor(
TargetOperation lro,
const int target_index,
const int output_component_axis_1,
const int output_component_axis_2,
const int neighbor_index,
const int input_component,
const int evaluation_site_local_index = 0)
const {
363 return getAlpha(lro, target_index, output_component_axis_1, output_component_axis_2, neighbor_index, input_component, 0, evaluation_site_local_index);
367 template<typename ms=memory_space, enable_if_t<std::is_same<host_memory_space, ms>::value,
int> = 0>
368 double getAlpha2TensorTo0Tensor(
TargetOperation lro,
const int target_index,
const int neighbor_index,
const int input_component_axis_1,
const int input_component_axis_2,
const int evaluation_site_local_index = 0)
const {
369 return getAlpha(lro, target_index, 0, 0, neighbor_index, input_component_axis_1, input_component_axis_2, evaluation_site_local_index);
373 template<typename ms=memory_space, enable_if_t<std::is_same<host_memory_space, ms>::value,
int> = 0>
374 double getAlpha2TensorTo1Tensor(
TargetOperation lro,
const int target_index,
const int output_component,
const int neighbor_index,
const int input_component_axis_1,
const int input_component_axis_2,
const int evaluation_site_local_index = 0)
const {
375 return getAlpha(lro, target_index, output_component, 0, neighbor_index, input_component_axis_1, input_component_axis_2, evaluation_site_local_index);
379 template<typename ms=memory_space, enable_if_t<std::is_same<host_memory_space, ms>::value,
int> = 0>
380 double getAlpha2TensorTo2Tensor(
TargetOperation lro,
const int target_index,
const int output_component_axis_1,
const int output_component_axis_2,
const int neighbor_index,
const int input_component_axis_1,
const int input_component_axis_2,
const int evaluation_site_local_index = 0)
const {
381 return getAlpha(lro, target_index, output_component_axis_1, output_component_axis_2, neighbor_index, input_component_axis_1, input_component_axis_2, evaluation_site_local_index);
386 template<typename ms=memory_space, enable_if_t<std::is_same<host_memory_space, ms>::value,
int> = 0>
394 return (total_neighbors_before_target+
TO_GLOBAL(total_added_alphas_before_target))
396 +
TO_GLOBAL(alpha_column_offset*alphas_per_tile_per_target);
403 template<typename ms=memory_space, enable_if_t<std::is_same<host_memory_space, ms>::value,
int> = 0>
405 const int output_component_axis_2,
const int input_component_axis_1,
406 const int input_component_axis_2,
const int evaluation_site_local_index = 0)
const {
418 return getTargetOffsetIndex(lro_number, input_index, output_index, evaluation_site_local_index);
422 template<typename ms=memory_space, enable_if_t<std::is_same<host_memory_space, ms>::value,
int> = 0>
423 double getAlpha(
TargetOperation lro,
const int target_index,
const int output_component_axis_1,
const int output_component_axis_2,
const int neighbor_index,
const int input_component_axis_1,
const int input_component_axis_2,
const int evaluation_site_local_index = 0)
const {
445 "getAlpha called on SolutionSet with _contains_valid_alphas=false");
448 output_component_axis_2, input_component_axis_1, input_component_axis_2, evaluation_site_local_index);
450 auto alphas_index = this->
getAlphaIndex(target_index, alpha_column_offset);
451 return _alphas(alphas_index + neighbor_index);
457 template<typename ms=memory_space, enable_if_t<std::is_same<host_memory_space, ms>::value,
int> = 0>
471 template <
typename other_memory_space>
473 if ((
void*)
this != (
void*)&other) {
484 template<typename ms=memory_space, enable_if_t<std::is_same<host_memory_space, ms>::value,
int> = 0>
493 template<typename ms=memory_space, enable_if_t<std::is_same<host_memory_space, ms>::value,
int> = 0>
495 std::vector<TargetOperation> temporary_lro_vector(1, lro);
500 template<typename ms=memory_space, enable_if_t<std::is_same<host_memory_space, ms>::value,
int> = 0>
503 std::vector<TargetOperation> unique_new_lro;
505 auto host_lro_lookup = create_mirror_view(
_lro_lookup);
509 Kokkos::deep_copy(host_lro_lookup, -1);
515 for (
size_t i=0; i<lro.size(); ++i) {
517 bool operation_found =
false;
519 for (
size_t j=0; j<
_lro.size(); ++j) {
522 if (
_lro(j)==lro[i]) {
524 operation_found =
true;
527 host_lro_lookup[(int)lro[i]] = j;
534 if (!operation_found) {
535 host_lro_lookup[(int)lro[i]] =
_lro.size() + unique_new_lro.size();
536 unique_new_lro.push_back(lro[i]);
542 for (
size_t i=0; i<
_lro.size(); ++i) {
543 new_lro(i) =
_lro(i);
545 for (
size_t i=0; i<unique_new_lro.size(); ++i) {
546 new_lro(i+
_lro.size()) = unique_new_lro[i];
562 int total_offset = 0;
564 for (
size_t i=0; i<
_lro.size(); ++i) {
565 host_lro_total_offsets(i) = total_offset;
573 host_lro_output_tile_size(i) = output_tile_size;
574 host_lro_input_tile_size(i) = input_tile_size;
576 total_offset += input_tile_size * output_tile_size;
604 "getAlpha called on SolutionSet with _contains_valid_alphas=false");
KOKKOS_INLINE_FUNCTION double getAlpha2TensorTo2Tensor(TargetOperation lro, const int target_index, const int output_component_axis_1, const int output_component_axis_2, const int neighbor_index, const int input_component_axis_1, const int input_component_axis_2, const int evaluation_site_local_index=0) const
Helper function for getting alphas for matrix reconstruction from matrix data.
double getAlpha1TensorTo2Tensor(TargetOperation lro, const int target_index, const int output_component_axis_1, const int output_component_axis_2, const int neighbor_index, const int input_component, const int evaluation_site_local_index=0) const
Helper function for getting alphas for matrix reconstruction from vector data.
Kokkos::View< int *, memory_space > _lro_output_tile_size
dimensions ^ rank of tensor of output for each target functional
KOKKOS_INLINE_FUNCTION int getOutputDimensionOfSampling(SamplingFunctional sro, const int local_dimensions)
Dimensions ^ output rank for sampling operation (always in local chart if on a manifold, never ambient space)
int getNumberOfNeighborsHost(int target_index) const
Get number of neighbors for a given target (host)
std::size_t global_index_type
double getAlpha2TensorTo1Tensor(TargetOperation lro, const int target_index, const int output_component, const int neighbor_index, const int input_component_axis_1, const int input_component_axis_2, const int evaluation_site_local_index=0) const
Helper function for getting alphas for vector reconstruction from matrix data.
KOKKOS_INLINE_FUNCTION int getTargetOperationLocalIndex(TargetOperation lro) const
Get the local index (internal) to GMLS for a particular TargetOperation Every TargetOperation has a g...
int getTargetOperationLocalIndex(TargetOperation lro) const
Get the local index (internal) to GMLS for a particular TargetOperation Every TargetOperation has a g...
double getAlpha2TensorTo2Tensor(TargetOperation lro, const int target_index, const int output_component_axis_1, const int output_component_axis_2, const int neighbor_index, const int input_component_axis_1, const int input_component_axis_2, const int evaluation_site_local_index=0) const
Helper function for getting alphas for matrix reconstruction from matrix data.
int output_rank
Rank of sampling functional output for each SamplingFunctional.
KOKKOS_INLINE_FUNCTION int getNumberOfNeighborsDevice(int target_index) const
Get number of neighbors for a given target (device)
global_index_type getRowOffsetHost(int target_index) const
Get offset into compressed row neighbor lists (host)
double getAlpha0TensorTo0Tensor(TargetOperation lro, const int target_index, const int neighbor_index, const int evaluation_site_local_index=0) const
Helper function for getting alphas for scalar reconstruction from scalar data.
KOKKOS_INLINE_FUNCTION double getAlpha0TensorTo0Tensor(TargetOperation lro, const int target_index, const int neighbor_index, const int evaluation_site_local_index=0) const
Helper function for getting alphas for scalar reconstruction from scalar data.
All vairables and functionality related to the layout and storage of GMLS solutions (alpha values) ...
void addTargets(TargetOperation lro)
Adds a target to the vector of target functional to be applied to the reconstruction.
Kokkos::View< TargetOperation *, memory_space > _lro
vector of user requested target operations
KOKKOS_INLINE_FUNCTION global_index_type getAlphaIndex(const int target_index, const int alpha_column_offset) const
Gives index into alphas given two axes, which when incremented by the neighbor number transforms acce...
SamplingFunctional _data_sampling_functional
generally the same as _polynomial_sampling_functional, but can differ if specified at GMLS class inst...
double getAlpha(TargetOperation lro, const int target_index, const int output_component_axis_1, const int output_component_axis_2, const int neighbor_index, const int input_component_axis_1, const int input_component_axis_2, const int evaluation_site_local_index=0) const
Underlying function all interface helper functions call to retrieve alpha values. ...
void clearTargets()
Empties the vector of target functionals to apply to the reconstruction.
KOKKOS_INLINE_FUNCTION double getAlpha(TargetOperation lro, const int target_index, const int output_component_axis_1, const int output_component_axis_2, const int neighbor_index, const int input_component_axis_1, const int input_component_axis_2, const int evaluation_site_local_index=0) const
Underlying function all interface helper functions call to retrieve alpha values. ...
bool _contains_valid_alphas
whether internal alpha values are valid (set externally on a solve)
KOKKOS_INLINE_FUNCTION double getAlpha2TensorTo1Tensor(TargetOperation lro, const int target_index, const int output_component, const int neighbor_index, const int input_component_axis_1, const int input_component_axis_2, const int evaluation_site_local_index=0) const
Helper function for getting alphas for vector reconstruction from matrix data.
Kokkos::View< int *, memory_space > _lro_input_tensor_rank
tensor rank of sampling functional (device)
Should be the total count of all available target functionals.
Kokkos::View< double *, layout_right, memory_space > _alphas
generated alpha coefficients (device)
KOKKOS_INLINE_FUNCTION int getTargetOutputIndex(const int operation_num, const int output_component_axis_1, const int output_component_axis_2, const int dimensions)
Helper function for finding alpha coefficients.
TargetOperation
Available target functionals.
Solve GMLS problem on a manifold (will use QR or SVD to solve the resultant GMLS problem dependent on...
#define TO_GLOBAL(variable)
KOKKOS_INLINE_FUNCTION int pown(int n, unsigned p)
n^p (n^0 returns 1, regardless of n)
Kokkos::View< int *, memory_space > _lro_output_tensor_rank
tensor rank of target functional (device)
Kokkos::View< int *, memory_space > _lro_total_offsets
index for where this operation begins the for _alpha coefficients
KOKKOS_INLINE_FUNCTION int getSamplingOutputIndex(const SamplingFunctional sf, const int output_component_axis_1, const int output_component_axis_2)
Helper function for finding alpha coefficients.
void copyAlphas(SolutionSet< other_memory_space > &other)
Copies alphas between two instances of SolutionSet Copying of alphas is intentionally omitted in copy...
KOKKOS_INLINE_FUNCTION int getAlphaColumnOffset(TargetOperation lro, const int output_component_axis_1, const int output_component_axis_2, const int input_component_axis_1, const int input_component_axis_2, const int evaluation_site_local_index=0) const
Retrieves the offset for an operator based on input and output component, generic to row (but still m...
KOKKOS_INLINE_FUNCTION double getAlpha2TensorTo0Tensor(TargetOperation lro, const int target_index, const int neighbor_index, const int input_component_axis_1, const int input_component_axis_2, const int evaluation_site_local_index=0) const
Helper function for getting alphas for scalar reconstruction from matrix data.
int _added_alpha_size
additional alpha coefficients due to constraints
int getTargetOffsetIndex(const int lro_num, const int input_component, const int output_component, const int evaluation_site_local_index=0) const
Handles offset from operation input/output + extra evaluation sites.
int getAlphaColumnOffset(TargetOperation lro, const int output_component_axis_1, const int output_component_axis_2, const int input_component_axis_1, const int input_component_axis_2, const int evaluation_site_local_index=0) const
Retrieves the offset for an operator based on input and output component, generic to row (but still m...
KOKKOS_INLINE_FUNCTION double getAlpha1TensorTo0Tensor(TargetOperation lro, const int target_index, const int neighbor_index, const int input_component, const int evaluation_site_local_index=0) const
Helper function for getting alphas for scalar reconstruction from vector data.
void addTargets(std::vector< TargetOperation > lro)
Adds a vector of target functionals to the vector of target functionals already to be applied to the ...
ProblemType
Problem type, that optionally can handle manifolds.
KOKKOS_INLINE_FUNCTION double getAlpha0TensorTo2Tensor(TargetOperation lro, const int target_index, const int output_component_axis_1, const int output_component_axis_2, const int neighbor_index, const int evaluation_site_local_index=0) const
Helper function for getting alphas for matrix reconstruction from scalar data.
double getAlpha1TensorTo1Tensor(TargetOperation lro, const int target_index, const int output_component, const int neighbor_index, const int input_component, const int evaluation_site_local_index=0) const
Helper function for getting alphas for vector reconstruction from vector data.
global_index_type getAlphaIndex(const int target_index, const int alpha_column_offset) const
Gives index into alphas given two axes, which when incremented by the neighbor number transforms acce...
Kokkos::View< int *, memory_space > _lro_lookup
vector containing a mapping from a target functionals enum value to the its place in the list of targ...
SolutionSet(SamplingFunctional data_sampling_functional, int dimensions, int local_dimensions, const ProblemType problem_type)
Constructor for SolutionSet.
int _dimensions
dimension of the problem, set at class instantiation only
double getAlpha0TensorTo1Tensor(TargetOperation lro, const int target_index, const int output_component, const int neighbor_index, const int evaluation_site_local_index=0) const
Helper function for getting alphas for vector reconstruction from scalar data.
KOKKOS_INLINE_FUNCTION int getTargetOutputTensorRank(const int &index)
Rank of target functional output for each TargetOperation Rank of target functional input for each Ta...
SolutionSet(const SolutionSet< other_memory_space > &other)
Copy constructor (can be used to move data from device to host or vice-versa)
KOKKOS_INLINE_FUNCTION double getAlpha1TensorTo2Tensor(TargetOperation lro, const int target_index, const int output_component_axis_1, const int output_component_axis_2, const int neighbor_index, const int input_component, const int evaluation_site_local_index=0) const
Helper function for getting alphas for matrix reconstruction from vector data.
int _local_dimensions
dimension of the problem, set at class instantiation only. For manifolds, generally _global_dimension...
double getAlpha0TensorTo2Tensor(TargetOperation lro, const int target_index, const int output_component_axis_1, const int output_component_axis_2, const int neighbor_index, const int evaluation_site_local_index=0) const
Helper function for getting alphas for matrix reconstruction from scalar data.
constexpr SamplingFunctional PointSample
Available sampling functionals.
decltype(_alphas) getAlphas() const
Get a view (device) of all alphas.
struct SubviewND< T, T2, enable_if_t<(T::rank< 2)> >{T _data_in;T2 _data_original_view;bool _scalar_as_vector_if_needed;SubviewND(T data_in, T2 data_original_view, bool scalar_as_vector_if_needed){_data_in=data_in;_data_original_view=data_original_view;_scalar_as_vector_if_needed=scalar_as_vector_if_needed;}auto get1DView(const int column_num) -> decltype(Kokkos::subview(_data_in, Kokkos::ALL))
Creates 1D subviews of data from a 1D view, generally constructed with CreateNDSliceOnDeviceView.
KOKKOS_INLINE_FUNCTION int getTargetOffsetIndex(const int lro_num, const int input_component, const int output_component, const int evaluation_site_local_index=0) const
Handles offset from operation input/output + extra evaluation sites.
#define compadre_assert_debug(condition)
compadre_assert_debug is used for assertions that are checked in loops, as these significantly impact...
KOKKOS_INLINE_FUNCTION double getAlpha1TensorTo1Tensor(TargetOperation lro, const int target_index, const int output_component, const int neighbor_index, const int input_component, const int evaluation_site_local_index=0) const
Helper function for getting alphas for vector reconstruction from vector data.
Kokkos::View< int *, memory_space > _lro_input_tile_size
dimensions ^ rank of tensor of output for each sampling functional
KOKKOS_INLINE_FUNCTION double getAlpha0TensorTo1Tensor(TargetOperation lro, const int target_index, const int output_component, const int neighbor_index, const int evaluation_site_local_index=0) const
Helper function for getting alphas for vector reconstruction from scalar data.
NeighborLists assists in accessing entries of compressed row neighborhood lists.
double getAlpha1TensorTo0Tensor(TargetOperation lro, const int target_index, const int neighbor_index, const int input_component, const int evaluation_site_local_index=0) const
Helper function for getting alphas for scalar reconstruction from vector data.
int _max_evaluation_sites_per_target
maximum number of evaluation sites for each target (includes target site)
KOKKOS_INLINE_FUNCTION global_index_type getRowOffsetDevice(int target_index) const
Get offset into compressed row neighbor lists (device)
KOKKOS_INLINE_FUNCTION int getOutputDimensionOfOperation(TargetOperation lro, const int local_dimensions)
Dimensions ^ output rank for target operation.
NeighborLists< Kokkos::View< int * > > _neighbor_lists
Accessor to get neighbor list data, offset data, and number of neighbors per target.
int _total_alpha_values
used for sizing P_target_row and the _alphas view
ProblemType _problem_type
problem type for GMLS problem, can also be set to STANDARD for normal or MANIFOLD for manifold proble...
#define compadre_kernel_assert_debug(condition)
double getAlpha2TensorTo0Tensor(TargetOperation lro, const int target_index, const int neighbor_index, const int input_component_axis_1, const int input_component_axis_2, const int evaluation_site_local_index=0) const
Helper function for getting alphas for scalar reconstruction from matrix data.