vectorTensorTransformI.H
Go to the documentation of this file.
1/*---------------------------------------------------------------------------*\
2 ========= |
3 \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4 \\ / O peration |
5 \\ / A nd | www.openfoam.com
6 \\/ M anipulation |
7-------------------------------------------------------------------------------
8 Copyright (C) 2011-2016 OpenFOAM Foundation
9-------------------------------------------------------------------------------
10License
11 This file is part of OpenFOAM.
12
13 OpenFOAM is free software: you can redistribute it and/or modify it
14 under the terms of the GNU General Public License as published by
15 the Free Software Foundation, either version 3 of the License, or
16 (at your option) any later version.
17
18 OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
19 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
20 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
21 for more details.
22
23 You should have received a copy of the GNU General Public License
24 along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
25
26\*---------------------------------------------------------------------------*/
27
28// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
29
31:
32 t_(Zero),
33 R_(sphericalTensor::I),
34 hasR_(false)
35{}
36
37
39(
40 const vector& t,
41 const tensor& R,
42 bool hasR
43)
44:
45 t_(t),
46 R_(R),
47 hasR_(hasR)
48{}
49
50
52:
53 t_(t),
54 R_(sphericalTensor::I),
55 hasR_(false)
56{}
57
58
60:
61 t_(Zero),
62 R_(R),
63 hasR_(true)
64{}
65
66
67// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
68
70{
71 return t_;
72}
73
74
76{
77 return R_;
78}
79
80
82{
83 return hasR_;
84}
85
86
88{
89 return t_;
90}
91
92
94{
95 // Assume that non-const access to R changes it from I, so set
96 // hasR to true
97
98 hasR_ = true;
99
100 return R_;
101}
102
103
105(
106 const vector& v
107) const
108{
109 if (hasR_)
110 {
111 return t() + (R() & v);
112 }
113 else
114 {
115 return t() + v;
116 }
117}
118
119
121(
122 const pointField& pts
123) const
124{
125 tmp<pointField> tfld;
126
127 if (hasR_)
128 {
129 tfld = t() + (R() & pts);
130 }
131 else
132 {
133 tfld = t() + pts;
134 }
135 return tfld();
136}
137
138
140(
141 const vector& v
142) const
143{
144 if (hasR_)
145 {
146 return (R().T() & (v - t()));
147 }
148 else
149 {
150 return v - t();
151 }
152}
153
154
156(
157 const pointField& pts
158) const
159{
160 tmp<pointField> tfld;
161
162 if (hasR_)
163 {
164 tfld = (R().T() & (pts - t()));
165 }
166 else
167 {
168 tfld = pts - t();
169 }
170 return tfld();
171}
172
173
174// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
175
177(
179)
180{
181 t_ += tr.t_;
182 R_ = tr.R_ & R_;
183
184 // If either of the two objects has hasR_ as true, then inherit
185 // it, otherwise, these should both be I tensors.
186 hasR_ = tr.hasR_ || hasR_;
187}
188
189
191{
192 t_ = t;
193}
194
195
197{
198 t_ += t;
199}
200
201
203{
204 t_ -= t;
205}
206
207
209{
210 hasR_ = true;
211
212 R_ = R;
213}
214
215
217{
218 hasR_ = true;
219
220 R_ = R & R_;
221}
222
223
224// * * * * * * * * * * * * * * * Global Functions * * * * * * * * * * * * * //
225
227{
228 return vectorTensorTransform(-tr.t(), tr.R().T(), tr.hasR());
229}
230
231
232// * * * * * * * * * * * * * * * Global Operators * * * * * * * * * * * * * //
233
234inline bool Foam::operator==
235(
236 const vectorTensorTransform& tr1,
237 const vectorTensorTransform& tr2
238)
239{
240 return (tr1.t() == tr2.t() && tr1.R() == tr2.R());
241}
242
243
244inline bool Foam::operator!=
245(
246 const vectorTensorTransform& tr1,
247 const vectorTensorTransform& tr2
248)
249{
250 return !operator==(tr1, tr2);
251}
252
253
254inline Foam::vectorTensorTransform Foam::operator+
255(
257 const vector& t
258)
259{
260 return vectorTensorTransform(tr.t() + t, tr.R(), tr.hasR());
261}
262
263
264inline Foam::vectorTensorTransform Foam::operator+
265(
266 const vector& t,
268)
269{
270 return vectorTensorTransform(t + tr.t(), tr.R(), tr.hasR());
271}
272
273
274inline Foam::vectorTensorTransform Foam::operator-
275(
277 const vector& t
278)
279{
280 return vectorTensorTransform(tr.t() - t, tr.R(), tr.hasR());
281}
282
283
284inline Foam::vectorTensorTransform Foam::operator&
285(
286 const vectorTensorTransform& tr1,
287 const vectorTensorTransform& tr2
288)
289{
291 (
292 tr1.t() + tr2.t(),
293 tr1.R() & tr2.R(),
294 (tr1.hasR() || tr2.hasR())
295 );
296}
297
298
299// ************************************************************************* //
#define R(A, B, C, D, E, F, K, M)
dimensioned< Type > T() const
Return transpose.
friend Ostream & operator(Ostream &, const faMatrix< Type > &)
Default transformation behaviour for position.
A class for managing temporary objects.
Definition: tmp.H:65
Vector-tensor class used to perform translations and rotations in 3D space.
vectorTensorTransform & operator=(const vectorTensorTransform &)=default
Copy assignment.
vector invTransformPosition(const vector &v) const
Inverse transform the given position.
vectorTensorTransform()
Default construct - no translation, identity rotation.
void operator&=(const vectorTensorTransform &)
const volScalarField & T
dimensionedScalar tr(const dimensionedSphericalTensor &dt)
static const Identity< scalar > I
Definition: Identity.H:94
tmp< faMatrix< Type > > operator==(const faMatrix< Type > &, const faMatrix< Type > &)
static constexpr const zero Zero
Global zero (0)
Definition: zero.H:131
dimensionedSphericalTensor inv(const dimensionedSphericalTensor &dt)