Advertisement

材料力学仿真软件:Code_Aster_(10).案例分析与实践

阅读量:

案例分析与实践

在这一节中,我们将通过具体的案例来分析和实践如何使用Code_Aster进行材料力学仿真。这些案例将涵盖从简单的线性弹性问题到复杂的非线性分析,帮助读者更好地理解和掌握Code_Aster的使用方法和技巧。
在这里插入图片描述

案例1:线性弹性梁分析

1.1 问题描述

假设有一根简支梁,长度为10米,高度为0.5米,宽度为0.2米。梁的一端固定,另一端受到集中载荷的作用。我们需要仿真梁的应力和位移分布。

1.2 建立模型

首先,我们需要在Code_Aster中建立梁的几何模型和网格。这里我们使用Gmsh进行几何建模和网格划分。

1.2.1 几何建模

在Gmsh中,创建一个简单的梁模型:

复制代码
    // 梁的长度、高度和宽度
    
    L = 10; // 长度
    
    H = 0.5; // 高度
    
    W = 0.2; // 宽度
    
    
    
    // 创建点
    
    Point(1) = {0, 0, 0, 1.0};
    
    Point(2) = {L, 0, 0, 1.0};
    
    Point(3) = {L, H, 0, 1.0};
    
    Point(4) = {0, H, 0, 1.0};
    
    
    
    // 创建线
    
    Line(1) = {1, 2};
    
    Line(2) = {2, 3};
    
    Line(3) = {3, 4};
    
    Line(4) = {4, 1};
    
    
    
    // 创建面
    
    Line Loop(1) = {1, 2, 3, 4};
    
    Plane Surface(1) = {1};
    
    
    
    // 创建体
    
    Extrude {0, 0, W} {
    
      Surface{1}; Layers{1}; Recombine;
    
    }

保存上述文件为beam.geo,然后使用Gmsh生成网格:

复制代码
    gmsh -3 beam.geo -o beam.msh
1.2.2 导入网格

将生成的网格文件beam.msh导入Code_Aster中。我们使用Salome进行网格文件的导入和处理。

打开Salome。

选择File > Open,打开beam.msh文件。

选择File > Save,将网格文件保存为beam.med格式。

1.3 定义材料属性和边界条件

在Code_Aster中,我们需要定义梁的材料属性和边界条件。

1.3.1 材料属性

假设梁的材料为钢,弹性模量为210 GPa,泊松比为0.3。

复制代码
    # 定义材料属性
    
    E = 210e9  # 弹性模量 (Pa)
    
    nu = 0.3   # 泊松比
    
    rho = 7800 # 密度 (kg/m^3)
    
    
    
    # 创建材料
    
    MAT = DEFI_MATERIAU(
    
    ELAS=_F(E=E, NU=nu)
    
    )
1.3.2 边界条件

固定梁的一端,另一端施加集中载荷。

复制代码
    # 定义边界条件
    
    FIXE = AFFE_CHAR_MECA(
    
    MODI decoded MOD, 
    
    DDL_IMPO=(
    
        _F(GROUP_MA='FixedEnd', DX=0, DY=0, DZ=0, DRX=0, DRY=0, DRZ=0),
    
    )
    
    )
    
    
    
    # 定义载荷
    
    CHARGE = AFFE_CHAR_MECA(
    
    MODI decoded MOD, 
    
    FORCE_NODALE=(
    
        _F(GROUP_NO='LoadPoint', FX=0, FY=-10000, FZ=0),
    
    )
    
    )

1.4 编写Code_Aster输入文件

接下来,我们需要编写Code_Aster的输入文件,主要包括几何模型、材料属性、边界条件和求解设置。

