Salome HOME
Homard executable
[modules/homard.git] / src / tool / Decision / deinoi.F
1       subroutine deinoi ( decare, decfac,
2      >                    somare, merare,
3      >                    np2are, posifa, facare,
4      >                    nosupp,
5      >                    ulsort, langue, codret)
6 c ______________________________________________________________________
7 c
8 c                             H O M A R D
9 c
10 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
11 c
12 c Version originale enregistree le 18 juin 1996 sous le numero 96036
13 c aupres des huissiers de justice Simart et Lavoir a Clamart
14 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
15 c aupres des huissiers de justice
16 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
17 c
18 c    HOMARD est une marque deposee d'Electricite de France
19 c
20 c Copyright EDF 1996
21 c Copyright EDF 1998
22 c Copyright EDF 2002
23 c Copyright EDF 2020
24 c ______________________________________________________________________
25 c
26 c traitement des DEcisions - INitialisation de l'indicateur entier
27 c                --          --
28 c                          - cas des NOeuds - Initialisation
29 c                                    --       -
30 c ______________________________________________________________________
31 c .        .     .        .                                            .
32 c .  nom   . e/s . taille .           description                      .
33 c .____________________________________________________________________.
34 c . decare .  s  .0:nbarto. decisions des aretes                       .
35 c . decfac .  s  . -nbquto. decision sur les faces (quad. + tri.)      .
36 c .        .     . :nbtrto.                                            .
37 c . somare . e   .2*nbarto. numeros des extremites d'arete             .
38 c . merare . e   . nbarto . mere des aretes                            .
39 c . nosupp . e   . nbnoto . support pour les noeuds                    .
40 c . ulsort . e   .   1    . numero d'unite logique de la liste standard.
41 c . langue . e   .    1   . langue des messages                        .
42 c .        .     .        . 1 : francais, 2 : anglais                  .
43 c . codret . es  .    1   . code de retour des modules                 .
44 c .        .     .        . 0 : pas de probleme                        .
45 c .        .     .        . 2 : probleme dans le traitement            .
46 c ______________________________________________________________________
47 c
48 c====
49 c 0. declarations et dimensionnement
50 c====
51 c
52 c 0.1. ==> generalites
53 c
54       implicit none
55       save
56 c
57       character*6 nompro
58       parameter ( nompro = 'DEINOI' )
59 c
60 #include "nblang.h"
61 c
62 c 0.2. ==> communs
63 c
64 #include "envex1.h"
65 #include "envca1.h"
66 #include "nombno.h"
67 #include "nombar.h"
68 #include "nombtr.h"
69 #include "nombqu.h"
70 #include "impr02.h"
71 c
72 c 0.3. ==> arguments
73 c
74       integer decare(0:nbarto), decfac(-nbquto:nbtrto)
75       integer somare(2,nbarto), merare(nbarto)
76       integer np2are(nbarto), posifa(0:nbarto), facare(nbfaar)
77       integer nosupp(nbnoto)
78 c
79       integer ulsort, langue, codret
80 c
81 c 0.4. ==> variables locales
82 c
83       integer larete, lamere
84       integer iaux, ideb, ifin
85 c
86       integer nbmess
87       parameter (nbmess = 10 )
88       character*80 texte(nblang,nbmess)
89 c ______________________________________________________________________
90 c
91 c====
92 c 1. initialisation
93 c====
94 c
95 #include "impr01.h"
96 c
97 #ifdef _DEBUG_HOMARD_
98       write (ulsort,texte(langue,1)) 'Entree', nompro
99       call dmflsh (iaux)
100 #endif
101 c
102 #include "impr03.h"
103 c
104 #include "impr05.h"
105 c
106       codret = 0
107 c
108 c====
109 c 2. traitement des indicateurs portant sur les noeuds
110 c====
111 c
112 #ifdef _DEBUG_HOMARD_
113       write(ulsort,texte(langue,4)) mess14(langue,3,-1)
114 #endif
115 c
116 c 2.1. ==> Degre 1
117 c
118       if ( degre.eq.1 ) then
119 c
120         do 21 , larete = 1, nbarto
121 c
122           if ( nosupp(somare(1,larete)).ne.0 .and.
123      >         nosupp(somare(2,larete)).ne.0 ) then
124 cgn        write(ulsort,*) 'Arete', larete, ' a garder'
125 c
126 c 2.1.1. ==> Inhibition du raffinement par defaut : on garde l'arete
127 c            entre les noeuds
128 c
129             decare(larete) = 0
130             ideb = posifa(larete-1)+1
131             ifin = posifa(larete)
132             do 211 , iaux = ideb, ifin
133 cgn              write(ulsort,*) 'face', facare(iaux), ' a garder'
134               decfac(facare(iaux)) = 0
135   211       continue
136 c
137 c 2.1.2. ==> Inhibition du deraffinement par defaut : on garde la mere
138 c            de l'arete entre les noeuds si elle existe
139 c
140             lamere = merare(larete)
141 c
142             if ( lamere.gt.0 ) then
143 c
144               decare(lamere) = 0
145 cgn            write(ulsort,*) 'Arete', lamere, ' a garder'
146               ideb = posifa(lamere-1)+1
147               ifin = posifa(lamere)
148               do 212 , iaux = ideb, ifin
149 cgn                  write(ulsort,*) 'face', facare(iaux), ' a garder'
150                 decfac(facare(iaux)) = 0
151   212         continue
152 c
153             endif
154 c
155           endif
156 c
157    21   continue
158 c
159 c 2.2. ==> Degre 2
160 c
161       else
162 c
163         do 22 , larete = 1, nbarto
164 c
165           if ( nosupp(somare(1,larete)).ne.0 .and.
166      >         nosupp(somare(2,larete)).ne.0 .and.
167      >         nosupp(np2are(larete)).ne.0 ) then
168 c
169 c 2.2.1. ==> Inhibition du raffinement par defaut : on garde l'arete
170 c            contenant les noeuds
171 c
172 cgn        write(ulsort,*) 'Arete', larete, ' a garder'
173 c
174             decare(larete) = 0
175             ideb = posifa(larete-1)+1
176             ifin = posifa(larete)
177             do 221 , iaux = ideb, ifin
178 cgn              write(ulsort,*) 'face', facare(iaux, ' a garder'
179               decfac(facare(iaux)) = 0
180   221       continue
181 c
182 c 2.2.2. ==> Inhibition du deraffinement par defaut : on garde la mere
183 c            de l'arete contenant les noeuds si elle existe
184 c
185             lamere = merare(larete)
186 c
187             if ( lamere.gt.0 ) then
188 c
189               decare(lamere) = 0
190 cgn          write(ulsort,*) 'Arete', lamere, ' a garder'
191               ideb = posifa(lamere-1)+1
192               ifin = posifa(lamere)
193               do 222 , iaux = ideb, ifin
194 cgn                  write(ulsort,*) 'face', facare(iaux), ' a garder'
195                 decfac(facare(iaux)) = 0
196   222         continue
197 c
198             endif
199 c
200           endif
201 c
202    22   continue
203 c
204       endif
205 c
206 c====
207 c 3. la fin
208 c====
209 c
210       if ( codret.ne.0 ) then
211 c
212 #include "envex2.h"
213 c
214       write (ulsort,texte(langue,1)) 'Sortie', nompro
215       write (ulsort,texte(langue,2)) codret
216 c
217       endif
218 c
219 #ifdef _DEBUG_HOMARD_
220       write (ulsort,texte(langue,1)) 'Sortie', nompro
221       call dmflsh (iaux)
222 #endif
223 c
224       end