Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

REEF3D (Installation)

Le REEF3D est un cadre hydrodynamique à source ouverte pour les applications CFD à surface libre, la modélisation des vagues, le débit non hydrostatique et les applications à flux peu profond. Il est pertinent pour les cas d’ingénierie hydraulique et côtière où le débit 3D local, les structures hydrauliques, la bathymétrie complexe ou le transport des sédiments sont importants.

Cette page décrit un flux de travail pratique pour les systèmes Linux basés sur Debian, y compris Debian, Ubuntu, Linux Mint, LMDE, Lubuntu et des distributions similaires. Le flux de travail ci-dessous a été vérifié par rapport à la mise en page en amont de GitHub et a publié des informations sur 2026-06-26. Les modifications en amont sont fréquentes, donc traitez les numéros de version codés dur comme des exemples plutôt que des instructions d’installation permanentes.

Éléments d’installation

Une configuration locale typique nécessite deux exécutables:

REEF3D est parallèle à MPI et construit actuellement avec mpicxx. DIVEMesh est un dépôt séparé et construit avec g++.

Installation automatique avec script helper

Pour la plupart des installations de bureau ou de poste de travail basées sur Debian, la route la plus facile est d’utiliser le script d’aide REEF3D au lieu d’exécuter les commandes manuelles ci-dessous. Le script détecte la distribution Linux, installe les paquets système requis, télécharge les dernières versions de DIVEMesh et REEF3D de GitHub, corrige les problèmes connus de chemin Debian/Ubuntu/Mint Makefile, compile les deux programmes et crée en option un lanceur de bureau.

La version courte

Download the installer script install_reef3d.sh, then run:

chmod +x install_reef3d.sh
./install_reef3d.sh

À la fin d’une installation interactive, le script demande s’il faut créer un lanceur de bureau/menu. Répondre à Y pour la créer. Sur les systèmes non interactifs, ou si la réponse doit être fixée à l’avance, utiliser:

REEF3D_CREATE_DESKTOP=1 ./install_reef3d.sh

Par défaut, le script installe REEF3D et DIVEMesh sous :

~/opt/reef3d

Il crée également des liens symboliques dans:

~/.local/bin

Après l’installation, vérifiez que les exécutables sont visibles:

which REEF3D
which DiveMESH
REEF3D || true
DiveMESH || true

Si which REEF3D ou which DiveMESH ne retourne rien, ouvrez un nouveau terminal ou ajoutez ~/.local/bin au shell PATH:

export PATH="$HOME/.local/bin:$PATH"

Personnalisation

Un répertoire d’installation personnalisé peut être sélectionné avec --prefix:

./install_reef3d.sh --prefix "$HOME/software/reef3d"

Pour contrôler le nombre d’emplois de compilateur parallèle, utilisez -j ou --jobs:

./install_reef3d.sh -j 8

Pour forcer une reconstruction propre, utilisez :

./install_reef3d.sh --force

Pour sauter explicitement le lanceur de bureau, utilisez :

REEF3D_CREATE_DESKTOP=0 ./install_reef3d.sh

Les sections suivantes décrivent ce que le script fait en interne et sont utiles pour le dépannage des constructions échouées.

Installation étape par étape

Installer les paquets système

Mettre à jour l’index des paquets et installer la chaîne d’outils, MPI, HYPRE et Eigen:

sudo apt update
sudo apt install \
  build-essential gfortran git wget ca-certificates pkg-config dpkg-dev \
  libopenmpi-dev openmpi-bin \
  libhypre-dev libeigen3-dev

Paquets optionnels mais utiles:

sudo apt install paraview htop tree

Vérifiez que les outils importants sont visibles:

g++ --version
mpicxx --version
which mpicxx
mpirun --version

Vérifiez où Debian/Ubuntu a installé HYPRE et Eigen:

dpkg -L libhypre-dev | grep -E 'HYPRE\.h|libHYPRE\.so'
dpkg -L libeigen3-dev | grep 'Eigen/Dense' | head

