32 _geomFields(geomFields),
33 _contactFields(contactFields)
43 const int nSolidFaces = solidFaces.
getCount();
45 boost::shared_ptr<VectorT3Array>
52 _contactFields.force.addArray(solidFaces,forcePtr);
55 dynamic_cast<const VectorT3Array&
>(_geomFields.coordinate[solidFaces]);
60 const TArray& solidFaceAreaMag =
61 dynamic_cast<const TArray&
>(_geomFields.areaMag[solidFaces]);
64 vector<NearestCell> solidFacesNearestCell(nSolidFaces);
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;
118 const double thickness = _constants[
"thickness"];
119 const double gap = _constants[
"gap"];
121 double cloestDistance = 1.;
122 cout <<
"gap " << gap <<
" thickness "<< thickness << endl;
123 for(
int f=0; f<nSolidFaces; f++) {
125 const VectorT3& xf = solidFaceCentroid[f];
126 const double distance = gap + thickness*0.5 + xf[2];
127 if (distance < cloestDistance)
128 cloestDistance = distance;
131 force[f][2] = B*exp(-(distance-alpha02)*gamma);
134 force[f] *= solidFaceAreaMag[f];
138 cout <<
"cloest distance between beam and substrate " << cloestDistance << endl;
165 _impl(new
Impl(geomFields,contactFields,meshes))
188 return _impl->computeSolidSurfaceForce(particles,
false);
195 return _impl->computeSolidSurfaceForce(particles,
true);
209 distanceSquared(0) {};
Array< Vector< double, 3 > > VectorT3Array
vector< Mesh * > MeshList