复制代码
    # 导入必要的模块
    
    from code_aster import *
    
    
    
    # 创建模型
    
    MOD = LIRE_MAILLAGE(
    
    FORMAT='MED',
    
    FICHIER='beam.med',
    
    INFO=2
    
    )
    
    
    
    # 定义材料属性
    
    MAT = DEFI_MATERIAU(
    
    ELAS=_F(E=210e9, NU=0.3)
    
    )
    
    
    
    # 定义材料模型
    
    MATER = AFFE_MATERIAU(
    
    MAILLAGE=MOD,
    
    AFFE=(
    
        _F(TOUT='OUI', MATER=MAT),
    
    )
    
    )
    
    
    
    # 定义边界条件
    
    FIXE = AFFE_CHAR_MECA(
    
    MAILLAGE=MOD, 
    
    DDL_IMPO=(
    
        _F(GROUP_MA='FixedEnd', DX=0, DY=0, DZ=0, DRX=0, DRY=0, DRZ=0),
    
    )
    
    )
    
    
    
    # 定义载荷
    
    CHARGE = AFFE_CHAR_MECA(
    
    MAILLAGE=MOD, 
    
    FORCE_NODALE=(
    
        _F(GROUP_NO='LoadPoint', FX=0, FY=-10000, FZ=0),
    
    )
    
    )
    
    
    
    # 定义求解器
    
    MODEL = AFFE_MODELE(
    
    MAILLAGE=MOD,
    
    AFFE=(
    
        _F(TOUT='OUI', MODELISATION='3D'),
    
    )
    
    )
    
    
    
    # 定义线性静态分析
    
    STATIC = STATIQUE(
    
    MODELE=MODEL,
    
    CHAM_MATER=MATER,
    
    CARA_ELEM=_F(TOUT='OUI', GROUP_MA='AllBeams'),
    
    EXCIT=(
    
        _F(CHARGE=FIXE),
    
        _F(CHARGE=CHARGE),
    
    ),
    
    INFO=2
    
    )
    
    
    
    # 定义输出结果
    
    RESU = CALC_CHAMP(
    
    RECU_FORC=int(2),
    
    RESULTAT=STATIC,
    
    CHAM_MATER=MATER,
    
    CARA_ELEM=_F(TOUT='OUI', GROUP_MA='AllBeams'),
    
    INFO=2
    
    )
    
    
    
    # 保存结果
    
    IMPR_RESU(
    
    FORMAT='MED',
    
    RESULTAT=RESU,
    
    FICHIER='beam_results'
    
    )

1.5 运行仿真

将上述输入文件保存为beam_aster.py,然后使用Code_Aster运行仿真:

复制代码
    as_run --all beam_aster.py

1.6 结果分析

运行完成后,结果将保存在beam_results.med文件中。我们可以在Salome中打开该文件,查看梁的应力和位移分布。

打开Salome。

选择File > Open,打开beam_results.med文件。

选择Study > New Mesh, 选择beam_results中的网格。

选择Mesh > Show,查看网格。

选择Result > Show, 选择beam_results中的结果,查看应力和位移分布。

案例2:非线性接触分析

2.1 问题描述

假设有一个平板与一个球体接触,平板受到垂直向下的力作用,球体固定不动。我们需要仿真接触面的应力和位移分布。

2.2 建立模型

2.2.1 几何建模

在Gmsh中,创建一个平板和一个球体的模型:

复制代码
    // 平板的尺寸
    
    L = 10; // 长度
    
    W = 2;  // 宽度
    
    T = 0.1; // 厚度
    
    
    
    // 球体的半径
    
    R = 1;
    
    
    
    // 创建平板
    
    Point(1) = {0, 0, 0, 1.0};
    
    Point(2) = {L, 0, 0, 1.0};
    
    Point(3) = {L, W, 0, 1.0};
    
    Point(4) = {0, W, 0, 1.0};
    
    
    
    Line(1) = {1, 2};
    
    Line(2) = {2, 3};
    
    Line(3) = {3, 4};
    
    Line(4) = {4, 1};
    
    
    
    Line Loop(1) = {1, 2, 3, 4};
    
    Plane Surface(1) = {1};
    
    
    
    Extrude {0, 0, T} {
    
      Surface{1}; Layers{1}; Recombine;
    
    }
    
    
    
    // 创建球体
    
    Point(5) = {L/2, W/2, R, 1.0};
    
    Sphere(2) = {L/2, W/2, 0, R, 2*Pi, Pi, 2*Pi};
    
    
    
    // 创建接触面
    
    Physical Surface(1) = {1};
    
    Physical Volume(2) = {2};

