今天学习 Abaqus/Explicit 自定义摩擦子程序 VFRIC,实现的是各向同性库仑摩擦 + 粘着(stick)处理,写法极其简洁(甚至有点“偷懒”)。我们来逐行、逐变量、逐物理意义地彻底拆解它,并告诉你哪里写得聪明、哪里有隐患、哪里可以提升。
CC User subroutine VFRICsubroutine vfric (C Write only -* fTangential,C Read/Write -* statev,C Read only -* 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'Cdimension props(nProps), statev(*),1 dSlipFric(nDir,nContact),2 fTangential(nFricDir,nContact),3 fTangPrev(nDir,nContact),4 fStickForce(nContact), areaSec(nSecNod),5 fNormal(nContact), shape(nFacNod,nContact),6 coordSec(nDir,nSecNod), coordMain(nDir,nMainNod),7 dircosSec(nDir,nContact), dircosN(nDir,nContact),8 jSecUid(nSecNod), jMainUid(nMainNod),9 jConSecid(nContact), jConMainid(nFacNod,nContact),1 tempSec(nContact), tempMain(numDefTfv),2 preDefSec(nContact, nPred),3 preDefMain(numDefTfv, nPred)Ccharacter*80 surfInt, surfSec, surfMastparameter ( zero = 0.d0 )*xMu = props(1)if ( nDir .eq. 2 ) thendo kcon = 1, ncontactfn = fNormal(kcon)fs = fStickForce(kcon)ft = min ( xMu * fn, fs )fTangential(1,kcon) = -ftend doelse if ( nDir .eq. 3 ) thendo kcon = 1, ncontactfn = fNormal(kcon)fs = fStickForce(kcon)ft = min ( xMu * fn, fs )fTangential(1,kcon) = -ftfTangential(2,kcon) = zeroend doend if*returnend






