The TELEMAC-MASCARET system  trunk
read_partel_info.f
Go to the documentation of this file.
1 ! ***************************
2  SUBROUTINE read_partel_info
3 ! ***************************
4 !
5  &(code,nptfr,numliq,boundary_colour,mesh)
6 !
7 !***********************************************************************
8 ! BIEF V7P1
9 !***********************************************************************
10 !
11 !brief READS IFAPAR AND NACHB
12 !
13 !history Y AUDOUIN (LNHE)
14 !+ 25/05/2015
15 !+ V7P0
16 !+ First version.
17 !
18 !history J. GRASSET (Daresbury Lab & EDF)
19 !+ 01/05/2018
20 !+ Add code for managing concatenated PAR file
21 !
22 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
23 !| CODE |-->| 3 LETTER NAME OF THE CODE
24 !| NPTFR |-->| NUMBER OF BOUNDARY POINTS
25 !| NUMLIQ |<->| NUMBER OF LIQUID BOUNDARY
26 !| BOUNDARY_COLOUR|<->| COLOUR OF BOUNDARY POINTS
27 !| MESH |<->| MESH STRUCTURE
28 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
29 !
30  USE bief
31 !
33  IMPLICIT NONE
34 !
35 !
36 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
37 !
38  CHARACTER(LEN=3), INTENT(IN) :: CODE
39  INTEGER, INTENT(IN) :: NPTFR
40  INTEGER, INTENT(INOUT) :: NUMLIQ(nptfr)
41  INTEGER, INTENT(INOUT) :: BOUNDARY_COLOUR(nptfr)
42  TYPE(bief_mesh), INTENT(INOUT) :: MESH
43 !
44 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
45 !
46  INTEGER PTIR,I,K,IF1,IF2,IF3,IF4,IF5,IF6,IF7
47  INTEGER NPTFR_BND
48  INTEGER NPAR, NPAR_IDX
49  INTEGER OFFSET_BEGIN
50  CHARACTER(LEN=PATH_LEN) NAMEPAR
51  CHARACTER(LEN=PATH_LEN) NAMEPAR_IDX
52  CHARACTER(LEN=11) EXTENS
53  EXTERNAL extens
54 !
55 !-----------------------------------------------------------------------
56 !
57 ! PARALLEL MODE : READS NPTIR AND NACHB
58 !
59 !-----------------------------------------------------------------------
60 !
61  IF(partel_concat)THEN
62  namepar = code//'PAR'//'-CONCAT'
63  namepar_idx = code//'PAR'//'-INDEX'
64  ELSE
65  namepar = code//'PAR'//extens(ncsize-1,ipid)
66  ENDIF
67 ! Look for an available unit
68  CALL get_free_id(npar)
69  OPEN(npar,file=namepar,status='OLD',form='FORMATTED')
70  rewind(npar)
71  IF(partel_concat)THEN
72  CALL get_free_id(npar_idx)
73  OPEN(npar_idx,file=namepar_idx,action='READ')
74  !GET OUT OFFSET FROM THE INDEX FILE
75  READ(npar_idx,*)(offset_begin,k=0,ipid)
76  CLOSE(npar_idx)
77  !MOVE TO THE BEGINING OF OUR PART
78  DO k=1,offset_begin-1
79  READ(npar,*)
80  ENDDO
81  ENDIF
82 !
83  READ(npar,*) nptfr_bnd
84  IF(nptfr.NE.nptfr_bnd) THEN
85  WRITE(lu,24) nptfr_bnd,nptfr
86 24 FORMAT(1x,'READ_PARTEL_INFO: ERROR IN THE PARALLEL FILE,',
87  & /,9x,1i5,' LINES INSTEAD OF ',i5,' REQUESTED')
88  CALL plante(1)
89  stop
90  ENDIF
91  DO k=1,nptfr_bnd
92  READ(npar,*) boundary_colour(k),mesh%NBOR%I(k),mesh%ISEG%I(k),
93  & mesh%XSEG%R(k),mesh%YSEG%R(k),numliq(k)
94  ENDDO
95 !
96  READ(npar,*) ptir
97  IF(nptir.NE.ptir) THEN
98  WRITE(lu,152) nptir,ptir
99 152 FORMAT(1x,'READ_PARTEL_INFO : DIFFERENCE BETWEEN GEOMETRY ',/,
100  & 1x,' AND BOUNDARY CONDITIONS' ,/,1x,i6,
101  & ' INTERFACE POINTS IN GEOMETRY',/,1x,i6,
102  & ' INTERFACE POINTS IN CONPAR FILE')
103  ENDIF
104 ! NACHB(NBMAXNSHARE,NPTIR), HERE NACHB(I,K)
105 ! HERE NACHB IS IN LOCAL NUMBERING
106  IF(nptir.GT.0) THEN
107  DO k=1,nptir
108  READ(npar,*) (mesh%NACHB%I((k-1)*nbmaxnshare+i),
109  & i=1,nbmaxnshare)
110  ENDDO
111  ENDIF
112 !
113 ! JAJ //// READS THE NEIGHBOURHOODS FOR HALO CELLS ALONG THE INTERFACES
114 ! FILLING PATTERN: IFAPAR(1:7,K), K=1:NHALO
115 ! -> NHALO: NUMBER OF HALO CELLS IN THIS PARTITION
116 !
117 ! IFAPAR(1,K) : HALO ELEMENT -LOCAL- NUMBER IN THIS PARTITION
118 ! IFAPAR(2:4,K) : PROCESSOR NUMBERS BEHIND THE 3 ELEMENT EDGES
119 ! NUMBER FROM 0 TO NCSIZE-1
120 ! IFAPAR(5:7,K) : -LOCAL- ELEMENT NUMBERS BEHIND THE 3 EDGES
121 ! IN THE NUMBERING OF PARTITIONS THEY BELONG TO
122 ! ACTUALLY, NOT ALL OF THAT IS REQUIRED AND CAN BE OPTIMISED
123 ! AFTER THE DEVELOPMENT STAGE IS OVER
124 !
125 ! IN TELEMAC, IFAPAR IS REORGANISED IN IFAPAR(6,NELEM2)
126 ! AND INITIALISED TO 0 IN ALMESH
127 !
128  READ(npar,*) nhalo
129  IF(nhalo.GT.2*nptir) THEN ! SEE BIEF LIB, SUBROUTINE ALMESH
130  WRITE(lu,*) ' => NHALO>2*NPTIR DETECTED IN BC FILE'
131  CALL plante(1)
132  stop
133  ENDIF
134  IF(nhalo.GT.0) THEN
135  DO k=1,nhalo
136  READ(npar,*) if1,if2,if3,if4,if5,if6,if7
137 !
138 ! CORRECTS A BUG (IN IFAPAR THERE IS A CONFUSION BETWEEN PROCESSOR 0
139 ! AND LIQUID BOUNDARY BUT
140 ! IN CASE OF LIQUID BOUNDARY, THE ELEMENT BEHIND
141 ! IS GIVEN AS 0, SO BOTH CASES MAY BE DISTINGUISHED
142 ! HERE ALL BOUNDARIES (LIQUID OR SOLID) ARE SET AT -1
143 !
144  IF(if5.EQ.0) if2=-1
145  IF(if6.EQ.0) if3=-1
146  IF(if7.EQ.0) if4=-1
147 !
148  mesh%IFAPAR%I(6*(if1-1)+1)=if2
149  mesh%IFAPAR%I(6*(if1-1)+2)=if3
150  mesh%IFAPAR%I(6*(if1-1)+3)=if4
151  mesh%IFAPAR%I(6*(if1-1)+4)=if5
152  mesh%IFAPAR%I(6*(if1-1)+5)=if6
153  mesh%IFAPAR%I(6*(if1-1)+6)=if7
154  ENDDO
155  ENDIF
156 !
157  CLOSE(npar)
158 !
159 !-----------------------------------------------------------------------
160 !
161  RETURN
162  END
subroutine read_partel_info(CODE, NPTFR, NUMLIQ, BOUNDARY_COLOUR, MESH)
Definition: bief.f:3