Geom Module

Unstructured mesh, CGNS I/O, element types, and partitioning.

Namespace Overview

namespace Geom

Typedefs

using tPy_AutoAppendName2ID = py_class_ssp<AutoAppendName2ID>
using t_FBCName_2_ID = std::function<t_index(const std::string&)>
using t_FBCID_2_Name = std::function<std::string(t_index)>
using t_index = int32_t
using t_real = double
using tPoint = Eigen::Vector3d
using tJacobi = Eigen::Matrix3d
using tGPoint = Eigen::Matrix3d
using tPointMap = Eigen::Map<tPoint, Eigen::Unaligned>
using tPointConstMap = Eigen::Map<const tPoint, Eigen::Unaligned>
using tGPointMap = Eigen::Map<tGPoint, Eigen::Unaligned>
using tGPointConstMap = Eigen::Map<const tGPoint, Eigen::Unaligned>
using tSmallCoords = Eigen::Matrix<real, 3, Eigen::Dynamic>
using tLocalMatStruct = std::vector<std::vector<index>>
using tIndexMapFunc = std::function<index(index)>
using tFDataFieldName = std::function<std::string(int)>
using tFDataFieldQuery = tFGetData
using tPy_ElemInfo = py_class_ssp<ElemInfo>
using tPy_UnstructuredMesh = py_class_ssp<UnstructuredMesh>
using tPy_UnstructuredMeshSerialRW = py_class_ssp<UnstructuredMeshSerialRW>
using tAdjPair = DNDS::ArrayAdjacencyPair<DNDS::NonUniformSize>
using tAdj = decltype(tAdjPair::father)
using tPbiPair = ArrayPair<ArrayNodePeriodicBits<DNDS::NonUniformSize>>
using tPbi = decltype(tPbiPair::father)
using tAdj1Pair = DNDS::ArrayAdjacencyPair<1>
using tAdj1 = decltype(tAdj1Pair::father)
using tAdj2Pair = DNDS::ArrayAdjacencyPair<2>
using tAdj2 = decltype(tAdj2Pair::father)
using tAdj3Pair = DNDS::ArrayAdjacencyPair<3>
using tAdj3 = decltype(tAdj3Pair::father)
using tAdj4Pair = DNDS::ArrayAdjacencyPair<4>
using tAdj4 = decltype(tAdj4Pair::father)
using tAdj8Pair = DNDS::ArrayAdjacencyPair<8>
using tAdj8 = decltype(tAdj8Pair::father)
using tCoordPair = DNDS::ArrayPair<DNDS::ArrayEigenVector<3>>
using tCoord = decltype(tCoordPair::father)
using tElemInfoArrayPair = DNDS::ArrayPair<DNDS::ParArray<ElemInfo>>
using tElemInfoArray = DNDS::ssp<DNDS::ParArray<ElemInfo>>
using tIndPair = DNDS::ArrayPair<DNDS::ArrayIndex>
using tInd = decltype(tIndPair::father)
using tFGetName = std::function<std::string(int)>
using tFGetData = std::function<DNDS::real(int, DNDS::index)>
using tFGetVecData = std::function<DNDS::real(int, DNDS::index, DNDS::rowsize)>
template<rowsize _row_size = 1, rowsize _row_max = _row_size, rowsize _align = NoAlign>
using ArrayNodePeriodicBitsPair = ArrayPair<ArrayNodePeriodicBits<_row_size, _row_max, _align>>

Enums

enum class MeshLoc : uint8_t

Values:

enumerator Unknown
enumerator Node
enumerator Face
enumerator Cell
enum MeshReaderMode

Values:

enumerator UnknownMode
enumerator SerialReadAndDistribute
enumerator SerialOutput
enum MeshAdjState

Values:

enumerator Adj_Unknown
enumerator Adj_PointToLocal
enumerator Adj_PointToGlobal
enum MeshElevationState

Values:

enumerator Elevation_Untouched
enumerator Elevation_O1O2

Functions

inline void pybind11_AutoAppendName2ID_define(py::module_ &m)
inline auto GetFaceName2IDDefault()
inline DNDS_DEVICE_CALLABLE bool FaceIDIsExternalBC (t_index id)
inline DNDS_DEVICE_CALLABLE bool FaceIDIsInternal (t_index id)
inline DNDS_DEVICE_CALLABLE bool FaceIDIsTrueInternal (t_index id)
inline DNDS_DEVICE_CALLABLE bool FaceIDIsPeriodic (t_index id)
inline DNDS_DEVICE_CALLABLE bool FaceIDIsPeriodic1 (t_index id)
inline DNDS_DEVICE_CALLABLE bool FaceIDIsPeriodic2 (t_index id)
inline DNDS_DEVICE_CALLABLE bool FaceIDIsPeriodic3 (t_index id)
inline DNDS_DEVICE_CALLABLE bool FaceIDIsPeriodicMain (t_index id)
inline DNDS_DEVICE_CALLABLE bool FaceIDIsPeriodicDonor (t_index id)
inline constexpr Elem::ElemType __getElemTypeFromCGNSType(ElementType_t cgns_et)
inline constexpr ElementType_t __getCGNSTypeFromElemType(Elem::ElemType et)
inline std::vector<real> JacobiToSTDVector(const tJacobi &j)
inline tJacobi STDVectorToJacobi(const std::vector<real> &v)
inline std::vector<real> VectorToSTDVector(const Eigen::VectorXd &v)
inline Eigen::VectorXd STDVectorToVector(const std::vector<real> &v)
template<int d>
inline tPoint FacialJacobianToNormVec(const tJacobi &J)
template<int dim>
inline Eigen::Matrix<real, dim, dim> NormBuildLocalBaseV(const Eigen::Ref<const Eigen::Vector<real, dim>> &uNorm)
inline tGPoint RotZ(real theta)
inline tGPoint RotX(real theta)
inline tGPoint RotY(real theta)
inline tGPoint RotateAxis(const tPoint &axis)
inline tGPoint CrossVecToMat(const tPoint &axn)
inline tPoint CrossMatToVec(const tGPoint &axnM)
template<int dim>
tPoint ToThreeDim(const Eigen::Vector<real, dim> &v)
inline void GetTanhDistributionBilateral(real x0, real x1, index NInterval, real d0, Eigen::Vector<real, Eigen::Dynamic> &d)
void PushInfo2Serial2Global(std::vector<DNDS::index> &serial2Global, DNDS::index localSize, const std::vector<DNDS::index> &pushIndex, const std::vector<DNDS::index> &pushIndexStart, const DNDS::MPIInfo &mpi)
static void GeneralCell2NodeToNode2Cell(tCoordPair &coords, tAdjPair &cell2node, tAdjPair &node2cell, const tIndexMapFunc &CellIndexLocal2Global_NoSon, const tIndexMapFunc &NodeIndexLocal2Global_NoSon)
inline void pybind11_ElemInfo_define(py::module_ &m)
inline void pybind11_ArrayElemInfo_define(py::module_ &m)
inline void pybind11_MeshLocDefine(py::module_ &m)
inline void pybind11_UnstructuredMesh_define(py::module_ &m)
inline void pybind11_UnstructuredMeshSerialRW_define(py::module_ &m)
static tPoint HermiteInterpolateMidPointOnLine2WithNorm(tPoint c0, tPoint c1, tPoint n0, tPoint n1)
static tPoint HermiteInterpolateMidPointOnQuad4WithNorm(tPoint c0, tPoint c1, tPoint c2, tPoint c3, tPoint n0, tPoint n1, tPoint n2, tPoint n3)
template<class TPartitionIdx>
void Partition2LocalIdx(const std::vector<TPartitionIdx> &partition, std::vector<DNDS::index> &localPush, std::vector<DNDS::index> &localPushStart, const DNDS::MPIInfo &mpi)
template<class TPartitionIdx>
void Partition2Serial2Global(const std::vector<TPartitionIdx> &partition, std::vector<DNDS::index> &serial2Global, const DNDS::MPIInfo &mpi, DNDS::MPI_int nPart)
template<class TAdj = tAdj1>
void ConvertAdjSerial2Global(TAdj &arraySerialAdj, const std::vector<DNDS::index> &partitionJSerial2Global, const DNDS::MPIInfo &mpi)
template<class TArr = tAdj1>
void TransferDataSerial2Global(TArr &arraySerial, TArr &arrayDist, const std::vector<DNDS::index> &pushIndex, const std::vector<DNDS::index> &pushIndexStart, const DNDS::MPIInfo &mpi)
static void GetViolentNodeDeduplication(index nNode, const std::vector<tPoint> &nodesExtra, tCoordPair &coordOut, std::vector<index> &nodeDedu2Old, std::vector<index> &nodeOld2Dedu)
static void updateVTKSeries(std::string seriesName, std::string fname, real tSimu)
static void H5_WriteDataset(hid_t loc, const char *name, index nGlobal, index nOffset, index nLocal, hid_t file_dataType, hid_t mem_dataType, hid_t plist_id, hid_t dcpl_id, void *buf, int dim2 = -1)
template<class TArray>
static void EvenSplitReadFather(ssp<TArray> &father, ssp<TArray> &son, const MPIInfo &mpi, Serializer::SerializerBaseSSP serializerP, const std::string &name)
template<class TArray>
static void EvenSplitReadFather(ssp<TArray> &father, ssp<TArray> &son, const MPIInfo &mpi, Serializer::SerializerBaseSSP serializerP, const std::string &name, MPI_Datatype commType, int commMult)
static std::vector<index> put_perm_back_to_local_parts(const std::vector<index> &new2old, const std::vector<index> &localPartStarts)
static void check_permutations(const std::vector<index> &new2old, const std::vector<index> &old2new, const std::vector<index> &localPartStarts)
inline bool isCollaborativeNodePeriodicBits(const std::vector<NodePeriodicBits> &a, const std::vector<NodePeriodicBits> &b)
std::vector<index> ReorderSerialAdj_PartitionMetisC(tLocalMatStruct::iterator mat_begin, tLocalMatStruct::iterator mat_end, std::vector<index>::iterator i_new2old_begin, std::vector<index>::iterator i_new2old_end, int nParts, index ind_offset, bool do_rcm, index &bwOldM, index &bwNewM, tLocalMatStruct::iterator full_mat_begin, index full_n_elem)
inline auto PartitionSerialAdj_Metis(tLocalMatStruct::const_iterator mat_begin, tLocalMatStruct::const_iterator mat_end, int nPart, index ind_offset = 0, std::string metisType = "KWAY", int metisNcuts = 3, int metisUfactor = 5, int metisSeed = 0)
inline std::pair<std::vector<index>, std::vector<index>> ReorderSerialAdj_Metis(const tLocalMatStruct &mat)
inline std::pair<std::vector<index>, std::vector<index>> ReorderSerialAdj_BoostMMD(const tLocalMatStruct &mat)
inline std::pair<std::vector<index>, std::vector<index>> ReorderSerialAdj_BoostRCM(const tLocalMatStruct &mat, index &bandWidthOld, index &bandWidthNew)
inline std::pair<std::vector<index>, std::vector<index>> ReorderSerialAdj_CorrectRCM(tLocalMatStruct::const_iterator mat_begin, tLocalMatStruct::const_iterator mat_end, index &bandWidthOld, index &bandWidthNew, index offset = 0)

