1 #ifndef _COMPADRE_EVALUATOR_HPP_ 2 #define _COMPADRE_EVALUATOR_HPP_ 11 template<
typename T,
typename T2,
typename T3=
void>
18 SubviewND(T data_in, T2 data_original_view,
bool scalar_as_vector_if_needed) {
24 auto get1DView(
const int column_num) -> decltype(Kokkos::subview(
_data_in, Kokkos::ALL, column_num)) {
27 &&
"Subview asked for column > second dimension of input data.");
29 if ((
size_t)column_num<
_data_in.extent(1))
30 return Kokkos::subview(
_data_in, Kokkos::ALL, column_num);
32 return Kokkos::subview(
_data_in, Kokkos::ALL, 0);
35 auto get2DView(
const int column_num,
const int block_size) -> decltype(Kokkos::subview(
_data_in, Kokkos::ALL,
36 Kokkos::make_pair(column_num*block_size, (column_num+1)*block_size))) {
39 &&
"Subview asked for column > second dimension of input data.");
41 if ((
size_t)((column_num+1)*block_size-1)<
_data_in.extent(1)) {
42 return Kokkos::subview(
_data_in, Kokkos::ALL, Kokkos::make_pair(column_num*block_size, (column_num+1)*block_size));
45 return Kokkos::subview(
_data_in, Kokkos::ALL, Kokkos::make_pair(0,block_size));
58 template<
typename T,
typename T2>
66 SubviewND(T data_in, T2 data_original_view,
bool scalar_as_vector_if_needed) {
77 compadre_assert_debug((column_num==0) &&
"Subview asked for column column_num!=0, but _data_in is rank 1.");
79 return Kokkos::subview(
_data_in, Kokkos::ALL);
82 auto get2DView(
const int column_num,
const int block_size) -> decltype(Kokkos::subview(
_data_in, Kokkos::ALL)) {
84 return Kokkos::subview(
_data_in, Kokkos::ALL);
102 auto sampling_input_data_device = Kokkos::create_mirror_view(
104 Kokkos::deep_copy(sampling_input_data_device, sampling_input_data_host_or_device);
108 sampling_input_data_host_or_device, scalar_as_vector_if_needed);
147 template <
typename view_type_data>
148 double applyAlphasToDataSingleComponentSingleTargetSite(view_type_data sampling_input_data,
const int column_of_input,
TargetOperation lro,
const int target_index,
const int evaluation_site_local_index,
const int output_component_axis_1,
const int output_component_axis_2,
const int input_component_axis_1,
const int input_component_axis_2,
bool scalar_as_vector_if_needed =
true)
const {
153 output_component_axis_2, input_component_axis_1, input_component_axis_2, evaluation_site_local_index);
161 auto sampling_data_device = sampling_subview_maker.get1DView(column_of_input);
166 Kokkos::parallel_reduce(
"applyAlphasToData::Device",
167 Kokkos::RangePolicy<device_execution_space>(0,nla.getNumberOfNeighborsHost(target_index)),
168 KOKKOS_LAMBDA(
const int i,
double& t_value) {
170 t_value += sampling_data_device(nla.getNeighborDevice(target_index, i))
171 *alphas(alpha_index + i);
204 template <
typename view_type_data_out,
typename view_type_data_in>
205 void applyAlphasToDataSingleComponentAllTargetSitesWithPreAndPostTransform(view_type_data_out output_data_single_column, view_type_data_in sampling_data_single_column,
TargetOperation lro,
const SamplingFunctional sro,
const int evaluation_site_local_index,
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 pre_transform_local_index = -1,
const int pre_transform_global_index = -1,
const int post_transform_local_index = -1,
const int post_transform_global_index = -1,
bool vary_on_target =
false,
bool vary_on_neighbor =
false)
const {
208 output_component_axis_2, input_component_axis_1, input_component_axis_2, evaluation_site_local_index);
209 const int alpha_input_output_component_index2 = alpha_input_output_component_index;
212 auto gmls = *(
_gmls);
217 const int num_targets = nla.getNumberOfTargets();
220 compadre_assert_debug((std::is_same<typename view_type_data_out::memory_space, typename view_type_data_in::memory_space>::value) &&
221 "output_data_single_column view and input_data_single_column view have difference memory spaces.");
223 bool weight_with_pre_T = (pre_transform_local_index>=0 && pre_transform_global_index>=0) ?
true :
false;
227 Kokkos::parallel_for(
team_policy(num_targets, Kokkos::AUTO),
230 const int target_index = teamMember.league_rank();
231 teamMember.team_barrier();
234 const double previous_value = output_data_single_column(target_index);
237 auto alpha_index = gmls.getAlphaIndexDevice(target_index, alpha_input_output_component_index);
238 double gmls_value = 0;
239 Kokkos::parallel_reduce(Kokkos::TeamThreadRange(teamMember, nla.getNumberOfNeighborsDevice(target_index)), [=](
const int i,
double& t_value) {
240 const double neighbor_varying_pre_T = (weight_with_pre_T && vary_on_neighbor) ?
241 prestencil_weights(0, target_index, i, pre_transform_local_index, pre_transform_global_index)
244 t_value += neighbor_varying_pre_T * sampling_data_single_column(nla.getNeighborDevice(target_index, i))
245 *alphas(alpha_index + i);
251 if (weight_with_pre_T) {
252 if (!vary_on_neighbor && vary_on_target) {
253 pre_T = prestencil_weights(0, target_index, 0, pre_transform_local_index,
254 pre_transform_global_index);
255 }
else if (!vary_on_target) {
256 pre_T = prestencil_weights(0, 0, 0, pre_transform_local_index,
257 pre_transform_global_index);
261 double staggered_value_from_targets = 0;
262 double pre_T_staggered = 1.0;
263 auto alpha_index2 = gmls.getAlphaIndexDevice(target_index, alpha_input_output_component_index2);
265 if (target_plus_neighbor_staggered_schema) {
266 Kokkos::parallel_reduce(Kokkos::TeamThreadRange(teamMember, nla.getNumberOfNeighborsDevice(target_index)), [=](
const int i,
double& t_value) {
267 const double neighbor_varying_pre_T_staggered = (weight_with_pre_T && vary_on_neighbor) ?
268 prestencil_weights(1, target_index, i, pre_transform_local_index, pre_transform_global_index)
271 t_value += neighbor_varying_pre_T_staggered * sampling_data_single_column(nla.getNeighborDevice(target_index, 0))
272 *alphas(alpha_index2 + i);
274 }, staggered_value_from_targets );
277 if (weight_with_pre_T) {
278 if (!vary_on_neighbor && vary_on_target) {
279 pre_T_staggered = prestencil_weights(1, target_index, 0, pre_transform_local_index,
280 pre_transform_global_index);
281 }
else if (!vary_on_target) {
282 pre_T_staggered = prestencil_weights(1, 0, 0, pre_transform_local_index,
283 pre_transform_global_index);
288 double added_value = pre_T*gmls_value + pre_T_staggered*staggered_value_from_targets;
289 Kokkos::single(Kokkos::PerTeam(teamMember), [=] () {
290 output_data_single_column(target_index) = previous_value + added_value;
307 template <
typename view_type_data_out,
typename view_type_data_in>
315 const int num_targets = nla.getNumberOfTargets();
320 compadre_assert_debug((std::is_same<typename view_type_data_out::memory_space, typename view_type_data_in::memory_space>::value) &&
321 "output_data_single_column view and input_data_single_column view have difference memory spaces.");
324 Kokkos::parallel_for(
team_policy(num_targets, Kokkos::AUTO),
327 const int target_index = teamMember.league_rank();
331 global_dimensions, global_dimensions);
332 teamMember.team_barrier();
335 const double previous_value = output_data_single_column(target_index);
337 double added_value = T(local_dim_index, global_dim_index)*sampling_data_single_column(target_index);
338 Kokkos::single(Kokkos::PerTeam(teamMember), [=] () {
339 output_data_single_column(target_index) = previous_value + added_value;
359 template <
typename output_data_type =
double**,
typename output_memory_space,
typename view_type_input_data,
typename output_array_layout =
typename view_type_input_data::array_layout>
360 Kokkos::View<output_data_type, output_array_layout, output_memory_space>
370 typedef Kokkos::View<output_data_type, output_array_layout, output_memory_space> output_view_type;
372 output_view_type target_output = createView<output_view_type>(
"output of target operation",
373 nla.getNumberOfTargets(), output_dimensions);
375 output_view_type ambient_target_output;
377 if (transform_gmls_output_to_ambient) {
378 ambient_target_output = createView<output_view_type>(
"output of transform to ambient space",
379 nla.getNumberOfTargets(), global_dimensions);
384 if (transform_gmls_output_to_ambient) {
385 return ambient_target_output;
387 return target_output;
406 template <
typename view_type_output_data,
typename view_type_input_data,
typename output_array_layout =
typename view_type_input_data::array_layout>
431 &&
"First dimension of target_output is incorrect size.\n");
433 &&
"Second dimension of target_output is incorrect size.\n");
436 compadre_assert_debug(((output_dimensions==1 && view_type_output_data::rank==1) || view_type_output_data::rank!=1) &&
437 "Output view is requested as rank 1, but the target requires a rank larger than 1. Try double** as template argument.");
448 bool vary_on_target =
false, vary_on_neighbor =
false;
449 auto sro_style = sro.transform_type;
450 bool loop_global_dimensions = sro.input_rank>0 && sro_style!=
Identity;
453 &&
"SamplingFunctional requested for Evaluator does not match GMLS data sampling functional or is not of type 'Identity'.");
456 vary_on_target =
false;
457 vary_on_neighbor =
false;
459 vary_on_target =
true;
460 vary_on_neighbor =
false;
462 vary_on_target =
true;
463 vary_on_neighbor =
true;
469 for (
int axes1=0; axes1<output_dimension1_of_operator; ++axes1) {
470 const int output_component_axis_1 = axes1;
471 for (
int axes2=0; axes2<output_dimension2_of_operator; ++axes2) {
472 const int output_component_axis_2 = axes2;
474 for (
int j=0; j<input_dimension_of_operator; ++j) {
475 const int input_component_axis_1 = j;
476 const int input_component_axis_2 = 0;
478 if (loop_global_dimensions) {
479 for (
int k=0; k<global_dimensions; ++k) {
481 output_subview_maker.get1DView(axes1*output_dimension2_of_operator+axes2),
482 sampling_subview_maker.get1DView(k), lro, sro,
483 evaluation_site_local_index, output_component_axis_1, output_component_axis_2, input_component_axis_1,
484 input_component_axis_2, j, k, -1, -1,
485 vary_on_target, vary_on_neighbor);
489 output_subview_maker.get1DView(axes1*output_dimension2_of_operator+axes2),
490 sampling_subview_maker.get1DView(j), lro, sro,
491 evaluation_site_local_index, output_component_axis_1, output_component_axis_2, input_component_axis_1,
492 input_component_axis_2, 0, 0, -1, -1,
493 vary_on_target, vary_on_neighbor);
496 output_subview_maker.get1DView(axes1*output_dimension2_of_operator+axes2),
497 sampling_subview_maker.get1DView(j), lro, sro,
498 evaluation_site_local_index, output_component_axis_1, output_component_axis_2, input_component_axis_1,
499 input_component_axis_2);
506 if (transform_gmls_output_to_ambient) {
510 &&
"First dimension of target_output is incorrect size.\n");
512 &&
"Second dimension of target_output is incorrect size.\n");
515 for (
int i=0; i<global_dimensions; ++i) {
516 for (
int j=0; j<output_dimensions; ++j) {
518 transformed_output_subview_maker.get1DView(i), output_subview_maker.get1DView(j), j, i);
522 Kokkos::deep_copy(ambient_target_output, transformed_output_subview_maker.copyToAndReturnOriginalView());
526 Kokkos::deep_copy(target_output, output_subview_maker.copyToAndReturnOriginalView());
553 template <
typename view_type_data_out,
typename view_type_data_in>
554 void applyFullPolynomialCoefficientsBasisToDataSingleComponent(view_type_data_out output_data_block_column, view_type_data_in sampling_data_single_column,
const SamplingFunctional sro,
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 pre_transform_local_index = -1,
const int pre_transform_global_index = -1,
const int post_transform_local_index = -1,
const int post_transform_global_index = -1,
bool vary_on_target =
false,
bool vary_on_neighbor =
false)
const {
560 auto coefficient_memory_layout_dims_device =
561 Kokkos::create_mirror_view_and_copy(
device_memory_space(), coefficient_memory_layout_dims);
570 const int num_targets = nla.getNumberOfTargets();
573 compadre_assert_debug((std::is_same<typename view_type_data_out::memory_space, typename view_type_data_in::memory_space>::value) &&
574 "output_data_block_column view and input_data_single_column view have difference memory spaces.");
576 bool weight_with_pre_T = (pre_transform_local_index>=0 && pre_transform_global_index>=0) ?
true :
false;
580 for (
int j=0; j<coefficient_matrix_dims(0); ++j) {
581 Kokkos::parallel_for(
team_policy(num_targets, Kokkos::AUTO),
584 const int target_index = teamMember.league_rank();
588 global_dimensions, global_dimensions);
593 *
TO_GLOBAL(coefficient_memory_layout_dims_device(1)),
594 coefficient_memory_layout_dims_device(0), coefficient_memory_layout_dims_device(1));
596 teamMember.team_barrier();
599 const double previous_value = output_data_block_column(target_index, j);
602 double gmls_value = 0;
603 Kokkos::parallel_reduce(Kokkos::TeamThreadRange(teamMember, nla.getNumberOfNeighborsDevice(target_index)), [=](
const int i,
double& t_value) {
604 const double neighbor_varying_pre_T = (weight_with_pre_T && vary_on_neighbor) ?
605 prestencil_weights(0, target_index, i, pre_transform_local_index, pre_transform_global_index)
608 t_value += neighbor_varying_pre_T * sampling_data_single_column(nla.getNeighborDevice(target_index, i))
609 *Coeffs(j, i+input_component_axis_1*nla.getNumberOfNeighborsDevice(target_index));
615 if (weight_with_pre_T) {
616 if (!vary_on_neighbor && vary_on_target) {
617 pre_T = prestencil_weights(0, target_index, 0, pre_transform_local_index,
618 pre_transform_global_index);
619 }
else if (!vary_on_target) {
620 pre_T = prestencil_weights(0, 0, 0, pre_transform_local_index,
621 pre_transform_global_index);
625 double staggered_value_from_targets = 0;
626 double pre_T_staggered = 1.0;
628 if (target_plus_neighbor_staggered_schema) {
629 Kokkos::parallel_reduce(Kokkos::TeamThreadRange(teamMember, nla.getNumberOfNeighborsDevice(target_index)), [=](
const int i,
double& t_value) {
630 const double neighbor_varying_pre_T_staggered = (weight_with_pre_T && vary_on_neighbor) ?
631 prestencil_weights(1, target_index, i, pre_transform_local_index, pre_transform_global_index)
634 t_value += neighbor_varying_pre_T_staggered * sampling_data_single_column(nla.getNeighborDevice(target_index, 0))
635 *Coeffs(j, i+input_component_axis_1*nla.getNumberOfNeighborsDevice(target_index));
637 }, staggered_value_from_targets );
640 if (weight_with_pre_T) {
641 if (!vary_on_neighbor && vary_on_target) {
642 pre_T_staggered = prestencil_weights(1, target_index, 0, pre_transform_local_index,
643 pre_transform_global_index);
644 }
else if (!vary_on_target) {
645 pre_T_staggered = prestencil_weights(1, 0, 0, pre_transform_local_index,
646 pre_transform_global_index);
651 double added_value = (pre_T*gmls_value + pre_T_staggered*staggered_value_from_targets);
652 Kokkos::single(Kokkos::PerTeam(teamMember), [=] () {
653 output_data_block_column(target_index, j) = previous_value + added_value;
672 template <
typename output_data_type =
double**,
typename output_memory_space,
typename view_type_input_data,
typename output_array_layout =
typename view_type_input_data::array_layout>
673 Kokkos::View<output_data_type, output_array_layout, output_memory_space>
683 int output_dimensions = output_dimension_of_reconstruction_space;
685 typedef Kokkos::View<output_data_type, output_array_layout, output_memory_space> output_view_type;
687 output_view_type coefficient_output(
"output coefficients", nla.getNumberOfTargets(),
692 return coefficient_output;
709 template <
typename view_type_coefficient_output,
typename view_type_input_data>
711 view_type_input_data sampling_data,
bool scalar_as_vector_if_needed =
true)
const {
728 &&
"First dimension of coefficient_output is incorrect size.\n");
732 &&
"Second dimension of coefficient_output is incorrect size.\n");
735 compadre_assert_debug(((output_dimension_of_reconstruction_space==1 && view_type_coefficient_output::rank==1) || view_type_coefficient_output::rank!=1) &&
736 "Output view is requested as rank 1, but the target requires a rank larger than 1. Try double** as template argument.");
747 bool vary_on_target =
false, vary_on_neighbor =
false;
753 vary_on_target =
false;
754 vary_on_neighbor =
false;
756 vary_on_target =
true;
757 vary_on_neighbor =
false;
759 vary_on_target =
true;
760 vary_on_neighbor =
true;
765 for (
int i=0; i<output_dimension_of_reconstruction_space; ++i) {
766 const int output_component_axis_1 = i;
767 const int output_component_axis_2 = 0;
769 for (
int j=0; j<input_dimension_of_reconstruction_space; ++j) {
770 const int input_component_axis_1 = j;
771 const int input_component_axis_2 = 0;
773 if (loop_global_dimensions) {
774 for (
int k=0; k<global_dimensions; ++k) {
777 sampling_subview_maker.get1DView(k), sro,
778 output_component_axis_1, output_component_axis_2, input_component_axis_1,
779 input_component_axis_2, j, k, -1, -1,
780 vary_on_target, vary_on_neighbor);
785 sampling_subview_maker.get1DView(j), sro,
786 output_component_axis_1, output_component_axis_2, input_component_axis_1,
787 input_component_axis_2, 0, 0, -1, -1,
788 vary_on_target, vary_on_neighbor);
792 sampling_subview_maker.get1DView(j), sro,
793 output_component_axis_1, output_component_axis_2, input_component_axis_1,
794 input_component_axis_2);
800 Kokkos::deep_copy(coefficient_output, output_subview_maker.copyToAndReturnOriginalView());
T2 copyToAndReturnOriginalView()
decltype(_RHS) getFullPolynomialCoefficientsBasis() const
Get a view (device) of all polynomial coefficients basis.
ProblemType getProblemType()
Get problem type.
auto get2DView(const int column_num, const int block_size) -> decltype(Kokkos::subview(_data_in, Kokkos::ALL, Kokkos::make_pair(column_num *block_size,(column_num+1) *block_size)))
Lightweight Evaluator Helper This class is a lightweight wrapper for extracting and applying all rele...
constexpr SamplingFunctional ManifoldVectorPointSample
Point evaluations of the entire vector source function (but on a manifold, so it includes a transform...
team_policy::member_type member_type
void applyAlphasToDataAllComponentsAllTargetSites(view_type_output_data target_output, view_type_output_data ambient_target_output, view_type_input_data sampling_data, TargetOperation lro, const SamplingFunctional sro_in=PointSample, bool scalar_as_vector_if_needed=true, const int evaluation_site_local_index=0) const
Transformation of data under GMLS (does not allocate memory for output)
Each target applies a different data transform, but the same to each neighbor.
Each target applies a different transform for each neighbor.
bool _scalar_as_vector_if_needed
bool use_target_site_weights
Whether or not the SamplingTensor acts on the target site as well as the neighbors.
Solve GMLS problem on a manifold (will use QR or SVD to solve the resultant GMLS problem dependent on...
SamplingFunctional getPolynomialSamplingFunctional() const
Get the polynomial sampling functional specified at instantiation.
constexpr int TargetOutputTensorRank[]
Rank of target functional output for each TargetOperation Rank of target functional input for each Ta...
void applyFullPolynomialCoefficientsBasisToDataAllComponents(view_type_coefficient_output coefficient_output, view_type_input_data sampling_data, bool scalar_as_vector_if_needed=true) const
Generation of polynomial reconstruction coefficients by applying to data in GMLS (does not allocate m...
Kokkos::TeamPolicy< device_execution_space > team_policy
bool _scalar_as_vector_if_needed
int calculateBasisMultiplier(const ReconstructionSpace rs) const
Calculate basis_multiplier.
decltype(_alphas) getAlphas() const
Get a view (device) of all alphas.
auto get1DView(const int column_num) -> decltype(Kokkos::subview(_data_in, Kokkos::ALL))
#define TO_GLOBAL(variable)
device_execution_space::memory_space device_memory_space
int input_rank
Rank of sampling functional input for each SamplingFunctional.
SamplingFunctional getDataSamplingFunctional() const
Get the data sampling functional specified at instantiation (often the same as the polynomial samplin...
T2 copyToAndReturnOriginalView()
Kokkos::View< output_data_type, output_array_layout, output_memory_space > applyAlphasToDataAllComponentsAllTargetSites(view_type_input_data sampling_data, TargetOperation lro, const SamplingFunctional sro_in=PointSample, bool scalar_as_vector_if_needed=true, const int evaluation_site_local_index=0) const
Transformation of data under GMLS (allocates memory for output)
typename std::enable_if< B, T >::type enable_if_t
auto get1DView(const int column_num) -> decltype(Kokkos::subview(_data_in, Kokkos::ALL, column_num))
decltype(_T) getTangentDirections() const
Get a view (device) of all tangent direction bundles.
host_managed_local_index_type getPolynomialCoefficientsMemorySize() const
Returns 2D array size in memory on which coefficients are stored.
Kokkos::View< double **, layout_right, Kokkos::MemoryTraits< Kokkos::Unmanaged > > scratch_matrix_right_type
Each neighbor for each target all apply the same transform.
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 additional_evaluation_local_index=0) const
Retrieves the offset for an operator based on input and output component, generic to row (but still m...
SubviewND(T data_in, T2 data_original_view, bool scalar_as_vector_if_needed)
auto CreateNDSliceOnDeviceView(T sampling_input_data_host_or_device, bool scalar_as_vector_if_needed) -> SubviewND< decltype(Kokkos::create_mirror_view(device_memory_space(), sampling_input_data_host_or_device)), T >
Copies data_in to the device, and then allows for access to 1D columns of data on device...
global_index_type getAlphaIndexHost(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< output_data_type, output_array_layout, output_memory_space > applyFullPolynomialCoefficientsBasisToDataAllComponents(view_type_input_data sampling_data, bool scalar_as_vector_if_needed=true) const
Generation of polynomial reconstruction coefficients by applying to data in GMLS (allocates memory fo...
int getOutputDimensionOfOperation(TargetOperation lro, bool ambient=false) const
Dimensions ^ output rank for target operation.
auto get2DView(const int column_num, const int block_size) -> decltype(Kokkos::subview(_data_in, Kokkos::ALL))
SubviewND(T data_in, T2 data_original_view, bool scalar_as_vector_if_needed)
host_managed_local_index_type getPolynomialCoefficientsDomainRangeSize() const
Returns (size of the basis used in instance's polynomial reconstruction) x (data input dimension) ...
int getPolynomialCoefficientsSize() const
Returns size of the basis used in instance's polynomial reconstruction.
Generalized Moving Least Squares (GMLS)
No action performed on data before GMLS target operation.
int getInputDimensionOfOperation(TargetOperation lro) const
Dimensions ^ input rank for target operation (always in local chart if on a manifold, never ambient space)
double applyAlphasToDataSingleComponentSingleTargetSite(view_type_data sampling_input_data, const int column_of_input, TargetOperation lro, const int target_index, const int evaluation_site_local_index, const int output_component_axis_1, const int output_component_axis_2, const int input_component_axis_1, const int input_component_axis_2, bool scalar_as_vector_if_needed=true) const
Dot product of alphas with sampling data, FOR A SINGLE target_index, where sampling data is in a 1D/2...
ReconstructionSpace getReconstructionSpace() const
Get the reconstruction space specified at instantiation.
int transform_type
Describes the SamplingFunction relationship to targets, neighbors.
constexpr SamplingFunctional PointSample
Available sampling functionals.
decltype(_neighbor_lists) * getNeighborLists()
Get neighbor list accessor.
#define compadre_assert_debug(condition)
compadre_assert_debug is used for assertions that are checked in loops, as these significantly impact...
void applyFullPolynomialCoefficientsBasisToDataSingleComponent(view_type_data_out output_data_block_column, view_type_data_in sampling_data_single_column, const SamplingFunctional sro, 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 pre_transform_local_index=-1, const int pre_transform_global_index=-1, const int post_transform_local_index=-1, const int post_transform_global_index=-1, bool vary_on_target=false, bool vary_on_neighbor=false) const
Dot product of data with full polynomial coefficient basis where sampling data is in a 1D/2D Kokkos V...
int getGlobalDimensions() const
Dimension of the GMLS problem's point data (spatial description of points in ambient space)...
int calculateSamplingMultiplier(const ReconstructionSpace rs, const SamplingFunctional sro) const
Calculate sampling_multiplier.
#define compadre_assert_release(condition)
compadre_assert_release is used for assertions that should always be checked, but generally are not e...
Creates 1D subviews of data from a 2D view, generally constructed with CreateNDSliceOnDeviceView.
decltype(_prestencil_weights) getPrestencilWeights() const
Get a view (device) of all rank 2 preprocessing tensors This is a rank 5 tensor that is able to provi...
constexpr SamplingFunctional VectorPointSample
Point evaluations of the entire vector source function.
void applyAlphasToDataSingleComponentAllTargetSitesWithPreAndPostTransform(view_type_data_out output_data_single_column, view_type_data_in sampling_data_single_column, TargetOperation lro, const SamplingFunctional sro, const int evaluation_site_local_index, 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 pre_transform_local_index=-1, const int pre_transform_global_index=-1, const int post_transform_local_index=-1, const int post_transform_global_index=-1, bool vary_on_target=false, bool vary_on_neighbor=false) const
Dot product of alphas with sampling data where sampling data is in a 1D/2D Kokkos View and output vie...
TargetOperation
Available target functionals.
void applyLocalChartToAmbientSpaceTransform(view_type_data_out output_data_single_column, view_type_data_in sampling_data_single_column, const int local_dim_index, const int global_dim_index) const
Postprocessing for manifolds.