36#ifndef NEKTAR_SOLVERUTILS_FORCINGMOVINGREFERENCEFRAME
37#define NEKTAR_SOLVERUTILS_FORCINGMOVINGREFERENCEFRAME
49#include <boost/numeric/ublas/io.hpp>
50#include <boost/numeric/ublas/matrix.hpp>
51#include <boost/numeric/ublas/vector.hpp>
57namespace bn = boost::numeric;
75 std::map<int, NekDouble> motionPrescribed);
109 const std::weak_ptr<EquationSystem> &pEquation,
111 const unsigned int &pNumForcingFields,
const TiXmlElement *pForce)
115 pSession, pEquation);
116 p->InitObject(pFields, pNumForcingFields, pForce);
126 const unsigned int &pNumForcingFields,
127 const TiXmlElement *pForce)
override;
204 const std::weak_ptr<EquationSystem> &pEquation);
224 std::map<int, NekDouble> &Dirs);
230 const TiXmlElement *pForce);
#define SOLVER_UTILS_EXPORT
General purpose memory allocation routines with the ability to allocate from thread specific memory p...
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
Defines a forcing term to be explicitly applied.
SOLVER_UTILS_EXPORT void v_PreApply(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray, const NekDouble &time) override
Array< OneD, NekDouble > m_velxyz
static std::string classNameBody
Name of the class.
FilterAeroForcesSharedPtr m_aeroforceFilter
Array< OneD, bool > m_hasVel
Array< OneD, NekDouble > m_velXYZ
bn::ublas::matrix< NekDouble > m_ProjMatZ
~ForcingMovingReferenceFrame(void) override
Array< OneD, Array< OneD, NekDouble > > m_bodyVel
void addRotation(int npoints, const Array< OneD, Array< OneD, NekDouble > > &inarray0, NekDouble angVelScale, const Array< OneD, Array< OneD, NekDouble > > &inarray1, Array< OneD, Array< OneD, NekDouble > > &outarray)
outarray = inarray0 + angVelScale Omega x inarray1
NekDouble EvaluateExpression(std::string expression)
Newmark_BetaSolver m_bodySolver
std::map< int, LibUtilities::EquationSharedPtr > m_frameVelFunction
void SolveBodyMotion(Array< OneD, Array< OneD, NekDouble > > &bodyVel, const Array< OneD, NekDouble > &forcebody, std::map< int, NekDouble > &Dirs)
void CheckForRestartTime(const Array< OneD, MultiRegions::ExpListSharedPtr > &pFields, NekDouble &time)
void InitBodySolver(const TiXmlElement *pForce, const int dim, const int rank, const NekDouble time)
Array< OneD, NekDouble > m_disp
unsigned int m_outputFrequency
ForcingMovingReferenceFrame(const LibUtilities::SessionReaderSharedPtr &pSession, const std::weak_ptr< EquationSystem > &pEquation)
Array< OneD, NekDouble > m_omegaXYZ
Array< OneD, NekDouble > m_omegaxyz
std::map< int, LibUtilities::EquationSharedPtr > m_extForceFunction
std::ofstream m_outputStream
void LoadParameters(const TiXmlElement *pForce, const NekDouble time)
Array< OneD, NekDouble > m_pivotPoint
SOLVER_UTILS_EXPORT void v_Apply(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray, const NekDouble &time) override
Adds the body force, -Omega X u.
SOLVER_UTILS_EXPORT void v_InitObject(const Array< OneD, MultiRegions::ExpListSharedPtr > &pFields, const unsigned int &pNumForcingFields, const TiXmlElement *pForce) override
Initialise the forcing module.
void Update(const Array< OneD, MultiRegions::ExpListSharedPtr > &pFields, const NekDouble &time)
Updates the forcing array with the current required forcing.
void UpdateBoundaryConditions(NekDouble time)
Set velocity boundary condition at the next time step.
Array< OneD, NekDouble > m_extForceXYZ
static SOLVER_UTILS_EXPORT ForcingSharedPtr create(const LibUtilities::SessionReaderSharedPtr &pSession, const std::weak_ptr< EquationSystem > &pEquation, const Array< OneD, MultiRegions::ExpListSharedPtr > &pFields, const unsigned int &pNumForcingFields, const TiXmlElement *pForce)
Creates an instance of this class.
std::set< int > m_DirDoFs
Array< OneD, bool > m_hasOmega
Array< OneD, Array< OneD, NekDouble > > m_coords
Array< OneD, NekDouble > m_travelWave
void InitialiseFilter(const LibUtilities::SessionReaderSharedPtr &pSession, const Array< OneD, MultiRegions::ExpListSharedPtr > &pFields, const TiXmlElement *pForce)
void SetNewmarkBeta(NekDouble beta, NekDouble gamma, NekDouble dt, DNekMatSharedPtr M, DNekMatSharedPtr C, DNekMatSharedPtr K, std::set< int > DirDoFs)
DNekMatSharedPtr m_inverseMatrix
void Solve(Array< OneD, Array< OneD, NekDouble > > u, Array< OneD, NekDouble > force, std::map< int, NekDouble > motionPrescribed)
DNekMatSharedPtr m_coeffMatrix
Array< OneD, NekDouble > m_coeffs
std::shared_ptr< SessionReader > SessionReaderSharedPtr
@ beta
Gauss Radau pinned at x=-1,.
std::shared_ptr< FilterAeroForces > FilterAeroForcesSharedPtr
SOLVER_UTILS_EXPORT typedef std::shared_ptr< Forcing > ForcingSharedPtr
A shared pointer to an EquationSystem object.
std::shared_ptr< DNekMat > DNekMatSharedPtr