Download intaxe.eso

Back to the list

   1 : C INTAXE    SOURCE    BP208322  13/10/24    21:15:13     7852           
   2 : 
   3 :       SUBROUTINE INTAXE(BMIN,BMAX,BINT,IN,ZLOG,ZARR)                            
   4 : 
   5 :       IMPLICIT INTEGER(I-N)
   6 :       IMPLICIT REAL*8 (A-H,O-Y)                                                 
   7 : 
   8 :       IMPLICIT LOGICAL (Z)                                                      
   9 : *                                                                               
  10 : * BMIN (E)    BORNE MINI                                                        
  11 : * BMAX (E)    BORNE MAXI                                                        
  12 : * BINT (S)    PAS DE GRADUATION                                                 
  13 : * IN   (S)    NOMBRE DE SEGMENTS                                                
  14 : * ZLOG (E)   INDIQUATION SI AXE EN LOGARITHMIQUE                                
  15 : * ZARR (E)    VRAI => AXE NON NORMALISE                                         
  16 : *                                                                               
  17 : *     PAS DE GRADUATION POSSIBLE                                                
  18 :       DIMENSION PAS(11)                                                         
  19 :       DATA      PAS/0.01D0,0.02d0,0.05D0,0.1D0,0.2D0,0.5D0,1.D0,
  20 :      $             2.D0,5.D0,10.D0,20.D0/                     
  21 : *                                                                
  22 :       DIST=ABS(BMAX-BMIN)
  23 :       binima=bmax
  24 :       binimi=bmin
  25 : 
  26 : * ------                                                   
  27 : *  LOG : LES BORNES SONT DES ENTIERS                                         
  28 : * ------                                                   
  29 :       IF (ZLOG) THEN                                                            
  30 :          BINT=1.                                                 
  31 :          IN=INT(DIST)                                                           
  32 :       ELSE                                                                      
  33 : *                                                                               
  34 : * ----------                                                   
  35 : *  DECIMAL :                                                                 
  36 : * ----------                                                   
  37 : *                                                                               
  38 : *  INITIALISATION IP
  39 : *                                                                               
  40 :          IP = ICALP(BMIN,BMAX)                                                  
  41 :          P10IP = 10.D0**REAL(IP)                                                
  42 :                                                                                 
  43 : *   DETERMINATION DU COEFF. CORRECTEUR POUR LES BORNES                          
  44 :                                                                                 
  45 :          IF (BMIN .LT. 0.D0) THEN                               
  46 :            CORR1=-1.D0                                            
  47 :          ELSE                                                                   
  48 :             CORR1=0.D0                                                  
  49 :          ENDIF                                                              
  50 :          IF (BMAX .LT. 0.D0 ) THEN                                                
  51 :             CORR2=0.D0                                                             
  52 :          ELSE                                                                  
  53 :             CORR2=1.D0                                                             
  54 :          ENDIF                                                                
  55 : *
  56 : *        bminin = bmin 
  57 : *        bmaxin = bmax  
  58 : *
  59 : *  Pour affichage et deverminage :
  60 : *         binima=bmax                                                           
  61 : *         binimi=bmin                                                           
  62 : *                                                                               
  63 : *        AXE NON NORMALISE                                                      
  64 : *                                                                               
  65 :          IF (ZARR) THEN   
  66 : *     RAMENE LES BORNES A UNE FORME XX.XX  EXX     
  67 : *     ARRONDI EN 10-2 PUISQUE LES ECHELLES SONT GRADUEES EN 10-2       
  68 :             BMIN=BMIN/P10IP                        
  69 :             BMAX=BMAX/P10IP 
  70 :            IF(ABS(AINT(BMIN*100.D0)-(BMIN*100.d0)).GT.ABS(BMIN*0.001D0))  
  71 :      *          BMIN=AINT(BMIN*100.D0+CORR1)/100.D0  
  72 :            IF(ABS(AINT(BMAX*100.D0)-(BMAX*100.D0)).GT.ABS(BMAX*0.001D0))   
  73 :      *          BMAX=AINT(BMAX*100.D0+CORR2)/100.D0   
  74 :             DIST=ABS(BMAX-BMIN)                                                 
  75 : *      RECHERCHE UN PAS EN 10-2 PERMETTANT D'AVOIR DE 5 A 10 DIVISIONS          
  76 :             I=11                                                                
  77 : 1           I=I-1                                                               
  78 :             DIST2=DIST/I                                                        
  79 :             ZNE=ABS((DIST2*100.D0)-(AINT(DIST2*100.D0))).GT.
  80 :      $      (ABS(DIST2*0.001D0))       
  81 : cbp             IF ((I.NE.4).AND.ZNE)  GOTO 1                                       
  82 : cbp : incoherence avec la notice --> si NARR ou YBOR on impose YSUP et YINF
  83 : cbp : on cherche de 10 a 1 divisions
  84 :             IF ((I.NE.1).AND.ZNE)  GOTO 1                                       
  85 : *      SORTIE QUAND LE PAS EST EN 10-2                                          
  86 :             IF (.NOT.ZNE) THEN                                                  
  87 :                IN=I                                                             
  88 :                BINT=DIST2* P10IP                                          
  89 :                BMIN=BMIN * P10IP                                           
  90 :                BMAX=BMAX * P10IP                                           
  91 :             ELSE                                                                
  92 : c *      RECALCUL DES BORNES DE FACON A AVOIR UN PAS EN 10-2                      
  93 : c                IN=10                                                            
  94 : c                DIST2=ABS(BMAX-BMIN)/10.D0                                          
  95 : c                DIST2=AINT(DIST2*100.D0+1.D0)/100.D0                                      
  96 : c                BINT=DIST2* P10IP                                          
  97 : c                BMIN=BMIN * P10IP                                           
  98 : c                BMAX=BMIN+10.D0*BINT
  99 : cbp : incoherence avec la notice --> si NARR ou YBOR on impose YSUP et YINF
 100 :                IN=I                                                             
 101 :                BINT=DIST2* P10IP                                          
 102 :                BMIN=BMIN * P10IP                                           
 103 :                BMAX=BMAX * P10IP                                           
 104 :             ENDIF  
 105 :             
 106 :             
 107 :          ELSE                                                                   
 108 : *                                                                               
 109 : *      AXE NORMALISE                                                            
 110 : *                                                                               
 111 :             D=DIST/P10IP
 112 : *                                                                               
 113 : *      SELECTION DU PREMIER PAS                                                 
 114 :             DO 2 I=1,11                                                         
 115 :                  IF (((PAS(I)*10.D0)-D).GT.1.D-2) GOTO 3                            
 116 : 2           CONTINUE
 117 :                                                                     
 118 : *    RAMENE LES BORNES A UNE EXPRESSION EN XX.XX E XX                           
 119 : 3           CONTINUE
 120 :             BI=BMIN/P10IP                                  
 121 :             BS=BMAX/P10IP                           
 122 :          IF(AINT(BI*100.D0).NE.BI*100.D0)BI=AINT(BI*100.D0+CORR1)/100.D0               
 123 :          IF(AINT(BS*100.D0).NE.BS*100.D0)BS=AINT(BS*100.D0+CORR2)/100.D0 
 124 : *    DEMANDE A AVOIR DES BORNES MULTIPLES DU PAS                               
 125 :             IM=mod(i-1,3)+1
 126 :             PASM=PAS(IM) * (10.D0**((i-im)/3))
 127 :             BI=ARROND(BI,PASM,0)
 128 :             BS=ARROND(BS,PASM,1)
 129 :             D1=BS-BI                                                            
 130 :             R=D1/PASM
 131 : *    COMPTE TENU DES CORRECTIONS DE ARROND , LE PAS PEUT NE PLUS ETRE           
 132 : *    VALIDE => ON ESSAIE LE PAS SUIVANT                                         
 133 :             IF (R.GT.10.D0) THEN
 134 :                I=I+1                                                            
 135 :                GOTO 3                                                           
 136 :             ENDIF                                                               
 137 : *    ON REDRESSE TOUT ET ON SORT   
 138 : *
 139 : * TC je ne comprends pas comment ne pas faire d'erreur donc je m'assure
 140 : * que le resultat a un sens
 141 : *                                             
 142 :             BMIN=BI * P10IP                                              
 143 :             BMAX=BS * P10IP 
 144 :             pasm10=pasm * P10IP 
 145 : 100         continue    
 146 :             imodi=0  
 147 : *            write(6,*) ' avant correction '
 148 : *            write(6,*) ' bmin binimi bmax binima'
 149 : *            write(6,*)  bmin ,binimi ,bmax, binima
 150 :             if( bmin+pasm10.lt.binimi ) then
 151 :               bmin=bmin+pasm10
 152 :               imodi=imodi+8
 153 :             endif
 154 :             if( binimi.lt.bmin) then
 155 :               bmin=bmin-pasm10
 156 :               imodi = imodi+1
 157 :             endif
 158 :            
 159 :             if( bmax.lt. binima) then
 160 :                bmax=bmax + pasm10
 161 :                imodi=imodi+2 
 162 :             endif          
 163 :             if( bmax - pasm10.gt.binima ) then
 164 :                  bmax=bmax- pasm10
 165 :                  imodi=imodi +4
 166 :             endif
 167 :             if( imodi.ne.0) then  
 168 : *           write(6,*) ' imodi ' , imodi
 169 :              go to 100
 170 :             endif
 171 :             
 172 : *            write(6,*) ' apres correction '
 173 : *            write(6,*) ' bmin binimi bmax binima'
 174 : *            write(6,*)  bmin ,binimi ,bmax, binima          
 175 :             in= int( (Bmax-bmin)/pasm10 + 0.5)  
 176 :             BINT=PASM * P10IP
 177 :          ENDIF                                                  
 178 : 
 179 :       ENDIF
 180 : 
 181 :       RETURN
 182 :       END                                
 183 :  
 184 :  
 185 :  
 186 :  

© Cast3M 2003 - All rights reserved.
Disclaimer