Memosa-FVM  0.2
ContactModel< T >::Impl Class Reference

#include <ContactModel_impl.h>

Collaboration diagram for ContactModel< T >::Impl:

Public Types

typedef Array< T > TArray
 
typedef Array< int > IntArray
 
typedef Vector< T, 3 > VectorT3
 
typedef Vector< double, 3 > VectorD3
 
typedef Array< VectorT3VectorT3Array
 

Public Member Functions

 Impl (const GeomFields &geomFields, ContactFields &contactFields, const MeshList &meshes)
 
void init ()
 
ContactModelConstants< T > & getConstants ()
 
void computeSolidSurfaceForce (const StorageSite &solidFaces, bool perUnitArea)
 

Private Attributes

const MeshList _meshes
 
const GeomFields_geomFields
 
ContactFields_contactFields
 
ContactModelConstants< T > _constants
 

Detailed Description

template<class T>
class ContactModel< T >::Impl

Definition at line 17 of file ContactModel_impl.h.

Member Typedef Documentation

template<class T >
typedef Array<int> ContactModel< T >::Impl::IntArray

Definition at line 22 of file ContactModel_impl.h.

template<class T >
typedef Array<T> ContactModel< T >::Impl::TArray

Definition at line 21 of file ContactModel_impl.h.

template<class T >
typedef Vector<double, 3> ContactModel< T >::Impl::VectorD3

Definition at line 24 of file ContactModel_impl.h.

template<class T >
typedef Vector<T,3> ContactModel< T >::Impl::VectorT3

Definition at line 23 of file ContactModel_impl.h.

template<class T >
typedef Array<VectorT3> ContactModel< T >::Impl::VectorT3Array

Definition at line 25 of file ContactModel_impl.h.

Constructor & Destructor Documentation

template<class T >
ContactModel< T >::Impl::Impl ( const GeomFields geomFields,
ContactFields contactFields,
const MeshList meshes 
)
inline

Definition at line 28 of file ContactModel_impl.h.

30  :
31  _meshes(meshes),
32  _geomFields(geomFields),
33  _contactFields(contactFields)
34  { }
const GeomFields & _geomFields
ContactFields & _contactFields
const MeshList _meshes

Member Function Documentation

template<class T >
void ContactModel< T >::Impl::computeSolidSurfaceForce ( const StorageSite solidFaces,
bool  perUnitArea 
)
inline

Definition at line 41 of file ContactModel_impl.h.

References StorageSite::getCount(), and Array< T >::zero().

