5 &(nfrliq,lihbor,liubor,
6 & x,y,nbor,kp1bor,dejavu,npoin,nptfr,klog,listin,numliq,maxfro)
70 INTEGER,
INTENT(IN) :: NPOIN,NPTFR,KLOG,MAXFRO
71 INTEGER,
INTENT(OUT) :: NFRLIQ
72 INTEGER ,
INTENT(IN) :: LIHBOR(nptfr),LIUBOR(nptfr)
73 DOUBLE PRECISION,
INTENT(IN) :: X(npoin) , Y(npoin)
74 INTEGER,
INTENT(IN) :: NBOR(nptfr),KP1BOR(nptfr)
75 INTEGER,
INTENT(OUT) :: DEJAVU(nptfr)
76 LOGICAL,
INTENT(IN) :: LISTIN
77 INTEGER,
INTENT(OUT) :: NUMLIQ(nptfr)
81 INTEGER K,KPREV,IDEP,SOL1,LIQ1,L1,L2,L3,NILE
83 LOGICAL SOLF,LIQF,SOLD,LIQD
85 DOUBLE PRECISION MINNS,MAXNS,EPS,YMIN,NS
86 DOUBLE PRECISION,
PARAMETER :: EPSS=1.d-6
89 INTEGER,
ALLOCATABLE :: TMP(:)
90 INTEGER,
ALLOCATABLE :: DEBLIQ(:),FINLIQ(:)
91 INTEGER,
ALLOCATABLE :: DEBSOL(:),FINSOL(:)
109 ALLOCATE(debliq(maxfroliq),stat=ierr)
110 CALL check_allocate(ierr,
'DEBLIQ')
111 ALLOCATE(finliq(maxfroliq),stat=ierr)
112 CALL check_allocate(ierr,
'FINLIQ')
113 ALLOCATE(debsol(maxfrosol),stat=ierr)
114 CALL check_allocate(ierr,
'DEBSOL')
115 ALLOCATE(finsol(maxfrosol),stat=ierr)
116 CALL check_allocate(ierr,
'FINSOL')
135 minns = x(nbor(idep)) + y(nbor(idep))
140 IF(dejavu(k).EQ.0)
THEN 141 ns = x(nbor(k)) + y(nbor(k))
147 IF(ns.GT.maxns) maxns = ns
151 eps = (maxns-minns) * 1.d-4
156 IF(dejavu(k).EQ.0)
THEN 157 ns = x(nbor(k)) + y(nbor(k))
158 IF(abs(minns-ns).LT.eps)
THEN 159 IF(y(nbor(k)).LT.ymin)
THEN 189 IF(lihbor(k).EQ.klog.OR.lihbor(kp1bor(k)).EQ.klog)
THEN 192 IF(nfrsol.GT.maxfrosol)
THEN 194 ALLOCATE(tmp(maxfrosol),stat=ierr)
195 CALL check_allocate(ierr,
'TMP')
199 ALLOCATE(debsol(maxfrosol*10),stat=ierr)
200 CALL check_allocate(ierr,
'DEBSOL_UP')
201 debsol(1:maxfrosol) = tmp
205 ALLOCATE(finsol(maxfrosol*10),stat=ierr)
206 CALL check_allocate(ierr,
'FINSOL_UP')
207 finsol(1:maxfrosol) = tmp
210 maxfrosol = maxfrosol*10
221 IF(nfrliq.GT.maxfroliq)
THEN 223 ALLOCATE(tmp(maxfroliq),stat=ierr)
224 CALL check_allocate(ierr,
'TMP')
228 ALLOCATE(debliq(maxfroliq*10),stat=ierr)
229 CALL check_allocate(ierr,
'DEBLIQ_UP')
230 debliq(1:maxfroliq) = tmp
234 ALLOCATE(finliq(maxfroliq*10),stat=ierr)
235 CALL check_allocate(ierr,
'FINLIQ_UP')
236 finliq(1:maxfroliq) = tmp
239 maxfroliq = maxfroliq*10
261 l3 = lihbor(kp1bor(k))
263 IF(l1.EQ.klog.AND.l2.NE.klog.AND.l3.NE.klog)
THEN 266 IF(nfrliq.GT.maxfroliq)
THEN 268 ALLOCATE(tmp(maxfroliq),stat=ierr)
269 CALL check_allocate(ierr,
'TMP')
273 ALLOCATE(debliq(maxfroliq*10),stat=ierr)
274 CALL check_allocate(ierr,
'DEBLIQ_UP')
275 debliq(1:maxfroliq) = tmp
279 ALLOCATE(finliq(maxfroliq*10),stat=ierr)
280 CALL check_allocate(ierr,
'FINLIQ_UP')
281 finliq(1:maxfroliq) = tmp
284 maxfroliq = maxfroliq*10
290 ELSEIF(l1.NE.klog.AND.l2.NE.klog.AND.l3.EQ.klog)
THEN 293 IF(nfrsol.GT.maxfrosol)
THEN 295 ALLOCATE(tmp(maxfrosol),stat=ierr)
296 CALL check_allocate(ierr,
'TMP')
300 ALLOCATE(debsol(maxfrosol*10),stat=ierr)
301 CALL check_allocate(ierr,
'DEBSOL_UP')
302 debsol(1:maxfrosol) = tmp
306 ALLOCATE(finsol(maxfrosol*10),stat=ierr)
307 CALL check_allocate(ierr,
'FINSOL_UP')
308 finsol(1:maxfrosol) = tmp
311 maxfrosol = maxfrosol*10
317 ELSEIF(l1.NE.klog.AND.l2.NE.klog.AND.l3.NE.klog)
THEN 321 IF(l2.NE.l3.OR.liubor(k).NE.liubor(kp1bor(k)))
THEN 324 IF(nfrliq.GT.maxfroliq)
THEN 326 ALLOCATE(tmp(maxfroliq),stat=ierr)
327 CALL check_allocate(ierr,
'TMP')
331 ALLOCATE(debliq(maxfroliq*10),stat=ierr)
332 CALL check_allocate(ierr,
'DEBLIQ_UP')
333 debliq(1:maxfroliq) = tmp
337 ALLOCATE(finliq(maxfroliq*10),stat=ierr)
338 CALL check_allocate(ierr,
'FINLIQ_UP')
339 finliq(1:maxfroliq) = tmp
342 maxfroliq = maxfroliq*10
343 debliq(nfrliq) = kp1bor(k)
345 debliq(nfrliq) = kp1bor(k)
347 ELSEIF(l1.EQ.klog.AND.l2.NE.klog.AND.l3.EQ.klog)
THEN 349 WRITE(
lu,103) k, nbor(k)
352 ELSEIF(l1.NE.klog.AND.l2.EQ.klog.AND.l3.NE.klog)
THEN 354 WRITE(
lu,105) k, nbor(k)
362 IF(k.NE.idep)
GO TO 50
370 IF( sol1.NE.nfrsol )
THEN 371 debsol(sol1) = debsol(nfrsol)
377 finsol(nfrsol) = idep
384 IF( liq1.NE.nfrliq )
THEN 385 debliq(liq1) = debliq(nfrliq)
391 finliq(nfrliq) = idep
399 ELSEIF(liq1.NE.0)
THEN 404 WRITE(
lu,
'(1X,A)')
'IMPOSSIBLE CASE IN FRONT2' 416 IF(dejavu(k).EQ.0)
THEN 433 IF(nile.NE.0.AND.listin)
WRITE(
lu,169) nile
436 IF(listin)
WRITE(
lu,170) nfrliq
445 IF(l1.NE.finliq(k))
GO TO 707
449 IF(listin)
WRITE(
lu,190)
450 & k,debliq(k),nbor(debliq(k)),
451 & x(nbor(debliq(k))),y(nbor(debliq(k))),
452 & finliq(k),nbor(finliq(k)),
453 & x(nbor(finliq(k))),y(nbor(finliq(k)))
458 IF(listin)
WRITE(
lu,101) nfrsol
460 IF(listin)
WRITE(
lu,190)
461 & k,debsol(k),nbor(debsol(k)),
462 & x(nbor(debsol(k))),y(nbor(debsol(k))),
463 & finsol(k),nbor(finsol(k)),
464 & x(nbor(finsol(k))),y(nbor(finsol(k)))
476 169
FORMAT(/,1x,
'THERE IS ',1i5,
' ISLAND(S) IN THE DOMAIN')
477 170
FORMAT(/,1x,
'THERE IS ',1i5,
' LIQUID BOUNDARIES:')
478 101
FORMAT(/,1x,
'THERE IS ',1i5,
' SOLID BOUNDARIES:')
479 103
FORMAT(/,1x,
'FRONT2 : ERROR AT BOUNDARY POINT ',1i8,
480 & /,1x,
' LOCAL NUMBER ',1i8,
481 & /,1x,
' LIQUID POINT BETWEEN TWO SOLID POINTS')
482 105
FORMAT(/,1x,
'FRONT2 : ERROR AT BOUNDARY POINT ',1i8,
483 & /,1x,
' LOCAL NUMBER ',1i8,
484 & /,1x,
' SOLID POINT BETWEEN TWO LIQUID POINTS')
485 190
FORMAT(/,1x,
'BOUNDARY ',1i4,
' : ',/,1x,
486 &
' BEGINS AT BOUNDARY POINT: ',1i8,
487 &
' , WITH GLOBAL NUMBER: ',1i9,/,1x,
488 &
' AND COORDINATES: ',g16.7,3x,g16.7,
489 & /,1x,
' ENDS AT BOUNDARY POINT: ',1i8,
490 &
' , WITH GLOBAL NUMBER: ',1i9,/,1x,
491 &
' AND COORDINATES: ',g16.7,3x,g16.7)
subroutine front2(NFRLIQ, LIHBOR, LIUBOR, X, Y, NBOR, KP1BOR, DEJAVU, NPOIN, NPTFR, KLOG, LISTIN, NUMLIQ, MAXFRO)