3 label patchID = mesh.boundaryMesh().findPatchID("loadedEnd");
7 FatalErrorIn(args.executable())
8 << "Can't find patch with name loadedEnd" << abort(FatalError);
13 DU.boundaryField()[patchID].type()
14 != tractionDisplacementIncrementFvPatchVectorField::typeName
17 FatalErrorIn(args.executable())
18 << "Bounary condition on " << DU.name()
20 << DU.boundaryField()[patchID].type()
21 << "for patch: " << mesh.boundaryMesh()[patchID].name()
23 << tractionDisplacementIncrementFvPatchVectorField::typeName
27 tractionDisplacementIncrementFvPatchVectorField& tractionPatch =
28 refCast<tractionDisplacementIncrementFvPatchVectorField>
30 DU.boundaryField()[patchID]
33 vectorField n = mesh.boundary()[patchID].nf();
35 vector traction = vector::zero;
36 vector DTraction = vector::zero;
38 if(runTime.timeIndex()==1)
40 traction = vector::zero;
41 DTraction = maxTraction;
43 else if(runTime.timeIndex()>=2)
45 traction = maxTraction;
46 DTraction = vector::zero;
49 vectorField relaxedTraction =
53 sigma.boundaryField()[patchID]
54 + DSigmaCorr.boundaryField()[patchID]
58 tractionPatch.DTraction() = DTraction + (traction - relaxedTraction);
60 tractionPatch.DPressure() = 0.0;