33 1 JLT ,LEDGE ,IRECT ,X ,V ,
34 2 CAND_S ,CAND_M ,STFE ,MS ,EX ,
35 3 EY ,EZ ,FX ,FY ,FZ ,
36 4 STIF ,XXS1 ,XXS2 ,XYS1 ,XYS2 ,
37 5 XZS1 ,XZS2 ,XXM1 ,XXM2 ,XYM1 ,
38 6 XYM2 ,XZM1 ,XZM2 ,VXS1 ,VXS2 ,
39 7 VYS1 ,VYS2 ,VZS1 ,VZS2 ,VXM1 ,
40 8 VXM2 ,VYM1 ,VYM2 ,VZM1 ,VZM2 ,
41 9 MS1 ,MS2 ,MM1 ,MM2 ,N1 ,
42 A N2 ,M1 ,M2 ,NEDGE ,NIN ,
43 C STFAC ,NODNX_SMS,NSMS ,GAPE ,GAPVE ,
44 D IEDGE ,ADMSR ,LBOUND ,EDG_BISECTOR ,
46 F IAM ,JAM ,IBM ,JBM ,IAS ,
47 G JAS ,IBS ,JBS ,ITAB , EDGE_ID,
48 H INTFRIC,IPARTFRIC_E,IPARTFRICSI,IPARTFRICMI,
49 I IGAP ,GAP_E_L,IGSTI ,KMIN ,KMAX ,
50 J ISTIF_MSDT,DTSTIF,STIFMSDT_EDG ,PARAMETERS)
60#include "implicit_f.inc"
71#include "i25edge_c.inc"
75 INTEGER LEDGE(,*), IRECT(4,*), CAND_M(*), CAND_S(*), ADMSR(4,*),
76 . LBOUND(*), JLT, NRTS, NIN, IEDGE, IGAP0,INTFRIC,IGAP,
77 . N1(MVSIZ), N2(MVSIZ),
78 . M1(MVSIZ), M2(MVSIZ),
79 . NODNX_SMS(*), NSMS(),
81 . IAM(MVSIZ),JAM(MVSIZ),IBM(MVSIZ),JBM(),
82 . IAS(MVSIZ),JAS(MVSIZ),IBS(MVSIZ),JBS(MVSIZ),
83 . IPARTFRIC_E(*),IPARTFRICSI(MVSIZ),IPARTFRICMI(MVSIZ)
84 INTEGER :: EDGE_ID(2,MVSIZ)
86 INTEGER ,
INTENT(IN) :: IGSTI
87 INTEGER ,
INTENT(IN) :: ISTIF_MSDT
90 . X(3,*), STFE(*), MS(*), V(3,*), GAPE(*),
91 . XXS1(*), XXS2(*), XYS1(*), XYS2(*),
92 . XZS1(*), XZS2(*), XXM1(*), XXM2(*),
93 . xym1(*), xym2(*), xzm1(*), xzm2(*),
94 . vxs1(*), vxs2(*), vys1(*), vys2(*),
95 . vzs1(*), vzs2(*), vxm1(*), vxm2(*),
96 . vym1(*), vym2(*), vzm1(*), vzm2(*),
97 . ms1(*), ms2(*), mm1(*), mm2(*),
98 . stif(*), stfac, sts, stm, gapve(*),
99 . ex(*), ey(*), ez(*), fx(*), fy(*), fz(*),
101 real*4 edg_bisector(3,4,*), vtx_bisector(3,2,*)
102 my_real ,
INTENT(IN) :: kmin, kmax
103 my_real ,
INTENT(IN) :: dtstif
104 my_real ,
INTENT(IN) :: stifmsdt_edg(nedge)
105 TYPE (PARAMETERS_) ,
INTENT(IN):: PARAMETERS
109 INTEGER I ,NN, J, JRM, K, KRM, I1, J1, I2, J2,
110 . EM, IE, ES, JE, SOL_EDGE, SH_EDGE,
111 . TYPEDGS(MVSIZ), IM(MVSIZ), IS()
112 INTEGER :: NOD1S(MVSIZ),NOD2S(MVSIZ)
113 INTEGER :: NOD1M(MVSIZ),NOD2M(MVSIZ)
117 . AAA, DX, DY, DZ, DD, NNI, NI2, INVCOS,DTS
119 . gape_m(mvsiz), gape_s(mvsiz), stif_msdt(mvsiz)
125 edge_id(1,i) = ledge(8,em)
127 iam(i) = abs(ledge(1,em))
135 nod1m(i) = ledge(11,em)
136 nod2m(i) = ledge(12,em)
172 IF(cand_s(i)<=nedge)
THEN
175 edge_id(2,i) = ledge(8,es)
176 ias(i)=abs( ledge(1,es) )
182 nod1s(i) = ledge(11,es)
183 nod2s(i) = ledge(12,es)
202 stif(i)=sts*stm /
max(em20,sts+stm)
220 typedgs(i)=ledge(7,es)
231 nn = cand_s(i) - nedge
241 edge_id(2,i) =
ledge_fie(nin)%P(e_global_id,nn)
243 ias(i)=abs(
ledge_fie(nin)%P(e_left_seg ,nn) )
249 stif(i)=sts*stm /
max(em20,sts+stm)
260 xxs1(i) =
xfie(nin)%P(1,n1(i))
261 xys1(i) =
xfie(nin)%P(2,n1(i))
262 xzs1(i) =
xfie(nin)%P(3,n1(i))
263 xxs2(i) =
xfie(nin)%P(1,n2(i))
264 xys2(i) =
xfie(nin)%P(2,n2(i))
265 xzs2(i) =
xfie(nin)%P(3,n2(i))
266 vxs1(i) =
vfie(nin)%P(1,n1(i))
267 vys1(i) =
vfie(nin)%P(2,n1(i))
268 vzs1(i) =
vfie(nin)%P(3,n1(i))
269 vxs2(i) =
vfie(nin)%P(1,n2(i))
270 vys2(i) =
vfie(nin)%P(2,n2(i))
271 vzs2(i) =
vfie(nin)%P(3,n2(i))
272 ms1(i) =
msfie(nin)%P(n1(i))
273 ms2(i) =
msfie(nin)%P(n2(i))
283 IF(istif_msdt > 0)
THEN
284 IF(dtstif > zero)
THEN
287 dts = parameters%DT_STIFINT
291 IF(cand_s(i)<=nedge)
THEN
293 stif_msdt(i) = stifmsdt_edg(es)
295 nn = cand_s(i) - nedge
298 stif_msdt(i) = stifmsdt_edg(em)*stif_msdt(i)/(stifmsdt_edg(em)+stif_msdt(i))
300 stif_msdt(i) = stif_msdt(i)/(dts*dts)
301 stif(i)=
max(stif(i),stif_msdt(i))
306 stif(i)=
max(kmin,
min(stif(i),kmax))
310 sh_edge =iedge-10*sol_edge
324 ex(i) = edg_bisector(1,jam(i),iam(i))
325 ey(i) = edg_bisector(2,jam(i),iam(i))
326 ez(i) = edg_bisector(3,jam(i),iam(i))
328 IF(iabs(typedgs(i))/=1)
THEN
329 IF(cand_s(i)<=nedge)
THEN
330 fx(i) = edg_bisector(1,jas(i
331 fy(i) = edg_bisector(2,jas(i),ias(i))
332 fz(i) = edg_bisector(3,jas(i),ias(i))
343 gape_m(i)=gape(cand_m(i))
344 IF(cand_s(i)<=nedge)
THEN
345 gape_s(i)=gape(cand_s(i))
347 gape_s(i)=
gapfie(nin)%P(cand_s(i) - nedge)
349 debug_e2e(edge_id(1,i) == d_em .AND. edge_id(2,i) == d_es,gape_s(i))
350 gapve(i)=gape_m(i)+gape_s(i)
354 gape_m(i)=
min(gape_m(i),gap_e_l(cand_m(i)))
355 IF(cand_s(i)<=nedge)
THEN
356 gape_s(i)=
min(gape_s(i),gap_e_l(cand_s(i)))
357 gapve(i)=
min(gap_e_l(cand_m(i))+gap_e_l(cand_s(i)),gapve(i))
359 gape_s(i)=
min(gape_s(i),
gape_l_fie(nin)%P(cand_s(i) - nedge))
360 gapve(i)=
min(gap_e_l(cand_m(i))+
gape_l_fie(nin)%P(cand_s(i) - nedge),gapve(i))
375 ex(i) = edg_bisector(1,je,ie)
376 ey(i) = edg_bisector(2,je,ie)
377 ez(i) = edg_bisector(3,je,ie)
380 dx = vtx_bisector(1,1,i1)+vtx_bisector(1,2,i1)
381 dy = vtx_bisector(2,1,i1)+vtx_bisector(2,2,i1)
382 dz = vtx_bisector(3,1,i1)+vtx_bisector(3,2,i1)
384 nni = ex(i)*dx + ey(i)*dy + ez(i)*dz
385 ni2 = dx*dx + dy*dy + dz*dz
387 debug_e2e( edge_id(1,i) == d_em.AND. edge_id(2,i) == d_es ,ex(i))
388 debug_e2e( edge_id(1,i) == d_em.AND. edge_id(2,i) == d_es ,ey(i))
389 debug_e2e( edge_id(1,i) == d_em.AND. edge_id(2,i) == d_es ,ez(i))
390 debug_e2e( edge_id(1,i) == d_em.AND. edge_id(2,i) == d_es ,dx)
391 debug_e2e( edge_id(1,i) == d_em.AND. edge_id(2,i) == d_es ,dy)
392 debug_e2e( edge_id(1,i) == d_em.AND. edge_id(2,i) == d_es ,dz)
401 IF(two*nni*nni < ni2)
THEN
403 aaa = sqrt(
max(zero,ni2-nni*nni)) - nni
408 dd=one/
max(em20,sqrt(dx*dx+dy*dy+dz*dz))
412 invcos = one /
max(em20,ex(i)*dx + ey(i)*dy + ez(i)*dz)
417 xxm1(i) = xxm1(i)-gape_m(i)*dx
418 xym1(i) = xym1(i)-gape_m(i)*dy
419 xzm1(i) = xzm1(i)-gape_m(i)*dz
422 dx = vtx_bisector(1,1,i2)+vtx_bisector(1,2,i2)
423 dy = vtx_bisector(2,1,i2)+vtx_bisector(2,2,i2)
424 dz = vtx_bisector(3,1,i2)+vtx_bisector(3,2,i2)
426 nni = ex(i)*dx + ey(i)*dy + ez(i)*dz
427 ni2 = dx*dx + dy*dy + dz*dz
436 IF(two*nni*nni < ni2)
THEN
438 aaa = sqrt(
max(zero,ni2-nni*nni)) - nni
447 invcos = one /
max(em20,ex(i)*dx + ey(i)*dy + ez(i)*dz)
452 xxm2(i) = xxm2(i)-gape_m(i)*dx
453 xym2(i) = xym2(i)-gape_m(i)*dy
454 xzm2(i) = xzm2(i)-gape_m(i)*dz
462 debug_e2e(edge_id(1,i) == d_em .AND. edge_id(2,i) == d_es,ibs(i))
466 IF(cand_s(i)<=nedge)
THEN
473 fx(i) = edg_bisector(1,je,ie)
474 fy(i) = edg_bisector(2,je,ie)
475 fz(i) = edg_bisector(3,je,ie)
478 dx = vtx_bisector(1,1,i1)+vtx_bisector(1,2,i1)
479 dy = vtx_bisector(2,1,i1)+vtx_bisector(2,2,i1)
480 dz = vtx_bisector(3,1,i1)+vtx_bisector(3,2,i1)
481 assert(fx(i) == fx(i))
482 assert(fy(i) == fy(i))
483 assert(fz(i) == fz(i))
489 assert(fx(i) == fx(i))
490 assert(fy(i) == fy(i))
491 assert(fz(i) == fz(i))
501 nni = fx(i)*dx + fy(i)*dy + fz(i)*dz
511 IF(two*nni*nni < ni2)
THEN
513 aaa = sqrt(
max(zero,ni2-nni*nni)) - nni
518 dd=one/
max(em20,sqrt(dx*dx+dy*dy+dz*dz))
522 invcos = one /
max(em20,fx(i)*dx + fy(i)*dy + fz(i)*dz)
527 xxs1(i) = xxs1(i)-gape_s(i)*dx
528 xys1(i) = xys1(i)-gape_s(i)*dy
529 xzs1(i) = xzs1(i)-gape_s(i)*dz
531 IF(cand_s(i)<=nedge)
THEN
533 dx = vtx_bisector(1,1,i2)+vtx_bisector(1,2,i2)
534 dy = vtx_bisector(2,1,i2)+vtx_bisector(2,2,i2)
535 dz = vtx_bisector(3,1,i2)+vtx_bisector(3,2,i2)
548 nni = fx(i)*dx + fy(i)*dy + fz(i)*dz
549 ni2 = dx*dx + dy*dy + dz*dz
558 IF(two*nni*nni < ni2)
THEN
560 aaa = sqrt(
max(zero,ni2-nni*nni)) - nni
565 dd=one/
max(em20,sqrt(dx*dx+dy*dy+dz*dz))
569 invcos = one /
max(em20,fx(i)*dx + fy(i)*dy + fz(i)*dz)
574 xxs2(i) = xxs2(i)-gape_s(i)*dx
575 xys2(i) = xys2(i)-gape_s(i)*dy
576 xzs2(i) = xzs2(i)-gape_s(i)*dz
583 IF(cand_s(i)<=nedge)
THEN
584 nsms(i)=nodnx_sms(n1(i))+nodnx_sms(n2(i))+
585 . nodnx_sms(m1(i))+nodnx_sms(m2(i))
588 . nodnx_sms(m1(i))+nodnx_sms(m2(i))
591 IF(idtmins_int/=0)
THEN
593 IF(nsms(i)==0)nsms(i)=-1
596 ELSEIF(idtmins_int/=0)
THEN
606 IF(cand_s(i)<=nedge)
THEN
607 ipartfricsi(i) = ipartfric_e(cand_s(i))
609 nn = cand_s(i) - nedge
614 ipartfricmi(i) = ipartfric_e(cand_m(i))
subroutine i25cor3e(jlt, ledge, irect, x, v, cand_s, cand_m, stfe, ms, ex, ey, ez, fx, fy, fz, stif, xxs1, xxs2, xys1, xys2, xzs1, xzs2, xxm1, xxm2, xym1, xym2, xzm1, xzm2, vxs1, vxs2, vys1, vys2, vzs1, vzs2, vxm1, vxm2, vym1, vym2, vzm1, vzm2, ms1, ms2, mm1, mm2, n1, n2, m1, m2, nedge, nin, stfac, nodnx_sms, nsms, gape, gapve, iedge, admsr, lbound, edg_bisector, vtx_bisector, igap0, iam, jam, ibm, jbm, ias, jas, ibs, jbs, itab, edge_id, intfric, ipartfric_e, ipartfricsi, ipartfricmi, igap, gap_e_l, igsti, kmin, kmax, istif_msdt, dtstif, stifmsdt_edg, parameters)