1 // The libMesh Finite Element Library. 2 // Copyright (C) 2002-2020 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 #ifndef LIBMESH_PERIODIC_BOUNDARY_H 19 #define LIBMESH_PERIODIC_BOUNDARY_H 20 21 // Local Includes 22 #include "libmesh/libmesh_config.h" 23 24 #ifdef LIBMESH_ENABLE_PERIODIC 25 26 // Local Includes 27 #include "libmesh/periodic_boundary_base.h" 28 #include "libmesh/vector_value.h" // RealVectorValue 29 30 namespace libMesh 31 { 32 33 // Forward Declarations 34 class Elem; 35 class MeshBase; 36 37 /** 38 * The definition of a periodic boundary. 39 * 40 * \author Roy Stogner 41 * \date 2010 42 * \brief Used for implementing periodic BCs via constraints. 43 */ 44 class PeriodicBoundary : public PeriodicBoundaryBase 45 { 46 public: 47 /** 48 * Constructor 49 */ 50 PeriodicBoundary(); 51 52 /** 53 * Destructor 54 */ ~PeriodicBoundary()55 virtual ~PeriodicBoundary() {} 56 57 /** 58 * Copy constructor, with option for the copy to represent an inverse transformation. 59 */ 60 PeriodicBoundary(const PeriodicBoundary & o, TransformationType t = FORWARD); 61 62 /** 63 * Constructor taking a reference to the translation vector. 64 */ 65 PeriodicBoundary(const RealVectorValue & vector); 66 67 /** 68 * This function should be overridden by derived classes to 69 * define how one finds corresponding nodes on the periodic 70 * boundary pair. 71 */ 72 virtual Point get_corresponding_pos(const Point & pt) const override; 73 74 /** 75 * If we want the DofMap to be able to make copies of references and 76 * store them in the underlying map, this class must be clone'able, 77 * i.e. have a kind of virtual construction mechanism. 78 */ 79 virtual std::unique_ptr<PeriodicBoundaryBase> clone(TransformationType t = FORWARD) const override; 80 81 protected: 82 83 // The vector which is added to points in myboundary 84 // to produce corresponding points in pairedboundary 85 RealVectorValue translation_vector; 86 }; 87 88 } // namespace libmesh 89 90 #endif // LIBMESH_ENABLE_PERIODIC 91 92 #endif // LIBMESH_PERIODIC_BOUNDARY_H 93