计算PGA的python程序
Contents
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
import numpy as np
import math
import os,glob
import string
import matplotlib.pyplot as plt
from pylab import *
import datetime
starttime = datetime.datetime.now()
def computepga(Accelerate,LN,damp,Freq,nFreq):
n =LN
dt = 0.02
zeta = damp
nfreq = nFreq
freq = Freq
MAcc = [0]*nfreq
absacc = [0]*n
for s in range(n):
absacc[s] = abs( string.atof(Accelerate[s]) )
for k in range(nfreq):
Damfreq = freq[k] * sqrt( 1-zeta**2 )
e_t = math.exp( - zeta * dt * freq[k] )
ss = math.sin( Damfreq * dt )
cc = math.cos( Damfreq * dt )
d_f = ( 2 * zeta**2 - 1 ) / ( (freq[k])**2 * dt )
d_3t = zeta / ( freq[k]**3 * dt )
A00= e_t*( ss * zeta/sqrt(1-zeta*zeta)+cc )
A01= e_t*( ss/Damfreq )
A10 = -freq[k] * e_t * ss/sqrt(1-zeta*zeta)
A11 = e_t * ( -ss * zeta / sqrt(1-zeta*zeta) + cc )
B00 = e_t * (( d_f+zeta / freq[k] ) * ss/Damfreq+( 2*d_3t+1 / freq[k]**2) * cc )-2*d_3t
B01 = -e_t * ( d_f * ss/Damfreq + 2*d_3t*cc ) - 1/freq[k]**2 + 2*d_3t
B10 = e_t * ( (d_f +zeta/freq[k] ) * (cc - zeta/sqrt(1-zeta**2) *ss ) - ( 2*d_3t+1/freq[k]**2 ) * ( Damfreq*ss+zeta*freq[k]*cc) )+1/( freq[k]**2*dt )
B11 = e_t * ( 1/(freq[k]**2*dt )*cc+ss*zeta/( freq[k]*Damfreq*dt ))-1/( freq[k]**2*dt )
Displace = [0]*(n+1)
Velocity = [0]*(n+1)
AbsAcce = [0]*(n+1)
absabsAcc = [0]*(n+1)
for j in range(n-1):
Displace[j+1] = A00*Displace[j]+A01*Velocity[j]+B11*float(Accelerate[j])+B01*float(Accelerate[j+1])
Velocity[j+1] = A10*Displace[j]+A11*Velocity[j]+B10*float(Accelerate[j])+B11*float(Accelerate[j+1])
AbsAcce[j+1] = -2*zeta*freq[k]*Velocity[j+1] -freq[k]**2*Displace[j+1]
absabsAcc[j+1] = abs(AbsAcce[j+1])
if freq[k]>=10**10:
MAcc[k] = max(absacc)
else:
MAcc[k] = max(absabsAcc)
return MAcc
accfile = glob.glob('xj30bar/ACC/*S001*.acc')
numsite = len(accfile)
print "the number of site is: ",numsite
damp = 0.05
Freq1 = 0.1
Freq2 = 50
nFreq = 100
Frinc = math.log(Freq2/Freq1)/(nFreq-1)
Freq = [0]*nFreq
T = [0]*nFreq
Freq[0] = Freq1
for k in range(nFreq):
Freq[k] = Freq1*math.exp(k*Frinc)
T[k] = 1/Freq[k]
PGA = [[0]*nFreq]*numsite
for idx in range(numsite):
filename = accfile[idx]
file = open(filename,'r')
linesList = file.readlines()
linesList = [line.strip().split() for line in linesList]
file.close()
tm = [x[0] for x in linesList[17:65552]]
acc = [x[1] for x in linesList[17:65552]]
LN =len(acc)
print "computing", filename
PGA = computepga(acc,LN,damp,Freq,nFreq)
plt.figure(1)
plt.loglog(T,PGA,label = '%d' %(idx+1))
plt.grid()
plt.title("PGA")
plt.xlabel("T")
plt.ylabel("PGA")
plt.legend()
print 'plot figure now'
endtime = datetime.datetime.now()
print (endtime - starttime).seconds,'seconds'
plt.show()
print('happy end') |
Author aice
LastMod 2015-11-08