保存上述文件为contact.geo,然后使用Gmsh生成网格:

复制代码
    gmsh -3 contact.geo -o contact.msh
2.2.2 导入网格

将生成的网格文件contact.msh导入Code_Aster中。我们使用Salome进行网格文件的导入和处理。

打开Salome。

选择File > Open,打开contact.msh文件。

选择File > Save,将网格文件保存为contact.med格式。

2.3 定义材料属性和边界条件

在Code_Aster中,我们需要定义平板和球体的材料属性和边界条件。

2.3.1 材料属性

假设平板的材料为铝,弹性模量为70 GPa,泊松比为0.33。球体的材料为钢,弹性模量为210 GPa,泊松比为0.3。

复制代码
    # 定义材料属性
    
    E_ALU = 70e9  # 铝的弹性模量 (Pa)
    
    nu_ALU = 0.33 # 铝的泊松比
    
    rho_ALU = 2700 # 铝的密度 (kg/m^3)
    
    
    
    E_STEEL = 210e9  # 钢的弹性模量 (Pa)
    
    nu_STEEL = 0.3   # 钢的泊松比
    
    rho_STEEL = 7800 # 钢的密度 (kg/m^3)
    
    
    
    # 创建材料
    
    MAT_ALU = DEFI_MATERIAU(
    
    ELAS=_F(E=E_ALU, NU=nu_ALU)
    
    )
    
    
    
    MAT_STEEL = DEFI_MATERIAU(
    
    ELAS=_F(E=E_STEEL, NU=nu_STEEL)
    
    )
2.3.2 边界条件

固定球体,平板受到垂直向下的力作用。

复制代码
    # 定义边界条件
    
    FIXE = AFFE_CHAR_MECA(
    
    MAILLAGE=MOD, 
    
    DDL_IMPO=(
    
        _F(GROUP_MA='Sphere', DX=0, DY=0, DZ=0, DRX=0, DRY=0, DRZ=0),
    
    )
    
    )
    
    
    
    # 定义载荷
    
    CHARGE = AFFE_CHAR_MECA(
    
    MAILLAGE=MOD, 
    
    FORCE_NODALE=(
    
        _F(GROUP_NO='PlateLoad', FX=0, FY=0, FZ=-5000),
    
    )
    
    )

2.4 编写Code_Aster输入文件

接下来,我们需要编写Code_Aster的输入文件,主要包括几何模型、材料属性、边界条件和求解设置。

