Output reading tools and scripts
================================
.. New line
.. |br| raw:: html
IDL
---
`Click here `_ for some example idl scripts.
Contact Robert Hager for more information.
MATLAB
------
To read \*.bp with MATLAB, set the environment variable ``MATLABPATH`` to the directory of your ADIOS2 install.
In the MATLAB script you can import the data using the functions ``ADIOSOPEN``, ``ADIOSREAD`` and ``ADIOSCLOSE``.
.. code-block:: matlab
file = adiosopen('bp_file_path');
data = adiosread(file,'variable_path_in_bp_file');
adiosclose(file);
% do something with data
Here are instructions for specific machines.
Cori
~~~~
.. code-block:: bash
module swap PrgEnv-intel PrgEnv-gnu
module load matlab/R2020b
module use -a /project/projectdirs/m499/Software/modulefiles
module load adios2/DEFAULT-nompi
LD_PRELOAD=/opt/gcc/11.2.0/snos/lib64/libstdc++.so.6 matlab
Perlmutter
~~~~~~~~~~
.. code-block:: bash
ml PrgEnv-gnu
ml matlab/R2021b
module use -a /global/cfs/cdirs/m499/perlmutter/gcc/modulefiles
ml adios2/devel-nompi
LD_PRELOAD=/opt/cray/pe/gcc/11.2.0/snos/lib64/libstdc++.so matlab
Stellar
~~~~~~~
.. code-block:: bash
module use -a /home/jongc/sw/modulefiles
module load adios2-nompi/devel
module load matlab/R2022b
matlab
Example scripts (to come?)
~~~~~~~~~~~~~~~~~~~~~~~~~~
.. ^^^^^^^^^^^^^^^^^^^^^^^^^^
.. """"""""""""""""""""""""""
Python
------
To read \*.bp with Python you can either set up a Conda environment with ADIOS2 |br|
(example on Cori NERSC)
.. code-block:: bash
module load python
conda init
conda create --name adios2env python=3.7
conda activate adios2env
conda install -c conda-forge numpy scipy matplotlib adios2
python
>>> import adios2
or you need an ADIOS2 install configured with the flag ``-DADIOS2_USE_Python=ON``.
This ADIOS2 setting typically only works with the GNU compiler, so if you run XGC with ADIOS2 built using another compiler you may have to make a separate build of ADIOS2 for reading in Python.
To read ADIOS2 data in Python you can set the environment variable ``PYTHONPATH`` and use import.
.. code-block:: bash
export PYTHONPATH=/PATH_TO_INSTALL/adios2
.. code-block:: python
import adios2
However, if you have separate ADIOS2 installs for running XGC and reading ADIOS2 data in Python there can be a conflict.
The following works on Traverse where XGC is built with the nvhpc (NVIDIA) Compiler and we have a separate ADIOS2 build with the GNU compiler for Python.
.. code-block:: python
import os
if os.environ['XGC_PLATFORM'].lower() == 'traverse':
from ctypes import *
cdll.LoadLibrary("PATH_TO_INSTALL/adios2-gcc/lib64/libadios2_core.so.2")
import adios2
To read data in Python it is possible to do:
.. code-block:: python
with adios2.open("bp_file_path", "r") as fh:
data = fh.read("variable_path_in_bp_file")
The read data will typically be a Numpy array with the corresponding dimensions to the XGC variable.
However, depending on how the variable is stored in XGC it is sometimes necessary to read it by *stepping* to obtain all data:
.. code-block:: python
import numpy as np
import adios2
data_list = []
with adios2.open("bp_file_path", "r") as fh:
for fstep in fh:
data_list.append(fstep.read("variable_path_in_bp_file"))
data = np.array(data_list)
Example scripts (to come)
~~~~~~~~~~~~~~~~~~~~~~~~~
.. ^^^^^^^^^^^^^^^^^^^^^^^^^
.. """""""""""""""""""""""""
Scripts?
Jupyter Notebooks?
.. toctree::
:maxdepth: 1