Merge branch 'master' of ssh://git.code.sf.net/p/foam-extend/foam-extend-3.2
[foam-extend-3.2.git] / src / foam / coordinateSystems / ellipticCylindricalCS.H
blobf366ddbfeff3549d49f5f82a5a3c6b1088ce24f9
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     Foam::ellipticCylindricalCS
27 Description
28     Elliptic cylindrical coordinate system.
30     Notation: u = a.x() v = a.y() z = a.z();
32     http://en.wikipedia.org/wiki/Elliptic_coordinates
34 SourceFiles
35     ellipticCylindricalCS.C
37 Authors
38     Henrik Rusche, Wikki GmbH
39     All rights reserved.
41 \*---------------------------------------------------------------------------*/
43 #ifndef ellipticCylindricalCS_H
44 #define ellipticCylindricalCS_H
46 #include "coordinateSystem.H"
47 #include "Switch.H"
49 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
51 namespace Foam
54 /*---------------------------------------------------------------------------*\
55                     Class ellipticCylindricalCS Declaration
56 \*---------------------------------------------------------------------------*/
58 class ellipticCylindricalCS
60     public coordinateSystem
62     // Private data members
64         // Distance of the foci from the origin
65         const scalar a_;
67         //- Are angles in degrees? (default = true)
68         Switch inDegrees_;
71 protected:
73     // Protected Member Functions
75         //- Convert from local coordinate system to the global Cartesian system
76         //  with optional translation for the origin
77         virtual vector localToGlobal(const vector&, bool translate) const;
79         //- Convert from local coordinate system to the global Cartesian system
80         //  with optional translation for the origin
81         virtual tmp<vectorField> localToGlobal
82         (
83             const vectorField&,
84             bool translate
85         ) const;
87         //- Convert from global Cartesian system to the local coordinate system
88         //  with optional translation for the origin
89         virtual vector globalToLocal(const vector&, bool translate) const;
91         //- Convert from global Cartesian system to the local coordinate system
92         //  with optional translation for the origin
93         virtual tmp<vectorField> globalToLocal
94         (
95             const vectorField&,
96             bool translate
97         ) const;
99 public:
101     //- Runtime type information
102     TypeName("ellipticCylindrical");
105     // Constructors
107         //- Construct null
108         ellipticCylindricalCS(const bool inDegrees = true);
110         //- Construct copy
111         ellipticCylindricalCS
112         (
113             const coordinateSystem&,
114             const bool inDegrees = true
115         );
117         //- Construct copy with a different name
118         ellipticCylindricalCS
119         (
120             const word& name,
121             const coordinateSystem&,
122             const bool inDegrees = true
123         );
125         //- Construct from origin, and rotation
126         ellipticCylindricalCS
127         (
128             const word& name,
129             const point& origin,
130             const coordinateRotation& cr,
131             const scalar a,
132             const bool inDegrees = true
133         );
135         //- Construct from origin and 2 axes
136         ellipticCylindricalCS
137         (
138             const word& name,
139             const point& origin,
140             const vector& axis,
141             const vector& dirn,
142             const scalar a,
143             const bool inDegrees = true
144         );
146         //- Construct from dictionary
147         ellipticCylindricalCS
148         (
149             const word& name,
150             const dictionary& dict
151         );
153         //- Return clone
154         virtual autoPtr<coordinateSystem> clone() const
155         {
156             return autoPtr<coordinateSystem>(new ellipticCylindricalCS(*this));
157         }
160     // Member Functions
162         // Global information about the coordinate system
164             //- Directions in which the span is limited
165             virtual spanInfo spanLimited() const;
167             //- Span bounds
168             virtual boundBox spanBounds() const;
171         //- Are angles in degrees?
172         bool inDegrees() const;
174         //- Non-const access to inDegrees
175         Switch& inDegrees();
178         // Write
180             //- Write
181             virtual void write(Ostream&) const;
183             //- Write dictionary
184             virtual void writeDict(Ostream&, bool subDict = true) const;
188 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
190 } // End namespace Foam
192 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
194 #endif
196 // ************************************************************************* //