Memosa-FVM  0.2
ArrowHeadMatrix< X, K > Class Template Reference

#include <ArrowHeadMatrix.h>

Inheritance diagram for ArrowHeadMatrix< X, K >:
Collaboration diagram for ArrowHeadMatrix< X, K >:

Public Types

typedef Array< X > XArray
 
typedef Array< Vector< X, K > > VectorXKArray
 
typedef Array< VectorTranspose
< X, K > > 
TVectorXKArray
 
typedef SquareTensor< X, K > TensorXK
 
typedef Vector< X, K > VectorXK
 
typedef NumTypeTraits< X >
::T_Scalar 
T_Scalar
 
typedef Array< T > TArray
 
typedef NumTypeTraits< T >
::T_Scalar 
T_Scalar
 
- Public Types inherited from MatrixJML< T >
typedef Array< T > TArray
 

Public Member Functions

 ArrowHeadMatrix (const int order)
 
T_ScalargetElement (const int i, const int j)
 
void Solve (XArray &bVec)
 
void zero ()
 
T_Scalar getTraceAbs ()
 
void multiply (const XArray &x, XArray &b)
 
 ArrowHeadMatrix (const int order)
 
T & operator() (const int i, const int j)
 
T & getElement (const int i, const int j)
 
void printElement (const int &i, const int &j)
 
void print ()
 
void Solve (TArray &bVec)
 
void SolveDiag (TArray &bVec)
 
void smoothGS (TArray &bVec)
 
void DummySolve ()
 
void SolveBotCol (TArray &bVec)
 
void zero ()
 
void ones ()
 
getTraceAbs ()
 
void multiply (const TArray &x, TArray &b)
 
- Public Member Functions inherited from MatrixJML< T >
 MatrixJML ()
 
virtual ~MatrixJML ()
 
 MatrixJML ()
 
virtual ~MatrixJML ()
 

Private Attributes

const int _order
 
const int _numDir
 
XArray _d
 
VectorXKArray _r
 
TVectorXKArray _c
 
TensorXK _l
 
VectorXK _bl
 
VectorXK _xl
 
int _elements
 
TArray _values
 
int _order
 

Detailed Description

template<class X, int K>
class ArrowHeadMatrix< X, K >

Definition at line 21 of file esbgkbase/ArrowHeadMatrix.h.

Member Typedef Documentation

template<class X , int K>
typedef NumTypeTraits<T>::T_Scalar ArrowHeadMatrix< X, K >::T_Scalar

Definition at line 19 of file phononbase/ArrowHeadMatrix.h.

template<class X , int K>
typedef NumTypeTraits<X>::T_Scalar ArrowHeadMatrix< X, K >::T_Scalar

Definition at line 30 of file esbgkbase/ArrowHeadMatrix.h.

template<class X , int K>
typedef Array<T> ArrowHeadMatrix< X, K >::TArray

Definition at line 18 of file phononbase/ArrowHeadMatrix.h.

template<class X , int K>
typedef SquareTensor<X,K> ArrowHeadMatrix< X, K >::TensorXK

Definition at line 28 of file esbgkbase/ArrowHeadMatrix.h.

template<class X , int K>
typedef Array<VectorTranspose<X,K> > ArrowHeadMatrix< X, K >::TVectorXKArray

Definition at line 27 of file esbgkbase/ArrowHeadMatrix.h.

template<class X , int K>
typedef Vector<X,K> ArrowHeadMatrix< X, K >::VectorXK

Definition at line 29 of file esbgkbase/ArrowHeadMatrix.h.

template<class X , int K>
typedef Array<Vector<X,K> > ArrowHeadMatrix< X, K >::VectorXKArray

Definition at line 26 of file esbgkbase/ArrowHeadMatrix.h.

template<class X , int K>
typedef Array<X> ArrowHeadMatrix< X, K >::XArray

Definition at line 25 of file esbgkbase/ArrowHeadMatrix.h.

Constructor & Destructor Documentation

