# DuMux 3.10 Docker container
#
# Adapted from the official DuMux Docker setup:
#   Template: https://git.iws.uni-stuttgart.de/dumux-repositories/dumux/-/tree/master/docker
#   CI images: https://git.iws.uni-stuttgart.de/dumux-repositories/dumux-docker-ci
#
# Build:
#   docker build -t dumux .
#   docker build --build-arg DUMUX_BRANCH=releases/3.10 -t dumux:3.10 .
#
# Run:
#   docker run -it --rm -v $(pwd):/dumux/shared dumux
#
FROM ubuntu:24.04

LABEL description="DuMux porous media simulator"
LABEL maintainer="runsim"
LABEL source="https://dumux.org/"

ARG DUNE_BRANCH=releases/2.10
ARG DUMUX_BRANCH=releases/3.10

ENV DEBIAN_FRONTEND=noninteractive

# Install build dependencies
RUN apt-get update \
    && apt-get install --no-install-recommends --yes \
    ca-certificates \
    git \
    pkg-config \
    cmake \
    build-essential \
    gfortran \
    python3-dev \
    mpi-default-bin \
    mpi-default-dev \
    libsuitesparse-dev \
    libsuperlu-dev \
    libboost-all-dev \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# Create dumux user (following official Docker pattern)
RUN useradd -m --home-dir /dumux dumux
USER dumux
WORKDIR /dumux

# Create shared volume
RUN mkdir /dumux/shared
VOLUME /dumux/shared

# Clone Dune core modules + localfunctions (required by DuMux)
RUN git clone -b $DUNE_BRANCH --depth 1 https://gitlab.dune-project.org/core/dune-common.git && \
    git clone -b $DUNE_BRANCH --depth 1 https://gitlab.dune-project.org/core/dune-geometry.git && \
    git clone -b $DUNE_BRANCH --depth 1 https://gitlab.dune-project.org/core/dune-grid.git && \
    git clone -b $DUNE_BRANCH --depth 1 https://gitlab.dune-project.org/core/dune-istl.git && \
    git clone -b $DUNE_BRANCH --depth 1 https://gitlab.dune-project.org/core/dune-localfunctions.git

# Clone DuMux
RUN git clone -b $DUMUX_BRANCH --depth 1 \
    https://git.iws.uni-stuttgart.de/dumux-repositories/dumux.git

# Build all modules using dunecontrol (the official Dune/DuMux build tool)
RUN ./dune-common/bin/dunecontrol --opts=./dumux/cmake.opts all

USER root

ENTRYPOINT ["/bin/bash", "-l", "-c"]
CMD ["/bin/bash", "-i"]
