记得下载最新的周编译版!用官方的FC来试验。加速下载方法见freecad-010

观看我的视频演示【FreeCAD全参数有限元计算】

1 教程参考

官方入门教程
https://blog.freecad.org/2025/09/16/getting-started-with-fem/
官方有限元例子
https://wiki.freecad.org/FEM_Workbench
有限元网格——很多内容,强烈建议读一遍
https://wiki.freecad.org/FEM_Geometry_Preparation_and_Meshing
CalculiX(ccx)手册
https://www.dhondt.de/ccx_2.23.pdf
CalculiX(ccx)手册——网页版,可浏览器翻译
https://www.feacluster.com/CalculiX/ccx_2.18/doc/ccx/index.html
CalculiX(ccx)命令——网页版,可浏览器翻译
https://www.feacluster.com/CalculiX/cgx_2.18/doc/cgx/cgx.html
有限元软件Elmer
https://wiki.freecad.org/FEM_SolverElmer

fcVM用于对结构和土体进行坍塌分析——钢材工作台
https://forum.freecad.org/viewtopic.php?t=85474
fcsc结构混凝土简化分析的工作台
https://wiki.freecad.org/Analysis_of_reinforced_concrete_with_FEM
https://forum.freecad.org/viewtopic.php?t=88953
paraview中处理fem结果
https://wiki.freecad.org/Post-Processing_of_FEM_Results_with_Paraview

静力分析
https://garchiving.com/how-to-fem-analysis-with-freecad/
https://wiki.freecad.org/FEM_Concrete
流体模拟工作台
https://github.com/jaheyns/CfdOF

其他参考
https://docs.hpc.sjtu.edu.cn/app/engineeringscience/calculix.html

2 参数化有限元分析思路

参数化分析无非是不同项目(工程)对应的——模型几何会变化(参数化模型)——荷载会变化(参数化荷载表格)——荷载组合(多工况,按规范一般不会变:在建工况,完建工况,正常运行工况,检修工况,地震工况等)——多荷载步(未实现,目前只能通过修改文件来实现,见下文)
我们用表格参数来切换模型几何变化,再切换荷载数值,添加多个解算Analysis对应多个工况
重要:——模型几何尺寸变化后,分析前要重新划分网格——提前定义好点位坐标参数获取计算结果里的点位数据DataAtPoint,链接到另外一个新的表格里,再将应力换算成弯矩和轴力——这一些都可以提前设定好,后面使用者就是全自动的了。

参考(未实操):
参数化 有限元分析工作台。基本上,它基于您的参数,创建 freecad 文件并分析生成,并在表格中显示所有结果
https://forum.freecad.org/viewtopic.php?t=71905
利用python进行有限元分析
https://wiki.freecad.org/FEM_Tutorial_Python
https://www.docin.com/p-4712346139.html

3 基础知识

3.1 矩形截面上应力“积分”成弯矩和轴力

按矩形梁弯曲正应力公式

利用沿指定直线绘制场的值PostFilterDataAlongLine,得到截面上的应力曲线
https://wiki.freecad.org/FEM_PostFilterDataAlongLine

3.2 结果链接到表格里

重要:首先要设置Pipeline_CCX_Results属性里的Modeparallel,如下图,否则只有一个点能显示结果。

定义多个点数据剪裁过滤器DataAtPoint
它的属性里的Center定位,可以设置关联表格里的参数;它属性里的结果Point Data,又可以在另外新建表格里取得<<DataAtPoint>>.PointData[0],这就实现完美闭环了:保证切换模型几何、荷载参数后,有限元结果自动在表格里对应变化。
注意,有限元结果表不要和几何参数一个表,如果我们在一个表中,会在定义DataAtPoin属性里的CenterXYZ坐标参数的时候,出现循环引用错误。

3.3 多工况

建立多个Analysis,每个Analysis里设置不同的荷载。

3.4 接触

https://wiki.freecad.org/FEM_ConstraintContact

3.5 局部网格细分

