周英杰 陆旭泽 张盛 陈玉震 陈飙松
摘要: 针对复杂环境和加载条件下的材料本构模型,参照Abaqus所提供的用户材料子程序UMAT接口,实现基于SiPESC平台弹塑性分析功能的UMAT本构模型插件封装及调用.采用C++面向对象程序设计方法编制inp文件读取功能插件,实现Abaqus计算模型向SiPESC平台数据库的导入.将不同UMAT单独编译成动态库,同时利用工厂设计模式,实现不同材料本构模型的动态替换和调用.该设计模式可方便添加本构模型,具有一定的通用性、开放性和可扩展性.数值算例的验证表明基于SiPESC平台的UMAT的有效性.
关键词: UMAT; SiPESC; 本构模型; 动态链接库; 工厂模式
中图分类号: TB115文献标志码: B
Implementation of userdefined mechanical material behavior
subroutine UMAT based on SiPESC platform
ZHOU Yingjie, LU Xuze, ZHANG Sheng, CHEN Yuzhen, CHEN Biaosong
(a. Department of Engineering Mechanics; b. State Key Laboratory of Structural Analysis and Industrial Equipment;
Dalian University of Technology, Dalian 116023, Liaoning, China)
Abstract: As to the constitutive models of material in complex loading condition and environment and referring to the userdefined mechanical material behavior subroutine UMAT interface in Abaqus, the plugins for various UMAT constitutive models are packaged on basis of the elastoplastic analysis function on SiPESC platform and can be called. According to the objectoriented program method in C++, the reading plugin for inp document is implemented and the Abaqus models can be imported into SiPESC database. The different UMAT subroutines are compiled as the dynamic link libraries, and the different material constitutive models are replaced and called dynamically by factory pattern. The constitutive models can be easily added in this design pattern, which has a certain universality, openness and extensibility. The numerical examples demonstrate the effectiveness of the UMAT based on SiPESC platform.
Key words: UMAT; SiPESC; constitutive model; dynamic link library; factory pattern
0引言
随着计算机和数值仿真方法的快速发展,有限元软件的功能和计算效率也得到快速发展.目前主流的通用有限元商业软件有ANSYS,Abaqus和MSC等.很多有限元软件都提供二次开发接口,以帮助用户实现针对特定问题的求解.随着对复杂环境和加载条件下材料性能研究的深入,通用有限元软件中已存在的材料模型已经无法满足研究者对问题的求解需要.针对这一问题,Abaqus提供用户材料子程序UMAT,帮助用户定义特定的材料本构模型和算法.因此,开发一些特定本构或计算问题的UMAT子程序成为实现数值模拟的途径之一.杨曼娟[1]采用基于Rankine准则的MohrCoulomb模型UMAT,改进原模型的解决对材料抗拉强度过高估计的问题.韩丁等[2]通过实验提出土工格栅本构模型,利用UMAT模拟长期蠕变变形趋势.唐菁菁[3]开发织物细观本构模型的UMAT,模拟不同载荷下织物的非线性变形.贾善坡等[4]考虑最大拉应力修正MohrCoulomb本构模型,采用向后欧拉隐式积分编写UMAT,模拟单轴拉伸试验和三轴压缩试验.上述工作主要基于Abaqus平台开发UMAT.由于Abaqus对UMAT格式要求比较严格,其提供的接口也有一定限制,例如运行状态信息只能在限定的通道内输出,多个用户自定义材料只能定义在一个UMAT中.本文主要基于开放式有限元平台SiPESC集成UMAT,实现更加通用的接口和灵活的材料子程序调用.
SiPESC软件平台的特点是开放性和可扩展性,不仅可以让用户使用和配置平台系统,还可以在平台的基础上开发新的功能模块.[5]利用UMAT相对于Abaqus主程序的独立性,可将UMAT集成于SiPESC系统.
SiPESC系统集成UMAT有如下优势:
(1)动态集成已有UMAT程序,在不增加工作量的前提下,大大丰富SiPESC平台的材料库;
(2)熟悉UMAT编程的用户,无须再学习SiPESC平台的插件编程即可参与平台材料本构的开发工作;
(3)与Abaqus相比,SiPESC平台的动态性和开放性使其可以更加灵活地运用UMAT进行分析,实现多种材料、多个UMAT库的同时集成.
将UMAT编译成动态库,利用inp导入插件将模型文件导入SiPESC数据库中,通过UMAT封装插件实现子程序动态库函数利用传入的应力增量更新应力增量、状态变量和雅可比矩阵,供平台有限元求解.
1Abaqus的UMAT以及SiPESC平台
1.1Abaqus及其UMAT
Abaqus可以解决从相对简单的线性分析到复杂的非线性模拟等各种问题.[6]Abaqus的丰富材料库和单元库可以模拟绝大多数的形状和大多数工程材料.对于某些材料本构模型,研究者对其进行修正,例如周凤玺等[7]提出广义DruckerPrager强度准则,该模型在数值分析中有相对较好的收敛性,而Abaqus的现有材料库无法实现.
为满足类似上述情况的需求,Abaqus不仅提供标准的有限元计算程序,其还提供UMAT接口.Abaqus允许用户通过UMAT来扩展主程序的功能.在Abaqus 6.13.4中,Standard共支持57个UMAT接口,Explicit共支持23个UMAT.除UMAT之外,Abaqus 6.13.4还提供22个实用程序,通过在UMAT中调用这些应用程序,可以实现诸如获取模型的参数、求应力和应变的不变量等功能.
通过UMAT,可以定义任何材料模型,任意数量的材料常数均可被程序读取,而且对任意数量的与解相关的状态变量的每一个计数点,Abaqus都提供存储功能,供子程序使用.
UMAT一般使用FORTRAN语言编写,也支持C和C++语言.在一个算例中,用户可以采用多个UMAT,但必须编写在一个for文件中,可扩展性和灵活性受很大限制.
ANSYS等其他商用软件也提供用户材料自定义接口,但是特定软件对UMAT的格式有特定的限定.关云飞等[8]基于ANSYS开发修正剑桥模型.ANSYS提供用户自定义材料本构的接口USERMAT,该接口的输入和输出数据与Abaqus的UMAT类似,输入量为开始时的总应力、总应变、等效塑性应变和应变增量等基本信息,输出量为载荷步结束时高斯积分点的总应力和等效塑性应变的刚度矩阵等.但是,ANSYS自定义材料程序中的参数和变量名必须与标准的ANSYS程序源代码一致,因此理论上讲经过修改过后的UMAT可用于ANSYS的用户材料定义.
UMAT的作用是更新应力和刚度矩阵,与通用CAE软件中材料模型的作用相同.本文所做的工作是将这部分功能通过子程序的方式集成到SiPESC平台上,可独立于平台开发,并利用工厂模式实现对子程序的动态调用,降低CAE软件开发的耦合度.
1.2SiPESC平台
SiPESC是由大连理工大学运载工程学部/工业装备结构分析国家重点实验室研究开发的软件系统,是面向大规模工程计算、采用开放式软件构架构建的通用软件平台.
SiPESC基于“平台(微核心)+插件”的设计模式,所有功能均由插件实现,具有可扩展,可维护,可重用以及动态加载和卸载灵活等优点.其软件体系见图1.
2inp文件导入插件实现
2.1inp文件及其格式
Abaqus整个分析流程主要分为3部分:前处理、有限元计算和后处理.前处理与有限元计算之间利用inp文件连接.inp文件中包含数值计算所需要的全部数据.
inp由模型数据和历史数据组成,文件数据结构见图2.几何数据和材料定义是必要模型数据,其他数据根据有限元分析的需求添加,为可选数据模型,其中包括:部件和组合、初始条件、边界条件、运动约束、相互作用、振幅定义、输出控制、环境特性和UMAT等.历史数据用于定义分析类型、载荷以及输出要求等.
2.2inp导入插件设计和实现
inp文件通过关键字定义数据,必要的模型数据关键字已完成导入,可选数据模型应根据用户需求创建,因此导入插件的设计必须是动态的、可扩展的.插件首先需要实现对必要数据的导入,搭建起整体框架,在此基础上可根据用户需求扩展特定功能.
读取文件的流程见图3.整个流程中最重要的是流程总控DataImport,文件读取EntryReader和关键字段处理EntryHandler这3部分.DataImport控制整个流程,包括创建EntryReader,文件初始化,数据库文件定义及后处理.EntryReader主要实现对文件的读取,根据文件格式实现关键字读取、换行操作和获取有效信息等.EntryHandler对有效信息进行处理并保存.每个EntryHandler只处理特定关键字信息,通过关键字利用工厂模式[910]实现动态创建,方便后期添加新关键字,即无须对已有代码进行修改,只需实现相应的工厂和EntryHandler即可.在读取到该关键字时,程序自动判断是否已存在该关键字的处理Entryhandler,若已经存在,则利用工厂模式创建,体现灵活性和可扩展性.通过inp文件导入插件的InpDataImport类,InpEntryReader类和EntryHandler基类.InpDataImport类主要接口有2个,见图4.initialize用于初始化; import用于传入文件名,开始导入流程.
输入文件*Heading
**Job name: Job1 Model name: Model1
*Peprint, echo=NO, model=NO, history=NO, contact=NO定义Job名,Model名,Preprint设置**PARTS
*Part, name=Part1
*Node
*Element, type=C3D8
*Nset...
*Elset...
**Section: Section1
*End PartPARTS数据块:定义部件信息.对于非独立部件,定义部件的节点、单元、节点集合、单元集合、Section信息.若为独立部件则不在此处定义.**ASSEMBLY
*Assembly, name=Assembly
*Instance, name=Insatnce1, Part=Part1
*End Instance
*Nset…
*Elset…ASSEMBLY数据块;
在该数据块中定义实例;
载荷,边界条件相关的集合;面等其他信息.其中若为独立部件则在实例中定义节点、单元、Section等信息.**MATERIALS
*Material, name=Steel
*Elastic
210000., 0.3
…MATERIALS数据块定义:定义模型材料.包括弹性模量、泊松比、塑性属性等,可定义多个材料数据**BOUNDARY CONDITIONS
**Name: BC1 Type: Symmetry
*Bounday
_PickedSet 5, XSYMMBOUNDARY CONDITIONS数据块定义:定义边界条件,设定边界条件类型、参数.可设置多个边界条件**STEP: Step1
*Step, name="Step1"
*Static
1.,1.,1e05,1.
**LOADS
**OUTPUT REQUESTS
**FIELD OUTPUT: FOutput1
*Output, field, variable=PRESELECT
**HISTORY OUTPUT: HOutput1
*Output, history, variable=PRESELECT
*End StepSTEP数据块定义:定义分析步的载荷数据,场数据输出设置、历史数据输出等图 2inp文件数据结构
Fig.2Data structure of inp file
InpDataImport+initialize(MDataModel & model, bool isRepeated): bool+import(const QString & fileName): bool图 4InpDataImport类
Fig.4Class of InpDataImport
InpEntryReader主要接口有6个,见图5.initialize用于初始化inp文本文件,初始化成功将返回True;readEntry用于判断是否为关键字行,若是则提取关键字;isEntry返回布尔值用以判断该行数据是否为有效行;getKeyword返回QString类型关键字; getText获取整行QString数据;readNextLine用于移动读取位置至下一有效行.
InpEntryReader+initialize(txtStream: QTextStream*): bool
+readEntry(): bool
+isEntry(): bool
+getKeyword(): QString
+getText(): QString
+readNextLine(): void图 5InpEntryReader类
Fig.5Class of InpEntryReader
InpEntryHandler基类主要接口有4个,见图6.initialize用于初始化和转入数据;returnReader返回InpEntryReader;handleEntry是有效行处理接口;Reader中带有有效行数据信息;logStream保存数据导入日志.
InpEntryHandler+initialize(MDataModel & model, bool is Repeated): bool
+returnReader() const: MInpEntryReader
+handleEntry(MInpEntryReader & Reader,
QTextStream*logStream): bool图 6InpEntryHandler类
Fig.6Class of InpEntryHandler
对于Abaqus中一些特定的数据格式,可增加参数以传递信息.例如在材料数据处理中,需要增加密度信息作为参数.
利用以上文件读取模式可以实现大多数文件的处理,例如ANSYS的cdb文件,Patran的bdf文件等.cdb和bdf等文件的格式与inp文件有所不同,在换行控制、关键字读取、有效信息处理以及后处理方面需要根据不同文件进行相应修改.
3UMAT子程序封装插件的实现
3.1UMAT子程序的通用格式
作为Abaqus用户子程序,UMAT具有通用的书写格式,并通过固定的接口与Abaqus主程序进行数据传递以及变量共享,其常用的变量通常在文件开头进行定义,具体格式如下.
SUBROUTINE UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,