20 #include "libmesh/dirichlet_boundaries.h"
22 #ifdef LIBMESH_ENABLE_DIRICHLET
25 #include "libmesh/composite_fem_function.h"
26 #include "libmesh/composite_function.h"
27 #include "libmesh/vector_value.h"
37 std::vector<unsigned int> variables_in,
41 variables(std::move(variables_in)),
42 f(f_in ? f_in->clone() : nullptr),
43 g(g_in ? g_in->clone() : nullptr),
45 jacobian_tolerance(0.)
56 std::vector<unsigned int> variables_in,
60 variables(std::move(variables_in)),
62 jacobian_tolerance(0.)
66 auto c = std::make_unique<CompositeFunction<Number>>();
79 std::vector<unsigned int> variables_in,
84 variables(std::move(variables_in)),
86 jacobian_tolerance(0.)
90 auto cf = std::make_unique<CompositeFunction<Number>>();
94 auto cg = std::make_unique<CompositeFunction<Gradient>>();
111 std::vector<unsigned int> variables_in,
112 const System & f_sys_in,
116 variables(std::move(variables_in)),
117 f_fem(f_in ? f_in->clone() : nullptr),
118 g_fem(g_in ? g_in->clone() : nullptr),
120 jacobian_tolerance(0.)
122 libmesh_assert(
f_fem);
128 std::vector<unsigned int> variables_in,
129 const System & f_sys_in,
133 variables(std::move(variables_in)),
135 jacobian_tolerance(0.)
139 auto c = std::make_unique<CompositeFEMFunction<Number>>();
141 f_fem = std::move(c);
150 std::vector<unsigned int> variables_in,
151 const System & f_sys_in,
156 variables(std::move(variables_in)),
158 jacobian_tolerance(0.)
162 auto cf = std::make_unique<CompositeFEMFunction<Number>>();
164 f_fem = std::move(cf);
166 auto cg = std::make_unique<CompositeFEMFunction<Gradient>>();
168 g_fem = std::move(cg);
181 variables(d_in.variables),
182 f(d_in.f ? d_in.f->clone() : nullptr),
183 g(d_in.g ? d_in.g->clone() : nullptr),
184 f_fem(d_in.f_fem ? d_in.f_fem->clone() : nullptr),
185 g_fem(d_in.g_fem ? d_in.g_fem->clone() : nullptr),
186 f_system(d_in.f_system),
187 jacobian_tolerance(d_in.jacobian_tolerance)
189 libmesh_assert(
f ||
f_fem);
190 libmesh_assert(!(
f &&
f_fem));
191 libmesh_assert(!(
f &&
g_fem));
192 libmesh_assert(!(
f_fem &&
g));
205 std::swap(tmp, *
this);
214 #endif // LIBMESH_ENABLE_DIRICHLET
std::unique_ptr< FEMFunctionBase< Gradient > > g_fem
std::unique_ptr< FunctionBase< Number > > f
~DirichletBoundary()
Standard destructor.
This class allows one to associate Dirichlet boundary values with a given set of mesh boundary ids an...
std::vector< unsigned int > variables
DirichletBoundary(std::set< boundary_id_type > b_in, std::vector< unsigned int > variables_in, const FunctionBase< Number > *f_in, const FunctionBase< Gradient > *g_in=nullptr)
Constructor for a system-variable-order boundary using pointers-to-functors.
std::unique_ptr< FEMFunctionBase< Number > > f_fem
VariableIndexing
Dirichlet functions may be indexed either by "system variable order" or "local variable order"...
DirichletBoundary & operator=(const DirichletBoundary &)
std::unique_ptr< FunctionBase< Gradient > > g
virtual std::unique_ptr< FunctionBase< Output > > clone() const =0
FunctionBase是一个函数对象的基类,可以在某一点(可选地包括时间)进行评估。
virtual std::unique_ptr< FEMFunctionBase< Output > > clone() const =0
创建并返回函数的新副本。
FEMFunctionBase是一个基类,用户可以从中派生出“函数样式”的对象,以在FEMSystem中使用。