44#include <boost/algorithm/string.hpp>
60 const std::shared_ptr<EquationSystem> &pEquation,
const ParamMap &pParams)
61 :
Filter(pSession, pEquation)
64 std::string ext =
".fce";
68 auto it = pParams.find(
"OutputFrequency");
69 if (it == pParams.end())
80 it = pParams.find(
"StartTime");
81 if (it == pParams.end())
95 it = pParams.find(
"OutputAllPlanes");
96 if (it == pParams.end())
102 std::string sOption = it->second.c_str();
104 (boost::iequals(sOption,
"yes"));
113 it = pParams.find(
"Boundary");
114 ASSERTL0(it != pParams.end(),
"Missing parameter 'Boundary");
115 ASSERTL0(it->second.length() > 0,
"Empty parameter 'Boundary'.");
130 for (
int i = 0; i < 3; ++i)
138 std::stringstream directionStream;
139 std::string directionString;
141 for (
int i = 0; i < 3; ++i)
143 std::stringstream tmp;
145 std::string dir =
"Direction" + tmp.str();
146 it = pParams.find(dir);
147 if (it != pParams.end())
149 ASSERTL0(!(it->second.empty()),
"Missing parameter '" + dir +
"'.");
150 directionStream.str(it->second);
153 directionStream.clear();
156 for (
int j = 0; j < 3; j++)
158 directionStream >> directionString;
159 if (!directionString.empty())
168 for (
int j = 0; j < 3; j++)
175 for (
int i = 0; i < 3; ++i)
177 for (
int j = 0; j < 3; ++j)
185 it = pParams.find(
"PivotPoint");
186 if (it == pParams.end())
188 it = pParams.find(
"MomentPoint");
191 if (it != pParams.end())
193 ASSERTL0(!(it->second.empty()),
"Missing parameter 'PivotPoint'.");
194 std::stringstream pivotPointStream;
195 std::string pivotPointString;
196 pivotPointStream.str(it->second);
198 for (
int j = 0; j < 3; ++j)
200 pivotPointStream >> pivotPointString;
201 if (!pivotPointString.empty())
233 (std::string(
"Error reading boundary region definition:") +
237 std::string IndString =
242 (std::string(
"Unable to read boundary regions index "
243 "range for FilterAeroForces: ") +
249 unsigned int numBoundaryRegions = pFields[0]->GetBndConditions().size();
251 numBoundaryRegions, 0);
258 for (
auto &it : bregions)
272 pFields[0]->GetPlane(0)->GetBoundaryToElmtMap(
m_BCtoElmtID,
286 m_nPlanes = pFields[0]->GetHomogeneousBasis()->GetZ().size();
303 for (j = 0; j < IDs.size(); ++j)
327 int expdim = pFields[0]->GetGraph()->GetMeshDimension();
328 int momdim = (expdim == 2) ? 1 : 3;
329 if (vComm->GetRank() == 0)
333 m_session->MatchSolverInfo(
"Driver",
"Adaptive", adaptive,
false);
342 m_outputStream <<
"# Forces and moments acting on bodies" << endl;
343 for (
int i = 0; i < expdim; i++)
346 <<
" Direction" << i + 1 <<
" = (";
367 m_outputStream <<
"# Boundary regions: " << IndString.c_str() << endl;
371 for (
int i = 1; i <= expdim; i++)
392 for (
int i = 1; i <= momdim; i++)
407 if (
m_session->DefinesSolverInfo(
"HomoStrip"))
411 "Output forces on all planes not compatible with HomoStrips");
449 int expdim = pFields[0]->GetGraph()->GetMeshDimension();
450 int momdim = (expdim == 2) ? 1 : 3;
454 for (
int i = 0; i < expdim; i++)
458 Ft[i] = Fp[i] + Fv[i];
464 for (
int i = 0; i < momdim; i++)
468 Mt[i] = Mp[i] + Mv[i];
480 if (
m_session->DefinesSolverInfo(
"HomoStrip"))
482 m_session->LoadParameter(
"Strip_Z", nstrips);
483 colSize = vComm->GetColumnComm()->GetSize();
484 idOffset = colSize / nstrips;
489 m_session->LoadParameter(
"HomModesZ", nZ);
493 if (vComm->GetRank() == 0)
498 for (
int plane = 0; plane <
m_nPlanes; plane++)
504 for (
int i = 0; i < expdim; i++)
514 for (
int i = 0; i < momdim; i++)
531 for (
int i = 0; i < expdim; i++)
540 for (
int i = 0; i < momdim; i++)
555 if (
m_session->DefinesSolverInfo(
"HomoStrip"))
564 for (
int i = 1; i < nstrips; i++)
566 int id = i * idOffset;
567 vComm->GetColumnComm()->Recv(
id, Fp);
568 vComm->GetColumnComm()->Recv(
id, Fv);
569 vComm->GetColumnComm()->Recv(
id, Ft);
570 vComm->GetColumnComm()->Recv(
id, Mp);
571 vComm->GetColumnComm()->Recv(
id, Mv);
572 vComm->GetColumnComm()->Recv(
id, Mt);
576 for (
int j = 0; j < expdim; j++)
585 for (
int j = 0; j < momdim; j++)
607 if (
m_session->DefinesSolverInfo(
"HomoStrip") &&
608 (vComm->GetRowComm()->GetRank() == 0))
612 for (
int i = 1; i < nstrips; ++i)
614 int rid = i * idOffset;
615 int sid = vComm->GetColumnComm()->GetRank();
618 vComm->GetColumnComm()->Send(0, Fp);
619 vComm->GetColumnComm()->Send(0, Fv);
620 vComm->GetColumnComm()->Send(0, Ft);
621 vComm->GetColumnComm()->Send(0, Mp);
622 vComm->GetColumnComm()->Send(0, Mv);
623 vComm->GetColumnComm()->Send(0, Mt);
637 if (pFields[0]->GetComm()->GetRank() == 0)
670 int local_planes = ZIDs.size();
671 int expdim = pFields[0]->GetGraph()->GetMeshDimension();
676 for (
int plane = 0; plane < local_planes; plane++)
678 for (
int dir = 0; dir < expdim; dir++)
680 Aeroforces[plane + dir * local_planes] =
687 for (
int plane = 0; plane < local_planes; plane++)
689 for (
int dir = 0; dir < expdim; dir++)
691 Aeroforces[plane + dir * local_planes] =
m_Ft[dir];
714 int local_planes = ZIDs.size();
715 int expdim = pFields[0]->GetGraph()->GetMeshDimension();
716 int momdim = (expdim == 2) ? 1 : 3;
721 for (
int plane = 0; plane < local_planes; plane++)
723 for (
int dir = 0; dir < momdim; ++dir)
725 moments[plane + dir * local_planes] =
732 for (
int plane = 0; plane < local_planes; ++plane)
734 for (
int dir = 0; dir < momdim; dir++)
736 moments[plane + dir * local_planes] =
m_Mt[dir];
763 auto equ =
m_equ.lock();
764 ASSERTL0(equ,
"Weak pointer expired");
766 auto fluidEqu = std::dynamic_pointer_cast<FluidInterface>(equ);
767 ASSERTL0(fluidEqu,
"Aero forces filter is incompatible with this solver.");
772 if (fluidEqu->GetMovingFrameDisp(vFrameDisp, 0))
774 if (vFrameDisp[5] != 0.)
780 for (
int idir = 0; idir < 2; ++idir)
790 int cnt, elmtid, nq, offset, boundary;
792 int physTot = pFields[0]->GetNpoints();
793 int expdim = pFields[0]->GetGraph()->GetMeshDimension();
794 int momdim = (expdim == 2) ? 1 : 3;
830 m_session->DefinesSolverInfo(
"HomoStrip")
831 ? vComm->GetColumnComm()->GetColumnComm()
832 : vComm->GetColumnComm();
845 for (
int i = 0; i < expdim; i++)
856 for (
int i = 0; i < momdim; ++i)
873 if (
m_session->DefinesParameter(
"Kinvis"))
875 rho = (
m_session->DefinesParameter(
"rho"))
878 mu = rho *
m_session->GetParameter(
"Kinvis");
888 for (
int i = 0; i < pFields.size(); ++i)
892 pFields[i]->SetWaveSpace(
false);
894 pFields[i]->BwdTrans(pFields[i]->GetCoeffs(), pFields[i]->UpdatePhys());
895 pFields[i]->SetPhysState(
true);
903 BndConds = pFields[0]->GetPlane(0)->GetBndConditions();
904 BndExp = pFields[0]->GetPlane(0)->GetBndCondExpansions();
908 BndConds = pFields[0]->GetBndConditions();
909 BndExp = pFields[0]->GetBndCondExpansions();
914 for (
int plane = 0; plane <
m_nPlanes; plane++)
923 for (
int n = 0; n < pFields.size(); n++)
925 fields[n] = pFields[n]->GetPlane(
m_planesID[plane]);
930 for (
int n = 0; n < pFields.size(); n++)
932 fields[n] = pFields[n];
937 for (
int n = 0; n < physfields.size(); ++n)
939 physfields[n] = fields[n]->GetPhys();
941 for (
int n = 0; n < nVel; ++n)
946 fluidEqu->GetVelocity(physfields, velocity);
947 fluidEqu->GetPressure(physfields,
pressure);
950 for (
int n = cnt = 0; n < BndConds.size(); n++)
954 for (
int i = 0; i < BndExp[n]->GetExpSize(); ++i, cnt++)
957 elmt = fields[0]->GetExp(elmtid);
958 nq = elmt->GetTotPoints();
959 offset = fields[0]->GetPhys_Offset(elmtid);
962 for (
int j = 0; j < expdim; j++)
964 velElmt[j] = velocity[j] + offset;
970 for (
int j = 0; j < expdim; j++)
972 for (
int k = 0; k < expdim; k++)
974 grad[j * expdim + k] =
976 elmt->PhysDeriv(k, velElmt[j],
977 grad[j * expdim + k]);
990 for (
int j = 0; j < 3; ++j)
994 elmt->GetCoords(coords[0], coords[1], coords[2]);
1002 elmt->GetTraceNormal(boundary);
1006 BndExp[n]->GetExp(i);
1009 int nbc = bc->GetTotPoints();
1013 elmt->GetTracePhysVals(boundary, bc, pElmt, Pb);
1015 for (
int j = 0; j < expdim * expdim; ++j)
1018 elmt->GetTracePhysVals(boundary, bc, grad[j],
1022 for (
int j = 0; j < 3; ++j)
1025 elmt->GetTracePhysVals(boundary, bc, coords[j],
1036 for (
int j = 0; j < expdim; j++)
1045 for (
int j = 0; j < expdim; j++)
1048 for (
int k = 0; k < expdim; k++)
1051 normals[k], 1, fv[j], 1, fv[j], 1);
1053 normals[k], 1, fv[j], 1, fv[j], 1);
1055 if (!fluidEqu->HasConstantDensity())
1078 1, coordsb[1], 1, mp[0], 1);
1081 1, coordsb[1], 1, mv[0], 1);
1095 1, coordsb[2], 1, mp[0], 1);
1097 1, coordsb[2], 1, mv[0], 1);
1105 1, coordsb[0], 1, mp[1], 1);
1107 1, coordsb[0], 1, mv[1], 1);
1115 1, coordsb[1], 1, mp[2], 1);
1117 1, coordsb[1], 1, mv[2], 1);
1121 for (
int j = 0; j < expdim; j++)
1124 BndExp[n]->GetExp(i)->Integral(fp[j]);
1126 BndExp[n]->GetExp(i)->Integral(fv[j]);
1128 for (
int j = 0; j < momdim; ++j)
1131 BndExp[n]->GetExp(i)->Integral(mp[j]);
1133 BndExp[n]->GetExp(i)->Integral(mv[j]);
1139 cnt += BndExp[n]->GetExpSize();
1148 for (
int i = 0; i < expdim; i++)
1156 for (
int i = 0; i < momdim; ++i)
1168 for (
size_t i = 0; i <
m_Ft.size(); ++i)
1174 for (
size_t i = 0; i <
m_Mt.size(); ++i)
1176 int j =
m_Mt.size() - 1 - i;
1181 fluidEqu->SetAeroForce(aeroforces);
1184 for (
int plane = 0; plane <
m_nPlanes; plane++)
1188 for (
int i = 0; i < expdim; i++)
1190 for (
int j = 0; j < expdim; j++)
1197 for (
int i = 0; i < expdim; i++)
1206 for (
int i = 0; i < 3; ++i)
1210 for (
int j = 0; j < 3; ++j)
1217 for (
int i = 0; i < 3; ++i)
1226 for (
int plane = 0; plane <
m_nPlanes; plane++)
1228 for (
int i = 0; i < expdim; i++)
1235 for (
int i = 0; i < 3; ++i)
1247 for (
int i = 0; i < expdim; i++)
1253 for (
int i = 0; i < momdim; i++)
1263 for (
int i = 0; i < pFields.size(); ++i)
1265 pFields[i]->SetWaveSpace(
true);
1266 pFields[i]->HomogeneousFwdTrans(pFields[i]->GetTotPoints(),
1267 pFields[i]->GetPhys(),
1268 pFields[i]->UpdatePhys());
1281 int cnt, elmtid, offset, boundary;
1283 int physTot = pFields[0]->GetNpoints();
1284 int expdim = pFields[0]->GetGraph()->GetMeshDimension();
1285 int momdim = (expdim == 2) ? 1 : 3;
1328 m_session->DefinesSolverInfo(
"HomoStrip")
1329 ? vComm->GetColumnComm()->GetColumnComm()
1330 : vComm->GetColumnComm();
1344 for (
int i = 0; i < expdim; i++)
1355 for (
int i = 0; i < momdim; ++i)
1372 if (
m_session->DefinesParameter(
"Kinvis"))
1374 rho = (
m_session->DefinesParameter(
"rho"))
1377 mu = rho *
m_session->GetParameter(
"Kinvis");
1387 for (
int i = 0; i < pFields.size(); ++i)
1391 pFields[i]->SetWaveSpace(
false);
1393 pFields[i]->BwdTrans(pFields[i]->GetCoeffs(), pFields[i]->UpdatePhys());
1394 pFields[i]->SetPhysState(
true);
1402 BndConds = pFields[0]->GetPlane(0)->GetBndConditions();
1403 BndExp = pFields[0]->GetPlane(0)->GetBndCondExpansions();
1407 BndConds = pFields[0]->GetBndConditions();
1408 BndExp = pFields[0]->GetBndCondExpansions();
1423 Exp3DH1 = std::dynamic_pointer_cast<
1425 for (
int i = 0; i < nVel * nVel; i++)
1438 for (
int i = 0; i < 3; ++i)
1450 Exp2D = std::dynamic_pointer_cast<MultiRegions::ExpList>(
1452 for (
int i = 0; i < nVel * nVel; i++)
1466 for (
int i = 0; i < 3; ++i)
1481 std::dynamic_pointer_cast<MultiRegions::ExpList>(pFields[0]);
1482 for (
int i = 0; i < nVel * nVel; i++)
1494 for (
int i = 0; i < 3; ++i)
1507 "Expansion dimension not supported by FilterAeroForces");
1516 m_mapping->GetCartesianCoordinates(coords[0]->UpdatePhys(),
1517 coords[1]->UpdatePhys(),
1518 coords[2]->UpdatePhys());
1521 for (
int i = 0; i < nVel * nVel; ++i)
1523 Vmath::Vmul(physTot, tmp[i], 1, pFields[nVel]->GetPhys(), 1,
1524 P[i]->UpdatePhys(), 1);
1529 for (
int i = 0; i < nVel; ++i)
1532 Vmath::Vcopy(physTot, pFields[i]->GetPhys(), 1, wk[i], 1);
1534 m_mapping->ApplyChristoffelContravar(wk, tmp);
1535 for (
int i = 0; i < nVel; ++i)
1537 for (
int k = 0; k < nVel; ++k)
1540 grad[i * nVel + k]->UpdatePhys());
1543 grad[i * nVel + k]->UpdatePhys(), 1,
1544 grad[i * nVel + k]->UpdatePhys(), 1);
1548 for (
int i = 0; i < nVel; ++i)
1550 for (
int k = 0; k < nVel; ++k)
1552 Vmath::Vcopy(physTot, grad[i * nVel + k]->GetPhys(), 1, wk[k], 1);
1555 for (
int j = 0; j < nVel; ++j)
1557 Vmath::Vcopy(physTot, wk[j], 1, grad[i * nVel + j]->UpdatePhys(),
1563 m_mapping->GetJacobian(Jac->UpdatePhys());
1566 for (
int i = 0; i < nVel; ++i)
1569 for (
int k = 0; k < nVel; ++k)
1576 m_mapping->ContravarToCartesian(wk, wk);
1578 for (
int k = 0; k < nVel; k++)
1580 Vmath::Vcopy(physTot, wk[k], 1, C[k * nVel + i]->UpdatePhys(), 1);
1590 for (
int plane = 0; plane <
m_nPlanes; ++plane)
1599 for (
int n = 0; n < nVel * nVel; ++n)
1602 gradPlane[n] = grad[n]->GetPlane(
m_planesID[plane]);
1603 CPlane[n] = C[n]->GetPlane(
m_planesID[plane]);
1605 for (
int n = 0; n < 3; ++n)
1607 coordsPlane[n] = coords[n]->GetPlane(
m_planesID[plane]);
1613 for (
int n = 0; n < nVel * nVel; ++n)
1616 gradPlane[n] = grad[n];
1619 for (
int n = 0; n < 3; ++n)
1621 coordsPlane[n] = coords[n];
1627 for (
int n = cnt = 0; n < BndConds.size(); n++)
1631 for (
int i = 0; i < BndExp[n]->GetExpSize(); ++i, cnt++)
1634 elmt = PPlane[0]->GetExp(elmtid);
1635 offset = PPlane[0]->GetPhys_Offset(elmtid);
1638 for (
int j = 0; j < nVel * nVel; j++)
1640 PElmt[j] = PPlane[j]->GetPhys() + offset;
1641 gradElmt[j] = gradPlane[j]->GetPhys() + offset;
1642 CElmt[j] = CPlane[j]->GetPhys() + offset;
1644 for (
int j = 0; j < 3; ++j)
1646 coordsElmt[j] = coordsPlane[j]->GetPhys() + offset;
1648 JacElmt = JacPlane->GetPhys() + offset;
1657 normals = elmt->GetTraceNormal(boundary);
1661 BndExp[n]->GetExp(i);
1664 int nbc = bc->GetTotPoints();
1667 for (
int j = 0; j < nVel * nVel; ++j)
1670 elmt->GetTracePhysVals(boundary, bc, gradElmt[j],
1674 elmt->GetTracePhysVals(boundary, bc, PElmt[j],
1678 elmt->GetTracePhysVals(boundary, bc, CElmt[j],
1681 for (
int j = 0; j < 3; ++j)
1684 elmt->GetTracePhysVals(boundary, bc, coordsElmt[j],
1689 coordsBnd[j], 1, coordsBnd[j], 1);
1692 elmt->GetTracePhysVals(boundary, bc, JacElmt, JacBnd);
1697 for (
int j = 0; j < nVel; j++)
1701 for (
int k = 0; k < expdim; k++)
1704 normals[k], 1, fp[j], 1, fp[j], 1);
1711 for (
int j = 0; j < nVel; j++)
1714 for (
int k = 0; k < expdim; k++)
1717 normals[k], 1, fv[j], 1, fv[j], 1);
1719 normals[k], 1, fv[j], 1, fv[j], 1);
1725 for (
int k = 0; k < nVel; k++)
1732 for (
int k = 0; k < nVel; k++)
1735 for (
int j = 0; j < nVel; j++)
1738 1, wk[k], 1, wk[k], 1);
1741 for (
int k = 0; k < nVel; k++)
1746 for (
int k = 0; k < nVel; k++)
1749 for (
int j = 0; j < nVel; j++)
1752 1, wk[k], 1, wk[k], 1);
1755 for (
int k = 0; k < nVel; k++)
1773 fptmp, 1, coordsBnd[1], 1, mp[0], 1);
1775 fvtmp, 1, coordsBnd[1], 1, mv[0], 1);
1789 fptmp, 1, coordsBnd[2], 1, mp[0], 1);
1791 fvtmp, 1, coordsBnd[2], 1, mv[0], 1);
1799 fptmp, 1, coordsBnd[0], 1, mp[1], 1);
1801 fvtmp, 1, coordsBnd[0], 1, mv[1], 1);
1809 fptmp, 1, coordsBnd[1], 1, mp[2], 1);
1811 fvtmp, 1, coordsBnd[1], 1, mv[2], 1);
1815 for (
int j = 0; j < expdim; j++)
1818 BndExp[n]->GetExp(i)->Integral(fp[j]);
1820 BndExp[n]->GetExp(i)->Integral(fv[j]);
1824 for (
int j = 0; j < momdim; ++j)
1827 BndExp[n]->GetExp(i)->Integral(mp[j]);
1829 BndExp[n]->GetExp(i)->Integral(mv[j]);
1835 cnt += BndExp[n]->GetExpSize();
1844 for (
int i = 0; i < expdim; ++i)
1852 for (
int i = 0; i < momdim; ++i)
1862 for (
int plane = 0; plane <
m_nPlanes; plane++)
1866 for (
int i = 0; i < expdim; i++)
1868 for (
int j = 0; j < expdim; j++)
1875 for (
int i = 0; i < expdim; i++)
1885 for (
int i = 0; i < 3; ++i)
1889 for (
int j = 0; j < 3; ++j)
1897 for (
int i = 0; i < 3; ++i)
1906 for (
int plane = 0; plane <
m_nPlanes; plane++)
1908 for (
int i = 0; i < expdim; i++)
1915 for (
int i = 0; i < 3; ++i)
1927 for (
int i = 0; i < expdim; i++)
1933 for (
int i = 0; i < momdim; i++)
1943 for (
int i = 0; i < pFields.size(); ++i)
1945 pFields[i]->SetWaveSpace(
true);
1946 pFields[i]->HomogeneousFwdTrans(pFields[i]->GetTotPoints(),
1947 pFields[i]->GetPhys(),
1948 pFields[i]->UpdatePhys());
#define ASSERTL0(condition, msg)
static GLOBAL_MAPPING_EXPORT MappingSharedPtr Load(const LibUtilities::SessionReaderSharedPtr &pSession, const Array< OneD, MultiRegions::ExpListSharedPtr > &pFields)
Return a pointer to the mapping, creating it on first call.
NekDouble Evaluate() const
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, std::string pDesc="")
Register a class with the factory.
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
Abstraction of a two-dimensional multi-elemental expansion which is merely a collection of local expa...
static bool GenerateSeqVector(const std::string &str, std::vector< unsigned int > &out)
Takes a comma-separated compressed string and converts it to entries in a vector.
void v_Finalise(const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, const NekDouble &time) override
Array< OneD, int > m_planesID
Array< OneD, Array< OneD, NekDouble > > m_Fvplane
void v_Update(const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, const NekDouble &time) override
void CalculateForces(const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, const NekDouble &time)
SOLVER_UTILS_EXPORT FilterAeroForces(const LibUtilities::SessionReaderSharedPtr &pSession, const std::shared_ptr< EquationSystem > &pEquation, const std::map< std::string, std::string > &pParams)
Array< OneD, int > m_BCtoElmtID
int m_nPlanes
number of planes for homogeneous1D expansion
SOLVER_UTILS_EXPORT ~FilterAeroForces() override
Array< OneD, NekDouble > m_pivotPoint
Array< OneD, NekDouble > m_Mp
bool m_outputAllPlanes
if using a homogeneous1D expansion, determine if should output all planes or just the average
void CalculateForcesMapping(const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, const NekDouble &time)
std::vector< unsigned int > m_boundaryRegionsIdList
ID's of boundary regions where we want the forces.
Array< OneD, Array< OneD, NekDouble > > m_directions
Array< OneD, NekDouble > m_Fv
std::ofstream m_outputStream
std::vector< bool > m_boundaryRegionIsInList
Determines if a given Boundary Region is in m_boundaryRegionsIdList.
Array< OneD, NekDouble > m_Mv
std::string m_BoundaryString
static std::string className
Name of the class.
Array< OneD, int > m_BCtoTraceID
Array< OneD, Array< OneD, NekDouble > > m_Mpplane
bool v_IsTimeDependent() override
SOLVER_UTILS_EXPORT void GetMoments(const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, Array< OneD, NekDouble > &moments, const NekDouble &time)
Array< OneD, Array< OneD, NekDouble > > m_directions0
GlobalMapping::MappingSharedPtr m_mapping
Array< OneD, Array< OneD, NekDouble > > m_Ftplane
unsigned int m_outputFrequency
void v_Initialise(const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, const NekDouble &time) override
Array< OneD, NekDouble > m_Ft
SOLVER_UTILS_EXPORT void GetForces(const Array< OneD, const MultiRegions::ExpListSharedPtr > &pFields, Array< OneD, NekDouble > &Aeroforces, const NekDouble &time)
Array< OneD, NekDouble > m_Fp
static FilterSharedPtr create(const LibUtilities::SessionReaderSharedPtr &pSession, const std::shared_ptr< EquationSystem > &pEquation, const std::map< std::string, std::string > &pParams)
Creates an instance of this class.
Array< OneD, Array< OneD, NekDouble > > m_Mtplane
Array< OneD, NekDouble > m_Mt
Array< OneD, Array< OneD, NekDouble > > m_Fpplane
Array< OneD, Array< OneD, NekDouble > > m_Mvplane
SOLVER_UTILS_EXPORT std::string SetupOutput(const std::string ext, const ParamMap &pParams)
LibUtilities::SessionReaderSharedPtr m_session
const std::weak_ptr< EquationSystem > m_equ
std::map< std::string, std::string > ParamMap
bool m_updateOnInitialise
const BoundaryRegionCollection & GetBoundaryRegions(void) const
std::shared_ptr< SessionReader > SessionReaderSharedPtr
std::shared_ptr< Comm > CommSharedPtr
Pointer to a Communicator object.
@ P
Monomial polynomials .
std::shared_ptr< Expansion > ExpansionSharedPtr
MultiRegions::Direction const DirCartesianMap[]
std::shared_ptr< ExpList > ExpListSharedPtr
Shared pointer to an ExpList object.
std::shared_ptr< ExpList3DHomogeneous1D > ExpList3DHomogeneous1DSharedPtr
Shared pointer to an ExpList3DHomogeneous1D object.
FilterFactory & GetFilterFactory()
std::map< int, BoundaryRegionShPtr > BoundaryRegionCollection
InputIterator find(InputIterator first, InputIterator last, InputIterator startingpoint, const EqualityComparable &value)
static Array< OneD, NekDouble > NullNekDouble1DArray
void Vmul(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Multiply vector z = x*y.
void Vvtvp(int n, const T *w, const int incw, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
vvtvp (vector times vector plus vector): z = w*x + y
T Vsum(int n, const T *x, const int incx)
Subtract return sum(x)
void Vadd(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Add vector z = x+y.
void Smul(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha*x.
void Sadd(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Add vector y = alpha + x.
void Vvtvvtp(int n, const T *v, int incv, const T *w, int incw, const T *x, int incx, const T *y, int incy, T *z, int incz)
vvtvvtp (vector times vector plus vector times vector):
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
scalarT< T > sqrt(scalarT< T > in)