5 &(zf,zref,zfe,ikle,ifabor,nbor,nelbor,nulone,
6 & itra05,itra02,itra03,nelem,nptfr,npoin,mxptvs)
64 INTEGER,
INTENT(IN) :: NELEM,NPTFR,NPOIN,MXPTVS
65 INTEGER,
INTENT(IN) :: IKLE(nelem,3),IFABOR(nelem,3)
66 INTEGER,
INTENT(IN) :: NBOR(nptfr),NELBOR(nptfr),NULONE(nptfr)
67 INTEGER,
INTENT(INOUT) :: ITRA05(npoin),ITRA02(npoin)
68 INTEGER,
INTENT(INOUT) :: ITRA03(npoin)
69 DOUBLE PRECISION,
INTENT(INOUT) :: ZFE(nelem),ZREF(npoin)
70 DOUBLE PRECISION,
INTENT(IN) :: ZF(npoin)
74 INTEGER IELEM,IPTFR,IPOIN,I,I1,I2,I3,N1,N2,ERR,IMAX
79 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: ITRA01,ITRA04,IFAN
82 parameter( iprev = (/ 3 , 1 , 2 /) )
83 DOUBLE PRECISION,
PARAMETER :: EPSILO = 1.d-6
87 ALLOCATE(ifan(nelem,3) ,stat=err)
88 CALL check_allocate(err,
'IFAN')
89 ALLOCATE(itra01(npoin,mxptvs+1) ,stat=err)
90 CALL check_allocate(err,
'ITRA01')
91 ALLOCATE(itra04(npoin,6) ,stat=err)
92 CALL check_allocate(err,
'ITRA04')
132 IF(ikle(n1,1).EQ.i1) ifan(ielem,1) = 3
133 IF(ikle(n1,2).EQ.i1) ifan(ielem,1) = 1
134 IF(ikle(n1,3).EQ.i1) ifan(ielem,1) = 2
140 IF(ikle(n1,1).EQ.i2) ifan(ielem,2) = 3
141 IF(ikle(n1,2).EQ.i2) ifan(ielem,2) = 1
142 IF(ikle(n1,3).EQ.i2) ifan(ielem,2) = 2
148 IF(ikle(n1,1).EQ.i3) ifan(ielem,3) = 3
149 IF(ikle(n1,2).EQ.i3) ifan(ielem,3) = 1
150 IF(ikle(n1,3).EQ.i3) ifan(ielem,3) = 2
153 zfe(ielem) = max(zf(i1),zf(i2),zf(i3))
174 itra01(nbor(iptfr),1) = nelbor(iptfr)
175 itra02(nbor(iptfr)) = nulone(iptfr)
208 IF (imax.GT.mxptvs+1)
THEN 210 24
FORMAT(1x,
'TOPOGR : THE MAXIMUM NUMBER OF NEIGHBOURS TO'/,1x,
211 &
' A POINT IS GREATER THAN THE VALUE ',/,1x,
212 &
' GIVEN BY MXPTVS :',1i6)
219 IF (itra03(ipoin).EQ.0)
THEN 220 n1 = itra01(ipoin,imax)
223 n2 = ifabor(n1,iprev(itra02(ipoin)))
225 itra01(ipoin,imax+1) = n2
226 itra02(ipoin) = ifan(n1,iprev(itra02(ipoin)))
227 IF (n2.LE.0) itra03(ipoin) = -imax
228 IF (n2.EQ.itra01(ipoin,1)) itra03(ipoin) = imax
259 IF (itra03(ipoin).GE.i.OR.itra03(ipoin).LT.-i)
THEN 262 n2 = itra01(ipoin,i+1)
264 IF (zfe(n2).GT.zfe(n1)+epsilo)
THEN 265 IF (itra02(ipoin).LT.0) itra04(ipoin,-itra02(ipoin))=i
266 IF (itra02(ipoin).LE.0) itra02(ipoin)=-itra02(ipoin)+1
267 ELSEIF (zfe(n2).LT.zfe(n1)-epsilo)
THEN 268 IF (itra02(ipoin).GT.0) itra04(ipoin, itra02(ipoin))=i
269 IF (itra02(ipoin).GE.0) itra02(ipoin)=-itra02(ipoin)-1
279 IF((itra03(ipoin).LT.0.AND.(itra02(ipoin).LE.-4.OR.
280 & itra02(ipoin).GE.5)).OR.abs(itra02(ipoin)).GE.6)
THEN 281 WRITE(
lu,*)
'THE MESH AROUND THE NODE ',ipoin,
' HAS TO' 282 WRITE(
lu,*)
'BE REFINED BECAUSE OF THE BATHYMETRY' 311 IF (itra02(ipoin).EQ.-2)
THEN 314 IF (zfe(itra01(ipoin,-i1)).GT.zfe(itra01(ipoin,1)))
THEN 315 itra02(ipoin) = itra04(ipoin,1) + 1
319 itra05(ipoin) = itra04(ipoin,1) - 1
321 zref(ipoin) = zfe(itra01(ipoin,itra04(ipoin,1)))
323 ELSEIF (itra02(ipoin).EQ.3)
THEN 326 IF (zfe(itra01(ipoin,itra04(ipoin,2))).GT.
327 & zfe(itra01(ipoin,1)))
THEN 328 itra02(ipoin) = itra04(ipoin,1) + 1
332 itra05(ipoin) = itra04(ipoin,1) - 1
334 zref(ipoin) = zfe(itra01(ipoin,itra04(ipoin,1)))
336 ELSEIF (itra02(ipoin).EQ.-3)
THEN 339 IF (zfe(itra01(ipoin,-i1)).GT.
340 & zfe(itra01(ipoin,itra04(ipoin,1))))
THEN 341 itra02(ipoin) = itra04(ipoin,2) + 1
345 itra05(ipoin) = itra04(ipoin,2) - 1
347 zref(ipoin) = zfe(itra01(ipoin,itra04(ipoin,2)))
349 ELSEIF (itra02(ipoin).EQ.4)
THEN 352 IF (zfe(itra01(ipoin,itra04(ipoin,3))).GT.
353 & zfe(itra01(ipoin,itra04(ipoin,1))))
THEN 354 itra02(ipoin) = itra04(ipoin,2) + 1
358 itra05(ipoin) = itra04(ipoin,2) - 1
360 zref(ipoin) = zfe(itra01(ipoin,itra04(ipoin,2)))
375 IF (itra02(ipoin).EQ.4)
THEN 378 IF (zfe(itra01(ipoin,itra04(ipoin,3))).GT.
379 & zfe(itra01(ipoin,itra04(ipoin,1))))
THEN 380 itra02(ipoin) = itra04(ipoin,2) + 1
384 itra05(ipoin) = itra04(ipoin,2) - 1
386 zref(ipoin) = min(zfe(itra01(ipoin,itra04(ipoin,2))),
387 & zfe(itra01(ipoin,1)))
389 ELSEIF (itra02(ipoin).EQ.-4)
THEN 392 IF (zfe(itra01(ipoin,itra04(ipoin,2))).GT.
393 & zfe(itra01(ipoin,1)))
THEN 394 itra02(ipoin) = itra04(ipoin,1) + 1
395 itra05(ipoin) = itra04(ipoin,3) - 1
397 itra02(ipoin) = mod(itra04(ipoin,3),i1) + 1
398 itra05(ipoin) = itra04(ipoin,1) - 1
400 zref(ipoin) = min(zfe(itra01(ipoin,itra04(ipoin,1))),
401 & zfe(itra01(ipoin,itra04(ipoin,3))))
403 ELSEIF (itra02(ipoin).EQ.5)
THEN 406 IF (zfe(itra01(ipoin,itra04(ipoin,4))).GT.
407 & zfe(itra01(ipoin,itra04(ipoin,2))))
THEN 408 itra02(ipoin) = itra04(ipoin,3) + 1
409 itra05(ipoin) = itra04(ipoin,1) - 1
411 itra02(ipoin) = itra04(ipoin,1) + 1
412 itra05(ipoin) = itra04(ipoin,3) - 1
414 zref(ipoin) = min(zfe(itra01(ipoin,itra04(ipoin,1))),
415 & zfe(itra01(ipoin,itra04(ipoin,3))))
417 ELSEIF (itra02(ipoin).EQ.-5)
THEN 420 IF (zfe(itra01(ipoin,itra04(ipoin,3))).GT.
421 & zfe(itra01(ipoin,itra04(ipoin,1))))
THEN 422 itra02(ipoin) = itra04(ipoin,2) + 1
423 itra05(ipoin) = itra04(ipoin,4) - 1
425 itra02(ipoin) = mod(itra04(ipoin,4),i1) + 1
426 itra05(ipoin) = itra04(ipoin,2) - 1
428 zref(ipoin) = min(zfe(itra01(ipoin,itra04(ipoin,2))),
429 & zfe(itra01(ipoin,itra04(ipoin,4))))
441 IF (itra05(ipoin).NE.0)
THEN 443 IF (itra05(ipoin).LT.itra02(ipoin))
THEN 444 DO i = itra02(ipoin),itra03(ipoin)
445 zfe(itra01(ipoin,i)) = max(zfe(itra01(ipoin,i)),
451 DO i = itra02(ipoin),itra05(ipoin)
452 zfe(itra01(ipoin,i)) = max(zfe(itra01(ipoin,i)),
subroutine topogr(ZF, ZREF, ZFE, IKLE, IFABOR, NBOR, NELBOR, NULONE, ITRA05, ITRA02, ITRA03, NELEM, NPTFR, NPOIN, MXPTVS)