FreeFOAM The Cross-Platform CFD Toolkit
perfectInterface.H
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration |
5  \\ / A nd | Copyright (C) 1991-2010 OpenCFD Ltd.
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8 License
9  This file is part of OpenFOAM.
10 
11  OpenFOAM is free software: you can redistribute it and/or modify it
12  under the terms of the GNU General Public License as published by
13  the Free Software Foundation, either version 3 of the License, or
14  (at your option) any later version.
15 
16  OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
19  for more details.
20 
21  You should have received a copy of the GNU General Public License
22  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
23 
24 Class
25  Foam::perfectInterface
26 
27 Description
28  Hack of attachDetach to couple patches when they perfectly align.
29  Does not decouple. Used by stitchMesh app. Does geometric matching.
30 
31 SourceFiles
32  perfectInterface.C
33 
34 \*---------------------------------------------------------------------------*/
35 
36 #ifndef perfectInterface_H
37 #define perfectInterface_H
38 
40 #include <OpenFOAM/polyPatchID.H>
41 #include <OpenFOAM/ZoneIDs.H>
42 
43 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
44 
45 namespace Foam
46 {
47 
48 // Forward declaration of classes
49 class Time;
50 
51 /*---------------------------------------------------------------------------*\
52  Class perfectInterface Declaration
53 \*---------------------------------------------------------------------------*/
54 
56 :
57  public polyMeshModifier
58 {
59  // Private data
60 
61  //- Master face zone ID
62  faceZoneID faceZoneID_;
63 
64  //- Master patch ID
65  polyPatchID masterPatchID_;
66 
67  //- Slave patch ID
68  polyPatchID slavePatchID_;
69 
70  //- Tolerance used for distance comparison (fraction of minimum edge
71  // length)
72  static const scalar tol_;
73 
74  // Private Member Functions
75 
76  //- Calculate face centres on patch
77  static pointField calcFaceCentres(const primitivePatch&);
78 
79 
80  //- Disallow default bitwise copy construct
82 
83  //- Disallow default bitwise assignment
84  void operator=(const perfectInterface&);
85 
86 
87 public:
88 
89  //- Runtime type information
90  TypeName("perfectInterface");
91 
92 
93  // Constructors
94 
95  //- Construct from components
97  (
98  const word& name,
99  const label index,
100  const polyTopoChanger& mme,
101  const word& faceZoneName,
102  const word& masterPatchName,
103  const word& slavePatchName
104  );
105 
106  //- Construct from dictionary
108  (
109  const word& name,
110  const dictionary& dict,
111  const label index,
112  const polyTopoChanger& mme
113  );
114 
115 
116  // Destructor
117 
118  virtual ~perfectInterface();
119 
120 
121  // Member Functions
122 
123  //- Check for topology change
124  virtual bool changeTopology() const;
125 
126  //- Insert the layer addition/removal instructions
127  // into the topological change
128  virtual void setRefinement(polyTopoChange&) const;
129 
130  //- Modify motion points to comply with the topological change
131  virtual void modifyMotionPoints(pointField& motionPoints) const;
132 
133  //- Force recalculation of locally stored data on topological change
134  virtual void updateMesh(const mapPolyMesh&);
135 
136  //- Write
137  virtual void write(Ostream&) const;
138 
139  //- Write dictionary
140  virtual void writeDict(Ostream&) const;
141 
142 };
143 
144 
145 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
146 
147 } // End namespace Foam
148 
149 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
150 
151 #endif
152 
153 // ************************ vim: set sw=4 sts=4 et: ************************ //