Download poupas.eso

Back to the list

   1 : C POUPAS    SOURCE    CHAT      05/01/13    02:19:29     5004           
   2 :       SUBROUTINE POUPAS(XE,YE,ZE,VECT,P,KERRE)                                  
   3 : C-----------------------------------------------------------------------        
   4 : C  ROUTINE DE CALCUL DE LA MATRICE DE PASSAGE P DES AXES LOCAUX AUX AXES        
   5 : C  GLOBAUX :       DEPLOC= P * DEPGLO                                           
   6 : C                                                                               
   7 : C  ENTREE                                                                       
   8 : C         XE YE ZE  COORDONNEES DES 2 NOEUDS                                    
   9 : C         VECT   VECTEUR DEFINISSANT LE REPERE LOCAL DE LA POUTRE               
  10 : C                                                                               
  11 : C  SORTIE                                                                       
  12 : C         P      MATRICE DE CHANGEMENT DE BASE                                  
  13 : C         KERRE  = 0 SI PAS DE PB                                               
  14 : C                = 1 SI POINTS CONFONDUS                                        
  15 : C                = 2 SI LE VECTEUR LOCAL EST COLINEAIRE A L'ELEMENT             
  16 : C                                                                               
  17 : C-----------------------------------------------------------------------        
  18 :       IMPLICIT INTEGER(I-N)
  19 :       IMPLICIT REAL*8(A-H,O-Z)                                                  
  20 :       DIMENSION XE(*),YE(*),ZE(*),P(3,*),VECT(*),A(3)                           
  21 : C                                                                               
  22 :       KERRE=0                                                                   
  23 :       A(1)=XE(2)-XE(1)                                                          
  24 :       A(2)=YE(2)-YE(1)                                                          
  25 :       A(3)=ZE(2)-ZE(1)                                                          
  26 :       XL=SQRT(A(1)**2+A(2)**2+A(3)**2)                                          
  27 :       IF(XL.EQ.0.D0) THEN                                                       
  28 :       KERRE=1                                                                   
  29 :       RETURN                                                                    
  30 :       ENDIF                                                                     
  31 :       RL=1.D00/XL                                                               
  32 : C                                                                               
  33 : C-----------------------------------------------------------------------        
  34 : C   ON CHOISIT DE DETERMINER ICI LE VECTEUR DEFINISSANT LE                      
  35 : C   REPERE LOCAL DE LA POUTRE SI IL N A PAS ETE DONNE PAR L UTILISATEUR         
  36 : C-----------------------------------------------------------------------        
  37 : C                                                                               
  38 :       IDEF=0                                                                    
  39 :       IF(VECT(1).NE.0..OR.VECT(2).NE.0..OR.VECT(3).NE.0.) GO TO 10              
  40 : C                                                                               
  41 : C  DEFINITION DU VECTEUR LOCAL PAR DEFAUT   ( NON NORME )                       
  42 : C                                                                               
  43 :       VECT(1)=-A(2)*RL                                                          
  44 :       VECT(2)=A(1)*RL                                                           
  45 :       VECT(3)=0.D00                                                             
  46 :       IDEF=1                                                                    
  47 :   10  CONTINUE                                                                  
  48 :       DO 22 I=1,3                                                               
  49 :   22  P(1,I)=A(I)*RL                                                            
  50 :       RLP=0.                                                                    
  51 :       DO 1 I=1,3                                                                
  52 :    1  RLP=RLP+VECT(I)**2                                                        
  53 :       RLP= SQRT(RLP)                                                            
  54 : C                                                                               
  55 : C  TEST DE COLINEARITE                                                          
  56 : C                                                                               
  57 :       PROD=0.D00                                                                
  58 :       DO 4 I=1,3                                                                
  59 :    4  PROD=PROD+VECT(I)*P(1,I)                                                  
  60 :       IF(ABS(PROD).LT.0.99D00*RLP) GO TO 5                                      
  61 :       IF(IDEF.EQ.0) GOTO 41                                                     
  62 :       VECT(1)= 0.D0                                                             
  63 :       VECT(2)= -A(3)*RL                                                         
  64 :       VECT(3)=  A(2)*RL                                                         
  65 :       GOTO 5                                                                    
  66 :   41  CONTINUE                                                                  
  67 :       KERRE=2                                                                   
  68 :       RETURN                                                                    
  69 : C                                                                               
  70 : C  ORTHOGONALISATION ET REMPLISSAGE DE LA MATRICE P                             
  71 : C                                                                               
  72 :   5   CONTINUE                                                                  
  73 :       RLP=0.D00                                                                 
  74 :       DO 6 I=1,3                                                                
  75 :       VECT(I)=VECT(I)-PROD*P(1,I)                                               
  76 :   6   RLP=RLP+VECT(I)**2                                                        
  77 :       RLP=1.D00/SQRT(RLP)                                                       
  78 :       DO 2 I=1,3                                                                
  79 :    2  P(2,I)=VECT(I)*RLP                                                        
  80 :       P(3,1)= P(1,2)*P(2,3)- P(2,2)*P(1,3)                                      
  81 :       P(3,2)=P(1,3)*P(2,1)-P(1,1)*P(2,3)                                        
  82 :       P(3,3)= P(1,1)*P(2,2)-P(1,2)*P(2,1)                                       
  83 :       RETURN                                                                    
  84 :       END                                                                       
  85 :  

© Cast3M 2003 - All rights reserved.
Disclaimer