33 1 ITASK ,IPARG ,NGROUNC ,IGROUNC ,KXSP ,
34 2 ISPCOND ,ISPSYM ,WASPACT ,SPH2SOL ,WA ,
35 3 WASIGSM ,WAR ,STAB ,IXSP ,NOD2SP ,
36 4 SPBUF ,X ,IPART ,IPARTSP ,XSPSYM )
44#include "implicit_f.inc"
55 INTEGER ITASK, IPARG(NPARG,*), NGROUNC, IGROUNC(*), KXSP(NISP,*),
56 . ISPCOND(NISPCOND,*), ISPSYM(NSPCOND,*), WASPACT(*),
57 . SPH2SOL(*), IXSP(KVOISPH,*), NOD2SP(*), IPART(LIPART1,*),
60 . wa(kwasph,*), wasigsm(6,*), war(10,*), stab(7,*),
61 . spbuf(nspbuf,*), x(3,*), xspsym(3,*)
69 INTEGER I, J, N, NS, INOD, JNOD, , NVOIS, NN,
70 . NSPACTF, NSPACTL, IPRT, IGEO, ID, IS,
71 . NVOISS, JS, SM, NC, IACT
73 . xi, yi, zi, xj, yj, zj, di, dmin, dd, wght,
74 . xs, ys, zs, zstab,nul,uno
78 nspactf=1+itask*nsphact/nthread
79 nspactl=(itask+1)*nsphact/nthread
90 zstab =get_u_geo(7,igeo)
95 IF(zstab/=zero.AND.nvois/=0)
THEN
103 IF(kxsp(2,n)>0.OR.kxsp(2,m)>0)
THEN
111 IF(kxsp(2,n)>0.OR.xsphr(13,nn)>0)
THEN
120 IF (spbuf(15,n)>em30)
THEN
125 CALL weight0(nul,nul,nul,dd,nul,nul,uno,wght)
126 stab(7,n)=zstab/
max(em30,wght*wght*wght*wght)
146 1 ITASK ,IPARG ,NGROUNC ,IGROUNC ,KXSP ,
147 2 ISPCOND ,ISPSYM ,WASPACT ,SPH2SOL ,WA ,
148 3 WASIGSM ,WAR ,STAB ,IXSP ,NOD2SP ,
157#include "implicit_f.inc"
161#include "mvsiz_p.inc"
165#include "vect01_c.inc"
167#include "param_c.inc"
172 INTEGER ITASK, IPARG(NPARG,*), NGROUNC, IGROUNC(*), KXSP(NISP,*),
173 . ISPCOND(NISPCOND,*), ISPSYM(NSPCOND,*), WASPACT(*),
174 . SPH2SOL(*), IXSP(KVOISPH,*), (*)
177 . WA(KWASPH,*), WASIGSM(6,*), WAR(10,*), STAB(7,*),
178 . SPBUF(NSPBUF,*), X(3,*)
182 INTEGER , J, N, NINDX, INDEX(MVSIZ), KS, JS, SM, , KR, NR,
183 . IG, NELEM, NG, OFFSET, NEL,
184 . nc, ic, is, islide, nsphrft, nsphrlt, l,
SIZE,
185 . ns, inod, jnod, m, nvois,
188 . sigprv(3,mvsiz), dirprv(3,3,mvsiz),
189 . r1, r2, r3, xi, yi, zi, xj, yj, zj, di, dmin, dd, wght,
190 . xs, ys, zs, sig(6,mvsiz)
200 IF(iparg(8,ng)==1)
GOTO 350
202 DO nelem = 1,iparg(2,ng),nvsiz
205 nft =iparg(3,ng) + offset
208 isph2sol=iparg(69,ng)
211 llt=
min(nvsiz,nel-nelem+1)
217 IF(stab(7,n)/=zero)
THEN
229 CALL sph_valpvec(nindx,index,
SIZE,wa(1,nft+1),sigprv,dirprv)
234 r1=-
max(zero,sigprv(1,i))
235 r2=-
max(zero,sigprv(2,i))
236 r3=-
max(zero,sigprv(3,i))
237 stab(1,n) = dirprv(1,1,i)*dirprv(1,1,i)*r1
238 & + dirprv(1,2,i)*dirprv(1,2,i)*r2
239 & + dirprv(1,3,i)*dirprv(1,3,i)*r3
240 stab(2,n) = dirprv(2,2,i)*dirprv(2,2,i)*r2
241 & + dirprv(2,3,i)*dirprv(2,3,i)*r3
242 & + dirprv(2,1,i)*dirprv(2,1,i)*r1
243 stab(3,n) = dirprv(3,3,i)*dirprv(3,3,i)*r3
244 & + dirprv(3,1,i)*dirprv(3,1,i)*r1
245 & + dirprv(3,2,i)*dirprv(3,2,i)*r2
246 stab(4,n) = dirprv(1,1,i)*dirprv(2,1,i)*r1
247 & + dirprv(1,2,i)*dirprv(2,2,i)*r2
248 & + dirprv(1,3,i)*dirprv(2,3,i)*r3
249 stab(5,n) = dirprv(2,2,i)*dirprv(3,2,i)*r2
250 & + dirprv(2,3,i)*dirprv(3,3,i)*r3
251 & + dirprv(2,1,i)*dirprv(3,1,i)*r1
252 stab(6,n) = dirprv(3,3,i)*dirprv(1,3,i)*r3
253 & + dirprv(3,1,i)*dirprv(1,1,i)*r1
254 & + dirprv(3,2,i)*dirprv(1,2,i)*r2
270 nsphrft=1+itask*
nsphr/nthread
271 nsphrlt=(itask+1)*
nsphr/nthread
272 DO n=nsphrft,nsphrlt,mvsiz
274 DO l=1,
min(nsphrlt-n+1,mvsiz)
276 IF(stab(7,numsph+i)/=zero)
THEN
288 CALL sph_valpvec(nindx,index,
SIZE,war(1,n),sigprv,dirprv)
294 r1=-
max(zero,sigprv(1,i))
295 r2=-
max(zero,sigprv(2,i))
296 r3=-
max(zero,sigprv(3,i))
297 stab(1,kr) = dirprv(1,1,i)*dirprv(1,1,i)*r1
298 & + dirprv(1,2,i)*dirprv(1,2,i)*r2
299 & + dirprv(1,3,i)*dirprv(1,3,i)*r3
300 stab(2,kr) = dirprv(2,2,i)*dirprv(2,2,i)*r2
301 & + dirprv(2,3,i)*dirprv(2,3,i)*r3
302 & + dirprv(2,1,i)*dirprv(2,1,i)*r1
303 stab(3,kr) = dirprv(3,3,i)*dirprv(3,3,i)*r3
304 & + dirprv(3,1,i)*dirprv(3,1,i)*r1
305 & + dirprv(3,2,i)*dirprv(3,2,i)*r2
306 stab(4,kr) = dirprv(1,1,i)*dirprv(2,1,i)*r1
307 & + dirprv(1,2,i)*dirprv(2,2,i)*r2
308 & + dirprv(1,3,i)*dirprv(2,3,i)*r3
309 stab(5,kr) = dirprv(2,2,i)*dirprv(3,2,i)*r2
310 & + dirprv(2,3,i)*dirprv(3,3,i)*r3
311 & + dirprv(2,1,i)*dirprv(3,1,i)*r1
312 stab(6,kr) = dirprv(3,3,i)*dirprv(1,3,i)*r3
313 & + dirprv(3,1,i)*dirprv(1,1,i)*r1
314 & + dirprv(3,2,i)*dirprv(1,2,i)*r2
331 nspactf=1+itask*nsphact/nthread
332 nspactl=(itask+1)*nsphact/nthread
338 DO ss=nspactf,nspactl
342 IF(js>0.AND.stab(7,sm)/=zero)
THEN
344 stab(1,ks)=stab(1,sm)
345 stab(2,ks)=stab(2,sm)
346 stab(3,ks)=stab(3,sm)
347 stab(4,ks)=stab(4,sm)
348 stab(5,ks)=stab(5,sm)
349 stab(6,ks)=stab(6,sm)
353 DO is=nspactf,nspactl,mvsiz
355 DO l=1,
min(nspactl-is+1,mvsiz)
360 IF(js>0.AND.stab(7,sm)/=zero)
THEN
363 sig(1,nindx)=wasigsm(1,js)
364 sig(2,nindx)=wasigsm(2,js)
365 sig(3,nindx)=wasigsm(3,js)
366 sig(4,nindx)=wasigsm(4,js)
367 sig(5,nindx)=wasigsm(5,js)
368 sig(6,nindx)=wasigsm(6,js)
372 CALL sph_valpvec(nindx,index,
SIZE,sig,sigprv,dirprv)
374 DO l=1,
min(nspactl-is+1,mvsiz)
379 IF(js>0.AND.stab(7,sm)/=zero)
THEN
381 r1=-
max(zero,sigprv(1,nindx))
382 r2=-
max(zero,sigprv(2,nindx))
383 r3=-
max(zero,sigprv(3,nindx))
384 stab(1,ks) = dirprv(1,1,nindx)*dirprv(1,1,nindx)*r1
385 & + dirprv(1,2,nindx)*dirprv(1,2,nindx)*r2
386 & + dirprv(1,3,nindx)*dirprv(1,3,nindx)*r3
387 stab(2,ks) = dirprv(2,2,nindx)*dirprv(2,2,nindx)*r2
388 & + dirprv(2,3,nindx)*dirprv(2,3,nindx)*r3
389 & + dirprv(2,1,nindx)*dirprv(2,1,nindx)*r1
390 stab(3,ks) = dirprv(3,3,nindx)*dirprv(3,3,nindx)*r3
391 & + dirprv(3,1,nindx)*dirprv(3,1,nindx)*r1
392 & + dirprv(3,2,nindx)*dirprv(3,2,nindx)*r2
393 stab(4,ks) = dirprv(1,1,nindx)*dirprv(2,1,nindx)*r1
394 & + dirprv(1,2,nindx)*dirprv(2,2,nindx)*r2
395 & + dirprv(1,3,nindx)*dirprv(2,3,nindx)*r3
396 stab(5,ks) = dirprv(2,2,nindx)*dirprv(3,2,nindx)*r2
397 & + dirprv(2,3,nindx)*dirprv(3,3,nindx)*r3
398 & + dirprv(2,1,nindx)*dirprv(3,1,nindx)*r1
399 stab(6,ks) = dirprv(3,3,nindx)*dirprv(1,3,nindx)*r3
400 & + dirprv(3,1,nindx)*dirprv(1,1,nindx)*r1
401 & + dirprv(3,2,nindx)*dirprv(1,2,nindx)*r2
422 DO ss=nsphrft,nsphrlt
425 IF(js>0.AND.stab(7,numsph+ss)/=zero)
THEN
427 stab(1,ks)=stab(1,numsph+ss)
428 stab(2,ks)=stab(2,numsph+ss)
429 stab(3,ks)=stab(3,numsph+ss)
430 stab(4,ks)=stab(4,numsph+ss)
431 stab(5,ks)=stab(5,numsph+ss)
432 stab(6,ks)=stab(6,numsph+ss)
436 DO is=nsphrft,nsphrlt,mvsiz
438 DO l=1,
min(nsphrlt-is+1,mvsiz)
442 IF(js>0.AND.stab(7,numsph+ss)/=zero)
THEN
445 sig(1,nindx)=wasigsm(1,js)
446 sig(2,nindx)=wasigsm(2,js)
447 sig(3,nindx)=wasigsm(3,js)
448 sig(4,nindx)=wasigsm(4,js)
449 sig(5,nindx)=wasigsm(5,js)
450 sig(6,nindx)=wasigsm(6,js)
454 CALL sph_valpvec(nindx,index,
SIZE,sig,sigprv,dirprv)
456 DO l=1,
min(nsphrlt-is+1,mvsiz)
460 IF(js>0.AND.stab(7,numsph+ss)/=zero)
THEN
462 r1=-
max(zero,sigprv(1,nindx))
463 r2=-
max(zero,sigprv(2,nindx))
464 r3=-
max(zero,sigprv(3,nindx))
465 stab(1,ks) = dirprv(1,1,nindx)*dirprv(1,1,nindx)*r1
466 & + dirprv(1,2,nindx)*dirprv(1,2,nindx)*r2
467 & + dirprv(1,3,nindx)*dirprv(1,3,nindx)*r3
468 stab(2,ks) = dirprv(2,2,nindx)*dirprv(2,2,nindx)*r2
469 & + dirprv(2,3,nindx)*dirprv(2,3,nindx)*r3
470 & + dirprv(2,1,nindx)*dirprv(2,1,nindx)*r1
471 stab(3,ks) = dirprv(3,3,nindx)*dirprv(3,3,nindx)*r3
472 & + dirprv(3,1,nindx)*dirprv(3,1,nindx)*r1
473 & + dirprv(3,2,nindx)*dirprv(3,2,nindx)*r2
474 stab(4,ks) = dirprv(1,1,nindx)*dirprv(2,1,nindx)*r1
475 & + dirprv(1,2,nindx)*dirprv(2,2,nindx)*r2
476 & + dirprv(1,3,nindx)*dirprv(2,3,nindx)*r3
477 stab(5,ks) = dirprv(2,2,nindx)*dirprv(3,2,nindx)*r2
478 & + dirprv(2,3,nindx)*dirprv(3,3,nindx)*r3
479 & + dirprv(2,1,nindx)*dirprv(3,1,nindx)*r1
480 stab(6,ks) = dirprv(3,3,nindx)*dirprv(1,3,nindx)*r3
481 & + dirprv(3,1,nindx)*dirprv(1,1,nindx)*r1
482 & + dirprv(3,2,nindx)*dirprv(1,2,nindx)*r2
509#include "implicit_f.inc"
513#include "mvsiz_p.inc"
517 INTEGER NINDX, INDEX(*), SIZE
519 . SIG(SIZE,*), VAL(3,*), VEC(9,*)
523 INTEGER I, L, N, II, NN, LMAX, LMAXV(MVSIZ),
524 . NINDEX1, NINDEX2, NINDEX3,
525 . index1(mvsiz), index2(mvsiz), index3(mvsiz)
527 . cs(6), str(3,mvsiz), a(3,3,mvsiz), v(3,3,mvsiz), b(3,3,mvsiz),
528 . xmag(3,mvsiz), pr, aa, bb, aaa(mvsiz),
529 . cc, angp, dd, ftpi, ttpi, strmax,
530 . tol1(mvsiz), tol2(mvsiz), xmaxv(mvsiz), norminf(mvsiz),
532 . s21, s31, s12, s22, s32, s13, s23, s33, a11, a12, a13, a21,
533 . a22, a23, a31, a32, a33,
534 . mdemi, xmaxinv, flm
547 flm = two*sqrt(flmin)
557 pr = -(cs(1)+cs(2)+cs(3))* third
561 aaa(nn)=cs(4)**2 + cs(5)**2 + cs(6)**2 - cs(1)*cs(2)
562 & - cs(2)*cs(3) - cs(1)*cs(3)
563 norminf(nn) =
max(abs(cs(1)),abs(cs(2)),abs(cs(3)),
564 & abs(cs(4)),abs(cs(5)),abs(cs(6)))
565 norminf(nn) = em10*norminf(nn)
568 aa =
max(aaa(nn),norminf(nn))
570 bb=cs(1)*cs(5)**2 + cs(2)*cs(6)**2
571 & + cs(3)*cs(4)**2 - cs(1)*cs(2)*cs(3)
572 & - two*cs(4)*cs(5)*cs(6)
574 cc=-sqrt(twenty7/
max(em20,aa))*bb*half/
max(em20,aa)
577 angp=acos(cc) * third
578 dd=two*sqrt(aa * third)
579 str(1,nn)=dd*cos(angp)
580 str(2,nn)=dd*cos(angp+ftpi)
581 str(3,nn)=dd*cos(angp+ttpi)
583 val(1,nn) = str(1,nn)-pr
584 val(2,nn) = str(2,nn)-pr
585 val(3,nn) = str(3,nn)-pr
587 IF(abs(str(3,nn))>abs(str(1,nn))
588 & .AND.aaa(nn)>norminf(nn))
THEN
598 strmax=
max(abs(str(1,nn)),abs(str(3,nn)))
599 tol1(nn)=
max(em20,flm*strmax**2)
600 tol2(nn)=flm*strmax/3
601 a(1,1,nn)=cs(1)-str(1,nn)
602 a(2,2,nn)=cs(2)-str(1,nn)
603 a(3,3,nn)=cs(3)-str(1,nn)
611 b(1,1,nn)=a(2,1,nn)*a(3,2,nn)-a(3,1,nn)
613 b(1,2,nn)=a(2,2,nn)*a(3,3,nn)-a(3,2,nn)
615 b(1,3,nn)=a(2,3,nn)*a(3,1,nn)-a(3,3,nn)
617 b(2,1,nn)=a(3,1,nn)*a(1,2,nn)-a(1,1,nn)
619 b(2,2,nn)=a(3,2,nn)*a(1,3,nn)-a(1,2,nn)
621 b(2,3,nn)=a(3,3,nn)*a(1,1,nn)-a(1,3,nn)
623 b(3,1,nn)=a(1,1,nn)*a(2,2,nn)-a(2,1,nn)
625 b(3,2,nn)=a(1,2,nn)*a(2,3,nn)-a(2,2,nn)
627 b(3,3,nn)=a(1,3,nn)*a(2,1,nn)-a(2,3,nn)
629 xmag(1,nn)=sqrt(b(1,1,nn)**2+b(2,1,nn)**2+b(3,1,nn)**2)
630 xmag(2,nn)=sqrt(b(1,2,nn)**2+b(2,2,nn)**2+b(3,2,nn)**2)
631 xmag(3,nn)=sqrt(b(1,3,nn)**2+b(2,3,nn)**2+b(3,3,nn)**2)
639 xmaxv(nn)=
max(xmag(1,nn),xmag(2,nn),xmag(3,nn))
640 IF(xmag(1,nn)==xmaxv(nn))
THEN
642 ELSEIF(xmag(2,nn)==xmaxv(nn))
THEN
647 IF(aaa(nn)<norminf(nn))
THEN
648 val(1,nn) = sig(1,nn)
649 val(2,nn) = sig(2,nn)
650 val(3,nn) = sig(3,nn)
658 ELSEIF(xmaxv(nn)>tol1(nn))
THEN
659 nindex1 = nindex1 + 1
662 nindex2 = nindex2 + 1
667#include "vectorize.inc"
671 xmaxinv = one/xmaxv(nn)
672 v(1,1,nn)=b(1,lmax,nn)*xmaxinv
673 v(2,1,nn)=b(2,lmax,nn)*xmaxinv
674 v(3,1,nn)=b(3,lmax,nn)*xmaxinv
675 a(1,1,nn)=a(1,1,nn)+str(1,nn)-str(3,nn)
676 a(2,2,nn)=a(2,2,nn)+str(1,nn)-str(3,nn)
677 a(3,3,nn)=a(3,3,nn)+str(1,nn)-str(3,nn)
679 b(1,1,nn)=a(2,1,nn)*v(3,1,nn)-a(3,1,nn)*v(2,1,nn)
680 b(1,2,nn)=a(2,2,nn)*v(3,1,nn)-a(3,2,nn)*v(2,1,nn)
681 b(1,3,nn)=a(2,3,nn)*v(3,1,nn)-a(3,3,nn)*v(2,1,nn)
682 b(2,1,nn)=a(3,1,nn)*v(1,1,nn)-a(1,1,nn)*v(3,1,nn)
683 b(2,2,nn)=a(3,2,nn)*v(1,1,nn)-a(1,2,nn)*v(3,1,nn)
684 b(2,3,nn)=a(3,3,nn)*v(1,1,nn)-a(1,3,nn)*v(3,1,nn)
685 b(3,1,nn)=a(1,1,nn)*v(2,1,nn)-a(2,1,nn)*v(1,1,nn)
686 b(3,2,nn)=a(1,2,nn)*v(2,1,nn)-a(2,2,nn)*v(1,1,nn)
687 b(3,3,nn)=a(1,3,nn)*v(2,1,nn)-a(2,3,nn)*v(1,1,nn)
688 xmag(1,nn)=sqrt(b(1,1,nn)**2+b(2,1,nn)**2+b(3,1,nn)**2)
689 xmag(2,nn)=sqrt(b(1,2,nn)**2+b(2,2,nn)**2+b(3,2,nn)**2)
690 xmag(3,nn)=sqrt(b(1,3,nn)**2+b(2,3,nn)**2+b(3,3,nn)**2)
692 xmaxv(nn)=
max(xmag(1,nn),xmag(2,nn),xmag(3,nn))
695#include "vectorize.inc"
698 IF(xmag(1,nn)==xmaxv(nn))
THEN
700 ELSEIF(xmag(2,nn)==xmaxv(nn))
THEN
706 vmag=sqrt(v(1,1,nn)**2+v(2,1,nn)**2)
708 IF(xmaxv(nn)>tol2(nn))
THEN
709 xmaxinv = one/xmaxv(nn)
710 v(1,3,nn)=b(1,lmax,nn)*xmaxinv
711 v(2,3,nn)=b(2,lmax,nn)*xmaxinv
712 v(3,3,nn)=b(3,lmax,nn)*xmaxinv
713 v(1,2,nn)=v(2,3,nn)*v(3,1,nn)-v(2,1,nn)*v(3,3,nn)
714 v(2,2,nn)=v(3,3,nn)*v(1,1,nn)-v(3,1,nn)*v(1,3,nn)
715 v(3,2,nn)=v(1,3,nn)*v(2,1,nn)-v(1,1,nn)*v(2,3,nn)
716 vmag=one/sqrt(v(1,2,nn)**2+v(2,2,nn)**2+v(3,2,nn)**2)
717 v(1,2,nn)=v(1,2,nn)*vmag
718 v(2,2,nn)=v(2,2,nn)*vmag
719 v(3,2,nn)=v(3,2,nn)*vmag
720 ELSEIF(vmag>tol2(nn))
THEN
721 v(1,2,nn)=-v(2,1,nn)/vmag
722 v(2,2,nn)=v(1,1,nn)/vmag
735 xmag(1,nn)=sqrt(a(1,1,nn)**2+a(2,1,nn)**2)
736 xmag(2,nn)=sqrt(a(1,2,nn)**2+a(2,2,nn)**2)
737 xmag(3,nn)=sqrt(a(1,3,nn)**2+a(2,3,nn)**2)
739 xmaxv(nn)=
max(xmag(1,nn),xmag(2,nn),xmag(3,nn))
742#include "vectorize.inc"
745 IF(xmag(1,nn)==xmaxv(nn))
THEN
747 ELSEIF(xmag(2,nn)==xmaxv(nn))
THEN
754 IF(
max(abs(a(3,1,nn)),abs(a(3,2,nn)),abs(a(3,3,nn)))
756 xmaxinv = one/xmaxv(nn)
760 v(1,2,nn)=-a(2,lmax,nn)*xmaxinv
761 v(2,2,nn)= a(1,lmax,nn)*xmaxinv
764 ELSEIF(xmaxv(nn)>tol2(nn))
THEN
765 xmaxinv = one/xmaxv(nn)
766 v(1,1,nn)=-a(2,lmax,nn)*xmaxinv
767 v(2,1,nn)= a(1,lmax,nn)*xmaxinv
769 v(1,2,nn)=-a(3,lmax,nn)*v(2,1,nn)
770 v(2,2,nn)= a(3,lmax,nn)*v(1,1,nn)
771 v(3,2,nn)= a(1,lmax,nn)*v(2,1,nn)-a(2,lmax,nn)*v(1,1,nn)
772 vmag=one/sqrt(v(1,2,nn)**2+v(2,2,nn)**2+v(3,2,nn)**2)
773 v(1,2,nn)=v(1,2,nn)*vmag
774 v(2,2,nn)=v(2,2,nn)*vmag
775 v(3,2,nn)=v(3,2,nn)*vmag
794 vec(7,nn)=vec(2,nn)*vec(6,nn)-vec(3,nn)*vec(5,nn)
795 vec(8,nn)=vec(3,nn)*vec(4,nn)-vec(1,nn)*vec(6,nn)
796 vec(9,nn)=vec(1,nn)*vec(5,nn)-vec(2,nn)*vec(4,nn)