https://mooseframework.inl.gov
Loading...
Searching...
No Matches
ADFParser.C
Go to the documentation of this file.
1//* This file is part of the MOOSE framework
2//* https://mooseframework.inl.gov
3//*
4//* All rights reserved, see COPYRIGHT for full restrictions
5//* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6//*
7//* Licensed under LGPL 2.1, please see LICENSE for details
8//* https://www.gnu.org/licenses/lgpl-2.1.html
9
10#include "ADFParser.h"
11#include "MooseUtils.h"
12#include "ExecutablePath.h"
13
14ADFParser::ADFParser() : FunctionParserAD(), _epsilon(1e-12) {}
15
16ADFParser::ADFParser(const ADFParser & cpy) : FunctionParserAD(cpy), _epsilon(1e-12) {}
17
18#ifndef ADFPARSER_INCLUDES
19#error ... \
20 The ADFPARSER_INCLUDES macro is not defined. A possible reason is that you \
21 are compiling MOOSE from a custom application. Please check your application \
22 Makefile and make sure that you are appending options to ADDITIONAL_CPPFLAGS \
23 using the += operator, rather than overwriting the variable with the := operator.
24#endif
25
26bool
28{
29#if LIBMESH_HAVE_FPARSER_JIT
30 std::string includes;
31 const auto type_hash = typeid(ADReal).hash_code();
32 bool result;
33
34 std::string fopenmp;
35#if defined(_OPENMP)
36#if defined(__INTEL_LLVM_COMPILER)
37 fopenmp = "-qopenmp";
38#else
39 fopenmp = "-fopenmp";
40#endif
41#endif
42
43 const auto include_path_env = std::getenv("MOOSE_ADFPARSER_JIT_INCLUDE");
44 if (include_path_env)
45 result = JITCompileHelper(
46 "ADReal", fopenmp, "#include \"" + std::string(include_path_env) + "\"\n", type_hash);
47 else
48 {
49 // check if we can find an installed version of the monolithic include
50 const std::string include_path =
51 MooseUtils::pathjoin(Moose::getExecutablePath(), "../include/moose/ADRealMonolithic.h");
52 if (MooseUtils::checkFileReadable(include_path, false, false, false))
53 result =
54 JITCompileHelper("ADReal", fopenmp, "#include \"" + include_path + "\"\n", type_hash);
55 else
56 // otherwise use the compiled in location from the source tree
57 result = JITCompileHelper("ADReal",
58 fopenmp + " " + ADFPARSER_INCLUDES,
59 "#include \"MooseConfig.h\"\n#include \"ADReal.h\"\n",
60 type_hash);
61 }
62
63 if (!result)
64#endif
65 mooseError("ADFParser::JITCompile() failed. Evaluation not possible.");
66
67 return true;
68}
69
72{
73 mooseAssert(compiledFunction, "ADFParser objects must be JIT compiled before evaluation!");
74 ADReal ret;
75 (*reinterpret_cast<CompiledFunctionPtr<ADReal>>(compiledFunction))(&ret, vars, pImmed, _epsilon);
76 return ret;
77}
DualNumber< Real, DNDerivativeType, true > ADReal
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application.
Definition MooseError.h:311
char ** vars
const Real _epsilon
Definition ADFParser.h:29
bool JITCompile()
Definition ADFParser.C:27
Real Eval(const Real *)
Definition ADFParser.h:25
std::filesystem::path pathjoin(const std::filesystem::path &p)
Definition MooseUtils.C:70
bool checkFileReadable(const std::string &filename, bool check_line_endings, bool throw_on_unreadable, bool check_for_git_lfs_pointer)
Definition MooseUtils.C:265
std::string getExecutablePath()
Gets the directory the running executable is on Mac OS X and linux.