Exemple #1
0
def run_analysis(filename,mode,method):
    click.echo('Reading file : %s'%filename)
    data = IOfile.parsing_input_file(filename)
    click.echo('Creating class...')
    theclass = TFC(data)
    click.echo('Calculating transfer function using %s method'%method)
    if method=='tf_kramer286_sh':
        theclass.tf_kramer286_sh()
    elif method=='tf_knopoff_sh':
        theclass.tf_knopoff_sh()
    elif method=='tf_knopoff_sh_adv':
        theclass.tf_knopoff_sh_adv()
        
    plt.plot(theclass.freq,np.abs(theclass.tf[0]),label=method)
    plt.xlabel('frequency (Hz)')
    plt.ylabel('Amplification')
    plt.yscale('log')
    plt.xscale('log')
    plt.grid(True,which='both')
    plt.legend(loc='best',fancybox=True,framealpha=0.5)
    #plt.axis('tight')
    plt.autoscale(True,axis='x',tight=True)
    plt.tight_layout()
    plt.savefig('test.png', format='png')
    click.echo(click.style('Calculation has been finished!',fg='green'))
Exemple #2
0
def sensitivityTools(fname,sensitivity='incidence angle',senslinspace=[0.,90.,91],method='tf_kramer286_sh',yscale='lin'):
    import IOfile
    import numpy as np
    import pylab as plt
    from TFCalculator import TFCalculator as TFC
    from TFDisplayTools import SpectroPlot
    
    # timing module
    import time
    
    data = IOfile.parsing_input_file(fname)
    data['sensitivity'] = True
    elapsed = []
    x = np.array([])
    y = np.array([])
    z = np.array([])
    if yscale == 'log':
        ianglist = np.logspace(np.log10(senslinspace[0]),np.log10(senslinspace[1]),senslinspace[2])
    else:
        ianglist = np.linspace(senslinspace[0],senslinspace[1],senslinspace[2])
    
    if sensitivity=='incidence angle':
        for i in range(len(ianglist)):
            data['iang'] = np.deg2rad(ianglist[i])
            theclass = TFC(data)
            start = time.clock()
            tf = eval('theclass.'+method+'()')
            elapsed.append(time.clock()-start)
            x = np.concatenate((x,theclass.freq+theclass.freq[1]))
            z = np.concatenate((z,np.abs(tf[0])))
            y = np.concatenate((y,np.zeros_like(theclass.freq)+ianglist[i]))
            ylabel = 'Incidence angle'
            #print np.min(theclass.freq),np.min(np.abs(tf[0]))
        data['iang']=ianglist
            
    elif sensitivity=='incidence angle phase':
        for i in range(len(ianglist)):
            data['iang'] = np.deg2rad(ianglist[i])
            theclass = TFC(data)
            start = time.clock()
            tf = eval('theclass.'+method+'()')
            elapsed.append(time.clock()-start)
            x = np.concatenate((x,theclass.freq+theclass.freq[1]))
            z = np.concatenate((z,np.rad2deg(np.angle(tf[0]))))
            y = np.concatenate((y,np.zeros_like(theclass.freq)+ianglist[i]))
            ylabel = 'Incidence angle'
        data['iang']=ianglist
        
    elif sensitivity=='incidence angle vectorial':
        for i in range(len(ianglist)):
            data['iang'] = np.deg2rad(ianglist[i])
            theclass = TFC(data)
            start = time.clock()
            tf = eval('theclass.'+method+'()')
            elapsed.append(time.clock()-start)
            x = np.concatenate((x,theclass.freq+theclass.freq[1]))
            z = np.concatenate((z,np.sqrt(np.abs(tf[0])**2+np.abs(tf[1])**2)))
            y = np.concatenate((y,np.zeros_like(theclass.freq)+ianglist[i]))
            ylabel = 'Incidence angle'
        data['iang']=ianglist
            
    elif sensitivity=='thickness':   
        for i in range(len(ianglist)):
            data['hl'] = [ianglist[i],0.]
            theclass = TFC(data)
            start = time.clock()
            tf = eval('theclass.'+method+'()')
            elapsed.append(time.clock()-start)
            x = np.concatenate((x,theclass.freq+theclass.freq[1]))
            z = np.concatenate((z,np.abs(tf[0])))
            y = np.concatenate((y,np.zeros_like(theclass.freq)+ianglist[i]))
            ylabel = 'Thickness (m)'
        data['hl'][0]=ianglist.tolist()
            
    elif sensitivity[:2]=='vp':   
        tmp = sensitivity.split()
        for i in range(len(ianglist)):
            data['vp'][int(tmp[1])-1] = ianglist[i]
            data['comp']='p'
            theclass = TFC(data)
            start = time.clock()
            tf = eval('theclass.'+method+'()')
            elapsed.append(time.clock()-start)
            x = np.concatenate((x,theclass.freq+theclass.freq[1]))
            z = np.concatenate((z,np.abs(tf[1])))
            y = np.concatenate((y,np.zeros_like(theclass.freq)+ianglist[i]))
            ylabel = 'Vp (m/s)'
        data['vp'][int(tmp[1])-1]=ianglist.tolist()
            
    elif sensitivity[:2]=='vs':   
        tmp = sensitivity.split()
        for i in range(len(ianglist)):
            data['vs'][int(tmp[1])-1] = ianglist[i]
            theclass = TFC(data)
            start = time.clock()
            tf = eval('theclass.'+method+'()')
            elapsed.append(time.clock()-start)
            x = np.concatenate((x,theclass.freq+theclass.freq[1]))
            z = np.concatenate((z,np.abs(tf[0])))
            y = np.concatenate((y,np.zeros_like(theclass.freq)+ianglist[i]))
            ylabel = 'Vs (m/s)'
        data['vs'][int(tmp[1])-1]=ianglist.tolist()
        
    elif sensitivity[:2]=='qp':   
        tmp = sensitivity.split()
        for i in range(len(ianglist)):
            data['qp'][int(tmp[1])-1] = ianglist[i]
            data['comp']='p'
            theclass = TFC(data)
            start = time.clock()
            tf = eval('theclass.'+method+'()')
            elapsed.append(time.clock()-start)
            x = np.concatenate((x,theclass.freq+theclass.freq[1]))
            z = np.concatenate((z,np.abs(tf[1])))
            y = np.concatenate((y,np.zeros_like(theclass.freq)+ianglist[i]))
            ylabel = '$Q_{P}$'
        data['qp'][int(tmp[1])-1]=ianglist.tolist()
        
    elif sensitivity[:2]=='qs':   
        tmp = sensitivity.split()
        for i in range(len(ianglist)):
            data['qs'][int(tmp[1])-1] = ianglist[i]
            theclass = TFC(data)
            start = time.clock()
            tf = eval('theclass.'+method+'()')
            elapsed.append(time.clock()-start)
            x = np.concatenate((x,theclass.freq+theclass.freq[1]))
            z = np.concatenate((z,np.abs(tf[0])))
            y = np.concatenate((y,np.zeros_like(theclass.freq)+ianglist[i]))
            ylabel = '$Q_{S}$'
        data['qs'][int(tmp[1])-1]=ianglist.tolist()
        
    elif sensitivity[:2]=='dn':   
        tmp = sensitivity.split()
        for i in range(len(ianglist)):
            data['dn'][int(tmp[1])-1] = ianglist[i]
            theclass = TFC(data)
            start = time.clock()
            tf = eval('theclass.'+method+'()')
            elapsed.append(time.clock()-start)
            x = np.concatenate((x,theclass.freq+theclass.freq[1]))
            z = np.concatenate((z,np.abs(tf[0])))
            y = np.concatenate((y,np.zeros_like(theclass.freq)+ianglist[i]))
            ylabel = '$\\rho (kg/m^3)$'
        data['dn'][int(tmp[1])-1]=ianglist.tolist()
            
            
    data['x'] = x
    data['y'] = y
    data['z'] = z

    print('method : %s; average elapsed time : %.6f with standard deviation : %.6f'%(method,np.mean(elapsed),np.std(elapsed)))
    if yscale=='log':
        SpectroPlot(data,nx=100,ny=100,ylabel=ylabel,cmap='rainbow',yscale='log')
    else:
        SpectroPlot(data,nx=100,ny=100,ylabel=ylabel,cmap='rainbow')