Variables

static const t_index BC_ID_INTERNAL = 0
static const t_index BC_ID_PERIODIC_1 = -1
static const t_index BC_ID_PERIODIC_2 = -2
static const t_index BC_ID_PERIODIC_3 = -3
static const t_index BC_ID_PERIODIC_1_DONOR = -4
static const t_index BC_ID_PERIODIC_2_DONOR = -5
static const t_index BC_ID_PERIODIC_3_DONOR = -6
static const t_index BC_ID_NULL = 1
static const t_index BC_ID_DEFAULT_WALL = 2
static const t_index BC_ID_DEFAULT_FAR = 3
static const t_index BC_ID_DEFAULT_WALL_INVIS = 4
static const t_index BC_ID_DEFAULT_SPECIAL_DMR_FAR = 11
static const t_index BC_ID_DEFAULT_SPECIAL_RT_FAR = 12
static const t_index BC_ID_DEFAULT_SPECIAL_IV_FAR = 13
static const t_index BC_ID_DEFAULT_SPECIAL_2DRiemann_FAR = 14
static const t_index BC_ID_DEFAULT_MAX = 20
static const t_FBCName_2_ID FBC_Name_2_ID_Default = [](const std::string &name) -> t_index     {                  auto n2id_map = GetFaceName2IDDefault();if (n2id_map.count(name))return n2id_map.at(name);return BC_ID_NULL;}
const t_index invalid_index = INT32_MAX
static const t_index INTERNAL_ZONE = -1
static const NodePeriodicBits nodePB1 = {0x01U}
static const NodePeriodicBits nodePB2 = {0x02U}
static const NodePeriodicBits nodePB3 = {0x04U}
template<rowsize _row_size = 1, rowsize _row_max = _row_size, rowsize _align = NoAlign>
class ArrayNodePeriodicBits : public DNDS::ParArray<NodePeriodicBits, 1, 1, NoAlign>
struct AutoAppendName2ID
class BCName_2_ID
struct CoordPairDOF : public DNDS::ArrayPair<DNDS::ArrayEigenVector<3>>
struct ElemInfo

Public Members

t_index zone = INTERNAL_ZONE
struct NodeIndexPBI
struct NodePeriodicBits
class NodePeriodicBitsRow
class Octree
template<class T>
class OffsetIterator
template<class T>
class OffsetRange
struct PartitionOptions
struct Periodicity

Subclassed by DNDS::Geom::Base::CFVPeriodicity

Public Functions

template<int dim, int nVec> inline DNDS_DEVICE_CALLABLE Eigen::Matrix< real, dim, nVec > TransVector (const Eigen::Matrix< real, dim, nVec > &v, t_index id)
struct PointCloudFunctional

Public Types

using coord_t = real
struct PointCloudKDTree

Public Types

using coord_t = real
struct PointCloudKDTreeCoordPair

Public Types

using coord_t = real
struct SmallCoordsAsVector : public tSmallCoords
struct tGPointPortable
struct tPointPortable
struct UnstructuredMesh : public DNDS::DeviceTransferable<UnstructuredMesh>

Public Functions

template<class TPair>
inline index IndexGlobal2Local(TPair &pair, DNDS::index iGlobal)
template<class TPair>
inline index IndexLocal2Global(TPair &pair, DNDS::index iLocal)
template<class TPair>
inline index IndexLocal2Global_NoSon(TPair &pair, index iLocal)
template<class TPair>
inline index IndexGlobal2Local_NoSon(TPair &pair, index iGlobal)
void RecoverNode2CellAndNode2Bnd()
void RecoverCell2CellAndBnd2Cell()
void BuildGhostPrimary()
void InterpolateFace()
tLocalMatStruct GetCell2CellFaceVLocal(bool onLocalPartition = false)
void ReorderLocalCells(int nParts = 1, int nPartsInner = 1)
inline index NumCellGlobal()
inline index NumNodeGlobal()
inline index NumFaceGlobal()
inline index NumBndGlobal()
template<class tC2n>
inline void __GetCoords(const tC2n &c2n, tSmallCoords &cs)
template<class tC2n, class tCoordExt>
inline void __GetCoords(const tC2n &c2n, tSmallCoords &cs, tCoordExt &coo)
template<class tC2n, class tC2nPbi>
inline void __GetCoordsOnElem(const tC2n &c2n, const tC2nPbi &c2nPbi, tSmallCoords &cs)
template<class tC2n, class tC2nPbi, class tCoordExt>
inline void __GetCoordsOnElem(const tC2n &c2n, const tC2nPbi &c2nPbi, tSmallCoords &cs, tCoordExt &coo)
template<class FA, class FB, class F0 = std::function<void(void)>>
inline auto CellOtherCellPeriodicHandle(index iFace, rowsize if2c, FA &&fA, FB &&fB, F0 &&f0 = []() {})
void ReadSerializeAndDistribute(Serializer::SerializerBaseSSP serializerP, const std::string &name, const PartitionOptions &partitionOptions)

Public Members

tCoordPair coords
tPbiPair cell2nodePbi
tAdjPair node2cell
tAdjPair cell2face
tPbiPair face2nodePbi
tAdjPair cell2cellFace
std::vector<index> node2parentNode
std::vector<index> vtkCell2nodeOffsets
tCoordPair coordsElevDisp
tLocalMatStruct cell2cellFaceVLocalParts
tCoordPair nodeWallDist

