summaryrefslogtreecommitdiff
path: root/var
diff options
context:
space:
mode:
authorAMD Toolchain Support <73240730+amd-toolchain-support@users.noreply.github.com>2022-07-28 04:14:27 +0530
committerGitHub <noreply@github.com>2022-07-27 15:44:27 -0700
commit6c0ca932aa7064d57737ccc5327bc12c87017546 (patch)
tree9aafbf726a6e177dfe737bac7fce8434d25ab8eb /var
parent5f845f3f31fe5986fbcc67abf192e366581932ef (diff)
downloadspack-6c0ca932aa7064d57737ccc5327bc12c87017546.tar.gz
spack-6c0ca932aa7064d57737ccc5327bc12c87017546.tar.bz2
spack-6c0ca932aa7064d57737ccc5327bc12c87017546.tar.xz
spack-6c0ca932aa7064d57737ccc5327bc12c87017546.zip
Adding Flamemaster product (#31126)
* Adding Flamemaster product About FlameMaster: Flamemaster is an open source C++ program package for 0D combustion and 1D laminar flame calculations. * Addressed review comments and style tests errors * Addressed style tests errors * Incorporated spack style of coding * Fixed following spack style error [E228] missing whitespace around modulo operator * Update package.py addressing style issues * Update package.py * Changes to maintainers entry
Diffstat (limited to 'var')
-rw-r--r--var/spack/repos/builtin/packages/flamemaster/package.py281
1 files changed, 281 insertions, 0 deletions
diff --git a/var/spack/repos/builtin/packages/flamemaster/package.py b/var/spack/repos/builtin/packages/flamemaster/package.py
new file mode 100644
index 0000000000..e19d7e8337
--- /dev/null
+++ b/var/spack/repos/builtin/packages/flamemaster/package.py
@@ -0,0 +1,281 @@
+# Copyright 2013-2022 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)
+
+import os
+from os.path import join as pjoin
+
+from spack.package import *
+
+
+class Flamemaster(CMakePackage):
+ """
+ FlameMaster is an open source C++ program package for 0D combustion
+ and 1D laminar flame calculations. FlameMaster is written by Heinz Pitsch.
+ """
+
+ homepage = "https://www.itv.rwth-aachen.de/downloads/flamemaster/"
+ url = "file://{0}/flamemaster-4.3.1.tar.gz".format(os.getcwd())
+ manual_download = True
+
+ maintainers = ['amd-toolchain-support']
+
+ version('4.3.1', sha256='8ff382f098e44a7978fe1bcc688272d65f0b374487af4523d94cca983dc57378')
+
+ variant(
+ 'build_type',
+ default='Release',
+ description='The build type to build',
+ values=('None', 'Debug', 'Release', 'RelWithDebInfo', 'MinSizeRel'))
+ variant(
+ 'bilin_omega',
+ default=True,
+ description='Compile with bilinear interpolation'
+ 'for collision integrals (omega)')
+ variant(
+ 'combustion',
+ default=False,
+ description='Integrate comustion libraries'
+ 'for kinetics, thermodynamics, and transport')
+ variant(
+ 'fortran_code',
+ default=False,
+ description='Compile optional fortran code like dassl, the adiabatic'
+ 'flame temperature module, and a mechanism converter tool')
+ variant(
+ 'scanmannew',
+ default=False,
+ description='Compile the new ScanMan')
+ variant(
+ 'dco_chunk_tape',
+ default=False,
+ description='Dynamically allocate memory for the dco tape')
+ variant(
+ 'troe',
+ default=False,
+ description='FlameMaster mechanism format allows for specifying'
+ 'an additional parameter. This option disables the use of the'
+ 'paramter which is currently required to run adjoint sensitivity analysis.')
+ variant(
+ 'jl_debug',
+ default=False,
+ description='Debug mode during development(Johannes Lotz)')
+ variant(
+ 'flux_bc',
+ default=False,
+ description='Specify boundary conditions as velocity [m/s]'
+ 'or massflux in Counterflow (Physical Coord.)')
+ variant(
+ 'full_diffusion',
+ default=False,
+ description='Compile with multi-component diffusion')
+ variant(
+ 'intel_prof',
+ default=False,
+ description='Enable -prof-gen and -prof-use')
+ variant(
+ 'soot_lib',
+ default=False,
+ description='Soot library with moment equation solving')
+ variant(
+ 'newton_perf',
+ default=False,
+ description='Compile with time measurement of each Newton step')
+ variant(
+ 'optima',
+ default=False,
+ description='Include code for Optima++ features')
+ variant(
+ 'opt_reaction_rates',
+ default=True,
+ description='Fast computation of reaction rates.')
+ variant(
+ 'prem_upwind_convec',
+ default=True,
+ description='Use upwind scheme for the convective term.')
+ variant(
+ 'sundials_hint',
+ default=False,
+ description='No hints on how FlameMaster can install sundials.')
+ variant(
+ 'simd_kinetics',
+ default=False,
+ description='WITH SIMD_KINETICS')
+ variant(
+ 'solve_mom_log',
+ default=False,
+ description='Solve the soot Moments equation with logarithms')
+ variant(
+ 'solve_with_z',
+ default=True,
+ description='Counter flow diffusion flame implementation includes'
+ 'a solution of the mixture fraction equation')
+ variant(
+ 'sundials_lapack',
+ default=False,
+ description='Link LAPACK in sundials')
+ variant(
+ 'sundials_no_idas_search',
+ default=False,
+ description='Do not search for IDAS (part of sundials).')
+ variant(
+ 'sundials_use_static_lib',
+ default=True,
+ description='Use static linking for sundials libraries')
+ variant(
+ 'sundials_diagnos',
+ default=False,
+ description='Only for troubleshooting')
+ variant(
+ 'tests',
+ default=False,
+ description='Install google-test framework for unit tests'
+ 'and enable units tests.')
+ variant(
+ 'third_party_in_build_dir',
+ default=True,
+ description='Compile third party libraries and tools in build diretory')
+ variant(
+ 'local_lewis',
+ default=False,
+ description='Write Lewis numbers at every grid point')
+ variant(
+ 'flamemaster_prefix',
+ default=True,
+ description='Used to modify the installation directories')
+ variant(
+ 'openmp',
+ default=True,
+ description='Build with OpenMP')
+ variant(
+ 'eigen',
+ default=False,
+ description='Build with Eigen Integration')
+ variant(
+ 'eglib',
+ default=False,
+ description='Build with EG lib')
+ variant(
+ 'sundials',
+ default=True,
+ description='with sundials')
+
+ depends_on('blas')
+ depends_on('lapack')
+ depends_on('cmake@3.12', type='build')
+ depends_on('bison')
+ depends_on('flex')
+
+ root_cmakelists_dir = 'Repository'
+
+ def setup_build_environment(self, env):
+ env.set('LAPACK_HOME', self.spec['lapack'].prefix)
+ env.set('BLIS_HOME', self.spec['blas'].prefix)
+
+ if self.spec.satisfies('%aocc'):
+ env.append_flags(
+ 'LDFLAGS',
+ '-L{0} -lalm -lm -lstdc++'.format(
+ pjoin(os.path.dirname(os.path.dirname(self.compiler.cxx)), "lib")))
+
+ def cmake_args(self):
+ spec = self.spec
+
+ args = [
+ '-DCMAKE_C_COMPILER=%s' % spack_cc,
+ '-DCMAKE_CXX_COMPILER=%s' % spack_cxx,
+ ]
+
+ if spec.variants['build_type'].value == 'Release':
+ cxx_flags_release = []
+ c_flags_release = []
+ fortran_flags_release = []
+ if self.spec.satisfies('%aocc') or self.spec.satisfies('%gcc'):
+ cxx_flags_release.extend(['-Ofast', '-ffast-math'])
+ c_flags_release.extend(['-Ofast', '-ffast-math'])
+ fortran_flags_release.extend(['-Ofast'])
+ args.extend([
+ self.define('CMAKE_CXX_FLAGS_RELEASE', ' '.join(cxx_flags_release)),
+ self.define('CMAKE_C_FLAGS_RELEASE', ' '.join(c_flags_release)),
+ self.define('CMAKE_Fortran_FLAGS_RELEASE', ' '.join(
+ fortran_flags_release)),
+ ])
+ if self.spec.satisfies('%icc'):
+ cxxflags = "-Ofast -ffast-math -DNDEBUG -march=native\
+ -mtune=native -funroll-all-loops\
+ -qopt-multi-version-aggressive -ipo -parallel"
+ cflags = "-Ofast -ffast-math -DNDEBUG -march=native\
+ -mtune=native -funroll-all-loops -ipo -parallel"
+ fcflags = "-Ofast -march=native -mtune=native -ipo -parallel"
+ args.extend([
+ '-DCMAKE_CXX_FLAGS_RELEASE=%s' % cxxflags,
+ '-DCMAKE_C_FLAGS_RELEASE=%s' % cflags,
+ '-DCMAKE_Fortran_FLAGS_RELEASE=%s' % fcflags,
+ ])
+
+ if self.spec.satisfies('%aocc'):
+ OpenMP_CXX_FLAGS = "-fopenmp=libomp"
+ clang = self.compiler.cc
+ clang_bin = os.path.dirname(clang)
+ clang_root = os.path.dirname(clang_bin)
+ args.extend([
+ '-DOpenMP_CXX_FLAGS=%s' % OpenMP_CXX_FLAGS,
+ '-DOpenMP_C_FLAGS=%s' % OpenMP_CXX_FLAGS,
+ '-DOpenMP_C_LIB_NAMES=libomp',
+ '-DOpenMP_CXX_LIB_NAMES=libomp',
+ '-DOpenMP_libomp_LIBRARY={0}/lib/libomp.so'.format(clang_root)
+ ])
+
+ args.append(self.define_from_variant('BILIN_OMEGA', 'bilin_omega'))
+ args.append(self.define_from_variant('COMBUSTION_LIBS', 'combustion'))
+ args.append(self.define_from_variant('COMPILE_FORTRAN_SRC', 'fortran_code'))
+ args.append(self.define_from_variant('COMPILE_SCANMANNEW', 'scanmannew'))
+ args.append(self.define_from_variant('DCO_CHUNK_TAPE', 'dco_chunk_tape'))
+ args.append(self.define_from_variant('CHEMKIN_TROE', 'troe'))
+ args.append(self.define_from_variant('JL_DEBUG', 'jl_debug'))
+ args.append(self.define_from_variant('FLUX_BC_COUNTERFLOW', 'flux_bc'))
+ args.append(self.define_from_variant('FULL_DIFFUSION', 'full_diffusion'))
+ args.append(self.define_from_variant('ITV_SOOT_LIB', 'soot_lib'))
+ args.append(self.define_from_variant('NEWTON_PERFORMANCE', 'newton_perf'))
+ args.append(self.define_from_variant('OPTIMAPP', 'optima'))
+ args.append(self.define_from_variant(
+ 'OPT_REACTION_RATES', 'opt_reaction_rates'))
+ args.append(self.define_from_variant(
+ 'PREM_UPWIND_CONVEC', 'prem_upwind_convec'))
+ args.append(self.define_from_variant('SILENCE_SUNDIALS_HINT', 'sundials_hint'))
+ args.append(self.define_from_variant('SIMD_KINETICS', 'simd_kinetics'))
+ args.append(self.define_from_variant('SOLVE_MOM_LOG', 'solve_mom_log'))
+ args.append(self.define_from_variant('SOLVE_WITH_Z', 'solve_with_z'))
+ args.append(self.define_from_variant('SUNDIALS_LAPACK', 'sundials_lapack'))
+ args.append(self.define_from_variant(
+ 'SUNDIALS_NO_IDAS_SEARCH', 'sundials_no_idas_search'))
+ args.append(self.define_from_variant(
+ 'SUNDIALS_USE_STATIC_LIBRARIES', 'sundials_use_static_lib'))
+ args.append(self.define_from_variant('TESTS', 'tests'))
+ args.append(self.define_from_variant(
+ 'THIRD_PARTY_IN_BUILD_DIR', 'third_party_in_build_dir'))
+ args.append(self.define_from_variant('WRITE_LOCAL_LEWIS', 'local_lewis'))
+ args.append(self.define_from_variant(
+ 'USE_FLAMEMASTER_PREFIX', 'flamemaster_prefix'))
+ args.append(self.define_from_variant('WITH_EG', 'eglib'))
+ args.append(self.define_from_variant('INSTALL_SUNDIALS', 'sundials'))
+ args.append("-DINTEL_PROF_GEN:BOOL=%s" % (
+ 'ON' if '+intel_prof' in spec else 'OFF'))
+ args.append("-DINTEL_PROF_USE:BOOL=%s" % (
+ 'ON' if '+intel_prof' in spec else 'OFF'))
+ args.append("-DSUNDI_DIAGNOS_SEARCH_HEADER_FILES:BOOL=%s" % (
+ 'ON' if '+sundials_diagnos' in spec else 'OFF'))
+ args.append("-DSUNDI_DIAGNOS_SEARCH_LIB_FILES:BOOL=%s" % (
+ 'ON' if '+sundials_diagnos' in spec else 'OFF'))
+ args.append("-DEIGEN_INTEGRATION:BOOL=%s" % (
+ 'ON' if '+eigen' in spec else 'OFF'))
+ args.append("-DINSTALL_EIGEN:BOOL=%s" % (
+ 'ON' if '+eigen' in spec else 'OFF'))
+
+ if '^amdlibflame' in spec:
+ args.append('-DBLA_VENDOR=FLAME')
+
+ args.append('-DFLAMEMASTER_INSTALL_PREFIX:PATH={0}'.format(spec.prefix))
+
+ return args