Salome HOME
Merge branch 'vsr/evol_01_fixes'
[modules/homard.git] / src / tool / Suivi_Frontiere / sfgrf2.F
1       subroutine sfgrf2 ( nbfmed,
2      >                    nbf, nbgrmx, nblign, lgtabl,
3      >                    pointl, taigrl, nomgrl,
4      >                    pointf, nomgrf, numfam,
5      >                    lifami,
6      >                    ulsort, langue, codret )
7 c ______________________________________________________________________
8 c
9 c                             H O M A R D
10 c
11 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
12 c
13 c Version originale enregistree le 18 juin 1996 sous le numero 96036
14 c aupres des huissiers de justice Simart et Lavoir a Clamart
15 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
16 c aupres des huissiers de justice
17 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
18 c
19 c    HOMARD est une marque deposee d'Electricite de France
20 c
21 c Copyright EDF 1996
22 c Copyright EDF 1998
23 c Copyright EDF 2002
24 c Copyright EDF 2020
25 c ______________________________________________________________________
26 c
27 c   Suivi de Frontiere - GRoupes de la Frontiere - phase 2
28 c   -        -           --            -                 -
29 c remarque : sfgrf2 et sfgrf3 sont des clones
30 c   Creation de la liste des groupes de segments du maillage frontiere
31 c ______________________________________________________________________
32 c .        .     .        .                                            .
33 c .  nom   . e/s . taille .           description                      .
34 c .____________________________________________________________________.
35 c . nbfmed . e   .   1    . nombre de familles de mailles de frontiere .
36 c . nbf    . e   .   1    . nombre de familles du maillage frontiere   .
37 c . nbgrmx . e   .   1    . nombre maxi de groupes dans les familles   .
38 c . nblign .  s  .   1    . nombre de lignes decrites                  .
39 c . lgtabl .  s  .   1    . longueur des tables                        .
40 c . pointl .  s  .0:nbgrmx. pointeur sur le tableau nomgrl             .
41 c . taigrl .  s  .   *    . taille des noms des groupes des lignes     .
42 c . nomgrl .  s  .   *    . noms des groupes des lignes                .
43 c . pointf . e   . 0:nbf  . pointeur sur le tableau nomgrf             .
44 c . numfam . e   .   nbf  . numero des familles au sens MED            .
45 c . nomgrf . e   .   *    . noms des groupes des familles              .
46 c . lifami . e   . nbfmed . liste des familles a explorer              .
47 c . ulsort . e   .   1    . numero d'unite logique de la liste standard.
48 c . langue . e   .    1   . langue des messages                        .
49 c .        .     .        . 1 : francais, 2 : anglais                  .
50 c . codret . es  .    1   . code de retour des modules                 .
51 c .        .     .        . 0 : pas de probleme                        .
52 c .        .     .        . 1 : probleme                               .
53 c ______________________________________________________________________
54 c
55 c====
56 c 0. declarations et dimensionnement
57 c====
58 c
59 c 0.1. ==> generalites
60 c
61       implicit none
62       save
63 c
64       character*6 nompro
65       parameter ( nompro = 'SFGRF2' )
66 c
67 #include "nblang.h"
68 c
69 c 0.2. ==> communs
70 c
71 #include "envex1.h"
72 #include "impr02.h"
73 c
74 c 0.3. ==> arguments
75 c
76       integer nbfmed
77       integer nbf, nbgrmx, nblign, lgtabl
78       integer lifami(nbfmed)
79       integer pointl(0:nbgrmx), pointf(0:nbf), numfam(nbf)
80       integer taigrl(*)
81 c
82       character*8 nomgrl(*), nomgrf(*)
83 c
84       integer ulsort, langue, codret
85 c
86 c 0.4. ==> variables locales
87 c
88       integer iaux, jaux, kaux, lig, fam
89       integer nbgr, gr
90       integer lgngrl, lgngrf
91 c
92       character*80 groupl,groupf
93 c
94       integer nbmess
95       parameter ( nbmess = 10 )
96       character*80 texte(nblang,nbmess)
97 c
98 c 0.5. ==> initialisations
99 c ______________________________________________________________________
100 c
101 c====
102 c 1. messages
103 c====
104 c
105 #include "impr01.h"
106 c
107 #ifdef _DEBUG_HOMARD_
108       write (ulsort,texte(langue,1)) 'Entree', nompro
109       call dmflsh (iaux)
110 #endif
111 c
112       texte(1,4) = '(''Nombre de familles de '',a,'' :'',i8)'
113       texte(1,5) = '(/,''Ligne numero '',i5,/,18(''=''))'
114       texte(1,6) = '(''. Elle est definie par le groupe : '',a,/)'
115 c
116       texte(2,4) = '(''Number of families of '',a,'' :'',i8)'
117       texte(2,5) = '(/,''Line # '',i5,/,12(''=''))'
118       texte(2,6) = '(''. It is defined by group : '',a,/)'
119 c
120 #include "impr03.h"
121 c
122       codret = 0
123 c
124       nblign = 0
125 c
126 #ifdef _DEBUG_HOMARD_
127       write (ulsort,texte(langue,4)) mess14(langue,3,1), nbfmed
128 #endif
129 c
130 c====
131 c 2. on parcourt toutes les familles de mailles du maillage frontiere
132 c    pour enregistrer les groupes du maillage frontiere
133 c====
134 c
135 cgn      write (ulsort,93080) (nomgrf(iaux),iaux=1,20)
136       do 20 , fam = 1, nbf
137 c
138         if ( codret.eq.0 ) then
139 c
140 #ifdef _DEBUG_HOMARD_
141         write (ulsort,90015) 'Famille ', fam, ', de numero', numfam(fam)
142 #endif
143 c
144 c 2.1. ==> la famille est-elle a traiter ?
145 c
146         do 21 , iaux = 1, nbfmed
147 c
148 cgn          write (ulsort,90112) 'lifami', iaux, lifami(iaux)
149           if ( numfam(fam).eq.lifami(iaux) ) then
150             goto 221
151           endif
152 c
153    21   continue
154 c
155         goto 20
156 c
157 c 2.2. ==> on parcourt tous les groupes entrant dans la
158 c          definition de cette famille
159 c
160   221   continue
161 c
162         nbgr = (pointf(fam)-pointf(fam-1))/10
163 c
164         do 22 , gr = 1, nbgr
165 c
166 c 2.2.1. ==> nom du groupe associe
167 c            adresse du debut du groupe numero gr de la famille fam
168 c
169           if ( codret.eq.0 ) then
170 c
171           iaux = pointf(fam-1)+1+10*(gr-1)
172 c
173 c         recuperation du nom du groupe numero gr dans la famille
174 c         numero fam
175           call uts8ch ( nomgrf(iaux), 80, groupf,
176      >                  ulsort, langue, codret )
177 c
178           endif
179 c
180           if ( codret.eq.0 ) then
181 c
182 c         longueur utile du nom du groupe
183           call utlgut ( lgngrf, groupf, ulsort, langue, codret )
184 c
185           endif
186 c
187 #ifdef _DEBUG_HOMARD_
188           write (ulsort,*) '.. groupf = ', groupf
189           write (ulsort,*) '.. lgngrf = ', lgngrf
190 #endif
191 c
192 c 2.2.2. ==> on cherche si le groupe est deja present dans la liste
193 c
194           do 222 , lig = 1 , nblign
195 c
196             if ( codret.eq.0 ) then
197 c         adresse du debut du groupe associe a la ligne lig
198             iaux = pointl(lig-1) + 1
199 c
200 c           recuperation du nom du groupe associe a la ligne lig
201             call uts8ch ( nomgrl(iaux), 80, groupl,
202      >                    ulsort, langue, codret )
203 c
204             endif
205 c
206             if ( codret.eq.0 ) then
207 c
208 c           longueur utile du nom du groupe
209             call utlgut ( lgngrl, groupl, ulsort, langue, codret )
210 c
211             endif
212 c
213 c ......... si le groupe de la ligne et le groupe dans la liste
214 c ......... coincident, on passe au groupe suivant dans la famille
215 c
216             if ( lgngrl.eq.lgngrf ) then
217 c
218               if ( groupl(1:lgngrl).eq.groupf(1:lgngrf) ) then
219                 goto 22
220               endif
221 c
222             endif
223 c
224   222     continue
225 c
226 c 2.2.3. ==> le groupe est absent de la liste ; on allonge la liste
227 c
228           nblign = nblign + 1
229 c
230 #ifdef _DEBUG_HOMARD_
231           write (ulsort,texte(langue,5)) nblign
232           write (ulsort,texte(langue,6)) groupf(1:lgngrf)
233 #endif
234 c
235           iaux = pointl(nblign-1) + 1
236 c
237           call utchs8 ( groupf, lgngrf, nomgrl(iaux),
238      >                  ulsort, langue, codret )
239 c
240           kaux = (lgngrf-mod(lgngrf,8)) / 8
241           do 223 , jaux = 1 , kaux
242             taigrl(iaux+jaux-1) = 8
243   223     continue
244 c
245           if ( mod(lgngrf,8).ne.0 ) then
246             taigrl(iaux+kaux) = mod(lgngrf,8)
247             kaux = kaux + 1
248           endif
249 c
250           pointl(nblign) = pointl(nblign-1) + kaux
251           lgtabl = iaux+kaux-1
252 c
253    22   continue
254 c
255         endif
256 c
257    20 continue
258 c
259 #ifdef _DEBUG_HOMARD_
260       write (ulsort,*) ' '
261 #endif
262 c
263 c====
264 c 3. la fin
265 c====
266 c
267       if ( codret.ne.0 ) then
268 c
269 #include "envex2.h"
270 c
271       write (ulsort,texte(langue,1)) 'Sortie', nompro
272       write (ulsort,texte(langue,2)) codret
273 c
274       endif
275 c
276 #ifdef _DEBUG_HOMARD_
277       write (ulsort,texte(langue,1)) 'Sortie', nompro
278       call dmflsh (iaux)
279 #endif
280 c
281       end