Public Static Functions

template<class TAdj, class TFn>
static inline void ConvertAdjEntries(TAdj &adj, index nRows, TFn &&fn)
template<class TPair, class TFn>
static inline void PermuteRows(TPair &pair, index nRows, TFn &&old2new)
struct ElevationInfo
struct HDF5OutSetting
struct WallDistOptions
template<DeviceBackend B>
struct UnstructuredMeshDeviceView

Public Functions

template<class FA, class FB, class F0>
inline DNDS_DEVICE_CALLABLE auto CellOtherCellPeriodicHandle(index iFace, rowsize if2c, FA &&fA, FB &&fB, F0 &&f0 = []() {})
template<class tC2n> inline DNDS_DEVICE_CALLABLE void __GetCoords (const tC2n &c2n, tSmallCoords &cs)
template<class tC2n, class tCoordExt> inline DNDS_DEVICE_CALLABLE void __GetCoords (const tC2n &c2n, tSmallCoords &cs, tCoordExt &coo)
template<class tC2n, class tC2nPbi> inline DNDS_DEVICE_CALLABLE void __GetCoordsOnElem (const tC2n &c2n, const tC2nPbi &c2nPbi, tSmallCoords &cs)
template<class tC2n, class tC2nPbi, class tCoordExt> inline DNDS_DEVICE_CALLABLE void __GetCoordsOnElem (const tC2n &c2n, const tC2nPbi &c2nPbi, tSmallCoords &cs, tCoordExt &coo)

Public Members

tCoordPair::t_deviceView<B> coords
tPbiPair::t_deviceView<B> cell2nodePbi
tAdjPair::t_deviceView<B> cell2face
tPbiPair::t_deviceView<B> face2nodePbi
struct UnstructuredMeshSerialRW

Public Functions

template<class tC2n, class tCoordExt>
inline void __GetCoordsSerial(const tC2n &c2n, tSmallCoords &cs, tCoordExt &coo)
template<class tC2n, class tC2nPbi, class tCoordExt>
inline void __GetCoordsOnElemSerial(const tC2n &c2n, const tC2nPbi &c2nPbi, tSmallCoords &cs, tCoordExt &coo)
inline void GetCoordsOnCellSerial(index iCell, tSmallCoords &cs, tCoord &coo)
void ReadFromCGNSSerial(const std::string &fName, const t_FBCName_2_ID &FBCName_2_ID)
void BuildCell2Cell()
void BuildSerialOut()
void PrintSerialPartPltBinaryDataArray(std::string fname, int arraySiz, int arraySizPoint, const tFGetName &names, const tFGetData &data, const tFGetName &namesPoint, const tFGetData &dataPoint, double t, int flag)
void PrintSerialPartVTKDataArray(std::string fname, std::string seriesName, int arraySiz, int vecArraySiz, int arraySizPoint, int vecArraySizPoint, const tFGetName &names, const tFGetData &data, const tFGetName &vectorNames, const tFGetVecData &vectorData, const tFGetName &namesPoint, const tFGetData &dataPoint, const tFGetName &vectorNamesPoint, const tFGetVecData &vectorDataPoint, double t, int flag = 0)
namespace Base

Typedefs

using t_diffOpIJK2I = std::tuple<int, std::array<int, 3>, std::array<std::array<int, 3>, 3>, std::array<std::array<std::array<int, 3>, 3>, 3>>

Functions

template<int dim>
constexpr int ndiffSizS(int i)
template<int dim>
constexpr int ndiff2order(int rows)
template<int dim, int NDiffC>
constexpr t_diffOpIJK2I __get_diffOperatorIJK2I(const std::array<std::array<int, 3>, NDiffC> &diffOps)
template<int dim>
constexpr auto &getDiffOperatorIJK2I()
inline real iPow(int p, real x)
template<int dim, int order>
inline constexpr int PolynomialNDOF()
static inline real FPolynomial3D(int px, int py, int pz, int dx, int dy, int dz, real x, real y, real z)
template<class TDIBJ>
void FPolynomialFill2D(TDIBJ &T, real x, real y, real z, real lx, real ly, real lz, int rows, int cols)
template<class TDIBJ>
void FPolynomialFill3D(TDIBJ &T, real x, real y, real z, real lx, real ly, real lz, int rows, int cols)
template<int dim>
inline int GetNDof(int maxOrder)
template<int dim = 3, int rank = 0, int powV = 1, class VLe, class VRi>
real NormSymDiffOrderTensorV(VLe &&Le, VRi &&Ri)
template<int dim, int rank, class VLe, class Trans>
void TransSymDiffOrderTensorV(VLe &&Le, Trans &&trans)
template<int dim, class TMat>
inline void ConvertDiffsLinMap(TMat &&mat, const Geom::tGPoint &dXijdXi)
template<int dim, class TMat, class TDiBjB>
inline void ConvertDiffsFullMap(TMat &&mat, TDiBjB &&DxiDx)
template<int dim, int maxDiff, class TDiBjA, class TDiBjB>
void DxDxi2DxiDx(TDiBjA &&DxDxi, TDiBjB &&DxiDx)

Variables

static const int ndiff = 3
static const int ndiffSiz = 20
static const int ndiffSiz2D = 10
static const std::array<int, ndiff + 1> ndiffSizC = {1, 4, 10, 20}
static const std::array<int, ndiff + 1> ndiffSizC2D = {1, 3, 6, 10}
static const std::array<std::array<int, 3>, ndiffSiz> diffOperatorOrderList{{{{0, 0, 0}}, {{1, 0, 0}}, {{0, 1, 0}}, {{0, 0, 1}}, {{2, 0, 0}}, {{0, 2, 0}}, {{0, 0, 2}}, {{1, 1, 0}}, {{0, 1, 1}}, {{1, 0, 1}}, {{3, 0, 0}}, {{0, 3, 0}}, {{0, 0, 3}}, {{2, 1, 0}}, {{1, 2, 0}}, {{0, 2, 1}}, {{0, 1, 2}}, {{1, 0, 2}}, {{2, 0, 1}}, {{1, 1, 1}},}}
static const std::array<std::array<int, 3>, ndiffSiz2D> diffOperatorOrderList2D = {{{{0, 0, 0}}, {{1, 0, 0}}, {{0, 1, 0}}, {{2, 0, 0}}, {{1, 1, 0}}, {{0, 2, 0}}, {{3, 0, 0}}, {{2, 1, 0}}, {{1, 2, 0}}, {{0, 3, 0}},}}
static const std::array<std::array<int, ndiff>, ndiffSiz> diffOperatorDimList{{{{}}, {{0}}, {{1}}, {{2}}, {{0, 0}}, {{1, 1}}, {{2, 2}}, {{0, 1}}, {{1, 2}}, {{0, 2}}, {{0, 0, 0}}, {{1, 1, 1}}, {{2, 2, 2}}, {{0, 0, 1}}, {{0, 1, 1}}, {{1, 1, 2}}, {{1, 2, 2}}, {{0, 2, 2}}, {{0, 0, 2}}, {{0, 1, 2}},}}
static const std::array<std::array<int, ndiff>, ndiffSiz2D> diffOperatorDimList2D = {{{{}}, {{0}}, {{1}}, {{0, 0}}, {{0, 1}}, {{1, 1}}, {{0, 0, 0}}, {{0, 0, 1}}, {{0, 1, 1}}, {{1, 1, 1}},}}
static const t_diffOpIJK2I diffOperatorIJK2I = __get_diffOperatorIJK2I<3, ndiffSiz>(diffOperatorOrderList)
static const t_diffOpIJK2I diffOperatorIJK2I2D = __get_diffOperatorIJK2I<2, ndiffSiz2D>(diffOperatorOrderList2D)
static const int dFactorials[ndiff + 1][ndiff + 1] = {{1, 0, 0, 0}, {1, 1, 0, 0}, {1, 2, 2, 0}, {1, 3, 6, 6}}
static const std::array<int, ndiff * 3 + 1> factorials = {1, 1, 1 * 2, 1 * 2 * 3, 1 * 2 * 3 * 4, 1 * 2 * 3 * 4 * 5, 1 * 2 * 3 * 4 * 5 * 6, 1 * 2 * 3 * 4 * 5 * 6 * 7, 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8, 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9,}
static const std::array<int, ndiffSiz2D> diffNCombs2D{1, 1, 1, 1, 2, 1, 1, 3, 3, 1}
static const std::array<int, ndiffSiz> diffNCombs{1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 3, 3, 3, 3, 3, 3, 6}
class CFVPeriodicity : public DNDS::Geom::Periodicity
namespace Elem

