openfoam/tutorials/mesh/moveDynamicMesh/twistingColumn/constant/dynamicMeshDict
2024-02-21 14:31:40 +01:00

74 lines
2.2 KiB
C++

/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v2312 |
| \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object dynamicMeshDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dynamicFvMesh dynamicMotionSolverFvMesh;
motionSolver coded;
name myMotion;
codeInclude
#{
#include "transformField.H"
#};
localCode
#{
// Generate new set of points
tmp<pointField> twistColumn
(
const scalar& maxRotAngle,
const pointField& points
)
{
auto tnewPoints = tmp<pointField>::New(points);
auto& newPoints = tnewPoints.ref();
const boundBox bb(points, true);
const scalar zMin = bb.min()[vector::Z];
const scalar zSpan = bb.span()[vector::Z];
forAll(points, pointI)
{
const scalar x = points[pointI].component(0);
const scalar y = points[pointI].component(1);
const scalar z = points[pointI].component(2);
// Scale the angle by height
const scalar localAngle = maxRotAngle*(z-zMin)/zSpan;
const scalar xr = x*cos(localAngle)-y*sin(localAngle);
const scalar yr = x*sin(localAngle)+y*cos(localAngle);
newPoints[pointI] = vector(xr, yr, z);
}
return tnewPoints;
}
#};
code
#{
const Time& tm = mesh().time();
const pointField& p0 = points0();
// Max twist pi at t=10
const scalar maxRotAngle =
constant::mathematical::pi*Foam::sin(degToRad(90.0/10.0*tm.value()));
return twistColumn(maxRotAngle, p0);
#};
// ************************************************************************* //