1 subroutine utcte4 ( option, nborig, tborig,
4 > ulsort, langue, 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 UTilitaire - Conversion de Tableau Entier - action 4
28 c On retourne un tableau entier qui contient :
29 c . soit 0 si le critere n'est pas satisfait,
30 c . soit le rang correspondant si le critere est satisfait
31 c . si option = 1 : on retient les valeurs non nulles
32 c . si option = 2 : on retient les valeurs strictement positives
33 c . si option = 3 : on retient les valeurs strictement negatives
35 c Exemples : tableau d'origine : ( 0, 13, 0, -1, 4, -3, 0, 1 )
37 c option 1 : ordonne les valeurs non nulles
38 c tableau converti : ( 0, 5, 0, 2, 4, 1, 0, 3)
39 c option 2 : ordonne les valeurs > 0
40 c tableau converti : ( 0, 3, 0, 0, 2, 0, 0, 1)
41 c option 3 : ordonne les valeurs < 0
42 c tableau converti : ( 0, 0, 0, 2, 0, 1, 0, 0)
44 c remarque : l'action elle-meme est faite ici
45 c on peut enrober ce traitement par utcte2, pour gerer
46 c des allocations de tableau
47 c ______________________________________________________________________
49 c . nom . e/s . taille . description .
50 c .____________________________________________________________________.
51 c . option . e . 1 . option de la conversion .
52 c . . . . option = 1 : les valeurs non nulles .
53 c . . . . option = 2 : les valeurs > 0 .
54 c . . . . option = 3 : les valeurs < 0 .
55 c . . . . option > 0 : rang dans le tableau initial .
56 c . . . . option < 0 : numero d'apparition .
57 c . nborig . e . 1 . nombre de valeurs dasn le tableau original .
58 c . tborig . e . nborig . tableau original a convertir .
59 c . tbconv . s . nborig . tableau converti .
60 c . tbaux1 . aux . nborig . tableau auxiliaire 1 .
61 c . classt . aux . nborig . tableau auxiliaire 2 .
62 c . ulsort . e . 1 . numero d'unite logique de la liste standard.
63 c . langue . e . 1 . langue des messages .
64 c . . . . 1 : francais, 2 : anglais .
65 c . codret . es . 1 . code de retour des modules .
66 c . . . . 0 : pas de probleme .
67 c . . . . -1 : mauvaise demande pour le type de nom .
68 c . . . . -2 : mauvaise demande pour l'option .
69 c . . . . -3 : probleme sur le tableau a convertir .
70 c . . . . autre : probleme dans l'allocation .
71 c ______________________________________________________________________
74 c 0. declarations et dimensionnement
77 c 0.1. ==> generalites
83 parameter ( nompro = 'UTCTE4' )
95 integer tborig(nborig), tbconv(nborig)
96 integer tbaux1(nborig), classt(nborig)
98 integer ulsort, langue, codret
100 c 0.4. ==> variables locales
102 integer iaux, jaux, kaux
104 integer nbvalm, nbvalp
107 parameter ( nbmess = 10 )
108 character*80 texte(nblang,nbmess)
110 c 0.5. ==> initialisations
111 c ______________________________________________________________________
119 #ifdef _DEBUG_HOMARD_
120 write (ulsort,texte(langue,1)) 'Entree', nompro
124 texte(1,4) = '(''Option :'',i4)'
125 texte(1,5) = '(''Mauvaise demande d''''option :'',i8)'
127 >'(''Tableau '',a,'', de'',i13,'' a'',i13,'' : '',5i13,/,50x,5i13)'
128 texte(1,7) = '(''Nombre de valeurs '',a,'' : '',i13)'
129 texte(1,8) = '(''Valeur '',a,'' : '',i13)'
131 texte(2,4) = '(''Option :'',i4)'
132 texte(2,5) = '(''Bad request for the option :'',i8)'
134 >'(''Array '',a,'', from'',i13,'' to'',i13,'' :'',5i13,/,49x,5i13)'
135 texte(2,7) = '(''Number of values '',a,'' : '',i13)'
136 texte(2,8) = '(''Value '',a,'' : '',i13)'
138 #ifdef _DEBUG_HOMARD_
139 write (ulsort,texte(langue,4)) option
144 #ifdef _DEBUG_HOMARD_
145 iaux = min(nborig,10)
146 write (ulsort,texte(langue,6)) 'initial', 1, iaux,
147 > (tborig(jaux),jaux=1,iaux)
148 if ( nborig.gt.10 ) then
149 write (ulsort,texte(langue,6)) 'initial', nborig-iaux+1,nborig,
150 > (tborig(iaux),iaux=nborig-iaux+1,nborig)
155 c 2. creation du tableau epure
161 c 2.0. ==> mise a zero par defaut
163 do 20 , iaux = 1 , nborig
167 c 2.1. ==> on considere toutes les valeurs non nulles
169 if ( option.eq.1 ) then
171 do 21 , iaux = 1 , nborig
173 if ( tborig(iaux).lt.0 ) then
175 tbaux1(iaux) = tborig(iaux)
176 elseif ( tborig(iaux).gt.0 ) then
178 tbaux1(iaux) = tborig(iaux)
183 c 2.2. ==> on considere toutes les valeurs non nulles et positives
185 elseif ( option.eq.2 ) then
187 do 22 , iaux = 1 , nborig
189 if ( tborig(iaux).gt.0 ) then
191 tbaux1(iaux) = tborig(iaux)
196 c 2.3. ==> on considere toutes les valeurs non nulles et positives
198 elseif ( option.eq.3 ) then
200 do 23 , iaux = 1 , nborig
202 if ( tborig(iaux).lt.0 ) then
204 tbaux1(iaux) = tborig(iaux)
217 #ifdef _DEBUG_HOMARD_
218 if ( option.eq.1 .or. option.eq.3 ) then
219 write (ulsort,texte(langue,7)) '< 0', nbvalm
221 if ( option.eq.1 .or. option.eq.2 ) then
222 write (ulsort,texte(langue,7)) '> 0', nbvalp
224 iaux = min(nborig,10)
225 write (ulsort,texte(langue,6)) 'filtre ', 1, iaux,
226 > (tbaux1(jaux),jaux=1,iaux)
227 if ( nborig.gt.10 ) then
228 write (ulsort,texte(langue,6)) 'filtre ',
229 > nborig-iaux+1, nborig,
230 > (tbaux1(iaux),iaux=nborig-iaux+1,nborig)
235 c 3. tri du tableau epure
238 if ( codret.eq.0 ) then
240 #ifdef _DEBUG_HOMARD_
241 write (ulsort,texte(langue,3)) 'UTTRII', nompro
243 call uttrii ( classt, vmin, vmax,
245 > ulsort, langue, codret)
247 #ifdef _DEBUG_HOMARD_
248 write (ulsort,texte(langue,8)) 'mini', vmin
249 write (ulsort,texte(langue,8)) 'maxi', vmax
250 iaux = min(nborig,10)
251 write (ulsort,texte(langue,6)) 'classt ', 1, iaux,
252 > (classt(jaux),jaux=1,iaux)
253 if ( nborig.gt.10 ) then
254 write (ulsort,texte(langue,6)) 'classt ', nborig-iaux+1,nborig,
255 > (classt(jaux),jaux=nborig-iaux+1,nborig)
265 if ( codret.eq.0 ) then
267 do 40 , iaux = 1 , nborig
271 do 41 , iaux = 1 , nbvalm
272 tbconv(classt(iaux)) = iaux
275 jaux = nborig - nbvalp + 1
276 kaux = nbvalm + 1 - jaux
277 do 42 , iaux = jaux , nborig
278 tbconv(classt(iaux)) = iaux + kaux
281 #ifdef _DEBUG_HOMARD_
282 iaux = min(nborig,10)
283 write (ulsort,texte(langue,6)) 'tbconv ', 1, iaux,
284 > (tbconv(jaux),jaux=1,iaux)
285 if ( nborig.gt.10 ) then
286 write (ulsort,texte(langue,6)) 'tbconv ', nborig-iaux+1,nborig,
287 > (tbconv(jaux),jaux=nborig-iaux+1,nborig)
297 if ( codret.ne.0 ) then
301 write (ulsort,texte(langue,1)) 'Sortie', nompro
302 write (ulsort,texte(langue,2)) codret
303 write (ulsort,texte(langue,5)) option
307 #ifdef _DEBUG_HOMARD_
308 write (ulsort,texte(langue,1)) 'Sortie', nompro