Typedefs

using tNj = Eigen::RowVector<t_real, Eigen::Dynamic>
using tD1Nj = Eigen::Matrix<t_real, 3, Eigen::Dynamic>
using tD01Nj = Eigen::Matrix<t_real, 4, Eigen::Dynamic>
using tDiNj = Eigen::Matrix<t_real, Eigen::Dynamic, Eigen::Dynamic>
using tPy_ElemType = py::enum_<ElemType>
using tElevSpan = std::array<t_index, elevSpanMaxWidth>
using tBisectSub = std::array<t_index, bisectSubMaxNodes>
using tVTKNodeOrder = std::array<int, vtkNodeOrderMax>

Enums

enum ElemType

Values:

enumerator UnknownElem
enumerator Line2
enumerator Line3
enumerator Tri3
enumerator Tri6
enumerator Quad4
enumerator Quad9
enumerator Tet4
enumerator Tet10
enumerator Hex8
enumerator Hex27
enumerator Prism6
enumerator Prism18
enumerator Pyramid5
enumerator Pyramid14
enumerator ElemType_NUM
enum ParamSpace

Values:

enumerator UnknownPSpace
enumerator LineSpace
enumerator TriSpace
enumerator QuadSpace
enumerator TetSpace
enumerator HexSpace
enumerator PrismSpace
enumerator PyramidSpace
enumerator ParamSpace_NUM

Functions

Eigen::Matrix<t_real, 3, Eigen::Dynamic> GetStandardCoord(ElemType t)
inline DNDS_DEVICE_CALLABLE constexpr ParamSpace ElemType_to_ParamSpace (const ElemType t)
inline DNDS_DEVICE_CALLABLE constexpr ElemType GetFaceType (ElemType t_v, t_index iFace)
inline DNDS_DEVICE_CALLABLE constexpr t_real ParamSpaceVol (ParamSpace ps)
inline DNDS_DEVICE_CALLABLE constexpr int GetElemElevation_O1O2_NumNode (ElemType t)
inline DNDS_DEVICE_CALLABLE constexpr ElemType GetElemElevation_O1O2_ElevatedType (ElemType t)
inline DNDS_DEVICE_CALLABLE constexpr ElemType GetElemElevation_O1O2_NodeSpanType (ElemType t, t_index ine)
inline DNDS_DEVICE_CALLABLE constexpr ElemType GetElemO1 (ParamSpace ps)
inline DNDS_DEVICE_CALLABLE constexpr t_index GetO2ElemBisectNum (ElemType t)
inline DNDS_DEVICE_CALLABLE constexpr ElemType GetO2ElemBisectElem (ElemType t, t_index i)
static DNDS_DEVICE_CALLABLE constexpr real __iipow (real x, int y)
template<int diffOrder, class TPoint, class TArray> DNDS_DEVICE_CALLABLE void ShapeFunc_DiNj (ElemType t, const TPoint &p, TArray &&v)
inline bool cellsAreFaceConnected(const std::vector<DNDS::index> &nodes_A, const std::vector<DNDS::index> &nodes_B, Element eA, Element eB)
inline bool cellsAreFaceConnected(const std::vector<DNDS::index> &verts_A, const std::vector<DNDS::index> &nodes_B)
template<class tCoordsIn>
tJacobi ShapeJacobianCoordD01Nj(const tCoordsIn &cs, Eigen::Ref<const tD01Nj> DiNj)
template<class tCoordsIn>
tPoint PPhysicsCoordD01Nj(const tCoordsIn &cs, Eigen::Ref<const tD01Nj> DiNj)
template<int dim>
real JacobiDetFace(Eigen::Ref<const tJacobi> J)
inline tPoint GetElemNodeMajorSpan(const tSmallCoords &coords)
inline t_index GetO2ElemBisectVariant(Element e, const tSmallCoords &coords)
template<class TIn>
std::pair<int, std::vector<index>> ToVTKVertsAndData(Element e, const TIn &vin)
inline void pybind11_ElemType_define(py::module_ &m)
DNDS_DEVICE_CALLABLE constexpr t_real ParamSpaceVolume (ParamSpace ps)
DNDS_DEVICE_CALLABLE constexpr ElemType ParamSpaceO1Elem (ParamSpace ps)
template<typename Func> DNDS_DEVICE_CALLABLE constexpr decltype(auto) DispatchElementType (ElemType t, Func &&func)
inline auto GetQuadPatches(Quadrature &q)
template<int dim>
real CellJacobianDet(const Geom::tSmallCoords &coordsCell, const Geom::Elem::tD01Nj &DiNj)
inline real CellJacobianDet(int dim, const Geom::tSmallCoords &coordsCell, const Geom::Elem::tD01Nj &DiNj)
template<int dim>
real FaceJacobianDet(const Geom::tSmallCoords &coords, const Geom::Elem::tD01Nj &DiNj)
inline real FaceJacobianDet(int dim, const Geom::tSmallCoords &coords, const Geom::Elem::tD01Nj &DiNj)
inline constexpr t_index GetQuadratureScheme(ParamSpace ps, int int_order)
template<class TPoint>
inline void GetQuadraturePoint(ParamSpace ps, t_index scheme, int iG, TPoint &pParam, t_real &w)

Variables

