Abaqus子程序:基础知识概述2

1 前言

上次在子程序开发的基础知识中介绍了程序的主要组成部分和编写思路,Abaqus子程序:基础知识概述1

2 根据零件实例的装配定义的模型

 Abaqus 模型可以根据零件实例的装配来定义

(1)参考坐标系

尽管每个零件实例可以定义一个局部坐标系统,但所有变量(例如当前坐标)都是在全局坐标系统中传递给用户子程序的,而不是在局部坐标系统中。唯一的例外是当用户子程序接口明确指示某个变量位于用户定义的局部坐标系统中。局部坐标系统最初可能是相对于零件坐标系统定义的,但根据给定的零件实例的定位数据进的坐标系统定义是用户子程序中使用的局部方向的定义。行了转换。因此,相对于装配(全局)坐标系统创建了一个新的局部坐标系统。

(2)节点和单元编号

传递给用户子程序的节点和单元编号是由Abaqus生成的内部编号。这些编号是全局性质的,所有内部节点和单元编号都是唯一的。如果需要原始编号和零件实例名称,可以在用户子程序中调用实用子程序GETPARTINFO(Abaqus/Standard)或VGETPARTINFO(Abaqus/Explicit)。调用这些例程的开销并不是微不足道的,因此建议尽量减少使用。

另一个实用子程序GETINTERNAL(Abaqus/Standard)或VGETINTERNAL(Abaqus/Explicit)可用于检索与给定零件实例名称和局部编号对应的内部节点或单元编号。

(3)集合和表面名称

在传递给用户子程序的集合和面名称中,总是以装配体和零件实例名称作为前缀,用下划线分隔。例如,一个属于装配体 Assembly1 中的零件实例 Part1-1 的名为 surf1 的面,在传递给用户子程序时将被命名为 Assembly1_Part1-1_surf1。

Assembly1_Part1-1_surf1

3 依赖于解的状态变量

依赖于解的状态变量是可以定义为随着分析的解而演变的值。

(1)定义和更新的子程序

在以下用户子例程中可以使用任意数量的与解相关的状态变量:

CREEP

FRIC FRIC

FRIC_COEF

HETVAL

UANISOHYPER_INV

UANISOHYPER_STRAIN

UEL

UEXPAN

UGENS

UHARD

UHYPER

UINTER

UMAT

UMATHT

UMULLINS

USDFLD

UTRS  UTRS

VFABRIC

VFRIC  VFRIC

VFRICTION

VHETVAL

VUANISOHYPER_INV

VUANISOHYPER_STRAIN

VUFLUIDEXCH

VUHARD

VUINTER

VUINTERACTION

VUMAT

VUMATHT

VUMULLINS

VUSDFLD

VUTRS

VUVISCOSITY

VWAVE

状态变量可以定义为这些子程序中出现的任何其他变量的函数,并且可以相应地更新。依赖于解的状态变量不应与场变量混淆,场变量在本构程序中也可能需要,并且可以随时间变化;场变量在预定义场中详细讨论。

VFRIC 、 VUINTER 、 VFRICTION 和 VUINTERACTION 中使用的依赖于解的状态变量被定义在从节点(从面节点)处的状态变量,并使用其他接触变量进行更新。

(2)为解依赖的状态变量分配空间

必须在每个适用的积分点或接触从节点处为每个与解依赖的状态变量分配空间。

这里已经确定了不同的用户子程序组,它们在定义解相关状态变量的方式上存在差异。下面对这些组进行了描述。解依赖状态变量可以在同一组的子程序之间共享,但不能在属于不同组的子程序之间共享。

  输入文件用法

① 对于大多数子程序,积分点或节点处所需的此类变量的数量作为 DEPVAR 选项的第一个数据行上的唯一值输入,该选项应作为每种材料的材料定义的一部分包含在内,其中依赖于解的状态变量应考虑:

*DEPVAR

② 对于不使用通过 MATERIAL 选项定义的材料行为的子程序,不使用 DEPVAR 选项。

对于子程序 UEL :

