Clean up
[ShipHydroSIG.git] / src / vofDynamicMesh / lnInclude / floatingBody.H
blob9ab770334d858168834230f901b636e3a472b35a
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright held by original author
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
9     This file is part of OpenFOAM.
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 the
13     Free Software Foundation; either version 2 of the License, or (at your
14     option) any later version.
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.
21     You should have received a copy of the GNU General Public License
22     along with OpenFOAM; if not, write to the Free Software Foundation,
23     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
25 Class
26     floatingBody
28 Description
29     Floating body is a representation of the mesh and 6-DOF forces with the
30     following characteristics:
32     1) Mesh representation is given as a list of patches representing the hull.
33     Patches can be used to capture individual components (eg. keel,
34     bulb, rudder, hull etc.)
36     2) Mesh is structured in the following way
37     Hull is created with symmetry around the y-z plane
38     Incoming velocity is in -x direction
39     Mesh can be of one of following types
40     2.1) Single zone mesh, with or without prismatic layers
41     2.2) Two-component GGI mesh with a spherical interface
43     2) Flow force calculation is based on turbulent single-phase or
44     free surface flow for all patches.  Only the force on wetted surfaces
45     (gamma = 1) is considered
47     3) External propulsion force is given as direction and height above
48      centre of gravity.  Force magnitude equals to total drag force
49     in opposing direction
51     4) 6-DOF solver
52     Holds inertial parameters of the boat
53     Force balance includes hydrodynamic forces and external propulsion force
54     Motion can be constrained in each of the following:
55     Forward motion (x)
56     Sideways motion (y)
57     Vertical motion (z)
58     Roll angle (x-rot)
59     Pitch angle (y-rot)
60     Yaw angle (z-rot)
62 Author
63     Hrvoje Jasak, Wikki Ltd.  All rights reserved.
65 SourceFiles
66     floatingBody.C
68 \*---------------------------------------------------------------------------*/
70 #ifndef floatingBody_H
71 #define floatingBody_H
73 #include "word.H"
74 #include "polyPatchID.H"
75 #include "ZoneIDs.H"
76 #include "fvMesh.H"
77 #include "sixDOFqODE.H"
78 #include "ODESolver.H"
80 #include "tetFemMatrices.H"
81 #include "tetPointFields.H"
82 #include "faceTetPolyPatch.H"
83 #include "uniformDimensionedFields.H"
85 #include "OFstream.H"
87 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
89 namespace Foam
92 /*---------------------------------------------------------------------------*\
93                           Class floatingBody Declaration
94 \*---------------------------------------------------------------------------*/
96 class floatingBody
98     // Private data
100         //- Name of floating body
101         word name_;
103         //- Reference to mesh
104         const fvMesh& mesh_;
107         // Mesh variables
109             //- Hull patches
110             PtrList<polyPatchID> hullPatches_;
112             //- Hull slider patch: moving with hull translation and rotation
113             polyPatchID hullSlider_;
115             //- Hull slider zone: moving with hull translation and rotation
116             faceZoneID hullSliderZone_;
118             //- Fixed slider patch: moving with hull translation only
119             polyPatchID fixedSlider_;
121             //- Fixed slider zone: moving with hull translation only
122             faceZoneID fixedSliderZone_;
124             //- Centre of slider rotation relative to centre of gravity
125             vector centreOfSlider_;
128         // External force variables
130             //- Add propulsion force
131             Switch addPropulsionForce_;
133             //- Propulsion direction
134             vector propulsionDirection_;
136             //- Propulsion force point relative to centre of gravity
137             vector propulsionForceCentroid_;
140         // ODE parameters
142             //- 6-DOF motion equation
143             sixDOFqODE sixDOF_;
145             //- ODE solver
146             autoPtr<ODESolver> solver_;
148             //- ODE solver accuracy
149             scalar epsilon_;
151             //- Fixed motion components
153                 //- Fixed surge (x-translation)
154                 Switch fixedSurge_;
156                 //- Fixed sway (y-translation)
157                 Switch fixedSway_;
159                 //- Fixed heave (z-translation)
160                 Switch fixedHeave_;
162                 //- Fixed roll (rotation around x)
163                 Switch fixedRoll_;
165                 //- Fixed pitch (rotation around y)
166                 Switch fixedPitch_;
168                 //- Fixed yaw (rotation around z)
169                 Switch fixedYaw_;
172         //- Steady-state 6-DOF simulation
173         Switch steadyState_;
175         // Helper variables
177             //- Current time index
178             label curTimeIndex_;
180             //- Current centre of rotation
181             vector rotCentre_;
183             //- Force at the beginning of time-step
184             vector oldForce_;
186             //- Moment at the beginning of time-step
187             vector oldMoment_;
190         //- Output file for translation and rotation
191         OFstream of_;
194     // Private Member Functions
196         //- Disallow default bitwise copy construct
197         floatingBody(const floatingBody&);
199         //- Disallow default bitwise assignment
200         void operator=(const floatingBody&);
203         //- Check definition
204         void check() const;
206         //- Return the effective viscous stress (laminar + turbulent).
207         tmp<volSymmTensorField> devRhoReff() const;
209         //- Return drag force on the hull
210         vector dragForce() const;
212         //- Return drag moment on the hull
213         vector dragMoment() const;
215         //- Fix translation
216         void fixTranslation(vector& v) const;
218         //- Fix rotation
219         void fixRotation(vector& rot) const;
221         //- Return velocity of the centre of rotation
222         vector rotCentreVelocity() const;
224         //- Calculate boundary velocity
225         tmp<vectorField> boundaryVelocity
226         (
227             const vectorField& boundaryPoints
228         ) const;
231 public:
234     // Constructors
236         //- Construct from dictionary
237         floatingBody
238         (
239             const word& name,
240             const fvMesh& mesh,
241             const dictionary& dict
242         );
245     // Destructor - default
248     // Member Functions
250         //- Return name
251         const word& name() const
252         {
253             return name_;
254         }
256         //- Return ID of hull slider patch
257         const polyPatchID& hullSlider() const
258         {
259             return hullSlider_;
260         }
262         //- Return ID of fixed slider patch
263         const polyPatchID& fixedSlider() const
264         {
265             return fixedSlider_;
266         }
268         //- Set boundary motion
269         void setMotion(tetPointVectorField& motionU);
271         //- Correct motion.  This will move zones in parallel
272         void correctMotion(vectorField& newAllPoints) const;
276 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
278 } // End namespace Foam
280 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
282 #endif
284 // ************************************************************************* //