This repository has been archived on 2023-11-20. You can view files and clone it, but cannot push or open issues or pull requests.
foam-extend4.1-coherent-io/tutorials/icoDyMFoam/movingBlockRBF/RBFMotionFunction/kinematicModel.H

43 lines
1.7 KiB
C

// Motion is a vectorField of all moving boundary points
vectorField motion(ms.movingPoints().size(), vector::zero);
vectorField oldPoints=ms.movingPoints();
scalar oldTime = time_.value() - time_.deltaT().value();
scalar curTime = time_.value();
scalar alphaOld = 0.0;
scalar alphaCur = 0.0;
/* scalar rotationAmplitude_(0.707);
scalar rotationFrequency_(0.0);
vector translationFrequency_(0.0,0.25,0.0);
vector translationAmplitude_(0.0,5.0,0.0);
vector initialRotationOrigin_(0.0,0.0,0.0);*/
scalar pi=3.141592;
alphaOld = rotationAmplitude_*Foam::sin(2*pi*rotationFrequency_*oldTime);
alphaCur = rotationAmplitude_*Foam::sin(2*pi*rotationFrequency_*curTime);
vector translationVector(0.0,0.0,0.0);
translationVector.x()=translationAmplitude_[0]
*(
Foam::sin(2*pi*translationFrequency_[0]*curTime)
-Foam::sin(2*pi*translationFrequency_[0]*oldTime)
);
translationVector.y()=translationAmplitude_[1]
*(
Foam::sin(2*pi*translationFrequency_[1]*curTime)
-Foam::sin(2*pi*translationFrequency_[1]*oldTime)
);
translationVector.z()=0.0;
tensor RzOld(Foam::cos(alphaOld), -Foam::sin(alphaOld), 0, Foam::sin(alphaOld), Foam::cos(alphaOld), 0, 0, 0, 1);
tensor RzCur(Foam::cos(alphaCur), -Foam::sin(alphaCur), 0, Foam::sin(alphaCur), Foam::cos(alphaCur), 0, 0, 0, 1);
//vectorField rotationField = ( (RzCur & (statPoints_ - initialRotationOrigin_)) - (oldPoints - initialRotationOrigin_) );
vectorField rotationField = ( RzCur - RzOld ) & ( statPoints_ - initialRotationOrigin_ );
motion = translationVector + rotationField;