https://wiki.freecad.org/FEM_Shear_of_a_Composite_Block
当你需要提高某些关键位置(比如孔洞周围)结果的准确性时,可以局部细化网格(FEM_MeshRegion命令)
注意,“主网格”里最小尺寸要填写“细化网格”数字,或比它小,否则这个局部细化就失效。

3.6 六面体网格

https://wiki.freecad.org/FEM_Geometry_Preparation_and_Meshing#Geometry_simplification

3.7 载荷步——多步分析Multistep analysis

ANSYS 2020的载荷加载过程涉及的概念有载荷步(Load Steps)、载荷子步(Load Substeps)、斜坡载荷(Ramped Loads)、阶跃载荷(Stepped Loads)、时间(Time)、时间步(Time Steps)、平衡迭代(Equilibrium Iteration)。这些概念是分析求解的基本组成部分,读者应注意在实践中加深理解,下面对这些概念进行简要介绍。
https://forum.freecad.org/viewtopic.php?t=89954

https://wiki.freecad.org/Workarounds

https://zhuanlan.zhihu.com/p/721830736
https://zhuanlan.zhihu.com/p/407083550
https://blog.csdn.net/weixin_47269399/article/details/126069203
目前FEM开发线路图如下,可见弹簧支座以及梯度荷载都在开发中,梯度荷载已经有了原型,不知道什么时候可以合并到主线。

4 土木结构有限元实战

4.1 背景信息

目前freecad calculix不支持弹簧约束,也不支持面上施加梯度荷载
重要:前者采用双材料来解决:基础建一个实体模型(合适的弹模、泊松比来模拟地基),结构建一个实体模型,然后2个实体进行BoleanFragments连接(part工作台里),见下面实战步骤。为何要对体进行连接?因为材料是给单独的体赋,而网格是整体划分,必须要连接(或组合compound)才可以给整体划分网格,连接后才能保证共节点,compound组合后2个体还是分离的,适用于一些场景,比如金属零件间通过插销连接。
——“零件和零件设计工作台都可以用于创建组件。但你需要将它们合并到一个对象中进行网格化,而 Part 的布尔作则用于网格化。如果你想应用多种材料,不能融合这些成分,但可以用它们合成复合材料。通常推荐的方法是布尔片段搭配CompSolid模式,然后使用复合滤波器。”

弹簧支座功能在开发完善中。
后者梯度荷载则采用分层分割的方式,上述链接里有案例。给每一层施加不同的荷载,荷载箭头符号的大小也顺便按比例配置,如下图所示,有些繁琐,但可以用过python代码循环解决。此功能在开发完善中。

4.2 第一步:

partdesign里建立2个参数化body——略。

4.3 第二步:

重要:切换到part工作台里,选中2个body,点击BoleanFragments按钮。具体原因见4.1 背景信息

4.4 第三步,新建有限元分析

过程见官方的入门案例,静力分析就5板斧:赋予材料,添加约束,施加荷载,划分网格,添加解算。
【关键】注意给实体赋材料操作:
点击材料按钮,选择一个材料。再拉到最底下,选中solid单选,点击添加按钮,在体上随便点一个面,这个材料就赋予这个体上了BoleanFragments.Solid2

4.5 第四步,计算和结果显示

单位:我们建模是mm、N、N/m2、Pa单位,施加的面压力荷载是Pa,结果应力单位是Pa,例如5.036e5=0.5MPa=503kPa

背景信息:

principal stresses主应力
Maximum principal stress最大主应力
Major Principal Stress主应力
Tresca Stress最大剪应力
1 2 [ ( σ 1 σ 2 ) 2 + ( σ 2 σ 3 ) 2 + ( σ 3 σ 1 ) 2 ] [ σ ]

Von Mises是一种屈服准则,屈服准则的值我们通常叫等效应力。Ansys后处理中”Von Mises Stress”我们习惯称Mises等效应力,它遵循材料力学第四强度理论(形状改变比能理论)。

5 分析结果处理

