Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Test GALAHAD with PASTIX #319

Open
wants to merge 15 commits into
base: master
Choose a base branch
from
34 changes: 33 additions & 1 deletion .github/meson/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,32 @@ runs:
wget https://github.com/JuliaBinaryWrappers/METIS_jll.jl/releases/download/METIS-v${VERSION_METIS}%2B0/METIS.v${VERSION_METIS}.$PLATFORM.tar.gz
tar -xzvf METIS.v${VERSION_METIS}.$PLATFORM.tar.gz -C deps

- name: Install PASTIX and SPM
if: inputs.int == '32' && inputs.os == 'ubuntu-latest' && inputs.compiler == 'gcc'
shell: bash
run: |
cd ..
mkdir -p deps
VERSION_SCOTCH="7.0.6"
wget https://github.com/JuliaBinaryWrappers/SCOTCH_jll.jl/releases/download/SCOTCH-v${VERSION_SCOTCH}%2B0/SCOTCH.v${VERSION_SCOTCH}.$PLATFORM.tar.gz
tar -xzvf SCOTCH.v${VERSION_SCOTCH}.$PLATFORM.tar.gz -C deps
sudo apt-get -y install libhwloc-dev
git clone https://gitlab.inria.fr/solverstack/pastix.git
cd pastix
git submodule update --init --recursive
mkdir build
cd build
cmake .. \
-DBUILD_SHARED_LIBS=ON \
-DBUILD_DOCUMENTATION=OFF \
-DCMAKE_INSTALL_PREFIX=$DEPS/deps \
-DCMAKE_BUILD_TYPE=Release \
-DPASTIX_INT64=OFF \
-DPASTIX_ORDERING_SCOTCH=ON \
-DPASTIX_ORDERING_METIS=ON
make -j4
make install

- name: Install MKL
if: inputs.os == 'ubuntu-latest' && inputs.compiler == 'intel'
shell: bash
Expand All @@ -220,6 +246,8 @@ runs:
mkdir -p ../deps/${LIBDIR}
mkdir -p ../deps/modules
mkdir -p ../CUTEst/modules
mkdir -p ../deps/include/spm
mkdir -p ../deps/include/pastix
CSTD="c99"
CPPSTD="c++11"
INT64="false"
Expand Down Expand Up @@ -290,13 +318,17 @@ runs:
-Dssids=${SSIDS} \
-Dpythoniface=${PYTHON_INTERFACE} \
-Dint64=${INT64} \
-Dquadruple=${QUADRUPLE} \
-Dquadruple=false \
-Dlibblas_path=${BLAS_PATH} \
-Dliblapack_path=${LAPACK_PATH} \
-Dlibblas=${BLAS} \
-Dliblapack=${LAPACK} \
-Dfortran_link_args=${LD_CLASSIC} \
-Dc_link_args=${LD_CLASSIC} \
-Dlibspmf_path=$DEPS/deps/${LIBDIR} \
-Dlibspmf_modules=../deps/include/spm \
-Dlibpastixf_path=$DEPS/deps/${LIBDIR} \
-Dlibpastixf_modules=../deps/include/pastix \
-Dlibsmumps=${MUMPS_SINGLE} \
-Dlibdmumps=${MUMPS_DOUBLE} \
-Dlibmumps_path=$DEPS/deps/${LIBDIR} \
Expand Down
6 changes: 4 additions & 2 deletions README.meson
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ Currently supported options with their default value:
* `-Dlibwsmp=wsmp`: WSMP library against which to link;
* `-Dlibpardiso=pardiso`: PARDISO library against which to link;
* `-Dlibspmf=spmf`: SPMF library against which to link;
* `-Dlibpastix=pastix`: PASTIX library against which to link;
* `-Dlibpastixf=pastixf`: PASTIXF library against which to link;
* `-Dlibsmumps=smumps`: Single-precision MUMPS library against which to link;
* `-Dlibdmumps=dmumps`: Double-precision MUMPS library against which to link;
* `-Dlibampl=ampl`: AMPL library against which to link;
Expand All @@ -98,13 +98,15 @@ Currently supported options with their default value:
* `-Dlibwsmp_path=[]`: additional directories to search for the WSMP library;
* `-Dlibpardiso_path=[]`: additional directories to search for the PARDISO library;
* `-Dlibspmf_path=[]`: additional directories to search for the SPMF library;
* `-Dlibpastix_path=[]`: additional directories to search for the PASTIX library;
* `-Dlibpastixf_path=[]`: additional directories to search for the PASTIXF library;
* `-Dlibmumps_path=[]`: additional directories to search for the MUMPS libraries;
* `-Dlibampl_path=[]`: additional directories to search for the AMPL library library;
* `-Dlibhwloc_path=[]`: additional directories to search for the HWLOC library;
* `-Dlibhwloc_include=[]`: additional directories to search for the HWLOC header files;
* `-Dlibhsl_modules[]`: additional directories to search for the HSL modules;
* `-Dlibcutest_modules[]`: additional directories to search for the CUTEst modules;
* `-Dlibspmf_modules=[]`: additional directories to search for the SPMF modules;
* `-Dlibpastixf_modules=[]`: additional directories to search for the PASTIXF modules;
* `-Dint64=false`: compile GALAHAD with 64-bit integer.

