Пример #1
0
 def bench_random(self):
     print()
     print(' Shifting periodic functions')
     print('==============================')
     print(' size  | optimized |    naive')
     print('------------------------------')
     for size,repeat in [(100,1500),(1000,300),
                         (256,1500),
                         (512,1000),
                         (1024,500),
                         (2048,200),
                         (2048*2,100),
                         (2048*4,50),
                         ]:
         print('%6s' % size, end=' ')
         sys.stdout.flush()
         x = arange(size)*2*pi/size
         a = 1
         if size < 2000:
             f = sin(x)*cos(4*x)+exp(sin(3*x))
             sf = sin(x+a)*cos(4*(x+a))+exp(sin(3*(x+a)))
         else:
             f = sin(x)*cos(4*x)
             sf = sin(x+a)*cos(4*(x+a))
         assert_array_almost_equal(direct_shift(f,1),sf)
         assert_array_almost_equal(shift(f,1),sf)
         print('| %9.2f' % measure('shift(f,a)',repeat), end=' ')
         sys.stdout.flush()
         print('| %9.2f' % measure('direct_shift(f,a)',repeat), end=' ')
         sys.stdout.flush()
         print(' (secs for %s calls)' % (repeat))
Пример #2
0
def relacion_dispersion(npuntos_malla, npasos_temporales, nparticulas,
                        E_acumulador, dt, longitud_malla):

    # Se calcula la frecuencia angular y espacial minima y maxima (Ver codigo KEMPO1):
    omega_min = 2 * sp.pi / (dt) / 2 / (npasos_temporales / 2)
    omega_max = omega_min * (npasos_temporales / 2)
    k_min = 2 * sp.pi / (npuntos_malla)
    k_max = k_min * ((npuntos_malla / 2) - 1)
    # Se crean los vectores de frecuencias espacial y angular simuladas:
    nxtp2 = nextpow2(npuntos_malla)
    k_simulada = sp.linspace(-k_max, k_max, nxtp2) * 10
    omega_simulada = sp.linspace(-omega_max, omega_max, nxtp2) / 10
    #El diez es normalizando con respecto a vt
    # Se genera una matriz de frecuencias angular y espacial:
    K, W = sp.meshgrid(k_simulada, omega_simulada)
    # Se muestrea la matriz espacio-temporal:
    E_acumulador_muestreado = E_acumulador[0:npuntos_malla:1,
                                           0:npasos_temporales:5]
    # Se efectua la FFT sobre la matriz espacio temporal muestreada, luego el
    # valor absoluto de dicha matriz y el corrimiento al cero de las frecuencias:
    E_wk = fft2(
        E_acumulador_muestreado,
        (nextpow2(npuntos_malla), nextpow2(npuntos_malla))) / longitud_malla
    E_wk_absoluto = abs(E_wk)
    E_wk_shift = shift(E_wk_absoluto)
    #    plt.xticks(np.linspace(0,0.7,6), fontsize = 18)
    #    plt.yticks(np.linspace(0,1,5), fontsize = 18)
    # Se grafica la relacion de dispersion simulada:
    plt.contourf(-K, W, E_wk_shift, 8, alpha=.75, cmap='rainbow')
    #    plt.xlim(0,0.7)
    #    plt.ylim(0.0,1.1)
    clb = plt.colorbar()
    clb.ax.set_title('|E|')
    plt.savefig('Graficas/Relaciondispersion.png')
Пример #3
0
 def bench_random(self):
     print
     print ' Shifting periodic functions'
     print '=============================='
     print ' size  | optimized |    naive'
     print '------------------------------'
     for size,repeat in [(100,1500),(1000,300),
                         (256,1500),
                         (512,1000),
                         (1024,500),
                         (2048,200),
                         (2048*2,100),
                         (2048*4,50),
                         ]:
         print '%6s' % size,
         sys.stdout.flush()
         x = arange (size)*2*pi/size
         a = 1
         if size<2000:
             f = sin(x)*cos(4*x)+exp(sin(3*x))
             sf = sin(x+a)*cos(4*(x+a))+exp(sin(3*(x+a)))
         else:
             f = sin(x)*cos(4*x)
             sf = sin(x+a)*cos(4*(x+a))
         assert_array_almost_equal(direct_shift(f,1),sf)
         assert_array_almost_equal(shift(f,1),sf)
         print '| %9.2f' % measure('shift(f,a)',repeat),
         sys.stdout.flush()
         print '| %9.2f' % measure('direct_shift(f,a)',repeat),
         sys.stdout.flush()
         print ' (secs for %s calls)' % (repeat)
