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/elasticNonLinTLSolidFoam/writeFields.H

105 lines
2.6 KiB
C
Raw Normal View History

2012-09-11 15:42:55 +00:00
if (runTime.outputTime())
{
2012-09-11 15:42:55 +00:00
volScalarField epsilonEq
(
IOobject
(
"epsilonEq",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
sqrt((2.0/3.0)*magSqr(dev(epsilon)))
);
2012-09-11 15:42:55 +00:00
Info<< "Max epsilonEq = " << max(epsilonEq).value()
<< endl;
2012-09-11 15:42:55 +00:00
volScalarField sigmaEq
(
IOobject
(
"sigmaEq",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
sqrt((3.0/2.0)*magSqr(dev(sigma)))
);
2012-09-11 15:42:55 +00:00
Info<< "Max sigmaEq = " << max(sigmaEq).value()
<< endl;
2012-09-11 15:42:55 +00:00
//- 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)
);
2012-09-11 15:42:55 +00:00
//- Cauchy von Mises stress
volScalarField sigmaCauchyEq
(
IOobject
(
"sigmaCauchyEq",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
2012-09-11 15:42:55 +00:00
sqrt((3.0/2.0)*magSqr(dev(sigmaCauchy)))
);
2012-09-11 15:42:55 +00:00
Info<< "Max sigmaCauchyEq = " << max(sigmaCauchyEq).value()
<< endl;
2012-09-11 15:42:55 +00:00
//- 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);
2012-09-11 15:42:55 +00:00
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;;
}
2012-09-11 15:42:55 +00:00
//- move mesh for visualisation and move it back after writing
vectorField oldPoints = mesh.allPoints();
# include "moveMeshLeastSquares.H"
2012-09-11 15:42:55 +00:00
runTime.write();
//- move mesh back
mesh.movePoints(oldPoints);
}