平面单元需要指定厚度参数 ,空间实体单元无所谓,杆单元需要指定截面面积 ,梁单元需要指定截面类型,将会在下个小节详细介绍。
"materials" : [
{
"name" : "Material-1",
"category" : "Elastic",
"data" : {
"E" : 1E6, // 弹性模量
"v" : 0.3, // 泊松比
"t" : 1, // 平面单元厚度
"A" : 1 // 杆单元截面面积
}
}
]
梁单元支持矩形截面、环形截面、圆形截面,需要指定几何参数。
"materials" : [
{
"name" : "Material-1",
"category" : "Elastic",
"data" : {
"E" : 3e10, // 弹性模量
"v" : 0.2, // 泊松比
"Profile" : "Rectangular", // 矩形截面
"a" : 0.4, //宽度
"b" : 0.4, // 高度
"Profile" : "Pipe", //环形截面
"D" : 0.2, //外半径
"d" : 0.1, // 内半径
"Profile" : "Circular", //圆形截面
"r" : 0.1 // 半径
}
}
]
对于多种材料属性的施加,需要指定材料属性对应的单元集。
"materials" : [
{
"name" : "Material-1",
"category" : "Elastic",
"data" : {
"E" : 1E6,
"v" : 0.3,
"t" : 1
},
"elSet" : "ZZ-Blank"
},
{
"name" : "Material-2",
"category" : "Elastic",
"data" : {
"E" : 1E7,
"v" : 0.3,
"t" : 1
},
"elSet" : "ZZA-Layer1"
},
{
"name" : "Material-3",
"category" : "Elastic",
"data" : {
"E" : 2E7,
"v" : 0.3,
"t" : 1
},
"elSet" : "ZZA-Layer2"
}
],
以一个二维复合材料案例为例,前处理借助POLARIS_MesoConcrete
插件建立二维细观骨料模型,边界条件及网格划分如下图所示,采用CPS3单元:
Mises应力对比:
应力精度与Abaqus保持一致!
type
为constraint,需要指定不同的方向,nset
为节点集(与inp文件一致)。比如想要在x方向和y方向均施加固定约束,可指定"direction": "xy"。
"bc" : [
{
"name" : "fix1",
"type": "constraint",
"direction": "xy",
"nset" : "Set-XY"
}]
type
为displacement,需要指定不同的方向,nset
为节点集(与inp文件一致),value
为位移值。比如想要在x方向和y方向均施加位移,可指定"direction": "xy"。
"bc" : [
{
"name" : "dis1",
"type": "displacement",
"direction": "x",
"nset" : "Set-U",
"value" : 1
}]
type
为pressure,需要指定表面名字(与inp文件一致),以及压强值。(不支持杆单元)
"bc" : [
{
"name" : "pressure1",
"type": "pressure",
"surface" : "Surf-1",
"value" : 1000
}]
type
为gravity,需要指定重力加速度,以及重力方向。(不支持杆系单元)
"bc" : [
{
"name" : "Gravity1",
"type": "gravity",
"density" : 9.8,
"gravity" : {
"x": 0.0,
"y": 0.0,
"z": -9.8
}
}]
"solve" : {
"calculateStress": true, // 应力计算开关
"solver" : "direct", // 求解器类型,可选:direct、pcg
"tolerance": 1e-8, // 容差
"maxIterations": 1000 // 最大迭代次数
}
fields
:场信息,需要指定要显示的场信息average
:平均化方式,可选:simple, volume,分别对应绕节点直接平均和体积/面积加权edgeColor
:单元边界颜色faceColor
:单元面颜色,当输出model, deform时,显示的单元面颜色alpha
:单元面透明度colorMap
:可选abaqus或者matlab支持的colormap,如jet、summer等discretize
:若为true,则colormap分段显示;若为false,则colormap连续平滑显示discretizeNum
:colormap分段数"plot" : {
"fields" : ["Mises","Umag"],
"average" : "simple",
"edgeColor" : "#000080",
"faceColor" : "#77AC30",
"alpha" : 1,
"colorMap" : "abaqus",
"discretize" : true,
"discretizeNum" : 12
}
共计支持33种单元类型,罗列如下:
平面应力:
平面应变:
105万个C3D4单元,网格信息及边界条件设置:
计算结果对比:
计算过程信息:
********************* MFEAOOP Version 1.3 ********************
About: 基于Matlab平台的小型有限元通用分析程序,采用面向对象的编程风格
Theory: 《有限元基础编程百科全书》
Author: 易公子
****************************************************************
Submitted: 2024-10-11 00:20:59
Analysis Input File 15.1943 s
----Number of nodes: 197340
----Number of elements: 1051568
----Element type: C3D4
----Number of dofs: 592020
----Constraint: 0.2698 s
----Pressure: 0.0696 s
----Pressure: 0.0598 s
----Pressure: 0.0581 s
----Pressure: 0.0502 s
Assembly global stifness matrix: 165.0002 s
Using PCG solver for large systems...
Solving Systems of Linear Equations: 106.6774 s
Stress calculation skipped based on JSON settings!
Write result File 1.7861 s
Write vtk File 4.3930 s
Plot 2.2932 s
Completed: 2024-10-11 00:25:57 297.9422 s
****************************************************************
V1-3
├─ class
│ ├─ FEAData.m
│ ├─ FEASolver.m
│ └─ writeFile.m
├─ elements
│ ├─ 2D
│ │ ├─ CPE3.m
│ │ ├─ CPE4.m
│ │ ├─ CPE4Bar.m
│ │ ├─ CPE4I.m
│ │ ├─ CPE4R.m
│ │ ├─ CPE4SR.m
│ │ ├─ CPE6.m
│ │ ├─ CPE8.m
│ │ ├─ CPE8R.m
│ │ ├─ CPS3.m
│ │ ├─ CPS4.m
│ │ ├─ CPS4Bar.m
│ │ ├─ CPS4I.m
│ │ ├─ CPS4R.m
│ │ ├─ CPS4SR.m
│ │ ├─ CPS6.m
│ │ ├─ CPS8.m
│ │ └─ CPS8R.m
│ ├─ 3D
│ │ ├─ C3D10.m
│ │ ├─ C3D20.m
│ │ ├─ C3D20R.m
│ │ ├─ C3D4.m
│ │ ├─ C3D8.m
│ │ ├─ C3D8Bar.m
│ │ ├─ C3D8I.m
│ │ ├─ C3D8R.m
│ │ └─ C3D8SR.m
│ ├─ beam
│ │ ├─ B21.m
│ │ ├─ B23.m
│ │ ├─ B31.m
│ │ └─ B33.m
│ └─ truss
│ ├─ T2D2.m
│ └─ T3D2.m
├─ input
│ ├─ Abaqus
│ │ ├─ aiFeiEr.inp
│ │ ├─ B21.inp
│ │ ├─ B23.inp
│ │ ├─ B31.inp
│ │ ├─ B33.inp
│ │ ├─ C3D10.inp
│ │ ├─ C3D20.inp
│ │ ├─ C3D4.inp
│ │ ├─ C3D4test.inp
│ │ ├─ C3D8.inp
│ │ ├─ CPS3.inp
│ │ ├─ CPS4.inp
│ │ ├─ CPS6.inp
│ │ ├─ CPS8.inp
│ │ ├─ hg4.inp
│ │ ├─ hg8.inp
│ │ ├─ T1D3.inp
│ │ ├─ T2D2.inp
│ │ ├─ T3D2.inp
│ │ └─ T3D2test.inp
│ ├─ beam2D.json
│ ├─ beam3D.json
│ ├─ plane.json
│ ├─ solid.json
│ ├─ truss2D.json
│ └─ truss3D.json
├─ main.m
├─ output
├─ README.md
└─ utitls
├─ Bmatrix2D.m
├─ Bmatrix3D.m
├─ Dmatrix2D.m
├─ Dmatrix3D.m
├─ gauss1D.m
├─ gauss2D.m
├─ gauss3D.m
├─ hammer2D.m
├─ hammer3D.m
├─ Jacobian.m
├─ shapeFunction1D.m
├─ shapeFunction2D.m
├─ shapeFunction3D.m
└─ writeLog.m
由于添加的单元类型较多,精度验证需要占据大量篇幅,没有贴在本次推文中,不过大可放心,每种单元类型在添加时均和Abaqus做了验证分析,均验证通过!感兴趣的小伙伴可逐个验证。
有关程序更新的功能就介绍到这里,感谢您的阅读。