next up previous contents
Next: Referencias Up: INSTITUTO POLITECNICO NACIONAL Escuela Previous: Apéndice F   Contents

Apéndice G

// JOB
// FOR
*LIST ALL
*IOCS(2501 READER, 1403 PRINTER)
*IOCS(DISK)
*ONE WORD INTEGERS
*EXTENDED PRECISION
C
C      LA DESCRIPCION DE UNO DE LOS PROGRAMAS QUE SE EMPLEARON PARA 
C      CALCULAR EL ESPECTRO DE FRECUENCIAS Y LOS MODOS  NORMALES DE
C      VIBRACION ES LLAMADO PENTA
C      PENTA ES UN PROGRAMA PRINCIPAL QUE NOS CALCULA LOS EIGENVALORES
C      Y EIGENVECTORES DE UNA MATRIZ PENTADIAGONAL A LA CUAL SE LE 
C      PUEDEN HACER MODIFICACIONES EN LAS ESQUINAS DE SUS DIAGONALES
C      INSTRUCCIONES DE ENTRADA QUE SIRVEN PARA DEFINIR ARREGLOS, 
C      NOMBRES DE VARIABLES Y PARA DEFINIR ARREGLOS EN EL DISCO
C
       DIMENSION Z(32)
       COMMON    N,LI,LO,XO,XN
       COMMON    D(30),C(30),B(30),A(30),E(30)
       COMMON    Q(4,4),V(31)
       DEFINE FILE  10(57,120,U,Kl)
       DEFINE FILE 101(41,96,U,K01)
       DEFINE FILE 102(41,96,U,K02)
       DEFINE FILE 103(41,96,U,K03)
       DEFINE FILE 104(41,96,U,K04)
       DEFINE FILE 105(41,96,U,K05)
       DEFINE FILE 106(41,96,U,K06)
       DEFINE FILE 107(41,96,U,K07)
       DEFINE FILE 108(41,96,U,K08)
       DEFINE FILE 109(41,96,U,K09)
       DEFINE FILE 110(41,96,U,K10)
       DEFINE FILE 111(41,96,U,Kll)
       DEFINE FILE 112(41,96,U,K12)
       DEFINE FILE 113(41,96,U,K13)
       DEFINE FILE 114(41,96,U,K14)
       DEFINE FILE 115(41,96,U,K15)
       DEFINE FILE 116(41,96,U,K16)
       DEFINE FILE 117(41,96,U,K17)
       DEFINE FILE 118(41,96,U,K18)
       DEFINE FILE 119(41,96,U,K19)
       DEFINE FILE 120(41,96,U,K20)
C
C      INSTRUCCIONES DE ENTRADA PARA LEER LA DIMENSION (N) DE LA MATRIZ
C      QUE DESEAMOS ANALIZAR
C
       LI = 8
       LO = 5
  1    READ   (LI,20) N
 20    FORMAT (I2)
       IF (N) 2,2,3
  2    CALL   EXIT
  3    WRITE  (L0,300) N
300    FORMAT ('IN='I2)
C
C      GENERACION DE LOS ELEMENTOS MATRICIALES.- LLENAMOS LA MATRIZ
C      TENIENDO EN CUENTA SU FORMA PENTADIAGONAL (DIAGONALES A,B,C,D,E)
C      LO CUAL NOS PERMITE UTILIZAR MENOS MEMORIA DE LA MAQUINA, ESTA
C      PARTE ES LA QUE GENERALMENTE DIFIERE DE MODELO A MODELO
C
       X = -0.8
       X =  0.0
       X =  0.05
       DO 30 K=1,41
       X1 = X+1.0
       X2 = 1.0/X1
       X3 = 1.0-X2
       DO 10 J=1,N
       A(J) = X2
       B(J) = X3
       C(J) = -2*(X2+X3)
       D(J) = X3
 10    E(J) = X2
C
C      PENII CALCULA LOS LIMITES DE GERSHORIN DE LOS EIGENVALORES Y 
C      FORMA LOS COEFICIENTES USADOS EN LA RELACION DE RECURSION COMO
C      ELEMENTOS DE LAS MATRICES DE TRANSFERENCIA (T)
C
       CALL PENII
C
C      PENRO LOCALIZA LAS RAICES DE LA ECUACION CARACTERISTICA, 
C      COLOCANDO A ELLAS EN UN CIERTO ARREGLO (V)
C
       CALL PENRO
C 
C      PENGR IMPRIME ESTRELLAS QUE REPRESENTAN LOS VALORES NUMERICOS
C      DE LOS EIGENVALORES
C
       CALL PENGR (V,8.0)
C
C      CALCULO DE LOS EIGENVECTORES
C
       DO 12 I=1,N
C 
C      PENEV CALCULA LAS COMPONENTES DEL I-ESIMO EIGENVECTOR, DEJANDO
C      LAS COMPONENTES EN EL ARREGLO Z
C
       CALL PENEV (Z,I)
C
C      PENNO NORMALIZA LAS PRIMERAS N COMPONENTES DEL VECTOR DE
C      ARGUMENTO     Z
       CALL PENNO (Z,N)
C
C      PENST(Z,N,M,K,L) ALMACENA Y RECUPERA LOS VECTORES DE EL DISCO
C      DE ACUERDO CON LA OPCION L, EL ARGUMENTO ES UN VECTOR Z DE
C      DIMENSIONES N,K ES EL ARCHIVO DEL DISCO QUE SERA EMPLEADO Y M
C      ES EL NUMERO DE REGISTRO
C
 12    CALL PENST (Z,N,100+I,K,3)
