44
45
46
47#include "implicit_f.inc"
48#include "comlock.inc"
49
50
51
52#include "mvsiz_p.inc"
53#include "param_c.inc"
54#include "sms_c.inc"
55
56
57
58
59 INTEGER JLT,JLT_NEW, ,INTFRIC
60 INTEGER CAND_S(MVSIZ),CAND_M(MVSIZ),NSMS(MVSIZ),INDEX(*),
61 . N1(MVSIZ),N2(MVSIZ),M1(MVSIZ),M2(MVSIZ),
62 . (MVSIZ),JAM(MVSIZ),IBM(MVSIZ),JBM(MVSIZ),
63 . IAS(MVSIZ),JAS(MVSIZ),IBS(MVSIZ),JBS(MVSIZ),
64 . IPARTFRICSI(MVSIZ),IPARTFRICMI(MVSIZ),
65 . IRECT(4,*),LEDGE(NLEDGE,*),ITAB(*)
66 INTEGER :: EDGE_ID(2,MVSIZ)
68 . h1s(*),h2s(*),h1m(*),h2m(*),nx(*),ny(*),nz(*),stif(*),
69 . xxs1(*), xxs2(*), xys1(*), xys2(*), xzs1(*) , xzs2(*),
70 . xxm1(*), xxm2(*) , xym1(*), xym2(*), xzm1(*), xzm2(*),
71 . vxs1(*), vxs2(*), vys1(*), vys2(*), vzs1(*), vzs2(*) ,
72 . vxm1(*), vxm2(*), vym1(*), vym2
73 . ms1(*) ,ms2(*) ,mm1(*) ,mm2(*),
74 . gapve(*), ex(*), ey(*), ez(*), fx(*), fy(*), fz(*),
75 . cand_p(*)
76 my_real ,
INTENT(IN) :: dgaploadpmax
77
78
79
80 INTEGER I, SOL_EDGE, SH_EDGE, K
82 . pene2(mvsiz),
83 . xs12,ys12,zs12,xm12,ym12,zm12,xa,xb,
84 . xs2,xm2,xsm,xs2m2,ys2,ym2,ysm,ys2m2,zs2,zm2,zsm,zs2m2,
85 . det,gap2,p1,p2,nn(mvsiz)
86 INTEGER NTRIA(3,4)
87 DATA ntria/1,2,4,2,4,1,0,0,0,4,1,2/
88
89 jlt_new = 0
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
134
135
136
137
138
139 pene2(1:jlt)=ep20
140
141 DO i=1,jlt
142
143 xm12 = xxm2(i)-xxm1(i)
144 ym12 = xym2(i)-xym1(i)
145 zm12 = xzm2(i)-xzm1(i)
146 xm2 = xm12*xm12 + ym12*ym12 + zm12*zm12
147
148 xs12 = xxs2(i)-xxs1(i)
149 ys12 = xys2(i)-xys1(i)
150 zs12 = xzs2(i)-xzs1(i)
151 xs2 = xs12*xs12 + ys12*ys12 + zs12*zs12
152 xsm = - (xs12*xm12 + ys12*ym12 + zs12*zm12)
153 xs2m2 = xxm2(i)-xxs2(i)
154 ys2m2 = xym2(i)-xys2(i)
155 zs2m2 = xzm2(i)-xzs2(i)
156
157 xa = xs12*xs2m2 + ys12*ys2m2 + zs12*zs2m2
158 xb = -xm12*xs2m2 - ym12*ys2m2 - zm12*zs2m2
159 det = xm2*xs2 - xsm*xsm
160
162
163 h1m(i) = (xa*xsm-xb*xs2) / det
166 h1m(i)=
min(one,
max(zero,h1m(i)))
167 h1s(i) = -(xa + h1m(i)*xsm) / xs2
168 h1s(i)=
min(one,
max(zero,h1s(i)))
169 h1m(i) = -(xb + h1s(i)*xsm) / xm2
170 h1m(i)=
min(one,
max(zero,h1m(i)))
171
172 h2s(i) = one -h1s(i)
173 h2m(i) = one -h1m(i)
174
175
176
177 nx(i) = h1s(i)*xxs1(i) + h2s(i)*xxs2(i)
178 . - h1m(i)*xxm1(i) - h2m(i)*xxm2(i)
179 ny(i) = h1s(i)*xys1(i) + h2s(i)*xys2(i)
180 . - h1m(i)*xym1(i) - h2m
181 nz(i) = h1s(i)*xzs1(i) + h2s(i)*xzs2(i)
182 . - h1m(i)*xzm1(i) - h2m(i)*xzm2(i)
183 nn(i)= nx(i)*nx(i) + ny(i)*ny(i) + nz(i)*nz(i)
184
185 gap2 = (gapve(i)+dgaploadpmax)*(gapve(i)+dgaploadpmax)
186 pene2(i) = gap2 - nn(i)
187 pene2(i) =
max(zero,pene2(i))
188
189 ENDDO
190
191 sol_edge =iedge/10
192 sh_edge =iedge-10*sol_edge
193
194 IF(sh_edge/=0)THEN
195 DO i=1,jlt
196
197
198
199
200
201
202
203
204
205
206
207 p1=zero
208 IF(ibm(i)==0)
209 . p1=-(nx(i)*ex(i)+ny(i)*ey(i)+nz(i)*ez(i))
210
211 p2=zero
212 IF(ibs(i)==0)
213 . p2= nx(i)*fx(i)+ny(i)*fy(i)+nz(i)*fz(i)
214
215 nn(i)=sqrt(nn(i))
216 IF(p1 > em04*nn(i) .OR. p2 > em04*nn(i))pene2(i)=zero
217
218 ENDDO
219 END IF
220
221
222
223 DO i=1,jlt
224 IF(pene2(i)==zero) cand_p(index(i))=zero
225 ENDDO
226
227 DO i=1,jlt
228 IF(pene2(i)/=zero.AND.stif(i)/=zero)THEN
229 jlt_new = jlt_new + 1
230
231 edge_id(1,jlt_new) = edge_id(1,i)
232 edge_id(2,jlt_new) = edge_id(2,i)
233
234 cand_s(jlt_new) = cand_s(i)
235 cand_m(jlt_new) = cand_m(i)
236 edge_id(1,jlt_new) = edge_id(1,i)
237 edge_id(2,jlt_new) = edge_id(2,i)
238 n1(jlt_new) = n1(i)
239 n2(jlt_new) = n2(i)
240 m1(jlt_new) = m1(i)
241 m2(jlt_new) = m2(i)
242 ibm(jlt_new) = ibm(i)
243 h1s(jlt_new) = h1s(i)
244 h2s(jlt_new) = h2s(i)
245 h1m(jlt_new) = h1m(i)
246 h2m(jlt_new) = h2m(i)
247 nx(jlt_new) = nx(i)
248 ny(jlt_new) = ny(i)
249 nz(jlt_new) = nz(i)
250 stif(jlt_new)= stif(i)
251 gapve(jlt_new)= gapve(i)
252
253 xxs1(jlt_new) = xxs1(i)
254 xys1(jlt_new) = xys1(i)
255 xzs1(jlt_new) = xzs1(i)
256 xxs2(jlt_new) = xxs2(i)
257 xys2(jlt_new) = xys2(i)
258 xzs2(jlt_new) = xzs2(i)
259
260 vxs1(jlt_new) = vxs1(i)
261 vys1(jlt_new) = vys1(i)
262 vzs1(jlt_new) = vzs1(i)
263 vxs2(jlt_new) = vxs2(i)
264 vys2(jlt_new) = vys2(i)
265 vzs2(jlt_new) = vzs2(i)
266 vxm1(jlt_new) = vxm1(i)
267 vym1(jlt_new) = vym1(i)
268 vzm1(jlt_new) = vzm1(i)
269 vxm2(jlt_new) = vxm2(i)
270 vym2(jlt_new) = vym2(i)
271 vzm2(jlt_new) = vzm2(i)
272 ms1(jlt_new) = ms1(i)
273 ms2(jlt_new) = ms2(i)
274 mm1(jlt_new) = mm1(i)
275 mm2(jlt_new) = mm2(i)
276 IF(idtmins == 2) nsms(jlt_new)= nsms(i)
277 IF(intfric /= 0) THEN
278 ipartfricsi(jlt_new)=ipartfricsi(i)
279 ipartfricmi(jlt_new)=ipartfricmi(i)
280 ENDIF
281 index(jlt_new) = index(i)
282 ENDIF
283 ENDDO
284 RETURN