2 const vectorField& solidPatchDisplacement =
3 DU.boundaryField()[solidPatchID];
5 vectorField solidZoneDisplacement
7 stressMesh.faceZones()[solidZoneID]().size(),
11 const label solidPatchStart =
12 stressMesh.boundaryMesh()[solidPatchID].start();
14 forAll(solidPatchDisplacement, i)
18 stressMesh.faceZones()[solidZoneID]
19 .whichFace(solidPatchStart + i)
21 solidPatchDisplacement[i];
24 // Parallel data exchange: collect displacement field on all processors
25 reduce(solidZoneDisplacement, sumOp<vectorField>());
27 vectorField fluidZoneDisplacement =
28 interpolatorSolidFluid.faceInterpolate
33 vectorField fluidPatchDisplacement
35 mesh.boundary()[fluidPatchID].size(),
39 const label fluidPatchStart =
40 mesh.boundaryMesh()[fluidPatchID].start();
42 forAll(fluidPatchDisplacement, i)
44 fluidPatchDisplacement[i] =
47 mesh.faceZones()[fluidZoneID].whichFace(fluidPatchStart + i)
51 primitivePatchInterpolation fluidPatchInterpolator
53 mesh.boundaryMesh()[fluidPatchID]
56 solidPatchPointsDispl =
57 fluidPatchInterpolator.faceToPointInterpolate
59 fluidPatchDisplacement
62 fsiResidualOld = fsiResidual;
64 fsiResidual = solidPatchPointsDispl - fluidPatchPointsDispl;
70 // /(mag(solidPatchPointsDispl) + SMALL)
73 // Info << "Maximal fsi residual: " << maxFsiResidual << endl;
75 fsiResidualNorm = ::sqrt(gSum(magSqr(fsiResidual)));
79 initialFsiResidualNorm = fsiResidualNorm;
82 fsiResidualNorm /= initialFsiResidualNorm + SMALL;
84 Info << "Current fsi residual norm: " << fsiResidualNorm << endl;