Memosa-FVM  0.2
StructureDeformationModel< T > Class Template Reference

#include <StructureDeformationModel.h>

Inheritance diagram for StructureDeformationModel< T >:
Collaboration diagram for StructureDeformationModel< T >:

Public Types

typedef Array< T > TArray
 
typedef Vector< T, 3 > VectorT3
 
typedef Array< VectorT3VectorT3Array
 

Public Member Functions

 StructureDeformationModel (GeomFields &geomFields, StructureFields &structureFields, const MeshList &meshes)
 
virtual ~StructureDeformationModel ()
 
void calculateNodeDisplacement ()
 
void deformStructure ()
 
void deformMeshStructure ()
 
void updateBoundaryMesh (const Mesh &mesh, Mesh &bMesh, Field &velocityField, const double timeStep)
 
void updateBoundaryMesh (const Mesh &mesh, Mesh &bMesh, Field &velocityField, const map< int, int > &commonFacesMap, const double timeStep)
 
const ArrayBasegetCommon (const StorageSite &site, const StorageSite &osite)
 
void init ()
 
void updateTime ()
 
- Public Member Functions inherited from Model
 Model (const MeshList &meshes)
 
virtual ~Model ()
 
 DEFINE_TYPENAME ("Model")
 
virtual map< string,
shared_ptr< ArrayBase > > & 
getPersistenceData ()
 
virtual void restart ()
 

Private Attributes

GeomFields_geomFields
 
StructureFields_structureFields
 
const MeshList _meshes
 

Additional Inherited Members

- Protected Attributes inherited from Model
const MeshList _meshes
 
StorageSiteList _varSites
 
StorageSiteList _fluxSites
 
map< string, shared_ptr
< ArrayBase > > 
_persistenceData
 

Detailed Description

template<class T>
class StructureDeformationModel< T >

Definition at line 21 of file StructureDeformationModel.h.

Member Typedef Documentation

template<class T >
typedef Array<T> StructureDeformationModel< T >::TArray

Definition at line 24 of file StructureDeformationModel.h.

template<class T >
typedef Vector<T,3> StructureDeformationModel< T >::VectorT3

Definition at line 25 of file StructureDeformationModel.h.

template<class T >
typedef Array<VectorT3> StructureDeformationModel< T >::VectorT3Array

Definition at line 26 of file StructureDeformationModel.h.

Constructor & Destructor Documentation

template<class T >
StructureDeformationModel< T >::StructureDeformationModel ( GeomFields geomFields,
StructureFields structureFields,
const MeshList meshes 
)
inline

Definition at line 28 of file StructureDeformationModel.h.

References logCtor.

30  :
31  Model(meshes),
32  _geomFields(geomFields),
33  _structureFields(structureFields),
34  _meshes(meshes)
35  {
36  logCtor();
37  }
Model(const MeshList &meshes)
Definition: Model.cpp:8
#define logCtor()
Definition: RLogInterface.h:26
template<class T >
virtual StructureDeformationModel< T >::~StructureDeformationModel ( )
inlinevirtual

Definition at line 39 of file StructureDeformationModel.h.

39 {}

Member Function Documentation

template<class T >
void StructureDeformationModel< T >::calculateNodeDisplacement ( )
inline

Definition at line 41 of file StructureDeformationModel.h.

References StructureDeformationModel< T >::_geomFields, StructureDeformationModel< T >::_meshes, StructureDeformationModel< T >::_structureFields, GeomFields::coordinate, StructureFields::deformation, Mesh::getCellNodes(), Mesh::getCells(), StorageSite::getCount(), CRConnectivity::getCount(), Mesh::getNodes(), CRConnectivity::getTranspose(), mag(), and GeomFields::nodeDisplacement.