C
C      EN ESTA PARTE GRAFICAMOS LOS MODOS NORMALES DE VIBRACION LA
C      OPCION ES QUE PUEDEN SER GRAFICADOS CON ESTRELLAS Y UNIDOS
C      MANUALMENTE O GUARDADOS EN ALGUN REGISTRO PARA QUE DESPUES
C      SEAN UNIDOS AUTOMATICAMENTE
C
 30    X = X + 0.05
       DO 32 I=1,N
C
C      PENPG(Z,N,M,K,L) HACE UNA PAGINA DE GRAFICAS DE LOS EIGENVEC-
c      TORES, Z ES EL VECTOR QUE CONTIENE LAS COMPONENTES (NORMALIZADAS)
C      DE EL EIGENVECTOR DE DIMENSION N, M ES LO QUE DESEAMOS SACAR, K
C      ES EL NUMERO DE ARCHIVO EN QUE LOS PUNTOS VAN A SER INTRODUCIDOS
C      Y L ES LA OPCION
C
       CALL PEMPG (Z,N,0,10,1)
       CALL PENPG (Z,N,0,10,2)
       CALL PENST (Z,N,100+I,41,4)
       DO 31 K=1,41
       CALL PENST (Z,N,100+I,K,5)
 31    CALL PENPG (Z,N,K,10,3)
 32    CALL PENPG (V,N,I,10,5)
       GO TO 1
       END
//EJECT
// JOB
// FOR
*LIST ALL
*IOCS(2501 READER, 1403 PRINTER)
*IOCS(DISK)
*ONE WORD INTEGERS
*EXTENDED PRECISION
*NAME JOC
C     JOC ES EL PROGRAMA PRINCIPAL DE UN CONJUNTO DE PROGRAMAS, DESIGNADOS
C     PARA EVALUAR LOS EIGENVALORES Y EIGENVECTORES DE UNA MATRIZ PENTADIAGONAL
C
       COMMON  N,LI,LO,XO,XN
       COMMON  P(30,5)
       COMMON  Q(4,4),V(31)
       WRITE   (3,300)
300    FORMAT('1'20X' DIAGONALIZACION DE UNA MATRIZ PENTADIAGONAL '/
     1         30X' 14 DE FEBRERO DE 1970 '/)
  1    CALL PENRM
       CALL PENII
       CALL PENRO
       CALL PENWM
       WRITE (3,350)
350    FORMAT('1')
       GO TO 1
       END
// FOR
*LIST ALL
*ONE WORD INTEGERS
*EXTENDED PRECISION
C
       SUBROUTINE PENCP
C      PENCP IMPRIME EL VALOR DEL POLINOMIO CARACTERISTICO EN 100
C      PUNTOS ASI COMO LOS ELEMENTOS DEL MENOR QUE LO DEFINE Y LA FASE
C      DE SUS VECTORES COLUMNA
C
       COMMON       N,LI,LO,XO,XN
       COMMON       P(30,5)
       COMMON       Q(4,4),V(31)
       EQUIVALENTE (Q11,Q(1,1)),(Q12,Q(1,2)),(Q21,Q(2,1)),(Q22,Q(2,2))
       WRITE (3,300)
300    FORMAT('1 POLINOMIO CARACTERISTICO DE UNA MATRIZ PENTADIAOONAL'/)
       X  = XO - 0.5
       DX = (XN-XO+1.0)*100.0
       DO  2  I=1,100
       CALL PENQ(X,Y,N)
       P1 = ATAN(Q12/Q11)
       P2 = ATAN(Q22/Q21)
       WRITE (3,310) Q,Y,Q11,Q12,PI,Q21,Q22,P2
310    FORMAT ('0X='F8.3,3X,'Q(X)='E16.9,
     *           5X'Q11='F15.6', Q12='F16.6,10X,'PHI='F12.8/
     *          40X'Q21='F15.6', Q22='F15.6,10X,'PHI='F12.8)
  2    X = X+DX
       WRITE (3,350)
350    FORMAT ('1')
       RETURN
       END
C
// EJECT
// FOR
*LIST ALL
*ONE WORD INTEGERS
*EXTENDED PRECISION
C       
       SUBROUTINE PENEV (Z,K)
C
C      PENEV(Z.K) CALCULA LAS COMPONENTES DEL K-ESIMO EIGENVECTOR, DEJANDO
C      LOS ELEMENTOS EN EL ARREGLO Z

       DIMENSION   S(32),T(34),Z(32)
       COMMON      N,LI,LO,XO,XN
       COMMON      A(30),B(30),C(30),D(30),B(30)
       COMMON      Q(4,4),V(31)
       EQUIVALENCE (S(1),T(3))
       EQUIVALENCE (Q11,Q(1,1)),(Q12,Q(1,2))
       CALL PENQK  (V(K),Y,N)
       T(1) =  0.0
       T(2) =  0.0
       T(3) =  Qll
       T(4) = -Q12
       DO 10 J=1,N
 10    S(J+2)=A(J)*T(J+3)+(B(J)+V(K)*E(J))*T(J+2)+C(J)*T(J+1)+D(J)*T(J)
       N2 = N+2
       DO 30 I=1,N2
 30    Z(I) = S(I)
       RETURN
       END
