Memosa-FVM  0.2
PlateDeformationModel< T > Class Template Reference

#include <PlateDeformationModel.h>

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

Public Types

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

Public Member Functions

 PlateDeformationModel (GeomFields &geomFields, PlateFields &plateFields, const MeshList &meshes)
 
virtual ~PlateDeformationModel ()
 
void calculateNodeDisplacement ()
 
void deformPlate ()
 
void deformMeshStructure ()
 
void updateBoundaryMesh (const Mesh &mesh, Mesh &bMesh, const double thickness)
 
void updateBoundaryMesh (const Mesh &mesh, Mesh &bMesh, const double thickness, const double timeStep, Field &velocityField)
 
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
 
PlateFields_plateFields
 
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 PlateDeformationModel< T >

Definition at line 21 of file PlateDeformationModel.h.

Member Typedef Documentation

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

Definition at line 24 of file PlateDeformationModel.h.

template<class T >
typedef Vector<T,3> PlateDeformationModel< T >::VecD3

Definition at line 26 of file PlateDeformationModel.h.

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

Definition at line 25 of file PlateDeformationModel.h.

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

Definition at line 27 of file PlateDeformationModel.h.

Constructor & Destructor Documentation

template<class T >
PlateDeformationModel< T >::PlateDeformationModel ( GeomFields geomFields,
PlateFields plateFields,
const MeshList meshes 
)
inline

Definition at line 29 of file PlateDeformationModel.h.

References logCtor.

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

Definition at line 40 of file PlateDeformationModel.h.

40 {}

Member Function Documentation

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

Definition at line 42 of file PlateDeformationModel.h.

References PlateDeformationModel< T >::_geomFields, PlateDeformationModel< T >::_meshes, PlateDeformationModel< T >::_plateFields, GeomFields::coordinate, GeomFields::coordinate0, PlateFields::deformation, Mesh::getCellNodes(), Mesh::getCells(), StorageSite::getCount(), CRConnectivity::getCount(), Mesh::getNodes(), CRConnectivity::getTranspose(), mag(), and GeomFields::nodeDisplacement.

43  {
44  const int numMeshes = _meshes.size();
45  for (int m=0;m<numMeshes;m++)
46  {
47  const Mesh& mesh = *_meshes[m];
48  const StorageSite& nodes = mesh.getNodes();
49  const StorageSite& cells = mesh.getCells();
50  const int nNodes = nodes.getCount();
51  const CRConnectivity& cellNodes = mesh.getCellNodes();
52  shared_ptr<CRConnectivity> nodeCellsPtr = cellNodes.getTranspose();
53  CRConnectivity& nodeCells = *nodeCellsPtr;
54  const VectorT3Array& nodeCoordinate0 =
55  dynamic_cast<const VectorT3Array&>(_geomFields.coordinate0[nodes]);
56  const VectorT3Array& nodeCoordinate =
57  dynamic_cast<const VectorT3Array&>(_geomFields.coordinate[nodes]);
58  const VectorT3Array& cellCentroid =
59  dynamic_cast<const VectorT3Array&> (_geomFields.coordinate[cells]);
60  const VectorT3Array& cellDisplacement =
61  dynamic_cast<const VectorT3Array&>(_plateFields.deformation[cells]);
62  VectorT3Array& nodeDisplacement =
63  dynamic_cast<VectorT3Array&>(_geomFields.nodeDisplacement[nodes]);
64  const T one(1.0);
65  const T zero(0.0);
66 
67  for(int j=0;j<nNodes;j++)
68  {
70  T weight(0.0);
71  for(int k=0;k<nodeCells.getCount(j);k++)
72  {
73  const int num = nodeCells(j,k);
74  const VectorT3 ds = cellCentroid[num]-nodeCoordinate[j];
75  dr += cellDisplacement[num]/mag(ds);
76  weight += one/mag(ds);
77  }
78  dr = dr/weight;
79  //nodeDisplacement[j][0] = nodeCoordinate0[j][2]*nodeDisplacement[j][0];
80  //nodeDisplacement[j][1] = nodeCoordinate0[j][2]*nodeDisplacement[j][1];
81  nodeDisplacement[j][0] = zero;
82  nodeDisplacement[j][1] = zero;
83  nodeDisplacement[j][2] = dr[2];
84  }
85  }
86  }
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
Field coordinate0
Definition: GeomFields.h:21
shared_ptr< CRConnectivity > getTranspose() const
Field deformation
Definition: PlateFields.h:15
int getCount() const
Definition: StorageSite.h:39
const CRConnectivity & getCellNodes() const
Definition: Mesh.cpp:426
template<class T >
void PlateDeformationModel< T >::deformMeshStructure ( )
inline

