1 subroutine cmdrar ( hetare, filare, np2are, somare,
3 > disare, disnoe, distri, disqua,
4 > hetnoe, posifa, facare, codret )
5 c ______________________________________________________________________
9 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
11 c Version originale enregistree le 18 juin 1996 sous le numero 96036
12 c aupres des huissiers de justice Simart et Lavoir a Clamart
13 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
14 c aupres des huissiers de justice
15 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
17 c HOMARD est une marque deposee d'Electricite de France
23 c ______________________________________________________________________
25 c Creation du Maillage - Deraffinement - Regroupement des ARetes
27 c ______________________________________________________________________
29 c . nom . e/s . taille . description .
30 c .____________________________________________________________________.
31 c . hetare . e . nouvar . historique de l'etat des aretes .
32 c . filare . e . nouvar . premiere fille des aretes .
33 c . np2are . e . nouvar . numero des noeuds p2 milieux d'aretes .
34 c . somare . e .2*nouvar. numeros des extremites d'arete .
35 c . decare . e .0:nbarto. table des decisions sur les aretes .
36 c . disare . e . nouvar . indicateurs de disparition des aretes .
37 c . disnoe . e . nouvno . indicateurs de disparition des noeuds .
38 c . distri . e . nouvtr . indicateurs de disparition des triangles .
39 c . disqua . e . nouvqu . indicateurs de disparition des quadrangles .
40 c . hetnoe . e/s . nouvno . historique de l'etat des noeuds .
41 c . posifa . e .0:nbarto. pointeur sur tableau facare .
42 c . facare . e . nbfaar . liste des faces contenant une arete .
43 c . codret . s . 1 . code de retour, 0 si ok, (no arete) si pb .
44 c ______________________________________________________________________
47 c 0. declarations et dimensionnement
50 c 0.1. ==> generalites
55 cgn character*6 nompro
56 cgn parameter ( nompro = 'CMRDAR' )
66 c remarque : "disnoe", "disare", "distet" et "distri" sont des
67 c tableaux temporaires destines a la suppression ulterieure des
68 c entites. par convention, une valeur 0 indique la conservation et
69 c une valeur 1 la disparition de l'entite concernee par la liste.
71 integer hetare(nouvar), filare(nouvar), np2are(nouvar)
72 integer somare(2,nouvar), decare(0:nbarto), disare(nouvar)
73 integer disnoe(nouvno), hetnoe(nouvno), codret
74 integer distri(nouvtr), disqua(nouvqu)
75 integer posifa(0:nbarto), facare(nbfaar)
77 c 0.4. ==> variables locales
79 integer larete, lafill, noemil, noefil
80 integer ideb, ifin, facvoi, nbdisp
83 c 0.5. ==> initialisations
86 c ______________________________________________________________________
89 c 1. traitement des aretes
92 do 100 , larete = 1 , nbarpe
94 c 1.1 dans le cas ou l'arete est mere d'active
96 if ( mod( hetare(larete) , 10 ) .eq. 2 ) then
98 c 1.1.1 dans le cas ou l'arete est marquee "a reactiver"
100 if ( decare(larete) .eq. -1 ) then
102 c on verifie que les faces voisines des aretes filles de
103 c l'arete consideree sont toutes marquees a disparaitre.
104 c pour cela, on comptabilise (en negatif) le nombre de faces
105 c voisines des aretes fille marquees a disparaitre. si le
106 c total est nul, c'est que toutes les faces doivent bien
107 c disparaitre. dans ce cas, et dans ce cas seulement,
108 c on pourra marquer les aretes filles comme etant a
111 c test des faces voisines de la premiere arete fille
113 lafill = filare(larete)
114 ideb = posifa(lafill - 1) + 1
115 ifin = posifa(lafill)
117 nbdisp = ifin - ideb + 1
118 do 210 , facvoi = ideb , ifin
119 if ( facare(facvoi).gt.0 ) then
120 if (distri(facare(facvoi)).eq.1) then
124 if (disqua(-facare(facvoi)).eq.1) then
130 c test des faces voisines de la seconde arete fille
132 lafill = filare(larete) + 1
133 ideb = posifa(lafill - 1) + 1
134 ifin = posifa(lafill)
136 nbdisp = ifin - ideb + 1 + nbdisp
137 do 212 , facvoi = ideb , ifin
138 if ( facare(facvoi).gt.0 ) then
139 if (distri(facare(facvoi)).eq.1) then
143 if (disqua(-facare(facvoi)).eq.1) then
149 c verification du nombre de faces marquees a disparaitre
150 c (il ne doit pas en rester, qui ne soit pas marquees a
151 c disparaitre, pour pouvoir eliminer les aretes filles)
153 if ( nbdisp .eq. 0 ) then
155 c 1.1.1.1 marquage de ses deux aretes filles "a disparaitre"
157 lafill = filare(larete)
159 disare( lafill + 1 ) = 1
161 c 1.1.1.2 marquage des noeuds milieux "a disparaitre"
164 noefil = somare(1,lafill)
165 if ( ( noefil .eq. somare(1,lafill+1) ).or.
166 > ( noefil .eq. somare(2,lafill+1) ) ) then
169 noefil = somare(2,lafill)
170 if ( ( noefil .eq. somare(1,lafill+1) ).or.
171 > ( noefil .eq. somare(2,lafill+1) ) ) then
175 if ( noemil .eq. 0 ) then
179 if ( degre .eq. 2 ) then
181 disnoe(np2are(lafill)) = 1
182 disnoe(np2are(lafill + 1)) = 1
184 c modification de l'etat du noeud p1 milieu en p2 :
185 c . son etat anterieur, la dizaine, est conserve
186 c . son etat courant passe de 1, P1, a 2, P2
188 iaux = hetnoe(noemil) - mod(hetnoe(noemil),10)
189 hetnoe(noemil) = iaux + 2
191 if ( noemil .ne. np2are(larete) ) then