复制代码
    # 导入必要的模块
    
    from code_aster import *
    
    
    
    # 创建模型
    
    MOD = LIRE_MAILLAGE(
    
    FORMAT='MED',
    
    FICHIER='contact.med',
    
    INFO=2
    
    )
    
    
    
    # 定义材料属性
    
    MAT_ALU = DEFI_MATERIAU(
    
    ELAS=_F(E=70e9, NU=0.33)
    
    )
    
    
    
    MAT_STEEL = DEFI_MATERIAU(
    
    ELAS=_F(E=210e9, NU=0.3)
    
    )
    
    
    
    # 定义材料模型
    
    MATER = AFFE_MATERIAU(
    
    MAILLAGE=MOD,
    
    AFFE=(
    
        _F(TOUT='OUI', GROUP_MA='Plate', MATER=MAT_ALU),
    
        _F(TOUT='OUI', GROUP_MA='Sphere', MATER=MAT_STEEL),
    
    )
    
    )
    
    
    
    # 定义边界条件
    
    FIXE = AFFE_CHAR_MECA(
    
    MAILLAGE=MOD, 
    
    DDL_IMPO=(
    
        _F(GROUP_MA='Sphere', DX=0, DY=0, DZ=0, DRX=0, DRY=0, DRZ=0),
    
    )
    
    )
    
    
    
    # 定义载荷
    
    CHARGE = AFFE_CHAR_MECA(
    
    MAILLAGE=MOD, 
    
    FORCE_NODALE=(
    
        _F(GROUP_NO='PlateLoad', FX=0, FY=0, FZ=-5000),
    
    )
    
    )
    
    
    
    # 定义接触面
    
    CONTACT = AFFE_GROUP(
    
    MAILLAGE=MOD,
    
    GROUP_MA=_F(NOM='ContactFace', GROUP_MA='PlateBottom')
    
    )
    
    
    
    # 定义非线性静态分析
    
    STATIC = STATIQUE(
    
    MODELE=MODEL,
    
    CHAM_MATER=MATER,
    
    CARA_ELEM=_F(TOUT='OUI', GROUP_MA='AllBeams'),
    
    EXCIT=(
    
        _F(CHARGE=FIXE),
    
        _F(CHARGE=CHARGE),
    
    ),
    
    CONTACT=_F(
    
        GROUP_MA=CONTACT,
    
        TYPE_CONTACT='DEPLACEMENT',
    
        FROTTEMENT='Coulomb',
    
        COEF_FROT=0.3
    
    ),
    
    INFO=2
    
    )
    
    
    
    # 定义输出结果
    
    RESU = CALC_CHAMP(
    
    RECU_FORC=int(2),
    
    RESULTAT=STATIC,
    
    CHAM_MATER=MATER,
    
    CARA_ELEM=_F(TOUT='OUI', GROUP_MA='AllBeams'),
    
    INFO=2
    
    )
    
    
    
    # 保存结果
    
    IMPR_RESU(
    
    FORMAT='MED',
    
    RESULTAT=RESU,
    
    FICHIER='contact_results'
    
    )

2.5 运行仿真

将上述输入文件保存为contact_aster.py,然后使用Code_Aster运行仿真:

复制代码
    as_run --all contact_aster.py

2.6 结果分析

运行完成后,结果将保存在contact_results.med文件中。我们可以在Salome中打开该文件,查看平板和球体的应力和位移分布。

打开Salome。

选择File > Open,打开contact_results.med文件。

选择Study > New Mesh, 选择contact_results中的网格。

选择Mesh > Show,查看网格。

选择Result > Show, 选择contact_results中的结果,查看应力和位移分布。

案例3:热-力耦合分析

3.1 问题描述

假设有一个圆柱体,受到外部热源的影响,同时承受轴向载荷。我们需要仿真圆柱体的温度分布和应力分布。

3.2 建立模型

3.2.1 几何建模

在Gmsh中,创建一个圆柱体的模型:

复制代码
    // 圆柱的尺寸
    
    R = 1; // 半径
    
    H = 10; // 高度
    
    
    
    // 创建圆柱
    
    Point(1) = {0, 0, 0, 1.0};
    
    Point(2) = {0, 0, H, 1.0};
    
    
    
    Circle(1) = {1, 0, 0, R, 2*Pi, 0};
    
    Rotate {{0, 0, 1}, {0, 0, 0}, H} {
    
      Curve{1}; 
    
    }
    
    
    
    Line Loop(1) = {1, 2};
    
    Surface(1) = {1};
    
    
    
    Extrude {0, 0, H} {
    
      Surface{1}; Layers{1}; Recombine;
    
    }
    
    
    
    // 创建接触面
    
    Physical Surface(1) = {1};
    
    Physical Volume(2) = {2};

保存上述文件为cylinder.geo,然后使用Gmsh生成网格:

复制代码
    gmsh -3 cylinder.geo -o cylinder.msh
3.2.2 导入网格

将生成的网格文件cylinder.msh导入Code_Aster中。我们使用Salome进行网格文件的导入和处理。

