54 interfacesfnumelems, interfacesfnumnodes, &
55 interfacesfelemconn, &
56 mapnodesf,lwrbnd,uppbnd, coor, disp, mapsfelvolel,&
57 elconnvol,ieltype,numelvol,tractpress )
71 INTEGER :: lwrbnd,uppbnd
73 INTEGER :: ieltype,numelvol
74 INTEGER,
DIMENSION(1:iElType,1:NumElVol) :: elconnvol
78 INTEGER :: interfacesfnumelems,interfacesfnumnodes
79 INTEGER,
DIMENSION(1:UppBnd,1:InterfaceSFNumElems) :: interfacesfelemconn
80 INTEGER,
DIMENSION(1:InterfaceSFNumNodes) :: mapnodesf
81 REAL*8,
DIMENSION(1:3*NumNp) :: disp
83 REAL*8,
DIMENSION(1:3*numnp) :: r_ex
88 INTEGER,
DIMENSION(1:3) :: triconn
89 REAL*8,
DIMENSION(1:3) :: uniftract
92 REAL*8,
DIMENSION(1:3,1:numnp) :: coor
101 REAL*8 :: x1x0, y1y0, z1z0
102 REAL*8 :: x2x0, y2y0, z2z0
104 REAL*8 :: magnorm, area,
at
105 REAL*8 :: gauss = 0.333333333333333d0
106 REAL*8 :: weight = 1.0d0
107 REAL*8 :: xnorm,ynorm,znorm
108 REAL*8 :: u1,v1,w1,u2,v2,w2,u3,v3,w3,u4,v4,w4
109 REAL*8 :: x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4
110 REAL*8 :: j11,j12,j13,j21,j22,j23
111 REAL*8 :: invdenjplus
112 REAL*8 :: jplus11, jplus12, jplus21, jplus22, jplus31, jplus32
113 REAL*8 :: gradu11, gradu12, gradu13, gradu21, gradu22, gradu23
114 REAL*8 :: gradu31, gradu32, gradu33
115 REAL*8 :: f11t,f12t,f13t,f21t,f22t,f23t,f31t,f32t,f33t
116 REAL*8 :: j1, undefnorm(1:3)
119 INTEGER :: n1,n2,n3,n4
121 INTEGER :: k1n1,k1n2,k1n3,k1n4,k2n1,k2n2,k2n3,k2n4
122 INTEGER :: k3n1,k3n2,k3n3,k3n4
125 REAL*8 :: x14, x24, x34, y14, y24, y34, z14, z24, z34
127 REAL*8 :: x12, x13, y12, y13, z12, z13
129 REAL*8 :: c11, c21, c31
130 REAL*8 :: vx6, vx6inv
132 REAL*8 :: b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12
134 REAL*8 :: dudx,dvdy,dwdz,dudy,dvdx,dvdz,dwdy,dudz,dwdx
135 INTEGER,
DIMENSION(1:NumElVol) :: mapsfelvolel
137 REAL*8 :: defnorm(1:3)
138 REAL*8 :: denfinvt,magnormdef,area0
139 REAL*8 :: f11,f12,f13,f21,f22,f23,f31,f32,f33
140 REAL*8 :: finvt11, finvt12, finvt13, finvt21, finvt22, finvt23, finvt31, finvt32, finvt33
142 INTEGER :: n1s,n2s,n3s
144 DO i = 1, interfacesfnumelems
148 idvol = mapsfelvolel(
i)
150 n1 = elconnvol(1,idvol)
151 n2 = elconnvol(2,idvol)
152 n3 = elconnvol(3,idvol)
153 n4 = elconnvol(4,idvol)
213 c11 = y24*z34 - z24*y34
214 c21 = -( x24*z34 - z24*x34 )
215 c31 = x24*y34 - y24*x34
217 vx6 = -( x14*c11 + y14*c21 + z14*c31 )
224 b1 = (y34*z24 - y24*z34) * vx6inv
225 b2 = (z34*x24 - z24*x34) * vx6inv
226 b3 = (x34*y24 - x24*y34) * vx6inv
227 b4 = (y13*z14 - y14*z13) * vx6inv
228 b5 = (z13*x14 - z14*x13) * vx6inv
229 b6 = (x13*y14 - x14*y13) * vx6inv
230 b7 = (y14*z12 - y12*z14) * vx6inv
231 b8 = (z14*x12 - z12*x14) * vx6inv
232 b9 = (x14*y12 - x12*y14) * vx6inv
233 b10 = (y12*z13 - y13*z12) * vx6inv
234 b11 = (z12*x13 - z13*x12) * vx6inv
235 b12 = (x12*y13 - x13*y12) * vx6inv
239 dudx = b1*u1 + b4*u2 + b7*u3 + b10*u4
240 dvdy = b2*v1 + b5*v2 + b8*v3 + b11*v4
241 dwdz = b3*w1 + b6*w2 + b9*w3 + b12*w4
242 dudy = b2*u1 + b5*u2 + b8*u3 + b11*u4
243 dvdx = b1*v1 + b4*v2 + b7*v3 + b10*v4
244 dvdz = b3*v1 + b6*v2 + b9*v3 + b12*v4
245 dwdy = b2*w1 + b5*w2 + b8*w3 + b11*w4
246 dudz = b3*u1 + b6*u2 + b9*u3 + b12*u4
247 dwdx = b1*w1 + b4*w2 + b7*w3 + b10*w4
265 denfinvt = f11*(f22*f33-f32*f23) - f12*(f21*f33+f31*f23) + f13*(f21*f32-f31*f22)
267 finvt11 = (f22*f33-f32*f23)/denfinvt
268 finvt12 = -(f21*f33-f31*f23)/denfinvt
269 finvt13 = (f21*f32-f31*f22)/denfinvt
270 finvt21 = -(f12*f33-f32*f13)/denfinvt
271 finvt22 = (f11*f33-f31*f13)/denfinvt
272 finvt23 = -(f11*f32-f31*f12)/denfinvt
273 finvt31 = (f12*f23-f22*f13)/denfinvt
274 finvt32 = -(f11*f23-f21*f13)/denfinvt
275 finvt33 = (f11*f22-f21*f12)/denfinvt
281 triconn(1:3) = interfacesfelemconn(1:3,
i)
289 n1s = mapnodesf(triconn(1))
290 n2s = mapnodesf(triconn(2))
291 n3s = mapnodesf(triconn(3))
294 IF(n1s.NE.n1.AND.n1s.NE.n2.AND.n1s.NE.n3.AND.n1s.NE.n4)
THEN
295 print*,
'n1s NOT part of volume element',n1s,n1,n2,n3,n4,mapsfelvolel(
i),
i
298 IF(n2s.NE.n1.AND.n2s.NE.n2.AND.n2s.NE.n3.AND.n2s.NE.n4)
THEN
299 print*,
'n2s NOT part of volume element'
302 IF(n3s.NE.n1.AND.n3s.NE.n2.AND.n3s.NE.n3.AND.n3s.NE.n4)
THEN
303 print*,
'n3s NOT part of volume element'
308 x1 = coor(1,mapnodesf(triconn(1)))
309 y1 = coor(2,mapnodesf(triconn(1)))
310 z1 = coor(3,mapnodesf(triconn(1)))
312 x2 = coor(1,mapnodesf(triconn(2)))
313 y2 = coor(2,mapnodesf(triconn(2)))
314 z2 = coor(3,mapnodesf(triconn(2)))
316 x3 = coor(1,mapnodesf(triconn(3)))
317 y3 = coor(2,mapnodesf(triconn(3)))
318 z3 = coor(3,mapnodesf(triconn(3)))
320 u1 = disp(3*mapnodesf(triconn(1))-2)
321 v1 = disp(3*mapnodesf(triconn(1))-1)
322 w1 = disp(3*mapnodesf(triconn(1)) )
324 u2 = disp(3*mapnodesf(triconn(2))-2)
325 v2 = disp(3*mapnodesf(triconn(2))-1)
326 w2 = disp(3*mapnodesf(triconn(2)) )
328 u3 = disp(3*mapnodesf(triconn(3))-2)
329 v3 = disp(3*mapnodesf(triconn(3))-1)
330 w3 = disp(3*mapnodesf(triconn(3)) )
357 x3p = y1y0 * z2z0 - z1z0 * y2y0
358 y3p = z1z0 * x2x0 - x1x0 * z2z0
359 z3p = x1x0 * y2y0 - y1y0 * x2x0
363 magnorm =
sqrt( x3p*x3p + y3p*y3p + z3p*z3p )
373 defnorm(1) = jac3d * (finvt11*xnorm+finvt12*ynorm+finvt13*znorm)
374 defnorm(2) = jac3d * (finvt21*xnorm+finvt22*ynorm+finvt23*znorm)
375 defnorm(3) = jac3d * (finvt31*xnorm+finvt32*ynorm+finvt33*znorm)
377 magnormdef =
sqrt( defnorm(1)**2 + defnorm(2)**2 + defnorm(3)**2 )
379 defnorm(1) = defnorm(1)/magnormdef
380 defnorm(2) = defnorm(2)/magnormdef
381 defnorm(3) = defnorm(3)/magnormdef
407 x3p = y1y0 * z2z0 - z1z0 * y2y0
408 y3p = z1z0 * x2x0 - x1x0 * z2z0
409 z3p = x1x0 * y2y0 - y1y0 * x2x0
413 magnormdef =
sqrt( x3p*x3p + y3p*y3p + z3p*z3p )
415 area = 0.5*magnormdef
419 uniftract(1) = -tractpress*defnorm(1)*area/3.d0
420 uniftract(2) = -tractpress*defnorm(2)*area/3.d0
421 uniftract(3) = -tractpress*defnorm(3)*area/3.d0
427 triconn(1:3) = interfacesfelemconn(lwrbnd:uppbnd,
i)
430 nz = mapnodesf(triconn(
j))*3
433 r_ex(nx) = r_ex(nx) + uniftract(1)
434 r_ex(ny) = r_ex(ny) + uniftract(2)
435 r_ex(nz) = r_ex(nz) + uniftract(3)
subroutine tractpressload(R_ex, numnp, InterfaceSFNumElems, InterfaceSFNumNodes, InterfaceSFElemConn, MapNodeSF, LwrBnd, UppBnd, coor, Disp, MapSFElVolEl, ElConnVol, iElType, NumElVol, TractPress)