38 . FOR_T1, FOR_T2, FOR_T3, FOR_T4,
39 . FORC_N, LL , IFCTL, IFC1 ,
40 . PENMIN, PENREF, MARGE, FQMAX,
41 . STIF0, NEL , VC,E_DISTOR,
46#include "implicit_f.inc"
54 INTEGER,
INTENT (IN) :: NEL
55 INTEGER,
INTENT (OUT) :: IFCTL
56 INTEGER,
DIMENSION(MVSIZ),
INTENT (IN) :: IFC1
57 my_real,
INTENT (IN) :: FQMAX,DT1
58 my_real,
DIMENSION(MVSIZ),
INTENT (IN) ::
66 . penref, ll, stif0, marge
67 my_real,
DIMENSION(MVSIZ),
INTENT (INOUT) :: stif
68 my_real,
DIMENSION(MVSIZ,3),
INTENT (INOUT) :: forc_n,
69 . for_t1, for_t2, for_t3, for_t4
70 my_real,
DIMENSION(MVSIZ,3),
INTENT (IN) :: vc
71 my_real,
DIMENSION(NEL),
INTENT (INOUT) :: e_distor
78 INTEGER I,J,IFCTL1,ITG(MVSIZ),IFC2(MVSIZ),ie
81 . nx(mvsiz),ny(mvsiz),nz(mvsiz),
82 . xsc(mvsiz),ysc(mvsiz),zsc(mvsiz),pene(mvsiz),
83 . xa(mvsiz),ya(mvsiz),za(mvsiz),hj(mvsiz,4),
84 . xb(mvsiz),yb(mvsiz),zb(mvsiz),fn(mvsiz),
85 . xc(mvsiz),yc(mvsiz),zc(mvsiz),
area(mvsiz),
86 . la(mvsiz),lb(mvsiz),lc(mvsiz),fkt,
87 . rx, ry, rz, sx, sy, sz,vxc,vyc,vzc,
88 . x42,y42, z42, x31, y31, z31,fx,fy,fz,
90 . trx,try,trz,tsx,tsy,tsz,ttx,tty,ttz,
91 . tr2,ts2,tt2,aaa,bbb,vr,vs,vt
92 . xab,xbc,xca,yab,ybc,yca,zab,zbc,zca,
94 . zia, zib, zic, h0,
norm,s2,fac,
95 . f_q,f_c,kts,zerom,tx,ty,tz,pene3,pene4,pendr,lj,
98 ifc2(1:nel) = ifc1(1:nel)
108 IF (ifc2(i)==0) cycle
109 xsc(i) = fourth*(x1(i)+x2(i)+x3(i)+x4(i))
110 ysc(i) = fourth*(y1(i)+y2(i)+y3(i)+y4(i))
111 zsc(i) = fourth*(z1(i)+z2(i)+z3(i)+z4(i))
120 IF (ifc2(i)==0) cycle
121 rx =x2(i)+x3(i)-x1(i)-x4(i)
122 ry =y2(i)+y3(i)-y1(i)-y4(i)
123 rz =z2(i)+z3(i)-z1(i)-z4(i)
124 sx =x3(i)+x4(i)-x1(i)-x2(i)
125 sy =y3(i)+y4(i)-y1(i)-y2(i)
126 sz =z3(i)+z4(i)-z1(i)-z2(i)
130 area(i) = nx(i)*nx(i)+ny(i)*ny(i)+nz(i)*nz(i)
135 bbb =(xsc(i)-xi(i))*nx(i) +
136 . (ysc(i)-yi(i))*ny(i) +
138 pene(i) =
max(zero,-bbb)
139 IF (four*
area(i)<penmin(i)*ll(i))
140 . pene(i)=
min(pene(i),em01*penmin(i))
141 IF (
area(i)<em20) pene(i) =zero
153 IF(pene(i) == zero ) cycle
155 SELECT CASE (ifc2(i))
197! pene(i) = em01*pene(i)
203 bbb =(x3(i)-xi(i))*nx(i) +
204 . (y3(i)-yi(i))*ny(i) +
205 . (z3(i)-zi(i))*nz(i) -penmin(i)
206 pene3 =
max(zero,-bbb)
207 bbb =(x4(i)-xi(i))*nx(i) +
208 . (y4(i)-yi(i))*ny(i) +
209 . (z4(i)-zi(i))*nz(i) -penmin(i)
210 pene4 =
max(zero,-bbb)
211 IF (pene3>pene(i).AND.pene4>pene(i))
THEN
219 ELSEIF (pene3>pene(i))
THEN
227 ELSEIF (pene4>pene(i))
THEN
246 IF(pene(i) == zero.OR.itg(i)==1) cycle
256 area(i) = nx(i)*nx(i)+ny(i)*ny(i)+nz(i)*nz(i)
261 bbb = (x3(i)-xi(i))*nx(i) +
262 . (y3(i)-yi(i))*ny(i) +
263 . (z3(i)-zi(i))*nz(i) -penmin(i)
264 pene(i) =
max(zero,-bbb)
265 IF (four*
area(i)<penmin(i)*ll(i))
266 . pene(i)=
min(pene(i),em01*penmin(i))
269 IF(pene(i) == zero) cycle
289 sx = - yab*zca + zab*yca
290 sy = - zab*xca + xab*zca
291 sz = - xab*yca + yab*xca
292 s2 = sx*sx+sy*sy+sz*sz
293 sax = yib*zic - zib*yic
294 say = zib*xic - xib*zic
295 saz = xib*yic - yib*xic
296 la(i) = (sx*sax+sy*say+sz*saz)/s2
297 sbx = yic*zia - zic*yia
298 sby = zic*xia - xic*zia
299 sbz = xic*yia - yic*xia
300 lb(i) = (sx*sbx+sy*sby+sz*sbz)/s2
301 lc(i) = one - la(i) - lb(i)
302 lj =
min(la(i),lb(i),lc(i))
303 IF (lj<zerom) pene(i)=
min(pene(i),penmin(i))
309 ELSEIF(lc(i)<zero)
THEN
319 ELSEIF(lb(i)<zero)
THEN
330 ELSEIF(lc(i)<zero)
THEN
338 IF(pene(i) == zero) cycle
340 SELECT CASE (ifc2(i))
390 IF(pene(i) == zero) cycle
391 pendr = (pene(i)/penref(i))**2
392 fac =
min(fqmax,f_q*pendr)
393 fn(i) = (fac+one)*stif0(i)*pene(i)
395 stif(i) =
max(stif(i),fkt*stif0(i))
398 IF(pene(i) == zero) cycle
399 dx = vc(i,1) - hj(i,1)*vx1(i) - hj(i,2)*vx2(i)
400 . - hj(i,3)*vx3(i) - hj(i,4)*vx4(i)
401 dy = vc(i,2) - hj(i,1)*vy1(i) - hj(i,2)*vy2(i)
402 . - hj(i,3)*vy3(i) - hj(i,4)*vy4(i)
403 dz = vc(i,3) - hj(i,1)*vz1(i) - hj(i,2)*vz2(i)
404 . - hj(i,3)*vz3(i) - hj(i,4)*vz4(i)
405 dn = (nx(i)*dx + ny(i)*dy + nz(i)*dz)*dt1
406 e_distor(i) = e_distor(i) - fn(i)*dn
409 IF (pene(i) ==zero) cycle
413 forc_n(i,1) = forc_n(i,1) - fx
414 forc_n(i,2) = forc_n(i,2) - fy
415 forc_n(i,3) = forc_n(i,3) - fz
416 for_t1(i,1) = for_t1(i,1) + fx*hj(i,1)
417 for_t1(i,2) = for_t1(i,2) + fy*hj(i,1)
418 for_t1(i,3) = for_t1(i,3) + fz*hj(i,1)
419 for_t2(i,1) = for_t2(i,1) + fx*hj(i,2)
420 for_t2(i,2) = for_t2(i,2) + fy*hj(i,2)
421 for_t2(i,3) = for_t2(i,3) + fz*hj(i,2)
422 for_t3(i,1) = for_t3(i,1) + fx*hj(i,3)
423 for_t3(i,2) = for_t3(i,2) + fy*hj(i,3)
424 for_t3(i,3) = for_t3(i,3) + fz*hj(i,3)
425 for_t4(i,1) = for_t4(i,1) + fx*hj(i,4)
426 for_t4(i,2) = for_t4(i,2) + fy*hj(i,4)
427 for_t4(i,3) = for_t4(i,3) + fz*hj(i,4)
subroutine sfor_n2s4(xi, yi, zi, stif, x1, x2, x3, x4, y1, y2, y3, y4, z1, z2, z3, z4, vx1, vx2, vx3, vx4, vy1, vy2, vy3, vy4, vz1, vz2, vz3, vz4, for_t1, for_t2, for_t3, for_t4, forc_n, ll, ifctl, ifc1, penmin, penref, marge, fqmax, stif0, nel, vc, e_distor, dt1)