template<class X , int K>
ArrowHeadMatrix< X, K >::ArrowHeadMatrix ( const int  order)
inline
template<class X , int K>
ArrowHeadMatrix< X, K >::ArrowHeadMatrix ( const int  order)
inline

Definition at line 21 of file phononbase/ArrowHeadMatrix.h.

References ArrowHeadMatrix< X, K >::_values.

21  :
22  _elements(3*order-2),
24  _order(order)
25  {
26  _values=0.;
27  }

Member Function Documentation

template<class X , int K>
void ArrowHeadMatrix< X, K >::DummySolve ( )
inline

Definition at line 182 of file phononbase/ArrowHeadMatrix.h.

References ArrowHeadMatrix< X, K >::_order.

183  {
184  TArray bVec(_order);
185  bVec=1.;
186  //Replaces bVec with solution vector.
187 
188  T ani;
189  T ain;
190  T aii;
191  T alpha;
192  T beta;
193 
194  alpha=0.;
195  beta=0.;
196 
197  for(int i=1;i<_order;i++)
198  {
199  ani=(*this)(_order,i);
200  aii=(*this)(i,i);
201  ain=(*this)(i,_order);
202  alpha+=ani*bVec[i-1]/aii;
203  beta+=ani*ain/aii;
204  }
205 
206  T bn;
207  bn=(bVec[_order-1]-alpha)/((*this)(_order,_order)-beta);
208 
209  for(int i=1;i<_order;i++)
210  {
211  ain=(*this)(i,_order);
212  aii=(*this)(i,i);
213  bVec[i-1]=(bVec[i-1]-ain*bn)/aii;
214  }
215 
216  bVec[_order-1]=bn;
217  }
template<class X , int K>
T_Scalar& ArrowHeadMatrix< X, K >::getElement ( const int  i,
const int  j 
)
inlinevirtual

Implements MatrixJML< T >.

Definition at line 50 of file esbgkbase/ArrowHeadMatrix.h.

References ArrowHeadMatrix< X, K >::_c, ArrowHeadMatrix< X, K >::_d, ArrowHeadMatrix< X, K >::_l, ArrowHeadMatrix< X, K >::_numDir, ArrowHeadMatrix< X, K >::_order, and ArrowHeadMatrix< X, K >::_r.

Referenced by COMETESBGKDiscretizer< T >::COMETConvection(), COMETDiscretizer< T >::COMETConvectionCoarse(), COMETESBGKDiscretizer< T >::COMETConvectionFine(), COMETDiscretizer< T >::COMETConvectionFine(), and ArrowHeadMatrix< X, K >::SolveBotCol().

51  {
52  int index;
53  if(i<=_numDir)
54  {
55  index=(i-1);
56  if(i==j)
57  return _d[index];
58  else
59  return _c[index][j-_order+2];
60  }
61  else
62  {
63  index=(j-1);
64  if(j<=_order-3)
65  return (_r[index])[i-_order+2];
66  else
67  return _l(i-_order+2,j-_order+2);
68  }
69  }
template<class X , int K>
T& ArrowHeadMatrix< X, K >::getElement ( const int  i,
const int  j 
)
inlinevirtual

Implements MatrixJML< T >.

Definition at line 54 of file phononbase/ArrowHeadMatrix.h.

References ArrowHeadMatrix< X, K >::_order, and ArrowHeadMatrix< X, K >::_values.

55  {
56  int index;
57  if(i==j)
58  {
59  index=(i-1);
60  return _values[index];
61  }
62  else if(j==_order)
63  {
64  index=i-1+_order;
65  return _values[index];
66  }
67  else if(i==_order)
68  {
69  index=2*_order+j-2;
70  return _values[index];
71  }
72  else
73  {
74  throw CException("Invalid index: Arrowhead matrix");
75  return _values[0];
76  }
77  }
template<class X , int K>
T_Scalar ArrowHeadMatrix< X, K >::getTraceAbs ( )
inline

Definition at line 99 of file esbgkbase/ArrowHeadMatrix.h.

References ArrowHeadMatrix< X, K >::_d, ArrowHeadMatrix< X, K >::_l, ArrowHeadMatrix< X, K >::_order, and fabs().

