Adding MUMPS and ScaLAPACK
This commit is contained in:
		
							
								
								
									
										41
									
								
								var/spack/packages/mumps/Makefile.inc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								var/spack/packages/mumps/Makefile.inc
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,41 @@ | |||||||
|  | LPORDDIR = $(topdir)/PORD/lib/ | ||||||
|  | IPORD = -I$(topdir)/PORD/include/ | ||||||
|  | LPORD = -L$(LPORDDIR) -lpord | ||||||
|  |  | ||||||
|  | ORDERINGSC = $(ORDERINGSF) | ||||||
|  | LORDERINGS = $(LMETIS) $(LPORD) $(LSCOTCH) | ||||||
|  | IORDERINGSF = $(ISCOTCH) | ||||||
|  | IORDERINGSC = $(IMETIS) $(IPORD) $(ISCOTCH) | ||||||
|  |  | ||||||
|  | PLAT    = | ||||||
|  | LIBEXT  = .a | ||||||
|  | OUTC    = -o  | ||||||
|  | OUTF    = -o | ||||||
|  | RM = /bin/rm -f | ||||||
|  | AR = ar vr  | ||||||
|  | RANLIB = ranlib | ||||||
|  |  | ||||||
|  | INCSEQ  = -I$(topdir)/libseq | ||||||
|  | LIBSEQ  = -L$(topdir)/libseq -lmpiseq | ||||||
|  |  | ||||||
|  | INCPAR  = | ||||||
|  | LIBPAR  = $(SCALAP) | ||||||
|  |  | ||||||
|  | LIBOTHERS = -lpthread | ||||||
|  |  | ||||||
|  | #Preprocessor defs for calling Fortran from C (-DAdd_ or -DAdd__ or -DUPPER) | ||||||
|  | CDEFS   = -DAdd_ | ||||||
|  |  | ||||||
|  | #Sequential: | ||||||
|  | ifeq ($(MUMPS_TYPE),seq) | ||||||
|  | INCS = $(INCSEQ) | ||||||
|  | LIBS = $(LIBSEQ) | ||||||
|  | LIBSEQNEEDED = libseqneeded | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | #Parallel: | ||||||
|  | ifeq ($(MUMPS_TYPE),par) | ||||||
|  | INCS = $(INCPAR) | ||||||
|  | LIBS = $(LIBPAR) | ||||||
|  | LIBSEQNEEDED = | ||||||
|  | endif | ||||||
							
								
								
									
										121
									
								
								var/spack/packages/mumps/package.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										121
									
								
								var/spack/packages/mumps/package.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,121 @@ | |||||||
