XIAN-FEM-2026June/opticsfem-master/Interface/FEM_Interface.cpp

142 lines
2.6 KiB
C++

#include"../phy/Phy_Base.h"
#include"../material/Material_Base.h"
#include"../mesh/Mesh_Base.h"
#include"../kernel/Assemble_Base.h"
#include"../solver/Solver_Base.h"
#include "../nlohmann/json.hpp"
#include "FEM_Interface.h"
#include <string>
#include <fstream>
#include <iostream>
#include <iomanip>
using namespace std;
using json = nlohmann::json;
int OpticsFEM_API::OpticsFEM_All(OpticsFEMData data)
{
//读取
string str = data.data;
json js = nlohmann::json::parse(str);
int FemType = js.at("FemType");
//定义变量
Phy_WaveOpticsModel phy;
MaterialLib matLab;
Mesh_2D mesh;
//初始参数读取
phy.Test_ReadData(str);
matLab.Test_ReadData(str);
string meshFile = js.at("MeshFile");
mesh.GetMesh(meshFile,str);
if (FemType == 0)
{
OpticsFEM_2D_EigenMode fem;
Solver_EigenMode solver;
Post_2D_EigenMode post;
solver.GetSolver(str);
fem.GetMaterial(&matLab);
fem.GetMesh(&mesh);
fem.GetPhy(&phy);
fem.GetSolver(&solver);
fem.GetPost(&post);
fem.Assemble();
fem.Run();
string outFile = js.at("OutFile");
fem.Post(outFile);
//fem.Test_OutputMatrix();
return 1;
}
else if (FemType == 1)
{
OpticsFEM_2D_EigenFreq fem;
Solver_EigenFreq solver;
Post_2D_EigenFreq post;
solver.GetSolver(str);
fem.GetMaterial(&matLab);
fem.GetMesh(&mesh);
fem.GetPhy(&phy);
fem.GetSolver(&solver);
fem.GetPost(&post);
fem.Assemble();
fem.Run();
string outFile = js.at("OutFile");
fem.Post(outFile);
return 2;
}
else if (FemType == 2)
{
OpticsFEM_2D_Scatter fem;
Solver_LdaDom solver;
Post_2D_Scatter post;
solver.GetSolver(str);
fem.GetMaterial(&matLab);
fem.GetMesh(&mesh);
fem.GetPhy(&phy);
fem.GetSolver(&solver);
fem.GetPost(&post);
fem.Assemble();
fem.Run();
fem.Test_OutputMatrix();
string outFile = js.at("OutFile");
fem.Post(outFile);
//fem.Test_OutputMatrix();
return 3;
}
else if (FemType == 3)
{
OpticsFEM_2D_Scatter fem;
Solver_LdaDom solver;
Post_2D_Scatter post;
solver.GetSolver2(str);
fem.GetMaterial(&matLab);
fem.GetMesh(&mesh);
fem.GetPhy(&phy);
fem.GetSolver(&solver);
fem.GetPost(&post);
fem.Assemble();
fem.Run();
string outFile = js.at("OutFile");
fem.Post(outFile);
return 3;
}
else
{
std::cout << "err" << std::endl;
return 0;
}
}
int OpticsFEM_API::OpticsFEM_Test(OpticsFEMData data)
{
//读取
string str = data.data;
json js = nlohmann::json::parse(str);
string outFile = js.at("OutFile");
outFile = outFile + "test";
std::ofstream out;
out.open(outFile, std::ios::out | std::ios::trunc);
out << "test success" << endl;
out.close();
return 1;
}