欢迎光临散文网 会员登陆 & 注册

在abaqus平台通过python脚本生成非均质材料

2022-04-23 23:46 作者:施弓且错画  | 我要投稿

(1)写作动机

在网上相对容易找到在abaqus平台生成非均质材料的视频,但是很多视频扣扣嗖嗖不愿意把代码分享出来,代码很简单的,但是对刚入门的萌新实在是不知道如何下手,本文提供了在abaqus平台上通过python脚本生成非均质材料的简单代码,希望达到抛砖引玉的效果。

(2)方法步骤

本文通过对每个单元赋不同的弹性模量,以达到非均质材料生成的目的。在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)


在abaqus平台通过python脚本生成非均质材料的评论 (共 条)

分享到微博请遵守国家法律