Referenced by COMETESBGKDiscretizer< T >::findResid(), COMETDiscretizer< T >::findResidCoarse(), COMETDiscretizer< T >::findResidFine(), COMETESBGKDiscretizer< T >::findResidFine(), and COMETDiscretizer< T >::findResidFull().

100  {
101  T_Scalar trace=0.;
102  for(int i=0;i<_order-3;i++)
103  trace+=fabs(_d[i]);
104  trace+=(fabs(_l(0,0))+fabs(_l(1,1))+fabs(_l(2,2)));
105  return trace;
106  }
NumTypeTraits< X >::T_Scalar T_Scalar
Tangent fabs(const Tangent &a)
Definition: Tangent.h:312
template<class X , int K>
T ArrowHeadMatrix< X, K >::getTraceAbs ( )
inline

Definition at line 242 of file phononbase/ArrowHeadMatrix.h.

References ArrowHeadMatrix< X, K >::_order, ArrowHeadMatrix< X, K >::_values, and fabs().

243  {
244  T trace=0.;
245  for(int i=0;i<_order;i++)
246  trace+=fabs(_values[i]);
247  return trace;
248  }
Tangent fabs(const Tangent &a)
Definition: Tangent.h:312
template<class X , int K>
void ArrowHeadMatrix< X, K >::multiply ( const XArray x,
XArray b 
)
inline

Definition at line 108 of file esbgkbase/ArrowHeadMatrix.h.

References ArrowHeadMatrix< X, K >::_c, ArrowHeadMatrix< X, K >::_d, ArrowHeadMatrix< X, K >::_l, ArrowHeadMatrix< X, K >::_order, ArrowHeadMatrix< X, K >::_r, Array< T >::getLength(), and Array< T >::zero().

Referenced by COMETESBGKDiscretizer< T >::findResid(), COMETDiscretizer< T >::findResidCoarse(), COMETDiscretizer< T >::findResidFine(), COMETESBGKDiscretizer< T >::findResidFine(), and COMETDiscretizer< T >::findResidFull().

109  {
110  int len=x.getLength();
111  if(len==_order)
112  {
113  b.zero();
114  for(int i=0;i<_order-3;i++)
115  b[i]=_d[i]*x[i]+_c[i][0]*x[_order-3]+_c[i][1]*x[_order-2]+_c[i][2]*x[_order-1];
116 
117  b[_order-3]+=_l(0,0)*x[_order-3];
118  b[_order-2]+=_l(1,1)*x[_order-2];
119  b[_order-1]+=_l(2,2)*x[_order-1];
120  for(int i=0;i<_order-3;i++)
121  {
122  b[_order-3]+=_r[i][0]*x[i];
123  b[_order-2]+=_r[i][1]*x[i];
124  b[_order-1]+=_r[i][2]*x[i];
125  }
126  }
127  else
128  throw CException("Array length does not match matrix order!");
129  }
template<class X , int K>
void ArrowHeadMatrix< X, K >::multiply ( const TArray x,
TArray b 
)
inlinevirtual

Implements MatrixJML< T >.

Definition at line 250 of file phononbase/ArrowHeadMatrix.h.

References ArrowHeadMatrix< X, K >::_order, ArrowHeadMatrix< X, K >::_values, Array< T >::getLength(), and Array< T >::zero().

251  { //Ax=b
252  int len=x.getLength();
253  if(len==_order)
254  {
255  b.zero();
256  for(int i=0;i<_order-1;i++)
257  b[i]=_values[i]*x[i]+_values[i-1+_order]*x[_order-1];
258 
259  b[_order-1]+=_values[_order-1]*x[_order-1];
260  for(int i=0;i<_order-1;i++)
261  b[_order-1]+=_values[2*_order+i-2]*x[i];
262  }
263  else
264  throw CException("Array length does not match matrix order!");
265  }
template<class X , int K>
void ArrowHeadMatrix< X, K >::ones ( )
inline

Definition at line 236 of file phononbase/ArrowHeadMatrix.h.

