Home
Downloads
Documentation
Installation
User Guide
man-pages
API Documentation
README
Release Notes
Changes
License
Support
SourceForge Project
Main Page
Related Pages
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Pages
src
meshTools
coordinateSystems
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
>
30
#include <
OpenFOAM/mathematicalConstants.H
>
31
#include <
OpenFOAM/addToRunTimeSelectionTable.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
45
Foam::cylindricalCS::cylindricalCS
(
const
bool
inDegrees)
46
:
47
coordinateSystem
(),
48
inDegrees_(inDegrees)
49
{}
50
51
52
Foam::cylindricalCS::cylindricalCS
53
(
54
const
coordinateSystem
& cs,
55
const
bool
inDegrees
56
)
57
:
58
coordinateSystem
(cs),
59
inDegrees_(inDegrees)
60
{}
61
62
63
Foam::cylindricalCS::cylindricalCS
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
75
Foam::cylindricalCS::cylindricalCS
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
88
Foam::cylindricalCS::cylindricalCS
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
102
Foam::cylindricalCS::cylindricalCS
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
115
bool
Foam::cylindricalCS::inDegrees
()
const
116
{
117
return
inDegrees_;
118
}
119
120
121
bool
&
Foam::cylindricalCS::inDegrees
()
122
{
123
return
inDegrees_;
124
}
125
126
127
Foam::vector
Foam::cylindricalCS::localToGlobal
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
138
return
coordinateSystem::localToGlobal
139
(
140
vector
(local.
x
()*
cos
(theta), local.
x
()*
sin
(theta), local.
z
()),
141
translate
142
);
143
}
144
145
146
Foam::tmp<Foam::vectorField>
Foam::cylindricalCS::localToGlobal
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
168
Foam::vector
Foam::cylindricalCS::globalToLocal
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
189
Foam::tmp<Foam::vectorField>
Foam::cylindricalCS::globalToLocal
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
,
204
sqrt
(
sqr
(lc.
component
(
vector::X
)) +
sqr
(lc.
component
(
vector::Y
)))
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: ************************ //