Definition at line 115 of file PlateDeformationModel.h.

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

116  {
117  const int numMeshes = _meshes.size();
118  for (int n=0;n<numMeshes;n++)
119  {
120  const Mesh& mesh = *_meshes[n];
121  const StorageSite& nodes = mesh.getNodes();
122  const int nNodes = nodes.getCount();
123  const Array<int>& displacementOptions =
124  dynamic_cast<Array<int>& > (_geomFields.displacementOptions[nodes]);
125  VectorT3Array& nodeCoord =
126  dynamic_cast<VectorT3Array&>(_geomFields.coordinate[nodes]);
127  const VectorT3Array& nodeCoord0 =
128  dynamic_cast<const VectorT3Array&>(_geomFields.coordinate0[nodes]);
129  VectorT3Array& nodeDisplacement =
130  dynamic_cast<VectorT3Array&>(_geomFields.nodeDisplacement[nodes]);
131  VectorT3Array& nodeCoordK1 =
132  dynamic_cast<VectorT3Array&>(_geomFields.coordinateK1[nodes]);
133  nodeCoordK1 = nodeCoord;
134  for (int i=0;i<nNodes;i++)
135  {
136  if(displacementOptions[i] == 3)
137  {
138  nodeCoord[i] = nodeCoord0[i] + nodeDisplacement[i];
139  }
140  }
141  }
142  }
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 PlateDeformationModel< T >::deformPlate ( )
inline

Definition at line 88 of file PlateDeformationModel.h.

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

89  {
90  const int numMeshes = _meshes.size();
91  for (int n=0;n<numMeshes;n++)
92  {
93  const Mesh& mesh = *_meshes[n];
94  const StorageSite& nodes = mesh.getNodes();
95  const int nNodes = nodes.getCount();
96  VectorT3Array& nodeCoord =
97  dynamic_cast<VectorT3Array&>(_geomFields.coordinate[nodes]);
98  //Array<VecD3>& nodeCoordMesh = mesh.getNodeCoordinates();
99  const VectorT3Array& nodeCoord0 =
100  dynamic_cast<const VectorT3Array&>(_geomFields.coordinate0[nodes]);
101  VectorT3Array& nodeDisplacement =
102  dynamic_cast<VectorT3Array&>(_geomFields.nodeDisplacement[nodes]);
103  VectorT3Array& nodeCoordK1 =
104  dynamic_cast<VectorT3Array&>(_geomFields.coordinateK1[nodes]);
105  nodeCoordK1 = nodeCoord;
106  for (int i=0;i<nNodes;i++)
107  {
108  nodeCoord[i] = nodeCoord0[i] + nodeDisplacement[i];
109  //nodeCoordMesh[i] = nodeCoord[i];
110  }
111 
112  }
113  }
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& PlateDeformationModel< T >::getCommon ( const StorageSite site,
const StorageSite osite 
)
inline

Definition at line 234 of file PlateDeformationModel.h.

References StorageSite::getCommonMap().