USER ELEMENT, VARIABLES=number of variables

对于子程序 UGENS :

SHELL GENERAL SECTION, USER, VARIABLES=number of variables

对于子程序 FRIC 和 VFRIC :

FRICTION, USER, DEPVAR=number of variables

对于子程序 UINTER 和 VUINTER :

SURFACE INTERACTION, USER, DEPVAR=number of variables

对于子程序 VFRICTION :

FRICTION, USER=FRICTION, DEPVAR=number of variables

对于子程序 VUFLUIDEXCH :

FLUID EXCHANGE PROPERTY, TYPE=USER, DEPVAR=number of variables

对于子程序 VUINTERACTION :

SURFACE INTERACTION, USER=INTERACTION, DEPVAR=number of variables

对于子程序 VWAVE :

WAVE, TYPE=USER, DEPVAR=number of variables

CAE界面用法

对于大多数子程序,需要在每个材料的材料定义中输入在点或节点处所需的这些变量的数量,以考虑依赖于解的状态变量。

属性模块: material edit——General——Depvar—— Number of solution-dependent state variables

(3)定义初值

可以直接定义解依赖状态变量场的初始值,也可以通过用户子程序在Abaqus/Standard 中定义。Abaqus/Explicit 中接触或用户子程序 VWAVE 的解依赖的状态变量的初始值在内部分配为零。

① 直接定义初始值

可以以表格格式定义元素和/或元素集的初始值。输入文件使用方法如下:

INITIAL CONDITIONS, TYPE=SOLUTION

② 在Abaqus/Standard 中的用户子例程中定义初始值

对于 Abaqus/Standard 中的复杂情况,你可以调用用户子程序 SDVINI,以便在变量场的定义中使用对坐标、单元编号等的依赖关系。输入文件使用方法如下:

INITIAL CONDITIONS, TYPE=SOLUTION, USER

(4)由解依赖状态变量控制的元素删除

如果在分析中定义了由状态变量控制的元素删除,那么控制删除标志的状态变量的值可以由使用状态变量的任何用户子例程进行修改,前提是用户子程序在材料点处被调用。

(5)输出

用户定义的、依赖于解的状态变量可以写入数据(.dat)文件、输出数据库(.odb)文件和结果(.fil)文件;输出标识符 SDV 和 SDVn 可用作元素积分点变量。这些变量的输出不可用于用户子程序VFRIC、VUINTER、VFRICTION、VUINTERACTION 和 VWAVE 。

4 元素解依赖变量

 单元的解依赖变量是可以在每个适用的单元处定义的值,以便随着 Abaqus/Standard 分析的解而演变。单元解依赖变量不同于解依赖状态变量,后者在每个适用的积分点或节点处定义

1)定义和更新的子程序

在以下用户子程序中可以使用任意数量的单元解依赖变量:

UEPACTIVATIONFACET

UEPACTIVATIONVOL

UMDFLUX UMD

单元的解依赖变量可以定义为这些子程序中出现的任何其他变量的函数,并且可以相应地更新。依赖于解的状态变量不应与场变量混淆,场变量在本构程序中也可能需要,并且可以随时间变化;场变量在预定义场中详细讨论。

2)为与解依赖的状态变量分配空间

你需要为每个适用的单元分配空间以容纳单元解依赖变量。在每个分配中,需要指定每个单元所需的单元解依赖变量的数量。还可以选择性地为某些或所有变量指定用户定义的输出键和描述。这个分配应该与单元截面定义结合使用,单元截面定义为需要考虑单元解依赖变量的单元的截面属性。

输入文件用法

使用以下选项为 shell 单元中的单元解依赖变量分配空间:

SHELL SECTION, ELSET=shell_set_nameELEMENT SOLUTION-DEPENDENT VARIABLES

使用以下选项为实体单元中单元解依赖变量分配空间:

SOLID SECTION, ELSET=solid_set_nameELEMENT SOLUTION-DEPENDENT VARIABLES

Abaqus/CAE用法
Abaqus/CAE 不支持定义单元解依赖变量。

