mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-27 13:45:36 -04:00
Merge pull request #1 from AI-Pranto-1/adding_libmesh_to_docker
Docker with LIBMESH support
This commit is contained in:
commit
3039f9c969
3 changed files with 228 additions and 139 deletions
36
.github/workflows/dockerhub-publish-develop-libmesh.yml
vendored
Normal file
36
.github/workflows/dockerhub-publish-develop-libmesh.yml
vendored
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
name: dockerhub-publish-develop-libmesh
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: develop
|
||||
|
||||
jobs:
|
||||
main:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
-
|
||||
name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v1
|
||||
-
|
||||
name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v1
|
||||
-
|
||||
name: Login to DockerHub
|
||||
uses: docker/login-action@v1
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
-
|
||||
name: Build and push
|
||||
id: docker_build
|
||||
uses: docker/build-push-action@v2
|
||||
with:
|
||||
push: true
|
||||
tags: openmc/openmc:develop-dagmc
|
||||
build-args: |
|
||||
include_libmesh=true
|
||||
compile_cores=2
|
||||
openmc_branch=develop
|
||||
-
|
||||
name: Image digest
|
||||
run: echo ${{ steps.docker_build.outputs.digest }}
|
||||
35
.github/workflows/dockerhub-publish-libmesh.yml
vendored
Normal file
35
.github/workflows/dockerhub-publish-libmesh.yml
vendored
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
name: dockerhub-publish-latest-libmesh
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: master
|
||||
|
||||
jobs:
|
||||
main:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
-
|
||||
name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v1
|
||||
-
|
||||
name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v1
|
||||
-
|
||||
name: Login to DockerHub
|
||||
uses: docker/login-action@v1
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
-
|
||||
name: Build and push
|
||||
id: docker_build
|
||||
uses: docker/build-push-action@v2
|
||||
with:
|
||||
push: true
|
||||
tags: openmc/openmc:latest-libmesh
|
||||
build-args: |
|
||||
include_libmesh=true
|
||||
compile_cores=2
|
||||
-
|
||||
name: Image digest
|
||||
run: echo ${{ steps.docker_build.outputs.digest }}
|
||||
296
Dockerfile
296
Dockerfile
|
|
@ -1,168 +1,186 @@
|
|||
# To build with OpenMC
|
||||
# To build with OpenMC and by default this Dockerfile builds the master branch of OpenMC.
|
||||
# docker build -t openmc .
|
||||
|
||||
# To build with the develop branch of OpenMC
|
||||
# docker build -t openmc --build-arg openmc_branch=develop.
|
||||
# To build with OpenMC develop branch
|
||||
# docker build -t openmc_develop --build-arg OPENMC_BRANCH=develop .
|
||||
|
||||
# To build with OpenMC and DAGMC enabled
|
||||
# docker build -t openmc_dagmc --build-arg include_dagmc=true .
|
||||
# docker build -t openmc_dagmc --build-arg include_dagmc=true --build-arg compile_cores=4 .
|
||||
|
||||
# To make use of multiple cores during the compile stages of the docker build
|
||||
# docker build -t openmc_dagmc --build-arg compile_cores=8 .
|
||||
# To build with OpenMC and Libmesh support
|
||||
# docker build -t openmc_libmesh --build-arg include_libmesh=true --build-arg compile_cores=4 .
|
||||
|
||||
# sudo docker run image_name:tag_name or ID with no tag sudo docker run ID number
|
||||
|
||||
FROM ubuntu:latest
|
||||
|
||||
# By default this Dockerfile builds the main branch of OpenMC
|
||||
ARG openmc_branch=main
|
||||
|
||||
# By default this Dockerfile builds OpenMC without dagmc
|
||||
# By default this Dockerfile builds OpenMC without DAGMC and LIBMESH support
|
||||
ARG include_dagmc=false
|
||||
ARG include_libmesh=false
|
||||
|
||||
# By default one core is used to compile
|
||||
ARG compile_cores=1
|
||||
ARG compile_cores=2
|
||||
|
||||
# OpenMC variables
|
||||
ARG OPENMC_BRANCH=master
|
||||
ENV OPENMC_REPO='https://github.com/openmc-dev/openmc'
|
||||
|
||||
# Embree variables
|
||||
ENV EMBREE_TAG='v3.12.2'
|
||||
ENV EMBREE_REPO='https://github.com/embree/embree'
|
||||
ENV EMBREE_INSTALL_DIR=$HOME/EMBREE/
|
||||
|
||||
# MOAB variables
|
||||
ENV MOAB_BRANCH='master'
|
||||
ENV MOAB_REPO='https://bitbucket.org/fathomteam/moab/'
|
||||
|
||||
# Double-Down variables
|
||||
ENV DD_BRANCH='main'
|
||||
ENV DD_REPO=' https://github.com/pshriwise/double-down'
|
||||
ENV DD_INSTALL_DIR=$HOME/Double_down
|
||||
|
||||
# DAGMC variables
|
||||
ENV DAGMC_TAG='3.2.0'
|
||||
ENV DAGMC_REPO='https://github.com/svalinn/DAGMC'
|
||||
ENV DAGMC_INSTALL_DIR=$HOME/DAGMC/
|
||||
|
||||
# LIBMESH variables
|
||||
ENV LIBMESH_TAG='v1.6.0'
|
||||
ENV LIBMESH_REPO='https://github.com/libMesh/libmesh'
|
||||
ENV LIBMESH_INSTALL_DIR=$HOME/LIBMESH
|
||||
|
||||
# Setup environment variables for Docker image
|
||||
ENV CC=/usr/bin/mpicc CXX=/usr/bin/mpicxx \
|
||||
PATH=/opt/openmc/bin:/opt/NJOY2016/build:$PATH \
|
||||
LD_LIBRARY_PATH=/opt/openmc/lib:$LD_LIBRARY_PATH \
|
||||
LD_LIBRARY_PATH=${DAGMC_INSTALL_DIR}/lib:$LD_LIBRARY_PATH \
|
||||
OPENMC_CROSS_SECTIONS=/root/nndc_hdf5/cross_sections.xml \
|
||||
OPENMC_ENDF_DATA=/root/endf-b-vii.1 \
|
||||
DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
# Install dependencies from Debian package manager
|
||||
# Install and update dependencies from Debian package manager
|
||||
RUN apt-get update -y && \
|
||||
apt-get upgrade -y && \
|
||||
apt-get install -y \
|
||||
python3-pip python-is-python3 wget git gfortran g++ cmake \
|
||||
python3-pip python-is-python3 wget git build-essential cmake \
|
||||
mpich libmpich-dev libhdf5-serial-dev libhdf5-mpich-dev \
|
||||
imagemagick m4 && \
|
||||
apt-get autoremove
|
||||
imagemagick && \
|
||||
apt-get autoremove -y
|
||||
|
||||
# Update system-provided pip
|
||||
RUN pip3 install --upgrade pip
|
||||
RUN pip install --upgrade pip
|
||||
|
||||
# Clone and install NJOY2016
|
||||
RUN git clone https://github.com/njoy/NJOY2016.git /opt/NJOY2016 && \
|
||||
cd /opt/NJOY2016 && \
|
||||
mkdir build && cd build && \
|
||||
cmake -Dstatic=on .. && make 2>/dev/null && make install
|
||||
RUN cd $HOME && git clone --depth 1 https://github.com/njoy/NJOY2016.git && \
|
||||
cd NJOY2016 && mkdir build && cd build && \
|
||||
cmake -Dstatic=on .. && make 2>/dev/null -j${compile_cores} install ; \
|
||||
rm -rf $HOME/NJOY2016
|
||||
|
||||
# Clone and install libmesh
|
||||
RUN mkdir libmesh ; \
|
||||
cd libmesh ; \
|
||||
git clone --single-branch --shallow-submodules --recurse-submodules --branch v1.6.0 --depth 1 https://github.com/libMesh/libmesh.git ; \
|
||||
mkdir build ; \
|
||||
cd build ; \
|
||||
../libmesh/configure --prefix=/opt/libmesh --enable-exodus --disable-netcdf-4 --disable-eigen --disable-lapack --disable-mpi ; \
|
||||
make -j"$compile_cores" ; \
|
||||
make -j"$compile_cores" install
|
||||
|
||||
# Clone and install OpenMC without DAGMC
|
||||
RUN if [ "$include_dagmc" = "false" ] ; \
|
||||
then git clone --shallow-submodules --recurse-submodules --branch "$openmc_branch" --depth=1 https://github.com/openmc-dev/openmc.git /opt/openmc ; \
|
||||
cd /opt/openmc ; \
|
||||
mkdir -p build ; \
|
||||
cd build ; \
|
||||
cmake -Doptimize=on \
|
||||
-DHDF5_PREFER_PARALLEL=on .. \
|
||||
-DCMAKE_PREFIX_PATH=/opt/libmesh/ ; \
|
||||
make -j"$compile_cores" ; \
|
||||
make -j"$compile_cores" install ; \
|
||||
cd .. ; \
|
||||
pip install -e .[test] ; \
|
||||
fi
|
||||
|
||||
# install addition packages required for DAGMC
|
||||
RUN if [ "$include_dagmc" = "true" ] ; \
|
||||
then apt-get --yes install libeigen3-dev ; \
|
||||
apt-get --yes install libnetcdf-dev ; \
|
||||
apt-get --yes install libtbb-dev ; \
|
||||
apt-get --yes install libglfw3-dev ; \
|
||||
fi
|
||||
|
||||
# Clone and install Embree
|
||||
RUN if [ "$include_dagmc" = "true" ] ; \
|
||||
then git clone --single-branch --branch v3.12.2 --depth 1 https://github.com/embree/embree.git ; \
|
||||
cd embree ; \
|
||||
mkdir build ; \
|
||||
cd build ; \
|
||||
cmake .. -DCMAKE_INSTALL_PREFIX=.. \
|
||||
-DEMBREE_ISPC_SUPPORT=OFF ; \
|
||||
make -j"$compile_cores" ; \
|
||||
make -j"$compile_cores" install ; \
|
||||
fi
|
||||
|
||||
# Clone and install MOAB
|
||||
RUN if [ "$include_dagmc" = "true" ] ; \
|
||||
then pip install --upgrade numpy cython ; \
|
||||
mkdir MOAB ; \
|
||||
cd MOAB ; \
|
||||
mkdir build ; \
|
||||
git clone --single-branch --branch 5.2.1 --depth 1 https://bitbucket.org/fathomteam/moab.git ; \
|
||||
cd build ; \
|
||||
cmake ../moab -DENABLE_HDF5=ON \
|
||||
-DENABLE_NETCDF=ON \
|
||||
-DBUILD_SHARED_LIBS=OFF \
|
||||
-DENABLE_FORTRAN=OFF \
|
||||
-DENABLE_BLASLAPACK=OFF ; \
|
||||
make -j"$compile_cores" ; \
|
||||
make -j"$compile_cores" install ; \
|
||||
rm -rf * ; \
|
||||
cmake ../moab -DBUILD_SHARED_LIBS=ON \
|
||||
-DENABLE_HDF5=ON \
|
||||
-DENABLE_PYMOAB=ON \
|
||||
-DENABLE_FORTRAN=OFF \
|
||||
-DENABLE_BLASLAPACK=OFF ; \
|
||||
make -j"$compile_cores" ; \
|
||||
make -j"$compile_cores" install ; \
|
||||
fi
|
||||
|
||||
# Clone and install Double-Down
|
||||
RUN if [ "$include_dagmc" = "true" ] ; \
|
||||
then git clone --single-branch --branch main --depth 1 https://github.com/pshriwise/double-down.git ; \
|
||||
cd double-down ; \
|
||||
mkdir build ; \
|
||||
cd build ; \
|
||||
cmake .. -DCMAKE_INSTALL_PREFIX=.. \
|
||||
-DMOAB_DIR=/usr/local \
|
||||
-DEMBREE_DIR=/embree ; \
|
||||
make -j"$compile_cores" ; \
|
||||
make -j"$compile_cores" install ; \
|
||||
fi
|
||||
|
||||
# Clone and install DAGMC
|
||||
RUN if [ "$include_dagmc" = "true" ] ; \
|
||||
then mkdir DAGMC ; \
|
||||
cd DAGMC ; \
|
||||
git clone --single-branch --branch 3.2.0 --depth 1 https://github.com/svalinn/DAGMC.git ; \
|
||||
mkdir build ; \
|
||||
cd build ; \
|
||||
cmake ../DAGMC -DBUILD_TALLY=ON \
|
||||
-DCMAKE_INSTALL_PREFIX=/DAGMC/ \
|
||||
-DMOAB_DIR=/usr/local \
|
||||
-DBUILD_STATIC_LIBS=OFF \
|
||||
-DBUILD_STATIC_EXE=OFF ; \
|
||||
make -j"$compile_cores" install ; \
|
||||
rm -rf /DAGMC/DAGMC /DAGMC/build ; \
|
||||
fi
|
||||
|
||||
# Clone and install OpenMC with DAGMC
|
||||
RUN if [ "$include_dagmc" = "true" ] ; \
|
||||
then git clone --shallow-submodules --recurse-submodules --branch "$openmc_branch" --depth=1 https://github.com/openmc-dev/openmc.git /opt/openmc ; \
|
||||
cd /opt/openmc ; \
|
||||
mkdir build ; \
|
||||
cd build ; \
|
||||
cmake -Doptimize=on \
|
||||
-Ddagmc=ON \
|
||||
-Dlibmesh=ON \
|
||||
-DCMAKE_PREFIX_PATH=/opt/libmesh/ \
|
||||
-DDAGMC_DIR=/DAGMC/ \
|
||||
-DHDF5_PREFER_PARALLEL=on .. ; \
|
||||
make -j"$compile_cores" ; \
|
||||
make -j"$compile_cores" install ; \
|
||||
cd .. ; \
|
||||
pip install -e .[test] ; \
|
||||
fi
|
||||
RUN if [ "$include_dagmc" = "true" ]; then \
|
||||
# Install addition packages required for DAGMC
|
||||
apt-get -y install libeigen3-dev libnetcdf-dev libtbb-dev libglfw3-dev ; \
|
||||
pip install --upgrade numpy cython ; \
|
||||
# Clone and install EMBREE
|
||||
mkdir -p $HOME/EMBREE && cd $HOME/EMBREE; \
|
||||
git clone --single-branch -b ${EMBREE_TAG} --depth 1 ${EMBREE_REPO} ; \
|
||||
mkdir build && cd build; \
|
||||
cmake ../embree \
|
||||
-DCMAKE_INSTALL_PREFIX=${EMBREE_INSTALL_DIR} \
|
||||
-DEMBREE_ISPC_SUPPORT=OFF ; \
|
||||
make 2>/dev/null -j${compile_cores} install ; \
|
||||
rm -rf ${EMBREE_INSTALL_DIR}/build ${EMBREE_INSTALL_DIR}/embree ; \
|
||||
# Clone and install MOAB
|
||||
mkdir -p $HOME/MOAB && cd $HOME/MOAB ; \
|
||||
git clone --single-branch -b ${MOAB_BRANCH} --depth 1 ${MOAB_REPO} ; \
|
||||
mkdir build && cd build ; \
|
||||
cmake ../moab \
|
||||
-DENABLE_HDF5=ON \
|
||||
-DENABLE_NETCDF=ON \
|
||||
-DBUILD_SHARED_LIBS=OFF \
|
||||
-DENABLE_FORTRAN=OFF \
|
||||
-DENABLE_BLASLAPACK=OFF ; \
|
||||
make 2>/dev/null -j${compile_cores} install ; \
|
||||
cmake ../moab \
|
||||
-DENABLE_PYMOAB=ON \
|
||||
-DBUILD_SHARED_LIBS=ON \
|
||||
make 2>/dev/null -j${compile_cores} install ; \
|
||||
cd pymoab && bash install.sh; \
|
||||
python setup.py install; \
|
||||
rm -rf $HOME/MOAB ; \
|
||||
# Clone and install Double-Down
|
||||
mkdir -p $HOME/Double_down && cd $HOME/Double_down; \
|
||||
git clone --single-branch -b ${DD_BRANCH} --depth 1 ${DD_REPO} ; \
|
||||
mkdir build && cd build; \
|
||||
cmake ../double-down \
|
||||
-DCMAKE_INSTALL_PREFIX=${DD_INSTALL_DIR} \
|
||||
-DMOAB_DIR=/usr/local \
|
||||
-DEMBREE_DIR=${EMBREE_INSTALL_DIR} ; \
|
||||
make 2>/dev/null -j${compile_cores} install ; \
|
||||
rm -rf ${DD_INSTALL_DIR}/build && ${DD_INSTALL_DIR}/double-down; \
|
||||
# Clone and install DAGMC
|
||||
mkdir -p $HOME/DAGMC && cd $HOME/DAGMC; \
|
||||
git clone --single-branch -b ${DAGMC_TAG} --depth 1 ${DAGMC_REPO} ; \
|
||||
mkdir build && cd build ; \
|
||||
cmake ../DAGMC \
|
||||
-DBUILD_TALLY=ON \
|
||||
-DCMAKE_INSTALL_PREFIX=${DAGMC_INSTALL_DIR} \
|
||||
-DMOAB_DIR=/usr/local \
|
||||
-DDOUBLE_DOWN=ON \
|
||||
-DDOUBLE_DOWN_DIR=${DD_INSTALL_DIR} \
|
||||
-DCMAKE_PREFIX_PATH=${DD_INSTALL_DIR}/lib \
|
||||
-DBUILD_STATIC_LIBS=OFF \
|
||||
-DBUILD_STATIC_EXE=OFF ; \
|
||||
make 2>/dev/null -j${compile_cores} install ; \
|
||||
rm -rf ${DAGMC_INSTALL_DIR}/DAGMC ${DAGMC_INSTALL_DIR}/build ; \
|
||||
# Clone and install OpenMC with DAGMC support
|
||||
mkdir -p $HOME/OpenMC && cd $HOME/OpenMC; \
|
||||
git clone --shallow-submodules --recurse-submodules -b ${OPENMC_BRANCH} --depth=1 ${OPENMC_REPO} ; \
|
||||
mkdir build && cd build ; \
|
||||
cmake ../openmc \
|
||||
-Doptimize=on \
|
||||
-Ddagmc=ON \
|
||||
-Ddebug=on \
|
||||
-DDAGMC_DIR=${DAGMC_INSTALL_DIR} \
|
||||
-DHDF5_PREFER_PARALLEL=on ; \
|
||||
make 2>/dev/null -j${compile_cores} install ; \
|
||||
cd ../openmc && pip install -e .[test] ; \
|
||||
elif [ "$include_libmesh" = "true" ]; then \
|
||||
# Install addition packages required for LIBMESH
|
||||
apt-get -y install m4 libnetcdf-dev libpnetcdf-dev ; \
|
||||
# Install LIBMESH
|
||||
mkdir -p $HOME/LIBMESH && cd $HOME/LIBMESH; \
|
||||
git clone --shallow-submodules --recurse-submodules --single-branch -b ${LIBMESH_TAG} --depth 1 ${LIBMESH_REPO} ; \
|
||||
mkdir build && cd build; \
|
||||
../libmesh/configure \
|
||||
--prefix=${LIBMESH_INSTALL_DIR} CXX=mpicxx CC=mpicc FC=mpifort F77=mpif77 \
|
||||
--enable-exodus \
|
||||
--disable-netcdf-4 \
|
||||
--disable-eigen \
|
||||
--disable-fortran \
|
||||
--disable-lapack \
|
||||
--enable-hdf5 \
|
||||
--with-hdf5=/usr/lib/x86_64-linux-gnu/hdf5/serial/ \
|
||||
--enable-mpi; \
|
||||
make 2>/dev/null -j${compile_cores} install ; \
|
||||
rm -rf ${LIBMESH_INSTALL_DIR}/build ${LIBMESH_INSTALL_DIR}/libmesh ; \
|
||||
# Clone and install OpenMC with LIBMESH support
|
||||
mkdir -p $HOME/OpenMC && cd $HOME/OpenMC; \
|
||||
git clone --shallow-submodules --recurse-submodules -b ${OPENMC_BRANCH} --depth=1 ${OPENMC_REPO} ; \
|
||||
mkdir build && cd build ; \
|
||||
cmake ../openmc \
|
||||
-Doptimize=on \
|
||||
-Dlibmesh=on \
|
||||
-Ddebug=on \
|
||||
-DCMAKE_PREFIX_PATH=${LIBMESH_INSTALL_DIR} \
|
||||
-DHDF5_PREFER_PARALLEL=on ; \
|
||||
make 2>/dev/null -j${compile_cores} install ; \
|
||||
cd ../openmc && pip install -e .[test] ; \
|
||||
else \
|
||||
mkdir -p $HOME/OpenMC && cd $HOME/OpenMC; \
|
||||
git clone --shallow-submodules --recurse-submodules -b ${OPENMC_BRANCH} --depth=1 ${OPENMC_REPO} ; \
|
||||
mkdir build && cd build; \
|
||||
cmake -Doptimize=on -DHDF5_PREFER_PARALLEL=on ../openmc ; \
|
||||
make 2>/dev/null -j${compile_cores} install ; \
|
||||
cd ../openmc && pip install -e .[test] ; \
|
||||
fi ;
|
||||
|
||||
# Download cross sections (NNDC and WMP) and ENDF data needed by test suite
|
||||
RUN /opt/openmc/tools/ci/download-xs.sh
|
||||
RUN $HOME/OpenMC/openmc/tools/ci/download-xs.sh
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue