- 0 教程参考
- 1 坑和疑问
- 2 参数化有限元分析思路
- 3 基础知识
- 3.1 矩形截面上应力“积分”成弯矩和轴力
- 3.2 结果链接到表格里
- 3.3 多工况
- 3.4 接触
- 3.5 局部网格细分
- 3.6 六面体网格
- 3.7 载荷步——多步分析Multistep analysis
- 4 土木结构有限元实战
- 4.1 背景信息
- 4.2 第一步:
- 4.3 第二步:
- 4.4 第三步,新建有限元分析
- 4.5 第四步,计算和结果显示
- 5 分析结果处理
- 5.1 在应力云图上读取某个点的数值并引用到新的表格里
- 5.2 如何获取矩形截面上的应力曲线图
- 5.3 截面做法
- 6 有限元弯矩验证
- 6.1 简支梁验证
- 7 上述思路来FC自带的有限元案例
- 8 主要容易出错点
- 9 设想
0 教程参考
官方入门教程
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://wiki.freecad.org/Post-Processing_of_FEM_Results_with_Paraview#Integration_over_a_Line
静力分析
https://garchiving.com/how-to-fem-analysis-with-freecad/
https://wiki.freecad.org/FEM_Concrete
其他参考
https://docs.hpc.sjtu.edu.cn/app/engineeringscience/calculix.html
1 坑和疑问
- 重新计算后,应力图不会自动更新,关闭应力图,需要切换一下场,例如,开始是z轴应力,你得先切换到xy方向应力,点击
创建图表按钮,——关闭应力图,再切回z向,再点击“创建图表”按钮——应力图才会更新。记得要关闭应力图表,否则你切换后也不会更新。
- 改变荷载后是否需要重新划分网格?
答案是不需要重新划分网格 - 结构自重
要考虑结构自重,必须施加重力加速度荷载,默认Z轴方向。 - analysis里材料、荷载等赋加给对象,选择对象是选择body还是选择
BoleanFragments操作后的实体?
答案是后者!!
https://forum.freecad.org/viewtopic.php?t=106824&start=10
Always select references for materials, boundary conditions, loads, etc., in the same shape you are meshing; otherwise, you might get unexpected results. A common mistake is selecting references in other similar shapes simply because it’s easier to choose them in the 3D view.
For example, suppose you want to work with multiple materials (or in this case, assign magnetization to bodies). You then create a compsolid containing two solids using theboolean fragments- compound filter approach.
The resulting shape will have two solid subelements, “Solid1” and “Solid2”, which should be referenced, let’s say, “CompoundFilter.Solid1” and “CompoundFilter.Solid2”.
The typical error is hiding compsolid and referencing the base objects, for example,Box1andBox2, which were used to generate the compsolid object. Therefore, the references will beBox1.Solid1andBox2.Solid1, which will produce an incorrect result.
始终选择材料、边界条件、载荷等的参考,且与你网格网格形成的形状相同;否则,你可能会得到意想不到的结果。一个常见错误是因为在3D视图中选择更容易,就选择了其他相似形状的参考。
比如说,假设你想处理多种材料(或者在这种情况下,给物体分配磁化)。然后你用boolean fragments-复合滤波器方法创建一个包含两个固体的复合固体。最终形状将包含两个实体子元素,“Solid1”和“Solid2”,应引用它们,比如“CompoundFilter.Solid1”和“CompoundFilter.Solid2”。典型错误是隐藏 compsolid 并引用了生成合成实体对象的基础对象,例如 ‘Box1’ 和 ‘Box2’,这些对象是用来生成合成实体对象的。因此,引用将是“Box1.Solid1”和“Box2.Solid1”,结果会不正确。 - 为何用新参数改变模型后,赋予的材料会丢失对象?
- Basically, the geometry should be above, not below the Analysis container in the tree.
基本上,几何体应该在分析容器的树上方,而不是下面——这条非必要
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 矩形截面上应力“积分”成弯矩和轴力
用paraview处理,但是有点麻烦,很多情况下,不适合。
https://wiki.freecad.org/Post-Processing_of_FEM_Results_with_Paraview#Integration_over_a_Line
下文方法只适用于截面上的应力曲线接近直线的情况。非直线的话,误差很大。
按矩形梁弯曲正应力公式
利用沿指定直线绘制场的值PostFilterDataAlongLine,得到截面上的应力曲线
https://wiki.freecad.org/FEM_PostFilterDataAlongLine
3.2 结果链接到表格里
重要:首先要设置Pipeline_CCX_Results属性里的Mode为parallel,如下图,否则只有一个点能显示结果。
定义多个点数据剪裁过滤器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不支持弹簧约束,也不支持面上施加梯度荷载
重要:前者采用双材料来解决:基础建一个body实体模型(合适的弹模、泊松比来模拟地基),结构建一个body实体模型,然后2个body实体进行BoleanFragments连接(part工作台里)
,见下面实战步骤。为何要对体body进行连接?因为材料是给单独的体body赋,而网格是整体划分,必须要连接(或组合compound)才可以给整体划分网格,连接后才能保证共节点,compound组合后2个体还是分离的,适用于一些场景,比如金属零件间通过插销连接。
——“零件和零件设计工作台都可以用于创建组件。但你需要将它们合并到一个对象中进行网格化,而 Part 的布尔作则用于网格化。如果你想应用多种材料,不能融合这些成分,但可以用它们合成复合材料。通常推荐的方法是布尔片段搭配CompSolid模式,然后使用复合滤波器。”
弹簧支座功能在开发完善中。
后者梯度荷载则采用分层分割的方式,上述链接里有案例。给每一层施加不同的荷载,荷载箭头符号的大小也顺便按比例配置,如下图所示,有些繁琐,但可以用过python代码循环解决。此功能在开发完善中。
4.2 第一步:
在partdesign里建立2个参数化body——略。
4.3 第二步:
重要:切换到part工作台里,选中2个body,点击BoleanFragments按钮。具体原因见4.1 背景信息
这一步后,要把原来的body都关闭,剩下BoleanFragments,作为后续操作对象!
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最大剪应力