3)定义初值

您可以以表格格式为单元和/或单元集定义单元解相关变量的初始值。

输入文件使用

INITIAL CONDITIONS, TYPE=ESDV

Abaqus/CAE 用法
Abaqus/CAE 不支持定义单元解依赖变量的初始值。

4)由解依赖状态变量控制的元素删除

在应力/位移分析过程中,可以通过 Abaqus/Standard 中与单元解依赖的变量来控制网格中的单元删除。删除的单元无法承载应力,因此对模型的刚度没有贡献。你指定控制单元删除标志的单元解依赖的变量号。删除变量可以设置为值 1 或0。值 1 表示该单元处于活动状态,而值0表示Abaqus应通过将应力设置为零来从模型中删除该单元。删除变量在分析开始时被初始化为值1。该初始值可以被用户指定的初始条件值覆盖。一旦元素被标记为已删除,就无法重新激活。可以通过请求变量 STATUS 的输出来确定元素的状态。如果元素处于活动状态,则该变量等于1;如果元素被删除,则该变量等于 0

5)输出

单元解依赖的变量可以写入输出数据库(.odb)文件;输出标识符 ESDV 和 ESDVn 可用作整个单元变量。

5 Abaqus/Explicit 中的精度

Abaqus/Explicit安装了单精度和双精度可执行文件。要使用双精度可执行文件,在运行分析时必须指定双精度。以字母a到h和o到z开头的用户子程序中的所有变量将自动与所运行的可执行文件的精度相对应。可执行文件的精度在vaba_param.inc文件中定义,因此不需要显式定义变量的精度。

6 实用程序

有各种实用程序可用于辅助编写用户子程序。可以将实用程序包含在用户子程序中。当调用时,实用程序将执行预定义的功能或操作,其输出或结果可以集成到用户子程序中。某些实用程序仅适用于特定的用户子程序。每个实用程序在《常规实用程序》中都有详细介绍。

下公用程序需要使用由Abaqus提供的变量,这些变量从调用它们的用户子例程传入:

GETNODETOELEMCONN

GETVRM

GETVRMAVGATNODE

GETVRN

IGETSENSORID IGETSensorID

IVGETSENSORID IVGETSensorID

MATERIAL_LIB_MECH MATERIAL_LIB_MECH

MATERIAL_LIB_HT MATERIAL_LIB_HT

这些变量在传递到你的用户子程序时将被正确定义;不能修改变量或创建在实用程序中使用替代的变量。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
对于学习 Abaqus 子程序,你可以按照以下步骤进行: 1. 熟悉 Abaqus 宏命令语言(Abaqus Scripting Interface):子程序是通过宏命令编写的,因此了解宏命令语言对于学习子程序至关重要。你可以查阅 Abaqus 提供的宏命令语言文档,并阅读相关教程和示例代码。 2. 了解 Abaqus 子程序的工作原理:子程序是用于扩展 Abaqus 功能的用户自定义代码。它们可以用于自定义材料模型、边界条件、加载等。了解子程序的工作原理将帮助你理解如何编写和使用它们。 3. 学习子程序的编写和调试:编写子程序需要具备一定的编程知识和经验。你可以选择使用 Fortran 或 C/C++ 作为编程语言,并使用适当的开发环境(如 Visual Studio)来编写和调试你的代码。Abaqus 提供了一些示例子程序供参考。 4. 运行和验证子程序:在编写完成子程序后,你可以将其编译为动态链接库,并将其与 Abaqus 软件集成。通过定义材料参数、加载条件等,你可以在 Abaqus 中使用和验证你的子程序。 5. 深入学习和应用:一旦你掌握了基本的子程序编写技巧,你可以进一步学习和应用高级的子程序技术,如用户自定义本构模型、接触算法等。 需要注意的是,学习 Abaqus 子程序需要具备一定的数学、力学和编程基础。如果你刚开始学习 Abaqus,建议先掌握软件的基本功能和使用方法,然后再逐步学习和应用子程序

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冬生亦东生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值