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