Пример #4
0
 def test_definition(self):
     for n in [18,17,64,127,32,2048,256]:
         x = arange(n)*2*pi/n
         for a in [0.1,3]:
             assert_array_almost_equal(shift(sin(x),a),direct_shift(sin(x),a))
             assert_array_almost_equal(shift(sin(x),a),sin(x+a))
             assert_array_almost_equal(shift(cos(x),a),cos(x+a))
             assert_array_almost_equal(shift(cos(2*x)+sin(x),a),
                                       cos(2*(x+a))+sin(x+a))
             assert_array_almost_equal(shift(exp(sin(x)),a),exp(sin(x+a)))
         assert_array_almost_equal(shift(sin(x),2*pi),sin(x))
         assert_array_almost_equal(shift(sin(x),pi),-sin(x))
         assert_array_almost_equal(shift(sin(x),pi/2),cos(x))
Пример #5
0
 def test_definition(self):
     for n in [18,17,64,127,32,2048,256]:
         x = arange(n)*2*pi/n
         for a in [0.1,3]:
             assert_array_almost_equal(shift(sin(x),a),direct_shift(sin(x),a))
             assert_array_almost_equal(shift(sin(x),a),sin(x+a))
             assert_array_almost_equal(shift(cos(x),a),cos(x+a))
             assert_array_almost_equal(shift(cos(2*x)+sin(x),a),
                                       cos(2*(x+a))+sin(x+a))
             assert_array_almost_equal(shift(exp(sin(x)),a),exp(sin(x+a)))
         assert_array_almost_equal(shift(sin(x),2*pi),sin(x))
         assert_array_almost_equal(shift(sin(x),pi),-sin(x))
         assert_array_almost_equal(shift(sin(x),pi/2),cos(x))
Пример #6
0
 def time_shift(self, size, soltype):
     if soltype == 'fft':
         shift(self.f, self.a)
     else:
         direct_shift(self.f, self.a)
Пример #7
0
 def time_shift(self, size, soltype):
     if soltype == 'fft':
         shift(self.f, self.a)
     else:
         direct_shift(self.f, self.a)