References ArrowHeadMatrix< X, K >::_elements, and ArrowHeadMatrix< X, K >::_values.

237  {
238  for(int i=0;i<_elements;i++)
239  _values[i]=T_Scalar(1);
240  }
NumTypeTraits< X >::T_Scalar T_Scalar
template<class X , int K>
T& ArrowHeadMatrix< X, K >::operator() ( const int  i,
const int  j 
)
inline

Definition at line 29 of file phononbase/ArrowHeadMatrix.h.

References ArrowHeadMatrix< X, K >::_order, and ArrowHeadMatrix< X, K >::_values.

30  {
31  int index;
32  if(i==j)
33  {
34  index=(i-1);
35  return _values[index];
36  }
37  else if(j==_order)
38  {
39  index=i-1+_order;
40  return _values[index];
41  }
42  else if(i==_order)
43  {
44  index=2*_order+j-2;
45  return _values[index];
46  }
47  else
48  {
49  throw CException("Invalid index: Arrowhead matrix");
50  return _values[0];
51  }
52  }
template<class X , int K>
void ArrowHeadMatrix< X, K >::print ( )
inline

Definition at line 103 of file phononbase/ArrowHeadMatrix.h.

References ArrowHeadMatrix< X, K >::_order, and ArrowHeadMatrix< X, K >::printElement().

104  {
105  for(int i=1;i<_order+1;i++)
106  {
107  for(int j=1;j<_order+1;j++)
108  {
109  if((i==j)||(i==_order)||(j==_order))
110  {
111  printElement(i,j);
112  cout<<" ";
113  }
114  else
115  cout<<0<<" ";
116  }
117  cout<<endl;
118  }
119  }
void printElement(const int &i, const int &j)
template<class X , int K>
void ArrowHeadMatrix< X, K >::printElement ( const int &  i,
const int &  j 
)
inline

Definition at line 79 of file phononbase/ArrowHeadMatrix.h.

References ArrowHeadMatrix< X, K >::_order, and ArrowHeadMatrix< X, K >::_values.

Referenced by ArrowHeadMatrix< X, K >::print().

80  {
81  int index;
82  if(i==j)
83  {
84  index=(i-1);
85  cout<<_values[index];
86  }
87  else if(j==_order)
88  {
89  index=i-1+_order;
90  cout<<_values[index];
91  }
92  else if(i==_order)
93  {
94  index=2*_order+j-2;
95  cout<<_values[index];
96  }
97  else
98  {
99  throw CException("Invalid index for Arrowhead matrix");
100  }
101  }
template<class X , int K>
void ArrowHeadMatrix< X, K >::smoothGS ( TArray bVec)
inline

Definition at line 167 of file phononbase/ArrowHeadMatrix.h.

References ArrowHeadMatrix< X, K >::_order.

168  {
169  T& dT=bVec[_order-1];
170  T sum(0);
171 
172  for(int i=1;i<_order;i++)
173  {
174  bVec[i-1]=(bVec[i-1]-(*this)(i,_order)*dT)/(*this)(i,i);
175  sum+=(*this)(i,i)*bVec[i-1];
176  }
177 
178  dT=(bVec[_order-1]-sum)/(*this)(_order,_order);
179 
180  }
template<class X , int K>
void ArrowHeadMatrix< X, K >::Solve ( XArray bVec)
inline

Definition at line 71 of file esbgkbase/ArrowHeadMatrix.h.

References ArrowHeadMatrix< X, K >::_bl, ArrowHeadMatrix< X, K >::_c, ArrowHeadMatrix< X, K >::_d, ArrowHeadMatrix< X, K >::_l, ArrowHeadMatrix< X, K >::_numDir, ArrowHeadMatrix< X, K >::_order, ArrowHeadMatrix< X, K >::_r, and ArrowHeadMatrix< X, K >::_xl.

Referenced by COMETESBGKDiscretizer< T >::COMETSolve(), COMETDiscretizer< T >::COMETSolveCoarse(), COMETDiscretizer< T >::COMETSolveFine(), COMETESBGKDiscretizer< T >::COMETSolveFine(), and COMETDiscretizer< T >::COMETSolveFull().

