David Schwörer 86b481b
Name:           bout++
David Bold a057e54
Version:        5.1.0
David Bold c839acf
Release:        %autorelease
David Schwörer 86b481b
Summary:        Library for the BOUndary Turbulence simulation framework
David Schwörer 86b481b
David Schwörer 86b481b
# BOUT++ itself is LGPL, but we are linking with GPLed code, so the distributed library is GPL
David Schwörer 86b481b
License:        GPLv3+
David Schwörer 86b481b
URL:            https://boutproject.github.io/
David Schwörer 86b481b
Source0:        https://github.com/boutproject/BOUT-dev/releases/download/v%{version}/BOUT++-v%{version}.tar.gz
David Schwörer 86b481b
David Bold a057e54
# https://github.com/boutproject/BOUT-dev/pull/2742
David Bold a057e54
Patch:  0001-fmt10.patch
David Bold a057e54
David Bold a057e54
Patch:  0002-sphinx.patch
David Bold 9222e06
David Bold d8d3864
Patch:  test-timeout.patch
David Bold d8d3864
David Bold 421b526
Patch:  0004-pvode-config.patch
David Bold 421b526
David Bold 261d0e8
# https://fedoraproject.org/wiki/Changes/EncourageI686LeafRemoval
David Bold 261d0e8
ExcludeArch: %{ix86}
David Bold 261d0e8
David Schwörer 46d2cd6
%if 0%{?fedora} >= 33
36095c3
%bcond_without flexiblas
David Schwörer 7aabb6f
%else
David Schwörer 7aabb6f
%bcond_with flexiblas
David Schwörer 46d2cd6
%endif
David Schwörer 46d2cd6
David Schwörer 86b481b
# Disable tests and manual on epel < 8
David Schwörer 86b481b
%if 0%{?rhel} && 0%{?rhel} < 8
David Schwörer 86b481b
%bcond_with manual
David Schwörer 86b481b
%bcond_with test
David Schwörer 46d2cd6
%bcond_with sundials
David Schwörer 46d2cd6
%bcond_with petsc
David Schwörer 86b481b
%else
David Schwörer 86b481b
%bcond_without manual
David Schwörer 86b481b
%bcond_without test
David Schwörer 46d2cd6
%bcond_without sundials
David Schwörer 46d2cd6
%bcond_without petsc
David Schwörer 86b481b
%endif
David Schwörer 86b481b
David Schwörer ac269ff
# Enable both mpi every where
David Schwörer 86b481b
%bcond_without mpich
David Schwörer 86b481b
%bcond_without openmpi
David Schwörer ac269ff
David Schwörer 86b481b
%if 0%{?fedora} || ( 0%{?rhel} && 0%{?rhel} > 7 )
David Schwörer 86b481b
# Use system mpark
David Schwörer 86b481b
%bcond_without system_mpark
David Schwörer 86b481b
%else
David Schwörer 86b481b
%bcond_with system_mpark
David Schwörer 86b481b
%endif
David Schwörer 86b481b
David Schwörer 86b481b
#
David Schwörer 86b481b
#           DEPENDENCIES
David Schwörer 86b481b
#
David Schwörer 86b481b
David Schwörer 86b481b
BuildRequires:  m4
David Schwörer 86b481b
BuildRequires:  zlib-devel
David Bold 9222e06
BuildRequires:  cmake
David Schwörer 86b481b
BuildRequires:  gettext-devel
David Schwörer 86b481b
BuildRequires:  environment-modules
David Schwörer 86b481b
BuildRequires:  netcdf-devel
David Schwörer 86b481b
BuildRequires:  netcdf-cxx%{?fedora:4}-devel
David Schwörer 86b481b
BuildRequires:  hdf5-devel
David Schwörer 86b481b
BuildRequires:  fftw-devel
David Schwörer 86b481b
BuildRequires:  make
David Bold 9222e06
BuildRequires:  fmt-devel
David Bold 9222e06
BuildRequires:  chrpath
David Schwörer 86b481b
BuildRequires:  python%{python3_pkgversion}
David Schwörer 86b481b
BuildRequires:  python%{python3_pkgversion}-numpy
David Bold d8d3864
BuildRequires:  python%{python3_pkgversion}-cython
David Schwörer 86b481b
BuildRequires:  python%{python3_pkgversion}-netcdf4
David Schwörer 86b481b
BuildRequires:  python%{python3_pkgversion}-scipy
David c2dfe77
BuildRequires:  python%{python3_pkgversion}-boututils
David c2dfe77
BuildRequires:  python%{python3_pkgversion}-boutdata
David Bold a057e54
BuildRequires:  python%{python3_pkgversion}-zoidberg
9cd0cd0
BuildRequires:  python%{python3_pkgversion}-tables
36095c3
%if %{with flexiblas}
36095c3
BuildRequires:  flexiblas-devel
36095c3
%else
David Schwörer 7aabb6f
BuildRequires:  blas-devel
David Schwörer 7aabb6f
BuildRequires:  lapack-devel
36095c3
%endif
David Schwörer 86b481b
BuildRequires:  gcc-c++
David Schwörer 86b481b
%if %{with system_mpark}
David Schwörer 86b481b
BuildRequires:  mpark-variant-devel
David Schwörer 86b481b
%endif
David Schwörer 86b481b
# cxx generation
David Schwörer 86b481b
BuildRequires:  python%{python3_pkgversion}-jinja2
David Schwörer 86b481b
# Documentation
David Schwörer 86b481b
%if %{with manual}
David Schwörer 86b481b
BuildRequires:  doxygen
David Schwörer 86b481b
BuildRequires:  python3-sphinx
David Schwörer 86b481b
%endif
David Schwörer 46d2cd6
%if %{with petsc} && %{with mpich}
David Schwörer 46d2cd6
BuildRequires: petsc-mpich-devel
David Schwörer 46d2cd6
BuildRequires: hdf5-mpich-devel
David Schwörer 46d2cd6
%endif
David Schwörer 46d2cd6
%if %{with petsc} && %{with openmpi}
David Schwörer 46d2cd6
BuildRequires: petsc-openmpi-devel
David Schwörer 46d2cd6
BuildRequires: hdf5-openmpi-devel
David Schwörer 46d2cd6
%endif
David Schwörer 46d2cd6
%if %{with sundials} && %{with mpich}
David Schwörer 46d2cd6
BuildRequires: sundials-mpich-devel
David Schwörer 46d2cd6
# https://bugzilla.redhat.com/show_bug.cgi?id=1839131
David Schwörer 46d2cd6
BuildRequires: sundials-devel
David Schwörer 46d2cd6
%endif
David Schwörer 46d2cd6
%if %{with sundials} && %{with openmpi}
David Schwörer 46d2cd6
BuildRequires: sundials-openmpi-devel
David Schwörer 46d2cd6
# https://bugzilla.redhat.com/show_bug.cgi?id=1839131
David Schwörer 46d2cd6
BuildRequires: sundials-devel
David Schwörer 46d2cd6
%endif
David Schwörer 86b481b
David Schwörer 86b481b
#
David Schwörer 86b481b
#           DESCRIPTIONS
David Schwörer 86b481b
#
David Schwörer 86b481b
David Schwörer 86b481b
David Schwörer 86b481b
%if %{with mpich}
David Schwörer 86b481b
BuildRequires:  mpich-devel
David Schwörer 86b481b
%global mpi_list mpich
David Schwörer 86b481b
%endif
David Schwörer 86b481b
%if %{with openmpi}
David Schwörer 86b481b
BuildRequires:  openmpi-devel
David Bold d8d3864
%global mpi_list openmpi %{?mpi_list}
David Schwörer 86b481b
%endif
David Schwörer 86b481b
David Schwörer 86b481b
%description
David Schwörer 86b481b
BOUT++ is a framework for writing fluid and plasma simulations in
David Schwörer 86b481b
curvilinear geometry. It is intended to be quite modular, with a
David Schwörer 86b481b
variety of numerical methods and time-integration solvers available.
David Schwörer 86b481b
BOUT++ is primarily designed and tested with reduced plasma fluid
David Schwörer 86b481b
models in mind, but it can evolve any number of equations, with
David Schwörer 86b481b
equations appearing in a readable form.
David Schwörer 86b481b
David Schwörer 86b481b
David Schwörer 86b481b
David Schwörer 86b481b
%if %{with mpich}
David Schwörer 86b481b
%package mpich
David Schwörer 86b481b
Summary: BOUT++ mpich libraries
David Schwörer 86b481b
Requires: %{name}-common = %{version}-%{release}
David Schwörer 86b481b
# Use bundled version, to reproduce upstream results
David Schwörer 86b481b
Provides: bundled(libpvode)
David Schwörer 86b481b
Recommends: environment-modules
David 9488731
Recommends: python%{python3_pkgversion}-boututils
David 9488731
Recommends: python%{python3_pkgversion}-boutdata
David 9488731
Recommends: python%{python3_pkgversion}-xbout
David Schwörer 86b481b
David Schwörer 86b481b
%package mpich-devel
David Schwörer 86b481b
Summary: BOUT++ mpich libraries
David 7f55e43
Requires:  %{name}-mpich = %{version}-%{release}
David 7f55e43
Recommends:  gcc-c++
David 7f55e43
Recommends:  make
David 7f55e43
Recommends:  mpich-devel
David 7f55e43
Recommends:  zlib-devel
David 7f55e43
Recommends:  gettext-devel
David 7f55e43
Recommends:  netcdf-devel
David 7f55e43
Recommends:  netcdf-cxx%{?fedora:4}-devel
David 7f55e43
Recommends:  hdf5-devel
David 7f55e43
Recommends:  fftw-devel
David 7f55e43
%if %{with flexiblas}
David 7f55e43
Recommends:  flexiblas-devel
David 7f55e43
%else
David 7f55e43
Recommends:  blas-devel
David 7f55e43
Recommends:  lapack-devel
David 7f55e43
%endif
David 7f55e43
%if %{with system_mpark}
David 7f55e43
Recommends:  mpark-variant-devel
David 7f55e43
%endif
David 7f55e43
%if %{with petsc}
David 7f55e43
Recommends:  petsc-mpich-devel
David 7f55e43
Recommends:  hdf5-mpich-devel
David 7f55e43
%endif
David 7f55e43
%if %{with sundials}
David 7f55e43
Recommends:  sundials-mpich-devel
David 7f55e43
# https://bugzilla.redhat.com/show_bug.cgi?id=1839131
David 7f55e43
Recommends:  sundials-devel
David 7f55e43
%endif
David 7f55e43
David Schwörer 86b481b
David Schwörer 86b481b
%description mpich-devel
David Schwörer 86b481b
BOUT++ is a framework for writing fluid and plasma simulations in
David Schwörer 86b481b
curvilinear geometry. It is intended to be quite modular, with a
David Schwörer 86b481b
variety of numerical methods and time-integration solvers available.
David Schwörer 86b481b
BOUT++ is primarily designed and tested with reduced plasma fluid
David Schwörer 86b481b
models in mind, but it can evolve any number of equations, with
David Schwörer 86b481b
equations appearing in a readable form.
David Schwörer 86b481b
David Schwörer 86b481b
This BOUT++ library is build for mpich.
David Schwörer 86b481b
David Schwörer 86b481b
%description mpich
David Schwörer 86b481b
BOUT++ is a framework for writing fluid and plasma simulations in
David Schwörer 86b481b
curvilinear geometry. It is intended to be quite modular, with a
David Schwörer 86b481b
variety of numerical methods and time-integration solvers available.
David Schwörer 86b481b
BOUT++ is primarily designed and tested with reduced plasma fluid
David Schwörer 86b481b
models in mind, but it can evolve any number of equations, with
David Schwörer 86b481b
equations appearing in a readable form.
David Schwörer 86b481b
David Schwörer 86b481b
This BOUT++ library is build for mpich.
David Schwörer 86b481b
David Schwörer 86b481b
%package -n python%{python3_pkgversion}-%{name}-mpich
David Schwörer 86b481b
Summary:  BOUT++ mpich library for python%{python3_pkgversion}
David Schwörer 86b481b
Requires: %{name}-mpich
David Schwörer 86b481b
Requires: python%{python3_pkgversion}-%{name}
David Schwörer 86b481b
BuildRequires: python%{python3_pkgversion}-devel
David Schwörer 86b481b
Requires: mpich
David Schwörer 86b481b
Requires: python%{python3_pkgversion}-mpich
David Schwörer 86b481b
Requires: python%{python3_pkgversion}-numpy
David 9c3fd27
Requires: python%{python3_pkgversion}-boututils
David 9c3fd27
Requires: python%{python3_pkgversion}-boutdata
David 9488731
Recommends: python%{python3_pkgversion}-xbout
David 9488731
David 814b82c
%py_provides python%{python3_pkgversion}-%{name}-mpich
David Schwörer 86b481b
%description  -n python%{python3_pkgversion}-%{name}-mpich
David Schwörer 86b481b
This is the BOUT++ library python%{python3_pkgversion} with mpich.
David Schwörer 86b481b
David Schwörer 86b481b
%endif
David Schwörer 86b481b
David Schwörer 86b481b
David Schwörer 86b481b
David Schwörer 86b481b
David Schwörer 86b481b
%if %{with openmpi}
David Schwörer 86b481b
%package openmpi
David Schwörer 86b481b
Summary: BOUT++ openmpi libraries
David Schwörer 86b481b
# Use bundled version, to reproduce upstream results
David Schwörer 86b481b
Provides: bundled(libpvode)
David Schwörer 86b481b
Requires: %{name}-common = %{version}-%{release}
David Schwörer 86b481b
Recommends: environment-modules
David 9488731
Recommends: python%{python3_pkgversion}-boututils
David 9488731
Recommends: python%{python3_pkgversion}-boutdata
David 9488731
Recommends: python%{python3_pkgversion}-xbout
David Schwörer 86b481b
David Schwörer 86b481b
%package openmpi-devel
David Schwörer 86b481b
Summary: BOUT++ openmpi libraries
David Schwörer 86b481b
Requires: %{name}-openmpi = %{version}-%{release}
David 7f55e43
Recommends:  gcc-c++
David 7f55e43
Recommends:  make
David 7f55e43
Recommends:  openmpi-devel
David 7f55e43
Recommends:  zlib-devel
David 7f55e43
Recommends:  gettext-devel
David 7f55e43
Recommends:  netcdf-devel
David 7f55e43
Recommends:  netcdf-cxx%{?fedora:4}-devel
David 7f55e43
Recommends:  hdf5-devel
David 7f55e43
Recommends:  fftw-devel
David 7f55e43
%if %{with flexiblas}
David 7f55e43
Recommends:  flexiblas-devel
David 7f55e43
%else
David 7f55e43
Recommends:  blas-devel
David 7f55e43
Recommends:  lapack-devel
David 7f55e43
%endif
David 7f55e43
%if %{with system_mpark}
David 7f55e43
Recommends:  mpark-variant-devel
David 7f55e43
%endif
David 7f55e43
%if %{with petsc}
David 7f55e43
Recommends:  petsc-openmpi-devel
David 7f55e43
Recommends:  hdf5-openmpi-devel
David 7f55e43
%endif
David 7f55e43
%if %{with sundials}
David 7f55e43
Recommends:  sundials-openmpi-devel
David 7f55e43
# https://bugzilla.redhat.com/show_bug.cgi?id=1839131
David 7f55e43
Recommends:  sundials-devel
David 7f55e43
%endif
David 7f55e43
David 7f55e43
David Schwörer 86b481b
David Schwörer 86b481b
%description openmpi-devel
David Schwörer 86b481b
BOUT++ is a framework for writing fluid and plasma simulations in
David Schwörer 86b481b
curvilinear geometry. It is intended to be quite modular, with a
David Schwörer 86b481b
variety of numerical methods and time-integration solvers available.
David Schwörer 86b481b
BOUT++ is primarily designed and tested with reduced plasma fluid
David Schwörer 86b481b
models in mind, but it can evolve any number of equations, with
David Schwörer 86b481b
equations appearing in a readable form.
David Schwörer 86b481b
David Schwörer 86b481b
This BOUT++ library is build for openmpi and provides the required
David Schwörer 86b481b
header files.
David Schwörer 86b481b
David Schwörer 86b481b
%description openmpi
David Schwörer 86b481b
BOUT++ is a framework for writing fluid and plasma simulations in
David Schwörer 86b481b
curvilinear geometry. It is intended to be quite modular, with a
David Schwörer 86b481b
variety of numerical methods and time-integration solvers available.
David Schwörer 86b481b
BOUT++ is primarily designed and tested with reduced plasma fluid
David Schwörer 86b481b
models in mind, but it can evolve any number of equations, with
David Schwörer 86b481b
equations appearing in a readable form.
David Schwörer 86b481b
David Schwörer 86b481b
This BOUT++ library is build for openmpi.
David Schwörer 86b481b
David Schwörer 86b481b
%package -n python%{python3_pkgversion}-%{name}-openmpi
David Schwörer 86b481b
Summary:  BOUT++ openmpi library for python%{python3_pkgversion}
David Schwörer 86b481b
Requires: %{name}-openmpi
David Schwörer 86b481b
Requires: python%{python3_pkgversion}-%{name}
David Schwörer 86b481b
BuildRequires: python%{python3_pkgversion}-devel
David Schwörer 86b481b
Requires: openmpi
David Schwörer 86b481b
Requires: python%{python3_pkgversion}-openmpi
David Schwörer 86b481b
Requires: python%{python3_pkgversion}-numpy
David 9c3fd27
Requires: python%{python3_pkgversion}-boututils
David 9c3fd27
Requires: python%{python3_pkgversion}-boutdata
David 9488731
Recommends: python%{python3_pkgversion}-xbout
David 9488731
David 814b82c
%py_provides python%{python3_pkgversion}-%{name}-openmpi
David Schwörer 86b481b
David Schwörer 86b481b
%description  -n python%{python3_pkgversion}-%{name}-openmpi
David Schwörer 86b481b
This is the BOUT++ library python%{python3_pkgversion} with openmpi.
David Schwörer 86b481b
David Schwörer 86b481b
%endif
David Schwörer 86b481b
David Schwörer 86b481b
David Schwörer 86b481b
%package common
David Schwörer 86b481b
Summary: Common files for BOUT++
David Schwörer 86b481b
%description common
David Schwörer 86b481b
MPI-independent files for BOUT++, namely localisation files.
David Schwörer 86b481b
David Schwörer 86b481b
%package -n python%{python3_pkgversion}-%{name}
David Schwörer 86b481b
Summary: BOUT++ python library
David Schwörer 86b481b
Requires: netcdf4-python%{python3_pkgversion}
David Schwörer 86b481b
Requires: python%{python3_pkgversion}-numpy
David Schwörer 86b481b
Recommends: python%{python3_pkgversion}-scipy
David Schwörer 86b481b
Recommends: python%{python3_pkgversion}-matplotlib
David 9c3fd27
Recommends: python%{python3_pkgversion}-boututils
David 9c3fd27
Recommends: python%{python3_pkgversion}-boutdata
David 9c3fd27
David Schwörer 86b481b
BuildArch: noarch
David 814b82c
%py_provides python%{python3_pkgversion}-%{name}
David Schwörer 86b481b
David Schwörer 86b481b
%description -n python%{python3_pkgversion}-%{name}
David Schwörer 86b481b
Python%{python3_pkgversion} library for pre and post processing of BOUT++ data
David Schwörer 86b481b
David Schwörer 86b481b
David Schwörer 86b481b
David Schwörer 86b481b
David Schwörer 86b481b
%if %{with manual}
David Schwörer 86b481b
%package -n %{name}-doc
David Schwörer 86b481b
Summary: BOUT++ Documentation
David Schwörer 86b481b
BuildArch: noarch
David Schwörer 86b481b
David Schwörer 86b481b
%description -n %{name}-doc
David Schwörer 86b481b
BOUT++ is a framework for writing fluid and plasma simulations in
David Schwörer 86b481b
curvilinear geometry. It is intended to be quite modular, with a
David Schwörer 86b481b
variety of numerical methods and time-integration solvers available.
David Schwörer 86b481b
BOUT++ is primarily designed and tested with reduced plasma fluid
David Schwörer 86b481b
models in mind, but it can evolve any number of equations, with
David Schwörer 86b481b
equations appearing in a readable form.
David Schwörer 86b481b
David Schwörer 86b481b
This package contains the documentation.
David Schwörer 86b481b
%endif
David Schwörer 86b481b
David Schwörer 86b481b
#
David Schwörer 86b481b
#           PREP
David Schwörer 86b481b
#
David Schwörer 86b481b
David Schwörer 86b481b
%prep
David Bold a057e54
%autosetup -n BOUT++-v%{version} -p 1
David Bold 9222e06
David Schwörer 86b481b
David Bold 9222e06
# Switch to standard theme
David Bold 9222e06
# sphinx_book_theme is not packaged
David Bold 9222e06
sed -e 's/html_theme = "sphinx_book_theme"/html_theme = "sphinxdoc"/' -i manual/sphinx/conf.py
David a635d5c
David Schwörer 86b481b
%if %{with system_mpark}
David Schwörer 86b481b
# use mpark provided by fedora
David Schwörer 86b481b
rm -rf externalpackages/mpark.variant/
David Schwörer 86b481b
mkdir -p externalpackages/mpark.variant/include/
David Schwörer 86b481b
%endif
David Schwörer 86b481b
David c2dfe77
rm -rf tools/pylib/boutdata
David c2dfe77
rm -rf tools/pylib/boututils
David c2dfe77
David Schwörer 86b481b
# Remove shebang
David Schwörer 86b481b
for f in $(find -L tools/pylib/ -type f | grep -v _boutcore_build )
David Schwörer 86b481b
do
David Schwörer 86b481b
    sed -i '/^#!\//d' $f
