58 m_session->MatchSolverInfo(
"MappingImplicitPressure",
"True",
60 m_session->MatchSolverInfo(
"MappingImplicitViscous",
"True",
81 size_t physTot =
m_fields[0]->GetTotPoints();
106 for (
size_t i = 0; i < nvel; i++)
114 for (
size_t i = 0; i < nvel; ++i)
120 m_fields[0]->HomogeneousBwdTrans(physTot, gradP[i], wk[i]);
132 for (
size_t i = 0; i < nvel; ++i)
134 Vmath::Vmul(physTot, correction[i], 1, Jac, 1, correction[i],
138 for (
size_t i = 0; i < nvel; ++i)
146 for (
size_t i = 0; i < nvel; ++i)
148 m_pressure->HomogeneousFwdTrans(physTot, correction[i],
153 for (
size_t i = 0; i < nvel; ++i)
155 Vmath::Vsub(physTot, gradP[i], 1, correction[i], 1, correction[i],
166 if (boost::iequals(
m_PBndConds[n]->GetUserDefined(),
"H"))
168 m_fields[0]->GetBndElmtExpansion(n, BndElmtExp);
173 m_fields[0]->ExtractPhysToBndElmt(n, correction[i],
181 m_fields[0]->ExtractElmtToBndPhys(n, correctionElmt[i],
184 m_PBndExp[n]->NormVectorIProductWRTBase(BndValues, Vals);
192 for (
size_t cnt = n = 0; n <
m_PBndConds.size(); ++n)
216 size_t physTot =
m_fields[0]->GetTotPoints();
241 for (i = 0; i < nvel; i++)
252 m_fields[0]->HomogeneousBwdTrans(physTot, N[i], N_new[i]);
258 Vmath::Vmul(physTot, Jac, 1, N_new[i], 1, N_new[i], 1);
261 m_fields[0]->HomogeneousFwdTrans(physTot, N_new[i], N_new[i]);
266 for (i = 0; i < nvel; i++)
270 m_fields[0]->HomogeneousBwdTrans(physTot, fields[i],
286 m_mapping->DotGradJacobian(fields_new, tmp);
289 bool wavespace =
m_fields[0]->GetWaveSpace();
295 Vmath::Vadd(physTot, Q_field[i], 1, tmp2, 1, Q_field[i], 1);
297 m_fields[0]->SetWaveSpace(wavespace);
303 Vmath::Vmul(physTot, Jac, 1, fields_new[i], 1, fields_new[i], 1);
304 Vmath::Vmul(physTot, Jac, 1, Q_field[i], 1, Q_field[i], 1);
307 m_fields[0]->HomogeneousFwdTrans(physTot, fields_new[i],
309 m_fields[0]->HomogeneousFwdTrans(physTot, Q_field[i],
318 if (boost::iequals(
m_PBndConds[n]->GetUserDefined(),
"H"))
320 m_fields[0]->GetBndElmtExpansion(n, BndElmtExp);
321 size_t nq = BndElmtExp->GetTotPoints();
326 m_fields[0]->ExtractPhysToBndElmt(n, fields_new[i],
328 m_fields[0]->ExtractPhysToBndElmt(n, N_new[i],
330 m_fields[0]->ExtractPhysToBndElmt(n, Q_field[i], Q[i]);
347 m_fields[0]->ExtractElmtToBndPhys(n, Q[i], BndValues[i]);
349 m_PBndExp[n]->NormVectorIProductWRTBase(BndValues, Pvals);
353 m_fields[0]->ExtractElmtToBndPhys(n, Velocity[i],
356 m_PBndExp[n]->NormVectorIProductWRTBase(BndValues, Uvals);
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.
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, std::string pDesc="")
Register a class with the factory.
An abstract base class encapsulating the concept of advection of a vector field.
std::shared_ptr< SessionReader > SessionReaderSharedPtr
MultiRegions::Direction const DirCartesianMap[]
std::shared_ptr< ExpList > ExpListSharedPtr
Shared pointer to an ExpList object.
std::shared_ptr< Advection > AdvectionSharedPtr
A shared pointer to an Advection object.
The above copyright notice and this permission notice shall be included.
ExtrapolateFactory & GetExtrapolateFactory()
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 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 Vdiv(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 Vcopy(int n, const T *x, const int incx, T *y, const int incy)
void Vsub(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Subtract vector z = x-y.