Forward compatibility: flex
[foam-extend-3.2.git] / src / dynamicMesh / meshMotion / fvMotionSolver / pointPatchFields / derived / surfaceDisplacement / surfaceDisplacementPointPatchVectorField.H
blob9a44743abafe58ea92c450c3410cf882fab7d41b
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | foam-extend: Open Source CFD
4    \\    /   O peration     | Version:     3.2
5     \\  /    A nd           | Web:         http://www.foam-extend.org
6      \\/     M anipulation  | For copyright notice see file Copyright
7 -------------------------------------------------------------------------------
8 License
9     This file is part of foam-extend.
11     foam-extend is free software: you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by the
13     Free Software Foundation, either version 3 of the License, or (at your
14     option) any later version.
16     foam-extend is distributed in the hope that it will be useful, but
17     WITHOUT ANY WARRANTY; without even the implied warranty of
18     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19     General Public License for more details.
21     You should have received a copy of the GNU General Public License
22     along with foam-extend.  If not, see <http://www.gnu.org/licenses/>.
24 Class
25     surfaceDisplacementPointPatchVectorField
27 Description
28     Displacement fixed by projection onto triSurface.
29     Use in a displacement fvMotionSolver
30     as a bc on the pointDisplacement field.
32     Calculates the projection onto the surface according
33     to the projectMode
34     - NEAREST : nearest
35     - POINTNORMAL : intersection with point normal
36     - FIXEDNORMAL : intersection with fixed vector
38     This displacement is then clipped with the specified velocity * deltaT.
40     Optionally (intersection only) removes a component ("wedgePlane") to
41     stay in 2D.
43     Needs:
44     - geometry : dictionary with searchableSurfaces. (usually
45       triSurfaceMeshes in constant/triSurface)
46     - projectMode : see above
47     - projectDirection : if projectMode = fixedNormal
48     - wedgePlane : -1 or component to knock out of intersection normal
49     - frozenPointsZone : empty or name of pointZone containing points
50                          that do not move
52 SourceFiles
53     surfaceDisplacementPointPatchVectorField.C
55 \*---------------------------------------------------------------------------*/
57 #ifndef surfaceDisplacementPointPatchVectorField_H
58 #define surfaceDisplacementPointPatchVectorField_H
60 #include "pointPatchFields.H"
61 #include "fixedValuePointPatchFields.H"
62 #include "searchableSurfaces.H"
63 #include "Switch.H"
65 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
67 namespace Foam
70 /*---------------------------------------------------------------------------*\
71           Class surfaceDisplacementPointPatchVectorField Declaration
72 \*---------------------------------------------------------------------------*/
74 class surfaceDisplacementPointPatchVectorField
76     public FixedValuePointPatchField
77     <
78         pointPatchField,
79         pointMesh,
80         pointPatch,
81         DummyMatrix,
82         vector
83     >
86 public:
88     // Public data types
90         enum projectMode
91         {
92             NEAREST,
93             POINTNORMAL,
94             FIXEDNORMAL
95         };
97 private:
99     // Private data
101         //- project mode names
102         static const NamedEnum<projectMode, 3> projectModeNames_;
104         //- Maximum velocity
105         const vector velocity_;
107         //- names of surfaces
108         const dictionary surfacesDict_;
110         //- How to project/project onto surface
111         const projectMode projectMode_;
113         //- direction to project
114         const vector projectDir_;
116         //- plane for 2D wedge case or -1.
117         const label wedgePlane_;
119         //- pointZone with frozen points
120         const word frozenPointsZone_;
122         //- Demand driven: surface to project
123         mutable autoPtr<searchableSurfaces> surfacesPtr_;
126     // Private Member Functions
128         //- Calculate displacement (w.r.t. points0()) to project onto surface
129         void calcProjection(vectorField& displacement) const;
132         //- Disallow default bitwise assignment
133         void operator=(const surfaceDisplacementPointPatchVectorField&);
135 public:
137     //- Runtime type information
138     TypeName("surfaceDisplacement");
141     // Constructors
143         //- Construct from patch and internal field
144         surfaceDisplacementPointPatchVectorField
145         (
146             const pointPatch&,
147             const DimensionedField<vector, pointMesh>&
148         );
150         //- Construct from patch, internal field and dictionary
151         surfaceDisplacementPointPatchVectorField
152         (
153             const pointPatch&,
154             const DimensionedField<vector, pointMesh>&,
155             const dictionary&
156         );
158         //- Construct by mapping given patchField<vector> onto a new patch
159         surfaceDisplacementPointPatchVectorField
160         (
161             const surfaceDisplacementPointPatchVectorField&,
162             const pointPatch&,
163             const DimensionedField<vector, pointMesh>&,
164             const PointPatchFieldMapper&
165         );
167         //- Construct as copy
168         surfaceDisplacementPointPatchVectorField
169         (
170             const surfaceDisplacementPointPatchVectorField&
171         );
173         //- Construct and return a clone
174         virtual autoPtr<pointPatchVectorField> clone() const
175         {
176             return autoPtr<pointPatchVectorField>
177             (
178                 new surfaceDisplacementPointPatchVectorField
179                 (
180                     *this
181                 )
182             );
183         }
185         //- Construct as copy setting internal field reference
186         surfaceDisplacementPointPatchVectorField
187         (
188             const surfaceDisplacementPointPatchVectorField&,
189             const DimensionedField<vector, pointMesh>&
190         );
192         //- Construct and return a clone setting internal field reference
193         virtual autoPtr<pointPatchVectorField> clone
194         (
195             const DimensionedField<vector, pointMesh>& iF
196         ) const
197         {
198             return autoPtr<pointPatchVectorField>
199             (
200                 new surfaceDisplacementPointPatchVectorField
201                 (
202                     *this,
203                     iF
204                 )
205             );
206         }
208     // Member Functions
210         //- Surface to follow. Demand loads surfaceNames.
211         const searchableSurfaces& surfaces() const;
213         //- Update the coefficients associated with the patch field
214         virtual void updateCoeffs();
216         //- Write
217         virtual void write(Ostream&) const;
221 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
223 } // End namespace Foam
225 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
227 #endif
229 // ************************************************************************* //