================== Installation guide ================== This project uses ``cmake`` as build system. Dependencies ------------ - `MFEM `_ - `MGIS `_ A simple way to install dependencies is to rely on ``Spack`` packaging system. ``Spack`` is an open source package manager that simplifies building, installing, customizing, and sharing HPC software. It will allow you to install recent versions of compilers (that handle ``C++17``, for example gnu compiler suite version 8), and to get ``python``, ``cmake`` and other tools that are required for this project to be installed (see hereafter). Other ways to install MFEM and MGIS are available in the file ``INSTALL_ALTERNATIVES.md``. Installation Tutorial for ``MFEM-MGIS-MFront`` using Spack ---------------------------------------------------------- This tutorial provides detailed instructions on how to install ``MFEM-MGIS-MFront`` using `Spack `_. Follow the steps carefully to ensure a successful installation. Prerequisites ^^^^^^^^^^^^^ - Ensure you have ``git``, ``mpi``, ``hypre``, ``tfel``, ``mgis``, and ``mfem`` installed on your system with a recent c++ gnu compiler. - Use ``spack`` to install missing Prerequisites. Step 1: Clone the Spack Repository ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ First, clone the Spack repository from GitHub. .. code:: sh git clone --depth=2 --branch=v0.23.0 https://github.com/spack/spack.git .. note:: Install Spack outside the source directory of ``mfem-mgis`` to avoid issues with CMake. Step 2: Set Up Spack Environment ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Set up the Spack environment by configuring the ``SPACK_ROOT`` environment variable and sourcing the setup script. .. code:: sh export SPACK_ROOT=$PWD/spack source ${SPACK_ROOT}/share/spack/setup-env.sh Step 3: Detect Available Compilers ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Detect the available compilers on your system. Ensure to select a version that provides C, C++, and Fortran compilers. .. code:: sh spack compiler find If necessary, remove unwanted compilers with the command: .. code:: sh spack compiler remove Step 4: Detect External Dependencies ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Use Spack to detect already installed libraries and programs to avoid reinstalling them. .. code:: sh spack external find m4 openssl automake ncurses spack external find autoconf libtool xz gmake cmake spack external find tar tcl perl curl zlib openblas Step 5: Install MFEM-MGIS-MFront ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Change to the ``mfem-mgis`` directory, add the Spack repository, and install the package. .. code:: sh git clone https://github.com/rprat-pro/spack-repo-mfem-mgis.git spack repo add spack-repo-mfem-mgis spack install -j 8 mfem-mgis Step 6: Load the Installed Package ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Load the installed package. .. code:: sh spack load mfem-mgis Step 7: Build and Install the Project ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Create a build directory, configure the project with CMake, build it, and install. .. code:: sh mkdir build && cd build cmake .. -DCMAKE_INSTALL_PREFIX=../install make -j 4 check make install Alternative Installation Method ------------------------------- If you already have ``mfem``, ``tfel``, and ``mgis`` installed via Spack, follow these steps: Step 1: Install Required Packages ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Install the required packages using Spack. .. code:: sh spack install mfem+mpi+suite-sparse spack install tfel@master:~python~python_bindings spack install mgis@master:+c~fortran~python Step 2: Load the Installed Packages ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Load the installed packages. .. code:: sh spack load mfem spack load tfel spack load mgis spack load hypre Step 3: Set HYPRE_DIR Environment Variable ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Set the ``HYPRE_DIR`` environment variable to the installation location of ``hypre``. .. code:: sh export HYPRE_DIR=`spack location -i hypre` Step 4: Build and Install the Project ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Create a build directory, configure the project with CMake, and build it. .. code:: sh mkdir build && cd build cmake .. make -j 4 check By following these detailed instructions, you should be able to install and configure ``MFEM-MGIS-MFront`` using Spack successfully. Creating a Simple Example Based on ``mfem-mgis`` ------------------------------------------------ Upon executing the ``make install`` command during the installation process, a simple example is created in your installation directory. This example can be found in the “install/share/mfem-mgis/examples” directory. You can copy this example and the associated ``env.sh`` file to another location. The example can be compiled using either the ``cmake`` or ``make`` build systems. Step 1: Locate and Copy Example Files ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ First, locate your installation directory and copy the example and environment setup file to a new location. .. code:: sh export INSTALLDIR= cp -r ${INSTALLDIR}/share/mfem-mgis/examples/ex1 . cp ${INSTALLDIR}/share/mfem-mgis/examples/env.sh ex1/ Step 2: Set Up and Compile the Example ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Navigate to the example directory, source the environment setup file, create a build directory, and compile the example using ``cmake``. .. code:: sh cd ex1 source env.sh mkdir build cd build cmake .. make make check Step 3: Run the Example ^^^^^^^^^^^^^^^^^^^^^^^ After successfully building the example, you can run it using the following command: .. code:: sh ./UniaxialTensileTest Building in Debug Mode ---------------------- To compile the example and the ``MFront`` behavior in debug mode, use the following command: .. code:: sh make clean make DEBUG=1 By following these steps, you can successfully create, build, and run a simple example based on ``mfem-mgis``. Modify the source files as needed to develop and test your own study cases. Installation Guide on Topaze/CCRT of mfem-mgis-examples ------------------------------------------------------- This guide provides step-by-step instructions for setting up your environment on ``Topaze/CCRT`` and installing the necessary software. Follow these steps to get started. Create a new directory and useful paths ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: bash mkdir topaze-dir && cd topaze-dir export MY_DIR=$PWD export MY_LOG=YOURLOGIN export MY_DEST=/ccc/scratch/cont002/den/YOURLOGIN/mini-test Download Spack, mfem-mgis, and mfem-mgis-examples (not required) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ How to download Spack: .. code-block:: bash cd $MY_DIR git clone --depth=2 --branch=v0.23.0 https://github.com/spack/spack.git export SPACK_ROOT=$PWD/spack git clone https://github.com/thelfer/mfem-mgis.git git clone https://github.com/latug0/mfem-mgis-examples.git Before proceeding, make sure to source Spack and clear your local ``~/.spack`` repository (warning). .. code-block:: bash rm -r ~/.spack source ${SPACK_ROOT}/share/spack/setup-env.sh Create a Spack Mirror on Your Machine (Local) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Firstly, you need to get the mfem-mgis spack repository. .. code-block:: bash git clone https://github.com/rprat-pro/spack-repo-mfem-mgis.git spack repo add $PWD/spack-repo-mfem-mgis Now, you will create a ``spack`` mirror and a boostrap directory. .. code-block:: bash spack bootstrap mirror --binary-packages my_bootstrap spack mirror create -d re2c_mirror re2c@3.0 cp -r re2c_mirror/_source-cache/archive/b3/ my_bootstrap/bootstrap_cache/_source-cache/archive spack mirror create -d mirror-mfem-mgis -D mfem-mgis It’s possible that you will need some packages in your mirror, you can specify them with the following command: .. code-block:: bash spack mirror create -d mirror-mfem-mgis -D mfem-mgis zlib ca-certificates-mozilla zlib-ng util-macros pkgconf findutils libpciaccess libedit libxcrypt bison libevent numactl **Copy Data to Topaze** You’ll need to copy the following files to Topaze: - spack spack - mfem-mgis - mfem-mgis-example Create an archive for these files: .. code-block:: bash cd $MY_DIR tar cvf archive.tar.gz mfem-mgis/ mfem-mgis-examples/ mirror-mfem-mgis/ spack/ my_bootstrap/ spack-repo-mfem-mgis/ scp archive.tar.gz $MY_LOG@topaze.ccc.cea.fr:$MY_DEST/ **Load Topaze modules** Log on ``Topaze``: .. code-block:: bash ssh -Y $MY_LOG@topaze.ccc.cea.fr Load the required modules on Topaze: .. code-block:: bash module load gnu/11.1.0 module load mpi Install mfem-mgis on Topaze ^^^^^^^^^^^^^^^^^^^^^^^^^^^ Note that the installation is performed in your scratch directory, and files are automatically removed after 3 months. **Setup spack** .. code-block:: bash cd $MY_DEST tar xvf archive.tar.gz source $PWD/spack/share/spack/setup-env.sh spack bootstrap reset -y spack bootstrap add --scope=site --trust local-binaries $PWD/my_bootstrap/metadata/binaries/ spack bootstrap add --scope=site --trust local-sources $PWD/my_bootstrap/metadata/sources/ spack bootstrap disable --scope=site github-actions-v0.5 spack bootstrap disable --scope=site github-actions-v0.6 spack bootstrap disable --scope=site spack-install spack bootstrap root $PWD/spack/bootstrap spack repo add spack-repo-mfem-mgis/ spack bootstrap now spack bootstrap status **Export SPACK Variables** To use ``MFront``, you need to export some ``SPACK`` variables. Please execute the following commands: .. code-block:: bash export CC='gcc' export CXX='g++' export FC='mpifort' export OMPI_CC='gcc' export OMPI_CXX='g++' export OMPI_FC='gfortran' **Install MFEM-MGIS** .. code-block:: bash spack repo add $PWD/spack-repo-mfem-mgis spack mirror add MMM $PWD/mirror-mfem-mgis/ **Run installation** .. code-block:: bash module load gnu/12.3.0 mpi hwloc cmake spack compiler find spack external find hwloc spack external find cmake spack external find openssh spack external find openmpi spack install mfem-mgis%gcc@12.3.0 Install MFEM-MGIS-example on Topaze ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Follow these steps to install mfem-mgis-example on Topaze: .. code-block:: bash cd mfem-mgis-example mkdir build && cd build spack load mfem-mgis export MFEMMGIS_DIR=`spack location -i mfem-mgis`/share/mfem-mgis/cmake/ cmake .. make -j 10 ctest **How to run an example (ex8)** There are two ways to run an example, such as ex8: Using ccc_mprun ^^^^^^^^^^^^^^^ To run an example using ccc_mprun with 1024 processes and 1 core per process (-m access to other filesystem, -T time), execute the following command: .. code-block:: bash ccc_mprun -n 1024 -c 1 -m work,store,scratch -T 84000 -pmilan ./uniaxial-elastic Using ccc_msub ^^^^^^^^^^^^^^ Here's an example of a `run.batch` job submission file to run a VER simulation on 4096 MPI processes on the partition named milan for 84000 seconds. .. code-block:: bash #!/bin/bash #MSUB -r ver #MSUB -n 4096 #MSUB -c 1 #MSUB -T 86400 #MSUB -o ver_4096_%I.o #MSUB -e ver_4096_%I.e #MSUB -q milan #MSUB -m scratch,work module load gnu/13.2.0 mpi/openmpi/4.0.5 cmake/3.29.6 export OMP_NUM_THREADS=1 set -x ccc_mprun ./ex7 -m ../par-mesh/mesh-4096. -o 1 -r 2 --post-processing 0 Then, to submit the job: .. code-block:: bash ccc_msub run.batch Troubleshooting ^^^^^^^^^^^^^^^ If you encounter ``Spack`` errors due to missing packages, consider the following possibilities: Two possibilities: - Check if the package is already installed on Topaze by running:** .. code-block:: bash spack external find your-package If the package is found, you can use it directly. - If the package is not installed on ``Topaze``, you can add its sources to your mirror directory. If you are using an SSHFS mount, you can complete your mirror by executing the following command on your host machine: .. code-block:: bash spack mirror create -d your-mirror/ -D your-package For more questions about ``spack``, see the ``spack`` documentation.