45 vector<StdRegions::StdExpansionSharedPtr> &pCollExp)
51 int nElmts = pCollExp.size();
52 int npts = pCollExp[0]->GetTotPoints();
60 for (
int i = 0; i < nElmts; ++i)
80 for (
int i = 0; i < nElmts; ++i)
99 vector<StdRegions::StdExpansionSharedPtr> &pCollExp,
int nElmt)
105 int jacsize = jac.size();
106 int npts = pCollExp[0]->GetTotPoints();
109 "Number of elements not divisible by vector "
110 "width, padding not yet implemented.");
111 int nBlocks = nElmt / vec_t::width;
119 newjac.resize(nBlocks * npts);
121 alignas(vec_t::alignment)
NekDouble tmp[vec_t::width];
123 for (
size_t block = 0; block < nBlocks; ++block)
125 size_t nblock_width = block * npts * vec_t::width;
126 for (
size_t q = 0;
q < npts;
q++)
128 for (
int j = 0; j < vec_t::width; ++j)
130 if (nblock_width + npts * j +
q < jacsize)
132 tmp[j] = jac[nblock_width + npts * j +
q];
141 newjac[block * npts +
q].load(&tmp[0]);
147 newjac.resize(nBlocks);
149 alignas(vec_t::alignment)
NekDouble tmp[vec_t::width];
150 for (
size_t i = 0; i < nBlocks; ++i)
152 for (
int j = 0; j < vec_t::width; ++j)
154 if (vec_t::width * i + j < jacsize)
156 tmp[j] = jac[vec_t::width * i + j];
164 newjac[i].load(&tmp[0]);
176 vector<StdRegions::StdExpansionSharedPtr> &pCollExp)
181 int nElmts = pCollExp.size();
182 int npts = pCollExp[0]->GetTotPoints();
187 for (
int i = 0; i < nElmts; ++i)
205 pCollExp[0]->MultiplyByStdQuadratureMetric(newjac + cnt,
217 vector<StdRegions::StdExpansionSharedPtr> &pCollExp)
223 int nElmts = pCollExp.size();
224 int npts = pCollExp[0]->GetTotPoints();
225 const int coordim = pCollExp[0]->GetCoordim();
226 int dim = ptsKeys.size();
242 for (
int i = 0; i < nElmts; ++i)
253 for (
int j = 0; j < dim * coordim; ++j)
255 Vmath::Vcopy(npts, &Dfac[j][0], 1, &newDFac[j][cnt], 1);
260 for (
int j = 0; j < dim * coordim; ++j)
262 newDFac[j][i] = Dfac[j][0];
275 vector<StdRegions::StdExpansionSharedPtr> &pCollExp,
int nElmt)
280 "Number of elements not divisible by vector "
281 "width, padding not yet implemented.");
283 int nBlocks = nElmt / vec_t::width;
286 const int coordim = pCollExp[0]->GetCoordim();
287 int dim = ptsKeys.size();
289 unsigned int n_df = coordim * dim;
290 alignas(vec_t::alignment)
NekDouble vec[vec_t::width];
293 int dfsize = df.GetColumns();
297 int npts = pCollExp[0]->GetTotPoints();
301 newdf.resize(nBlocks * n_df * npts);
302 auto *df_ptr = &newdf[0];
303 for (
int e = 0; e < nBlocks; ++e)
305 for (
int q = 0;
q < npts;
q++)
307 for (
int dir = 0; dir < n_df; ++dir, ++df_ptr)
309 for (
int j = 0; j < vec_t::width; ++j)
312 if ((vec_t::width * e + j) * npts +
q < dfsize)
315 df[dir][(vec_t::width * e + j) * npts +
q];
322 (*df_ptr).load(&vec[0]);
329 newdf.resize(nBlocks * n_df);
330 for (
int e = 0; e < nBlocks; ++e)
332 for (
int dir = 0; dir < n_df; ++dir)
334 for (
int j = 0; j < vec_t::width; ++j)
337 if (vec_t::width * e + j < dfsize)
339 vec[j] = df[dir][vec_t::width * e + j];
347 newdf[e * n_df + dir].load(&vec[0]);
360 vector<StdRegions::StdExpansionSharedPtr> &pCollExp)
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode....
std::map< GeomData, std::shared_ptr< VecVec_t > > m_twoDGeomDataInterLeave
std::map< GeomData, std::shared_ptr< VecVec_t > > m_oneDGeomDataInterLeave
const Array< OneD, const NekDouble > & GetJacWithStdWeights(std::vector< StdRegions::StdExpansionSharedPtr > &pColLExp)
bool IsDeformed(std::vector< StdRegions::StdExpansionSharedPtr > &pCollExp)
const std::shared_ptr< VecVec_t > GetJacInterLeave(std::vector< StdRegions::StdExpansionSharedPtr > &pCollExp, int nElmts)
std::map< GeomData, Array< OneD, NekDouble > > m_oneDGeomData
const Array< OneD, const NekDouble > & GetJac(std::vector< StdRegions::StdExpansionSharedPtr > &pColLExp)
const std::shared_ptr< VecVec_t > GetDerivFactorsInterLeave(std::vector< StdRegions::StdExpansionSharedPtr > &pCollExp, int nElmts)
std::map< GeomData, Array< TwoD, NekDouble > > m_twoDGeomData
const Array< TwoD, const NekDouble > & GetDerivFactors(std::vector< StdRegions::StdExpansionSharedPtr > &pColLExp)
const SpatialDomains::GeomFactorsSharedPtr & GetMetricInfo() const
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
The base class for all shapes.
std::vector< vec_t, tinysimd::allocator< vec_t > > VecVec_t
std::vector< PointsKey > PointsKeyVector
@ eDeformed
Geometry is curved or has non-constant factors.
std::vector< double > q(NPUPPER *NPUPPER)
void Fill(int n, const T alpha, T *x, const int incx)
Fill a vector with a constant value.
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)