31       integer konl(9),i,j,imat,ncmat_,ntmat_,nope,nterms,iflag,mi(*),
    32      &  kode,niso,id,nplicon(0:ntmat_,*),npmat_,nelcon(2,*),nener,
    33      &  nmethod,ne0,nstate_,ielas,norien,nelem,ielorien(mi(3),*),
    34      &  iorien,idof,idof1,idof2
    36       real*8 xl(3,10),elas(21),ratio(9),t1l,al(3),vl(0:mi(2),10),
    37      &  pl(3,10),xn(3),dm,alpha,beta,fnl(3,10),tp(3),te(3),ftrial(3),
    38      &  
dist,t(3),dftrial,overclosure,venergy,orab(7,*),a(3,3),
    39      &  elcon(0:ncmat_,ntmat_,*),pproj(3),xsj2(3),xs2(3,7),clear,
    40      &  shp2(7,9),xi,et,elconloc(21),plconloc(802),xk,fk,dd,val,
    41      &  xiso(200),yiso(200),dd0,plicon(0:2*npmat_,ntmat_,*),
    42      &  um,eps,pi,senergy,cstr(6),dg,dfshear,dfnl,
    43      &  springarea(2),overlap,pres,xn1(3),xn2(3),
    44      &  xstate(nstate_,mi(1),*),xstateini(nstate_,mi(1),*),t1(3),t2(3),
    45      &  dt1,dte,alnew(3),reltime
    47       intent(in) xl,konl,vl,imat,elcon,nelcon,
    48      &  ncmat_,ntmat_,nope,lakonl,t1l,kode,elconloc,
    49      &  plicon,nplicon,npmat_,nener,mi,
    50      &  nmethod,ne0,nstate_,xstateini,
    51      &  reltime,ielas,ielorien,orab,norien,nelem
    53       intent(inout) venergy,senergy,fnl,cstr,springarea,elas,xstate
    57       if(nener.eq.1) venergy=0.d0
    65                pl(j,i)=xl(j,i)+vl(j,i)
    80       if(lakonl(7:7).eq.
'A') 
then    81          if(lakonl(4:6).eq.
'RNG') 
then    85             dd0=dsqrt((xl(1,2)-xl(1,1))**2
    86      &           +(xl(2,2)-xl(2,1))**2
    87      &           +(xl(3,2)-xl(3,1))**2)
    88             dd=dsqrt((pl(1,2)-pl(1,1))**2
    89      &           +(pl(2,2)-pl(2,1))**2
    90      &           +(pl(3,2)-pl(3,1))**2)
    92                write(*,*) 
'*ERROR in springforc_n2f: spring connects'    93                write(*,*) 
'       two nodes at the same location:'    94                write(*,*) 
'       spring length is zero'    98                xn(i)=(pl(i,2)-pl(i,1))/dd
   105      &           kode,plicon,nplicon,npmat_,senergy,nener,fk,val)
   113      &           elconloc,kode,plicon,nplicon,npmat_,plconloc,ncmat_)
   121             eps=pi*elconloc(6)/xk
   122             overclosure=-dd-xn(1)*(vl(1,2)-vl(1,1))
   123      &                     -xn(2)*(vl(2,2)-vl(2,1))
   124      &                     -xn(3)*(vl(3,2)-vl(3,1))
   125             fk=-xk*overclosure*(0.5d0+datan(overclosure/eps)/pi)
   133       elseif(lakonl(7:7).eq.
'1') 
then   138          idof=nint(elcon(3,1,imat))
   141             iorien=ielorien(1,nelem)
   160          val=vl(1,1)*xn(1)+vl(2,1)*xn(2)+vl(3,1)*xn(3)
   165      &        kode,plicon,nplicon,npmat_,senergy,nener,fk,val)
   171       elseif(lakonl(7:7).eq.
'2') 
then   176          idof1=nint(elcon(3,1,imat))
   177          idof2=nint(elcon(4,1,imat))
   180             iorien=ielorien(1,nelem)
   205          val=(vl(1,1)*xn1(1)+vl(2,1)*xn1(2)+vl(3,1)*xn1(3))
   206      &      -(vl(1,2)*xn2(1)+vl(2,2)*xn2(2)+vl(3,2)*xn2(3))
   211      &        kode,plicon,nplicon,npmat_,senergy,nener,fk,val)
   230          al(i)=pl(i,nope)-pproj(i)
   236          call shape9q(xi,et,pl,xsj2,xs2,shp2,iflag)
   237       elseif(nterms.eq.8) 
