Kratos-一個先進的基于現代C++的開源有限元框架

文章來源  

公眾號  有限元術

二維碼1.png

Kratos是一個基于現代C++的多物理場開源有限元框架,其可以完成固體,流體,熱,DEM等各個方面的單場計算和耦合計算。在線性方程組求解方面,其支持常見的多種直接法和迭代法求解;在并行方面,其支持MPI和Openmp的進程和線程并行,是一個先進的多物理場開源有限元框架。

Kratos的開發團隊是CIMNE。眾所周知,這是一個位于巴塞羅那的國際知名數值模擬科研組織,在知名的O. C. Zienkiewicz, R. L. Taylor的經典著作《The finite element method》中就特別感謝了這一組織提供的GID這一前后處理工具。

Kratos-一個先進的基于現代C++的開源有限元框架的圖2

Kratos-一個先進的基于現代C++的開源有限元框架的圖3

實際上,該機構開發的GID是一個非常好用的前后處理工具,其提供了基本的幾何建模,網格劃分,后處理等功能,界面美觀,云圖精美。國內元計算公司的先進國產有限元軟件PFEPG在很長一段時間就采用了該軟件作為前后處理。

Kratos-一個先進的基于現代C++的開源有限元框架的圖4

Kratos-一個先進的基于現代C++的開源有限元框架的圖5

GID另一特色時其具備良好的定制功能,其不僅原生支持多種商業和開源有限元軟件的前后處理,而且可以通過修改problemtype下的.cnd,.mat和.tcl等文件輕松實現自己對GID界面的定制。

以GID中的abaqus類型的problemtype為例:

Kratos-一個先進的基于現代C++的開源有限元框架的圖6

打開GID目錄下的problemtypes下的abaqus.gid文件夾下的abaqus.mat,其內容如下:

Kratos-一個先進的基于現代C++的開源有限元框架的圖7

GID中對應的界面:

Kratos-一個先進的基于現代C++的開源有限元框架的圖8

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

Kratos-一個先進的基于現代C++的開源有限元框架的圖9

對應界面就變為:

Kratos-一個先進的基于現代C++的開源有限元框架的圖10

因此在GID中,實現界面定制是很輕松的。在實現了界面定制以后,再通過.bas文件,實際上就實現了對應的導出inp的修改。因此實際上GID是一個方便有限元程序開發者的前后處理利器。

繼續講Kratos,在GID中,實際上也集成了對Kratos的前后處理:

Kratos-一個先進的基于現代C++的開源有限元框架的圖11

在加載Kratos的problemtype后,通過樹形菜單,既可以完成Kratos模型的前處理:

Kratos-一個先進的基于現代C++的開源有限元框架的圖12

當然,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++的開源有限元框架的圖13

以上,是對開源有限元框架Kratos的一點簡單介紹,對于這個框架筆者本身了解也不多,總體上,無論是從整體軟件架構上還是從其具體采用的C++技術上看,這都是一個值得深入了解的工具。最后,以一個Kratos計算的流固耦合計算壓力云圖結尾:

Kratos-一個先進的基于現代C++的開源有限元框架的圖14

登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

6
5
7