40 SUBROUTINE admdiv(IXC ,IPARTC ,IXTG ,IPARTTG,IPART,
41 . ITASK,ICONTACT,IPARG ,X ,MS ,
42 . IN ,RCONTACT,ELBUF_TAB,NODFT ,NODLT,
43 . IGEO ,IPM ,SH4TREE,PADMESH,MSC ,
44 . INC ,SH3TREE ,MSTG ,INTG ,PTG ,
45 . ACONTACT ,PCONTACT ,ERR_THK_SH4, ERR_THK_SH3 ,MSCND,
46 . INCND,PM ,MCP ,MCPC ,MCPTG,
54 use element_mod ,
only : nixc,nixtg
58#include "implicit_f.inc"
67#include "remesh_c.inc"
73 INTEGER IXC(NIXC,*),IPARTC(*),IXTG(NIXTG,*),IPARTTG(*),
74 . IPART(LIPART1,*),ITASK,ICONTACT(*),IPARG(NPARG,*),
75 . NODFT, NODLT, IGEO(NPROPGI,*), IPM(NPROPMI,*),
76 . SH4TREE(KSH4TREE,*), SH3TREE(KSH3TREE,*)
77 INTEGER ,
INTENT(IN) :: ITHERM_FE
79 . X(3,*),MS(*),IN(*),RCONTACT(*),
80 . padmesh(kpadmesh,*), msc(*), inc(*),
81 . mstg(*), intg(*), ptg(3,*), acontact(*), pcontact(*),
82 . err_thk_sh4(*), err_thk_sh3(*), mscnd(*), incnd(*),
83 . pm(npropm,*), mcp(*), mcpc(*), mcptg(*)
84 TYPE(elbuf_struct_),
DIMENSION(NGROUP) :: ELBUF_TAB
88 INTEGER SH4FT, SH4LT, SH3FT, SH3LT
89 INTEGER NN,N,IB,M,N1,N2,N3,N4,M1,M2,M3,M4,NG1
90 INTEGER LEVEL,KDIV,NTMP,L,LLNOD,
91 . le,lelt,lev,ne,son,lelt1,lelt2,
93 INTEGER NSKYML, WORK(70000), I, J, K
94 INTEGER,
DIMENSION(:),
ALLOCATABLE :: NELT
95 INTEGER,
DIMENSION(:),
ALLOCATABLE :: LNOD
96 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ITRI
97 INTEGER,
DIMENSION(:),
ALLOCATABLE :: INDEX1
100 . x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4,
101 . al1,al2,al3,al4,al,
102 . x13,y13,z13,x24,y24,z24,x12,y12,z12,
103 . cc,cmax,pp,rr,msbig,inbig,
106 . tn1,tn2,tn3,tn4,unt,err
108 CALL my_alloc(nelt,2*(4**levelmax))
109 CALL my_alloc(lnod,numnod)
110 CALL my_alloc(itri,
max(numelc,numeltg))
111 CALL my_alloc(index1,2*
max(numelc,numeltg))
144 aaa=one/
max(em30,sqrt(nx*nx+ny*ny+nz*nz))
161 sh4ft = 1+itask*
nsh4act/ nthread
162 sh4lt = (itask+1)*
nsh4act/nthread
164 sh3ft = 1+itask*
nsh3act/ nthread
165 sh3lt = (itask+1)*
nsh3act/nthread
173 IF( level == levelmax ) cycle
196 al1=(x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)+(z2-z1)*(z2-z1)
197 al2=(x3-x2)*(x3-x2)+(y3-y2)*(y3-y2)+(z3-z2)*(z3-z2)
198 al3=(x4-x3)*(x4-x3)+(y4-y3)*(y4-y3)+(z4-z3)*(z4-z3)
199 al4=(x1-x4)*(x1-x4)+(y1-y4)*(y1-y4)+(z1-z4)*(z1-z4)
200 al =
max(al1,al2,al3,al4)
209 DO WHILE (lev < levelmax)
240 lnod(llnod)=ixc(2,ne)
242 lnod(llnod)=ixc(3,ne)
244 lnod(llnod)=ixc(4,ne)
246 lnod(llnod)=ixc(5,ne)
256 IF(pp > one .AND. cc < zep9999)
THEN
262 IF(al > half*rr*rr)
THEN
269 IF(kdiv==0.AND.ichkadm/=0)
THEN
285 nx = y13*z24 - z13*y24
286 ny = z13*x24 - x13*z24
287 nz = x13*y24 - y13*x24
289 aaa=one/
max(em30,sqrt(nx*nx+ny*ny+nz*nz))
296 cc=nodnorm(1,ni)*nx+nodnorm(2,ni)*ny+nodnorm(3,ni)*nz
305 IF(iadmerrt /= 0)
THEN
307 IF(err >= padmesh(2,ip))
THEN
313 IF( kdiv == 0 ) cycle
321#include "lockoff.inc"
327 m = sh4tree(2,n)+ib-1
335 sh4tree(3,m)=-sh4tree(3,m)-1
339#include "lockoff.inc"
353#include "lockoff.inc"
357 mscnd(m1)=mscnd(m1)+msbig
358 mscnd(m2)=mscnd(m2)+msbig
359 mscnd(m3)=mscnd(m3)+msbig
360 mscnd(m4)=mscnd(m4)+msbig
362 incnd(m1)=incnd(m1)+inbig
363 incnd(m2)=incnd(m2)+inbig
364 incnd(m3)=incnd(m3)+inbig
365 incnd(m4)=incnd(m4)+inbig
366#include "lockoff.inc"
369 IF(itherm_fe > 0)
THEN
376#include "lockoff.inc"
390 CALL admmap4(n, ixc, x, iparg, elbuf_tab,
391 . igeo, ipm ,sh4tree)
396 ms(n1)=
max(zero,ms(n1)-msc(n))
397 ms(n2)=
max(zero,ms(n2)-msc(n))
398 ms(n3)=
max(zero,ms(n3)-msc(n))
399 ms(n4)=
max(zero,ms(n4)-msc(n))
400 in(n1)=
max(zero,in(n1)-inc(n))
401 in(n2)=
max(zero,in(n2)-inc(n))
402 in(n3)=
max(zero,in(n3)-inc(n))
403 in(n4)=
max(zero,in(n4)-inc(n))
404#include "lockoff.inc"
408 mscnd(n1)=
max(zero,mscnd(n1)-msbig)
409 mscnd(n2)=
max(zero,mscnd(n2)-msbig)
410 mscnd(n3)=
max(zero,mscnd(n3)-msbig)
411 mscnd(n4)=
max(zero,mscnd(n4)-msbig)
413 incnd(n1)=
max(zero,incnd(n1)-inbig)
414 incnd(n2)=
max(zero,incnd(n2)-inbig)
415 incnd(n3)=
max(zero,incnd(n3)-inbig)
416 incnd(n4)=
max(zero,incnd(n4)-inbig)
417#include "lockoff.inc"
420 IF(itherm_fe > 0)
THEN
423 mcp(n1)=
max(zero,mcp(n1)-mcpn)
424 mcp(n2)=
max(zero,mcp(n2)-mcpn)
425 mcp(n3)=
max(zero,mcp(n3)-mcpn)
426 mcp(n4)=
max(zero,mcp(n4)-mcpn)
427#include "lockoff.inc"
437 sh4tree(3,n)=-(sh4tree(3,n)+1)
445 IF( level == levelmax ) cycle
463 al1=(x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)+(z2
464 al2=(x3-x2)*(x3-x2)+(y3-y2)*(y3-y2)+(z3-z2)*(z3-z2)
465 al3=(x1-x3)*(x1-x3)+(y1-y3)*(y1-y3)+(z1-z3)*(z1-z3)
476 DO WHILE (lev < levelmax)
507 lnod(llnod)=ixtg(2,ne)
509 lnod(llnod)=ixtg(3,ne)
511 lnod(llnod)=ixtg(4,ne)
521 IF(pp > one .AND. cc < zep9999)
THEN
527 IF(al > half*rr*rr)
THEN
535 IF(kdiv==0.AND.ichkadm/=0)
THEN
548 nx = y12*z13 - z12*y13
549 ny = z12*x13 - x12*z13
550 nz = x12*y13 - y12*x13
552 aaa=one/
max(em30,sqrt(nx*nx+ny*ny+nz*nz))
559 cc=nodnorm(1,ni)*nx+nodnorm(2,ni)*ny+nodnorm(3,ni)*nz
568 IF( kdiv == 0 ) cycle
576#include "lockoff.inc"
582 m = sh3tree(2,n)+ib-1
589 sh3tree(3,m)=-sh3tree(3,m)-1
593#include "lockoff.inc"
599 ms(m1)=ms(m1)+mstg(m)*ptg(1,m)
600 ms(m2)=ms(m2)+mstg(m)*ptg(2,m)
601 ms(m3)=ms(m3)+mstg(m)*ptg(3,m)
602 in(m1)=in(m1)+intg(m)*ptg(1,m)
603 in(m2)=in(m2)+intg(m)*ptg(2,m)
604 in(m3)=in(m3)+intg(m)*ptg(3,m)
605#include "lockoff.inc"
610 mscnd(m1)=mscnd(m1)+msbig
611 mscnd(m2)=mscnd(m2)+msbig
612 mscnd(m3)=mscnd(m3)+msbig
614 incnd(m1)=incnd(m1)+inbig
615 incnd(m2)=incnd(m2)+inbig
616 incnd(m3)=incnd(m3)+inbig
617#include "lockoff.inc"
620 IF(itherm_fe > 0)
THEN
622 mcp(m1)=mcp(m1)+mcptg(m)*ptg(1,m)
623 mcp(m2)=mcp(m2)+mcptg(m)*ptg(2,m)
624 mcp(m3)=mcp(m3)+mcptg(m)*ptg(3,m)
625#include "lockoff.inc"
638 CALL admmap3(n, ixtg, x, iparg,elbuf_tab,
639 . igeo, ipm ,sh3tree )
644 ms(n1)=
max(zero,ms(n1)-mstg(n)*ptg(1,n))
645 ms(n2)=
max(zero,ms(n2)-mstg(n)*ptg(2,n))
646 ms(n3)=
max(zero,ms(n3)-mstg(n)*ptg(3,n))
647 in(n1)=
max(zero,in(n1)-intg(n)*ptg(1,n))
648 in(n2)=
max(zero,in(n2)-intg(n)*ptg(2,n))
649 in(n3)=
max(zero,in(n3)-intg(n)*ptg(3,n))
650#include "lockoff.inc"
654 mscnd(n1)=
max(zero,mscnd(n1)-msbig)
655 mscnd(n2)=
max(zero,mscnd(n2)-msbig)
656 mscnd(n3)=
max(zero,mscnd(n3)-msbig)
658 incnd(n1)=
max(zero,incnd(n1)-inbig)
659 incnd(n2)=
max(zero,incnd(n2)-inbig)
660 incnd(n3)=
max(zero,incnd(n3)-inbig)
661#include "lockoff.inc"
664 IF(itherm_fe > 0)
THEN
666 mcp(n1)=
max(zero,mcp(n1)-mcptg(n)*ptg(1,n))
667 mcp(n2)=
max(zero,mcp(n2)-mcptg(n)*ptg(2,n))
668 mcp(n3)=
max(zero,mcp(n3)-mcptg(n)*ptg(3,n))
669#include "lockoff.inc"
679 sh3tree(3,n)=-(sh3tree(3,n)+1)
685 IF(iparit/=0 .AND. itask==0 .AND. nskymsh4 > 0)
THEN
687 itri(i) = ixc(nixc,abs(
msh4sky(i)))
689 CALL my_orders(0,work,itri,index1,nskymsh4,1)
697 ms(i) =
max(zero , ms(i) - msc(n))
698 in(i) =
max(zero , in(i) - inc(n))
703 ms(i) = ms(i) + msc(n)
704 in(i) = in(i) + inc(n)
717 mscnd(i) =
max(zero , mscnd(i) - msbig)
718 incnd(i) =
max(zero , incnd(i) - inbig)
725 mscnd(i) = mscnd(i) + msbig
726 incnd(i) = incnd(i) + inbig
732 IF(itherm_fe > 0)
THEN
739 mcp(i) =
max(zero , mcp(i) - mcpc(n))
744 mcp(i) = mcp(i) + mcpc(n)
752 IF(iparit/=0 .AND. itask==0 .AND. nskymsh3 > 0)
THEN
754 itri(i) = ixtg(nixtg,abs(
msh3sky(i)))
756 CALL my_orders(0,work,itri,index1,nskymsh3,1)
764 ms(i) =
max(zero , ms(i) - mstg(n)*ptg(k,n))
765 in(i) =
max(zero , in(i) - intg(n)*ptg(k,n))
770 ms(i) = ms(i) + mstg(n)*ptg(k,n)
771 in(i) = in(i) + intg(n)*ptg(k,n)
784 mscnd(i) =
max(zero , mscnd(i) - msbig)
785 incnd(i) =
max(zero , incnd(i) - inbig)
792 mscnd(i) = mscnd(i) + msbig
793 incnd(i) = incnd(i) + inbig
799 IF(itherm_fe > 0)
THEN
806 mcp(i) =
max(zero , mcp(i) - mcptg(n)*ptg(k,n))
811 mcp(i) = mcp(i) + mcptg(n)*ptg(k,n)