《ABAQUES学习心得》.doc_第1页
《ABAQUES学习心得》.doc_第2页
《ABAQUES学习心得》.doc_第3页
《ABAQUES学习心得》.doc_第4页
《ABAQUES学习心得》.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精品文章ABAQUES学习心得abaqus用户子程序当用到某个用户子程序时,用户所关心的主要有两方面:一是abaqus提供的用户子程序的接口参数。有些参数是abaqus传到用户子程序中的,例如subroutinedload中的kstep,kinc,coords;有些是需要用户自己定义的,例如f。二是abaqus何时调用该用户子程序,对于不同的用户子程序abaqus调用的时间是不同的。有些是在每个step的开始,有的是step结尾,有的是在每个increment的开始等等。当abaqus调用用户子程序是,都会把当前的step和increment利用用户子程序的两个实参kstep和kinc传给用户

2、子程序,用户可编个小程序把它们输出到外部文件中,这样对abaqus何时调用该用户子程序就会有更深的了解。(子程序中很重要的就是要知道由abaqus提供的那些参量的意义,如下)首先介绍几个子程序:一、subroutinedload(f,kstep,kinc,time,noel,npt,layer,kspt,coords,jltyp,sname)参数:1.f为用户定义的是每个积分点所作用的荷载的大小;2.kstep,kinc为abaqus传到用户子程序当前的step和increment值;3.time(1),time(2)为当前steptime和incrementtime的值;4.noel,npt

3、为积分点所在单元的编号和积分点的编号;5.coords为当前积分点的坐标;6.除f外,所有参数的值都是abaqus传到用户子程序中的。功能:1.荷载可以被定义为积分点坐标、时间、单元编号和单元节点编号的函数。2.用户可以从其他程序的结果文件中进行相关操作来定义积分点f的大小。例1。这个例子在每个积分点施加的荷载不仅是坐标的函数,而且是随step变化而变化的。subroutinedload(p,kstep,kinc,time,noel,npt,layer,kspt,coords,1jltyp,sname)includeaba_param.inccdimensiontime(2),coords(3

4、)characterx80snameparameter(pload=100.e4)if(kstep.eq.1)then。当step=1时的荷载大小p=ploadelseif(kstep.eq.2)then。当step2时的荷载大小p=coords(1)xpload。施加在积分点的荷载p是坐标的函数elseif(kstep.eq.3)then。当step=3时的荷载大小p=coords(1)xx2xploadelseif(kstep.eq.4)then。当step=4时的荷载大小p=coords(1)xx3xploadelseif(kstep.eq.5)then。当step=5时的荷载大小p=c

5、oords(1)xx4xploadendifreturnendumat子程序具有强大的功能,使用umat子程序:可以定义材料的本构关系,使用abaqus材料库中没有包含的材料进行计算,扩充程序功能。(2)几乎可以用于力学行为分析的任何分析过程,几乎可以把用户材料属性赋予abaqus中的任何单元;(3)必须在umat中提供材料本构模型的雅可比(jacobian)矩阵,即应力增量对应变增量的变化率。(4)可以和用户子程序“usdfld”联合使用,通过“usdfld”重新定义单元每一物质点上传递到umat中场变量的数值。由于主程序与umat之间存在数据传递,甚至共用一些变量,因此必须遵守有关umat

6、的书写格式,umat中常用的变量在文件开头予以定义,通常格式为:subroutineumat(stress,statev,ddsdde,sse,spd,scd,1rpl,ddsddt,drplde,drpldt,2stran,dstran,time,dtime,temp,dtemp,predef,dpred,cmname,3ndi,nshr,ntens,nstatv,props,nprops,coords,drot,pnewdt,4celent,dfgrd0,dfgrd1,noel,npt,layer,kspt,kstep,kinc)includeaba_param.inccharacterx

7、80cmnamedimensionstress(ntens),statev(nstatv),1ddsdde(ntens,ntens),ddsddt(ntens),drplde(ntens),2stran(ntens),dstran(ntens),time(2),predef(1),dpred(1),3props(nprops),coords(3),drot(3,3),dfgrd0(3,3),dfgrd1(3,3)usercodingtodefineddsdde,stress,statev,sse,spd,scdand,ifnecessary,rpl,ddsddt,drplde,drpldt,p

