43 [[maybe_unused]]
int spaceDim,
49 [[maybe_unused]]
int spaceDim,
53 if (fields[0]->GetGraph() !=
56 for (
auto &zone : fields[0]->GetGraph()->GetMovement()->GetZones())
58 switch (zone.second->GetMovementType())
79 "Zone cannot have movement type of 'None'.");
157 int nVariables = inarray.size();
164 for (
int i = 0; i < nVariables; ++i)
167 m_fieldsALE[i]->MultiplyByElmtInvMass(inarray[i], tmp);
181 auto curvedEdges =
m_fieldsALE[0]->GetGraph()->GetCurvedEdges();
182 auto curvedFaces =
m_fieldsALE[0]->GetGraph()->GetCurvedFaces();
186 m_fieldsALE[0]->GetGraph()->GetMovement()->PerformMovement(
204 m_fieldsALE[0]->GetGraph()->GetMovement()->GetCoordExchangeFlag() =
true;
215 ALE->ResetMatricesNormal(traceNormals,
m_fieldsALE);
224 if (ALE->UpdateNormalsFlag())
239 : m_zone(
std::static_pointer_cast<SpatialDomains::ZoneFixed>(zone))
257 : m_zone(
std::static_pointer_cast<SpatialDomains::ZoneTranslate>(zone))
266 auto vel =
m_zone->GetVel(time);
267 auto exp = fields[0]->GetExp();
269 auto elements =
m_zone->GetElements();
270 for (
auto &el : elements)
272 int indx = fields[0]->GetElmtToExpId(el->GetGlobalID());
273 int offset = fields[0]->GetPhys_Offset(indx);
274 auto expansion = (*exp)[indx];
276 int nq = expansion->GetTotPoints();
277 for (
int i = 0; i < nq; ++i)
279 for (
int j = 0; j < gridVelocity.size(); ++j)
281 gridVelocity[j][offset + i] += vel[j];
291 auto curvedEdges = fields[0]->GetGraph()->GetCurvedEdges();
292 auto curvedFaces = fields[0]->GetGraph()->GetCurvedFaces();
297 for (
auto &field : fields)
299 field->ResetMatrices();
309 auto conEl =
m_zone->GetConstituentElements();
310 for (
const auto &i : conEl)
312 for (
const auto &j : i)
314 j->ResetNonRecursive(curvedEdges, curvedFaces);
319 for (
const auto &i : conEl[fields[0]->GetShapeDimension() -
322 fields[0]->GetTrace()->GetExpFromGeomId(i->GetGlobalID())->Reset();
328 auto conEl =
m_zone->GetConstituentElements();
334 fields[0]->GetExpFromGeomId(i->GetGlobalID())->Reset();
338 for (
auto &field : fields)
347 : m_zone(
std::static_pointer_cast<SpatialDomains::ZoneRotate>(zone))
357 auto angVel =
m_zone->GetAngularVel(time);
358 auto axis =
m_zone->GetAxis();
359 auto origin =
m_zone->GetOrigin();
361 auto exp = fields[0]->GetExp();
363 auto elements =
m_zone->GetElements();
364 for (
auto &el : elements)
366 int indx = fields[0]->GetElmtToExpId(el->GetGlobalID());
367 int offset = fields[0]->GetPhys_Offset(indx);
368 auto expansion = (*exp)[indx];
370 int nq = expansion->GetTotPoints();
374 expansion->GetCoords(xc, yc, zc);
375 for (
int i = 0; i < nq; ++i)
378 NekDouble xpointMinOrigin = xc[i] - origin(0);
379 NekDouble ypointMinOrigin = yc[i] - origin(1);
380 NekDouble zpointMinOrigin = zc[i] - origin(2);
385 norm[0] = (ypointMinOrigin * axis[2] - zpointMinOrigin * axis[1]) *
387 norm[1] = (zpointMinOrigin * axis[0] - xpointMinOrigin * axis[2]) *
389 norm[2] = (xpointMinOrigin * axis[1] - ypointMinOrigin * axis[0]) *
391 for (
int j = 0; j < gridVelocity.size(); ++j)
393 gridVelocity[j][offset + i] = norm[j];
404 auto curvedEdges = fields[0]->GetGraph()->GetCurvedEdges();
405 auto curvedFaces = fields[0]->GetGraph()->GetCurvedFaces();
410 for (
auto &field : fields)
412 field->ResetMatrices();
421 auto conEl =
m_zone->GetConstituentElements();
422 for (
const auto &i : conEl)
424 for (
const auto &j : i)
426 j->ResetNonRecursive(curvedEdges, curvedFaces);
431 for (
const auto &i : conEl[fields[0]->GetShapeDimension() -
434 fields[0]->GetTrace()->GetExpFromGeomId(i->GetGlobalID())->Reset();
440 auto conEl =
m_zone->GetConstituentElements();
446 fields[0]->GetExpFromGeomId(i->GetGlobalID())->Reset();
452 auto conEl =
m_zone->GetConstituentElements();
459 fields[0]->GetExpFromGeomId(i->GetGlobalID())->GetNtraces();
460 for (
int j = 0; j < nfaces; ++j)
463 ->GetExpFromGeomId(i->GetGlobalID())
464 ->ComputeTraceNormal(j);
469 for (
auto &field : fields)
477 fields[0]->GetTrace()->GetNormals(traceNormals);
482 std::vector<std::string> &variables)
487 std::string gridVarName[3] = {
"gridVx",
"gridVy",
"gridVz"};
492 fieldcoeffs.emplace_back(gridVel);
493 variables.emplace_back(gridVarName[i]);
499 std::vector<std::string> &variables)
505 std::string gridXName[3] = {
"gridX",
"gridY",
"gridZ"};
535 fieldcoeffs.emplace_back(coeffs);
536 variables.emplace_back(gridXName[i]);
#define WARNINGL0(condition, msg)
void AccumulateRegion(std::string, int iolevel=0)
Accumulate elapsed time for a region.
General purpose memory allocation routines with the ability to allocate from thread specific memory p...
Describes a matrix with ordering defined by a local to global map.
Array< OneD, MultiRegions::ExpListSharedPtr > m_fieldsALE
SOLVER_UTILS_EXPORT void UpdateNormalsFlag()
virtual SOLVER_UTILS_EXPORT void v_ALEPreMultiplyMass(Array< OneD, Array< OneD, NekDouble > > &fields)
SOLVER_UTILS_EXPORT void ExtraFldOutputGrid(std::vector< Array< OneD, NekDouble > > &fieldcoeffs, std::vector< std::string > &variables)
virtual SOLVER_UTILS_EXPORT void v_ALEInitObject(int spaceDim, Array< OneD, MultiRegions::ExpListSharedPtr > &fields)
SOLVER_UTILS_EXPORT void ALEDoElmtInvMass(Array< OneD, Array< OneD, NekDouble > > &traceNormals, Array< OneD, Array< OneD, NekDouble > > &fields, NekDouble time)
Update m_fields with u^n by multiplying by inverse mass matrix. That's then used in e....
SOLVER_UTILS_EXPORT void InitObject(int spaceDim, Array< OneD, MultiRegions::ExpListSharedPtr > &fields)
Array< OneD, Array< OneD, NekDouble > > m_gridVelocityTrace
SOLVER_UTILS_EXPORT void ALEDoElmtInvMassBwdTrans(const Array< OneD, const Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray)
SOLVER_UTILS_EXPORT void ResetMatricesNormal(Array< OneD, Array< OneD, NekDouble > > &traceNormals)
SOLVER_UTILS_EXPORT void ExtraFldOutputGridVelocity(std::vector< Array< OneD, NekDouble > > &fieldcoeffs, std::vector< std::string > &variables)
SOLVER_UTILS_EXPORT void MoveMesh(const NekDouble &time, Array< OneD, Array< OneD, NekDouble > > &traceNormals)
virtual SOLVER_UTILS_EXPORT void v_UpdateGridVelocity(const NekDouble &time)
NekDouble m_prevStageTime
SOLVER_UTILS_EXPORT const Array< OneD, const Array< OneD, NekDouble > > & GetGridVelocityTrace()
Array< OneD, Array< OneD, NekDouble > > m_gridVelocity
std::vector< ALEBaseShPtr > m_ALEs
std::shared_ptr< ALETranslate > ALETranslateShPtr
std::shared_ptr< ALERotate > ALERotateShPtr
std::shared_ptr< ALEFixed > ALEFixedShPtr
std::shared_ptr< ZoneBase > ZoneBaseShPtr
void v_UpdateGridVel(const NekDouble time, Array< OneD, MultiRegions::ExpListSharedPtr > &fields, Array< OneD, Array< OneD, NekDouble > > &gridVelocity) final
ALEFixed(SpatialDomains::ZoneBaseShPtr zone)
void v_ResetMatricesNormal(Array< OneD, Array< OneD, NekDouble > > &traceNormals, Array< OneD, MultiRegions::ExpListSharedPtr > &fields) final
SpatialDomains::ZoneRotateShPtr m_zone
void v_ResetMatricesNormal(Array< OneD, Array< OneD, NekDouble > > &traceNormals, Array< OneD, MultiRegions::ExpListSharedPtr > &fields) final
ALERotate(SpatialDomains::ZoneBaseShPtr zone)
void v_UpdateGridVel(const NekDouble time, Array< OneD, MultiRegions::ExpListSharedPtr > &fields, Array< OneD, Array< OneD, NekDouble > > &gridVelocity) final
SpatialDomains::ZoneTranslateShPtr m_zone
ALETranslate(SpatialDomains::ZoneBaseShPtr zone)
void v_ResetMatricesNormal(Array< OneD, Array< OneD, NekDouble > > &traceNormals, Array< OneD, MultiRegions::ExpListSharedPtr > &fields) final
void v_UpdateGridVel(const NekDouble time, Array< OneD, MultiRegions::ExpListSharedPtr > &fields, Array< OneD, Array< OneD, NekDouble > > &gridVelocity) final