17 &&
"keep_coefficients is set to true, but number of batches exceeds 1.");
49 &&
"No target operations added to GMLS class before calling generatePolynomialCoefficients().");
66 &&
"Cannot solve GMLS problems with the NEUMANN_GRAD_SCALAR constraint using QR Factorization.");
82 }
catch(std::exception &e) {
83 printf(
"Insufficient memory to store alphas: \n\n%s", e.what());
93 std::pow(2,sro.use_target_site_weights),
98 max_num_neighbors : 1,
103 }
catch(std::exception &e) {
104 printf(
"Insufficient memory to store prestencil weights: \n\n%s", e.what());
135 int team_scratch_size_a = 0;
138 int team_scratch_size_b = 0;
139 int thread_scratch_size_a = 0;
140 int thread_scratch_size_b = 0;
158 const int max_manifold_NP = (manifold_NP >
_NP) ? manifold_NP :
_NP;
167 team_scratch_size_b += scratch_vector_type::shmem_size( (
_dimensions-1)*max_num_neighbors );
169 thread_scratch_size_a += scratch_vector_type::shmem_size(this_num_cols);
170 thread_scratch_size_a += scratch_vector_type::shmem_size(
173 team_scratch_size_b += scratch_vector_type::shmem_size(max_num_neighbors);
174 team_scratch_size_b += scratch_vector_type::shmem_size(max_num_neighbors);
181 Kokkos::deep_copy(
_T, 0.0);
184 "Provided tangent_directions has number of targets different than target_coordinates");
196 thread_scratch_size_a += scratch_vector_type::shmem_size(this_num_cols);
197 thread_scratch_size_a += scratch_vector_type::shmem_size(
210 int RHS_dim_0, RHS_dim_1;
213 int P_dim_0, P_dim_1;
224 _w = Kokkos::View<double*>(
"w", max_batch_size*
TO_GLOBAL(max_num_rows));
227 }
catch (std::exception &e) {
228 printf(
"Failed to allocate space for RHS, P, and w. Consider increasing number_of_batches: \n\n%s", e.what());
239 &&
"Normal vectors are required for solving GMLS problems with the NEUMANN_GRAD_SCALAR constraint.");
243 for (
int batch_num=0; batch_num<number_of_batches; ++batch_num) {
246 Kokkos::deep_copy(
_RHS, 0.0);
247 Kokkos::deep_copy(
_P, 0.0);
248 Kokkos::deep_copy(
_w, 0.0);
249 Kokkos::deep_copy(
_Z, 0.0);
272 Kokkos::parallel_for(
"ComputeCoarseTangentPlane", tp, functor_compute_coarse_tangent_plane);
280 Kokkos::parallel_for(
"FixTangentDirectionOrdering", tp, functor_fix_tangent_direction_ordering);
285 Kokkos::parallel_for(
"AssembleCurvaturePsqrtW", tp, functor_assemble_curvature_psqrtw);
289 Kokkos::Profiling::pushRegion(
"Curvature LU Factorization");
293 GMLS_LinearAlgebra::batchQRPivotingSolve<layout_right,layout_left,layout_right>(
_pm,
_RHS.data(), RHS_dim_0, RHS_dim_1,
_P.data(), P_dim_1, P_dim_0, manifold_NP, manifold_NP, max_num_neighbors, this_batch_size, implicit_RHS);
294 Kokkos::Profiling::popRegion();
297 Kokkos::Profiling::pushRegion(
"Curvature QR+Pivoting Factorization");
298 GMLS_LinearAlgebra::batchQRPivotingSolve<layout_right,layout_right,layout_right>(
_pm,
_P.data(), P_dim_0, P_dim_1,
_RHS.data(), RHS_dim_0, RHS_dim_1, max_num_neighbors, manifold_NP, max_num_neighbors, this_batch_size, implicit_RHS);
299 Kokkos::Profiling::popRegion();
304 Kokkos::parallel_for(
"GetAccurateTangentDirections", tp, functor_get_accurate_tangent_directions);
307 Kokkos::deep_copy(
_P, 0.0);
309 if (batch_num==number_of_batches-1) {
311 _host_T = Kokkos::create_mirror_view(
_T);
319 Kokkos::parallel_for(
"AssembleCurvaturePsqrtW", tp, functor_assemble_curvature_psqrtw);
323 Kokkos::Profiling::pushRegion(
"Curvature LU Factorization");
324 GMLS_LinearAlgebra::batchQRPivotingSolve<layout_right,layout_left,layout_right>(
_pm,
_RHS.data(), RHS_dim_0, RHS_dim_1,
_P.data(), P_dim_1, P_dim_0, manifold_NP, manifold_NP, max_num_neighbors, this_batch_size, implicit_RHS);
325 Kokkos::Profiling::popRegion();
328 Kokkos::Profiling::pushRegion(
"Curvature QR+Pivoting Factorization");
329 GMLS_LinearAlgebra::batchQRPivotingSolve<layout_right,layout_right,layout_right>(
_pm,
_P.data(), P_dim_0, P_dim_1,
_RHS.data(), RHS_dim_0, RHS_dim_1, max_num_neighbors, manifold_NP, max_num_neighbors, this_batch_size, implicit_RHS);
330 Kokkos::Profiling::popRegion();
335 Kokkos::parallel_for(
"ApplyCurvatureTargets", tp, functor_apply_curvature_targets);
343 Kokkos::parallel_for(
"ComputePrestencilWeights", tp, functor_compute_prestencil_weights);
346 Kokkos::deep_copy(
_P, 0.0);
350 Kokkos::parallel_for(
"AssembleManifoldPsqrtW", tp, functor_assemble_manifold_psqrtw);
354 Kokkos::Profiling::pushRegion(
"Manifold LU Factorization");
355 GMLS_LinearAlgebra::batchQRPivotingSolve<layout_right,layout_left,layout_right>(
_pm,
_RHS.data(), RHS_dim_0, RHS_dim_1,
_P.data(), P_dim_1, P_dim_0, this_num_cols, this_num_cols, max_num_rows, this_batch_size, implicit_RHS);
356 Kokkos::Profiling::popRegion();
358 Kokkos::Profiling::pushRegion(
"Manifold QR+Pivoting Factorization");
359 GMLS_LinearAlgebra::batchQRPivotingSolve<layout_right,layout_right,layout_right>(
_pm,
_P.data(), P_dim_0, P_dim_1,
_RHS.data(), RHS_dim_0, RHS_dim_1, max_num_rows, this_num_cols, max_num_rows, this_batch_size, implicit_RHS);
360 Kokkos::Profiling::popRegion();
373 Kokkos::parallel_for(
"AssembleStandardPsqrtW", tp, functor_assemble_standard_psqrtw);
378 Kokkos::Profiling::pushRegion(
"LU Factorization");
379 GMLS_LinearAlgebra::batchQRPivotingSolve<layout_right,layout_left,layout_right>(
_pm,
_RHS.data(), RHS_dim_0, RHS_dim_1,
_P.data(), P_dim_1, P_dim_0, this_num_cols + added_coeff_size, this_num_cols + added_coeff_size, max_num_rows +
_d_ss.
_added_alpha_size, this_batch_size, implicit_RHS);
380 Kokkos::Profiling::popRegion();
382 Kokkos::Profiling::pushRegion(
"QR+Pivoting Factorization");
384 GMLS_LinearAlgebra::batchQRPivotingSolve<layout_right,layout_right,layout_right>(
_pm,
_RHS.data(), RHS_dim_0, RHS_dim_1,
_P.data(), P_dim_1, P_dim_0, this_num_cols + added_coeff_size, this_num_cols + added_coeff_size, max_num_rows +
_d_ss.
_added_alpha_size, this_batch_size, implicit_RHS);
386 GMLS_LinearAlgebra::batchQRPivotingSolve<layout_right,layout_right,layout_right>(
_pm,
_P.data(), P_dim_0, P_dim_1,
_RHS.data(), RHS_dim_0, RHS_dim_1, max_num_rows, this_num_cols, max_num_rows, this_batch_size, implicit_RHS);
388 Kokkos::Profiling::popRegion();
392 Kokkos::parallel_for(
"ComputePrestencilWeights", tp, functor_compute_prestencil_weights);
409 Kokkos::parallel_for(
"EvaluateManifoldTargets", tp, functor_evaluate_manifold_targets);
419 Kokkos::parallel_for(
"EvaluateStandardTargets", tp, functor_evaluate_standard_targets);
426 const auto work_item_property = Kokkos::Experimental::WorkItemProperty::HintLightWeight;
427 const auto tp2 = Kokkos::Experimental::require(tp, work_item_property);
428 auto functor_apply_targets =
ApplyTargets(gmls_solution_data);
430 Kokkos::parallel_for(
"ApplyTargets", tp2, functor_apply_targets);
439 _w = Kokkos::View<double*>(
"w",0);
440 _Z = Kokkos::View<double*>(
"Z",0);
441 if (number_of_batches > 1) {
442 _RHS = Kokkos::View<double*>(
"RHS",0);
443 _P = Kokkos::View<double*>(
"P",0);
447 _RHS = Kokkos::View<double*>(
"RHS", 0);
448 if (!keep_coefficients)
_P = Kokkos::View<double*>(
"P", 0);
451 _P = Kokkos::View<double*>(
"P", 0);
452 if (!keep_coefficients)
_RHS = Kokkos::View<double*>(
"RHS", 0);
454 _RHS = Kokkos::View<double*>(
"RHS", 0);
455 if (!keep_coefficients)
_P = Kokkos::View<double*>(
"P", 0);
484 data._sampling_multiplier = gmls._sampling_multiplier;
485 data._initial_index_for_batch = gmls._initial_index_for_batch;
486 data._d_ss = gmls._d_ss;
489 const int max_num_neighbors = gmls._pc._nla.getMaxNumNeighbors();
490 const int max_num_rows = gmls._sampling_multiplier*max_num_neighbors;
498 data.this_num_cols = gmls._basis_multiplier*gmls._NP;
500 int RHS_dim_0, RHS_dim_1;
501 getRHSDims(gmls._dense_solver_type, gmls._constraint_type, gmls._reconstruction_space,
502 gmls._dimensions, max_num_rows, data.this_num_cols, RHS_dim_0, RHS_dim_1);
503 int P_dim_0, P_dim_1;
504 getPDims(gmls._dense_solver_type, gmls._constraint_type, gmls._reconstruction_space,
505 gmls._dimensions, max_num_rows, data.this_num_cols, P_dim_0, P_dim_1);
508 data.Coeffs_data = gmls._RHS.data();
509 data.Coeffs_dim_0 = RHS_dim_0;
510 data.Coeffs_dim_1 = RHS_dim_1;
512 data.Coeffs_data = gmls._P.data();
513 data.Coeffs_dim_0 = P_dim_1;
514 data.Coeffs_dim_1 = P_dim_0;
517 data.P_target_row_dim_0 = gmls._d_ss._total_alpha_values*gmls._d_ss._max_evaluation_sites_per_target;
518 data.P_target_row_dim_1 = data.this_num_cols;
519 data.P_target_row_data = gmls._Z.data();
521 data.operations_size = gmls._operations.size();
523 data.number_of_neighbors_list = gmls._pc._nla._number_of_neighbors_list;
524 data.additional_number_of_neighbors_list = gmls._additional_pc._nla._number_of_neighbors_list;
532 data._source_extra_data = gmls._source_extra_data;
533 data._target_extra_data = gmls._target_extra_data;
535 data._epsilons = gmls._epsilons ;
536 data._prestencil_weights = gmls._prestencil_weights ;
537 data._additional_pc = gmls._additional_pc;
538 data._poly_order = gmls._poly_order ;
539 data._curvature_poly_order = gmls._curvature_poly_order;
541 data._global_dimensions = gmls._global_dimensions;
542 data._local_dimensions = gmls._local_dimensions;
543 data._dimensions = gmls._dimensions;
544 data._reconstruction_space = gmls._reconstruction_space;
545 data._reconstruction_space_rank = gmls._reconstruction_space_rank;
546 data._dense_solver_type = gmls._dense_solver_type;
547 data._problem_type = gmls._problem_type;
548 data._constraint_type = gmls._constraint_type;
549 data._polynomial_sampling_functional = gmls._polynomial_sampling_functional;
550 data._data_sampling_functional = gmls._data_sampling_functional;
551 data._curvature_support_operations = gmls._curvature_support_operations;
552 data._operations = gmls._operations;
553 data._weighting_type = gmls._weighting_type;
554 data._curvature_weighting_type = gmls._curvature_weighting_type;
555 data._weighting_p = gmls._weighting_p;
556 data._weighting_n = gmls._weighting_n;
557 data._curvature_weighting_p = gmls._curvature_weighting_p;
558 data._curvature_weighting_n = gmls._curvature_weighting_n;
559 data._basis_multiplier = gmls._basis_multiplier;
560 data._sampling_multiplier = gmls._sampling_multiplier;
561 data._data_sampling_multiplier = gmls._data_sampling_multiplier;
562 data._initial_index_for_batch = gmls._initial_index_for_batch;
564 data._order_of_quadrature_points = gmls._order_of_quadrature_points;
565 data._dimension_of_quadrature_points = gmls._dimension_of_quadrature_points;
567 data._d_ss = gmls._d_ss;
569 data.max_num_neighbors = gmls._pc._nla.getMaxNumNeighbors();
570 data.max_num_rows = gmls._sampling_multiplier*data.max_num_neighbors;
571 int basis_powers_space_multiplier = (gmls._reconstruction_space ==
BernsteinPolynomial) ? 2 : 1;
573 data.manifold_NP =
GMLS::getNP(gmls._curvature_poly_order, gmls._dimensions-1,
575 data.max_manifold_NP = (data.manifold_NP > gmls._NP) ? data.manifold_NP : gmls._NP;
576 data.this_num_cols = gmls._basis_multiplier*data.max_manifold_NP;
577 data.max_poly_order = (gmls._poly_order > gmls._curvature_poly_order) ?
578 gmls._poly_order : gmls._curvature_poly_order;
580 data.ref_N_data = gmls._ref_N.data();
581 data.ref_N_dim = gmls._dimensions;
583 data.thread_workspace_dim = (data.max_poly_order+1)*gmls._global_dimensions*basis_powers_space_multiplier;
584 data.manifold_gradient_dim = (gmls._dimensions-1)*data.max_num_neighbors;
586 data.manifold_curvature_coefficients_data = gmls._manifold_curvature_coefficients.data();
589 data.manifold_NP = 0;
590 data.this_num_cols = gmls._basis_multiplier*gmls._NP;
591 data.thread_workspace_dim = (gmls._poly_order+1)*gmls._global_dimensions*basis_powers_space_multiplier;
592 data.manifold_gradient_dim = 0;
596 data.T_data = gmls._T.data();
598 data.P_target_row_dim_0 = gmls._d_ss._total_alpha_values*gmls._d_ss._max_evaluation_sites_per_target;
599 data.P_target_row_dim_1 = data.this_num_cols;
600 data.P_target_row_data = gmls._Z.data();
602 data.RHS_data = gmls._RHS.data();
603 getRHSDims(gmls._dense_solver_type, gmls._constraint_type, gmls._reconstruction_space,
604 gmls._dimensions, data.max_num_rows, data.this_num_cols, data.RHS_dim_0, data.RHS_dim_1);
606 data.P_data = gmls._P.data();
607 getPDims(gmls._dense_solver_type, gmls._constraint_type, gmls._reconstruction_space,
608 gmls._dimensions, data.max_num_rows, data.this_num_cols, data.P_dim_0, data.P_dim_1);
610 data.w_data = gmls._w.data();
613 data.Coeffs_data = gmls._RHS.data();
614 data.Coeffs_dim_0 = data.RHS_dim_0;
615 data.Coeffs_dim_1 = data.RHS_dim_1;
617 data.Coeffs_data = gmls._P.data();
618 data.Coeffs_dim_0 = data.P_dim_1;
619 data.Coeffs_dim_1 = data.P_dim_0;
std::size_t global_index_type
#define TO_GLOBAL(variable)
#define compadre_assert_release(condition)
compadre_assert_release is used for assertions that should always be checked, but generally are not e...
SolutionSet< device_memory_space > _d_ss
int _sampling_multiplier
actual dimension of the sampling functional e.g.
neighbor_lists_type * getNeighborLists() const
Get neighbor list accessor.
Kokkos::View< const double *****, layout_right >::HostMirror _host_prestencil_weights
generated weights for nontraditional samples required to transform data into expected sampling functi...
std::string _quadrature_type
quadrature rule type
Kokkos::View< double * > _T
Rank 3 tensor for high order approximation of tangent vectors for all problems.
point_connections_type _additional_pc
(OPTIONAL) connections between additional points and neighbors
bool _reference_outward_normal_direction_provided
whether or not the reference outward normal directions were provided by the user.
int _basis_multiplier
dimension of the reconstructed function e.g.
ReconstructionSpace _reconstruction_space
reconstruction space for GMLS problems, set at GMLS class instantiation
const GMLSSolutionData extractSolutionData() const
Get GMLS solution data.
int _order_of_quadrature_points
order of exact polynomial integration for quadrature rule
int _global_dimensions
spatial dimension of the points, set at class instantiation only
void generatePolynomialCoefficients(const int number_of_batches=1, const bool keep_coefficients=false, const bool clear_cache=true)
Generates polynomial coefficients by setting up and solving least squares problems Sets up the batch ...
ProblemType _problem_type
problem type for GMLS problem, can also be set to STANDARD for normal or MANIFOLD for manifold proble...
int _data_sampling_multiplier
effective dimension of the data sampling functional e.g.
DenseSolverType _dense_solver_type
solver type for GMLS problem - can be QR, SVD or LU
Kokkos::View< double * > _Z
stores evaluations of targets applied to basis
int _initial_index_for_batch
initial index for current batch
Kokkos::View< TargetOperation * >::HostMirror _host_operations
vector containing target functionals to be applied for reconstruction problem (host)
int _NP
dimension of basis for polynomial reconstruction
void generateAlphas(const int number_of_batches=1, const bool keep_coefficients=false, const bool clear_cache=true)
Meant to calculate target operations and apply the evaluations to the previously constructed polynomi...
int _poly_order
order of basis for polynomial reconstruction
bool verifyPointConnections(bool assert_valid=false)
Verify whether _pc is valid.
Kokkos::View< double * > _manifold_curvature_coefficients
curvature polynomial coefficients for all problems
SamplingFunctional _data_sampling_functional
generally the same as _polynomial_sampling_functional, but can differ if specified at
SolutionSet< host_memory_space > _h_ss
Solution Set (contains all alpha values from solution and alpha layout methods)
ConstraintType _constraint_type
constraint type for GMLS problem
int _dimensions
dimension of the problem, set at class instantiation only
int _curvature_poly_order
order of basis for curvature reconstruction
bool _use_reference_outward_normal_direction_provided_to_orient_surface
whether or not to use reference outward normal directions to orient the surface in a manifold problem...
ParallelManager _pm
determines scratch level spaces and is used to call kernels
Kokkos::View< TargetOperation * > _operations
vector containing target functionals to be applied for reconstruction problem (device)
bool _orthonormal_tangent_space_provided
whether or not the orthonormal tangent directions were provided by the user.
Kokkos::View< double * > _RHS
sqrt(w)*Identity matrix for all problems, later holds polynomial coefficients for all problems
SamplingFunctional _polynomial_sampling_functional
polynomial sampling functional used to construct P matrix, set at GMLS class instantiation NOTE: ca...
Kokkos::View< double * > _P
P*sqrt(w) matrix for all problems.
static KOKKOS_INLINE_FUNCTION int getNP(const int m, const int dimension=3, const ReconstructionSpace r_space=ReconstructionSpace::ScalarTaylorPolynomial)
Returns size of the basis for a given polynomial order and dimension General to dimension 1....
const GMLSBasisData extractBasisData() const
Get GMLS basis data.
point_connections_type _pc
connections between points and neighbors
Kokkos::View< double *****, layout_right > _prestencil_weights
generated weights for nontraditional samples required to transform data into expected sampling functi...
Kokkos::View< double * > _w
contains weights for all problems
bool _entire_batch_computed_at_once
whether entire calculation was computed at once the alternative is that it was broken up over many sm...
int _local_dimensions
dimension of the problem, set at class instantiation only. For manifolds, generally _global_dimension...
Kokkos::View< double * >::HostMirror _host_T
tangent vectors information (host)
bool verifyAdditionalPointConnections(bool assert_valid=false)
Verify whether _additional_pc is valid.
bool _store_PTWP_inv_PTW
whether polynomial coefficients were requested to be stored (in a state not yet applied to data)
int _dimension_of_quadrature_points
dimension of quadrature rule
Quadrature _qm
manages and calculates quadrature
void setThreadScratchSize(const int level, const int value)
Kokkos::TeamPolicy< device_execution_space > TeamPolicyThreadsAndVectors(const global_index_type batch_size, const int threads_per_team=-1, const int vector_lanes_per_thread=-1) const
Creates a team policy for a parallel_for parallel_for will break out over loops over teams with each ...
void setTeamScratchSize(const int level, const int value)
int _default_vector_lanes
int _default_threads
largest team size
template void batchQRPivotingSolve< layout_right, layout_left, layout_right >(ParallelManager, double *, int, int, double *, int, int, int, int, int, const int, const bool)
template void batchQRPivotingSolve< layout_right, layout_right, layout_right >(ParallelManager, double *, int, int, double *, int, int, int, int, int, const int, const bool)
constexpr SamplingFunctional VaryingManifoldVectorPointSample
For integrating polynomial dotted with normal over an edge.
KOKKOS_INLINE_FUNCTION int getAdditionalCoeffSizeFromConstraintAndSpace(DenseSolverType dense_solver_type, ConstraintType constraint_type, ReconstructionSpace reconstruction_space, const int dimension)
KOKKOS_INLINE_FUNCTION void getRHSDims(DenseSolverType dense_solver_type, ConstraintType constraint_type, ReconstructionSpace reconstruction_space, const int dimension, const int M, const int N, int &RHS_row, int &RHS_col)
@ NEUMANN_GRAD_SCALAR
Neumann Gradient Scalar Type.
@ NO_CONSTRAINT
No constraint.
constexpr SamplingFunctional PointSample
Available sampling functionals.
@ BernsteinPolynomial
Bernstein polynomial basis.
@ ScalarTaylorPolynomial
Scalar polynomial basis centered at the target site and scaled by sum of basis powers e....
KOKKOS_INLINE_FUNCTION int calculateBasisMultiplier(const ReconstructionSpace rs, const int local_dimensions)
Calculate basis_multiplier.
KOKKOS_INLINE_FUNCTION int calculateSamplingMultiplier(const ReconstructionSpace rs, const SamplingFunctional sro, const int local_dimensions)
Calculate sampling_multiplier.
constexpr SamplingFunctional StaggeredEdgeAnalyticGradientIntegralSample
Analytical integral of a gradient source vector is just a difference of the scalar source at neighbor...
KOKKOS_INLINE_FUNCTION int getAdditionalAlphaSizeFromConstraint(DenseSolverType dense_solver_type, ConstraintType constraint_type)
@ MANIFOLD
Solve GMLS problem on a manifold (will use QR or SVD to solve the resultant GMLS problem dependent on...
KOKKOS_INLINE_FUNCTION void getPDims(DenseSolverType dense_solver_type, ConstraintType constraint_type, ReconstructionSpace reconstruction_space, const int dimension, const int M, const int N, int &out_row, int &out_col)
@ LU
LU factorization performed on P^T*W*P matrix.
@ QR
QR+Pivoting factorization performed on P*sqrt(w) matrix.
@ DifferentEachNeighbor
Each target applies a different transform for each neighbor.
@ DifferentEachTarget
Each target applies a different data transform, but the same to each neighbor.
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,...
Functor to evaluate curvature targets and apply to coefficients of curvature reconstruction.
Functor to apply target evaluation to polynomial coefficients to store in _alphas.
Functor to assemble the P*sqrt(weights) matrix and construct sqrt(weights)*Identity for curvature.
Functor to assemble the P*sqrt(weights) matrix and construct sqrt(weights)*Identity.
Functor to assemble the P*sqrt(weights) matrix and construct sqrt(weights)*Identity.
Functor to create a coarse tangent approximation from a given neighborhood of points.
Functor to calculate prestencil weights to apply to data to transform into a format expected by a GML...
Functor to evaluate targets on a manifold.
Functor to evaluate targets operations on the basis.
Functor to determine if tangent directions need reordered, and to reorder them if needed We require t...
Functor to evaluate curvature targets and construct accurate tangent direction approximation for mani...
global_index_type getTotalNeighborsOverAllListsHost() const
Get the sum of the number of neighbors of all targets' neighborhoods (host)
KOKKOS_INLINE_FUNCTION int getMaxNumNeighbors() const
Get the maximum number of neighbors of all targets' neighborhoods (host/device)
KOKKOS_INLINE_FUNCTION int getNumberOfTargets() const
Get number of total targets having neighborhoods (host/device).
device_mirror_target_view_type _target_coordinates
Kokkos::View< TargetOperation *, memory_space > _lro
vector of user requested target operations
NeighborLists< Kokkos::View< int * > > _neighbor_lists
Accessor to get neighbor list data, offset data, and number of neighbors per target.
int _max_evaluation_sites_per_target
maximum number of evaluation sites for each target (includes target site)
Kokkos::View< double *, layout_right, memory_space > _alphas
generated alpha coefficients (device)
int _added_alpha_size
additional alpha coefficients due to constraints
bool _contains_valid_alphas
whether internal alpha values are valid (set externally on a solve)
int _total_alpha_values
used for sizing P_target_row and the _alphas view