36 . IFUNC ,TABLE ,XFACR ,XFACT ,PRESS )
45#include "implicit_f.inc"
54 INTEGER ,
INTENT(IN) :: IFUNC
57 my_real ,
DIMENSION(3) ,
INTENT(IN) :: a,b,c,n1,dir
58 TYPE (TTABLE),
DIMENSION(NTABLE) ,
INTENT(IN) :: TABLE
64 my_real :: a11,a12,a21,a22,b1,b2,det,
alpha,beta,gamma,f1,f2,r,s,
65 . r1,r2,r3,rmax,p1,p2,p3,dydx,nx,ny
66 my_real,
DIMENSION(3) :: ab,ac,an,p,ap,bp,cp
90 npt =
SIZE(table(ifunc)%X(
91 rmax = table(ifunc)%X(1)%VALUES(npt) * xfacr
96 IF (
alpha /= zero)
THEN
99 b1 = an(2) - f1 * an(1)
101 a11 = ab(2) - f1 * ab(1)
102 a12 = ac(2) - f1 * ac(1)
103 a21 = ab(3) - f2 * ab(1)
104 a22 = ac(3) - f2 * ac(1)
105 ELSE IF (beta /= zero)
THEN
108 b1 = an(1) - f1 * an(2)
109 b2 = an(3) - f2 * an(2)
110 a11 = ab(1) - f1 * ab(2)
111 a12 = ac(1) - f1 * ac(2)
112 a21 = ab(3) - f2 * ab(2)
113 a22 = ac(3) - f2 * ac(2)
114 ELSE IF (gamma /= zero)
THEN
117 b1 = an(1) - f1 * an(3)
118 b2 = an(2) - f2 * an(3)
119 a11 = ab(1) - f1 * ab(3)
120 a12 = ac(1) - f1 * ac(3)
121 a21 = ab(2) - f2 * ab(3)
122 a22 = ac(2) - f2 * ac(3)
134 det = a11*a22 - a12*a21
135 IF(det .NE. zero)
THEN
136 r = (a22 * b1 - a12 * b2) / det
137 s = (a11 * b2 - a21 * b1) / det
143 p(1)= a(1) + r*ab(1) + s*ac(1)
144 p(2)= a(2) + r*ab(2) + s*ac(2)
145 p(3)= a(3) + r*ab(3) + s*ac(3)
155 r1 = sqrt(ap(1)**2 + ap(2)**2 + ap(3)**2)
156 r2 = sqrt(bp(1)**2 + bp(2)**2 + bp(3)**2)
157 r3 = sqrt(cp(1)**2 + cp(2)**2 + cp(3)**2)
158 cosp = (dir(1) * ap(1) + dir(2) * ap(2) + dir(3) * ap(3)) /
max(r1,em20)
159 sinp =
max(sqrt(one - cosp**2), em20)
163 xx(2) = tt / xfact ! time
166 cosp = (dir(1) * ap(1) + dir(2) * ap(2) + dir(3) * ap(3)) /
max(r1,em20)
167 sinp =
max(sqrt(one - cosp**2), em20)
174 cosp = (dir(1) * bp(1) + dir(2) * bp(2) + dir(3) * bp(3)) /
max(r2,em20)
175 sinp =
max(sqrt(one - cosp**2), em20)
182 cosp = (dir(1) * cp(1) + dir(2) * cp(2) + dir(3) * cp(3)) /
max(r3,em20)
183 sinp =
max(sqrt(one - cosp**2), em20)
189 press = (p1 + p2 + p3) * third
190 IF (press > zero)
THEN
192 nx = ab(2) * ac(3) - ab(3) * ac(2)
193 ny = ab(3) * ac(1) - ab(1) * ac(3)
194 nz = ab(1) * ac(2) - ab(2) * ac(1)
195 norm = sqrt(nx**2 + ny**2 + nz**2)
196 cosp = abs(nx *
alpha + ny * beta + nz * gamma) /
norm
subroutine press_seg3(a, b, c, n1, dir, ifunc, table, xfacr, xfact, press)