XIAN-FEM-2026June/opticsfem-master/post/Post_GetEb.cpp

72 lines
1.5 KiB
C++

#include"Post_Base.h"
#include"../function/BF.h"
#include <fstream>
#include <iostream>
#include <iomanip>
#include <string>
#include "../parser/mpParser.h"
#include"../Eigen/Sparse"
#include"../Eigen/Dense"
using namespace Eigen;
void Post_2D_Scatter::GetEb()
{
int nbrVertex = _mMesh->GetNbrVertex();
int nbrEdge = _mMesh->GetNbrEdge();
_mEbx = Eigen::VectorXcd::Zero(nbrVertex);
_mEby = Eigen::VectorXcd::Zero(nbrVertex);
_mEbz = Eigen::VectorXcd::Zero(nbrVertex);
string Ebx, Eby, Ebz;
_mPhy->GetEb(Ebx, Eby, Ebz);
//inite parser
mup::ParserX p(mup::pckALL_COMPLEX);
p.EnableAutoCreateVar(true);
mup::Value xx, yy;
p.DefineVar(_T("x"), mup::Variable(&xx));
p.DefineVar(_T("y"), mup::Variable(&yy));
Eigen::Vector3d vertex;
for (int i = 0; i < nbrVertex; i++)
{
_mMesh->GetVertex(i, vertex);
xx = vertex[0];
yy = vertex[1];
p.SetExpr(_T(Ebx));
_mEbx[i].real(p.Eval().GetFloat());
_mEbx[i].imag(p.Eval().GetImag());
p.SetExpr(_T(Eby));
_mEby[i].real(p.Eval().GetFloat());
_mEby[i].imag(p.Eval().GetImag());
p.SetExpr(_T(Ebz));
_mEbz[i].real(p.Eval().GetFloat());
_mEbz[i].imag(p.Eval().GetImag());
}
//loop over tri
int NbrTri = _mMesh->GetNbrTri();
for (int i = 0; i < NbrTri; i++)
{
int domain = _mMesh->GetDomainOfTri(i);
Eigen::VectorXi PMLDomain;
_mPhy->GetPMLDomain(PMLDomain);
if (std::find(PMLDomain.begin(), PMLDomain.end(), domain) != PMLDomain.end())
{
int tri;
for (int j = 0; j < 3; j++)
{
tri = _mMesh->GetTri(i, j);
_mEbx(tri) = 0;
_mEby(tri) = 0;
_mEbz(tri) = 0;
}
}
}
}