static constexpr int elevSpanMaxWidth = 8
static constexpr int bisectSubMaxNodes = 8
static constexpr int vtkNodeOrderMax = 27
static const int CellNumNodeMax = 27
static struct DNDS::Geom::Elem::__TNBufferAtQuadrature __NBufferAtQuadrature
static const t_real __GaussJacobi_01A2B0_1[2][1]{{0.250000000000000}, {0.333333333333333}}
static const t_real __GaussJacobi_01A2B0_2[2][2]{{0.122514822655441, 0.544151844011225}, {0.232547451253508, 0.100785882079825}}
static const t_real __GaussJacobi_01A2B0_3[2][3]{{0.072994024073150, 0.347003766038352, 0.705002209888499}, {0.157136361064887, 0.146246269259866, 0.029950703008581}}
static const t_real __GaussJacobi_01A2B0_4[2][4]{{0.048500549446997, 0.238600737551862, 0.517047295104367, 0.795851417896773}, {0.110888415611278, 0.143458789799214, 0.068633887172923, 0.010352240749918}}
static const t_real __GaussJacobi_01A2B0_5[2][5]{{0.034578939918215, 0.173480320771696, 0.389886387065519, 0.634333472630887, 0.851054212947016}, {0.081764784285771, 0.126198961899911, 0.089200161221590, 0.032055600722962, 0.004113825203099}}
static const t_real __GaussLegendre_1[2][1]{{0}, {2}}
static const t_real __GaussLegendre_2[2][2]{{-0.577350269189626, 0.577350269189626}, {1, 1}}
static const t_real __GaussLegendre_3[2][3]{{-0.774596669241483, 0, 0.774596669241483}, {0.555555555555555, 0.888888888888889, 0.555555555555555}}
static const t_real __GaussLegendre_4[2][4]{{-0.861136311594053, -0.339981043584856, 0.339981043584856, 0.861136311594053}, {0.347854845137454, 0.652145154862546, 0.652145154862546, 0.347854845137454}}
static const t_real __GaussLegendre_5[2][5]{{-0.906179845938664, -0.538469310105683, 0, 0.538469310105683, 0.906179845938664}, {0.236926885056189, 0.478628670499366, 0.568888888888889, 0.478628670499366, 0.236926885056189}}
static const t_index INT_SCHEME_Line_1 = 1
static const t_index INT_SCHEME_Line_2 = 2
static const t_index INT_SCHEME_Line_3 = 3
static const t_index INT_SCHEME_Line_4 = 4
static const t_index INT_SCHEME_Quad_1 = 1
static const t_index INT_SCHEME_Quad_4 = 4
static const t_index INT_SCHEME_Quad_9 = 9
static const t_index INT_SCHEME_Quad_16 = 16
static const t_index INT_SCHEME_Tri_1 = 1
static const t_index INT_SCHEME_Tri_3 = 3
static const t_index INT_SCHEME_Tri_6 = 6
static const t_index INT_SCHEME_Tri_7 = 7
static const t_index INT_SCHEME_Tri_12 = 12
static const t_index INT_SCHEME_Tet_1 = 1
static const t_index INT_SCHEME_Tet_4 = 4
static const t_index INT_SCHEME_Tet_8 = 8
static const t_index INT_SCHEME_Tet_14 = 14
static const t_index INT_SCHEME_Tet_24 = 24
static const t_index INT_SCHEME_Hex_1 = 1
static const t_index INT_SCHEME_Hex_8 = 8
static const t_index INT_SCHEME_Hex_27 = 27
static const t_index INT_SCHEME_Hex_64 = 64
static const t_index INT_SCHEME_Prism_1 = 1 * 1
static const t_index INT_SCHEME_Prism_6 = 3 * 2
static const t_index INT_SCHEME_Prism_18 = 6 * 3
static const t_index INT_SCHEME_Prism_21 = 7 * 3
static const t_index INT_SCHEME_Prism_48 = 12 * 4
static const t_index INT_SCHEME_Pyramid_1 = 1
static const t_index INT_SCHEME_Pyramid_8 = 8
static const t_index INT_SCHEME_Pyramid_27 = 27
static const t_index INT_SCHEME_Pyramid_64 = 64
static const int INT_ORDER_MAX = 6
static const t_real __HammerTet_1[4][1]{{0.25}, {0.25}, {0.25}, {0.1666666666666667}}
static const t_real __HammerTet_4[4][4]{{0.1381966011250105, 0.1381966011250105, 0.5854101966249685, 0.1381966011250105}, {0.1381966011250105, 0.5854101966249684, 0.1381966011250105, 0.1381966011250105}, {0.5854101966249684, 0.1381966011250105, 0.1381966011250105, 0.1381966011250105}, {0.04166666666666666, 0.04166666666666666, 0.04166666666666666, 0.04166666666666666}}
static const t_real __HammerTet_8[4][8]{{0.1069940147705369, 0.1069940147705369, 0.6790179556883893, 0.1069940147705369, 0.3280585716625127, 0.3280585716625127, 0.01582428501246191, 0.3280585716625127}, {0.1069940147705369, 0.6790179556883893, 0.1069940147705369, 0.1069940147705369, 0.3280585716625127, 0.01582428501246191, 0.3280585716625127, 0.3280585716625127}, {0.6790179556883893, 0.1069940147705369, 0.1069940147705369, 0.1069940147705369, 0.01582428501246191, 0.3280585716625127, 0.3280585716625127, 0.3280585716625127}, {0.01859314997209119, 0.01859314997209119, 0.01859314997209119, 0.01859314997209119, 0.02307351669457548, 0.02307351669457548, 0.02307351669457548, 0.02307351669457548}}
static const t_real __HammerTet_14[4][14]{{0.09273525031089125, 0.09273525031089125, 0.7217942490673263, 0.09273525031089125, 0.3108859192633008, 0.3108859192633008, 0.06734224221009777, 0.3108859192633008, 0.04550370412564952, 0.4544962958743505, 0.04550370412564952, 0.04550370412564952, 0.4544962958743505, 0.4544962958743505}, {0.09273525031089125, 0.7217942490673263, 0.09273525031089125, 0.09273525031089125, 0.3108859192633008, 0.06734224221009777, 0.3108859192633008, 0.3108859192633008, 0.4544962958743505, 0.04550370412564952, 0.04550370412564952, 0.4544962958743505, 0.04550370412564952, 0.4544962958743505}, {0.7217942490673263, 0.09273525031089125, 0.09273525031089125, 0.09273525031089125, 0.06734224221009777, 0.3108859192633008, 0.3108859192633008, 0.3108859192633008, 0.4544962958743505, 0.4544962958743505, 0.4544962958743505, 0.04550370412564952, 0.04550370412564952, 0.04550370412564952}, {0.01224884051939367, 0.01224884051939367, 0.01224884051939367, 0.01224884051939367, 0.01878132095300264, 0.01878132095300264, 0.01878132095300264, 0.01878132095300264, 0.0070910034628469, 0.0070910034628469, 0.0070910034628469, 0.0070910034628469, 0.0070910034628469, 0.0070910034628469}}
static const t_real __HammerTet_24[4][24]{{0.2146028712591523, 0.2146028712591523, 0.3561913862225431, 0.2146028712591523, 0.3223378901422754, 0.3223378901422754, 0.0329863295731736, 0.3223378901422754, 0.04067395853461131, 0.04067395853461131, 0.8779781243961661, 0.04067395853461131, 0.6030056647916491, 0.6030056647916491, 0.06366100187501755, 0.2696723314583158, 0.06366100187501755, 0.06366100187501755, 0.2696723314583158, 0.06366100187501755, 0.06366100187501755, 0.06366100187501755, 0.2696723314583158, 0.6030056647916491}, {0.2146028712591523, 0.3561913862225431, 0.2146028712591523, 0.2146028712591523, 0.3223378901422754, 0.0329863295731736, 0.3223378901422754, 0.3223378901422754, 0.04067395853461131, 0.8779781243961661, 0.04067395853461131, 0.04067395853461131, 0.06366100187501755, 0.06366100187501755, 0.06366100187501755, 0.6030056647916491, 0.2696723314583158, 0.6030056647916491, 0.06366100187501755, 0.2696723314583158, 0.06366100187501755, 0.6030056647916491, 0.06366100187501755, 0.2696723314583158}, {0.3561913862225431, 0.2146028712591523, 0.2146028712591523, 0.2146028712591523, 0.0329863295731736, 0.3223378901422754, 0.3223378901422754, 0.3223378901422754, 0.8779781243961661, 0.04067395853461131, 0.04067395853461131, 0.04067395853461131, 0.2696723314583158, 0.06366100187501755, 0.6030056647916491, 0.06366100187501755, 0.6030056647916491, 0.06366100187501755, 0.6030056647916491, 0.06366100187501755, 0.2696723314583158, 0.2696723314583158, 0.06366100187501755, 0.06366100187501755}, {0.006653791709694545, 0.006653791709694545, 0.006653791709694545, 0.006653791709694545, 0.009226196923942479, 0.009226196923942479, 0.009226196923942479, 0.009226196923942479, 0.001679535175886773, 0.001679535175886773, 0.001679535175886773, 0.001679535175886773, 0.008035714285714285, 0.008035714285714285, 0.008035714285714285, 0.008035714285714285, 0.008035714285714285, 0.008035714285714285, 0.008035714285714285, 0.008035714285714285, 0.008035714285714285, 0.008035714285714285, 0.008035714285714285, 0.008035714285714285}}
static const t_real __HammerTri_1[3][1]{{1. / 3.}, {1. / 3.}, {1. / 2.}}
static const t_real __HammerTri_3[3][3]{{2. / 3., 1. / 6., 1. / 6.}, {1. / 6., 2. / 3., 1. / 6.}, {1. / 6., 1. / 6., 1. / 6.}}
static const t_real __HammerTri_6[3][6]{{0.09157621350977102, 0.8168475729804585, 0.09157621350977052, 0.445948490915965, 0.10810301816807, 0.445948490915965}, {0.09157621350977102, 0.09157621350977052, 0.8168475729804585, 0.445948490915965, 0.445948490915965, 0.10810301816807}, {0.054975871827661, 0.054975871827661, 0.054975871827661, 0.1116907948390057, 0.1116907948390057, 0.1116907948390057}}
static const t_real __HammerTri_7[3][7]{{0.3333333333333335, 0.470142064105115, 0.05971587178977, 0.470142064105115, 0.1012865073234565, 0.7974269853530875, 0.1012865073234565}, {0.3333333333333335, 0.470142064105115, 0.470142064105115, 0.05971587178977, 0.1012865073234565, 0.1012865073234565, 0.7974269853530875}, {0.1125, 0.066197076394253, 0.066197076394253, 0.066197076394253, 0.0629695902724135, 0.0629695902724135, 0.0629695902724135}}
static const t_real __HammerTri_12[3][12]{{0.2492867451709105, 0.501426509658179, 0.2492867451709105, 0.063089014491502, 0.8738219710169954, 0.063089014491502, 0.3103524510337845, 0.05314504984481699, 0.6365024991213986, 0.05314504984481699, 0.6365024991213986, 0.3103524510337845}, {0.2492867451709105, 0.2492867451709105, 0.501426509658179, 0.063089014491502, 0.063089014491502, 0.8738219710169954, 0.05314504984481699, 0.3103524510337845, 0.05314504984481699, 0.6365024991213986, 0.3103524510337845, 0.6365024991213986}, {0.05839313786318975, 0.05839313786318975, 0.05839313786318975, 0.0254224531851035, 0.0254224531851035, 0.0254224531851035, 0.04142553780918675, 0.04142553780918675, 0.04142553780918675, 0.04142553780918675, 0.04142553780918675, 0.04142553780918675}}
struct __TNBufferAtQuadrature
struct Element

