name: Grid and Mesh Solver on: [push] env: PETSC_VERSION: '3.18.4' HOMEBREW_NO_ANALYTICS: 'ON' # Make Homebrew installation a little quicker HOMEBREW_NO_AUTO_UPDATE: 'ON' HOMEBREW_NO_BOTTLE_SOURCE_FALLBACK: 'ON' HOMEBREW_NO_GITHUB_API: 'ON' HOMEBREW_NO_INSTALL_CLEANUP: 'ON' jobs: gcc_ubuntu: runs-on: ubuntu-22.04 strategy: matrix: gcc_v: [9, 10, 11, 12] fail-fast: false env: GCC_V: ${{ matrix.gcc_v }} steps: - uses: actions/checkout@v3 - name: GCC - Install run: | sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt-get update sudo apt-get install -y gcc-${GCC_V} gfortran-${GCC_V} g++-${GCC_V} sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-${GCC_V} 100 \ --slave /usr/bin/gfortran gfortran /usr/bin/gfortran-${GCC_V} \ --slave /usr/bin/g++ g++ /usr/bin/g++-${GCC_V} \ --slave /usr/bin/gcov gcov /usr/bin/gcov-${GCC_V} - name: PETSc - Cache download id: petsc-download uses: actions/cache@v3 with: path: download key: petsc-${{ env.PETSC_VERSION }}.tar.gz - name: PETSc - Download if: steps.petsc-download.outputs.cache-hit != 'true' run: | wget -q https://ftp.mcs.anl.gov/pub/petsc/release-snapshots/petsc-${PETSC_VERSION}.tar.gz -P download - name: PETSc - Prepare run: | tar -xf download/petsc-${PETSC_VERSION}.tar.gz -C . export PETSC_DIR=${PWD}/petsc-${PETSC_VERSION} export PETSC_ARCH=gcc${GCC_V} printenv >> $GITHUB_ENV - name: PETSc - Cache Installation id: petsc-install uses: actions/cache@v3 with: path: petsc-${{ env.PETSC_VERSION }} key: petsc-${{ env.PETSC_VERSION }}-gcc${{ matrix.gcc_v }}-${{ hashFiles('**/petscversion.h') }} - name: PETSc - Installation run: | cd petsc-${PETSC_VERSION} ./configure --with-fc=gfortran --with-cc=gcc --with-cxx=g++ \ --download-openmpi --download-fftw --download-hdf5 --download-hdf5-fortran-bindings=1 --download-zlib \ --with-mpi-f90module-visibility=1 make all - name: DAMASK - Compile run: | cmake -B build/grid -DDAMASK_SOLVER=grid -DCMAKE_INSTALL_PREFIX=${PWD} cmake --build build/grid --parallel cmake --install build/grid cmake -B build/mesh -DDAMASK_SOLVER=mesh -DCMAKE_INSTALL_PREFIX=${PWD} cmake --build build/mesh --parallel cmake --install build/mesh - name: DAMASK - Run run: | ./bin/DAMASK_grid -l tensionX.yaml -g 20grains16x16x16.vti -m material.yaml -w examples/grid ./bin/DAMASK_mesh -h intel: runs-on: [ubuntu-22.04] strategy: matrix: intel_v: [classic, llvm] # Variant of Intel compilers fail-fast: false env: INTEL_V: ${{ matrix.intel_v }} steps: - uses: actions/checkout@v3 - name: Intel - Install run: | wget -q https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS-2023.PUB sudo apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS-2023.PUB rm GPG-PUB-KEY-INTEL-SW-PRODUCTS-2023.PUB echo "deb https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list sudo apt-get update sudo apt-get install \ intel-basekit \ intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic intel-oneapi-compiler-fortran \ intel-oneapi-openmp intel-oneapi-mkl-devel source /opt/intel/oneapi/setvars.sh printenv >> $GITHUB_ENV - name: PETSc - Cache download id: petsc-download uses: actions/cache@v3 with: path: download key: petsc-${{ env.PETSC_VERSION }}.tar.gz - name: PETSc - Download if: steps.petsc-download.outputs.cache-hit != 'true' run: | wget -q https://ftp.mcs.anl.gov/pub/petsc/release-snapshots/petsc-${PETSC_VERSION}.tar.gz -P download - name: PETSc - Prepare run: | tar -xf download/petsc-${PETSC_VERSION}.tar.gz -C . sed -i "1719s/if not os.path.isfile(os.path.join(self.packageDir,'configure')):/if True:/g" \ ./petsc-${PETSC_VERSION}/config/BuildSystem/config/package.py export PETSC_DIR=${PWD}/petsc-${PETSC_VERSION} export PETSC_ARCH=intel-${INTEL_V} printenv >> $GITHUB_ENV - name: PETSc - Cache installation id: petsc-install uses: actions/cache@v3 with: path: petsc-${{ env.PETSC_VERSION }} key: petsc-${{ env.PETSC_VERSION }}-intel-${{ matrix.intel_v }}-${{ hashFiles('**/petscversion.h') }} - name: PETSc - Install (classic) if: contains( matrix.intel_v, 'classic') run: | cd petsc-${PETSC_VERSION} ./configure \ --with-fc='mpiifort -fc=ifort -diag-disable=10441' \ --with-cc='mpiicc -cc=icc -diag-disable=10441' \ --with-cxx='mpiicpc -cxx=icpc -diag-disable=10441' \ --download-fftw --download-hdf5 --download-hdf5-fortran-bindings=1 --download-zlib make all - name: PETSc - Install (LLVM) if: contains( matrix.intel_v, 'llvm') run: | cd petsc-${PETSC_VERSION} ./configure \ --with-fc='mpiifort -fc=ifx' \ --with-cc='mpiicc -cc=icx' \ --with-cxx='mpiicpc -cxx=icpx' \ --download-fftw --download-hdf5 --download-hdf5-fortran-bindings=1 --download-zlib make all - name: DAMASK - Compile if: contains( matrix.intel_v, 'classic') run: | cmake -B build/grid -DDAMASK_SOLVER=grid -DCMAKE_INSTALL_PREFIX=${PWD} cmake --build build/grid --parallel cmake --install build/grid cmake -B build/mesh -DDAMASK_SOLVER=mesh -DCMAKE_INSTALL_PREFIX=${PWD} cmake --build build/mesh --parallel cmake --install build/mesh # ifx has issue with openMP # https://community.intel.com/t5/Intel-Fortran-Compiler/ifx-ICE-and-SEGFAULT/m-p/1459877 - name: DAMASK - Compile if: contains( matrix.intel_v, 'llvm') run: | cmake -B build/grid -DDAMASK_SOLVER=grid -DCMAKE_INSTALL_PREFIX=${PWD} -DOPENMP=OFF cmake --build build/grid --parallel cmake --install build/grid cmake -B build/mesh -DDAMASK_SOLVER=mesh -DCMAKE_INSTALL_PREFIX=${PWD} -DOPENMP=OFF cmake --build build/mesh --parallel cmake --install build/mesh - name: DAMASK - Run run: | ./bin/DAMASK_grid -l tensionX.yaml -g 20grains16x16x16.vti -m material.yaml -w examples/grid ./bin/DAMASK_mesh -h