1 subroutine utcrhi ( nbclas, rclass, iclass, histog,
2 > nbval, typval, rval, ival,
3 > titcou, xlow, ulbila, ulxmgr,
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 - CReation d'un HIstogramme
27 c ______________________________________________________________________
29 c . nom . e/s . taille . description .
30 c .____________________________________________________________________.
31 c . nbclas . e . 1 . nombre de classes a affecter .
32 c . rclass . e .0:nbclas. limites des classes si reel .
33 c . iclass . e .0:nbclas. limites des classes si entier .
34 c . histog . s . nbclas . histogramme resultant .
35 c . nbval . e . 1 . nombre de valeurs a classer .
36 c . typval . e . 1 . 1 : valeurs entieres .
37 c . . . . 2 : valeurs reelles .
38 c . rval . e . nbval . valeurs reelles a classer .
39 c . ival . e . nbval . valeurs entieres a classer .
40 c . titcou . e . char*8 . titre des courbes .
41 c . xlow . e . 1 . limite basse pour les valeurs .
42 c . ulbila . e . 1 . unite logique d'ecriture du bilan .
43 c . ulxmgr . e . 1 . unite logique pour le fichier xmgrace .
44 c . ulsort . e . 1 . unite logique de la sortie generale .
45 c . langue . e . 1 . langue des messages .
46 c . . . . 1 : francais, 2 : anglais .
47 c . codret . s . 1 . code de retour des modules .
48 c . . . . 0 : pas de probleme .
49 c . . . . 1 : probleme .
50 c .____________________________________________________________________.
53 c 0. declarations et dimensionnement
56 c 0.1. ==> generalites
62 parameter ( nompro = 'UTCRHI' )
72 integer nbclas, nbval, typval
73 integer iclass(0:nbclas), histog(nbclas)
76 double precision rclass(0:nbclas)
77 double precision rval(*)
80 integer ulbila, ulxmgr
81 integer ulsort, langue, codret
85 c 0.4. ==> variables locales
88 integer ivamax, ivamin
89 integer p10max, p10min, p10dec
95 double precision rvamax, rvamin, epsilo, val10
96 double precision rvamoy, rvecty
102 parameter (nbmess = 10 )
103 character*80 texte(nblang,nbmess)
104 character*58 mess58(nblang,nbmess)
106 c 0.5. ==> initialisations
107 c ______________________________________________________________________
115 #ifdef _DEBUG_HOMARD_
116 write (ulsort,texte(langue,1)) 'Entree', nompro
120 texte(1,4) = '(''Nombre de classes : '',i8)'
121 texte(1,5) = '(''Nombre de valeurs a classer : '',i8)'
122 texte(1,6) = '(''Limite basse pour les valeurs :'',g15.6)'
123 texte(1,7) = '(''Classe'',i3,'' : '',g25.7)'
125 texte(2,4) = '(''Number of classes : '',i8)'
126 texte(2,5) = '(''Number of values to sort : '',i8)'
127 texte(2,6) = '(''Low limit for values :'',g15.6)'
128 texte(2,7) = '(''Class'',i3,'' : '',g25.7)'
132 #ifdef _DEBUG_HOMARD_
133 write (ulsort,texte(langue,4)) nbclas
134 write (ulsort,texte(langue,5)) nbval
135 write (ulsort,texte(langue,6)) xlow
136 do 1100 , iaux = 0 , nbclas
137 write (ulsort,texte(langue,7)) iaux, rclass(iaux)
141 c 1234567890123456789012345678901234567890123456789012345678
143 > ' Fonction de repartition '
145 > ' Valeurs * Nombre de mailles '
147 > ' Mini < < Maxi * par classe * cumul '
149 > ' * en % . nombre * en % . nombre '
150 c 123458789012345678901234567890123456789012345678901234
153 > ' Fonction of repartition '
155 > ' Values * Number of meshes '
157 > ' Mini < < Maxi * per class * total '
159 > ' * in % . number * in % . number '
161 10200 format( 5x,64('*'))
163 11100 format(5x,'* ',a58,' *')
166 >5x,'* Minimum : ',i11, ' Maximum : ',i15, ' *')
168 >5x,'* Minimum : ',g12.5,' Maximum : ',g12.5,' *')
170 >5x,'* Moyenne : ',g12.5,' Ecart-type : ',g12.5,' *')
172 >5x,'* Mean : ',g12.5,' Std deviation : ',g12.5,' *')
175 > '@map font 0 to "Helvetica", "Helvetica"',
176 >/,'@map color 1 to (0, 0, 0), "black"',
177 >/,'@map color 2 to (255, 0, 0), "red"',
178 >/,'@map color 4 to (0, 0, 255), "blue"')
182 >/,'@ title "',4a8,'"',
184 >/,'@ title size 1.00000',
185 >/,'@ title color 4')
192 >/,'@ s0 linestyle 1',
193 >/,'@ s0 linewidth 1',
196 >/,'@ s0 fill color 2')
198 > '@ world xmin ',g12.5,
199 >/,'@ xaxis bar color 2',
200 >/,'@ xaxis bar linestyle 1',
201 >/,'@ xaxis bar linewidth 1.0',
202 >/,'@ xaxis label "',a,'"',
203 >/,'@ xaxis label char size 0.80',
204 >/,'@ xaxis label font 0',
205 >/,'@ xaxis label color 4',
206 >/,'@ xaxis ticklabel font 0',
207 >/,'@ xaxis ticklabel char size 0.8')
209 > '@ yaxis bar color 2',
210 >/,'@ yaxis bar linestyle 1',
211 >/,'@ yaxis bar linewidth 1.0',
212 >/,'@ yaxis label "Pourcentage de mailles"',
213 >/,'@ yaxis label char size 0.80',
214 >/,'@ yaxis label font 0',
215 >/,'@ yaxis label color 4',
216 >/,'@ yaxis ticklabel font 0',
217 >/,'@ yaxis ticklabel char size 0.8')
218 21250 format(1x,g13.7,3x,g13.7)
221 >'* ',f8.3,' < ',f8.3,' *',f6.2,' .',i10,' *',f7.2,' .',i10,' *')
223 >'* ',g8.3,' < ',g8.3,' *',f6.2,' .',i10,' *',f7.2,' .',i10,' *')
225 >'*', f9.2,' <', f9.2,' *',f6.2,' .',i10,' *',f7.2,' .',i10,' *')
227 >'*', g9.2,' <', g9.2,' *',f6.2,' .',i10,' *',f7.2,' .',i10,' *')
229 >'* ',f8.3,' < inf. *',f6.2,' .',i10,' * 100.00 .',i10,' *')
234 c 1.2. ==> variables locales
238 if ( ulxmgr.gt.0 ) then
240 elseif ( ulxmgr.lt.0 ) then
250 #ifdef _DEBUG_HOMARD_
251 write (ulsort,90002) '2. classement ; codret', codret
254 if ( codret.eq.0 ) then
256 c 2.1. ==> preparation du classement
258 do 21 , jaux = 1 , nbclas
262 c 2.2. ==> recherche des extrema et rangement des valeurs en entier
264 if ( typval.eq.1 ) then
269 do 22 , iaux = 1 , nbval
271 ivamin = min ( ivamin , ival(iaux) )
272 ivamax = max ( ivamax , ival(iaux) )
274 do 221 , jaux = 1 , nbclas
275 if ( ival(iaux).ge.iclass(jaux-1) .and.
276 > ival(iaux).lt.iclass(jaux) ) then
277 histog(jaux) = histog(jaux) + 1
289 c 2.3. ==> recherche des extrema et rangement des valeurs en reel
290 c on elargit temporairement les bornes inferieure, rclass(0),
291 c et superieure, rclass(nbclas), pour etre certain de ne rien
292 c rater dans le classement.
294 elseif ( typval.eq.2 ) then
296 epsilo = 1.d-5*(rclass(nbclas)-rclass(0))
297 rclass(0) = rclass(0) - epsilo
298 rclass(nbclas) = rclass(nbclas) + epsilo
305 do 23 , iaux = 1 , nbval
307 rvamin = min ( rvamin , rval(iaux) )
308 rvamax = max ( rvamax , rval(iaux) )
309 rvamoy = rvamoy + rval(iaux)
310 rvecty = rvecty + rval(iaux)**2
312 do 231 , jaux = 1 , nbclas
313 if ( rval(iaux).ge.rclass(jaux-1) .and.
314 > rval(iaux).lt.rclass(jaux) ) then
315 histog(jaux) = histog(jaux) + 1
324 rvamoy = rvamoy / dble(nbval)
325 rvecty = sqrt ( rvecty/ dble(nbval) - rvamoy**2 )
326 #ifdef _DEBUG_HOMARD_
327 write (ulsort,90004) 'rvamin', rvamin
328 write (ulsort,90004) 'rvamax', rvamax
329 write (ulsort,90004) 'rvamoy', rvamoy
330 write (ulsort,90004) 'rvecty', rvecty
333 rclass(0) = rclass(0) + epsilo
334 rclass(nbclas) = rclass(nbclas) - epsilo
336 #ifdef _DEBUG_HOMARD_
337 write (ulsort,texte(langue,3)) 'UTPD10', nompro
339 call utpd10 ( rclass(0), val10, p10min,
340 > ulsort, langue, codret )
341 #ifdef _DEBUG_HOMARD_
342 write (ulsort,90024) 'rclass', 0, rclass(0)
343 write (ulsort,*) '=> val10 =', val10, ', p10min =', p10min
346 if ( codret.eq.0 ) then
347 #ifdef _DEBUG_HOMARD_
348 write (ulsort,texte(langue,3)) 'UTPD10', nompro
350 call utpd10 ( rclass(nbclas), val10, p10max,
351 > ulsort, langue, codret )
352 #ifdef _DEBUG_HOMARD_
353 write (ulsort,90024) 'rclass', nbclas, rclass(nbclas)
354 write (ulsort,*) '=> val10 =', val10, ', p10max =', p10max
358 c 2.4. ==> erreur sinon
369 c 3. Impression sur la sortie standard et sur un fichier
370 c a exploiter par xmgrace
372 #ifdef _DEBUG_HOMARD_
373 write (ulsort,90002) '3. Impression ; codret', codret
376 if ( codret.eq.0 ) then
381 if ( typval.eq.1 ) then
382 write (ulbila,13101) ivamin, ivamax
385 write (ulbila,13102) dble(rvamin), dble(rvamax)
386 if ( langue.eq.1 ) then
387 write (ulbila,13103) dble(rvamoy), dble(rvecty)
389 write (ulbila,13203) dble(rvamoy), dble(rvecty)
391 if ( p10max.lt.0 .or. p10max.gt.3 ) then
393 elseif ( p10max.eq.0 .and. p10min.lt.-1 ) then
398 #ifdef _DEBUG_HOMARD_
399 write (ulsort,90015) 'p10max', p10max, ', p10min', p10min
400 write (ulsort,90002) '==> p10dec', p10dec
402 if ( p10dec.ne.0 ) then
403 mess58(langue,4)(4:9) = '* 10**'
404 if ( p10dec.le.-100 ) then
405 write (mess58(langue,4)(10:13),'(i4)') p10dec
406 elseif ( p10dec.le.-10 ) then
407 write (mess58(langue,4)(10:12),'(i3)') p10dec
408 elseif ( p10dec.le.-1 ) then
409 write (mess58(langue,4)(10:11),'(i2)') p10dec
410 elseif ( p10dec.le.9 ) then
411 write (mess58(langue,4)(10:10),'(i1)') p10dec
412 elseif ( p10dec.le.99 ) then
413 write (mess58(langue,4)(10:11),'(i2)') p10dec
415 write (mess58(langue,4)(10:13),'(i4)') p10dec
418 if ( abs(p10max-p10min).le.3 ) then
423 #ifdef _DEBUG_HOMARD_
424 write (ulsort,99001) 'ecart', ecart
429 write (ulbila,11100) mess58(langue,1)
430 write (ulbila,11100) mess58(langue,2)
431 write (ulbila,11100) mess58(langue,3)
432 write (ulbila,11100) mess58(langue,4)
435 if ( ulxmgr.ne.ulbila ) then
438 write (ulxmgr,21210) (titcou(iaux), iaux = 1 , 4 )
439 write (ulxmgr,21220) nrocou
441 write (ulxmgr,21240) xlow, titcou(5)
443 write (ulxmgr,21280) nrocou
447 if ( typval.eq.1 ) then
452 if ( ulxmgr.ne.ulbila ) then
453 write (ulxmgr,21250) x2, 0.
456 cgn write (ulsort,90004) 'raux1', raux1
459 raux = 100. / real(nbval)
460 do 31 , jaux = 1 , nbclas
462 y1 = real(histog(jaux)) * raux
463 if ( typval.eq.1 ) then
464 x2 = real(iclass(jaux))
466 x2 = real(rclass(jaux))
468 iaux = iaux + histog(jaux)
469 y2 = real(iaux) * raux
470 if ( raux1.ge.0. ) then
473 > x1*10.**(-p10dec), x2*10.**(-p10dec),
474 > y1, histog(jaux), y2, iaux
477 > x1*10.**(-p10dec), x2*10.**(-p10dec),
478 > y1, histog(jaux), y2, iaux
483 > x1*10.**(-p10dec), x2*10.**(-p10dec),
484 > y1, histog(jaux), y2, iaux
487 > x1*10.**(-p10dec), x2*10.**(-p10dec),
488 > y1, histog(jaux), y2, iaux
491 if ( ulxmgr.ne.ulbila ) then
492 write (ulxmgr,21250) x1, y1
493 write (ulxmgr,21250) x2, y1
496 if ( ulxmgr.ne.ulbila ) then
497 write (ulxmgr,21250) x2, 0.
500 if ( iaux.lt.nbval ) then
503 y1 = real(iaux) * raux
504 write (ulbila,21270) x2*10.**(-p10dec), y1, iaux, nbval
516 if ( codret.ne.0 ) then
520 write (ulsort,texte(langue,1)) 'Sortie', nompro
521 write (ulsort,texte(langue,2)) codret
525 #ifdef _DEBUG_HOMARD_
526 write (ulsort,texte(langue,1)) 'Sortie', nompro
533 ctest integer nbclas, nbval, typval
534 ctest parameter (nbclas=30)
535 ctest parameter (nbval=100)
537 ctest integer iclass(0:nbclas), histog(nbclas)
538 ctest double precision rclass(0:nbclas)
539 ctest double precision xlow
540 ctest double precision rval(nbval)
541 ctest integer ival(nbval)
543 ctest integer ulbila, ulxmgr
544 ctest integer ulsort, langue, codret
545 ctest character*8 titcou(10)
548 ctest rclass(0) = 1.d0
549 ctest do 2111 , n = 1 , 10
550 ctest rclass(n) = rclass(n-1) + 0.1d0
552 ctest do 2112 , n = 11 , 26
553 ctest rclass(n) = rclass(n-1) + 0.5d0
555 ctest rclass(27) = 15.d0
556 ctest rclass(28) = 20.d0
557 ctest rclass(29) = 50.d0
558 ctest rclass(30) = 100.d0
566 ctest do 12 ,n=1,nbval
567 ctest rval(n) = 1.d0 + dble(n)/10.d0
569 ctest titcou(1) = '12345678'
570 ctest titcou(2) = '9 ... 16'
571 ctest titcou(3) = '17 .. 24'
572 ctest titcou(4) = '25... 32'
573 ctest titcou(5) = '33 '
574 ctest titcou(7) = '49 '
575 ctest titcou(8) = '57... 64'
576 ctest titcou(9) = '65... 72'
578 ctest call utcrhi ( nbclas, rclass, iclass, histog,
579 ctest > nbval, typval, rval, ival,
580 ctest > titcou, xlow, ulbila, ulxmgr,
581 ctest > ulsort, langue, codret )