David Schwörer 86b481b
done
David Schwörer 86b481b
David Schwörer 86b481b
David Schwörer 86b481b
#
David Schwörer 86b481b
#           BUILD
David Schwörer 86b481b
#
David Schwörer 86b481b
David Schwörer 86b481b
%build
David Schwörer 86b481b
David Schwörer 86b481b
# MPI builds
David Schwörer 86b481b
export CC=mpicc
David Schwörer 86b481b
export CXX=mpicxx
David Schwörer 86b481b
David Schwörer 86b481b
for mpi in %{mpi_list}
David Schwörer 86b481b
do
David Schwörer 86b481b
  mkdir build_$mpi
David Schwörer 86b481b
done
David Schwörer 86b481b
for mpi in %{mpi_list}
David Schwörer 86b481b
do
David Bold 9222e06
  %global _vpath_builddir build_$mpi
David Schwörer 86b481b
  if [ $mpi = mpich ] ; then
David Schwörer 86b481b
      %_mpich_load
David Schwörer 86b481b
  elif [ $mpi = openmpi ] ; then
David Schwörer 86b481b
      %_openmpi_load
David Schwörer 86b481b
  else
David Schwörer 86b481b
      echo "unknown mpi" &> /dev/stderr
David Schwörer 86b481b
      exit 1
