#pragma once #include #include #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 value); void SetEpsr(complex value1, complex value2, complex value3); void SetMur(complex value); void SetMur(complex value1, complex value2, complex value3); void SetSimga(double value); void SetSimga(double value1, double value2, double value3); void SetChihe(complex value1, complex value2, complex value3); void SetChieh(complex value1, complex value2, complex 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* epsr, complex* mur, double* sigma, complex* chihe, complex* 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; //材料 };