Damask 2.0.3联合abaqus进行晶体塑性有限元模拟的简单介绍
更新于2025年6月18日 20:38Damask2.0.3版本是最后一个和Abaqus有接口的版本,在Damask2.0.3的官网中已经进行了声明,目前最新的版本已经不支持和Abaqus联合使用。但是Damask和abaqus联合使用仍然是学习晶体塑性有限元方法不错的工具。我曾使用过Abaqus联合damask平台,这里我对使用过程中个人的一点经验进行简单的介绍,希望各位读者在研究过程中少一些技术上的障碍。
1.软件安装
Damask软件的安装较为复杂,我那时候是在某鱼上找人安装的,使用的是Ubuntu18.04,Abaqus版本是2018。目前VMware Workstation可以方便的将系统导出为ovf格式,便于安装,有需要的可以联系我。
2.使用介绍
关于damask2.0.3联合abaqus的入门使用,我这里直接用一个简单的例子来介绍。首先在Neper中生成一个1×1×1的三维立方体晶体模型,共200个晶粒:
neper -T -n 200 -dim 3 -domain "cube(1,1,1)" -oriformat plain -oridescriptor euler-bunge -o Jiahe1
如果想输出晶粒的等效直径,可以加上-statcell diameq命令,会自动生成一个文件存储所有晶粒的等效直径。
然后划分网格并生成inp文件,共有9261个单元:
neper -M Jiahe1.tess -rcl 1.3 -elttype hex -interface continuous -format inp -o abq_input
关于网格划分需要注意,damask2.0.3联合abaqus只支持部分单元类型(CPE4,CPE8,C3D4,C3D6,C3D8,C3D8R,C3D20,C3D20R),即不支持四边形单元和四面体单元。Segurado教授曾在自己的著作(Computational Homogenization of Polycrystals)中表示,这样将导致晶界呈阶梯状表面,不适合于模拟局限于晶界的现象,如晶界滑动。
Damask2.0.3联合abaqus运行需要3个必要文件,abaqus_v6.env,*.inp和material.config。abaqus_v6.env用于配置DAMASK与Abaqus联合使用时的环境设置文件,一般不需要修改。
从neper导出inp文件后,需要对该inp文件进行前处理,为每一个晶粒建立单独的材料并输入材料参数。这里基于Neper2Abaqus进行修改,采用Matlab进行前处理。
本例采用一种Al合金材料,FCC结构,在Matlab命令行中运行:
neper2abq('Al__')
其中Al是输入文件的名称。在名称末尾需要包含双下划线。运行此函数将生成4个文件:Al_materials.inp,Al_sections.inp,Al_Microstructure_ElementHomogeneous.config,Al_Texture_Gauss.config。
将Neper生成的inp文件与本函数生成的两个inp文件放在同一文件夹中。然后打开Neper生成的inp文件,在文件末尾进行如下修改:
在*End Part之前添加:
*Include, Input = Al_sections.inp
在*End Part之后添加:
*Include, Input = Al_materials.inp
此输入文件即可以导入Abaqus,包含所有材料和截面信息。每一个晶粒采用一个材料属性,每一种材料有两个力学常数,第一个力学常数代表需要使用的均匀化法则,第二个力学常数代表需要使用的微观组织。Al_Microstructure_ElementHomogeneous.config和Al_Texture_Gauss.config属于material.config,material.config主要包含Homogenization,Microstructure,Crystallite,Phase和Texture。Homogenization部分用于选择所采用的均匀化法则;Crystallite部分用于输出与所选本构关系无关的晶体学量;Phase部分用于选择材料的本构关系,包括材料参数的输入和与所选本构关系相关的晶体学量的输出;Texture部分用于指定晶粒的取向;Microstructure部分表示材料所采用的微观组织,主要包括每个晶粒的crystallite,phase和texture。一般情况下由于晶粒数目较多,Microstructure部分和Texture部分较长,为了增强代码的可读性,通常将Microstructure部分和Texture部分单独生成为两个配置文件。这部分内容在官网中有详细介绍(https://damask2.mpie.de/bin/view/Documentation/MaterialConfig.html),这里不再过多说明。
至此,我们就准备好了所需要的abaqus_v6.env,inp文件和material.config,在inp文件中添加边界条件,这里采用EasyPBC施加了一个单轴拉伸的位移边界条件,如下图所示:

运行作业时在终端输入:
abaqus job=JiaHe1 user=/home/cpfem/damask-2.0.3/src/DAMASK_abaqus.f interactive
即可运行作业,可以通过.sta文件查看作业进程。以下是计算结果:应力云图(Pa)和力位移曲线,本例的所有计算文件附在文末。


对于本例中所采用的现象学晶体塑性本构关系,共有114个状态变量,分别如下:
SDV1:HomogenizationCount
SDV2:GrainCount
SDV3:CrystalliteCount
SDV4~7:quaternion(取向四元数)
SDV8~11:deviation from initial orientation as axis (1-3) and angle in degree (4) in crystal reference coordinates(晶体参考坐标系中与初始取向的偏差(以轴(1-3)和角度(4)为单位))
SDV12~20:f,deformation gradient tensor(变形梯度张量)
SDV21~29:fe,elastic deformation gradient tensor(弹性变形梯度张量)
SDV30~38:fp,plastic deformation gradient tensor(塑性变形梯度张量)
SDV39~47:p,first Piola-Kichhoff stress tensor(第一Piola-Kichhoff应力张量)
SDV48~56:s,second Piola-Kichhoff stress tensor(第二Piola-Kichhoff应力张量)
SDV57-65:lp,plastic velocity gradient tensor(塑性速度梯度张量)
SDV66:ConstitutiveCount
SDV67~78:resistance_slip(滑移系阻力)
SDV79~90:shearrate_slip(滑移系剪切应变率)
SDV91~102:resolvedstress_slip(滑移系临界分切应力)
SDV103~114:accumulatedshear_slip(滑移系累积剪应变)
3.其他说明
(1)在终端输入
abq_addUserOutput -m 114 JiaHe1.inp
可以直接修改inp文件的状态变量个数。
(2)在终端输入
abq_addUserOutput --homogenization 1 --crystallite 1 --phase 1 JiaHe1.inp
可将material.config中请求的输出变量传输到Abaqus输入文件(*.inp),但是需要预先运行作业,将会在inp文件中生成正确的状态变量数量并命名。如下图所示:

(3)可以将Damask编译成一个库,这样就不必为每个作业编译子程序。我曾经做过尝试,但是没有成功,详见官网https://damask2.mpie.de/bin/view/Installation/Abaqus.html
(4)Damask2.0.3联合Abaqus最大的问题是不支持使用 Abaqus 并行化。DAMASK2.0.3官网声明可以使用OpenMP进行内部并行化,通过环境变量 $DAMASK_NUM_THREADS 设置 DAMASK 要使用的线程数,大家可以试一下。
export DAMASK_NUM_THREADS=8 echo $DAMASK_NUM_THREADS
我曾经做过尝试,OpenMP内部并行对计算速度的增加聊胜于无。
这里附上计算文件:
工程师必备
- 项目客服
- 培训客服
- 平台客服
TOP




















