Skip to content
Snippets Groups Projects
Commit 3cd7609a authored by Boman Romain's avatar Boman Romain
Browse files

update CUPyDO script

parent 43eaaf6a
Branches crutzen
Tags v3038
No related merge requests found
#!/bin/bash
# build CUPyDO and all related solvers / run ctest
#
# usage: build_CUPyDO.sh -b -j 2 : build (using 2 cores)
# build_CUPyDO.sh -b -t : build and test
# build_CUPyDO.sh -b -t -q : build and test (batch mode)
function build_CUPyDO()
# profile should be sourced if in batch mode
source ~/.profile
# bash: enable more errors
set -eu
GEOGEN_VERSION=2.0.0
SOL2_VERSION=3.2.2
MODALI_VERSION=v2.0
NATIVESOLID_VERSION=romain # v1.1
PYBEAM_VERSION=master
VLM_VERSION=v2.0
SU2_VERSION=fix_wrap_strong
PFEM3D_VERSION=v2.0.0
# WAVES_VERSION=v2.2.2 # AttributeError: module 'flow' has no attribute 'F0PsPhiInf'
WAVES_VERSION=v2.1.1
PFEM_VERSION=v1.19
METAFOR_VERSION=v3492
CUPYDO_VERSION=lacroix
# Gmsh
# https://gmsh.info/
function get_last_Gmsh()
{
# clone/build CUPyDO
if [ ! -d CUPyDO ] ; then
git clone git@github.com:ulgltas/CUPyDO.git
if [ ! -d Gmsh ] ; then
echo "Gmsh: retrieving gmsh-git-Linux64-sdk.tgz"
wget -q https://gmsh.info/bin/Linux/gmsh-git-Linux64-sdk.tgz
tar -xzf gmsh-git-Linux64-sdk.tgz
mv gmsh-git-Linux64-sdk Gmsh
rm gmsh-git-Linux64-sdk.tgz
else
echo "Gmsh: found"
fi
}
cd CUPyDO
git pull
git checkout pfem_compatibility_update
git pull
if [ -d build ] ; then
rm -rf build
# geoGen (for VLM)
# https://github.com/acrovato/geoGen
# full python
function get_geoGen()
{
if [ ! -d geoGen ] ; then
echo "geoGen: retrieving geoGen ${GEOGEN_VERSION}"
wget -q https://github.com/acrovato/geoGen/archive/refs/tags/v${GEOGEN_VERSION}.tar.gz
tar -xf v${GEOGEN_VERSION}.tar.gz
mv geoGen-${GEOGEN_VERSION} geoGen
rm v${GEOGEN_VERSION}.tar.gz
else
echo "geoGen: found"
fi
mkdir build
cd build
cmake ..
make -j 6
make install
cd ../..
}
function build_waves()
# sol2 (for PFEM3D)
# https://github.com/ThePhD/sol2
function build_sol2() #
{
# clone/build waves
if [ ! -d waves ] ; then
git clone git@gitlab.uliege.be:am-dept/waves.git
if [ ! -d sol2 ] ; then
echo "sol2: retrieving sol2 ${SOL2_VERSION}"
SOL2_INSTALL_PREFIX=`pwd`/sol2
wget -q https://github.com/ThePhD/sol2/archive/refs/tags/v${SOL2_VERSION}.tar.gz
tar -xf v${SOL2_VERSION}.tar.gz
rm v${SOL2_VERSION}.tar.gz
echo "sol2: building"
cd sol2-${SOL2_VERSION}
if [ -d build ] ; then
rm -rf build
fi
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=${SOL2_INSTALL_PREFIX} #>sol2.cmake.log
cmake --build . --target install -- -j ${NCORES} #>sol2.build.log
cd ../..
rm -rf sol2-${SOL2_VERSION}
else
echo "sol2: found"
fi
}
# modali: Modal integrator for fluid-structure computations
# https://github.com/ulgltas/modali
# full python - no build
cd waves
if [ -d build ] ; then
rm -rf build
function build_modali()
{
if [ ! -d modali ] ; then
echo "modali: cloning modali ${MODALI_VERSION}"
git -c advice.detachedHead=false \
clone --quiet \
--branch ${MODALI_VERSION} \
git@github.com:ulgltas/modali.git
else
echo "modali: already cloned"
fi
mkdir build
cd build
cmake -DUSE_PY3=OFF -C../CMake/disable-trilinos.cmake ..
make -j 6
cd ../..
}
function build_PFEM()
# NativeSolid (RBM?)
# https://github.com/ulgltas/NativeSolid
function build_NativeSolid()
{
# clone/build PFEM
if [ ! -d PFEM ] ; then
git clone git@gitlab.uliege.be:am-dept/PFEM.git
if [ ! -d NativeSolid ] ; then
echo "NativeSolid: cloning NativeSolid ${NATIVESOLID_VERSION}"
git -c advice.detachedHead=false \
clone --quiet git@github.com:ulgltas/NativeSolid.git \
--branch ${NATIVESOLID_VERSION}
else
echo "NativeSolid: already cloned"
fi
cd PFEM
git pull
git checkout reorganize_schemes_and_algos
git pull
if [ -d build ] ; then
rm -rf build
# requires lapacke/cblas
# lapacke: (sudo apt install liblapacke-dev)
# cblas/blas: (sudo apt-get install libopenblas-dev)
if [ ! -f ./NativeSolid/bin/TestCVector ] ; then
echo "NativeSolid: building"
cd NativeSolid
if [ -d build ] ; then
rm -rf build
fi
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -Wno-dev .. #>NativeSolid.cmake.log
make -j ${NCORES} #>NativeSolid.make.log
cd ../..
else
echo "NativeSolid: already built"
fi
mkdir build
cd build
cmake ..
make -j 6
cd ../..
}
# pyBeam:
# https://github.com/pyBeam/pyBeam
# requires meson/ninja: sudo apt install meson
function build_NativeSolid()
function build_pyBeam()
{
# clone/build NativeSolid
if [ ! -d NativeSolid ] ; then
git clone git@github.com:ulgltas/NativeSolid.git
if [ ! -d pyBeam ] ; then
echo "pyBeam: cloning pyBeam"
git -c advice.detachedHead=false \
clone --depth 1 --recursive \
git@github.com:pyBeam/pyBeam.git \
--branch ${PYBEAM_VERSION}
ver=$(python3 -V 2>&1 | sed 's/.* \([0-9]\).\([0-9]\).*/\1\2/')
if [ "$ver" -gt "37" ]; then
# fix meson build file for python3.8
# see https://github.com/mesonbuild/meson/issues/5629
sed -i "s/dependency('python3')/dependency('python3-embed')/g" \
pyBeam/meson.build
fi
else
echo "pyBeam: already cloned"
fi
cd NativeSolid
if [ -d build ] ; then
rm -rf build
if [ ! -f pyBeam/build/bin/pyBeam.py ] ; then
echo "pyBeam: building"
cd pyBeam
if [ -d build ] ; then
rm -rf build
fi
mkdir build
meson build --prefix=$PWD/build
ninja -C build install
cd ..
else
echo "pyBeam: already installed"
fi
mkdir build
cd build
cmake ..
make -j 6
cd ../..
}
# VLM
# https://github.com/ulgltas/VLM
function build_modali()
function build_VLM()
{
# clone modali
if [ ! -d modali ] ; then
git clone git@github.com:ulgltas/modali.git
if [ ! -d VLM ] ; then
echo "VLM: cloning VLM ${VLM_VERSION}"
git -c advice.detachedHead=false \
clone --quiet \
--branch ${VLM_VERSION} \
git@github.com:ulgltas/VLM.git
else
echo "VLM: already cloned"
fi
if [ ! -f VLM/bin/VLM ] ; then
echo "VLM: building"
cd VLM
if [ -d build ] ; then
rm -rf build
fi
mkdir build
cd build
cmake -Wno-dev -DCMAKE_BUILD_TYPE=Release -DPYTHON_WRAPPER=ON ..
make -j ${NCORES}
make install
cd ../..
else
echo "VLM: already built"
fi
}
# SU2
# https://github.com/ulgltas/SU2
function build_SU2()
{
if [ ! -d SU2 ] ; then
echo "SU2: cloning SU2"
git clone --depth 1 git@github.com:ulgltas/SU2.git \
--branch ${SU2_VERSION}
else
echo "SU2: srcs found"
fi
if [ ! -f SU2/build/bin/SU2_CFD ] ; then
echo "SU2: building"
cd SU2
export CXXFLAGS="-O3"
python3 meson.py setup build \
-Denable-pywrapper=true \
-Denable-cgns=false \
-Denable-tecio=false \
-Dwith-mpi=disabled \
-Denable-tests=false \
-Denable-autodiff=true \
--prefix=$PWD/build
./ninja -C build install
cd ..
else
echo "SU2: already installed"
fi
}
# PFEM3D
# https://github.com/ImperatorS79/PFEM3D
# sudo apt install libcgal-dev liblua5.3-dev
#
# ctest runtime: needs slpp (lua parser for python)
# https://github.com/SirAnthony/slpp
# https://pypi.org/project/SLPP/
# => sudo pip3 install slpp
function build_PFEM3D()
{
if [ ! -d PFEM3D ] ; then
echo "PFEM3D: cloning PFEM3D ${PFEM3D_VERSION}"
git -c advice.detachedHead=false \
clone --quiet \
--branch ${PFEM3D_VERSION} \
git@github.com:ImperatorS79/PFEM3D.git
else
echo "PFEM3D: already cloned"
fi
if [ ! -f PFEM3D/build/bin/pfem ] ; then
echo "PFEM3D: building"
BASE=`pwd`
export GMSH=${BASE}/Gmsh
export Sol2_DIR=${BASE}/sol2/lib/cmake/sol2/
export PATH=${GMSH}/bin:${GMSH}/lib:${PATH}
export INCLUDE=${GMSH}/include:${INCLUDE}
export LIB=${GMSH}/lib:${LIB}
cd PFEM3D
if [ -d build ] ; then
rm -rf build
fi
mkdir build
cd build
cmake -Wno-dev -DCMAKE_BUILD_TYPE=Release \
-DUSE_SWIG=1 -DBUILD_TESTING=1 ..
make -j ${NCORES}
cp ${BASE}/Gmsh/lib/libgmsh.so bin/
cd ../..
else
echo "PFEM3D: already built"
fi
}
# Waves
# https://gitlab.uliege.be/am-dept/waves
function build_waves()
{
if [ ! -d waves ] ; then
echo "waves: cloning waves ${WAVES_VERSION}"
git -c advice.detachedHead=false \
clone --quiet \
--branch ${WAVES_VERSION} \
git@gitlab.uliege.be:am-dept/waves.git
else
echo "waves: already cloned"
fi
if [ ! -f waves/build/bin/libwaves.so ] ; then
echo "waves: building"
cd waves
if [ -d build ] ; then
rm -rf build
fi
mkdir build
cd build
cmake -Wno-dev -C../CMake/disable-trilinos.cmake ..
make -j ${NCORES}
cd ../..
else
echo "waves: already built"
fi
}
# PFEM:
# https://gitlab.uliege.be/am-dept/PFEM
function build_PFEM()
{
if [ ! -d PFEM ] ; then
echo "PFEM: cloning PFEM ${PFEM_VERSION}"
git -c advice.detachedHead=false \
clone --quiet \
--branch ${PFEM_VERSION} \
git@gitlab.uliege.be:am-dept/PFEM.git
else
echo "PFEM: already cloned"
fi
if [ ! -f PFEM/build/bin/libpfem.so ] ; then
echo "PFEM: building"
cd PFEM
if [ -d build ] ; then
rm -rf build
fi
mkdir build
cd build
cmake -Wno-dev ..
make -j ${NCORES}
cd ../..
else
echo "PFEM: already built"
fi
}
# Metafor
function build_Metafor()
{
if [ ! -d Metafor ] ; then
......@@ -98,86 +358,168 @@ function build_Metafor()
# clone
if [ ! -d linuxbin ] ; then
echo "Metafor/linuxbin: cloning linuxbin"
git clone git@gitlab.uliege.be:am-dept/linuxbin.git
fi
else
echo "Metafor/linuxbin: already cloned"
fi
if [ ! -d oo_meta ] ; then
git clone --depth=10 git@gitlab.uliege.be:am-dept/MN2L/oo_meta.git
echo "Metafor/oo_meta: cloning oo_meta ${METAFOR_VERSION}"
git -c advice.detachedHead=false \
clone --recursive --depth=1 \
--branch ${METAFOR_VERSION} \
git@gitlab.uliege.be:am-dept/MN2L/oo_meta.git
else
echo "Metafor/oo_meta: already cloned"
fi
# build
if [ -d oo_metaB ] ; then
rm -rf oo_metaB
if [ ! -f oo_metaB/bin/Metafor ] ; then
echo "Metafor/oo_meta: building"
if [ -d oo_metaB ] ; then
rm -rf oo_metaB
fi
mkdir oo_metaB
cd oo_metaB
cmake -Wno-dev -C ../oo_meta/CMake/ubuntu-CUPyDO.cmake ../oo_meta
make -j ${NCORES}
cd ..
else
echo "Metafor/oo_meta: already built"
fi
mkdir oo_metaB
cd oo_metaB
cmake -C ../oo_meta/CMake/ubuntu-CUPyDO.cmake ../oo_meta
make -j 12
cd ../..
cd ..
}
function build_SU2()
function build_CUPyDO()
{
# clone/build SU2
if [ ! -d SU2.src ] ; then
mkdir SU2.src
if [ ! -d CUPyDO ] ; then
echo "CUPyDO: cloning CUPyDO ${CUPYDO_VERSION}"
git clone --branch ${CUPYDO_VERSION} \
git@github.com:ulgltas/CUPyDO.git
else
echo "CUPyDO: already cloned"
fi
cd SU2.src
if [ ! -d SU2 ] ; then
git clone git@github.com:su2code/SU2.git
if [ ! -f CUPyDO/ccupydo/_CCupydo.so ] ; then
echo "CUPyDO: building"
cd CUPyDO
if [ -d build ] ; then
rm -rf build
fi
mkdir build
cd build
cmake -Wno-dev -DWITH_MPI=OFF ..
make -j ${NCORES}
make install
cd ../..
else
echo "CUPyDO: already built"
fi
cd SU2
git checkout tags/v6.2.0
unset MKLROOT # <= MKL should be disabled
./bootstrap
./configure --prefix=`readlink -f ../../SU2` \
CXXFLAGS="-O3" \
--enable-PY_WRAPPER
make -j 12
make install
cd ../..
}
function build_VLM()
function do_build()
{
# clone/build VLM
if [ ! -d VLM ] ; then
git clone git@github.com:ulgltas/VLM.git
# create CUPyDO main folder
if [ ! -d CUPyDO ] ; then
mkdir CUPyDO
fi
cd VLM
cd CUPyDO
if [ -d build ] ; then
rm -rf build
fi
mkdir build
cd build
cmake ..
make -j 6
# build codes
get_last_Gmsh
get_geoGen
build_sol2
build_modali
build_NativeSolid
build_pyBeam
build_VLM
build_SU2
build_PFEM3D
build_waves
build_PFEM
build_Metafor
build_CUPyDO
make install # is it required?
cd ../..
# leave CUPyDO main folder
cd ..
}
function do_tests()
{
echo "do_tests()..."
cd CUPyDO
cd CUPyDO/build
ctest -j ${NCORES} #2>&1 > ctest_stdout.txt
# output the last lines to stdout (useful for shortening mails)
#tail -n 50 ctest_stdout.txt
cd ../../..
echo "done."
}
# create CUPyDO main folder
if [ ! -d CUPyDO ] ; then
mkdir CUPyDO
fi
cd CUPyDO
function usage()
{
echo "usage: $0 -b -j 2 : build (using 2 cores)"
echo " $0 -b -t : build and test"
echo " $0 -b -t -q : build and test (batch mode)"
exit 1
}
# build codes
function go_batch()
{
CMD_TXT="$0 -j ${NCORES}"
if [ "$DO_BUILD" = true ] ; then
CMD_TXT="$CMD_TXT -b"
fi
if [ "$DO_TESTS" = true ] ; then
CMD_TXT="$CMD_TXT -t"
fi
echo "starting script in batch mode:"
echo " $CMD_TXT"
echo $CMD_TXT | at now -m
exit 0
}
NCORES=`nproc --all`
RUNBATCH=false
DO_BUILD=false
DO_TESTS=false
DISPLAY_USAGE=true
build_CUPyDO
build_waves
build_PFEM
build_Metafor
build_SU2
build_modali
build_NativeSolid
build_VLM
# -- args
while getopts "j:hbtq" option
do
case $option in
j )
NCORES=$OPTARG ;;
h )
usage ;;
q )
RUNBATCH=true ;;
b )
DO_BUILD=true ;
DISPLAY_USAGE=false ;;
t )
DO_TESTS=true ;
DISPLAY_USAGE=false ;;
* )
echo "[getopts] Bad option: $option" ; exit 1 ;;
esac
done
shift $(($OPTIND - 1))
# leave CUPyDO main folder
cd ..
if [ "$RUNBATCH" = true ] ; then
go_batch
else
if [ "$DISPLAY_USAGE" = true ] ; then
usage
fi
if [ "$DO_BUILD" = true ] ; then
do_build
fi
if [ "$DO_TESTS" = true ] ; then
do_tests
fi
fi
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment