XIAN-FEM-2026June/3D opticsfem-master/mesh/Mesh_Base.h

132 lines
3.8 KiB
C++

#pragma once
#include"../Eigen/Dense"
#include<string>
class Mesh_2D
{
public:
void GetMesh(std::string str,std::string jstr);
int GetNbrVertex();
void GetVertex(int num, Eigen::Vector3d& vertex);
int GetNbrEdge();
int GetEdge(int numEdge,int numVertex);
int GetNbrTri();
int GetTri(int numTri,int numVertex);
int GetEdgeOfTri(int numTri,int numEdge);
int GetDomainOfTri(int numTri);
int GetNbrEdges();
void GetCoonOfEdges(int numEdges, Eigen::Vector2i& coonOfEdges);
int GetDomainOfEdges(int numEdges);
void GetNormOfEdges(int numEdgs, Eigen::Vector3d& normOfEdges);
void GetIndexOfDomain(Eigen::VectorXi domain, Eigen::VectorXi& nodeIndex, Eigen::VectorXi& edgeIndex);
void GetIndexOfDomain2(Eigen::VectorXi domain, Eigen::VectorXi& edgeIndex, Eigen::VectorXi& edgeNum);
void GetIndexOfPBC(Eigen::MatrixXi PBC, Eigen::VectorXcd PBCData,
Eigen::VectorXi& srcNodeIndex, Eigen::VectorXi& dstNodeIndex, Eigen::VectorXcd& nodePhi,
Eigen::VectorXi& srcEdgeIndex, Eigen::VectorXi& dstEdgeIndex, Eigen::VectorXcd& edgePhi);
void GetEdgesIndexOfDomain(int domain, Eigen::VectorXi& edgesIndex);
void Test_ReadData(std::string str);
private:
int _mNbrVertex = 0;
Eigen::MatrixXd _mVertex;//n*3
int _mNbrEdge = 0;
Eigen::MatrixXi _mEdge;//n*2
int _mNbrTri = 0;
Eigen::MatrixXi _mTri;//n*3
Eigen::MatrixXi _mEdgeOfTri;//n*3
Eigen::VectorXi _mDomainOfTri;//n*1
int _mNbrEdges = 0;
Eigen::MatrixXi _mCoonOfEdges;//n*2
Eigen::VectorXi _mDomainOfEdges;//n*1
Eigen::MatrixXd _mNormOfEdges;//n*3
int _mNbrCopyOfEdges = 0;
Eigen::MatrixXi _mCopyOfEdges;//n*2
int _mNbrCopyOfVertexs = 0;
Eigen::MatrixXi _mCopyOfVertex;//n*2
Eigen::MatrixXi _mInitTri;//n*3
Eigen::VectorXi _mMappingOfVertex; //n*1
Eigen::MatrixXi _mConnOfTri;//n*2
};
class Mesh_3D
{
public:
void GetMesh(std::string str, std::string jstr);
int GetNbrVertex();
void GetVertex(int num, Eigen::Vector3d& vertex);
int GetNbrEdge();
int GetEdge(int numEdge, int numVertex);
int GetNbrTet();
int GetTet(int numTet, int numVertex);
int GetEdgeOfTet(int numTet, int numEdge);
int GetDomainOfTet(int numTet);
int GetNbrPrism();
int GetPrism(int numPrism, int numVertex);
int GetEdgeOfPrism(int numPrism, int numEdge);
int GetDomainOfPrism(int numPrism);
int GetNbrTri();
int GetTri(int numTri, int numVertex);
int GetDomainOfTri(int numTri);
void GetCoonOfTri(int numTri, Eigen::Vector3i& connOfTri);
int GetNbrQuad();
int GetQuad(int numQuad, int numVertex);
int GetDomainOfQuad(int numQuad);
void GetCoonOfQuad(int numQuad, Eigen::Vector2i& coonOfQuad);
void GetTriIndexOfDomain(Eigen::VectorXi domain, Eigen::VectorXi& edgeIndex);
void GetTriIndexOfDomain2(Eigen::VectorXi domain, Eigen::VectorXi indexNum,
Eigen::VectorXi& triIndex, Eigen::VectorXi& triNum);
void GetIndexOfPBC(Eigen::MatrixXi PBC, Eigen::VectorXcd PBCData,
Eigen::VectorXi& srcEdgeIndex, Eigen::VectorXi& dstEdgeIndex, Eigen::VectorXcd& edgePhi);
void GetNormOfFace(int domain, Eigen::Vector3d& norm);
void GetTriIndicesOfDomain(int domain, Eigen::VectorXi& triIndices);
private:
int _mNbrVertex = 0;
Eigen::MatrixXd _mVertex;//n*3
int _mNbrEdge = 0;
Eigen::MatrixXi _mEdge;//n*2
int _mNbrTet = 0;
Eigen::MatrixXi _mTet;//n*4
Eigen::MatrixXi _mEdgeOfTet;//n*4
Eigen::VectorXi _mDomainOfTet;//n*1
int _mNbrPrim = 0;
Eigen::MatrixXi _mPrism;//n*6
Eigen::MatrixXi _mEdgeOfPrism;//n*9
Eigen::VectorXi _mDomainOfPrism;//n*1
int _mNbrTri = 0;
Eigen::MatrixXi _mTri;//n*3
Eigen::VectorXi _mDomainOfTri;//n*1
Eigen::MatrixXi _mConnOfTri;//n*3 MeshType numMesh numFace
int _mNbrQuad = 0;
Eigen::MatrixXi _mQuad;//n*4
Eigen::VectorXi _mDomainOfQuad;//n*1
Eigen::MatrixXi _mConnOfQuad;//n*2 numMesh numFace
Eigen::MatrixXi _mCopyOfTri;//n*2
Eigen::MatrixXi _mCopyOfQuad;//n*2
Eigen::MatrixXd _mNormOfFace;// maxDomain+1 * 3, indexed by domain id
};