============
Installation
============
This section guides you through installing **PETGEM**. You will find instructions for setting up the environment, building the code, running tests, and generating documentation. **PETGEM** supports Linux-based systems and can be run natively or via Docker for a ready-to-use environment.
Requirements
------------
Before installing **PETGEM**, ensure the following dependencies are available:
- `PETSc `_ compiled with MPI and support for complex numbers. A recommended configuration is:
.. code-block:: bash
./configure --with-cc=gcc --with-cxx=g++ --with-fc=gfortran \
--download-mpich --download-fblaslapack \
--with-scalar-type=complex --download-mumps --download-scalapack \
--download-ptscotch --download-cmake --with-debugging=1 \
--download-hdf5 --download-triangle
- `Gmsh `_
- Python 3.10+ with packages: `numpy`, `h5py`, `meshio`, `matplotlib`, `sphinx`
- `Extrae `_ for performance tracing (optional)
Docker installation
-------------------
**PETGEM** provides a ready-to-use Docker environment for easy setup:
.. code-block:: bash
# Clone the repository
git clone https://github.com/ocastilloreyes/petgem.git
cd petgem
# Build Docker image
docker build -t petgem-env -f docker/dockerfile.release .
# Run Docker
docker run --rm -it -v $(pwd):/workspace -w /workspace petgem-env
# Compile PETGEM (inside container)
make USE_EXTRAE=0
# Run a test model
gmsh tests/csem_model/mesh_p1.geo -3
python3 tests/csem_model/generate_resistivity_model.py 1
python3 tests/csem_model/generate_params_file.py 1
mpirun -n 4 build/fm.csem -options_file tests/csem_model/params_nord1.txt
python3 tests/csem_model/compare_responses.py 1
Makefile usage
--------------
**PETGEM** provides a Makefile to simplify building the code and generating documentation.
**Common makefile targets:**
.. list-table::
:header-rows: 1
* - Target
- Description
* - all
- Build the PETGEM kernels (default)
* - clean
- Remove object files and executables
* - docs
- Generate all documentation
* - clean_doc
- Clean documentation
* - help
- Show Makefile help message
**Optional build options:**
You can set optional flags when invoking `make`: `make OPTION=1`
.. list-table::
:header-rows: 1
* - Option
- Description
* - USE_INTEL=1
- Use Intel MPI compiler (`mpiicc`) instead of PETSc default
* - USE_EXTRAE=1
- Enable Extrae instrumentation for performance tracing
Python helpers
--------------
The pre- and post-processing scripts under ``utils/`` (e.g.
``utils/preprocess.py``) run directly from a clone - they add the in-tree
package to the path automatically, so no installation step is required:
.. code-block:: bash
python3 utils/preprocess.py -mode forward ...
Optionally, install the Python layer so it is importable as ``petgem`` from
your own scripts (e.g. ``import petgem; petgem.readResponses(...)``):
.. code-block:: bash
pip install -e .
This requires ``numpy``, ``meshio``, and ``petsc4py`` (already present in the
Docker image).