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,