8、newdtreturnendumat中的应力矩阵、应变矩阵以及矩阵ddsdde,ddsddt,drplde等,都是直接分量存储在前,剪切分量存储在后。直接分量有ndi个,剪切分量有nshr个。各分量之间的顺序根据单元自由度的不同有一些差异,所以编写umat时要考虑到所使用单元的类别。下面对umat中用到的一些变量进行说明:ddsdde(ntens,ntens)是一个ntens维的方阵,称作雅可比矩阵,是应力的增量,是应变的增量,ddsdde(i,j)表示增量步结束时第j个应变分量的改变引起的第i个应力分量的变化。通常雅可比是一个对称矩阵,除非在“xusermaterial”语句中加入了“uns

9、ymm”参数。stress(ntens)应力张量矩阵,对应ndi个直接分量和nshr个剪切分量。在增量步的开始,应力张量矩阵中的数值通过umat和主程序之间的接口传递到umat中,在增量步的结束umat将对应力张量矩阵更新。对于包含刚体转动的有限应变问题,一个增量步调用umat之前就已经对应力张量的进行了刚体转动,因此在umat中只需处理应力张量的共旋部分。umat中应力张量的度量为柯西(真实)应力。statev(nstatev)用于存储状态变量的矩阵,在增量步开始时将数值传递到umat中。也可在子程序usdfld或uexpan中先更新数据,然后增量步开始时将更新后的数据传递到umat中。在增

10、量步的结束必须更新状态变量矩阵中的数据。和应力张量矩阵不同的是:对于有限应变问题,除了材料本构行为引起的数据更新以外,状态变量矩阵中的任何矢量或者张量都必须通过旋转来考虑材料的刚体运动。状态变量矩阵的维数,等于关键字“xdepvar”定义的数值。状态变量矩阵的维数通过abaqus输入文件中的关键字“xdepvar”定义,关键字下面数据行的数值即为状态变量矩阵的维数。材料常数的个数,等于关键字“xusermaterial”中“constants”常数设定的值。props(nprops)材料常数矩阵,矩阵中元素的数值对应于关键字“xusermaterial”下面的数据行。sse,spd,scd分别

11、定义每一增量步的弹性应变能,塑性耗散和蠕变耗散。它们对计算结果没有影响,仅仅作为能量输出。其他变量:stran(ntens):应变矩阵;dstran(ntens):应变增量矩阵;dtime:增量步的时间增量;ndi:直接应力分量的个数;nshr:剪切应力分量的个数;ntens。总应力分量的个数,ntensndinshr=+。使用umat时需要注意单元的沙漏控制刚度和横向剪切刚度。通常减缩积分单元的沙漏控制刚度和板、壳、梁单元的横向剪切刚度是通过材料属性中的弹性性质定义的。这些刚度基于材料初始剪切模量的值,通常在材料定义中通过“xelastic”选项定义。但是使用umat的时候,abaqus对程

12、序输入文件进行预处理的时候得不到剪切模量的数值。所以这时候用户必须使用“xhourglassstiffness”选项来定义具有沙漏模式的单元的沙漏控制刚度,使用“xtransverseshearstiffness”选项来定义板、壳、梁单元的横向剪切刚度。几个关于子程序的问题及相应解答q:本人在用umat作本构模型时,xstatic,1,500,0.000001,0.1此时要求的增量步很多,即每次增量要很小,xstatic1,500时,在弹性向塑性过度时,出现错误,增量过大,出现尖点.。a:youcantryasfollows:xstep,extrapolation=no,inc=xx000xs

13、taticq:在abaqus中,如果采用umat,利用自己的本构,如何让abaqus明白这种材料的弹塑性应变,也就是说,如何让程序返回弹性应变与塑性应变,好在output中输出,我曾想用最笨地方法,在uvarm中定义输出,利用getvrm获取材料点的值,但无法获取增量应力,材料常数等,研究了帮助中的例子,umatmst3.inp,umatmst3.for,他采用misesj2流动理论,我在outputhistory显示他已进入塑性状态,但他的pe仍然为0。a:用uvar勉强成功。q:偶在umat中调用求主应力函数callsprinc(stress,ps,lstr,ndi,nshr)后,存储主应

