構造物の固有周期、固有ベクトル計算に使う、プログラムと入力データを
塩井君に作っていただきました。
感謝!
固有値解析プログラム
C EIGEN VALUE AND EIGEN VECTOR
C IMPLICIT REAL*8(A-H,O-Z)
C EIGEN VALUE AND EIGEN VECTOR
COMMON /A/ M,MN,II,TINTAV,FAI(70,70),WEIGT(70),OMEGA(70),Z(600)
&,CO1(70),CO2(70),CO3(70),CO4,CO5,AA(600),BB(70,600),CC(70,600),
&EXPO(600),SINN(600),B(70,70),BMI(110,70),SFI(110,70),WM(70),
&MEM,AFI(110,70)
DIMENSION YY(70,70),T(70,70),TX(110),EIGV(70)
OPEN(5,FILE='dataspecial2.DAT',STATUS='UNKNOWN')
OPEN(6,FILE='ANSspecial2.ANS',STATUS='UNKNOWN')
READ(5,1001) MP,IPP
1001 FORMAT(I2,I6)
MN=MP
M=5
READ(5,1002) (WM(I),I=1,M)
1002 FORMAT(5F10.0)
WRITE(6,1022) (WM(I),I=1,M)
1022 FORMAT(5F10.0)
DO 10 I=1,M
10 WEIGT(I)=WM(I)/980.
DO 20 I=1,M
READ (5,100) (B(I,J),J=1,5)
100 FORMAT (5F15.7)
WRITE (6,110) (B(I,J),J=1,5)
110 FORMAT (5E15.7)
20 CONTINUE
READ(5,1003) EE
1003 FORMAT(F10.5)
210 DO 231 J=1,M
DO 231 I=1,M
231 B(I,J)=B(I,J)*WM(J)
C*** EIGEN (M,MP,IPP,EE,WEIGT,B,YY,EIGV,T)
CALL EBERLN (M,B,EE,YY,IPP,EIGV,WEIGT)
C*** EBERLN(N,A,EP,T,ITMX,EIGV,WEIGT)
DO 213 IV=1,MP
DO 213 I=1,M
213 FAI(I,IV)=YY(I,IV)
DO 214 IV=1,MP
OMEGA(IV)=EIGV(IV)
214 TX(IV)=2.*3.14159/EIGV(IV)
2000 WRITE(6,2001)
2001 FORMAT(28HEIGEN VALUE AND EIGEN VECTOR)
WRITE(6,2002)
2002 FORMAT(7X,17HNATURAL FREQUENCY,10X,14HNATURAL PERIOD)
WRITE(6,2003)
2003 FORMAT(9X,12H(RADIAN/SEC),16X,5H(SEC)/)
DO 215 IV=1,MP
WRITE(6,2004) IV,OMEGA(IV),TX(IV)
2004 FORMAT(2X,I2,6X,F11.4,16X,F7.3)
215 CONTINUE
WRITE(6,2005)
2005 FORMAT(6X,15HNORMALIZED MODE//)
DO 216 IV=1,MP
WRITE(6,2006) (FAI(I,IV),I=1,M)
2006 FORMAT(8F13.5)
WRITE(6,2007)
2007 FORMAT(//)
216 CONTINUE
END
C
SUBROUTINE EBERLN(N,A,EP,T,ITMX,EIGV,WEIGT)
C
C 改良された固有値のサブルーチン ヤコビ法
C 1991.5.22
C
C EIGENPROBLEM SOLVER FOR GENERAL MATRIX BY JACOBI-TYPE TR.S.SL***
C
C IMPLICIT REAL*8(A-H,O-Z)
DIMENSION A(70,70),T(70,70),EIGV(70),CCC(70,70),YYK(70)
DIMENSION WEIGT(70)
C
C
N=5
DO 1 I=1,N
DO 1 J=1,N
1 CCC(I,J)=A(I,J)
MARK =0
LEFT =0
IRIGHT = 0
IF (ITMX) 10,20,10
10 IF (ITMX) 30,40,40
30 LEFT = 1
GO TO 50
40 IRIGHT = 1
50 DO 60 I=1,N
T(I,I) =1.0
IP1= I+1
DO 60 J=IP1,N
T(I,J)= 0.0
60 T(J,I)= 0.0
20 EPS =SQRT(EP)
NM1=N-1
DO 70 IT=1,50
IF (MARK) 80,80,90
90 ITMX =1-IT
GO TO 410
80 DO 100 I=1,NM1
AII = CCC(I,I)
IP1 = I+1
DO 110 J=IP1,N
AIJ = CCC(I,J)
AJI = CCC(J,I)
IF (ABS(AIJ+AJI) - EPS) 120,120,130
120 IF (ABS(AIJ-AJI) - EPS) 110,110,150
150 IF (ABS(AII-CCC(J,J))-EPS) 110,110,130
130 GO TO 140
110 CONTINUE
100 CONTINUE
ITMX =IT -1
GO TO 410
140 MARK = 1
DO 160 K=1,NM1
KP1 = K+1
DO 160 M=KP1,N
H = 0.0
G = 0.0
HJ = 0.0
YH = 0.0
DO 180 I=1,N
AIK = CCC(I,K)
AIM = CCC(I,M)
TE = AIK*AIK
TEE = AIM*AIM
YH = YH + TE - TEE
IF (I-K) 190,200,190
190 IF (I-M) 210,200,210
210 AKI = CCC(K,I)
AMI = CCC(M,I)
H = H + AKI * AMI - AIK * AIM
TEP = TE + AMI * AMI
TEM = TEE+ AKI * AKI
G = G + TEP + TEM
HJ = HJ - TEP + TEM
200 CONTINUE
180 CONTINUE
H = H + H
D = CCC(K,K) - CCC(M,M)
AKM = CCC(K,M)
AMK = CCC(M,K)
C = AKM + AMK
E = AKM - AMK
IF (ABS(C) - EP) 220,220,230
220 CX = 1.0
SX = 0.0
GO TO 240
230 COT2X = D/C
IF (COT2X) 250,260,260
250 SIG = -1.0
GO TO 270
260 SIG = 1.0
270 COTX = COT2X + (SIG * SQRT(1.0 + COT2X*COT2X))
SX = SIG / SQRT(1.0+COTX*COTX)
CX = SX * COTX
240 IF (YH) 280,290,290
280 TEM = CX
CX = SX
SX = -TEM
290 COS2X = CX * CX - SX * SX
SIN2X = 2.0 * SX * CX
D = D * COS2X + C * SIN2X
H = H * COS2X - HJ* SIN2X
DEN = G + 2.0 *( E*E + D*D)
TANHY = (E * D - H/2.0) / DEN
IF (ABS(TANHY) - EP) 300,300,310
300 CHY = 1.0
SHY = 0.0
GO TO 320
310 CHY = 1.0/SQRT(1.0 - TANHY * TANHY)
SHY = CHY * TANHY
320 C1 = CHY * CX - SHY * SX
C2 = CHY * CX + SHY * SX
S1 = CHY * SX + SHY * CX
S2 =-CHY * SX + SHY * CX
IF (ABS(S1) - EP) 340,340,350
340 IF (ABS(S2) - EP) 160,160,350
350 MARK = 0
DO 360 I=1,N
AKI = CCC(K,I)
AMI = CCC(M,I)
CCC(K,I) = C1 * AKI + S1 * AMI
CCC(M,I) = S2 * AKI + C2 * AMI
IF (LEFT) 360,360,380
380 TKI = T(K,I)
TMI = T(M,I)
T(K,I) = C1 * TKI + S1 * TMI
T(M,I) = S2 * TKI + C2 * TMI
360 CONTINUE
DO 370 I=1,N
AIK = CCC(I,K)
AIM = CCC(I,M)
CCC(I,K) = C2 * AIK - S2 * AIM
CCC(I,M) =-S1 * AIK + C1 * AIM
IF (IRIGHT) 370,370,400
400 TIK = T(I,K)
TIM = T(I,M)
T(I,K) = C2 * TIK - S2 * TIM
T(I,M) =-S1 * TIK + C1 * TIM
370 CONTINUE
160 CONTINUE
70 CONTINUE
ITMX = 50
410 CONTINUE
DO 2 I=1,N
2 EIGV(I)=CCC(I,I)
DO 3 I=1,N
3 EIGV(I)=SQRT(980./EIGV(I))
DO 6 I=1,N
YYK(I)=0.
DO 4 J=1,N
4 YYK(I)=YYK(I)+T(J,I)**2*WEIGT(J)
YYK(I)=SQRT(YYK(I))
DO 5 J=1,N
5 T(J,I)=T(J,I)/YYK(I)
6 CONTINUE
RETURN
END
入力データの例
10900000
2383275. 720000. 2217000. 720000. 2383275.
0.1789414E-05 -0.2235023E-06 -0.8047154E-07 0.1900006E-07 0.2613326E-09
-0.2235026E-06 0.1092144E-03 0.5850431E-05 -0.1381326E-05 -0.1899919E-07
-0.8047149E-07 0.5850427E-05 0.2476859E-04 -0.5850350E-05 -0.8046669E-07
0.1900007E-07 -0.1381328E-05 -0.5850349E-05 0.1092140E-03 0.2234957E-06
0.2613326E-09 -0.1899919E-07 -0.8046673E-07 0.2234956E-06 0.1789389E-05
1.0E-06
Q 0