{
surfaceVectorField n = mesh.Sf()/mesh.magSf();
// traction = (n&fvc::interpolate(sigma));
// surfaceTensorField sGradU =
// ((I - n*n)&fvc::interpolate(gradU));
// traction =
// (2*mu + lambda)*snGradU
// - (mu + lambda)*(snGradU&(I - n*n))
// + mu*(sGradU&n)
// + lambda*tr(sGradU&(I - n*n))*n;
// (2*mu + lambda)*fvc::snGrad(U)
// - (mu + lambda)*(n&sGradU)
// + lambda*tr(sGradU)*n;
// philipc
// I am having trouble with back-calculation of interface tractions from solid interface
// procedure (in multiMaterial.C), the tractions have quite large differences from each
// side. Interpolating sigma is OK for now
// traction = rheology.law().interfaceTraction(n, U, gradU, rheology.mu(), rheology.lambda());
# include "calculateEpsilonSigma.H"
traction = (n&fvc::interpolate(sigma));
// forAll(traction.boundaryField(), patchi)
// {
// if (mesh.boundary()[patchi].type() == "cohesive")
// forAll(traction.boundaryField()[patchi], facei)
// Pout << "face " << facei << " with traction magnitude "
// << mag(traction.boundaryField()[patchi][facei])/1e6 << " MPa and traction "
// << traction.boundaryField()[patchi][facei]/1e6 << " MPa" << endl;
// }
}