55 interfacenumelems, interfacenumnodes, &
57 mapnode,lwrbnd,uppbnd,coor)
61 INTEGER :: lwrbnd,uppbnd
63 INTEGER :: interfacenumelems,interfacenumnodes
64 INTEGER,
DIMENSION(1:UppBnd,1:InterfaceNumElems) :: interfaceelemconn
65 INTEGER,
DIMENSION(1:InterfaceNumNodes) :: mapnode
66 REAL*8,
DIMENSION(1:InterfaceNumElems) :: interfaceelemtract
70 REAL*8,
DIMENSION(1:3*numnp) :: r_ex
75 INTEGER,
DIMENSION(1:4) :: conn2d
76 real*8,
DIMENSION(1:3) :: dlvec
77 real*8 :: pmag, magnormdef, area
80 REAL*8,
DIMENSION(1:3,1:numnp) :: coor
84 REAL*8,
DIMENSION(1:3) :: veca, vecb, outwd_surface_normal, &
85 half_normal_veca, half_normal_vecb
87 DO i = 1, interfacenumelems
91 conn2d(1:4) = interfaceelemconn(1:4,
i)
97 veca(1:3) = coor(1:3,mapnode(conn2d(2)))- coor(1:3,mapnode(conn2d(1)))
98 vecb(1:3) = coor(1:3,mapnode(conn2d(4)))- coor(1:3,mapnode(conn2d(1)))
100 half_normal_veca(1) = veca(2)*vecb(3) - vecb(2)*veca(3)
101 half_normal_veca(2) = veca(3)*vecb(1) - vecb(3)*veca(1)
102 half_normal_veca(3) = veca(1)*vecb(2) - vecb(1)*veca(2)
104 veca(1:3) = coor(1:3,mapnode(conn2d(4))) - coor(1:3,mapnode(conn2d(3)))
105 vecb(1:3) = coor(1:3,mapnode(conn2d(2))) - coor(1:3,mapnode(conn2d(3)))
107 half_normal_vecb(1) = veca(2)*vecb(3) - vecb(2)*veca(3)
108 half_normal_vecb(2) = veca(3)*vecb(1) - vecb(3)*veca(1)
109 half_normal_vecb(3) = veca(1)*vecb(2) - vecb(1)*veca(2)
111 outwd_surface_normal = half_normal_veca + half_normal_vecb
117 pmag = interfaceelemtract(
i)*0.125d0
119 dlvec(1:3) = - pmag * outwd_surface_normal(1:3)
128 conn2d(1:4) = interfaceelemconn(lwrbnd:uppbnd,
i)
131 nz = mapnode(conn2d(
j))*3
134 r_ex(nx) = r_ex(nx) + dlvec(1)
135 r_ex(ny) = r_ex(ny) + dlvec(2)
136 r_ex(nz) = r_ex(nz) + dlvec(3)
subroutine tractload_hex(R_ex, numnp, InterfaceElemTract, InterfaceNumElems, InterfaceNumNodes, InterfaceElemConn, MapNode, LwrBnd, UppBnd, coor)