Sur les systèmes Debian/Ubuntu/Mint, les en-têtes HYPRE sont généralement sous /usr/include/hypre, tandis que la bibliothèque est normalement sous un chemin multi-arch comme /usr/lib/x86_64-linux-gnu/. C’est pourquoi le fichier en amont de REEF3D Makefile a souvent besoin d’un ajustement local.

Obtenez le code source

Utilisez Git plutôt qu’une archive source aléatoire lorsque c’est possible. Le REEF3D Makefile actuel insère la branche Git et engage les métadonnées dans la compilation, de sorte qu’une commande Git évite les chaînes de version déroutantes.

mkdir -p ~/src
cd ~/src

git clone https://github.com/REEF3D/REEF3D.git
git clone https://github.com/REEF3D/DIVEMesh.git

Liste des versions REEF3D disponibles:

cd ~/src/REEF3D
git tag --sort=-v:refname | head

Pour une installation reproductible, consultez une étiquette de sortie spécifique au lieu de construire ce qui se passe sur master:

# Example only. Replace with the release tag you want to use.
git checkout 26.05

Construire DIVEMesh

DIVEMesh est séparé de REEF3D et devrait être construit en premier:

cd ~/src/DIVEMesh
make clean
make -j"$(nproc)"

L’exécutable attendu est:

ls -lh bin/DiveMESH

Si vous voulez l’exécutable disponible à l’échelle du système:

sudo install -m 755 bin/DiveMESH /usr/local/bin/DiveMESH

** Correction de ligne du compilateur DIVEMesh**

Au moment de la vérification, le fichier DIVEMesh en amont contenait:

CXX := -g++

Ce n’est pas une commande de compilateur valide sur un shell normal Debian/Ubuntu/Mint. Si votre build échoue avec un message comme -g++: command not found, corrigez la ligne:

cd ~/src/DIVEMesh
sed -i 's/^CXX := -g++/CXX := g++/' Makefile
make clean
make -j"$(nproc)"

Construire REEF3D avec les paquets système Debian/Ubuntu/Mint

En amont du REEF3D Makefile, on suppose que l’HYPRE est installé sous /usr/local/hypre et qu’il utilise le groupe Eigen de ThirdParty/eigen-3.3.8. Les paquets Debian/Ubuntu/Mint installent HYPRE ailleurs, donc ajustez le Makefile avant de compiler. Ne not collez les anciens extraits de Makefile qui fixent CXXFLAGS à -std=c++11; le Makefile actuel en amont utilise CXXFLAGS := -std=c++17 ....

À partir du répertoire source REEF3D :

cd ~/src/REEF3D
cp Makefile Makefile.orig

Corrigez les chemins HYPRE tout en gardant le réglage C++17 en amont :

python3 - <<'PY'
from pathlib import Path

p = Path("Makefile")
s = p.read_text()

s = s.replace("HYPRE_DIR := /usr/local/hypre", "HYPRE_DIR := /usr")
s = s.replace(
    "LDFLAGS := -L ${HYPRE_DIR}/lib/ -lHYPRE",
    "LIBDIR := /usr/lib/$(shell dpkg-architecture -qDEB_HOST_MULTIARCH)\nLDFLAGS := -L $(LIBDIR) -lHYPRE",
)
s = s.replace(
    "INCLUDE := -I ${HYPRE_DIR}/include -I ${EIGEN_DIR} -DEIGEN_MPL2_ONLY",
    "INCLUDE := -I /usr/include/hypre -I ${EIGEN_DIR} -DEIGEN_MPL2_ONLY",
)

p.write_text(s)
PY

Puis compilez :

make clean
make release -j"$(nproc)"

L’exécutable attendu est:

ls -lh bin/REEF3D

Pour une installation utilisateur-local, ajoutez les deux répertoires exécutables à votre chemin shell :

cat >> ~/.bashrc <<'EOF'

# REEF3D local build
export PATH="$HOME/src/REEF3D/bin:$HOME/src/DIVEMesh/bin:$PATH"
EOF

source ~/.bashrc

Ensuite, vérifiez :

which REEF3D
which DiveMESH

Alternative: construire HYPRE manuellement sous /usr/local/hypre

