32
33
34
35 USE output_mod
36 use element_mod , only : nixs
37
38
39
40
41
42#include "implicit_f.inc"
43
44
45
46#include "com04_c.inc"
47#include "scrcut_c.inc"
48
49
50
51 type(output_), intent(inout) :: output
52 my_real xcut(7,*),xyz0(3,*),d(3,*)
53 INTEGER ICUT(44,*),IXS(NIXS,*),LEN
54
55
56
57 INTEGER IC,I,J,K,ITYP
58 my_real dist,dist0,distmin,distmax,dd,dx1,dy1,dz1,dx2,dy2,dz2,vnx,vny,vnz,x,y,z
59
60
61
62 len=0
63 DO ic=1,ncuts
64 ityp=icut(1,ic)
65 IF(ityp==1)THEN
66 dd=output%DTANIM*xcut(7,ic)
67 xcut(1,ic)=xcut(1,ic)+dd*xcut(4,ic)
68 xcut(2,ic)=xcut(2,ic)+dd*xcut(5,ic)
69 xcut(3,ic)=xcut(3,ic)+dd*xcut(6,ic)
70 ELSEIF(ityp==3)THEN
71 xcut(1,ic)=xyz0(1,icut(2,ic))
72 xcut(2,ic)=xyz0(2,icut(2,ic))
73 xcut(3,ic)=xyz0(3,icut(2,ic))
74 dx1=xyz0(1,icut(3,ic))-xcut(1,ic)
75 dy1=xyz0(2,icut(3,ic))-xcut(2,ic)
76 dz1=xyz0(3,icut(3,ic))-xcut(3,ic)
77 dx2=xyz0(1,icut(4,ic))-xcut(1,ic)
78 dy2=xyz0(2,icut(4,ic))-xcut(2,ic)
79 dz2=xyz0(3,icut(4,ic))-xcut(3,ic)
80 vnx=dy1*dz2-dy2*dz1
81 vny=dz1*dx2-dz2*dx1
82 vnz=dx1*dy2-dx2*dy1
83 dd=sqrt(vnx**2+vny**2+vnz**2)
84 IF(dd>em10)THEN
85 xcut(4,ic)=vnx/dd
86 xcut(5,ic)=vny/dd
87 xcut(6,ic)=vnz/dd
88 ENDIF
89 ENDIF
90
91 dist0=xcut(4,ic)*xcut(1,ic)+xcut(5,ic)*xcut(2,ic)+xcut(6,ic)*xcut(3,ic)
92 DO i=1,numels
93 distmin= ep30
94 distmax=-ep30
95 DO j=1,8
96 k=ixs(j+1,i)
97 x=xyz0(1,k)
98 y=xyz0(2,k)
99 z=xyz0(3,k)
100 IF(ityp==2)THEN
101 x=x-d(1,k)
102 y=y-d(2,k)
103 z=z-d(3,k)
104 ENDIF
105 dist=x*xcut(4,ic)+y*xcut(5,ic)+z*xcut(6,ic)-dist0
106 distmin=
min(dist,distmin)
107 distmax=
max(dist,distmax)
108 enddo
109 IF(distmin*distmax<= zero)len=len+1
110 enddo
111
112 enddo
113 RETURN