19 & (nameseu, nparts, knogl, npoin2)
31 USE bief, ONLY : nbmaxnshare
35 CHARACTER(LEN=PATH_LEN),
INTENT(IN) :: NAMESEU
36 INTEGER,
INTENT(IN) :: NPARTS
38 INTEGER,
INTENT(IN) :: NPOIN2
42 CHARACTER(LEN=PATH_LEN) :: NAMEOUT
44 INTEGER I,J,K,L,M,N,IERR,POSI
45 INTEGER :: NSEU, NBSEU, OPSEU, JJ, PROC
47 INTEGER,
ALLOCATABLE :: NUM_SEU1(:,:), NUM_SEU2(:,:)
48 INTEGER,
ALLOCATABLE :: NUM_SEU1_P(:,:,:), NUM_SEU2_P(:,:,:)
49 INTEGER,
ALLOCATABLE :: SEU_P(:,:), CSEU_P(:,:), P_CSEU(:,:)
50 INTEGER,
ALLOCATABLE :: LRECV_P(:,:), NRECV_P(:)
51 INTEGER,
ALLOCATABLE :: LSEND_PP(:,:,:), LSEND_P(:,:), NSEND_P(:)
52 INTEGER,
ALLOCATABLE :: LIST_TMP(:,:)
53 INTEGER,
ALLOCATABLE :: IP1(:), IP2(:)
54 INTEGER,
ALLOCATABLE :: DEBSEU(:), FINSEU(:)
55 DOUBLE PRECISION :: RELAX
56 DOUBLE PRECISION,
ALLOCATABLE :: XSEU1(:), YSEU1(:), ZSEU1(:)
57 DOUBLE PRECISION,
ALLOCATABLE :: XSEU2(:), YSEU2(:), ZSEU2(:)
58 DOUBLE PRECISION,
ALLOCATABLE :: RP1(:), RP2(:)
59 INTEGER,
ALLOCATABLE :: PART_P(:,:)
60 CHARACTER(LEN=11) :: EXTENS
62 CHARACTER(LEN=10) FMT1
65 CALL get_free_id(nseu)
66 OPEN(nseu,file=trim(nameseu),form=
'FORMATTED',status=
'OLD')
69 READ(nseu,*,end=304,err=305)
70 READ(nseu,*,end=304,err=305) n, k, relax
72 READ(nseu,*,end=304,err=305)
73 READ(nseu,*,end=304,err=305) k
76 READ(nseu,*,end=304,err=305)
81 ALLOCATE (xseu1(nbseu), stat=ierr)
82 CALL check_allocate(ierr,
'XSEU1')
84 ALLOCATE (yseu1(nbseu), stat=ierr)
85 CALL check_allocate(ierr,
'YSEU1')
87 ALLOCATE (zseu1(nbseu), stat=ierr)
88 CALL check_allocate(ierr,
'ZSEU1')
90 ALLOCATE (xseu2(nbseu), stat=ierr)
91 CALL check_allocate(ierr,
'XSEU2')
93 ALLOCATE (yseu2(nbseu), stat=ierr)
94 CALL check_allocate(ierr,
'YSEU2')
96 ALLOCATE (zseu2(nbseu), stat=ierr)
97 CALL check_allocate(ierr,
'ZSEU2')
99 ALLOCATE (rp1(nbseu), stat=ierr)
100 CALL check_allocate(ierr,
'RP1')
102 ALLOCATE (rp2(nbseu), stat=ierr)
103 CALL check_allocate(ierr,
'RP2')
105 ALLOCATE (ip1(nbseu), stat=ierr)
106 CALL check_allocate(ierr,
'IP1')
108 ALLOCATE (ip2(nbseu), stat=ierr)
109 CALL check_allocate(ierr,
'IP2')
111 ALLOCATE (debseu(nbseu), stat=ierr)
112 CALL check_allocate(ierr,
'DEBSEU')
114 ALLOCATE (finseu(nbseu), stat=ierr)
115 CALL check_allocate(ierr,
'FINSEU')
117 ALLOCATE (num_seu1(4,nbseu), stat=ierr)
118 CALL check_allocate(ierr,
'NUM_SEU1')
120 ALLOCATE (num_seu2(4,nbseu), stat=ierr)
121 CALL check_allocate(ierr,
'NUM_SEU2')
124 READ(nseu,*,end=304,err=305)
125 READ(nseu,*,end=304,err=305) n, opseu, relax
128 READ(nseu,*,end=304,err=305)
129 READ(nseu,*,end=304,err=305) jj
130 READ(nseu,*,end=304,err=305)
131 READ(nseu,*,end=304,err=305)
132 READ(nseu,*,end=304,err=305)
137 READ(nseu,*,end=304,err=305) i,
138 & xseu1(j), yseu1(j), zseu1(j),
139 & (num_seu1(k,j), k = 1,4),
140 & xseu2(j), yseu2(j), zseu2(j),
141 & (num_seu2(k,j), k = 1,4),
142 & ip1(j), ip2(j), rp1(j), rp2(j)
149 ALLOCATE (part_p(npoin2,0:nbmaxnshare),stat=ierr)
150 CALL check_allocate(ierr,
'PART_P')
157 part_p(i,0)=part_p(i,0)+1
164 ALLOCATE (seu_p(nbseu,nparts),stat=ierr)
165 CALL check_allocate(ierr,
'SEU_P')
167 ALLOCATE (cseu_p(nbseu,0:nbmaxnshare),stat=ierr)
168 CALL check_allocate(ierr,
'CSEU_P')
170 ALLOCATE (p_cseu(nparts,0:nbseu))
171 CALL check_allocate(ierr,
'P_CSEU')
191 IF (seu_p(j,n)>0)
THEN 192 cseu_p(j,0)=cseu_p(j,0)+1
203 p_cseu(proc,0) = p_cseu(proc,0)+1
204 posi = p_cseu(proc,0)
205 p_cseu(proc,posi) = j
209 ALLOCATE (nrecv_p(nparts),stat=ierr)
210 CALL check_allocate(ierr,
'NRECV_P')
212 ALLOCATE (lrecv_p(8*nbseu,nparts),stat=ierr)
213 CALL check_allocate(ierr,
'LRECV_P')
220 IF (seu_p(j,n)>0)
THEN 223 IF (num_seu1(k,j) == lrecv_p(l,n))
GOTO 602
224 IF (num_seu1(k,j) < lrecv_p(l,n))
GOTO 601
227 nrecv_p(n)=nrecv_p(n)+1
228 DO i= nrecv_p(n),l+1,-1
229 lrecv_p(i,n) = lrecv_p(i-1,n)
231 lrecv_p(l,n)=num_seu1(k,j)
235 IF (num_seu2(k,j) == lrecv_p(l,n))
GOTO 604
236 IF (num_seu2(k,j) < lrecv_p(l,n))
GOTO 603
239 nrecv_p(n)=nrecv_p(n)+1
240 DO i= nrecv_p(n),l+1,-1
241 lrecv_p(i,n) = lrecv_p(i-1,n)
243 lrecv_p(l,n)=num_seu2(k,j)
250 ALLOCATE (nsend_p(nparts),stat=ierr)
251 CALL check_allocate(ierr,
'NSEND_P')
253 ALLOCATE (lsend_p(8*nbseu,nparts),stat=ierr)
254 CALL check_allocate(ierr,
'LSEND_P')
256 ALLOCATE (lsend_pp(nbmaxnshare,8*nbseu,nparts),stat=ierr)
257 CALL check_allocate(ierr,
'LSEND_PP')
269 IF (num_seu1(k,j) == lsend_p(l,n))
GOTO 702
270 IF (num_seu1(k,j) < lsend_p(l,n))
GOTO 701
273 nsend_p(n)=nsend_p(n)+1
274 DO i= nsend_p(n),l+1,-1
275 lsend_p(i,n) = lsend_p(i-1,n)
276 lsend_pp(:,i,n) = lsend_pp(:,i-1,n)
278 lsend_p(l,n)=num_seu1(k,j)
282 DO jj = 1, nbmaxnshare
283 IF (cseu_p(j,i) == lsend_pp(jj,l,n))
GOTO 703
284 IF (lsend_pp(jj,l,n) == 0)
THEN 285 lsend_pp(jj,l,n) = cseu_p(j,i)
295 IF (num_seu2(k,j) == lsend_p(l,n))
GOTO 705
296 IF (num_seu2(k,j) < lsend_p(l,n))
GOTO 704
299 nsend_p(n)=nsend_p(n)+1
300 DO i= nsend_p(n),l+1,-1
301 lsend_p(i,n) = lsend_p(i-1,n)
302 lsend_pp(:,i,n) = lsend_pp(:,i-1,n)
304 lsend_p(l,n)=num_seu2(k,j)
308 DO jj = 1, nbmaxnshare
309 IF (cseu_p(j,i) == lsend_pp(jj,l,n))
GOTO 706
310 IF (lsend_pp(jj,l,n) == 0)
THEN 311 lsend_pp(jj,l,n) = cseu_p(j,i)
322 ALLOCATE (num_seu1_p(4,nbseu,nparts), stat=ierr)
323 CALL check_allocate(ierr,
'NUM_SEU1_P')
325 ALLOCATE (num_seu2_p(4,nbseu,nparts), stat=ierr)
326 CALL check_allocate(ierr,
'NUM_SEU2_P')
331 IF (seu_p(j,n)>0)
THEN 334 IF (num_seu1(k,j)==lrecv_p(l,n))
THEN 335 num_seu1_p(k,j,n) = l
339 WRITE(
lu,*)
'HOUSTON ON A UN PROBLEME (1)', j, k, l
345 IF (num_seu2(k,j)==lrecv_p(l,n))
THEN 346 num_seu2_p(k,j,n) = l
350 WRITE(
lu,*)
'HOUSTON ON A UN PROBLEME (2)', j, k, l
358 CALL get_free_id(nout)
360 nameout=trim(nameseu)//extens(nparts-1,n-1)
361 WRITE(
lu,*)
'WRITING: ', trim(nameout)
362 OPEN (nout,file=trim(nameout),form=
'FORMATTED',status=
'NEW')
363 WRITE(nout,*)
' NB DE SINGULARITES OPTION UTAN' 364 WRITE(nout,*)
'1 ', opseu, relax
365 WRITE(nout,*)
'#Comment line' 366 WRITE(nout,*) sum(seu_p(:,n))
367 WRITE(nout,*)
'#Comment line' 368 WRITE(nout,*)
'#Comment line' 369 WRITE(nout,*)
'#Comment line' 372 IF (seu_p(j,n)>0)
THEN 373 1000
FORMAT(i0,1x,3(f27.15, 1x), 4(i0, 1x),
374 & 3(f27.15, 1x), 4(i0, 1x),
375 & 2(i0, 1x), 2(f27.15, 1x),
378 & xseu1(j), yseu1(j), zseu1(j),
379 & (num_seu1_p(k,j,n), k = 1,4),
380 & xseu2(j), yseu2(j), zseu2(j),
381 & (num_seu2_p(k,j,n), k = 1,4),
382 & ip1(j), ip2(j), rp1(j), rp2(j),
383 & debseu(j), finseu(j)
388 &
' /1/ : FOR EACH ELEMENT, NUMBER AND LIST OF SD'//
389 &
' WHICH WILL ALSO COMPUTE DISCHARGE ON IT' 391 ALLOCATE (list_tmp(1,nbmaxnshare),stat=ierr)
392 CALL check_allocate(ierr,
'LIST_TMP')
394 IF (seu_p(j,n)>0)
THEN 398 IF((cseu_p(j,k)>0).AND.(cseu_p(j,k)/=n))
THEN 400 list_tmp(1,i) = cseu_p(j,k)
405 WRITE(nout,*) (list_tmp(1,k)-1, k=1,i)
409 DEALLOCATE (list_tmp)
412 &
' /2/ : FOR EACH SD, NUMBER AND LIST OF ELEMENT'//
413 &
' WHICH WILL BE COMPUTED' 419 IF (seu_p(p_cseu(l,j),n)>0)
THEN 429 ALLOCATE (list_tmp(1,nbseu),stat=ierr)
430 CALL check_allocate(ierr,
'LIST_TMP')
436 IF (seu_p(p_cseu(l,j),n)>0)
THEN 438 list_tmp(1,i) = p_cseu(l,j)
442 WRITE(nout,
'(I0,1X,I0)') l-1, i
444 WRITE(fmt1,
'(I0)') i
445 WRITE(nout,
'('//adjustl(fmt1)//
'(I0,1X))')
446 & (list_tmp(1,k), k=1,i)
450 DEALLOCATE (list_tmp)
454 &
' /3/ : FOR EACH NODE REQUIRED BY THE SD TO'//
455 &
' COMPUTE THE DISCHARGE, NUMBER, LIST AND LOCAL'//
456 &
' NUMBERING OF NODES FROM ALL INVOLVED SD' 457 ALLOCATE (list_tmp(2,nbmaxnshare),stat=ierr)
458 CALL check_allocate(ierr,
'LIST_TMP')
459 WRITE(nout,*) nrecv_p(n)
460 IF (nrecv_p(n)>0)
THEN 464 DO k=1, part_p(lrecv_p(i,n),0)
466 list_tmp(1,k) = part_p(lrecv_p(i,n),k)
468 & lrecv_p(i,n),part_p(lrecv_p(i,n),k))
470 WRITE(nout,
'(I0,1X,I0)') lrecv_p(i,n), j
472 WRITE(fmt1,
'(I0)') j
473 WRITE(nout,
'('//adjustl(fmt1)//
'(I0,1X,I0,1X))')
474 & (list_tmp(1,k)-1,list_tmp(2,k), k=1,j)
477 DEALLOCATE (list_tmp)
480 &
' /4/ : FOR EACH OTHER SD WHICH SEND VALUES,'//
481 &
' NUMBER AND LIST OF NODE (WITH LOCAL NUMBER)' 483 IF (nrecv_p(n)>0)
THEN 484 ALLOCATE (list_tmp(nparts,3*nrecv_p(n)),stat=ierr)
485 CALL check_allocate(ierr,
'LIST_TMP')
488 DO k=1, part_p(lrecv_p(i,n),0)
490 IF (list_tmp(j,1) == part_p(lrecv_p(i,n),k))
GOTO 522
491 IF (list_tmp(j,1) > part_p(lrecv_p(i,n),k))
GOTO 521
496 list_tmp(m,1) = list_tmp(m-1,1)
498 list_tmp(j,1) = part_p(lrecv_p(i,n),k)
503 WRITE(nout,
'(I0)') proc
510 IF (part_p(jj,k)==list_tmp(m,1))
THEN 511 list_tmp(m,posi ) = i
512 list_tmp(m,posi+1) = jj
519 WRITE(nout,
'(I0,1X,I0)') list_tmp(m,1)-1, (posi-1)/3
521 WRITE(fmt1,
'(I0)') (posi-1)/3
523 WRITE(nout,
'('//adjustl(fmt1)//
'(I0,1X))')
524 & (list_tmp(m,3*k-1), k=1,(posi-1)/3)
525 WRITE(nout,
'('//adjustl(fmt1)//
'(I0,1X))')
526 & (list_tmp(m,3*k ), k=1,(posi-1)/3)
527 WRITE(nout,
'('//adjustl(fmt1)//
'(I0,1X))')
528 & (list_tmp(m,3*k+1), k=1,(posi-1)/3)
531 IF (
ALLOCATED(list_tmp))
DEALLOCATE(list_tmp)
536 &
' /5/ : FOR EACH NODE INSIDE THE SD, NUMBER AND'//
537 &
' LIST OF OTHERS SD WHICH ALSO NEED THE VALUE' 538 ALLOCATE (list_tmp(2,nbmaxnshare),stat=ierr)
539 CALL check_allocate(ierr,
'LIST_TMP')
540 WRITE(nout,
'(I0)') nsend_p(n)
541 IF (nsend_p(n)>0)
THEN 546 IF (lsend_pp(k,i,n)>0)
THEN 548 list_tmp(1,j) = lsend_pp(k,i,n)
551 WRITE(nout,
'(I0,1X,I0)') lsend_p(i,n), j
553 WRITE(fmt1,
'(I0)') j
554 WRITE(nout,
'('//adjustl(fmt1)//
'(I0,1X))')
555 & (list_tmp(1,k)-1, k=1,j)
558 DEALLOCATE (list_tmp)
561 &
' /6/ : FOR EACH OTHER SD WHICH NEEDS NODE '//
562 &
'VALUES, NUMBER AND LIST OF NODES' 564 IF (nsend_p(n)>0)
THEN 565 ALLOCATE (list_tmp(nparts,3*nsend_p(n)+1),stat=ierr)
566 CALL check_allocate(ierr,
'LIST_TMP')
570 IF (lsend_pp(k,i,n)>0)
THEN 572 IF (list_tmp(j,1) == lsend_pp(k,i,n))
GOTO 512
573 IF (list_tmp(j,1) > lsend_pp(k,i,n))
GOTO 511
578 list_tmp(m,1) = list_tmp(m-1,1)
580 list_tmp(j,1) = lsend_pp(k,i,n)
588 IF (nsend_p(n)>0)
THEN 594 IF (lsend_pp(k,i,n)==list_tmp(m,1))
THEN 596 DO WHILE (lrecv_p(j,n) /= jj)
599 list_tmp(m,posi ) = j
600 list_tmp(m,posi+1) = jj
602 DO WHILE (part_p(jj,j) /= n)
613 WRITE(fmt1,
'(I0)') j
614 WRITE(nout,
'(I0,1X,I0)') list_tmp(m,1)-1, j
615 WRITE(nout,
'('//adjustl(fmt1)//
'(I0,1X))')
616 & (list_tmp(m,3*k-1), k=1,j)
617 WRITE(nout,
'('//adjustl(fmt1)//
'(I0,1X))')
618 & (list_tmp(m,3*k ), k=1,j)
619 WRITE(nout,
'('//adjustl(fmt1)//
'(I0,1X))')
620 & (list_tmp(m,3*k+1), k=1,j)
622 IF (
ALLOCATED(list_tmp))
DEALLOCATE (list_tmp)
642 DEALLOCATE(num_seu1_p)
643 DEALLOCATE(num_seu2_p)
654 304
WRITE(
lu,*)
'ABNORMAL END OF FILE' 656 305
WRITE(
lu,*)
'ERROR WITH WEIR FILE FORMAT'
integer function hash_table_get(HT, X, Y)
subroutine handle_weirs(NAMESEU, NPARTS, KNOGL, NPOIN2)