5.1 在应力云地图上读取某个点的数值并链接到新的表格里

https://wiki.freecad.org/FEM%20PostFilterDataAtPoint
注意,为了显示多个点的结果,需要将Mode设置为parallel,见3.2节。

5.2 如何获取矩形截面上的应力曲线图

见3.1节。我们先选择点,然后调整坐标到精确位置。
注意,有时候这个图形出来是一条Y值是0的直线,这时候,切换一下场(比如切换到米赛斯应力场),再切换回来,曲线就有了。

paraview中处理fem结果——暂时用不到
https://wiki.freecad.org/Post-Processing_of_FEM_Results_with_Paraview

5.3 截面做法

1 点击左侧树状面板上的计算结果ccx_results,自动激活按钮从结果生产后处理管道,点击这个按钮

2 点击刚生成的resultpipeline,自动激活按钮函数裁剪过滤器,点击这个按钮

3 点击创建下拉按钮,选择平面,出来一个辅助切面控制的操作图形

4 修改法向,例如X里填写1,z里的1改为0,就变成竖向的切面;顺便设置(选择)结果选项里的内容,多试试即可。


5 结果分析,上图切面反应z方向上的侧墙应力,可以看到侧墙底部外侧受拉应力约3MPa,对应内侧压应力约-3MPa

6 有限元弯矩验证

6.1 简支梁验证

对于简支梁的端部约束,推荐对梁两端下方的线进行位移约束

如果用刚体约束,因为是简支梁,我们只能约束梁端的下方线,按常规,梁可以绕这条线所在轴进行旋转的,可是:

“如果刚体定义中的参与节点位于直线上,则刚体绕直线的旋转未定义,会出现误差。为了去除旋转自由度,指定绕轴的旋转为零。”——要对梁两端下方的线所在轴进行旋转约束,也就是3个轴旋转都要约束,否则计算结果位移会漂移非常远,见这里
以下是位移约束设置截图
简支梁一端的约束情况

简支梁另一端约束情况

计算结果:跨中切片的轴向拉应力

两端固定的跨中弯矩

简支梁和两端固定梁,跨中弯矩和应力完全对应上。
梁弯曲正应力公式:

σ m a x = M m a x y m a x I z = M m a x W [ σ ]

抗弯截面系数:

W = I z y m a x

7 上述思路来FC自带的有限元案例


案例里首先对体进行BoleanFragments操作,将独立的体进行连接,然后再将BoleanFragments做一次拷贝操作?这个动作可能来自BIM工作台
以下计算是用compound组合2个体,没有用BoleanFragments,两侧明显翘起来和地基分离了:

8 主要容易出错点

1 没有bolean连接或组合,网格只能对选中的体进行划分,多个体无法划分。
2 感觉案例里,赋材料也不一定是在连接或组合之后,在组合前是不是也行?区别是,组合后选择体,它的名字是compound.solid1这种对象,组合前选择体,它的名字是pad.solid1这种。
3 施加的约束是不是也可以在组合或连接前?
4 每个Pipeline_CCX_Results里只能放一个切片cutdataatpointdataalongline?——要设置Pipeline_CCX_Results属性里的modelparallel才支持多个
5 定义dataatpoint属性里的center坐标参数化关联表格的时候总是提示 循环引用,需要新建一个表格来获取有限元应力结果dataatpoint属性里的pointdata
6 特别注意,同时显示多个resultpipeline里的切片时,右侧的渐变色柱子里的数值是不匹配的所有的,只代表其中一个切片的颜色数值。

9 设想

我们建立几个经典的手算(理论)和有限元计算结果对比的FreeCAD例子,每次FC发布新的版本,需要先验证一下我们的例子。

作者:秦晓川  创建时间:2023-03-30 08:12
最后编辑:秦晓川  更新时间:2026-07-25 21:11
![](/uploads/freecad/images/m_e4b46822918138e7f4ebda2a83d7828f_r.jpeg) 冯·米塞斯应力对应于材料力学中的第四强度理论。
上一篇:
下一篇: