今天学习Abaqus/Explicit自定义摩擦子程序VFRIC,实现的是各向同性库仑摩擦+粘着(stick)处理,写法极其简洁(甚至有点“偷懒”)。我们来逐行、逐变量、逐物理意义地彻底拆解它,并告诉你哪里写得聪明、哪里有隐患、哪里可以提升。CCUsersubroutineVFRICsubroutinevfric(CWriteonly-*fTangential,CRead/Write-*statev,CReadonly-*kStep,kInc,nContact,nFacNod,nSecNod,nMainNod,*nFricDir,nDir,nStateVar,nProps,nTemp,nPred,numDefTfv,*jSecUid,jMainUid,jConSecid,jConMainid,timStep,timGlb,*dTimCur,surfInt,surfSec,surfMast,lContType,*dSlipFric,fStickForce,fTangPrev,fNormal,frictionWork,*shape,coordSec,coordMain,dircosSec,dircosN,props,*areaSec,tempSec,preDefSec,tempMain,preDefMain)Cinclude'vaba_param.inc'Cdimensionprops(nProps),statev(*),1dSlipFric(nDir,nContact),2fTangential(nFricDir,nContact),3fTangPrev(nDir,nContact),4fStickForce(nContact),areaSec(nSecNod),5fNormal(nContact),shape(nFacNod,nContact),6coordSec(nDir,nSecNod),coordMain(nDir,nMainNod),7dircosSec(nDir,nContact),dircosN(nDir,nContact),8jSecUid(nSecNod),jMainUid(nMainNod),9jConSecid(nContact),jConMainid(nFacNod,nContact),1tempSec(nContact),tempMain(numDefTfv),2preDefSec(nContact,nPred),3preDefMain(numDefTfv,nPred)Ccharacter*80surfInt,surfSec,surfMastparameter(zero=0.d0)*xMu=props(1)if(nDir.eq.2)thendokcon=1,ncontactfn=fNormal(kcon)fs=fStickForce(kcon)ft=min(xMu*fn,fs)fTangential(1,kcon)=-ftenddoelseif(nDir.eq.3)thendokcon=1,ncontactfn=fNormal(kcon)fs=fStickForce(kcon)ft=min(xMu*fn,fs)fTangential(1,kcon)=-ftfTangential(2,kcon)=zeroenddoendif*returnend来源:ABAQUS仿真世界