Add GMT, CitcomS, and fstrack packages (#9768)
* Add initial packages for citcoms and dependencies * Ignore Pythia imports * Add py-merlin package * Add GMT package * Fixes to get GMT working * Get hc package building * Get CitcomS 3.2.0 working * Add fstrack package * Fix hash
This commit is contained in:
		
							
								
								
									
										78
									
								
								var/spack/repos/builtin/packages/citcoms/package.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								var/spack/repos/builtin/packages/citcoms/package.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,78 @@ | ||||
| # Copyright 2013-2018 Lawrence Livermore National Security, LLC and other | ||||
| # Spack Project Developers. See the top-level COPYRIGHT file for details. | ||||
| # | ||||
| # SPDX-License-Identifier: (Apache-2.0 OR MIT) | ||||
|  | ||||
| from spack import * | ||||
|  | ||||
|  | ||||
| class Citcoms(AutotoolsPackage): | ||||
|     """CitcomS is a finite element code designed to solve compressible | ||||
|     thermochemical convection problems relevant to Earth's mantle.""" | ||||
|  | ||||
|     homepage = "https://geodynamics.org/cig/software/citcoms/" | ||||
|     url      = "https://github.com/geodynamics/citcoms/releases/download/v3.3.1/CitcomS-3.3.1.tar.gz" | ||||
|  | ||||
|     version('3.3.1', sha256='e3520e0a933e4699d31e86fe309b8c154ea6ecb0f42a1cf6f25e8d13d825a4b3') | ||||
|     version('3.2.0', sha256='773a14d91ecbb4a4d1e04317635fab79819d83c57b47f19380ff30b9b19cb07a') | ||||
|  | ||||
|     variant('pyre', default=False, description='build Pyre modules') | ||||
|     variant('exchanger', default=False, description='use Exchanger') | ||||
|     variant('ggrd', default=False, description='use GGRD file support') | ||||
|     variant('cuda', default=False, description='use CUDA') | ||||
|     variant('hdf5', default=False, description='add HDF5 support') | ||||
|  | ||||
|     # Required dependencies | ||||
|     depends_on('mpi') | ||||
|     depends_on('zlib') | ||||
|  | ||||
|     # Optional dependencies | ||||
|     depends_on('exchanger', when='+exchanger') | ||||
|     depends_on('py-pythia', type=('build', 'run'), when='+pyre') | ||||
|     depends_on('hc', when='+ggrd') | ||||
|     depends_on('cuda', when='+cuda') | ||||
|     depends_on('hdf5+mpi', when='+hdf5') | ||||
|  | ||||
|     conflicts('+pyre', when='@3.3:', msg='Pyre support was removed from 3.3+') | ||||
|     conflicts('+exchanger', when='@3.3:', msg='Exchanger support was removed from 3.3+') | ||||
|  | ||||
|     def setup_environment(self, spack_env, run_env): | ||||
|         if '+ggrd' in self.spec: | ||||
|             spack_env.set('HC_HOME', self.spec['hc'].prefix) | ||||
|  | ||||
|     def configure_args(self): | ||||
|         args = ['CC={0}'.format(self.spec['mpi'].mpicc)] | ||||
|  | ||||
|         # Flags only valid in 3.2 | ||||
|         if self.spec.satisfies('@:3.2'): | ||||
|             if '+pyre' in self.spec: | ||||
|                 args.append('--with-pyre') | ||||
|             else: | ||||
|                 args.append('--without-pyre') | ||||
|  | ||||
|             if '+exchanger' in self.spec: | ||||
|                 args.append('--with-exchanger') | ||||
|             else: | ||||
|                 args.append('--without-exchanger') | ||||
|  | ||||
|         if '+ggrd' in self.spec: | ||||
|             args.append('--with-ggrd') | ||||
|         else: | ||||
|             args.append('--without-ggrd') | ||||
|  | ||||
|         if '+cuda' in self.spec: | ||||
|             args.append('--with-cuda') | ||||
|         else: | ||||
|             args.append('--without-cuda') | ||||
|  | ||||
|         if '+hdf5' in self.spec: | ||||
|             args.extend([ | ||||
|                 '--with-hdf5', | ||||
|                 # https://github.com/geodynamics/citcoms/issues/2 | ||||
|                 'CPPFLAGS=-DH5_USE_16_API', | ||||
|                 'CFLAGS=-DH5_USE_16_API' | ||||
|             ]) | ||||
|         else: | ||||
|             args.append('--without-hdf5') | ||||
|  | ||||
|         return args | ||||
							
								
								
									
										21
									
								
								var/spack/repos/builtin/packages/exchanger/package.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								var/spack/repos/builtin/packages/exchanger/package.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | ||||
| # Copyright 2013-2018 Lawrence Livermore National Security, LLC and other | ||||
| # Spack Project Developers. See the top-level COPYRIGHT file for details. | ||||
| # | ||||
| # SPDX-License-Identifier: (Apache-2.0 OR MIT) | ||||
|  | ||||
| from spack import * | ||||
|  | ||||
|  | ||||
| class Exchanger(AutotoolsPackage): | ||||
|     """Exchanger is a package containing several C++ base classes. These | ||||
|     classes, when customized for a solver, can provide communication channels | ||||
|     between solvers. This packaged is used by CitcomS for solver coupling.""" | ||||
|  | ||||
|     homepage = "https://geodynamics.org/cig/software/exchanger/" | ||||
|     url      = "https://geodynamics.org/cig/software/exchanger/Exchanger-1.0.1.tar.gz" | ||||
|  | ||||
|     version('1.0.1', sha256='1e6c8311db96582bcf2c9aee16a863a5730c1aa54cb3aa7d0249239c6e0b68ee') | ||||
|  | ||||
|     depends_on('python', type=('build', 'run')) | ||||
|     depends_on('py-merlin', type='build') | ||||
|     depends_on('py-pythia@0.8.1.0:0.8.1.999', type=('build', 'run')) | ||||
							
								
								
									
										54
									
								
								var/spack/repos/builtin/packages/fstrack/package.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								var/spack/repos/builtin/packages/fstrack/package.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,54 @@ | ||||
| # Copyright 2013-2018 Lawrence Livermore National Security, LLC and other | ||||
| # Spack Project Developers. See the top-level COPYRIGHT file for details. | ||||
| # | ||||
| # SPDX-License-Identifier: (Apache-2.0 OR MIT) | ||||
|  | ||||
| from spack import * | ||||
|  | ||||
|  | ||||
| class Fstrack(MakefilePackage): | ||||
|     """Package with tools to analyze symmetry components of elastic tensors, | ||||
|     predict synthetic waveforms and compute automated shear wave splitting | ||||
|     along ray paths, and to track finite strain and predict LPO from mantle | ||||
|     flow given on GMT/netcdf grds.""" | ||||
|  | ||||
|     homepage = "http://www-udc.ig.utexas.edu/external/becker/data.html#fstrack" | ||||
|     url      = "http://www-udc.ig.utexas.edu/external/becker/software/fstrack-0.5.3.092918.tgz" | ||||
|  | ||||
|     version('0.5.3.092918', sha256='34b31687fdfa207b9659425238b805eaacf0b0209e7e3343c1a3cb4c9e62345d') | ||||
|  | ||||
|     variant('flow', default=True, description='Build the flow tracker') | ||||
|  | ||||
|     depends_on('gmt@4.0:4.999', when='+flow') | ||||
|     depends_on('netcdf', when='+flow') | ||||
|  | ||||
|     parallel = False | ||||
|  | ||||
|     def setup_environment(self, spack_env, run_env): | ||||
|         # Compilers | ||||
|         spack_env.set('F90', spack_fc) | ||||
|  | ||||
|         # Compiler flags (assumes GCC) | ||||
|         spack_env.set('CFLAGS', '-O2') | ||||
|         spack_env.set('FFLAGS', '-ffixed-line-length-132 -x f77-cpp-input -O2') | ||||
|         spack_env.set('FFLAGS_DEBUG', '-g -x f77-cpp-input') | ||||
|         spack_env.set('F90FLAGS', '-O2 -x f95-cpp-input') | ||||
|         spack_env.set('F90FLAGS_DEBUG', '-g -x f95-cpp-input') | ||||
|         spack_env.set('LDFLAGS', '-lm') | ||||
|  | ||||
|         if '+flow' in self.spec: | ||||
|             spack_env.set('GMTHOME', self.spec['gmt'].prefix) | ||||
|             spack_env.set('NETCDFDIR', self.spec['netcdf'].prefix) | ||||
|  | ||||
|     def build(self, spec, prefix): | ||||
|         with working_dir('eispack'): | ||||
|             make() | ||||
|  | ||||
|         with working_dir('d-rex'): | ||||
|             make() | ||||
|  | ||||
|         with working_dir('fstrack'): | ||||
|             if '+flow' in spec: | ||||
|                 make('really_all') | ||||
|             else: | ||||
|                 make() | ||||
							
								
								
									
										79
									
								
								var/spack/repos/builtin/packages/gmt/package.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								var/spack/repos/builtin/packages/gmt/package.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,79 @@ | ||||
| # Copyright 2013-2018 Lawrence Livermore National Security, LLC and other | ||||
| # Spack Project Developers. See the top-level COPYRIGHT file for details. | ||||
| # | ||||
| # SPDX-License-Identifier: (Apache-2.0 OR MIT) | ||||
|  | ||||
| from spack import * | ||||
|  | ||||
|  | ||||
| class Gmt(Package): | ||||
|     """GMT (Generic Mapping Tools) is an open source collection of about 80 | ||||
|     command-line tools for manipulating geographic and Cartesian data sets | ||||
|     (including filtering, trend fitting, gridding, projecting, etc.) and | ||||
|     producing PostScript illustrations ranging from simple x-y plots via | ||||
|     contour maps to artificially illuminated surfaces and 3D perspective views. | ||||
|     """ | ||||
|  | ||||
|     homepage = "http://gmt.soest.hawaii.edu/" | ||||
|     url      = "https://github.com/GenericMappingTools/gmt/archive/5.4.4.tar.gz" | ||||
|  | ||||
|     version('5.4.4', sha256='b593dfb101e6507c467619f3d2190a9f78b09d49fe2c27799750b8c4c0cd2da0') | ||||
|     version('4.5.9', sha256='9b13be96ccf4bbd38c14359c05dfa7eeeb4b5f06d6f4be9c33d6c3ea276afc86', | ||||
|             url='ftp://ftp.soest.hawaii.edu/gmt/legacy/gmt-4.5.9.tar.bz2') | ||||
|  | ||||
|     variant('pcre', default=False, description='Enable the PCRE interface') | ||||
|     variant('gdal', default=False, description='Enable the GDAL interface') | ||||
|     variant('fftw', default=True, description='Fast FFTs') | ||||
|     variant('lapack', default=True, description='Fast matrix inversion') | ||||
|     variant('blas', default=True, description='Fast matrix multiplications') | ||||
|  | ||||
|     # http://gmt.soest.hawaii.edu/projects/gmt/wiki/BuildingGMT | ||||
|  | ||||
|     # Required dependencies | ||||
|     depends_on('ghostscript') | ||||
|     depends_on('subversion') | ||||
|     depends_on('cmake@2.8.5:', type='build', when='@5:') | ||||
|     depends_on('netcdf@4:') | ||||
|     depends_on('curl', when='@5.4:') | ||||
|  | ||||
|     # Optional dependencies | ||||
|     depends_on('pcre', when='+pcre') | ||||
|     depends_on('gdal', when='+gdal') | ||||
|     depends_on('fftw', when='+fftw') | ||||
|     depends_on('lapack', when='+lapack') | ||||
|     depends_on('blas', when='+blas') | ||||
|     depends_on('graphicsmagick', type='test') | ||||
|  | ||||
|     patch('type.patch', when='@4.5.9') | ||||
|  | ||||
|     @when('@5:') | ||||
|     def install(self, spec, prefix): | ||||
|         with working_dir('spack-build', create=True): | ||||
|             cmake('..', *std_cmake_args) | ||||
|  | ||||
|             make() | ||||
|             make('install') | ||||
|  | ||||
|     @when('@:4') | ||||
|     def install(self, spec, prefix): | ||||
|         args = [ | ||||
|             '--prefix={0}'.format(prefix), | ||||
|             '--enable-netcdf={0}'.format(spec['netcdf'].prefix), | ||||
|             '--enable-shared', | ||||
|             '--without-x' | ||||
|         ] | ||||
|  | ||||
|         if '+gdal' in spec: | ||||
|             args.append('--enable-gdal') | ||||
|         else: | ||||
|             args.append('--disable-gdal') | ||||
|  | ||||
|         configure(*args) | ||||
|  | ||||
|         # Building in parallel results in dozens of errors like: | ||||
|         # *** No rule to make target `../libgmtps.so', needed by `pssegyz'. | ||||
|         make(parallel=False) | ||||
|  | ||||
|         # Installing in parallel results in dozens of errors like: | ||||
|         # /usr/bin/install: cannot create directory '...': File exists | ||||
|         make('install', parallel=False) | ||||
							
								
								
									
										17
									
								
								var/spack/repos/builtin/packages/gmt/type.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								var/spack/repos/builtin/packages/gmt/type.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| Without this patch, I see compilation errors like: | ||||
|  | ||||
| gmtdigitize.c:83:2: error: unknown type name 'gid_t'; did you mean 'pid_t'? | ||||
| gmtdigitize.c:84:2: error: unknown type name 'uid_t'; did you mean 'pid_t'? | ||||
|  | ||||
| Suggestion comes from https://stackoverflow.com/a/32282782/5828163 | ||||
| --- a/src/misc/gmtdigitize.c    2018-11-07 12:30:46.000000000 -0600 | ||||
| +++ b/src/misc/gmtdigitize.c    2018-11-07 12:31:36.000000000 -0600 | ||||
| @@ -38,6 +38,8 @@ | ||||
|   */ | ||||
|    | ||||
|  #include "gmt.h" | ||||
| +#include <sys/types.h> | ||||
| +#include <unistd.h> | ||||
|   | ||||
|  #ifndef WIN32 | ||||
|  #include <termios.h> | ||||
							
								
								
									
										38
									
								
								var/spack/repos/builtin/packages/hc/package.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								var/spack/repos/builtin/packages/hc/package.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | ||||
| # Copyright 2013-2018 Lawrence Livermore National Security, LLC and other | ||||
| # Spack Project Developers. See the top-level COPYRIGHT file for details. | ||||
| # | ||||
| # SPDX-License-Identifier: (Apache-2.0 OR MIT) | ||||
|  | ||||
| from spack import * | ||||
|  | ||||
|  | ||||
| class Hc(MakefilePackage): | ||||
|     """HC is a global mantle circulation solver following Hager & O'Connell | ||||
|     (1981) which can compute velocities, tractions, and geoid for simple | ||||
|     density distributions and plate velocities.""" | ||||
|  | ||||
|     homepage = "https://geodynamics.org/cig/software/hc/" | ||||
|     url      = "https://geodynamics.org/cig/software/hc/hc-1.0.7.tar.gz" | ||||
|  | ||||
|     version('1.0.7', sha256='7499ea76ac4739a9c0941bd57d124fb681fd387c8d716ebb358e6af3395103ed') | ||||
|  | ||||
|     depends_on('gmt@4.2.1:4.999') | ||||
|     depends_on('netcdf') | ||||
|  | ||||
|     # Build phase fails in parallel with the following error messages: | ||||
|     # /usr/bin/ld: cannot find -lrick | ||||
|     # /usr/bin/ld: cannot find -lhc | ||||
|     # /usr/bin/ld: cannot find -lggrd | ||||
|     parallel = False | ||||
|  | ||||
|     def setup_environment(self, spack_env, run_env): | ||||
|         spack_env.set('GMTHOME', self.spec['gmt'].prefix) | ||||
|         spack_env.set('NETCDFHOME', self.spec['netcdf'].prefix) | ||||
|         spack_env.set('HC_HOME', self.prefix) | ||||
|         spack_env.unset('ARCH') | ||||
|  | ||||
|     def install(self, spec, prefix): | ||||
|         # Most files are installed during the build stage. | ||||
|         # Manually install header files as well. | ||||
|         for header in find('.', '*.h'): | ||||
|             install(header, prefix.include) | ||||
							
								
								
									
										21
									
								
								var/spack/repos/builtin/packages/py-merlin/package.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								var/spack/repos/builtin/packages/py-merlin/package.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | ||||
| # Copyright 2013-2018 Lawrence Livermore National Security, LLC and other | ||||
| # Spack Project Developers. See the top-level COPYRIGHT file for details. | ||||
| # | ||||
| # SPDX-License-Identifier: (Apache-2.0 OR MIT) | ||||
|  | ||||
| from spack import * | ||||
|  | ||||
|  | ||||
| class PyMerlin(PythonPackage): | ||||
|     """A custom version of Phillip J. Eby's setuptools.""" | ||||
|  | ||||
|     homepage = "https://pypi.org/project/merlin/" | ||||
|     url      = "https://pypi.io/packages/source/m/merlin/merlin-1.8.tar.gz" | ||||
|  | ||||
|     version('1.8', sha256='a1ba9c13c74daa1724dd3820f1c241d7594d487b11f35347606986028c1881fd') | ||||
|  | ||||
|     depends_on('python@:2', type=('build', 'run')) | ||||
|  | ||||
|     def test(self): | ||||
|         # Unit tests are missing from tarball | ||||
|         pass | ||||
							
								
								
									
										20
									
								
								var/spack/repos/builtin/packages/py-pythia/package.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								var/spack/repos/builtin/packages/py-pythia/package.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| # Copyright 2013-2018 Lawrence Livermore National Security, LLC and other | ||||
| # Spack Project Developers. See the top-level COPYRIGHT file for details. | ||||
| # | ||||
| # SPDX-License-Identifier: (Apache-2.0 OR MIT) | ||||
|  | ||||
| from spack import * | ||||
|  | ||||
|  | ||||
| class PyPythia(PythonPackage): | ||||
|     """Pythia refers to the Pyre framework and a collection of packages that | ||||
|     interact with it, such as an interface to the ACIS solid modelling package. | ||||
|     """ | ||||
|  | ||||
|     homepage = "https://geodynamics.org/cig/software/pythia/" | ||||
|     url      = "https://geodynamics.org/cig/software/github/pythia/v0.8.1.18/pythia-0.8.1.18.tar.gz" | ||||
|  | ||||
|     version('0.8.1.18', sha256='f6025e6d70046dc71e375eded3d731506f8dd79e2e53b7e1436754439dcdef1e') | ||||
|  | ||||
|     depends_on('python@:2', type=('build', 'run')) | ||||
|     depends_on('py-merlin', type='build') | ||||
		Reference in New Issue
	
	Block a user
	 Adam J. Stewart
					Adam J. Stewart