then   238          call shape8q(xi,et,pl,xsj2,xs2,shp2,iflag)
   239       elseif(nterms.eq.4) 
then   240          call shape4q(xi,et,pl,xsj2,xs2,shp2,iflag)
   241       elseif(nterms.eq.6) 
then   242          call shape6tri(xi,et,pl,xsj2,xs2,shp2,iflag)
   243       elseif(nterms.eq.7) 
then   244          call shape7tri(xi,et,pl,xsj2,xs2,shp2,iflag)
   246          call shape3tri(xi,et,pl,xsj2,xs2,shp2,iflag)
   251       dm=dsqrt(xsj2(1)*xsj2(1)+xsj2(2)*xsj2(2)+xsj2(3)*xsj2(3))
   258       clear=al(1)*xn(1)+al(2)*xn(2)+al(3)*xn(3)
   262       if(nmethod.eq.1) 
then   263          clear=clear-springarea(2)*(1.d0-reltime)
   265       if(clear.le.0.d0) cstr(1)=clear
   281       if(springarea(1).le.0.d0) 
then   283             springarea(1)=dm/2.d0
   285             springarea(1)=dm*4.d0
   289       if(int(elcon(3,1,imat)).eq.1) 
then   293          if(dabs(elcon(2,1,imat)).lt.1.d-30) 
then   298             alpha=elcon(2,1,imat)*springarea(1)
   300             if(-beta*clear.gt.23.d0-dlog(alpha)) 
then   301                beta=(dlog(alpha)-23.d0)/clear
   303             elas(1)=dexp(-beta*clear+dlog(alpha))
   308       elseif(int(elcon(3,1,imat)).eq.2) 
then   313          if(nmethod.eq.4) 
then   318             if(clear.le.0.d0)
then   320                eps=elcon(1,1,imat)*pi/elcon(2,1,imat)
   321                elas(1)=(-springarea(1)*elcon(2,1,imat)*clear*
   322      &              (0.5d0+datan(-clear/eps)/pi))
   324      &             senergy=springarea(1)*elcon(2,1,imat)*(clear**2/4.d0+
   329                if(nener.eq.1) senergy=0.d0
   334             eps=elcon(1,1,imat)*pi/elcon(2,1,imat)
   335             elas(1)=(-springarea(1)*elcon(2,1,imat)*clear*
   336      &           (0.5d0+datan(-clear/eps)/pi)) 
   338                senergy=-elas(1)*clear/2.d0
   342       elseif(int(elcon(3,1,imat)).eq.3) 
then   349      &     elconloc,kode,plicon,nplicon,npmat_,plconloc,ncmat_)
   351          niso=int(plconloc(801))
   353             xiso(i)=plconloc(2*i-1)
   354             yiso(i)=plconloc(2*i)
   356          call ident(xiso,overlap,niso,id)
   360                senergy=yiso(1)*overlap
   362          elseif(id.eq.niso) 
then   365                senergy=yiso(1)*xiso(1)
   367                   senergy=senergy+(xiso(i)-xiso(i-1))*
   368      &                            (yiso(i)+yiso(i-1))/2.d0
   370                senergy=senergy+(pres-xiso(niso))*yiso(niso)
   373             xk=(yiso(id+1)-yiso(id))/(xiso(id+1)-xiso(id))
   374             pres=yiso(id)+xk*(overlap-xiso(id))
   376                senergy=yiso(1)*xiso(1)
   378                   senergy=senergy+(xiso(i)-xiso(i-1))*
   379      &                 (yiso(i)+yiso(i-1))/2.d0
   381                senergy=senergy+(overlap-xiso(id))*(pres+yiso(id))/2.d0
   384          elas(1)=springarea(1)*pres
   385          if(nener.eq.1) senergy=springarea(1)*senergy
   387          write(*,*) 
'*ERROR in springforc: no overclosure model'   388          write(*,*) 
'       selected. This is mandatory in a penalty'   389          write(*,*) 
'       contact calculation. Please use the'   390          write(*,*) 
'       *SURFACE BEHAVIOR card.'   397          fnl(i,nope)=-elas(1)*xn(i)
   399       cstr(4)=elas(1)/springarea(1)
   406             if(1.d0 - dabs(xn(1)).lt.1.5231d-6) 
