18template <
typename ScalarT,
int VecDim = 3 >
40 const std::string& label,
45 : u_( label +
"_u", distributed_domain_fine, mask_data_fine )
46 , p_( label +
"_p", distributed_domain_coarse, mask_data_coarse )
57 std::vector< Block1Type > us;
58 std::vector< Block2Type > ps;
60 for (
const auto& xx : x )
62 us.emplace_back( xx.block_1() );
63 ps.emplace_back( xx.block_2() );
153static_assert( Block2VectorLike< VectorQ1IsoQ2Q1< double > > );
161template <
typename ValueType,
int VecDim = 3 >
163 const std::string label,
177 distributed_domain_coarse.
subdomains().size(),
183 vector_q1isoq2_q1.
block_1().add_grid_data( grid_data_fine, level );
184 vector_q1isoq2_q1.
block_2().add_grid_data( grid_data_coarse, level );
185 return vector_q1isoq2_q1;
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
Block vector consisting of a Q1 vector and a Q1 scalar vector on distributed shell grids.
Definition vector_q1isoq2_q1.hpp:20
bool has_nan_or_inf_impl() const
NaN/inf check implementation for Block2VectorLike concept. Returns true if any entry of either block ...
Definition vector_q1isoq2_q1.hpp:115
void invert_entries_impl()
Invert entries implementation for Block2VectorLike concept. Computes: ( \text{block}_1 = 1 / \text{bl...
Definition vector_q1isoq2_q1.hpp:81
void add_mask_data(const grid::Grid4DDataScalar< unsigned char > &mask_data_block_1, const grid::Grid4DDataScalar< unsigned char > &mask_data_block_2)
Add mask data to both blocks.
Definition vector_q1isoq2_q1.hpp:129
const Block1Type & block_1() const
Get const reference to block 1 (vector field).
Definition vector_q1isoq2_q1.hpp:138
void swap_impl(VectorQ1IsoQ2Q1 &other)
Swap implementation for Block2VectorLike concept. Exchanges the contents of both blocks with another ...
Definition vector_q1isoq2_q1.hpp:120
VectorQ1Scalar< ScalarType > Block2Type
Type of the second block (scalar field).
Definition vector_q1isoq2_q1.hpp:28
Block2Type & block_2()
Get mutable reference to block 2 (scalar field).
Definition vector_q1isoq2_q1.hpp:145
ScalarT ScalarType
Scalar type of the block vector.
Definition vector_q1isoq2_q1.hpp:23
ScalarType dot_impl(const VectorQ1IsoQ2Q1 &x) const
Dot product implementation for Block2VectorLike concept. Computes: ( \text{block}_1 \cdot x....
Definition vector_q1isoq2_q1.hpp:74
VectorQ1IsoQ2Q1(const std::string &label, const grid::shell::DistributedDomain &distributed_domain_fine, const grid::shell::DistributedDomain &distributed_domain_coarse, const grid::Grid4DDataScalar< grid::NodeOwnershipFlag > &mask_data_fine, const grid::Grid4DDataScalar< grid::NodeOwnershipFlag > &mask_data_coarse)
Construct a block vector with labels, domains, and mask data for both blocks.
Definition vector_q1isoq2_q1.hpp:39
void scale_with_vector_impl(const VectorQ1IsoQ2Q1 &x)
Elementwise scaling implementation for Block2VectorLike concept. Computes: ( \text{block}_1 = \text{b...
Definition vector_q1isoq2_q1.hpp:90
void randomize_impl()
Randomize entries implementation for Block2VectorLike concept. Sets each entry of both blocks to a ra...
Definition vector_q1isoq2_q1.hpp:98
const Block2Type & block_2() const
Get const reference to block 2 (scalar field).
Definition vector_q1isoq2_q1.hpp:140
Block1Type & block_1()
Get mutable reference to block 1 (vector field).
Definition vector_q1isoq2_q1.hpp:143
VectorQ1IsoQ2Q1()=default
Default constructor.
void lincomb_impl(const std::vector< ScalarType > &c, const std::vector< VectorQ1IsoQ2Q1 > &x, const ScalarType c0)
Linear combination implementation for Block2VectorLike concept. Computes: ( \text{block}_1 = c_0 + \s...
Definition vector_q1isoq2_q1.hpp:55
ScalarType max_abs_entry_impl() const
Max absolute entry implementation for Block2VectorLike concept. Computes: ( \max( \max_i |\text{block...
Definition vector_q1isoq2_q1.hpp:107
VectorQ1Vec< ScalarType, VecDim > Block1Type
Type of the first block (vector field).
Definition vector_q1isoq2_q1.hpp:26
ScalarType dot_impl(const VectorQ1Scalar &x) const
Dot product implementation for VectorLike concept. Computes: over owned nodes.
Definition vector_q1.hpp:95
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
void invert_entries_impl()
Invert entries implementation for VectorLike concept. Computes: .
Definition vector_q1.hpp:103
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
void swap_impl(VectorQ1Vec &other)
Swap implementation for VectorLike concept. Exchanges grid_data and mask_data with another vector.
Definition vector_q1.hpp:273
void randomize_impl()
Randomize entries implementation for VectorLike concept. Sets each entry of grid_data to a random val...
Definition vector_q1.hpp:258
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
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
ScalarType dot_impl(const VectorQ1Vec &x) const
Dot product implementation for VectorLike concept. Computes: over owned nodes.
Definition vector_q1.hpp:238
Kokkos::View< ScalarType ****[VecDim], Layout > Grid4DDataVec
Definition grid_types.hpp:43
Kokkos::View< ScalarType ****, Layout > Grid4DDataScalar
Definition grid_types.hpp:25
Contains linear algebra utilities and functions for the Terra project.
Definition diagonally_scaled_operator.hpp:8
VectorQ1IsoQ2Q1< ValueType, VecDim > allocate_vector_q1isoq2_q1(const std::string label, const grid::shell::DistributedDomain &distributed_domain_fine, const grid::shell::DistributedDomain &distributed_domain_coarse, const int level)
Static assertion: VectorQ1IsoQ2Q1 satisfies Block2VectorLike concept.
Definition vector_q1isoq2_q1.hpp:162