{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib osx\n",
"%load_ext autoreload\n",
"%autoreload 2\n",
"import os\n",
"import matplotlib.pyplot as plt\n",
"from mpl_toolkits.axes_grid1.inset_locator import mark_inset\n",
"from mpl_toolkits.axes_grid1 import make_axes_locatable\n",
"import numpy as np\n",
"import pandas as pd\n",
"import sk_plotting_functions as spf \n",
"import sys\n",
"import cmasher as cmr\n",
"sys.path.insert(1,'/Users/dpower/Documents/01 - PhD/01 - Code/08 - SIKE')\n",
"import SIKE\n",
"import SIKE_tools\n",
"import SIKE_plotting\n",
"import post_processing\n",
"import json\n",
"elements = ['Li','Be','C','N','Ne']\n",
"line_colours = {el: \"C{}\".format(i) for i,el in enumerate(elements)}"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"# Hot fraction ionization balance"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Initialising the impurity species to be modelled...\n",
" Initialising states...\n",
" Initialising transitions...\n",
" Loading transitions from json...\n",
" Creating transition objects...\n",
" Creating data for inverse transitions...\n",
" Performing checks on transition data...\n",
" Initialising densities...\n",
" Finalising states...\n",
"Finished initialising impurity species objects.\n",
"Filling kinetic transition matrix for Ne...\n",
" 6.2%\r"
]
},
{
"ename": "KeyboardInterrupt",
"evalue": "",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m/Users/dpower/Documents/01 - PhD/09 - Papers/03 - Impurities (post-processed)/impurities_figures.ipynb Cell 3\u001b[0m line \u001b[0;36m2\n\u001b[1;32m 24\u001b[0m el \u001b[39m=\u001b[39m elements[\u001b[39m0\u001b[39m]\n\u001b[1;32m 26\u001b[0m r \u001b[39m=\u001b[39m SIKE\u001b[39m.\u001b[39mSIKERun(fe\u001b[39m=\u001b[39mfe, vgrid\u001b[39m=\u001b[39mvgrid, opts\u001b[39m=\u001b[39mopts)\n\u001b[0;32m---> 27\u001b[0m r\u001b[39m.\u001b[39;49mrun()\n",
"File \u001b[0;32m~/Documents/01 - PhD/01 - Code/08 - SIKE/SIKE.py:271\u001b[0m, in \u001b[0;36mSIKERun.run\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 267\u001b[0m \u001b[39m\u001b[39m\u001b[39m\"\"\"Run the program to find equilibrium impurity densities on the provided background plasma.\u001b[39;00m\n\u001b[1;32m 268\u001b[0m \u001b[39m\"\"\"\u001b[39;00m\n\u001b[1;32m 270\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mopts[\u001b[39m'\u001b[39m\u001b[39mkinetic_electrons\u001b[39m\u001b[39m'\u001b[39m]:\n\u001b[0;32m--> 271\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mbuild_matrix(kinetic\u001b[39m=\u001b[39;49m\u001b[39mTrue\u001b[39;49;00m)\n\u001b[1;32m 272\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcompute_densities(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mopts[\u001b[39m'\u001b[39m\u001b[39mdelta_t\u001b[39m\u001b[39m'\u001b[39m]\u001b[39m/\u001b[39m\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mt_norm, \u001b[39mint\u001b[39m(\n\u001b[1;32m 273\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mopts[\u001b[39m'\u001b[39m\u001b[39mmax_steps\u001b[39m\u001b[39m'\u001b[39m]), \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mopts[\u001b[39m'\u001b[39m\u001b[39mevolve\u001b[39m\u001b[39m'\u001b[39m], kinetic\u001b[39m=\u001b[39m\u001b[39mTrue\u001b[39;00m)\n\u001b[1;32m 274\u001b[0m \u001b[39m# del self.rate_mats\u001b[39;00m\n",
"File \u001b[0;32m~/Documents/01 - PhD/01 - Code/08 - SIKE/SIKE.py:346\u001b[0m, in \u001b[0;36mSIKERun.build_matrix\u001b[0;34m(self, kinetic)\u001b[0m\n\u001b[1;32m 344\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[1;32m 345\u001b[0m np_mat \u001b[39m=\u001b[39m matrix_utils\u001b[39m.\u001b[39mbuild_np_matrix(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mmin_x, \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mmax_x, \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mimpurities[el]\u001b[39m.\u001b[39mtot_states)\n\u001b[0;32m--> 346\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mrate_mats[el] \u001b[39m=\u001b[39m matrix_utils\u001b[39m.\u001b[39;49mfill_np_rate_matrix(\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mloc_num_x, \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mmin_x, \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mmax_x, np_mat, \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mimpurities[el], \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mfe, \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mne, \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mTe, \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mvgrid, \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mdvc)\n\u001b[1;32m 347\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[1;32m 348\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mrank \u001b[39m==\u001b[39m \u001b[39m0\u001b[39m:\n",
"File \u001b[0;32m~/Documents/01 - PhD/01 - Code/08 - SIKE/matrix_utils.py:379\u001b[0m, in \u001b[0;36mfill_np_rate_matrix\u001b[0;34m(loc_num_x, min_x, max_x, mat, impurity, fe, ne, Te, vgrid, dvc)\u001b[0m\n\u001b[1;32m 376\u001b[0m typ \u001b[39m=\u001b[39m trans\u001b[39m.\u001b[39mtype\n\u001b[1;32m 378\u001b[0m \u001b[39m# # Calculate the value to be added to the matrix\u001b[39;00m\n\u001b[0;32m--> 379\u001b[0m val \u001b[39m=\u001b[39m trans\u001b[39m.\u001b[39;49mget_mat_value(\n\u001b[1;32m 380\u001b[0m fe[:, i\u001b[39m+\u001b[39;49mmin_x], vgrid, dvc)\n\u001b[1;32m 382\u001b[0m \u001b[39m# Add the loss term\u001b[39;00m\n\u001b[1;32m 383\u001b[0m row \u001b[39m=\u001b[39m from_pos\n",
"File \u001b[0;32m~/Documents/01 - PhD/01 - Code/08 - SIKE/transition.py:156\u001b[0m, in \u001b[0;36mIzTrans.get_mat_value\u001b[0;34m(self, fe, vgrid, dvc)\u001b[0m\n\u001b[1;32m 145\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mget_mat_value\u001b[39m(\u001b[39mself\u001b[39m, fe, vgrid, dvc):\n\u001b[1;32m 146\u001b[0m \u001b[39m \u001b[39m\u001b[39m\"\"\"Get the matrix value for this transition. For ionization transitions, this is ne * rate coefficient\u001b[39;00m\n\u001b[1;32m 147\u001b[0m \n\u001b[1;32m 148\u001b[0m \u001b[39m Args:\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 154\u001b[0m \u001b[39m float: electron density multiplied by ionization rate coefficient\u001b[39;00m\n\u001b[1;32m 155\u001b[0m \u001b[39m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 156\u001b[0m K_ion \u001b[39m=\u001b[39m SIKE_tools\u001b[39m.\u001b[39;49mcalc_rate(\n\u001b[1;32m 157\u001b[0m vgrid, dvc, fe, \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49msigma, \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mcollrate_const)\n\u001b[1;32m 158\u001b[0m \u001b[39mreturn\u001b[39;00m K_ion\n",
"\u001b[0;31mKeyboardInterrupt\u001b[0m: "
]
}
],
"source": [
"elements = ['Ne']\n",
"opts = {\"modelled_impurities\": elements,\n",
" \"use_petsc\": False,\n",
" \"evolve\": False,\n",
" \"delta_t\": 1e-4,\n",
" \"dndt_thresh\": 1e-7,\n",
" \"max_steps\": 1000,\n",
" \"resolve_j\": False,\n",
" \"kinetic_electrons\": True,\n",
" \"maxwellian_electrons\": True,\n",
" # 'ksp_solver': 'bcgs',\n",
" # 'ksp_pc': 'eisenstat',\n",
" \"ksp_tol\": 1e-30}\n",
"\n",
"num_x = 64\n",
"T_hot = 100 * np.ones(num_x) # Constant hot tail profile (eV)\n",
"T_bulk = np.geomspace(0.5,25,num_x) # Bulk temperature profile (eV)\n",
"n_tot = 1e19 * np.ones(num_x) # Constant total density profile (m^-3)\n",
"hot_frac = 0.00001 # Hot tail is 0.001% of total density\n",
"\n",
"vgrid = SIKE_tools.default_vgrid\n",
"fe = SIKE_tools.get_bimaxwellians(hot_frac * n_tot, (1 - hot_frac) * n_tot, T_hot, T_bulk, vgrid, normalised=False)\n",
"\n",
"el = elements[0]\n",
"\n",
"r = SIKE.SIKERun(fe=fe, vgrid=vgrid, opts=opts)\n",
"r.run()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Plot Zavg\n",
"Zavg_Max = post_processing.get_Zavg(r.impurities[el].dens_Max, r.impurities[el].states, r.num_x)\n",
"Zavg_kin = post_processing.get_Zavg(r.impurities[el].dens, r.impurities[el].states, r.num_x)\n",
"\n",
"x, xlabel = SIKE_plotting.get_xaxis(r,'Te')\n",
"\n",
"fig,ax = plt.subplots(1,figsize=(4,3.5))\n",
"ax.plot(x,Zavg_kin, '--', color='black',label='Two-temperature')\n",
"ax.plot(x,Zavg_Max, color='black', label='Maxwellian')\n",
"ax.legend()\n",
"ax.set_xlabel(xlabel)\n",
"ax.set_ylabel('Average ionization')\n",
"ax.grid()\n",
"ax.set_xscale('log')\n",
"ax.set_xticks([1,10])\n",
"ax.set_xticklabels(['1','10'])\n",
"fig.tight_layout()\n",
"fig.savefig('../impurities/figures/two_temp_Zavg.pdf')\n",
"\n",
"# Plot Z dens\n",
"Z_dens_Max = post_processing.get_Z_dens(r.impurities[el].dens_Max, r.impurities[el].states)\n",
"Z_dens_kin = post_processing.get_Z_dens(r.impurities[el].dens, r.impurities[el].states)\n",
"# num_Z = r.impurities[el].num_Z\n",
"num_Z = 7\n",
"# cmap = cmr.get_sub_cmap('plasma', 0.0, 0.9,N=num_Z-1)\n",
"# sm = plt.cm.ScalarMappable(cmap=cmap, norm=plt.Normalize(\n",
"# vmin=0, vmax=(num_Z-3)))\n",
"# cmap = plt.get_cmap('tab10',num_Z)\n",
"cmap = cmr.get_sub_cmap('tab10', 0.0, num_Z/10,N=num_Z)\n",
"sm = plt.cm.ScalarMappable(cmap=cmap, norm=plt.Normalize(\n",
" vmin=0, vmax=(num_Z)))\n",
"fig,ax = plt.subplots(1,figsize=(4,3.5))\n",
"\n",
"for Z in range(num_Z):\n",
" l, = ax.plot([],[],color=sm.to_rgba(Z))\n",
" ax.plot(x, Z_dens_Max[:,Z]/r.ne, color=l.get_color())\n",
" ax.plot(x, Z_dens_kin[:,Z]/r.ne, '--', color=l.get_color())\n",
"cmap_labels = []\n",
"for Z in range(num_Z):\n",
" cmap_labels.append(el + '$^{' + str(Z) + '\\!+}$')\n",
"ax.plot([],[],'--',color='black',label='Two-temperature')\n",
"ax.plot([],[],color='black',label='Maxwellian')\n",
"ax.legend(loc='upper right',framealpha=0.5)\n",
"ax.set_xlabel(xlabel)\n",
"ax.set_ylabel('$n_Z/n_e$')\n",
"ax.grid()\n",
"ax.set_xscale('log')\n",
"ax.set_xticks([1,10])\n",
"ax.set_xticklabels(['1','10'])\n",
"divider = make_axes_locatable(ax)\n",
"cax = divider.append_axes(\"right\", size=\"5%\", pad=0.05)\n",
"cax.set_ylabel('...')\n",
"cbar = plt.colorbar(sm,cax=cax,ticks=[Z + 0.5 for Z in range(num_Z)])\n",
"cbar.ax.set_yticklabels(cmap_labels)\n",
"fig.tight_layout()\n",
"fig.savefig('../impurities/figures/two_temp_Z_dens.pdf')"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"# Example profile and distribution"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"kr = spf.SKRun('/Users/dpower/Documents/01 - PhD/14 - ELM investigation/01 - Runs/01 - Equilibria/02 - Kinetic/Length 3/Output/l_max=3/Output_K_L3_6e19')\n",
"fr = spf.SKRun('/Users/dpower/Documents/01 - PhD/14 - ELM investigation/01 - Runs/01 - Equilibria/01 - Fluid/Length 3/Output/Output_F_L3_6e19')\n",
"\n",
"print(kr.avg_density, kr.get_collisionality())\n",
"\n",
"fig,ax = plt.subplots(1,figsize=(4.0,3.5))\n",
"ax.plot(kr.xgrid,kr.data['TEMPERATURE']*kr.T_norm,'-',color='red',label='Kinetic')\n",
"ax.plot(fr.xgrid,fr.data['TEMPERATURE']*fr.T_norm,'--',color='red',label='Fluid')\n",
"ax.spines['right'].set_color('red')\n",
"ax.yaxis.label.set_color('red')\n",
"ax.tick_params(axis='y', colors='red')\n",
"ax2 = ax.twinx()\n",
"ax2.plot(kr.xgrid,kr.data['DENSITY']*kr.n_norm,'-',color='black',label='Kinetic')\n",
"ax2.plot(fr.xgrid,fr.data['DENSITY']*fr.n_norm,'--',color='blacK',label='Fluid')\n",
"ax.grid()\n",
"ax2.legend(bbox_to_anchor=(0.85,1.05))\n",
"ax.set_xlabel('x [m]')\n",
"ax.set_ylabel('$T_e$ [eV]')\n",
"ax2.set_ylabel('$n_e$ [m$^{-3}$]')\n",
"\n",
"axins = ax.inset_axes([0.05,0.22,0.5,0.5])\n",
"axins2 = axins.twinx()\n",
"axins.plot(kr.xgrid,kr.data['TEMPERATURE']*kr.T_norm,'-',color='red',label='Kinetic')\n",
"axins.plot(fr.xgrid,fr.data['TEMPERATURE']*fr.T_norm,'--',color='red',label='Fluid')\n",
"axins2.plot(kr.xgrid,kr.data['DENSITY']*kr.n_norm,'-',color='black')\n",
"axins2.plot(fr.xgrid,fr.data['DENSITY']*fr.n_norm,'--',color='blacK')\n",
"axins.set_xticks([])\n",
"axins.set_yticks([])\n",
"axins2.set_yticks([])\n",
"axins.set_xlim([29.80,29.83])\n",
"axins.grid()\n",
"mark_inset(ax, axins, loc1=1, loc2=4, fc=\"none\", ec='0.5')\n",
"fig.tight_layout()\n",
"fig.savefig('../impurities/figures/example_profile.pdf')\n",
"\n",
"fig,ax = plt.subplots(1,figsize=(4.0,3.5))\n",
"kr.load_dist()\n",
"cell = 180\n",
"f0 = kr.data['DIST_F'][0][:,cell] * kr.n_norm / (kr.v_th ** 3)\n",
"f0_Max = spf.maxwellian(kr.data['TEMPERATURE'][cell], kr.data['DENSITY'][cell], kr.vgrid/kr.v_th) * kr.n_norm / (kr.v_th ** 3)\n",
"f0_fl_Max = spf.maxwellian(fr.data['TEMPERATURE'][cell], fr.data['DENSITY'][cell], fr.vgrid/fr.v_th) * fr.n_norm / (fr.v_th ** 3)\n",
"ax.plot(kr.T_norm * (kr.vgrid/kr.v_th)**2,f0,'-',color='black',zorder=100,label='Kin. profile and distribution')\n",
"ax.plot(kr.T_norm * (kr.vgrid/kr.v_th)**2,f0_Max,linestyle='dotted',color='black',label='Kin. profile')\n",
"ax.plot(fr.T_norm * (fr.vgrid/fr.v_th)**2,f0_fl_Max,'--',color='black',label='Fluid profile')\n",
"ax.set_yscale('log')\n",
"ax.set_xlabel('Electron energy [eV]')\n",
"ax.set_ylabel('$f_0$')\n",
"ax.set_ylim([1e-11,1e1])\n",
"ax.set_xlim([-20,750])\n",
"ax.grid()\n",
"ax.legend()\n",
"fig.tight_layout()\n",
"fig.savefig('../impurities/figures/example_dist.pdf')"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"# Changes to iz and rec coeffs"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"iz_coeffs = {}; iz_coeffs_Max = {}\n",
"rec_coeffs = {}; rec_coeffs_Max = {}\n",
"for el in elements:\n",
" iz_coeffs[el] = []\n",
" iz_coeffs_Max[el] = []\n",
" rec_coeffs[el] = []\n",
" rec_coeffs_Max[el] = []\n",
" output_dir = '/Users/dpower/Documents/01 - PhD/10 - Impurities/Output/Kinetic/' + el\n",
" rdirs = ['Output_K_L3_' + dens + 'e19' for dens in ['3','4','5','6','7','8','9','10','12','15','18']]\n",
" for rdir in rdirs:\n",
" iz_coeffs[el].append(np.loadtxt(os.path.join(output_dir,rdir + '/' + el + '_iz_coeffs.txt')))\n",
" iz_coeffs_Max[el].append(np.loadtxt(os.path.join(output_dir,rdir + '/' + el + '_iz_coeffs_Max.txt')))\n",
" rec_coeffs[el].append(np.loadtxt(os.path.join(output_dir,rdir + '/' + el + '_rec_coeffs.txt')))\n",
" rec_coeffs_Max[el].append(np.loadtxt(os.path.join(output_dir,rdir + '/' + el + '_rec_coeffs_Max.txt')))\n",
"\n",
"kruns = spf.SKRundeck('/Users/dpower/Documents/01 - PhD/14 - ELM investigation/01 - Runs/01 - Equilibria/02 - Kinetic/Length 3/Output/l_max=3/')"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"run_num = 3\n",
"falpha=0.75\n",
"lcomp = 0.05\n",
"ucomp = 0.15\n",
"el = 'Li'\n",
"num_Z = 4\n",
"cmap = cmr.get_sub_cmap('inferno', 0.0, 0.8,N=num_Z-1)\n",
"sm = plt.cm.ScalarMappable(cmap=cmap, norm=plt.Normalize(\n",
" vmin=0, vmax=(num_Z-1)))\n",
"cr_iz_coeffs_Max = iz_coeffs_Max[el][run_num]\n",
"cr_iz_coeffs_kin = iz_coeffs[el][run_num]\n",
"r = kruns.runs[run_num]\n",
"x = r.data['TEMPERATURE'][::2] * r.T_norm\n",
"xlabel = '$T_e$ [eV]'\n",
"fig,ax = plt.subplots(1,figsize=(4,3.0))\n",
"for Z in range(num_Z-1):\n",
" l, = ax.plot([],[],color=sm.to_rgba(Z))\n",
" if Z in [0,num_Z-2]:\n",
" ax.plot(x, cr_iz_coeffs_Max[:,Z], linestyle='dotted', color=l.get_color())\n",
" else:\n",
" ax.plot(x, cr_iz_coeffs_Max[:,Z], linestyle='dotted', color=l.get_color())\n",
" ax.plot(x, cr_iz_coeffs_kin[:,Z], '-', color=l.get_color())\n",
"ax.plot([],[],'-',color='black', label='Kinetic')\n",
"ax.plot([],[],linestyle='dotted',color='black', label='Maxwellian')\n",
"ax.legend(fontsize=10,framealpha=falpha)\n",
"ax.grid()\n",
"ax.set_yscale('log')\n",
"ax.set_xlabel(xlabel)\n",
"ax.set_ylabel(r'$K_{eff}^{ion}$ [m$^{3}$s$^{-1}$]')\n",
"ax.set_xscale('log')\n",
"# ax.set_xlim([6,90])\n",
"ax.set_xticks([10,50])\n",
"ax.set_xticklabels(['10','50'])\n",
"ax.set_ylim([1e-22,None])\n",
"divider = make_axes_locatable(ax)\n",
"cax = divider.append_axes(\"right\", size=\"5%\", pad=0.05)\n",
"cax.set_ylabel('...')\n",
"cbar = plt.colorbar(sm,cax=cax,ticks=[Z + 0.5 for Z in range(num_Z-1)])\n",
"cbar.ax.set_yticklabels([el + r'$^{' + str(Z) + r'\\!+}$' for Z in range(num_Z-1)])\n",
"fig.tight_layout()\n",
"fig.savefig('../impurities/figures/Li_iz_coeffs.pdf')\n",
"\n",
"el = 'Be'\n",
"num_Z = 5\n",
"cmap = cmr.get_sub_cmap('inferno', 0.0, 0.8,N=num_Z-1)\n",
"sm = plt.cm.ScalarMappable(cmap=cmap, norm=plt.Normalize(\n",
" vmin=0, vmax=(num_Z-1)))\n",
"cr_iz_coeffs_Max = iz_coeffs_Max[el][run_num]\n",
"cr_iz_coeffs_kin = iz_coeffs[el][run_num]\n",
"r = kruns.runs[run_num]\n",
"x = r.data['TEMPERATURE'][::2] * r.T_norm\n",
"xlabel = '$T_e$ [eV]'\n",
"fig,ax = plt.subplots(1,figsize=(4,3.0))\n",
"for Z in range(num_Z-1):\n",
" l, = ax.plot([],[],color=sm.to_rgba(Z))\n",
" if Z in [0,num_Z-2]:\n",
" ax.plot(x, cr_iz_coeffs_Max[:,Z], linestyle='dotted', color=l.get_color())\n",
" else:\n",
" ax.plot(x, cr_iz_coeffs_Max[:,Z], linestyle='dotted', color=l.get_color())\n",
" ax.plot(x, cr_iz_coeffs_kin[:,Z], '-', color=l.get_color())\n",
"ax.plot([],[],'-',color='black', label='Kinetic')\n",
"ax.plot([],[],linestyle='dotted',color='black', label='Maxwellian')\n",
"ax.legend(fontsize=10,framealpha=falpha)\n",
"ax.grid()\n",
"ax.set_yscale('log')\n",
"ax.set_xlabel(xlabel)\n",
"ax.set_ylabel(r'$K_{eff}^{ion}$ [m$^{3}$s$^{-1}$]')\n",
"ax.set_xscale('log')\n",
"# ax.set_xlim([6,90])\n",
"ax.set_xticks([10,50])\n",
"ax.set_xticklabels(['10','50'])\n",
"ax.set_ylim([1e-22,8e-13])\n",
"divider = make_axes_locatable(ax)\n",
"cax = divider.append_axes(\"right\", size=\"5%\", pad=0.05)\n",
"cax.set_ylabel('...')\n",
"cbar = plt.colorbar(sm,cax=cax,ticks=[Z + 0.5 for Z in range(num_Z-1)])\n",
"cbar.ax.set_yticklabels([el + r'$^{' + str(Z) + r'\\!+}$' for Z in range(num_Z-1)])\n",
"fig.tight_layout()\n",
"fig.savefig('../impurities/figures/Be_iz_coeffs.pdf')\n",
"\n",
"el = 'C'\n",
"num_Z = 7\n",
"cmap = cmr.get_sub_cmap('inferno', 0.0, 0.8,N=num_Z-1)\n",
"sm = plt.cm.ScalarMappable(cmap=cmap, norm=plt.Normalize(\n",
" vmin=0, vmax=(num_Z-1)))\n",
"cr_iz_coeffs_Max = iz_coeffs_Max[el][run_num]\n",
"cr_iz_coeffs_kin = iz_coeffs[el][run_num]\n",
"r = kruns.runs[run_num]\n",
"x = r.data['TEMPERATURE'][::2] * r.T_norm\n",
"xlabel = '$T_e$ [eV]'\n",
"fig,ax = plt.subplots(1,figsize=(4,3.0))\n",
"for Z in range(num_Z-1):\n",
" l, = ax.plot([],[],color=sm.to_rgba(Z))\n",
" if Z in [0,num_Z-2]:\n",
" ax.plot(x, cr_iz_coeffs_Max[:,Z], linestyle='dotted', color=l.get_color())\n",
" else:\n",
" ax.plot(x, cr_iz_coeffs_Max[:,Z], linestyle='dotted', color=l.get_color())\n",
" ax.plot(x, cr_iz_coeffs_kin[:,Z], '-', color=l.get_color())\n",
"ax.plot([],[],'-',color='black', label='Kinetic')\n",
"ax.plot([],[],linestyle='dotted',color='black', label='Maxwellian')\n",
"ax.legend(fontsize=10,framealpha=falpha)\n",
"ax.grid()\n",
"ax.set_yscale('log')\n",
"ax.set_xlabel(xlabel)\n",
"ax.set_ylabel(r'$K_{eff}^{ion}$ [m$^{3}$s$^{-1}$]')\n",
"ax.set_xscale('log')\n",
"# ax.set_xlim([6,90])\n",
"ax.set_xticks([10,50])\n",
"ax.set_xticklabels(['10','50'])\n",
"ax.set_ylim([1e-22,5e-13])\n",
"divider = make_axes_locatable(ax)\n",
"cax = divider.append_axes(\"right\", size=\"5%\", pad=0.05)\n",
"cax.set_ylabel('...')\n",
"cbar = plt.colorbar(sm,cax=cax,ticks=[Z + 0.5 for Z in range(num_Z-1)])\n",
"cbar.ax.set_yticklabels([el + r'$^{' + str(Z) + r'\\!+}$' for Z in range(num_Z-1)])\n",
"fig.tight_layout()\n",
"fig.savefig('../impurities/figures/C_iz_coeffs.pdf')\n",
"\n",
"el = 'Ne'\n",
"num_Z = 11\n",
"cmap = cmr.get_sub_cmap('inferno', 0.0, 0.8,N=num_Z-1)\n",
"sm = plt.cm.ScalarMappable(cmap=cmap, norm=plt.Normalize(\n",
" vmin=0, vmax=(num_Z-1)))\n",
"cr_iz_coeffs_Max = iz_coeffs_Max[el][run_num]\n",
"cr_iz_coeffs_kin = iz_coeffs[el][run_num]\n",
"r = kruns.runs[run_num]\n",
"x = r.data['TEMPERATURE'][::2] * r.T_norm\n",
"xlabel = '$T_e$ [eV]'\n",
"fig,ax = plt.subplots(1,figsize=(4,3.0))\n",
"for Z in range(num_Z-1):\n",
" l, = ax.plot([],[],color=sm.to_rgba(Z))\n",
" if Z in [0,num_Z-2]:\n",
" ax.plot(x, cr_iz_coeffs_Max[:,Z], linestyle='dotted', color=l.get_color())\n",
" else:\n",
" ax.plot(x, cr_iz_coeffs_Max[:,Z], linestyle='dotted', color=l.get_color())\n",
" ax.plot(x, cr_iz_coeffs_kin[:,Z], '-', color=l.get_color())\n",
"ax.plot([],[],'-',color='black', label='Kinetic')\n",
"ax.plot([],[],linestyle='dotted',color='black', label='Maxwellian')\n",
"ax.legend(fontsize=10,framealpha=falpha)\n",
"ax.grid()\n",
"ax.set_yscale('log')\n",
"ax.set_xlabel(xlabel)\n",
"ax.set_ylabel(r'$K_{eff}^{ion}$ [m$^{3}$s$^{-1}$]')\n",
"ax.set_xscale('log')\n",
"# ax.set_xlim([6,90])\n",
"ax.set_xticks([10,50])\n",
"ax.set_xticklabels(['10','50'])\n",
"ax.set_ylim([1e-30,5e-13])\n",
"divider = make_axes_locatable(ax)\n",
"cax = divider.append_axes(\"right\", size=\"5%\", pad=0.05)\n",
"cax.set_ylabel('...')\n",
"cbar = plt.colorbar(sm,cax=cax,ticks=[Z + 0.5 for Z in range(0,num_Z-1,2)])\n",
"cbar.ax.set_yticklabels([el + r'$^{' + str(Z) + r'\\!+}$' for Z in range(0,num_Z-1,2)])\n",
"fig.tight_layout()\n",
"fig.savefig('../impurities/figures/Ne_iz_coeffs.pdf')"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"run_num = 3\n",
"falpha=0.75\n",
"lcomp = 0.05\n",
"ucomp = 0.15\n",
"el = 'Be'\n",
"num_Z = 5\n",
"cmap = cmr.get_sub_cmap('inferno', 0.0, 0.8,N=num_Z-1)\n",
"sm = plt.cm.ScalarMappable(cmap=cmap, norm=plt.Normalize(\n",
" vmin=0, vmax=(num_Z-1)))\n",
"cr_rec_coeffs_Max = rec_coeffs_Max[el][run_num]\n",
"cr_rec_coeffs_kin = rec_coeffs[el][run_num]\n",
"r = kruns.runs[run_num]\n",
"x = r.data['TEMPERATURE'][::2] * r.T_norm\n",
"xlabel = '$T_e$ [eV]'\n",
"fig,ax = plt.subplots(1,figsize=(4,3.0))\n",
"for Z in range(num_Z-1):\n",
" l, = ax.plot([],[],color=sm.to_rgba(Z))\n",
" if Z in [0,num_Z-2]:\n",
" ax.plot(x, cr_rec_coeffs_Max[:,Z], linestyle='dotted', color=l.get_color())\n",
" else:\n",
" ax.plot(x, cr_rec_coeffs_Max[:,Z], linestyle='dotted', color=l.get_color())\n",
" ax.plot(x, cr_rec_coeffs_kin[:,Z], '-', color=l.get_color())\n",
"ax.plot([],[],'-',color='black', label='Kinetic')\n",
"ax.plot([],[],linestyle='dotted',color='black', label='Maxwellian')\n",
"ax.legend(fontsize=10,framealpha=falpha)\n",
"ax.grid()\n",
"ax.set_yscale('log')\n",
"ax.set_xlabel(xlabel)\n",
"ax.set_ylabel(r'$K_{eff}^{rec}$ [m$^{3}$s$^{-1}$]')\n",
"ax.set_xscale('log')\n",
"# ax.set_xlim([6,90])\n",
"ax.set_xticks([10,50])\n",
"ax.set_xticklabels(['10','50'])\n",
"# ax.set_ylim([1e-22,None])\n",
"divider = make_axes_locatable(ax)\n",
"cax = divider.append_axes(\"right\", size=\"5%\", pad=0.05)\n",
"cax.set_ylabel('...')\n",
"cbar = plt.colorbar(sm,cax=cax,ticks=[Z + 0.5 for Z in range(num_Z-1)])\n",
"cbar.ax.set_yticklabels([el + r'$^{' + str(Z+1) + r'\\!+}$' for Z in range(num_Z-1)])\n",
"fig.tight_layout()\n",
"fig.savefig('../impurities/figures/Be_rec_coeffs.pdf')\n",
"\n",
"el = 'Ne'\n",
"num_Z =11\n",
"cmap = cmr.get_sub_cmap('inferno', 0.0, 0.8,N=num_Z-1)\n",
"sm = plt.cm.ScalarMappable(cmap=cmap, norm=plt.Normalize(\n",
" vmin=0, vmax=(num_Z-1)))\n",
"cr_rec_coeffs_Max = rec_coeffs_Max[el][run_num]\n",
"cr_rec_coeffs_kin = rec_coeffs[el][run_num]\n",
"r = kruns.runs[run_num]\n",
"x = r.data['TEMPERATURE'][::2] * r.T_norm\n",
"xlabel = '$T_e$ [eV]'\n",
"fig,ax = plt.subplots(1,figsize=(4,3.0))\n",
"for Z in range(num_Z-1):\n",
" l, = ax.plot([],[],color=sm.to_rgba(Z))\n",
" if Z in [0,num_Z-2]:\n",
" ax.plot(x, cr_rec_coeffs_Max[:,Z], linestyle='dotted', color=l.get_color())\n",
" else:\n",
" ax.plot(x, cr_rec_coeffs_Max[:,Z], linestyle='dotted', color=l.get_color())\n",
" ax.plot(x, cr_rec_coeffs_kin[:,Z], '-', color=l.get_color())\n",
"ax.plot([],[],'-',color='black', label='Kinetic')\n",
"ax.plot([],[],linestyle='dotted',color='black', label='Maxwellian')\n",
"ax.legend(fontsize=10,framealpha=falpha,loc='upper right')\n",
"ax.grid()\n",
"ax.set_yscale('log')\n",
"ax.set_xlabel(xlabel)\n",
"ax.set_ylabel(r'$K_{eff}^{rec}$ [m$^{3}$s$^{-1}$]')\n",
"ax.set_xscale('log')\n",
"# ax.set_xlim([6,90])\n",
"ax.set_xticks([10,50])\n",
"ax.set_xticklabels(['10','50'])\n",
"# ax.set_ylim([1e-22,None])\n",
"divider = make_axes_locatable(ax)\n",
"cax = divider.append_axes(\"right\", size=\"5%\", pad=0.05)\n",
"cax.set_ylabel('...')\n",
"cbar = plt.colorbar(sm,cax=cax,ticks=[Z + 0.5 for Z in range(1,num_Z-1,2)])\n",
"cbar.ax.set_yticklabels([el + r'$^{' + str(Z+1) + r'\\!+}$' for Z in range(1,num_Z-1,2)])\n",
"fig.tight_layout()\n",
"fig.savefig('../impurities/figures/Ne_rec_coeffs.pdf')"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"# Average ionization plots"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Initialising the impurity species to be modelled...\n",
" Initialising states...\n",
" Initialising transitions...\n",
" Loading transitions from json...\n",
" Creating transition objects...\n",
" Creating data for inverse transitions...\n",
" Performing checks on transition data...\n",
" Initialising densities...\n",
" Finalising states...\n",
"Finished initialising impurity species objects.\n",
"Initialising the impurity species to be modelled...\n",
" Initialising states...\n",
" Initialising transitions...\n",
" Loading transitions from json...\n",
" Creating transition objects...\n",
" Creating data for inverse transitions...\n",
" Performing checks on transition data...\n",
" Initialising densities...\n",
" Finalising states...\n",
"Finished initialising impurity species objects.\n",
"Initialising the impurity species to be modelled...\n",
" Initialising states...\n",
" Initialising transitions...\n",
" Loading transitions from json...\n",
" Creating transition objects...\n",
" Creating data for inverse transitions...\n",
" Performing checks on transition data...\n",
" Initialising densities...\n",
" Finalising states...\n",
"Finished initialising impurity species objects.\n",
"Initialising the impurity species to be modelled...\n",
" Initialising states...\n",
" Initialising transitions...\n",
" Loading transitions from json...\n",
" Creating transition objects...\n",
" Creating data for inverse transitions...\n",
" Performing checks on transition data...\n",
" Initialising densities...\n",
" Finalising states...\n",
"Finished initialising impurity species objects.\n",
"Initialising the impurity species to be modelled...\n",
" Initialising states...\n",
" Initialising transitions...\n",
" Loading transitions from json...\n",
" Creating transition objects...\n",
" Creating data for inverse transitions...\n",
" Performing checks on transition data...\n",
" Initialising densities...\n",
" Finalising states...\n",
"Finished initialising impurity species objects.\n",
"Initialising the impurity species to be modelled...\n",
" Initialising states...\n",
" Initialising transitions...\n",
" Loading transitions from json...\n",
" Creating transition objects...\n",
" Creating data for inverse transitions...\n",
" Performing checks on transition data...\n",
" Initialising densities...\n",
" Finalising states...\n",
"Finished initialising impurity species objects.\n",
"Initialising the impurity species to be modelled...\n",
" Initialising states...\n",
" Initialising transitions...\n",
" Loading transitions from json...\n",
" Creating transition objects...\n",
" Creating data for inverse transitions...\n",
" Performing checks on transition data...\n",
" Initialising densities...\n",
" Finalising states...\n",
"Finished initialising impurity species objects.\n",
"Initialising the impurity species to be modelled...\n",
" Initialising states...\n",
" Initialising transitions...\n",
" Loading transitions from json...\n",
" Creating transition objects...\n",
" Creating data for inverse transitions...\n",
" Performing checks on transition data...\n",
" Initialising densities...\n",
" Finalising states...\n",
"Finished initialising impurity species objects.\n",
"Initialising the impurity species to be modelled...\n",
" Initialising states...\n",
" Initialising transitions...\n",
" Loading transitions from json...\n",
" Creating transition objects...\n",
" Creating data for inverse transitions...\n",
" Performing checks on transition data...\n",
" Initialising densities...\n",
" Finalising states...\n",
"Finished initialising impurity species objects.\n",
"Initialising the impurity species to be modelled...\n",
" Initialising states...\n",
" Initialising transitions...\n",
" Loading transitions from json...\n",
" Creating transition objects...\n",
" Creating data for inverse transitions...\n",
" Performing checks on transition data...\n",
" Initialising densities...\n",
" Finalising states...\n",
"Finished initialising impurity species objects.\n"
]
}
],
"source": [
"runs = {}\n",
"runs_fl = {}\n",
"elements = ['Li','Be','C','N','Ne']\n",
"for el in elements:\n",
" runs[el] = post_processing.load_sikerun_from_dir('/Users/dpower/Documents/01 - PhD/10 - Impurities/Output/Kinetic/' + el + '/Output_K_L3_6e19',el)\n",
" runs_fl[el] = post_processing.load_sikerun_from_dir('/Users/dpower/Documents/01 - PhD/10 - Impurities/Output/Fluid/' + el + '/Output_F_L3_6e19',el)\n",
"skrun_fl = spf.SKRun('/Users/dpower/Documents/01 - PhD/14 - ELM investigation/01 - Runs/01 - Equilibria/01 - Fluid/Length 3/Output/Output_F_L3_6e19')\n",
"skrun_kin = spf.SKRun('/Users/dpower/Documents/01 - PhD/14 - ELM investigation/01 - Runs/01 - Equilibria/02 - Kinetic/Length 3/Output/l_max=3/Output_K_L3_6e19')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"Zavg = {}; Zavg_Max = {}; Zavg_fl = {}\n",
"for el in elements:\n",
" Zavg[el] = post_processing.get_Zavg(runs[el].impurities[el].dens, runs[el].impurities[el].states, runs[el].num_x)\n",
" Zavg_Max[el] = post_processing.get_Zavg(runs[el].impurities[el].dens_Max, runs[el].impurities[el].states, runs[el].num_x)\n",
" Zavg_fl[el] = post_processing.get_Zavg(runs_fl[el].impurities[el].dens_Max, runs_fl[el].impurities[el].states, runs_fl[el].num_x)\n",
" \n",
"fig,ax = plt.subplots(1,figsize=(4.0,3))\n",
"el = 'Li'\n",
"x = skrun_kin.connection_length - skrun_kin.xgrid[::2] - skrun_kin.dxc[0] * 0.5\n",
"ax.plot(x,Zavg[el],'-',color=line_colours[el],label='Kin. profile and distributions')\n",
"ax.plot(x,Zavg_Max[el],linestyle='dotted',color=line_colours[el], label='Kin. profile')\n",
"ax.plot(x,Zavg_fl[el],linestyle='--',color=line_colours[el],label='Fluid profile')\n",
"ax.grid()\n",
"ax.set_xscale('log')\n",
"ax.set_xlabel('Distance from target [m]')\n",
"ax.set_ylabel('Average ionization')\n",
"ax.set_yticks([1,2,3])\n",
"ax.set_ylabel(r'$\\bar{z}$')\n",
"ax.legend()\n",
"fig.tight_layout()\n",
"fig.savefig('../impurities/figures/avg_iz_Li.pdf')\n",
"\n",
"fig,ax = plt.subplots(1,figsize=(4.0,3))\n",
"el = 'Be'\n",
"x = skrun_kin.connection_length - skrun_kin.xgrid[::2] - skrun_kin.dxc[0] * 0.5\n",
"ax.plot(x,Zavg[el],'-',color=line_colours[el],label='Kin. profile and distributions')\n",
"ax.plot(x,Zavg_Max[el],linestyle='dotted',color=line_colours[el], label='Kin. profile')\n",
"ax.plot(x,Zavg_fl[el],linestyle='--',color=line_colours[el],label='Fluid profile')\n",
"ax.grid()\n",
"ax.set_xscale('log')\n",
"ax.set_xlabel('Distance from target [m]')\n",
"ax.set_ylabel('Average ionization')\n",
"ax.set_yticks([2,3,4])\n",
"ax.set_ylabel(r'$\\bar{z}$')\n",
"ax.legend()\n",
"fig.tight_layout()\n",
"fig.savefig('../impurities/figures/avg_iz_Be.pdf')\n",
"\n",
"fig,ax = plt.subplots(1,figsize=(4.0,3))\n",
"el = 'C'\n",
"x = skrun_kin.connection_length - skrun_kin.xgrid[::2] - skrun_kin.dxc[0] * 0.5\n",
"ax.plot(x,Zavg[el],'-',color=line_colours[el],label='Kin. profile and distributions')\n",
"ax.plot(x,Zavg_Max[el],linestyle='dotted',color=line_colours[el], label='Kin. profile')\n",
"ax.plot(x,Zavg_fl[el],linestyle='--',color=line_colours[el],label='Fluid profile')\n",
"ax.grid()\n",
"ax.set_xscale('log')\n",
"ax.set_xlabel('Distance from target [m]')\n",
"ax.set_ylabel('Average ionization')\n",
"ax.set_yticks([3,4,5])\n",
"ax.set_ylabel(r'$\\bar{z}$')\n",
"ax.legend()\n",
"fig.tight_layout()\n",
"fig.savefig('../impurities/figures/avg_iz_C.pdf')\n",
"\n",
"fig,ax = plt.subplots(1,figsize=(4.0,3))\n",
"el = 'N'\n",
"x = skrun_kin.connection_length - skrun_kin.xgrid[::2] - skrun_kin.dxc[0] * 0.5\n",
"ax.plot(x,Zavg[el],'-',color=line_colours[el],label='Kin. profile and distributions')\n",
"ax.plot(x,Zavg_Max[el],linestyle='dotted',color=line_colours[el], label='Kin. profile')\n",
"ax.plot(x,Zavg_fl[el],linestyle='--',color=line_colours[el],label='Fluid profile')\n",
"ax.grid()\n",
"ax.set_xscale('log')\n",
"ax.set_xlabel('Distance from target [m]')\n",
"ax.set_ylabel('Average ionization')\n",
"ax.set_yticks([3,4,5])\n",
"ax.set_ylabel(r'$\\bar{z}$')\n",
"ax.legend()\n",
"fig.tight_layout()\n",
"fig.savefig('../impurities/figures/avg_iz_N.pdf')\n",
"\n",
"fig,ax = plt.subplots(1,figsize=(4.0,3))\n",
"el = 'Ne'\n",
"x = skrun_kin.connection_length - skrun_kin.xgrid[::2] - skrun_kin.dxc[0] * 0.5\n",
"ax.plot(x,Zavg[el],'-',color=line_colours[el],label='Kin. profile and distributions')\n",
"ax.plot(x,Zavg_Max[el],linestyle='dotted',color=line_colours[el], label='Kin. profile')\n",
"ax.plot(x,Zavg_fl[el],linestyle='--',color=line_colours[el],label='Fluid profile')\n",
"ax.grid()\n",
"ax.set_xscale('log')\n",
"ax.set_xlabel('Distance from target [m]')\n",
"ax.set_ylabel('Average ionization')\n",
"ax.set_ylabel(r'$\\bar{z}$')\n",
"ax.legend(loc='upper left')\n",
"fig.tight_layout()\n",
"fig.savefig('../impurities/figures/avg_iz_Ne.pdf')"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"Zavg = {}; Zavg_Max = {}; Zavg_fl = {}\n",
"for el in elements:\n",
" Zavg[el] = post_processing.get_Zavg(runs[el].impurities[el].dens, runs[el].impurities[el].states, runs[el].num_x)\n",
" Zavg_Max[el] = post_processing.get_Zavg(runs[el].impurities[el].dens_Max, runs[el].impurities[el].states, runs[el].num_x)\n",
" Zavg_fl[el] = post_processing.get_Zavg(runs_fl[el].impurities[el].dens_Max, runs_fl[el].impurities[el].states, runs_fl[el].num_x)\n",
" \n",
"fig,ax = plt.subplots(1,3,sharey=True,figsize=(8,3.0))\n",
"x = skrun_kin.connection_length - skrun_kin.xgrid[::2] - skrun_kin.dxc[0] * 0.5\n",
"for i,el in enumerate(elements):\n",
" ax[0].plot(x,(Zavg[el] - Zavg_Max[el]),'-',color=line_colours[el],label=el)\n",
"ax[0].grid()\n",
"ax[0].set_xscale('log')\n",
"ax[0].set_xticks([1e-3,1e-2,1e-1,1e0,1e1])\n",
"ax[0].set_xlabel('Distance from target [m]')\n",
"ax[0].set_title(r'$\\Delta \\bar{z}^d$')\n",
"ax[0].legend(loc='lower right')\n",
"ax[0].text(1e-3,1.9,'(a)')\n",
"fig.tight_layout()\n",
"\n",
"x = skrun_kin.connection_length - skrun_kin.xgrid[::2] - skrun_kin.dxc[0] * 0.5\n",
"for i,el in enumerate(elements):\n",
" ax[1].plot(x,(Zavg_Max[el] - Zavg_fl[el]),'-',color=line_colours[el],label=el)\n",
"ax[1].grid()\n",
"ax[1].set_xscale('log')\n",
"ax[1].set_xticks([1e-3,1e-2,1e-1,1e0,1e1])\n",
"ax[1].set_xlabel('Distance from target [m]')\n",
"ax[1].set_title(r'$\\Delta \\bar{z}^p$')\n",
"ax[1].text(1e-3,1.9,'(b)')\n",
"# ax[1].legend()\n",
"fig.tight_layout()\n",
"\n",
"x = skrun_kin.connection_length - skrun_kin.xgrid[::2] - skrun_kin.dxc[0] * 0.5\n",
"for i,el in enumerate(elements):\n",
" ax[2].plot(x,(Zavg[el] - Zavg_fl[el]),color=line_colours[el],label=el)\n",
"ax[2].grid()\n",
"ax[2].set_xscale('log')\n",
"ax[2].set_xticks([1e-3,1e-2,1e-1,1e0,1e1])\n",
"ax[2].set_xlabel('Distance from target [m]')\n",
"ax[2].set_title(r'$\\Delta \\bar{z}^{d\\!+\\!p}$')\n",
"ax[2].text(1e-3,1.9,'(c)')\n",
"fig.tight_layout()\n",
"fig.savefig('../impurities/figures/avg_iz_diff.pdf')"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"# Cooling curve plots"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Initialising the impurity species to be modelled...\n",
" Initialising states...\n",
" Initialising transitions...\n",
" Loading transitions from json...\n",
" Creating transition objects...\n",
" Creating data for inverse transitions...\n",
" Performing checks on transition data...\n",
" Initialising densities...\n",
" Finalising states...\n",
"Finished initialising impurity species objects.\n",
"Initialising the impurity species to be modelled...\n",
" Initialising states...\n",
" Initialising transitions...\n",
" Loading transitions from json...\n",
" Creating transition objects...\n",
" Creating data for inverse transitions...\n",
" Performing checks on transition data...\n",
" Initialising densities...\n",
" Finalising states...\n",
"Finished initialising impurity species objects.\n",
"Initialising the impurity species to be modelled...\n",
" Initialising states...\n",
" Initialising transitions...\n",
" Loading transitions from json...\n",
" Creating transition objects...\n",
" Creating data for inverse transitions...\n",
" Performing checks on transition data...\n",
" Initialising densities...\n",
" Finalising states...\n",
"Finished initialising impurity species objects.\n",
"Initialising the impurity species to be modelled...\n",
" Initialising states...\n",
" Initialising transitions...\n",
" Loading transitions from json...\n",
" Creating transition objects...\n",
" Creating data for inverse transitions...\n",
" Performing checks on transition data...\n",
" Initialising densities...\n",
" Finalising states...\n",
"Finished initialising impurity species objects.\n"
]
}
],
"source": [
"runs = {}\n",
"runs_fl = {}\n",
"elements = ['Be','C','Ne','Li']\n",
"for el in elements:\n",
" if el == 'Ne':\n",
" runs[el] = post_processing.load_sikerun_from_dir('/Users/dpower/Documents/01 - PhD/10 - Impurities/Output/Kinetic/' + 'Ne (old)' + '/Output_K_L3_6e19',el)\n",
" else:\n",
" runs[el] = post_processing.load_sikerun_from_dir('/Users/dpower/Documents/01 - PhD/10 - Impurities/Output/Kinetic/' + el + '/Output_K_L3_6e19',el)\n",
" # runs_fl[el] = post_processing.load_sikerun_from_dir('/Users/dpower/Documents/01 - PhD/10 - Impurities/Output/Fluid/' + el + '/Output_F_L3_6e19',el)\n",
"# skrun_fl = spf.SKRun('/Users/dpower/Documents/01 - PhD/14 - ELM investigation/01 - Runs/01 - Equilibria/01 - Fluid/Length 3/Output/Output_F_L3_6e19')\n",
"skrun_kin = spf.SKRun('/Users/dpower/Documents/01 - PhD/14 - ELM investigation/01 - Runs/01 - Equilibria/02 - Kinetic/Length 3/Output/l_max=3/Output_K_L3_6e19')"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"el = 'Li'\n",
"r = runs[el]\n",
"PLT_Max, PLT_Max_eff = post_processing.get_cooling_curves(r, el, kinetic=False)\n",
"PLT_kin, PLT_kin_eff = post_processing.get_cooling_curves(r, el, kinetic=True)\n",
"\n",
"num_Z = r.impurities[el].num_Z\n",
"x, xlabel = SIKE_plotting.get_xaxis(r,'Te')\n",
"\n",
"# cmap = plt.cm.get_cmap('inferno',r.impurities[el].num_Z-1)\n",
"cmap = cmr.get_sub_cmap('inferno', 0.0, 0.8,N=r.impurities[el].num_Z-1)\n",
"\n",
"sm = plt.cm.ScalarMappable(cmap=cmap, norm=plt.Normalize(\n",
" vmin=0, vmax=(r.impurities[el].num_Z-1)))\n",
"\n",
"fig,ax = plt.subplots(1,figsize=(4,3.5))\n",
"for Z in range(num_Z-1):\n",
" l, = ax.plot([],[],color=sm.to_rgba(Z))\n",
" ax.plot(x,PLT_kin[:,Z],'-',color=l.get_color())\n",
" ax.plot(x,PLT_Max[:,Z],linestyle='dotted',color=l.get_color())\n",
"ax.plot([],[],'-',color='black',label='Kinetic')\n",
"ax.plot([],[],linestyle='dotted',color='black',label='Maxwellian')\n",
"ax.legend(loc='lower right')\n",
"ax.set_yscale('log')\n",
"ax.set_xlabel(xlabel)\n",
"ax.set_ylabel('Excitation radiation per ion [Wm$^3$]')\n",
"ax.grid()\n",
"ax.set_ylim([1e-37,None])\n",
"ax.set_ylabel('$L_Z$ [Wm$^3$]')\n",
"ax.set_xscale('log')\n",
"ax.set_xticks([10,50])\n",
"ax.set_xticklabels([10,50])\n",
"\n",
"divider = make_axes_locatable(ax)\n",
"cax = divider.append_axes(\"right\", size=\"5%\", pad=0.05)\n",
"cax.set_ylabel('...')\n",
"cbar = plt.colorbar(sm,cax=cax,ticks=[Z + 0.5 for Z in range(r.impurities[el].num_Z-1)])\n",
"cbar.ax.set_yticklabels([el + r'$^{' + str(Z) + r'\\!+}$' for Z in range(r.impurities[el].num_Z-1)])\n",
"\n",
"fig.tight_layout()\n",
"fig.savefig('../impurities/figures/cooling_curves_Li.pdf')\n",
"\n",
"el = 'Be'\n",
"r = runs[el]\n",
"PLT_Max, PLT_Max_eff = post_processing.get_cooling_curves(r, el, kinetic=False)\n",
"PLT_kin, PLT_kin_eff = post_processing.get_cooling_curves(r, el, kinetic=True)\n",
"\n",
"num_Z = r.impurities[el].num_Z\n",
"x, xlabel = SIKE_plotting.get_xaxis(r,'Te')\n",
"\n",
"# cmap = plt.cm.get_cmap('inferno',r.impurities[el].num_Z-1)\n",
"cmap = cmr.get_sub_cmap('inferno', 0.0, 0.8,N=r.impurities[el].num_Z-1)\n",
"\n",
"sm = plt.cm.ScalarMappable(cmap=cmap, norm=plt.Normalize(\n",
" vmin=0, vmax=(r.impurities[el].num_Z-1)))\n",
"\n",
"fig,ax = plt.subplots(1,figsize=(4,3.5))\n",
"for Z in range(num_Z-1):\n",
" l, = ax.plot([],[],color=sm.to_rgba(Z))\n",
" ax.plot(x,PLT_kin[:,Z],'-',color=l.get_color())\n",
" ax.plot(x,PLT_Max[:,Z],linestyle='dotted',color=l.get_color())\n",
"ax.set_yscale('log')\n",
"ax.set_xlabel(xlabel)\n",
"# ax.set_ylabel('Excitation radiation per ion [Wm$^3$]')\n",
"ax.plot([],[],'-',color='black',label='Kinetic')\n",
"ax.plot([],[],linestyle='dotted',color='black',label='Maxwellian')\n",
"ax.legend(loc='lower right')\n",
"ax.grid()\n",
"ax.set_ylim([1e-37,None])\n",
"ax.set_ylabel('$L_Z$ [Wm$^3$]')\n",
"ax.set_xscale('log')\n",
"ax.set_xticks([10,50])\n",
"ax.set_xticklabels([10,50])\n",
"\n",
"divider = make_axes_locatable(ax)\n",
"cax = divider.append_axes(\"right\", size=\"5%\", pad=0.05)\n",
"cax.set_ylabel('...')\n",
"cbar = plt.colorbar(sm,cax=cax,ticks=[Z + 0.5 for Z in range(r.impurities[el].num_Z-1)])\n",
"cbar.ax.set_yticklabels([el + r'$^{' + str(Z) + r'\\!+}$' for Z in range(r.impurities[el].num_Z-1)])\n",
"\n",
"fig.tight_layout()\n",
"fig.savefig('../impurities/figures/cooling_curves_Be.pdf')\n",
"\n",
"el = 'Ne'\n",
"r = runs[el]\n",
"PLT_Max, PLT_Max_eff = post_processing.get_cooling_curves(r, el, kinetic=False)\n",
"PLT_kin, PLT_kin_eff = post_processing.get_cooling_curves(r, el, kinetic=True)\n",
"\n",
"num_Z = r.impurities[el].num_Z\n",
"x, xlabel = SIKE_plotting.get_xaxis(r,'Te')\n",
"\n",
"# cmap = plt.cm.get_cmap('inferno',r.impurities[el].num_Z-1)\n",
"cmap = cmr.get_sub_cmap('inferno', 0.0, 0.8,N=r.impurities[el].num_Z-1)\n",
"sm = plt.cm.ScalarMappable(cmap=cmap, norm=plt.Normalize(\n",
" vmin=0, vmax=(r.impurities[el].num_Z-1)))\n",
"\n",
"fig,ax = plt.subplots(1,figsize=(4,3.5))\n",
"\n",
"for Z in range(num_Z-1):\n",
" l, = ax.plot([],[],color=sm.to_rgba(Z))\n",
" ax.plot(x,PLT_kin[:,Z],'-',color=l.get_color())\n",
" ax.plot(x,PLT_Max[:,Z],linestyle='dotted',color=l.get_color())\n",
" # if Z in [0,5,9]:\n",
" # ax.plot([],[],color=sm.to_rgba(Z),label=el + '$^{' + str(Z) + '+}$')\n",
"ax.set_yscale('log')\n",
"ax.set_xlabel(xlabel)\n",
"ax.plot([],[],'-',color='black',label='Kinetic')\n",
"ax.plot([],[],linestyle='dotted',color='black',label='Maxwellian')\n",
"ax.legend(loc='upper left',framealpha=0.4)\n",
"ax.grid()\n",
"ax.set_ylim([1e-33,3e-31])\n",
"ax.set_xscale('log')\n",
"ax.set_ylabel('$L_Z$ [Wm$^3$]')\n",
"ax.set_xticks([10,50])\n",
"ax.set_xticklabels([10,50])\n",
"\n",
"axins = ax.inset_axes([0.55,0.05,0.5,0.5])\n",
"Z=num_Z-3\n",
"axins.plot(x,PLT_kin[:,Z],linestyle='dotted',color=sm.to_rgba(Z))\n",
"axins.plot(x,PLT_Max[:,Z],color=sm.to_rgba(Z))\n",
"Z=num_Z-2\n",
"axins.plot(x,PLT_kin[:,Z],linestyle='dotted',color=sm.to_rgba(Z))\n",
"axins.plot(x,PLT_Max[:,Z],color=sm.to_rgba(Z))\n",
"axins.set_xticks([])\n",
"axins.set_yticks([])\n",
"axins.set_ylim([1e-41,9e-38])\n",
"axins.grid()\n",
"axins.set_yscale('log')\n",
"# mark_inset(ax, axins, loc1=1, loc2=4, fc=\"none\", ec='0.5')\n",
"\n",
"divider = make_axes_locatable(ax)\n",
"cax = divider.append_axes(\"right\", size=\"5%\", pad=0.2)\n",
"cax.set_ylabel('...')\n",
"cbar = plt.colorbar(sm,cax=cax,ticks=[Z + 0.5 for Z in [0,2,4,6,8]])\n",
"cbar.ax.set_yticklabels([el + r'$^{' + str(Z) + r'\\!+}$' for Z in [0,2,4,6,8]])\n",
"\n",
"fig.tight_layout()\n",
"fig.savefig('../impurities/figures/cooling_curves_Ne.pdf')\n",
"\n",
"el = 'C'\n",
"r = runs[el]\n",
"PLT_Max, PLT_Max_eff = post_processing.get_cooling_curves(r, el, kinetic=False)\n",
"PLT_kin, PLT_kin_eff = post_processing.get_cooling_curves(r, el, kinetic=True)\n",
"\n",
"num_Z = r.impurities[el].num_Z\n",
"x, xlabel = SIKE_plotting.get_xaxis(r,'Te')\n",
"\n",
"# cmap = plt.cm.get_cmap('jet',r.impurities[el].num_Z-1)\n",
"cmap = cmr.get_sub_cmap('inferno', 0.0, 0.8,N=r.impurities[el].num_Z-1)\n",
"sm = plt.cm.ScalarMappable(cmap=cmap, norm=plt.Normalize(\n",
" vmin=0, vmax=(r.impurities[el].num_Z-1)))\n",
"\n",
"fig,ax = plt.subplots(1,figsize=(4,3.5))\n",
"\n",
"for Z in range(num_Z-1):\n",
" l, = ax.plot([],[],color=sm.to_rgba(Z))\n",
" ax.plot(x,PLT_kin[:,Z],linestyle='dotted',color=l.get_color())\n",
" ax.plot(x,PLT_Max[:,Z],color=l.get_color())\n",
" # if Z in [0,5,9]:\n",
" # ax.plot([],[],color=sm.to_rgba(Z),label=el + '$^{' + str(Z) + '+}$')\n",
"ax.set_yscale('log')\n",
"ax.set_xlabel(xlabel)\n",
"ax.plot([],[],'-',color='black',label='Kinetic')\n",
"ax.plot([],[],linestyle='dotted',color='black',label='Maxwellian')\n",
"ax.legend(loc='upper left',framealpha=0.4)\n",
"ax.grid()\n",
"ax.set_ylim([1e-32,3e-31])\n",
"ax.set_xscale('log')\n",
"ax.set_ylabel('$L_Z$ [Wm$^3$]')\n",
"ax.set_xticks([10,50])\n",
"ax.set_xticklabels([10,50])\n",
"\n",
"axins = ax.inset_axes([0.55,0.05,0.5,0.5])\n",
"Z=num_Z-3\n",
"axins.plot(x,PLT_kin[:,Z],'-',color=sm.to_rgba(Z))\n",
"axins.plot(x,PLT_Max[:,Z],linestyle='dotted',color=sm.to_rgba(Z))\n",
"Z=num_Z-2\n",
"axins.plot(x,PLT_kin[:,Z],'-',color=sm.to_rgba(Z))\n",
"axins.plot(x,PLT_Max[:,Z],linestyle='dotted',color=sm.to_rgba(Z))\n",
"axins.set_ylim([1e-37,None])\n",
"axins.grid()\n",
"axins.set_yscale('log')\n",
"axins.set_xticks([])\n",
"axins.set_yticks([1e-37,1e-35])\n",
"# mark_inset(ax, axins, loc1=1, loc2=4, fc=\"none\", ec='0.5')\n",
"\n",
"divider = make_axes_locatable(ax)\n",
"cax = divider.append_axes(\"right\", size=\"5%\", pad=0.2)\n",
"cax.set_ylabel('...')\n",
"cbar = plt.colorbar(sm,cax=cax,ticks=[Z + 0.5 for Z in [0,1,2,3,4,5]])\n",
"cbar.ax.set_yticklabels([el + r'$^{' + str(Z) + r'\\!+}$' for Z in [0,1,2,3,4,5]])\n",
"\n",
"fig.tight_layout()\n",
"fig.savefig('../impurities/figures/cooling_curves_C.pdf')"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"# Radiation profiles"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Initialising the impurity species to be modelled...\n",
" Initialising states...\n",
" Initialising transitions...\n",
" Loading transitions from json...\n",
" Creating transition objects...\n",
" Creating data for inverse transitions...\n",
" Performing checks on transition data...\n",
" Initialising densities...\n",
" Finalising states...\n",
"Finished initialising impurity species objects.\n",
"Initialising the impurity species to be modelled...\n",
" Initialising states...\n",
" Initialising transitions...\n",
" Loading transitions from json...\n",
" Creating transition objects...\n",
" Creating data for inverse transitions...\n",
" Performing checks on transition data...\n",
" Initialising densities...\n",
" Finalising states...\n",
"Finished initialising impurity species objects.\n",
"Initialising the impurity species to be modelled...\n",
" Initialising states...\n",
" Initialising transitions...\n",
" Loading transitions from json...\n",
" Creating transition objects...\n",
" Creating data for inverse transitions...\n",
" Performing checks on transition data...\n",
" Initialising densities...\n",
" Finalising states...\n",
"Finished initialising impurity species objects.\n",
"Initialising the impurity species to be modelled...\n",
" Initialising states...\n",
" Initialising transitions...\n",
" Loading transitions from json...\n",
" Creating transition objects...\n",
" Creating data for inverse transitions...\n",
" Performing checks on transition data...\n",
" Initialising densities...\n",
" Finalising states...\n",
"Finished initialising impurity species objects.\n",
"Initialising the impurity species to be modelled...\n",
" Initialising states...\n",
" Initialising transitions...\n",
" Loading transitions from json...\n",
" Creating transition objects...\n",
" Creating data for inverse transitions...\n",
" Performing checks on transition data...\n",
" Initialising densities...\n",
" Finalising states...\n",
"Finished initialising impurity species objects.\n",
"Initialising the impurity species to be modelled...\n",
" Initialising states...\n",
" Initialising transitions...\n",
" Loading transitions from json...\n",
" Creating transition objects...\n",
" Creating data for inverse transitions...\n",
" Performing checks on transition data...\n",
" Initialising densities...\n",
" Finalising states...\n",
"Finished initialising impurity species objects.\n",
"Initialising the impurity species to be modelled...\n",
" Initialising states...\n",
" Initialising transitions...\n",
" Loading transitions from json...\n",
" Creating transition objects...\n",
" Creating data for inverse transitions...\n",
" Performing checks on transition data...\n",
" Initialising densities...\n",
" Finalising states...\n",
"Finished initialising impurity species objects.\n",
"Initialising the impurity species to be modelled...\n",
" Initialising states...\n",
" Initialising transitions...\n",
" Loading transitions from json...\n",
" Creating transition objects...\n",
" Creating data for inverse transitions...\n",
" Performing checks on transition data...\n",
" Initialising densities...\n",
" Finalising states...\n",
"Finished initialising impurity species objects.\n",
"Initialising the impurity species to be modelled...\n",
" Initialising states...\n",
" Initialising transitions...\n",
" Loading transitions from json...\n",
" Creating transition objects...\n",
" Creating data for inverse transitions...\n",
" Performing checks on transition data...\n",
" Initialising densities...\n",
" Finalising states...\n",
"Finished initialising impurity species objects.\n",
"Initialising the impurity species to be modelled...\n",
" Initialising states...\n",
" Initialising transitions...\n",
" Loading transitions from json...\n",
" Creating transition objects...\n",
" Creating data for inverse transitions...\n",
" Performing checks on transition data...\n",
" Initialising densities...\n",
" Finalising states...\n",
"Finished initialising impurity species objects.\n"
]
}
],
"source": [
"runs = {}\n",
"runs_fl = {}\n",
"elements = ['Be','C','Ne','N','Li']\n",
"for el in elements:\n",
" runs[el] = post_processing.load_sikerun_from_dir('/Users/dpower/Documents/01 - PhD/10 - Impurities/Output/Kinetic/' + el + '/Output_K_L3_6e19',el)\n",
" runs_fl[el] = post_processing.load_sikerun_from_dir('/Users/dpower/Documents/01 - PhD/10 - Impurities/Output/Fluid/' + el + '/Output_F_L3_6e19',el)\n",
"skrun_fl = spf.SKRun('/Users/dpower/Documents/01 - PhD/14 - ELM investigation/01 - Runs/01 - Equilibria/01 - Fluid/Length 3/Output/Output_F_L3_6e19')\n",
"skrun_kin = spf.SKRun('/Users/dpower/Documents/01 - PhD/14 - ELM investigation/01 - Runs/01 - Equilibria/02 - Kinetic/Length 3/Output/l_max=3/Output_K_L3_6e19')"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [],
"source": [
"for el in ['Li','Be','Ne','C','N']:\n",
" r = runs[el]\n",
" PLT_Max, PLT_Max_eff = post_processing.get_cooling_curves(r, el, kinetic=False)\n",
" Q_rad_Max = 1e-6 * PLT_Max_eff * r.ne * r.n_norm* np.sum(r.impurities[el].dens_Max,1) * r.n_norm\n",
" PLT_kin, PLT_kin_eff = post_processing.get_cooling_curves(r, el, kinetic=True)\n",
" Q_rad_kin = 1e-6 * PLT_kin_eff * r.ne * r.n_norm * np.sum(r.impurities[el].dens,1) * r.n_norm\n",
" r = runs_fl[el]\n",
" PLT_fl, PLT_fl_eff = post_processing.get_cooling_curves(r, el, kinetic=False)\n",
" Q_rad_fl = 1e-6 * PLT_kin_eff * r.ne * r.n_norm * np.sum(r.impurities[el].dens_Max,1) * r.n_norm\n",
"\n",
" x = skrun_kin.connection_length - skrun_kin.xgrid[::2] - skrun_kin.dxc[0] * 0.5\n",
"\n",
" fig,ax = plt.subplots(1,figsize=(4.5,3))\n",
" l, = ax.plot(x,Q_rad_kin,'-',color=line_colours[el],label='Kin. profile + distributions')\n",
" ax.plot(x,Q_rad_Max,color=l.get_color(),linestyle='dotted',label='Kin. profile')\n",
" ax.plot(x,Q_rad_fl,color=l.get_color(),linestyle='--',label='Fluid profile')\n",
" ax.set_xscale('log')\n",
" ax.legend()\n",
" ax.set_xlabel('Distance from target [m]')\n",
" ax.set_ylabel('$Q_{z,tot}$ [MWm$^{-3}$]')\n",
" ax.grid()\n",
" fig.tight_layout()\n",
" fig.savefig('../impurities/figures/rad_profile_' + el + '.pdf')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"for el in ['Be']:\n",
" r = runs[el]\n",
" PLT_Max, PLT_Max_eff = post_processing.get_cooling_curves(r, el, kinetic=False)\n",
" # Q_rad_Max = 1e-6 * PLT_Max_eff * r.ne * r.n_norm* np.sum(r.impurities[el].dens_Max,1) * r.n_norm\n",
" PLT_kin, PLT_kin_eff = post_processing.get_cooling_curves(r, el, kinetic=True)\n",
" Q_rad_kin = 1e-6 * PLT_kin_eff * r.ne * r.n_norm * np.sum(r.impurities[el].dens,1) * r.n_norm\n",
" \n",
" Z_dens_kin = post_processing.get_Z_dens(r.impurities[el].dens,r.impurities[el].states)\n",
" PLT_kinMax_eff = np.zeros(r.num_x)\n",
" for Z in range(r.impurities[el].num_Z):\n",
" PLT_kinMax_eff += PLT_Max[:,Z] * Z_dens_kin[:,Z]\n",
" PLT_kinMax_eff /= np.sum(Z_dens_kin,1)\n",
" Q_rad_kinMax = 1e-6 * PLT_kinMax_eff * r.ne * r.n_norm * np.sum(r.impurities[el].dens,1) * r.n_norm\n",
" r = runs_fl[el]\n",
" # PLT_fl, PLT_fl_eff = post_processing.get_cooling_curves(r, el, kinetic=False)\n",
" # Q_rad_fl = 1e-6 * PLT_kin_eff * r.ne * r.n_norm * np.sum(r.impurities[el].dens_Max,1) * r.n_norm\n",
"\n",
" x = skrun_kin.connection_length - skrun_kin.xgrid[::2] - skrun_kin.dxc[0] * 0.5\n",
"\n",
" fig,ax = plt.subplots(1,figsize=(4.5,3))\n",
" l, = ax.plot(x,Q_rad_kin,'--',color=line_colours[el],label='Kin. profile + distributions')\n",
" # ax.plot(x,Q_rad_Max,color=l.get_color(),label='Kin. profile')\n",
" # ax.plot(x,Q_rad_fl,color=l.get_color(),linestyle='dotted',label='Fluid profile')\n",
" ax.plot(x,Q_rad_kinMax,color=l.get_color(),linestyle='-.',label='KinMax')\n",
" ax.set_xscale('log')\n",
" ax.legend()\n",
" ax.set_xlabel('Distance from target [m]')\n",
" ax.set_ylabel('$Q_{z,tot}$ [MWm$^{-3}$]')\n",
" ax.grid()\n",
" fig.tight_layout()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"line_colours = {}\n",
"line_colours['Li'] = 'blue'; line_colours['Be'] = 'orange'; line_colours['C'] = 'green'; line_colours['N'] = 'red'; line_colours['Ne'] = 'purple'; \n",
"for el in ['Be']:\n",
" r = runs[el]\n",
" PLT_Max, PLT_Max_eff = post_processing.get_cooling_curves(r, el, kinetic=False)\n",
" PLT_kin, PLT_kin_eff = post_processing.get_cooling_curves(r, el, kinetic=True)\n",
" # Q_rad_kin = 1e-6 * PLT_kin_eff * r.ne * r.n_norm * np.sum(r.impurities[el].dens,1) * r.n_norm\n",
" \n",
" Z_dens = post_processing.get_Z_dens(r.impurities[el].dens,r.impurities[el].states)\n",
" # PLT_kinMax_eff = np.zeros(r.num_x)\n",
" # for Z in range(r.impurities[el].num_Z):\n",
" # PLT_kinMax_eff += PLT_Max[:,Z] * Z_dens_kin[:,Z]\n",
" # PLT_kinMax_eff /= np.sum(Z_dens_kin,1)\n",
" # Q_rad_kinMax = 1e-6 * PLT_kinMax_eff * r.ne * r.n_norm * np.sum(r.impurities[el].dens,1) * r.n_norm\n",
" # r = runs_fl[el]\n",
"\n",
" x = skrun_kin.connection_length - skrun_kin.xgrid[::2] - skrun_kin.dxc[0] * 0.5\n",
"\n",
" fig,ax = plt.subplots(1,figsize=(4.5,3))\n",
" for Z in range(r.impurities[el].num_Z):\n",
" l, = ax.plot(x,PLT_Max[:,Z]*Z_dens[:,Z],'-',label=str(Z))\n",
" ax.plot(x,PLT_kin[:,Z]*Z_dens[:,Z],'--',color=l.get_color())\n",
" # ax.plot(x,Q_rad_kinMax,color=l.get_color(),linestyle='-.',label='KinMax')\n",
" ax.set_xscale('log')\n",
" ax.legend()\n",
" ax.set_xlabel('Distance from target [m]')\n",
" ax.set_ylabel('$Q_{z,tot}$ [MWm$^{-3}$]')\n",
" ax.grid()\n",
" fig.tight_layout()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"SIKE_plotting.plot_Zavg(runs['Be'],'Be')"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"# Total radiated power"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"skruns_fl = spf.SKRundeck('/Users/dpower/Documents/01 - PhD/14 - ELM investigation/01 - Runs/01 - Equilibria/01 - Fluid/Length 3/Output')\n",
"skruns_kin = spf.SKRundeck('/Users/dpower/Documents/01 - PhD/14 - ELM investigation/01 - Runs/01 - Equilibria/02 - Kinetic/Length 3/Output/l_max=3')\n",
"# elements = ['Ne']\n",
"elements = ['Li','Be','C','N','Ne']\n",
"q_rad_kin = {}\n",
"q_rad_Max = {}\n",
"q_rad_fl = {}\n",
"for el in elements:\n",
" q_rad_kin[el] = []\n",
" q_rad_Max[el] = []\n",
" q_rad_fl[el] = []\n",
" rundirs = ['Output_K_L3_' + dens + 'e19' for dens in ['3','4','5','6','7','8','9','10','12','15','18']]\n",
" rundirs_fl = ['Output_F_L3_' + dens + 'e19' for dens in ['3p5','4','5','6','7','8','9','10','12','15','18']]\n",
" for i,rdir in enumerate(rundirs):\n",
" Q_rad = np.loadtxt(os.path.join('/Users/dpower/Documents/01 - PhD/10 - Impurities/Output/Kinetic',el,rdir,el + '_Q_rad_kin.txt'))\n",
" q_rad_kin[el].append(np.sum(Q_rad * skruns_kin.runs[i].dxc[::2]))\n",
" Q_rad = np.loadtxt(os.path.join('/Users/dpower/Documents/01 - PhD/10 - Impurities/Output/Kinetic',el,rdir,el + '_Q_rad_Max.txt'))\n",
" q_rad_Max[el].append(np.sum(Q_rad * skruns_kin.runs[i].dxc[::2]))\n",
" for i,rdir in enumerate(rundirs_fl):\n",
" Q_rad = np.loadtxt(os.path.join('/Users/dpower/Documents/01 - PhD/10 - Impurities/Output/Fluid',el,rdir,el + '_Q_rad_Max.txt'))\n",
" q_rad_fl[el].append(np.sum(Q_rad * skruns_fl.runs[i].dxc[::2]))\n",
" q_rad_kin[el] = np.array(q_rad_kin[el])\n",
" q_rad_Max[el] = np.array(q_rad_Max[el])\n",
" q_rad_fl[el] = np.array(q_rad_fl[el])\n",
"\n",
"fig,ax = plt.subplots(1,3,sharey=True,figsize=(8,3))\n",
"# fig,ax = plt.subplot_mosaic([[0,1,2]],figsize=(8,3))\n",
"nu_star = []\n",
"for r in skruns_kin.runs:\n",
" nu_star.append(r.get_collisionality())\n",
"for el in elements:\n",
" l, = ax[0].plot(nu_star,(q_rad_kin[el]-q_rad_Max[el])/q_rad_fl[el],'-',color=line_colours[el],label=el)\n",
"ax[0].legend()\n",
"ax[0].set_xlabel(r'$\\nu_{e,u}^*$')\n",
"ax[0].set_title('$\\delta q_{z,tot}^d$',size=10)\n",
"ax[0].grid()\n",
"ax[0].text(12,1.60,'(a)')\n",
"# fig.tight_layout()\n",
"# fig.savefig('../impurities/figures/total_rad_power_d.pdf')\n",
"\n",
"# fig,ax = plt.subplots(1,figsize=(3,3))\n",
"nu_star = []\n",
"for r in skruns_kin.runs:\n",
" nu_star.append(r.get_collisionality())\n",
"for el in elements:\n",
" l, = ax[1].plot(nu_star,(q_rad_Max[el]-q_rad_fl[el])/q_rad_fl[el],'-',label=el)\n",
"# ax[1].legend()\n",
"ax[1].set_xlabel(r'$\\nu_{e,u}^*$')\n",
"ax[1].set_title('$\\delta q_{z,tot}^p$',size=10)\n",
"ax[1].grid()\n",
"ax[1].text(12,1.60,'(b)')\n",
"# fig.tight_layout()\n",
"# fig.savefig('../impurities/figures/total_rad_power_p.pdf')\n",
"\n",
"\n",
"# fig,ax = plt.subplots(1,figsize=(3,3))\n",
"nu_star = []\n",
"for r in skruns_kin.runs:\n",
" nu_star.append(r.get_collisionality())\n",
"for el in elements:\n",
" l, = ax[2].plot(nu_star,(q_rad_kin[el]-q_rad_fl[el])/q_rad_fl[el],'-',label=el)\n",
"# ax[2].legend()\n",
"ax[2].set_xlabel(r'$\\nu_{e,u}^*$')\n",
"ax[2].set_title('$\\delta q_{z,tot}^{d+p}$',size=10)\n",
"ax[2].grid()\n",
"ax[2].text(12,1.60,'(c)')\n",
"fig.tight_layout()\n",
"fig.savefig('../impurities/figures/total_rad_power_d+p.pdf')"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [],
"source": [
"skruns_fl = spf.SKRundeck('/Users/dpower/Documents/01 - PhD/14 - ELM investigation/01 - Runs/01 - Equilibria/01 - Fluid/Length 3/Output')\n",
"skruns_kin = spf.SKRundeck('/Users/dpower/Documents/01 - PhD/14 - ELM investigation/01 - Runs/01 - Equilibria/02 - Kinetic/Length 3/Output/l_max=3')\n",
"# elements = ['Ne']\n",
"elements = ['Li','Be','C','N','Ne']\n",
"q_rad_kin = {}\n",
"q_rad_Max = {}\n",
"q_rad_fl = {}\n",
"for el in elements:\n",
" q_rad_kin[el] = []\n",
" q_rad_Max[el] = []\n",
" q_rad_fl[el] = []\n",
" rundirs = ['Output_K_L3_' + dens + 'e19' for dens in ['3','4','5','6','7','8','9','10','12','15','18']]\n",
" rundirs_fl = ['Output_F_L3_' + dens + 'e19' for dens in ['3p5','4','5','6','7','8','9','10','12','15','18']]\n",
" for i,rdir in enumerate(rundirs):\n",
" Q_rad = np.loadtxt(os.path.join('/Users/dpower/Documents/01 - PhD/10 - Impurities/Output/Kinetic',el,rdir,el + '_Q_rad_kin.txt'))\n",
" q_rad_kin[el].append(np.sum(Q_rad * skruns_kin.runs[i].dxc[::2]))\n",
" Q_rad = np.loadtxt(os.path.join('/Users/dpower/Documents/01 - PhD/10 - Impurities/Output/Kinetic',el,rdir,el + '_Q_rad_Max.txt'))\n",
" q_rad_Max[el].append(np.sum(Q_rad * skruns_kin.runs[i].dxc[::2]))\n",
" for i,rdir in enumerate(rundirs_fl):\n",
" Q_rad = np.loadtxt(os.path.join('/Users/dpower/Documents/01 - PhD/10 - Impurities/Output/Fluid',el,rdir,el + '_Q_rad_Max.txt'))\n",
" q_rad_fl[el].append(np.sum(Q_rad * skruns_fl.runs[i].dxc[::2]))\n",
" q_rad_kin[el] = np.array(q_rad_kin[el])\n",
" q_rad_Max[el] = np.array(q_rad_Max[el])\n",
" q_rad_fl[el] = np.array(q_rad_fl[el])\n",
"\n",
"fig,ax = plt.subplots(1,figsize=(4.5,3))\n",
"nu_star = []\n",
"for r in skruns_kin.runs:\n",
" nu_star.append(r.get_collisionality())\n",
"for el in elements:\n",
" l, = ax.plot(nu_star,q_rad_kin[el],'--')\n",
" ax.plot(nu_star,q_rad_Max[el],'-',color=l.get_color(),label=el)\n",
" ax.plot(nu_star,q_rad_fl[el],linestyle='dotted',color=l.get_color())\n",
"ax.legend()\n",
"ax2 = ax.twinx()\n",
"ax2.set_yticks([])\n",
"ax2.plot([],[],'-',label='Kin. profile + distributions',color='black')\n",
"ax2.plot([],[],linestyle='dotted',label='Kin. profile',color='black')\n",
"ax2.plot([],[],linestyle='--',label='Fluid profile',color='black')\n",
"ax2.legend(loc='upper left',bbox_to_anchor=(0.0,1.2),fontsize=9)\n",
"ax.set_xlabel(r'$\\nu_{e,u}^*$')\n",
"ax.set_ylabel('$q_{z,tot}$ [MWm$^{-2}$]')\n",
"ax.grid()\n",
"ax.set_yscale('log')\n",
"fig.tight_layout()\n",
"fig.savefig('../impurities/figures/total_rad_power_mag.pdf')"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"# Total cooling curves"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"kruns = spf.SKRundeck('/Users/dpower/Documents/01 - PhD/14 - ELM investigation/01 - Runs/01 - Equilibria/02 - Kinetic/Length 3/Output/l_max=3/')\n",
"fruns = spf.SKRundeck('/Users/dpower/Documents/01 - PhD/14 - ELM investigation/01 - Runs/01 - Equilibria/01 - Fluid/Length 3/Output/')\n",
"PLTs_kin_eff = {}\n",
"PLTs_Max_eff = {}\n",
"PLTs_fl_eff = {}\n",
"elements = ['Li','Be','C','N','Ne']\n",
"for el in elements:\n",
" PLTs_kin_eff[el] = []\n",
" PLTs_Max_eff[el] = []\n",
" PLTs_fl_eff[el] = []\n",
" output_dir = '/Users/dpower/Documents/01 - PhD/10 - Impurities/Output/Kinetic/' + el\n",
" rdirs = ['Output_K_L3_' + dens + 'e19' for dens in ['3','4','5','6','7','8','9','10','12','15','18']]\n",
" for rdir in rdirs:\n",
" PLTs_kin_eff[el].append(np.loadtxt(os.path.join(output_dir,rdir + '/' + el + '_PLT_kin_eff.txt')))\n",
" PLTs_Max_eff[el].append(np.loadtxt(os.path.join(output_dir,rdir + '/' + el + '_PLT_Max_eff.txt')))\n",
" output_dir_fl = '/Users/dpower/Documents/01 - PhD/10 - Impurities/Output/Fluid/' + el\n",
" rdirs_fl = ['Output_F_L3_' + dens + 'e19' for dens in ['3p5','4','5','6','7','8','9','10','12','15','18']]\n",
" for rdir in rdirs_fl:\n",
" PLTs_fl_eff[el].append(np.loadtxt(os.path.join(output_dir_fl,rdir + '/' + el + '_PLT_Max_eff.txt')))\n",
"\n",
"for el in elements:\n",
" fig,ax = plt.subplots(1,figsize=(4.5,3))\n",
" for i,r in enumerate(kruns.runs):\n",
" # ax.plot(r.data['TEMPERATURE'][::2] * r.T_norm, PLTs_Max_eff[el][i],color='black',alpha=0.5)\n",
" ax.plot(r.data['TEMPERATURE'][::2] * r.T_norm, PLTs_kin_eff[el][i],color='red',alpha=0.5)\n",
" ax.plot(fruns.runs[i].data['TEMPERATURE'][::2] * fruns.runs[i].T_norm, PLTs_fl_eff[el][i],color='black',alpha=0.5)\n",
" ax.set_xlabel('$T_e$ [eV]')\n",
" ax.set_ylabel('$L_z^{tot}$ [Wm$^3$]')\n",
" ax.grid()\n",
" ax.set_yscale('log')\n",
" ax.plot([],[],color='red',label='Kinetic')\n",
" ax.plot([],[],color='black',label='Fluid')\n",
" ax.legend()\n",
" fig.tight_layout()\n",
" fig.savefig('../impurities/figures/agg_PLTs_' + el + '.pdf')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"elements = ['C','N']\n",
"PLTs = {}\n",
"for el in elements:\n",
" PLTs[el] = np.loadtxt('/Users/dpower/Documents/01 - PhD/10 - Impurities/Output/Cooling curves/' + el + '_PLT_eff.txt')\n",
"Te = np.loadtxt('/Users/dpower/Documents/01 - PhD/10 - Impurities/Output/Cooling curves/Te.txt')\n",
"\n",
"kr = spf.SKRun('/Users/dpower/Documents/01 - PhD/14 - ELM investigation/01 - Runs/01 - Equilibria/02 - Kinetic/Length 3/Output/l_max=3/Output_K_L3_3e19')\n",
"fr = spf.SKRun('/Users/dpower/Documents/01 - PhD/14 - ELM investigation/01 - Runs/01 - Equilibria/01 - Fluid/Length 3/Output/Output_F_L3_3p5e19')\n",
"\n",
"fig,ax = plt.subplots(1,figsize=(4.5,3))\n",
"for el in elements:\n",
" ax.plot(Te,PLTs[el],label=el)\n",
"ax.set_xlabel('$T_e$ [eV]')\n",
"ax.set_ylabel('$L_Z^{tot}$ [Wm$^3$]')\n",
"ax.set_yscale('log')\n",
"ax.axvline(kr.data['TEMPERATURE'][-1] * kr.T_norm,linestyle='--',color='gray')\n",
"ax.axvline(fr.data['TEMPERATURE'][-1] * kr.T_norm,linestyle='--',color='gray')\n",
"ax.grid()\n",
"ax.legend()\n",
"ax.set_ylim([1e-38,5e-31])\n",
"ax.set_xlim([None,60])\n",
"fig.tight_layout()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"elements = ['Li','Be','C','N','Ne']\n",
"PLTs = {}\n",
"for el in elements:\n",
" PLTs[el] = np.loadtxt('/Users/dpower/Documents/01 - PhD/10 - Impurities/Output/Kinetic/' + el + '/Output_K_L3_6e19/' + el + '_PLT_kin_eff.txt')\n",
"# Te = np.loadtxt('/Users/dpower/Documents/01 - PhD/10 - Impurities/Output/Kinetic/Li/Output_K_L3_6e19/Te.txt')\n",
"\n",
"r = post_processing.load_sikerun_from_dir('/Users/dpower/Documents/01 - PhD/10 - Impurities/Output/Kinetic/Li/Output_K_L3_6e19','Li')\n",
"\n",
"kr = spf.SKRun('/Users/dpower/Documents/01 - PhD/14 - ELM investigation/01 - Runs/01 - Equilibria/02 - Kinetic/Length 3/Output/l_max=3/Output_K_L3_6e19')\n",
"fr = spf.SKRun('/Users/dpower/Documents/01 - PhD/14 - ELM investigation/01 - Runs/01 - Equilibria/01 - Fluid/Length 3/Output/Output_F_L3_6e19')\n",
"\n",
"fig,ax = plt.subplots(1,figsize=(4.5,3))\n",
"for el in elements:\n",
" ax.plot(r.Te * r.T_norm,PLTs[el],label=el)\n",
"ax.set_xlabel('$T_e$ [eV]')\n",
"ax.set_ylabel('$L_Z^{tot}$ [Wm$^3$]')\n",
"ax.set_yscale('log')\n",
"ax.axvline(kr.data['TEMPERATURE'][-1] * kr.T_norm,linestyle='--',color='gray')\n",
"ax.axvline(fr.data['TEMPERATURE'][-1] * kr.T_norm,linestyle='--',color='gray')\n",
"ax.grid()\n",
"ax.legend()\n",
"# ax.set_ylim([1e-38,5e-31])\n",
"ax.set_xlim([None,60])\n",
"fig.tight_layout()"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"rd = spf.SKTRundeck('/Volumes/rds/user/dcp19/home/WORK/SCALINGS_PAPER_RUNS/FLUID/ITER/DIFF_2D_NEUTS/COARSE_GRID')"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rd.truns[0].animate('DENSITY')"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"6.139190078339258"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rd.truns[1].get_collisionality()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.12"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}