首页/文章/ 详情

Kratos-一个先进的基于现代C++的开源有限元框架

1年前浏览4173

Kratos是一个基于现代C++的多物理场开源有限元框架,其可以完成固体,流体,热,DEM等各个方面的单场计算和耦合计算。在线性方程组求解方面,其支持常见的多种直接法和迭代法求解;在并行方面,其支持MPI和Openmp的进程和线程并行,是一个先进的多物理场开源有限元框架。

Kratos的开发团队是CIMNE。众所周知,这是一个位于巴塞罗那的国际知名数值模拟科研组织,在知名的O. C. Zienkiewicz, R. L. Taylor的经典著作《The finite element method》中就特别感谢了这一组织提供的GID这一前后处理工具。

实际上,该机构开发的GID是一个非常好用的前后处理工具,其提供了基本的几何建模,网格划分,后处理等功能,界面美观,云图精美。国内元计算公司的先进国产有限元软件PFEPG在很长一段时间就采用了该软件作为前后处理。

GID另一特色时其具备良好的定制功能,其不仅原生支持多种商业和开源有限元软件的前后处理,而且可以通过修改problemtype下的.cnd,.mat和.tcl等文件轻松实现自己对GID界面的定制。

以GID中的abaqus类型的problemtype为例:

打开GID目录下的problemtypes下的abaqus.gid文件夹下的abaqus.mat,其内容如下:

GID中对应的界面:

如果需要修改界面,只需要将abaqus.mat的内容稍加修改:

对应界面就变为:

因此在GID中,实现界面定制是很轻松的。在实现了界面定制以后,再通过.bas文件,实际上就实现了对应的导出inp的修改。因此实际上GID是一个方便有限元程序开发者的前后处理利器。

继续讲Kratos,在GID中,实际上也集成了对Kratos的前后处理:

在加载Kratos的problemtype后,通过树形菜单,既可以完成Kratos模型的前处理:

当然,Kratos作为一个开源有限元框架,也可以通过编译源代码获得其运行文件。其GITHUB的链接如下:

https://github.com/KratosMultiphysics/Kratos

同时,Kratos更先进的是其广泛采用的现代C++模板技术,使得代码足够抽象化和良好的扩展性。

    template<class TSparseSpace, class TDenseSpace, class TLinearSolver>class ImplicitSolvingStrategy : public SolvingStrategy<TSparseSpace, TDenseSpace>{public:///@name Type Definitions///@{typedef SolvingStrategy<TSparseSpace, TDenseSpace>                              BaseType;typedef typename BaseType::TDataType                                           TDataType;typedef typename BaseType::TSystemMatrixType                           TSystemMatrixType;typedef typename BaseType::TSystemVectorType                           TSystemVectorType;typedef typename BaseType::TSystemMatrixPointerType             TSystemMatrixPointerType;typedef typename BaseType::TSystemVectorPointerType             TSystemVectorPointerType;typedef typename BaseType::LocalSystemMatrixType                   LocalSystemMatrixType;typedef typename BaseType::LocalSystemVectorType                   LocalSystemVectorType;typedef Scheme<TSparseSpace, TDenseSpace>                                    TSchemeType;typedef BuilderAndSolver<TSparseSpace, TDenseSpace, TLinearSolver> TBuilderAndSolverType;typedef ImplicitSolvingStrategy<TSparseSpace, TDenseSpace, TLinearSolver>      ClassType;typedef typename BaseType::TDofType                                             TDofType;typedef typename BaseType::DofsArrayType                                   DofsArrayType;typedef typename BaseType::NodesArrayType                                 NodesArrayType;typedef typename BaseType::ElementsArrayType                           ElementsArrayType;typedef typename BaseType::ConditionsArrayType                       ConditionsArrayType;/** Counted pointer of ClassName */KRATOS_CLASS_POINTER_DEFINITION(ImplicitSolvingStrategy);

    另一个更广为人知地使用现代C++技术的开源有限元框架是Deal.II。但是实际上,由于在Deal.II中其采用的triangulation结构的网格,不采用偏工程的节点单元信息,因此实际上可能并不太适合作为基于实际工程计算的工具,而更像是一个偏学术的数学研究工具。而Kratos采用的是和abaqus,ansys这些通用有限元软件一样的节点和单元信息,对Kratos的扩展,则可能使得Kratos成为工程CAE软件开发的利器。

    并且,开发团队还编写了一本关于Kratos的著作,对Kratos中采用的具体C++技术和架构技术进行了较为详细的描述:

    以上,是对开源有限元框架Kratos的一点简单介绍,对于这个框架笔者本身了解也不多,总体上,无论是从整体软件架构上还是从其具体采用的C++技术上看,这都是一个值得深入了解的工具。最后,以一个Kratos计算的流固耦合计算压力云图结尾:

    来源:有限元术
    System通用GID
    著作权归作者所有,欢迎分享,未经许可,不得转载
    首次发布时间:2023-04-11
    最近编辑:1年前
    寒江雪_123
    硕士 | cae工程师 签名征集中
    获赞 48粉丝 96文章 40课程 9
    点赞
    收藏
    未登录
    还没有评论

    课程
    培训
    服务
    行家

    VIP会员 学习 福利任务 兑换礼品
    下载APP
    联系我们
    帮助与反馈