# How to build this Docker image: # docker build . --tag eschnett/cactus-amrex # docker push eschnett/cactus-amrex # Use Ubuntu FROM ubuntu:19.10 RUN mkdir /cactus WORKDIR /cactus # Install system packages RUN apt-get update && \ apt-get --yes --no-install-recommends install \ build-essential \ ca-certificates \ clang-7 \ flang-7 \ git \ libgsl-dev \ libhwloc-dev \ libmpich-dev \ perl \ pkg-config \ python \ python3 \ rsync \ subversion \ wget \ zlib1g-dev \ && \ rm -rf /var/lib/apt/lists/* # Install cmake # (AMReX 20.01 requires at least cmake 3.14) RUN mkdir dist && \ ( cd dist && \ wget https://github.com/Kitware/CMake/releases/download/v3.16.2/cmake-3.16.2-Linux-x86_64.tar.gz && \ tar xzf cmake-3.16.2-Linux-x86_64.tar.gz -C /usr/local --strip-components=1 && \ true ) && \ rm -rf dist # Install NSIMD # Note: This assumes that the system has x86_64 CPUs with AVX2 and FMA RUN mkdir src && \ ( cd src && \ git clone -b eschnett/storeu_masked https://github.com/eschnett/nsimd.git && \ cd nsimd && \ python3 egg/hatch.py --all --force --disable-clang-format && \ mkdir build && \ cd build && \ cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_C_COMPILER=clang-7 -DCMAKE_CXX_COMPILER=clang++-7 -DSIMD=AVX2 -DSIMD_OPTIONALS=FMA -DCMAKE_INSTALL_PREFIX=/cactus/nsimd .. && \ make -j$(nproc) && \ make -j$(nproc) install && \ true ) && \ rm -rf src # Install AMReX RUN mkdir src && \ ( cd src && \ wget https://github.com/AMReX-Codes/amrex/archive/20.01.tar.gz && \ tar xzf 20.01.tar.gz && \ cd amrex-20.01 && \ mkdir build && \ cd build && \ cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=clang-7 -DCMAKE_CXX_COMPILER=clang++-7 -DCMAKE_Fortran_COMPILER=flang-7 -DENABLE_PARTICLES=ON -DENABLE_ASSERTIONS=ON -DENABLE_BACKTRACE=ON -DENABLE_OMP=OFF -DCMAKE_INSTALL_PREFIX=/cactus/amrex .. && \ make -j$(nproc) && \ make -j$(nproc) install && \ true ) && \ rm -rf src # As documentation COPY Dockerfile /Dockerfile