Public Functions

template<class TIn, class TOut>
inline void ExtractFaceNodes(t_index iFace, const TIn &nodes, TOut &faceNodesOut)
inline DNDS_DEVICE_CALLABLE void GetNj (const tPoint &pParam, tNj &Nj) const
inline DNDS_DEVICE_CALLABLE void GetD1Nj (const tPoint &pParam, tD1Nj &D1Nj) const
inline void GetD01Nj(const tPoint &pParam, tD01Nj &D01Nj) const
inline void GetDiNj(const tPoint &pParam, tDiNj &DiNj, int maxOrder) const
template<ElemType t>
struct ElementTraits
template<>
struct ElementTraits<Hex27>

Public Static Functions

static inline constexpr ElemType GetFaceType(t_index)
static inline constexpr ElemType GetBisectElemType(t_index)

Public Static Attributes

static constexpr std::array<t_real, 3 * 27> standardCoords = {-1, -1, -1, 1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, 1, 1, -1, 1, 1, 1, 1, -1, 1, 1, 0, -1, -1, 1, 0, -1, 0, 1, -1, -1, 0, -1, -1, -1, 0, 1, -1, 0, 1, 1, 0, -1, 1, 0, 0, -1, 1, 1, 0, 1, 0, 1, 1, -1, 0, 1, 0, 0, -1, 0, -1, 0, 1, 0, 0, 0, 1, 0, -1, 0, 0, 0, 0, 1, 0, 0, 0}
static constexpr std::array<std::array<t_index, 10>, 6> faceNodes = {{{0, 3, 2, 1, 11, 10, 9, 8, 20}, {0, 1, 5, 4, 8, 13, 16, 12, 21}, {1, 2, 6, 5, 9, 14, 17, 13, 22}, {2, 3, 7, 6, 10, 15, 18, 14, 23}, {0, 4, 7, 3, 12, 19, 15, 11, 24}, {4, 5, 6, 7, 16, 17, 18, 19, 25}}}
static constexpr ElemType elevatedType = UnknownElem
static constexpr int numElevNodes = 0
static constexpr int numBisect = 8
static constexpr int numBisectVariants = 1
static constexpr std::array<tBisectSub, 8> bisectElements = {{{0, 8, 20, 11, 12, 21, 26, 24}, {8, 1, 9, 20, 21, 13, 22, 26}, {11, 20, 10, 3, 24, 26, 23, 15}, {20, 9, 2, 10, 26, 22, 14, 23}, {12, 21, 26, 24, 4, 16, 25, 19}, {21, 13, 22, 26, 16, 5, 17, 25}, {24, 26, 23, 15, 19, 25, 18, 7}, {26, 22, 14, 23, 25, 17, 6, 18}}}
static constexpr int vtkCellType = 25
static constexpr std::array<int, 20> vtkNodeOrder = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 16, 17, 18, 19, 12, 13, 14, 15}
template<>
struct ElementTraits<Hex8>

Public Static Functions

static inline constexpr ElemType GetFaceType(t_index)

Public Static Attributes

static constexpr std::array<t_real, 3 * 8> standardCoords = {-1, -1, -1, 1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, 1, 1, -1, 1, 1, 1, 1, -1, 1, 1}
static constexpr std::array<std::array<t_index, 10>, 6> faceNodes = {{{0, 3, 2, 1}, {0, 1, 5, 4}, {1, 2, 6, 5}, {2, 3, 7, 6}, {0, 4, 7, 3}, {4, 5, 6, 7}}}
static constexpr ElemType elevatedType = Hex27
static constexpr int numElevNodes = 19
static constexpr std::array<tElevSpan, 19> elevSpans = {{{0, 1}, {1, 2}, {2, 3}, {3, 0}, {0, 4}, {1, 5}, {2, 6}, {3, 7}, {4, 5}, {5, 6}, {6, 7}, {7, 4}, {0, 3, 2, 1}, {0, 1, 5, 4}, {1, 2, 6, 5}, {2, 3, 7, 6}, {0, 4, 7, 3}, {4, 5, 6, 7}, {0, 1, 2, 3, 4, 5, 6, 7}}}
static constexpr std::array<ElemType, 19> elevNodeSpanTypes = {Line2, Line2, Line2, Line2, Line2, Line2, Line2, Line2, Line2, Line2, Line2, Line2, Quad4, Quad4, Quad4, Quad4, Quad4, Quad4, Hex8}
static constexpr int vtkCellType = 12
static constexpr std::array<int, 8> vtkNodeOrder = {0, 1, 2, 3, 4, 5, 6, 7}
template<>
struct ElementTraits<Line2>

Public Static Functions

static inline constexpr ElemType GetFaceType(t_index)

Public Static Attributes

static constexpr ElemType elemType = Line2
static constexpr int dim = 1
static constexpr int order = 1
static constexpr int numVertices = 2
static constexpr int numNodes = 2
static constexpr int numFaces = 0
static constexpr ParamSpace paramSpace = LineSpace
static constexpr t_real paramSpaceVol = 2.0
static constexpr std::array<t_real, 3 * 2> standardCoords = {-1, 0, 0, 1, 0, 0}
static constexpr ElemType elevatedType = Line3
static constexpr int numElevNodes = 1
static constexpr std::array<tElevSpan, 1> elevSpans = {{{0, 1}}}
static constexpr std::array<ElemType, 1> elevNodeSpanTypes = {Line2}
static constexpr int vtkCellType = 3
static constexpr std::array<int, 2> vtkNodeOrder = {0, 1}
template<>
struct ElementTraits<Line3>

Public Static Functions

static inline constexpr ElemType GetFaceType(t_index)
static inline constexpr ElemType GetBisectElemType(t_index)

Public Static Attributes

static constexpr ElemType elemType = Line3
static constexpr int dim = 1
static constexpr int order = 2
static constexpr int numVertices = 2
static constexpr int numNodes = 3
static constexpr int numFaces = 0
static constexpr ParamSpace paramSpace = LineSpace
static constexpr t_real paramSpaceVol = 2.0
static constexpr std::array<t_real, 3 * 3> standardCoords = {-1, 0, 0, 1, 0, 0, 0, 0, 0}
static constexpr ElemType elevatedType = UnknownElem
static constexpr int numElevNodes = 0
static constexpr int numBisect = 2
static constexpr int numBisectVariants = 1
static constexpr std::array<tBisectSub, 2> bisectElements = {{{0, 2}, {2, 1}}}
static constexpr int vtkCellType = 4
static constexpr std::array<int, 3> vtkNodeOrder = {0, 2, 1}
template<>
struct ElementTraits<Prism18>

Public Static Functions

static inline constexpr ElemType GetFaceType(t_index iFace)
static inline constexpr ElemType GetBisectElemType(t_index)

Public Static Attributes

