{ "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 }