FreeFOAM The Cross-Platform CFD Toolkit
cylindricalCS.C
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 \*---------------------------------------------------------------------------*/
25 
26 #include "cylindricalCS.H"
27 
28 #include <OpenFOAM/one.H>
29 #include <OpenFOAM/Switch.H>
32 
33 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
34 
35 namespace Foam
36 {
37  defineTypeNameAndDebug(cylindricalCS, 0);
38  addToRunTimeSelectionTable(coordinateSystem, cylindricalCS, dictionary);
39  addToRunTimeSelectionTable(coordinateSystem, cylindricalCS, origRotation);
40 }
41 
42 
43 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
44 
46 :
48  inDegrees_(inDegrees)
49 {}
50 
51 
53 (
54  const coordinateSystem& cs,
55  const bool inDegrees
56 )
57 :
58  coordinateSystem(cs),
59  inDegrees_(inDegrees)
60 {}
61 
62 
64 (
65  const word& name,
66  const coordinateSystem& cs,
67  const bool inDegrees
68 )
69 :
70  coordinateSystem(name, cs),
71  inDegrees_(inDegrees)
72 {}
73 
74 
76 (
77  const word& name,
78  const point& origin,
79  const coordinateRotation& cr,
80  const bool inDegrees
81 )
82 :
83  coordinateSystem(name, origin, cr),
84  inDegrees_(inDegrees)
85 {}
86 
87 
89 (
90  const word& name,
91  const point& origin,
92  const vector& axis,
93  const vector& dirn,
94  const bool inDegrees
95 )
96 :
97  coordinateSystem(name, origin, axis, dirn),
98  inDegrees_(inDegrees)
99 {}
100 
101 
103 (
104  const word& name,
105  const dictionary& dict
106 )
107 :
108  coordinateSystem(name, dict),
109  inDegrees_(dict.lookupOrDefault<Switch>("degrees", true))
110 {}
111 
112 
113 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
114 
116 {
117  return inDegrees_;
118 }
119 
120 
122 {
123  return inDegrees_;
124 }
125 
126 
128 (
129  const vector& local,
130  bool translate
131 ) const
132 {
133  scalar theta
134  (
135  local.y() * ( inDegrees_ ? mathematicalConstant::pi/180.0 : 1.0 )
136  );
137 
139  (
140  vector(local.x()*cos(theta), local.x()*sin(theta), local.z()),
141  translate
142  );
143 }
144 
145 
147 (
148  const vectorField& local,
149  bool translate
150 ) const
151 {
152  scalarField theta =
153  (
154  local.component(vector::Y)
155  * ( inDegrees_ ? mathematicalConstant::pi/180.0 : 1.0 )
156  );
157 
158 
159  vectorField lc(local.size());
160  lc.replace(vector::X, local.component(vector::X)*cos(theta));
161  lc.replace(vector::Y, local.component(vector::X)*sin(theta));
162  lc.replace(vector::Z, local.component(vector::Z));
163 
164  return coordinateSystem::localToGlobal(lc, translate);
165 }
166 
167 
169 (
170  const vector& global,
171  bool translate
172 ) const
173 {
174  const vector lc = coordinateSystem::globalToLocal(global, translate);
175 
176  return vector
177  (
178  sqrt(sqr(lc.x()) + sqr(lc.y())),
179  atan2
180  (
181  lc.y(),
182  lc.x()
183  ) * ( inDegrees_ ? 180.0/mathematicalConstant::pi : 1.0 ),
184  lc.z()
185  );
186 }
187 
188 
190 (
191  const vectorField& global,
192  bool translate
193 ) const
194 {
195  const vectorField lc =
196  coordinateSystem::globalToLocal(global, translate);
197 
198  tmp<vectorField> tresult(new vectorField(lc.size()));
199  vectorField& result = tresult();
200 
201  result.replace
202  (
203  vector::X,
205  );
206 
207  result.replace
208  (
209  vector::Y,
210  atan2
211  (
212  lc.component(vector::Y),
213  lc.component(vector::X)
214  ) * ( inDegrees_ ? 180.0/mathematicalConstant::pi : 1.0 )
215  );
216 
217  result.replace(vector::Z, lc.component(vector::Z));
218 
219  return tresult;
220 }
221 
222 
223 // ************************ vim: set sw=4 sts=4 et: ************************ //