Revision 0ab53102c02cd5c97fc58c71489748c2546cd368 (click the page title to view the current version)

TrainingCourses/Universities/CTU.cz/PRPL/2014-2015/OndFick/Golem_exp_acc.py

# -*- coding: utf-8 -*-
"""
Created on Mon Apr 20 12:18:20 2015

@author: Ondřej

Requirements: HXR,loopvol,plasma current and electron density for selected shot,
all data may be downloaded from http://golem.fjfi.cvut.cz/shots/[number of shot]/
"""

from math import *
import numpy as np
import matplotlib.pyplot as plt
#mport pylab as pyl
from scipy.integrate import quad
from scipy import interpolate
#rom matplotlib.colors import LogNorm

#constants
c=3e8; k=1.38e-23; eV=11400; e=1.6e-19; eps=8.8e-12; me=9.109e-31; Zeff=3.0
Te=30
sh=18970 #setting shot number
BD=12000 #setting beggining of data to be used for the calculation of acc. (BD)
#end=30000 #setting end of data to be used for the calculation of acc.
Ul=loadtxt('loop_voltage_{}.txt'.format(sh))
Ip=loadtxt('plasma_current_{}.txt'.format(sh))
hxr=loadtxt('hxr_{}.txt'.format(sh))


def Borispusher(V,X,E,B,Q,m,dt):
    gamma=1/np.sqrt(1-np.multiply(V,V)/c**2)
    El=Q*dt/(m*2)*E;Bl=Q*dt/(m*2*gamma)*B
    u=gamma*V
    u=u+El
    uu=u+2*np.cross((u+np.cross(u,Bl)),Bl)/(1+Bl*Bl)
    unew=uu+El
    Vnew=unew/np.sqrt(1+unew**2/c**2)
    Xnew=X+Vnew*dt
    #xnew2=X+unew*dt
    return Vnew, Xnew
    
#Ul=np.loadtxt('loop_voltage_14580.txt')
#plt.plot(Ul[:,0],Ul[:,1])

#setting time steps and fields - for general purpose, field from Uloop further
dt=1e-6
T=28e-3
N=T/dt
E=np.zeros(3); B=np.zeros(3); T=np.zeros(N); X=np.zeros((3,N)); V=np.zeros((3,N)); R=np.zeros(N); phi=np.zeros(N)
E[0]=0;E[1]=0;E[2]=0
B[0]=0.0;B[1]=0.0;B[2]=0.0
V[0]=0;V[1]=0;V[2]=0
X[0]=0;X[1]=0;X[2]=0
#Ba=10;Ea=0.0
Q=-1.6e-19
m=9.109e-31
c=3e8  

# run Boris-Bunemann particle integrator for electric field due to Uloop 
for i in range(0,int(N)-1):
    E[0]=Ul[i+BD,1]/(2*np.pi*0.4)
    print E[0]
    V[:,i+1],X[:,i+1]=Borispusher(V[:,i],X[:,i],E,B,Q,m,dt)
    T[i]=i*dt
    

#fast averaging routine
def movingaverage(interval, window_size):
    window= np.ones(int(window_size))/float(window_size)
    return np.convolve(interval, window, 'same')
t=Ul[:,0]*1000 #setting millisecond time axis

#interpolating density to general 1 MHz time axis
hxr[:,1]=movingaverage(hxr[:,1],20)
Ul[:,1]=movingaverage(Ul[:,1],20)

#Plotting of important parameters and energy of accelerated particle

fig, ax =plt.subplots(nrows=3,sharex=True)
ax[0].set_xlim(10,35)
ax[0].plot(t[:],100*Ul[:,1], color='0.3', lw=2, label=r'$100*U_{loop}$')
ax[0].plot(t,Ip[:,1], color=(254/255.0,80/255.0,0.0), lw=2, label=r'$I_{p}$')
ax[0].set_ylim(0,1400)
ax[0].legend()
ax[0].set_ylabel(r'$I_{p} \, \mathrm{[A]}$, $U_{loop}\, \mathrm{[0.01*V]}$')

ax[1].plot(hxr[:-1,0]*1000,hxr[:-1,1],'r',label='HXR')
ax[1].legend()
ax[1].set_ylabel("Intensity [a.u.]")
ax[1].set_xlabel(r"$t\,\mathrm{[ms]}$")
print shape(t[BD:]), shape(V[1,:])
ax[2].plot(t[BD:],0.001*c**2*m*(1/np.sqrt(1-(V[0,:]**2+V[1,:]**2+V[2,:]**2)/c**2)-1)/-Q,'g',label='Vacuum acc.')
ax[2].legend()
ax[2].set_ylabel(r"$E$ [keV]")
ax[2].set_xlabel(r"$t\,\mathrm{[ms]}$")

#displaying and saving the figure
plt.show()
plt.savefig("Re_discharge_acc{}.png".format(sh))
#print I