Calfem是一个用于有限元分析的开源MATLAB工具箱,由瑞典隆德大学的学者开发。这个工具箱主要用于教学和研究,特别适合于学习有限元方法的基本概念和技术。
Calfem提供了一系列的函数和工具,包括但不限于以下功能:
元素刚度矩阵的计算:Calfem可以计算各种类型的元素(如梁元素、平面应力/应变元素、实体元素等)的刚度矩阵。
全局刚度矩阵的组装:Calfem提供了函数可以将元素刚度矩阵组装成全局刚度矩阵。
边界条件的处理:Calfem可以处理各种类型的边界条件,包括位移边界条件和力边界条件。
线性方程组的求解:Calfem可以求解由刚度矩阵和载荷向量构成的线性方程组,得到节点位移。
应力和应变的计算:Calfem可以基于节点位移计算元素的应力和应变。
结果的可视化:Calfem提供了一些函数可以绘制位移、应力、应变等结果的分布。
总的来说,Calfem是一个功能强大而易用的有限元工具箱,适合于初学者学习和理解有限元方法的基本原理和技术。然而,对于大型或复杂的工程问题,我们通常会使用更专业的有限元软件,例如ANSYS、ABAQUS等。
完整Calfem3.6工具箱代码见:https://download.csdn.net/download/corn1949/88817170
解释一个简单的3梁模型
构建全局节点如下(a1~a12)
构造Edof全局自由度是关键的第一步
如图所示,
梁1的全局节点包括a4,a5,a6, a1,a2,a3
梁3的全局节点包括a7,a8,a9, a10,a11,a12
梁2的全局节点包括a4,a5,a6, a7,a8,a9
Edof=[1 4 5 6 1 2 3;% 梁1的全局节点包括a4,a5,a6, a1,a2,a3
2 7 8 9 10 11 12;% 梁3的全局节点包括a1,a2,a3
3 4 5 6 7 8 9];% 梁2的全局节点包括a4,a5,a6, a7,a8,a9
代码如下:
clc;close all;clear all;warning off;%清除变量
rand('seed', 100);
randn('seed', 100);
format long g;
addpath(genpath('calfem3.6'));
%----- 定义全局自由度矩阵 -------------------------------------------------
Edof=[1 4 5 6 1 2 3;% 梁1的全局节点包括a4,a5,a6, a1,a2,a3
2 7 8 9 10 11 12;% 梁3的全局节点包括a1,a2,a3
3 4 5 6 7 8 9];% 梁2的全局节点包括a4,a5,a6, a7,a8,a9
%----- 初始化刚度矩阵,设置载荷向量---------------------
K=zeros(12);
f=zeros(12,1);
f(4)=2e+3;% 全局自由度节点4受力2000N, 方向为正
%----- 单元刚度和单元荷载矩阵 -------------
E=200e9;% 弹性模量
A1=2e-3;
A2=6e-3;
I1=1.6e-5;
I2=5.4e-5;
% 设置元素属性 弹性模量E 截面积 惯性矩I
ep1=[E A1 I1];
ep3=[E A2 I2];
% 设置元素xy坐标
ex1=[0 0];
ex2=[6 6];
ex3=[0 6];
ey1=[4 0];
ey2=[4 0];
ey3=[4 4];
% 设置均布负载
eq1=[0 0];
eq2=[0 0];
eq3=[0 -10e+3];
% 计算元素的刚度矩阵
Ke1=beam2e(ex1,ey1,ep1);
Ke2=beam2e(ex2,ey2,ep1);
[Ke3,fe3]=beam2e(ex3,ey3,ep3,eq3);% 注意有均布载荷
%----- 组装元素 得到全局刚度矩阵---------------------------------------
K=assem(Edof(1,:),K,Ke1);
K=assem(Edof(2,:),K,Ke2);
[K,f]=assem(Edof(3,:),K,Ke3,f,fe3);
%----- 基于边界条件的求解------
bc=[1 0;
2 0;
3 0;
10 0;
11 0];% 设置边界条件,也即不动的节点
[a,r]=solveq(K,f,bc)
%----- 分段计算 -------------------------------------------
Ed=extract_ed(Edof,a);
[es1,edi1]=beam2s(ex1,ey1,ep1,Ed(1,:),eq1,21)
[es2,edi2]=beam2s(ex2,ey2,ep1,Ed(2,:),eq2,21)
[es3,edi3]=beam2s(ex3,ey3,ep3,Ed(3,:),eq3,21)
%----- 绘图 ---------------------------------------
% ---位移---
figure;
plotpar=[2 1 0];
eldraw2(ex1,ey1,plotpar);
eldraw2(ex2,ey2,plotpar);
eldraw2(ex3,ey3,plotpar);
sfac=scalfact2(ex3,ey3,edi3,0.1);
plotpar=[1 2 1];
dispbeam2(ex1,ey1,edi1,plotpar,sfac);
dispbeam2(ex2,ey2,edi2,plotpar,sfac);
dispbeam2(ex3,ey3,edi3,plotpar,sfac);
axis([-1.5 7.5 -0.5 5.5]);
scalgraph2(sfac,[1e-2 0.5 0]);
title('位移Displacements');
%----- 正应力--------------------------------
figure;
plotpar=[2 1];
sfac=scalfact2(ex1,ey1,es1(:,1),0.2);
secforce2(ex1,ey1,es1(:,1),plotpar,sfac);
secforce2(ex2,ey2,es2(:,1),plotpar,sfac);
secforce2(ex3,ey3,es3(:,1),plotpar,sfac);
axis([-1.5 7.5 -0.5 5.5]);
scalgraph2(sfac,[3e4 1.5 0]);
title('正应力Normal force');
%----- 剪切力 ---------------------------------
figure;
plotpar=[2 1];
sfac=scalfact2(ex3,ey3,es3(:,2),0.2);
secforce2(ex1,ey1,es1(:,2),plotpar,sfac);
secforce2(ex2,ey2,es2(:,2),plotpar,sfac);
secforce2(ex3,ey3,es3(:,2),plotpar,sfac);
axis([-1.5 7.5 -0.5 5.5]);
scalgraph2(sfac,[3e4 0.5 0]);
title('剪切力Shear force');
%----- 弯矩 --------------------------------------
figure;
plotpar=[2 1];
sfac=scalfact2(ex3,ey3,es3(:,3),0.2);
secforce2(ex1,ey1,es1(:,3),plotpar,sfac);
secforce2(ex2,ey2,es2(:,3),plotpar,sfac);
secforce2(ex3,ey3,es3(:,3),plotpar,sfac);
axis([-1.5 7.5 -0.5 5.5]);
scalgraph2(sfac,[3e4 0.5 0]);
title('弯矩Moment');
rmpath(genpath('calfem3.6'));
程序结果如下:
a =
0
0
0
0.00753570853574139
-0.000287408783210633
-0.00537348769781816
0.00751607473516171
-0.000312591216789367
0.00466558150943819
0
0
-0.00515131878040474
r =
1926.76011593696
28740.8783210633
445.26992638061
0
1.09139364212751e-11
-1.09139364212751e-11
1.12430176280043e-10
-3.63797880709171e-12
7.27595761418343e-12
-3926.76011593717
31259.1216789367
-3.35109717752857e-12
es1 =
-28740.8783210633 1926.76011593696 8152.31039012845
-28740.8783210633 1926.76011593696 7766.95836694106
-28740.8783210633 1926.76011593696 7381.60634375367
-28740.8783210633 1926.76011593696 6996.25432056627
-28740.8783210633 1926.76011593696 6610.90229737888
-28740.8783210633 1926.76011593696 6225.55027419149
-28740.8783210633 1926.76011593696 5840.1982510041
-28740.8783210633 1926.76011593696 5454.84622781671
-28740.8783210633 1926.76011593696 5069.49420462931
-28740.8783210633 1926.76011593696 4684.14218144192
-28740.8783210633 1926.76011593696 4298.79015825453
-28740.8783210633 1926.76011593696 3913.43813506714
-28740.8783210633 1926.76011593696 3528.08611187975
-28740.8783210633 1926.76011593696 3142.73408869235
-28740.8783210633 1926.76011593696 2757.38206550496
-28740.8783210633 1926.76011593696 2372.03004231757
-28740.8783210633 1926.76011593696 1986.67801913018
-28740.8783210633 1926.76011593696 1601.32599594279
-28740.8783210633 1926.76011593696 1215.97397275539
-28740.8783210633 1926.76011593696 830.621949568003
-28740.8783210633 1926.76011593696 445.269926380611
edi1 =
0.000287408783210633 0.00753570853574139
0.000273038344050101 0.00651116011940109
0.00025866790488957 0.00558369868264755
0.000244297465729038 0.00474850732519093
0.000229927026568506 0.00400076914674139
0.000215556587407975 0.00333566724700908
0.000201186148247443 0.00274838472570417
0.000186815709086911 0.00223410468253681
0.00017244526992638 0.00178801021721716
0.000158074830765848 0.00140528442945538
0.000143704391605316 0.00108111041896161
0.000129333952444785 0.000810671285446035
0.000114963513284253 0.000589150128618795
0.000100593074123722 0.000411730048190052
8.62226349631899e-05 0.000273594143869964
7.18521958026582e-05 0.000169925515368687
5.74817566421266e-05 9.59072623963799e-05
4.31113174815949e-05 4.67224846631989e-05
2.87408783210633e-05 1.7554281879305e-05
1.43704391605317e-05 3.58575375485286e-06
0 -3.46944695195361e-18
es2 =
-31259.1216789367 -3926.76011593717 -15707.0404637487
-31259.1216789367 -3926.76011593717 -14921.6884405613
-31259.1216789367 -3926.76011593717 -14136.3364173738
-31259.1216789367 -3926.76011593717 -13350.9843941864
-31259.1216789367 -3926.76011593717 -12565.6323709989
-31259.1216789367 -3926.76011593717 -11780.2803478115
-31259.1216789367 -3926.76011593717 -10994.9283246241
-31259.1216789367 -3926.76011593717 -10209.5763014366
-31259.1216789367 -3926.76011593717 -9424.22427824921
-31259.1216789367 -3926.76011593717 -8638.87225506178
-31259.1216789367 -3926.76011593717 -7853.52023187435
-31259.1216789367 -3926.76011593717 -7068.16820868691
-31259.1216789367 -3926.76011593717 -6282.81618549948
-31259.1216789367 -3926.76011593717 -5497.46416231204
-31259.1216789367 -3926.76011593717 -4712.11213912461
-31259.1216789367 -3926.76011593717 -3926.76011593717
-31259.1216789367 -3926.76011593717 -3141.40809274974
-31259.1216789367 -3926.76011593717 -2356.05606956231
-31259.1216789367 -3926.76011593717 -1570.70404637487
-31259.1216789367 -3926.76011593717 -785.35202318744
-31259.1216789367 -3926.76011593717 -5.55111512312578e-12
edi2 =
0.000312591216789367 0.00751607473516171
0.000296961655949899 0.00835265818419922
0.00028133209511043 0.00900272052772972
0.000265702534270962 0.00947607866604305
0.000250072973431494 0.00978254949942905
0.000234443412592025 0.00993194992817756
0.000218813851752557 0.00993409685257843
0.000203184290913089 0.00979880717292149
0.00018755473007362 0.0095358977894966
0.000171925169234152 0.0091551856025936
0.000156295608394684 0.00866648751250232
0.000140666047555215 0.00807962041951261
0.000125036486715747 0.00740440122391432
0.000109406925876279 0.00665064682599728
9.37773650368101e-05 0.00582817412605134
7.81478041973418e-05 0.00494680002436634
6.25182433578734e-05 0.00401634142123213
4.68886825184051e-05 0.00304661521693855
3.12591216789367e-05 0.00204743831177544
1.56295608394684e-05 0.00102862760603264
0 0
es3 =
-3926.76011593713 -28740.8783210633 -8152.31039012844
-3926.76011593713 -25740.8783210633 19.9531061905425
-3926.76011593713 -22740.8783210633 7292.21660250953
-3926.76011593713 -19740.8783210633 13664.4800988285
-3926.76011593713 -16740.8783210633 19136.7435951475
-3926.76011593713 -13740.8783210633 23709.0070914665
-3926.76011593713 -10740.8783210633 27381.2705877855
-3926.76011593713 -7740.8783210633 30153.5340841045
-3926.76011593713 -4740.8783210633 32025.7975804235
-3926.76011593713 -1740.8783210633 32998.0610767425
-3926.76011593713 1259.1216789367 33070.3245730614
-3926.76011593713 4259.12167893671 32242.5880693804
-3926.76011593713 7259.1216789367 30514.8515656994
-3926.76011593713 10259.1216789367 27887.1150620184
-3926.76011593713 13259.1216789367 24359.3785583374
-3926.76011593713 16259.1216789367 19931.6420546564
-3926.76011593713 19259.1216789367 14603.9055509754
-3926.76011593713 22259.1216789367 8376.16904729436
-3926.76011593713 25259.1216789367 1248.43254361333
-3926.76011593713 28259.1216789367 -6779.30396006764
-3926.76011593713 31259.1216789367 -15707.0404637487
edi3 =
0.00753570853574139 -0.000287408783210633
0.00753472684571241 -0.00192176018654784
0.00753374515568342 -0.00355657031400013
0.00753276346565444 -0.00513123696976483
0.00753178177562545 -0.0065926579580393
0.00753080008559647 -0.00789523108302088
0.00752981839556749 -0.00900085414890689
0.0075288367055385 -0.0098789249598947
0.00752785501550952 -0.0105063413201816
0.00752687332548053 -0.010867501033965
0.00752589163545155 -0.0109543019054423
0.00752490994542256 -0.0107661417388106
0.00752392825539358 -0.0103099183382675
0.0075229465653646 -0.00960002950801022
0.00752196487533561 -0.00865837305223611
0.00752098318530663 -0.00751434677514252
0.00752000149527764 -0.0062048484809268
0.00751901980524866 -0.00477427597378627
0.00751803811521967 -0.0032745270579183
0.00751705642519069 -0.00176499953752021
0.00751607473516171 -0.000312591216789351
>>