167 const int numMeshes =
_meshes.size();
168 for (
int m=0;m<numMeshes;m++)
174 const int nNodes = nodes.
getCount();
175 const int nFaces = faces.
getCount();
176 const int nCells = cells.
getCount();
197 shared_ptr<VectorT3Array> gridVelPtr(
new VectorT3Array(nNodes));
201 const T deltaT =
_options[
"timeStep"];
213 const T onepointfive(1.5);
214 for(
int i=0;i<nNodes;i++)
216 VectorT3 dr = (nodeCoord[i] - nodeCoordN1[i]);
217 gridVel[i] = dr/deltaT;
219 for (
int f=0;f<nFaces;f++)
221 const int numNodes = faceNodes.
getCount(f);
222 for (
int n=0;n<numNodes;n++)
224 const int num = faceNodes(f,n);
225 faceVel[f] += gridVel[num];
227 faceVel[f] /= T(numNodes);
228 T temp =
dot((half*(faceArea[f]+faceAreaN1[f])),faceVel[f]);
229 sweptVolDot[f] = temp;
230 const int c0 = faceCells(f,0);
231 volChangeDot[c0] += temp;
232 const int c1 = faceCells(f,1);
233 volChangeDot[c1] -= temp;
238 gridFlux[f] = onepointfive*sweptVolDot[f] -
239 half*sweptVolDotN1[f];
242 gridFlux[f] = sweptVolDot[f];
243 gridFlux[f] *= half*(rho[c0]+rho[c1]);
247 volumeChange += volChangeDot[c];
248 volumeChange *= deltaT;
249 cout <<
"volume change for Mesh " << mesh.
getID() <<
" = " << volumeChange << endl;
261 const T onepointfive(1.5);
262 const T onesixth(1./6.);
263 const T onethird(1./3.);
265 for(
int i=0;i<nNodes;i++)
267 VectorT3 dr = (nodeCoord[i] - nodeCoordN1[i]);
268 gridVel[i] = dr/deltaT;
270 for (
int f=0;f<nFaces;f++)
272 const int numNodes = faceNodes.
getCount(f);
273 for (
int n=0;n<numNodes;n++)
275 const int num = faceNodes(f,n);
276 faceVel[f] += gridVel[num];
278 faceVel[f] /= T(numNodes);
281 const int n0 = faceNodes(f,0);
282 const int n1 = faceNodes(f,1);
283 const int n2 = faceNodes(f,2);
284 VectorT3 dr10 = nodeCoord[n1]-nodeCoord[n0];
285 VectorT3 dr20 = nodeCoord[n2]-nodeCoord[n0];
286 VectorT3 dr10N1 = nodeCoordN1[n1]-nodeCoordN1[n0];
287 VectorT3 dr20N1 = nodeCoordN1[n2]-nodeCoordN1[n0];
289 +half*(
cross(dr10,dr20N1)+
cross(dr10N1,dr20)));
290 VectorT3 del0 = nodeCoord[n0]-nodeCoordN1[n0];
291 VectorT3 del1 = nodeCoord[n1]-nodeCoordN1[n1];
292 VectorT3 del2 = nodeCoord[n2]-nodeCoordN1[n2];
293 VectorT3 avg = onethird*(del0 + del1 + del2);
294 temp =
dot(avg,eta)/deltaT;
296 else if (numNodes == 4)
298 const int n0 = faceNodes(f,0);
299 const int n1 = faceNodes(f,1);
300 const int n2 = faceNodes(f,2);
301 const int n3 = faceNodes(f,3);
303 VectorT3 del0 = nodeCoord[n0]-nodeCoordN1[n0];
304 VectorT3 del1 = nodeCoord[n1]-nodeCoordN1[n1];
305 VectorT3 del2 = nodeCoord[n2]-nodeCoordN1[n2];
306 VectorT3 del3 = nodeCoord[n3]-nodeCoordN1[n3];
308 VectorT3 dr10 = nodeCoord[n1]-nodeCoord[n0];
309 VectorT3 dr20 = nodeCoord[n2]-nodeCoord[n0];
310 VectorT3 dr10N1 = nodeCoordN1[n1]-nodeCoordN1[n0];
311 VectorT3 dr20N1 = nodeCoordN1[n2]-nodeCoordN1[n0];
313 +half*(
cross(dr10,dr20N1)+
cross(dr10N1,dr20)));
314 VectorT3 avg1 = onethird*(del0+del1+del2);
315 T temp1 =
dot(avg1,eta1)/deltaT;
318 VectorT3 dr30 = nodeCoord[n3]-nodeCoord[n0];
320 VectorT3 dr30N1 = nodeCoordN1[n3]-nodeCoordN1[n0];
322 +half*(
cross(dr20,dr30N1)+
cross(dr20N1,dr30)));
323 VectorT3 avg2 = onethird*(del0+del2+del3);
324 T temp2 =
dot(avg2,eta2)/deltaT;
328 sweptVolDot[f] = temp;
329 const int c0 = faceCells(f,0);
330 volChangeDot[c0] += temp;
331 const int c1 = faceCells(f,1);
332 volChangeDot[c1] -= temp;
337 gridFlux[f] = onepointfive*sweptVolDot[f] -
338 half*sweptVolDotN1[f];
341 gridFlux[f] = sweptVolDot[f];
342 gridFlux[f] *= half*(rho[c0]+rho[c1]);
346 volumeChange += volChangeDot[c];
347 volumeChange *= deltaT;
348 cout <<
"volume change for Mesh " << mesh.
getID() <<
" = " << volumeChange << endl;
360 const int faceCount = bfaces.
getCount();
361 for(
int f=0; f<faceCount; f++)
363 const int c0 = bfaceCells(f,0);
364 const int c1 = bfaceCells(f,1);
365 volChangeDot[c1] = volChangeDot[c0];
369 for (
int c=0;c<nCells;c++)
370 cellVolume[c] += volChangeDot[c]*deltaT;
const CRConnectivity & getAllFaceNodes() const
int getCount(const int i) const
shared_ptr< FaceGroup > FaceGroupPtr
bool hasArray(const StorageSite &s) const
const FaceGroupList & getAllFaceGroups() const
const StorageSite & getNodes() const
Array< VectorT3 > VectorT3Array
MovingMeshModelOptions< T > _options
const CRConnectivity & getAllFaceCells() const
const StorageSite & getFaces() const
const StorageSite & getCells() const
Vector< T, 3 > cross(const Vector< T, 3 > &a, const Vector< T, 3 > &b)
const CRConnectivity & getFaceCells(const StorageSite &site) const
T dot(const Vector< T, 3 > &a, const Vector< T, 3 > &b)