libMesh
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Public Attributes | Protected Attributes | List of all members
libMesh::PeriodicBoundary Class Reference

The definition of a periodic boundary. More...

#include <periodic_boundary.h>

Inheritance diagram for libMesh::PeriodicBoundary:
[legend]

Public Types

enum  TransformationType { FORWARD =0 , INVERSE =1 }
 

Public Member Functions

 PeriodicBoundary ()
 Constructor.
 
virtual ~PeriodicBoundary ()=default
 Destructor.
 
 PeriodicBoundary (const PeriodicBoundary &o, TransformationType t=FORWARD)
 Copy constructor, with option for the copy to represent an inverse transformation.
 
 PeriodicBoundary (const RealVectorValue &vector)
 Constructor taking a reference to the translation vector.
 
virtual Point get_corresponding_pos (const Point &pt) const override
 This function should be overridden by derived classes to define how one finds corresponding nodes on the periodic boundary pair.
 
virtual std::unique_ptr< PeriodicBoundaryBaseclone (TransformationType t=FORWARD) const override
 If we want the DofMap to be able to make copies of references and store them in the underlying map, this class must be clone'able, i.e.
 
void set_variable (unsigned int var)
 
void merge (const PeriodicBoundaryBase &pb)
 
bool is_my_variable (unsigned int var_num) const
 
bool has_transformation_matrix () const
 
const DenseMatrix< Real > & get_transformation_matrix () const
 Get the transformation matrix, if it is defined.
 
void set_transformation_matrix (const DenseMatrix< Real > &matrix)
 Set the transformation matrix.
 
const std::set< unsigned int > & get_variables () const
 Get the set of variables for this periodic boundary condition.
 

Public Attributes

boundary_id_type myboundary
 The boundary ID of this boundary and its counterpart.
 
boundary_id_type pairedboundary
 

Protected Attributes

RealVectorValue translation_vector
 
std::set< unsigned intvariables
 Set of variables for this periodic boundary, empty means all variables possible.
 
std::unique_ptr< DenseMatrix< Real > > _transformation_matrix
 A DenseMatrix that defines the mapping of variables on this boundary and the counterpart boundary.
 

Detailed Description

The definition of a periodic boundary.

Author
Roy Stogner
Date
2010

Used for implementing periodic BCs via constraints.

Definition at line 44 of file periodic_boundary.h.

Member Enumeration Documentation

◆ TransformationType

Enumerator
FORWARD 
INVERSE 

Definition at line 51 of file periodic_boundary_base.h.

Constructor & Destructor Documentation

◆ PeriodicBoundary() [1/3]

libMesh::PeriodicBoundary::PeriodicBoundary ( )

Constructor.

Definition at line 33 of file periodic_boundary.C.

◆ ~PeriodicBoundary()

virtual libMesh::PeriodicBoundary::~PeriodicBoundary ( )
virtualdefault

Destructor.

◆ PeriodicBoundary() [2/3]

libMesh::PeriodicBoundary::PeriodicBoundary ( const PeriodicBoundary o,
TransformationType  t = FORWARD 
)

Copy constructor, with option for the copy to represent an inverse transformation.

Definition at line 41 of file periodic_boundary.C.

41 :
43 translation_vector(o.translation_vector)
44{
45 if (t == INVERSE)
46 {
47 std::swap(myboundary, pairedboundary);
48 translation_vector *= -1.0;
49 }
50}
boundary_id_type myboundary
The boundary ID of this boundary and its counterpart.

References libMesh::PeriodicBoundaryBase::INVERSE, libMesh::PeriodicBoundaryBase::myboundary, libMesh::PeriodicBoundaryBase::pairedboundary, and translation_vector.

◆ PeriodicBoundary() [3/3]

libMesh::PeriodicBoundary::PeriodicBoundary ( const RealVectorValue vector)

Constructor taking a reference to the translation vector.

Definition at line 54 of file periodic_boundary.C.

54 :
56 translation_vector(vector)
57{
58}

Member Function Documentation

◆ clone()

std::unique_ptr< PeriodicBoundaryBase > libMesh::PeriodicBoundary::clone ( TransformationType  t = FORWARD) const
overridevirtual

If we want the DofMap to be able to make copies of references and store them in the underlying map, this class must be clone'able, i.e.

have a kind of virtual construction mechanism.

Implements libMesh::PeriodicBoundaryBase.

Definition at line 69 of file periodic_boundary.C.

70{
71 return std::make_unique<PeriodicBoundary>(*this, t);
72}

Referenced by libMesh::MeshBase::add_disjoint_neighbor_boundary_pairs().

◆ get_corresponding_pos()

Point libMesh::PeriodicBoundary::get_corresponding_pos ( const Point pt) const
overridevirtual

This function should be overridden by derived classes to define how one finds corresponding nodes on the periodic boundary pair.

Implements libMesh::PeriodicBoundaryBase.

