33
34
35
36#include "implicit_f.inc"
37
38
39
41 INTEGER IECR(*)
44 TYPE(DETONATOR_WAVE_SHAPER_STRUCT_) :: DETONATOR_WAVE_SHAPER
45
46
47
48#include "scr11_c.inc"
49#include "com04_c.inc"
50
51
52
53 INTEGER JOMBR, KOMBR, II, I,NPE
54 my_real yld, zld, dd, d2, eps, dd_up, dd_down,
55 . y2, z2, y1, z1, cross_prod_1,cross_prod_2,
56 . d1, y12, z12, a1, a2, a3, y3, z3, d3
57
58
59 npe = detonator_wave_shaper%NUMNOD
61 jombr=0
62 kombr=0
63
64
65 yld=yl-yd
66 zld=zl-zd
67 dd=yld**2+zld**2
68
69 IF(dd > ddmx)THEN
71 GOTO 999
72 ENDIF
73
74
75 eps=em5*dd
76 dd_up=dd+eps
77 dd_down=dd-eps
78 ii=iecr(1)
79 y2=x(2,ii)
80 z2=x(3,ii)
81 cross_prod_2=yld*(z2-zd)-zld*(y2-yd)
82 d2 =(y2-yd)*yld+(z2-zd)*zld
83
84
85 DO i=2,npe
86 y1=y2
87 z1=z2
88 cross_prod_1=cross_prod_2
89 d1 =d2
90 ii=iecr(i)
91 y2=x(2,ii)
92 z2=x(3,ii)
93 cross_prod_2=yld*(z2-zd)-zld*(y2-yd)
94 d2=(y2-yd)*yld+(z2-zd)*zld
95 IF(cross_prod_1*cross_prod_2 <= eps)THEN
96
97 IF(d2 > dd_up .AND. d1 > dd_up)THEN
98
100 ELSEIF(d2 < -eps.AND.d1 < -eps)THEN
101
103 ELSE
104
105 y12=y1-y2
106 z12=z1-z2
107 a1=yl*zld-zl*yld
108 a2=y1*z12-z1*y12
109 a3=y12*zld-z12*yld
110 IF(abs(a3) > eps)THEN
111 y3=(y12*a1-yld*a2)/a3
112 z3=(z12*a1-zld*a2)/a3
113 d3=(y3-yd)*yld+(z3-zd)*zld
114 IF(d3 > dd_up.OR.d3 < -eps)THEN
116 ELSEIF(d3 > eps.AND.d3 < dd_down)THEN
117
119 GOTO 999
120 ELSEIF(abs(d3) <= eps)THEN
121
122 IF(a3 > eps)jombr=1
123 ELSEIF(abs(d3-dd) <= eps)THEN
124
125 IF(a3 < -eps)kombr=1
126 ELSE
128 ENDIF
129 ELSE
131 ENDIF
132 ENDIF
133 ELSE
134
136 ENDIF
137 END DO
138
139 IF(jombr+kombr == 2)THEN
141 ELSE
142 dto=dto0+sqrt(dd)/vdet_arg
143 ENDIF
144
145 999 CONTINUE
146 IF(
iombr == 0)ddmx=dd
147
148 RETURN
integer function iombr(detonator_wave_shaper, x, iecr, ddmx, vdet_arg)