65template <std::
size_t N>
70template <std::
size_t N = 2,
class Scalar =
double>
82 template <std::
size_t NN = N,
typename =
typename std::enable_if<(NN == 1)>::type>
87 template <std::
size_t NN = N>
94 template <std::
size_t NN = N>
96 operator()(
int i)
const
101 template <std::
size_t NN = N>
103 operator()(
int i,
int j)
108 template <std::
size_t NN = N>
110 operator()(
int i,
int j)
const
119 for (
int ii = 0; ii < mySize; ++ii)
data_[ii] = (
Scalar)(0);
126 for (
int ii = 0; ii < mySize; ++ii)
data_[ii] = ref.
data_[ii];
135 template <class T = Scalar, typename = typename std::enable_if<!std::is_const<T>::value>::type>
161template <std::
size_t N>
181template <std::
size_t N>
185 const double prod =
alpha_ * rhsCoef;
187 auto len = dest.
size();
188 auto stride = dest.
stride();
189 const long isize = len[0] * stride[0];
191 double* data = dest.
data();
192 double* rhs_data =
A_.data();
194 if (destCoef == 1.0) {
195 for (
long ii = 0; ii < isize; ++ii) data[ii] += prod * rhs_data[ii];
196 }
else if (destCoef == 0.0) {
197 for (
long ii = 0; ii < isize; ++ii) data[ii] = prod * rhs_data[ii];
199 for (
long ii = 0; ii < isize; ++ii) data[ii] = destCoef * data[ii] + prod * rhs_data[ii];
207template <std::
size_t N,
class Scalar>
208template <
class T,
typename>
216template <std::
size_t N>
225template <FieldEnum FieldT>
229 explicit View(
int num_entries) : num_entries_(num_entries)
231 data_ = std::shared_ptr<double>(
new double[num_entries_ *
static_cast<int>(FieldT)], [](
double* p) {
delete[] p; });
232 data_ptr_ = data_.get();
239 operator=(const
View&) = default;
241 operator=(
View&&) noexcept = default;
244 operator()(
int i_entry)
const
246 static_assert(FieldT ==
FieldEnum::Scalar,
"Operator(int i_entry) called for non-scalar data.");
247 return data_ptr_[i_entry];
253 static_assert(FieldT !=
FieldEnum::Scalar,
"Operator(int i_entry, int i_coord) called for scalar data.");
254 return data_ptr_[i_entry *
static_cast<int>(FieldT) + i_coord];
269 }
else if (dim == 1) {
270 return static_cast<int>(FieldT);
276#ifdef NIMBLE_HAVE_DARMA
278 serialize(darma_runtime::serialization::SimplePackUnpackArchive& ar)
285 const int size = num_entries_ *
static_cast<int>(FieldT);
286 std::vector<double> data_vec(size);
288 if (!ar.is_unpacking()) {
289 for (
int i = 0; i < size; i++) { data_vec[i] = data_ptr_[i]; }
292 ar | num_entries_ | data_vec;
294 if (ar.is_unpacking()) {
296 std::shared_ptr<double>(
new double[num_entries_ *
static_cast<int>(FieldT)], [](
double* p) {
delete[] p; });
297 data_ptr_ = data_.get();
298 for (
int i = 0; i < size; i++) { data_ptr_[i] = data_vec[i]; }
305 std::shared_ptr<double> data_;
View(const View &)=default
double & operator()(int i_entry, int i_coord) const
Definition nimble_view.h:251
View(View &&) noexcept=default
int extent(int dim)
Definition nimble_view.h:265
int rank()
Definition nimble_view.h:258
View(int num_entries)
Definition nimble_view.h:229
Definition nimble_view.h:72
void copy(const Viewify< N > &ref)
Definition nimble_view.h:123
std::array< int, N > size() const
Definition nimble_view.h:140
std::array< int, N > len_
Definition nimble_view.h:153
Scalar * data_
Definition nimble_view.h:152
void zero()
Definition nimble_view.h:116
Viewify()
Definition nimble_view.h:74
Scalar * data() const
Definition nimble_view.h:130
Viewify(Scalar *data, int len)
Definition nimble_view.h:83
std::array< int, N > stride() const
Definition nimble_view.h:146
std::array< int, N > stride_
Definition nimble_view.h:154
Viewify(Scalar *data, std::array< int, N > len, std::array< int, N > stride)
Definition nimble_view.h:80
Viewify< N, Scalar > & operator+=(const details::AXPYResult< N > &rhs)
Definition nimble_view.h:210
Definition nimble_view.h:163
double alpha_
Definition nimble_view.h:178
void assignTo(double destCoef, double rhsCoef, nimble::Viewify< N > &dest) const
Compute "dest = (destCoef) * dest + rhsCoef * alpha_ * A_".
Definition nimble_view.h:183
AXPYResult(const nimble::Viewify< N > A, double alpha)
Definition nimble_view.h:164
const nimble::Viewify< N > A_
Definition nimble_view.h:177
Definition bvh_contact_manager.cc:71
Definition kokkos_contact_manager.h:49
details::AXPYResult< N > operator*(double alpha, const nimble::Viewify< N > &A)
Definition nimble_view.h:218
#define NIMBLE_INLINE_FUNCTION
Definition nimble_defs.h:50
FieldEnum
Definition nimble_view.h:54
@ Vector
Definition nimble_view.h:56
@ Scalar
Definition nimble_view.h:55
@ SymTensor
Definition nimble_view.h:57
@ FullTensor
Definition nimble_view.h:58