Definition at line 62 of file periodic_boundary.C.

63{
64 return pt + translation_vector;
65}

References translation_vector.

◆ get_transformation_matrix()

const DenseMatrix< Real > & libMesh::PeriodicBoundaryBase::get_transformation_matrix ( ) const
inherited

Get the transformation matrix, if it is defined.

Throw an error if it is not defined.

Definition at line 86 of file periodic_boundary_base.C.

87{
88 libmesh_error_msg_if(!has_transformation_matrix(),
89 "Transformation matrix is not defined");
90
92}
std::unique_ptr< DenseMatrix< Real > > _transformation_matrix
A DenseMatrix that defines the mapping of variables on this boundary and the counterpart boundary.

References libMesh::PeriodicBoundaryBase::_transformation_matrix, and libMesh::PeriodicBoundaryBase::has_transformation_matrix().

Referenced by libMesh::FEGenericBase< OutputType >::compute_periodic_constraints().

◆ get_variables()

const std::set< unsigned int > & libMesh::PeriodicBoundaryBase::get_variables ( ) const
inherited

Get the set of variables for this periodic boundary condition.

Definition at line 109 of file periodic_boundary_base.C.

110{
111 return variables;
112}
std::set< unsigned int > variables
Set of variables for this periodic boundary, empty means all variables possible.

References libMesh::PeriodicBoundaryBase::variables.

Referenced by libMesh::DofMap::add_periodic_boundary(), and libMesh::FEGenericBase< OutputType >::compute_periodic_constraints().

◆ has_transformation_matrix()

bool libMesh::PeriodicBoundaryBase::has_transformation_matrix ( ) const
inherited

◆ is_my_variable()

bool libMesh::PeriodicBoundaryBase::is_my_variable ( unsigned int  var_num) const
inherited

Definition at line 71 of file periodic_boundary_base.C.

72{
73 bool a = variables.empty() || (!variables.empty() && variables.find(var_num) != variables.end());
74 return a;
75}

References libMesh::PeriodicBoundaryBase::variables.

Referenced by libMesh::FEGenericBase< OutputType >::compute_periodic_constraints().

◆ merge()

void libMesh::PeriodicBoundaryBase::merge ( const PeriodicBoundaryBase pb)
inherited

Definition at line 64 of file periodic_boundary_base.C.

65{
66 variables.insert(pb.variables.begin(), pb.variables.end());
67}

References libMesh::PeriodicBoundaryBase::variables.

Referenced by libMesh::DofMap::add_periodic_boundary().

◆ set_transformation_matrix()

void libMesh::PeriodicBoundaryBase::set_transformation_matrix ( const DenseMatrix< Real > &  matrix)
inherited

Set the transformation matrix.

When calling this method we require the following conditions: 1) matrix is square with size that matches this->variables.size() 2) the list of variables in this->variables set must all have the same FE type Both of these conditions are asserted in DBG mode.

Definition at line 96 of file periodic_boundary_base.C.

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}

References libMesh::PeriodicBoundaryBase::_transformation_matrix, and libMesh::PeriodicBoundaryBase::variables.

Referenced by AzimuthalPeriodicBoundary::set_up_rotation_matrix().

◆ set_variable()

void libMesh::PeriodicBoundaryBase::set_variable ( unsigned int  var)
inherited

Member Data Documentation

◆ _transformation_matrix

std::unique_ptr<DenseMatrix<Real> > libMesh::PeriodicBoundaryBase::_transformation_matrix
protectedinherited

A DenseMatrix that defines the mapping of variables on this boundary and the counterpart boundary.

This is necessary for periodic-boundaries with vector-valued quantities (e.g. velocity or displacement) on a sector of a circular domain, for example, since in that case we must map each variable to a corresponding linear combination of all the variables. We store the DenseMatrix via a unique_ptr, and an uninitialized pointer is treated as equivalent to the identity matrix.

Definition at line 146 of file periodic_boundary_base.h.

Referenced by libMesh::PeriodicBoundaryBase::get_transformation_matrix(), libMesh::PeriodicBoundaryBase::has_transformation_matrix(), libMesh::PeriodicBoundaryBase::PeriodicBoundaryBase(), and libMesh::PeriodicBoundaryBase::set_transformation_matrix().

◆ myboundary

boundary_id_type libMesh::PeriodicBoundaryBase::myboundary
inherited

◆ pairedboundary

boundary_id_type libMesh::PeriodicBoundaryBase::pairedboundary
inherited

◆ translation_vector

RealVectorValue libMesh::PeriodicBoundary::translation_vector
protected

Definition at line 85 of file periodic_boundary.h.

Referenced by get_corresponding_pos(), and PeriodicBoundary().

◆ variables

std::set<unsigned int> libMesh::PeriodicBoundaryBase::variables
protectedinherited

The documentation for this class was generated from the following files: