1 subroutine utmfen ( nhenti, nhent2, nbent2,
2 > ulsort, langue, codret)
3 c ______________________________________________________________________
7 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
9 c Version originale enregistree le 18 juin 1996 sous le numero 96036
10 c aupres des huissiers de justice Simart et Lavoir a Clamart
11 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
12 c aupres des huissiers de justice
13 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
15 c HOMARD est une marque deposee d'Electricite de France
21 c ______________________________________________________________________
23 c UTilitaire - passage de Mere a Fille pour les ENtites
25 c ______________________________________________________________________
27 c . nom . e/s . taille . description .
28 c .____________________________________________________________________.
29 c . nhenti . e . char8 . nom de l'objet decrivant l'entite .
30 c . nhent2 . e . char8 . nom de l'objet decrivant l'entite frere .
31 c . nbent2 . e . 1 . nombre d'entite frere .
32 c . ulsort . e . 1 . numero d'unite logique de la liste standard.
33 c . langue . e . 1 . langue des messages .
34 c . . . . 1 : francais, 2 : anglais .
35 c . codret . es . 1 . code de retour des modules .
36 c . . . . 0 : pas de probleme .
37 c . . . . 1 : probleme .
38 c ______________________________________________________________________
41 c 0. declarations et dimensionnement
44 c 0.1. ==> generalites
50 parameter ( nompro = 'UTMFEN' )
62 character*8 nhenti, nhent2
66 integer ulsort, langue, codret
68 c 0.4. ==> variables locales
70 integer nbenti, pfille, pmere, lamere
74 integer ideb, ifin, ideb2
75 integer codre1, codre2
79 parameter ( nbmess = 10 )
80 character*80 texte(nblang,nbmess)
82 c 0.5. ==> initialisations
83 c ______________________________________________________________________
92 write (ulsort,texte(langue,1)) 'Entree', nompro
96 texte(1,4) = '(''... Reperage des filles a partir des meres'')'
97 texte(1,5) = '(''. Nombre d''''entites :'',i10)'
98 texte(1,6) = '(''. Nombre d''''entites soeurs :'',i10)'
99 texte(1,7) = '(''. Numero de la mere adoptive :'',i10))'
101 texte(2,4) = '(''... Son arrays from father arrays'')'
102 texte(2,5) = '(''. Number of entities :'',i10)'
103 texte(2,6) = '(''. Number of brother entities:'',i10)'
104 texte(2,7) = '(''. Number for adoptive mother:'',i10))'
108 #ifdef _DEBUG_HOMARD_
109 write (ulsort,texte(langue,4))
113 c 2. recuperation des donnees du maillage d'entree
116 #ifdef _DEBUG_HOMARD_
117 call gmprsx (nompro, nhenti )
122 call gmliat ( nhenti, 1, nbenti, codre1 )
123 call gmadoj ( nhenti//'.Mere', pmere, iaux, codre2 )
125 codre0 = min ( codre1, codre2 )
126 codret = max ( abs(codre0), codret,
129 #ifdef _DEBUG_HOMARD_
130 write (ulsort,texte(langue,5)) nbenti
131 write (ulsort,texte(langue,6)) nbent2
134 c 2.2. ==> Eventuelle parente adoptive
136 if ( codret.eq.0 ) then
138 #ifdef _DEBUG_HOMARD_
139 write (ulsort,texte(langue,3)) 'UTAD03', nompro
142 call utad03 ( iaux, nhenti,
143 > jaux, jaux, numead,
145 > ulsort, langue, codret )
147 #ifdef _DEBUG_HOMARD_
148 write (ulsort,texte(langue,7)) numead
154 c 3. Creation du tableau des filles
155 c Attention, la convention homard veut que le tableau soit cree,
158 #ifdef _DEBUG_HOMARD_
159 write (ulsort,90002) '3. Creation tableau ; codret', codret
162 if ( codret.eq.0 ) then
164 #ifdef _DEBUG_HOMARD_
165 if ( nbenti.le.50 ) then
166 call gmprsx (nompro, nhenti//'.Mere' )
168 call gmprot (nompro, nhenti//'.Mere', 1, 50)
169 call gmprot (nompro, nhenti//'.Mere', max(51,nbenti-50),nbenti )
173 call gmobal ( nhenti//'.Fille', codre1 )
175 if ( codre1.eq.0 ) then
177 #ifdef _DEBUG_HOMARD_
178 write (ulsort,90002) 'Allocation avec nbenti', nbenti
180 call gmaloj ( nhenti//'.Fille', ' ', nbenti, pfille, codre2 )
182 if ( codre2.eq.0 ) then
185 ifin = pfille + nbenti - 1
186 do 31 , iaux = ideb , ifin
192 elseif ( codre1.eq.2 ) then
194 call gmadoj ( nhenti//'.Fille', pfille, iaux, codre2 )
202 codre0 = min ( codre1, codre2 )
203 codret = max ( abs(codre0), codret,
209 c 4. Entite frere eventuelle
211 #ifdef _DEBUG_HOMARD_
212 write (ulsort,90002) '4. Entite frere eventuelle ; codret', codret
215 if ( codret.eq.0 ) then
217 if ( nbent2.ne.0 ) then
219 call gmobal ( nhent2//'.Fille', codre1 )
221 if ( codre1.eq.0 ) then
223 call gmaloj ( nhent2//'.Fille', ' ', nbent2, pfill2, codre2 )
225 if ( codre2.eq.0 ) then
228 ifin = pfill2 + nbent2 - 1
229 do 41 , iaux = ideb , ifin
235 elseif ( codre1.eq.2 ) then
237 call gmadoj ( nhent2//'.Fille', pfill2, iaux, codre2 )
245 codre0 = min ( codre1, codre2 )
246 codret = max ( abs(codre0), codret,
255 c pour chaque entite qui est fille, on marque la mere
256 c attention : la convention homard veut que seule la fille
259 #ifdef _DEBUG_HOMARD_
260 write (ulsort,90002) '5. traitement ; codret', codret
263 if ( codret.eq.0 ) then
268 c 5.1. ==> sans entite frere
270 if ( nbent2.eq.0 ) then
272 do 51 , iaux = 0 , ifin
274 lamere = imem(pmere+iaux)
276 c lamere > 0 : il existe une mere
278 if ( lamere.gt.0 ) then
279 if ( imem(ideb+lamere).eq.0 ) then
280 imem(ideb+lamere) = iaux + 1
286 c 5.2. ==> avec une entite frere
292 do 52 , iaux = 0 , ifin
294 lamere = imem(pmere+iaux)
296 c lamere > 0 : il existe une mere et elle est de meme type
299 cgn print *,'Face =', iaux+1,' ==> lamere =', lamere
300 if ( lamere.gt.0 ) then
301 if ( imem(ideb+lamere).eq.0 ) then
302 imem(ideb+lamere) = iaux + 1
305 c lamere < 0 : il existe une mere et elle est du type frere de
307 c attention : il ne faut rien faire quand ce numero vaut
308 c le numero de mere adoptive. Cela signifie que c'est
309 c une mere adoptive pour traiter les non conformites
310 c initiales. S'il n'y en a pas, numead vaut 0
312 elseif ( lamere.lt.0 .and. lamere.ne.numead ) then
313 if ( imem(ideb2-lamere).eq.0 ) then
314 imem(ideb2-lamere) = -( iaux + 1 )
322 #ifdef _DEBUG_HOMARD_
323 if ( nbenti.le.50 ) then
324 call gmprsx (nompro, nhenti//'.Mere' )
326 call gmprot (nompro, nhenti//'.Mere', 1, 50)
327 call gmprot (nompro, nhenti//'.Mere', max(51,nbenti-50), nbenti)
329 if ( nbenti.le.50 ) then
330 call gmprsx (nompro, nhenti//'.Fille' )
332 call gmprot (nompro, nhenti//'.Fille', 1, 50)
333 call gmprot (nompro, nhenti//'.Fille', max(51,nbenti-50),nbenti)
343 if ( codret.ne.0 ) then
346 write (ulsort,texte(langue,1)) 'Sortie', nompro
347 write (ulsort,texte(langue,2)) codret
351 #ifdef _DEBUG_HOMARD_
352 write (ulsort,texte(langue,1)) 'Sortie', nompro