]> SALOME platform Git repositories - modules/homard.git/blob - src/tool/Decision/deinor.F
Salome HOME
Copyright update 2022
[modules/homard.git] / src / tool / Decision / deinor.F
1       subroutine deinor ( nivmax,
2      >                    decare,
3      >                    somare, hetare,
4      >                    np2are, posifa, facare,
5      >                    nivtri,
6      >                    nivqua,
7      >                    nosupp, noindi,
8      >                    ulsort, langue, codret)
9 c ______________________________________________________________________
10 c
11 c                             H O M A R D
12 c
13 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
14 c
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
20 c
21 c    HOMARD est une marque deposee d'Electricite de France
22 c
23 c Copyright EDF 1996
24 c Copyright EDF 1998
25 c Copyright EDF 2002
26 c Copyright EDF 2020
27 c ______________________________________________________________________
28 c
29 c traitement des DEcisions - Initialisation de l'indicateur entier
30 c                --          -
31 c                          - cas des NOeuds - Raffinement
32 c                                    --       -
33 c ______________________________________________________________________
34 c .        .     .        .                                            .
35 c .  nom   . e/s . taille .           description                      .
36 c .____________________________________________________________________.
37 c . nivmax . e   .   1    . niveau max a ne pas depasser en raffinement.
38 c . decare .  s  .0:nbarto. decisions des aretes                       .
39 c . somare . e   .2*nbarto. numeros des extremites d'arete             .
40 c . hetare . e   . nbarto . historique de l'etat des aretes            .
41 c . nivtri . e   . nbtrto . niveau des triangles                       .
42 c . nivqua . e   . nbquto . niveau des quadrangles                     .
43 c . nosupp . e   . nbnoto . support pour les noeuds                    .
44 c . noindi . e   . nbnoto . valeurs entieres pour les noeuds           .
45 c . ulsort . e   .   1    . numero d'unite logique de la liste standard.
46 c . langue . e   .    1   . langue des messages                        .
47 c .        .     .        . 1 : francais, 2 : anglais                  .
48 c . codret . es  .    1   . code de retour des modules                 .
49 c .        .     .        . 0 : pas de probleme                        .
50 c .        .     .        . 2 : probleme dans le traitement            .
51 c ______________________________________________________________________
52 c
53 c====
54 c 0. declarations et dimensionnement
55 c====
56 c
57 c 0.1. ==> generalites
58 c
59       implicit none
60       save
61 c
62       character*6 nompro
63       parameter ( nompro = 'DEINOR' )
64 c
65 #include "nblang.h"
66 c
67 c 0.2. ==> communs
68 c
69 #include "envex1.h"
70 #include "envca1.h"
71 #include "nombno.h"
72 #include "nombar.h"
73 #include "nombtr.h"
74 #include "nombqu.h"
75 #include "impr02.h"
76 c
77 c 0.3. ==> arguments
78 c
79       integer nivmax
80       integer decare(0:nbarto)
81       integer somare(2,nbarto), hetare(nbarto)
82       integer nivtri(nbtrto)
83       integer nivqua(nbquto)
84       integer np2are(nbarto), posifa(0:nbarto), facare(nbfaar)
85       integer nosupp(nbnoto), noindi(nbnoto)
86 c
87       integer ulsort, langue, codret
88 c
89 c 0.4. ==> variables locales
90 c
91       integer larete
92       integer iaux, jaux, kaux, ideb, ifin
93 c
94       integer nbmess
95       parameter (nbmess = 10 )
96       character*80 texte(nblang,nbmess)
97 c ______________________________________________________________________
98 c
99 c====
100 c 1. initialisation
101 c====
102 c
103 #include "impr01.h"
104 c
105 #ifdef _DEBUG_HOMARD_
106       write (ulsort,texte(langue,1)) 'Entree', nompro
107       call dmflsh (iaux)
108 #endif
109 c
110 #include "impr03.h"
111 c
112 #include "impr05.h"
113 c
114 #ifdef _DEBUG_HOMARD_
115       write(ulsort,90002) 'degre', degre
116 #endif
117 c
118       codret = 0
119 cgn      print *,'decare :'
120 cgn      print 91011,decare
121 cgn      do 1999 , iaux = 1, nbnoto
122 cgn        if ( nosupp(iaux).ne.0 ) then
123 cgn          write (ulsort,90112) 'noindi',iaux,noindi(iaux)
124 cgn        endif
125 cgn 1999 continue
126 c
127 c====
128 c 3. traitement des indicateurs portant sur les noeuds
129 c====
130 c
131 #ifdef _DEBUG_HOMARD_
132         write(ulsort,texte(langue,4)) mess14(langue,3,-1)
133 #endif
134 c
135 #ifdef _DEBUG_HOMARD_
136         write(ulsort,texte(langue,5))
137 #endif
138 c
139         iaux = 0
140 c
141         if ( degre.eq.1 ) then
142 c
143           do 321 , larete = 1, nbarto
144             if ( mod( hetare(larete) , 10 ).eq.0 ) then
145               if ( nosupp(somare(1,larete)).ne.0 .and.
146      >             nosupp(somare(2,larete)).ne.0 ) then
147                 if ( noindi(somare(1,larete)).eq.1 .and.
148      >               noindi(somare(2,larete)).eq.1 ) then
149                   ideb = posifa(larete-1)+1
150                   ifin = posifa(larete)
151                   jaux = 0
152                   if ( ifin.ge.ideb .and. nivmax.ge.0 ) then
153                     if ( facare(ideb).gt.0 ) then
154                       kaux = nivtri(facare(ideb))
155                     else
156                       kaux = nivqua(-facare(ideb))
157                     endif
158                     if ( kaux.ge.nivmax ) then
159                       jaux = 1
160                     endif
161                   endif
162                   if ( jaux.eq.0 ) then
163 cgn        write(ulsort,90002) 'Raffinement de l''''arete', larete
164                     decare(larete) = 2
165                   else
166                     iaux = iaux + 1
167                   endif
168                 endif
169               endif
170             endif
171   321     continue
172 c
173         else
174 c
175           do 322 , larete = 1, nbarto
176             if ( mod( hetare(larete) , 10 ).eq.0 ) then
177               if ( nosupp(somare(1,larete)).ne.0 .and.
178      >             nosupp(somare(2,larete)).ne.0 .and.
179      >             nosupp(np2are(larete)).ne.0 ) then
180                 if ( noindi(somare(1,larete)).eq.1 .and.
181      >               noindi(somare(2,larete)).eq.1 .and.
182      >               noindi(np2are(larete))  .eq.1 ) then
183                   ideb = posifa(larete-1)+1
184                   ifin = posifa(larete)
185                   jaux = 0
186                   if ( ifin.ge.ideb .and. nivmax.ge.0 ) then
187                     if ( facare(ideb).gt.0 ) then
188                       kaux = nivtri(facare(ideb))
189                     else
190                       kaux = nivqua(-facare(ideb))
191                     endif
192                     if ( kaux.ge.nivmax ) then
193                       jaux = 1
194                     endif
195                   endif
196                   if ( jaux.eq.0 ) then
197 cgn        write(ulsort,90002) 'Raffinement de l''''arete', larete
198                     decare(larete) = 2
199                   else
200                     iaux = iaux + 1
201                   endif
202                 endif
203               endif
204             endif
205   322     continue
206 c
207         if ( iaux.ne.0 ) then
208           write(ulsort,texte(langue,10))
209           write(ulsort,texte(langue,4)) mess14(langue,3,-1)
210           write(ulsort,texte(langue,7)) nivmax
211           write(ulsort,texte(langue,9)) iaux
212         endif
213 c
214         endif
215 c
216 c====
217 c 4. la fin
218 c====
219 c
220       if ( codret.ne.0 ) then
221 c
222 #include "envex2.h"
223 c
224       write (ulsort,texte(langue,1)) 'Sortie', nompro
225       write (ulsort,texte(langue,2)) codret
226 c
227       endif
228 c
229 #ifdef _DEBUG_HOMARD_
230       write (ulsort,texte(langue,1)) 'Sortie', nompro
231       call dmflsh (iaux)
232 #endif
233 c
234       end