[cig-commits] r19445 - seismo/2D/SPECFEM2D/trunk/UTILS/attenuation

dkomati1 at geodynamics.org dkomati1 at geodynamics.org
Tue Jan 24 10:25:53 PST 2012


Author: dkomati1
Date: 2012-01-24 10:25:52 -0800 (Tue, 24 Jan 2012)
New Revision: 19445

Added:
   seismo/2D/SPECFEM2D/trunk/UTILS/attenuation/BEWARE_THAT_THERE_IS_A_THEORETICAL_PROBLEM_of_non_causal_attenuation_in_Carcione_1993_see_Carcione_2007_for_the_right_equations
   seismo/2D/SPECFEM2D/trunk/UTILS/attenuation/analytical_solution_for_attenuation_in_a_fluid.py
Log:
added Paul Cristini's Python script that implements the analytical solution for attenuation in a fluid


Added: seismo/2D/SPECFEM2D/trunk/UTILS/attenuation/BEWARE_THAT_THERE_IS_A_THEORETICAL_PROBLEM_of_non_causal_attenuation_in_Carcione_1993_see_Carcione_2007_for_the_right_equations
===================================================================

Added: seismo/2D/SPECFEM2D/trunk/UTILS/attenuation/analytical_solution_for_attenuation_in_a_fluid.py
===================================================================
--- seismo/2D/SPECFEM2D/trunk/UTILS/attenuation/analytical_solution_for_attenuation_in_a_fluid.py	                        (rev 0)
+++ seismo/2D/SPECFEM2D/trunk/UTILS/attenuation/analytical_solution_for_attenuation_in_a_fluid.py	2012-01-24 18:25:52 UTC (rev 19445)
@@ -0,0 +1,58 @@
+#!/usr/bin/env python
+
+# written by Paul Cristini for CNRS, LMA, Marseille, France in January 2012
+
+from pylab import *
+from numpy import *
+import numpy.fft as f
+
+#
+def RickerF(t,t0,f0):
+    a=pi*pi*f0*f0
+    x=-2.*a*(1.-2.*a*(t-t0)*(t-t0))*exp(-a*(t-t0)*(t-t0))
+    return x
+
+if __name__=='__main__':
+    f0 = 20.
+    t0 = 2.8/f0
+    t0 = 1.
+    # Size of the fourier transform
+    N = 32*32*8
+    T = 4.  # Length of the time signal
+    t=linspace(0.,T,N)
+    dt=t[1]-t[0]
+    Rick=RickerF(t,t0,f0)
+ #
+    Sf=f.fft(Rick)
+    
+    freq = f.fftfreq(N,d=dt)
+    fig=figure()
+    ax=plot(freq[0:N/2],Sf[0:N/2],freq[0:N/2],abs(Sf[0:N/2]))
+    #
+    c0=1500
+    k0=2*pi*f0/c0
+    a0=0.000002
+    print 'Q =',1/(c0*a0)
+    # Position of the receiver
+    PosX=3000.
+    # Modification of the spectrum to include linear attenuation
+    attf=k0*freq/f0-4*a0*freq*log((freq+0.0000001)/f0)
+    Sf_att=Sf*exp(-1j*attf*PosX)*exp(-a0*2*pi*freq*PosX)
+    # Spectrum of the non attenuated signal
+    Sf_0=Sf*exp(-1j*2*pi*freq/c0*PosX)
+    #
+    Sf_att_nan=nan_to_num(Sf_att)
+    #
+    plot(freq[0:N/2],Sf_att_nan[0:N/2],freq[0:N/2],abs(Sf_att_nan[0:N/2]))
+    xlim(xmax=100)
+    title('Spectra with and without attenuation')
+    #
+    Sig_attn=f.ifft(Sf_att_nan)
+    #
+    figure(11)
+    plot(t,Sig_attn)
+    plot(t,f.ifft(Sf_0))
+    grid()
+    title('Snapshots with and without attenuation')
+    show()
+    



More information about the CIG-COMMITS mailing list