DOLFIN
DOLFIN C++ interface
Toggle main menu visibility
Loading...
Searching...
No Matches
dolfin
mesh
SubDomain.h
1
// Copyright (C) 2007-2013 Anders Logg
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: 2007-04-10
19
// Last changed: 2013-04-12
20
21
#ifndef __SUB_DOMAIN_H
22
#define __SUB_DOMAIN_H
23
24
#include <cstddef>
25
#include <map>
26
#include <dolfin/common/constants.h>
27
#include <Eigen/Dense>
28
29
namespace
dolfin
30
{
31
32
// Forward declarations
33
class
Mesh
;
34
template
<
typename
T>
class
MeshFunction
;
35
template
<
typename
T>
class
MeshValueCollection
;
36
template
<
typename
T>
class
Array
;
37
41
42
class
SubDomain
43
{
44
public
:
45
51
SubDomain
(
const
double
map_tol=1.0e-10);
52
54
virtual
~SubDomain
();
55
65
virtual
bool
inside
(
const
Array<double>
& x,
bool
on_boundary)
const
;
66
76
virtual
bool
inside
(Eigen::Ref<const Eigen::VectorXd> x,
bool
on_boundary)
const
;
77
85
virtual
void
map
(
const
Array<double>
& x,
Array<double>
& y)
const
;
86
87
95
virtual
void
map
(Eigen::Ref<const Eigen::VectorXd> x, Eigen::Ref<Eigen::VectorXd> y)
const
;
96
97
102
virtual
void
snap
(
Array<double>
& x)
const
{}
103
104
//--- Marking of Mesh ---
105
114
void
mark_cells
(
Mesh
& mesh,
115
std::size_t sub_domain,
116
bool
check_midpoint=
true
)
const
;
117
126
void
mark_facets
(
Mesh
& mesh,
127
std::size_t sub_domain,
128
bool
check_midpoint=
true
)
const
;
129
141
void
mark
(
Mesh
& mesh,
142
std::size_t dim,
143
std::size_t sub_domain,
144
bool
check_midpoint=
true
)
const
;
145
146
//--- Marking of MeshFunction ---
147
156
void
mark
(
MeshFunction<std::size_t>
& sub_domains,
157
std::size_t sub_domain,
158
bool
check_midpoint=
true
)
const
;
159
168
void
mark
(
MeshFunction<int>
& sub_domains,
169
int
sub_domain,
170
bool
check_midpoint=
true
)
const
;
171
180
void
mark
(
MeshFunction<double>
& sub_domains,
181
double
sub_domain,
182
bool
check_midpoint=
true
)
const
;
183
192
void
mark
(
MeshFunction<bool>
& sub_domains,
193
bool
sub_domain,
194
bool
check_midpoint=
true
)
const
;
195
196
//--- Marking of MeshValueCollection ---
197
208
void
mark
(
MeshValueCollection<std::size_t>
& sub_domains,
209
std::size_t sub_domain,
210
const
Mesh
& mesh,
211
bool
check_midpoint=
true
)
const
;
212
223
void
mark
(
MeshValueCollection<int>
& sub_domains,
224
int
sub_domain,
225
const
Mesh
& mesh,
226
bool
check_midpoint=
true
)
const
;
227
238
void
mark
(
MeshValueCollection<double>
& sub_domains,
239
double
sub_domain,
240
const
Mesh
& mesh,
241
bool
check_midpoint=
true
)
const
;
242
253
void
mark
(
MeshValueCollection<bool>
& sub_domains,
254
bool
sub_domain,
255
const
Mesh
& mesh,
256
bool
check_midpoint=
true
)
const
;
257
262
std::size_t
geometric_dimension
()
const
;
263
268
virtual
void
set_property
(std::string name,
double
value);
269
274
virtual
double
get_property
(std::string name)
const
;
275
280
const
double
map_tolerance
;
281
282
private
:
283
286
template
<
typename
S,
typename
T>
287
void
apply_markers(S& sub_domains,
288
T sub_domain,
289
const
Mesh
& mesh,
290
bool
check_midpoint)
const
;
291
292
template
<
typename
T>
293
void
apply_markers(std::map<std::size_t, std::size_t>& sub_domains,
294
std::size_t dim,
295
T sub_domain,
296
const
Mesh
& mesh,
297
bool
check_midpoint)
const
;
298
299
// Friends
300
friend
class
DirichletBC;
301
friend
class
PeriodicBC;
302
303
// Geometric dimension, needed for SWIG interface, will be set before
304
// calls to inside() and map()
305
mutable
std::size_t _geometric_dimension;
306
307
};
308
309
}
310
311
#endif
dolfin::Array
Definition
Array.h:42
dolfin::MeshFunction
Definition
MeshFunction.h:59
dolfin::MeshValueCollection
Definition
MeshValueCollection.h:51
dolfin::Mesh
Definition
Mesh.h:83
dolfin::SubDomain::get_property
virtual double get_property(std::string name) const
Definition
SubDomain.cpp:388
dolfin::SubDomain::SubDomain
SubDomain(const double map_tol=1.0e-10)
Definition
SubDomain.cpp:40
dolfin::SubDomain::mark
void mark(Mesh &mesh, std::size_t dim, std::size_t sub_domain, bool check_midpoint=true) const
Definition
SubDomain.cpp:94
dolfin::SubDomain::~SubDomain
virtual ~SubDomain()
Destructor.
Definition
SubDomain.cpp:46
dolfin::SubDomain::inside
virtual bool inside(const Array< double > &x, bool on_boundary) const
Definition
SubDomain.cpp:51
dolfin::SubDomain::set_property
virtual void set_property(std::string name, double value)
Definition
SubDomain.cpp:381
dolfin::SubDomain::geometric_dimension
std::size_t geometric_dimension() const
Definition
SubDomain.cpp:165
dolfin::SubDomain::map_tolerance
const double map_tolerance
Definition
SubDomain.h:280
dolfin::SubDomain::mark_facets
void mark_facets(Mesh &mesh, std::size_t sub_domain, bool check_midpoint=true) const
Definition
SubDomain.cpp:87
dolfin::SubDomain::mark_cells
void mark_cells(Mesh &mesh, std::size_t sub_domain, bool check_midpoint=true) const
Definition
SubDomain.cpp:80
dolfin::SubDomain::map
virtual void map(const Array< double > &x, Array< double > &y) const
Definition
SubDomain.cpp:65
dolfin::SubDomain::snap
virtual void snap(Array< double > &x) const
Definition
SubDomain.h:102
dolfin
Definition
adapt.h:30
Generated by
1.17.0