C C User subroutine VFRIC subroutine vfric ( C Write only - * fTangential, C Read/Write - * statev, C Read only - * kStep, kInc, nContact, nFacNod, nSlvNod, nMstNod, * nFricDir, nDir, nStateVar, nProps, nTemp, nPred, numDefTfv, * jSlvUid, jMstUid, jConSlvid, jConMstid, timStep, timGlb, * dTimCur, surfInt, surfSlv, surfMast, lContType, * dSlipFric, fStickForce, fTangPrev, fNormal, frictionWork, * shape, coordSlv, coordMst, dircosSl, dircosN, props, * areaSlv, tempSlv, preDefSlv, tempMst, preDefMst ) C include 'vaba_param.inc' C dimension props(nProps), statev(*), 1 dSlipFric(nDir,nContact), 2 fTangential(nFricDir,nContact), 3 fTangPrev(nDir,nContact), 4 fStickForce(nContact), areaSlv(nSlvNod), 5 fNormal(nContact), shape(nFacNod,nContact), 6 coordSlv(nDir,nSlvNod), coordMst(nDir,nMstNod), 7 dircosSl(nDir,nContact), dircosN(nDir,nContact), 8 jSlvUid(nSlvNod), jMstUid(nMstNod), 9 jConSlvid(nContact), jConMstid(nFacNod,nContact), 1 tempSlv(nContact), tempMst(numDefTfv), 2 preDefSlv(nContact, nPred), 3 preDefMst(numDefTfv, nPred) C character*80 surfInt, surfSlv, surfMast parameter ( jtyp = 0, zero = 0.d0 ) C C FIND GLOBAL (INTERNAL) IDS FOR NODES BLOCK.101 AND BLOCK.102 C jrcd = 0 jusernode1 = 0 call vgetinternal('BLOCK', 101, jtyp, jusernode1, jrcd) jrcd = 0 jusernode2 = 0 call vgetinternal('BLOCK', 102, jtyp, jusernode2, jrcd) C C COMPUTE FRICTIONAL FORCES COMPONENTS AT NODES BLOCK.101 OR C BLOCK.102, IF ANY OF THE NODES BELONGS TO THE SLAVE SURFACE C do kcon = 1, ncontact if (jSlvUid(jConSlvid(kcon)) .eq. jusernode1 .or. $ jSlvUid(jConSlvid(kcon)) .eq. jusernode2) then xMu = props(1) if ( nDir .eq. 2 ) then fn = fNormal(kcon) fs = fStickForce(kcon) ft = min ( xMu * fn, fs ) fTangential(1,kcon) = -ft else if ( nDir .eq. 3 ) then fn = fNormal(kcon) fs = fStickForce(kcon) ft = min ( xMu * fn, fs ) fTangential(1,kcon) = -ft fTangential(2,kcon) = zero end if end if end do * return end