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计算的流固耦合计算压力云图结尾: