74 lines
2.0 KiB
C++
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);
|
|
#};
|
|
|
|
|
|
// ************************************************************************* //
|