#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 #include #include #include 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; }