Exemple #3
0
import IOfile
from TFCalculator import TFCalculator as TFC
import TFDisplayTools
from TSCalculator import TSCalculator as TSC

# single layer test case

# filename
basedir = 'Example/Input'
fname = os.path.join(basedir,'sampleinput_linear_elastic_1layer_halfspace.dat')
fname2 =  os.path.join(basedir,'sampleinput_psv_s_linear_elastic_1layer_halfspace.dat')
fname3 =  os.path.join(basedir,'sampleinput_psv_p_linear_elastic_1layer_halfspace.dat')
fname4 =  os.path.join(basedir,'GoverGmax.dat')

# input file reading
datash = IOfile.parsing_input_file(fname)
datapsvs = IOfile.parsing_input_file(fname2)
# datapsvp = IOfile.parsing_input_file(fname3)
datanonlin = IOfile.parsing_nonlinear_parameter(fname4,True)

def modnlayer(data,nlayer):
    nl = nlayer
    data['sourceloc']=nl
    data['nlayer']=nl+1
    data['tfPair'][0][1]=nl
    newhl = []; newvs = []; newdn = []; newqs = []; newvp = []; newqp = []
    newsoiltype = []
    for j in range(nl):
        newhl.append(data['hl'][0]/nl)
        newvs.append(data['vs'][0])
        newqs.append(data['qs'][0])
