{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Introduction\n",
"\n",
"\n",
"\n",
"This example gives a general overview on how to pre- and postprocess ASCOT5 simulations.\n",
"\n",
"1. First simulation: step-by-step\n",
"2. Contents of the HDF5 file\n",
"3. Python interface to libascot.so\n",
"4. Input generation\n",
"5. Post processing\n",
"6. Live simulations"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## First simulation: step-by-step\n",
"\n",
"Go to `ascot5/doc/tutorials` folder and type `ipython3` to begin this tutorial. Then repeat these steps:\n",
"\n",
"1. All pre- and post-processing is done via `Ascot` object.\n",
"To create a new ASCOT5 data file, use `create=True`."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"execution": {
"iopub.execute_input": "2025-04-01T09:03:37.336692Z",
"iopub.status.busy": "2025-04-01T09:03:37.336517Z",
"iopub.status.idle": "2025-04-01T09:03:39.039204Z",
"shell.execute_reply": "2025-04-01T09:03:39.038704Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"File created"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"import numpy as np\n",
"from a5py import Ascot\n",
"\n",
"a5 = Ascot(\"ascot.h5\", create=True)\n",
"print(\"File created\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"2. The following lines initialize test data. We will go through the input generation in detail later."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"execution": {
"iopub.execute_input": "2025-04-01T09:03:39.041238Z",
"iopub.status.busy": "2025-04-01T09:03:39.040761Z",
"iopub.status.idle": "2025-04-01T09:03:39.207950Z",
"shell.execute_reply": "2025-04-01T09:03:39.207407Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Inputs initialized"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"# Use pre-existing template to create some input data\n",
"a5.data.create_input(\"options tutorial\")\n",
"a5.data.create_input(\"bfield analytical iter circular\")\n",
"a5.data.create_input(\"wall rectangular\")\n",
"a5.data.create_input(\"plasma flat\")\n",
"\n",
"# Create electric field and markers by giving input parameters explicitly\n",
"from a5py.ascot5io.marker import Marker\n",
"mrk = Marker.generate(\"gc\", n=100, species=\"alpha\")\n",
"mrk[\"energy\"][:] = 3.5e6\n",
"mrk[\"pitch\"][:] = 0.99 - 1.98 * np.random.rand(100,)\n",
"mrk[\"r\"][:] = np.linspace(6.2, 8.2, 100)\n",
"a5.data.create_input(\"gc\", **mrk)\n",
"a5.data.create_input(\"E_TC\", exyz=np.array([0,0,0])) # Zero electric field\n",
"\n",
"# Create dummy input for the rest\n",
"a5.data.create_input(\"N0_3D\")\n",
"a5.data.create_input(\"Boozer\")\n",
"a5.data.create_input(\"MHD_STAT\")\n",
"a5.data.create_input(\"asigma_loc\")\n",
"print(\"Inputs initialized\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"3. **EITHER** close the ipython session and edit options on terminal (opens a text editor):\n",
"\n",
" `a5editoptions ascot.h5`\n",
"\n",
" Scroll down to \"End conditions\" and set `ENDCOND_MAX_MILEAGE = 0.5e-2`. Save and close the editor. When prompted, set \"Fast\" as a description.\n",
"\n",
" **OR** set the options in ipython:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"execution": {
"iopub.execute_input": "2025-04-01T09:03:39.209633Z",
"iopub.status.busy": "2025-04-01T09:03:39.209454Z",
"iopub.status.idle": "2025-04-01T09:03:39.288370Z",
"shell.execute_reply": "2025-04-01T09:03:39.287913Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Options updated"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"name = a5.data.options.active.new(ENDCOND_MAX_MILEAGE=0.5e-2, desc=\"Fast\")\n",
"a5.data.options[name].activate()\n",
"print(\"Options updated\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"4. Now execute `ascot5_main` which should take less than 10 seconds.\n",
" \n",
" **EITHER** in terminal:\n",
" \n",
" `./../../build/ascot5_main --d=\"Hello world!\"`\n",
"\n",
" **OR** in ipython:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"execution": {
"iopub.execute_input": "2025-04-01T09:03:39.289975Z",
"iopub.status.busy": "2025-04-01T09:03:39.289801Z",
"iopub.status.idle": "2025-04-01T09:03:42.069330Z",
"shell.execute_reply": "2025-04-01T09:03:42.068757Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"ASCOT5_MAIN\n",
"Tag e37fd83\n",
"Branch docs\n",
"\n",
"Initialized MPI, rank 0, size 1.\n",
"\n",
"Reading and initializing input.\n",
"\n",
"Input file is ascot.h5.\n",
"\n",
"Reading options input.\n",
"Active QID is 4001368339\n",
"Options read and initialized.\n",
"\n",
"Reading magnetic field input.\n",
"Active QID is 3675640460\n",
"\n",
"Analytical tokamak magnetic field (B_GS)\n",
"Psi at magnetic axis (6.618 m, -0.000 m)\n",
"-5.410 (evaluated)\n",
"-5.410 (given)\n",
"Magnetic field on axis:\n",
"B_R = 0.000 B_phi = 4.965 B_z = -0.000\n",
"Number of toroidal field coils 0\n",
"Magnetic field read and initialized.\n",
"\n",
"Reading electric field input.\n",
"Active QID is 3854342190\n",
"\n",
"Trivial Cartesian electric field (E_TC)\n",
"E_x = 0.000000e+00, E_y = 0.000000e+00, E_z = 0.000000e+00\n",
"Electric field read and initialized.\n",
"\n",
"Reading plasma input.\n",
"Active QID is 4088076269\n",
"\n",
"1D plasma profiles (P_1D)\n",
"Min rho = 0.00e+00, Max rho = 1.00e+01, Number of rho grid points = 100, Number of ion species = 1\n",
"Species Z/A charge [e]/mass [amu] Density [m^-3] at Min/Max rho Temperature [eV] at Min/Max rho\n",
" 1 / 1 1 / 1.000 1.00e+21/1.00e+00 1.00e+04/1.00e+04 \n",
"[electrons] -1 / 0.001 1.00e+21/1.00e+00 1.00e+04/1.00e+04 \n",
"Toroidal rotation [rad/s] at Min/Max rho: 0.00e+00/0.00e+00\n",
"Quasi-neutrality is (electron / ion charge density) 1.00\n",
"Toroidal rotation [rad/s] at Min/Max rho: 0.00e+00/0.00e+00\n",
"Plasma data read and initialized.\n",
"\n",
"Reading neutral input.\n",
"Active QID is 1155656345\n",
"\n",
"3D neutral density and temperature (N0_3D)\n",
"Grid: nR = 3 Rmin = 0.000 Rmax = 100.000\n",
" nz = 3 zmin = -100.000 zmax = 100.000\n",
" nphi = 3 phimin = 0.000 phimax = 6.283\n",
" Number of neutral species = 1\n",
"Species Z/A (Maxwellian)\n",
" 1/ 1 (1) \n",
"Neutral data read and initialized.\n",
"\n",
"Reading wall input.\n",
"Active QID is 3486110016\n",
"\n",
"2D wall model (wall_2D)\n",
"Number of wall elements = 20, R extend = [4.10, 8.40], z extend = [-3.90, 3.90]\n",
"Wall data read and initialized.\n",
"\n",
"Reading boozer input.\n",
"Active QID is 3784806280\n",
"\n",
"Boozer input\n",
"psi grid: n = 6 min = 0.000 max = 1.000\n",
"thetageo grid: n = 18\n",
"thetabzr grid: n = 10\n",
"Boozer data read and initialized.\n",
"\n",
"Reading MHD input.\n",
"Active QID is 1391302864\n",
"\n",
"MHD (stationary) input\n",
"Grid: nrho = 6 rhomin = 0.000 rhomax = 1.000\n",
"\n",
"Modes:\n",
"(n,m) = ( 1, 3) Amplitude = 0.1 Frequency = 1 Phase = 0\n",
"(n,m) = ( 2, 4) Amplitude = 2 Frequency = 1.5 Phase = 0.785\n",
"MHD data read and initialized.\n",
"\n",
"Reading atomic reaction input.\n",
"Active QID is 0550834107\n",
"\n",
"Found data for 1 atomic reactions:\n",
"Reaction number / Total number of reactions = 1 / 1\n",
" Reactant species Z_1 / A_1, Z_2 / A_2 = 0 / 0, 0 / 0\n",
" Min/Max energy = 1.00e+03 / 1.00e+04\n",
" Min/Max density = 1.00e+18 / 1.00e+20\n",
" Min/Max temperature = 1.00e+03 / 1.00e+04\n",
" Number of energy grid points = 3\n",
" Number of density grid points = 4\n",
" Number of temperature grid points = 5\n",
"Atomic reaction data read and initialized.\n",
"\n",
"Reading marker input.\n",
"Active QID is 3057719270\n",
"\n",
"Loaded 100 guiding centers.\n",
"Marker data read and initialized.\n",
"\n",
"All input read and initialized.\n",
"\n",
"Initializing marker states.\n",
"Estimated memory usage 0.0 MB.\n",
"Marker states initialized.\n",
"\n",
"Preparing output.\n",
"Note: Output file ascot.h5 is already present.\n",
"\n",
"The qid of this run is 2093344910\n",
"\n",
"Inistate written.\n",
"Simulation begins; 4 threads.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulation complete.\n",
"Simulation finished in 2.353104 s\n",
"Endstate written.\n",
"\n",
"Combining and writing diagnostics.\n",
"\n",
"Writing diagnostics output.\n",
"\n",
"Writing 5D distribution.\n",
"\n",
"Writing 6D distribution.\n",
"\n",
"Writing rho 5D distribution.\n",
"\n",
"Writing rho 6D distribution.\n",
"\n",
"Writing COM distribution.\n",
"Writing orbit diagnostics.\n",
"\n",
"Diagnostics output written.\n",
"Diagnostics written.\n",
"\n",
"Summary of results:\n",
" 98 markers had end condition Sim time limit\n",
" 2 markers had end condition Wall collision\n",
"\n",
" No markers were aborted.\n",
"\n",
"Done.\n",
"Simulation completed"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"import subprocess\n",
"subprocess.run([\"./../../build/ascot5_main\", \"--d=\\\"Hello world!\\\"\"])\n",
"print(\"Simulation completed\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"5. Open `ipython` again to read the data and plot marker endstates.\n",
"\n",
" Hint: You can add the line `from a5py import Ascot` to your ipython config file (`~/.ipython/profile_default/ipython_config.py`) so that it is automatically called in beginning of every ipython session:\n",
"\n",
"
\n", " c = get_config()\n", " c.InteractiveShellApp.exec_lines = [\n", " '%load_ext autoreload',\n", " '%autoreload 2',\n", " 'import numpy as np',\n", " 'import scipy',\n", " 'import matplotlib as mpl',\n", " 'import matplotlib.pyplot as plt',\n", " 'from a5py import Ascot',\n", " ]\n", "" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2025-04-01T09:03:42.071133Z", "iopub.status.busy": "2025-04-01T09:03:42.070810Z", "iopub.status.idle": "2025-04-01T09:03:42.223024Z", "shell.execute_reply": "2025-04-01T09:03:42.222447Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Inputs:" ] }, { "name": "stdout", "output_type": "stream", "text": [ " [only active shown]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "options " ] }, { "name": "stdout", "output_type": "stream", "text": [ "opt 4001368339" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 2025-04-01 09:03:39\n", "Fast\n", "+ 1 other(s)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "bfield " ] }, { "name": "stdout", "output_type": "stream", "text": [ "B_GS 3675640460" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 2025-04-01 09:03:39\n", "TAG\n", "+ 0 other(s)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "efield " ] }, { "name": "stdout", "output_type": "stream", "text": [ "E_TC 3854342190" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 2025-04-01 09:03:39\n", "TAG\n", "+ 0 other(s)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "marker " ] }, { "name": "stdout", "output_type": "stream", "text": [ "gc 3057719270" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 2025-04-01 09:03:39\n", "TAG\n", "+ 0 other(s)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "plasma " ] }, { "name": "stdout", "output_type": "stream", "text": [ "plasma_1D 4088076269" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 2025-04-01 09:03:39\n", "TAG\n", "+ 0 other(s)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "neutral " ] }, { "name": "stdout", "output_type": "stream", "text": [ "N0_3D 1155656345" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 2025-04-01 09:03:39\n", "TAG\n", "+ 0 other(s)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "wall " ] }, { "name": "stdout", "output_type": "stream", "text": [ "wall_2D 3486110016" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 2025-04-01 09:03:39\n", "TAG\n", "+ 0 other(s)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "boozer " ] }, { "name": "stdout", "output_type": "stream", "text": [ "Boozer 3784806280" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 2025-04-01 09:03:39\n", "TAG\n", "+ 0 other(s)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "mhd " ] }, { "name": "stdout", "output_type": "stream", "text": [ "MHD_STAT 1391302864" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 2025-04-01 09:03:39\n", "TAG\n", "+ 0 other(s)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "asigma " ] }, { "name": "stdout", "output_type": "stream", "text": [ "asigma_loc 0550834107" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 2025-04-01 09:03:39\n", "TAG\n", "+ 0 other(s)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Results:\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "run 2093344910" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 2025-04-01 09:03:39." ] }, { "name": "stdout", "output_type": "stream", "text": [ " [active]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "\"Hello world!\"\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Average mileage: 0.00490" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "image/png": "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", "text/plain": [ "