quadrupleI.hpp
Go to the documentation of this file.
1 /*------------------------------- phasicFlow ---------------------------------
2  O C enter of
3  O O E ngineering and
4  O O M ultiscale modeling of
5  OOOOOOO F luid flow
6 ------------------------------------------------------------------------------
7  Copyright (C): www.cemf.ir
8  email: hamid.r.norouzi AT gmail.com
9 ------------------------------------------------------------------------------
10 Licence:
11  This file is part of phasicFlow code. It is a free software for simulating
12  granular and multiphase flows. You can redistribute it and/or modify it under
13  the terms of GNU General Public License v3 or any other later versions.
14 
15  phasicFlow is distributed to help others in their research in the field of
16  granular and multiphase flows, but WITHOUT ANY WARRANTY; without even the
17  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 
19 -----------------------------------------------------------------------------*/
20 
21 template<typename T>
23 (
24  const quadruple<T> & oprnd1,
25  const quadruple<T> & oprnd2
26 )
27 {
28  return oprnd1.s_ * oprnd2.s_ +
29  dot(oprnd1.v(), oprnd2.v()) ;
30 }
31 
32 template<typename T>
34 (
35 )const
36 {
37  return sqrt(dot(*this,*this));
38 }
39 
40 template<typename T>
42 (
43 )
44 {
45  T l = length();
46  if( static_cast<real>(l) > smallValue )
47  {
48  *this /= l;
49  }
50 }
51 
52 template<typename T>
54 (
55  const quadruple<T> & oprnd1,
56  const quadruple<T> & oprnd2
57 )
58 {
59  return quadruple<T>(
60  oprnd1.s_ + oprnd2.s_,
61  oprnd1.v_ + oprnd2.v_
62  );
63 }
64 
65 
66 template<typename T>
68 (
69  const quadruple<T> & oprnd1,
70  const T & oprnd2
71 )
72 {
73  return quadruple<T>(
74  oprnd1.s_ + oprnd2,
75  oprnd1.v_ + oprnd2
76  );
77 }
78 
79 template<typename T>
81 (
82  const T & oprnd1,
83  const quadruple<T> & oprnd2
84 )
85 {
86  return quadruple<T>(
87  oprnd1 + oprnd2.s_,
88  oprnd1 + oprnd2.v_
89  );
90 }
91 
92 
93 template<typename T>
95 (
96  const quadruple<T> & oprnd1,
97  const quadruple<T> & oprnd2
98 )
99 {
100  return quadruple<T>(
101  oprnd1.s_ - oprnd2.s_,
102  oprnd1.v_ - oprnd2.v_
103  );
104 }
105 
106 
107 template<typename T>
109 (
110  const quadruple<T> & oprnd1,
111  const T & oprnd2
112 )
113 {
114  return quadruple<T>(
115  oprnd1.s_ - oprnd2,
116  oprnd1.v_ - oprnd2
117  );
118 }
119 
120 template<typename T>
122 (
123  const T & oprnd1,
124  const quadruple<T> & oprnd2
125 )
126 {
127  return quadruple<T>(
128  oprnd1 - oprnd2.s_,
129  oprnd1 - oprnd2.v_
130  );
131 }
132 
133 
134 template<typename T>
136 (
137  const quadruple<T> & oprnd1,
138  const quadruple<T> & oprnd2
139 )
140 {
141  return quadruple<T>(
142  oprnd1.s_ * oprnd2.s_,
143  oprnd1.v_ * oprnd2.v_
144  );
145 }
146 
147 
148 template<typename T>
150 (
151  const quadruple<T> & oprnd1,
152  const T & oprnd2
153 )
154 {
155  return quadruple<T>(
156  oprnd1.s_ * oprnd2,
157  oprnd1.v_ * oprnd2
158  );
159 }
160 
161 template<typename T>
163 (
164  const T & oprnd1,
165  const quadruple<T> & oprnd2
166 )
167 {
168  return quadruple<T>(
169  oprnd1 * oprnd2.s_,
170  oprnd1 * oprnd2.v_
171  );
172 }
173 
174 
175 template<typename T>
177 (
178  const quadruple<T> & oprnd1,
179  const quadruple<T> & oprnd2
180 )
181 {
182  return quadruple<T>(
183  oprnd1.s_ / oprnd2.s_,
184  oprnd1.v_ / oprnd2.v_
185  );
186 }
187 
188 
189 template<typename T>
191 (
192  const quadruple<T> & oprnd1,
193  const T & oprnd2
194 )
195 {
196  return quadruple<T>(
197  oprnd1.s_ / oprnd2,
198  oprnd1.v_ / oprnd2
199  );
200 }
201 
202 template<typename T>
204 (
205  const T & oprnd1,
206  const quadruple<T> & oprnd2
207 )
208 {
209  return quadruple<T>(
210  oprnd1 / oprnd2.s_,
211  oprnd1 / oprnd2.v_
212  );
213 }
214 
215 template<typename T>
217 (
218  const quadruple<T> & oprnd2
219 )
220 {
221  this->s_ += oprnd2.s_;
222  this->v_ += oprnd2.v_;
223 }
224 
225 template<typename T>
227 (
228  const quadruple<T> & oprnd2
229 )
230 {
231  this->s_ -= oprnd2.s_;
232  this->v_ -= oprnd2.v_;
233 
234 }
235 
236 template<typename T>
238 (
239  const quadruple<T> & oprnd2
240 )
241 {
242  this->s_ *= oprnd2.s_;
243  this->v_ *= oprnd2.v_;
244 }
245 
246 template<typename T>
248 (
249  const quadruple<T> & oprnd2
250 )
251 {
252  this->s_ /= oprnd2.s_;
253  this->v_ /= oprnd2.v_;
254 
255 }
256 
257 template<typename T>
259 (
260 ) const
261 {
262  return quadruple<T>(-this->s_, -this->v_);
263 }
264 
265 template<typename T>
267 (
268 ) const
269 {
270  return *this;
271 }
272 
273 
274 template<typename T>
275 INLINE_FUNCTION_HD bool pFlow::operator ==
276 (
277  const quadruple<T> &opr1,
278  const quadruple<T> &opr2
279 ){
280  return equal(opr1.s_, opr2.s_) && equal(opr1.v_, opr2.v_);
281 };
282 
283 template<typename T>
284 INLINE_FUNCTION_H pFlow::iOstream& pFlow::operator <<
285 (
286  iOstream & str,
287  const quadruple<T> & ov
288 )
289 {
290 
291  str << token::BEGIN_LIST << ov.w()
292  << token::SPACE << ov.x()
293  << token::SPACE << ov.y()
294  << token::SPACE << ov.z()
295  << token::END_LIST;
296 
297  str.check(FUNCTION_NAME);
298 
299  return str;
300 }
301 
302 template<typename T>
303 INLINE_FUNCTION_H pFlow::iIstream& pFlow::operator >>
304 (
305  iIstream & str,
306  quadruple<T> & iv
307 )
308 {
309 
310  str.readBegin("quadruple<T>");
311 
312  str >> iv.w();
313  str >> iv.x();
314  str >> iv.y();
315  str >> iv.z();
316 
317  str.readEnd("quadruple<T>");
318 
319  str.check(FUNCTION_NAME);
320 
321  return str;
322 }
323 
324 template<typename T>
326 (
327  iIstream & str,
328  quadruple<T> & iv
329 )
330 {
331 
332  str.readBegin("quadruple<T>");
333  T val;
334 
335  readIstream(str, val);
336  iv.w() = val;
337 
338  readIstream(str, val);
339  iv.x() = val;
340 
341  readIstream(str, val);
342  iv.y() = val;
343 
344  readIstream(str, val);
345  iv.z() = val;
346 
347  str.readEnd("quadruple<T>");
348 
349  str.check(FUNCTION_NAME);
350 
351 }
pFlow::iIstream::readBegin
bool readBegin(const char *funcName)
Definition: iIstream.cpp:203
pFlow::real
float real
Definition: builtinTypes.hpp:46
pFlow::smallValue
const real smallValue
Definition: numericConstants.hpp:33
pFlow::quadruple::length
INLINE_FUNCTION_HD T length() const
Definition: quadrupleI.hpp:34
pFlow::quadruple::v_
triple< T > v_
Definition: quadruple.hpp:49
pFlow::quadruple::normalize
INLINE_FUNCTION_HD void normalize()
Definition: quadrupleI.hpp:42
FUNCTION_NAME
#define FUNCTION_NAME
Definition: pFlowMacros.hpp:29
pFlow::quadruple::s_
T s_
Definition: quadruple.hpp:48
pFlow::IOstream::check
virtual bool check(const char *operation) const
Definition: IOstream.cpp:42
dot
INLINE_FUNCTION_HD T dot(const quadruple< T > &oprnd1, const quadruple< T > &oprnd2)
pFlow::iIstream
Definition: iIstream.hpp:33
length
INLINE_FUNCTION_HD T length(const triple< T > &v1)
INLINE_FUNCTION_H
#define INLINE_FUNCTION_H
Definition: pFlowMacros.hpp:53
readIstream
INLINE_FUNCTION_H void readIstream(iIstream &str, quadruple< T > &iv)
pFlow::quadruple
Definition: quadruple.hpp:37
pFlow::sqrt
INLINE_FUNCTION_HD real sqrt(real x)
Definition: math.hpp:148
INLINE_FUNCTION_HD
#define INLINE_FUNCTION_HD
Definition: pFlowMacros.hpp:51
pFlow::iOstream
Definition: iOstream.hpp:53
pFlow::equal
INLINE_FUNCTION_HD bool equal(const real &s1, const real &s2)
Definition: bTypesFunctions.hpp:188