C
// EJECT
// FOR
*LIST ALL
*ONE WORD INTEGERS
*EXTENDED PRECISION
C
       SUBROUTINE  PENGE (V)
C
C      PENGE(V) SE EMPLEA PARA SACAR LOS EIGENVECTORES DEL DISCO LOS UNIFICA
C      Y GRAFICA, POR LO REGULAR ES UNA PARTE DEL PROGRAMA PRINCIPAL, ESA ES
C      LA RAZON POR LA CUAL NO APARECE EN ALGUNOS DE ELLOS
C
       DIMENSION   V(1),Z(31)
       COMMON      N
       DO  32  I=1,N
       CALL PENPG (Z,N,0,10.1)
       CALL PENPG (Z,N,0,10,2)
       CALL PENST (Z,N,100+I,41,4)
       DO  31  K=1,41
       CALL PENST (Z,N,100+I,K,5)
 31    CALL PENPG (Z,N,K,10,3)
 32    CALL PENPG (V,N,I,10,5)
       RETURN
       END
C
// EJECT
// FOR
*LIST ALL
*ONE WORD INTEGERS
*EXTENDED PRECISION
C
       SUBROUTINE PENGM (A1,A2,L)
C
C      PENGM (A1,A2,L) SIMULA LA ENTRADA DE TARJETAS DE DATOS PARA UNA
C      MATRIZ PENTADIAGONAL CON LA PRIMERA DIAGONAL EXTERNA IGUAL A A1 Y LA
C      SEGUNDA EXTERNA IGUAL A A2, EXCEPTO PARA LAS OPCIONES L=1,2,3,4 LAS
C      TERMINACIONES SON
C      L=1 AMBOS EXTREMOS FIJOS
C      L=2 EXTREMO IZQUIERDO FIJO, DERECHO LIBRE
C      L=3 EXTREMO IZQUIERDO LIBRE, DERECHO FIJO
C      L=4 AMBOS EXTREMOS LIBRES
C
       DIMENSION   A(30),B(30),C(30),D(30),E(30)
       COMMON      N,LI,LO,XO,XN
       COMMON      P(30,5)
       EQUIVALENCE (A(1),P(1,4)),(B(1),P(1,3)),(C(1),P(1,2))
       EQUIVALENCE (D(1),P(1,1)),(E(1),P(1,5))
       DO 1 I=1,N
       A(I) =  A2
       B(I) =  Al
       C(I) = -2.0*(A1+A2)
       D(I) =  Al
       E(I) =  A2
  1    CONTINUE
       GOTO (10,20,30,40) ,L
 10    RETURN
 20    C(N-l) = C(N-1)+A2
       C(N)   = C(N)+A1+A2
       RETURN
30     C(1) = C(1)+A2+A1
       C(2) = C(2) +A2
       RETURN
40     C(1)  = C(1)+A1+A2
       C(N)  = C(1)
       C(2)  = C(2)+A2
       C(N-1)=C(2)
       RETURN
       END
C
// EJECT
// FOR
*LIST ALL
*ONE WORD INTEGERS
*EXTENDED PRECISION
C
       SUBROUTINE PENGR (Z,W)
C
C      PENGR IMPRIME ESTRELLAS QUE REPRESENTAN LOS VALORES NUMERICOS DE LOS
C      EIGENVALORES Y ADEMAS COLOCA UNA '@' EN EL PUNTO DONDE SE INTERSECTAN
C      DOS CURVAS
C
       DIMENSION  Z(1),III(120)
       COMMON     N,LI,LO
       S=100.0/W
       DO  11  I=1,120
 11    III (I)=16448
       DO  12  I=1,101,10
 12    III(I)=-14016
       DO  27  I=1,N
       L=IFIX(-Z(I)*S)+1
       IF(L) 27,27,21
 21    IF (L-120) 22,22,27
 22    IF (III(L)-23616) 23,24,23
 23    III(L) = 23616
       GO TO 27
 24    III(L)=20544
 27    CONTINUE
       WRITE (L0.300) III
300    FORMAT (1X,120A1)
       RETURN
       END
C
// EJECT
// FOR
*LIST ALL
*ONE WORD INTEGERS
*EXTENDED PRECISION
C
       SUBROUTINE PENII
C
C      PENNI CALCULA LOS LIMITES DE GERSHGORIN DE LOS EIGENVALORES Y
C      FORMA LOS COEFICIENTES USADOS EN LAS RELACIONES DE RECURSION COMO
C      ELEMENTOS DE LAS Q'S
C
       DIMENSION   A(30),B(30),C(30),D(30),E(30)
       COMMON      N,LI,LO,XO,XN
       COMMON      P(30,5)
       EQUIVALNECE (A(1),P(1,4)),(B(1),P(1,3) ),(C(1),P(1,2))
       EQUIVALENCE (D(1),P(1,1)),(E(1),P(1,5))
C
C      ESTABLECE LOS LIMITES DE GERSHGORIN PARA LOS EIGENVALORES
C
       R=ABS(D(1))+ABS(E(1))
       XO=C(1)-R
       XN=C(1)+B
       R =ABS(B(2))+ABS(D(2))+ABS(E(2))
       XO=PENMI(C(2)-R,XO)
       XN=PENMA(C(2)+R,XN)
       N2=N-2
       DO  4  I=3,N2
       R =ABS(A(I))+ABS(B(I))+ABS(D(I))+ABS(E(I))
       XO=PENMI(C(I)-R,XO)
  4    XN=PENMA(C(I)+R,XN)
       R =ABS(A(N-1))+ABS(B(N-1))+ABS(D(N-1))
       XO=PENMI(C(N-1)-R,XO)
       XN=PENMA(C(N-1)+R,XN)
       R =ABS(A(N))+ABS(B(N))
       XO=PENMI(C(N)-R,XO)
       XN=PENMA(C(N)+R,XN)
