35 #include <boost/core/ignore_unused.hpp>
40 #include <boost/algorithm/string/predicate.hpp>
46 namespace GlobalMapping
50 bool Mapping::m_init =
false;
51 bool Mapping::m_isDefined =
false;
61 : m_session(pSession), m_fields(pFields)
86 ASSERTL0(0,
"Dimension not supported");
103 const TiXmlElement *pMapping)
105 boost::ignore_unused(pFields);
107 int phystot =
m_fields[0]->GetTotPoints();
113 for (
int i = 0; i < 3; i++)
121 const TiXmlElement *timeDep = pMapping->FirstChildElement(
"TIMEDEPENDENT");
124 string sTimeDep = timeDep->GetText();
126 (boost::iequals(sTimeDep,
"yes"));
134 string fieldNames[3] = {
"x",
"y",
"z"};
135 const TiXmlElement *funcNameElmt = pMapping->FirstChildElement(
"COORDS");
140 "Function '" +
m_funcName +
"' not defined.");
143 m_fields[0]->GetCoords(coords[0], coords[1], coords[2]);
145 std::string s_FieldStr;
148 for (
int i = 0; i < 3; i++)
150 s_FieldStr = fieldNames[i];
159 "3DH1D does not support mapping in the z-direction.");
171 m_fields[0]->GetCoords(coords[0], coords[1], coords[2]);
172 for (
int i = 0; i < 3; i++)
183 string velFieldNames[3] = {
"vx",
"vy",
"vz"};
184 const TiXmlElement *velFuncNameElmt = pMapping->FirstChildElement(
"VEL");
191 std::string s_FieldStr;
194 for (
int i = 0; i < 3; i++)
196 s_FieldStr = velFieldNames[i];
205 "3DH1D does not support mapping in the z-direction.");
217 for (
int i = 0; i < 3; i++)
228 for (
int i = 0; i < nvel; i++)
231 for (
int j = 0; j < nvel; j++)
252 TiXmlElement *vMapping = NULL;
254 if (
m_session->DefinesElement(
"Nektar/Mapping"))
256 vMapping =
m_session->GetElement(
"Nektar/Mapping");
276 TiXmlElement *vMapping = NULL;
278 if (pSession->DefinesElement(
"Nektar/Mapping"))
280 vMapping = pSession->GetElement(
"Nektar/Mapping");
281 vType = vMapping->Attribute(
"TYPE");
286 vType =
"Translation";
307 const std::string &outname)
312 fieldMetaDataMap[
"MappingCartesianVel"] = std::string(
"False");
316 fieldMetaDataMap[
"MappingType"] = std::string(
"Expression");
317 fieldMetaDataMap[
"MappingExpression"] =
m_funcName;
325 int expdim =
m_fields[0]->GetGraph()->GetMeshDimension();
326 string fieldNames[3] = {
"x",
"y",
"z"};
327 string velFieldNames[3] = {
"vx",
"vy",
"vz"};
329 std::vector<LibUtilities::FieldDefinitionsSharedPtr> FieldDef =
331 std::vector<std::vector<NekDouble>> FieldData(FieldDef.size());
333 int ncoeffs =
m_fields[0]->GetNcoeffs();
336 bool wavespace =
m_fields[0]->GetWaveSpace();
339 for (
int j = 0; j < expdim; ++j)
343 for (
int i = 0; i < FieldDef.size(); ++i)
346 FieldDef[i]->m_fields.push_back(fieldNames[j]);
347 m_fields[0]->AppendFieldData(FieldDef[i], FieldData[i],
355 for (
int j = 0; j < expdim; ++j)
359 for (
int i = 0; i < FieldDef.size(); ++i)
362 FieldDef[i]->m_fields.push_back(velFieldNames[j]);
363 m_fields[0]->AppendFieldData(FieldDef[i], FieldData[i],
369 std::string outfile = outname;
370 outfile.erase(outfile.end() - 4, outfile.end());
373 m_fld->Write(outfile, FieldDef, FieldData, fieldMetaDataMap);
376 fieldMetaDataMap[
"MappingType"] = std::string(
"File");
377 fieldMetaDataMap[
"FileName"] = outfile;
379 m_fields[0]->SetWaveSpace(wavespace);
389 ASSERTL0(pSession->DefinesFunction(pFunctionName),
390 "Function '" + pFunctionName +
"' does not exist.");
393 pSession->GetFunction(pFunctionName, pFieldName);
399 ffunc->Evaluate(x0, x1, x2, pTime, pArray);
408 ASSERTL0(pSession->DefinesFunction(pFunctionName),
409 "Function '" + pFunctionName +
"' does not exist.");
411 unsigned int nq = pFields[0]->GetNpoints();
412 if (pArray.size() != nq)
418 vType = pSession->GetFunctionType(pFunctionName, pFieldName);
425 pFields[0]->GetCoords(x0, x1, x2);
427 pSession->GetFunction(pFunctionName, pFieldName);
429 ffunc->Evaluate(x0, x1, x2, pTime, pArray);
433 std::string filename =
434 pSession->GetFunctionFilename(pFunctionName, pFieldName);
436 std::vector<LibUtilities::FieldDefinitionsSharedPtr> FieldDef;
437 std::vector<std::vector<NekDouble>> FieldData;
443 fld->Import(filename, FieldDef, FieldData);
446 for (
int i = 0; i < FieldDef.size(); ++i)
448 for (
int j = 0; j < FieldDef[i]->m_fields.size(); ++j)
450 if (FieldDef[i]->
m_fields[j] == pFieldName)
458 pFields[0]->ExtractDataToCoeffs(FieldDef[i], FieldData[i],
464 cout <<
"Field " + pFieldName +
" not found." << endl;
467 pFields[0]->BwdTrans(vCoeffs, pArray);
485 if (inarray == outarray)
487 int physTot =
m_fields[0]->GetTotPoints();
490 for (
int i = 0; i < nvel; i++)
516 if (inarray == outarray)
518 int physTot =
m_fields[0]->GetTotPoints();
521 for (
int i = 0; i < nvel; i++)
547 if (inarray == outarray)
549 int physTot =
m_fields[0]->GetTotPoints();
552 for (
int i = 0; i < nvel; i++)
578 if (inarray == outarray)
580 int physTot =
m_fields[0]->GetTotPoints();
583 for (
int i = 0; i < nvel; i++)
608 if (inarray == outarray)
610 int physTot =
m_fields[0]->GetTotPoints();
613 for (
int i = 0; i < nvel; i++)
638 if (inarray == outarray)
640 int physTot =
m_fields[0]->GetTotPoints();
643 for (
int i = 0; i < nvel; i++)
659 int physTot =
m_fields[0]->GetTotPoints();
672 int physTot =
m_fields[0]->GetTotPoints();
685 int physTot =
m_fields[0]->GetTotPoints();
691 bool wavespace =
m_fields[0]->GetWaveSpace();
703 Vmath::Vvtvp(physTot, inarray[i], 1, wk, 1, outarray, 1, outarray,
706 m_fields[0]->SetWaveSpace(wavespace);
713 int physTot =
m_fields[0]->GetTotPoints();
720 for (
int i = 0; i < nvel; i++)
723 for (
int j = 0; j < nvel; j++)
725 Vmath::Vvtvp(physTot, g[i * nvel + j], 1, inarray[j], 1,
726 outarray[i], 1, outarray[i], 1);
734 int physTot =
m_fields[0]->GetTotPoints();
741 for (
int i = 0; i < nvel; i++)
744 for (
int j = 0; j < nvel; j++)
746 Vmath::Vvtvp(physTot, g[i * nvel + j], 1, inarray[j], 1,
747 outarray[i], 1, outarray[i], 1);
755 int physTot =
m_fields[0]->GetTotPoints();
761 bool wavespace =
m_fields[0]->GetWaveSpace();
770 Vmath::Vmul(physTot, Jac, 1, inarray[i], 1, wk, 1);
773 Vmath::Vadd(physTot, wk, 1, outarray, 1, outarray, 1);
775 Vmath::Vdiv(physTot, outarray, 1, Jac, 1, outarray, 1);
777 m_fields[0]->SetWaveSpace(wavespace);
784 int physTot =
m_fields[0]->GetTotPoints();
790 bool wavespace =
m_fields[0]->GetWaveSpace();
795 for (
int i = 0; i < nvel; i++)
800 m_wk2[i * nvel + 1]);
807 for (
int k = 0; k < nvel; k++)
810 m_wk1[i * nvel + k], 1);
814 for (
int i = 0; i < nvel; i++)
816 for (
int k = 0; k < nvel; k++)
818 tmp[k] =
m_wk1[i * nvel + k];
821 for (
int j = 0; j < nvel; j++)
832 for (
int i = 0; i < nvel; i++)
835 for (
int j = 0; j < nvel; j++)
848 for (
int i = 0; i < nvel; i++)
850 for (
int p = 0;
p < nvel;
p++)
855 for (
int j = 0; j < nvel; j++)
863 for (
int j = 0; j < nvel; j++)
865 for (
int p = 0;
p < nvel;
p++)
870 for (
int i = 0; i < nvel; i++)
878 m_fields[0]->SetWaveSpace(wavespace);
884 int physTot =
m_fields[0]->GetTotPoints();
890 for (
int i = 0; i < nvel * nvel * nvel; i++)
896 bool wavespace =
m_fields[0]->GetWaveSpace();
901 for (
int i = 0; i < nvel; i++)
906 m_wk2[i * nvel + 1]);
913 for (
int j = 0; j < nvel; j++)
916 m_wk1[i * nvel + j], 1);
925 for (
int i = 0; i < nvel; i++)
927 for (
int j = 0; j < nvel; j++)
933 outarray[i * nvel * nvel + j * nvel + 0],
934 outarray[i * nvel * nvel + j * nvel + 1]);
940 outarray[i * nvel * nvel + j * nvel + 0],
941 outarray[i * nvel * nvel + j * nvel + 1],
942 outarray[i * nvel * nvel + j * nvel + 2]);
948 for (
int i = 0; i < nvel; i++)
950 for (
int p = 0;
p < nvel;
p++)
955 for (
int j = 0; j < nvel; j++)
957 for (
int k = 0; k < nvel; k++)
959 Vmath::Vsub(physTot, outarray[i * nvel * nvel + j * nvel + k],
960 1,
m_wk2[j * nvel + k], 1,
961 outarray[i * nvel * nvel + j * nvel + k], 1);
967 for (
int j = 0; j < nvel; j++)
969 for (
int p = 0;
p < nvel;
p++)
974 for (
int i = 0; i < nvel; i++)
976 for (
int k = 0; k < nvel; k++)
978 Vmath::Vadd(physTot, outarray[i * nvel * nvel + j * nvel + k],
979 1,
m_wk2[i * nvel + k], 1,
980 outarray[i * nvel * nvel + j * nvel + k], 1);
986 m_fields[0]->SetWaveSpace(wavespace);
991 const bool generalized)
993 int physTot =
m_fields[0]->GetTotPoints();
997 bool wavespace =
m_fields[0]->GetWaveSpace();
1010 for (
int i = 0; i < nvel; ++i)
1012 for (
int k = 0; k < nvel; ++k)
1015 for (
int j = 0; j < nvel; ++j)
1017 tmp[j] = ddU[i * nvel * nvel + j * nvel + k];
1020 for (
int p = 0;
p < nvel; ++
p)
1023 ddU[i * nvel * nvel +
p * nvel + k], 1);
1028 for (
int i = 0; i < nvel; ++i)
1031 for (
int k = 0; k < nvel; ++k)
1034 ddU[k * nvel * nvel + i * nvel + k], 1, outarray[i],
1037 ddU[i * nvel * nvel + k * nvel + k], 1, outarray[i],
1044 m_fields[0]->CurlCurl(inarray, outarray);
1048 m_fields[0]->SetWaveSpace(wavespace);
1053 int physTot =
m_fields[0]->GetTotPoints();
1056 int nbnds =
m_fields[0]->GetBndConditions().size();
1065 for (
int i = 0; i < nfields; i++)
1073 for (
int i = 0; i < nvel; i++)
1086 for (
int dir = 0; dir < 3; dir++)
1093 for (
int n = 0; n < nbnds; ++n)
1096 for (
int i = 0; i < nfields; ++i)
1098 BndConds =
m_fields[i]->GetBndConditions();
1099 BndExp =
m_fields[i]->GetBndCondExpansions();
1100 if (BndConds[n]->GetBoundaryConditionType() ==
1103 isDirichlet[i] =
true;
1108 for (
int j = 0; j < nvel; ++j)
1111 ->GetBndConditions()[n]
1112 ->GetBoundaryConditionType() ==
1114 "Mapping only supported when all velocity "
1115 "components have the same type of boundary "
1121 "Time-dependent Dirichlet boundary conditions not "
1122 "supported with mapping yet.");
1126 std::static_pointer_cast<
1128 ->m_dirichletCondition;
1130 condition.
Evaluate(coords[0], coords[1], coords[2], time,
1135 isDirichlet[i] =
false;
1141 for (
int i = 0; i < nvel; ++i)
1146 for (
int i = 0; i < nvel; ++i)
1153 for (
int i = 0; i < nfields; ++i)
1155 BndConds =
m_fields[i]->GetBndConditions();
1156 BndExp =
m_fields[i]->GetBndCondExpansions();
1158 if (BndConds[n]->GetUserDefined() ==
"" ||
1159 BndConds[n]->GetUserDefined() ==
"MovingBody")
1161 m_fields[i]->ExtractPhysToBnd(n, values[i],
1162 BndExp[n]->UpdatePhys());
1165 if ((i < nvel) && BndConds[n]->GetUserDefined() ==
"MovingBody")
1169 BndExp[n]->GetTotPoints());
1170 m_fields[i]->ExtractPhysToBnd(n, coordVel[i], coordVelBnd);
1173 Vmath::Vadd(BndExp[n]->GetTotPoints(), coordVelBnd, 1,
1174 BndExp[n]->UpdatePhys(), 1,
1175 BndExp[n]->UpdatePhys(), 1);
1182 for (
int i = 0; i <
m_fields.size(); ++i)
1185 BndConds =
m_fields[i]->GetBndConditions();
1186 BndExp =
m_fields[i]->GetBndCondExpansions();
1188 for (
int n = 0; n < BndConds.size(); ++n)
1190 if (BndConds[n]->GetBoundaryConditionType() ==
1193 if (BndConds[n]->GetUserDefined() ==
"" ||
1194 BndConds[n]->GetUserDefined() ==
"MovingBody")
1198 BndExp[n]->SetWaveSpace(
false);
1201 BndExp[n]->FwdTransBndConstrained(
1202 BndExp[n]->GetPhys(), BndExp[n]->UpdateCoeffs());
1215 std::string s_FieldStr;
1216 string fieldNames[3] = {
"x",
"y",
"z"};
1217 string velFieldNames[3] = {
"vx",
"vy",
"vz"};
1221 for (
int i = 0; i < 3; i++)
1223 s_FieldStr = fieldNames[i];
1232 "3DH1D does not support mapping in the z-direction.");
1235 s_FieldStr = velFieldNames[i];
1244 "3DH1D does not support mapping in the z-direction.");
1251 int physTot =
m_fields[0]->GetTotPoints();
1254 for (
int i = 0; i < 3; i++)
1259 for (
int i = 0; i < nvel; i++)
#define ASSERTL0(condition, msg)
bool m_fromFunction
Flag defining if the Mapping is defined by a function.
int m_nConvectiveFields
Number of velocity components.
static MappingSharedPtr m_mappingPtr
virtual GLOBAL_MAPPING_EXPORT void v_GetCartesianCoordinates(Array< OneD, NekDouble > &out0, Array< OneD, NekDouble > &out1, Array< OneD, NekDouble > &out2)
GLOBAL_MAPPING_EXPORT void EvaluateTimeFunction(LibUtilities::SessionReaderSharedPtr pSession, std::string pFieldName, Array< OneD, NekDouble > &pArray, const std::string &pFunctionName, NekDouble pTime=NekDouble(0))
LibUtilities::SessionReaderSharedPtr m_session
Session reader.
virtual GLOBAL_MAPPING_EXPORT void v_UpdateBCs(const NekDouble time)
GLOBAL_MAPPING_EXPORT void ApplyChristoffelCovar(const Array< OneD, Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray)
Apply the Christoffel symbols to a covariant vector.
GLOBAL_MAPPING_EXPORT void GetCartesianCoordinates(Array< OneD, NekDouble > &out0, Array< OneD, NekDouble > &out1, Array< OneD, NekDouble > &out2)
Get the Cartesian coordinates in the field.
GLOBAL_MAPPING_EXPORT bool IsTimeDependent()
Get flag defining if mapping is time-dependent.
virtual GLOBAL_MAPPING_EXPORT void v_VelocityLaplacian(const Array< OneD, Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray, const NekDouble alpha)
Array< OneD, Array< OneD, NekDouble > > m_wk2
GLOBAL_MAPPING_EXPORT void ContravarToCartesian(const Array< OneD, Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray)
Convert a contravariant vector to the Cartesian system.
GLOBAL_MAPPING_EXPORT void UpdateGeomInfo()
Recompute the metric terms of the Mapping.
Array< OneD, Array< OneD, NekDouble > > m_coords
Array with the Cartesian coordinates.
Array< OneD, Array< OneD, NekDouble > > m_coordsVel
Array with the velocity of the coordinates.
Array< OneD, MultiRegions::ExpListSharedPtr > m_fields
std::string m_velFuncName
Name of the function containing the velocity of the coordinates.
GLOBAL_MAPPING_EXPORT void InitObject(const Array< OneD, MultiRegions::ExpListSharedPtr > &pFields, const TiXmlElement *pMapping)
Initialise the mapping object.
virtual GLOBAL_MAPPING_EXPORT void v_CovarToCartesian(const Array< OneD, Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray)=0
GLOBAL_MAPPING_EXPORT void Output(LibUtilities::FieldMetaDataMap &fieldMetaDataMap, const std::string &outname)
Output function called when a chk or fld file is written.
GLOBAL_MAPPING_EXPORT void ContravarFromCartesian(const Array< OneD, Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray)
Convert a contravariant vector to the transformed system.
GLOBAL_MAPPING_EXPORT void GetCoordVelocity(Array< OneD, Array< OneD, NekDouble >> &outarray)
Obtain the velocity of the coordinates.
virtual GLOBAL_MAPPING_EXPORT void v_LowerIndex(const Array< OneD, Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray)
Array< OneD, Array< OneD, NekDouble > > m_wk1
GLOBAL_MAPPING_EXPORT void EvaluateFunction(Array< OneD, MultiRegions::ExpListSharedPtr > pFields, LibUtilities::SessionReaderSharedPtr pSession, std::string pFieldName, Array< OneD, NekDouble > &pArray, const std::string &pFunctionName, NekDouble pTime=NekDouble(0))
virtual GLOBAL_MAPPING_EXPORT void v_CurlCurlField(Array< OneD, Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray, const bool generalized)
virtual GLOBAL_MAPPING_EXPORT void v_CovarFromCartesian(const Array< OneD, Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray)=0
LibUtilities::FieldIOSharedPtr m_fld
GLOBAL_MAPPING_EXPORT void GetMetricTensor(Array< OneD, Array< OneD, NekDouble >> &outarray)
Get the metric tensor .
GLOBAL_MAPPING_EXPORT void CovarFromCartesian(const Array< OneD, Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray)
Convert a covariant vector to the transformed system.
virtual GLOBAL_MAPPING_EXPORT void v_gradgradU(const Array< OneD, Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray)
GLOBAL_MAPPING_EXPORT bool HasConstantJacobian()
Get flag defining if mapping has constant Jacobian.
GLOBAL_MAPPING_EXPORT void gradgradU(const Array< OneD, Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray)
Second order covariant derivatives of a contravariant vector.
GLOBAL_MAPPING_EXPORT void ReplaceField(const Array< OneD, MultiRegions::ExpListSharedPtr > &pFields)
Replace the Expansion List used by the mapping.
GLOBAL_MAPPING_EXPORT void GetInvMetricTensor(Array< OneD, Array< OneD, NekDouble >> &outarray)
Get the inverse of metric tensor .
virtual GLOBAL_MAPPING_EXPORT void v_DotGradJacobian(const Array< OneD, Array< OneD, NekDouble >> &inarray, Array< OneD, NekDouble > &outarray)
virtual GLOBAL_MAPPING_EXPORT void v_Divergence(const Array< OneD, Array< OneD, NekDouble >> &inarray, Array< OneD, NekDouble > &outarray)
virtual GLOBAL_MAPPING_EXPORT void v_ContravarFromCartesian(const Array< OneD, Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray)=0
GLOBAL_MAPPING_EXPORT void LowerIndex(const Array< OneD, Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray)
Lower index of vector: .
GLOBAL_MAPPING_EXPORT void CovarToCartesian(const Array< OneD, Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray)
Convert a covariant vector to the Cartesian system.
std::string m_funcName
Name of the function containing the coordinates.
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.
GLOBAL_MAPPING_EXPORT void GetJacobian(Array< OneD, NekDouble > &outarray)
Get the Jacobian of the transformation.
virtual GLOBAL_MAPPING_EXPORT void v_ContravarToCartesian(const Array< OneD, Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray)=0
virtual GLOBAL_MAPPING_EXPORT void v_InitObject(const Array< OneD, MultiRegions::ExpListSharedPtr > &pFields, const TiXmlElement *pMapping)
Array< OneD, Array< OneD, NekDouble > > m_tmp
virtual GLOBAL_MAPPING_EXPORT void v_UpdateMapping(const NekDouble time, const Array< OneD, Array< OneD, NekDouble >> &coords=NullNekDoubleArrayOfArray, const Array< OneD, Array< OneD, NekDouble >> &coordsVel=NullNekDoubleArrayOfArray)
virtual GLOBAL_MAPPING_EXPORT void v_RaiseIndex(const Array< OneD, Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray)
GLOBAL_MAPPING_EXPORT void ApplyChristoffelContravar(const Array< OneD, Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray)
Apply the Christoffel symbols to a contravariant vector.
bool m_timeDependent
Flag defining if the Mapping is time-dependent.
GLOBAL_MAPPING_EXPORT void RaiseIndex(const Array< OneD, Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray)
Raise index of vector: .
virtual GLOBAL_MAPPING_EXPORT void v_GetCoordVelocity(Array< OneD, Array< OneD, NekDouble >> &outarray)
NekDouble Evaluate() const
static std::shared_ptr< FieldIO > CreateForFile(const LibUtilities::SessionReaderSharedPtr session, const std::string &filename)
Construct a FieldIO object for a given input filename.
static std::shared_ptr< FieldIO > CreateDefault(const LibUtilities::SessionReaderSharedPtr session)
Returns an object for the default FieldIO method.
Provides a generic Factory class.
tBaseSharedPtr CreateInstance(tKey idKey, tParam... args)
Create an instance of the class referred to by idKey.
GLOBAL_MAPPING_EXPORT typedef std::shared_ptr< Mapping > MappingSharedPtr
A shared pointer to a Mapping object.
MappingFactory & GetMappingFactory()
Declaration of the mapping factory singleton.
std::shared_ptr< FieldIO > FieldIOSharedPtr
std::map< std::string, std::string > FieldMetaDataMap
std::shared_ptr< SessionReader > SessionReaderSharedPtr
std::shared_ptr< Equation > EquationSharedPtr
@ eFunctionTypeExpression
MultiRegions::Direction const DirCartesianMap[]
The above copyright notice and this permission notice shall be included.
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
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 Zero(int n, T *x, const int incx)
Zero vector.
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.