打开Salome。

选择File > Open,打开cylinder.msh文件。

选择File > Save,将网格文件保存为cylinder.med格式。

3.3 定义材料属性和边界条件

在Code_Aster中,我们需要定义圆柱体的材料属性和边界条件。

3.3.1 材料属性

假设圆柱体的材料为铜,弹性模量为110 GPa,泊松比为0.33,热导率为385 W/(m·K),比热容为385 J/(kg·K),密度为8960 kg/m^3。

复制代码
    # 定义材料属性
    
    E_CU = 110e9  # 铜的弹性模量 (Pa)
    
    nu_CU = 0.33  # 铜的泊松比
    
    rho_CU = 8960 # 铜的密度 (kg/m^3)
    
    lambda_CU = 385  # 铜的热导率 (W/(m·K))
    
    Cp_CU = 385     # 铜的比热容 (J/(kg·K))
    
    
    
    # 创建材料
    
    MAT_CU = DEFI_MATERIAU(
    
    ELAS=_F(E=E_CU, NU=nu_CU),
    
    THER=_F(TC=1/lambda_CU, RHO=rho_CU, CP=Cp_CU)
    
    )

3.3.2 边界条件

固定圆柱体的一端,另一端施加轴向载荷。同时,圆柱体的侧面受到外部热源的影响。

复制代码
    # 定义边界条件
    
    FIXE = AFFE_CHAR_MECA(
    
    MAILLAGE=MOD, 
    
    DDL_IMPO=(
    
        _F(GROUP_MA='FixedEnd', DX=0, DY=0, DZ=0, DRX=0, DRY=0, DRZ=0),
    
    )
    
    )
    
    
    
    # 定义载荷
    
    CHARGE = AFFE_CHAR_MECA(
    
    MAILLAGE=MOD, 
    
    FORCE_NODALE=(
    
        _F(GROUP_NO='LoadPoint', FX=0, FY=0, FZ=-10000),
    
    )
    
    )
    
    
    
    # 定义热边界条件
    
    HEAT = AFFE_CHAR_THER(
    
    MAILLAGE=MOD,
    
    FLUX_IMPO=(
    
        _F(GROUP_MA='CylinderSide', FLUX=1000),  # 侧面热流 (W/m^2)
    
    )
    
    )

3.4 编写Code_Aster输入文件

接下来,我们需要编写Code_Aster的输入文件,主要包括几何模型、材料属性、边界条件和求解设置。

