July 19, 2009

Example 1: Soliton propagation in SMF-28 using the GPU

from numpy import *
from scipy import *
import matplotlib.pyplot as plt
from numpy.fft import fftshift
import PyOFTK
import time
 
from pycuda.tools import make_default_context
import pycuda.driver as cuda
 
cuda.init()
context = make_default_context()
 
lambdaZero = 1.55e-6
T = 5.0
nt = pow(2,11)
dt = T/float(nt)
t = linspace(-T/2, T/2, nt)
C = 2.99792458e-4
nz = 2048
dz = 0.01
betap = array([0,0,-0.02104, 0.13/1000, (-2.4E-3)/1000])
gamma = 0.065
 
# Gain profil
omega = PyOFTK.wspace(T,nt)
vs = fftshift(omega/(2*pi))
wavelength = (1/((vs/C)+1/(lambdaZero)))*1e9
alpha = array([0.0])
gainBandwidth = 30.0
alphaVec = PyOFTK.gainProfil(wavelength, alpha[0], gainBandwidth)
 
dureePulse = 1.0
puissanceCrete = 10.0
u_ini = PyOFTK.gaussianPulse(t,dureePulse,0,puissanceCrete,1,0)
 
[u_out, i_arch] = PyOFTK.ssfgpuFull(u_ini, dt, dz, nz, alpha, betap, gamma,
    context, 500, 1e-5)
 
context.pop()
 
plt.imshow(i_arch, aspect='normal')
plt.show()