39 SUBROUTINE admdiv(IXC ,IPARTC ,IXTG ,IPARTTG,IPART,
40 . ITASK,ICONTACT,IPARG ,X ,MS ,
41 . IN ,RCONTACT,ELBUF_TAB,NODFT ,NODLT,
42 . IGEO ,IPM ,SH4TREE,PADMESH,MSC ,
43 . INC ,SH3TREE ,MSTG ,INTG ,PTG ,
44 . ACONTACT ,PCONTACT ,ERR_THK_SH4, ERR_THK_SH3 ,MSCND,
45 . INCND,PM ,MCP ,MCPC ,MCPTG,
56#include "implicit_f.inc"
65#include "remesh_c.inc"
71 INTEGER IXC(NIXC,*),IPARTC(*),IXTG(NIXTG,*),IPARTTG(*),
72 . IPART(LIPART1,*),ITASK,ICONTACT(*),IPARG(NPARG,*),
73 . NODFT, NODLT, IGEO(NPROPGI,*), IPM(NPROPMI,*),
74 . SH4TREE(KSH4TREE,*), SH3TREE(KSH3TREE,*)
75 INTEGER ,
INTENT(IN) :: ITHERM_FE
77 . X(3,*),MS(*),IN(*),RCONTACT(*),
78 . padmesh(kpadmesh,*), msc(*), inc(*),
79 . mstg(*), intg(*), ptg(3,*), acontact(*), pcontact(*),
80 . err_thk_sh4(*), err_thk_sh3(*), mscnd(*), incnd(*),
81 . pm(npropm,*), mcp(*), mcpc(*), mcptg(*)
82 TYPE(elbuf_struct_),
DIMENSION(NGROUP) :: ELBUF_TAB
86 INTEGER SH4FT, SH4LT, SH3FT,
87 INTEGER ,N,IB,M,N1,N2,N3,N4,M1,M2,M3,M4,NG1
88 INTEGER LEVEL,KDIV,NTMP,L,LLNOD,
89 . le,lelt,lev,ne,son,lelt1,lelt2,
91 INTEGER NSKYML, WORK(70000), I, J, K
92 INTEGER,
DIMENSION(:),
ALLOCATABLE :: NELT
93 INTEGER,
DIMENSION(:),
ALLOCATABLE :: LNOD
94 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ITRI
95 INTEGER,
DIMENSION(:),
ALLOCATABLE :: INDEX1
98 . x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4,
100 . x13,y13,z13,x24,y24,z24,x12,y12,z12,
101 . cc,cmax,pp,rr,msbig,inbig,
104 . tn1,tn2,tn3,tn4,unt,err
106 CALL my_alloc(nelt,2*(4**levelmax))
107 CALL my_alloc(lnod,numnod)
108 CALL my_alloc(itri,
max(numelc,numeltg))
109 CALL my_alloc(index1,2*
max(numelc,numeltg))
142 aaa=one/
max(em30,sqrt(nx*nx+ny*ny+nz*nz))
159 sh4ft = 1+itask*
nsh4act/ nthread
160 sh4lt = (itask+1)*
nsh4act/nthread
162 sh3ft = 1+itask*
nsh3act/ nthread
163 sh3lt = (itask+1)*
nsh3act/nthread
171 IF( level == levelmax ) cycle
194 al1=(x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)+(z2-z1)*(z2-z1)
195 al2=(x3-x2)*(x3-x2)+(y3-y2)*(y3-y2)+(z3-z2)*(z3-z2)
196 al3=(x4-x3)*(x4-x3)+(y4-y3)*(y4-y3)+(z4-z3)*(z4-z3)
197 al4=(x1-x4)*(x1-x4)+(y1-y4)*(y1
198 al =
max(al1,al2,al3,al4)
207 DO WHILE (lev < levelmax)
238 lnod(llnod)=ixc(2,ne)
240 lnod(llnod)=ixc(3,ne)
242 lnod(llnod)=ixc(4,ne)
244 lnod(llnod)=ixc(5,ne)
254 IF(pp > one .AND. cc < zep9999)
THEN
260 IF(al > half*rr*rr)
THEN
267 IF(kdiv==0.AND.ichkadm/=0)
THEN
283 nx = y13*z24 - z13*y24
284 ny = z13*x24 - x13*z24
285 nz = x13*y24 - y13*x24
287 aaa=one/
max(em30,sqrt(nx*nx+ny*ny+nz*nz))
294 cc=nodnorm(1,ni)*nx+nodnorm(2,ni)*ny+nodnorm(3,ni)*nz
303 IF(iadmerrt /= 0)
THEN
305 IF(err >= padmesh(2,ip))
THEN
311 IF( kdiv == 0 ) cycle
319#include "lockoff.inc"
325 m = sh4tree(2,n)+ib-1
333 sh4tree(3,m)=-sh4tree(3,m)-1
337#include "lockoff.inc"
351#include "lockoff.inc"
355 mscnd(m1)=mscnd(m1)+msbig
356 mscnd(m2)=mscnd(m2)+msbig
357 mscnd(m3)=mscnd(m3)+msbig
358 mscnd(m4)=mscnd(m4)+msbig
360 incnd(m1)=incnd(m1)+inbig
361 incnd(m2)=incnd(m2)+inbig
362 incnd(m3)=incnd(m3)+inbig
363 incnd(m4)=incnd(m4)+inbig
364#include "lockoff.inc"
367 IF(itherm_fe > 0)
THEN
374#include "lockoff.inc"
388 CALL admmap4(n, ixc, x, iparg, elbuf_tab,
389 . igeo, ipm ,sh4tree)
394 ms(n1)=
max(zero,ms(n1)-msc(n))
395 ms(n2)=
max(zero,ms(n2)-msc(n))
396 ms(n3)=
max(zero,ms(n3)-msc(n))
397 ms(n4)=
max(zero,ms(n4)-msc(n))
398 in(n1)=
max(zero,in(n1)-inc(n))
399 in(n2)=
max(zero,in(n2)-inc(n))
400 in(n3)=
max(zero,in(n3)-inc(n))
401 in(n4)=
max(zero,in(n4)-inc(n))
402#include "lockoff.inc"
406 mscnd(n1)=
max(zero,mscnd(n1)-msbig)
407 mscnd(n2)=
max(zero,mscnd(n2)-msbig)
408 mscnd(n3)=
max(zero,mscnd(n3)-msbig)
409 mscnd(n4)=
max(zero,mscnd(n4)-msbig)
411 incnd(n1)=
max(zero,incnd(n1)-inbig)
412 incnd(n2)=
max(zero,incnd(n2)-inbig)
413 incnd(n3)=
max(zero,incnd(n3)-inbig)
414 incnd(n4)=
max(zero,incnd(n4)-inbig)
415#include "lockoff.inc"
418 IF(itherm_fe > 0)
THEN
421 mcp(n1)=
max(zero,mcp(n1)-mcpn)
422 mcp(n2)=
max(zero,mcp(n2)-mcpn)
423 mcp(n3)=
max(zero,mcp(n3)-mcpn)
424 mcp(n4)=
max(zero,mcp(n4)-mcpn)
425#include "lockoff.inc"
435 sh4tree(3,n)=-(sh4tree(3,n)+1)
443 IF( level == levelmax ) cycle
461 al1=(x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)+(z2-z1)*(z2-z1)
462 al2=(x3-x2)*(x3-x2)+(y3-y2)*(y3-y2)+(z3-z2)*(z3-z2)
463 al3=(x1-x3)*(x1-x3)+(y1-y3)*(y1-y3)+(z1-z3)*(z1-z3)
474 DO WHILE (lev < levelmax)
505 lnod(llnod)=ixtg(2,ne)
507 lnod(llnod)=ixtg(3,ne)
509 lnod(llnod)=ixtg(4,ne)
519 IF(pp > one .AND. cc < zep9999)
THEN
525 IF(al > half*rr*rr)
THEN
533 IF(kdiv==0.AND.ichkadm/=0)
THEN
546 nx = y12*z13 - z12*y13
547 ny = z12*x13 - x12*z13
548 nz = x12*y13 - y12*x13
550 aaa=one/
max(em30,sqrt(nx*nx+ny*ny+nz*nz))
557 cc=nodnorm(1,ni)*nx+nodnorm(2,ni)*ny+nodnorm(3,ni)*nz
566 IF( kdiv == 0 ) cycle
574#include "lockoff.inc"
580 m = sh3tree(2,n)+ib-1
587 sh3tree(3,m)=-sh3tree(3,m)-1
591#include "lockoff.inc"
597 ms(m1)=ms(m1)+mstg(m)*ptg(1,m)
598 ms(m2)=ms(m2)+mstg(m)*ptg(2,m)
599 ms(m3)=ms(m3)+mstg(m)*ptg(3,m)
600 in(m1)=in(m1)+intg(m)*ptg(1,m)
601 in(m2)=in(m2)+intg(m)*ptg(2,m)
602 in(m3)=in(m3)+intg(m)*ptg(3,m)
603#include "lockoff.inc"
608 mscnd(m1)=mscnd(m1)+msbig
609 mscnd(m2)=mscnd(m2)+msbig
610 mscnd(m3)=mscnd(m3)+msbig
612 incnd(m1)=incnd(m1)+inbig
613 incnd(m2)=incnd(m2)+inbig
614 incnd(m3)=incnd(m3)+inbig
615#include "lockoff.inc"
618 IF(itherm_fe > 0)
THEN
620 mcp(m1)=mcp(m1)+mcptg(m)*ptg(1,m)
621 mcp(m2)=mcp(m2)+mcptg(m)*ptg(2,m)
622 mcp(m3)=mcp(m3)+mcptg(m)*ptg(3,m)
623#include "lockoff.inc"
636 CALL admmap3(n, ixtg, x, iparg,elbuf_tab,
637 . igeo, ipm ,sh3tree )
642 ms(n1)=
max(zero,ms(n1)-mstg(n)*ptg(1,n))
643 ms(n2)=
max(zero,ms(n2)-mstg(n)*ptg(2,n))
644 ms(n3)=
max(zero,ms(n3)-mstg(n)*ptg(3,n))
645 in(n1)=
max(zero,in(n1)-intg(n)*ptg(1,n))
646 in(n2)=
max(zero,in(n2)-intg(n)*ptg(2,n))
647 in(n3)=
max(zero,in(n3)-intg(n)*ptg(3,n))
648#include "lockoff.inc"
652 mscnd(n1)=
max(zero,mscnd(n1)-msbig)
653 mscnd(n2)=
max(zero,mscnd(n2)-msbig)
654 mscnd(n3)=
max(zero,mscnd(n3)-msbig)
656 incnd(n1)=
max(zero,incnd(n1)-inbig)
657 incnd(n2)=
max(zero,incnd(n2)-inbig)
658 incnd(n3)=
max(zero,incnd(n3)-inbig)
659#include "lockoff.inc"
662 IF(itherm_fe > 0)
THEN
664 mcp(n1)=
max(zero,mcp(n1)-mcptg(n)*ptg(1,n))
665 mcp(n2)=
max(zero,mcp(n2)-mcptg(n)*ptg(2,n))
666 mcp(n3)=
max(zero,mcp(n3)-mcptg(n)*ptg(3,n))
667#include "lockoff.inc"
677 sh3tree(3,n)=-(sh3tree(3,n)+1)
683 IF(iparit/=0 .AND. itask==0 .AND. nskymsh4 > 0)
THEN
685 itri(i) = ixc(nixc,abs(
msh4sky(i)))
687 CALL my_orders(0,work,itri,index1,nskymsh4,1)
695 ms(i) =
max(zero , ms(i) - msc(n))
696 in(i) =
max(zero , in(i) - inc(n))
701 ms(i) = ms(i) + msc(n)
702 in(i) = in(i) + inc(n)
715 mscnd(i) =
max(zero , mscnd(i) - msbig)
716 incnd(i) =
max(zero , incnd(i) - inbig)
723 mscnd(i) = mscnd(i) + msbig
724 incnd(i) = incnd(i) + inbig
730 IF(itherm_fe > 0)
THEN
737 mcp(i) =
max(zero , mcp(i) - mcpc(n))
742 mcp(i) = mcp(i) + mcpc(n)
750 IF(iparit/=0 .AND. itask==0 .AND. nskymsh3 > 0)
THEN
752 itri(i) = ixtg(nixtg,abs(
msh3sky(i)))
754 CALL my_orders(0,work,itri,index1,nskymsh3,1)
762 ms(i) =
max(zero , ms(i) - mstg(n)*ptg(k,n))
763 in(i) =
max(zero , in(i) - intg(n)*ptg(k,n))
768 ms(i) = ms(i) + mstg(n)*ptg(k,n)
769 in(i) = in(i) + intg(n)*ptg(k,n)
782 mscnd(i) =
max(zero , mscnd(i) - msbig)
783 incnd(i) =
max(zero , incnd(i) - inbig)
790 mscnd(i) = mscnd(i) + msbig
791 incnd(i) = incnd(i) + inbig
797 IF(itherm_fe > 0)
THEN
804 mcp(i) =
max(zero , mcp(i) - mcptg(n)*ptg(k,n))
809 mcp(i) = mcp(i) + mcptg(n)*ptg(k,n)