复制代码
    # 导入必要的模块
    
    from code_aster import *
    
    
    
    # 创建模型
    
    MOD = LIRE_MAILLAGE(
    
    FORMAT='MED',
    
    FICHIER='cylinder.med',
    
    INFO=2
    
    )
    
    
    
    # 定义材料属性
    
    MAT_CU = DEFI_MATERIAU(
    
    ELAS=_F(E=110e9, NU=0.33),
    
    THER=_F(TC=1/385, RHO=8960, CP=385)
    
    )
    
    
    
    # 定义材料模型
    
    MATER = AFFE_MATERIAU(
    
    MAILLAGE=MOD,
    
    AFFE=(
    
        _F(TOUT='OUI', MATER=MAT_CU),
    
    )
    
    )
    
    
    
    # 定义边界条件
    
    FIXE = AFFE_CHAR_MECA(
    
    MAILLAGE=MOD, 
    
    DDL_IMPO=(
    
        _F(GROUP_MA='FixedEnd', DX=0, DY=0, DZ=0, DRX=0, DRY=0, DRZ=0),
    
    )
    
    )
    
    
    
    # 定义载荷
    
    CHARGE = AFFE_CHAR_MECA(
    
    MAILLAGE=MOD, 
    
    FORCE_NODALE=(
    
        _F(GROUP_NO='LoadPoint', FX=0, FY=0, FZ=-10000),
    
    )
    
    )
    
    
    
    # 定义热边界条件
    
    HEAT = AFFE_CHAR_THER(
    
    MAILLAGE=MOD,
    
    FLUX_IMPO=(
    
        _F(GROUP_MA='CylinderSide', FLUX=1000),  # 侧面热流 (W/m^2)
    
    )
    
    )
    
    
    
    # 定义热分析
    
    THER = THERMIQUE(
    
    MODELE=MODEL,
    
    CHAM_MATER=MATER,
    
    EXCIT=(
    
        _F(CHARGE=HEAT),
    
    ),
    
    INFO=2
    
    )
    
    
    
    # 定义热-力耦合分析
    
    COUP = MECA_THERM(
    
    MODELE=MODEL,
    
    CHAM_MATER=MATER,
    
    CARA_ELEM=_F(TOUT='OUI', GROUP_MA='AllBeams'),
    
    EXCIT=(
    
        _F(CHARGE=FIXE),
    
        _F(CHARGE=CHARGE),
    
        _F(CHARGE=THER),
    
    ),
    
    INFO=2
    
    )
    
    
    
    # 定义输出结果
    
    RESU = CALC_CHAMP(
    
    RECU_FORC=int(2),
    
    RESULTAT=COUP,
    
    CHAM_MATER=MATER,
    
    CARA_ELEM=_F(TOUT='OUI', GROUP_MA='AllBeams'),
    
    INFO=2
    
    )
    
    
    
    # 保存结果
    
    IMPR_RESU(
    
    FORMAT='MED',
    
    RESULTAT=RESU,
    
    FICHIER='cylinder_results'
    
    )

3.5 运行仿真

将上述输入文件保存为cylinder_aster.py,然后使用Code_Aster运行仿真:

复制代码
    as_run --all cylinder_aster.py

3.6 结果分析

运行完成后,结果将保存在cylinder_results.med文件中。我们可以在Salome中打开该文件,查看圆柱体的温度分布和应力分布。

打开Salome。

选择File > Open,打开cylinder_results.med文件。

选择Study > New Mesh, 选择cylinder_results中的网格。

选择Mesh > Show,查看网格。

选择Result > Show, 选择cylinder_results中的结果,查看温度分布和应力分布。

3.7 讨论

通过这个案例,我们可以看到热-力耦合分析在Code_Aster中的实现方式。热分析和力分析的结合不仅能够仿真温度场的变化,还能计算由于温度变化引起的应力分布。这对于许多工程问题,如热处理、热应力分析等,具有重要意义。

3.7.1 温度分布

在Salome中查看温度分布时,可以观察到圆柱体侧面的温度变化。由于热源的作用,侧面的温度会逐渐升高,而内部的温度会相对较低。

3.7.2 应力分布

在Salome中查看应力分布时,可以观察到由于温度变化和轴向载荷的共同作用,圆柱体内部的应力分布情况。特别是接触面和固定端的应力集中情况,可以帮助我们评估圆柱体的结构安全性。

3.8 进一步扩展

这个案例可以进一步扩展,例如:

时间依赖分析 :考虑热源随时间变化的情况,进行瞬态热-力耦合分析。

多材料分析 :考虑圆柱体由不同材料组成,分析不同材料之间的热-力耦合效应。

更复杂的几何模型 :考虑更复杂的几何形状,如带有孔洞的圆柱体,分析孔洞对温度和应力分布的影响。

通过这些扩展,读者可以更深入地了解Code_Aster在处理复杂工程问题时的能力和灵活性。

总结

通过上述三个案例,我们详细介绍了如何使用Code_Aster进行材料力学仿真,包括线性弹性分析、非线性接触分析和热-力耦合分析。每个案例都涵盖了从几何建模到网格划分、材料属性定义、边界条件设置、求解设置以及结果分析的完整过程。希望这些案例能够帮助读者更好地理解和掌握Code_Aster的使用方法和技巧,为实际工程问题的仿真提供有力支持。

全部评论 (0)

还没有任何评论哟~