David Schwörer 86b481b
  fi
David Schwörer 86b481b
David Bold 9222e06
  %cmake \
David Bold 9222e06
      -DBOUT_USE_FFTW=ON \
David Bold 9222e06
      -DBOUT_USE_NETCDF=ON \
David Bold 9222e06
      -DBOUT_USE_SCOREP=OFF \
David Bold 9222e06
      -DBOUT_USE_SYSTEM_MPARK_VARIANT=ON \
David Bold 9222e06
      -DBOUT_USE_LAPACK=ON \
David Bold 9222e06
      -DBOUT_USE_NLS=ON \
David Bold 9222e06
      -DBOUT_USE_SYSTEM_FMT=ON \
David Bold 9222e06
      -DBOUT_USE_UUID_SYSTEM_GENERATOR=ON \
David Bold 421b526
      -DCMAKE_INSTALL_PREFIX=/usr \
David Bold 9222e06
      -DCMAKE_INSTALL_LIBDIR=%{_libdir}/$mpi/lib \
David Bold 9222e06
      -DCMAKE_INSTALL_BINDIR=%{_libdir}/$mpi/bin \
David Bold 9222e06
      -DCMAKE_INSTALL_INCLUDEDIR=%{_includedir}/$mpi-%{_arch}/bout++/ \
