Kratos-一個先進的基于現代C++的開源有限元框架
文章來源
公眾號 有限元術
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計算的流固耦合計算壓力云圖結尾:
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















