This repository has been archived on 2023-11-20. You can view files and clone it, but cannot push or open issues or pull requests.
foam-extend4.1-coherent-io/applications/solvers/solidMechanics/elasticContactNonLinULSolidFoam/moveMeshInverseDistance.H

66 lines
1.5 KiB
C
Raw Normal View History

2012-09-11 15:42:55 +00:00
//--------------------------------------------------//
//- move mesh
//--------------------------------------------------//
if(min(J.internalField()) > 0)
{
2012-09-11 15:42:55 +00:00
Info << "Move solid mesh using inverse distance interpolation" << endl;
2012-09-11 15:42:55 +00:00
// Create point mesh
pointMesh pMesh(mesh);
// Create point interpolation
volPointInterpolation pointInterpolation(mesh);
2012-09-11 15:42:55 +00:00
wordList types
(
pMesh.boundary().size(),
//fixedValueFvPatchVectorField::typeName
calculatedFvPatchVectorField::typeName
);
2012-09-11 15:42:55 +00:00
pointVectorField pointDU
(
IOobject
(
"pointDU",
runTime.timeName(),
mesh
),
pMesh,
dimensionedVector("zero", dimLength, vector::zero),
types
);
2012-09-11 15:42:55 +00:00
// Calculate mesh points displacement
pointInterpolation.interpolate(DU, pointDU);
//- correct edge interpolation
//- this is the stuff from edgeCorrectedVolPointInterpolation but
//- that class no longer works
# include "performEdgeCorrectedVolPointInterpolation.H"
//pointDU.write();
const vectorField& pointDUI = pointDU.internalField();
2012-09-11 15:42:55 +00:00
// Move mesh
vectorField newPoints = mesh.allPoints();
forAll (pointDUI, pointI)
{
newPoints[pointI] += pointDUI[pointI];
}
2012-09-11 15:42:55 +00:00
twoDPointCorrector twoDCorrector(mesh);
twoDCorrector.correctPoints(newPoints);
mesh.movePoints(newPoints);
mesh.V00();
mesh.moving(false);
}
else
{
FatalErrorIn(args.executable())
<< "Negative Jacobian"
<< exit(FatalError);
}