56
57
58
60 USE output_mod, ONLY : output_
61
62
63
64#include "implicit_f.inc"
65#include "comlock.inc"
66
67
68
69#include "mvsiz_p.inc"
70
71
72
73#include "com01_c.inc"
74#include "com04_c.inc"
75#include "com06_c.inc"
76#include "com08_c.inc"
77#include "scr05_c.inc"
78#include "scr07_c.inc"
79#include "scr11_c.inc"
80#include "scr18_c.inc"
81#include "units_c.inc"
82#include "impl1_c.inc"
83#include "sms_c.inc"
84#include "param_c.inc"
85
86
87
88 TYPE(OUTPUT_), INTENT(INOUT) :: OUTPUT
89 INTEGER NELTST,ITYPTST,JLT,IVIS2,INACTI,NRTS,NIN,INTTH
90 INTEGER ITAB(*),
91 . NOINT,NEWFRONT,NISUB,NFT
92 INTEGER N1(MVSIZ), N2(MVSIZ), M1(MVSIZ), (MVSIZ),
93 . CS_LOC(MVSIZ), CM_LOC(MVSIZ),
94 . IFORM,INDEX(*),IFPEN(*), ISENSINT(*),
95 . ADDSUBS(*),ADDSUBM(*),LISUBS(*),LISUBM(*),LISUB(*),
96 . TAGNCONT(NLOADP_HYD_INTER,NUMNOD),
97 . TYPSUB(*),INFLG_SUBS(*), INFLG_SUBM(*)
98 INTEGER , INTENT(IN) :: NINLOADP,S_LOADPINTER
99 INTEGER , INTENT(IN) :: KLOADPINTER(NINTER+1),LOADPINTER(S_LOADPINTER),
100 . LOADP_HYD_INTER(NLOADP_HYD)
102 . ms(*), fsav(*),
103 . stfs(*),gapv(*),
104 . penis(2,*), penim(2,*),
105 . gap, fric,visc,viscf,vis,dt2t,dtmini,drad
107 . hs1(mvsiz), hs2(mvsiz), hm1(mvsiz), hm2(mvsiz),
108 . nx(mvsiz), ny(mvsiz), nz(mvsiz), stif(mvsiz),
109 . ms1(mvsiz),ms2(mvsiz),mm1(mvsiz),mm2(mvsiz),
110 . vxs1(mvsiz),vys1(mvsiz),vzs1(mvsiz),vxs2(mvsiz),vys2(mvsiz),
111 . vzs2(mvsiz),vxm1(mvsiz),vym1(mvsiz),vzm1(mvsiz),vxm2(mvsiz),
112 . vym2(mvsiz),vzm2(mvsiz),cand_fx(*),cand_fy(*),
113 . cand_fz(*),fni(*),
114 . fx1(mvsiz), fx2(mvsiz), fx3(mvsiz), fx4(mvsiz),
115 . fy1(mvsiz), fy2(mvsiz), fy3(mvsiz), fy4(mvsiz),
116 . fz1(mvsiz), fz2(mvsiz), fz3(mvsiz), fz4(mvsiz),
117 . k1(mvsiz),k2(mvsiz),k3(mvsiz),k4(mvsiz),
118 . c1(mvsiz),c2(mvsiz),c3(mvsiz),c4(mvsiz),penrad(mvsiz),
119 . fsavparit(nisub+1,11,*),fsavsub(nthvki,*),fricc(mvsiz),
120 . viscffric(mvsiz)
121 my_real ,
INTENT(IN) :: dgaploadint(s_loadpinter)
122 INTEGER BITGET
124
125
126
127 INTEGER I ,K, NI
128 INTEGER IDTM,IM,IS,JSUB,KSUB,JJ,KK,NSUB,PP,PPL,
129 . ITYPSUB,ISS1,ISS2,IMS1,IMS2
131 . vx(mvsiz), vy(mvsiz), vz(mvsiz), vn(mvsiz),
132 . fxi(mvsiz), fyi(mvsiz), fzi(mvsiz),
133
134 . pene(mvsiz),masmin(mvsiz),
135 . vis2(mvsiz), dtmi(mvsiz),
136 . vnx, vny, vnz, aa, vmax,s2,dist,rdist,
137 . v2, fm2, dt1inv, visca, fac, ff,
138 . fx, fy, fz, f2, mas2, dti,
139 . facm1, econtt, econvt, a2,masm,econtdt,
140 . fsav1, fsav2, fsav3, fsav4, fsav5, fsav6,
141 . fsav8, fsav9, fsav10, fsav11, fsav12,
142 . fsav13, fsav14, fsav15, dti2, pplus,dtmi0
143 my_real prec,beta,dgapload,gapp
145 . st1(mvsiz),st2(mvsiz),st3(mvsiz),st4(mvsiz),
146 . kt(mvsiz),c(mvsiz),cf(mvsiz),
147 . cx,cy,cfi,aux,dtm,ft,fn,ftn,fxt(mvsiz),fyt(mvsiz),
148 . fzt(mvsiz)
149
150 IF (iresp == 1) THEN
151 prec = fiveem4
152 ELSE
153 prec = em10
154 ENDIF
155 IF(dt1>zero)THEN
156 dt1inv = one/dt1
157 ELSE
158 dt1inv =zero
159 ENDIF
160 econtt = zero
161 econvt = zero
162 econtdt = zero
163
164 IF(intth/=0.OR.ninloadp/=0 )THEN
165 DO i=1,jlt
166
167 dist = sqrt(nx(i)**2 + ny(i)**2 + nz(i)**2)
168 penrad(i)=dist-gapv(i)
169 ENDDO
170 ENDIF
171
172 DO i=1,jlt
173 s2 = sqrt(nx(i)**2 + ny(i)**2 + nz(i)**2)
174 pene(i) =
max(zero,gapv(i) - s2)
175 s2 = one/
max(em30,s2)
176 nx(i) = nx(i)*s2
177 ny(i) = ny(i)*s2
178 nz(i) = nz(i)*s2
179 ENDDO
180
181 IF(inacti==5)THEN
182#include "lockon.inc"
183 DO i=1,jlt
184 IF(cs_loc(i)<=nrts) THEN
185 penis(2,cs_loc(i)) =
max(penis(2,cs_loc(i)),half*pene(i))
186 ELSE
187 ni = cs_loc(i)-nrts
189 END IF
190 penim(2,cm_loc(i)) =
max(penim(2,cm_loc(i)),half*pene(i))
191 ENDDO
192#include "lockoff.inc"
193 DO i=1,jlt
194 IF(cs_loc(i)<=nrts) THEN
195 pene(i) = pene(i) - penis(1,cs_loc(i)) - penim(1,cm_loc(i))
196 pene(i) =
max(pene(i),zero)
197 IF(pene(i)==zero)stif(i)=zero
198 gapv(i) = gapv(i) - penis(1,cs_loc(i)) - penim(1,cm_loc
199 ELSE
200 ni = cs_loc(i)-nrts
201 pene(i) = pene(i) -
penfi(nin)%P(1,ni) - penim(1,cm_loc(i))
202 pene(i) =
max(pene(i),zero)
203 IF(pene(i)==zero)stif(i)=zero
204 gapv(i) = gapv(i) -
penfi(nin)%P(1,ni) - penim(1,cm_loc(i))
205 END IF
206 END DO
207 ELSE IF(inacti==6)THEN
208#include "lockon.inc"
209 DO i=1,jlt
210 pplus=half*(pene(i)+fiveem2*(gapv(i)-pene(i)))
211 IF(cs_loc(i)<=nrts) THEN
212 penis(2,cs_loc(i)) =
max(penis(2,cs_loc(i)),pplus)
213 ELSE
214 ni = cs_loc(i)-nrts
216 END IF
217 penim(2,cm_loc(i)) =
max(penim(2,cm_loc(i)),pplus)
218 ENDDO
219#include "lockoff.inc"
220 DO i=1,jlt
221 IF(cs_loc(i)<=nrts) THEN
222 pene(i) = pene(i) - penis(1,cs_loc(i)) - penim(1,cm_loc(i))
223 pene(i) =
max(pene(i),zero)
224 IF(pene(i)==zero)stif(i)=zero
225 gapv(i) = gapv(i) - penis(1,cs_loc(i)) - penim(1,cm_loc(i))
226 ELSE
227 ni = cs_loc(i)-nrts
228 pene(i) = pene(i) -
penfi(nin)%P(1,ni) - penim(1,cm_loc(i))
229 pene(i) =
max(pene(i),zero)
230 IF(pene(i)==zero)stif(i)=zero
231 gapv(i) = gapv(i) -
penfi(nin)%P(1,ni) - penim(1,cm_loc(i))
232 END IF
233 END DO
234 ELSE
235 DO i=1,jlt
236 IF( pene(i)==zero ) stif(i) = zero
237 ENDDO
238 ENDIF
239
240 vmax = zero
241 DO i=1,jlt
242 gapv(i) = zep9*gapv(i)
243 vx(i) = hs1(i)*vxs1(i) + hs2(i)*vxs2(i)
244 . - hm1(i)*vxm1(i) - hm2(i)*vxm2(i)
245 vy(i) = hs1(i)*vys1(i) + hs2(i)*vys2(i)
246 . - hm1(i)*vym1(i) - hm2(i)*vym2(i)
247 vz(i) = hs1(i)*vzs1(i) + hs2(i)*vzs2(i)
248 . - hm1(i)*vzm1(i) - hm2(i)*vzm2(i)
249 vn(i) = nx(i)*vx(i) + ny(i)*vy(i) + nz(i)*vz(i)
250 ENDDO
251
252 DO i=1,jlt
253 fac = gapv(i)/
max( em10,( gapv(i)-pene(i) ) )
254 facm1 = one/fac
255 IF(( (gapv(i)-pene(i))/gapv(i) )<prec .AND.
256 . stif(i)>zero ) THEN
257 stif(i) = zero
258 IF (impl_s==0) THEN
259 newfront = -1
260#include "lockon.inc"
261 IF(cs_loc(i)<=nrts)THEN
262 stfs(cs_loc(i)) = -abs(stfs(cs_loc(i)))
263 WRITE(istdo,*)'WARNING INTERFACE NB',noint
264 WRITE(istdo,*)'LINE ',itab(n1(i)),
265 . itab(n2(i)),'DE-ACTIVATED FROM','INTERFACE'
266 WRITE(iout,*)'WARNING INTERFACE NB',noint
267 WRITE(iout,*)'GAP=',gapv(i),'PENE=',pene(i)
268 WRITE(iout,*)'line ',ITAB(N1(I)),
269 . ITAB(N2(I)),'de-activated from','interface'
270 ELSE
271 NI = CS_LOC(I)-NRTS
272 STIFI(NIN)%P(NI) = -ABS(STIFI(NIN)%P(NI))
273 WRITE(ISTDO,*)'warning INTERFACE nb',NOINT
274 WRITE(ISTDO,*)'line ',ITAFI(NIN)%P(N1(I)),
275 . ITAFI(NIN)%P(N2(I)),'de-activated from','interface'
276 WRITE(IOUT,*)'warning INTERFACE nb',NOINT
277 WRITE(IOUT,*)'gap=',GAPV(I),'pene=',PENE(I)
278 WRITE(IOUT,*)'line ',ITAFI(NIN)%P(N1(I)),
279 . ITAFI(NIN)%P(N2(I)),'de-activated from','INTERFACE'
280 END IF
281#include "lockoff.inc"
282 ENDIF
283 pene(i)= zero
284 ENDIF
285 econtt = econtt + half*stif(i)*gapv(i)**2 *( facm1 - one -
286 . log(facm1) )
287 stif(i) = half*stif(i) * fac
288 fni(i)= -stif(i) * pene(i)
289 ENDDO
290
291 dti = ep20
292
293 DO i=1,jlt
294 dist=gapv(i)-pene(i)
295 rdist = half*dist /
max(em30,-vn(i))
297 ENDDO
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312 IF (dtmini>zero) THEN
313 dtm=dtmini
314 idtm=2
315 ELSE
316 dtm=dtmin1(10)
317 idtm=idtmin(10)
318 END IF
319
320 IF(dti<=dtm)THEN
321 DO i=1,jlt
322 dist=gapv(i)-pene(i)
323 dti2 = half*dist /
max(em30,-vn(i))
324 IF(dti2<=dtm)THEN
325#include "lockon.inc"
326 IF(cs_loc(i)<=nrts)THEN
327 WRITE(iout,'(A,E12.4,A,I10,A,E12.4,A)')
328 . ' **WARNING MINIMUM TIME STEP ',dti2,
329 . 'IN INTERFACE NB',noint,'(dtmin=',DTM,')'
330 WRITE(IOUT,*)'secondary nodes nb',ITAB(N1(I)),
331 . ITAB(N2(I))
332 WRITE(IOUT,*)'main nodes nb
',ITAB(M1(I)),
333 . ITAB(M2(I))
334 ELSE
335 WRITE(IOUT,'(a,e12.4,a,i10,a,e12.4,a)')
336 . ' **warning minimum time step ',DTI2,
337 . 'in INTERFACE nb',NOINT,'(dtmin=',DTM,')'
338 WRITE(IOUT,*)'secondary nodes nb',ITAFI(NIN)%P(N1(I)),
339 . ITAFI(NIN)%P(N2(I))
340 WRITE(IOUT,*)'main nodes nb
',ITAB(M1(I)),
341 . ITAB(M2(I))
342 END IF
343#include "lockoff.inc"
344 IF(IDTM==1)THEN
345 TSTOP = TT
346 ELSEIF(IDTM==2)THEN
347#include "lockon.inc"
348 WRITE(IOUT,*)'remove secondary line from interface'
349 IF(CS_LOC(I)<=NRTS)THEN
350 STFS(CS_LOC(I)) = -ABS(STFS(CS_LOC(I)))
351 ELSE
352 NI = CS_LOC(I)-NRTS
353 STIFI(NIN)%P(NI) = -ABS(STIFI(NIN)%P(NI))
354 END IF
355#include "lockoff.inc"
356 NEWFRONT = -1
357 STIF(I) = ZERO
358 DTI = DTM
359 ELSEIF(IDTM==5)THEN
360 MSTOP = 2
361 ENDIF
362 ENDIF
363 ENDDO
364 ENDIF
365
366 IF(DTI<DT2T)THEN
367 DT2T = DTI
368 NELTST = NOINT
369 ITYPTST = 10
370 ENDIF
371
372
373
374 IF(VISC/=ZERO)THEN
375 DO I=1,JLT
376 MAS2 = MS1(I)*HS1(I)
377 . + MS2(I)*HS2(I)
378 MASM = MM1(I)*HM1(I)
379 . + MM2(I)*HM2(I)
380 MASMIN(I) = MIN(MAS2,MASM)
381 VIS2(I) = TWO * STIF(I) * MIN(MAS2,MASM)
382 ENDDO
383 ELSE
384 DO I=1,JLT
385 IF(VISCFFRIC(I)/=ZERO) THEN
386 MAS2 = MS1(I)*HS1(I)
387 . + MS2(I)*HS2(I)
388 MASM = MM1(I)*HM1(I)
389 . + MM2(I)*HM2(I)
390 MASMIN(I) = MIN(MAS2,MASM)
391 VIS2(I) = TWO * STIF(I) * MIN(MAS2,MASM)
392 ENDIF
393 ENDDO
394 ENDIF
395
396
397 IF(VISC/=ZERO)THEN
398.OR. IF(IVIS2==0IVIS2==1)THEN
399
400
401
402 DO I=1,JLT
403 IF(VN(I)<ZERO)
404 . VIS2(I) = VIS2(I)/(MAX(EM10,(GAPV(I)-PENE(I))/GAPV(I)))
405 ENDDO
406
407 VISCA = ZEP4
408.AND..AND. IF(KDTINT==0(IDTMINS/=2IDTMINS_INT==0))THEN
409 DO I=1,JLT
410 FAC = STIF(I) / MAX(EM30,STIF(I))
411 VIS = SQRT(VIS2(I))
412 FF = FAC * (
413 . VISC * VIS +
414 . VISCA**2 * TWO * MASMIN(I) * MAX(ZERO,-VN(I)) /
415 . MAX((GAPV(I) - PENE(I)),EM10) )
416 STIF(I) = STIF(I) * GAPV(I)/MAX((GAPV(I)-PENE(I)),EM10)
417 STIF(I) = STIF(I) + FF * DT1INV
418 STIF(I) = MAX(STIF(I) ,FAC*SQRT(VISCFFRIC(I))*VIS*DT1INV)
419 FF = MIN(FF * VN(I),-FNI(I))
420
421 FNI(I) = FNI(I) + FF
422
423 ENDDO
424
425 ELSE
426 DO I=1,JLT
427 FAC = STIF(I) / MAX(EM30,STIF(I))
428 VIS = SQRT(VIS2(I))
429 C(I)= FAC * (
430 . VISC * VIS +
431 . VISCA**2 * TWO * MASMIN(I) * MAX(ZERO,-VN(I)) /
432 . MAX((GAPV(I) - PENE(I)),EM10) )
433 STIF(I) = STIF(I) * GAPV(I) / MAX((GAPV(I) - PENE(I)),EM10)
434 KT(I) = STIF(I)
435 STIF(I) = STIF(I) + C(I) * DT1INV
436 FF = MIN(C(I) * VN(I),-FNI(I))
437
438 FNI(I) = FNI(I) + FF
439 CF(I) = FAC*SQRT(VISCFFRIC(I))*VIS
440 STIF(I) = MAX(STIF(I) ,CF(I)*DT1INV)
441
442 ENDDO
443 ENDIF
444
445 ELSEIF(IVIS2==2)THEN
446
447
448
449 DO I=1,JLT
450 VIS2(I) = VIS2(I)/( MAX(EM10,(GAPV(I)-PENE(I))/GAPV(I)))
451 ENDDO
452
453 VISCA = HALF
454 DO I=1,JLT
455 FAC = STIF(I) / MAX(EM30,STIF(I))
456 VIS = SQRT(VIS2(I))
457 FF = FAC * (
458 . VISC * VIS +
459 . VISCA**2 * TWO * MASMIN(I) * ABS(VN(I)) /
460 . MAX((GAPV(I) - PENE(I)),EM10) )
461 STIF(I) = STIF(I) * GAPV(I) / MAX((GAPV(I)-PENE(I)),EM10)
462 STIF(I) = STIF(I) + TWO * FF * DT1INV
463 STIF(I) = MAX(STIF(I) ,FAC*SQRT(VISCFFRIC(I))*VIS*DT1INV)
464 FF = MIN(FF * VN(I),-FNI(I))
465 FNI(I) = FNI(I) + FF
466 ENDDO
467 ELSEIF(IVIS2==3)THEN
468
469
470
471 DO I=1,JLT
472 FAC = STIF(I) / MAX(EM30,STIF(I))
473 VIS = SQRT(VIS2(I))
474 FF = FAC * ( VISC * VIS ) /
475 . MAX((GAPV(I) - PENE(I)),EM10)
476 STIF(I) = STIF(I) * GAPV(I) / MAX((GAPV(I)-PENE(I)),EM10)
477 STIF(I) = STIF(I) + TWO * FF * DT1INV
478 STIF(I) = MAX(STIF(I) ,FAC*SQRT(VISCFFRIC(I))*VIS*DT1INV)
479 FF = MIN(FF * VN(I),-FNI(I))
480 FNI(I) = FNI(I) + FF
481 ENDDO
482 ELSEIF(IVIS2==4)THEN
483
484
485
486 DO I=1,JLT
487 VIS = SQRT(VIS2(I))
488 STIF(I) = STIF(I) * GAPV(I) / MAX((GAPV(I)-PENE(I)),EM10)
489 STIF(I) = MAX(STIF(I) ,FAC*SQRT(VISCFFRIC(I))*VIS*DT1INV)
490 ENDDO
491 ELSEIF(IVIS2==5)THEN
492
493
494
495
496
497 DO I=1,JLT
498 MAS2 = MS1(I)*HS1(I)
499 . + MS2(I)*HS2(I)
500 MASM = MM1(I)*HM1(I)
501 . + MM2(I)*HM2(I)
502 VIS = 2. * VISC * DT1INV * MASM * MAS2 /
503 . MAX(EM30,MASM+MAS2)
504 STIF(I) = STIF(I) * GAPV(I) / MAX((GAPV(I) -PENE(I)),EM10)
505 STIF(I) = MAX(STIF(I) ,FAC*SQRT(VISCFFRIC(I)*VIS2(I))*DT1INV)
506 FF = VIS * VN(I)
507 ECONTDT = ECONTDT + MIN(ZERO,FF-FNI(I)) * VN(I) * DT1
508 FNI(I) = MIN(FNI(I),FF)
509 ENDDO
510 ELSE
511 ENDIF
512 ELSE
513 DO I=1,JLT
514 STIF(I) = STIF(I) * GAPV(I) / MAX((GAPV(I) - PENE(I)),EM10)
515 ENDDO
516 ENDIF
517
518
519
520 FSAV1 = ZERO
521 FSAV2 = ZERO
522 FSAV3 = ZERO
523 FSAV8 = ZERO
524 FSAV9 = ZERO
525 FSAV10= ZERO
526 FSAV11= ZERO
527 DO I=1,JLT
528 FXI(I)=NX(I)*FNI(I)
529 FYI(I)=NY(I)*FNI(I)
530 FZI(I)=NZ(I)*FNI(I)
531 FSAV1=FSAV1+FXI(I)*DT12
532 FSAV2=FSAV2+FYI(I)*DT12
533 FSAV3=FSAV3+FZI(I)*DT12
534 FSAV8=FSAV8+ABS(FXI(I)*DT12)
535 FSAV9=FSAV9+ABS(FYI(I)*DT12)
536 FSAV10=FSAV10+ABS(FZI(I)*DT12)
537 FSAV11=FSAV11+ABS(FNI(I))*DT12
538 ENDDO
539 IF (INCONV==1) THEN
540#include "lockon.inc"
541 FSAV(1)=FSAV(1)+FSAV1
542 FSAV(2)=FSAV(2)+FSAV2
543 FSAV(3)=FSAV(3)+FSAV3
544 FSAV(8)=FSAV(8)+FSAV8
545 FSAV(9)=FSAV(9)+FSAV9
546 FSAV(10)=FSAV(10)+FSAV10
547 FSAV(11)=FSAV(11)+FSAV11
548#include "lockoff.inc"
549 ENDIF
550
551 IF(ISENSINT(1)/=0) THEN
552 DO I=1,JLT
553 FSAVPARIT(1,1,I+NFT) = FXI(I)
554 FSAVPARIT(1,2,I+NFT) = FYI(I)
555 FSAVPARIT(1,3,I+NFT) = FZI(I)
556 ENDDO
557 ENDIF
558
559
560
561 IF (NISUB > 0) THEN
562
563 DO I=1,JLT
564 IM=CM_LOC(I)
565 KK =ADDSUBM(IM)
566 IF (CS_LOC(I)<=NRTS) THEN
567
568 IS=CS_LOC(I)
569 JJ =ADDSUBS(IS)
570 DO WHILE(JJ<ADDSUBS(IS+1))
571 JSUB=LISUBS(JJ)
572 ITYPSUB = TYPSUB(JSUB)
573
574 IF(ITYPSUB == 1 ) THEN ! Defining specific inter
575
576 KSUB=LISUBM(KK)
577
578.AND. DO WHILE((KSUB<=JSUB)(KK<ADDSUBM(IM+1)))
579
580 IF(KSUB==JSUB)THEN
581
582 FSAV1=FXI(I)*DT12
583 FSAV2=FYI(I)*DT12
584 FSAV3=FZI(I)*DT12
585 FSAV8=ABS(FXI(I)*DT12)
586 FSAV9=ABS(FYI(I)*DT12)
587 FSAV10=ABS(FZI(I)*DT12)
588 FSAV11=ABS(FNI(I))*DT12
589
590 NSUB=LISUB(JSUB)
591 FSAVSUB(1,NSUB)=FSAVSUB(1,NSUB)+FSAV1
592 FSAVSUB(2,NSUB)=FSAVSUB(2,NSUB)+FSAV2
593 FSAVSUB(3,NSUB)=FSAVSUB(3,NSUB)+FSAV3
594 FSAVSUB(8,NSUB)=FSAVSUB(8,NSUB)+FSAV8
595 FSAVSUB(9,NSUB)=FSAVSUB(9,NSUB)+FSAV9
596 FSAVSUB(10,NSUB)=FSAVSUB(10,NSUB)+FSAV10
597 FSAVSUB(11,NSUB)=FSAVSUB(11,NSUB)+FSAV11
598
599 IF(ISENSINT(JSUB+1)/=0) THEN
600 FSAVPARIT(JSUB+1,1,I+NFT) = FXI(I)
601 FSAVPARIT(JSUB+1,2,I+NFT) = FYI(I)
602 FSAVPARIT(JSUB+1,3,I+NFT) = FZI(I)
603 ENDIF
604
605 END IF
606
607 KK=KK+1
608 KSUB=LISUBM(KK)
609 ENDDO
610 JJ=JJ+1
611
612 ELSEIF(ITYPSUB == 2 ) THEN ! Inter =0 : collecting forces from all inter with only 1 surface : secondary side
613
614 FSAV1=FXI(I)*DT12
615 FSAV2=FYI(I)*DT12
616 FSAV3=FZI(I)*DT12
617 FSAV8=ABS(FXI(I)*DT12)
618 FSAV9=ABS(FYI(I)*DT12)
619 FSAV10=ABS(FZI(I)*DT12)
620 FSAV11=ABS(FNI(I))*DT12
621
622 NSUB=LISUB(JSUB)
623 FSAVSUB(1,NSUB)=FSAVSUB(1,NSUB)+FSAV1
624 FSAVSUB(2,NSUB)=FSAVSUB(2,NSUB)+FSAV2
625 FSAVSUB(3,NSUB)=FSAVSUB(3,NSUB)+FSAV3
626 FSAVSUB(8,NSUB)=FSAVSUB(8,NSUB)+FSAV8
627 FSAVSUB(9,NSUB)=FSAVSUB(9,NSUB)+FSAV9
628 FSAVSUB(10,NSUB)=FSAVSUB(10,NSUB)+FSAV10
629 FSAVSUB(11,NSUB)=FSAVSUB(11,NSUB)+FSAV11
630
631 IF(ISENSINT(JSUB+1)/=0) THEN
632 FSAVPARIT(JSUB+1,1,I+NFT) = FXI(I)
633 FSAVPARIT(JSUB+1,2,I+NFT) = FYI(I)
634 FSAVPARIT(JSUB+1,3,I+NFT) = FZI(I)
635 ENDIF
636
637
638 JJ=JJ+1
639 ELSEIF(ITYPSUB == 3 ) THEN ! Inter =0 : collecting forces from all inter with 2 surfacec
640
641 ISS2 = BITGET(INFLG_SUBS(JJ),0)
642 ISS1 = BITGET(INFLG_SUBS(JJ),1)
643 KSUB=LISUBM(KK)
644.AND. DO WHILE((KSUB<=JSUB)(KK<ADDSUBM(IM+1)))
645 IMS2 = BITGET(INFLG_SUBM(KK),0)
646 IMS1 = BITGET(INFLG_SUBM(KK),1)
647 IF(KSUB==JSUB)THEN
648.NOT..AND..OR. IF(((IMS1 == 1 ISS2 == 1)
649.AND. . (IMS2 == 1 ISS1 == 1))) THEN
650 KK=KK+1
651 KSUB=LISUBM(KK)
652 CYCLE
653 END IF
654
655 FSAV1=FXI(I)*DT12
656 FSAV2=FYI(I)*DT12
657 FSAV3=FZI(I)*DT12
658 FSAV8=ABS(FXI(I)*DT12)
659 FSAV9=ABS(FYI(I)*DT12)
660 FSAV10=ABS(FZI(I)*DT12)
661 FSAV11=ABS(FNI(I))*DT12
662
663 NSUB=LISUB(JSUB)
664 IF(IMS2 > 0)THEN
665 FSAVSUB(1,NSUB)=FSAVSUB(1,NSUB)-FSAV1
666 FSAVSUB(2,NSUB)=FSAVSUB(2,NSUB)-FSAV2
667 FSAVSUB(3,NSUB)=FSAVSUB(3,NSUB)-FSAV3
668
669 ELSE
670 FSAVSUB(1,NSUB)=FSAVSUB(1,NSUB)+FSAV1
671 FSAVSUB(2,NSUB)=FSAVSUB(2,NSUB)+FSAV2
672 FSAVSUB(3,NSUB)=FSAVSUB(3,NSUB)+FSAV3
673 ENDIF
674 FSAVSUB(8,NSUB)=FSAVSUB(8,NSUB)+FSAV8
675 FSAVSUB(9,NSUB)=FSAVSUB(9,NSUB)+FSAV9
676 FSAVSUB(10,NSUB)=FSAVSUB(10,NSUB)+FSAV10
677 FSAVSUB(11,NSUB)=FSAVSUB(11,NSUB)+FSAV11
678
679 IF(ISENSINT(JSUB+1)/=0) THEN
680 IF(IMS2 > 0)THEN
681 FSAVPARIT(JSUB+1,1,I+NFT) = -FXI(I)
682 FSAVPARIT(JSUB+1,2,I+NFT) = -FYI(I)
683 FSAVPARIT(JSUB+1,3,I+NFT) = -FZI(I)
684 ELSE
685 FSAVPARIT(JSUB+1,1,I+NFT) = FXI(I)
686 FSAVPARIT(JSUB+1,2,I+NFT) = FYI(I)
687 FSAVPARIT(JSUB+1,3,I+NFT) = FZI(I)
688 ENDIF
689 ENDIF
690
691 END IF
692
693 KK=KK+1
694 KSUB=LISUBM(KK)
695 ENDDO
696 JJ=JJ+1
697
698 ENDIF
699
700 ENDDO
701
702 DO WHILE(KK<ADDSUBM(IM+1))
703 KSUB=LISUBM(KK)
704
705 ITYPSUB = TYPSUB(KSUB)
706 IF(ITYPSUB == 2 ) THEN ! Inter =0 : collecting forces from all inter with only 1 surface : main side
707
708 FSAV1=FXI(I)*DT12
709 FSAV2=FYI(I)*DT12
710 FSAV3=FZI(I)*DT12
711 FSAV8=ABS(FXI(I)*DT12)
712 FSAV9=ABS(FYI(I)*DT12)
713 FSAV10=ABS(FZI(I)*DT12)
714 FSAV11=ABS(FNI(I))*DT12
715
716 NSUB=LISUB(KSUB)
717 FSAVSUB(1,NSUB)=FSAVSUB(1,NSUB)-FSAV1
718 FSAVSUB(2,NSUB)=FSAVSUB(2,NSUB)-FSAV2
719 FSAVSUB(3,NSUB)=FSAVSUB(3,NSUB)-FSAV3
720 FSAVSUB(8,NSUB)=FSAVSUB(8,NSUB)+FSAV8
721 FSAVSUB(9,NSUB)=FSAVSUB(9,NSUB)+FSAV9
722 FSAVSUB(10,NSUB)=FSAVSUB(10,NSUB)+FSAV10
723 FSAVSUB(11,NSUB)=FSAVSUB(11,NSUB)+FSAV11
724
725 IF(ISENSINT(JSUB+1)/=0) THEN
726 FSAVPARIT(JSUB+1,1,I+NFT) = -FXI(I)
727 FSAVPARIT(JSUB+1,2,I+NFT) = -FYI(I)
728 FSAVPARIT(JSUB+1,3,I+NFT) = -FZI(I)
729 ENDIF
730
731
732 ENDIF
733 KK=KK+1
734 ENDDO
735
736
737
738 ELSE
739
740 IS=CS_LOC(I)-NRTS
741 JJ =ADDSUBSFI(NIN)%P(IS)
742 DO WHILE(JJ<ADDSUBSFI(NIN)%P(IS+1))
743 JSUB=LISUBSFI(NIN)%P(JJ)
744 ITYPSUB = TYPSUB(JSUB)
745
746 IF(ITYPSUB == 1 ) THEN ! Defining specific inter
747
748 KSUB=LISUBM(KK)
749.AND. DO WHILE((KSUB<=JSUB)(KK<ADDSUBM(IM+1)))
750
751 IF(KSUB==JSUB)THEN
752
753 FSAV1=FXI(I)*DT12
754 FSAV2=FYI(I)*DT12
755 FSAV3=FZI(I)*DT12
756 FSAV8=ABS(FXI(I)*DT12)
757 FSAV9=ABS(FYI(I)*DT12)
758 FSAV10=ABS(FZI(I)*DT12)
759 FSAV11=ABS(FNI(I))*DT12
760
761 NSUB=LISUB(JSUB)
762 FSAVSUB(1,NSUB)=FSAVSUB(1,NSUB)+FSAV1
763 FSAVSUB(2,NSUB)=FSAVSUB(2,NSUB)+FSAV2
764 FSAVSUB(3,NSUB)=FSAVSUB(3,NSUB)+FSAV3
765 FSAVSUB(8,NSUB)=FSAVSUB(8,NSUB)+FSAV8
766 FSAVSUB(9,NSUB)=FSAVSUB(9,NSUB)+FSAV9
767 FSAVSUB(10,NSUB)=FSAVSUB(10,NSUB)+FSAV10
768 FSAVSUB(11,NSUB)=FSAVSUB(11,NSUB)+FSAV11
769
770 IF(ISENSINT(JSUB+1)/=0) THEN
771 FSAVPARIT(JSUB+1,1,I+NFT) = FXI(I)
772 FSAVPARIT(JSUB+1,2,I+NFT) = FYI(I)
773 FSAVPARIT(JSUB+1,3,I+NFT) = FZI(I)
774 ENDIF
775
776 END IF
777
778 KK=KK+1
779 KSUB=LISUBM(KK)
780 ENDDO
781 JJ=JJ+1
782
783 ELSEIF(ITYPSUB == 2 ) THEN ! Inter =0 : collecting forces from all inter with only 1 surface
784
785 FSAV1=FXI(I)*DT12
786 FSAV2=FYI(I)*DT12
787 FSAV3=FZI(I)*DT12
788 FSAV8=ABS(FXI(I)*DT12)
789 FSAV9=ABS(FYI(I)*DT12)
790 FSAV10=ABS(FZI(I)*DT12)
791 FSAV11=ABS(FNI(I))*DT12
792
793 NSUB=LISUB(JSUB)
794 FSAVSUB(1,NSUB)=FSAVSUB(1,NSUB)+FSAV1
795 FSAVSUB(2,NSUB)=FSAVSUB(2,NSUB)+FSAV2
796 FSAVSUB(3,NSUB)=FSAVSUB(3,NSUB)+FSAV3
797 FSAVSUB(8,NSUB)=FSAVSUB(8,NSUB)+FSAV8
798 FSAVSUB(9,NSUB)=FSAVSUB(9,NSUB)+FSAV9
799 FSAVSUB(10,NSUB)=FSAVSUB(10,NSUB)+FSAV10
800 FSAVSUB(11,NSUB)=FSAVSUB(11,NSUB)+FSAV11
801
802 IF(ISENSINT(JSUB+1)/=0) THEN
803 FSAVPARIT(JSUB+1,1,I+NFT) = FXI(I)
804 FSAVPARIT(JSUB+1,2,I+NFT) = FYI(I)
805 FSAVPARIT(JSUB+1,3,I+NFT) = FZI(I)
806 ENDIF
807
808
809 JJ=JJ+1
810
811 ELSEIF(ITYPSUB == 3 ) THEN ! Inter =0 : collecting forces from all inter with 2 surfacec
812
813 ISS2 = BITGET(INFLG_SUBSFI(NIN)%P(JJ),0)
814 ISS1 = BITGET(INFLG_SUBSFI(NIN)%P(JJ),1)
815 KSUB=LISUBM(KK)
816.AND. DO WHILE((KSUB<=JSUB)(KK<ADDSUBM(IM+1)))
817 IMS2 = BITGET(INFLG_SUBM(KK),0)
818 IMS1 = BITGET(INFLG_SUBM(KK),1)
819 IF(KSUB==JSUB)THEN
820.NOT..AND..OR. IF(((IMS1 == 1 ISS2 == 1)
821.AND. . (IMS2 == 1 ISS1 == 1))) THEN
822 KK=KK+1
823 KSUB=LISUBM(KK)
824 CYCLE
825 END IF
826
827 FSAV1=FXI(I)*DT12
828 FSAV2=FYI(I)*DT12
829 FSAV3=FZI(I)*DT12
830 FSAV8=ABS(FXI(I)*DT12)
831 FSAV9=ABS(FYI(I)*DT12)
832 FSAV10=ABS(FZI(I)*DT12)
833 FSAV11=ABS(FNI(I))*DT12
834
835 NSUB=LISUB(JSUB)
836 IF(IMS2 > 0)THEN
837 FSAVSUB(1,NSUB)=FSAVSUB(1,NSUB)-FSAV1
838 FSAVSUB(2,NSUB)=FSAVSUB(2,NSUB)-FSAV2
839 FSAVSUB(3,NSUB)=FSAVSUB(3,NSUB)-FSAV3
840
841 ELSE
842 FSAVSUB(1,NSUB)=FSAVSUB(1,NSUB)+FSAV1
843 FSAVSUB(2,NSUB)=FSAVSUB(2,NSUB)+FSAV2
844 FSAVSUB(3,NSUB)=FSAVSUB(3,NSUB)+FSAV3
845 ENDIF
846 FSAVSUB(8,NSUB)=FSAVSUB(8,NSUB)+FSAV8
847 FSAVSUB(9,NSUB)=FSAVSUB(9,NSUB)+FSAV9
848 FSAVSUB(10,NSUB)=FSAVSUB(10,NSUB)+FSAV10
849 FSAVSUB(11,NSUB)=FSAVSUB(11,NSUB)+FSAV11
850
851 IF(ISENSINT(JSUB+1)/=0) THEN
852 IF(IMS2 > 0)THEN
853 FSAVPARIT(JSUB+1,1,I+NFT) = -FXI(I)
854 FSAVPARIT(JSUB+1,2,I+NFT) = -FYI(I)
855 FSAVPARIT(JSUB+1,3,I+NFT) = -FZI(I)
856 ELSE
857 FSAVPARIT(JSUB+1,1,I+NFT) = FXI(I)
858 FSAVPARIT(JSUB+1,2,I+NFT) = FYI(I)
859 FSAVPARIT(JSUB+1,3,I+NFT) = FZI(I)
860 ENDIF
861 ENDIF
862
863 END IF
864
865 KK=KK+1
866 KSUB=LISUBM(KK)
867 ENDDO
868 JJ=JJ+1
869
870 ENDIF
871
872 ENDDO
873 ENDIF
874
875 ENDDO
876
877 ENDIF
878
879
880 IF(NINLOADP > 0) THEN
881 DO K = KLOADPINTER(NIN)+1, KLOADPINTER(NIN+1)
882 PP = LOADPINTER(K)
883 PPL = LOADP_HYD_INTER(PP)
884 DGAPLOAD = DGAPLOADINT(K)
885 DO I=1,JLT
886 DIST = PENRAD(I) + GAPV(I)
887 GAPP= GAPV(I) + DGAPLOAD
888.OR. IF(PENE(I) > ZERO DIST <= GAPP) THEN
889 TAGNCONT(PPL,M1(I)) = 1
890 TAGNCONT(PPL,M2(I)) = 1
891 IF(CS_LOC(I)<=NRTS) THEN
892
893 TAGNCONT(PPL,N1(I)) = 1
894 TAGNCONT(PPL,N2(I)) = 1
895 ENDIF
896 ENDIF
897 ENDDO
898 ENDDO
899 ENDIF
900
901
902
903
904 IF(IFORM==1)THEN
905 FSAV4 = ZERO
906 FSAV5 = ZERO
907 FSAV6 = ZERO
908 FSAV12 = ZERO
909 FSAV13 = ZERO
910 FSAV14 = ZERO
911 FSAV15 = ZERO
912 DO I=1,JLT
913 IF(FRICC(I)*VISCFFRIC(I)/=0.)THEN
914 VNX = NX(I)*VN(I)
915 VNY = NY(I)*VN(I)
916 VNZ = NZ(I)*VN(I)
917 VX(I) = VX(I) - VNX
918 VY(I) = VY(I) - VNY
919 VZ(I) = VZ(I) - VNZ
920 V2 = VX(I)**2 + VY(I)**2 + VZ(I)**2
921 VIS2(I) = VISCFFRIC(I) * VIS2(I)
922 FM2 = (FRICC(I)*FNI(I))**2
923 F2 = VIS2(I) * V2
924 A2 = MIN(F2,FM2) / MAX(EM30,F2)
925 AA = SQRT(A2 * VIS2(I))
926 FXT(I) = AA * VX(I)
927 FYT(I) = AA * VY(I)
928 FZT(I) = AA * VZ(I)
929 FSAV4 = FSAV4 + FXT(I)*DT12
930 FSAV5 = FSAV5 + FYT(I)*DT12
931 FSAV6 = FSAV6 + FZT(I)*DT12
932 FXI(I)=FXI(I) + FXT(I)
933 FYI(I)=FYI(I) + FYT(I)
934 FZI(I)=FZI(I) + FZT(I)
935 FSAV12 = FSAV12 + ABS(FXI(I)*DT12)
936 FSAV13 = FSAV13 + ABS(FYI(I)*DT12)
937 FSAV14 = FSAV14 + ABS(FZI(I)*DT12)
938 FSAV15 = FSAV15 + SQRT(FXI(I)*FXI(I)+FYI(I)*FYI(I)+FZI(I)*FZI(I))*DT12
939 ECONVT = ECONVT + AA * V2 * DT1
940 ENDIF
941 ENDDO
942 IF (INCONV==1) THEN
943#include "lockon.inc"
944 FSAV(4) = FSAV(4) + FSAV4
945 FSAV(5) = FSAV(5) + FSAV5
946 FSAV(6) = FSAV(6) + FSAV6
947 FSAV(12) = FSAV(12) + FSAV12
948 FSAV(13) = FSAV(13) + FSAV13
949 FSAV(14) = FSAV(14) + FSAV14
950 FSAV(15) = FSAV(15) + FSAV15
951#include "lockoff.inc"
952 ENDIF
953 ELSEIF(IFORM==2)THEN
954
955
956
957 FSAV4 = ZERO
958 FSAV5 = ZERO
959 FSAV6 = ZERO
960 FSAV12 = ZERO
961 FSAV13 = ZERO
962 FSAV14 = ZERO
963 FSAV15 = ZERO
964 DO I=1,JLT
965 FX = STIF(I)*VX(I)*DT12
966 FY = STIF(I)*VY(I)*DT12
967 FZ = STIF(I)*VZ(I)*DT12
968 FX = CAND_FX(INDEX(I)) + FX
969 FY = CAND_FY(INDEX(I)) + FY
970 FZ = CAND_FZ(INDEX(I)) + FZ
971 FTN = FX*NX(I) + FY*NY(I) + FZ*NZ(I)
972 FX = FX - FTN*NX(I)
973 FY = FY - FTN*NY(I)
974 FZ = FZ - FTN*NZ(I)
975 FT = FX*FX + FY*FY + FZ*FZ
976 FT = MAX(FT,EM30)
977 FN = FXI(I)**2+FYI(I)**2+FZI(I)**2
978 BETA = MIN(ONE,FRICC(I)*SQRT(FN/FT))
979 FXT(I) = FX * BETA
980 FYT(I) = FY * BETA
981 FZT(I) = FZ * BETA
982 FSAV4 = FSAV4 + FXT(I)*DT12
983 FSAV5 = FSAV5 + FYT(I)*DT12
984 FSAV6 = FSAV6 + FZT(I)*DT12
985 CAND_FX(INDEX(I)) = FXT(I)
986 CAND_FY(INDEX(I)) = FYT(I)
987 CAND_FZ(INDEX(I)) = FZT(I)
988 IFPEN(INDEX(I)) = 1
989 FXI(I)=FXI(I) + FXT(I)
990 FYI(I)=FYI(I) + FYT(I)
991 FZI(I)=FZI(I) + FZT(I)
992 FSAV12 = FSAV12 + ABS(FXI(I)*DT12)
993 FSAV13 = FSAV13 + ABS(FYI(I)*DT12)
994 FSAV14 = FSAV14 + ABS(FZI(I)*DT12)
995 FSAV15 = FSAV15 + SQRT(FXI(I)*FXI(I)+FYI(I)*FYI(I)+FZI(I)*FZI(I))*DT12
996 ECONVT = ECONVT
997 . + DT1*(VX(I)*FXT(I)+VY(I)*FYT(I)+VZ(I)*FZT(I))
998 ENDDO
999 IF (INCONV==1) THEN
1000#include "lockon.inc"
1001 FSAV(4) = FSAV(4) + FSAV4
1002 FSAV(5) = FSAV(5) + FSAV5
1003 FSAV(6) = FSAV(6) + FSAV6
1004 FSAV(12) = FSAV(12) + FSAV12
1005 FSAV(13) = FSAV(13) + FSAV13
1006 FSAV(14) = FSAV(14) + FSAV14
1007 FSAV(15) = FSAV(15) + FSAV15
1008#include "lockoff.inc"
1009 ENDIF
1010
1011 ENDIF
1012
1013 IF(ISENSINT(1)/=0) THEN
1014 DO I=1,JLT
1015 FSAVPARIT(1,4,I+NFT) = FXT(I)
1016 FSAVPARIT(1,5,I+NFT) = FYT(I)
1017 FSAVPARIT(1,6,I+NFT) = FZT(I)
1018 ENDDO
1019 ENDIF
1020
1021
1022
1023
1024 IF (NISUB > 0) THEN
1025
1026 DO I=1,JLT
1027 IM=CM_LOC(I)
1028 KK =ADDSUBM(IM)
1029 IF (CS_LOC(I)<=NRTS) THEN
1030
1031 IS=CS_LOC(I)
1032 JJ =ADDSUBS(IS)
1033
1034 DO WHILE(JJ<ADDSUBS(IS+1))
1035 JSUB=LISUBS(JJ)
1036 ITYPSUB = TYPSUB(JSUB)
1037 IF(ITYPSUB == 1 ) THEN ! Defining specific inter
1038
1039 KSUB=LISUBM(KK)
1040.AND. DO WHILE((KSUB<=JSUB)(KK<ADDSUBM(IM+1)))
1041 IF(KSUB==JSUB)THEN
1042
1043 FSAV4=FXT(I)*DT12
1044 FSAV5=FYT(I)*DT12
1045 FSAV6=FZT(I)*DT12
1046 FSAV12 = ABS(FXI(I)*DT12)
1047 FSAV13 = ABS(FYI(I)*DT12)
1048 FSAV14 = ABS(FZI(I)*DT12)
1049 FSAV15 = SQRT(FXI(I)*FXI(I)+FYI(I)*FYI(I)+FZI(I)*FZI(I))*DT12
1050
1051 NSUB=LISUB(JSUB)
1052 FSAVSUB(4,NSUB)=FSAVSUB(4,NSUB)+FSAV4
1053 FSAVSUB(5,NSUB)=FSAVSUB(5,NSUB)+FSAV5
1054 FSAVSUB(6,NSUB)=FSAVSUB(6,NSUB)+FSAV6
1055 FSAVSUB(12,NSUB)=FSAVSUB(12,NSUB)+FSAV12
1056 FSAVSUB(13,NSUB)=FSAVSUB(13,NSUB)+FSAV13
1057 FSAVSUB(14,NSUB)=FSAVSUB(14,NSUB)+FSAV14
1058 FSAVSUB(15,NSUB)=FSAVSUB(15,NSUB)+FSAV15
1059
1060 IF(ISENSINT(JSUB+1)/=0) THEN
1061 FSAVPARIT(JSUB+1,4,I+NFT) = FXT(I)
1062 FSAVPARIT(JSUB+1,5,I+NFT) = FYT(I)
1063 FSAVPARIT(JSUB+1,6,I+NFT) = FZT(I)
1064 ENDIF
1065 END IF
1066
1067 KK=KK+1
1068 KSUB=LISUBM(KK)
1069 ENDDO
1070 JJ=JJ+1
1071
1072 ELSEIF(ITYPSUB == 2 ) THEN ! Inter =0 : collecting forces from all inter with only 1 surface
1073
1074 FSAV4=FXT(I)*DT12
1075 FSAV5=FYT(I)*DT12
1076 FSAV6=FZT(I)*DT12
1077 FSAV12 = ABS(FXI(I)*DT12)
1078 FSAV13 = ABS(FYI(I)*DT12)
1079 FSAV14 = ABS(FZI(I)*DT12)
1080 FSAV15 = SQRT(FXI(I)*FXI(I)+FYI(I)*FYI(I)+FZI(I)*FZI(I))*DT12
1081
1082 NSUB=LISUB(JSUB)
1083 FSAVSUB(4,NSUB)=FSAVSUB(4,NSUB)+FSAV4
1084 FSAVSUB(5,NSUB)=FSAVSUB(5,NSUB)+FSAV5
1085 FSAVSUB(6,NSUB)=FSAVSUB(6,NSUB)+FSAV6
1086 FSAVSUB(12,NSUB)=FSAVSUB(12,NSUB)+FSAV12
1087 FSAVSUB(13,NSUB)=FSAVSUB(13,NSUB)+FSAV13
1088 FSAVSUB(14,NSUB)=FSAVSUB(14,NSUB)+FSAV14
1089 FSAVSUB(15,NSUB)=FSAVSUB(15,NSUB)+FSAV15
1090
1091 IF(ISENSINT(JSUB+1)/=0) THEN
1092 FSAVPARIT(JSUB+1,4,I+NFT) = FXT(I)
1093 FSAVPARIT(JSUB+1,5,I+NFT) = FYT(I)
1094 FSAVPARIT(JSUB+1,6,I+NFT) = FZT(I)
1095 ENDIF
1096
1097 JJ = JJ + 1
1098 ELSEIF(ITYPSUB == 3) THEN
1099
1100 ISS2 = BITGET(INFLG_SUBS(JJ),0)
1101 ISS1 = BITGET(INFLG_SUBS(JJ),1)
1102 KSUB=LISUBM(KK)
1103.AND. DO WHILE((KSUB<=JSUB)(KK<ADDSUBM(IM+1)))
1104 IMS2 = BITGET(INFLG_SUBM(KK),0)
1105 IMS1 = BITGET(INFLG_SUBM(KK),1)
1106 IF(KSUB==JSUB)THEN
1107.NOT..AND..OR. IF(((IMS1 == 1 ISS2 == 1)
1108.AND. . (IMS2 == 1 ISS1 == 1))) THEN
1109 KK=KK+1
1110 KSUB=LISUBM(KK)
1111 CYCLE
1112 END IF
1113
1114 FSAV4=FXT(I)*DT12
1115 FSAV5=FYT(I)*DT12
1116 FSAV6=FZT(I)*DT12
1117 FSAV12 = ABS(FXI(I)*DT12)
1118 FSAV13 = ABS(FYI(I)*DT12)
1119 FSAV14 = ABS(FZI(I)*DT12)
1120 FSAV15 = SQRT(FXI(I)*FXI(I)+FYI(I)*FYI(I)+FZI(I)*FZI(I))*DT12
1121
1122 NSUB=LISUB(JSUB)
1123 IF(IMS2 > 0 ) THEN
1124 FSAVSUB(4,NSUB)=FSAVSUB(4,NSUB)-FSAV4
1125 FSAVSUB(5,NSUB)=FSAVSUB(5,NSUB)-FSAV5
1126 FSAVSUB(6,NSUB)=FSAVSUB(6,NSUB)-FSAV6
1127 ELSE
1128 FSAVSUB(4,NSUB)=FSAVSUB(4,NSUB)+FSAV4
1129 FSAVSUB(5,NSUB)=FSAVSUB(5,NSUB)+FSAV5
1130 FSAVSUB(6,NSUB)=FSAVSUB(6,NSUB)+FSAV6
1131 ENDIF
1132 FSAVSUB(12,NSUB)=FSAVSUB(12,NSUB)+FSAV12
1133 FSAVSUB(13,NSUB)=FSAVSUB(13,NSUB)+FSAV13
1134 FSAVSUB(14,NSUB)=FSAVSUB(14,NSUB)+FSAV14
1135 FSAVSUB(15,NSUB)=FSAVSUB(15,NSUB)+FSAV15
1136
1137 IF(ISENSINT(JSUB+1)/=0) THEN
1138 IF(IMS2 > 0 ) THEN
1139 FSAVPARIT(JSUB+1,4,I+NFT) = FXT(I)
1140 FSAVPARIT(JSUB+1,5,I+NFT) = FYT(I)
1141 FSAVPARIT(JSUB+1,6,I+NFT) = FZT(I)
1142 ELSE
1143 FSAVPARIT(JSUB+1,4,I+NFT) = -FXT(I)
1144 FSAVPARIT(JSUB+1,5,I+NFT) = -FYT(I)
1145 FSAVPARIT(JSUB+1,6,I+NFT) = -FZT(I)
1146 ENDIF
1147 ENDIF
1148 END IF
1149
1150 KK=KK+1
1151 KSUB=LISUBM(KK)
1152 ENDDO
1153 JJ=JJ+1
1154
1155 ENDIF
1156 ENDDO
1157
1158 DO WHILE(KK<ADDSUBM(IM+1))
1159 KSUB=LISUBM(KK)
1160
1161 ITYPSUB = TYPSUB(KSUB)
1162 IF(ITYPSUB == 2 ) THEN ! Inter =0 : collecting forces from all inter with only 1 surface : main side
1163
1164 FSAV4=-FXT(I)*DT12
1165 FSAV5=-FYT(I)*DT12
1166 FSAV6=-FZT(I)*DT12
1167 FSAV12 = ABS(FXI(I)*DT12)
1168 FSAV13 = ABS(FYI(I)*DT12)
1169 FSAV14 = ABS(FZI(I)*DT12)
1170 FSAV15 = SQRT(FXI(I)*FXI(I)+FYI(I)*FYI(I)+FZI(I)*FZI(I))*DT12
1171
1172 NSUB=LISUB(JSUB)
1173 FSAVSUB(4,NSUB)=FSAVSUB(4,NSUB)+FSAV4
1174 FSAVSUB(5,NSUB)=FSAVSUB(5,NSUB)+FSAV5
1175 FSAVSUB(6,NSUB)=FSAVSUB(6,NSUB)+FSAV6
1176 FSAVSUB(12,NSUB)=FSAVSUB(12,NSUB)+FSAV12
1177 FSAVSUB(13,NSUB)=FSAVSUB(13,NSUB)+FSAV13
1178 FSAVSUB(14,NSUB)=FSAVSUB(14,NSUB)+FSAV14
1179 FSAVSUB(15,NSUB)=FSAVSUB(15,NSUB)+FSAV15
1180
1181 IF(ISENSINT(JSUB+1)/=0) THEN
1182 FSAVPARIT(JSUB+1,4,I+NFT) = -FXT(I)
1183 FSAVPARIT(JSUB+1,5,I+NFT) = -FYT(I)
1184 FSAVPARIT(JSUB+1,6,I+NFT) = -FZT(I)
1185 ENDIF
1186
1187 JJ = JJ + 1
1188
1189 ENDIF
1190 KK=KK+1
1191 ENDDO
1192 ELSE
1193
1194 IS=CS_LOC(I)-NRTS
1195 JJ =ADDSUBSFI(NIN)%P(IS)
1196 DO WHILE(JJ<ADDSUBSFI(NIN)%P(IS+1))
1197 JSUB=LISUBSFI(NIN)%P(JJ)
1198 ITYPSUB = TYPSUB(JSUB)
1199
1200 IF(ITYPSUB == 1 ) THEN ! Defining specific inter
1201
1202 KSUB=LISUBM(KK)
1203.AND. DO WHILE((KSUB<=JSUB)(KK<ADDSUBM(IM+1)))
1204 IF(KSUB==JSUB)THEN
1205
1206 FSAV4=FXT(I)*DT12
1207 FSAV5=FYT(I)*DT12
1208 FSAV6=FZT(I)*DT12
1209 FSAV12 = ABS(FXI(I)*DT12)
1210 FSAV13 = ABS(FYI(I)*DT12)
1211 FSAV14 = ABS(FZI(I)*DT12)
1212 FSAV15 = SQRT(FXI(I)*FXI(I)+FYI(I)*FYI(I)+FZI(I)*FZI(I))*DT12
1213
1214 NSUB=LISUB(JSUB)
1215 FSAVSUB(4,NSUB)=FSAVSUB(4,NSUB)+FSAV4
1216 FSAVSUB(5,NSUB)=FSAVSUB(5,NSUB)+FSAV5
1217 FSAVSUB(6,NSUB)=FSAVSUB(6,NSUB)+FSAV6
1218 FSAVSUB(12,NSUB)=FSAVSUB(12,NSUB)+FSAV12
1219 FSAVSUB(13,NSUB)=FSAVSUB(13,NSUB)+FSAV13
1220 FSAVSUB(14,NSUB)=FSAVSUB(14,NSUB)+FSAV14
1221 FSAVSUB(15,NSUB)=FSAVSUB(15,NSUB)+FSAV15
1222
1223 IF(ISENSINT(JSUB+1)/=0) THEN
1224 FSAVPARIT(JSUB+1,4,I+NFT) = FXT(I)
1225 FSAVPARIT(JSUB+1,5,I+NFT) = FYT(I)
1226 FSAVPARIT(JSUB+1,6,I+NFT) = FZT(I)
1227 ENDIF
1228 END IF
1229
1230 KK=KK+1
1231 KSUB=LISUBM(KK)
1232 ENDDO
1233 JJ=JJ+1
1234
1235 ELSEIF(ITYPSUB == 2 ) THEN ! Inter =0 : collecting forces from all inter with only 1 surf
1236
1237 FSAV4=FXT(I)*DT12
1238 FSAV5=FYT(I)*DT12
1239 FSAV6=FZT(I)*DT12
1240 FSAV12 = ABS(FXI(I)*DT12)
1241 FSAV13 = ABS(FYI(I)*DT12)
1242 FSAV14 = ABS(FZI(I)*DT12)
1243 FSAV15 = SQRT(FXI(I)*FXI(I)+FYI(I)*FYI(I)+FZI(I)*FZI(I))*DT12
1244
1245 NSUB=LISUB(JSUB)
1246 FSAVSUB(4,NSUB)=FSAVSUB(4,NSUB)+FSAV4
1247 FSAVSUB(5,NSUB)=FSAVSUB(5,NSUB)+FSAV5
1248 FSAVSUB(6,NSUB)=FSAVSUB(6,NSUB)+FSAV6
1249 FSAVSUB(12,NSUB)=FSAVSUB(12,NSUB)+FSAV12
1250 FSAVSUB(13,NSUB)=FSAVSUB(13,NSUB)+FSAV13
1251 FSAVSUB(14,NSUB)=FSAVSUB(14,NSUB)+FSAV14
1252 FSAVSUB(15,NSUB)=FSAVSUB(15,NSUB)+FSAV15
1253
1254 IF(ISENSINT(JSUB+1)/=0) THEN
1255 FSAVPARIT(JSUB+1,4,I+NFT) = FXT(I)
1256 FSAVPARIT(JSUB+1,5,I+NFT) = FYT(I)
1257 FSAVPARIT(JSUB+1,6,I+NFT) = FZT(I)
1258 ENDIF
1259
1260 JJ = JJ + 1
1261
1262 ELSEIF(ITYPSUB == 3 ) THEN ! Inter =0 : collecting forces from all inter with 2 Surfs
1263
1264 ISS2 = BITGET(INFLG_SUBSFI(NIN)%P(JJ),0)
1265 ISS1 = BITGET(INFLG_SUBSFI(NIN)%P(JJ),1)
1266 KSUB=LISUBM(KK)
1267.AND. DO WHILE((KSUB<=JSUB)(KK<ADDSUBM(IM+1)))
1268 IMS2 = BITGET(INFLG_SUBM(KK),0)
1269 IMS1 = BITGET(INFLG_SUBM(KK),1)
1270 IF(KSUB==JSUB)THEN
1271.NOT..AND..OR. IF(((IMS1 == 1 ISS2 == 1)
1272.AND. . (IMS2 == 1 ISS1 == 1))) THEN
1273 KK=KK+1
1274 KSUB=LISUBM(KK)
1275 CYCLE
1276 END IF
1277
1278 FSAV4=FXT(I)*DT12
1279 FSAV5=FYT(I)*DT12
1280 FSAV6=FZT(I)*DT12
1281 FSAV12 = ABS(FXI(I)*DT12)
1282 FSAV13 = ABS(FYI(I)*DT12)
1283 FSAV14 = ABS(FZI(I)*DT12)
1284 FSAV15 = SQRT(FXI(I)*FXI(I)+FYI(I)*FYI(I)+FZI(I)*FZI(I))*DT12
1285
1286 NSUB=LISUB(JSUB)
1287 IF(IMS2 > 0) THEN
1288 FSAVSUB(4,NSUB)=FSAVSUB(4,NSUB)-FSAV4
1289 FSAVSUB(5,NSUB)=FSAVSUB(5,NSUB)-FSAV5
1290 FSAVSUB(6,NSUB)=FSAVSUB(6,NSUB)-FSAV6
1291 ELSE
1292 FSAVSUB(4,NSUB)=FSAVSUB(4,NSUB)+FSAV4
1293 FSAVSUB(5,NSUB)=FSAVSUB(5,NSUB)+FSAV5
1294 FSAVSUB(6,NSUB)=FSAVSUB(6,NSUB)+FSAV6
1295 ENDIF
1296 FSAVSUB(12,NSUB)=FSAVSUB(12,NSUB)+FSAV12
1297 FSAVSUB(13,NSUB)=FSAVSUB(13,NSUB)+FSAV13
1298 FSAVSUB(14,NSUB)=FSAVSUB(14,NSUB)+FSAV14
1299 FSAVSUB(15,NSUB)=FSAVSUB(15,NSUB)+FSAV15
1300
1301 IF(ISENSINT(JSUB+1)/=0) THEN
1302 IF(IMS2 > 0) THEN
1303 FSAVPARIT(JSUB+1,4,I+NFT) = -FXT(I)
1304 FSAVPARIT(JSUB+1,5,I+NFT) = -FYT(I)
1305 FSAVPARIT(JSUB+1,6,I+NFT) = -FZT(I)
1306 ELSE
1307 FSAVPARIT(JSUB+1,4,I+NFT) = FXT(I)
1308 FSAVPARIT(JSUB+1,5,I+NFT) = FYT(I)
1309 FSAVPARIT(JSUB+1,6,I+NFT) = FZT(I)
1310 ENDIF
1311 ENDIF
1312 END IF
1313
1314 KK=KK+1
1315 KSUB=LISUBM(KK)
1316 ENDDO
1317 JJ=JJ+1
1318
1319 ENDIF
1320 ENDDO
1321 ENDIF
1322
1323 ENDDO
1324
1325 ENDIF
1326
1327 IF (INCONV==1) THEN
1328#include "lockon.inc"
1329 ECONTV = ECONTV + ECONVT ! Frictional Energy
1330 ECONT = ECONT + ECONTT ! Elastic Energy
1331 ECONTD = ECONTD + ECONTDT ! Damping Energy
1332 FSAV(26) = FSAV(26) + ECONTT
1333 FSAV(27) = FSAV(27) + ECONVT
1334 FSAV(28) = FSAV(28) + ECONTDT
1335#include "lockoff.inc"
1336 ENDIF
1337
1338 DO I=1,JLT
1339 FX1(I)=-FXI(I)*HS1(I)
1340 FY1(I)=-FYI(I)*HS1(I)
1341 FZ1(I)=-FZI(I)*HS1(I)
1342
1343 FX2(I)=-FXI(I)*HS2(I)
1344 FY2(I)=-FYI(I)*HS2(I)
1345 FZ2(I)=-FZI(I)*HS2(I)
1346
1347 FX3(I)=FXI(I)*HM1(I)
1348 FY3(I)=FYI(I)*HM1(I)
1349 FZ3(I)=FZI(I)*HM1(I)
1350
1351 FX4(I)=FXI(I)*HM2(I)
1352 FY4(I)=FYI(I)*HM2(I)
1353 FZ4(I)=FZI(I)*HM2(I)
1354
1355 ENDDO
1356
1357 IF (NSPMD>1) THEN
1358
1359#include "mic_lockon.inc"
1360 DO I = 1,JLT
1361 IF(CS_LOC(I)>NRTS)THEN
1362 NI = CS_LOC(I)-NRTS
1363
1364 NSVFI(NIN)%P(NI) = -ABS(NSVFI(NIN)%P(NI))
1365 ENDIF
1366 ENDDO
1367
1368#include "mic_lockoff.inc"
1369 ENDIF
1370
1371 DO I=1,JLT
1372 STIF(I) = TWO*STIF(I)
1373 ENDDO
1374
1375
1376.OR..OR. IF(KDTINT==1IDTMINS==2IDTMINS_INT/=0)THEN
1377 IF( (VISC/=ZERO)
1378.AND..OR. . (IVIS2==0IVIS2==1))THEN
1379 DO I=1,JLT
1380 CX= C(I)*C(I)
1381
1382 IF(MS1(I)==ZERO)THEN
1383 K1(I) =ZERO
1384 C1(I) =ZERO
1385 ELSE
1386 K1(I)=KT(I)*ABS(HS1(I))
1387 C1(I)=C(I)*ABS(HS1(I))
1388 CX =FOUR*C1(I)*C1(I)
1389 CY =EIGHT*MS1(I)*K1(I)
1390 AUX = SQRT(CX+CY)+TWO*C1(I)
1391 ST1(I)= K1(I)*AUX*AUX/MAX(CY,EM30)
1392 CFI = CF(I)*ABS(HS1(I))
1393 AUX = TWO*CFI*CFI/MAX(MS1(I),EM20)
1394 IF(AUX>ST1(I))THEN
1395 K1(I) =ZERO
1396 C1(I) =CFI
1397 ENDIF
1398 ENDIF
1399
1400 IF(MS2(I)==ZERO)THEN
1401 K2(I) =ZERO
1402 C2(I) =ZERO
1403 ELSE
1404 K2(I)=KT(I)*ABS(HS2(I))
1405 C2(I)=C(I)*ABS(HS2(I))
1406 CX =FOUR*C2(I)*C2(I)
1407 CY =EIGHT*MS2(I)*K2(I)
1408 AUX = SQRT(CX+CY)+TWO*C2(I)
1409 ST2(I)= K2(I)*AUX*AUX/MAX(CY,EM30)
1410 CFI = CF(I)*ABS(HS2(I))
1411 AUX = TWO*CFI*CFI/MAX(MS2(I),EM20)
1412 IF(AUX>ST2(I))THEN
1413 K2(I) =ZERO
1414 C2(I) =CFI
1415 ENDIF
1416 ENDIF
1417
1418 IF(MM1(I)==ZERO)THEN
1419 K3(I) =ZERO
1420 C3(I) =ZERO
1421 ELSE
1422 K3(I)=KT(I)*ABS(HM1(I))
1423 C3(I)=C(I)*ABS(HM1(I))
1424 CX =FOUR*C3(I)*C3(I)
1425 CY =EIGHT*MM1(I)*K3(I)
1426 AUX = SQRT(CX+CY)+TWO*C3(I)
1427 ST3(I)= K3(I)*AUX*AUX/MAX(CY,EM30)
1428 CFI = CF(I)*ABS(HM1(I))
1429 AUX = TWO*CFI*CFI/MAX(MM1(I),EM20)
1430 IF(AUX>ST3(I))THEN
1431 K3(I) =ZERO
1432 C3(I) =CFI
1433 ENDIF
1434 ENDIF
1435
1436 IF(MM2(I)==ZERO)THEN
1437 K4(I) =ZERO
1438 C4(I) =ZERO
1439 ELSE
1440 K4(I)=KT(I)*ABS(HM2(I))
1441 C4(I)=C(I)*ABS(HM2(I))
1442 CX =FOUR*C4(I)*C4(I)
1443 CY =EIGHT*MM2(I)*K4(I)
1444 AUX = SQRT(CX+CY)+TWO*C4(I)
1445 ST4(I)= K4(I)*AUX*AUX/MAX(CY,EM30)
1446 CFI = CF(I)*ABS(HM2(I))
1447 AUX = TWO*CFI*CFI/MAX(MM2(I),EM20)
1448 IF(AUX>ST4(I))THEN
1449 K4(I) =ZERO
1450 C4(I) =CFI
1451 ENDIF
1452 ENDIF
1453 ENDDO
1454 ELSE
1455 DO I=1,JLT
1456 K1(I) =STIF(I)*ABS(HS1(I))
1457 C1(I) =ZERO
1458 K2(I) =STIF(I)*ABS(HS2(I))
1459 C2(I) =ZERO
1460 K3(I) =STIF(I)*ABS(HM1(I))
1461 C3(I) =ZERO
1462 K4(I) =STIF(I)*ABS(HM2(I))
1463 C4(I) =ZERO
1464 ENDDO
1465 ENDIF
1466 ENDIF
1467
1468
1469.OR. IF(IDTM==1IDTM==2)THEN
1470 DTMI0 = EP20
1471 DO I=1,JLT
1472 DTMI(I) = EP20
1473 MAS2 = TWO * MASMIN(I)
1474.AND. IF(MAS2>ZEROSTIF(I)>ZERO)THEN
1475 DTMI(I) = MIN(DTMI(I),DTFAC1(10)*SQRT(MAS2/STIF(I)))
1476 ENDIF
1477 DTMI0 = MIN(DTMI0,DTMI(I))
1478 ENDDO
1479 IF(DTMI0<=DTM)THEN
1480 DO I=1,JLT
1481 IF(DTMI(I)<=DTM)THEN
1482 IF(IDTM==1)THEN
1483#include "lockon.inc"
1484 IF(CS_LOC(I)<=NRTS) THEN
1485 WRITE(IOUT,'(a,e12.4,a,i10,a,e12.4,a)')
1486 . ' **warning minimum time step ',DTMI(I),
1487 . ' in INTERFACE nb',NOINT,'(dtmin=',DTM,')'
1488 WRITE(IOUT,*)'secondary nodes nb',ITAB(N1(I)),
1489 . ITAB(N2(I))
1490 WRITE(IOUT,*)'main nodes nb
',ITAB(M1(I)),
1491 . ITAB(M2(I))
1492 ELSE
1493 WRITE(IOUT,'(a,e12.4,a,i10,a,e12.4,a)')
1494 . ' **warning minimum time step ',DTMI(I),
1495 . ' in INTERFACE nb',NOINT,'(dtmin=',DTM,')'
1496 WRITE(IOUT,*)'secondary nodes nb',ITAFI(NIN)%P(N1(I)),
1497 . ITAFI(NIN)%P(N2(I))
1498 WRITE(IOUT,*)'main nodes nb
',ITAB(M1(I)),
1499 . ITAB(M2(I))
1500 END IF
1501#include "lockoff.inc"
1502 TSTOP = TT
1503 ELSEIF(IDTM==2)THEN
1504#include "lockon.inc"
1505 IF(CS_LOC(I)<=NRTS) THEN
1506 WRITE(IOUT,'(a,e12.4,a,i10,a,e12.4,a)')
1507 . ' **warning minimum time step ',DTMI(I),
1508 . ' in INTERFACE nb',NOINT,'(dtmin=',DTM,')'
1509 WRITE(IOUT,*)'secondary nodes nb',ITAB(N1(I)),
1510 . ITAB(N2(I))
1511 WRITE(IOUT,*)'main nodes nb
',ITAB(M1(I)),
1512 . ITAB(M2(I))
1513 WRITE(IOUT,*)'delete secondary line from interface'
1514 STFS(CS_LOC(I)) = -ABS(STFS(CS_LOC(I)))
1515 ELSE
1516 NI = CS_LOC(I)-NRTS
1517 WRITE(IOUT,'(a,e12.4,a,i10,a,e12.4,a)')
1518 . ' **warning minimum time step ',DTMI(I),
1519 . ' in INTERFACE nb',NOINT,'(dtmin=',DTM,')'
1520 WRITE(IOUT,*)'secondary nodes nb',ITAFI(NIN)%P(N1(I)),
1521 . ITAFI(NIN)%P(N2(I))
1522 WRITE(IOUT,*)'main nodes nb
',ITAB(M1(I)),
1523 . ITAB(M2(I))
1524 WRITE(IOUT,*)'delete secondary line from interface'
1525 STIFI(NIN)%P(NI) = -ABS(STIFI(NIN)%P(NI))
1526 END IF
1527#include "lockoff.inc"
1528 NEWFRONT = -1
1529 ELSEIF(IDTM==5)THEN
1530#include "lockon.inc"
1531 IF(CS_LOC(I)<=NRTS) THEN
1532 WRITE(IOUT,'(a,e12.4,a,i10,a,e12.4,a)')
1533 . ' **warning minimum time step ',DTMI(I),
1534 . ' in INTERFACE nb',NOINT,'(dtmin=',DTM,')'
1535 WRITE(IOUT,*)'secondary nodes nb',ITAB(N1(I)),
1536 . ITAB(N2(I))
1537 WRITE(IOUT,*)'main nodes nb
',ITAB(M1(I)),
1538 . ITAB(M2(I))
1539 ELSE
1540 WRITE(IOUT,'(a,e12.4,a,i10,a,e12.4,a)')
1541 . ' **warning minimum time step ',DTMI(I),
1542 . ' in INTERFACE nb',NOINT,'(dtmin=',DTM,')'
1543 WRITE(iout,*)
'SECONDARY NODES NB',
itafi(nin)%P(n1(i)),
1544 .
itafi(nin)%P(n2(i))
1545 WRITE(iout,*)'MAIN NODES NB',itab(m1(i)),
1546 . itab(m2(i))
1547 END IF
1548#include "lockoff.inc"
1549 mstop = 2
1550 ENDIF
1551 ENDIF
1552 ENDDO
1553 ENDIF
1554 ENDIF
1555
1556 RETURN
integer function bitget(i, n)
type(real_pointer2), dimension(:), allocatable penfi
type(int_pointer), dimension(:), allocatable itafi
int main(int argc, char *argv[])