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
This commit is contained in:
AMD Toolchain Support 2022-07-28 04:14:27 +05:30 committed by GitHub
parent 5f845f3f31
commit 6c0ca932aa
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -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