164 lines
3.0 KiB
C++
164 lines
3.0 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 if (FemType == 4)
|
|
{
|
|
Mesh_3D mesh3d;
|
|
OpticsFEM_3D_Scatter fem;
|
|
Solver_LdaDom solver;
|
|
Post_3D_Scatter post;
|
|
|
|
solver.GetSolver(str);
|
|
mesh3d.GetMesh(meshFile, str);
|
|
|
|
fem.GetMaterial(&matLab);
|
|
fem.GetMesh(&mesh3d);
|
|
fem.GetPhy(&phy);
|
|
fem.GetSolver(&solver);
|
|
fem.GetPost(&post);
|
|
|
|
fem.Assemble();
|
|
fem.Run();
|
|
string outFile = js.at("OutFile");
|
|
fem.Post(outFile);
|
|
return 4;
|
|
}
|
|
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;
|
|
}
|