Laminate

Laminate

介绍

Laminate类用于层合板校核分析,集成了Practical Micromechanics of Composite Materials一书中部分的开源代码$^{[1]}$。该类用经典的复合材料层合板理论进行校核,可以初步对层合板进行选型计算,但在实际工程中还是要考虑将实际几何和边界考虑进仿真中。

类结构

输入 input:

  • Load : 载荷
  • Tply : 铺层厚度
  • Plymat : 铺层材料
  • Orient : 铺层角度

参数 params:

  • Name :名称
  • Material : 材料
  • Ctiterion : 失效准则

输出 output :

  • Geometry : 几何

  • LamResult : 壳单元装配

  • Safety : 截面

  • Plymat : 实体网格

能力 capacity :

  • SF1 : 总体极限安全系数

案例

Compare to ANSYS ACP (Flag=1)

此案例用Workbench ACP和Laminate类比较了几种比较常见的铺层方式(对称、反对称等)下层合板宏观力学参数,材料属性为E-Glass/Epoxy, 参数如下。

Density Ex Ey Ez Gxy Gyz Gxz $\mu_{xy}$ $\mu_{yz}$ $\mu_{xz}$
$t/mm^3$ $MPa$ $MPa$ $MPa$ $MPa$ $MPa$ $MPa$
1.987e-9 44000 13400 13400 5000 4600 5000 0.27 0.45 0.45
S=RMaterial('Composite');
mat=GetMat(S,5);
type=1;
switch type
case 1
 % Symmetric layout 1
 inputStruct.Orient=[0,90,90,0]';
 inputStruct.Tply=repmat(0.15,4,1);
 inputStruct.Plymat=ones(4,1);
case 2
% Symmetric layout 2
inputStruct.Orient=[30,45,0,0,30,45]';
inputStruct.Tply=epmat(0.15,6,1);
inputStruct.Plymat=ones(6,1);
case 3
% Antisymmetric layout 1
inputStruct.Orient=[-45,30,-30,45]';
inputStruct.Tply=repmat(0.15,4,1);
inputStruct.Plymat=ones(4,1);
case 4
% Antisymmetric layout 2
inputStruct.Orient=[45,-60,-30,30,60,-45]';
inputStruct.Tply=repmat(0.15,6,1);
inputStruct.Plymat=ones(6,1);
end
inputStruct.Load.Type  = [2, 2, 2, 2, 2, 2];
inputStruct.Load.Value = [15, 0, 0, 0, 0, 0];
% inputStruct.Load.Value = [0, 0, 0, 15, 0, 0];
paramsStruct.Material=mat;
L= plate.Laminate(paramsStruct, inputStruct);
L=L.solve();
PlotResult(L);
PlotResult(L,'MC',1);
PlotLaminateProperty(L);
0/90/90/0 stackups
45/30/0/0/30/45 stackups
-45/30/-30/45 stackups
45/-60/-30/30/60/-45 stackups

UD laminate with 45° (Flag=2)

S=RMaterial('Composite');
mat=GetMat(S,22);
inputStruct.Orient=45;
inputStruct.Tply=0.15;
inputStruct.Plymat=1;
inputStruct.Load.Type  = [2, 2, 2, 2, 2, 2];
inputStruct.Load.Value = [1, 0, 0, 0, 0, 0];
paramsStruct.Material=mat;
L= plate.Laminate(paramsStruct, inputStruct);
L=L.solve();
PlotResult(L);

A Matrix :.
1.0e+03 *

2.8580    1.8230    1.2236
1.8230    2.8580    1.2236
1.2236    1.2236    1.8656

B Matrix :.
0 0 0
0 0 0
0 0 0

D Matrix :.
5.3587 3.4181 2.2942
3.4181 5.3587 2.2942
2.2942 2.2942 3.4980

Laminate effective properties :.
Ex Ey Nuxy Gxy Alpha_x Alpha_y Alpha_xy.
10325.6102 10325.6102 0.496465246 8172.6842 1.792e-05 1.792e-05

Cross ply (Flag=3)

S=RMaterial('Composite');
mat=GetMat(S,21);
type=3;
switch type
  case 1
    inputStruct.Orient=[0,90,90,0]';
  case 2
    inputStruct.Orient=[90,0,0,90]';
  case 3
    inputStruct.Orient=[0,0,90,90]';
end

inputStruct.Tply=repmat(0.15,4,1);
inputStruct.Plymat=ones(4,1);
inputStruct.Load.Type  = [2, 2, 2, 2, 2, 2];
% inputStruct.Load.Value = [1, 0, 0, 0, 0, 0];
inputStruct.Load.Value = [0, 0, 0, 1, 0, 0];
paramsStruct.Material=mat;
L= plate.Laminate(paramsStruct, inputStruct);
L=L.solve();
PlotResult(L);

Plot material coordinate laminate results (Flag=4)

S=RMaterial('Composite');
mat=GetMat(S,21);
inputStruct.Orient=[45,-45,-45,45]';
inputStruct.Tply=repmat(0.15,4,1);
inputStruct.Plymat=ones(4,1);
inputStruct.Load.Type  = [2, 2, 2, 2, 2, 2];
inputStruct.Load.Value = [0, 0, 0, 1, 0, 0];
paramsStruct.Material=mat;
L= plate.Laminate(paramsStruct, inputStruct);
L=L.solve();
PlotResult(L);
PlotResult(L,'MC',1);

A Matrix :.
1.0e+04 *

2.7401    2.1209    0.0000
2.1209    2.7401    0.0000
0.0000    0.0000    2.2626

