首页/文章/ 详情

开源有限元框架 FEniCS

5月前浏览3745

本文摘要(由AI生成):

FEniCS是一款开源的计算软件,安装过程繁琐,需在虚拟机中安装Ubuntu后再安装。其拥有上百个C++类库和丰富的Python接口,但过度抽象导致底层实现难以摸清,自定义修改困难。对于有限元分析新手不够友好,但资深用户视其为利器。一篇文献也指出FEniCS存在一些问题,需谨慎使用。如需更多信息,可访问其官网或查阅相关文档。

官网:https://fenicsproject.org/

和deal.ii一样,安装过程同样很麻烦,也需要装个虚拟机,安装Ubuntu、再安装 FEniCS,看来很多开源的计算软件还是偏重爱LINUX。

 FEniCS的c++类库索引页,有上百个,够多吧。

https://fenicsproject.org/olddocs/dolfin/latest/cpp/classes.html

 FEniCS的python接口索引页

https://fenicsproject.org/docs/dolfin/latest/python/api.html


它的抽象做得确实够好,但过度的抽象就丢失了具体,看看上面那么多的抽象类就知道了。我只能说想要摸清楚它底层的实现过程,或者想自定义地修改一些模块都太难了。通过对FEniCS的研究之后,你就会明白自己动手造轮子的重要性了。它的定位是比较尴尬的:如果想自己来编代码搞搞学术研究吧,只能做些应用层级的工作,很难深入底层;想要当工具做实际计算吧,那还不如用ANSYS,Abaqus这类商业软件呢。对于做有限元分析的新手来说它不怎么友好,但对于大牛而言他确实是利器,犹如一把瑞士军刀。

一篇文献《FEniCS is highly overrated》也是吐槽这个软件是夹生饭,可点击阅读原文查看。

https://ckadapa.wordpress.com/2017/11/01/fenics-is-highly-overrated-dont-use-it/

参考资料:






来源:数值分析与有限元编程
AbaquspythonANSYS
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-04-02
最近编辑:5月前
太白金星
本科 慢慢来
获赞 4粉丝 8文章 317课程 0
点赞
收藏
作者推荐

开源有限元框架 deal.ii

本文摘要(由AI生成):deal.II是一个基于C++的有限元库,广泛用于数值分析和偏微分方程求解。它包含多个组件,如Triangulation处理几何建模和网格划分,FiniteElement定义有限元空间,Quadrature用于数值积分,DoFHandler分配自由度,Mapping映射信息到实际网格,FEValues计算形函数值,Linear Systems组装刚度矩阵和等效节点力,Linear Solver求解线性系统,以及Output支持多种输出格式。虽然安装复杂,但社区支持强大,提供丰富资源帮助用户。源代码托管在GitHub,方便用户获取、报告问题和贡献代码。官网:https://www.dealii.org/deal.ii安装过程很麻烦,需要装个虚拟机。deal.ii基于c++语言开发,目前活跃度较高。整体框架如图所示1)TriangulationTriangulation类相当于前处理的几何建模和网格划分。Triangulation存储了网格的几何和拓扑性质,如单元接触形式和顶点位置。一个triangulation对象不知道我们要在这个网格上使用的有限元的任何信息,它甚至都不知道它的单元的形状,它只知道2维时有4个面和4个顶点,三维时有6个面、12条边和8个顶点,其他信息都在映射类中定义。2)FiniteElementFiniteElement类用来描述定义在参考单元上的有限元空间(有限维的函数空间)的性质,比如单元的顶点、边界和内部有多少自由度,此外还给出了节点上形函数的值和梯度。3)QuadratureQuadrature类与FinteElement类一起,在参考单元上定义,它们仅用来描述参考单元上积分点的位置和每个积分点的权重。4)DoFHandlerDoFHandler类是triangulation和finite elements的汇聚点:finite elements描述了每个节点、边和单元内部需要多少自由度,DoFHandler类按照finite elements对自由度的要求在triangulation的节点、边和单元内部分配自由度,并获得每个自由度的全局标识。如同triangulation对象,DoFHandler类的大部分操作也是通过对单元进行循环来完成的,我们可以得到的信息包括:单元的几何和拓扑信息(该信息在之前通过triangulation的迭代器获得),当前单元的自由度的全局标识,从一个存储triangulation全部自由度相关联的值的数据向量中提取当前单元的自由度相关联的值。DoFHandler类也不知道从参考单元到实际单元的映射的任何信息,它也不知道它管理的自由度的形函数的信息,它只知道每个节点、每条边、每个单元内部有多少自由度5)Mapping当我们需要计算矩阵和右端项的元素或每一个triangulation单元上的某个值时,我们需要知道实际单元上的有限元形函数和积分公式的积分点位置(finite elements对象提供形函数值和梯度等信息,quadrature对象提供积分公式、积分点位置和积分点权重,但是这些信息都是定义在参考单元上的;通过mapping类,将参考单元上的这些信息映射到实际的triangulation单元上),通过Mapping类及其派生类将参考单元的诸多信息映射到实际单元。6)FEValuesFEValues类计算单元上积分点处的形函数的值和梯度、散度等其他信息。当我们计算在一个单元上的积分时,我们实际上是用近似的求积公式来代替积分,因此我们只需要知道单元区域的有限个点的位置的形函数值、梯度即可。FEValues就提供这些信息:给定有限元、积分信息和映射,FEValues类计算"the restriction of a continuous function space"。7)Linear Systems类似于组装刚度矩阵以及等效节点力向量。8)Linear Solver使用求解器来求解有限维的线性系统。FEM中,通常是用迭代法来求解矩阵方程。当然deal.II也提供了矩阵方程直接求解器或稀疏矩阵直接求解器。9)Output输出结果及后处理。deal.II没有直接将结果进行后处理的功能,但是它提供了多种计算结果输出格式,可以用多种可视化软件进行可视化处理。来源:数值分析与有限元编程

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