1 subroutine deisv4 ( ncmpin, usacmp, vasmax,
2 > lamail, nbvolu, lesvol,
3 > nbenti, enindi, eninin,
4 > nbenvo, vosupp, voinin,
6 > ulsort, langue, codret )
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 traitement des DEcisions - Initialisations - par Saut - Volumes - 4
29 c Exploration de la pile des voisins d'une maille
30 c ______________________________________________________________________
32 c . nom . e/s . taille . description .
33 c .____________________________________________________________________.
34 c . ncmpin . e . 1 . nombre de composantes de l'indicateur .
35 c . usacmp . e . 1 . usage des composantes de l'indicateur .
36 c . . . . 0 : norme L2 .
37 c . . . . 1 : norme infinie -max des valeurs absolues.
38 c . . . . 2 : valeur relative si une seule composante.
39 c . vasmax . es . 1 . valeur max du saut de l'indicateur .
40 c . lamail . e . 1 . la maille en cours d'examen .
41 c . nbvolu . e . 1 . nombre de volumes a examiner .
42 c . lesvol . e . nbvolu . les volumes a examiner .
43 c . nbenti . e . 1 . nombre d'entites courantes .
44 c . eninin . e . ncmpin . valeur brute de l'indicateur sur la maille .
45 c . enindi . es . ncmpin . valeur du saut de l'indicateur .
46 c . nbenvo . e . 1 . nombre d'entites du type des voisines .
47 c . vosupp . e . nbenvo . support pour les entites voisines .
48 c . voinin . e . nbenvo . valeurs initiales pour les entites voisines.
49 c . valaux . a . ncmpin . tableau auxiliaire .
50 c . ulsort . e . 1 . numero d'unite logique de la liste standard.
51 c . langue . e . 1 . langue des messages .
52 c . . . . 1 : francais, 2 : anglais .
53 c . codret . es . 1 . code de retour des modules .
54 c . . . . 0 : pas de probleme .
55 c . . . . 2 : probleme dans le traitement .
56 c ______________________________________________________________________
59 c 0. declarations et dimensionnement
62 c 0.1. ==> generalites
68 parameter ( nompro = 'DEISV4' )
83 integer nbvolu, lesvol(nbvolu)
85 integer nbenvo, vosupp(nbenvo)
87 integer ulsort, langue, codret
89 double precision vasmax
90 double precision eninin(nbenti,ncmpin), enindi(nbenti,ncmpin)
91 double precision voinin(nbenvo,ncmpin)
92 double precision valaux(ncmpin)
94 c 0.4. ==> variables locales
97 integer nuvolu, levolu
102 parameter (nbmess = 10 )
103 character*80 texte(nblang,nbmess)
104 c ______________________________________________________________________
110 c 1.1. ==> Les messages
115 #ifdef _DEBUG_HOMARD_
116 write (ulsort,texte(langue,1)) 'Entree', nompro
120 texte(1,4) = '(''. Norme L2 des composantes.'')'
121 texte(1,5) = '(''. Norme infinie des composantes.'')'
122 texte(1,6) = '(''. Valeur relative de la composante.'')'
123 texte(1,7) = '(''. Saut avec '',i10,'' mailles'')'
125 texte(2,4) = '(''. L2 norm of components.'')'
126 texte(2,5) = '(''. Infinite norm of components.'')'
127 texte(2,6) = '(''. Relative value for the component.'')'
128 texte(2,7) = '(''. Jump with the '',i10,'' meshes'')'
132 #ifdef _DEBUG_HOMARD_
133 write (ulsort,texte(langue,4+usacmp))
134 write (ulsort,texte(langue,7)) nbvolu
138 c 2. On parcourt tous les volumes de la pile :
139 c on cherche le max de l'ecart entre la valeur de l'indicateur
140 c sur ce volume voisin et celle sur le volume courant
142 #ifdef _DEBUG_HOMARD_
143 write (ulsort,*) '2. parcours volumes pile ; codret = ', codret
146 do 2 , nuvolu = 1 , nbvolu
148 levolu = lesvol(nuvolu)
150 if ( vosupp(levolu).ne.0 ) then
152 c 2.1. ==> Calcul de l'ecart entre la valeur sur la maille en cours
153 c de test et le volume a examiner
155 do 21 , iaux = 1 , ncmpin
156 valaux(iaux) = voinin(levolu,iaux) - eninin(lamail,iaux)
159 c 2.2. ==> Calcul de la norme ; si on a passe le max, on stocke
160 c 2.2.1. ==> Calcul de la norme
162 if ( usacmp.eq.0 ) then
165 do 2211 , iaux = 2 , ncmpin
166 daux = daux + valaux(iaux)**2
169 elseif ( usacmp.eq.1 ) then
171 daux = abs(valaux(1))
172 do 2212 , iaux = 2 , ncmpin
173 daux = max(daux,abs(valaux(iaux)))
182 c 2.2.2. ==> On a passe le max : on stocke
184 if ( daux.gt.vasmax ) then
186 do 222 , iaux = 1 , ncmpin
187 enindi(lamail,iaux) = valaux(iaux)
199 if ( codret.ne.0 ) then
203 write (ulsort,texte(langue,1)) 'Sortie', nompro
204 write (ulsort,texte(langue,2)) codret
208 #ifdef _DEBUG_HOMARD_
209 write (ulsort,texte(langue,1)) 'Sortie', nompro