36
37
38
39#include "implicit_f.inc"
40
41
42
43#include "mvsiz_p.inc"
44#include "param_c.inc"
45
46
47
48 INTEGER JLT, IEDGE
49 INTEGER CAND_S(*), CAND_M(*), IRECT(4,*), LEDGE(NLEDGE,*), ITAB(*),
50 . N1(MVSIZ),N2(MVSIZ),M1(MVSIZ),M2(MVSIZ)
52 . xxs1(*), xxs2(*), xys1(*), xys2(*), xzs1(*) , xzs2(*),
53 . xxm1(*), xxm2(*) , xym1(*), xym2(*), xzm1(*), xzm2(*),
54 . gapve(*), pene(*), x(3,*),
55 . ex(mvsiz), ey(mvsiz), ez(mvsiz), fx(mvsiz), fy(mvsiz), fz(mvsiz)
56
57
58
59 INTEGER I, IA, JA, IB, JB, SOL_EDGE, SH_EDGE, K, NJNDX, N4A, N4B,
60 . IX1(), IX2(MVSIZ), IX3(MVSIZ), IX4(MVSIZ),
61 . JX1(MVSIZ), JX2(MVSIZ), JX3(MVSIZ), JX4(MVSIZ),
62 . JNDX(MVSIZ), I4A(MVSIZ), I4B(MVSIZ)
64 . h1s(mvsiz),h2s(mvsiz),h1m(mvsiz),h2m(mvsiz),nx(mvsiz),ny(mvsiz),nz(mvsiz),
65 . xs12,ys12,zs12,xm12,ym12,zm12,xa,xb,
66 . xs2,xm2,xsm,xs2m2,ys2,ym2,ysm,ys2m2,zs2,zm2,zsm,zs2m2,
67 . xx,yy,zz,als,alm,det,aaa,bbb,nn(mvsiz),p1,p2
69 . xa0(mvsiz),xa1(mvsiz),xa2(mvsiz),xa3(mvsiz),xa4(mvsiz),
70 . ya0(mvsiz),ya1(mvsiz),ya2(mvsiz),ya3(mvsiz),ya4(mvsiz),
71 . za0(mvsiz),za1(mvsiz),za2(mvsiz),za3(mvsiz),za4(mvsiz),
72 . xb0(mvsiz),xb1(mvsiz),xb2(mvsiz),xb3(mvsiz),xb4(mvsiz),
73 . yb0(mvsiz),yb1(mvsiz),yb2(mvsiz),yb3(mvsiz),yb4(mvsiz),
74 . zb0(mvsiz),zb1(mvsiz),zb2(mvsiz),zb3(mvsiz),zb4(mvsiz)
76 . x0a(mvsiz,4),y0a(mvsiz,4),z0a(mvsiz,4),
77 . x0b(mvsiz,4),y0b(mvsiz,4),z0b(mvsiz,4),
78 . xna(mvsiz,4), yna(mvsiz,4), zna(mvsiz,4), xnb(mvsiz,4), ynb(mvsiz,4), znb(mvsiz,4),
79 . xs, ys, zs, xm, ym, zm, da, db, cnvx, da1, db1, da2, db2,
80 . rzero, run, rdix, rem30, rep30,
81 . alp,xxs,xys,xzs,
82 . xi0,yi0,zi0,xi1,yi1,zi1,xi2,yi2,zi2,
83 . sx1,sy1,sz1,sx2,sy2,sz2
84 INTEGER NTRIA(3,4)
85 DATA ntria/1,2,4,2,4,1,0,0,0,4,1,2/
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133 pene(1:jlt)=ep20
134
135 DO i=1,jlt
136
137 xm12 = xxm2(i)-xxm1(i)
138 ym12 = xym2(i)-xym1(i)
139 zm12 = xzm2(i)-xzm1(i)
140 xm2 = xm12*xm12 + ym12*ym12 + zm12*zm12
141
142 xs12 = xxs2(i)-xxs1(i)
143 ys12 = xys2(i)-xys1(i)
144 zs12 = xzs2(i)-xzs1(i)
145 xs2
146 xsm = - (xs12*xm12 + ys12*ym12 + zs12*zm12)
147 xs2m2 = xxm2(i)-xxs2(i)
148 ys2m2 = xym2(i)-xys2(i)
149 zs2m2 = xzm2(i)-xzs2(i)
150
151 xa = xs12*xs2m2 + ys12*ys2m2 + zs12*zs2m2
152 xb = -xm12*xs2m2 - ym12*ys2m2 - zm12*zs2m2
153 det = xm2*xs2 - xsm*xsm
155
156 h1m(i) = (xa*xsm-xb*xs2) / det
159 h1m(i)=
min(one,
max(zero,h1m(i)))
160 h1s(i) = -(xa + h1m(i)*xsm) / xs2
161 h1s(i)=
min(one,
max(zero,h1s(i)))
162 h1m(i) = -(xb + h1s(i)*xsm) / xm2
163 h1m(i)=
min(one,
max(zero,h1m(i)))
164
165 h2s(i) = one -h1s(i)
166 h2m(i) = one -h1m(i)
167
168
169
170 nx(i) = h1s(i)*xxs1(i) + h2s(i)*xxs2(i)
171 . - h1m(i)*xxm1(i) - h2m(i)*xxm2(i)
172 ny(i) = h1s(i)*xys1(i) + h2s(i)*xys2(i)
173 . - h1m(i)*xym1(i) - h2m(i)*xym2(i)
174 nz(i) = h1s(i)*xzs1(i) + h2s(i)*xzs2(i)
175 . - h1m(i)*xzm1(i) - h2m(i)*xzm2(i)
176
177 nn(i) = sqrt(nx(i)**2 + ny(i)**2 + nz(i)**2)
178
179 pene(i) =
max(zero,gapve(i) - nn(i))
180
181 ENDDO
182
183 sol_edge =iedge/10
184 sh_edge =iedge-10*sol_edge ! shells
185
186 IF(sh_edge/=0)THEN
187 DO i=1,jlt
188
189
190
191
192
193
194
195
196
197
198
199
200 p1=zero
201 IF(ledge(3,cand_m(i))==0)
202 . p1=-(nx(i)*ex(i)+ny(i)*ey(i)+nz(i)*ez(i))
203
204 p2=zero
205 IF(ledge(3,cand_s(i))==0)
206 . p2= nx(i)*fx(i)+ny(i)*fy(i)+nz(i)*fz(i)
207
208
209 IF(p1 > em04*nn(i) .OR. p2 > em04*nn(i))pene(i)=zero
210
211 ENDDO
212 END IF
213
214
215 RETURN