www.cemf.ir
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 pFlow::dot(const quadruple<T>& oprnd1, const quadruple<T>& oprnd2)
24 {
25  return oprnd1.s_ * oprnd2.s_ + dot(oprnd1.v(), oprnd2.v());
26 }
27 
28 template<typename T>
31 {
32  return sqrt(dot(*this, *this));
33 }
34 
35 template<typename T>
38 {
39  T l = length();
40  if (static_cast<real>(l) > smallValue)
41  {
42  *this /= l;
43  }
44 }
45 
46 template<typename T>
48 pFlow::operator+(const quadruple<T>& oprnd1, const quadruple<T>& oprnd2)
49 {
50  return quadruple<T>(oprnd1.s_ + oprnd2.s_, oprnd1.v_ + oprnd2.v_);
51 }
52 
53 template<typename T>
55  pFlow::operator+(const quadruple<T>& oprnd1, const T& oprnd2)
56 {
57  return quadruple<T>(oprnd1.s_ + oprnd2, oprnd1.v_ + oprnd2);
58 }
59 
60 template<typename T>
62  pFlow::operator+(const T& oprnd1, const quadruple<T>& oprnd2)
63 {
64  return quadruple<T>(oprnd1 + oprnd2.s_, oprnd1 + oprnd2.v_);
65 }
66 
67 template<typename T>
69 pFlow::operator-(const quadruple<T>& oprnd1, const quadruple<T>& oprnd2)
70 {
71  return quadruple<T>(oprnd1.s_ - oprnd2.s_, oprnd1.v_ - oprnd2.v_);
72 }
73 
74 template<typename T>
76  pFlow::operator-(const quadruple<T>& oprnd1, const T& oprnd2)
77 {
78  return quadruple<T>(oprnd1.s_ - oprnd2, oprnd1.v_ - oprnd2);
79 }
80 
81 template<typename T>
83  pFlow::operator-(const T& oprnd1, const quadruple<T>& oprnd2)
84 {
85  return quadruple<T>(oprnd1 - oprnd2.s_, oprnd1 - oprnd2.v_);
86 }
87 
88 template<typename T>
90 pFlow::operator*(const quadruple<T>& oprnd1, const quadruple<T>& oprnd2)
91 {
92  return quadruple<T>(oprnd1.s_ * oprnd2.s_, oprnd1.v_ * oprnd2.v_);
93 }
94 
95 template<typename T>
97  pFlow::operator*(const quadruple<T>& oprnd1, const T& oprnd2)
98 {
99  return quadruple<T>(oprnd1.s_ * oprnd2, oprnd1.v_ * oprnd2);
100 }
101 
102 template<typename T>
104  pFlow::operator*(const T& oprnd1, const quadruple<T>& oprnd2)
105 {
106  return quadruple<T>(oprnd1 * oprnd2.s_, oprnd1 * oprnd2.v_);
107 }
108 
109 template<typename T>
111 pFlow::operator/(const quadruple<T>& oprnd1, const quadruple<T>& oprnd2)
112 {
113  return quadruple<T>(oprnd1.s_ / oprnd2.s_, oprnd1.v_ / oprnd2.v_);
114 }
115 
116 template<typename T>
118  pFlow::operator/(const quadruple<T>& oprnd1, const T& oprnd2)
119 {
120  return quadruple<T>(oprnd1.s_ / oprnd2, oprnd1.v_ / oprnd2);
121 }
122 
123 template<typename T>
125  pFlow::operator/(const T& oprnd1, const quadruple<T>& oprnd2)
126 {
127  return quadruple<T>(oprnd1 / oprnd2.s_, oprnd1 / oprnd2.v_);
128 }
129 
130 template<typename T>
133 {
134  this->s_ += oprnd2.s_;
135  this->v_ += oprnd2.v_;
136 }
137 
138 template<typename T>
141 {
142  this->s_ -= oprnd2.s_;
143  this->v_ -= oprnd2.v_;
144 }
145 
146 template<typename T>
149 {
150  this->s_ *= oprnd2.s_;
151  this->v_ *= oprnd2.v_;
152 }
153 
154 template<typename T>
157 {
158  this->s_ /= oprnd2.s_;
159  this->v_ /= oprnd2.v_;
160 }
161 
162 template<typename T>
165 {
166  return quadruple<T>(-this->s_, -this->v_);
167 }
168 
169 template<typename T>
172 {
173  return *this;
174 }
175 
176 template<typename T>
178 pFlow::operator==(const quadruple<T>& opr1, const quadruple<T>& opr2)
179 {
180  return equal(opr1.s_, opr2.s_) && equal(opr1.v_, opr2.v_);
181 };
182 
183 template<typename T>
185  pFlow::operator<<(iOstream& str, const quadruple<T>& ov)
186 {
187  str << token::BEGIN_LIST << ov.w() << token::SPACE << ov.x() << token::SPACE
188  << ov.y() << token::SPACE << ov.z() << token::END_LIST;
189 
190  str.check(FUNCTION_NAME);
191 
192  return str;
193 }
194 
195 template<typename T>
197  pFlow::operator>>(iIstream& str, quadruple<T>& iv)
198 {
199  str.readBegin("quadruple<T>");
200 
201  str >> iv.w();
202  str >> iv.x();
203  str >> iv.y();
204  str >> iv.z();
205 
206  str.readEnd("quadruple<T>");
207 
208  str.check(FUNCTION_NAME);
209 
210  return str;
211 }
212 
213 template<typename T>
215 pFlow::readIstream(iIstream& str, quadruple<T>& iv)
216 {
217  str.readBegin("quadruple<T>");
218  T val;
219 
220  readIstream(str, val);
221  iv.w() = val;
222 
223  readIstream(str, val);
224  iv.x() = val;
225 
226  readIstream(str, val);
227  iv.y() = val;
228 
229  readIstream(str, val);
230  iv.z() = val;
231 
232  str.readEnd("quadruple<T>");
233 
234  str.check(FUNCTION_NAME);
235 }
pFlow::iIstream::readBegin
bool readBegin(const char *funcName)
Begin read of data chunk, starts with '('.
Definition: iIstream.cpp:238
pFlow::quadruple::operator-
INLINE_FUNCTION_HD quadruple operator-() const
Definition: quadrupleI.hpp:164
pFlow::real
float real
Definition: builtinTypes.hpp:45
pFlow::smallValue
const real smallValue
Definition: numericConstants.hpp:31
pFlow::quadruple::length
INLINE_FUNCTION_HD T length() const
Definition: quadrupleI.hpp:30
pFlow::quadruple::v_
triple< T > v_
Definition: quadruple.hpp:47
pFlow::sqrt
Vector< T, Allocator > sqrt(const Vector< T, Allocator > &v)
Definition: VectorMath.hpp:90
pFlow::quadruple::normalize
INLINE_FUNCTION_HD void normalize()
Definition: quadrupleI.hpp:37
pFlow::equal
INLINE_FUNCTION_HD bool equal(const box &b1, const box &b2, real tol=smallValue)
Definition: box.hpp:135
pFlow::operator==
INLINE_FUNCTION_HD bool operator==(const box &b1, const box &b2)
Definition: box.hpp:142
pFlow::operator/
fileSystem operator/(const fileSystem &fs1, const fileSystem &fs2)
Definition: fileSystem.cpp:280
FUNCTION_NAME
#define FUNCTION_NAME
Definition: pFlowMacros.hpp:29
pFlow::operator-
array2D< T, nRow, nCol > operator-(const array2D< T, nRow, nCol > &arr1, const array2D< T, nRow, nCol > &arr2)
Definition: array2D.hpp:60
pFlow::quadruple::operator*=
INLINE_FUNCTION_HD void operator*=(const quadruple &oprnd2)
Definition: quadrupleI.hpp:148
pFlow::quadruple::s_
T s_
Definition: quadruple.hpp:46
pFlow::quadruple::operator+=
INLINE_FUNCTION_HD void operator+=(const quadruple &oprnd2)
Definition: quadrupleI.hpp:132
pFlow::IOstream::check
virtual bool check(const char *operation) const
Check IOstream status for given operation.
Definition: IOstream.cpp:42
pFlow::quadruple::operator+
INLINE_FUNCTION_HD quadruple operator+() const
Definition: quadrupleI.hpp:171
dot
INLINE_FUNCTION_HD T dot(const quadruple< T > &oprnd1, const quadruple< T > &oprnd2)
pFlow::iIstream
Interface class for any input stream
Definition: iIstream.hpp:37
length
INLINE_FUNCTION_HD T length(const triple< T > &v1)
pFlow::quadruple::operator-=
INLINE_FUNCTION_HD void operator-=(const quadruple &oprnd2)
Definition: quadrupleI.hpp:140
pFlow::operator>>
INLINE_FUNCTION iIstream & operator>>(iIstream &str, AB3History &ab3)
Definition: AdamsBashforth3.hpp:41
INLINE_FUNCTION_H
#define INLINE_FUNCTION_H
Definition: pFlowMacros.hpp:57
pFlow::operator<<
INLINE_FUNCTION iOstream & operator<<(iOstream &str, const AB3History &ab3)
Definition: AdamsBashforth3.hpp:57
readIstream
INLINE_FUNCTION_H void readIstream(iIstream &str, quadruple< T > &iv)
pFlow::quadruple::operator/=
INLINE_FUNCTION_HD void operator/=(const quadruple &oprnd2)
Definition: quadrupleI.hpp:156
pFlow::operator*
array2D< T, nRow, nCol > operator*(const array2D< T, nRow, nCol > &arr1, const array2D< T, nRow, nCol > &arr2)
Definition: array2D.hpp:73
pFlow::quadruple
Definition: quadruple.hpp:36
INLINE_FUNCTION_HD
#define INLINE_FUNCTION_HD
Definition: pFlowMacros.hpp:55
pFlow::iOstream
Interface class for any output stream.
Definition: iOstream.hpp:59
pFlow::operator+
message operator+(message::EVENT evnt1, message::EVENT evnt2)
Definition: message.hpp:216