then          412                t1(3)=1.d0-xn(3)*xn(3)
   414                t1(1)=1.d0-xn(1)*xn(1)
   418             dt1=dsqrt(t1(1)*t1(1)+t1(2)*t1(2)+t1(3)*t1(3))
   422             t2(1)=xn(2)*t1(3)-xn(3)*t1(2)
   423             t2(2)=xn(3)*t1(1)-xn(1)*t1(3)
   424             t2(3)=xn(1)*t1(2)-xn(2)*t1(1)           
   429             xk=elcon(7,1,imat)*springarea(1)
   437                   alnew(i)=alnew(i)-ratio(j)*vl(i,j)
   445                al(i)=alnew(i)-xstateini(3+i,1,ne0+konl(nope+1))
   450             val=al(1)*xn(1)+al(2)*xn(2)+al(3)*xn(3)
   455                t(i)=xstateini(6+i,1,ne0+konl(nope+1))+al(i)-val*xn(i)
   462                xstate(3+i,1,ne0+konl(nope+1))=alnew(i)
   463                xstate(6+i,1,ne0+konl(nope+1))=t(i)
   468             dfnl=dsqrt(fnl(1,nope)**2+fnl(2,nope)**2+fnl(3,nope)**2)
   477                tp(i)=xstateini(i,1,ne0+konl(nope+1))
   480             dte=dsqrt(te(1)*te(1)+te(2)*te(2)+te(3)*te(3))
   492             if((dftrial.lt.dfshear).or.(dftrial.le.0.d0).or.
   499                   fnl(i,nope)=fnl(i,nope)+ftrial(i)
   500                   xstate(i,1,ne0+konl(nope+1))=tp(i)
   502                cstr(5)=(ftrial(1)*t1(1)+ftrial(2)*t1(2)+
   503      &              ftrial(3)*t1(3))/springarea(1)
   504                cstr(6)=(ftrial(1)*t2(1)+ftrial(2)*t2(2)+
   505      &              ftrial(3)*t2(3))/springarea(1)
   509                if(nener.eq.1) senergy=senergy+dftrial*dte
   515                dg=(dftrial-dfshear)/xk
   518                   fnl(i,nope)=fnl(i,nope)+dfshear*ftrial(i)
   519                   xstate(i,1,ne0+konl(nope+1))=tp(i)+dg*ftrial(i)
   521                cstr(5)=(dfshear*ftrial(1)*t1(1)+
   522      &              dfshear*ftrial(2)*t1(2)+
   523      &              dfshear*ftrial(3)*t1(3))/springarea(1)
   524                cstr(6)=(dfshear*ftrial(1)*t2(1)+
   525      &              dfshear*ftrial(2)*t2(2)+
   526      &              dfshear*ftrial(3)*t2(3))/springarea(1)
   531                   senergy=senergy+dfshear*dfshear/xk
   540          cstr(2)=t(1)*t1(1)+t(2)*t1(2)+t(3)*t1(3)
   541          cstr(3)=t(1)*t2(1)+t(2)*t2(2)+t(3)*t2(3)
   548             fnl(i,j)=-ratio(j)*fnl(i,nope)
 subroutine ident(x, px, n, id)
Definition: ident.f:26
 
subroutine shape9q(xi, et, xl, xsj, xs, shp, iflag)
Definition: shape9q.f:20
 
subroutine shape8q(xi, et, xl, xsj, xs, shp, iflag)
Definition: shape8q.f:20
 
subroutine shape3tri(xi, et, xl, xsj, xs, shp, iflag)
Definition: shape3tri.f:20
 
subroutine shape7tri(xi, et, xl, xsj, xs, shp, iflag)
Definition: shape7tri.f:20
 
subroutine calcspringforc(imat, elcon, nelcon, ncmat_, ntmat_, t1l, kode, plicon, nplicon, npmat_, senergy, nener, fk, val)
Definition: calcspringforc.f:21
 
static double * dist
Definition: radflowload.c:42
 
subroutine shape4q(xi, et, xl, xsj, xs, shp, iflag)
Definition: shape4q.f:20
 
subroutine materialdata_sp(elcon, nelcon, imat, ntmat_, i, t1l, elconloc, kode, plicon, nplicon, npmat_, plconloc, ncmat_)
Definition: materialdata_sp.f:20
 
subroutine shape6tri(xi, et, xl, xsj, xs, shp, iflag)
Definition: shape6tri.f:20
 
subroutine attach(pneigh, pnode, nterms, ratio, dist, xil, etl)
Definition: attach.f:20