From 6c0ca932aa7064d57737ccc5327bc12c87017546 Mon Sep 17 00:00:00 2001 From: AMD Toolchain Support <73240730+amd-toolchain-support@users.noreply.github.com> Date: Thu, 28 Jul 2022 04:14:27 +0530 Subject: 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 --- .../repos/builtin/packages/flamemaster/package.py | 281 +++++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 var/spack/repos/builtin/packages/flamemaster/package.py (limited to 'var') 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 -- cgit v1.2.3-60-g2f50