#pragma once #include"../Eigen/Dense" #include #include class Phy_WaveOpticsModel { public: Phy_WaveOpticsModel(); void GetPhy(); int GetNbrPEC(); int GetPECDomain(int num); int GetNbrPBC(); int GetSrcDomain(int num); int GetDstDomain(int num); std::complex GetPBCPhi(int num); int GetNbrPML(); int GetPMLEdge(int num); void GetPMLDomain(Eigen::VectorXi& PMLDomain); bool GetPML(int domain, int& PMLType, Eigen::VectorXd& PMLData); bool GetPML(int domain, int& PMLType, Eigen::VectorXd& PMLData, double& lambda); int GetNbrSBC(); int GetSBCDomain(int num); int GetSBCType(int num); void GetSBDir(int num, Eigen::Vector3d& dir); void GetEinc(int num, std::string& Eincx, std::string& Eincy, std::string& Eincz); int GetNbrBELE(); void GetBELE(Eigen::VectorXi& BELE); int GetBELEDomain(int num); void GetEb(std::string& Ebx, std::string& Eby, std::string& Ebz); void GetCurlEb(std::string& curlEbx, std::string& curlEby, std::string& curlEbz); int GetNbrElE(); int GetELEDomain(int num); void GetE0(std::string& E0x, std::string& E0y, std::string& E0z,int num); int GetNbrMAG(); int GetMAGDomain(int num); void GetH0(std::string& H0x, std::string& H0y, std::string& H0z,int num); int GetNbrSCD(); int GetSCDDomain(int num); void GetJ0(std::string& J0x, std::string& J0y, std::string& J0z,int num); int GetNbrMPD(); void GetMPD(Eigen::VectorXi& MPD); void GetMPDData(Eigen::MatrixXd& m); int GetNbrEPD(); void GetEPD(Eigen::VectorXi& EPD); void GetEPDData(Eigen::MatrixXd& p); int GetNbrPortinc(); int GetNbrPortout(); int GetPortincDomain(int num); int GetPortoutDomain(int num); void GetPortEinc(std::string& Eincx, std::string& Eincy, std::string& Eincz); void GetPortEout(std::string& Eoutx, std::string& Eouty, std::string& Eoutz); void GetPortEincCurl(std::string& EincCurlx, std::string& EincCurly, std::string& EincCurlz); void GetPortEoutCurl(std::string& EoutCurlx, std::string& EoutCurly, std::string& EoutCurlz); int GetBeamState(); void GetBeamDir(double& kx,double& ky); void Test_ReadData(std::string str); private: Eigen::VectorXi _mPMC;//n*1 完美磁导体 Eigen::VectorXi _mPEC;//n*1 完美电导体 Eigen::MatrixXi _mPBC;//n*2 周期边界条件 Eigen::VectorXcd _mPBCData;//n*1 Eigen::VectorXi _mPML;//n*1 完美匹配层 Eigen::VectorXi _mPMLType; Eigen::VectorXi _mPMLEdge; double _mPMLLda;//典型波长 Eigen::MatrixXd _mPMLData;//n*6 x0 1/dx y0 1/dy z0 1/dz 无d则1/d=0 Eigen::MatrixXi _mSBC;//n*2 散射边界条件 0为无入射 1为有入射 Eigen::MatrixXd _mSBCDir; //n*3 std::string* _mEincx, * _mEincy, * _mEincz; Eigen::VectorXi _mELE;//n*1 强加电场 std::string* _mE0x, *_mE0y, *_mE0z; Eigen::VectorXi _mMAG;//n*1 强加磁场 std::string* _mH0x, *_mH0y, *_mH0z; Eigen::VectorXi _mSCD;//n*1 表面电流密度 std::string* _mJ0x, *_mJ0y, *_mJ0z; Eigen::VectorXi _mMPD; //n*3 磁偶极子 Eigen::MatrixXd _mMPDData; //n*3 Eigen::VectorXi _mEPD; //n*3 电偶极子 Eigen::MatrixXd _mEPDData; //n*3 Eigen::VectorXi _mBELE; //n*1 背景场 std::string _mEbx, _mEby, _mEbz; std::string _mcurlEbx, _mcurlEby, _mcurlEbz; Eigen::VectorXi _mPortinc;//n*1 端口边界条件 Eigen::VectorXi _mPortout;//n*1 端口边界条件 std::string* _mPortEinc, * _mPortEout, * _mPortEincCurl, * _mPortEoutCurl; //入射场及出射场定义 int _mBeam = 0;//0为不启用波束 1为启用波束 double _mkx = 0.;//波束方向kx double _mky = 0;//波束方向ky };