Nektar++
Public Member Functions | Protected Attributes | Private Member Functions | List of all members
Nektar::Collections::IProductWRTDerivBase_SumFac_Hex Class Referencefinal

Inner product WRT deriv base operator using sum-factorisation (Hex) More...

Inheritance diagram for Nektar::Collections::IProductWRTDerivBase_SumFac_Hex:
[legend]

Public Member Functions

 ~IProductWRTDerivBase_SumFac_Hex () final=default
 
void operator() (const Array< OneD, const NekDouble > &entry0, Array< OneD, NekDouble > &entry1, Array< OneD, NekDouble > &entry2, Array< OneD, NekDouble > &entry3, Array< OneD, NekDouble > &wsp) final
 Perform operation. More...
 
void operator() (int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp) final
 
void CheckFactors (StdRegions::FactorMap factors, int coll_phys_offset) override
 Check the validity of the supplied factor map. More...
 
- Public Member Functions inherited from Nektar::Collections::Operator
 Operator (std::vector< StdRegions::StdExpansionSharedPtr > pCollExp, std::shared_ptr< CoalescedGeomData > GeomData, StdRegions::FactorMap factors)
 Constructor. More...
 
virtual ~Operator ()=default
 
virtual COLLECTIONS_EXPORT void operator() (const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output0, Array< OneD, NekDouble > &output1, Array< OneD, NekDouble > &output2, Array< OneD, NekDouble > &wsp=NullNekDouble1DArray)=0
 Perform operation. More...
 
virtual COLLECTIONS_EXPORT void operator() (int dir, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp=NullNekDouble1DArray)=0
 
virtual COLLECTIONS_EXPORT void CheckFactors (StdRegions::FactorMap factors, int coll_phys_offset)=0
 Check the validity of the supplied factor map. More...
 
unsigned int GetWspSize ()
 Get the size of the required workspace. More...
 
unsigned int GetNumElmt ()
 Get number of elements. More...
 
StdRegions::StdExpansionSharedPtr GetExpSharedPtr ()
 Get expansion pointer. More...
 
unsigned int GetInputSize ()
 
unsigned int GetOutputSize ()
 

Protected Attributes

const int m_nquad0
 
const int m_nquad1
 
const int m_nquad2
 
const int m_nmodes0
 
const int m_nmodes1
 
const int m_nmodes2
 
const bool m_colldir0
 
const bool m_colldir1
 
const bool m_colldir2
 
Array< OneD, const NekDoublem_jacWStdW
 
Array< OneD, const NekDoublem_base0
 
Array< OneD, const NekDoublem_base1
 
Array< OneD, const NekDoublem_base2
 
Array< OneD, const NekDoublem_derbase0
 
Array< OneD, const NekDoublem_derbase1
 
Array< OneD, const NekDoublem_derbase2
 
Array< TwoD, const NekDoublem_derivFac
 
- Protected Attributes inherited from Nektar::Collections::Operator
bool m_isDeformed
 
StdRegions::StdExpansionSharedPtr m_stdExp
 
unsigned int m_numElmt
 number of elements that the operator is applied on More...
 
unsigned int m_nqe
 
unsigned int m_wspSize
 
unsigned int m_inputSize
 number of modes or quadrature points that are passed as input to an operator More...
 
unsigned int m_outputSize
 number of modes or quadrature points that are taken as output from an operator More...
 

Private Member Functions

 IProductWRTDerivBase_SumFac_Hex (vector< StdRegions::StdExpansionSharedPtr > pCollExp, CoalescedGeomDataSharedPtr pGeomData, StdRegions::FactorMap factors)
 
- Private Member Functions inherited from Nektar::Collections::IProductWRTDerivBase_Helper
 IProductWRTDerivBase_Helper ()
 

Additional Inherited Members

- Protected Member Functions inherited from Nektar::Collections::Operator
virtual int v_GetInputSize ()
 This purely virtual function needs to be set-up for every operator inside Collections. It is responsible for returning the size of input collection, that the operator is applied on either in physical or coefficient space. More...
 
virtual int v_GetOutputSize ()
 This purely virtual function needs to be set-up for every operator inside Collections. It is responsible for returning the output size either in physical or coefficient space of an operator inside Collections. More...
 

Detailed Description

Inner product WRT deriv base operator using sum-factorisation (Hex)

Definition at line 1230 of file IProductWRTDerivBase.cpp.

Constructor & Destructor Documentation

◆ ~IProductWRTDerivBase_SumFac_Hex()

Nektar::Collections::IProductWRTDerivBase_SumFac_Hex::~IProductWRTDerivBase_SumFac_Hex ( )
finaldefault