C
C      FORMAMOS LOS COEFICIENTES QUE SERAN USADOS EN LAS RELACIONES DE
C      RECURSION
C
       DO  20  I=1,N
       R = 1.0/E(I)
       DO  16  J=1,4
 16    P(I,J)=-R*P(I,J)
 20    E(I)=R
       RETURN
       END
C
// EJECT
// FOR
*LIST ALL
*ONE WORD INTEGERS
*EXTENDED PRECISION
C
       FUNCTION PENMA(X.Y)
C
C      PENMA(X,Y) SELECCIONA EL MAXIMO DE X  Y  Y
C
       IF (X-Y) 1,2,2
1      PENMA=Y
       RETURN
2      PENMA=X
       RETURN
       END
C
// EJECT
// FOR
*LIST ALL
*ONE WORD INTEGERS
*EXTENDED PRECISION
C
       FUNCTION    PENMI(X,Y)
C
C      PENMI(X,Y)  SELECCIONA EL MINIMO DE X  Y  Y
C
       IF (X-Y) 1,1,2
1      PENMI=X
       RETURN
2      PENMI=Y
       RETURN
       END
C
// EJECT
// FOR
*LIST ALL
*ONE WORD INTEGERS
*EXTENDED PRECISION
C
       SUBROUTINE  PENNO (Z,N)
C
C      PENNO(Z,N) NORMALIZA LAS PRIMERAS COMPONENTES DE EL VECTOR DE
C      ARGUMENTO  Z
C
       DIMENSION   Z(1)
       A = 0.0
       DO  5  I=1,N
5      A = A+Z(I)**2
       A = 1.0/SQRT(A)
       DO  7  I=1,N
7      Z(I)=A*Z(I)
       RETURN
       END
C
// EJECT
// FOR
*LIST ALL
*ONE WORD INTEGERS
*EXTENDED PRECISION
C
      SUBROUTINE PENPG (Z,N,M,K,L)