14、力得数组ps中各个主应力排列顺序是什么。ps1ps2ps3。ps1ps2。a。第二个。个人觉得:umat实现自己的本构没有固定的方法,对于不同的本构有可能必须采用不同的方法。这要靠自己不断地摸索。有可能一种方法对于简单加载问题还行,但有可能对于复杂问题并不收敛。最重要一点,就是umat中采用的算法必须consistent.再就是ddsdde必须正确,(如果采用back_euler方法等一些算法,ddsdde错误有时不影响结果(对于简单加载问题没有影响,能收敛,),但对于复杂问题不收敛。uptonow,你这个算法对于mises,hill,j2,j2d等一类的屈服函数是正确的,但具体的本构还要灵活

15、运用,这我也正学习,正在摸索。有时,umat需要很强的有限元基础,并且对采用的本构要很熟悉,不要在一颗树上吊死才好。首先要确认自己的umat没有错误,如果没有,但就是不收敛(在不断减小加载步长的情况下,当然最好对步长不敏感,特别是对于粘弹性,粘塑性,内变量一类的材料,有的本构取决于背应力的计算)。那就应该考虑换一种算法。一点体会,请大家探讨。q:abaqus-uamt的老问题,缺少aba_param.inc文件。a:在cvf6.5调试时,显示缺少aba_param.inc文件。这个没有任何关系的,这个错误将在abaqus调用umat的时候自动会找到,仅仅有这个错误将没有任何影响的。也就是说,a

16、baqus中调用的时候,实际并不存在这个错误。ft,忘了说一句了,你把aba_param.inc.dp或aba_param.inc.sp拷到你的程序工作空间后,应该将把aba_param.inc.dp或aba_param.inc.sp的后缀.sp或.dp去掉,即将aba_param.inc.dp或aba_param.inc.sp改名为aba_param.inc。呵呵,他的意思是在visualfortran中调试其子程序,我觉得这是一个好办法,我当时也是这麽办的,毕竟在abaqus中调试是非常麻烦的,只有当你的umat没有语法或者明显的逻辑错误,你在abaqus中调试才能事半功倍。q。uvarm

17、可以输出到哪里。.odb可以么。另外那个strav。就是自己定义用于umat的那个数组里的数可以输出到.odb里么。a:在umat中,statev是不能用在output中的,statev只是作为一个解的状态变量,说来惭愧,我是在umat中定义peeq,(peeq)的求解一般在弹塑性力学书上有(等效塑性应变),用write写入一个临时文件,(切记:这个文件unit号不要与abaqus中的重合,因为他有一些系统默认的文件号,)然后在uvarm中读取,以uvarm输出,因为uvarm可以以odb的形式输出,支持output,field,output,historyq:在本版看了一个一维固结的例子,其

18、中含有用户子程序,如下subroutineufield(field,kfield,nsecpt,kstep,kinc,time,node,coords,temp,dtemp)includeaba_param.incdimensionfield(nsecpt),time(2),coords(3),temp(nsecpt),dtemp(nsecpt)kfield=1field(1)=coords(2)returnend我在vf6.5中进行调试,提示找不到aba_param.inc请问大侠这如何解决。还有我因为是初次接触用户子程序,我查阅了本版所有的相关贴子,都讲的不太详细,我将问题总结一下,大侠们

19、能不能详细的讲解一下,1子程序格式(程序后缀是.f;.f90;.for;.obj。)2cae中如何调用,mand下如何调用。3若有多个子程序同时存在,如何处理4我对vf不是很熟,是否可以用vc,c编写子程序。a:若要在vf中调试,那么应该根据需要把site文件夹中的aba_param_dp.inc(双精度)或aba_param_sp.inc(单精度)拷到相应的位置,并改名为aba_param.inc即可。1。我试过,.for格是应该是不可以的,至少6.2和6.3版本应该是不行,其他的没用过,没有发言权。在abaqus中,运行abaqusj=jobnameuser=username时,默认的用户

20、子程序后缀名是.for(.f,.f90应该都不行的,手册上也有讲过),只有在username.for文件没有找到的情况下,才会去搜索username.obj,如果两者都没有,就会报错误信息。如果username包括扩展名for或obj,那么就根据各自的扩展名abaqus会自动选择进行操作。2。cae中在creatjob的jobmanager中的general中可以指定子程序;mand下用命令:abaqusj=jobnameuser=userfilename(无后缀);3。将其写在一个文件中即可,然后用一个总的子程序调用(具体参见手册)4。据说6.4的将可以,6.3的你可以尝试着将vc,c程序编

21、译为obj文件,没试过。在你的工作目录下应该已经存在ufield.obj和uvarm.obj这两个文件(这两个文件应该是你分别单独调试ufield.for和uvarm.for时自动编译生成的,你可以将他们删掉试试看),但是由于你的for文件中已经有了uvarm和ufield这两个subroutine,显然会造成重复定义,请查实。#q。假定采用mises屈服准则。1在调用umat之前,abaqus传递给umat本次增量开始时的应力sigma(0),总应变e,应变增量delta(e)。状态变量保存。弹性应变,塑性应变,等效塑性应变。(请问,状态变量保存的弹性应变塑性应变是否等于abaqus传递给u

22、mat的总应变。2,然后在umat中利用上述的abaqus传递的量和状态变量得到ddsdde矩阵,然后返回给abaqus,abaqus根据delta(sigma)=ddsddexdelta(e),并且得到本次增量结束时的应力sigma(1)=sigma(0)+delta(sigma)=sigma(0)+ddsddexdelta(e)3然后更新本次增量结束时的状态变量:弹性应变,塑性应变,等效塑性应变以供下次调用umat请问手册上umat必须更新应力,可是根据上述我的理解好像是abaqus根据umat提供的本次增量的ddsdde在abaqus中更新,请问到底是怎么回事。谢谢。#a:1在调用uma

23、t之前,abaqus传递给umat本次增量开始时的应力sigma(0),总应变e,应.:量delta(e)。:状态变量保存:弹性应变,塑性应变,等效塑性应变。2,然后在umat中利用上述的abaqus传递的量和状态变量得到ddsdde矩阵,然后返回给:abaqus,abaqus根据delta(sigma)=ddsddexdelta(e),并且得到本次增量结束时的应力3然后更新本次增量结束时的状态变量。弹性应变,塑性应变,等效塑性应变以供下以上有些answers本人并没有亲自证实,如有问题请及时更正。转】abaqus与fortran2xx年10月29日星期六10:38转载自nefutumu最终编

24、辑nefutumuq:本人尝试使用abaqus的子程序subroutine,根据帮助文件需要编译通过生成x.for和x.lib文件,可是编译的时候出现错误:error:cannotopenincludefileaba_param.inc不知道是什么原因,怎么解决。a:1.确认visualfortran及vc+正确安装,并在安装abaqus之前安装。2.首先将用户子程序x.f文件后缀名改为x.for。3.到控制面板系统高级环境变量中的administrator用户变量:修改变量名:lib变量值:c:programfilesmicrosoftvisualstudiodf98lib;c:progra

25、mfilesmicrosoftvisualstudiovc98lib(我的问题就是因为只加了一个lib,必须两个都加。)完成以上步骤以后,就可以运行了。q。怎样把自己编写的子程序倒入到x.inp文件中。a:q:用函数作批处理遇到问题,在fortran中使用result=system(abaqusjob=job1interactive)作批处理,总是在计算两个job之后就不继续往下算了,cmd明令行提示:runtimeerror:floating-point.请问这是怎么回事。a。个方法就是做一个批处理文件,abaqusjob=beaminteractiveabaqusjob=beam1inte

26、ractiveabaqusjob=beam2interactiveabaqusjob=beamn。interactive存为.bat文件即可。python好像一般是做cae前后处理界面的。a:前面加call.callabaqusjob=1interactivecallabaqusjob=2interactivecallabaqusjob=3interactiveq。fortran如何调用abaqus。a:usethefunctionsystemorsystemusedfliblogical(4)resultresult=system(abaqusjob=xx)qa:首先我用abaqus的var

27、ify命令对系统进行修正和检测,这个命令会自动运行,对abaqus进行调试等操作,其中涉及到对用户子程序的模拟计算,如果计算失败,就会在varify.log文件中说明,确实发现usersubroutine.和single.和double.失败,说明用户子程序安装不成功,肯定与visualfortran6.5有关。然后,找到fortran_make文本文件,发现错误,可能是与fortran安装有关。于是卸载fortran,重新安装在c盘。安装完毕后,改变环境变量如下:includec:programfilesmicrosoftvisualstudiodf98imslinclude;c:progr

28、amfilesmicrosoftvisualstudiovc98include;d:程序文件vc98include;libc:programfilesmicrosoftvisualstudiodf98imsllib;c:programfilesmicrosoftvisualstudiodf98lib;c:programfilesmicrosoftvisualstudiovc98lib;d:程序文件vc98lib;pathc:programfilesmicrosoftvisualstudiomontools;d:程序文件vc98bin;%systemroot%system32;%systemro

29、ot%;%systemroot%system32wbem;c:kav6;d:程序文件kv6;c:programfilesmicrosoftvisualstudiodf98bin;c:programfilesmicrosoftvisualstudiovc98bin;c:programfilesmicrosoftvisualstudiomonmsdev98bin;d:abaqusmands;c:programfilesmicrosoftvisualstudiodf98bin我们只需要关注microsoftvisualstudio文件夹。最后,再次执行varify命令,等运行完毕后,检查varify文本文件,发现:abaqus/standardwithusersubroutines.passcontinuing.abaqus/explicitwithusersubroutines(singleprecision).passcontinuing.abaqus/explicitwithusersubroutines(doubleprecision).passcontinuing.ok。搞定abaqus神功修炼xx年10月05日星期三15:23转载自小

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论