42  {
43  const int numMeshes = _meshes.size();
44  for (int m=0;m<numMeshes;m++)
45  {
46  const Mesh& mesh = *_meshes[m];
47  const StorageSite& nodes = mesh.getNodes();
48  const StorageSite& cells = mesh.getCells();
49  const int nNodes = nodes.getCount();
50  const CRConnectivity& cellNodes = mesh.getCellNodes();
51  shared_ptr<CRConnectivity> nodeCellsPtr = cellNodes.getTranspose();
52  CRConnectivity& nodeCells = *nodeCellsPtr;
53  const VectorT3Array& nodeCoordinate =
54  dynamic_cast<const VectorT3Array&>(_geomFields.coordinate[nodes]);
55  const VectorT3Array& cellCentroid =
56  dynamic_cast<const VectorT3Array&> (_geomFields.coordinate[cells]);
57  const VectorT3Array& cellDisplacement =
58  dynamic_cast<const VectorT3Array&>(_structureFields.deformation[cells]);
59  VectorT3Array& nodeDisplacement =
60  dynamic_cast<VectorT3Array&>(_geomFields.nodeDisplacement[nodes]);
61  const T one(1.0);
62 
63  for(int j=0;j<nNodes;j++)
64  {
66  T weight(0.0);
67  for(int k=0;k<nodeCells.getCount(j);k++)
68  {
69  const int num = nodeCells(j,k);
70  const VectorT3 ds = cellCentroid[num]-nodeCoordinate[j];
71  dr += cellDisplacement[num]/mag(ds);
72  weight += one/mag(ds);
73  }
74  dr = dr/weight;
75  nodeDisplacement[j] = dr;
76  }
77  }
78  }
int getCount(const int i) const
Field coordinate
Definition: GeomFields.h:19
const StorageSite & getNodes() const
Definition: Mesh.h:110
Field nodeDisplacement
Definition: GeomFields.h:33
Definition: Mesh.h:49
T mag(const Vector< T, 3 > &a)
Definition: Vector.h:260
const StorageSite & getCells() const
Definition: Mesh.h:109
shared_ptr< CRConnectivity > getTranspose() const
int getCount() const
Definition: StorageSite.h:39
const CRConnectivity & getCellNodes() const
Definition: Mesh.cpp:426
template<class T >
void StructureDeformationModel< T >::deformMeshStructure ( )
inline

Definition at line 104 of file StructureDeformationModel.h.

References StructureDeformationModel< T >::_geomFields, StructureDeformationModel< T >::_meshes, GeomFields::coordinate, GeomFields::coordinate0, GeomFields::coordinateK1, GeomFields::displacementOptions, StorageSite::getCount(), Mesh::getNodes(), and GeomFields::nodeDisplacement.

105  {
106  const int numMeshes = _meshes.size();
107  for (int n=0;n<numMeshes;n++)
108  {
109  const Mesh& mesh = *_meshes[n];
110  const StorageSite& nodes = mesh.getNodes();
111  const int nNodes = nodes.getCount();
112  const Array<int>& displacementOptions =
113  dynamic_cast<Array<int>& > (_geomFields.displacementOptions[nodes]);
114  VectorT3Array& nodeCoord =
115  dynamic_cast<VectorT3Array&>(_geomFields.coordinate[nodes]);
116  const VectorT3Array& nodeCoord0 =
117  dynamic_cast<const VectorT3Array&>(_geomFields.coordinate0[nodes]);
118  VectorT3Array& nodeDisplacement =
119  dynamic_cast<VectorT3Array&>(_geomFields.nodeDisplacement[nodes]);
120  VectorT3Array& nodeCoordK1 =
121  dynamic_cast<VectorT3Array&>(_geomFields.coordinateK1[nodes]);
122  nodeCoordK1 = nodeCoord;
123  for (int i=0;i<nNodes;i++)
124  {
125  if(displacementOptions[i] == 3)
126  {
127  nodeCoord[i] = nodeCoord0[i] + nodeDisplacement[i];
128  }
129  }
130  }
131  }
Field displacementOptions
Definition: GeomFields.h:37
Field coordinate
Definition: GeomFields.h:19
Field coordinateK1
Definition: GeomFields.h:22
const StorageSite & getNodes() const
Definition: Mesh.h:110
Field nodeDisplacement
Definition: GeomFields.h:33
Definition: Mesh.h:49
Field coordinate0
Definition: GeomFields.h:21
int getCount() const
Definition: StorageSite.h:39
template<class T >
void StructureDeformationModel< T >::deformStructure ( )
inline

Definition at line 80 of file StructureDeformationModel.h.

References StructureDeformationModel< T >::_geomFields, StructureDeformationModel< T >::_meshes, GeomFields::coordinate, GeomFields::coordinate0, GeomFields::coordinateK1, StorageSite::getCount(), Mesh::getNodes(), and GeomFields::nodeDisplacement.

