49 m_lhom(1), m_homogeneous1DBlockMat(
58 const bool useFFT,
const bool dealiasing)
59 :
ExpList(type), m_useFFT(useFFT), m_lhom(lhom),
60 m_homogeneous1DBlockMat(
62 m_dealiasing(dealiasing)
65 m_comm = pSession->GetComm();
68 "Homogeneous Basis is a null basis");
73 ?
m_comm->GetColumnComm()->GetColumnComm()
77 "HomModesZ should be a multiple of npz.");
88 "HomModesZ/npz should be an even integer.");
116 ASSERTL0(
false,
"Dealiasing available just in combination "
126 :
ExpList(In, false), m_transposition(In.m_transposition),
127 m_StripZcomm(In.m_StripZcomm), m_useFFT(In.m_useFFT), m_FFT(In.m_FFT),
128 m_tmpIN(In.m_tmpIN), m_tmpOUT(In.m_tmpOUT),
129 m_homogeneousBasis(In.m_homogeneousBasis), m_lhom(In.m_lhom),
130 m_homogeneous1DBlockMat(In.m_homogeneous1DBlockMat),
131 m_dealiasing(In.m_dealiasing), m_padsize(In.m_padsize)
139 :
ExpList(In, eIDs, false, ImpType), m_transposition(In.m_transposition),
140 m_useFFT(In.m_useFFT), m_FFT(In.m_FFT), m_tmpIN(In.m_tmpIN),
141 m_tmpOUT(In.m_tmpOUT), m_homogeneousBasis(In.m_homogeneousBasis),
143 m_homogeneous1DBlockMat(
145 m_dealiasing(In.m_dealiasing), m_padsize(In.m_padsize)
202 int num_points_per_plane = num_dofs /
m_planes.size();
204 if (!
m_session->DefinesSolverInfo(
"HomoStrip"))
206 num_proc =
m_comm->GetColumnComm()->GetSize();
212 int num_dfts_per_proc =
213 num_points_per_plane / num_proc + (num_points_per_plane % num_proc > 0);
233 for (
int i = 0; i < num_dfts_per_proc; i++)
237 Vmath::Vcopy(N, &(ShufV1[i * N]), 1, &(ShufV1_PAD_coef[0]), 1);
238 Vmath::Vcopy(N, &(ShufV2[i * N]), 1, &(ShufV2_PAD_coef[0]), 1);
241 m_FFT_deal->FFTBwdTrans(ShufV1_PAD_coef, ShufV1_PAD_phys);
242 m_FFT_deal->FFTBwdTrans(ShufV2_PAD_coef, ShufV2_PAD_phys);
247 ShufV1V2_PAD_phys, 1);
251 m_FFT_deal->FFTFwdTrans(ShufV1V2_PAD_phys, ShufV1V2_PAD_coef);
255 Vmath::Vcopy(N, &(ShufV1V2_PAD_coef[0]), 1, &(ShufV1V2[i * N]), 1);
286 int ndim = inarray1.size();
287 ASSERTL1(inarray2.size() % ndim == 0,
288 "Wrong dimensions for DealiasedDotProd.");
289 int nvec = inarray2.size() / ndim;
294 int num_points_per_plane = num_dofs /
m_planes.size();
296 if (!
m_session->DefinesSolverInfo(
"HomoStrip"))
298 num_proc =
m_comm->GetColumnComm()->GetSize();
304 int num_dfts_per_proc =
305 num_points_per_plane / num_proc + (num_points_per_plane % num_proc > 0);
312 for (
int i = 0; i < ndim; i++)
316 for (
int i = 0; i < ndim * nvec; i++)
323 for (
int i = 0; i < ndim; i++)
328 for (
int i = 0; i < ndim * nvec; i++)
339 for (
int i = 0; i < ndim; i++)
348 for (
int i = 0; i < ndim * nvec; i++)
357 for (
int i = 0; i < nvec; i++)
362 for (
int i = 0; i < ndim; i++)
367 for (
int i = 0; i < ndim * nvec; i++)
374 for (
int i = 0; i < num_dfts_per_proc; i++)
376 for (
int j = 0; j < ndim; j++)
380 Vmath::Vcopy(N, &(ShufV1[j][i * N]), 1, &(ShufV1_PAD_coef[0]), 1);
382 m_FFT_deal->FFTBwdTrans(ShufV1_PAD_coef, ShufV1_PAD_phys[j]);
384 for (
int j = 0; j < ndim * nvec; j++)
386 Vmath::Vcopy(N, &(ShufV2[j][i * N]), 1, &(ShufV2_PAD_coef[0]), 1);
387 m_FFT_deal->FFTBwdTrans(ShufV2_PAD_coef, ShufV2_PAD_phys[j]);
392 for (
int j = 0; j < nvec; j++)
395 for (
int k = 0; k < ndim; k++)
398 ShufV2_PAD_phys[j * ndim + k], 1,
399 ShufV1V2_PAD_phys, 1, ShufV1V2_PAD_phys, 1);
403 m_FFT_deal->FFTFwdTrans(ShufV1V2_PAD_phys, ShufV1V2_PAD_coef);
406 Vmath::Vcopy(N, &(ShufV1V2_PAD_coef[0]), 1, &(ShufV1V2[j][i * N]),
414 for (
int j = 0; j < nvec; j++)
423 for (
int j = 0; j < nvec; j++)
439 int cnt = 0, cnt1 = 0;
442 for (
int n = 0; n <
m_planes.size(); ++n)
444 m_planes[n]->FwdTrans(inarray + cnt, tmparray = outarray + cnt1);
462 int cnt = 0, cnt1 = 0;
466 for (
int n = 0; n <
m_planes.size(); ++n)
468 m_planes[n]->FwdTransLocalElmt(inarray + cnt,
469 tmparray = outarray + cnt1);
486 int cnt = 0, cnt1 = 0;
490 for (
int n = 0; n <
m_planes.size(); ++n)
492 m_planes[n]->FwdTransBndConstrained(inarray + cnt,
493 tmparray = outarray + cnt1);
510 int cnt = 0, cnt1 = 0;
513 for (
int n = 0; n <
m_planes.size(); ++n)
515 m_planes[n]->BwdTrans(inarray + cnt, tmparray = outarray + cnt1);
517 cnt1 +=
m_planes[n]->GetTotPoints();
533 "Inarray is not of sufficient length");
534 int cnt = 0, cnt1 = 0;
547 for (
int n = 0; n <
m_planes.size(); ++n)
549 m_planes[n]->IProductWRTBase(tmpIn + cnt, tmparray = outarray + cnt1);
581 int nP_coeffs = nT_coeffs /
m_planes.size();
597 if (dir == 0 || dir == 1)
599 for (
int i = 0; i <
m_planes.size(); i++)
602 m_planes[i]->IProductWRTDerivBase(dir, tmpIn + i * nP_pts,
603 tmp1 = outarray + i * nP_coeffs);
628 m_planes[0]->IProductWRTBase(tmpIn, tmpHom);
638 m_planes[0]->IProductWRTBase(tmpIn, tmpHom);
648 for (
int i = 0; i <
m_planes.size(); i++)
656 m_planes[i]->IProductWRTBase(tmpIn + i * nP_pts,
666 nP_coeffs,
beta, tmp1 = tmpHomTwo + i * nP_coeffs,
667 1, tmp2 = tmpHom + (i -
int(
sign)) * nP_coeffs, 1);
679 "The IProductWRTDerivBase routine with one homogeneous "
680 "direction is not implemented for the homogeneous basis "
681 "if it is is not of type Fourier "
682 "or FourierSingleMode/HalfModeRe/HalfModeIm");
689 "cannot handle direction give to IProductWRTDerivBase operator."
690 "dir != 0, 1 or 2.");
712 int ndim = inarray.size();
722 for (
int dir = 1; dir < ndim; dir++)
725 Vmath::Vadd(nT_coeffs, tmp, 1, outarray, 1, outarray, 1);
739 int num_points_per_plane = num_dofs /
m_planes.size();
740 int num_dfts_per_proc;
741 if (!
m_session->DefinesSolverInfo(
"HomoStrip"))
743 int nP =
m_comm->GetColumnComm()->GetSize();
745 num_points_per_plane / nP + (num_points_per_plane % nP > 0);
751 num_points_per_plane / nP + (num_points_per_plane % nP > 0);
767 inarray, 1, fft_in, 1);
772 for (
int i = 0; i < num_dfts_per_proc; i++)
782 for (
int i = 0; i < num_dfts_per_proc; i++)
799 fft_out, 1, outarray, 1);
829 int nrows = blkmat->GetRows();
830 int ncols = blkmat->GetColumns();
850 out = (*blkmat) * in;
876 return matrixIter->second;
886 int num_trans_per_proc = 0;
895 n_exp =
m_planes[0]->GetTotPoints();
898 num_trans_per_proc = n_exp /
m_comm->GetColumnComm()->GetSize() +
899 (n_exp %
m_comm->GetColumnComm()->GetSize() > 0);
969 for (
int i = 0; i < num_trans_per_proc; ++i)
971 BlkMatrix->SetBlock(i, i, loc_mat);
980 std::vector<LibUtilities::FieldDefinitionsSharedPtr> returnval;
985 std::vector<NekDouble> HomoLen;
986 HomoLen.push_back(
m_lhom);
988 std::vector<unsigned int> StripsIDs;
991 m_session->MatchSolverInfo(
"HomoStrip",
"True", strips,
false);
997 std::vector<unsigned int> PlanesIDs;
1007 for (
int i = 0; i <
m_planes.size(); i++)
1012 m_planes[0]->GeneralGetFieldDefinitions(returnval, 1, HomoBasis, HomoLen,
1013 strips, StripsIDs, PlanesIDs);
1018 std::vector<LibUtilities::FieldDefinitionsSharedPtr> &fielddef)
1023 std::vector<NekDouble> HomoLen;
1024 HomoLen.push_back(
m_lhom);
1026 std::vector<unsigned int> StripsIDs;
1029 m_session->MatchSolverInfo(
"HomoStrip",
"True", strips,
false);
1035 std::vector<unsigned int> PlanesIDs;
1043 for (
int i = 0; i <
m_planes.size(); i++)
1049 m_planes[0]->GeneralGetFieldDefinitions(fielddef, 1, HomoBasis, HomoLen,
1050 strips, StripsIDs, PlanesIDs);
1064 int ncoeffs_per_plane =
m_planes[0]->GetNcoeffs();
1070 for (i = 0; i <
m_planes[0]->GetExpSize(); ++i)
1076 for (i = 0; i < fielddef->m_elementIDs.size(); ++i)
1079 int datalen = (*m_exp)[eid]->GetNcoeffs();
1081 for (n = 0; n <
m_planes.size(); ++n)
1093 std::vector<NekDouble> &fielddata)
1101 std::vector<NekDouble> &fielddata, std::string &
field,
1107 int datalen = fielddata.size() / fielddef->m_fields.size();
1108 std::vector<unsigned int> fieldDefHomoZids;
1111 for (i = 0; i < fielddef->m_fields.size(); ++i)
1113 if (fielddef->m_fields[i] ==
field)
1120 if (i == fielddef->m_fields.size())
1122 cout <<
"Field " <<
field <<
"not found in data file. " << endl;
1127 int modes_offset = 0;
1128 int planes_offset = 0;
1133 if (zIdToPlane.size() == 0)
1139 for (i = 0; i <
m_planes.size(); ++i)
1147 for (i = 0; i <
m_planes[0]->GetExpSize(); ++i)
1153 if (fielddef->m_numHomogeneousDir)
1155 nzmodes = fielddef->m_homogeneousZIDs.size();
1156 fieldDefHomoZids = fielddef->m_homogeneousZIDs;
1161 fieldDefHomoZids.push_back(0);
1165 int ncoeffs_per_plane =
m_planes[0]->GetNcoeffs();
1167 for (i = 0; i < fielddef->m_elementIDs.size(); ++i)
1169 if (fielddef->m_uniOrder ==
true)
1175 fielddef->m_shapeType, fielddef->m_numModes, modes_offset);
1183 offset += datalen * nzmodes;
1185 (*m_exp)[0]->GetNumBases() + fielddef->m_numHomogeneousDir;
1189 int eid = it->second;
1190 bool sameBasis =
true;
1191 for (
int j = 0; j < fielddef->m_basis.size() - 1; ++j)
1193 if (fielddef->m_basis[j] != (*
m_exp)[eid]->GetBasisType(j))
1200 for (n = 0; n < nzmodes; ++n, offset += datalen)
1203 it = zIdToPlane.find(fieldDefHomoZids[n]);
1206 if (it == zIdToPlane.end())
1211 planes_offset = it->second;
1216 planes_offset * ncoeffs_per_plane],
1221 (*m_exp)[eid]->ExtractDataToCoeffs(
1222 &fielddata[offset], fielddef->m_numModes, modes_offset,
1224 planes_offset * ncoeffs_per_plane],
1229 (*m_exp)[0]->GetNumBases() + fielddef->m_numHomogeneousDir;
1236 const std::shared_ptr<ExpList> &fromExpList,
1241 int fromNcoeffs_per_plane = fromExpList->GetPlane(0)->GetNcoeffs();
1242 int toNcoeffs_per_plane =
m_planes[0]->GetNcoeffs();
1245 for (i = 0; i <
m_planes.size(); ++i)
1247 m_planes[i]->ExtractCoeffsToCoeffs(
1248 fromExpList->GetPlane(i),
1249 fromcoeffs_tmp = fromCoeffs + fromNcoeffs_per_plane * i,
1250 tocoeffs_tmp = toCoeffs + toNcoeffs_per_plane * i);
1255 int expansion, std::string var)
1260 m_planes[0]->WriteVtkPieceData(outfile, expansion, var);
1265 int nq = (*m_exp)[expansion]->GetTotPoints();
1266 int npoints_per_plane =
m_planes[0]->GetTotPoints();
1269 int outputExtraPlane = 0;
1275 outputExtraPlane = 1;
1286 int fromRank = (rank + 1) % size;
1287 int toRank = (rank == 0) ? size - 1 : rank - 1;
1292 m_StripZcomm->SendRecv(toRank, send, fromRank, extraPlane);
1297 outfile << R
"( <DataArray type="Float64" Name=")" << var << "\">"
1300 for (
int n = 0; n <
m_planes.size(); ++n)
1305 for (i = 0; i < nq; ++i)
1311 if (outputExtraPlane)
1313 for (i = 0; i < nq; ++i)
1322 outfile <<
" </DataArray>" << endl;
1332 cnt1 =
m_planes[0]->Get1DScaledTotPoints(scale);
1335 "size of outarray does not match internal estimage");
1337 for (
int i = 0; i <
m_planes.size(); i++)
1340 m_planes[i]->PhysInterp1DScaled(scale, inarray + i * cnt,
1341 tmparray = outarray + i * cnt1);
1351 cnt =
m_planes[0]->Get1DScaledTotPoints(scale);
1352 cnt1 =
m_planes[0]->GetTotPoints();
1354 "size of outarray does not match internal estimage");
1356 for (
int i = 0; i <
m_planes.size(); i++)
1358 m_planes[i]->PhysGalerkinProjection1DScaled(
1359 scale, inarray + i * cnt, tmparray = outarray + i * cnt1);
1378 for (
int i = 0; i <
m_planes.size(); i++)
1380 m_planes[i]->PhysDeriv(inarray + i * nP_pts, tmp2 = out_d0 + i * nP_pts,
1381 tmp3 = out_d1 + i * nP_pts);
1396 temparray = inarray;
1425 for (
int i = 0; i <
m_planes.size(); i++)
1431 tmp2 = outarray + (i -
int(
sign)) * nP_pts, 1);
1448 if (!
m_session->DefinesSolverInfo(
"HomoStrip"))
1451 "Parallelisation in the homogeneous direction "
1452 "implemented just for Fourier basis");
1457 "Parallelisation in the homogeneous direction "
1458 "implemented just for Fourier basis");
1463 ASSERTL0(
false,
"Semi-phyisical time-stepping not "
1464 "implemented yet for non-Fourier "
1474 for (
int i = 0; i < nP_pts; i++)
1477 tmp2 = outarray + i *
m_planes.size());
1500 int dir = (int)edir;
1509 for (
int i = 0; i <
m_planes.size(); i++)
1511 m_planes[i]->PhysDeriv(edir, inarray + i * nP_pts,
1512 tmp2 = out_d + i * nP_pts);
1527 temparray = inarray;
1555 for (
int i = 0; i <
m_planes.size(); i++)
1561 tmp2 = outarray + (i -
int(
sign)) * nP_pts, 1);
1577 if (!
m_session->DefinesSolverInfo(
"HomoStrip"))
1580 "Parallelisation in the homogeneous direction "
1581 "implemented just for Fourier basis");
1586 "Parallelisation in the homogeneous direction "
1587 "implemented just for Fourier basis");
1592 ASSERTL0(
false,
"Semi-phyisical time-stepping not implemented "
1593 "yet for non-Fourier basis");
1602 for (
int i = 0; i < nP_pts; i++)
1605 tmp2 = outarray + i *
m_planes.size());
1659 for (i = 0; i < (*m_exp).size(); ++i)
#define ASSERTL0(condition, msg)
#define NEKERROR(type, msg)
Assert Level 0 – Fundamental assert which is used whether in FULLDEBUG, DEBUG or OPT compilation mode...
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode....
#define ASSERTL2(condition, msg)
Assert Level 2 – Debugging which is used FULLDEBUG compilation mode. This level assert is designed to...
#define sign(a, b)
return the sign(b)*a
Describes the specification for a Basis.
tBaseSharedPtr CreateInstance(tKey idKey, tParam... args)
Create an instance of the class referred to by idKey.
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.
Abstraction of a two-dimensional multi-elemental expansion which is merely a collection of local expa...
void PhysDeriv(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d0, Array< OneD, NekDouble > &out_d1, Array< OneD, NekDouble > &out_d2)
std::vector< LibUtilities::FieldDefinitionsSharedPtr > v_GetFieldDefinitions(void) override
void v_BwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
Array< OneD, NekDouble > m_tmpIN
LibUtilities::TranspositionSharedPtr v_GetTransposition(void) override
NekDouble m_lhom
Width of homogeneous direction.
LibUtilities::TranspositionSharedPtr m_transposition
void v_ExtractDataToCoeffs(LibUtilities::FieldDefinitionsSharedPtr &fielddef, std::vector< NekDouble > &fielddata, std::string &field, Array< OneD, NekDouble > &coeffs, std::unordered_map< int, int > zIdToPlane) override
Extract data from raw field data into expansion list.
void v_WriteVtkPieceData(std::ostream &outfile, int expansion, std::string var) override
void v_DealiasedDotProd(const int num_dofs, const Array< OneD, Array< OneD, NekDouble > > &inarray1, const Array< OneD, Array< OneD, NekDouble > > &inarray2, Array< OneD, Array< OneD, NekDouble > > &outarray) override
void v_FwdTransLocalElmt(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
Array< OneD, ExpListSharedPtr > m_planes
~ExpListHomogeneous1D() override
Destructor.
void v_FwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
LibUtilities::CommSharedPtr m_StripZcomm
Homo1DBlockMatrixMapShPtr m_homogeneous1DBlockMat
void v_AppendFieldData(LibUtilities::FieldDefinitionsSharedPtr &fielddef, std::vector< NekDouble > &fielddata) override
void v_FwdTransBndConstrained(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
LibUtilities::BasisSharedPtr m_homogeneousBasis
Definition of the total number of degrees of freedom and quadrature points. Sets up the storage for m...
void v_PhysGalerkinProjection1DScaled(const NekDouble scale, const Array< OneD, NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
LibUtilities::NektarFFTSharedPtr m_FFT_deal
void v_HomogeneousFwdTrans(const int npts, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool Shuff=true, bool UnShuff=true) override
void v_ExtractCoeffsToCoeffs(const std::shared_ptr< ExpList > &fromExpList, const Array< OneD, const NekDouble > &fromCoeffs, Array< OneD, NekDouble > &toCoeffs) override
Array< OneD, NekDouble > m_tmpOUT
NekDouble v_Integral(const Array< OneD, const NekDouble > &inarray) override
void v_PhysDeriv(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d0, Array< OneD, NekDouble > &out_d1, Array< OneD, NekDouble > &out_d2) override
void v_IProductWRTBase(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
LibUtilities::NektarFFTSharedPtr m_FFT
NekDouble v_GetHomoLen(void) override
void Homogeneous1DTrans(const int npts, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool IsForwards, bool Shuff=true, bool UnShuff=true)
void v_HomogeneousBwdTrans(const int npts, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool Shuff=true, bool UnShuff=true) override
void v_SetHomoLen(const NekDouble lhom) override
DNekBlkMatSharedPtr GenHomogeneous1DBlockMatrix(Homogeneous1DMatType mattype) const
DNekBlkMatSharedPtr GetHomogeneous1DBlockMatrix(Homogeneous1DMatType mattype) const
Array< OneD, const unsigned int > v_GetZIDs(void) override
void v_DealiasedProd(const int num_dofs, const Array< OneD, NekDouble > &inarray1, const Array< OneD, NekDouble > &inarray2, Array< OneD, NekDouble > &outarray) override
void v_IProductWRTDerivBase(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
bool m_useFFT
FFT variables.
void v_PhysInterp1DScaled(const NekDouble scale, const Array< OneD, NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
ExpListHomogeneous1D(const ExpansionType type)
Default constructor.
Base class for all multi-elemental spectral/hp expansions.
Array< OneD, NekDouble > m_coeffs
Concatenation of all local expansion coefficients.
int GetNcoeffs(void) const
Returns the total number of local degrees of freedom .
Array< OneD, int > m_coeff_offset
Offset of elemental data into the array m_coeffs.
LibUtilities::CommSharedPtr m_comm
Communicator.
std::shared_ptr< LocalRegions::ExpansionVector > m_exp
The list of local expansions.
void HomogeneousBwdTrans(const int npts, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool Shuff=true, bool UnShuff=true)
std::unordered_map< int, int > m_elmtToExpId
Mapping from geometry ID of element to index inside m_exp.
LibUtilities::SessionReaderSharedPtr m_session
Session.
Array< OneD, int > m_phys_offset
Offset of elemental data into the array m_phys.
Array< OneD, NekDouble > m_phys
The global expansion evaluated at the quadrature points.
void HomogeneousFwdTrans(const int npts, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool Shuff=true, bool UnShuff=true)
DNekMatSharedPtr GetStdMatrix(const StdMatrixKey &mkey)
LibUtilities::ShapeType DetShapeType() const
This function returns the shape of the expansion domain.
void PhysDeriv(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d0, Array< OneD, NekDouble > &out_d1=NullNekDouble1DArray, Array< OneD, NekDouble > &out_d2=NullNekDouble1DArray)
Class representing a segment element in reference space All interface of this class sits in StdExpans...
static BasisSharedPtr NullBasisSharedPtr
BasisManagerT & BasisManager(void)
NektarFFTFactory & GetNektarFFTFactory()
static const BasisKey NullBasisKey(eNoBasisType, 0, NullPointsKey)
Defines a null basis with no type or points.
std::shared_ptr< SessionReader > SessionReaderSharedPtr
std::shared_ptr< FieldDefinitions > FieldDefinitionsSharedPtr
int GetNumberOfCoefficients(ShapeType shape, std::vector< unsigned int > &modes, int offset=0)
std::shared_ptr< Transposition > TranspositionSharedPtr
@ beta
Gauss Radau pinned at x=-1,.
@ eFourierEvenlySpaced
1D Evenly-spaced points using Fourier Fit
@ eFourierSingleMode
Fourier ModifiedExpansion with just the first mode .
@ eFourierHalfModeIm
Fourier Modified expansions with just the imaginary part of the first mode .
@ eFourierHalfModeRe
Fourier Modified expansions with just the real part of the first mode .
@ eFourier
Fourier Expansion .
std::map< Homogeneous1DMatType, DNekBlkMatSharedPtr > Homo1DBlockMatrixMap
A map between homo matrix keys and their associated block matrices.
static const NekDouble kNekZeroTol
std::shared_ptr< DNekBlkMat > DNekBlkMatSharedPtr
static Array< OneD, NekDouble > NullNekDouble1DArray
std::shared_ptr< DNekMat > DNekMatSharedPtr
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 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)