19template <
typename ScalarT >
34 const std::string& label,
38 , comm_( distributed_domain.
comm() )
49 if ( mask_data_.extent( 0 ) != grid_data_.extent( 0 ) || mask_data_.extent( 1 ) != grid_data_.extent( 1 ) ||
50 mask_data_.extent( 2 ) != grid_data_.extent( 2 ) || mask_data_.extent( 3 ) != grid_data_.extent( 3 ) )
52 throw std::runtime_error(
53 "VectorQ1Scalar::VectorQ1Scalar: mask_data and grid_data must have the same size" );
64 if ( c.size() != x.size() )
66 throw std::runtime_error(
"VectorQ1Scalar::lincomb: c and x must have the same size" );
73 else if ( x.size() == 1 )
77 else if ( x.size() == 2 )
81 else if ( x.size() == 3 )
88 throw std::runtime_error(
"VectorQ1Scalar::lincomb: not implemented" );
133 std::swap( grid_data_, other.grid_data_ );
134 std::swap( mask_data_, other.mask_data_ );
135 std::swap( comm_, other.comm_ );
149 MPI_Comm
comm()
const {
return comm_; }
154 MPI_Comm comm_ = MPI_COMM_WORLD;
158static_assert( VectorLike< VectorQ1Scalar< double > > );
166template <
typename ScalarT,
int VecDim = 3 >
178 const std::string& label,
182 , comm_( distributed_domain.
comm() )
193 if ( mask_data_.extent( 0 ) != grid_data_.extent( 0 ) || mask_data_.extent( 1 ) != grid_data_.extent( 1 ) ||
194 mask_data_.extent( 2 ) != grid_data_.extent( 2 ) || mask_data_.extent( 3 ) != grid_data_.extent( 3 ) )
196 throw std::runtime_error(
197 "VectorQ1Scalar::VectorQ1Scalar: mask_data and grid_data must have the same size" );
204 const static int Dim = VecDim;
213 if ( c.size() != x.size() )
215 throw std::runtime_error(
"VectorQ1Scalar::lincomb: c and x must have the same size" );
222 else if ( x.size() == 1 )
226 else if ( x.size() == 2 )
230 else if ( x.size() == 3 )
237 throw std::runtime_error(
"VectorQ1Scalar::lincomb: not implemented" );
282 std::swap( grid_data_, other.grid_data_ );
283 std::swap( mask_data_, other.mask_data_ );
284 std::swap( comm_, other.comm_ );
298 MPI_Comm
comm()
const {
return comm_; }
303 MPI_Comm comm_ = MPI_COMM_WORLD;
307static_assert( VectorLike< VectorQ1Vec< double, 3 > > );
Parallel data structure organizing the thick spherical shell metadata for distributed (MPI parallel) ...
Definition spherical_shell.hpp:2518
const std::map< SubdomainInfo, std::tuple< LocalSubdomainIdx, SubdomainNeighborhood > > & subdomains() const
Definition spherical_shell.hpp:2650
const DomainInfo & domain_info() const
Returns a const reference.
Definition spherical_shell.hpp:2647
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:121
grid::Grid4DDataScalar< grid::NodeOwnershipFlag > & mask_data()
Get mutable reference to mask data.
Definition vector_q1.hpp:146
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:96
VectorQ1Scalar()=default
Default constructor.
void scale_with_vector_impl(const VectorQ1Scalar &x)
Elementwise scaling implementation for VectorLike concept. Computes: .
Definition vector_q1.hpp:109
void swap_impl(VectorQ1Scalar &other)
Swap implementation for VectorLike concept. Exchanges grid_data and mask_data with another vector.
Definition vector_q1.hpp:131
MPI_Comm comm() const
MPI communicator this vector's reductions run on.
Definition vector_q1.hpp:149
void randomize_impl()
Randomize entries implementation for VectorLike concept. Sets each entry of grid_data to a random val...
Definition vector_q1.hpp:116
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:126
const grid::Grid4DDataScalar< ScalarType > & grid_data() const
Get const reference to grid data.
Definition vector_q1.hpp:139
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:104
grid::Grid4DDataScalar< ScalarType > & grid_data()
Get mutable reference to grid data.
Definition vector_q1.hpp:141
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:62
const grid::Grid4DDataScalar< grid::NodeOwnershipFlag > & mask_data() const
Get const reference to mask data.
Definition vector_q1.hpp:144
Static assertion: VectorQ1Scalar satisfies VectorLike concept.
Definition vector_q1.hpp:168
ScalarT ScalarType
Scalar type of the vector.
Definition vector_q1.hpp:202
void swap_impl(VectorQ1Vec &other)
Swap implementation for VectorLike concept. Exchanges grid_data and mask_data with another vector.
Definition vector_q1.hpp:280
static const int Dim
Dimension of the vector field.
Definition vector_q1.hpp:204
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:177
void randomize_impl()
Randomize entries implementation for VectorLike concept. Sets each entry of grid_data to a random val...
Definition vector_q1.hpp:265
ScalarType max_abs_entry_impl() const
Max absolute entry implementation for VectorLike concept. Computes: .
Definition vector_q1.hpp:270
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:211
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:275
VectorQ1Vec()=default
Default constructor.
grid::Grid4DDataScalar< grid::NodeOwnershipFlag > & mask_data()
Get mutable reference to mask data.
Definition vector_q1.hpp:295
MPI_Comm comm() const
MPI communicator this vector's reductions run on.
Definition vector_q1.hpp:298
void invert_entries_impl()
Invert entries implementation for VectorLike concept. Computes: .
Definition vector_q1.hpp:253
const grid::Grid4DDataScalar< grid::NodeOwnershipFlag > & mask_data() const
Get const reference to mask data.
Definition vector_q1.hpp:293
void scale_with_vector_impl(const VectorQ1Vec &x)
Elementwise scaling implementation for VectorLike concept. Computes: .
Definition vector_q1.hpp:258
grid::Grid4DDataVec< ScalarType, VecDim > & grid_data()
Get mutable reference to grid data.
Definition vector_q1.hpp:290
ScalarType dot_impl(const VectorQ1Vec &x) const
Dot product implementation for VectorLike concept. Computes: over owned nodes.
Definition vector_q1.hpp:245
const grid::Grid4DDataVec< ScalarType, VecDim > & grid_data() const
Get const reference to grid data.
Definition vector_q1.hpp:288
Kokkos::View< ScalarType ****, Layout > Grid4DDataScalar
Definition grid_types.hpp:27
void invert_inplace(const grid::Grid4DDataScalar< ScalarType > &y)
Definition grid_operations.hpp:232
ScalarType max_abs_entry(const grid::Grid4DDataScalar< ScalarType > &x, MPI_Comm comm=MPI_COMM_WORLD)
Definition grid_operations.hpp:316
bool has_nan_or_inf(const grid::Grid4DDataScalar< ScalarType > &x, MPI_Comm comm=MPI_COMM_WORLD)
Definition grid_operations.hpp:704
ScalarType masked_dot_product(const grid::Grid4DDataScalar< ScalarType > &x, const grid::Grid4DDataScalar< ScalarType > &y, const grid::Grid4DDataScalar< FlagType > &mask, const FlagType &mask_value, MPI_Comm comm=MPI_COMM_WORLD)
Definition grid_operations.hpp:631
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:252
void rand(const grid::Grid4DDataScalar< ScalarTypeDst > &dst)
Definition grid_operations.hpp:749
void lincomb(const grid::Grid4DDataScalar< ScalarType > &y, ScalarType c_0, ScalarType c_1, const grid::Grid4DDataScalar< ScalarType > &x_1)
Definition grid_operations.hpp:133
Contains linear algebra utilities and functions for the Terra project.
Definition inv_rho_drho_dt.hpp:12
SoA (Structure-of-Arrays) 4D vector grid data.
Definition grid_types.hpp:51