105 lines
2.3 KiB
C
105 lines
2.3 KiB
C
|
if (runTime.outputTime())
|
||
|
{
|
||
|
volScalarField epsilonEq
|
||
|
(
|
||
|
IOobject
|
||
|
(
|
||
|
"epsilonEq",
|
||
|
runTime.timeName(),
|
||
|
mesh,
|
||
|
IOobject::NO_READ,
|
||
|
IOobject::AUTO_WRITE
|
||
|
),
|
||
|
sqrt((2.0/3.0)*magSqr(dev(epsilon)))
|
||
|
);
|
||
|
|
||
|
Info<< "Max epsilonEq = " << max(epsilonEq).value()
|
||
|
<< endl;
|
||
|
|
||
|
volScalarField sigmaEq
|
||
|
(
|
||
|
IOobject
|
||
|
(
|
||
|
"sigmaEq",
|
||
|
runTime.timeName(),
|
||
|
mesh,
|
||
|
IOobject::NO_READ,
|
||
|
IOobject::AUTO_WRITE
|
||
|
),
|
||
|
sqrt((3.0/2.0)*magSqr(dev(sigma)))
|
||
|
);
|
||
|
|
||
|
Info<< "Max sigmaEq = " << max(sigmaEq).value()
|
||
|
<< endl;
|
||
|
|
||
|
//- Calculate Cauchy stress
|
||
|
volTensorField F = I + gradU;
|
||
|
volScalarField J = det(F);
|
||
|
|
||
|
//- update density
|
||
|
rho = rho/J;
|
||
|
|
||
|
volSymmTensorField sigmaCauchy
|
||
|
(
|
||
|
IOobject
|
||
|
(
|
||
|
"sigmaCauchy",
|
||
|
runTime.timeName(),
|
||
|
mesh,
|
||
|
IOobject::NO_READ,
|
||
|
IOobject::AUTO_WRITE
|
||
|
),
|
||
|
(1/J) * symm(F.T() & sigma & F)
|
||
|
);
|
||
|
|
||
|
//- Cauchy von Mises stress
|
||
|
volScalarField sigmaCauchyEq
|
||
|
(
|
||
|
IOobject
|
||
|
(
|
||
|
"sigmaCauchyEq",
|
||
|
runTime.timeName(),
|
||
|
mesh,
|
||
|
IOobject::NO_READ,
|
||
|
IOobject::AUTO_WRITE
|
||
|
),
|
||
|
sqrt((3.0/2.0)*magSqr(dev(sigmaCauchy)))
|
||
|
);
|
||
|
|
||
|
Info<< "Max sigmaCauchyEq = " << max(sigmaCauchyEq).value()
|
||
|
<< endl;
|
||
|
|
||
|
//- write boundary forces
|
||
|
//- integrate (sigma2PK & F) over reference area
|
||
|
//- which is equivalent to integrating sigmaCauchy
|
||
|
//- over the deformed area
|
||
|
Info << nl;
|
||
|
forAll(mesh.boundary(), patchi)
|
||
|
{
|
||
|
Info << "Patch " << mesh.boundary()[patchi].name() << endl;
|
||
|
tensorField F = I + gradU.boundaryField()[patchi];
|
||
|
vectorField totalForce = mesh.Sf().boundaryField()[patchi] & (sigma.boundaryField()[patchi] & F);
|
||
|
|
||
|
vector force = sum( totalForce );
|
||
|
Info << "\ttotal force is " << force << " N" << endl;
|
||
|
|
||
|
tensorField Finv = inv(F);
|
||
|
vectorField nCurrent = Finv & n.boundaryField()[patchi];
|
||
|
nCurrent /= mag(nCurrent);
|
||
|
scalar normalForce = sum( nCurrent & totalForce );
|
||
|
Info << "\tnormal force is " << normalForce << " N" << endl;
|
||
|
scalar shearForce = mag(sum( (I - sqr(nCurrent)) & totalForce ));
|
||
|
Info << "\tshear force is " << shearForce << " N" << endl << endl;;
|
||
|
}
|
||
|
|
||
|
|
||
|
//- move mesh for visualisation and move it back after writing
|
||
|
vectorField oldPoints = mesh.allPoints();
|
||
|
#include "moveMeshLeastSquares.H"
|
||
|
|
||
|
runTime.write();
|
||
|
|
||
|
//- move mesh back
|
||
|
mesh.movePoints(oldPoints);
|
||
|
}
|