# Copyright 2013-2023 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.package import * class OpenradiossEngine(CMakePackage): """ OpenRadioss is the publicly available open-source code base that a worldwide community of researchers, software developers, and industry leaders are enhancing every day. OpenRadioss is changing the game by empowering users to make rapid contributions that tackle the latest challenges brought on by rapidly evolving technologies like battery development, lightweight materials and composites, human body models and biomaterials, autonomous driving and flight, as well as the desire to give passengers the safest environment possible via virtual testing. OpenRadioss Engine is a component of the OpenRadioss that runs the simulation in parallel. """ homepage = "https://www.openradioss.org/" git = "https://github.com/OpenRadioss/OpenRadioss.git" maintainers("kjrstory") version("main", branch="main") variant("mpi", default=False, description="Enable MPI support") variant("sp", default=False, description="Using single precision option") variant("debug", default=False, description="Debug Option") variant("static_link", default=True, description="Static_link Option") depends_on("openmpi", when="+mpi") depends_on("cmake@2.8:", type="build") depends_on("perl", type="build") depends_on("python", type="build") requires( "%gcc", "%intel", "%oneapi", "%aocc", "%arm", policy="one_of", msg="Openradioss-starter can be built using GNU Fortran, Intel Fortran, AOCC, \ or Armflang compilers only.", ) build_directory = "engine" root_cmakelists_dir = "engine" @property def compiler_name(self): compiler_mapping = { "aocc": "64_AOCC", "intel": "64_intel", "oneapi": "64_intel", "gcc": "64_gf", "arm": "a64_gf", } compiler_name = compiler_mapping[self.spec.compiler.name] return compiler_name def cmake_args(self): args = [ "-Dmpi_os=0", "-DCMAKE_Fortran_COMPILER={0}".format(spack_fc), "-DCMAKE_C_COMPILER={0}".format(spack_cc), "-DCMAKE_CPP_COMPILER={0}".format(spack_cxx), "-DCMAKE_CXX_COMPILER={0}".format(spack_cxx), "-Dsanitize=0", ] args.append("-Drach=linux" + self.compiler_name) if "+sp" in self.spec: args.append("-Dprecision=sp") else: args.append("-Dprecision=dp") if "+mpi" in self.spec: args.append("-DMPI=ompi") args.append("-Dmpi_root=" + self.spec["mpi"].prefix) args.append("-Dmpi_incdir=" + self.spec["mpi"].prefix.include) args.append("-Dmpi_libdir=" + self.spec["mpi"].prefix.lib) else: args.append("-DMPI=smp") if "+debug" in self.spec: args.append("-Ddebug=1") else: args.append("-Ddebug=0") if "+static_link" in self.spec: args.append("-Dstatic_link=1") else: args.append("-Dstatic_link=0") return args def install(self, spec, prefix): mkdirp(join_path(prefix, "exec")) if "+mpi" in spec: exec_file = "engine_linux" + self.compiler_name + "_ompi" else: exec_file = "engine_linux" + self.compiler_name install( join_path(self.stage.source_path, "engine", exec_file), join_path(prefix, "exec", exec_file), ) install_tree( join_path(self.stage.source_path, "hm_cfg_files"), join_path(prefix, "hm_cfg_files") ), install_tree( join_path(self.stage.source_path, "extlib", "h3d"), join_path(prefix, "extlib", "h3d") ), install_tree( join_path(self.stage.source_path, "extlib", "hm_reader"), join_path(prefix, "extlib", "hm_reader"), ) def setup_run_environment(self, env): env.set("OPENRADIOSS_PATH", self.prefix) env.set("RAD_CFG_PATH", join_path(self.prefix, "hm_cfg_files")) env.set("RAD_H3D_PATH", join_path(self.prefix, "extlib", "h3d", "lib", "linux64")) env.set("OMP_STACKSIZE", "400m") env.prepend_path("LD_LIBRARY_PATH", join_path(self.prefix, "extlib", "h3d", "linux64")) env.prepend_path( "LD_LIBRARY_PATH", join_path(self.prefix, "extlib", "hm_reader", "linux64") ) env.prepend_path("PATH", join_path(self.prefix, "exec")) if "+mpi" in self.spec: env.prepend_path("PATH", self.spec["mpi"].prefix.bin) env.prepend_path("LD_LIBRARY_PATH", self.spec["mpi"].prefix.lib)