openfoam/tutorials/mesh/moveDynamicMesh/twistingColumn/constant/dynamicMeshDict
Mark Olesen 80d7fe97f0 TUT: clarify use of Antal parameters (#3353)
TUT: simplify example of coded motion solver
2025-04-09 15:58:29 +02:00

74 lines
2.0 KiB
C++

/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v2506 |
| \\ / 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().z();
const scalar zSpan = bb.span().z();
for (auto& p : newPoints)
{
const scalar x = p.x();
const scalar y = p.y();
const scalar z = p.z();
// Scale the angle by height
const scalar localAngle = maxRotAngle*(z-zMin)/zSpan;
p.x() = x*cos(localAngle)-y*sin(localAngle);
p.y() = x*sin(localAngle)+y*cos(localAngle);
}
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);
#};
// ************************************************************************* //