72  {
73  _bl[0]=bVec[_order-3];
74  _bl[1]=bVec[_order-2];
75  _bl[2]=bVec[_order-1];
76  for(int i=0; i<_numDir; i++)
77  {
78  _l-=((_c[i]).getTensor(_r[i]))/_d[i];
79  _bl-=_r[i]*bVec[i]/_d[i];
80  }
81 
82  _xl=_bl/_l;
83 
84  for(int i=0; i<_order-3; i++)
85  bVec[i]=(bVec[i]-_c[i]*_xl)/_d[i];
86  bVec[_order-3]=_xl[0];
87  bVec[_order-2]=_xl[1];
88  bVec[_order-1]=_xl[2];
89  }
template<class X , int K>
void ArrowHeadMatrix< X, K >::Solve ( TArray bVec)
inline

Definition at line 121 of file phononbase/ArrowHeadMatrix.h.

References ArrowHeadMatrix< X, K >::_order.

122  {
123 
124  //Replaces bVec with solution vector.
125 
126  T ani;
127  T ain;
128  T aii;
129  T alpha;
130  T beta;
131 
132  alpha=0.;
133  beta=0.;
134 
135 
136  for(int i=1;i<_order;i++)
137  {
138  ani=(*this)(_order,i);
139  aii=(*this)(i,i);
140  ain=(*this)(i,_order);
141 
142  alpha+=ani*bVec[i-1]/aii;
143  beta+=ani*ain/aii;
144  }
145 
146  T bn;
147  bn=(bVec[_order-1]-alpha)/((*this)(_order,_order)-beta);
148 
149  for(int i=1;i<_order;i++)
150  {
151  ain=(*this)(i,_order);
152  aii=(*this)(i,i);
153  bVec[i-1]=(bVec[i-1]-ain*bn)/aii;
154  }
155 
156  bVec[_order-1]=bn;
157  }
template<class X , int K>
void ArrowHeadMatrix< X, K >::SolveBotCol ( TArray bVec)
inline

Definition at line 219 of file phononbase/ArrowHeadMatrix.h.

References ArrowHeadMatrix< X, K >::_order, and ArrowHeadMatrix< X, K >::getElement().

220  {
221 
222  T sum(0);
223  for(int i=1;i<_order+1;i++)
224  sum+=getElement(_order,i);
225 
226  bVec[_order-1]/=sum;
227 
228  }
T_Scalar & getElement(const int i, const int j)
template<class X , int K>
void ArrowHeadMatrix< X, K >::SolveDiag ( TArray bVec)
inline

Definition at line 159 of file phononbase/ArrowHeadMatrix.h.

References ArrowHeadMatrix< X, K >::_order.

160  {
161  for(int i=1;i<_order;i++)
162  bVec[i-1]/=(*this)(i,i);
163 
164  bVec[_order-1]=0;
165  }
template<class X , int K>
void ArrowHeadMatrix< X, K >::zero ( )
inlinevirtual

Implements MatrixJML< T >.

Definition at line 230 of file phononbase/ArrowHeadMatrix.h.

References ArrowHeadMatrix< X, K >::_elements, and ArrowHeadMatrix< X, K >::_values.

231  {
232  for(int i=0;i<_elements;i++)
233  _values[i]=T_Scalar(0);
234  }
NumTypeTraits< X >::T_Scalar T_Scalar

Member Data Documentation

template<class X , int K>
VectorXK ArrowHeadMatrix< X, K >::_bl
private
template<class X , int K>
int ArrowHeadMatrix< X, K >::_elements
private
template<class X , int K>
const int ArrowHeadMatrix< X, K >::_numDir
private
template<class X , int K>
int ArrowHeadMatrix< X, K >::_order
private

Definition at line 270 of file phononbase/ArrowHeadMatrix.h.

template<class X , int K>
VectorXK ArrowHeadMatrix< X, K >::_xl
private

The documentation for this class was generated from the following file: