32 SUBROUTINE i8lagm(X ,V ,LLL ,JLL ,SLL ,
33 2 XLL ,CANDN ,CANDE ,I_STOK ,IXS ,
34 3 IADLL ,EMINX ,NSV ,NELEM ,
35 4 N_MUL_MX,ITASK ,A ,ITIED ,
36 5 NINT ,NKMAX ,COMNTAG)
37 use element_mod ,
only : nixs
41#include "implicit_f.inc"
55 INTEGER I_STOK,N_MUL_MX,ITASK,ITIED,NINT,NKMAX ,
56 . LLL(*),JLL(*),SLL(*),CANDN(*),CANDE(*),COMNTAG(*),
57 . IXS(NIXS,*),IADLL(*),NSV(*) ,NELEM(*)
60 . x(3,*),v(3,*),xll(*),
65 INTEGER I, K, IE, IS, IC, III(MVSIZ, 9), LLT, NFT, LE, FIRST, LAST
67 . XX(MVSIZ,9),YY(MVSIZ,9),ZZ(MVSIZ,9),
124 first = 1 + i_stok * itask / nthread
125 last = i_stok*(itask+1) / nthread
134 IF(ie.ge .1.AND.ie.le .numels8)
THEN
137 dist =
max(eminx(1,le)-x(1,is)-dt2*(v(1,is)+dt12*a(1,is)),
138 . x(1,is)+dt2*(v(1,is)+dt12*a(1,is))-eminx(4,le),dist)
139 dist =
max(eminx(2,le)-x(2,is)-dt2*(v(2,is)+dt12*a(2,is)),
140 . x(2,is)+dt2*(v(2,is)+dt12*a(2,is))-eminx(5,le),dist)
141 dist =
max(eminx(3,le)-x(3,is)-dt2*(v(3,is)+dt12*a(3,is)),
142 . x(3,is)+dt2*(v(3,is)+dt12*a(3,is))-eminx(6,le),dist)
146 IF(dist.le .zero)
THEN
156 iii(llt,k)=ixs(k+1,ie)
170 1 llt ,lll ,jll ,sll ,xll ,v ,
171 2 xx ,yy ,zz ,iii ,iadll ,
172 3 n_mul_mx ,a ,x ,itied ,nint ,nkmax ,
186 IF(llt/=0)
CALL i8lll(
187 1 llt ,lll ,jll ,sll ,xll ,v ,
188 2 xx ,yy ,zz ,iii ,iadll ,
189 3 n_mul_mx ,a ,x ,itied ,nint ,nkmax ,
206 SUBROUTINE i8lll(LLT ,LLL ,JLL ,SLL ,XLL ,V ,
207 2 XX ,YY ,ZZ ,III ,IADLL ,
208 3 N_MUL_MX,A ,X ,ITIED,NINT ,NKMAX ,
217#include "implicit_f.inc"
218#include "comlock.inc"
222#include "mvsiz_p.inc"
226#include "com08_c.inc"
227 COMMON /lagglob/n_mult
232 INTEGER LLT,N_MUL_MX,ITIED,NINT ,NKMAX
233 INTEGER LLL(*),JLL(*),SLL(*),COMNTAG(*),
234 . iii(mvsiz,9),iadll(*)
237 . xll(*),v(3,*),a(3,*)
239 . xx(mvsiz,9),yy(mvsiz,9),zz(mvsiz,9),x(3,*)
243 INTEGER I, IK, NK, IAD, NN
247 . r(mvsiz),s(mvsiz),t(mvsiz),
248 . nx(mvsiz), ny(mvsiz), nz(mvsiz),
256 CALL i8rst(llt ,r ,s ,t ,ni ,
257 2 nx ,ny ,nz ,xx ,yy ,zz )
266 IF(r(i)>=-one.AND.s(i)>=-one.AND.t(i)>=-one.AND.
267 . r(i)<= one.AND.s(i)<= one.AND.t(i)<= one)
THEN
274 vx = vx - (v(1,iii(i,ik))+dt12*a(1,iii(i,ik)))*ni(i,ik)
275 vy = vy - (v(2,iii(i,ik))+dt12*a(2,iii(i,ik)))*ni(i,ik)
276 vz = vz - (v(3,iii(i,ik))+dt12*a(3,iii(i,ik)))*ni(i,ik)
282 vn = nx(i)*vx + ny(i)*vy + nz(i)*vz
286 IF(s(i)*vn<=zero)
THEN
292 aa = one/sqrt(nx(i)*nx(i)+ny(i)*ny(i)+nz(i)*nz(i))
298 IF(n_mult>n_mul_mx)
THEN
299#include "lockoff.inc"
300 CALL ancmsg(msgid=84,anmode=aninfo)
303 iadll(n_mult+1)=iadll(n_mult) + 27
304 IF(iadll(n_mult+1)-1>nkmax)
THEN
305#include "lockoff.inc"
306 CALL ancmsg(msgid=84,anmode=aninfo)
309 iad = iadll(n_mult) - 1
311 lll(iad+ik) = iii(i,ik)
314 xll(iad+ik) = nx(i)*ni(i,ik)
315 lll(iad+ik+9) = iii(i,ik)
318 xll(iad+ik+9) = ny(i)*ni(i,ik)
319 lll(iad+ik+18) = iii(i,ik)
322 xll(iad+ik+18) = nz(i)*ni(i,ik)
324 comntag(nn) = comntag(nn) + 1
329#include "lockoff.inc"
341 IF(r(i)>=-one.AND.s(i)>=-one.AND.t(i)>=-one.AND.
342 . r(i)<= one.AND.s(i)<= one.AND.t(i)<= one)
THEN
349 vx = vx - (v(1,iii(i,ik))+dt12*a(1,iii(i,ik)))*ni(i,ik)
350 vy = vy - (v(2,iii(i,ik))+dt12*a(2,iii(i,ik)))*ni(i,ik)
351 vz = vz - (v(3,iii(i,ik))+dt12*a(3,iii(i,ik)))*ni(i,ik)
357 vn = nx(i)*vx + ny(i)*vy + nz(i)*vz
367 IF(n_mult+3>n_mul_mx)
THEN
368#include "lockoff.inc"
369 CALL ancmsg(msgid=84,anmode=aninfo)
372 IF(iadll(n_mult+1)-1+9*3>nkmax)
THEN
373#include "lockoff.inc"
374 CALL ancmsg(msgid=84,anmode=aninfo)
379 iadll(n_mult+1)=iadll(n_mult) + 9
380 iad = iadll(n_mult) - 1
382 lll(iad+ik) = iii(i,ik)
385 xll(iad+ik) = ni(i,ik)
387 comntag(nn) = comntag(nn) + 1
392 iadll(n_mult+1)=iadll(n_mult) + 9
393 iad = iadll(n_mult) - 1
395 lll(iad+ik) = iii(i,ik)
398 xll(iad+ik) = ni(i,ik)
400 comntag(nn) = comntag(nn) + 1
405 iadll(n_mult+1)=iadll(n_mult) + 9
406 iad = iadll(n_mult) - 1
408 lll(iad+ik) = iii(i,ik)
411 xll(iad+ik) = ni(i,ik)
413 comntag(nn) = comntag(nn) + 1
416#include
"lockoff.inc"
428 IF(r(i)>=-one.AND.s(i)>=-one.AND.t(i)>=-one.AND.
429 . r(i)<=one.AND.s(i)<=one.AND.t(i)<=one)
THEN
436 IF(n_mult+3>n_mul_mx)
THEN
437#include "lockoff.inc"
438 CALL ancmsg(msgid=84,anmode=aninfo)
441 IF(iadll(n_mult+1)-1+9*3>nkmax)
THEN
442#include "lockoff.inc"
443 CALL ancmsg(msgid=84,anmode=aninfo)
447 iadll(n_mult+1)=iadll(n_mult) + 9
448 iad = iadll(n_mult) - 1
450 lll(iad+ik) = iii(i,ik)
453 xll(iad+ik) = ni(i,ik)
455 comntag(nn) = comntag(nn) + 1
460 iadll(n_mult+1)=iadll(n_mult) + 9
461 iad = iadll(n_mult) - 1
463 lll(iad+ik) = iii(i,ik)
466 xll(iad+ik) = ni(i,ik)
468 comntag(nn) = comntag(nn) + 1
473 iadll(n_mult+1)=iadll(n_mult) + 9
474 iad = iadll(n_mult) - 1
476 lll(iad+ik) = iii(i,ik)
479 xll(iad+ik) = ni(i,ik)
481 comntag(nn) = comntag(nn) + 1
485#include "lockoff.inc"
505 2 NX ,NY ,NZ ,XX ,YY ,ZZ )
509#include "implicit_f.inc"
513#include "mvsiz_p.inc"
520 . XX(MVSIZ,9),YY(MVSIZ,9),ZZ(MVSIZ,9)
522 . R(MVSIZ),S(MVSIZ),T(MVSIZ),NI(MVSIZ,9) ,
523 . NX(MVSIZ),NY(MVSIZ),NZ(MVSIZ)
527 INTEGER I, 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 ,
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)
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)
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)
762 ss(i) =
max(
min(ss(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) ,YY(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),
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,
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)
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)
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)