1 subroutine cmdrhe ( arequa, decfac, quahex, hethex,
2 > filhex, disare, disqua, dishex,
7 c ______________________________________________________________________
11 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
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
19 c HOMARD est une marque deposee d'Electricite de France
25 c ______________________________________________________________________
27 c Creation du Maillage - Deraffinement - Regroupement des Hexaedres
29 c ______________________________________________________________________
31 c . nom . e/s . taille . description .
32 c .____________________________________________________________________.
33 c . arequa . e .nouvqu*4. numeros des 4 aretes des quadrangles .
34 c . decfac . e . -nbquto. decision sur les faces (quad. + tri.) .
36 c . quahex . e .nouvhf*6. numeros des 6 quadrangles des hexaedres .
37 c . hethex . e . nouvhe . historique de l'etat des hexaedres .
38 c . filhex . e . nouvhe . premier fils des hexaedres .
39 c . disare . s . nouvar . indicateurs de disparition des aretes .
40 c . disqua . s . nouvqu . indicateurs de disparition des quadrangles .
41 c . dishex . s . nouvhe . indicateurs de disparition des hexaedres .
42 c . somare . e .2*nouvar. numeros des extremites d'arete .
43 c . disnoe . s . nouvno . indicateurs de disparition des noeuds .
44 c . np2are . e . nouvar . numero des noeuds p2 milieux d'aretes .
45 c . codret . e/s . 1 . code de retour des modules .
46 c . . . . 0 : pas de probleme .
47 c ______________________________________________________________________
50 c 0. declarations et dimensionnement
53 c 0.1. ==> generalites
60 parameter ( nompro = 'CMDRHE' )
73 c remarque : "disnoe", "disare", "dishex" et "disqua" sont des
74 c tableaux temporaires destines a la suppression ulterieure des
75 c entites. par convention, une valeur 0 indique la conservation et
76 c une valeur 1 la disparition de l'entite concernee par la liste.
78 integer decfac(-nbquto:nbtrto)
79 integer arequa(nouvqu,4)
80 integer quahex(nouvhf,6)
81 integer hethex(nouvhe), filhex(nouvhe), disare(nouvar)
82 integer disqua(nouvqu), dishex(nouvhe), disnoe(nouvno)
83 integer somare(2,nouvar)
84 integer np2are(nouvar)
88 c 0.4. ==> variables locales
90 integer pf1n5, pf1n6, pf1n7, pf1n8
91 integer pf2n2, pf2n3, pf2n10, pf2n11
92 integer pf3n1, pf3n4, pf3n9, pf3n12
93 integer nf1n0,nf2n0,nf3n0,nf4n0,nf5n0,nf6n0
95 integer lehexa, lefils, leprem
96 integer etahex, dt, d1, d2, d3, d4, d5, d6
98 c 0.5. ==> initialisations
103 c ______________________________________________________________________
106 c 1. traitement des hexaedres
109 do 100 , lehexa = 1 , nbhepe
111 etahex = mod(hethex(lehexa),1000)
113 if ( etahex.eq.8 ) then
115 c 1.1. ==> verification de l'etat des 6 faces de l'hexaedre
116 c attention, cette methode pour verifier l'etat n'est valable
117 c que si la seule solution pour obtenir "-6" a partir des
118 c decisions sur les faces est d'avoir 6 fois "-1",
119 c et idem pour "-5", "-4" ou "-3".
121 d1 = decfac(-quahex(lehexa,1))
122 d2 = decfac(-quahex(lehexa,2))
123 d3 = decfac(-quahex(lehexa,3))
124 d4 = decfac(-quahex(lehexa,4))
125 d5 = decfac(-quahex(lehexa,5))
126 d6 = decfac(-quahex(lehexa,6))
127 dt = d1 + d2 + d3 + d4 + d5 + d6
129 c 1.2. ==> cas ou les 6 faces du hexaedre sont a reactiver
133 c 1.2.1. ==> marquage de ses huit hexaedres fils "a disparaitre"
135 leprem = filhex(lehexa)
137 do 210 , lefils = leprem , leprem + 7
143 c 1.2.2. ==> marquage de ses douze faces internes "a disparaitre"
146 pf1n5=quahex(lefils,6)
148 pf2n2=quahex(lefils,5)
150 pf3n1=quahex(lefils,4)
154 pf2n3=quahex(lefils,5)
156 pf1n6=quahex(lefils,6)
160 pf3n4=quahex(lefils,3)
162 pf1n8=quahex(lefils,6)
166 pf1n7=quahex(lefils,6)
170 pf3n9=quahex(lefils,3)
172 pf2n11=quahex(lefils,5)
176 pf2n10=quahex(lefils,5)
180 pf3n12=quahex(lefils,4)
183 c 1.2.3. ==> recherche des aretes internes "a disparaitre"
185 nf1n0=arequa(pf2n2,2)
187 if ( degre.eq.2 ) then
188 disnoe(np2are(nf1n0)) = 1
191 nf2n0=arequa(pf1n6,2)
193 if ( degre.eq.2 ) then
194 disnoe(np2are(nf2n0)) = 1
197 nf3n0=arequa(pf1n5,2)
199 if ( degre.eq.2 ) then
200 disnoe(np2are(nf3n0)) = 1
203 nf4n0=arequa(pf1n8,2)
205 if ( degre.eq.2 ) then
206 disnoe(np2are(nf4n0)) = 1
209 nf5n0=arequa(pf1n7,2)
211 if ( degre.eq.2 ) then
212 disnoe(np2are(nf5n0)) = 1
215 nf6n0=arequa(pf3n9,2)
217 if ( degre.eq.2 ) then
218 disnoe(np2are(nf6n0)) = 1
221 c 1.2.4. ==> recherche du point central
223 disnoe(somare(2,nf1n0)) = 1