#pragma once #include "../Eigen/Dense" #include #include #include struct PortNumericMode { int type = 0; // 1 = input, 2 = output std::complex gamma = 0.0; double powerCoef = 1.0; Eigen::Vector3d normal = Eigen::Vector3d::Zero(); Eigen::MatrixXi facesConn; // nf x 2 (1-based tet index, 1-based local face) Eigen::MatrixXi portNewFaces; // nf x 3 (0-based port node indices) Eigen::MatrixXi portEdgeOfFace; // nf x 3 (0-based port edge DOF index) Eigen::MatrixXd portNodes; Eigen::VectorXcd Ez; Eigen::VectorXcd Et; }; class PortModeLibrary { public: bool LoadFromFile(const std::string& path); void Clear(); void AddMode(const PortNumericMode& m); bool HasModes() const { return !_mModes.empty(); } int GetNbrModes() const { return static_cast(_mModes.size()); } const PortNumericMode& GetMode(int i) const { return _mModes[static_cast(i)]; } private: std::vector _mModes; };