C
C     PENPG(Z,N,M,K,L) HACE UNA PAGINA DE GRAFICAS DE LOS EIGENVECTORES,
C     Z ES EL VECTOR QUE CONTIENE LAS COMPONENTES (NORMALIZADAS) DEL
C     EIGENVECTOR DE DIMENSION N, M ES EL QUE DESEAMOS SACAR, K ES EL
C     NUMERO DE ARCHIVO EN EL QUE LOS PUNTOS VAN A SER INTRODUCIDOS Y
C     L ES LA OPCION DESEADA
C      L=1 GENERA UNA PAGINA EN BLANCO
C      L=2 INVIERTE LAS COMPONENTES DEL EIGENVECTOR
C      L=3 IMPRIME LA PAGINA TERMINADA
C
       DIMENSION   Z(1),JJJ(120)
       COMMON      NN,LI,LO
       GOTO (10,20,30,40,50) ,L
 10    CONTINUE
       DO 11 I=1,120
 11    JJJ(I)=16448
       DO 12 I=1,57
 12    WRITE (K'I) JJJ
       RETURN
 20    CONTINUE
       DO 22 J=1,41
       READ  (K'50-J) JJJ
       DO 21 I=1,N
       JJ=7*I+J
 21    JJJ(JJ)=19264
 22    WRITE (K'50-J) JJJ
       RETURN
 30    CONTINUE
       DO 31 I=1,N
 31    CALL PENPL (7*I+M,50 -(IFIX(10.0*Z(I))+M),K,23616)
       RETURN
 40    CONTINUE
       WRITE(K'M)  (Z(J),J=1,N)
       RETURN
C
C      CUANDO L=5 LOS PARAMETROS SON USADOS COMO SIGUE:
C      Z  ES EL VECTOR EIGENVALOR
C      M  LA COMPONENTE DEL VECTOR FRECUENCIA QUE SERA USADO
C      K  EL ARCHIVO QUE SERA IMPRIMIDO
C
353    FORMAT(' MODO NORMAL NUMERO',I5.5X,'EIGENVALOR',F15.6/)
 50    CONTINUE
       WRITE  (LO,352)
       WRITE  (LO,353) M,Z(M)
       WRITE  (LO,350)
       DO 51 I=1,57
       READ   (K'I)  JJJ
       WRITE  (LO,351) JJJ
 51    CONTINUE
       WRITE  (LO,350)
       RETURN
350    FORMAT (1X,12('P E N T A '))
351    FORMAT (1X,120A1)
352    FORMAT (1H1)
353    FORMAT(' MODO NORMAL NUMERO',I5,5X,'EIGENVALOR',F15.6/)
       END
C
// EJECT
// FOR
*LIST ALL
*ONE WORD INTEGERS
*EXTENDED PRECISION
C
       SUBROUTINE  PENPL (IA,IB,K,ICH)
C
C      PENPL(IA,IB,K,ICH) INTRODUCE EL CARACTER ICH EN EL ARCHIVO DEL
C      DISCO K CON LA COLUMNA IA DEL NUMERO DE REGISTRO IB
C
       DIMENSION   III(120)
       IF (IA) 1,1,2
1      IA=1
2      IF (120-IA) 3,3,4
3      IA=120
4      IF (IB) 5,5,6
5      IB=1
6      IF (57-IB) 7,8,8
7      IB=57
8      READ  (K'IB) III
       III(IA)=ICH
       WRITE (K'IB) III
       RETURN
       END
C
// EJECT
// FOR
*LIST ALL
*ONE WORD INTEGERS
*EXTENDED PRECISION
C
       SUBROUTINE  PENQK (X,Y,K)
C
C      PENQK(X,Y,K) FORMA EL PRODUCTO DE LAS PRIMERAS K DE LAS Q-MATRICES
C      EVALUANDO EL PRODUCTO RECURSIVAMENTE CON EL EIGENVALOR X, Y DEPOSITA
C      EL VALOR DEL MENOR SUPERIOR IZQUIERDO 2X2 DE EL PRODUCTO EN Y. SOLAMEN-
C      TE LAS PRIMERAS DOS COLUMNAS DE Q SON  EVALUADAS ASI COMO SOLAMENTE
C      ELLAS ENTRAN DENTRO DE LA EVALUACION DEL POLINOMIO CARACTERISTICO
C
       COMMON      N,LI,LO,XO,XN
       COMMON      A(30),B(30),C(30),D(30),E(30)
       COMMON      Q(4,4),V(31)
       EQUIVALENCE (Qll,Q(1,1)),(Q12,Q(1,2)),(Q21,Q(2,1)),(Q22,Q(2,2))
       EQUIVALENCE (Q31,Q(3,1)),(Q32,Q(3,2)),(Q41,Q(4,1)),(Q42,Q(4,2))
       IF (K-1) 1,2,3
1      Y = 1.0
       RETURN
2      Y=B(1)+X*E(1)
       RETURN
3      Q11=A(1)
       Q12=B(1)+X*E(1)
       Q21=1.0
       Q22=0.0
       Q31=0.0
       Q32=1.0
       Q41=0.0
       Q42=0.0
       W1=Q11
       W2=Q12
       DO 20 J=2,K
       W1=(B(J)+X*E(J))*Q21+C(J)*Q31+D(J)*Q41
       W2=(B(J)+X*E(J))*Q22+C(J)*Q32+D(J)*Q42
       Q41=Q31
       Q42=Q32
       Q31=Q21
       Q32=Q22
       Q21=Q11
       Q22=Q12
       Q11=W1+A(J)*Q11
       Q12=W2+A(J)*Q12
20     CONTINUE
       Y=W1*Q22-W2*Q21
       RETURN
       END
C
// EJECT
// FOR
*LIST ALL
*ONE WORD INTEGERS
*EXTENDED PRECISION
C
       SUBROUTINE PENRM
C
C      PENRM LEE LAS TARJETAS DE ACUERDO CON LOS ELEMENTOS PENTADIAGONALES
C      DE LA MATRIZ Y FORMA LAS FILAS DE ARRIBA DE LAS Q- MATRICES, N Y
C      EPSILON SON ESPECIFICADOS EN LA PRIMERA TARJETA
C
       COMMON   N,LI,LO,XO,XN
       COMMON   D(30),C(30),B(30),A(30),E(30)
       READ (LI,200) N
200    FORMAT (I2)
       IF (N) 1,1,2
  1    RETURN
  2    WRITE (LO,300) N
300    FORMAT (' N= ',I2/)
       WRITE (LO,301)
301    FORMAT('O MATRIZ PENTADIAGONAL QUE SERA DIAGONALIZADA')
       DO 3 I=1,N
       READ (LI,210) A(I),B(I),C(I),D(I),E(I)
210    FORMAT (5F10.0)
       WRITE (LO,310) A(I),B(I),C(I),D(I),E(I)
310    FORMAT (1X,5F15.6)
  3    CONTINUE
       RETURN 
       END
C
// EJECT
// FOR
*LIST ALL
*ONE WORD INTEGERS
*EXTENDED PRECISION
C
       SUBROUTINE PENRO
C
C      PENRO LOCALIZA LAS RAICES DE LA ECUACION CARACTERISTICA, COLOCANDO
C      A ELLAS EN EL ARREGLO V
C
       DIMENSION   J(2),R(2),S(2),T(31),U(32)
       COMMON      N,LI,LO,XO,XN
       COMMON      A(30),B(30),C(30),D(30),E(30)
       COMMON      Q(4,4),V(31)
       EQUIVALENCE (Q11,Q(1,1)),(Q12,Q(1,2)),(Q21,Q(2,1),(Q22,Q(2,2))
       EQUIVALENCE (J1,J(1)),(J2,J(2)),(R1,R(1)),(R2,R(2))
       EQUIVALENCE (S1,S(1)),(S2,S(2))
       SIZ(X)    = ABS(X)-EPS
       WID(X,Y)  = ABS(Y- X)- DEL
       QM(X1,X2,X3,Y1,Y2,Y3)=(0.5*(Y1*(X2-X3)*(X2+X3)+Y2*(X3-X1)*(X3+X1)
     *      +Y3*(X1-X2)*(X1+X2)))/(Y1*(X2-X3)+Y2*(X3-X1)
     *      +Y3*(X1-X2))
       RS(X,Y)   = SIGN(l.0,X)-SIGN(1.0,Y)
       PHI = 0.15
       TAU = l.OE-2
       DEL = (1.0E-5*ABS(XN-XO))/N
       U(1) = XO-DEL
C
C      PRODUCIMOS LA PRIMERA RAIZ CUYO VALOR ES EL ELEMENTO A11 DE LA MATRIZ
C
       V(1) = -B(1)/E(1)
C
C      LOS INTERVALOS CERRADOS QUE CONTIENEN LAS RAICES SON DETERMINADOS
C      RECURSIVAMENTE
C
       DO 500 K=2,N
C
C      LOS CEROS DE LOS POLIMOMIOS ANTERIORES DETERMINAN INTERVALOS PARA
C      ESTE CICLO, ASI COMO EL ESTABLECIMIENTO DEL FACTOR DE ESCALA QUE 
C      SERA EMPLEADO
C
       CALL PENQK (U(1),T(1),K)
       DO  1  I=2,K
       U(I) = V(I-1)
 1     CALL PENQK (U(I),T(I),K)
       U(K+1) = XN
       CALL PENQK (U(K+1),T(K+1),K)
       U(N+2) = XN+DEL
C
C      UNA RAIZ TIENE QUE SERA LOCALIZADA PARA CADA K INTERVALO
C
       DO  400  I=1,K
       X1 = U(I)
       Y1 = T(I)
       X2 = U(I+1)
       Y2 = T(I+1)
       X3 = U(I+2)
       IF (RS(Y1,Y2)) 50,5,50
C
C      SI EL INTERVALO ES EXTREMADAMEMTE PEQUENO, SUPONDREMOS QUE LA RAIZ
C      QUE ESTA CONTENIDA SE ENCUENTRA EN SU PUNTO MEDIO
C
 5     IF (WID(X1,X2)) 6,6,7
 6     V(I) = 0.5*(X1+X2)
       GO TO 400
 7     R1 = X2-PHI*(X2-X1)
       R2 = X2+PHI*(X3-X2)
       DO  25  M=1,3
       DO  15  L=1,2
       CALL PENQK (R(L),S(L),K)
       IF (RS(Y1, S(L))) 12,15,12
12     U(I+1) = R(L)
       T(I+1) = S(L)
       X2 = R(L)
       Y2 = S(L)
       GO TO 40
15     CONTINUE
       X = QM(Rl,X2,R2,Sl,Y2,S2)
       CALL PENQK (X,Y,K)
       IF (Xl-X) 16,16,23
16     IF (X-X3) 17,17,23
17     IF (RS(Y1,Y)) 19,20,19
19     U(I+1) = X
       T(I+1) = Y
       X2 = X 
       Y2 = Y
       GO TO 40
20     X2 = X
       Y2 = Y
22     R1 = 0.5*(R1+X)
       R2 = 0.5*(X+R2)
       GO TO 25
23     X = X2
       GO TO 22
25     CONTINUE
30     V(I)  = X-TAU*(X-X1)
       V(I+1)= X+TAU*(X3-X)
       I = I+1
       GO TO 400
40     IF (U(I+1)-U(I+2)) 50,50,41
41     U(I+2) = U(I+1)
       T(I+2) = T(I+1)
       GO TO 50
C
C      ***************************************
C      *      RUTINA QUE LOCALIZA RAICES     *
C      ***************************************
C
50     A1 = (X1+X1+X2)/3.0
       A2 = (X1+X2+X2)/3.0
       CALL PENQK (A1,Z1,K)
       CALL PENQK (A2,Z2,K)
       EPS = 0.5E-6*(ABS(Z1)+ABS(Z2))
C
C      EMPLEANDO EL METODO DE LA "REGLA FALSA" SE ENCUENTRA NORMALMENTE QUE
C      EL VALOR DE LA FUNCION EN UN PUNTO EXTREMO ES MUCHO MENOR QUE EN EL
C      OTRO CUAMDO ES PEQUENO EL PUNTO EXTREMO PUEDE SER TOMADO COMO UNA
C      RAIZ CUANDO LA RAZON DE LOS VALORES EXTREMOS ES MENOR QUE LA PRECISION
C      DE LA COMPUTADORA, LA NUEVA APROXIMACION SERA NO CONFIABLE Y EL
C      PUNTO EXTREMO MAYOR TIENE QUE SER MOVIDO.

       DO 200 M=1,30
       X = 0.5*(X1+X2)
       CALL PENQK (X,Y,K)
       IF (RS(Y,Y1)) 106,105,106
105    X1 = X
       Y1 = Y
       GO TO 107
106    X2 = X
       Y2 = Y
107    IF (WID(X1,X2)) 108,108,110
108    V(I) = 0.5*(X1+X2)
       GO TO 400
110    IF (ABS(Y1/Y2+Y2/Y1)-2.0E4) 125,200,200
125    Sl = X1
       S2 = X2
C
C      DOS CICLOS DE LA REGLA FALSA SE LLEVAN A CABO, AUNQUE NO ES LOGICA-
C      MENTE NECESARIO VERIFICAR QUE LA NUEVA ESTIMACION SE ENCUENTRE DENTRO
C      DEL INTERVALO DE RAIZ, LA PERDIDA DE PRECISION PUEDE ALGUNAS VECES
C      ARROJAR LA INTER-SECCION FUERA.
C
       DO  135  L=1,2
       R(L) = (X1*Y2-X2*Y1)/(Y2-Yl)
       IF (Xl-R(L)) 129,200,200
129    IF (R(L)-X2) 130,200,200
130    CALL PENQK (R(L),Y,K)
       IF (SIZ(Y)) 131,131,132
131    V(I)=R(L)
       GO TO 400
132    IF (RS(Y,Y1)) 134,133,134
133    XI = R(L)
       Yl = Y
       J(L) = -1
       GO TO 135
134    X2 = R(L)
       Y2 = Y
       J(L) = 1
135    CONTINUE
C
C      EL PROCESO DE AITKEN DEL CUADRADO DE LA DELTA PROPORCIONA LAS ULTIMAS
C      DOS APROXIMACIONES TRASLADADAS EN EL MISMO PUNTO EXTREMO Y PROPORCIONA
C      LA NUEVA ESTIMACION LOCALIZADA DENTRO DEL INTERVALO
C
       IF (J1+J2) 141,200,142
141    RO = S1
       GO TO 150
142    RO = S2
150    X = (RO*R2-R1*R1)/(RO-R1-R1+R2)
       IF (Xl-X) 151,200,200
151    IF (X-X2) 152,200,200
152    CALL PEMQK (X,Y,K)
       IF (SIZ(Y)) 153,153,154
153    V(I) = X
       GO TO 400
154    IF (RS(Y,Y1)) 156,155,156
155    X1 = X
       Y1 = Y
       GO TO 200
156    X2 = X
       Y2 = Y
       GO TO 200
200    CONTINUE
400    CONTINUE
500    CONTINUE
       RETURN
       END
C
// JOB
// FOR
*LIST ALL
*ONE WORD INTEGERS
*EXTENDED PRECISION
C
       SUBROUTINE PENST (Z,N,K,M,L)
C
C      PENST(Z,N,K,M,L) ALMACENA Y RECUPERA LOS VECTORES DEL DISCO DE
C      ACUERDO CON LA OPCION L, EL ARGUMENTO ES UN VECTOR Z DE DIMENSION
C      N, K ES EL ARCHIVO DE EL DISCO QUE SERA EMPLEADO Y M ES EL NUMERO
C      DE REGISTRO
C      L=1
C      L=2
C      L=3 ALMACENA EL VECTOR EN EL DISCO
C      L=4 REVISA TODOS LOS VECTORES PARA LA MAYOR CONTINUIDAD POSIBLE
C      L=5 BUSCA EL VECTOR DEL DISCO
C
       DIMENSION X(32),Y(32),Z(32)
       GOTO (10,20,30,40,50) ,L
10     CONTINUE
       RETURN
20     CONTINUE
       RETURN
30     CONTINUE
       WRITE (K'M) (Z(I),I=1,N)
       RETURN
40     CONTINUE
       READ   (K'l) (X(I),I=1,N)
       DO  46  J=2,M
       READ   (K'J) (Y(I),I=1,N)
       A = 0.0
       B = 0.0
       DO  41  I=1,N
       A = A+(Y(I)-X(I))**2/((I+1)*(N-I+1) )
       B = B+(Y(I)+X(I))**2/((I+1)*(N-I+1))
41     CONTINUE
       IF (A-B) 44,44,42
42     DO  43  I=1,N
43     Y(I) = -Y(I)
44     DO  45  I=1,N
45     X(I) = Y(I)
46     WRITE  (K'J) (Y(I),I=1,N)
       RETURN
50     CONTINUE
       READ  (K'M) (Z(I),I=1,N)
       RETURN
       END
C
// JOB
// FOR
*LIST ALL
*IOCS(2501 READER, 1403 PRINTER)
*IOCS(DISK)
*ONE WORD INTEGERS
*EXTENDED PRECISION
C
        SUBROUTINE  PENW1 (XI,Y,L)
C
C      PENW1(XI,Y,RHO,L) GRAFICA LOS PUNTOS EN EL PLANO XI-Y COMO FUNCIONES
C      DE LOS DOS COSENOS DE LOS NUMEROS DE ONDA, VARIAS OPCIONES EXISTEN DE
C      ACUERDO CON LA OPCION L
C      L=1 LIMPIA LA IMAGEN DE LA PAGINA E INSERTA LA FRONTERA C=1
C      L=2 INSERTA EL PUNTO DE ACUERDO CON LA REL. DE DISPERSION MONOATOMICA
C      L=3 INSERTA EL PUNTO DE ACUERDO CON LA REL. DE DISPERSION DIATOMICA
C      L=4 IMPRIME LA PAGINA COMPLETA
C
       DIMENSION   III(120)
       COMMON      N,LI,LO,XO,XN
       IX(X)       =92+IFIX(26.0*X)
       IY(Y)       =18-IFIX(15.0*Y)
       GO TO (10,20.40),L
10     DO  12  I=1,120
12     III(I) = 16448
       DO  14  I=1,57
14     WRITE  (20'I) III
       CALL PENPL (IX( 0.0),IY( 0.0),20,19264)
       CALL PENPL (IX( 1.0),IY( 1.0),20,19264)
       CALL PENPL (IX( 1.0),IY(-1.0),20,19264)
       CALL PENPL (IX(-l.0),IY( 1.0),20,19264)
       CALL PENPL (IX(-l.0),IY(-1.0),20,19264)
       RETURN
C
C      LOS ARGUMENTOS PARA PENGW DEL MODELO MONOATOMICO SON
C      XI = -LAMBDA/(4.0*(A1+A2))
C      Y  = A1/(4.0*A2)
C      RHO=1.0
C
20      B  = Y+1.0
        AC = XI*(1.0+4.0*Y)
        IF (B*B-AC) 22,23,24
22     CONTINUE
       SQ = SQRT(AC-B*B)
       C1 = -Y+SQ
       C2 = -Y-SQ
       CALL PENPL (IX(C1),IY(C2),20,23616)
       RETURN
23     CALL PENPL (IX(B),IY(B),20,23616)
       RETURN
24     CONTINUE
       SQ = SQRT(B*B-AC)
       C1 = -Y+SQ
       C2 = -Y-SQ
       CALL PENPL (IX(C2),IY(C1),20,23616)
       RETURN
40     WRITE  (LO,3010)
       DO 42 I=1,57
       READ   (20'I)    III
       WRITE  (LO,3000) III
42     CONTINUE
       RETURN
3000   FORMAT (1X,120A1)
3010   FORMAT ('1')
       END
C
// EJECT
// FOR
*LIST ALL
*ONE WORD INTEGERS
*EXTENDED PRECISION
C
       SUBROUTINE PENW2 (XI, Y, RHO, L)
C
C      PENW2(XI,Y,RHO,L) GRAFICA LOS PUNTOS EN EL PLANO XI-Y COMO
C      FUNCIONES DE LOS DOS COSENOS DE LOS NUMEROS DE ONDA, VARIAS OPCIONES
C      EXISTEN DE ACUERDO CON LA OPCION L
C      L=1  LIMPIA LA IMAGEN DE LA PAGINA E INSERTA LA FRONTERA C=1
C      L=2  INSERTA EL PUNTO DE ACUERDO CON LA REL. DE DISPERSION MONOATOMICA
C      L=3  INSERTA EL PUNTO DE ACUERDO CON LA REL. DE DISPERSION DIATOMICA
C      L=4  IMPRIME LA PAGINA COMPLETA

       DIMENSION   III(120)
       COMMON      N,LI,LO,XO,XN
       IX(X)  =    92+IFIX(26.0*X)
       IY(Y)  =    40-IFIX(15.0*X)
       GO TO (10,30,40),L
  10   DO  12  I=1,120
  12   III(I) = 16448
       DO  14  I=1,57
  14   WRITE  (20'I) III
       CALL PENPL (IX( 0.0),IY( 0.0),20,19264)
       CALL PENPL (IX( 1.0),IY( 1.0),20,19264)
       CALL PENPL (IX( 1.0),IY(-1.0),20,19264)
       CALL PENPL (IX(-l.0),IY( 1.0),20,19264)
       CALL PENPL (IX(-l.0),IY(-1.0),20,19264)
       RETURN
C
C      LOS ARGUMENTOS PARA PENGW DEL MODELO DIATOMICA SON
C      XI = LAMBDA/A2
C      Y  = A1/A2
C      RHO= M PEQUENA/ M GRANDE
C
30     CRHO = SQRT(RHO)
       CRHO = CRHO+1.0/CRHO
       B    = CRHO*XI+(Y+2.0)**2
       AC   = 4.0*(XI*XI+2.0*CRHO*XI*(Y+1)+2.O*((Y+2.0)**2-2.0))
       IF (B*B-AC) 32,33,34
  32   SQ = SQRT(AC-B*B)
       C1 = 0.25*(B+SQ)
       C2 = 0.25*(B-SQ)
       CALL PENPL (IX(C1),IY((C2),20,23616)
       RETURN
  33   CALL PENPL (IX(B),IY(B),20,23616)
       RETURN
  34   SQ = SQRT(B*B)-AC)
       C1 = 0.25*(B+SQ)
       C2 = 0.25*(B-SQ)
       CALL PENPL (IX(C2),IY(C1),20,23616)
       RETURN
  40   WRITE  (LO,3010)
       DO  42  I=1,57
       READ   (20'I)    III
       WRITE  (LO,3000) III
  42   CONTINUE
       RETURN
3000   FORMAT (1X,120A1)
3010   FORMAT ('1')
       END
C
// EJECT
// FOR
*LIST ALL
*ONE WORD INTEGERS
*EXTENDED PRECISION
C
       SUBROUTINE  PENWM
C
C      PENWM ES UNA SUBRUTINA QUE ESCRIBE LOS VALORES DE LOS EIGENVALORES Y
C      SUS EIGENVECTORES ASOCIADOS
C
       DIMENSION   Z(32)
       COMMON      N,LI,LO,XO,XN
       COMMON      P(30,5)
       COMMON      Q(4,4),V(31)
       WRITE  (LO,300)
300    FORMAT ('1')
       DO  30  I=1,N
       CALL   PENEV (Z,I)
       R1 = Z(N+1)/Z(1)
       R2 = Z(N+2)/Z(1)
       CALL PENNO (Z,N)
       WRITE (LO,310) I,V(I),(Z(J),J=1,N)
310    FORMAT('O EIGENVECTOR NO.',I2,10X,'EIGENVALOR'
     1 ,F10.6/(1X,10F12.6))
       WRITE (LO,320) R1,R2
310    FORMAT (' CHECA COMPONENTES QOE RESULTARAN CERO ',10X,2E12.4)
 30    CONTINUE
       RETURN
       END



seck1 2001-08-21