.. _GettingStarted ############### Getting Started ############### .. _Requirements Requirements ============ .. toctree:: Requirements In addition to the other requirements for running FLASH you will need a C++ compiler, `CMake `_ and the `pybind11 library `_. Because **pyFlash** is linked directly agains the Fortran FLASH source it is important that all C/C++ & Fortran compilers are from the same vendor. Particularly on MacOs the default system compiler for C/C++ is Clang, but doesn't support Fortran. .. note:: **pyFlash** requires Python >= 3.9 CMake ----- Building FLASH with the python bindings is only supported through CMake. Like with the GNU Make building of FLASH, the CMake configuration supports a site specific configuration file ``site.cmake`` that gets imported by CMake analagous to the ``Makefile.h``. Often times CMake can succesfully find all the needed libraries, but we provide library specific directories that can be set to help hint CMake to their location. In addition any other configurations you want to pass to CMake can be specified here. .. code-block:: cmake :caption: sites/mySite/site.cmake # look for packages. Not necessary, but can help if CMake is struggling to find the libraries set(PYBIND11_DIR "/opt/homebrew/lib/python3.11/site-packages/pybind11") set(MPI_DIR "/usr/local/flash-deps/openMPI") set(HDF5_DIR "/usr/local/flash-deps/hdf5") set(HYPRE_DIR "/usr/local/flash-deps/hypre") # specify compilers set(CMAKE_Fortran_COMPILER ${MPI_DIR}/bin/mpif90) set(CMAKE_C_COMPILER ${MPI_DIR}/bin/mpicc) set(CMAKE_CXX_COMPILER ${MPI_DIR}/bin/mpicxx) #compiler flags set(FFLAGS "-ffree-line-length-0 -fdefault-real-8 -fdefault-double-8 -fallow-argument-mismatch") set(CFLAGS "") set(CXXFLAGS "") .. note:: `Setup` will automatically generate a `CMakeLists.txt` that looks for and links against all the necessary files for your simulation pybind11 -------- .. toctree:: pybind11 `Pybind11 `_ can be installed using ``pip`` or ``conda``. .. code-block:: pip install pybind11 conda install pybind11 .. tip:: If CMake has trouble finding pybind11 you can point to the install location inside your ``site.cmake`` file with the `PYBIND11_DIR` variable. .. _setup Setup ===== .. toctree:: Setup Simulations can be setup with the python bindings by including the ``Python/PythonMain`` unit in FLASH along with enabling CMake in the setup configuration. These can both be accomplished with the setup arguments ``-python`` & ``-cmake``. Equivalently there is a setup shortcut ``+python`` that will do both. Any simulation may be set up with ``+python`` and enables the use of the :ref:`python parfiles `. .. _old setup: .. code-block:: bash :caption: Two equivalent setups ./setup Sedov -auto -2d +uhd +pm4dev +python ./setup Sedov -auto -2d +uhd +pm4dev -python -cmake Similarly to previous iterations of FLASH's setup script this will pull all the source code links into ``object/source``. The code is compiled by telling ``cmake`` where the ``object`` directory exists. A typical pattern is .. code-block:: bash cd object mkdir build cd build cmake .. make .. tip:: With CMake FLASH doesn't have to be built in the ojbect directory. You could also specify ``cmake /path/to/object``. Because the python unit builds and additional python package and links the FLASH executable against that library it can be more cumbersome to move the executable around in the file system. .. _parfiles Parfile ======= .. toctree:: Parfile Including the `Python` unit in a simulation enables the use of the ``flashPar.py`` script, bot in setup and for setting runtime parameters. To pass setup arguments to ``setup`` you must specify a function ``setupArgs()`` that returns a list of setup arguments: .. code-block:: python :caption: source/Simulation/SimulationMain/Sedov/flashPar.py def setupArgs(): args = [ "-auto", "-2d", "+uhd", "+pm4dev", "+python" ] return args The above would allow the same setup as :ref:`above ` with just .. _new setup .. code-block:: bash ./setup Sedov .. tip:: command line setup arguments can still be combined with those from ``setupArgs``. For example to put the setup into a named object directory: .. code-block:: bash ./setup Sedov -objdir=sedov Runtime parameters can be set in ``flashPar.py`` by defining a function ``parms()``. Runtime parameters are then set by using either the APIs in the :ref:`flash.parm` module. `setup` will populate that module with all the available parameters for your simulation. .. code-block:: python :caption: Simulation/SimulationMain/Sedov/flashPar.py def parms(): import flash.parm as p p.sim_pAmbient(1.E-5) p.sim_rhoAmbient(1.) p.sim_expEnergy(1.) p.sim_rInit(0.013671875) p.sim_xctr(0.5) p.sim_yctr(0.5) p.sim_zctr(0.5) .. tip:: Unlike with the ``flash.par`` input any valid python expressions can be used inside ``flashPar.py`` .. tip:: You can convert your ``flash.par`` definitions with this ``sed`` command: .. code-block:: bash sed -r 's/^\s*(#\s*)?([^#]\S*)\s*=\s*(\".*\")?(\S*)?\s*(#.*$)?/\1p.\2\(\3\4\) \5/' flash.par | sed -r 's/\.true\./True/I' | sed -r 's/\.false\./False/I' > flashPar.py You'll still have to format this int the ``parms()`` function and ``import flash.parm as p``