#!/usr/bin/env python
# -*- coding: utf-8 -*-
#script for the creation of the plasma position animation. Intensity of the poloidal magnetics field around plasma is plotted.
#Autor: Tomas Odstrcil
from numpy import *
from matplotlib.pyplot import *
import time
from numpy.linalg import norm
from scipy.signal import fftconvolve
from MagFieldCalc import *
import matplotlib.animation as manimation
matplotlib.rcParams['xtick.direction'] = 'out'
matplotlib.rcParams['ytick.direction'] = 'out'
global mu_0,a,R_0
a = 0.085 #[m]
R_0 = 0.4 #[m]
mu_0 = 4*pi*1e-7
def PlotProfile(tvec,I_p,pos_p,name, I_coils = (), pos_coils = ()):
# time vector, plasma current, plasma position, list of the coils currents, list of their positions
n = 100
r = linspace(-a*2+R_0,a*2+R_0,n)
z = linspace(-a*2,2*a,n)
R, Z = np.meshgrid(r,z)
phi = linspace(0,2*pi, 100)
c = cos(phi)
s = sin(phi)
FFMpegWriter = manimation.writers['ffmpeg']
metadata = dict(title='Movie Test', artist='Matplotlib',
comment='Movie support!')
writer = FFMpegWriter(fps=10, metadata=metadata,codec='mpeg4',bitrate=2000 )
fig = figure(figsize=(5,5))
ax = fig.add_subplot(111)
#external coils
B_coil = ()
for coordin_coil in pos_coils:
B_coil.append(Bloop_analytic(R,Z,coordin_coil[0],coordin_coil[1]))
plot(a*c+R_0, a*s, 'r--')
plasma_edge_plot, = plot([], [], 'g--')
mag_img = imshow(zeros((n/2,n/2)), extent=[-a+R_0,a+R_0,-a,a])
CS = contour(R,R,R,colors='k')
cl = clabel(CS, inline=1, fontsize=10)
#B = Bloop_analytic(R,Z,R_0,0)
#norm = sqrt(B[...,1]**2+B[...,0]**2)
with writer.saving(fig, "video/animation.wmv", 100):
for i in xrange(len(tvec)):
t = time.time()
ax.set_title('Pol. Mag. field [mT]; time %1.2f ms'%(1e3*tvec[i]))
#calculate profile of the current loop
B = Bloop_analytic(R,Z,pos_p[i,0],pos_p[i,1])
#external coils
for B_ext, I_ext in zip(B_coil,I_coils) :
B+= B_ext*I_ext
norm = sqrt(B[...,1]**2+B[...,0]**2)
j,ao = CurrentProfile(R,Z,pos_p[i,0],pos_p[i,1],I_p[i], 0.2,centered = True)
#pcolor(j) #kreslení použitého proudového profilu
#show()
#calculate profile of the current loop
#B = Bloop_analytic(R,Z,R_0,0)
#BUG bude to dělat chybu s externími cívkami
normconv = fftconvolve(norm,j,mode='same')*(r[1]-r[0])*(z[1]-z[0]) # neplatí to zcela přesně!! ale je to rychlé
plasma_edge_plot.set_data(c*ao+pos_p[i,0],s*ao+pos_p[i,1])
normconv*=1e3 # convert testa to mili tesla
mag_img.set_data(normconv[-n/4:n/4:-1,n/4:-n/4 ])
ax.autoscale_view(tight=True)
mag_img.autoscale()
#remove CS + clabels
for coll in CS.collections:
ax.collections.remove(coll)
for text in CS.labelTexts:
text.remove()
CS = contour(R[n/4:-n/4,n/4:-n/4],Z[n/4:-n/4,n/4:-n/4],normconv[n/4:-n/4,n/4:-n/4], colors='k') # kvůli okrajovým efektům
cl = CS.clabel( inline=1, fontsize=10)
#quiver(R,Z,B[:,:,0]/norm,B[:,:,1]/norm ) #vykresí to šipečky
ax.relim() #to update the axes limits if desired.
writer.grab_frame()
if i == len(tvec)/2:
fig.savefig('icon.png',bbox_inches='tight',figsize=(4,3),dpi=40)
fig.savefig('large_icon.png',bbox_inches='tight',figsize=(5,5),dpi=40)
#print time.time()-t