Non-default compilers can be selected by setting the `CC`, `CXX` and
Expand Down
2 changes: 0 additions & 2 deletions include/galahad_modules.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,7 @@
#define MKL_PARDISO_PRIVATE MKL_PARDISO_PRIVATE_64
#define MKL_PARDISO MKL_PARDISO_64
#define galahad_metis galahad_metis_64
#define spmf_interfaces spmf_interfaces_64
#define spmf_enums spmf_enums_64
#define pastixf_interfaces pastixf_interfaces_64
#define pastixf_enums pastixf_enums_64
#endif

Expand Down
45 changes: 31 additions & 14 deletions meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,8 @@ libhwloc_path = get_option('libhwloc_path')
libhwloc_include = include_directories(get_option('libhwloc_include'))
libhsl_modules = include_directories(get_option('libhsl_modules'))
libcutest_modules = include_directories(get_option('libcutest_modules'))
libspmf_modules = include_directories(get_option('libspmf_modules'))
libpastixf_modules = include_directories(get_option('libpastixf_modules'))

# Dependencies
libblas = fc.find_library(libblas_name, dirs : libblas_path, required : false)
Expand Down Expand Up @@ -245,10 +247,9 @@ galahad_c_tests = []
galahad_python_tests = []

# Folders that contain headers and Fortran modules
libgalahad_include = [include_directories('include'),
include_directories('src/dum/include'),
include_directories('src/metis/include'),
include_directories('src/ampl')] + libhsl_modules + libcutest_modules + libhwloc_include
libgalahad_include = [include_directories('include'), include_directories('src/dum/include'),
include_directories('src/metis/include'), include_directories('src/ampl')]
libgalahad_include = libgalahad_include + libhwloc_include + libhsl_modules + libcutest_modules + libspmf_modules + libpastixf_modules

if host_machine.system() == 'linux'
add_global_arguments('-DSPRAL_HAVE_SCHED_GETCPU', language : 'cpp')
Expand Down Expand Up @@ -284,47 +285,63 @@ endif

extra_args_single = ['-DREAL_32']
extra_args_double = []
extra_args_quadruple = ['-DREAL_128', '-DGALAHAD_BLAS', '-DGALAHAD_LAPACK', '-DDUMMY_QMUMPS']
extra_args_quadruple = ['-DREAL_128']

# BLAS
if not libblas.found()
extra_args_single += '-DGALAHAD_BLAS'
extra_args_double += '-DGALAHAD_BLAS'
endif
extra_args_quadruple += '-DGALAHAD_BLAS'

# LAPACK
if not liblapack.found()
extra_args_single += '-DGALAHAD_LAPACK'
extra_args_double += '-DGALAHAD_LAPACK'
endif
extra_args_quadruple += '-DGALAHAD_LAPACK'

# MUMPS
if not libsmumps.found()
extra_args_single += '-DDUMMY_SMUMPS'
endif
if not libdmumps.found()
extra_args_double += '-DDUMMY_DMUMPS'
endif
extra_args_quadruple += '-DDUMMY_QMUMPS'

# MKL PARDISO
if not (libblas_name == 'mkl_rt' or liblapack_name == 'mkl_rt')
extra_args_single += '-DDUMMY_MKL_PARDISO'
extra_args_double += '-DDUMMY_MKL_PARDISO'
extra_args_quadruple += '-DDUMMY_MKL_PARDISO'
endif
extra_args_quadruple += '-DDUMMY_MKL_PARDISO'

# PARDISO
if not libpardiso.found()
extra_args_single += '-DDUMMY_PARDISO'
extra_args_double += '-DDUMMY_PARDISO'
extra_args_quadruple += '-DDUMMY_PARDISO'
endif
if not libpastixf.found()
extra_args_quadruple += '-DDUMMY_PARDISO'

# PASTIX and SPM
if not (libspmf.found() and libpastixf.found())
extra_args_single += '-DDUMMY_PASTIXF'
extra_args_double += '-DDUMMY_PASTIXF'
extra_args_quadruple += '-DDUMMY_PASTIXF'
endif
if not libspmf.found()
extra_args_single += '-DDUMMY_SPMF'
extra_args_double += '-DDUMMY_PASTIXF'
extra_args_double += '-DDUMMY_SPMF'
extra_args_quadruple += '-DDUMMY_SPMF'
endif
extra_args_quadruple += '-DDUMMY_PASTIXF'
extra_args_quadruple += '-DDUMMY_SPMF'

# WSMP
if not libwsmp.found()
extra_args_single += '-DDUMMY_WSMP'
extra_args_double += '-DDUMMY_WSMP'
extra_args_quadruple += '-DDUMMY_WSMP'
endif
extra_args_quadruple += '-DDUMMY_WSMP'

