Memosa-FVM  0.2
TractionVal.h
Go to the documentation of this file.
1 // This file os part of FVM
2 // Copyright (c) 2012 FVM Authors
3 // See LICENSE file for terms.
4 
5 #ifndef _TRACTIONVAL_H_
6 #define _TRACTIONVAL_H_
7 
8 #include <map>
9 #include "misc.h"
10 #include "GeomFields.h"
11 #include "Vector.h"
12 #include "NumType.h"
13 #include "StorageSite.h"
14 #include "FloatVarDict.h"
15 class Field;
16 
17 /*
18  * Nine stress components should be provided as arguments in the order:
19  * TractionXX,TractionXY,TractionXZ,TractionYX,TractionYY,TractionYZ,
20  * TractionZX,TractionZY,TractionZZ. These components can be provided either
21  * as fields or as values. However, all of TractionXX,TractionXY,and TractionXZ
22  * should be either fields or values. Similarly, all of TractionYX,TractionYY,
23  * and TractionYZ should either be fields or values. The same holds true for
24  * TractionZX,TractionZY,and TractionZZ.
25  */
26 
27 template <class T>
29 {
30 public:
32  const FloatVal<T>& fval1,
33  const FloatVal<T>& fval2,
34  const FloatVal<T>& fval3,
35  const FloatVal<T>& fval4,
36  const FloatVal<T>& fval5,
37  const FloatVal<T>& fval6,
38  const FloatVal<T>& fval7,
39  const FloatVal<T>& fval8,
40  const GeomFields& geomFields,
41  const StorageSite& site) :
42  _faceArea(dynamic_cast<const Array<Vector<T,3> >&>(geomFields.area[site])),
43  _faceAreaMag(dynamic_cast<const Array<T>&>(geomFields.areaMag[site])),
44  _isField0(fval0.field != 0),
45  _isField1(fval4.field != 0),
46  _isField2(fval8.field != 0),
47  _arrayPtr0(),
48  _arrayPtr1(),
49  _arrayPtr2(),
50  _arrayPtr3(),
51  _arrayPtr4(),
52  _arrayPtr5(),
53  _arrayPtr6(),
54  _arrayPtr7(),
55  _arrayPtr8()
56  {
57  if (_isField0)
58  {
59  _arrayPtr0 = dynamic_pointer_cast<Array<T> >(fval0.field->getArrayPtr(site));
60  _arrayPtr1 = dynamic_pointer_cast<Array<T> >(fval1.field->getArrayPtr(site));
61  _arrayPtr2 = dynamic_pointer_cast<Array<T> >(fval2.field->getArrayPtr(site));
62  }
63  else
64  {
65  _constant0[0] = fval0.constant;
66  _constant0[1] = fval1.constant;
67  _constant0[2] = fval2.constant;
68  }
69  if (_isField1)
70  {
71  _arrayPtr3 = dynamic_pointer_cast<Array<T> >(fval3.field->getArrayPtr(site));
72  _arrayPtr4 = dynamic_pointer_cast<Array<T> >(fval4.field->getArrayPtr(site));
73  _arrayPtr5 = dynamic_pointer_cast<Array<T> >(fval5.field->getArrayPtr(site));
74  }
75  else
76  {
77  _constant1[0] = fval3.constant;
78  _constant1[1] = fval4.constant;
79  _constant1[2] = fval5.constant;
80  }
81  if (_isField2)
82  {
83  _arrayPtr6 = dynamic_pointer_cast<Array<T> >(fval6.field->getArrayPtr(site));
84  _arrayPtr7 = dynamic_pointer_cast<Array<T> >(fval7.field->getArrayPtr(site));
85  _arrayPtr8 = dynamic_pointer_cast<Array<T> >(fval8.field->getArrayPtr(site));
86  }
87  else
88  {
89  _constant2[0] = fval6.constant;
90  _constant2[1] = fval7.constant;
91  _constant2[2] = fval8.constant;
92  }
93  }
94 
95  const Vector<T,3>& operator[](const int i) const
96  {
97 
99  Vector<T,3> traction0(NumTypeTraits<Vector<T,3> >::getZero());
100  Vector<T,3> traction1(NumTypeTraits<Vector<T,3> >::getZero());
101  Vector<T,3> traction2(NumTypeTraits<Vector<T,3> >::getZero());
102 
103  if (_isField0)
104  {
105  traction0[0] = (*_arrayPtr0)[i];
106  traction0[1] = (*_arrayPtr1)[i];
107  traction0[2] = (*_arrayPtr2)[i];
108  _constant[0] = dot(traction0,en);
109  }
110  else
111  {
112  _constant[0] = dot(_constant0,en);
113  }
114  if (_isField1)
115  {
116  traction1[0] = (*_arrayPtr3)[i];
117  traction1[1] = (*_arrayPtr4)[i];
118  traction1[2] = (*_arrayPtr5)[i];
119  _constant[1] = dot(traction1,en);
120  }
121  else
122  {
123  _constant[1] = dot(_constant1,en);
124  }
125  if (_isField2)
126  {
127  traction2[0] = (*_arrayPtr6)[i];
128  traction2[1] = (*_arrayPtr7)[i];
129  traction2[2] = (*_arrayPtr8)[i];
130  _constant[2] = dot(traction2,en);
131  }
132  else
133  {
134  _constant[2] = dot(_constant2,en);
135  }
136 
137  return _constant;
138  }
139 
140 private:
147  const bool _isField0;
148  const bool _isField1;
149  const bool _isField2;
150  shared_ptr<Array<T> > _arrayPtr0;
151  shared_ptr<Array<T> > _arrayPtr1;
152  shared_ptr<Array<T> > _arrayPtr2;
153  shared_ptr<Array<T> > _arrayPtr3;
154  shared_ptr<Array<T> > _arrayPtr4;
155  shared_ptr<Array<T> > _arrayPtr5;
156  shared_ptr<Array<T> > _arrayPtr6;
157  shared_ptr<Array<T> > _arrayPtr7;
158  shared_ptr<Array<T> > _arrayPtr8;
159 };
160 
161 #endif
Field * field
Definition: FloatVarDict.h:34
const Vector< T, 3 > & operator[](const int i) const
Definition: TractionVal.h:95
const bool _isField0
Definition: TractionVal.h:147
Definition: Vector.h:19
shared_ptr< Array< T > > _arrayPtr8
Definition: TractionVal.h:158
Definition: Field.h:14
const bool _isField1
Definition: TractionVal.h:148
shared_ptr< Array< T > > _arrayPtr4
Definition: TractionVal.h:154
shared_ptr< Array< T > > _arrayPtr5
Definition: TractionVal.h:155
shared_ptr< Array< T > > _arrayPtr1
Definition: TractionVal.h:151
shared_ptr< Array< T > > _arrayPtr3
Definition: TractionVal.h:153
shared_ptr< Array< T > > _arrayPtr7
Definition: TractionVal.h:157
Vector< T, 3 > _constant2
Definition: TractionVal.h:143
Definition: Array.h:14
shared_ptr< Array< T > > _arrayPtr6
Definition: TractionVal.h:156
TractionValEvaluator(const FloatVal< T > &fval0, const FloatVal< T > &fval1, const FloatVal< T > &fval2, const FloatVal< T > &fval3, const FloatVal< T > &fval4, const FloatVal< T > &fval5, const FloatVal< T > &fval6, const FloatVal< T > &fval7, const FloatVal< T > &fval8, const GeomFields &geomFields, const StorageSite &site)
Definition: TractionVal.h:31
const Array< Vector< T, 3 > > & _faceArea
Definition: TractionVal.h:145
shared_ptr< Array< T > > _arrayPtr0
Definition: TractionVal.h:150
const bool _isField2
Definition: TractionVal.h:149
shared_ptr< Array< T > > _arrayPtr2
Definition: TractionVal.h:152
shared_ptr< ArrayBase > getArrayPtr(const StorageSite &)
Definition: Field.cpp:63
T dot(const Vector< T, 3 > &a, const Vector< T, 3 > &b)
Definition: Vector.h:253
const Array< T > & _faceAreaMag
Definition: TractionVal.h:146
Vector< T, 3 > _constant
Definition: TractionVal.h:144
Vector< T, 3 > _constant0
Definition: TractionVal.h:141
Vector< T, 3 > _constant1
Definition: TractionVal.h:142