libMesh
Loading...
Searching...
No Matches
periodic_boundary_base.C
Go to the documentation of this file.
1// The libMesh Finite Element Library.
2// Copyright (C) 2002-2026 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner
3
4// This library is free software; you can redistribute it and/or
5// modify it under the terms of the GNU Lesser General Public
6// License as published by the Free Software Foundation; either
7// version 2.1 of the License, or (at your option) any later version.
8
9// This library is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12// Lesser General Public License for more details.
13
14// You should have received a copy of the GNU Lesser General Public
15// License along with this library; if not, write to the Free Software
16// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
18// Local Includes
19#include "libmesh/libmesh_config.h"
20
21#ifdef LIBMESH_ENABLE_PERIODIC
22
23#include "libmesh/periodic_boundary_base.h"
24
25#include "libmesh/boundary_info.h" // BoundaryInfo::invalid_id
26
27// C++ Includes
28#include <memory>
29
30
31namespace libMesh
32{
33
35 myboundary(BoundaryInfo::invalid_id),
36 pairedboundary(BoundaryInfo::invalid_id)
37{
38}
39
40
41
43 myboundary(o.myboundary),
44 pairedboundary(o.pairedboundary),
45 variables(o.variables)
46{
47 // Make a deep copy of _transformation_matrix, if it's not null
49 {
50 this->_transformation_matrix = std::make_unique<DenseMatrix<Real>>();
52 }
53}
54
55
56
58{
59 variables.insert(var);
60}
61
62
63
65{
66 variables.insert(pb.variables.begin(), pb.variables.end());
67}
68
69
70
71bool PeriodicBoundaryBase::is_my_variable(unsigned int var_num) const
72{
73 bool a = variables.empty() || (!variables.empty() && variables.find(var_num) != variables.end());
74 return a;
75}
76
77
78
83
84
85
87{
88 libmesh_error_msg_if(!has_transformation_matrix(),
89 "Transformation matrix is not defined");
90
92}
93
94
95
97{
98 // Make a deep copy of matrix
99 this->_transformation_matrix = std::make_unique<DenseMatrix<Real>>();
100 *(this->_transformation_matrix) = matrix;
101
102 // if _transformation_matrix is defined then it must be the same sie as variables.
103 libmesh_assert_equal_to(_transformation_matrix->m(), variables.size());
104 libmesh_assert_equal_to(_transformation_matrix->n(), variables.size());
105}
106
107
108
109const std::set<unsigned int> & PeriodicBoundaryBase::get_variables() const
110{
111 return variables;
112}
113
114} // namespace libMesh
115
116#endif // LIBMESH_ENABLE_PERIODIC
The BoundaryInfo class contains information relevant to boundary conditions including storing faces,...
Defines a dense matrix for use in Finite Element-type computations.
The base class for defining periodic boundaries.
std::set< unsigned int > variables
Set of variables for this periodic boundary, empty means all variables possible.
const DenseMatrix< Real > & get_transformation_matrix() const
Get the transformation matrix, if it is defined.
bool is_my_variable(unsigned int var_num) const
const std::set< unsigned int > & get_variables() const
Get the set of variables for this periodic boundary condition.
std::unique_ptr< DenseMatrix< Real > > _transformation_matrix
A DenseMatrix that defines the mapping of variables on this boundary and the counterpart boundary.
void set_transformation_matrix(const DenseMatrix< Real > &matrix)
Set the transformation matrix.
void merge(const PeriodicBoundaryBase &pb)
The libMesh namespace provides an interface to certain functionality in the library.