Exemple #4
0
    def __init__(self,parfile,method='auto',sublayercriteria = 5.,numiter = 10,conv_level = 0.01,verbose=False):
        # parameter file initialization
        self.parfile = parfile
        # read file parameter
        self.parameters = IOfile.parsing_input_file(parfile)
        # method is automatically defined
#        if method=='auto':
#            if self.parameters['type']=='PSV':
#                self.method = 'knopoff_psv_adv'
#            else:
#                if self.parameters['nlayer']<=5:
#                    if self.parameters['iang']==0.:
#                        self.method='knopoff_sh'
#                    else:
#                        self.method='knopoff_sh_adv'
#                else:
#                    self.method = 'kennet_sh'
        # checking input file
        if self.parameters['inputmotion'][1]=='ascii':
            self.inp_time,self.inp_signal = IOfile.read_ascii_seismogram(self.parameters['inputmotion'][0])
        else:
            raise KeyError('Input motion other than ascii format is not yet supported! Please convert it to displacement on another software first!')
        self.inp_signal = [i/100. for i in self.inp_signal]
        self.fs = 1/(self.inp_time[1]-self.inp_time[0])
        self.dt = self.inp_time[1]-self.inp_time[0]
        self.df = 1./((len(self.inp_signal)-1)*self.dt)
        
        # baseline correction for input signal
        self.inp_signal = self.inp_signal-np.mean(self.inp_signal)        
        
#        if self.parameters['inputmotion'][2]=='vel':
#            self.inp_signal = GT.vel2disp(self.inp_signal,self.dt)
#            self.inp_signal = self.cosine_tapering(self.inp_signal)
#            self.inp_signal = self.butter_highpass_filter(self.inp_signal,2.*self.df,self.fs)
#        elif self.parameters['inputmotion'][2]=='acc':
#            self.inp_signal = GT.acc2disp(self.inp_signal,self.dt)
#            self.inp_signal = self.cosine_tapering(self.inp_signal)
#            self.inp_signal = self.butter_highpass_filter(self.inp_signal,2.*self.df,self.fs)
            
        if self.parameters['modeID']==11 or self.parameters['modeID']==12:
            # method is automatically defined
            if method=='auto':
                if self.parameters['type']=='PSV':
                    self.method = 'knopoff_psv_adv'
                else:
                    if self.parameters['iang']==0.:
                        self.method = 'kramer286_sh'
                    else:
                        self.method = 'knopoff_sh_adv'
            else:
                self.method = method
            self.linear_equivalent_TF2TS(sublayercriteria,numiter,conv_level,verbose)
        else:
            # method is automatically defined
            if method=='auto':
                if self.parameters['type']=='PSV':
                    self.method = 'knopoff_psv_adv'
                else:
                    if self.parameters['iang']==0.:
                        self.method = 'knopoff_sh'
                    else:
                        self.method = 'knopoff_sh_adv'
            else:
                self.method = method
            self.linear_TF2TS()
            self.lastiter = 1
        
        if self.parameters['inputmotion'][2]=='acc':
            for i in range(len(self.time_series)):
                self.time_series[i] = GT.disp2acc(self.time_series[i],self.dt)
        elif self.parameters['inputmotion'][2]=='vel':
            for i in range(len(self.time_series)):
                self.time_series[i] = GT.disp2vel(self.time_series[i],self.dt)