案例分享——
光滑有限元软件——静态模块
光滑有限元法(S-FEM)是建立在有限元法(FEM)基础之上的一种“近似”无网格方法。静态问题模块线弹性静力学求解器基于线弹性静力学的基本理论,在T-mesh背景的网格基础之上,通过线性插值并引入梯度光滑技术,开发了求解二、三维固体位移、应变、应力等物理量的线弹性静力学求解器。
本案例通过可视化定制与插件拓展相结合的形式,实现了线弹性静力学求解器与FastCAE的无缝集成。通过可视化定制对参数以及边界条件等必要信息进行定制拓展,满足了求解器对输入参数的要求;通过插件模式拓展了对su2格式网格文件的读入支持。
架构体系
在开发过程中,使用定制插件对案例中参数以及边界条件进行动态拓展,网格文件解析交由程序插件实现数据管理以及模型的可视化由FastCAE统一实现。
在软件求解时。FastCAE将网格、参数等数据信息按照标准格式输出,核心求解器参照FastCAE数据标准进行数据读取并完成求解,求解结果通过标准文件交还FastCAE进行可视化渲染。
实现效果
定制插件模式以及案例插件的加载
前处理网格可视化以及组件的创建
定制模式下创建的算例树结构
后处理结果可视化
关键代码
1、注册代码
1void Register(GUI::MainWindow* m, QList<Plugins::PluginBase*>* ps)
2{
3 Plugins::PluginBase* p = new Plugins::SfemPlugin(m);
4 ps->append(p);
5}
2、插件安装代码
1bool SfemPlugin::install()
2{
3
4 IO::IOConfigure::RegisterMeshImporter("su2", importMeshFun);
5 return true;
6}
3、网格读取代码
1bool Su2Reader::read()
2{
3QFileInfo info(_fileName);
4if (!info.exists()) return false;
5QString name = info.fileName();
6QString path = info.filePath();
7QFile file(_fileName);
8if (!file.open(QIODevice::ReadOnly)) return false;
9_stream = new QTextStream(&file);
10_gird = vtkUnstructuredGrid::New();
11QString line;
12bool success = false;
13while (!_stream->atEnd())
14{
15line = this->readLine();
16if (line.contains("nelem="))
17{
18_cellNum =
19line.remove("nelem").remove("=").toInt();
20success = this->readElements();
21}
22else if (success && line.contains("npoin"))
23{
24_nodeNum =
25line.remove("npoin").remove("=").toInt();
26success = this->readNodes();
27}
28}
29if (!success)
30{
31_gird->Delete();
32_gird = nullptr;
33return false;
34}
35MeshKernal* k = new MeshKernal;
36k->setName(name);
37k->setPath(path);
38k->setMeshData(_gird);
39_meshData->appendMeshKernal(k);
40return success;
41}
END
更多FastCAE相关案例及产品信息,请关注FastCAE公众号
也可访问FastCAE官方网站:www.fastcae.com
更多信息,等你来探索