计算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