81  {
82  const int numMeshes = _meshes.size();
83  for (int n=0;n<numMeshes;n++)
84  {
85  const Mesh& mesh = *_meshes[n];
86  const StorageSite& nodes = mesh.getNodes();
87  const int nNodes = nodes.getCount();
88  VectorT3Array& nodeCoord =
89  dynamic_cast<VectorT3Array&>(_geomFields.coordinate[nodes]);
90  const VectorT3Array& nodeCoord0 =
91  dynamic_cast<const VectorT3Array&>(_geomFields.coordinate0[nodes]);
92  VectorT3Array& nodeDisplacement =
93  dynamic_cast<VectorT3Array&>(_geomFields.nodeDisplacement[nodes]);
94  VectorT3Array& nodeCoordK1 =
95  dynamic_cast<VectorT3Array&>(_geomFields.coordinateK1[nodes]);
96  nodeCoordK1 = nodeCoord;
97  for (int i=0;i<nNodes;i++)
98  {
99  nodeCoord[i] = nodeCoord0[i] + nodeDisplacement[i];
100  }
101  }
102  }
Field coordinate
Definition: GeomFields.h:19
Field coordinateK1
Definition: GeomFields.h:22
const StorageSite & getNodes() const
Definition: Mesh.h:110
Field nodeDisplacement
Definition: GeomFields.h:33
Definition: Mesh.h:49
Field coordinate0
Definition: GeomFields.h:21
int getCount() const
Definition: StorageSite.h:39
template<class T >
const ArrayBase& StructureDeformationModel< T >::getCommon ( const StorageSite site,
const StorageSite osite 
)
inline

Definition at line 254 of file StructureDeformationModel.h.

References StorageSite::getCommonMap().

255  {
256 
257  const StorageSite::CommonMap& commonMap = site.getCommonMap();
258  //cout<<"\n The size of commonMap is "<<commonMap.size()<<"\n";
259 
260  const Array<int>& myNodeIndices =
261  *(site.getCommonMap().find(&osite)->second);
262  return myNodeIndices;
263  }
const CommonMap & getCommonMap() const
Definition: StorageSite.h:60
map< const StorageSite *, shared_ptr< Array< int > > > CommonMap
Definition: StorageSite.h:25
template<class T >
void StructureDeformationModel< T >::init ( )
inlinevirtual

Implements Model.

Definition at line 265 of file StructureDeformationModel.h.

References StructureDeformationModel< T >::_geomFields, StructureDeformationModel< T >::_meshes, Field::addArray(), GeomFields::coordinate, GeomFields::coordinate0, GeomFields::coordinateK1, StorageSite::getCount(), Mesh::getNodes(), Array< T >::newCopy(), GeomFields::nodeDisplacement, and GeomFields::nodeDisplacementN1.

266  {
267  const int numMeshes = _meshes.size();
268  for (int n=0;n<numMeshes;n++)
269  {
270  const Mesh& mesh = *_meshes[n];
271  const StorageSite& nodes = mesh.getNodes();
272  VectorT3Array& nodeCoord =
273  dynamic_cast<VectorT3Array&>(_geomFields.coordinate[nodes]);
275  dynamic_pointer_cast<ArrayBase>(nodeCoord.newCopy()));
276 
278  dynamic_pointer_cast<ArrayBase>(nodeCoord.newCopy()));
279 
280  shared_ptr<VectorT3Array>
281  nodeDisplacement(new VectorT3Array(nodes.getCount()));
282  nodeDisplacement->zero();
283  _geomFields.nodeDisplacement.addArray(nodes,nodeDisplacement);
284 
285  shared_ptr<VectorT3Array>
286  nodeDisplacementN1(new VectorT3Array(nodes.getCount()));
287  nodeDisplacementN1->zero();
288 
290  nodeDisplacementN1);
291  }
292  }
Field coordinate
Definition: GeomFields.h:19
Field coordinateK1
Definition: GeomFields.h:22
const StorageSite & getNodes() const
Definition: Mesh.h:110
Field nodeDisplacement
Definition: GeomFields.h:33
Definition: Mesh.h:49
Field nodeDisplacementN1
Definition: GeomFields.h:34
void addArray(const StorageSite &, shared_ptr< ArrayBase > a)
Definition: Field.cpp:72
Field coordinate0
Definition: GeomFields.h:21
int getCount() const
Definition: StorageSite.h:39
virtual shared_ptr< IContainer > newCopy() const
Definition: Array.h:483
template<class T >
void StructureDeformationModel< T >::updateBoundaryMesh ( const Mesh mesh,
Mesh bMesh,
Field velocityField,
const double  timeStep 
)
inline

Definition at line 136 of file StructureDeformationModel.h.