David Bold 9222e06
      -DCMAKE_INSTALL_DATAROOTDIR=%{_datadir} \
David Bold 9222e06
      -DCMAKE_INSTALL_PYTHON_SITEARCH=${MPI_PYTHON3_SITEARCH} \
David Bold d8d3864
      -DBOUT_TEST_TIMEOUT=900 \
David Bold 9222e06
%if %{with manual}
David Bold 9222e06
      -DBOUT_BUILD_DOCS=ON \
David Bold 9222e06
%endif
David Schwörer 46d2cd6
%if %{with petsc}
David Bold 9222e06
      -DBOUT_USE_PETSC=ON \
David Schwörer 46d2cd6
%endif
David Schwörer 46d2cd6
%if %{with sundials}
David Bold 9222e06
      -DBOUT_USE_SUNDIALS=ON \
David Schwörer 46d2cd6
%endif
David Schwörer 46d2cd6
David Bold 9222e06
      %cmake_build
David 7f55e43
David Bold 9222e06
%if %{with manual}
David Bold 9222e06
      %global _vpath_builddir build_$mpi/manual
David Bold a057e54
      # Store original values
David Bold a057e54
      PYPA=${PYTHONPATH}
David Bold a057e54
      LDPA=${LD_LIBRARY_PATH}
