XIAN-FEM-2026June/3D opticsfem-master/kernel/Nedelec3D_Util.h

51 lines
1.1 KiB
C++

#pragma once
#include "../mesh/Mesh_Base.h"
#include "../common/define.h"
namespace Nedelec3D
{
inline int bfOrderParam(int elementOrder)
{
return (elementOrder == 2) ? BF_QUADFUNC : BF_LINEFUNC;
}
inline int gaussOrderVol(int elementOrder)
{
return (elementOrder == 2) ? 4 : (BF_LINEFUNC * 2);
}
inline int gaussOrderTri(int elementOrder)
{
return (elementOrder == 2) ? 6 : (BF_LINEFUNC * 2);
}
inline int localDofPerTet(int elementOrder)
{
return (elementOrder == 2) ? 20 : 6;
}
inline int globalDofCount(Mesh_3D* mesh, int elementOrder)
{
if (elementOrder == 2)
return 2 * mesh->GetNbrEdge() + 2 * mesh->GetNbrFace();
return mesh->GetNbrEdge();
}
void buildTetDofMap(Mesh_3D* mesh, int numTet, int elementOrder, int* map, int mapSize);
void sbcFaceSecondOrderBfIndex(int numFace, int bfIndex[8]);
void buildSbcSecondOrderDofMap(Mesh_3D* mesh, int numTet, int numFace, int mapIdx[8]);
inline int edgeGlobalDof(int edgeId, int slot, int nbrEdge)
{
return edgeId + slot * nbrEdge;
}
inline int faceGlobalDof(int faceId, int slot, int nbrEdge, int nbrFace)
{
return 2 * nbrEdge + faceId + slot * nbrFace;
}
}