static constexpr std::array<t_real, 3 * 18> standardCoords = {0, 0, -1, 1, 0, -1, 0, 1, -1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0.5, 0, -1, 0.5, 0.5, -1, 0, 0.5, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0, 1, 0.5, 0.5, 1, 0, 0.5, 1, 0.5, 0, 0, 0.5, 0.5, 0, 0, 0.5, 0}
static constexpr std::array<std::array<t_index, 10>, 5> faceNodes = {{{0, 1, 4, 3, 6, 10, 12, 9, 15}, {1, 2, 5, 4, 7, 11, 13, 10, 16}, {2, 0, 3, 5, 8, 9, 14, 11, 17}, {0, 2, 1, 8, 7, 6}, {3, 4, 5, 9, 10, 11}}}
static constexpr ElemType elevatedType = UnknownElem
static constexpr int numElevNodes = 0
static constexpr int numBisect = 8
static constexpr int numBisectVariants = 1
static constexpr std::array<tBisectSub, 8> bisectElements = {{{0, 6, 8, 9, 15, 17}, {6, 1, 7, 15, 10, 16}, {8, 6, 7, 17, 15, 16}, {8, 7, 2, 17, 16, 11}, {9, 15, 17, 3, 12, 14}, {15, 10, 16, 12, 4, 13}, {17, 15, 16, 14, 12, 13}, {17, 16, 11, 14, 13, 5}}}
static constexpr int vtkCellType = 26
static constexpr std::array<int, 15> vtkNodeOrder = {0, 1, 2, 3, 4, 5, 6, 7, 8, 12, 13, 14, 9, 10, 11}
template<>
struct ElementTraits<Prism6>

Public Static Functions

static inline constexpr ElemType GetFaceType(t_index iFace)

Public Static Attributes

static constexpr std::array<t_real, 3 * 6> standardCoords = {0, 0, -1, 1, 0, -1, 0, 1, -1, 0, 0, 1, 1, 0, 1, 0, 1, 1}
static constexpr std::array<std::array<t_index, 10>, 5> faceNodes = {{{0, 1, 4, 3}, {1, 2, 5, 4}, {2, 0, 3, 5}, {0, 2, 1}, {3, 4, 5}}}
static constexpr ElemType elevatedType = Prism18
static constexpr int numElevNodes = 12
static constexpr std::array<tElevSpan, 12> elevSpans = {{{0, 1}, {1, 2}, {2, 0}, {0, 3}, {1, 4}, {2, 5}, {3, 4}, {4, 5}, {5, 3}, {0, 1, 4, 3}, {1, 2, 5, 4}, {2, 0, 3, 5}}}
static constexpr std::array<ElemType, 12> elevNodeSpanTypes = {Line2, Line2, Line2, Line2, Line2, Line2, Line2, Line2, Line2, Quad4, Quad4, Quad4}
static constexpr int vtkCellType = 13
static constexpr std::array<int, 6> vtkNodeOrder = {0, 1, 2, 3, 4, 5}
template<>
struct ElementTraits<Pyramid14>

Public Static Functions

static inline constexpr ElemType GetFaceType(t_index iFace)
static inline constexpr ElemType GetBisectElemType(t_index i)

Public Static Attributes

static constexpr std::array<t_real, 3 * 14> standardCoords = {-1, -1, 0, 1, -1, 0, 1, 1, 0, -1, 1, 0, 0, 0, 1, 0, -1, 0, 1, 0, 0, 0, 1, 0, -1, 0, 0, -0.5, -0.5, 0.5, 0.5, -0.5, 0.5, 0.5, 0.5, 0.5, -0.5, 0.5, 0.5, 0, 0, 0}
static constexpr std::array<std::array<t_index, 10>, 5> faceNodes = {{{0, 3, 2, 1, 8, 7, 6, 5, 13}, {0, 1, 4, 5, 10, 9}, {1, 2, 4, 6, 11, 10}, {2, 3, 4, 7, 12, 11}, {3, 0, 4, 8, 9, 12}}}
static constexpr ElemType elevatedType = UnknownElem
static constexpr int numElevNodes = 0
static constexpr int numBisect = 12
static constexpr int numBisectVariants = 2
static constexpr std::array<tBisectSub, 24> bisectElements = {{{0, 5, 13, 8, 9}, {5, 1, 6, 13, 10}, {8, 13, 7, 3, 12}, {13, 6, 2, 7, 11}, {12, 9, 8, 13}, {9, 10, 5, 13}, {10, 11, 6, 13}, {11, 12, 7, 13}, {9, 11, 12, 4}, {9, 10, 11, 4}, {9, 11, 10, 13}, {9, 12, 11, 13}, {0, 5, 13, 8, 9}, {5, 1, 6, 13, 10}, {8, 13, 7, 3, 12}, {13, 6, 2, 7, 11}, {12, 9, 8, 13}, {9, 10, 5, 13}, {10, 11, 6, 13}, {11, 12, 7, 13}, {10, 12, 9, 4}, {10, 11, 12, 4}, {10, 12, 11, 13}, {10, 9, 12, 13}}}
static constexpr int vtkCellType = 27
static constexpr std::array<int, 13> vtkNodeOrder = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}
template<>
struct ElementTraits<Pyramid5>

Public Static Functions

static inline constexpr ElemType GetFaceType(t_index iFace)

Public Static Attributes

static constexpr std::array<t_real, 3 * 5> standardCoords = {-1, -1, 0, 1, -1, 0, 1, 1, 0, -1, 1, 0, 0, 0, 1}
static constexpr std::array<std::array<t_index, 10>, 5> faceNodes = {{{0, 3, 2, 1}, {0, 1, 4}, {1, 2, 4}, {2, 3, 4}, {3, 0, 4}}}
static constexpr ElemType elevatedType = Pyramid14
static constexpr int numElevNodes = 9
static constexpr std::array<tElevSpan, 9> elevSpans = {{{0, 1}, {1, 2}, {2, 3}, {3, 0}, {0, 4}, {1, 4}, {2, 4}, {3, 4}, {0, 3, 2, 1}}}
static constexpr std::array<ElemType, 9> elevNodeSpanTypes = {Line2, Line2, Line2, Line2, Line2, Line2, Line2, Line2, Quad4}
static constexpr int vtkCellType = 14
static constexpr std::array<int, 5> vtkNodeOrder = {0, 1, 2, 3, 4}
template<>
struct ElementTraits<Quad4>

Public Static Functions

static inline constexpr ElemType GetFaceType(t_index)

Public Static Attributes

static constexpr std::array<t_real, 3 * 4> standardCoords = {-1, -1, 0, 1, -1, 0, 1, 1, 0, -1, 1, 0}
static constexpr std::array<std::array<t_index, 10>, 4> faceNodes = {{{0, 1}, {1, 2}, {2, 3}, {3, 0}}}
static constexpr ElemType elevatedType = Quad9
static constexpr int numElevNodes = 5
static constexpr std::array<tElevSpan, 5> elevSpans = {{{0, 1}, {1, 2}, {2, 3}, {3, 0}, {0, 1, 2, 3}}}
static constexpr std::array<ElemType, 5> elevNodeSpanTypes = {Line2, Line2, Line2, Line2, Quad4}
static constexpr int vtkCellType = 9
static constexpr std::array<int, 4> vtkNodeOrder = {0, 1, 2, 3}
template<>
struct ElementTraits<Quad9>

Public Static Functions

static inline constexpr ElemType GetFaceType(t_index)
static inline constexpr ElemType GetBisectElemType(t_index)

Public Static Attributes

static constexpr std::array<t_real, 3 * 9> standardCoords = {-1, -1, 0, 1, -1, 0, 1, 1, 0, -1, 1, 0, 0, -1, 0, 1, 0, 0, 0, 1, 0, -1, 0, 0, 0, 0, 0}
static constexpr std::array<std::array<t_index, 10>, 4> faceNodes = {{{0, 1, 4}, {1, 2, 5}, {2, 3, 6}, {3, 0, 7}}}
static constexpr ElemType elevatedType = UnknownElem
static constexpr int numElevNodes = 0
static constexpr int numBisect = 4
static constexpr int numBisectVariants = 1
static constexpr std::array<tBisectSub, 4> bisectElements = {{{0, 4, 8, 7}, {4, 1, 5, 8}, {7, 8, 6, 3}, {8, 5, 2, 6}}}
static constexpr int vtkCellType = 23
static constexpr std::array<int, 8> vtkNodeOrder = {0, 1, 2, 3, 4, 5, 6, 7}
template<>
struct ElementTraits<Tet10>

Public Static Functions

static inline constexpr ElemType GetFaceType(t_index)
static inline constexpr ElemType GetBisectElemType(t_index)

Public Static Attributes