David Bold a057e54
      # Add our stuff
David Bold a057e54
      export PYTHONPATH=${PYTHONPATH}:$(pwd)/build_$mpi/tools/pylib/
David Bold a057e54
      export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$(pwd)/build_$mpi/lib/
David Bold 9222e06
      %cmake_build
David Bold a057e54
      # Restore
David Bold a057e54
      export LD_LIBRARY_PATH=$LDPA
David Bold a057e54
      export PYTHONPATH=$PYPA
David Bold 9222e06
%endif
David Schwörer 86b481b
David Schwörer 86b481b
  if [ $mpi = mpich ] ; then
David Schwörer 86b481b
      %_mpich_unload
David Schwörer 86b481b
  elif [ $mpi = openmpi ] ; then
David Schwörer 86b481b
      %_openmpi_unload
David Schwörer 86b481b
  fi
David Schwörer 86b481b
done
David Schwörer 86b481b
David Schwörer 86b481b
#
David Schwörer 86b481b
#           INSTALL
David Schwörer 86b481b
#
David Schwörer 86b481b
David Schwörer 86b481b
%install
David Schwörer 86b481b
David Schwörer 86b481b
for mpi in %{mpi_list}
David Schwörer 86b481b
do
David Bold 9222e06
  %global _vpath_builddir build_$mpi
