20 #ifndef __SYSTEM_ASSEMBLER_H 21 #define __SYSTEM_ASSEMBLER_H 28 #include "DirichletBC.h" 29 #include "AssemblerBase.h" 35 class exterior_facet_integral;
36 class interior_facet_integral;
43 template<
typename T>
class ArrayView;
50 template<
typename T>
class MeshFunction;
64 std::shared_ptr<const Form> L,
65 std::vector<std::shared_ptr<const DirichletBC>> bcs);
92 Scratch(
const Form& a,
const Form& L);
94 std::array<std::vector<double>, 2> Ae;
98 static void check_arity(std::shared_ptr<const Form> a,
99 std::shared_ptr<const Form> L);
102 bool check_functionspace_for_bc
103 (std::shared_ptr<const FunctionSpace> fs, std::size_t bc_index);
110 std::shared_ptr<const Form> _a, _l;
113 std::vector<std::shared_ptr<const DirichletBC>> _bcs;
115 static void cell_wise_assembly(
116 std::array<GenericTensor*, 2>& tensors,
117 std::array<UFC*, 2>&
ufc,
119 const std::vector<DirichletBC::Map>& boundary_values,
123 static void facet_wise_assembly(
124 std::array<GenericTensor*, 2>& tensors,
125 std::array<UFC*, 2>& ufc,
127 const std::vector<DirichletBC::Map>& boundary_values,
134 static void compute_exterior_facet_tensor(
135 std::array<std::vector<double>, 2>& Ae,
136 std::array<UFC*, 2>& ufc,
138 std::vector<double>& coordinate_dofs,
139 const std::array<bool, 2>& tensor_required_cell,
140 const std::array<bool, 2>& tensor_required_facet,
143 const std::array<const ufc::cell_integral*, 2>& cell_integrals,
144 const std::array<const ufc::exterior_facet_integral*, 2>& exterior_facet_integrals,
145 const bool compute_cell_tensor);
149 static void compute_interior_facet_tensor(
150 std::array<UFC*, 2>& ufc,
151 std::array<ufc::cell, 2>& ufc_cell,
152 std::array<std::vector<double>, 2>& coordinate_dofs,
153 const std::array<bool, 2>& tensor_required_cell,
154 const std::array<bool, 2>& tensor_required_facet,
155 const std::array<Cell, 2>& cell,
156 const std::array<std::size_t, 2>& local_facet,
157 const bool facet_owner,
158 const std::array<const ufc::cell_integral*, 2>& cell_integrals,
159 const std::array<const ufc::interior_facet_integral*, 2>& interior_facet_integrals,
160 const std::array<std::size_t, 2>& matrix_size,
161 const std::size_t vector_size,
162 const std::array<bool, 2> compute_cell_tensor);
166 static void matrix_block_add(
168 std::vector<double>& Ae,
169 std::vector<double>& macro_A,
170 const std::array<bool, 2>& add_local_tensor,
173 static void apply_bc(
double* A,
double* b,
174 const std::vector<DirichletBC::Map>& boundary_values,
186 const void* integral,
187 const std::vector<DirichletBC::Map>& boundary_values,
std::unordered_map< std::size_t, double > Map
map type used by DirichletBC
Definition: DirichletBC.h:130
Definition: Extrapolation.h:34
A Cell is a MeshEntity of topological codimension 0.
Definition: Cell.h:42
A common interface for arbitrary rank tensors.
Definition: GenericTensor.h:48
Definition: ArrayView.h:31
This class defines a common interface for matrices.
Definition: GenericMatrix.h:46
void assemble(GenericTensor &A, const Form &a)
Assemble tensor.
Definition: assemble.cpp:31
Provide some common functions used in assembler classes.
Definition: AssemblerBase.h:41
A Facet is a MeshEntity of topological codimension 1.
Definition: Facet.h:39
This class defines a common interface for vectors.
Definition: GenericVector.h:47
Definition: SystemAssembler.h:58