Dan has been working on the parametric plasma source an has a branch that allows source point extraction
It is possible to make a source and extract the points for plotting in the following manner
import os
import uuid
import h5py
import matplotlib.pyplot as plt
import math
from parametric_plasma_source import Plasma
import numpy as np
import pathlib
def make_plasma_plot(elongation,
minor_radius,
major_radius,
triangularity,
ion_density_pedistal,
ion_density_seperatrix,
ion_density_origin,
ion_temperature_pedistal,
ion_temperature_seperatrix,
ion_temperature_origin,
pedistal_radius,
ion_density_peaking_factor,
ion_temperature_peaking_factor,
shafranov_shift,
output_name='plot.png'):
unique_id = str(uuid.uuid4())
print('elongation', elongation)
my_plasma = Plasma(elongation=elongation,
minor_radius=minor_radius,
major_radius=major_radius,
triangularity = triangularity)
my_plasma.export_plasma_source(unique_id+'.so')
print(unique_id)
nps = 4000
os.system('./source_generator -l '+unique_id+'.so -o '+unique_id+'.h5 -n '+str(nps))
f = h5py.File(unique_id+'.h5initial_source.h5', 'r')
print('h5 keys', list(f.keys()))
dset = f['source_bank']
print('number of particles', dset.shape)
x_values = []
y_values = []
z_values = []
r_values = []
e_values = []
for entry in dset:
y_values.append(entry[0][0])
x_values.append(entry[0][1])
z_values.append(entry[0][2])
r_values.append(math.sqrt(math.pow(entry[0][0],2)+math.pow(entry[0][1],2)))
e_values.append(entry[2])
p = pathlib.Path(output_name)
p.parent.mkdir(parents=True, exist_ok=True)
fig=plt.figure()
ax=fig.add_axes([0,0,1,1])
ax.scatter(r_values,z_values, c=e_values, s=1)
# ax.scatter(grades_range, boys_grades, color='b')
ax.set_xlabel('Horizontal radius (cm)')
ax.set_xlim(0, 600)
ax.set_ylabel('Vertical radius (cm)')
ax.set_ylim(-600, 600)
ax.set_title('scatter plot')
plt.savefig(output_name)
os.system('rm '+unique_id+'.so')
os.system('rm '+unique_id+'.h5initial_source.h5')
number_of_frames = 30
for i, major_radius in enumerate(np.linspace(1., 1.5, number_of_frames)):
make_plasma_plot(elongation=2.9,
minor_radius=1.118,
major_radius=major_radius,
triangularity = 0.55,
ion_density_pedistal = 1.09e+20,
ion_density_seperatrix = 3e+19,
ion_density_origin = 1.09e+20,
ion_temperature_pedistal = 6.09,
ion_temperature_seperatrix = 0.1,
ion_temperature_origin = 45.9,
pedistal_radius = 0.8,
ion_density_peaking_factor = 1,
ion_temperature_peaking_factor = 8.06,
shafranov_shift = 0.0,
output_name='major_radius/'+str(i).zfill(4)+'.png')
os.system("convert -delay 40 minor_radius/*.png minor_radius.gif")