David Schwörer 86b481b
  if [ $mpi = mpich ] ; then
David Schwörer 86b481b
      %_mpich_load
David Schwörer 86b481b
  else
David Schwörer 86b481b
      %_openmpi_load
David Schwörer 86b481b
  fi
David Bold 9222e06
  %cmake_install
David Schwörer 86b481b
David Bold a057e54
  for f in $(find ${RPM_BUILD_ROOT}/${MPI_LIB} ${RPM_BUILD_ROOT}/${MPI_PYTHON3_SITEARCH} | grep -E '/libbout|/libpvode|/libpvpre') ; do
David Bold 9222e06
    chrpath -r $MPI_LIB $f
David Bold 9222e06
  done
David Schwörer 86b481b
David Schwörer 86b481b
  rm -rf  ${RPM_BUILD_ROOT}/usr/share/bout++
David Bold 9222e06
David 7f55e43
  mkdir -p ${RPM_BUILD_ROOT}/usr/share/modulefiles/bout++
David 7f55e43
  cat > ${RPM_BUILD_ROOT}/usr/share/modulefiles/bout++/$MPI_COMPILER <
David 7f55e43
#%Module 1.0
David 7f55e43
#
David 7f55e43
#  BOUT++ module for use with 'environment-modules' package
David 7f55e43
#  Created by bout-add-mod-path v0.9
David 7f55e43
# Only allow one bout++ module to be loaded at a time
David 7f55e43
conflict bout++
David 7f55e43
# Require mpi
David 7f55e43
prereq mpi/$MPI_COMPILER
David 7f55e43
David 7f55e43
setenv    BOUT_TOP   $MPI_INCLUDE/bout++/
David 7f55e43
EOF
David 7f55e43
David Bold 9222e06
%if %{with manual}
David Bold 9222e06
      %global _vpath_builddir build_$mpi/manual
