48 USE bief, ONLY : ncsize
55 INTEGER NELEM,ECKEN,NDUM,I,J,K,NBV1,NBV2,PARAM(10)
56 INTEGER NPLAN,NPOIN2,NPOIN2LOC,NOQ2,NPLANLOC,NSEG2LOC,NOQ2LOC
57 INTEGER MBNDLOC,NPTFRLOC
58 INTEGER NPROC,NRESU,NPOINMAX,NSEGMAX,NOQMAX,NPTFRMAX
59 INTEGER I_S, I_SP, I_LEN
62 INTEGER IELM,NELEM2,NELMAX2,NPTFR2,NSEG2,KLOG,MBND2
63 INTEGER MAXNVOIS,ISEG,IG1,IG2,IGTEMP,IVOIS,IL1,IL2
65 INTEGER,
DIMENSION(:) ,
ALLOCATABLE :: NPOIN,VERIF,NOQ,NSEG
66 INTEGER,
DIMENSION(:) ,
ALLOCATABLE :: MBND,NODENRS,NPTFRL
67 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: KNOLG,KSEGLG
68 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: NODENRSLOC,NBORLOC
69 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: LIHBORLOC
70 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: IKLESA
71 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: NACHB,IFANUM
72 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ISEGF
75 REAL ,
DIMENSION(:) ,
ALLOCATABLE :: GLOBAL_VALUE
76 REAL ,
DIMENSION(:) ,
ALLOCATABLE :: LOCAL_VALUE
78 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: IKLE
79 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: IFABOR
80 INTEGER,
DIMENSION(:) ,
ALLOCATABLE :: NVOIS,IADR
82 INTEGER,
DIMENSION(:) ,
ALLOCATABLE :: NELBOR,LIHBOR
83 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: NULONE
84 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: KP1BOR
85 INTEGER,
DIMENSION(:) ,
ALLOCATABLE :: NBOR
86 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: IKLBOR
87 INTEGER,
DIMENSION(:) ,
ALLOCATABLE :: T3
88 INTEGER,
DIMENSION(:) ,
ALLOCATABLE :: NBOR0,LIHBOR0
90 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: GLOSEG
91 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: ELTSEG,ORISEG
93 INTEGER,
DIMENSION(:,:,:),
ALLOCATABLE :: GLOSEGLOC
94 INTEGER,
DIMENSION(:,:,:),
ALLOCATABLE :: SEGMENT
100 CHARACTER(LEN=30) RES
101 CHARACTER(LEN=50) RESPAR
102 CHARACTER(LEN=11) EXTENS
103 CHARACTER(LEN=30) CONLIM
104 CHARACTER(LEN=7) FILETYPE
114 WRITE(
lu,*)
'I AM GREDELSEG, COUSIN OF GRETEL FROM BAW HAMBURG' 119 WRITE (
lu, advance=
'NO',
120 & fmt=
'(/,'' GLOBAL GEOMETRY FILE: '')')
125 WRITE (
lu, advance=
'NO', fmt=
'(/,'' RESULT FILE: '')')
129 WRITE (
lu,advance=
'NO',fmt=
'(/,'' NUMBER OF PROCESSORS: '')')
133 INQUIRE (file=geo,exist=is)
135 WRITE (
lu,*)
'FILE DOES NOT EXIST: ', geo
143 IF(res(i_sp-i:i_sp-i) .NE.
' ')
EXIT 149 OPEN(2,file=geo,form=
'UNFORMATTED',status=
'OLD',err=990)
151 READ(2,err=990) nbv1,nbv2
156 990
WRITE(
lu,*)
'ERROR WHEN OPENING OR READING FILE: ',geo
161 READ(2) (param(i),i=1,10)
162 IF(param(10).EQ.1)
READ(2) (param(i),i=1,6)
166 OPEN(3,file=res,form=
'UNFORMATTED',err=991)
168 991
WRITE(
lu,*)
'ERROR WHEN OPENING FILE: ',res
177 respar=res(1:i_len) // extens(nproc-1,0)
179 INQUIRE (file=respar,exist=is)
181 WRITE (
lu,*)
'FILE DOES NOT EXIST: ', respar
182 WRITE (
lu,*)
'CHECK THE NUMBER OF PROCESSORS' 183 WRITE (
lu,*)
'AND THE RESULT FILE CORE NAME' 188 OPEN(4,file=respar,form=
'UNFORMATTED',err=994)
190 994
WRITE(
lu,*)
'ERROR WHEN OPENING FILE: ',respar
201 IF(nplan.EQ.1) nplan = 0
207 READ(2) nelem,npoin2,ecken,ndum
208 WRITE(
lu,*)
'4 PARAMETERS IN GEOMETRY FILE' 209 WRITE(
lu,*)
'NELEM=', nelem
210 WRITE(
lu,*)
'NPOIN2=', npoin2
211 WRITE(
lu,*)
'ECKEN=', ecken
212 WRITE(
lu,*)
'NDUM=', ndum
216 ALLOCATE(npoin(nproc),stat=err)
217 CALL check_allocate(err,
'NPOIN')
218 ALLOCATE(noq(nproc),stat=err)
219 CALL check_allocate(err,
'NOQ')
220 ALLOCATE(nseg(nproc),stat=err)
221 CALL check_allocate(err,
'NSEG')
222 ALLOCATE(mbnd(nproc),stat=err)
223 CALL check_allocate(err,
'MBND')
224 ALLOCATE(iklesa(3,nelem),stat=err)
225 CALL check_allocate(err,
'IKLESA')
226 ALLOCATE(nodenrs(npoin2),stat=err)
227 CALL check_allocate(err,
'NODENRS')
228 ALLOCATE(nptfrl(nproc),stat=err)
229 CALL check_allocate(err,
'NPTFR2LOC')
231 ALLOCATE(ifabor(nelem,3),stat=err)
232 CALL check_allocate(err,
'IFABOR')
233 ALLOCATE(ikle(nelem,3),stat=err)
234 CALL check_allocate(err,
'IKLE')
235 ALLOCATE(iadr(npoin2),stat=err)
236 CALL check_allocate(err,
'IADR')
237 ALLOCATE(nvois(npoin2),stat=err)
238 CALL check_allocate(err,
'NVOIS')
239 ALLOCATE(t3(npoin2),stat=err)
240 CALL check_allocate(err,
'T3')
246 READ(2) ((iklesa(i,j),i=1,ecken),j=1,nelem)
257 OPEN(4,file=conlim,form=
'FORMATTED',err=996)
259 996
WRITE(
lu,*)
'ERROR WHEN OPENING FILE: ',conlim
264 ALLOCATE(lihbor0(npoin2),stat=err)
265 CALL check_allocate(err,
'LIHBOR')
266 ALLOCATE(nbor0(npoin2),stat=err)
267 CALL check_allocate(err,
'NBOR')
269 READ(4,*,end=989) lihbor0(i),idum,idum,rdum,rdum,rdum,rdum,
270 & idum,rdum,rdum,rdum,nbor0(i),idum
276 ALLOCATE(lihbor(nptfr),stat=err)
277 CALL check_allocate(err,
'LIHBOR')
278 ALLOCATE(nbor(nptfr),stat=err)
279 CALL check_allocate(err,
'NBOR')
280 ALLOCATE(nelbor(nptfr),stat=err)
281 CALL check_allocate(err,
'NELBOR')
282 ALLOCATE(nulone(nptfr,2),stat=err)
283 CALL check_allocate(err,
'NULONE')
284 ALLOCATE(kp1bor(nptfr,2),stat=err)
285 CALL check_allocate(err,
'KP1BOR')
286 ALLOCATE(iklbor(nptfr,2),stat=err)
287 CALL check_allocate(err,
'IKLBOR')
288 ALLOCATE(eltseg(nelem,3),stat=err)
289 CALL check_allocate(err,
'ELTSEG')
290 ALLOCATE(oriseg(nelem,3),stat=err)
291 CALL check_allocate(err,
'ORISEG')
301 lihbor(i) = lihbor0(i)
302 IF (lihbor(i).NE.2)
THEN 304 nodenrs(nbor(i)) = -mbnd2
325 ikle(j,i)=iklesa(i,j)
329 IF(ielm.EQ.11.OR.ielm.EQ.41.OR.ielm.EQ.51)
THEN 331 ALLOCATE(nachb(1,1),stat=err)
332 CALL check_allocate(err,
'NACHB')
334 CALL voisin(ifabor,nelem2,nelem,ielm,ikle,
336 & npoin2,nachb,nbor,nptfr,iadr,nvois)
339 maxnvois = maxval(nvois)/2
341 WRITE(
lu,*)
'UNEXPECTED ELEMENT IN INBIEF:',ielm
346 IF(ielm.EQ.11.OR.ielm.EQ.41.OR.ielm.EQ.51)
THEN 348 ALLOCATE(ifanum(1,1),stat=err)
349 CALL check_allocate(err,
'IFANUM')
350 ALLOCATE(isegf(nptfr),stat=err)
351 CALL check_allocate(err,
'ISEG')
353 CALL elebd(nelbor,nulone,kp1bor,
354 & ifabor,nbor,ikle,nelem,
355 & iklbor,nelem2,nelmax2,
356 & npoin2,nptfr2,ielm,
359 & iadr,nvois,t3,nptfr2,idum)
365 WRITE(
lu,*)
'UNEXPECTED ELEMENT IN INBIEF:',ielm
377 nseg2 = (3*nelem+nptfr)/2
378 noq2=nplan*(nseg2+mbnd2)+(nplan-1)*npoin2
380 ALLOCATE(verif(nseg2+mbnd2),stat=err)
382 ALLOCATE(verif(noq2) ,stat=err)
384 CALL check_allocate(err,
'VERIFSEG')
388 ALLOCATE(global_value(nseg2+mbnd2),stat=err)
390 ALLOCATE(global_value(noq2),stat=err)
392 CALL check_allocate(err,
'GLOBAL_VALUE')
394 ALLOCATE(gloseg(nseg2,2),stat=err)
395 CALL check_allocate(err,
'GLOSEG')
398 ALLOCATE(knolg(1,1),stat=err)
399 CALL check_allocate(err,
'KNOLG')
401 CALL stoseg(ifabor,nelem,nelmax2,nelmax2,ielm,ikle,
404 & eltseg,oriseg,nseg2,
405 & nelbor,nulone,knolg(:,1),iklbor,nptfr,nptfr)
409 ALLOCATE(segment(npoin2,maxnvois,2),stat=err)
410 CALL check_allocate(err,
'SEGMENT')
431 DO WHILE ((segment(ig1,ivois,1).NE.0).AND.(ivois.LE.maxnvois))
434 segment(ig1,ivois,1) = ig2
435 segment(ig1,ivois,2) = iseg
442 respar=res(1:i_len) // extens(nproc-1,ipid)
443 OPEN (fu,file=respar,form=
'UNFORMATTED',err=998)
445 998
WRITE(
lu,*)
'ERROR WHEN OPENING FILE: ',respar,
446 &
' USING FILE UNIT: ', fu
451 READ(fu) npoin(ipid+1)
452 READ(fu) nseg(ipid+1)
453 READ(fu) mbnd(ipid+1)
456 READ(fu) nptfrl(ipid+1)
459 npoinmax = maxval(npoin)
460 nsegmax = maxval(nseg)
462 nptfrmax = maxval(nptfrl)
464 ALLOCATE (glosegloc(nsegmax,2,nproc),stat=err)
466 ALLOCATE(knolg(npoinmax,nproc),stat=err)
467 ALLOCATE(kseglg(nsegmax,nproc),stat=err)
468 ALLOCATE(nodenrsloc(npoinmax,nproc),stat=err)
469 ALLOCATE(nborloc(nptfrmax,nproc),stat=err)
470 ALLOCATE(lihborloc(nptfrmax,nproc),stat=err)
472 ALLOCATE(knolg(npoinmax/nplan,nproc),stat=err)
473 ALLOCATE(kseglg(noqmax,nproc),stat=err)
474 ALLOCATE(nodenrsloc(npoinmax/nplan,nproc),stat=err)
475 ALLOCATE(nborloc(nptfrmax,nproc),stat=err)
476 ALLOCATE(lihborloc(nptfrmax,nproc),stat=err)
478 CALL check_allocate(err,
'KNOLG')
479 CALL check_allocate(err,
'KSEGLG')
480 CALL check_allocate(err,
'NODENRSLOC')
481 CALL check_allocate(err,
'NBORLOC')
483 ALLOCATE(local_value(noqmax),stat=err)
484 CALL check_allocate(err,
'LOCAL_VALUE')
502 READ(fu) (knolg(i,ipid+1),i=1,npoin(ipid+1))
503 READ(fu) ((glosegloc(i,j,ipid+1),j=1,2),i=1,nseg(ipid+1))
504 READ(fu) (nodenrsloc(i,ipid+1),i=1,npoin(ipid+1))
505 READ(fu) (nborloc(i,ipid+1),i=1,nptfrl(ipid+1))
506 READ(fu) (lihborloc(i,ipid+1),i=1,nptfrl(ipid+1))
508 READ(fu) (knolg(i,ipid+1),i=1,npoin(ipid+1)/nplan)
509 READ(fu) ((glosegloc(i,j,ipid+1),j=1,2),i=1,nseg(ipid+1))
510 READ(fu) (nodenrsloc(i,ipid+1),i=1,npoin(ipid+1)/nplan)
511 READ(fu) (nborloc(i,ipid+1),i=1,nptfrl(ipid+1))
512 READ(fu) (lihborloc(i,ipid+1),i=1,nptfrl(ipid+1))
517 DO iseg=1,nseg(ipid+1)
518 il1 = glosegloc(iseg,1,ipid+1)
519 il2 = glosegloc(iseg,2,ipid+1)
520 ig1 = knolg(il1,ipid+1)
521 ig2 = knolg(il2,ipid+1)
529 DO WHILE ((segment(ig1,ivois,1).NE.ig2)
530 & .AND.(ivois.LE.maxnvois))
533 IF(ivois.LE.maxnvois)
THEN 534 kseglg(iseg,ipid+1) = segment(ig1,ivois,2)
546 2000 nresu = nresu + 1
558 WRITE(
lu,*)
'TRY TO READ DATASET NO.',nresu
562 global_value(i) = 0.d0
566 global_value(i) = 0.d0
574 & (local_value,noqmax,noq(ipid+1),it,fu,ende)
578 nseg2loc = nseg(ipid+1)
579 nptfrloc = nptfrl(ipid+1)
581 global_value(kseglg(i,ipid+1)) =
582 & global_value(kseglg(i,ipid+1)) + local_value(i)
583 verif(kseglg(i,ipid+1)) = verif(kseglg(i,ipid+1))
588 IF(lihborloc(i,ipid+1).NE.2)
THEN 589 IF(filetype(1:7).EQ.
'SUMAREA')
THEN 590 global_value(-nodenrs(knolg(nborloc(i,ipid+1),ipid+1))
592 & local_value(-nodenrsloc(nborloc(i,ipid+1),ipid+1)
594 verif( -nodenrs(knolg(nborloc(i,ipid+1),ipid+1))
596 ELSEIF(filetype(1:7).EQ.
'SUMFLOW')
THEN 597 global_value(-nodenrs(knolg(nborloc(i,ipid+1),ipid+1))
599 & global_value(-nodenrs(knolg(nborloc(i,ipid+1),ipid+1))
601 & local_value(-nodenrsloc(nborloc(i,ipid+1),ipid+1)
603 verif( -nodenrs(knolg(nborloc(i,ipid+1),ipid+1))
605 & verif( -nodenrs(knolg(nborloc(i,ipid+1),ipid+1))
608 WRITE(
lu,*)
'CAS NON PREVU' 616 npoin2loc = npoin(ipid+1)/nplan
617 nseg2loc = nseg(ipid+1)
618 mbndloc = mbnd(ipid+1)
619 nptfrloc = nptfrl(ipid+1)
622 global_value(kseglg(i,ipid+1) + (nseg2+mbnd2)*(j-1)) =
623 & global_value(kseglg(i,ipid+1) + (nseg2+mbnd2)*(j-1)) +
624 & local_value( i + (nseg2loc+mbndloc)*(j-1))
625 verif(kseglg(i,ipid+1) + (nseg2+mbnd2)*(j-1)) =
626 & + verif(kseglg(i,ipid+1) + (nseg2+mbnd2)*(j-1)) + 1
631 IF(lihborloc(i,ipid+1).NE.2)
THEN 633 IF(filetype(1:7).EQ.
'SUMAREA')
THEN 634 global_value(-nodenrs(knolg(nborloc(i,ipid+1),ipid+1))
635 & + nseg2 + (nseg2+mbnd2)*(j-1)) =
636 & local_value(-nodenrsloc(nborloc(i,ipid+1),ipid+1)
637 & + nseg2loc + (nseg2loc+mbndloc)*(j-1))
638 verif( -nodenrs(knolg(nborloc(i,ipid+1),ipid+1))
639 & + nseg2 + (nseg2+mbnd2)*(j-1)) = 1
640 ELSEIF(filetype(1:7).EQ.
'SUMFLOW')
THEN 641 global_value(-nodenrs(knolg(nborloc(i,ipid+1),ipid+1))
642 & + nseg2 + (nseg2+mbnd2)*(j-1)) =
643 & global_value(-nodenrs(knolg(nborloc(i,ipid+1),ipid+1))
644 & + nseg2 + (nseg2+mbnd2)*(j-1)) +
645 & local_value(-nodenrsloc(nborloc(i,ipid+1),ipid+1)
646 & + nseg2loc + (nseg2loc+mbndloc)*(j-1))
647 verif( -nodenrs(knolg(nborloc(i,ipid+1),ipid+1))
648 & + nseg2 + (nseg2+mbnd2)*(j-1)) =
649 & verif( -nodenrs(knolg(nborloc(i,ipid+1),ipid+1))
650 & + nseg2 + (nseg2+mbnd2)*(j-1)) + 1
652 WRITE(
lu,*)
'CAS NON PREVU' 662 IF(filetype(1:7).EQ.
'SUMAREA')
THEN 663 global_value( knolg(i,ipid+1) + npoin2*(j-1)
664 & + (nseg2+mbnd2)*nplan) =
665 & local_value(i+npoin2loc*(j-1)+(nseg2loc+mbndloc)*nplan)
666 verif( knolg(i,ipid+1) + npoin2*(j-1)
667 & + (nseg2+mbnd2)*nplan) = 1
668 ELSEIF(filetype(1:7).EQ.
'SUMFLOW')
THEN 669 global_value( knolg(i,ipid+1) + npoin2*(j-1)
670 & + (nseg2+mbnd2)*nplan) =
671 & global_value( knolg(i,ipid+1) + npoin2*(j-1)
672 & + (nseg2+mbnd2)*nplan) +
673 & local_value(i+npoin2loc*(j-1)+(nseg2loc+mbndloc)*nplan)
674 verif( knolg(i,ipid+1) + npoin2*(j-1)
675 & + (nseg2+mbnd2)*nplan) =
676 & verif( knolg(i,ipid+1) + npoin2*(j-1)
677 & + (nseg2+mbnd2)*nplan) + 1
679 WRITE(
lu,*)
'CAS NON PREVU' 688 WRITE(
lu,*)
'WRITING DATASET NO.',nresu,
' TIME =',it
691 WRITE(3) it, (global_value(i),i=1,nseg2+mbnd2)
693 WRITE(3) it, (global_value(i),i=1,noq2)
698 IF(verif(i).EQ.0)
THEN 699 WRITE(
lu,*)
'ERROR, SEGMENT I=',i,
' FALSE FOR NRESU=',nresu
704 IF(verif(i).EQ.0)
THEN 705 WRITE(
lu,*)
'ERROR, SEGMENT I=',i,
' FALSE FOR NRESU=',nresu
712 3000
WRITE(
lu,*)
'END OF PROGRAM, ',nresu-1,
' DATASETS FOUND'
subroutine gredelpts_read_dataset(LOCAL_VALUE, NPOINMAX, NPOIN, IT, FU, ENDE)
subroutine voisin(IFABOR, NELEM, NELMAX, IELM, IKLE, SIZIKL, NPOIN, NACHB, NBOR, NPTFR, IADR, NVOIS)
subroutine stoseg(IFABOR, NELEM, NELMAX, NELMAX2, IELM, IKLE, NBOR, NPTFR, GLOSEG, MAXSEG, ELTSEG, ORISEG, NSEG, NELBOR, NULONE, KNOLG, IKLBOR, NELEBX, NELEB)
subroutine elebd(NELBOR, NULONE, KP1BOR, IFABOR, NBOR, IKLE, SIZIKL, IKLBOR, NELEM, NELMAX, NPOIN, NPTFR, IELM, LIHBOR, KLOG, ISEG, T1, T2, T3, NELEBX, NELEB)