42  {
43  const int nSolidFaces = solidFaces.getCount();
44 
45  boost::shared_ptr<VectorT3Array>
46  forcePtr( new VectorT3Array(nSolidFaces));
47 
48  VectorT3Array& force = *forcePtr;
49 
50  force.zero();
51 
52  _contactFields.force.addArray(solidFaces,forcePtr);
53 
54  const VectorT3Array& solidFaceCentroid =
55  dynamic_cast<const VectorT3Array&>(_geomFields.coordinate[solidFaces]);
56 
57  //const VectorT3Array& solidFaceArea =
58  // dynamic_cast<const VectorT3Array&>(_geomFields.area[solidFaces]);
59 
60  const TArray& solidFaceAreaMag =
61  dynamic_cast<const TArray&>(_geomFields.areaMag[solidFaces]);
62 
63 
64  vector<NearestCell> solidFacesNearestCell(nSolidFaces);
65 
66 
67  //for each face in solidFaces, find out the nearest neighbor on substrate
68  /*
69  const int numMeshes = _meshes.size();
70  for (int n=0; n<numMeshes; n++)
71  {
72  const Mesh& mesh = *_meshes[n];
73  foreach(const FaceGroupPtr fgPtr, mesh.getBoundaryFaceGroups())
74  {
75  const FaceGroup& fg = *fgPtr;
76  if (fg.id == 5){
77  const StorageSite& faces = fg.site;
78  const VectorT3Array& fluidFaceCoords =
79  dynamic_cast<const VectorT3Array&>(_geomFields.coordinate[faces]);
80 
81  FILE *fp = fopen("./fluidface.dat","w");
82  for (int i=0; i<fg.site.getCount();i++){
83  fprintf(fp, "%i\t%e\t%e\t%e\n", i, fluidFaceCoords[i][0], fluidFaceCoords[i][1], fluidFaceCoords[i][2]);
84  }
85  fclose(fp);
86 
87  KSearchTree searchTree(fluidFaceCoords);
88 
89  Array<int> fluidNeighbors(1);
90 
91  for(int f=0; f<nSolidFaces; f++)
92  {
93  const VectorT3& xf = solidFaceCentroid[f];
94  searchTree.findNeighbors(xf, 1, fluidNeighbors);
95  const int c = fluidNeighbors[0];
96  const VectorT3& xc = fluidFaceCoords[c];
97  const double distanceSquared = mag2(xf-xc);
98  NearestCell& nc = solidFacesNearestCell[f];
99  if ((nc.mesh == 0) || (nc.distanceSquared > distanceSquared))
100  {
101  nc.mesh = &mesh;
102  nc.cell = c;
103  nc.distanceSquared = distanceSquared;
104  }
105  }
106  }
107  }
108  }
109  */
110  //for each face in solidFaces, calculate the contact force based on the nearest distance
111  const double H = 0.23e-20;
112  const double B = 3529e3;
113  const double alpha = 0.1127;
114  const double gamma = 22.69e9;
115  const double alpha01 = 1.6e-9;
116  const double alpha02 = 1.99e-9;
117 
118  const double thickness = _constants["thickness"];
119  const double gap = _constants["gap"];
120 
121  double cloestDistance = 1.;
122  cout << "gap " << gap << " thickness "<< thickness << endl;
123  for(int f=0; f<nSolidFaces; f++) {
124  //const double distance = sqrt(solidFacesNearestCell[f].distanceSquared);
125  const VectorT3& xf = solidFaceCentroid[f];
126  const double distance = gap + thickness*0.5 + xf[2];
127  if (distance < cloestDistance)
128  cloestDistance = distance;
129  //force[f] = -H/(6*PI) * ((1-alpha)/pow(distance,3) + alpha/pow(distance-alpha01,3))
130  // + B*exp(-(distance-alpha02)*gamma);
131  force[f][2] = B*exp(-(distance-alpha02)*gamma);
132 
133  if (!perUnitArea){
134  force[f] *= solidFaceAreaMag[f];
135  }
136  }
137 
138  cout << "cloest distance between beam and substrate " << cloestDistance << endl;
139  /*
140  FILE *fp2 = fopen("./force.dat","w");
141  for(int f=0; f<nSolidFaces; f++) {
142  fprintf(fp2, "%i\t%e\t%e\t%e\n", f, force[f][0],force[f][1],force[f][2]);
143  }
144  fclose(fp2);
145  FILE *fp1 = fopen("./beamCoords.dat","w");
146  for(int f=0; f<nSolidFaces; f++) {
147  fprintf(fp1, "%i\t%e\t%e\t%e\n", f, solidFaceCentroid[f][0], solidFaceCentroid[f][1],solidFaceCentroid[f][2]);
148  }
149  fclose(fp1);
150  */
151  }
virtual void zero()
Definition: Array.h:281
Field coordinate
Definition: GeomFields.h:19
Array< VectorT3 > VectorT3Array
ContactModelConstants< T > _constants
const GeomFields & _geomFields
void addArray(const StorageSite &, shared_ptr< ArrayBase > a)
Definition: Field.cpp:72
int getCount() const
Definition: StorageSite.h:39
Field areaMag
Definition: GeomFields.h:25
ContactFields & _contactFields
template<class T >
ContactModelConstants<T>& ContactModel< T >::Impl::getConstants ( )
inline

Definition at line 39 of file ContactModel_impl.h.

39 {return _constants;}
ContactModelConstants< T > _constants
template<class T >
void ContactModel< T >::Impl::init ( )
inline

Definition at line 36 of file ContactModel_impl.h.

37  {}

Member Data Documentation

template<class T >
ContactModelConstants<T> ContactModel< T >::Impl::_constants
private

Definition at line 156 of file ContactModel_impl.h.

template<class T >
ContactFields& ContactModel< T >::Impl::_contactFields
private

Definition at line 155 of file ContactModel_impl.h.

template<class T >
const GeomFields& ContactModel< T >::Impl::_geomFields
private

Definition at line 154 of file ContactModel_impl.h.

template<class T >
const MeshList ContactModel< T >::Impl::_meshes
private

Definition at line 153 of file ContactModel_impl.h.


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