David Bold 9222e06
      %cmake_install
David Bold 9222e06
%endif
David Bold 9222e06
David Schwörer 86b481b
  if [ $mpi = mpich ] ; then
David Schwörer 86b481b
      %_mpich_unload
David Schwörer 86b481b
  else
David Schwörer 86b481b
      %_openmpi_unload
David Schwörer 86b481b
  fi
David Schwörer 86b481b
done
David Schwörer 86b481b
David Schwörer 86b481b
David Schwörer 86b481b
%find_lang libbout
David Schwörer 86b481b
David Schwörer 86b481b
#
David Schwörer 86b481b
#           CHECK
David Schwörer 86b481b
#
David Schwörer 86b481b
David Schwörer 86b481b
%check
David Schwörer 86b481b
David 5f083ed
# Ignore errors on some architectures
David 5f083ed
# s390x: https://bugzilla.redhat.com/show_bug.cgi?id=1998838
David Bold d8d3864
# s390x: https://bugzilla.redhat.com/show_bug.cgi?id=2259532
David 5f083ed
David Schwörer 86b481b
%if %{with test}
David Schwörer 86b481b
for mpi in %{mpi_list}
David Schwörer 86b481b
do
David Bold d8d3864
    fail=1
David Schwörer 86b481b
    if [ $mpi = mpich ] ; then
David Schwörer 86b481b
        %_mpich_load
David Bold d8d3864
	%ifarch s390x
David Bold d8d3864
	fail=0
David Bold d8d3864
	%endif
David Schwörer 86b481b
    else
David Schwörer 86b481b
        %_openmpi_load
David Schwörer 86b481b
    fi
David 5f083ed
    pushd build_$mpi
David 5f083ed
David Schwörer 86b481b
    export OMPI_MCA_rmaps_base_oversubscribe=yes
David Bold 163bacf
    export PRTE_MCA_rmaps_default_mapping_policy=:oversubscribe
David 5f083ed
    # Workaround for https://bugzilla.redhat.com/show_bug.cgi?id=1997717
David 5f083ed
    export HDF5_USE_FILE_LOCKING=FALSE
David eadbabd
    # Increase timeout for copr / s390x
David eadbabd
    sed 's/ 3s / 30s /' tests/integrated/test-coordinates-initialization/runtest
David eadbabd
David Schwörer 86b481b
    make %{?_smp_mflags} build-check
David Bold d8d3864
    SEGFAULT_SIGNALS="segv" make check-unit-tests || $(exit $fail)
David Bold d8d3864
    SEGFAULT_SIGNALS="segv" make check-mms-tests || $(exit $fail)
David Bold d8d3864
    SEGFAULT_SIGNALS="segv" make check-integrated-tests || $(exit $fail)
David 5f083ed
David Schwörer 86b481b
    popd
David Schwörer 86b481b
    if [ $mpi = mpich ] ; then
