XIAN-FEM-2026June/3D opticsfem-master/material/Material_Base.h

85 lines
2.2 KiB
C++

#pragma once
#include<string>
#include<complex>
#include"../Eigen/Dense"
#include"../common/define.h"
using namespace std;
class Material
{
public:
Material();
~Material();
void SetName(string name);
void SetDomain(int nbrDomain,int domain[]);
void SetEpsr(complex<double> value);
void SetEpsr(complex<double> value1, complex<double> value2, complex<double> value3);
void SetMur(complex<double> value);
void SetMur(complex<double> value1, complex<double> value2, complex<double> value3);
void SetSimga(double value);
void SetSimga(double value1, double value2, double value3);
void SetChihe(complex<double> value1, complex<double> value2, complex<double> value3);
void SetChieh(complex<double> value1, complex<double> value2, complex<double> value3);
void SetNK(double n,double k);
string GetName();
bool IsContainDomain(int domainTag);
Eigen::Matrix3cd GetEpsr();
Eigen::Matrix3cd GetMur();
Eigen::Matrix3d GetSigma();
Eigen::Matrix3cd GetChihe();
Eigen::Matrix3cd GetChieh();
double GetN();
double GetK();
bool IsReal();
private:
string _mName = "null";//材料名
int _mNbrDomain = 0;//区域数目
int* _mDomain = NULL;//区域
Eigen::Matrix3cd _mEpsr;//相对介电常数
Eigen::Matrix3cd _mMur;//相对磁导率
Eigen::Matrix3d _mSigma;//电导率
Eigen::Matrix3cd _mChihe;//磁电耦合常数chi_he
Eigen::Matrix3cd _mChieh;//磁电耦合常数chi_eh
double _mN;//折射率实部
double _mK;//折射率虚部
};
class MaterialLib
{
public:
~MaterialLib();
void GetMat();
Eigen::Matrix3cd GetEpsr(int domain);
Eigen::Matrix3cd GetMur(int domain);
Eigen::Matrix3d GetSigma(int domain);
Eigen::Matrix3cd GetChihe(int domain);
Eigen::Matrix3cd GetChieh(int domain);
double GetN(int domain);
double GetK(int domain);
bool IsReal();
void Test_ReadData(string str);
private:
void SetNumberMat(int number);
void SetMat(int num, string name, int nbrDomain, int* domain, int matType, complex<double>* epsr,
complex<double>* mur, double* sigma, complex<double>* chihe, complex<double>* chieh);
void SetMat(int num, string name, int nbrDomain, int domain[], int matType, double n, double k);
int GetNumberMat(int domain);
int _mNbrMat = 0; //材料数目
Material* _mMat = NULL; //材料
};