冯·米塞斯应力对应于材料力学中的第四强度理论。
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 点击创建下拉按钮,选择平面,出来一个辅助切面控制的操作图形
3 修改法向,例如X里填写1,z里的1改为0,就变成竖向的切面;顺便设置(选择)结果选项里的内容,多试试即可。

4 结果分析,上图切面反应z方向上的侧墙应力,可以看到侧墙底部外侧受拉应力约3MPa,对应内侧压应力约-3MPa
6 有限元弯矩验证
6.1 简支梁验证
对于简支梁的端部约束,推荐对梁两端下方的线进行位移约束
如果用刚体约束,因为是简支梁,我们只能约束梁端的下方线,按常规,梁可以绕这条线所在轴进行旋转的,可是:
“如果刚体定义中的参与节点位于直线上,则刚体绕直线的旋转未定义,会出现误差。为了去除旋转自由度,指定绕轴的旋转为零。”——要对梁两端下方的线所在轴进行旋转约束,也就是3个轴旋转都要约束,否则计算结果位移会漂移非常远,见这里。
以下是位移约束设置截图
简支梁一端的约束情况
简支梁另一端约束情况
计算结果:跨中切片的轴向拉应力
两端固定的跨中弯矩
简支梁和两端固定梁,跨中弯矩和应力完全对应上。
梁弯曲正应力公式:
抗弯截面系数:

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

案例里首先对体进行BoleanFragments操作,将独立的体进行连接,然后再将BoleanFragments做一次拷贝操作?这个动作可能来自BIM工作台
以下计算是用compound组合2个体,没有用BoleanFragments,两侧明显翘起来和地基分离了:
8 主要容易出错点
1 没有bolean连接或组合,网格只能对选中的体进行划分,多个体无法划分。
2 感觉案例里,赋材料也不一定是在连接或组合之后,在组合前是不是也行?区别是,组合后选择体,它的名字是compound.solid1这种对象,组合前选择体,它的名字是pad.solid1这种——严格来说,还是要遵循这个规定,即选择融合后的对象!
3 施加的约束是不是也可以在组合或连接前?
4 每个Pipeline_CCX_Results里只能放一个切片cut、dataatpoint、dataalongline?——要设置Pipeline_CCX_Results属性里的model为parallel才支持多个
5 定义dataatpoint属性里的center坐标参数化关联表格的时候总是提示 循环引用,需要新建一个表格来获取有限元应力结果dataatpoint属性里的pointdata
6 特别注意,同时显示多个resultpipeline里的切片时,右侧的渐变色柱子里的数值是不匹配的所有的,只代表其中一个切片的颜色数值。
9 设想
我们建立几个经典的手算(理论)和有限元计算结果对比的FreeCAD例子,每次FC发布新的版本,需要先验证一下我们的例子。
最后编辑:秦晓川 更新时间:2026-08-27 22:19