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
 
- 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 UpdateFactors (StdRegions::FactorMap factors)
 Update the supplied factor map. More...
 
virtual COLLECTIONS_EXPORT void UpdateVarcoeffs (StdRegions::VarCoeffMap &varcoeffs)
 Update the supplied variable coefficients. 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 (bool defaultIn=true)
 
unsigned int GetOutputSize (bool defaultOut=true)
 

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...
 
unsigned int m_inputSizeOther
 Number of modes or quadrature points, opposite to m_inputSize. More...
 
unsigned int m_outputSizeOther
 Number of modes or quadrature points, opposite to m_outputSize. 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 ()
 

Detailed Description

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

Definition at line 1159 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 1274 of file IProductWRTDerivBase.cpp.

1277 : Operator(pCollExp, pGeomData, factors), IProductWRTDerivBase_Helper(),
1278 m_nquad0(m_stdExp->GetNumPoints(0)),
1279 m_nquad1(m_stdExp->GetNumPoints(1)),
1280 m_nquad2(m_stdExp->GetNumPoints(2)),
1281 m_nmodes0(m_stdExp->GetBasisNumModes(0)),
1282 m_nmodes1(m_stdExp->GetBasisNumModes(1)),
1283 m_nmodes2(m_stdExp->GetBasisNumModes(2)),
1284 m_colldir0(m_stdExp->GetBasis(0)->Collocation()),
1285 m_colldir1(m_stdExp->GetBasis(1)->Collocation()),
1286 m_colldir2(m_stdExp->GetBasis(2)->Collocation()),
1287 m_base0(m_stdExp->GetBasis(0)->GetBdata()),
1288 m_base1(m_stdExp->GetBasis(1)->GetBdata()),
1289 m_base2(m_stdExp->GetBasis(2)->GetBdata()),
1290 m_derbase0(m_stdExp->GetBasis(0)->GetDbdata()),
1291 m_derbase1(m_stdExp->GetBasis(1)->GetDbdata()),
1292 m_derbase2(m_stdExp->GetBasis(2)->GetDbdata())
1293
1294 {
1295 m_jacWStdW = pGeomData->GetJacWithStdWeights(pCollExp);
1296 m_wspSize = 6 * m_numElmt *
1297 (max(m_nquad0 * m_nquad1 * m_nquad2,
1299 m_derivFac = pGeomData->GetDerivFactors(pCollExp);
1300 }
StdRegions::StdExpansionSharedPtr m_stdExp
Definition: Operator.h:217
unsigned int m_numElmt
number of elements that the operator is applied on
Definition: Operator.h:219
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

◆ 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 1167 of file IProductWRTDerivBase.cpp.

1172 {
1173 unsigned int nPhys = m_stdExp->GetTotPoints();
1174 unsigned int ntot = m_numElmt * nPhys;
1175 unsigned int nmodes = m_stdExp->GetNcoeffs();
1176 unsigned int nmax = max(ntot, m_numElmt * nmodes);
1177 Array<OneD, Array<OneD, const NekDouble>> in(3);
1178 Array<OneD, NekDouble> output, wsp1;
1179 Array<OneD, Array<OneD, NekDouble>> tmp(3);
1180
1181 in[0] = entry0;
1182 in[1] = entry1;
1183 in[2] = entry2;
1184
1185 output = entry3;
1186
1187 for (int i = 0; i < 3; ++i)
1188 {
1189 tmp[i] = wsp + i * nmax;
1190 }
1191
1192 if (m_isDeformed)
1193 {
1194 // calculate dx/dxi in[0] + dy/dxi in[1] + dz/dxi in[2]
1195 for (int i = 0; i < 3; ++i)
1196 {
1197 Vmath::Vmul(ntot, m_derivFac[i], 1, in[0], 1, tmp[i], 1);
1198 for (int j = 1; j < 3; ++j)
1199 {
1200 Vmath::Vvtvp(ntot, m_derivFac[i + 3 * j], 1, in[j], 1,
1201 tmp[i], 1, tmp[i], 1);
1202 }
1203 }
1204 }
1205 else
1206 {
1207 Array<OneD, NekDouble> t;
1208 for (int e = 0; e < m_numElmt; ++e)
1209 {
1210 // calculate dx/dxi in[0] + dy/dxi in[1] + dz/dxi in[2]
1211 for (int i = 0; i < 3; ++i)
1212 {
1213 Vmath::Smul(m_nqe, m_derivFac[i][e], in[0] + e * m_nqe, 1,
1214 t = tmp[i] + e * m_nqe, 1);
1215 for (int j = 1; j < 3; ++j)
1216 {
1217 Vmath::Svtvp(m_nqe, m_derivFac[i + 3 * j][e],
1218 in[j] + e * m_nqe, 1, tmp[i] + e * m_nqe,
1219 1, t = tmp[i] + e * m_nqe, 1);
1220 }
1221 }
1222 }
1223 }
1224
1225 wsp1 = wsp + 3 * nmax;
1226
1227 // calculate Iproduct WRT Std Deriv
1230 m_derbase0, m_base1, m_base2, m_jacWStdW, tmp[0], output,
1231 wsp1);
1232
1235 m_base0, m_derbase1, m_base2, m_jacWStdW, tmp[1], tmp[0],
1236 wsp1);
1237 Vmath::Vadd(m_numElmt * nmodes, tmp[0], 1, output, 1, output, 1);
1238
1241 m_base0, m_base1, m_derbase2, m_jacWStdW, tmp[2], tmp[0],
1242 wsp1);
1243 Vmath::Vadd(m_numElmt * nmodes, tmp[0], 1, output, 1, output, 1);
1244 }
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:171
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 1246 of file IProductWRTDerivBase.cpp.

1250 {
1251 NEKERROR(ErrorUtil::efatal, "Not valid for this operator.");
1252 }
#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 1265 of file IProductWRTDerivBase.cpp.

Referenced by operator()().

◆ m_base1

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

Definition at line 1266 of file IProductWRTDerivBase.cpp.

Referenced by operator()().

◆ m_base2

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

Definition at line 1267 of file IProductWRTDerivBase.cpp.

Referenced by operator()().

◆ m_colldir0

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

Definition at line 1261 of file IProductWRTDerivBase.cpp.

Referenced by operator()().

◆ m_colldir1

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

Definition at line 1262 of file IProductWRTDerivBase.cpp.

Referenced by operator()().

◆ m_colldir2

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

Definition at line 1263 of file IProductWRTDerivBase.cpp.

Referenced by operator()().

◆ m_derbase0

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

Definition at line 1268 of file IProductWRTDerivBase.cpp.

Referenced by operator()().

◆ m_derbase1

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

Definition at line 1269 of file IProductWRTDerivBase.cpp.

Referenced by operator()().

◆ m_derbase2

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

Definition at line 1270 of file IProductWRTDerivBase.cpp.

Referenced by operator()().

◆ m_derivFac

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

Definition at line 1271 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 1264 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 1258 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 1259 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 1260 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 1255 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 1256 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 1257 of file IProductWRTDerivBase.cpp.

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