static constexpr std::array<t_real, 3 * 10> standardCoords = {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0, 0, 0.5, 0.5, 0, 0, 0.5, 0, 0, 0, 0.5, 0.5, 0, 0.5, 0, 0.5, 0.5}
static constexpr std::array<std::array<t_index, 10>, 4> faceNodes = {{{0, 2, 1, 6, 5, 4}, {0, 1, 3, 4, 8, 7}, {1, 2, 3, 5, 9, 8}, {2, 0, 3, 6, 7, 9}}}
static constexpr ElemType elevatedType = UnknownElem
static constexpr int numElevNodes = 0
static constexpr int numBisect = 8
static constexpr int numBisectVariants = 3
static constexpr std::array<tBisectSub, 24> bisectElements = {{{0, 4, 6, 7}, {4, 1, 5, 8}, {6, 5, 2, 9}, {9, 7, 8, 3}, {4, 9, 6, 7}, {4, 8, 9, 7}, {4, 9, 8, 5}, {4, 6, 9, 5}, {0, 4, 6, 7}, {4, 1, 5, 8}, {6, 5, 2, 9}, {9, 7, 8, 3}, {5, 6, 7, 9}, {5, 7, 8, 9}, {5, 8, 7, 4}, {5, 7, 6, 4}, {0, 4, 6, 7}, {4, 1, 5, 8}, {6, 5, 2, 9}, {9, 7, 8, 3}, {6, 7, 8, 9}, {6, 8, 5, 9}, {6, 8, 7, 4}, {6, 5, 8, 4}}}
static constexpr int vtkCellType = 24
static constexpr std::array<int, 10> vtkNodeOrder = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
template<>
struct ElementTraits<Tet4>

Public Static Functions

static inline constexpr ElemType GetFaceType(t_index)

Public Static Attributes

static constexpr std::array<t_real, 3 * 4> standardCoords = {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1}
static constexpr std::array<std::array<t_index, 10>, 4> faceNodes = {{{0, 2, 1}, {0, 1, 3}, {1, 2, 3}, {2, 0, 3}}}
static constexpr ElemType elevatedType = Tet10
static constexpr int numElevNodes = 6
static constexpr std::array<tElevSpan, 6> elevSpans = {{{0, 1}, {1, 2}, {2, 0}, {0, 3}, {1, 3}, {2, 3}}}
static constexpr std::array<ElemType, 6> elevNodeSpanTypes = {Line2, Line2, Line2, Line2, Line2, Line2}
static constexpr int vtkCellType = 10
static constexpr std::array<int, 4> vtkNodeOrder = {0, 1, 2, 3}
template<>
struct ElementTraits<Tri3>

Public Static Functions

static inline constexpr ElemType GetFaceType(t_index)

Public Static Attributes

static constexpr std::array<t_real, 3 * 3> standardCoords = {0, 0, 0, 1, 0, 0, 0, 1, 0}
static constexpr std::array<std::array<t_index, 10>, 3> faceNodes = {{{0, 1}, {1, 2}, {2, 0}}}
static constexpr ElemType elevatedType = Tri6
static constexpr int numElevNodes = 3
static constexpr std::array<tElevSpan, 3> elevSpans = {{{0, 1}, {1, 2}, {2, 0}}}
static constexpr std::array<ElemType, 3> elevNodeSpanTypes = {Line2, Line2, Line2}
static constexpr int vtkCellType = 5
static constexpr std::array<int, 3> vtkNodeOrder = {0, 1, 2}
template<>
struct ElementTraits<Tri6>

Public Static Functions

static inline constexpr ElemType GetFaceType(t_index)
static inline constexpr ElemType GetBisectElemType(t_index)

Public Static Attributes

static constexpr std::array<t_real, 3 * 6> standardCoords = {0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0, 0, 0.5, 0.5, 0, 0, 0.5, 0}
static constexpr std::array<std::array<t_index, 10>, 3> faceNodes = {{{0, 1, 3}, {1, 2, 4}, {2, 0, 5}}}
static constexpr ElemType elevatedType = UnknownElem
static constexpr int numElevNodes = 0
static constexpr int numBisect = 4
static constexpr int numBisectVariants = 1
static constexpr std::array<tBisectSub, 4> bisectElements = {{{0, 3, 5}, {3, 1, 4}, {5, 3, 4}, {5, 4, 2}}}
static constexpr int vtkCellType = 22
static constexpr std::array<int, 6> vtkNodeOrder = {0, 1, 2, 3, 4, 5}
struct Quadrature

Public Functions

template<class TAcc, class TFunc> inline DNDS_DEVICE_CALLABLE void Integration (TAcc &buf, TFunc &&f)
template<class TAcc, class TFunc> inline DNDS_DEVICE_CALLABLE std::enable_if_t< std::is_invocable_v< TFunc, TAcc &, int > > IntegrationSimple (TAcc &buf, TFunc &&f)
template<class TAcc, class TFunc> inline DNDS_DEVICE_CALLABLE std::enable_if_t< std::is_invocable_v< TFunc, TAcc &, int, real > > IntegrationSimple (TAcc &buf, TFunc &&f)
template<ElemType>
struct ShapeFuncImpl
template<>
struct ShapeFuncImpl<Hex27>
template<>
struct ShapeFuncImpl<Hex8>
template<>
struct ShapeFuncImpl<Line2>
template<>
struct ShapeFuncImpl<Line3>
template<>
struct ShapeFuncImpl<Prism18>
template<>
struct ShapeFuncImpl<Prism6>
template<>
struct ShapeFuncImpl<Pyramid14>
template<>
struct ShapeFuncImpl<Pyramid5>
template<>
struct ShapeFuncImpl<Quad4>
template<>
struct ShapeFuncImpl<Quad9>
template<>
struct ShapeFuncImpl<Tet10>
template<>
struct ShapeFuncImpl<Tet4>
template<>
struct ShapeFuncImpl<Tri3>
template<>
struct ShapeFuncImpl<Tri6>
class SummationNoOp
namespace OpenFOAM

Functions

inline int passOpenFOAMSpaces(std::istream &in)
inline bool getUntil(std::istream &in, char v, std::string &buf)
inline void readOpenFOAMList(std::istream &in, const std::function<void(std::istream&)> &readOneItem)
inline void readOpenFOAMObj(std::istream &in, const std::function<void(const std::string&)> &readOneItemLine)
inline std::vector<std::string> readOpenFOAMHeader(std::istream &in)
inline std::tuple<Elem::ElemType, std::vector<index>> ExtractTopologicalElementFromPolyMeshCell(const std::vector<std::vector<index>> &facesIn, const std::vector<int> &ownIn)
struct OpenFOAMBoundaryCondition
struct OpenFOAMConverter
struct OpenFOAMReader
namespace RBF

Enums

enum RBFKernelType

Values:

enumerator UnknownRBFKernel
enumerator Distance
enumerator DistanceA1
enumerator InversedDistanceA1
enumerator InversedDistanceA1Compact
enumerator Gaussian
enumerator CPC2
enumerator CPC0

Functions

DNDS_DEFINE_ENUM_JSON (RBFKernelType, { {RBFKernelType::UnknownRBFKernel, nullptr}, {RBFKernelType::Distance, "Distance"}, {RBFKernelType::DistanceA1, "DistanceA1"}, {RBFKernelType::InversedDistanceA1, "InversedDistanceA1"}, {RBFKernelType::InversedDistanceA1Compact, "InversedDistanceA1Compact"}, {RBFKernelType::Gaussian, "Gaussian"}, {RBFKernelType::CPC2, "CPC2"}, {RBFKernelType::CPC0, "CPC0"}, }) inline bool KernelIsCompact(RBFKernelType t)
inline real GetMaxRij(const tSmallCoords &cent, const tSmallCoords &xs)
template<class TIn>
inline MatrixXR FRBFBasis(TIn RiXj, RBFKernelType kernel)
template<class Tcent, class Tx>
inline MatrixXR RBFCPC2(Tcent cent, Tx xs, real R, RBFKernelType kernel = Gaussian)
template<class TF>
inline MatrixXR RBFInterpolateSolveCoefs(const tSmallCoords &xs, const TF fs, real R, RBFKernelType kernel = Gaussian)
template<class TF>
inline MatrixXR RBFInterpolateSolveCoefsNoPoly(const tSmallCoords &xs, const TF fs, real R, RBFKernelType kernel = Gaussian)

Key Classes

Warning

doxygenclass: Cannot find class “DNDS::Geom::UnstructuredMesh” in doxygen xml output for project “DNDSR” from directory: /home/runner/work/DNDSR/DNDSR/build/docs/xml