|  | from spack import * | ||||||
|  | import os | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class Mumps(Package): | ||||||
|  |     """MUMPS: a MUltifrontal Massively Parallel sparse direct Solver""" | ||||||
|  |  | ||||||
|  |     homepage = "http://mumps.enseeiht.fr" | ||||||
|  |     url      = "http://mumps.enseeiht.fr/MUMPS_5.0.1.tar.gz" | ||||||
|  |  | ||||||
|  |     version('5.0.1', 'b477573fdcc87babe861f62316833db0') | ||||||
|  |  | ||||||
|  |     variant('mpi', default=True, description='Activate the compilation of MUMPS with the MPI support') | ||||||
|  |     variant('scotch', default=False, description='Activate Scotch as a possible ordering library') | ||||||
|  |     variant('ptscotch', default=False, description='Activate PT-Scotch as a possible ordering library') | ||||||
|  |     variant('metis', default=False, description='Activate Metis as a possible ordering library') | ||||||
|  |     variant('parmetis', default=False, description='Activate Parmetis as a possible ordering library') | ||||||
|  |     variant('double', default=True, description='Activate dmumps') | ||||||
|  |     variant('float', default=True, description='Activate smumps') | ||||||
|  |     variant('complex', default=True, description='Activate cmumps and/or zmumps') | ||||||
|  |     variant('idx64', default=False, description='Use int64_t/integer*8 as default index type') | ||||||
|  |     variant('double', default=False, description='Use double precision floating point types') | ||||||
|  |  | ||||||
|  |      | ||||||
|  |     depends_on('scotch + esmumps', when='~ptscotch+scotch') | ||||||
|  |     depends_on('scotch + esmumps + mpi', when='+ptscotch') | ||||||
|  |     depends_on('metis', when='~parmetis+metis') | ||||||
|  |     depends_on('parmetis', when="+parmetis") | ||||||
|  |     depends_on('blas') | ||||||
|  |     depends_on('scalapack', when='+mpi') | ||||||
|  |     depends_on('mpi', when='+mpi') | ||||||
|  |      | ||||||
|  |     def patch(self): | ||||||
|  |         if ('+parmetis' in self.spec or '+ptscotch' in self.spec) and '+mpi' not in self.spec: | ||||||
|  |             raise RuntimeError('You cannot use the variants parmetis or ptscotch without mpi') | ||||||
|  |          | ||||||
|  |         makefile_conf = ["LIBBLAS = -L%s -lblas" % self.spec['blas'].prefix.lib] | ||||||
|  |  | ||||||
|  |         orderings = ['-Dpord'] | ||||||
|  |          | ||||||
|  |         if '+ptscotch' in self.spec or '+scotch' in self.spec: | ||||||
|  |             join_lib = ' -l%s' % ('pt' if '+ptscotch' in self.spec else '') | ||||||
|  |             makefile_conf.extend( | ||||||
|  |                 ["ISCOTCH = -I%s" % self.spec['scotch'].prefix.include, | ||||||
|  |                  "LSCOTCH = -L%s %s%s" % (self.spec['scotch'].prefix.lib, | ||||||
|  |                                           join_lib, | ||||||
|  |                                           join_lib.join(['esmumps', 'scotch', 'scotcherr']))]) | ||||||
|  |             orderings.append('-Dscotch') | ||||||
|  |             if '+ptscotch' in self.spec: | ||||||
|  |                 orderings.append('-Dptscotch') | ||||||
|  |  | ||||||
|  |         if '+parmetis' in self.spec or '+metis' in self.spec: | ||||||
|  |             libname = 'parmetis' if '+parmetis' in self.spec else 'metis' | ||||||
|  |             makefile_conf.extend( | ||||||
|  |                 ["IMETIS = -I%s" % self.spec[libname].prefix.include, | ||||||
|  |                  "LMETIS = -L%s -l%s" % (self.spec[libname].prefix.lib, libname)]) | ||||||
|  |  | ||||||
|  |             orderings.append('-Dmetis') | ||||||
|  |             if '+parmetis' in self.spec: | ||||||
|  |                 orderings.append('-Dparmetis') | ||||||
|  |  | ||||||
|  |         makefile_conf.append("ORDERINGSF = %s" % (' '.join(orderings))) | ||||||
|  |  | ||||||
|  |         if '+idx64' in self.spec: | ||||||
|  |             makefile_conf.extend( | ||||||
|  |                 ['OPTF    = -O  -DALLOW_NON_INIT %s' % '-fdefault-integer-8' if self.compiler.name == "gcc" else '-i8', | ||||||
|  |                  'OPTL    = -O ', | ||||||
|  |                  'OPTC    = -O -DINTSIZE64']) | ||||||
|  |         else: | ||||||
|  |             makefile_conf.extend( | ||||||
|  |                 ['OPTF    = -O  -DALLOW_NON_INIT', | ||||||
|  |                  'OPTL    = -O ', | ||||||
|  |                  'OPTC    = -O ']) | ||||||
|  |  | ||||||
|  |  | ||||||
|  |         if '+mpi' in self.spec: | ||||||
|  |             makefile_conf.extend( | ||||||
|  |                 ["CC = %s" % join_path(self.spec['mpi'].prefix.bin, 'mpicc'), | ||||||
|  |                  "FC = %s" % join_path(self.spec['mpi'].prefix.bin, 'mpif90'), | ||||||
|  |                  "FL = %s" % join_path(self.spec['mpi'].prefix.bin, 'mpif90'), | ||||||
|  |                  "SCALAP = %s" % self.spec['scalapack'].fc_link]) | ||||||
|  |         else: | ||||||
|  |             makefile_conf.extend( | ||||||
|  |                 ["CC = cc", | ||||||
|  |                  "FC = fc", | ||||||
|  |                  "FL = fc", | ||||||
|  |                  "MUMPS_TYPE = seq"]) | ||||||
|  |  | ||||||
|  |         makefile_inc_template = join_path(os.path.dirname(self.module.__file__), | ||||||
|  |                                           'Makefile.inc') | ||||||
|  |         with open(makefile_inc_template, "r") as fh: | ||||||
|  |             makefile_conf.extend(fh.read().split('\n')) | ||||||
|  |          | ||||||
|  |         with working_dir('.'): | ||||||
|  |             with open("Makefile.inc", "w") as fh: | ||||||
|  |                 makefile_inc = '\n'.join(makefile_conf) | ||||||
|  |                 fh.write(makefile_inc) | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     def install(self, spec, prefix): | ||||||
|  |         make_libs = [] | ||||||
|  |  | ||||||
|  |         # the coice to compile ?examples is to have kind of a sanity | ||||||
|  |         # check on the libraries generated. | ||||||
|  |         if '+float' in spec: | ||||||
|  |             make_libs.append('sexamples') | ||||||
|  |             if '+complex' in spec: | ||||||
|  |                 make_libs.append('cexamples') | ||||||
|  |  | ||||||
|  |         if '+double' in spec: | ||||||
|  |             make_libs.append('dexamples') | ||||||
|  |             if '+complex' in spec: | ||||||
|  |                 make_libs.append('zexamples') | ||||||
|  |  | ||||||
|  |         make(*make_libs) | ||||||
|  |  | ||||||
|  |         install_tree('lib', prefix.lib) | ||||||
|  |         install_tree('include', prefix.include) | ||||||
|  |         if '~mpi' in spec: | ||||||
|  |             install('libseq/libmpiseq.a', prefix.lib) | ||||||
							
								
								
									
										43
									
								
								var/spack/packages/netlib-scalapack/package.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								var/spack/packages/netlib-scalapack/package.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,43 @@ | |||||||