# HSL
if not libhsl.found()
extra_args_single += '-DDUMMY_HSL'
extra_args_double += '-DDUMMY_HSL'
Expand Down
10 changes: 10 additions & 0 deletions meson_options.txt
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,16 @@ option('libcutest_modules',
value : [],
description : 'Additional directories to search for the CUTEST modules')

option('libspmf_modules',
type : 'array',
value : [],
description : 'Additional directories to search for the SPMF modules')

option('libpastixf_modules',
type : 'array',
value : [],
description : 'Additional directories to search for the PASTIXF modules')

option('int64',
type : 'boolean',
value : false,
Expand Down
16 changes: 4 additions & 12 deletions src/dum/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -13,28 +13,20 @@ if not libpardiso.found()
endif
libgalahad_quadruple_src += files('pardiso.F90')

if not libspmf.found()
libgalahad_single_src += files('spmf.F90', 'spmf_enums.F90')
libgalahad_double_src += files('spmf.F90', 'spmf_enums.F90')
if not (libpastixf.found() and libspmf.found())
libgalahad_single_src += files('spmf.F90', 'spmf_enums.F90', 'pastixf.F90', 'pastixf_enums.F90')
libgalahad_double_src += files('spmf.F90', 'spmf_enums.F90', 'pastixf.F90', 'pastixf_enums.F90')
endif
libgalahad_quadruple_src += files('spmf.F90', 'spmf_enums.F90')

if not libpastixf.found()
libgalahad_single_src += files('pastixf.F90', 'pastixf_enums.F90')
libgalahad_double_src += files('pastixf.F90', 'pastixf_enums.F90')
endif
libgalahad_quadruple_src += files('pastixf.F90', 'pastixf_enums.F90')
libgalahad_quadruple_src += files('spmf.F90', 'spmf_enums.F90', 'pastixf.F90', 'pastixf_enums.F90')

if not libsmumps.found()
libgalahad_single_src += files('mumps.F90')
galahad_headers += files('include/smumps_struc.h')
endif

if not libdmumps.found()
libgalahad_double_src += files('mumps.F90')
galahad_headers += files('include/dmumps_struc.h')
endif

libgalahad_quadruple_src += files('mumps.F90')
galahad_headers += files('include/qmumps_struc.h')

Expand Down
3 changes: 1 addition & 2 deletions src/external/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@ libgalahad_src += files('mkl_pardiso/mkl_pardiso_interface.F90',
'pastix/spmf_interfaces.F90',
'pastix/pastixf_interfaces.F90')

galahad_tests += [['mkl_pardiso', 'mkl_pardisot',
files('mkl_pardiso/mkl_pardisot.F90')],
galahad_tests += [['mkl_pardiso', 'mkl_pardisot', files('mkl_pardiso/mkl_pardisot.F90')],
['mumps', 'mumpst', files('mumps/mumpst.F90')],
['pardiso', 'pardisot', files('pardiso/pardisot.F90')],
['wsmp', 'wsmpt', files('wsmp/wsmpt.F90')],
Expand Down
25 changes: 0 additions & 25 deletions src/external/pastix/pastixf_interfaces.F90
Original file line number Diff line number Diff line change
Expand Up @@ -18,31 +18,6 @@
!> @author Selmane Lebdaoui
!> @date 2023-07-21

#ifdef INTEGER_64
#define pastixf_enums pastixf_enums_64
#define spmf_enums spmf_enums_64
#endif

#ifdef REAL_32
#ifdef INTEGER_64
#define pastixf_interfaces_precision pastixf_interfaces_single_64
#else
#define pastixf_interfaces_precision pastixf_interfaces_single
#endif
#elif REAL_128
#ifdef INTEGER_64
#define pastix_interfaces_precision pastix_interfaces_quadruple_64
#else
#define pastix_interfaces_precision pastix_interfaces_quadruple
#endif
#else
#ifdef INTEGER_64
#define pastixf_interfaces_precision pastixf_interfaces_double_64
#else
#define pastixf_interfaces_precision pastixf_interfaces_double
#endif
#endif

MODULE pastixf_interfaces_precision

INTERFACE pastixInitParam
Expand Down
24 changes: 0 additions & 24 deletions src/external/pastix/spmf_interfaces.F90
Original file line number Diff line number Diff line change
Expand Up @@ -17,30 +17,6 @@
!> @author Tony Delarue
!> @date 2023-12-06

#ifdef INTEGER_64
#define spmf_enums spmf_enums_64
#endif

#ifdef REAL_32
#ifdef INTEGER_64
#define spmf_interfaces_precision spmf_interfaces_single_64
#else
#define spmf_interfaces_precision spmf_interfaces_single
#endif
#elif REAL_128
#ifdef INTEGER_64
#define spmf_interfaces_precision spmf_interfaces_quadruple_64
#else
#define spmf_interfaces_precision spmf_interfaces_quadruple
#endif
#else
#ifdef INTEGER_64
#define spmf_interfaces_precision spmf_interfaces_double_64
#else
#define spmf_interfaces_precision spmf_interfaces_double
#endif
#endif

MODULE spmf_interfaces_precision

USE iso_c_binding, ONLY : c_float, c_double, c_ptr, &
Expand Down
Loading