30 SUBROUTINE i8lagm(X ,V ,LLL ,JLL ,SLL ,
31 2 XLL ,CANDN ,CANDE ,I_STOK ,IXS ,
32 3 IADLL ,EMINX ,NSV ,NELEM ,
33 4 N_MUL_MX,ITASK ,A ,ITIED ,
34 5 NINT ,NKMAX ,COMNTAG)
38#include "implicit_f.inc"
52 INTEGER I_STOK,N_MUL_MX,ITASK,ITIED,NINT,NKMAX ,
53 . LLL(*),JLL(*),SLL(*),CANDN(*),CANDE(*),COMNTAG(*),
54 . IXS(,*),IADLL(*),NSV(*) ,NELEM(*)
57 . x(3,*),v(3,*),xll(*),
62 INTEGER I,J,K,IK,IE,,IC,NK,III(MVSIZ,9),LLT,NFT,LE,FIRST,LAST,
65 . XX(MVSIZ,9),YY(MVSIZ,9),ZZ(MVSIZ,9),
66 . aa,xmin,ymin,zmin,xmax,
ymax,zmax,dist
122 first = 1 + i_stok * itask / nthread
123 last = i_stok*(itask+1) / nthread
132 IF(ie.ge .1.AND.ie.le .numels8)
THEN
135 dist =
max(eminx(1,le)-x(1,is)-dt2*(v(1,is)+dt12*a(1,is)),
136 . x(1,is)+dt2*(v(1,is)+dt12*a(1,is))-eminx(4,le),dist)
137 dist =
max(eminx(2,le)-x(2,is)-dt2*(v(2,is)+dt12*a(2,is)),
138 . x(2,is)+dt2*(v(2,is)+dt12*a(2,is))-eminx(5,le),dist)
139 dist =
max(eminx(3,le)-x(3,is)-dt2*(v(3,is)+dt12*a(3,is)),
140 . x(3,is)+dt2*(v(3,is)+dt12*a(3,is))-eminx(6,le),dist)
144 IF(dist.le .zero)
THEN
154 iii(llt,k)=ixs(k+1,ie)
168 1 llt ,lll ,jll ,sll ,xll ,v ,
169 2 xx ,yy ,zz ,iii ,iadll ,
170 3 n_mul_mx ,a ,x ,itied ,nint ,nkmax ,
184 IF(llt/=0)
CALL i8lll(
185 1 llt ,lll ,jll ,sll ,xll ,v ,
186 2 xx ,yy ,zz ,iii ,iadll ,
187 3 n_mul_mx ,a ,x ,itied ,nint ,nkmax ,
204 SUBROUTINE i8lll(LLT ,LLL ,JLL ,SLL ,XLL ,V ,
205 2 XX ,YY ,ZZ ,III ,IADLL ,
206 3 N_MUL_MX,A ,X ,ITIED,NINT ,NKMAX ,
215#include "implicit_f.inc"
216#include "comlock.inc"
220#include "mvsiz_p.inc"
224#include "com08_c.inc"
225 COMMON /lagglob/n_mult
230 INTEGER LLT,N_MUL_MX,ITIED,NINT ,NKMAX
231 INTEGER LLL(*),JLL(*),SLL(*),COMNTAG(*),
232 . iii(mvsiz,9),iadll(*)
235 . xll(*),v(3,*),a(3,*)
237 . xx(mvsiz,9),yy(mvsiz,9),zz(mvsiz,9),x(3,*)
241 INTEGER I,J,IK,,I1,I2,I3,,IAD,NN
245 . r(mvsiz),s(mvsiz),t(mvsiz),
246 . nx(mvsiz), ny(mvsiz), nz(mvsiz),
254 CALL i8rst(llt ,r ,s ,t ,ni ,
255 2 nx ,ny ,nz ,xx ,yy ,zz )
264 IF(r(i)>=-one.AND.s(i)>=-one.AND.t(i)>=-one.AND.
265 . r(i)<= one.AND.s(i)<= one.AND.t(i)<= one)
THEN
272 vx = vx - (v(1,iii(i,ik))+dt12*a(1,iii(i,ik)))*ni(i,ik)
273 vy = vy - (v(2,iii(i,ik))+dt12*a(2,iii(i,ik)))*ni(i,ik)
274 vz = vz - (v(3,iii(i,ik))+dt12*a(3,iii(i,ik)))*ni(i,ik)
280 vn = nx(i)*vx + ny(i)*vy + nz(i)*vz
284 IF(s(i)*vn<=zero)
THEN
290 aa = one/sqrt(nx(i)*nx(i)+ny(i)*ny(i)+nz(i)*nz(i))
296 IF(n_mult>n_mul_mx)
THEN
297#include "lockoff.inc"
298 CALL ancmsg(msgid=84,anmode=aninfo)
301 iadll(n_mult+1)=iadll(n_mult) + 27
302 IF(iadll(n_mult+1)-1>nkmax)
THEN
303#include "lockoff.inc"
304 CALL ancmsg(msgid=84,anmode=aninfo)
307 iad = iadll(n_mult) - 1
309 lll(iad+ik) = iii(i,ik)
312 xll(iad+ik) = nx(i)*ni(i,ik)
313 lll(iad+ik+9) = iii(i,ik)
316 xll(iad+ik+9) = ny(i)*ni(i,ik)
317 lll(iad+ik+18) = iii(i,ik)
320 xll(iad+ik+18) = nz(i)*ni(i,ik)
322 comntag(nn) = comntag(nn) + 1
327#include "lockoff.inc"
339 IF(r(i)>=-one.AND.s(i)>=-one.AND.t(i)>=-one.AND.
340 . r(i)<= one.AND.s(i)<= one.AND.t(i)<= one)
THEN
347 vx = vx - (v(1,iii(i,ik))+dt12*a(1,iii(i,ik)))*ni(i,ik)
348 vy = vy - (v(2,iii(i,ik))+dt12*a(2,iii(i,ik)))*ni(i,ik)
349 vz = vz - (v(3,iii(i,ik))+dt12*a(3,iii(i,ik)))*ni(i,ik)
355 vn = nx(i)*vx + ny(i)*vy + nz(i)*vz
365 IF(n_mult+3>n_mul_mx)
THEN
366#include "lockoff.inc"
367 CALL ancmsg(msgid=84,anmode=aninfo)
370 IF(iadll(n_mult+1)-1+9*3>nkmax)
THEN
371#include "lockoff.inc"
372 CALL ancmsg(msgid=84,anmode=aninfo)
377 iadll(n_mult+1)=iadll(n_mult) + 9
378 iad = iadll(n_mult) - 1
380 lll(iad+ik) = iii(i,ik)
383 xll(iad+ik) = ni(i,ik)
385 comntag(nn) = comntag(nn) + 1
390 iadll(n_mult+1)=iadll(n_mult) + 9
391 iad = iadll(n_mult) - 1
393 lll(iad+ik) = iii(i,ik)
396 xll(iad+ik) = ni(i,ik)
398 comntag(nn) = comntag(nn) + 1
403 iadll(n_mult+1)=iadll(n_mult) + 9
404 iad = iadll(n_mult) - 1
406 lll(iad+ik) = iii(i,ik)
409 xll(iad+ik) = ni(i,ik)
411 comntag(nn) = comntag
414#include "lockoff.inc"
426 IF(r(i)>=-one.AND.s(i)>=-one.AND.t(i)>=-one.AND.
427 . r(i)<=one.AND.s(i)<=one.AND.t(i)<=one)
THEN
434 IF(n_mult+3>n_mul_mx)
THEN
435#include "lockoff.inc"
436 CALL ancmsg(msgid=84,anmode=aninfo)
439 IF(iadll(n_mult+1)-1+9*3>nkmax)
THEN
440#include "lockoff.inc"
441 CALL ancmsg(msgid=84,anmode=aninfo)
445 iadll(n_mult+1)=iadll(n_mult) + 9
446 iad = iadll(n_mult) - 1
448 lll(iad+ik) = iii(i,ik)
451 xll(iad+ik) = ni(i,ik)
453 comntag(nn) = comntag(nn) + 1
458 iadll(n_mult+1)=iadll(n_mult) + 9
459 iad = iadll(n_mult) - 1
461 lll(iad+ik) = iii(i,ik)
464 xll(iad+ik) = ni(i,ik)
466 comntag(nn) = comntag(nn) + 1
471 iadll(n_mult+1)=iadll(n_mult) + 9
472 iad = iadll(n_mult) - 1
474 lll(iad+ik) = iii(i,ik)
477 xll(iad+ik) = ni(i,ik)
479 comntag(nn) = comntag(nn) + 1
483#include "lockoff.inc"
503 2 NX ,NY ,NZ ,XX ,YY ,ZZ )
507#include "implicit_f.inc"
511#include "mvsiz_p.inc"
518 . XX(MVSIZ,9),(MVSIZ,9),ZZ(MVSIZ,9)
520 . R(MVSIZ),S(MVSIZ),T(MVSIZ),NI(MVSIZ,9) ,
521 . NX(MVSIZ),NY(MVSIZ),NZ(MVSIZ)
525 INTEGER I,J,IK,NK,ITER,NITERMAX,JTER,NJTERMAX,CONV
529 . drdx(mvsiz),drdy(mvsiz),drdz(mvsiz),
530 . dsdx(mvsiz),dsdy(mvsiz),dsdz(mvsiz),
531 . dtdx(mvsiz),dtdy(mvsiz),dtdz(mvsiz),
532 . dxdr(mvsiz),dydr(mvsiz),dzdr(mvsiz),
533 . dxdt(mvsiz),dydt(mvsiz),dzdt(mvsiz),
534 . rr(mvsiz),ss(mvsiz),tt(mvsiz)
584 CALL i8deri(llt,rr ,ss ,tt ,ni ,
585 2 drdx ,drdy ,drdz ,dsdx ,dsdy ,dsdz ,
586 3 dtdx ,dtdy ,dtdz ,dxdr ,dydr ,dzdr ,
587 4 dxdt ,dydt ,dzdt ,xx ,yy ,zz )
596 CALL i8rstn(llt,rr,ss ,tt ,ni ,conv ,
597 2 drdx ,drdy ,drdz ,dsdx ,dsdy ,dsdz ,
598 3 dtdx ,dtdy ,dtdz ,xx ,yy ,zz ,
607 CALL i8ni(llt,rr ,ss ,tt ,ni )
615 nx(i) = dydt(i)*dzdr(i) - dzdt(i)*dydr(i)
616 ny(i) = dzdt(i)*dxdr(i) - dxdt(i)*dzdr(i)
617 nz(i) = dxdt(i)*dydr(i) - dydt(i)*dxdr(i)
628 SUBROUTINE i8ni(LLT,RR ,SS ,TT ,NI )
632#include "implicit_f.inc"
636#include "mvsiz_p.inc"
642 . RR(MVSIZ),SS(MVSIZ),TT(MVSIZ),NI(MVSIZ,9)
648 . u_m_r,u_p_r,u_m_s,u_p_s,u_m_t,u_p_t,
649 . ums_umt,ums_upt,ups_umt,ups_upt,
650 . umr_ums,umr_ups,upr_ums,upr_ups,
651 . umt_umr,umt_upr,upt_umr,upt_upr,
671 ums_umt = u_m_s * u_m_t
672 ums_upt = u_m_s * u_p_t
673 ups_umt = u_p_s * u_m_t
674 ups_upt = u_p_s * u_p_t
676 ni(i,1) = u_m_r * ums_umt
677 ni(i,5) = u_m_r * ups_umt
678 ni(i,2) = u_m_r * ums_upt
679 ni(i,6) = u_m_r * ups_upt
680 ni(i,3) = u_p_r * ums_upt
681 ni(i,7) = u_p_r * ups_upt
682 ni(i,4) = u_p_r * ums_umt
683 ni(i,8) = u_p_r * ups_umt
696 SUBROUTINE i8rstn(LLT,RR ,SS ,TT ,NI ,CONV ,
697 2 DRDX ,DRDY ,DRDZ ,DSDX ,DSDY ,DSDZ ,
698 3 DTDX ,DTDY ,DTDZ ,XX ,YY ,ZZ ,
708#include "mvsiz_p.inc"
709#include "constant.inc"
715 . r(mvsiz),s(mvsiz),t(mvsiz),ni(mvsiz,9) ,
716 . rr(mvsiz),ss(mvsiz),tt(mvsiz),
717 . xx(mvsiz,9) ,yy(mvsiz,9) ,zz(mvsiz,9) ,
718 . drdx(mvsiz),drdy(mvsiz),drdz(mvsiz),
719 . dsdx(mvsiz),dsdy(mvsiz),dsdz(mvsiz),
720 . dtdx(mvsiz),dtdy(mvsiz),dtdz(mvsiz)
726 . dx ,dy,dz,dr ,ds,dt,err
733 + - ni(i, 1)*xx(i, 1) - ni(i, 2)*xx(i, 2) - ni(i, 3)*xx(i, 3)
734 + - ni(i, 4)*xx(i, 4) - ni(i, 5)*xx(i, 5) - ni(i, 6)*xx(i, 6)
735 + - ni(i, 7)*xx(i, 7) - ni(i, 8)*xx(i, 8)
737 + - ni(i, 1)*yy(i, 1) - ni(i, 2)*yy(i, 2) - ni(i, 3)*yy(i, 3)
738 + - ni(i, 4)*yy(i, 4) - ni(i, 5)*yy(i, 5) - ni(i, 6)*yy(i, 6)
739 + - ni(i, 7)*yy(i, 7) - ni(i, 8)*yy(i, 8)
741 + - ni(i, 1)*zz(i, 1) - ni(i, 2)*zz(i, 2) - ni(i, 3)*zz(i, 3)
742 + - ni(i, 4)*zz(i, 4) - ni(i, 5)*zz(i, 5) - ni(i, 6)*zz(i, 6)
743 + - ni(i, 7)*zz(i, 7) - ni(i, 8)*zz(i, 8)
745 dr = drdx(i)*dx + drdy(i)*dy + drdz(i)*dz
746 ds = dsdx(i)*dx + dsdy(i)*dy + dsdz(i)*dz
747 dt = dtdx(i)*dx + dtdy(i)*dy + dtdz(i)*dz
757 IF(r(i)>=-one.AND.s(i)>=-one.AND.t(i)>=-one.AND.
758 . r(i)<= one.AND.s(i)<= one.AND.t(i)<= one)
THEN
759 err =
max(err,abs(dr),abs(ds),abs(dt))
761 rr(i) =
max(
min(rr(i),one),-one)
763 tt(i) =
max(
min(tt(i),one),-one)
778 2 DRDX ,DRDY ,DRDZ ,DSDX ,DSDY ,DSDZ ,
779 3 DTDX ,DTDY ,DTDZ ,DXDR ,DYDR ,DZDR ,
780 4 DXDT ,DYDT ,DZDT ,XX ,YY ,ZZ )
784#include "implicit_f.inc"
788#include "mvsiz_p.inc"
795 . DXDR(MVSIZ), DYDR(MVSIZ), DZDR(MVSIZ),
796 . DXDT(MVSIZ), DYDT(MVSIZ), DZDT(MVSIZ),
797 . DRDX(MVSIZ), DSDX(MVSIZ), DTDX(MVSIZ),
798 . DRDY(MVSIZ), DSDY(MVSIZ), DTDY(MVSIZ),
799 . DRDZ(MVSIZ), DSDZ(MVSIZ), DTDZ(MVSIZ),
800 . XX(MVSIZ,9) ,(MVSIZ,9),ZZ(MVSIZ,9),
801 . NI(MVSIZ,9) ,RR(MVSIZ) ,SS(MVSIZ) ,TT(MVSIZ)
807 . dxds(mvsiz), dyds(mvsiz), dzds(mvsiz),
808 . dnidr(8),dnids(8),dnidt(8),
809 . d, aa, bb, det(mvsiz),r9 ,r13 ,s9 ,s10 ,s11 ,s12 ,t10 ,t14
811 . u_m_r,u_p_r,u_m_s,u_p_s,u_m_t,u_p_t,
812 . ums_umt,ums_upt,ups_umt,ups_upt,
813 . umr_ums,umr_ups,upr_ums,upr_ups,
814 . umt_umr,umt_upr,upt_umr,upt_upr,
892 ums_umt = u_m_s * u_m_t
893 ums_upt = u_m_s * u_p_t
894 ups_umt = u_p_s * u_m_t
895 ups_upt = u_p_s * u_p_t
897 ni(i,1) = u_m_r * ums_umt
898 ni(i,5) = u_m_r * ups_umt
899 ni(i,2) = u_m_r * ums_upt
900 ni(i,6) = u_m_r * ups_upt
901 ni(i,3) = u_p_r * ums_upt
902 ni(i,7) = u_p_r * ups_upt
903 ni(i,4) = u_p_r * ums_umt
904 ni(i,8) = u_p_r * ups_umt
907 dnidr(1) = -ums_umt * a
908 dnidr(2) = -ums_upt * a
911 dnidr(5) = -ups_umt * a
912 dnidr(6) = -ups_upt * a
916 dnids(1) = -u_m_t * u_m_r * a
917 dnids(2) = -u_p_t * u_m_r * a
918 dnids(3) = -u_p_t * u_p_r * a
919 dnids(4) = -u_m_t * u_p_r * a
925 dnidt(1) = -u_m_r * u_m_s * a
927 dnidt(3) = u_p_r * u_m_s * a
929 dnidt(5) = -u_m_r * u_p_s * a
931 dnidt(7) = u_p_r * u_p_s * a
939 dxdr(i) = dnidr(1)*xx(i,1) + dnidr(2)*xx(i,2) + dnidr(3)*xx(i,3)
940 + + dnidr(4)*xx(i,4) + dnidr(5)*xx(i,5) + dnidr(6)*xx(i,6)
941 + + dnidr(7)*xx(i,7) + dnidr(8)*xx(i,8)
943 dxds(i) = dnids(1)*xx(i,1) + dnids(2)*xx(i,2) + dnids(3)*xx(i,3)
944 + + dnids(4)*xx(i,4) + dnids(5)*xx(i,5) + dnids(6)*xx(i,6)
945 + + dnids(7)*xx(i,7) + dnids(8)*xx(i,8)
947 dxdt(i) = dnidt(1)*xx(i,1) + dnidt(2)*xx(i,2) + dnidt(3)*xx(i,3)
948 + + dnidt(4)*xx(i,4) + dnidt(5)*xx(i,5) + dnidt(6)*xx(i,6)
949 + + dnidt(7)*xx(i,7) + dnidt(8)*xx(i,8)
953 dydr(i) = dnidr(1)*yy(i,1) + dnidr(2)*yy(i,2) + dnidr(3)*yy(i,3)
954 + + dnidr(4)*yy(i,4) + dnidr(5)*yy(i,5) + dnidr(6)*yy(i,6)
955 + + dnidr(7)*yy(i,7) + dnidr(8)*yy(i,8)
957 dyds(i) = dnids(1)*yy(i,1) + dnids(2)*yy(i,2) + dnids(3)*yy(i,3)
958 + + dnids(4)*yy(i,4) + dnids(5)*yy(i,5) + dnids(6)*yy(i,6)
959 + + dnids(7)*yy(i,7) + dnids(8)*yy(i,8)
961 dydt(i) = dnidt(1)*yy(i,1) + dnidt(2)*yy(i,2) + dnidt(3)*yy(i,3)
962 + + dnidt(4)*yy(i,4) + dnidt(5)*yy(i,5) + dnidt(6)*yy(i,6)
963 + + dnidt(7)*yy(i,7) + dnidt(8)*yy(i,8)
967 dzdr(i) = dnidr(1)*zz(i,1) + dnidr(2)*zz(i,2) + dnidr(3)*zz(i,3)
968 + + dnidr(4)*zz(i,4) + dnidr(5)*zz(i,5) + dnidr(6)*zz(i,6)
969 + + dnidr(7)*zz(i,7) + dnidr(8)*zz(i,8)
971 dzds(i) = dnids(1)*zz(i,1) + dnids(2)*zz(i,2) + dnids(3)*zz(i,3)
972 + + dnids(4)*zz(i,4) + dnids(5)*zz(i,5) + dnids(6)*zz(i,6)
973 + + dnids(7)*zz(i,7) + dnids(8)*zz(i,8)
975 dzdt(i) = dnidt(1)*zz(i,1) + dnidt(2)*zz(i,2) + dnidt(3)*zz(i,3)
976 + + dnidt(4)*zz(i,4) + dnidt(5)*zz(i,5) + dnidt(6)*zz(i,6)
977 + + dnidt(7)*zz(i,7) + dnidt(8)*zz(i,8)
982 drdx(i)=dyds(i)*dzdt(i)-dzds(i)*dydt(i)
983 drdy(i)=dzds(i)*dxdt(i)-dxds(i)*dzdt(i)
984 drdz(i)=dxds(i)*dydt(i)-dyds(i)*dxdt(i)
986 dsdz(i)=dxdt(i)*dydr(i)-dydt(i)*dxdr(i)
987 dsdy(i)=dzdt(i)*dxdr(i)-dxdt(i)*dzdr(i)
988 dsdx(i)=dydt(i)*dzdr(i)-dzdt(i)*dydr(i)
990 dtdx(i)=dydr(i)*dzds(i)-dzdr(i)*dyds(i)
991 dtdy(i)=dzdr(i)*dxds(i)-dxdr(i)*dzds(i)
992 dtdz(i)=dxdr(i)*dyds(i)-dydr(i)*dxds(i)
994 det(i) = dxdr(i) * drdx(i)
995 . + dydr(i) * drdy(i)
996 . + dzdr(i) * drdz(i)
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)