File pARMS.spec of Package pARMS
#
# spec file for package pARMS
#
# Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
%if 0%{?sles_version}
%define _mvapich2 1
%endif
%if 0%{?suse_version}
%if 0%{?suse_version} >= 1550
%define _openmpi openmpi1
%else
%define _openmpi openmpi
%endif
%endif
%define _mpi %{?_openmpi} %{?_mvapich2:mvapich2}
%define major 3
%define libname libparms
Name: pARMS
Version: 3.2
Release: 0
Summary: The parallel Algebraic Recursive Multilevel Solvers
License: LGPL-2.1
Group: Development/Libraries/Parallel
Url: http://www-users.cs.umn.edu/~saad/software/pARMS/
Source0: %{name}_%{version}.tar.gz
# PATCH-FEATURE-OPENSUSE pARMS-3.2-make.patch : add compiler and build flags in makefile.inc
Patch0: pARMS-3.2-make.patch
BuildRequires: blas-devel
BuildRequires: fdupes
BuildRequires: gcc-fortran
BuildRequires: lapack-devel
%if 0%{?_openmpi:1}
BuildRequires: %{_openmpi}-devel
%endif
%if 0%{?_mvapich2}
BuildRequires: mvapich2-devel
%endif
%description
This is a new version of the parallel Algebraic Recursive Multilevel
Solvers which has been reimplemented completely. This version includes:
- The Restrictive Additive Schwarz (RAS) procedures
- Schur complement techniques (with RAS)
- ddPQ ordering for local matrices.. [However, the Schur
complement techniques do not yet support ddPQ orderings]
- (flexible) GMRES accelerator
%if 0%{?_openmpi:1}
%package -n %{libname}%{major}-%{_openmpi}
Summary: A general purpose library for the direct solution of linear equations
Group: System/Libraries
%description -n %{libname}%{major}-%{_openmpi}
This is a new version of the parallel Algebraic Recursive Multilevel
Solvers which has been reimplemented completely. This version includes:
- The Restrictive Additive Schwarz (RAS) procedures
- Schur complement techniques (with RAS)
- ddPQ ordering for local matrices.. [However, the Schur
complement techniques do not yet support ddPQ orderings]
- (flexible) GMRES accelerator
This package contains the parallel version of the library for openmpi.
%package %{_openmpi}-devel
Summary: Development and header files for %{name}
Group: Development/Libraries/Parallel
Requires: %{libname}%{major}-%{_openmpi} = %{version}
Requires: %{_openmpi}-devel
%description %{_openmpi}-devel
This package contains the development and header files for %{name}.
%package %{_openmpi}-devel-static
Summary: Static library for %{name}
Group: Development/Libraries/C and C++
Requires: %{name}-%{_openmpi}-devel = %{version}
%description %{_openmpi}-devel-static
This package contains the static library for %{name}.
%package example-%{_openmpi}
Summary: Example programs for %{name}
Group: Development/Libraries/Parallel
%description example-%{_openmpi}
This package contains several examples programs using %{name}.
The matrix data required by some of the programs can be found in the
documentation directory /usr/share/doc/packages/%{name}-example-%{_openmpi}/matrices.
%endif
%if 0%{?_mvapich2}
%package -n %{libname}%{major}-mvapich2
Summary: A general purpose library for the direct solution of linear equations
Group: System/Libraries
%description -n %{libname}%{major}-mvapich2
This is a new version of the parallel Algebraic Recursive Multilevel
Solvers which has been reimplemented completely. This version includes:
- The Restrictive Additive Schwarz (RAS) procedures
- Schur complement techniques (with RAS)
- ddPQ ordering for local matrices.. [However, the Schur
complement techniques do not yet support ddPQ orderings]
- (flexible) GMRES accelerator
This package contains the parallel version of the library for mvapich2.
%package mvapich2-devel
Summary: Development and header files for %{name}
Group: Development/Libraries/C and C++
Requires: %{libname}%{major}-mvapich2 = %{version}
Requires: mvapich2-devel
%description mvapich2-devel
This package contains the development and header files for %{name}.
%package mvapich2-devel-static
Summary: Static library for %{name}
Group: Development/Libraries/C and C++
Requires: %{libname}%{major}-mvapich2 = %{version}
Requires: %{name}-mvapich2-devel = %{version}
%description mvapich2-devel-static
This package contains the static library for %{name}.
%package example-mvapich2
Summary: Example programs for %{name}
Group: Development/Libraries/Parallel
%description example-mvapich2
This package contains several examples programs using %{name}.
The matrix data required by some of the programs can be found in the
documentation directory /usr/share/doc/packages/%{name}-example-mvapich2/matrices.
%endif
%package doc
Summary: Documentation files for %{name}
Group: Documentation/Other
%description doc
This package contains the html and pdf documentation files for %{name}.
%prep
%setup -q -n pARMS_%{version}
%patch0 -p1
set -- *
for mpi in %_mpi; do
mkdir $mpi
cp -ap "$@" $mpi
done
%build
for mpi in %_mpi; do
cd $mpi
make %{?_smp_mflags} \
CC=%{_libdir}/mpi/gcc/$mpi/bin/mpicc \
FC=%{_libdir}/mpi/gcc/$mpi/bin/mpif77 \
F90=%{_libdir}/mpi/gcc/$mpi/bin/mpif90 \
COPTFLAGS="%{optflags} -fPIC -ffat-lto-objects"
mkdir tmp
( cd tmp && ar -x ../lib/libparms.a )
%{_libdir}/mpi/gcc/$mpi/bin/mpif90 -shared -z muldefs -Wl,-soname=%{libname}.so.%{major} -o lib/%{libname}.so.%{version} tmp/*.o
pushd lib
ln -s %{libname}.so.%{major} %{libname}.so
popd
# build the tests
make %{?_smp_mflags} tests \
CC=%{_libdir}/mpi/gcc/$mpi/bin/mpicc \
FC=%{_libdir}/mpi/gcc/$mpi/bin/mpif77 \
F90=%{_libdir}/mpi/gcc/$mpi/bin/mpif90
cd ..
done
%install
for mpi in %_mpi; do
cd $mpi
mkdir -p %{buildroot}%{_libdir}/mpi/gcc/$mpi/%_lib
mkdir -p %{buildroot}%{_libdir}/mpi/gcc/$mpi/bin
mkdir -p %{buildroot}%{_libdir}/mpi/gcc/$mpi/include
install -m644 src/include/*.h %{buildroot}%{_libdir}/mpi/gcc/$mpi/include
install -m755 examples/grid/dd-grid.ex %{buildroot}%{_libdir}/mpi/gcc/$mpi/bin
install -m755 examples/general/dd-HB-dse.ex %{buildroot}%{_libdir}/mpi/gcc/$mpi/bin
install -m 755 lib/libparms.so.%{version} %{buildroot}%{_libdir}/mpi/gcc/$mpi/%_lib
install -m 644 lib/libparms.a %{buildroot}%{_libdir}/mpi/gcc/$mpi/%_lib
pushd %{buildroot}%{_libdir}/mpi/gcc/$mpi/%_lib
ln -s libparms.so.%{version} libparms.so.3
ln -s libparms.so.%{version} libparms.so
popd
cd ..
done
# for examples
mv examples/general/README examples/general/README.general
mv examples/grid/README examples/grid/README.grid
chmod 644 examples/matrices/*
%if 0%{?_openmpi:1}
%post -n %{libname}%{major}-%{_openmpi} -p /sbin/ldconfig
%postun -n %{libname}%{major}-%{_openmpi} -p /sbin/ldconfig
%endif
%if 0%{?_mvapich2}
%post -n %{libname}%{major}-mvapich2 -p /sbin/ldconfig
%postun -n %{libname}%{major}-mvapich2 -p /sbin/ldconfig
%endif
%if 0%{?_openmpi:1}
%files -n %{libname}%{major}-%{_openmpi}
%license COPYRIGHT LGPL
%{_libdir}/mpi/gcc/%{_openmpi}/%_lib/*.so.*
%files %{_openmpi}-devel
%{_libdir}/mpi/gcc/%{_openmpi}/%_lib/*.so
%{_libdir}/mpi/gcc/%{_openmpi}/include/*.h
%files %{_openmpi}-devel-static
%{_libdir}/mpi/gcc/%{_openmpi}/%_lib/*.a
%files example-%{_openmpi}
%doc examples/matrices examples/general/README.general examples/grid/README.grid
%{_libdir}/mpi/gcc/%{_openmpi}/bin/*
%endif
%if 0%{?_mvapich2}
%files -n %{libname}%{major}-mvapich2
%license COPYRIGHT LGPL
%{_libdir}/mpi/gcc/mvapich2/%_lib/*.so.*
%files mvapich2-devel
%{_libdir}/mpi/gcc/mvapich2/%_lib/*.so
%{_libdir}/mpi/gcc/mvapich2/include/*.h
%files mvapich2-devel-static
%{_libdir}/mpi/gcc/mvapich2/%_lib/*.a
%files example-mvapich2
%doc examples/matrices examples/general/README.general examples/grid/README.grid
%{_libdir}/mpi/gcc/mvapich2/bin/*
%endif
%files doc
%doc docs/refmanual.pdf docs/ug.pdf README
%changelog