235  {
236 
237  const StorageSite::CommonMap& commonMap = site.getCommonMap();
238  cout<<"\n The size of commonMap is "<<commonMap.size()<<"\n";
239 
240  const Array<int>& myNodeIndices =
241  *(site.getCommonMap().find(&osite)->second);
242  return myNodeIndices;
243  }
const CommonMap & getCommonMap() const
Definition: StorageSite.h:60
map< const StorageSite *, shared_ptr< Array< int > > > CommonMap
Definition: StorageSite.h:25
template<class T >
void PlateDeformationModel< T >::init ( )
inlinevirtual

Implements Model.

Definition at line 245 of file PlateDeformationModel.h.

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

246  {
247  const int numMeshes = _meshes.size();
248  for (int n=0;n<numMeshes;n++)
249  {
250  const Mesh& mesh = *_meshes[n];
251  const StorageSite& nodes = mesh.getNodes();
252  VectorT3Array& nodeCoord =
253  dynamic_cast<VectorT3Array&>(_geomFields.coordinate[nodes]);
255  dynamic_pointer_cast<ArrayBase>(nodeCoord.newCopy()));
256 
258  dynamic_pointer_cast<ArrayBase>(nodeCoord.newCopy()));
259 
260  shared_ptr<VectorT3Array>
261  nodeDisplacement(new VectorT3Array(nodes.getCount()));
262  nodeDisplacement->zero();
263  _geomFields.nodeDisplacement.addArray(nodes,nodeDisplacement);
264 
265  shared_ptr<VectorT3Array>
266  nodeDisplacementN1(new VectorT3Array(nodes.getCount()));
267  nodeDisplacementN1->zero();
268 
270  nodeDisplacementN1);
271  }
272  }
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
Array< VectorT3 > VectorT3Array
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 PlateDeformationModel< T >::updateBoundaryMesh ( const Mesh mesh,
Mesh bMesh,
const double  thickness 
)
inline

Definition at line 145 of file PlateDeformationModel.h.

References PlateDeformationModel< T >::_geomFields, GeomFields::coordinate, StorageSite::getCount(), Mesh::getNodeCoordinates(), and Mesh::getNodes().

Referenced by PlateDeformationModel< T >::updateBoundaryMesh().

146  {
147  // update node coords
148  const StorageSite& bMeshNodes = bMesh.getNodes();
149  const int nBNodes = bMeshNodes.getCount();
150 
151  const StorageSite& nodes = mesh.getNodes();
152 
153  const VectorT3Array& nodeCoord =
154  dynamic_cast<const VectorT3Array&>(_geomFields.coordinate[nodes]);
155 
156  VectorT3Array& bNodeCoord =
157  dynamic_cast<VectorT3Array&>(_geomFields.coordinate[bMeshNodes]);
158 
159  VectorT3Array& bMeshCoord = bMesh.getNodeCoordinates();
160  // the node x,y coordinates keep the same;
161  // z coordinate gets updated by beam node coodinate;
162  for(int n=0; n<nBNodes/2; n++)
163  {
164  bNodeCoord[n][2] = -thickness/2 + nodeCoord[n][2];
165  bMeshCoord[n][2] = -thickness/2 + nodeCoord[n][2];
166  }
167 
168  for(int n=nBNodes/2; n<nBNodes; n++)
169  {
170  bNodeCoord[n][2] = thickness/2 + nodeCoord[n-nBNodes/2][2];
171  bMeshCoord[n][2] = thickness/2 + nodeCoord[n-nBNodes/2][2];
172  }
173  }
Field coordinate
Definition: GeomFields.h:19
const StorageSite & getNodes() const
Definition: Mesh.h:110
const Array< VecD3 > & getNodeCoordinates() const
Definition: Mesh.h:218
int getCount() const
Definition: StorageSite.h:39
template<class T >
void PlateDeformationModel< T >::updateBoundaryMesh ( const Mesh mesh,
Mesh bMesh,
const double  thickness,
const double  timeStep,
Field velocityField 
)
inline

Definition at line 176 of file PlateDeformationModel.h.

