19template <
typename ScalarT >
34 const std::string& label,
48 if ( mask_data_.extent( 0 ) != grid_data_.extent( 0 ) || mask_data_.extent( 1 ) != grid_data_.extent( 1 ) ||
49 mask_data_.extent( 2 ) != grid_data_.extent( 2 ) || mask_data_.extent( 3 ) != grid_data_.extent( 3 ) )
51 throw std::runtime_error(
52 "VectorQ1Scalar::VectorQ1Scalar: mask_data and grid_data must have the same size" );
63 if ( c.size() != x.size() )
65 throw std::runtime_error(
"VectorQ1Scalar::lincomb: c and x must have the same size" );
72 else if ( x.size() == 1 )
76 else if ( x.size() == 2 )
80 else if ( x.size() == 3 )
87 throw std::runtime_error(
"VectorQ1Scalar::lincomb: not implemented" );
132 std::swap( grid_data_, other.grid_data_ );
133 std::swap( mask_data_, other.mask_data_ );
152static_assert( VectorLike< VectorQ1Scalar< double > > );
160template <
typename ScalarT,
int VecDim = 3 >
172 const std::string& label,
186 if ( mask_data_.extent( 0 ) != grid_data_.extent( 0 ) || mask_data_.extent( 1 ) != grid_data_.extent( 1 ) ||
187 mask_data_.extent( 2 ) != grid_data_.extent( 2 ) || mask_data_.extent( 3 ) != grid_data_.extent( 3 ) )
189 throw std::runtime_error(
190 "VectorQ1Scalar::VectorQ1Scalar: mask_data and grid_data must have the same size" );
197 const static int Dim = VecDim;
206 if ( c.size() != x.size() )
208 throw std::runtime_error(
"VectorQ1Scalar::lincomb: c and x must have the same size" );
215 else if ( x.size() == 1 )
219 else if ( x.size() == 2 )
223 else if ( x.size() == 3 )
230 throw std::runtime_error(
"VectorQ1Scalar::lincomb: not implemented" );
275 std::swap( grid_data_, other.grid_data_ );
276 std::swap( mask_data_, other.mask_data_ );
295static_assert( VectorLike< VectorQ1Vec< double, 3 > > );
Parallel data structure organizing the thick spherical shell metadata for distributed (MPI parallel) ...
Definition spherical_shell.hpp:2498
const std::map< SubdomainInfo, std::tuple< LocalSubdomainIdx, SubdomainNeighborhood > > & subdomains() const
Definition spherical_shell.hpp:2580
const DomainInfo & domain_info() const
Returns a const reference.
Definition spherical_shell.hpp:2577
int subdomain_num_nodes_radially() const
Equivalent to calling subdomain_num_nodes_radially( subdomain_refinement_level() )
Definition spherical_shell.hpp:861
int subdomain_num_nodes_per_side_laterally() const
Equivalent to calling subdomain_num_nodes_per_side_laterally( subdomain_refinement_level() )
Definition spherical_shell.hpp:852
Q1 scalar finite element vector on a distributed shell grid.
Definition vector_q1.hpp:21
ScalarType max_abs_entry_impl() const
Max absolute entry implementation for VectorLike concept. Computes: .
Definition vector_q1.hpp:120
grid::Grid4DDataScalar< grid::NodeOwnershipFlag > & mask_data()
Get mutable reference to mask data.
Definition vector_q1.hpp:144
VectorQ1Scalar(const std::string &label, const grid::shell::DistributedDomain &distributed_domain, const grid::Grid4DDataScalar< grid::NodeOwnershipFlag > &mask_data)
Construct a Q1 scalar vector with label, domain, and mask data.
Definition vector_q1.hpp:33
ScalarType dot_impl(const VectorQ1Scalar &x) const
Dot product implementation for VectorLike concept. Computes: over owned nodes.
Definition vector_q1.hpp:95
VectorQ1Scalar()=default
Default constructor.
void scale_with_vector_impl(const VectorQ1Scalar &x)
Elementwise scaling implementation for VectorLike concept. Computes: .
Definition vector_q1.hpp:108
void swap_impl(VectorQ1Scalar &other)
Swap implementation for VectorLike concept. Exchanges grid_data and mask_data with another vector.
Definition vector_q1.hpp:130
void randomize_impl()
Randomize entries implementation for VectorLike concept. Sets each entry of grid_data to a random val...
Definition vector_q1.hpp:115
bool has_nan_or_inf_impl() const
NaN/inf check implementation for VectorLike concept. Returns true if any entry of grid_data is NaN/in...
Definition vector_q1.hpp:125
const grid::Grid4DDataScalar< ScalarType > & grid_data() const
Get const reference to grid data.
Definition vector_q1.hpp:137
ScalarT ScalarType
Scalar type of the vector.
Definition vector_q1.hpp:24
void invert_entries_impl()
Invert entries implementation for VectorLike concept. Computes: .
Definition vector_q1.hpp:103
grid::Grid4DDataScalar< ScalarType > & grid_data()
Get mutable reference to grid data.
Definition vector_q1.hpp:139
void lincomb_impl(const std::vector< ScalarType > &c, const std::vector< VectorQ1Scalar > &x, const ScalarType c0)
Linear combination implementation for VectorLike concept. Computes: .
Definition vector_q1.hpp:61
const grid::Grid4DDataScalar< grid::NodeOwnershipFlag > & mask_data() const
Get const reference to mask data.
Definition vector_q1.hpp:142
Static assertion: VectorQ1Scalar satisfies VectorLike concept.
Definition vector_q1.hpp:162
ScalarT ScalarType
Scalar type of the vector.
Definition vector_q1.hpp:195
void swap_impl(VectorQ1Vec &other)
Swap implementation for VectorLike concept. Exchanges grid_data and mask_data with another vector.
Definition vector_q1.hpp:273
static const int Dim
Dimension of the vector field.
Definition vector_q1.hpp:197
VectorQ1Vec(const std::string &label, const grid::shell::DistributedDomain &distributed_domain, const grid::Grid4DDataScalar< grid::NodeOwnershipFlag > &mask_data)
Construct a Q1 vector with label, domain, and mask data.
Definition vector_q1.hpp:171
void randomize_impl()
Randomize entries implementation for VectorLike concept. Sets each entry of grid_data to a random val...
Definition vector_q1.hpp:258
ScalarType max_abs_entry_impl() const
Max absolute entry implementation for VectorLike concept. Computes: .
Definition vector_q1.hpp:263
void lincomb_impl(const std::vector< ScalarType > &c, const std::vector< VectorQ1Vec > &x, const ScalarType c0)
Linear combination implementation for VectorLike concept. Computes: .
Definition vector_q1.hpp:204
bool has_nan_or_inf_impl() const
NaN/inf check implementation for VectorLike concept. Returns true if any entry of grid_data is NaN/in...
Definition vector_q1.hpp:268
VectorQ1Vec()=default
Default constructor.
grid::Grid4DDataScalar< grid::NodeOwnershipFlag > & mask_data()
Get mutable reference to mask data.
Definition vector_q1.hpp:287
void invert_entries_impl()
Invert entries implementation for VectorLike concept. Computes: .
Definition vector_q1.hpp:246
const grid::Grid4DDataScalar< grid::NodeOwnershipFlag > & mask_data() const
Get const reference to mask data.
Definition vector_q1.hpp:285
void scale_with_vector_impl(const VectorQ1Vec &x)
Elementwise scaling implementation for VectorLike concept. Computes: .
Definition vector_q1.hpp:251
grid::Grid4DDataVec< ScalarType, VecDim > & grid_data()
Get mutable reference to grid data.
Definition vector_q1.hpp:282
ScalarType dot_impl(const VectorQ1Vec &x) const
Dot product implementation for VectorLike concept. Computes: over owned nodes.
Definition vector_q1.hpp:238
const grid::Grid4DDataVec< ScalarType, VecDim > & grid_data() const
Get const reference to grid data.
Definition vector_q1.hpp:280
Kokkos::View< ScalarType ****[VecDim], Layout > Grid4DDataVec
Definition grid_types.hpp:43
Kokkos::View< ScalarType ****, Layout > Grid4DDataScalar
Definition grid_types.hpp:25
void invert_inplace(const grid::Grid4DDataScalar< ScalarType > &y)
Definition grid_operations.hpp:302
bool has_nan_or_inf(const grid::Grid4DDataScalar< ScalarType > &x)
Definition grid_operations.hpp:742
ScalarType masked_dot_product(const grid::Grid4DDataScalar< ScalarType > &x, const grid::Grid4DDataScalar< ScalarType > &y, const grid::Grid4DDataScalar< FlagType > &mask, const FlagType &mask_value)
Definition grid_operations.hpp:689
void set_constant(const grid::Grid2DDataScalar< ScalarType > &x, ScalarType value)
Definition grid_operations.hpp:12
void mult_elementwise_inplace(const grid::Grid4DDataScalar< ScalarType > &y, const grid::Grid4DDataScalar< ScalarType > &x)
Definition grid_operations.hpp:329
void rand(const grid::Grid4DDataScalar< ScalarTypeDst > &dst)
Definition grid_operations.hpp:798
void lincomb(const grid::Grid4DDataScalar< ScalarType > &y, ScalarType c_0, ScalarType c_1, const grid::Grid4DDataScalar< ScalarType > &x_1)
Definition grid_operations.hpp:179
ScalarType max_abs_entry(const grid::Grid4DDataScalar< ScalarType > &x)
Definition grid_operations.hpp:400
Contains linear algebra utilities and functions for the Terra project.
Definition diagonally_scaled_operator.hpp:8