29 SUBROUTINE sph_nodseg(XI,YI,ZI,XX,TFLAG,NP,LONFSPH,IXP,DPS,WNORMAL,FLAG)
33#include "implicit_f.inc"
37 INTEGER TFLAG,LONFSPH(*),IXP(*),NP,FLAG
39 . xi,yi,zi,xx(12),dps(*),wnormal(3,*)
45 . x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4,xc,yc,zc,
46 . x12,y12,z12,x23,y23,z23,x31,y31,z31,
47 . xh,yh,zh,x1h,y1h,z1h,nxh,nyh,nzh,
48 . nn,nx1,ny1,nz1,nx2,ny2,nz2,nx3,ny3,nz3,nx4,ny4,nz4,
49 . d1,d2,d3,d4,d12,d23,d34,d41,ps,n12,
55 IF (flag==1) dps(np) = 1.e+20
71 xc=fourth*(x1+x2+x3+x4)
72 yc=fourth*(y1+y2+y3+y4)
73 zc=fourth*(z1+z2+z3+z4)
94 nn =one/
max(em20,sqrt(nx1*nx1+ny1*ny1+nz1*nz1))
98 d1=nx1*(xi-x1)+ny1*(yi-y1)+nz1*(zi-z1)
108 IF(nxh*nx1+nyh*ny1+nzh*nz1>=zero)k=k+1
115 IF(nxh*nx1+nyh*ny1+nzh*nz1>=zero)k=k+1
122 IF(nxh*nx1+nyh*ny1+nzh
125 IF(abs(d1)<abs(dps(np)))
THEN
151 nn =one/
max(em20,sqrt(nx2*nx2+ny2*ny2+nz2*nz2))
155 d2=nx2*(xi-x2)+ny2*(yi-y2)+nz2*(zi-z2)
165 IF(nxh*nx2+nyh*ny2+nzh*nz2>=zero)k=k+1
172 IF(nxh*nx2+nyh*ny2+nzh*nz2>=zero)k=k+1
179 IF(nxh*nx2+nyh*ny2+nzh*nz2>=zero)k=k+1
182 IF(abs(d2)<abs(dps(np)))
THEN
206 nn =one/
max(em20,sqrt(nx3*nx3+ny3*ny3+nz3*nz3))
210 d3=nx3*(xi-x3)+ny3*(yi-y3)+nz3*(zi-z3)
220 IF(nxh*nx3+nyh*ny3+nzh*nz3>=zero)k=k+1
227 IF(nxh*nx3+nyh*ny3+nzh*nz3>=zero)k=k+1
234 IF(nxh*nx3+nyh*ny3+nzh*nz3>=zero)k=k+1
237 IF(abs(d3)<abs(dps(np)))
THEN
261 nn =one/
max(em20,sqrt(nx4*nx4+ny4*ny4+nz4*nz4))
265 d4=nx4*(xi-x4)+ny4*(yi-y4)+nz4*(zi-z4)
275 IF(nxh*nx4+nyh*ny4+nzh*nz4>=zero)k=k+1
282 IF(nxh*nx4+nyh*ny4+nzh*nz4>=zero)k=k+1
289 IF(nxh*nx4+nyh*ny4+nzh*nz4>=zero)k=k+1
292 IF(abs(d4)<abs(dps(np)))
THEN
308 n12=sqrt(x12*x12+y12*y12+z12*z12)
309 nn =one/
max(em20,n12)
313 ps=(xi-x1)*x12+(yi-y1)*y12+(zi-z1)*z12
314 IF(ps>=zero.AND.ps<=n12)
THEN
330 d12=sqrt(x1h*x1h+y1h*y1h+z1h*z1h)
331 IF(d12<=onep001*abs(dps(np)).AND.d1/=zero)
THEN
332 IF(d12<zep999*abs(dps(np)))
THEN
334 ELSEIF (flag==0)
THEN
337 IF(d12<abs(dps(np)))dps(np)=sign(d12,d1)
346 n12=sqrt(x12*x12+y12*y12+z12*z12)
347 nn =one/
max(em20,n12)
351 ps=(xi-x2)*x12+(yi-y2)*y12+(zi-z2)*z12
352 IF(ps>=zero.AND.ps<=n12)
THEN
368 d23=sqrt(x1h*x1h+y1h*y1h+z1h*z1h)
369 IF(d23<=onep001*abs(dps(np)).AND.d2/=zero)
THEN
370 IF(d23<zep999*abs(dps(np)))
THEN
372 ELSEIF (flag==0)
THEN
375 IF(d23<abs(dps(np)))dps(np)=sign(d23,d2)
385 n12=sqrt(x12*x12+y12*y12+z12*z12)
386 nn =one/
max(em20,n12)
390 ps=(xi-x3)*x12+(yi-y3)*y12+(zi-z3)*z12
391 IF(ps>=zero.AND.ps<=n12)
THEN
407 d34=sqrt(x1h*x1h+y1h*y1h+z1h*z1h)
408 IF(d34<=onep001*abs(dps(np)).AND.d3/=zero)
THEN
409 IF(d34<zep999*abs(dps(np)))
THEN
411 ELSEIF (flag==0)
THEN
414 IF(d34<abs(dps(np)))dps(np)=sign(d34,d3)
424 n12=sqrt(x12*x12+y12*y12+z12*z12)
425 nn =one/
max(em20,n12)
429 ps=(xi-x4)*x12+(yi-y4)*y12+(zi-z4)*z12
430 IF(ps>=zero.AND.ps<=n12)
THEN
446 d41=sqrt(x1h*x1h+y1h*y1h+z1h*z1h)
447 IF(d41<=onep001*abs(dps(np)).AND.d4/=zero)
THEN
448 IF(d41<zep999*abs(dps(np)))
THEN
450 ELSEIF (flag==0)
THEN
453 IF(d41<abs(dps(np)))dps(np)=sign(d41,d4)
461 x12=half*(x2+x3-x1-x4)
462 y12=half*(y2+y3-y1-y4)
463 z12=half*(z2+z3-z1-z4)
464 x23=half*(x3+x4-x1-x2)
465 y23=half*(y3+y4-y1-y2)
466 z23=half*(z3+z4-z1-z2)
470 nn =one/
max(em20,sqrt(nx*nx+ny*ny+nz*nz))
471 wnormal(1,lonfsph(ixp(np)))=-nn*nx
472 wnormal(2,lonfsph(ixp(np)))=-nn*ny
473 wnormal(3,lonfsph(ixp(np)))=-nn*nz
474 ELSEIF(normseg==2)
THEN
476 x12=half*(x2+x3-x1-x4)
477 y12=half*(y2+y3-y1-y4)
478 z12=half*(z2+z3-z1-z4)
479 x23=half*(x3+x4-x1-x2)
480 y23=half*(y3+y4-y1-y2)
481 z23=half*(z3+z4-z1-z2)
485 nn =one/
max(em20,sqrt(nx*nx+ny*ny+nz*nz))
486 wnormal(1,lonfsph(ixp(np)))=
487 . wnormal(1,lonfsph(ixp(np)))-nn*nx
488 wnormal(2,lonfsph(ixp(np)))=
489 . wnormal(2,lonfsph(ixp(np)))-nn*ny
490 wnormal(3,lonfsph(ixp(np)))=
491 . wnormal(3,lonfsph(ixp(np)))-nn*nz