Download trifla.eso

Back to the list

   1 : C TRIFLA    SOURCE    BP208322  10/01/29    21:15:32     6623           
   2 :       SUBROUTINE TRIFLA(XA,XB,YA,YB,N,IPERM)                                          
   3 :       IMPLICIT INTEGER(I-N)
   4 :       IMPLICIT REAL*8 (A-H,O-Z)                                                 
   5 :       DIMENSION YA(N),YB(N),XA(N),XB(N)
   6 :       INTEGER   IPERM(N),IPERMB(N)
   7 : C                                                                               
   8 : C  EN ENTREE : XA TABLEAU A TRIER                                               
   9 : C              N  SA DIMENSION                                                  
  10 : C              XB TABLEAU DE TRAVAIL                                            
  11 : C              YA TABLEAU A PERMUTER EN MEME TEMPS QUE XA                       
  12 : C              YB TABLEAU DE TRAVAIL                                            
  13 : C                                                                               
  14 : C  EN SORTIE :XA TABLEAU TRIE EN ORDRE CROISSANT                                
  15 : C             IPERM Tableau des permutations effectuées                              
  16 : C    
  17 :       DO I=1,N
  18 :         IPERM(I)=I
  19 :       ENDDO
  20 : 
  21 :       IF(N.EQ.1) RETURN                                                         
  22 : C                                                                               
  23 : C   ON FAIT UNE PREMIERE BOUCLE POUR LES ORDONNES 2 A 2 .CECI PERMET            
  24 : C   DESAUVER 3*N/2 TESTS.                                                       
  25 : C                                                                               
  26 :       NC=N/2                                                                    
  27 :       DO 4 I=1,NC                                                               
  28 :       J=2*I-1                                                                   
  29 :       J1=J+1                                                                    
  30 :       IF(ABS(XA(J)).LT.ABS(XA(J1))) GO TO 4  
  31 : *     on iverse J et J1=J+1
  32 :       ITMP=IPERM(J1)
  33 :       IPERM(J1)=IPERM(J)
  34 :       IPERM(J)=ITMP
  35 :       XAX=XA(J1)                                                                
  36 :       XA(J1)=XA(J)                                                              
  37 :       XA(J)=XAX                                                                 
  38 :       yAX=yA(J1)                                                                
  39 :       yA(J1)=yA(J)                                                              
  40 :       yA(J)=yAX 
  41 :    4  CONTINUE                                                                  
  42 :       IF(N.EQ.2) RETURN                                                         
  43 : C                                                                               
  44 : C  ON CONTINUE A LES ORDONNNES NI PAR NI                                        
  45 : C                                                                               
  46 :       NI=2                                                                      
  47 :     1 ND=NI                                                                     
  48 :       NI=NI*2                                                                   
  49 :       NC=N/NI                                                                   
  50 :       NE=MOD(N,NI)                                                              
  51 :       IF(NE.GT.ND) NC=NC+1                                                      
  52 :       NF2=0                                                                     
  53 :       INC=0                                                                     
  54 :       DO 2 I=1,N
  55 :         IPERMB(I)=IPERM(I)
  56 :         yB(I)=yA(I)                                                               
  57 :    2    XB(I)=XA(I)                                                               
  58 : C                                                                               
  59 : C  BOUCLE SUR LES NC COUPLES DE ND VALEURS                                      
  60 : C                                                                               
  61 :       DO 30 JJ=1,NC                                                             
  62 :         N1=NF2+1                                                                  
  63 :         N2=N1+ND                                                                  
  64 :         NF1=NF2+ND                                                                
  65 :         NF2=NF1+ND                                                                
  66 :         NF2=MIN(NF2,N)                                                            
  67 :  13     INC=INC+1                                                                 
  68 :           IF(abs(XB(N1)).GT.abs(XB(N2))) GO TO 14                                             
  69 :           IPERM(INC)=IPERMB(N1)
  70 :           XA(INC)=XB(N1)                                                            
  71 :           yA(INC)=yB(N1)                                                            
  72 :           IF(N1.GE.NF1) GO TO 17                                                    
  73 :           N1=N1+1                                                                   
  74 :         GO TO 13                                                                  
  75 : *  14    XA(INC)=XB(N2)                                                            
  76 :   14    IPERM(INC)=IPERMB(N2)                                                            
  77 :         XA(INC)=XB(N2)                                                            
  78 :         yA(INC)=yB(N2)                                                            
  79 :         IF(N2.GE.NF2) GO TO 18                                                    
  80 :         N2=N2+1                                                                   
  81 :       GO TO 13                                                                  
  82 :   17  DO 20 I=N2,NF2
  83 :         IPERM(I)=IPERMB(I)
  84 :         yA(I)=yB(I)                                                               
  85 :   20    XA(I)=XB(I)                                                               
  86 :         INC=NF2                                                                   
  87 :       GO TO 30                                                                  
  88 :   18  DO 21 I=N1,NF1                                                            
  89 :         INC=INC+1                                                                 
  90 :         IPERM(INC)=IPERMB(I)
  91 :         yA(INC)=yB(I)                                                             
  92 :   21    XA(INC)=XB(I)                                                             
  93 :   30  CONTINUE                                                                  
  94 :       IF(NI.GE.N) RETURN                                                        
  95 :       GO TO 1                                                                   
  96 :       END                                                                       
  97 :  
  98 :  
  99 :  

© Cast3M 2003 - All rights reserved.
Disclaimer