References StructureDeformationModel< T >::_geomFields, Field::addArray(), GeomFields::coordinate, Mesh::getAllFaceGroups(), StorageSite::getCommonMap(), StorageSite::getCount(), CRConnectivity::getCount(), Mesh::getFaceNodes(), Mesh::getFaces(), Array< T >::getLength(), Mesh::getNodeCoordinates(), Mesh::getNodes(), Vector< T, 3 >::getZero(), FaceGroup::groupType, GeomFields::nodeDisplacement, GeomFields::nodeDisplacementN1, and FaceGroup::site.

139  {
140  // update node coords
141  const StorageSite& bMeshNodes = bMesh.getNodes();
142 
143 
144  const StorageSite& nodes = mesh.getNodes();
145 
146  const VectorT3Array& nodeCoord =
147  dynamic_cast<const VectorT3Array&>(_geomFields.coordinate[nodes]);
148 
149  VectorT3Array& bNodeCoord =
150  dynamic_cast<VectorT3Array&>(_geomFields.coordinate[bMeshNodes]);
151 
152  VectorT3Array& bMeshCoord = bMesh.getNodeCoordinates();
153 
154  const Array<int>& myNodeIndices =
155  *(bMeshNodes.getCommonMap().find(&nodes)->second);
156  const Array<int>& bNodeIndices =
157  *(nodes.getCommonMap().find(&bMeshNodes)->second);
158 
159  const int nCommon = myNodeIndices.getLength();
160  for(int n=0; n<nCommon; n++)
161  {
162  bNodeCoord[bNodeIndices[n]] = nodeCoord[myNodeIndices[n]];
163  bMeshCoord[bNodeIndices[n]] = nodeCoord[myNodeIndices[n]];
164  }
165 
166 
167 
168  // update face velocity
169 
170  const StorageSite& bMeshFaces = bMesh.getFaces();
171 
172  shared_ptr<VectorT3Array>
173  bVelocity(new VectorT3Array(bMeshFaces.getCount()));
174 
175  velocityField.addArray(bMeshFaces,bVelocity);
176 
177  VectorT3Array& w =
178  dynamic_cast<VectorT3Array&>(_geomFields.nodeDisplacement[nodes]);
179  VectorT3Array& wN1 =
180  dynamic_cast<VectorT3Array&>(_geomFields.nodeDisplacementN1[nodes]);
181 
182  int bMeshFaceCount=0;
183 
184  foreach(const FaceGroupPtr fgPtr, mesh.getAllFaceGroups())
185  {
186  const FaceGroup& fg = *fgPtr;
187  const StorageSite& faces = fg.site;
188  if (fg.groupType!="interior")
189  {
190  const int nFaces = faces.getCount();
191  const CRConnectivity& faceNodes = mesh.getFaceNodes(faces);
192  for(int f=0; f<nFaces; f++)
193  {
194  const int nFaceNodes = faceNodes.getCount(f);
196 
197  for(int nn=0; nn<nFaceNodes; nn++)
198  {
199  const int node = faceNodes(f,nn);
200  VectorT3 vn = (w[node] - wN1[node])/timeStep;
201  vf += vn;
202  }
203  vf /= nFaceNodes;
204  (*bVelocity)[bMeshFaceCount] = vf;
205  bMeshFaceCount++;
206  }
207  }
208  }
209  }
int getCount(const int i) const
shared_ptr< FaceGroup > FaceGroupPtr
Definition: Mesh.h:46
Field coordinate
Definition: GeomFields.h:19
Definition: Mesh.h:28
const FaceGroupList & getAllFaceGroups() const
Definition: Mesh.h:193
const StorageSite & getNodes() const
Definition: Mesh.h:110
Field nodeDisplacement
Definition: GeomFields.h:33
const CRConnectivity & getFaceNodes(const StorageSite &site) const
Definition: Mesh.cpp:402
const CommonMap & getCommonMap() const
Definition: StorageSite.h:60
string groupType
Definition: Mesh.h:42
const Array< VecD3 > & getNodeCoordinates() const
Definition: Mesh.h:218
const StorageSite & getFaces() const
Definition: Mesh.h:108
Field nodeDisplacementN1
Definition: GeomFields.h:34
void addArray(const StorageSite &, shared_ptr< ArrayBase > a)
Definition: Field.cpp:72
int getCount() const
Definition: StorageSite.h:39
static Vector getZero()
Definition: Vector.h:182
StorageSite site
Definition: Mesh.h:40
int getLength() const
Definition: Array.h:87
template<class T >
void StructureDeformationModel< T >::updateBoundaryMesh ( const Mesh mesh,
Mesh bMesh,
Field velocityField,
const map< int, int > &  commonFacesMap,
const double  timeStep 
)
inline

