UPFs教程1Pomato157300@126.com中国矿业大学(徐州)力学与建筑工程学院:师访1.简单介绍UPFs(UserProgrammableFeatures,用户可编程接口)是用户在ANSYS提供的Fortran和C语言源代码(并非真正的源代码,仅仅是ANSYS公司定义好的子程序函数)的基础上,修改其用户可编程子程序和函数,从源代码的层次上扩充ANSYS的功能。用户需要在相应的Fortran和C语言编译器的支持下,将编译修改后的源代码与ANSYS库相连接形成用户版本的ANSYS可执行文件。所谓的“用户可编程子程序和函数”,以ANSYS12.0版本为例,在安装时不默认安装,需要选择自定义安装方式,并选择ansyscustomizationfiles。安装后这些子程序和函数存在于C:\ProgramFiles\ANSYSInc\v120\ansys\customize\user目录下,多为*.F,即fortran文件,用户可对其进行修改,拷贝到相关文件夹并编译连接。2.利用UPFs可以完成的工作:(1)对ANSYS数据库进行操作。(2)定义特定的荷载类型。(3)定义新的单元类型。(4)在非线性功能中实现对用户实参的运算。(5)接触问题中实现用户摩擦系数。(6)定义特定的非线性材料特性———如用户塑性屈服准则、蠕变方程、超弹性特性、失效准则、粘弹性性质等。(7)用户优化———可以用自己的算法和中断准则替换ANSYS优化过程。(8)定义用户介入计算过程的方式———在每个ANSYS运行求解、载荷步、子步和平衡迭代的开始和结束处允许用户介入,并允许用户在求解过程中评估计算结果。3.常用的子程序及函数(1)用户自定义命令user01.F-user10.F用户可以使用它们自定义ANSYS命令在ANSYS中执行usr1(或user2)等命令调用以上user01.F(user02.F)中定义的功能。这里也可以使用/UCMD命令为user01.F指定一个新名称,再通过该名称执行命令。/UCMD命令的格式为:/UCMD,NewCmd,1。(2)用户自定义单元uec100.F-uec105.F用于定义单元的基本属性,如单元形状,自由度等uel100.F-uel105.F是核心程序,主要用于计算单元矩阵、载荷向量,并实现扩展解的计算和处理uex100.F-uex105.F重载单元缺省特性uep100.F-uep105.F提供单元输出功能注:最多可以定义6个新的单元类型(3)用户自定义材料特性Userpl.F定义用户塑性准则Usermat.F、usermat1d.F、usermat3d.F、usermatbm.F、usermatps.F对指定单元类型定义用户材料本构模型userfc1.F-userfc6.F定义用户破坏准则usercr.F和usercreep.F定义用户蠕变准则(4)参数处理过程pardim创建参数数组parevl参数操作过程pardef列表中加入新参数此外还有很多,不一一列出(5)干预计算过程———通过命令USRCAL可激活下列过程UAnBegANSYS启动时执行USolBeg求解开始时执行USolFeg求解结束时执行ULdBeg载荷步开始时执行ULdFin载荷步结束时执行USsBeg子步开始时执行USsFin子步结束时执行UAnFinANSYS任务结束时执行使用这些子函数可以有效的控制ansys程序,载荷步,子步等的运行。UPFS教程第一讲.pdf(85.78KB)4.ansys12.0upfs的编译连接(2010.7.28)(1)下载安装visualstudio2005professional(2)下载安装Intelvisualfortran11(3)下载安装ANSYS12.0.132位,在电驴下载即可,注意安装时选择安装ANSYScustomizationFiles(4)修改环境变量(很重要的一步,不然会出现很多问题)可参照该文:CompilingUPFsandCreatingCustomizedANSYSExecutablesCompilingUPFsandCreatingCustomizedANSYSExecutables.pdf(189.26KB)5.ANSYS率无关塑性材料程序执行过程(2010.8.13)这部分对于开发自己的Usermat子程序很重要,见附件率无关塑性执行过程.rar(17.63KB)6.本人报告用的ANSYS二次开发PPT(2011.2.4更新)7.线弹性usermat开发示例(2010.10.5)*deck,usermatUSERDISTRIBparallelgalsubroutineusermat(&matId,elemId,kDomIntPt,kLayer,kSectPt,&ldstep,isubst,keycut,&nDirect,nShear,ncomp,nStatev,nProp,&Time,dTime,Temp,dTemp,&stress,statev,dsdePl,sedEl,sedPl,epseq,&Strain,dStrain,epsPl,prop,coords,&var0,defGrad_t,defGrad,&tsstif,epsZZ,&var1,var2,var3,var4,var5,&var6,var7,var8)c*************************************************************************#includeimpcom.inccINTEGER&matId,elemId,&kDomIntPt,kLayer,kSectPt,&ldstep,isubst,keycut,&nDirect,nShear,ncomp,nStatev,nPropDOUBLEPRECISION&Time,dTime,Temp,dTemp,&sedEl,sedPl,epseq,epsZZDOUBLEPRECISION&stress(ncomp),statev(nStatev),&dsdePl(ncomp,ncomp),&Strain(ncomp),dStrain(ncomp),&epsPl(ncomp),prop(nProp),&coords(3),&defGrad(3,3),defGrad_t(3,3),&tsstif(2)cDOUBLEPRECISIONvar0,var1,var2,var3,var4,var5,&var6,var7,var8DOUBLEPRECISIONONE,TWO,THREE,EMOD,ENU,EBULK3,EG2,EG3,ELAM,EGINTEGERK1,K2cc*****************Userdefinedpart*************************************cDOUBLEPRECISIONdStress(6),D(3,3)c*************************************************************************c---------------------中国矿业大学:师访---------------------------c---------------------pomato157300@126.com-------------------------CELASTICPROPERTIESPARAMETER(ONE=1.0D0,TWO=2.0D0,THREE=3.0D0)EMOD=prop(1)ENU=prop(2)EBULK3=EMOD/(ONE-TWO*ENU)EG2=EMOD/(ONE+ENU)EG=EG2/TWOEG3=THREE*EGELAM=(EBULK3-EG2)/THREECCELASTICSTIFFNESSCDOK1=1,nDirectDOK2=1,nDirectdsdePl(K2,K1)=ELAMENDDOdsdePl(K1,K1)=EG2+ELAMENDDODOK1=nDirect+1,ncompdsdePl(K1,K1)=EGENDDOCCCALCULATEstressCDOK1=1,ncompDOK2=1,ncompstress(K2)=stress(K2)+dsdePl(K2,K1)*dStrain(K1)ENDDOENDDOreturnendusermat.rar(936Bytes)8.邓肯-张E-B模型的usermat.f代码:(2011.2.4更新)*deck,usermatUSERDISTRIBparallelgalsubroutineusermat(&matId,elemId,kDomIntPt,kLayer,kSectPt,&ldstep,isubst,keycut,&nDirect,nShear,ncomp,nStatev,nProp,&Time,dTime,Temp,dTemp,&stress,statev,dsdePl,sedEl,sedPl,epseq,&Strain,dStrain,epsPl,prop,coords,&var0,defGrad_t,defGrad,&tsstif,epsZZ,&var1,var2,var3,var4,var5,&var6,var7,var8)c----------------------------------------------------------------------c邓肯(基本增量)c作者:pomato157300@126.comc中国矿业大学,师访c----------------------------------------------------------------------#includeimpcom.inccINTEGER&matId,elemId,&kDomIntPt,kLayer,kSectPt,&ldstep,isubst,keycut,&nDirect,nShear,ncomp,nStatev,nPropDOUBLEPRECISION&Time,dTime,Temp,dTemp,&sedEl,sedPl,epseq,epsZZDOUBLEPRECISION&stress(ncomp),statev(nStatev),&dsdePl(ncomp,ncomp),&Strain(ncomp),dStrain(ncomp),&epsPl(ncomp),prop(nProp),&coords(3),&defGrad(3,3),defGrad_t(3,3),&tsstif(2)c-----------------------------------------------------------------------c用户自定义部分c-----------------------------------------------------------------------DOUBLEPRECISIONvar0,var1,var2,var3,var4,var5,&var6,var7,var8DOUBLEPRECISIONS1S3O,S3O,SSO,pps,ps(nDirect),sDOUBLEPRECISIONak,an,rf,c,fai,pa,vKb,vnb,aurDOUBLEPRECISIONEI,PMIUT,BTMIN,ETMIN,FEI,ALAM,GG,BT,ETexternalgetps,getdsdePlINTEGERk1,k2,i,jDOUBLEPRECISIONdStress(ncomp),dStress1(ncomp),dStress2(ncomp)DOUBLEPRECISIONstress1(ncomp),stress2(ncomp),eStress(ncomp)DOUBLEPRECISIONdStrain1(ncomp),dStrain2(ncomp)