5 &(nsegbor,ikles,nelem,npoin)
60 INTEGER,
INTENT(IN) :: NPOIN,NELEM
61 INTEGER,
INTENT(OUT) :: NSEGBOR
62 INTEGER,
INTENT(IN) :: IKLES(3,nelem)
66 INTEGER NFACE,NDP,KEL,IMAX,IFACE,IELEM,M1,M2,IV,IELEM2,IFACE2
67 INTEGER I,ERR,I1,I2,IDIMAT
68 INTEGER :: SOMFAC(2,4,2)
69 parameter( somfac = reshape( (/
70 & 1,2 , 2,3 , 3,1 , 0,0 ,
71 & 1,2 , 2,3 , 3,4 , 4,1 /), shape=(/ 2,4,2 /) ) )
75 INTEGER,
ALLOCATABLE :: IFABOR(:,:),MAT1(:),MAT2(:),MAT3(:)
76 INTEGER,
ALLOCATABLE :: NVOIS(:),IADR(:)
91 ALLOCATE(mat1(idimat),stat=err)
92 ALLOCATE(mat2(idimat),stat=err)
93 ALLOCATE(mat3(idimat),stat=err)
94 ALLOCATE(ifabor(nelem,3),stat=err)
95 ALLOCATE(nvois(npoin),stat=err)
96 ALLOCATE(iadr(npoin),stat=err)
100 2000
FORMAT(1x,
'SEGBOR: ERROR DURING ALLOCATION OF MEMORY: ',/,1x,
101 &
'ERROR CODE: ',1i6)
118 i1 = ikles( somfac(1,iface,kel) , ielem )
119 i2 = ikles( somfac(2,iface,kel) , ielem )
120 nvois(i1) = nvois(i1) + 1
121 nvois(i2) = nvois(i2) + 1
132 iadr(i) = iadr(i-1) + nvois(i-1)
135 imax = iadr(npoin) + nvois(npoin) - 1
136 IF(imax.GT.idimat)
THEN 137 WRITE(
lu,52) idimat,imax
138 52
FORMAT(1x,
'SEGBOR: SIZE OF MAT1,2,3 (',1i9,
') TOO SHORT',/,
139 & 1x,
'MINIMUM SIZE: ',1i9)
159 ifabor(ielem,iface) = 0
163 i1 = ikles( somfac(1,iface,kel) , ielem )
164 i2 = ikles( somfac(2,iface,kel) , ielem )
173 IF(mat1(iadr(m1)+iv-1).EQ.0)
THEN 174 mat1(iadr(m1)+iv-1)=m2
175 mat2(iadr(m1)+iv-1)=ielem
176 mat3(iadr(m1)+iv-1)=iface
178 ELSEIF(mat1(iadr(m1)+iv-1).EQ.m2)
THEN 179 ielem2 = mat2(iadr(m1)+iv-1)
180 iface2 = mat3(iadr(m1)+iv-1)
181 ifabor(ielem,iface) = ielem2
182 ifabor(ielem2,iface2) = ielem
189 83
FORMAT(1x,
'SEGBOR : ERROR IN THE MESH ',/,1x,
190 &
' MAYBE SUPERIMPOSED POINTS ')
202 IF(ifabor(ielem,iface).EQ.0) nsegbor=nsegbor+1
206 WRITE(
lu,501) nsegbor
207 501
FORMAT(1x,
'SEGBOR (BIEF) : NUMBER OF BOUNDARY SEGMENTS = ',1i6,/,
208 & 1x,
'INCLUDING THOSE DUE TO DOMAIN DECOMPOSITION')
subroutine segbor(NSEGBOR, IKLES, NELEM, NPOIN)