|  | from spack import * | ||||||
|  |  | ||||||
|  | class NetlibScalapack(Package): | ||||||
|  |     """ScaLAPACK is a library of high-performance linear algebra routines for parallel distributed memory machines""" | ||||||
|  |      | ||||||
|  |     homepage = "http://www.netlib.org/scalapack/" | ||||||
|  |     url      = "http://www.netlib.org/scalapack/scalapack-2.0.2.tgz" | ||||||
|  |  | ||||||
|  |     version('2.0.2', '2f75e600a2ba155ed9ce974a1c4b536f') | ||||||
|  |     version('2.0.1', '17b8cde589ea0423afe1ec43e7499161') | ||||||
|  |     version('2.0.0', '9e76ae7b291be27faaad47cfc256cbfe') | ||||||
|  |  | ||||||
|  |     variant('shared', default=True, description='Build the shared library version') | ||||||
|  |  | ||||||
|  |     provides('scalapack') | ||||||
|  |      | ||||||
|  |     depends_on('mpi') | ||||||
|  |     depends_on('blas') | ||||||
|  |     depends_on('lapack') | ||||||
|  |      | ||||||
|  |     def install(self, spec, prefix):        | ||||||
|  |         options = [ | ||||||
|  |             "-DBUILD_SHARED_LIBS:BOOL=%s" % 'ON' if '+shared' in spec else 'OFF', | ||||||
|  |             "-DBUILD_STATIC_LIBS:BOOL=%s" % 'OFF' if '+shared' in spec else 'ON', | ||||||
|  |             "-DCMAKE_C_FLAGS=-fPIC", | ||||||
|  |             "-DCMAKE_Fortran_FLAGS=-fPIC", | ||||||
|  |             ] | ||||||
|  |  | ||||||
|  |         options.extend(std_cmake_args) | ||||||
|  |          | ||||||
|  |         with working_dir('spack-build', create=True): | ||||||
|  |             cmake('..', *options) | ||||||
|  |             make() | ||||||
|  |             make("install") | ||||||
|  |  | ||||||
|  |     def setup_dependent_environment(self, module, spec, dependent_spec): | ||||||
|  |         # TODO treat OS that are not Linux... | ||||||
|  |         lib_suffix = '.so' if '+shared' in spec['scalapack'] else '.a' | ||||||
|  |  | ||||||
|  |         spec['scalapack'].fc_link = '-L%s -lscalapack' % spec['scalapack'].prefix.lib | ||||||
|  |         spec['scalapack'].cc_link = spec['scalapack'].fc_link | ||||||
|  |         spec['scalapack'].libraries = [join_path(spec['scalapack'].prefix.lib, | ||||||
|  |                                                  'libscalapack%s' % lib_suffix)] | ||||||
		Reference in New Issue
	
	Block a user
	 Nicolas Richart
					Nicolas Richart