利用Python脚本在abaqus中生成非均质材料

方法步骤

本文通过对每个单元赋不同的弹性模量,以达到非均质材料生成的目的。在abaqus平台创建模型,然后对模型创建集合Set-all,然后运行如下python脚本文件。如图1,其中弹性模量可以用不同的分布函数生成,如正态分布、韦伯分布等。图2的python脚本文件提供了详细注释,以供查阅,


   图1 网格模型和对全局区域赋非均质属性
 


   图2 python脚本
 

此外,视需求可以划分多个Set,对不同的Set分别赋材料参数,如图3。注意如果分别对多个Set分别赋材料参数,建议修改setname、matname、secname,如将代码中的setname中的‘Set-’修改为'Set1-',防止多次生成时材料信息不知道属于哪一个集合。



   图3 对部分区域赋非均质属性
 

(3)方法拓展

  • 本方法是通过对网格单元赋值,也即是说该方法不具有单元类型依赖性,无所谓三角形、四边形、四面体等单元,都可以适用;
  • 本方法演示了对单元赋值不同的弹性模量,泊松比等其他参数同样适用,其中如果想对材料内聚力、内摩擦角等其他参数赋值,可以采用插件PythonReader查看关键词,PythonReader相关插件及使用方法在网络上查找,或者打开abaqus生成的rpy文件和jnl文件查看相关关键词。
  • 可以采用读取文件数据,然后保存为数组,然后从数组中按序取数据对模型进行赋值,以达到按照任意分布方式、一定比例占比对模型进行参数赋值。
  • 本方法也有局限性,目前暂时不知道怎么图中的网格按照数据大小进行显示,即使在赋值参数都一样,也是显示不同网格颜色,某种程度无法告诉读者模型材料参数所谓何样。之前通过修改网格的色卡颜色,无奈色卡采用16进制表示的,笔者本来以为颜色范围都是0~255,按照数据大小映射到色卡上,但是没有成功,因为笔者搞不懂16进制怎么转换为10进制,或者即使知道了也不知道能不能解决这个颜色显示问题,因此浅尝未果。如果有人知道如何解决色卡显示的问题,希望不吝赐教。此外,用户子程序应该能解决这个问题,可以通过场变量的方式显示数值大小,但是在一般情况下,还是尽量用能解决问题的简单办法吧。
  • 不含注释的python脚本以飨各位。
     

#!/usr/bin/python

# -*- coding: UTF-8 -*-

# Do not delete the following import lines

import numpy as np

import math

from abaqus import *

from abaqusConstants import *

import __main__


mymodel = mdb.models['Model-1']

mypart = mdb.models['Model-1'].parts['Part-1']

#

session.journalOptions.setValues(replayGeometry=COORDINATE,recoverGeometry= COORDINATE)

myset_all = mypart.sets['Set-all']

np.random.seed(1)


for ele_index in myset_all.elements:

   ele = ele_index.label

   Matname = 'Mat-'+ str(ele)

   myMaterial = mymodel.Material(name=Matname)      

   EE = (2000*math.pow(-math.log(np.random.rand()),1.0/3)+15000)*1e6

   vv = 0.25

   elasticProperties = (EE, vv)

   myMaterial.Elastic(table=(elasticProperties, ))

   myMaterial.Permeability(specificWeight = 9800.0, inertialDragCoefficient=0.142887,table=((1e-07,0.2), ))      

   sectionname = 'Sec-'+ str(ele)

   mySection = mymodel.HomogeneousSolidSection(name=sectionname, material=Matname, thickness=None)

   setname = 'Set-' + str(ele)

   mypart.Set(elements=mypart.elements[ele-1:ele], name=setname)

   region = mypart.sets[setname]

   mypart.SectionAssignment(region=region, sectionName=sectionname)


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空