Le Dockerfile en amont construit OpenMPI et HYPRE à partir de la source et installe HYPRE sous /usr/local/hypre. Cela correspond plus étroitement au Makefile par défaut de REEF3D, mais il est plus envahissant sur un poste de travail.

N’utilisez le manuel /usr/local/hypre route que lorsque vous avez besoin d’une version HYPRE spécifique ou lorsque le paquet de distribution cause des problèmes de solveur/lien. Pour les postes de travail normaux Debian, Ubuntu et Mint, préférez d’abord libhypre-dev.

Essai

Avant de mettre en place un projet, lancez un petit tutoriel en amont ou un exemple à partir du répertoire REEF3D Tutorials:

cd ~/src/REEF3D/Tutorials
find . -maxdepth 2 -type f | head

Suivez les instructions envoyées avec le tutoriel sélectionné. Ne commencez pas à déboguer votre propre géométrie STL, bathymétrie, paramètres de turbulence et conditions limites avant de confirmer que le binaire fonctionne sur un petit cas en amont.

MPI lance des notes

Pour les parcours parallèles, utilisez mpirun ou mpiexec selon le tutoriel ou la configuration du cas :

mpirun -np 4 REEF3D

Ne pas exécuter les tâches MPI avec sudo. OpenMPI bloque l’exécution racine par défaut pour une raison. Le Dockerfile en amont définit les variables OMPI_ALLOW_RUN_AS_ROOT parce que les conteneurs fonctionnent souvent en tant que racine; cette solution appartient aux conteneurs, et non aux postes de travail normaux.

Dépannage

mpicxx: command not found

Installez les paquets de développement OpenMPI :

sudo apt install libopenmpi-dev openmpi-bin
which mpicxx

fatal error: HYPRE.h: No such file or directory

Le chemin HYPRE include est incorrect ou libhypre-dev manque.

sudo apt install libhypre-dev
dpkg -L libhypre-dev | grep HYPRE.h

Assurez-vous que le fichier REEF3D Makefile contient:

INCLUDE := -I /usr/include/hypre -I ${EIGEN_DIR} -DEIGEN_MPL2_ONLY

/usr/bin/ld: cannot find -lHYPRE

Le linker ne recherche pas le répertoire multi-arch de la bibliothèque Debian/Ubuntu.

dpkg -L libhypre-dev | grep libHYPRE.so
dpkg-architecture -qDEB_HOST_MULTIARCH

Assurez-vous que le fichier REEF3D Makefile contient quelque chose d’équivalent à:

LIBDIR := /usr/lib/$(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
LDFLAGS := -L $(LIBDIR) -lHYPRE

fatal error: Eigen/Dense: No such file or directory

Le REEF3D pointe normalement vers Eigen groupé:

EIGEN_DIR := ThirdParty/eigen-3.3.8

Si ce dossier manque, utilisez plutôt le chemin système Eigen :

EIGEN_DIR := /usr/include/eigen3

Reconstruction ensuite :

make clean
make release -j"$(nproc)"

La construction échoue après avoir changé de branches ou de balises

Nettoyer le répertoire de construction & #160;:

make clean
make release -j"$(nproc)"

Si cela échoue encore, restaurer le Makefile original et réappliquer seulement le patch de chemin HYPRE:

cp Makefile.orig Makefile

Binary s’écrase sur un autre ordinateur

La cible en amont release utilise -march=native. Cela peut créer des binaires optimisés pour le processeur sur lequel ils ont été compilés. Si vous compilez sur une machine et exécutez sur une autre, construire avec la cible moins agressive:

make clean
make all -j"$(nproc)"

Alternativement, modifier la cible release et supprimer -march=native avant de compiler pour un cluster avec des générations de CPU mixtes.

Vérification / enregistrement de la version

Pour la reproductibilité, enregistrez l’état/la version exact:

cd ~/src/REEF3D
git rev-parse --short HEAD
git status --short
mpicxx --version
mpirun --version
ldconfig -p | grep HYPRE || true

Conservez la balise/commit REEF3D, la version du système d’exploitation, la version du compilateur, la version MPI et le patch Makefile avec la documentation du cas de simulation.

Sources REEF3D