David Schwörer 86b481b
        %_mpich_unload
David Schwörer 86b481b
    else
David Schwörer 86b481b
        %_openmpi_unload
David Schwörer 86b481b
    fi
David Schwörer 86b481b
done
David Schwörer 86b481b
%endif
David Schwörer 86b481b
David Schwörer 86b481b
#
David Schwörer 86b481b
#           FILES SECTION
David Schwörer 86b481b
#
David Schwörer 86b481b
David Schwörer 86b481b
%if %{with mpich}
David Schwörer 86b481b
%files mpich
David Bold a057e54
%{_libdir}/mpich/lib/libbout++.so.5.1.0
David Schwörer 86b481b
%{_libdir}/mpich/lib/*.so.1.0.0
David Schwörer 86b481b
%{_libdir}/mpich/bin/*
David Schwörer 86b481b
%doc README.md
David Schwörer 86b481b
%doc CITATION.bib
David Schwörer 86b481b
%doc CITATION.cff
David Schwörer 86b481b
%doc CHANGELOG.md
David Schwörer 86b481b
%doc CONTRIBUTING.md
David Schwörer 86b481b
%license LICENSE
David Schwörer 86b481b
%license LICENSE.GPL
David 7f55e43
/usr/share/modulefiles/bout++/mpich-*
David Schwörer 86b481b
David Schwörer 86b481b
%files mpich-devel
David Schwörer 86b481b
%{_includedir}/mpich-%{_arch}/bout++
David Schwörer 86b481b
%{_libdir}/mpich/lib/*.so
David Bold 9222e06
%{_libdir}/mpich/lib/cmake/*
David Schwörer 86b481b
David Schwörer 86b481b
%files -n python%{python3_pkgversion}-%{name}-mpich
David Schwörer 86b481b
%{python3_sitearch}/mpich/*
David Schwörer 86b481b
%endif
David Schwörer 86b481b
David Schwörer 86b481b
David Schwörer 86b481b
%if %{with openmpi}
David Schwörer 86b481b
%files openmpi
David Bold a057e54
%{_libdir}/openmpi/lib/libbout++.so.5.1.0
David Schwörer 86b481b
%{_libdir}/openmpi/lib/*.so.1.0.0
David Schwörer 86b481b
%{_libdir}/openmpi/bin/*
David Schwörer 86b481b
%doc README.md
David Schwörer 86b481b
%doc CITATION.bib
David Schwörer 86b481b
%doc CITATION.cff
David Schwörer 86b481b
%doc CHANGELOG.md
David Schwörer 86b481b
%doc CONTRIBUTING.md
David Schwörer 86b481b
%license LICENSE
David Schwörer 86b481b
%license LICENSE.GPL
David 7f55e43
/usr/share/modulefiles/bout++/openmpi-*
David Schwörer 86b481b
David Schwörer 86b481b
%files openmpi-devel
David Schwörer 86b481b
%{_includedir}/openmpi-%{_arch}/bout++
David Schwörer 86b481b
%{_libdir}/openmpi/lib/*.so
David Bold 9222e06
%{_libdir}/openmpi/lib/cmake/*
David Schwörer 86b481b
David Schwörer 86b481b
%files -n python%{python3_pkgversion}-%{name}-openmpi
David Schwörer 86b481b
%{python3_sitearch}/openmpi/*
David Schwörer 86b481b
%endif
David Schwörer 86b481b
David Schwörer 86b481b
%files common -f libbout.lang
David 7f55e43
%dir /usr/share/modulefiles/bout++/
David Schwörer 86b481b
David Schwörer 86b481b
%files -n python%{python3_pkgversion}-%{name}
David Schwörer 86b481b
%doc README.md
David Schwörer 86b481b
%doc CITATION.bib
David Schwörer 86b481b
%doc CITATION.cff
David Schwörer 86b481b
%doc CHANGELOG.md
David Schwörer 86b481b
%doc CONTRIBUTING.md
David Schwörer 86b481b
%license LICENSE
David Schwörer 86b481b
%license LICENSE.GPL
David Schwörer 86b481b
David Schwörer 86b481b
David Schwörer 86b481b
%if %{with manual}
David Schwörer 86b481b
%files -n %{name}-doc
David Schwörer 86b481b
%doc  %{_defaultdocdir}/bout++/
David Schwörer 86b481b
%endif
David Schwörer 86b481b
David Schwörer 86b481b
#
David Schwörer 86b481b
#           CHANGELOG
David Schwörer 86b481b
#
David Schwörer 86b481b
David Schwörer 86b481b
%changelog
David Bold c839acf
%autochangelog