Definition at line 214 of file StructureDeformationModel.h.

References StructureDeformationModel< T >::_geomFields, Field::addArray(), Mesh::getBoundaryFaceGroups(), StorageSite::getCount(), CRConnectivity::getCount(), Mesh::getFaceNodes(), Mesh::getFaces(), Mesh::getNodes(), StorageSite::getOffset(), Vector< T, 3 >::getZero(), GeomFields::nodeDisplacement, GeomFields::nodeDisplacementN1, and FaceGroup::site.

217  {
218  // update face velocity
219  const StorageSite& bMeshFaces = bMesh.getFaces();
220  shared_ptr<VectorT3Array>
221  bVelocity(new VectorT3Array(bMeshFaces.getCount()));
222  bVelocity->zero();
223 
224  velocityField.addArray(bMeshFaces,bVelocity);
225 
226  const StorageSite& nodes = mesh.getNodes();
227  VectorT3Array& w =
228  dynamic_cast<VectorT3Array&>(_geomFields.nodeDisplacement[nodes]);
229  VectorT3Array& wN1 =
230  dynamic_cast<VectorT3Array&>(_geomFields.nodeDisplacementN1[nodes]);
231 
232  foreach(const FaceGroupPtr fgPtr, mesh.getBoundaryFaceGroups()){
233  const FaceGroup& fg = *fgPtr;
234  const StorageSite& faces = fg.site;
235  const int nFaces = faces.getCount();
236  const CRConnectivity& faceNodes = mesh.getFaceNodes(faces);
237  for(int f=0; f<nFaces; f++){
238  const int faceID = f + faces.getOffset();
239  const int nFaceNodes = faceNodes.getCount(f);
241 
242  for(int nn=0; nn<nFaceNodes; nn++){
243  const int node = faceNodes(f,nn);
244  VectorT3 vn = (w[node] - wN1[node])/timeStep;
245  vf += vn;
246  }
247  vf /= nFaceNodes;
248  (*bVelocity)[ commonFacesMap.find(faceID)->second ] = vf;
249  }
250  }
251  }
const FaceGroupList & getBoundaryFaceGroups() const
Definition: Mesh.h:187
int getCount(const int i) const
shared_ptr< FaceGroup > FaceGroupPtr
Definition: Mesh.h:46
Definition: Mesh.h:28
const StorageSite & getNodes() const
Definition: Mesh.h:110
Field nodeDisplacement
Definition: GeomFields.h:33
const CRConnectivity & getFaceNodes(const StorageSite &site) const
Definition: Mesh.cpp:402
const StorageSite & getFaces() const
Definition: Mesh.h:108
Field nodeDisplacementN1
Definition: GeomFields.h:34
void addArray(const StorageSite &, shared_ptr< ArrayBase > a)
Definition: Field.cpp:72
int getOffset() const
Definition: StorageSite.h:87
int getCount() const
Definition: StorageSite.h:39
static Vector getZero()
Definition: Vector.h:182
StorageSite site
Definition: Mesh.h:40
template<class T >
void StructureDeformationModel< T >::updateTime ( )
inline

Definition at line 294 of file StructureDeformationModel.h.

References StructureDeformationModel< T >::_geomFields, StructureDeformationModel< T >::_meshes, Mesh::getNodes(), GeomFields::nodeDisplacement, and GeomFields::nodeDisplacementN1.

295  {
296  const int numMeshes = _meshes.size();
297  for (int n=0; n<numMeshes; n++)
298  {
299  const Mesh& mesh = *_meshes[n];
300 
301  const StorageSite& nodes = mesh.getNodes();
302  VectorT3Array& w =
303  dynamic_cast<VectorT3Array&>(_geomFields.nodeDisplacement[nodes]);
304  VectorT3Array& wN1 =
305  dynamic_cast<VectorT3Array&>(_geomFields.nodeDisplacementN1[nodes]);
306  wN1 = w;
307  }
308  }
const StorageSite & getNodes() const
Definition: Mesh.h:110
Field nodeDisplacement
Definition: GeomFields.h:33
Definition: Mesh.h:49
Field nodeDisplacementN1
Definition: GeomFields.h:34

Member Data Documentation

template<class T >
StructureFields& StructureDeformationModel< T >::_structureFields
private

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