◆ IProductWRTDerivBase_SumFac_Hex()

Nektar::Collections::IProductWRTDerivBase_SumFac_Hex::IProductWRTDerivBase_SumFac_Hex ( vector< StdRegions::StdExpansionSharedPtr pCollExp,
CoalescedGeomDataSharedPtr  pGeomData,
StdRegions::FactorMap  factors 
)
inlineprivate

Definition at line 1351 of file IProductWRTDerivBase.cpp.

1354 : Operator(pCollExp, pGeomData, factors), IProductWRTDerivBase_Helper(),
1355 m_nquad0(m_stdExp->GetNumPoints(0)),
1356 m_nquad1(m_stdExp->GetNumPoints(1)),
1357 m_nquad2(m_stdExp->GetNumPoints(2)),
1358 m_nmodes0(m_stdExp->GetBasisNumModes(0)),
1359 m_nmodes1(m_stdExp->GetBasisNumModes(1)),
1360 m_nmodes2(m_stdExp->GetBasisNumModes(2)),
1361 m_colldir0(m_stdExp->GetBasis(0)->Collocation()),
1362 m_colldir1(m_stdExp->GetBasis(1)->Collocation()),
1363 m_colldir2(m_stdExp->GetBasis(2)->Collocation()),
1364 m_base0(m_stdExp->GetBasis(0)->GetBdata()),
1365 m_base1(m_stdExp->GetBasis(1)->GetBdata()),
1366 m_base2(m_stdExp->GetBasis(2)->GetBdata()),
1367 m_derbase0(m_stdExp->GetBasis(0)->GetDbdata()),
1368 m_derbase1(m_stdExp->GetBasis(1)->GetDbdata()),
1369 m_derbase2(m_stdExp->GetBasis(2)->GetDbdata())
1370
1371 {
1372 m_jacWStdW = pGeomData->GetJacWithStdWeights(pCollExp);
1373 m_wspSize = 6 * m_numElmt *
1374 (max(m_nquad0 * m_nquad1 * m_nquad2,
1376 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
1377 }
StdRegions::StdExpansionSharedPtr m_stdExp
Definition: Operator.h:188
unsigned int m_numElmt
number of elements that the operator is applied on
Definition: Operator.h:190
Operator(std::vector< StdRegions::StdExpansionSharedPtr > pCollExp, std::shared_ptr< CoalescedGeomData > GeomData, StdRegions::FactorMap factors)
Constructor.
Definition: Operator.cpp:66
StdRegions::ConstFactorMap factors

References m_derivFac, m_jacWStdW, m_nmodes0, m_nmodes1, m_nmodes2, m_nquad0, m_nquad1, m_nquad2, Nektar::Collections::Operator::m_numElmt, and Nektar::Collections::Operator::m_wspSize.

Member Function Documentation

◆ CheckFactors()

void Nektar::Collections::IProductWRTDerivBase_SumFac_Hex::CheckFactors ( StdRegions::FactorMap  factors,
int  coll_phys_offset 
)
inlineoverridevirtual

Check the validity of the supplied factor map.

Implements Nektar::Collections::Operator.

Definition at line 1325 of file IProductWRTDerivBase.cpp.

1327 {
1328 ASSERTL0(false, "Not valid for this operator.");
1329 }
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:208

References ASSERTL0.

◆ operator()() [1/2]

void Nektar::Collections::IProductWRTDerivBase_SumFac_Hex::operator() ( const Array< OneD, const NekDouble > &  input,
Array< OneD, NekDouble > &  output0,
Array< OneD, NekDouble > &  output1,
Array< OneD, NekDouble > &  output2,
Array< OneD, NekDouble > &  wsp 
)
inlinefinalvirtual

Perform operation.

Implements Nektar::Collections::Operator.

Definition at line 1238 of file IProductWRTDerivBase.cpp.

1243 {
1244 unsigned int nPhys = m_stdExp->GetTotPoints();
1245 unsigned int ntot = m_numElmt * nPhys;
1246 unsigned int nmodes = m_stdExp->GetNcoeffs();
1247 unsigned int nmax = max(ntot, m_numElmt * nmodes);
1248 Array<OneD, Array<OneD, const NekDouble>> in(3);
1249 Array<OneD, NekDouble> output, wsp1;
1250 Array<OneD, Array<OneD, NekDouble>> tmp(3);
1251
1252 in[0] = entry0;
1253 in[1] = entry1;
1254 in[2] = entry2;
1255
1256 output = entry3;
1257
1258 for (int i = 0; i < 3; ++i)
1259 {
1260 tmp[i] = wsp + i * nmax;
1261 }
1262
1263 if (m_isDeformed)
1264 {
1265 // calculate dx/dxi in[0] + dy/dxi in[1] + dz/dxi in[2]
1266 for (int i = 0; i < 3; ++i)
1267 {
1268 Vmath::Vmul(ntot, m_derivFac[i], 1, in[0], 1, tmp[i], 1);
1269 for (int j = 1; j < 3; ++j)
1270 {
1271 Vmath::Vvtvp(ntot, m_derivFac[i + 3 * j], 1, in[j], 1,
1272 tmp[i], 1, tmp[i], 1);
1273 }
1274 }
1275 }
1276 else
1277 {
1278 Array<OneD, NekDouble> t;
1279 for (int e = 0; e < m_numElmt; ++e)
1280 {
1281 // calculate dx/dxi in[0] + dy/dxi in[1] + dz/dxi in[2]
1282 for (int i = 0; i < 3; ++i)
1283 {
1284 Vmath::Smul(m_nqe, m_derivFac[i][e], in[0] + e * m_nqe, 1,
1285 t = tmp[i] + e * m_nqe, 1);
1286 for (int j = 1; j < 3; ++j)
1287 {
1288 Vmath::Svtvp(m_nqe, m_derivFac[i + 3 * j][e],
1289 in[j] + e * m_nqe, 1, tmp[i] + e * m_nqe,
1290 1, t = tmp[i] + e * m_nqe, 1);
1291 }
1292 }
1293 }
1294 }
1295
1296 wsp1 = wsp + 3 * nmax;
1297
1298 // calculate Iproduct WRT Std Deriv
1301 m_derbase0, m_base1, m_base2, m_jacWStdW, tmp[0], output,
1302 wsp1);
1303
1306 m_base0, m_derbase1, m_base2, m_jacWStdW, tmp[1], tmp[0],
1307 wsp1);
1308 Vmath::Vadd(m_numElmt * nmodes, tmp[0], 1, output, 1, output, 1);
1309
1312 m_base0, m_base1, m_derbase2, m_jacWStdW, tmp[2], tmp[0],
1313 wsp1);
1314 Vmath::Vadd(m_numElmt * nmodes, tmp[0], 1, output, 1, output, 1);
1315 }
void HexIProduct(bool colldir0, bool colldir1, bool colldir2, int numElmt, int nquad0, int nquad1, int nquad2, int nmodes0, int nmodes1, int nmodes2, const Array< OneD, const NekDouble > &base0, const Array< OneD, const NekDouble > &base1, const Array< OneD, const NekDouble > &base2, const Array< OneD, const NekDouble > &jac, const Array< OneD, const NekDouble > &input, Array< OneD, NekDouble > &output, Array< OneD, NekDouble > &wsp)
Definition: IProduct.cpp:170
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.
Definition: Vmath.hpp:72
void Svtvp(int n, const T alpha, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Svtvp (scalar times vector plus vector): z = alpha*x + y.
Definition: Vmath.hpp:396
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
Definition: Vmath.hpp:366
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.
Definition: Vmath.hpp:180
void Smul(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha*x.
Definition: Vmath.hpp:100

References Nektar::Collections::HexIProduct(), m_base0, m_base1, m_base2, m_colldir0, m_colldir1, m_colldir2, m_derbase0, m_derbase1, m_derbase2, m_derivFac, Nektar::Collections::Operator::m_isDeformed, m_jacWStdW, m_nmodes0, m_nmodes1, m_nmodes2, Nektar::Collections::Operator::m_nqe, m_nquad0, m_nquad1, m_nquad2, Nektar::Collections::Operator::m_numElmt, Nektar::Collections::Operator::m_stdExp, Vmath::Smul(), Vmath::Svtvp(), Vmath::Vadd(), Vmath::Vmul(), and Vmath::Vvtvp().

◆ operator()() [2/2]

void Nektar::Collections::IProductWRTDerivBase_SumFac_Hex::operator() ( int  dir,
const Array< OneD, const NekDouble > &  input,
Array< OneD, NekDouble > &  output,
Array< OneD, NekDouble > &  wsp 
)
inlinefinalvirtual

Implements Nektar::Collections::Operator.

Definition at line 1317 of file IProductWRTDerivBase.cpp.

1321 {
1322 NEKERROR(ErrorUtil::efatal, "Not valid for this operator.");
1323 }
#define NEKERROR(type, msg)
Assert Level 0 – Fundamental assert which is used whether in FULLDEBUG, DEBUG or OPT compilation mode...
Definition: ErrorUtil.hpp:202

References Nektar::ErrorUtil::efatal, and NEKERROR.

Member Data Documentation

◆ m_base0

Array<OneD, const NekDouble> Nektar::Collections::IProductWRTDerivBase_SumFac_Hex::m_base0
protected

Definition at line 1342 of file IProductWRTDerivBase.cpp.

Referenced by operator()().

◆ m_base1

Array<OneD, const NekDouble> Nektar::Collections::IProductWRTDerivBase_SumFac_Hex::m_base1
protected

Definition at line 1343 of file IProductWRTDerivBase.cpp.

Referenced by operator()().

◆ m_base2

Array<OneD, const NekDouble> Nektar::Collections::IProductWRTDerivBase_SumFac_Hex::m_base2
protected

Definition at line 1344 of file IProductWRTDerivBase.cpp.

Referenced by operator()().

◆ m_colldir0

const bool Nektar::Collections::IProductWRTDerivBase_SumFac_Hex::m_colldir0
protected

Definition at line 1338 of file IProductWRTDerivBase.cpp.

Referenced by operator()().

◆ m_colldir1

const bool Nektar::Collections::IProductWRTDerivBase_SumFac_Hex::m_colldir1
protected

Definition at line 1339 of file IProductWRTDerivBase.cpp.

Referenced by operator()().

◆ m_colldir2

const bool Nektar::Collections::IProductWRTDerivBase_SumFac_Hex::m_colldir2
protected

Definition at line 1340 of file IProductWRTDerivBase.cpp.

Referenced by operator()().

◆ m_derbase0

Array<OneD, const NekDouble> Nektar::Collections::IProductWRTDerivBase_SumFac_Hex::m_derbase0
protected

Definition at line 1345 of file IProductWRTDerivBase.cpp.

Referenced by operator()().

◆ m_derbase1

Array<OneD, const NekDouble> Nektar::Collections::IProductWRTDerivBase_SumFac_Hex::m_derbase1
protected

Definition at line 1346 of file IProductWRTDerivBase.cpp.

Referenced by operator()().

◆ m_derbase2

Array<OneD, const NekDouble> Nektar::Collections::IProductWRTDerivBase_SumFac_Hex::m_derbase2
protected

Definition at line 1347 of file IProductWRTDerivBase.cpp.

Referenced by operator()().

◆ m_derivFac

Array<TwoD, const NekDouble> Nektar::Collections::IProductWRTDerivBase_SumFac_Hex::m_derivFac
protected

Definition at line 1348 of file IProductWRTDerivBase.cpp.

Referenced by IProductWRTDerivBase_SumFac_Hex(), and operator()().

◆ m_jacWStdW

Array<OneD, const NekDouble> Nektar::Collections::IProductWRTDerivBase_SumFac_Hex::m_jacWStdW
protected

Definition at line 1341 of file IProductWRTDerivBase.cpp.

Referenced by IProductWRTDerivBase_SumFac_Hex(), and operator()().

◆ m_nmodes0

const int Nektar::Collections::IProductWRTDerivBase_SumFac_Hex::m_nmodes0
protected

Definition at line 1335 of file IProductWRTDerivBase.cpp.

Referenced by IProductWRTDerivBase_SumFac_Hex(), and operator()().

◆ m_nmodes1

const int Nektar::Collections::IProductWRTDerivBase_SumFac_Hex::m_nmodes1
protected

Definition at line 1336 of file IProductWRTDerivBase.cpp.

Referenced by IProductWRTDerivBase_SumFac_Hex(), and operator()().

◆ m_nmodes2

const int Nektar::Collections::IProductWRTDerivBase_SumFac_Hex::m_nmodes2
protected

Definition at line 1337 of file IProductWRTDerivBase.cpp.

Referenced by IProductWRTDerivBase_SumFac_Hex(), and operator()().

◆ m_nquad0

const int Nektar::Collections::IProductWRTDerivBase_SumFac_Hex::m_nquad0
protected

Definition at line 1332 of file IProductWRTDerivBase.cpp.

Referenced by IProductWRTDerivBase_SumFac_Hex(), and operator()().

◆ m_nquad1

const int Nektar::Collections::IProductWRTDerivBase_SumFac_Hex::m_nquad1
protected

Definition at line 1333 of file IProductWRTDerivBase.cpp.

Referenced by IProductWRTDerivBase_SumFac_Hex(), and operator()().

◆ m_nquad2

const int Nektar::Collections::IProductWRTDerivBase_SumFac_Hex::m_nquad2
protected

Definition at line 1334 of file IProductWRTDerivBase.cpp.

Referenced by IProductWRTDerivBase_SumFac_Hex(), and operator()().