References PlateDeformationModel< T >::_geomFields, Field::addArray(), Mesh::getCellNodes(), Mesh::getCells(), StorageSite::getCount(), CRConnectivity::getCount(), Mesh::getFaces(), Mesh::getNodes(), StorageSite::getSelfCount(), Vector< T, 3 >::getZero(), GeomFields::nodeDisplacement, GeomFields::nodeDisplacementN1, and PlateDeformationModel< T >::updateBoundaryMesh().

180  {
181  updateBoundaryMesh(mesh, bMesh, thickness);
182 
183  // update face velocity
184  const StorageSite& nodes = mesh.getNodes();
185  const StorageSite& bMeshFaces = bMesh.getFaces();
186 
187  shared_ptr<VectorT3Array>
188  bVelocity(new VectorT3Array(bMeshFaces.getCount()));
189 
190  velocityField.addArray(bMeshFaces,bVelocity);
191 
192  VectorT3Array& w =
193  dynamic_cast<VectorT3Array&>(_geomFields.nodeDisplacement[nodes]);
194  VectorT3Array& wN1 =
195  dynamic_cast<VectorT3Array&>(_geomFields.nodeDisplacementN1[nodes]);
196 
197  const StorageSite& cells = mesh.getCells();
198  const int nLocalCells = cells.getSelfCount();
199  const int nCells = cells.getCount();
200 
201  for (int c=0; c<nLocalCells; c++){
202  const CRConnectivity& cellNodes = mesh.getCellNodes();
203  const int nCellNodes = cellNodes.getCount(c);
205  for (int n=0; n<nCellNodes; n++){
206  const int node = cellNodes(c, n);
207  VectorT3 vn = (w[node]-wN1[node])/timeStep;
208  vf += vn;
209  }
210  vf /= nCellNodes;
211 
212  (*bVelocity)[c] = vf;
213  (*bVelocity)[c+nLocalCells] = vf;
214  }
215 
216  for (int c=nLocalCells; c<nCells; c++){
217  const CRConnectivity& cellNodes = mesh.getCellNodes();
218  const int nCellNodes = cellNodes.getCount(c);
220  for (int n=0; n<nCellNodes; n++){
221  const int node = cellNodes(c, n);
222  VectorT3 vn = (w[node]-wN1[node])/timeStep;
223  vf += vn;
224  }
225  vf /= nCellNodes;
226 
227  (*bVelocity)[c+nLocalCells] = vf;
228  }
229 
230 
231  }
void updateBoundaryMesh(const Mesh &mesh, Mesh &bMesh, const double thickness)
int getCount(const int i) const
int getSelfCount() const
Definition: StorageSite.h:40
const StorageSite & getNodes() const
Definition: Mesh.h:110
Field nodeDisplacement
Definition: GeomFields.h:33
Array< VectorT3 > VectorT3Array
const StorageSite & getFaces() const
Definition: Mesh.h:108
Field nodeDisplacementN1
Definition: GeomFields.h:34
const StorageSite & getCells() const
Definition: Mesh.h:109
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
const CRConnectivity & getCellNodes() const
Definition: Mesh.cpp:426
template<class T >
void PlateDeformationModel< T >::updateTime ( )
inline

Definition at line 274 of file PlateDeformationModel.h.

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

275  {
276  const int numMeshes = _meshes.size();
277  for (int n=0; n<numMeshes; n++)
278  {
279  const Mesh& mesh = *_meshes[n];
280 
281  const StorageSite& nodes = mesh.getNodes();
282  VectorT3Array& w =
283  dynamic_cast<VectorT3Array&>(_geomFields.nodeDisplacement[nodes]);
284  VectorT3Array& wN1 =
285  dynamic_cast<VectorT3Array&>(_geomFields.nodeDisplacementN1[nodes]);
286  wN1 = w;
287  }
288  }
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 >
PlateFields& PlateDeformationModel< T >::_plateFields
private

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