B Matrix :.
1.0e-12 *

-0.2274 0 0.2274
0 -0.2274 0.2274
0.2274 0.2274 -0.2274

D Matrix :.
822.0321 636.2721 468.9640
636.2721 822.0321 468.9640
468.9640 468.9640 678.7924

Laminate effective properties :.
Ex Ey Nuxy Gxy Alpha_x Alpha_y Alpha_xy.
18307.9217 18307.9217 0.774023421 37710.6905 2.11507815e-06 2.11507815e-06

Calculate UD lamminate failure Criterion (Flag=5)

S=RMaterial('Composite');
mat=GetMat(S,21);
type=2;
switch type
  case 1
    inputStruct.Orient=0;
    inputStruct.Tply=1;
    inputStruct.Plymat=1;
  case 2
    inputStruct.Orient=45;
    inputStruct.Tply=1;
    inputStruct.Plymat=1;
end
inputStruct.Load.Type  = [2, 2, 2, 2, 2, 2];
inputStruct.Load.Value = [1000, 0, 0, 0, 0, 0];
paramsStruct.Material=mat;
paramsStruct.Criterion=7;% Change method to get different results
L= plate.Laminate(paramsStruct, inputStruct);
L=L.solve();
PlotResult(L,'MC',1);

A Matrix :.
1.0e+04 *

4.5668    3.5348    3.4738
3.5348    4.5668    3.4738
3.4738    3.4738    3.7711

B Matrix :.
0 0 0
0 0 0
0 0 0

D Matrix :.
1.0e+03 *

3.8057    2.9457    2.8948
2.9457    3.8057    2.8948
2.8948    2.8948    3.1426

Laminate effective properties :.
Ex Ey Nuxy Gxy Alpha_x Alpha_y Alpha_xy.
12848.2864 12848.2864 0.244988988 7921.01413 1.545e-05 1.545e-05
Successfully add output geometry .
Successfully Calculate Laminate safety .
Laminate min MoS :
-0.9123
-0.9123

Laminate min SF :
0.0877
0.0877

Calculate lamminate [60,-60,0]s failure Criterion (Flag=6)

S=RMaterial('Composite');
mat=GetMat(S,21);
inputStruct.Orient=[60;-60;0;0;-60;60];
inputStruct.Tply=repmat(0.15,6,1);
inputStruct.Plymat=ones(6,1);
inputStruct.Load.Type  = [2, 2, 2, 2, 2, 2];
% inputStruct.Load.Value = [300, 0, 0, 0, 0, 0];
inputStruct.Load.Value = [0, 300, 0, 0, 0, 0];
paramsStruct.Material=mat;
paramsStruct.Criterion=5;% Change method to get different results
L= plate.Laminate(paramsStruct, inputStruct);
L=L.solve();
PlotResult(L,'MC',1);

A Matrix :.
1.0e+04 *

5.5749    1.7166   -0.0000
1.7166    5.5749   -0.0000

-0.0000 -0.0000 1.9292

B Matrix :.
1.0e-12 *

-0.6821 0 0.3411
0.4547 0.9095 0.4547
0.3411 0.4547 0.4547

D Matrix :.
1.0e+03 *

1.4478    1.5981    0.4317
1.5981    5.1995    1.1928
0.4317    1.1928    1.7416

Laminate effective properties :.
Ex Ey Nuxy Gxy Alpha_x Alpha_y Alpha_xy.
56070.9982 56070.9982 0.307909847 21435.3452 2.11507815e-06 2.11507815e-06
Successfully add output geometry .
Successfully Calculate Laminate safety .
Laminate min MoS :
0.9730
0.9730
0.9730
0.9730
-0.0052
-0.0052
-0.0052
-0.0052
0.9730
0.9730
0.9730
0.9730

Laminate min SF :
1.9730
1.9730
1.9730
1.9730
0.9948
0.9948
0.9948
0.9948
1.9730
1.9730
1.9730
1.9730

Ply-level failure envelopes (Flag=7)

S=RMaterial('Composite');
mat=GetMat(S,21);
Type=2;
switch Type
  case 1
    inputStruct.Orient=0;
    inputStruct.Tply=1;
    inputStruct.Plymat=1;
  case 2
    inputStruct.Orient=[60;-60;0;0;-60;60];
    inputStruct.Tply=repmat(0.15,6,1);
    inputStruct.Plymat=ones(6,1);
end
paramsStruct.Material=mat;
Env=NaN(37,6);

for i=1:37
  theta=(i-1)*10;
  inputStruct.Load.Type  = [2, 2, 2, 2, 2, 2];
  inputStruct.Load.Value = [cos(theta/180*pi), sin(theta/180*pi), 0, 0, 0, 0];
  for j=1:6
    paramsStruct.Criterion=j;
    L= plate.Laminate(paramsStruct, inputStruct);
    L=L.solve();
    Env(i,j)=min(L.output.Safety.SFmin);
  end
end

% Plot Env
x=0:360/36:360;
Env=mat2cell(Env',ones(1,6));
g=Rplot('x',x','y',Env,'Color',{'MaxStress','MaxStrain','TsaiHill','Hoffman','TasiWu','Hashin'});
g=geom_radar(g);
g=set_title(g,'Ply Eenvelopes');
g=set_names(g,'column','Origin','color','Criterion');
figure('Position',[100 100 800 400]);
draw(g)

参考文献

[1] Practical Micromechanics of Composite Materials


本网站基于Hexo 3-Hexz主题生成。如需转载请标注来源,如有错误请批评指正,欢迎邮件至 392176462@qq.com