Loading...
Searching...
No Matches
stokes.hpp
Go to the documentation of this file.
1
2#pragma once
3
5#include "divergence.hpp"
6#include "gradient.hpp"
8#include "linalg/operator.hpp"
10#include "util/timer.hpp"
11#include "vector_laplace.hpp"
12#include "zero.hpp"
13
15
16template < typename ScalarT, int VecDim = 3 >
17class Stokes
18{
19 public:
22 using ScalarType = ScalarT;
23
28
29 private:
34
35 bool diagonal_;
36
37 public:
39 const grid::shell::DistributedDomain& domain_fine,
40 const grid::shell::DistributedDomain& domain_coarse,
44 BoundaryConditions bcs,
45 bool diagonal )
46 : A_( domain_fine, grid, radii, boundary_mask_data_fine, bcs, diagonal )
47 , B_T_( domain_fine, domain_coarse, grid, radii, boundary_mask_data_fine, bcs )
48 , B_( domain_fine, domain_coarse, grid, radii, boundary_mask_data_fine, bcs )
49 , diagonal_( diagonal )
50 {}
51
82
83 const Block11Type& block_11() const { return A_; }
84
85 const Block12Type& block_12() const
86 {
87 if ( diagonal_ )
88 {
89 throw std::runtime_error( "block_12() is not implemented for diagonal Stokes operator" );
90 }
91
92 return B_T_;
93 }
94
95 const Block21Type& block_21() const
96 {
97 if ( diagonal_ )
98 {
99 throw std::runtime_error( "block_21() is not implemented for diagonal Stokes operator" );
100 }
101
102 return B_;
103 }
104
105 const Block22Type& block_22() const { return O_; }
106
107 Block11Type& block_11() { return A_; }
109 {
110 if ( diagonal_ )
111 {
112 throw std::runtime_error( "block_12() is not implemented for diagonal Stokes operator" );
113 }
114
115 return B_T_;
116 }
118 {
119 if ( diagonal_ )
120 {
121 throw std::runtime_error( "block_21() is not implemented for diagonal Stokes operator" );
122 }
123
124 return B_;
125 }
126 Block22Type& block_22() { return O_; }
127};
128
130
131} // namespace terra::fe::wedge::operators::shell
void set_operator_apply_and_communication_modes(const linalg::OperatorApplyMode operator_apply_mode, const linalg::OperatorCommunicationMode operator_communication_mode)
Definition divergence.hpp:82
void set_operator_apply_and_communication_modes(const linalg::OperatorApplyMode operator_apply_mode, const linalg::OperatorCommunicationMode operator_communication_mode)
Definition gradient.hpp:79
const Block21Type & block_21() const
Definition stokes.hpp:95
Block12Type & block_12()
Definition stokes.hpp:108
void apply_impl(const SrcVectorType &src, DstVectorType &dst)
Definition stokes.hpp:52
Stokes(const grid::shell::DistributedDomain &domain_fine, const grid::shell::DistributedDomain &domain_coarse, const grid::Grid3DDataVec< ScalarType, 3 > &grid, const grid::Grid2DDataScalar< ScalarType > &radii, const grid::Grid4DDataScalar< grid::shell::ShellBoundaryFlag > &boundary_mask_data_fine, BoundaryConditions bcs, bool diagonal)
Definition stokes.hpp:38
Block22Type & block_22()
Definition stokes.hpp:126
ScalarT ScalarType
Definition stokes.hpp:22
const Block22Type & block_22() const
Definition stokes.hpp:105
const Block11Type & block_11() const
Definition stokes.hpp:83
const Block12Type & block_12() const
Definition stokes.hpp:85
Block11Type & block_11()
Definition stokes.hpp:107
Block21Type & block_21()
Definition stokes.hpp:117
void set_operator_apply_and_communication_modes(const linalg::OperatorApplyMode operator_apply_mode, const linalg::OperatorCommunicationMode operator_communication_mode)
Definition vector_laplace.hpp:84
Parallel data structure organizing the thick spherical shell metadata for distributed (MPI parallel) ...
Definition spherical_shell.hpp:2498
Block vector consisting of a Q1 vector and a Q1 scalar vector on distributed shell grids.
Definition vector_q1isoq2_q1.hpp:20
const Block1Type & block_1() const
Get const reference to block 1 (vector field).
Definition vector_q1isoq2_q1.hpp:138
const Block2Type & block_2() const
Get const reference to block 2 (scalar field).
Definition vector_q1isoq2_q1.hpp:140
Timer supporting RAII scope or manual stop.
Definition timer.hpp:270
Concept for types that behave like block 2x2 operators. Extends OperatorLike and requires block types...
Definition operator.hpp:117
Definition boundary_mass.hpp:14
Kokkos::View< ScalarType ***[VecDim], Layout > Grid3DDataVec
Definition grid_types.hpp:40
Kokkos::View< ScalarType ****, Layout > Grid4DDataScalar
Definition grid_types.hpp:25
Kokkos::View< ScalarType **, Layout > Grid2DDataScalar
Definition grid_types.hpp:19
@ Replace
Overwrite the destination vector.
@ Add
Add to the destination vector.
@ CommunicateAdditively
Communicate and add results.