Пример #8
0
def relacion_dispersion(distribucion):
    global npuntos_malla, longitud_malla, dt, npasos_temporales, vh, dx, rhot, Ex
    global E_acumulador

    # Frecuencia del plasma
    omegap = 1
    # Vector de frecuencia del plasma
    omegapp = omegap * sp.ones(nparticulas)

    # Se calcula la frecuencia angular y espacial minima y maxima (Ver codigo KEMPO1):
    omega_min = 2 * sp.pi / (dt) / 2 / (npasos_temporales / 2)
    omega_max = omega_min * (npasos_temporales / 2)
    k_min = 2 * sp.pi / (npuntos_malla)
    k_max = k_min * ((npuntos_malla / 2) - 1)

    # Se crean los vectores de frecuencias espacial y angular teoricas y simuladas:
    k_t = sp.linspace(0, k_max, nparticulas)
    k_simulada = sp.linspace(-k_max, k_max, nextpow2(npuntos_malla))
    omega_t = sp.linspace(0, longitud_malla, npuntos_malla + 1)
    omega_simulada = sp.linspace(-omega_max, omega_max,
                                 nextpow2(npuntos_malla))

    # Se genera una matriz de frecuencias angular y espacial:
    K, W = sp.meshgrid(k_simulada, omega_simulada)

    # Se muestrea la matriz espacio-temporal:
    E_acumulador_muestreado = E_acumulador[0:npuntos_malla:1,
                                           0:npasos_temporales:(
                                               5 * npasos_temporales /
                                               npasos_temporales)]

    # Se efectua la FFT sobre la matriz espacio temporal muestreada, luego el
    # valor absoluto de dicha matriz y el corrimiento al cero de las frecuencias:
    E_wk = fft2(
        E_acumulador_muestreado,
        (nextpow2(npuntos_malla), nextpow2(npuntos_malla))) / longitud_malla
    E_wk_absoluto = abs(E_wk)
    E_wk_shift = shift(E_wk_absoluto)

    if (distribucion == 0):

        # Relacion de dispersion teorica para el plasma frio
        plt.figure('Relacion dispersion (Plasma frio)')
        plt.cla()
        plt.plot(k_t, omegapp, 'k', label='$\omega_{p}$')
        plt.xlabel('k', fontsize=18)
        plt.ylabel('$\omega$', fontsize=18)
        plt.xticks(np.linspace(0, 2, 8), fontsize=18)
        plt.yticks(np.linspace(0, 1, 5), fontsize=18)

        # Relacion de dispersion "simulada" para el plasma frio
        plt.contourf(K, W, E_wk_shift, 8, alpha=.75, cmap='jet')
        plt.xlim(0, 1.2)
        plt.ylim(0.25, 1.1)
        if os.path.exists("RelacionesDeDispersion") and\
        os.path.isfile("RelacionesDeDispersion/relaciondispersionplasmafrio.png")==\
        True:
            os.remove(
                "RelacionesDeDispersion/relaciondispersionplasmafrio.png")
            plt.savefig('relaciondispersionplasmafrio.png', dpi=360)
            shutil.move('relaciondispersionplasmafrio.png',
                        "RelacionesDeDispersion")

        elif os.path.exists("RelacionesDeDispersion") and\
        os.path.isfile("RelacionesDeDispersion/relaciondispersiontwostream.png")==\
        True:
            plt.savefig('relaciondispersionplasmafrio.png', dpi=360)
            shutil.move('relaciondispersionplasmafrio.png',
                        "RelacionesDeDispersion")

        else:
            os.mkdir("RelacionesDeDispersion")
            plt.savefig('relaciondispersionplasmafrio.png', dpi=360)
            shutil.move('relaciondispersionplasmafrio.png',
                        "RelacionesDeDispersion")

    if (distribucion == 1):

        # Relacion de dispersion teorica inestabilidad Two-Stream:
        omega_t = -1j * (sp.sqrt((vh * k_t)**2 + omegap**2 -
                                 omegap * sp.sqrt(4 *
                                                  (k_t * vh)**2 + omegap**2)))
        # Se grafica la relacion de dispersion teorica y la simulada:
        plt.figure('Relacion dispersion (Two-Stream)')
        plt.cla()
        plt.plot(k_t, omega_t, 'k', label='Relacion de dispersion teorica')
        plt.plot(k_t, omegapp, 'k', label='$\omega_{p}$')
        plt.xlabel('k', fontsize=18)
        plt.ylabel('$\omega$', fontsize=18)
        plt.xticks(np.linspace(0, 0.7, 6), fontsize=18)
        plt.yticks(np.linspace(0, 1, 5), fontsize=18)

        # Se grafica la relacion de dispersion simulada:
        plt.contourf(K, W, E_wk_shift, 8, alpha=.75, cmap='jet')
        plt.xlim(0, 0.7)
        plt.ylim(0.0, 1.1)

        if os.path.exists("RelacionesDeDispersion") and\
        os.path.isfile("RelacionesDeDispersion/relaciondispersiontwostream.png")==\
         True:
            os.remove("RelacionesDeDispersion/relaciondispersiontwostream.png")
            plt.savefig('relaciondispersiontwostream.png', dpi=360)
            shutil.move('relaciondispersiontwostream.png',
                        "RelacionesDeDispersion")

        elif os.path.exists("RelacionesDeDispersion") and\
        os.path.isfile("RelacionesDeDispersion/relaciondispersionplasmafrio.png")==\
        True:
            plt.savefig('relaciondispersiontwostream.png', dpi=360)
            shutil.move('relaciondispersiontwostream.png',
                        "RelacionesDeDispersion")

        else:
            os.mkdir("RelacionesDeDispersion")
            plt.savefig('relaciondispersiontwostream.png', dpi=360)
            shutil.move('relaciondispersiontwostream.png',
                        "RelacionesDeDispersion")

    return True