DOLFIN
DOLFIN C++ interface
LocalAssembler.h
1 // Copyright (C) 2011 Marie E. Rognes
2 //
3 // This file is part of DOLFIN.
4 //
5 // DOLFIN is free software: you can redistribute it and/or modify
6 // it under the terms of the GNU Lesser General Public License as published by
7 // the Free Software Foundation, either version 3 of the License, or
8 // (at your option) any later version.
9 //
10 // DOLFIN is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU Lesser General Public License for more details.
14 //
15 // You should have received a copy of the GNU Lesser General Public License
16 // along with DOLFIN. If not, see <http://www.gnu.org/licenses/>.
17 //
18 // First added: 2011-01-04
19 // Last changed: 2015-09-30
20 
21 #ifndef __LOCAL_ASSEMBLER_H
22 #define __LOCAL_ASSEMBLER_H
23 
24 #include <vector>
25 
26 #include <dolfin/common/types.h>
27 #include <Eigen/Dense>
28 
29 namespace ufc
30 {
31  class cell;
32 }
33 
34 namespace dolfin
35 {
36 
37  class Cell;
38  class Facet;
39  class UFC;
40  template<typename T> class MeshFunction;
41 
48 
50  {
51 
52  public:
53 
57  static void
58  assemble(Eigen::Matrix<double, Eigen::Dynamic,
59  Eigen::Dynamic,
60  Eigen::RowMajor>& A,
61  UFC& ufc,
62  const std::vector<double>& coordinate_dofs,
63  ufc::cell& ufc_cell,
64  const Cell& cell,
65  const MeshFunction<std::size_t>* cell_domains,
66  const MeshFunction<std::size_t>* exterior_facet_domains,
67  const MeshFunction<std::size_t>* interior_facet_domains
68  );
69 
72  static void assemble_cell(Eigen::Matrix<double, Eigen::Dynamic,
73  Eigen::Dynamic,
74  Eigen::RowMajor>& A,
75  UFC& ufc,
76  const std::vector<double>& coordinate_dofs,
77  const ufc::cell& ufc_cell,
78  const Cell& cell,
79  const MeshFunction<std::size_t>* cell_domains
80  );
81 
85  static void
86  assemble_exterior_facet(Eigen::Matrix<double, Eigen::Dynamic,
87  Eigen::Dynamic,
88  Eigen::RowMajor>& A,
89  UFC& ufc,
90  const std::vector<double>& coordinate_dofs,
91  const ufc::cell& ufc_cell,
92  const Cell& cell,
93  const Facet& facet,
94  const std::size_t local_facet,
95  const MeshFunction<std::size_t>* exterior_facet_domains
96  );
97 
101  static void
102  assemble_interior_facet(Eigen::Matrix<double, Eigen::Dynamic,
103  Eigen::Dynamic,
104  Eigen::RowMajor>& A,
105  UFC& ufc,
106  const std::vector<double>& coordinate_dofs,
107  const ufc::cell& ufc_cell,
108  const Cell& cell,
109  const Facet& facet,
110  const std::size_t local_facet,
111  const MeshFunction<std::size_t>* interior_facet_domains,
112  const MeshFunction<std::size_t>* cell_domains
113  );
114  };
115 
116 }
117 
118 #endif
Definition: UFC.h:46
Definition: adapt.h:29
Definition: LocalAssembler.h:49
Definition: Extrapolation.h:34
A Cell is a MeshEntity of topological codimension 0.
Definition: Cell.h:42
void assemble(GenericTensor &A, const Form &a)
Assemble tensor.
Definition: assemble.cpp:31
A Facet is a MeshEntity of topological codimension 1.
Definition: Facet.h:39