1 subroutine mmag11 ( somare,
4 > nbpejs, tbaux1, tbaux2,
6 > nbduno, nbduar, nbdutr,
8 > ulsort, langue, codret )
9 c ______________________________________________________________________
13 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
15 c Version originale enregistree le 18 juin 1996 sous le numero 96036
16 c aupres des huissiers de justice Simart et Lavoir a Clamart
17 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
18 c aupres des huissiers de justice
19 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
21 c HOMARD est une marque deposee d'Electricite de France
27 c ______________________________________________________________________
29 c Modification de Maillage - AGregat - phase 1.1
31 c Connaissant le nombre et les caracteristiques des pentaedres
32 c a creer pour les joints simples :
33 c . Liste des duplications de noeuds avec pour chacune d'elles :
34 c - numero du noeud a dupliquer
35 c - numero de l'arete entre les noeuds doubles
36 c - numero des 2 noeuds doubles a creer
37 c - numero du joint simple exigeant la duplication
38 c . Liste des duplications d'aretes avec pour chacune d'elles :
39 c - numero de l'arete entre les noeuds doubles
40 c - numero des 2 aretes doubles a creer
41 c - numero du joint simple exigeant la duplication
42 c . Decompte du nombre de duplications de noeuds, d'aretes et
44 c . Numero du dernier noeud cree
45 c . Numero de la derniere arete creee
46 c ______________________________________________________________________
48 c . nom . e/s . taille . description .
49 c .____________________________________________________________________.
50 c . somare . e .2*nbarto. numeros des extremites d'arete .
51 c . aretri . e .nbtrto*3. numeros des 3 aretes des triangles .
52 c . tritet . e .nbtecf*4. numeros des 4 triangles des tetraedres .
53 c . cotrte . e .nbtecf*4. codes des 4 triangles des tetraedres .
54 c . nbpejs . e . 1 . nombre de pentaedres de joints simples .
55 c . tbaux1 . e .4*nbpejs. Pour le i-eme pentaedre de joint simple : .
56 c . . . . (1,i) : numero du triangle a dupliquer .
57 c . . . . (2,i) : numero du joint simple cree .
58 c . . . . (3,i) : tetraedre du cote min(fammed) .
59 c . . . . (4,i) : tetraedre du cote max(fammed) .
60 c . tbaux2 . e . 4** . Pour le i-eme joint : .
61 c . . . . Numeros des familles MED des volumes .
62 c . . . . jouxtant le pentaedre/hexaedre, classes du .
63 c . . . . plus petit (1,i) au plus grand .
64 c . . . . 0, si pas de volume voisin .
65 c . tbau30 . s . 8** . Pour la i-eme duplication de noeud : .
66 c . . . . (1,i) : noeud a dupliquer .
67 c . . . . (2,i) : arete construite sur le noeud .
68 c . . . . (3,i) : noeud cree cote min(fammed) .
69 c . . . . (4,i) : noeud cree cote max(fammed) .
70 c . . . . (5,i) : numero du joint simple cree .
71 c . . . . (6,i) : arete entrant dans le cote 1 .
72 c . . . . (7,i) : arete entrant dans le cote 2 .
73 c . . . . (8,i) : ordre de multiplicite .
74 c . tbau40 . s . 6** . Pour la i-eme duplication d'arete : .
75 c . . . . (1,i) : arete a dupliquer .
76 c . . . . (2,i) : arete creee cote min(fammed) .
77 c . . . . (3,i) : arete creee cote max(fammed) .
78 c . . . . (4,i) : numero du joint simple cree .
79 c . . . . (5,i) : ordre de multiplicite .
80 c . . . . (6,i) : arete d'orientation de joint .
81 c . nbduno . s . 1 . nombre de duplications de noeuds .
82 c . nbduar . s . 1 . nombre de duplications d'aretes .
83 c . nbdutr . s . 1 . nombre de duplications de triangles .
84 c . indnoe . es . 1 . dernier noeud a creer .
85 c . indare . es . 1 . derniere arete a creer .
86 c . ulsort . e . 1 . numero d'unite logique de la liste standard.
87 c . langue . e . 1 . langue des messages .
88 c . . . . 1 : francais, 2 : anglais .
89 c . codret . es . 1 . code de retour des modules .
90 c . . . . 0 : pas de probleme .
91 c ______________________________________________________________________
94 c 0. declarations et dimensionnement
97 c 0.1. ==> generalites
103 parameter ( nompro = 'MMAG11' )
118 integer somare(2,nbarto)
119 integer aretri(nbtrto,3)
120 integer tritet(nbtecf,4), cotrte(nbtecf,4)
122 integer tbaux1(4,nbpejs), tbaux2(4,*)
123 integer tbau30(8,*), tbau40(6,*)
125 integer nbduno, nbduar, nbdutr
126 integer indnoe, indare
128 integer ulsort, langue, codret
130 c 0.4. ==> variables locales
132 integer iaux, jaux, kaux, laux
134 integer letetr, listar(6)
135 integer laret0(2), laret1(2)
137 integer nujois, nujoi0
141 integer are(3), som(3)
144 parameter ( nbmess = 40 )
145 character*80 texte(nblang,nbmess)
147 c 0.5. ==> initialisations
148 c ______________________________________________________________________
157 #ifdef _DEBUG_HOMARD_
158 write (ulsort,texte(langue,1)) 'Entree', nompro
165 texte(1,31) = '('' ==> '',a,''en lien :'',2i8)'
167 texte(2,31) = '('' ==> connected '',a,'':'',2i8)'
169 #ifdef _DEBUG_HOMARD_
170 write (ulsort,texte(langue,7)) mess14(langue,3,7), nbpejs
173 c 1.2. ==> Constantes
180 #ifdef _DEBUG_HOMARD_
181 write (ulsort,texte(langue,8)) mess14(langue,3,2), nbdutr
185 c 2. Parcours des pentaedres a creer pour noter les aretes a dupliquer
187 #ifdef _DEBUG_HOMARD_
188 write (ulsort,texte(langue,5)) mess14(langue,3,7)//' - ar dupl'
191 if ( codret.eq.0 ) then
193 do 2 , iaux = 1 , nbpejs
195 letria = tbaux1(1,iaux)
196 nujois = tbaux1(2,iaux)
198 #ifdef _DEBUG_HOMARD_
199 write (ulsort,texte(langue,4)) '. ', mess14(langue,1,2), letria
204 #ifdef _DEBUG_HOMARD_
205 write (ulsort,texte(langue,4)) '.. ',mess14(langue,1,1),
206 > aretri(letria,jaux)
209 c 2.1.1. ==> Si l'arete a deja ete dupliquee pour ce joint, on
212 do 211 , kaux = 1 , nbduar
214 if ( tbau40(1,kaux).eq.aretri(letria,jaux) .and.
215 > tbau40(4,kaux).eq.nujois ) then
221 c 2.1.2. ==> L'arete est a dupliquer.
222 c On repere si elle l'a deja ete pour un des cotes.
224 #ifdef _DEBUG_HOMARD_
225 write (ulsort,texte(langue,9)) mess14(langue,1,1),
226 > aretri(letria,jaux)
229 fammed(1) = tbaux2(1,nujois)
230 fammed(2) = tbaux2(2,nujois)
231 cgn write(ulsort,*) fammed
232 do 212 , laux = 1 , 2
233 do 2121 , kaux = 1 , nbduar
234 cgn write(ulsort,*) kaux, tbau40(1,kaux),tbau40(4,kaux)
235 if ( tbau40(1,kaux).eq.aretri(letria,jaux) ) then
236 nujoi0 = tbau40(4,kaux)
237 if ( tbaux2(1,nujoi0).eq.fammed(laux) ) then
238 laret0(laux) = tbau40(2,kaux)
240 elseif ( tbaux2(2,nujoi0).eq.fammed(laux) ) then
241 laret0(laux) = tbau40(3,kaux)
247 laret0(laux) = indare
250 c 2.1.3. ==> Le triangle est a dupliquer pour le joint en cours.
251 c L'arete dupliquee est tbau40(1,kaux). On cherche l'autre
252 c arete du triangle dont une extremite est le point de depart
253 c de cette arete dupliquee. Cela servira a orienter les
256 som1 = somare(1,aretri(letria,jaux))
258 if ( kaux.ne.jaux ) then
259 if ( som1.eq.somare(1,aretri(letria,kaux)) .or.
260 > som1.eq.somare(2,aretri(letria,kaux)) ) then
261 arejnt = aretri(letria,kaux)
266 c 2.1.4. ==> Enregistrement
268 #ifdef _DEBUG_HOMARD_
269 write (ulsort,texte(langue,31)) mess14(langue,3,1), laret0
272 tbau40(1,nbduar) = aretri(letria,jaux)
273 tbau40(2,nbduar) = laret0(1)
274 tbau40(3,nbduar) = laret0(2)
275 tbau40(4,nbduar) = nujois
276 tbau40(6,nbduar) = arejnt
282 #ifdef _DEBUG_HOMARD_
283 write (ulsort,texte(langue,8)) mess14(langue,3,1), nbduar
284 write (ulsort,texte(langue,7)) mess14(langue,3,4), nbduar
290 c 3. Parcours des pentaedres a creer pour noter les aretes a creer
291 c Remarque : on le fait en deux fois pour gerer les numerotations
292 c des aretes de manieres independantes : d'abord celles
293 c issues de duplication, ensuite celles issues de
294 c duplications de noeuds
296 #ifdef _DEBUG_HOMARD_
297 write (ulsort,texte(langue,5)) mess14(langue,3,7)//' - ar crea'
300 if ( codret.eq.0 ) then
302 do 3 , iaux = 1 , nbpejs
304 letria = tbaux1(1,iaux)
305 nujois = tbaux1(2,iaux)
307 #ifdef _DEBUG_HOMARD_
308 write (ulsort,texte(langue,4)) '. ', mess14(langue,1,2), letria
311 c 3.1. ==> Aretes et les sommets
313 are(1) = aretri(letria,1)
314 are(2) = aretri(letria,2)
315 are(3) = aretri(letria,3)
317 call utsotr ( somare, are(1), are(2), are(3),
318 > som(1), som(2), som(3) )
320 c 3.2. ==> Les noeuds
324 #ifdef _DEBUG_HOMARD_
325 write (ulsort,texte(langue,4)) '..',mess14(langue,1,-1),som(jaux)
328 c 3.2.1. ==> Si le noeud a deja ete duplique pour ce joint, on
331 do 321 , kaux = 1 , nbduno
333 if ( tbau30(1,kaux).eq.som(jaux) .and.
334 > tbau30(5,kaux).eq.nujois ) then
335 cgn write(ulsort,*) '.... noeud deja duplique'
341 c 3.2.2. ==> Le noeud est a dupliquer.
342 c On repere si il l'a deja ete pour un des cotes.
344 #ifdef _DEBUG_HOMARD_
345 write (ulsort,texte(langue,9)) mess14(langue,1,-1), som(jaux)
347 fammed(1) = tbaux2(1,nujois)
348 fammed(2) = tbaux2(2,nujois)
349 cgn write(ulsort,*) 'fammed des 2 cotes', fammed
350 do 322 , laux = 1 , 2
351 do 3221 , kaux = 1 , nbduno
352 cgn write(ulsort,*) 'Duplication nro', kaux
353 cgn write(ulsort,*)'no dup', tbau30(1,kaux), ', j simp',tbau30(5,kaux)
354 if ( tbau30(1,kaux).eq.som(jaux) ) then
355 nujoi0 = tbau30(5,kaux)
356 cgn write(ulsort,*) 'Joint nro', nujoi0
357 cgn write(ulsort,*) 'avec fammed',tbaux2(1,nujoi0),tbaux2(2,nujoi0)
358 if ( tbaux2(1,nujoi0).eq.fammed(laux) ) then
359 lenoe0(laux) = tbau30(3,kaux)
361 elseif ( tbaux2(2,nujoi0).eq.fammed(laux) ) then
362 lenoe0(laux) = tbau30(4,kaux)
368 lenoe0(laux) = indnoe
371 c 3.2.3. ==> Reperage de l'arete partant du noeud vers le volume
373 do 323 , kaux = 1 , 2
375 letetr = tbaux1(2+kaux,iaux)
376 call utarte ( letetr,
378 > aretri, tritet, cotrte,
380 cgn write(ulsort,90002) mess14(langue,4,1)//'du noeud', listar
382 do 3231 , laux = 1 , 6
384 if ( listar(laux).ne.are(1) .and.
385 > listar(laux).ne.are(2) .and.
386 > listar(laux).ne.are(3) ) then
387 cgn write(ulsort,90002) mess14(langue,2,1), listar(laux)
388 if ( somare(1,listar(laux)).eq.som(jaux) ) then
389 laret1(kaux) = listar(laux)
390 elseif ( somare(2,listar(laux)).eq.som(jaux) ) then
391 laret1(kaux) = -listar(laux)
399 c 3.2.4. ==> Enregistrement
401 #ifdef _DEBUG_HOMARD_
402 write (ulsort,texte(langue,31)) mess14(langue,3,-1), lenoe0
403 write (ulsort,texte(langue,31)) mess14(langue,1,1), indare+1
407 tbau30(1,nbduno) = som(jaux)
408 tbau30(2,nbduno) = indare
409 tbau30(3,nbduno) = lenoe0(1)
410 tbau30(4,nbduno) = lenoe0(2)
411 tbau30(5,nbduno) = nujois
412 tbau30(6,nbduno) = laret1(1)
413 tbau30(7,nbduno) = laret1(2)
419 #ifdef _DEBUG_HOMARD_
420 write (ulsort,texte(langue,8)) mess14(langue,3,-1), nbduno
421 write (ulsort,texte(langue,7)) mess14(langue,3,1), nbduno
430 if ( codret.ne.0 ) then
434 write (ulsort,texte(langue,1)) 'Sortie', nompro
435 write (ulsort,texte(langue,2)) codret
439 #ifdef _DEBUG_HOMARD_
440 write (ulsort,texte(langue,1)) 'Sortie', nompro