5 &(ifabor,nelem,nelmax,ielm,ikle,sizikl,
6 & npoin,nachb,nbor,nptfr,iadr,nvois)
69 INTEGER,
INTENT(IN) :: NPTFR,SIZIKL,NELEM,NELMAX,IELM,NPOIN
70 INTEGER,
INTENT(IN) :: NBOR(nptfr),NACHB(nbmaxnshare,nptir)
71 INTEGER,
INTENT(IN) :: IKLE(sizikl,*)
72 INTEGER,
INTENT(INOUT) :: IFABOR(nelmax,*)
73 INTEGER,
INTENT(INOUT) :: NVOIS(npoin),IADR(npoin)
77 INTEGER NFACE,NDP,KEL,IMAX,IFACE,IELEM,M1,M2,IV,IELEM2,IFACE2
78 INTEGER I,J,ERR,IR1,IR2,IR3,IR4,I1,I2,IDIMAT
80 INTEGER :: SOMFAC(2,4,2)
81 parameter( somfac = reshape( (/
82 & 1,2 , 2,3 , 3,1 , 0,0 ,
83 & 1,2 , 2,3 , 3,4 , 4,1 /), shape=(/ 2,4,2 /) ) )
87 INTEGER,
DIMENSION(:),
ALLOCATABLE :: MAT1,MAT2,MAT3
98 ELSEIF(ielm.EQ.11.OR.ielm.EQ.41.OR.ielm.EQ.51)
THEN 107 99
FORMAT(1x,
'VOISIN: IELM=',1i6,
' TYPE OF ELEMENT NOT AVAILABLE')
117 ALLOCATE(mat1(idimat),stat=err)
118 ALLOCATE(mat2(idimat),stat=err)
119 ALLOCATE(mat3(idimat),stat=err)
123 2000
FORMAT(1x,
'VOISIN: ERROR DURING ALLOCATION OF MEMORY: ',/,1x,
124 &
'ERROR CODE: ',1i6)
141 i1 = ikle( ielem , somfac(1,iface,kel) )
142 i2 = ikle( ielem , somfac(2,iface,kel) )
143 nvois(i1) = nvois(i1) + 1
144 nvois(i2) = nvois(i2) + 1
155 iadr(i) = iadr(i-1) + nvois(i-1)
158 imax = iadr(npoin) + nvois(npoin) - 1
159 IF(imax.GT.idimat)
THEN 160 WRITE(
lu,52) idimat,imax
161 52
FORMAT(1x,
'VOISIN: SIZE OF MAT1,2,3 (',1i9,
') TOO SHORT',/,
162 & 1x,
'MINIMUM SIZE: ',1i9)
182 ifabor(ielem,iface) = -1
186 i1 = ikle( ielem , somfac(1,iface,kel) )
187 i2 = ikle( ielem , somfac(2,iface,kel) )
196 IF(mat1(iadr(m1)+iv-1).EQ.0)
THEN 197 mat1(iadr(m1)+iv-1)=m2
198 mat2(iadr(m1)+iv-1)=ielem
199 mat3(iadr(m1)+iv-1)=iface
201 ELSEIF(mat1(iadr(m1)+iv-1).EQ.m2)
THEN 202 ielem2 = mat2(iadr(m1)+iv-1)
203 iface2 = mat3(iadr(m1)+iv-1)
204 ifabor(ielem,iface) = ielem2
205 ifabor(ielem2,iface2) = ielem
212 83
FORMAT(1x,
'VOISIN : ERROR IN THE MESH ',/,1x,
213 &
' MAYBE SUPERIMPOSED POINTS ')
233 IF(ifabor(ielem,iface).EQ.-1)
THEN 235 i1 = ikle( ielem , somfac(1,iface,kel) )
236 i2 = ikle( ielem , somfac(2,iface,kel) )
243 IF(i1.EQ.nachb(1,j)) ir1=1
244 IF(i2.EQ.nachb(1,j)) ir2=1
248 IF(ir1.EQ.1.AND.ir2.EQ.1)
THEN 254 IF(i1.EQ.nbor(j)) ir3=1
255 IF(i2.EQ.nbor(j)) ir4=1
258 IF(ir3.EQ.0.OR.ir4.EQ.0)
THEN 259 ifabor(ielem,iface)=-2
subroutine voisin(IFABOR, NELEM, NELMAX, IELM, IKLE, SIZIKL, NPOIN, NACHB, NBOR, NPTFR, IADR, NVOIS)