54 interfacenumelems, interfacenumnodes, &
56 mapnode,lwrbnd,uppbnd,coor,interfaceelemtract)
60 INTEGER :: lwrbnd,uppbnd
62 INTEGER :: interfacenumelems,interfacenumnodes
63 INTEGER,
DIMENSION(1:UppBnd,1:InterfaceNumElems) :: interfaceelemconn
64 INTEGER,
DIMENSION(1:InterfaceNumNodes) :: mapnode
65 REAL*8 :: interfaceelemtract
69 REAL*8,
DIMENSION(1:3*numnp) :: r_ex
74 INTEGER,
DIMENSION(1:4) :: conn2d
76 integer,
DIMENSION(1:12) :: dlvec
80 REAL*8,
DIMENSION(1:3,1:numnp) :: coor
82 REAL*8,
DIMENSION(1:3) :: veca, vecb, outwd_surface_normal, &
83 half_normal_veca, half_normal_vecb
85 DO i = 1, interfacenumelems
89 conn2d(1:4) = interfaceelemconn(1:4,
i)
95 veca(1:3) = coor(1:3,mapnode(conn2d(2)))- coor(1:3,mapnode(conn2d(1)))
96 vecb(1:3) = coor(1:3,mapnode(conn2d(4)))- coor(1:3,mapnode(conn2d(1)))
98 half_normal_veca(1) = veca(2)*vecb(3) - vecb(2)*veca(3)
99 half_normal_veca(2) = veca(3)*vecb(1) - vecb(3)*veca(1)
100 half_normal_veca(3) = veca(1)*vecb(2) - vecb(1)*veca(2)
102 veca(1:3) = coor(1:3,mapnode(conn2d(4))) - coor(1:3,mapnode(conn2d(3)))
103 vecb(1:3) = coor(1:3,mapnode(conn2d(2))) - coor(1:3,mapnode(conn2d(3)))
105 half_normal_vecb(1) = veca(2)*vecb(3) - vecb(2)*veca(3)
106 half_normal_vecb(2) = veca(3)*vecb(1) - vecb(3)*veca(1)
107 half_normal_vecb(3) = veca(1)*vecb(2) - vecb(1)*veca(2)
109 outwd_surface_normal = half_normal_veca + half_normal_vecb
111 pmag = -interfaceelemtract*0.125d0
113 dlvec(1:3) = pmag * outwd_surface_normal(1:3)
114 dlvec(4:6) = pmag * outwd_surface_normal(1:3)
115 dlvec(7:9) = pmag * outwd_surface_normal(1:3)
116 dlvec(10:12) = pmag * outwd_surface_normal(1:3)
120 conn2d(1:4) = interfaceelemconn(lwrbnd:uppbnd,
i)
123 nz = mapnode(conn2d(
j))*3
126 r_ex(nx) = r_ex(nx) + pmag * outwd_surface_normal(1)
127 r_ex(ny) = r_ex(ny) + pmag * outwd_surface_normal(2)
128 r_ex(nz) = r_ex(nz) + pmag * outwd_surface_normal(3)
subroutine tractloadpress_hex(R_ex, numnp, InterfaceNumElems, InterfaceNumNodes, InterfaceElemConn, MapNode, LwrBnd, UppBnd, coor, InterfaceElemTract)