You are on page 1of 16

CLS

COLOR 7,1,7
CLS
PRINT "*******************************************************************"
'
PRINT
PRINT " ***PROGRAM 22: RANDOM**"
'
PRINT
PRINT " ***RANDOM VIBRATION*** "
PRINT
PRINT "********************************************************************"
'
' *INITIALIZATION*
'
DIM TC(5,100),R(5,100),AREAL(600),AIMG(600),LLX(20),AR2(600),AI2(600)
DIM NCX(10),NEX(10),EIGV(20),X(20,20),HR(20),HI(20),NX(20),SDEV(20)
DIM XI(20),X1(20),AM(20)
B$=" #### #####.#### #####.###### ######.##### ###########.##
#"
'
C$=" #### #####.###### ######.##### ###########.###"
D$=" #### #########.#### #########.#### "
PRINT
'
PRINT " ***DATA FILE INFORMATION***"
PRINT
PRINT " 1. PREPARE NEW DATA FILE"
PRINT
PRINT " 2. MODIFY EXISTING DATA FILE"
PRINT
PRINT " 3. USE EXISTING DATA FILE"
PRINT
INPUT " SELECT NUMBER";NIX
PRINT
INPUT " DRIVE USED FOR DATA FILES (A:,B:,or C:) ";ABC$
INPUT " FILE NAME (D21 )";F22$
F22$=ABC$+F22$
CLOSE #4
INPUT " FILE NAME OF THE OUTPUT FILE:";NAME$
PRINT
PRINT " 1.- NEW OUTPUT FILE"
PRINT
PRINT " 2.- APPEND TO EXISTING OUTPUT FILE"
PRINT
INPUT " SELECT NUMBER: "; NUM
IF NUM=1 THEN
OPEN ABC$+NAME$ FOR OUTPUT AS #4
ELSE
OPEN ABC$+NAME$ FOR APPEND AS #4
END IF
ON NIX GOTO L.300,L.370,L.450
'
L.300:
GOSUB L.550
' CALL SUBROUTINE "READ DATA"
GOSUB L.1260
' CALL SUBROUTINE "PRINT DATA"
GOSUB L.1700
' CALL SUBROUTINE "STORE DATA"
GOSUB L.2010
' CALL SUBROUTINE "INTERPOLATE"
GOSUB L.4740
GOTO L.490
'
L.370:
GOSUB L.3080
' CALL SUBROUTINE "RECALL DATA"
GOSUB L.3340
' CALL SUBROUTINE "MODIFY DATA"
GOSUB L.1260
' CALL SUBROUTINE "PRINT DATA"
GOSUB L.1700
' CALL SUBROUTINE "STORE DATA"
GOSUB L.2010
' CALL SUBROUTINE "INTERPOLATE"
GOSUB L.4740
GOTO L.490
'
L.450:
GOSUB L.3080
' CALL SUBROUTINE "RECALL DATA"
GOSUB L.1260
' CALL SUBROUTINE "PRINT DATA"
GOSUB L.2010
' CALL SUBROUTINE "INTERPOLATE"
GOSUB L.4740
L.490:
PRINT
PRINT
PRINT " PRESS ANY KEY TO RETURN TO THE MASTER MENU"
L.500:
A$=INKEY$
IF A$="" THEN
GOTO L.500
END IF
RUN "MASTER.EXE"
END
'********************************************************************
'
L.550:
' SUBROUTINE "READ DATA"
PRINT " INPUT THE FOLLOWING DATA:"
PRINT
INPUT " NUMBER OF DEGREES OF FREEDOM ND=";ND
PRINT
INPUT "NUM OF EXT.FORCES (FOR SHEAR BLD. EXCITED AT FOUND.INPUT 1) NF=";NF
INPUT " TIME DURATION FOR THE FORCES TD= ";TD
INPUT "EXPONENT OF N=2**M M= ";M
PRINT
PRINT"FOR A SHEAR BUILDING EXCITED AT ITS BASE,INPUT ACCELERATION OF GRAVITY"
INPUT "FOR FORCE EXCITATION, INPUT 0(ZERO) G=";G
PRINT
PRINT " FOR EACH FORCE INPUT THE FOLLOWING DATA: "
PRINT
PRINT " FORCE # , COORD.# WHERE FORCE IS APPLIED, NUM. OF POINT DEFINING THE F
ORCE"
PRINT
FOR L=1 TO NF
INPUT NA,NCX(L),NEX(L)
NEXT L
PRINT
PRINT "INPUT TIME EXCITATION TABLE FOR EACH FORCE "
PRINT
FOR L=1 TO NF
PRINT " INPUT TIME - EXCITATION TABLE FOR FORCE #";L;":"
PRINT
FOR I=1 TO NEX(L)
INPUT " TIME , EXCITATION = ";TC(L,I),R(L,I)
NEXT I
NEXT L
PRINT
IF G<>0 THEN
PRINT "INPUT MASSES STARTING WITH THE FIRST FLOOR OF THE SHEAR BUILDING "
ELSE
GOTO L.820
END IF
NX=1
GOSUB L.1050
'CALL SUB "INPUT MATRICES"
FOR J=1 TO ND
AM(J)=X1(J)
NEXT J
L.820:
PRINT
PRINT
PRINT"INPUT MODAL DAMPING RATIOS XI(I)"
NX=1
GOSUB L.1040
'CALL SUBROUTINE INPUT MATRICES
FOR J=1 TO ND
XI(J)=X1(J)
NEXT J
PRINT
NX=1
PRINT " INPUT `ND' EIGENVALUES SEPARATED BY COMMAS EIGV(I)"
PRINT
GOSUB L.1040
'CALL SUBROUTINE "INPUT MATRICES"
FOR J=1 TO ND
EIGV(J)=X1(J)
NEXT J
PRINT
NX=ND
PRINT
PRINT " INPUT MODAL MATRIX BY ROWS"
IF ND=1 THEN
INPUT "INPUT X(1,1)";X(1,1)
ELSE
GOTO L.1000
END IF
GOTO L.1010
L.1000:
GOSUB L.1040
'CALL SUBROUTINE "INPUT MATRICES"
L.1010:
RETURN
'*************************************************************************
'
L.1040:
'SUBROUTINE "INPUT MATRICES"
L.1050:
FOR I=1 TO NX
L.1060:
IF NX>1 THEN
PRINT " INPUT SEPARATED BY COMMAS `ND' ELEMENTS OF ROW "; I
END IF
LINE INPUT " ? "; X$
FOR J=1 TO ND
K=INSTR(X$,",")
IF J<ND AND K=0 THEN
GOTO L.1170
END IF
IF J=ND AND K<>0 THEN
GOTO L.1170
END IF
IF J<ND AND K<>0 THEN
Y$=MID$(X$,1,K-1)
END IF
IF J=ND AND K=0 THEN
Y$=X$
END IF
IF NX=1 THEN
X1(J)=VAL(Y$)
ELSE
X(I,J)=VAL(Y$)
END IF
X$=MID$(X$,K+1,LEN(X$))
GOTO L.1190
L.1170:
PRINT "ERROR, REENTRY ROW ";I
GOTO L.1060
L.1190:
NEXT J
NEXT I
INPUT " ARE THE ABOVE VALUES CORRECT Y/N";YN$
IF YN$="N" OR YN$="n" THEN
GOTO L.1050
END IF
RETURN
'************************************************************************
'
L.1260:
CLS ' SUBROUTINE "PRINT DATA"
PRINT
PRINT " ***PROGRAM 22 RANDOM*** FILE :";F22$
PRINT
PRINT " INPUT DATA:"
PRINT
PRINT" NUMBER OF DEGREES OF FREEDOM ND=";ND
PRINT" NUM OF EXT.FORCES NF=";NF
PRINT" TIME DURATION FOR THE FORCES TD= ";TD
PRINT" EXPONENT OF N=2**M M= ";M
PRINT" GRAVITATIONAL INDEX G=";G
PRINT
PRINT" FORCE # , COORD.# WHERE FORCE IS APPLIED, NUM. OF POINT DEFINING THE FO
RCE"
FOR L=1 TO NF
PRINT USING " ## ## ## ";L,NCX(L),NE
X(L)
NEXT L
PRINT #4,
PRINT #4, " ***PROGRAM 22 RANDOM*** FILE :";F22$
PRINT #4,
PRINT #4, " INPUT DATA:"
PRINT #4,
PRINT #4," NUMBER OF DEGREES OF FREEDOM ND=";ND
PRINT #4," NUM OF EXT.FORCES NF=";NF
PRINT #4," TIME DURATION FOR THE FORCES TD= ";TD
PRINT #4," EXPONENT OF N=2**M M= ";M
PRINT #4," GRAVITATIONAL INDEX G=";G
PRINT #4,
PRINT #4," FORCE # , COORD.# WHERE FORCE IS APPLIED, NUM. OF POINT DEFINING TH
E FORCE"
FOR L=1 TO NF
PRINT USING " ## ## ## ";L,NCX(L),N
EX(L)
PRINT #4, L,NCX(L),NEX(L)
NEXT L
FOR L=1 TO NF
PRINT
PRINT " EXCITATION FUNCTION FOR FORCE #";L
PRINT
PRINT #4," EXCITATION FUNCTION FOR FORCE #";L
PRINT #4,
PRINT " TIME EXCITATION"
PRINT #4," TIME EXCITATION"
FOR I=1 TO NEX(L)
PRINT USING " ###.#### ############.####";TC(L,I),R(L,I)
PRINT
PRINT #4, TC(L,I),R(L,I)
NEXT I
NEXT L
PRINT
IF G=0 THEN GOTO L.1500
PRINT " FLOOR MASSES OF THE SHEAR BUILDING"
PRINT #4, " FLOOR MASSES OF THE SHEAR BUILDING"
FOR I=1 TO ND
PRINT " ";AM(I),
' PRINT #4, AM(I),
NEXT I
PRINT #4,
L.1500:
PRINT
PRINT" MODAL DAMPING RATIOS XI(I)"
PRINT
PRINT 4,
PRINT #4," MODAL DAMPING RATIOS XI(I)"
PRINT #4,
FOR I=1 TO ND
PRINT XI(I),
PRINT #4, XI(I),
NEXT I
WRITE #4,
PRINT
PRINT
PRINT " EIGENVALUES EIGV(I) "
PRINT #4,
PRINT #4,
PRINT #4, " EIGENVALUES EIGV(I) "
PRINT #4,
FOR I=1 TO ND
PRINT USING " .######^^^^ " ; EIGV(I),
PRINT #4, EIGV(I),
NEXT I
PRINT
PRINT #4,
PRINT " MODAL MATRIX X(I,J)"
PRINT
PRINT #4,
PRINT #4, " MODAL MATRIX X(I,J)"
PRINT #4,
FOR I=1 TO ND
FOR J=1 TO ND
PRINT USING "#.##### " ; X(I,J),
PRINT #4, X(I,J),
NEXT J
WRITE #4,
PRINT
NEXT I
PRINT #4,
RETURN
' ************************************************************************
'
L.1700:
' SUBROUTINE "STORE DATA"
'
CLOSE #1
CLOSE #2
CLOSE #3
OPEN F22$ FOR OUTPUT AS #1
WRITE #1,ND,NF,TD,M,G
FOR L=1 TO NF
WRITE #1, NCX(L),NEX(L)
NEXT L
FOR L=1 TO NF
FOR I=1 TO NEX(L)
WRITE #1,TC(L,I),R(L,I)
NEXT I
NEXT L
FOR I=1 TO ND
WRITE #1,XI(I),AM(I)
NEXT I
FOR I=1 TO ND
WRITE #1,EIGV(I)
NEXT I
FOR I=1 TO ND
FOR J=1 TO ND
WRITE #1,X(I,J)
NEXT J
NEXT I
CLOSE #1
RETURN
'*************************************************************************
'
' SUBROUTINE "INTERPOLATE"
'
' ADJUST FORCES TO ZERO MEAN
L.2010:
FOR L=1 TO NF
SUM=0
LL=NEX(L)
N=2^M
H=TD/N
LLX(L)=INT(TC(L,LL)/H+.5)
FOR I=1 TO LL-1
IF TC(L,LL)>TD THEN
PRINT "ERROR RECORD LARGER THAN MAX. TIME TD "
END IF
SUM=SUM+(R(L,I+1)+R(L,I))*(TC(L,I+1)-TC(L,I))/2
NEXT I
SUM=SUM/TC(L,LL)
FOR I=1 TO LL
R(L,I)=R(L,I)-SUM
' PRINT I,R(L,I)
NEXT I
IF TC(L,LL)=>TD THEN
GOTO L.2210
END IF
NEX(L)=NEX(L)+2
TC(L,LL+1)=TC(L,LL)*1.0001
TC(L,LL+2)=TD
R(L,LL+1)=0
R(L,LL+2)=0
L.2210:
NEXT L
OPEN ABC$+"FILEX" AS #2 LEN=15
FIELD 2, 15 AS NU$
FOR LL=1 TO NF
NEXX=NEX(LL)
FOR I=1 TO N+1
AREAL(I)=0
AIMG(I)=0
NEXT I
AREAL(1)=R(LL,1)
ANN=0
II=1
FOR I=2 TO N+1
AI=I-1
T=AI*H
IF T>TC(LL,NEXX) THEN
GOTO L.2480
END IF
IF T=<TC(LL,II+1) THEN
GOTO L.2400
END IF
ANN=-TC(LL,II+1)+T-H
II=II+1
L.2400:
ANN=ANN+H
AREAL(I)=R(LL,II)+(R(LL,II+1)-R(LL,II))*ANN/(TC(LL,II+1)-TC(LL,II))
IF (G<>0) THEN
AREAL(I)=AREAL(I)*G
END IF
NEXT I
PRINT
PRINT " OUTPUT RESULTS: "
PRINT
PRINT #4,
PRINT #4, " OUTPUT RESULTS: "
PRINT #4,
FOR I=1 TO N
AREAL(I)=AREAL(I)/N
'PRINT I,AREAL(I),AIMG(I)
NEXT I
L.2480:
FAC=-1
PI=3.1415926535#
GOSUB L.4270 'FAST FOURIER TRANSFORM
PRINT " FORCE FOURIER COEFFICIETS "
PRINT
PRINT " N REAL IMAG "
PRINT
PRINT #4, " FORCE FOURIER COEFFICIETS # ";LL
PRINT #4,
PRINT #4, " N REAL IMAG "
PRINT #4,
FOR J=1 TO N
IF J<=N/2 THEN
I=J+N/2
ELSE
I=J-N/2
END IF
AREAL(I)=AREAL(J)
AIMG(I)=AIMG(J)
NEXT J
KK=0
FOR I=1 TO N
KK=KK+1
II=I-N/2-1
NX(KK)=II
PRINT USING D$; II,AREAL(I),AIMG(I)
PRINT #4, II,AREAL(I),AIMG(I)
' CORRECT CIRCULAR SPECTRA (NEWLAND PAGE 144)
'
WK=(TD/6.283185)*N/NEXX
' PRINT LL,I,AREAL(I),AIMG(I)
AREAL(I)=AREAL(I)*WK
AIMG(I)=AIMG(I)*WK
AR2(I)=AREAL(I)
AI2(I)=AIMG(I)
' PRINT WK,NEXX,AREAL(I),AIMG(I)
NEXT I
' SMOOTH THE SPECTRA (NEWLAND PAGE 145)
NS=(9*N/NEX(LL)-1)/2
NS=INT(NS)
N1=-NS+N/2+1
N2=NS+N/2+1
FOR K=1 TO N
SUMR=0
SUMI=0
FOR MM=N1 TO N2
' PRINT "NS,N1,N2,LL,K,MM";NS,N1,N2,LL,K,MM
' PRINT:PRINT "AR2(K+MM),AI2(K+MM)";AR2(K+MM),AI2(K+MM)
IF ABS(K+MM)>N/2 THEN
GOTO L.2830
END IF
SUMR=SUMR+AR2(K+MM)
SUMI=SUMI+AI2(K+MM)
L.2830:
NEXT MM
AREAL(K)=SUMR/(2*NS+1)
AIMG(K)=SUMI/(2*NS+1)
NEXT K
FOR I=1 TO N
W$=STR$(AREAL(I))
W=15-LEN(W$)
W$=STRING$(W," ")+W$
LSET NU$=W$
L1=(LL-1)*2*N
PUT #2,L1+2*I-1
'PRINT "KK,I,AREAL(I) ";KK,I,AREAL(I)
W$=STR$(AIMG(I))
W=15-LEN(W$)
W$=STRING$(W," ")+W$
LSET NU$=W$
PUT #2,L1+2*I
'PRINT "KK,I,AIMG(I) ";KK,I,AIMG(I)
NEXT I
NEXT LL
CLOSE #2
RETURN
'*************************************************************************
'************************************************************************
'
L.3080:
' SUBROUTINE "RECALL DATA"
OPEN F22$ FOR INPUT AS #1
INPUT #1,ND,NF,TD,M,G
FOR L=1 TO NF
INPUT #1,NCX(L),NEX(L)
NEXT L
FOR L=1 TO NF
FOR I=1 TO NEX(L)
INPUT #1,TC(L,I),R(L,I)
NEXT I
NEXT L
FOR I=1 TO ND
INPUT #1,XI(I),AM(I)
NEXT I
FOR I=1 TO ND
INPUT #1,EIGV(I)
NEXT I
FOR I=1 TO ND
FOR J=1 TO ND
INPUT #1,X(I,J)
NEXT J
NEXT I
CLOSE #1
RETURN
' ***********************************************************************
'
L.3340:
CLS
'SUBROUTINE "MODIFY DATA"
NDD=ND
PRINT "NUMBER OF DEGREES OF FREEDOM ND=";ND
INPUT "NEW VALUE: *NO CHANGE PRESS ENTER* ND=";I$
IF I$<>""THEN
ND=VAL(I$)
END IF
IF NDD<>ND THEN
GOSUB L.550
ELSE
GOTO L.3400
END IF
RETURN
L.3400:
PRINT"NUM OF EXT.FORCES NF=";NF
PRINT " FORCE # , COORD.# WHERE FORCE IS APPLIED, NUM. OF POINT DEFINING THE F
ORCE"
PRINT
FOR L=1 TO NF
PRINT USING " ## ## ## ";L,NCX(L),NE
X(L)
NEXT L
FOR L=1 TO NF
PRINT
PRINT " EXCITATION FUNCTION FOR FORCE #";L
PRINT
PRINT " TIME EXCITATION"
FOR I=1 TO NEX(L)
PRINT USING " ###.#### ############.####";TC(L,I),R(L,I)
NEXT I
NEXT L
INPUT "NEW VALUES FOR THE EXCITATION ? Y/N" ; YN$
IF YN$="N" OR YN$="n" THEN
GOTO L.3690
END IF
INPUT "NUM OF EXT.FORCES (FOR SHEAR BLD. EXCITED AT FOUND.INPUT 1) NF=";NF
PRINT " EXCITATION INDEX (ACCELERATION OF GRAVITY OR`0'ZERO) G=";G
INPUT "NEW VALUE *NO CHANGE PRESS ENTER* G=";V$
IF V$<>"" THEN
G=VAL(V$)
END IF
PRINT" FOR EACH FORCE INPUT THE FOLLOWING DATA: "
PRINT
PRINT " FORCE # , COORD.# WHERE FORCE IS APPLIED, NUM. OF POINT DEFINING THE F
ORCE"
PRINT
FOR L=1 TO NF
INPUT NA,NCX(L),NEX(L)
NEXT L
PRINT
PRINT "INPUT TIME EXCITATION TABLE FOR EACH FORCE "
PRINT
FOR L=1 TO NF
PRINT " INPUT TIME - EXCITATION TABLE FOR FORCE #";L;":"
PRINT
FOR I=1 TO NEX(L)
INPUT " TIME , EXCITATION = ";TC(L,I),R(L,I)
NEXT I
NEXT L
L.3690:
PRINT "THE TIME STEP OF INTEGRATION IS H=";H
INPUT "NEW VALUE *NO CHANGE PRESS ENTER* H=";I$
IF I$<>""THEN
H=VAL(I$)
END IF
PRINT
INPUT" PRINT TIME HISTORY RESP.=1; PRINT ONLY MAX.VALUE=0 NPRT=";NPRT
IF G=0 THEN
GOTO L.3880
END IF
PRINT "THE FLOOR MASSES ARE"
FOR I=1 TO ND
PRINT AM(I),
NEXT I
'PRINT "KK,I,AIMG(I) ";KK,I,AIMG(I)
PRINT
INPUT " NEW VALUES ? Y/N "; YN$
IF YN$="N" OR YN$="n" THEN
GOTO L.3890
END IF
PRINT "INPUT MASSES STARTING WITH THE FIRST FLOOR OF THE SHEAR BUILDING"
NX=1
GOSUB L.1050
' CALL SUBROUTINE "INPUT MATRICES"
FOR J=1 TO ND
AM(J)=X1(J)
NEXT J
L.3880:
PRINT
L.3890:
PRINT "THE MODAL DAMPING RATIOS ARE:"
PRINT
FOR I=1 TO ND
PRINT XI(I),
NEXT I
PRINT
INPUT "NEW VALUES ? Y/N ";YN$
PRINT
IF YN$="N" OR YN$="n" THEN
GOTO L.4020
END IF
PRINT "INPUT `ND' MODAL DAMPING RATIOS SEPARATED BY COMMAS "
NX=1
GOSUB L.1050
'CALL SUBROUTINE "INPUT MATRICES"
FOR J=1 TO ND
XI(J)=X1(J)
NEXT J
L.4020:
PRINT
PRINT "THE EIGENVALUES ARE:"
PRINT
FOR I=1 TO ND
PRINT USING ".######^^^^ "; EIGV(I),
NEXT I
PRINT
PRINT
PRINT "THE MODAL MATRIX IS:"
PRINT
FOR I=1 TO NDX
FOR J=1 TO ND
PRINT USING "#.##### ";X(I,J),
NEXT J
PRINT
NEXT I
PRINT
INPUT "NEW VALUES? Y/N ";YN$
IF YN$="N" OR YN$="n" THEN
GOTO L.4260
END IF
NX=1
PRINT "INPUT 'ND' EIGENVALUES SEPARATED BY COMMAS"
GOSUB L.1050
'CALL SUBROUTINE "INPUT MATRICES"
FOR J=1 TO ND
EIGV(J)=X1(J)
NEXT J
NX=ND
PRINT
PRINT "INPUT MODAL MATRIX BY ROWS "
GOSUB L.1050
'CALL SUBROUTINE "INPUT MATRICES "
L.4260:
RETURN
L.4270:
'************************************************************************
' SUBROUTINE "FAST FOURIER TRANSFORM"
'
N=2^M
NV2=N/2
NM1=N-1
J=1
FOR I=1 TO NM1
IF I>= J THEN
GOTO L.4420
END IF
HREAL=AREAL(J)
HIMG=AIMG(J)
AREAL(J)=AREAL(I)
AIMG(J)=AIMG(I)
AREAL(I)=HREAL
AIMG(I)=HIMG
L.4420:
K=NV2
L.4430:
IF K>=J THEN
GOTO L.4470
END IF
J=J-K
K=K/2
GOTO L.4430
L.4470:
J=J+K
NEXT I
FOR L=1 TO M
LE=2^L
L2E=LE/2
UREAL=1
UIMG=0
WREAL=COS(PI/L2E)
WIMG=FAC*SIN(PI/L2E)
FOR J=1 TO L2E
FOR I=J TO N STEP LE
IP=I+L2E
HREAL=AREAL(IP)*UREAL-AIMG(IP)*UIMG
HIMG=AREAL(IP)*UIMG+AIMG(IP)*UREAL
AREAL(IP)=AREAL(I)-HREAL
AIMG(IP)=AIMG(I)-HIMG
AREAL(I)=AREAL(I)+HREAL
AIMG(I)=AIMG(I)+HIMG
NEXT I
U=UREAL*WREAL-UIMG*WIMG
UIMG=UREAL*WIMG+UIMG*WREAL
UREAL=U
NEXT J
NEXT L
RETURN
'
'************************************************************************
L.4740:
'SUBROUTINE "SPECTRAL FUNTION FOR THE RESPONSE
OPEN ABC$+"FILEX" AS #2 LEN=15
FIELD #2,15 AS NU$
FOR NN=1 TO N
FOR L=1 TO 2*NF
GET #2, (L-1)*N+NN
L1=(L+1)/2
IF INT(L/2)*2<>L THEN
AREAL(L1)=VAL(NU$)
ELSE
AIMG(L1)=VAL(NU$)
END IF
NEXT L
W0=6.283185/TD
II=NX(NN)
WN=W0*II
FOR J=1 TO ND
WB=SQR(EIGV(J))
AH=EIGV(J)-WN^2
'PRINT "II,J,WN,WB";II,J,WN,WB
BH=2*XI(J)*WN*WB
'PRINT "II,J,XI(J) ";II,J,XI(J)
DH=AH*AH+BH*BH
HR(J)=AH/DH
HI(J)=BH/DH
'PRINT "NN,J,HR(J),HI(J)" ;NN,J,HR(J),HI(J)
NEXT J
FOR ID=1 TO ND
TC(ID,NN)=0
R(ID,NN)=0
FOR J=1 TO ND
FOR K=1 TO ND
QR=0
QI=0
FOR L=1 TO ND
FOR M=1 TO ND
Q1=AREAL(L)*AREAL(M)+AIMG(L)*AIMG(M)
Q2=HR(J)*HR(K)+HI(J)*HI(K)
Q3=AIMG(L)*AREAL(M)-AREAL(L)*AIMG(M)
Q4=HI(J)*HR(K)-HR(J)*HI(K)
QR=QR+X(L,J)*X(M,K)*(Q1*Q2-Q3*Q4)
QI=QI+X(L,J)*X(M,K)*(Q1*Q4-Q3*Q2)
'PRINT "ID,M,L,Q1,Q2,Q3,Q4,QR,QI ";ID,M,L,Q1,Q2,Q3,Q4,QR,QI
NEXT M
NEXT L
AA=X(ID,J)*X(ID,K)
TC(ID,NN)=TC(ID,NN)+AA*QR
R(ID,NN)=R(ID,NN)+AA*QI
NEXT K
NEXT J
NEXT ID
NEXT NN
CLOSE #2
CLOSE #3
PRINT
PRINT" SPECTRAL FUNCTIONS FOR THE RESPONSE:"
PRINT
PRINT #4,
PRINT #4," SPECTRAL FUNCTIONS FOR THE RESPONSE:"
PRINT #4,
FOR ID=1 TO ND
PRINT " COORDINATE NUMBER= ";ID
PRINT
PRINT "INDEX FREQUENCY REAL COMP. IMAG. COMP. "
PRINT
PRINT #4, " COORDINATE NUMBER= ";ID
PRINT #4,
PRINT #4, "INDEX FREQUENCY REAL COMP. IMAG. COMP. "
PRINT #4,
FOR NN=1 TO N
II=NX(NN)
WN=W0*II
PRINT II,WN,TC(ID,NN),R(ID,NN)
PRINT #4,II,WN,TC(ID,NN),R(ID,NN)
NEXT NN
PRINT
PRINT #4,
NEXT ID
' Calculate the standard deviation SDEV(ID), for the response spectrum
' for each coordinate of the structural system
'
PRINT
PRINT " STANDARD DEVIATION: "
PRINT
PRINT " DEGREE # STANDARD DEVIATION"
PRINT #4,
PRINT #4, " STANDARD DEVIATION: "
PRINT #4,
PRINT #4, " DEGREE # STANDARD DEVIATION"
FOR ID=1 TO ND
SDEV(ID) = 0
FOR NN = 1 TO N
SDEV(ID) = SDEV(ID) + TC(ID,NN)
NEXT NN
SDEV(ID) = SDEV(ID) * W0
SDEV(ID) = SQR (SDEV(ID))
PRINT
PRINT ID,SDEV(ID)
PRINT #4,
PRINT #4,ID,SDEV(ID)
NEXT ID
'
RETURN

You might also like