Block-Structured AMR Software Framework
 
Loading...
Searching...
No Matches
AMReX_Parser_Y.H
Go to the documentation of this file.
1#ifndef AMREX_PARSER_Y_H_
2#define AMREX_PARSER_Y_H_
3#include <AMReX_Config.H>
4
6#include <AMReX_GpuPrint.H>
7#include <AMReX_Math.H>
8#include <AMReX_Print.H>
9#include <AMReX_REAL.H>
10
11#include <cstddef>
12#include <cstdio>
13#include <cstdlib>
14#include <cstring>
15#include <map>
16#include <set>
17#include <string>
18#include <string_view>
19#include <type_traits>
20#include <vector>
21
22void amrex_parsererror (char const *s, ...);
23
24namespace amrex {
25
26using ParserUserFn1 = double (*)(double);
27using ParserUserFn2 = double (*)(double,double);
28using ParserUserFn3 = double (*)(double,double,double);
29using ParserUserFn4 = double (*)(double,double,double,double);
30
55
56static
57#if defined(__INTEL_COMPILER) && defined(__EDG__)
58 const
59#else
60 constexpr
61#endif
62std::string_view parser_f1_s[] =
63{
64 "sqrt",
65 "exp",
66 "log",
67 "log10",
68 "sin",
69 "cos",
70 "tan",
71 "asin",
72 "acos",
73 "atan",
74 "sinh",
75 "cosh",
76 "tanh",
77 "asinh",
78 "acosh",
79 "atanh",
80 "abs",
81 "floor",
82 "ceil",
83 "comp_ellint_1",
84 "comp_ellint_2",
85 "erf"
86};
87
107
108static
109#if defined(__INTEL_COMPILER) && defined(__EDG__)
110 const
111#else
112 constexpr
113#endif
114std::string_view parser_f2_s[] =
115{
116 "pow",
117 "atan2",
118 "gt",
119 "lt",
120 "geq",
121 "leq",
122 "eq",
123 "neq",
124 "and",
125 "and",
126 "or",
127 "heaviside",
128 "jn",
129 "yn",
130 "min",
131 "max",
132 "fmod"
133};
134
135enum parser_f3_t { // functions with three arguments
138
139static
140#if defined(__INTEL_COMPILER) && defined(__EDG__)
141 const
142#else
143 constexpr
144#endif
145std::string_view parser_f3_s[] =
146{
147 "if"
148};
149
166
167static
168#if defined(__INTEL_COMPILER) && defined(__EDG__)
169 const
170#else
171 constexpr
172#endif
173std::string_view parser_node_s[] =
174{
175 "number",
176 "symbol",
177 "add",
178 "sub",
179 "mul",
180 "div",
181 "f1",
182 "f2",
183 "f3",
184 "usrf1",
185 "usrf2",
186 "usrfn",
187 "assign",
188 "list"
189};
190
191/* In C, the address of the first member of a struct is the same as
192 * the address of the struct itself. Because of this, all struct parser_*
193 * pointers can be passed around as struct parser_node pointer and enum
194 * parser_node_t type can be safely checked to determine their real type.
195 */
196
200 struct parser_node* l; // NOLINT(misc-confusable-identifiers)
201 struct parser_node* r;
203};
204
205struct alignas(parser_node) parser_number {
207 double value;
208};
209
210struct alignas(parser_node) parser_symbol {
212 char* name;
213 int ip;
214};
215
216struct alignas(parser_node) parser_f1 { /* Builtin functions with one argument */
219 struct parser_node* l; // NOLINT(misc-confusable-identifiers)
222};
223
224struct alignas(parser_node) parser_f2 { /* Builtin functions with two arguments */
227 struct parser_node* l; // NOLINT(misc-confusable-identifiers)
228 struct parser_node* r;
230};
231
232struct alignas(parser_node) parser_f3 { /* Builtin functions with three arguments */
238};
239
240struct alignas(parser_node) parser_usrf1 { /* User functions with one argument */
243 char* name;
244 struct parser_node* l; // NOLINT(misc-confusable-identifiers)
246};
247
248struct alignas(parser_node) parser_usrf2 { /* User functions with two arguments */
251 char* name;
252 struct parser_node* l; // NOLINT(misc-confusable-identifiers)
253 struct parser_node* r;
254};
255
256struct alignas(parser_node) parser_usrfn { /* User functions with three or more arguments */
258 short argc;
259 char* name;
262};
263
264struct alignas(parser_node) parser_assign {
267 struct parser_node* v;
268};
269
270static_assert(sizeof(parser_f3) <= sizeof(parser_node) &&
271 sizeof(parser_usrf1) <= sizeof(parser_node) &&
272 sizeof(parser_usrf2) <= sizeof(parser_node) &&
273 sizeof(parser_usrfn) <= sizeof(parser_node),
274 "amrex parser: sizeof parser_node too small");
275
276/*******************************************************************/
277
278/* These functions are used in bison rules to generate the original AST. */
279void parser_defexpr (struct parser_node* body);
280struct parser_symbol* parser_makesymbol (char* name);
281struct parser_node* parser_newnode (enum parser_node_t type, struct parser_node* l,
282 struct parser_node* r);
283struct parser_node* parser_newneg (struct parser_node* n);
284struct parser_node* parser_newnumber (double d);
285struct parser_node* parser_newsymbol (struct parser_symbol* sym);
286struct parser_node* parser_newf1 (enum parser_f1_t ftype, struct parser_node* l);
287struct parser_node* parser_newf2 (enum parser_f2_t ftype, struct parser_node* l,
288 struct parser_node* r);
289struct parser_node* parser_newf3 (enum parser_f3_t ftype, struct parser_node* n1,
290 struct parser_node* n2, struct parser_node* n3);
291struct parser_node* parser_newusrf1 (struct parser_symbol* fname, struct parser_node* l);
292struct parser_node* parser_newusrf2 (struct parser_symbol* fname, struct parser_node* l,
293 struct parser_node* r);
294struct parser_node* parser_newusrfn (struct parser_symbol* fname,
295 std::vector<struct parser_node*> const& nv);
296struct parser_node* parser_newassign (struct parser_symbol* s, struct parser_node* v);
297struct parser_node* parser_newlist (struct parser_node* nl, struct parser_node* nr);
298struct parser_node* parser_newcmpchain (struct parser_node* nl, enum parser_f2_t cmp,
299 struct parser_node* nr);
300
301/*******************************************************************/
302
303/* This is our struct for storing AST in a more packed way. The whole
304 * tree is stored in a contiguous chunk of memory starting from void*
305 * p_root with a size of sz_mempool.
306 */
308 void* p_root;
309 void* p_free;
311 std::size_t sz_mempool;
312};
313
315void amrex_parser_delete (struct amrex_parser* parser);
317
318struct parser_node* parser_ast_dup (struct amrex_parser* parser, struct parser_node* node);
319
320void parser_regvar (struct amrex_parser* parser, char const* name, int i);
321void parser_setconst (struct amrex_parser* parser, char const* name, double c);
322void parser_print (struct amrex_parser* parser);
323std::set<std::string> parser_get_symbols (struct amrex_parser* parser);
324std::map<std::string,int> parser_get_user_functions (struct amrex_parser* parser);
325int parser_depth (struct amrex_parser* parser);
326
327/* We need to walk the tree in these functions */
328void parser_ast_optimize (struct parser_node*& node, std::map<std::string,double>& local_consts);
329std::size_t parser_ast_size (struct parser_node* node);
330void parser_ast_print (struct parser_node* node, std::string const& space, std::ostream& printer);
331void parser_ast_regvar (struct parser_node* node, char const* name, int i);
332void parser_ast_setconst (struct parser_node* node, char const* name, double c);
333void parser_ast_get_symbols (struct parser_node* node, std::set<std::string>& symbols,
334 std::set<std::string>& local_symbols);
336 std::map<std::string,int>& user_functions);
337int parser_ast_depth (struct parser_node* node);
338void parser_ast_sort (struct parser_node* node);
339
340/*******************************************************************/
341double parser_get_number (struct parser_node* node);
342void parser_set_number (struct parser_node* node, double v);
343bool parser_node_equal (struct parser_node* a, struct parser_node* b);
344bool parser_same_symbol (struct parser_node* a, struct parser_node* b);
345/*******************************************************************/
346
347template <typename T>
349T parser_math_exp (T a) { return std::exp(a); }
350
351template <typename T>
353T parser_math_log (T a) { return std::log(a); }
354
355template <typename T>
357T parser_math_log10 (T a) { return std::log10(a); }
358
359template <typename T>
361T parser_math_sin (T a) { return std::sin(a); }
362
363template <typename T>
365T parser_math_cos (T a) { return std::cos(a); }
366
367template <typename T>
369T parser_math_tan (T a) { return std::tan(a); }
370
371template <typename T>
373T parser_math_asin (T a) { return std::asin(a); }
374
375template <typename T>
377T parser_math_acos (T a) { return std::acos(a); }
378
379template <typename T>
381T parser_math_atan (T a) { return std::atan(a); }
382
383template <typename T>
385T parser_math_sinh (T a) { return std::sinh(a); }
386
387template <typename T>
389T parser_math_cosh (T a) { return std::cosh(a); }
390
391template <typename T>
393T parser_math_tanh (T a) { return std::tanh(a); }
394
395template <typename T>
397T parser_math_asinh (T a) { return std::asinh(a); }
398
399template <typename T>
401T parser_math_acosh (T a) { return std::acosh(a); }
402
403template <typename T>
405T parser_math_atanh (T a) { return std::atanh(a); }
406
407template <typename T>
410{
411#if defined(__GNUC__) && !defined(__clang__) && !defined(__CUDA_ARCH__) && !defined(__NVCOMPILER)
412 return std::comp_ellint_1(k);
413#else
414 return amrex::Math::comp_ellint_1<T>(k);
415#endif
416}
417
418template <typename T>
421{
422#if defined(__GNUC__) && !defined(__clang__) && !defined(__CUDA_ARCH__) && !defined(__NVCOMPILER)
423 return std::comp_ellint_2(k);
424#else
425 return amrex::Math::comp_ellint_2<T>(k);
426#endif
427}
428
429template <typename T>
432{
433 return std::erf(a);
434}
435
436template <typename T>
438T parser_math_pow (T a, T b) { return std::pow(a,b); }
439
440template <typename T>
442T parser_math_atan2 (T a, T b) { return std::atan2(a,b); }
443
444template <typename T>
446T parser_math_jn (int a, T b)
447{
448#if defined AMREX_USE_SYCL || defined __MINGW32__
450 // neither jn(f) nor std::cyl_bessel_j work yet
451 // https://github.com/oneapi-src/oneAPI-spec/issues/308
452 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(false, "parser: jn in SYCL not supported yet");
453 return 0.0;
454#else
455 return jn(a, b);
456#endif
457}
458
459template <typename T>
461T parser_math_yn (int a, T b)
462{
463#if defined AMREX_USE_SYCL || defined __MINGW32__
465 // neither yn(f) nor std::cyl_bessel_y work yet
466 // https://github.com/oneapi-src/oneAPI-spec/issues/308
467 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(false, "parser: yn in SYCL not supported yet");
468 return 0.0;
469#else
470 return yn(a, b);
471#endif
472}
473
475parser_call_f1 (enum parser_f1_t type, double a)
476{
477 switch (type) {
478 case PARSER_SQRT: return std::sqrt(a);
479 case PARSER_EXP: return parser_math_exp<double>(a);
480 case PARSER_LOG: return parser_math_log<double>(a);
481 case PARSER_LOG10: return parser_math_log10<double>(a);
482 case PARSER_SIN: return parser_math_sin<double>(a);
483 case PARSER_COS: return parser_math_cos<double>(a);
484 case PARSER_TAN: return parser_math_tan<double>(a);
485 case PARSER_ASIN: return parser_math_asin<double>(a);
486 case PARSER_ACOS: return parser_math_acos<double>(a);
487 case PARSER_ATAN: return parser_math_atan<double>(a);
488 case PARSER_SINH: return parser_math_sinh<double>(a);
489 case PARSER_COSH: return parser_math_cosh<double>(a);
490 case PARSER_TANH: return parser_math_tanh<double>(a);
491 case PARSER_ASINH: return parser_math_asinh<double>(a);
492 case PARSER_ACOSH: return parser_math_acosh<double>(a);
493 case PARSER_ATANH: return parser_math_atanh<double>(a);
494 case PARSER_ABS: return std::abs(a);
495 case PARSER_FLOOR: return std::floor(a);
496 case PARSER_CEIL: return std::ceil(a);
497 case PARSER_COMP_ELLINT_1: return parser_math_comp_ellint_1<double>(a);
498 case PARSER_COMP_ELLINT_2: return parser_math_comp_ellint_2<double>(a);
499 case PARSER_ERF: return parser_math_erf<double>(a);
500 default:
501 amrex::Abort("parser_call_f1: Unknown function ");
502 return 0.0;
503 }
504}
505
507parser_call_f2 (enum parser_f2_t type, double a, double b)
508{
509 switch (type) {
510 case PARSER_POW:
511 return parser_math_pow<double>(a,b);
512 case PARSER_ATAN2:
513 return parser_math_atan2<double>(a,b);
514 case PARSER_GT:
515 return (a > b) ? 1.0 : 0.0;
516 case PARSER_LT:
517 return (a < b) ? 1.0 : 0.0;
518 case PARSER_GEQ:
519 return (a >= b) ? 1.0 : 0.0;
520 case PARSER_LEQ:
521 return (a <= b) ? 1.0 : 0.0;
522 case PARSER_EQ:
523 return (a == b) ? 1.0 : 0.0;
524 case PARSER_NEQ:
525 return (a != b) ? 1.0 : 0.0;
526 case PARSER_CMP_CHAIN:
527 case PARSER_AND:
528 return ((a != 0.0) && (b != 0.0)) ? 1.0 : 0.0;
529 case PARSER_OR:
530 return ((a != 0.0) || (b != 0.0)) ? 1.0 : 0.0;
531 case PARSER_HEAVISIDE:
532 return (a < 0.0) ? 0.0 : ((a > 0.0) ? 1.0 : b);
533 case PARSER_JN:
534 return parser_math_jn<double>(int(a),b);
535 case PARSER_YN:
536 return parser_math_yn<double>(int(a),b);
537 case PARSER_MIN:
538 return (a < b) ? a : b;
539 case PARSER_MAX:
540 return (a > b) ? a : b;
541 case PARSER_FMOD:
542 return std::fmod(a,b);
543 default:
544 amrex::Abort("parser_call_f2: Unknown function");
545 return 0.0;
546 }
547}
548
550parser_call_f3 (enum parser_f3_t /*type*/, double a, double b, double c)
551{
552 // There is only one type currently
553 return (a != 0.0) ? b : c;
554}
555
556}
557
558#endif
#define AMREX_ALWAYS_ASSERT_WITH_MESSAGE(EX, MSG)
Definition AMReX_BLassert.H:49
#define AMREX_NO_INLINE
Definition AMReX_Extension.H:136
#define AMREX_FORCE_INLINE
Definition AMReX_Extension.H:119
#define AMREX_GPU_HOST_DEVICE
Definition AMReX_GpuQualifiers.H:20
void amrex_parsererror(char const *s,...)
Definition AMReX_Parser_Y.cpp:10
Definition AMReX_Amr.cpp:49
parser_f2_t
Definition AMReX_Parser_Y.H:88
@ PARSER_LT
Definition AMReX_Parser_Y.H:92
@ PARSER_AND
Definition AMReX_Parser_Y.H:98
@ PARSER_NEQ
Definition AMReX_Parser_Y.H:96
@ PARSER_OR
Definition AMReX_Parser_Y.H:99
@ PARSER_ATAN2
Definition AMReX_Parser_Y.H:90
@ PARSER_LEQ
Definition AMReX_Parser_Y.H:94
@ PARSER_YN
Definition AMReX_Parser_Y.H:102
@ PARSER_GEQ
Definition AMReX_Parser_Y.H:93
@ PARSER_POW
Definition AMReX_Parser_Y.H:89
@ PARSER_JN
Definition AMReX_Parser_Y.H:101
@ PARSER_MIN
Definition AMReX_Parser_Y.H:103
@ PARSER_CMP_CHAIN
Definition AMReX_Parser_Y.H:97
@ PARSER_GT
Definition AMReX_Parser_Y.H:91
@ PARSER_MAX
Definition AMReX_Parser_Y.H:104
@ PARSER_FMOD
Definition AMReX_Parser_Y.H:105
@ PARSER_HEAVISIDE
Definition AMReX_Parser_Y.H:100
@ PARSER_EQ
Definition AMReX_Parser_Y.H:95
__host__ __device__ T parser_math_erf(T a)
Definition AMReX_Parser_Y.H:431
void parser_set_number(struct parser_node *node, double v)
Definition AMReX_Parser_Y.cpp:2093
__host__ __device__ T parser_math_tan(T a)
Definition AMReX_Parser_Y.H:369
__host__ __device__ void ignore_unused(const Ts &...)
This shuts up the compiler about unused variables.
Definition AMReX.H:138
__host__ __device__ double parser_call_f1(enum parser_f1_t type, double a)
Definition AMReX_Parser_Y.H:475
std::map< std::string, int > parser_get_user_functions(struct amrex_parser *parser)
Definition AMReX_Parser_Y.cpp:2074
struct parser_node * parser_newf2(enum parser_f2_t ftype, struct parser_node *l, struct parser_node *r)
Definition AMReX_Parser_Y.cpp:106
__host__ __device__ T parser_math_cos(T a)
Definition AMReX_Parser_Y.H:365
void parser_regvar(struct amrex_parser *parser, char const *name, int i)
Definition AMReX_Parser_Y.cpp:2038
void parser_ast_get_user_functions(struct parser_node *node, std::map< std::string, int > &user_functions)
Definition AMReX_Parser_Y.cpp:1956
parser_f3_t
Definition AMReX_Parser_Y.H:135
@ PARSER_IF
Definition AMReX_Parser_Y.H:136
__host__ __device__ T parser_math_acos(T a)
Definition AMReX_Parser_Y.H:377
__host__ __device__ double parser_call_f3(enum parser_f3_t, double a, double b, double c)
Definition AMReX_Parser_Y.H:550
void amrex_parser_delete(struct amrex_parser *parser)
Definition AMReX_Parser_Y.cpp:272
void parser_ast_sort(struct parser_node *node)
Definition AMReX_Parser_Y.cpp:1728
parser_f1_t
Definition AMReX_Parser_Y.H:31
@ PARSER_ASINH
Definition AMReX_Parser_Y.H:45
@ PARSER_TANH
Definition AMReX_Parser_Y.H:44
@ PARSER_COS
Definition AMReX_Parser_Y.H:37
@ PARSER_COSH
Definition AMReX_Parser_Y.H:43
@ PARSER_COMP_ELLINT_1
Definition AMReX_Parser_Y.H:51
@ PARSER_SQRT
Definition AMReX_Parser_Y.H:32
@ PARSER_COMP_ELLINT_2
Definition AMReX_Parser_Y.H:52
@ PARSER_TAN
Definition AMReX_Parser_Y.H:38
@ PARSER_ACOS
Definition AMReX_Parser_Y.H:40
@ PARSER_ATANH
Definition AMReX_Parser_Y.H:47
@ PARSER_EXP
Definition AMReX_Parser_Y.H:33
@ PARSER_LOG
Definition AMReX_Parser_Y.H:34
@ PARSER_SIN
Definition AMReX_Parser_Y.H:36
@ PARSER_ERF
Definition AMReX_Parser_Y.H:53
@ PARSER_ASIN
Definition AMReX_Parser_Y.H:39
@ PARSER_CEIL
Definition AMReX_Parser_Y.H:50
@ PARSER_ATAN
Definition AMReX_Parser_Y.H:41
@ PARSER_ABS
Definition AMReX_Parser_Y.H:48
@ PARSER_ACOSH
Definition AMReX_Parser_Y.H:46
@ PARSER_LOG10
Definition AMReX_Parser_Y.H:35
@ PARSER_FLOOR
Definition AMReX_Parser_Y.H:49
@ PARSER_SINH
Definition AMReX_Parser_Y.H:42
void parser_setconst(struct amrex_parser *parser, char const *name, double c)
Definition AMReX_Parser_Y.cpp:2044
void parser_ast_setconst(struct parser_node *node, char const *name, double c)
Definition AMReX_Parser_Y.cpp:1845
__host__ __device__ T parser_math_sin(T a)
Definition AMReX_Parser_Y.H:361
__host__ __device__ T parser_math_acosh(T a)
Definition AMReX_Parser_Y.H:401
struct parser_node * parser_newusrf2(struct parser_symbol *fname, struct parser_node *l, struct parser_node *r)
Definition AMReX_Parser_Y.cpp:144
int parser_depth(struct amrex_parser *parser)
Definition AMReX_Parser_Y.cpp:2082
double(*)(double, double, double) ParserUserFn3
Definition AMReX_Parser_Y.H:28
void parser_print(struct amrex_parser *parser)
Definition AMReX_Parser_Y.cpp:2053
__host__ __device__ T parser_math_atanh(T a)
Definition AMReX_Parser_Y.H:405
void amrex_parser_delete_ptrs()
Definition AMReX_Parser_Y.cpp:279
__host__ __device__ T parser_math_log(T a)
Definition AMReX_Parser_Y.H:353
struct parser_node * parser_newnode(enum parser_node_t type, struct parser_node *l, struct parser_node *r)
Definition AMReX_Parser_Y.cpp:49
void parser_ast_optimize(struct parser_node *&node, std::map< std::string, double > &local_consts)
Definition AMReX_Parser_Y.cpp:833
struct parser_node * parser_newneg(struct parser_node *n)
Definition AMReX_Parser_Y.cpp:66
__host__ __device__ T parser_math_comp_ellint_1(T k)
Definition AMReX_Parser_Y.H:409
double(*)(double, double) ParserUserFn2
Definition AMReX_Parser_Y.H:27
struct parser_node * parser_newassign(struct parser_symbol *sym, struct parser_node *v)
Definition AMReX_Parser_Y.cpp:176
__host__ __device__ T parser_math_comp_ellint_2(T k)
Definition AMReX_Parser_Y.H:420
__host__ __device__ T parser_math_yn(int a, T b)
Definition AMReX_Parser_Y.H:461
struct parser_node * parser_newf3(enum parser_f3_t ftype, struct parser_node *n1, struct parser_node *n2, struct parser_node *n3)
Definition AMReX_Parser_Y.cpp:118
int parser_ast_depth(struct parser_node *node)
Definition AMReX_Parser_Y.cpp:1665
__host__ __device__ T parser_math_jn(int a, T b)
Definition AMReX_Parser_Y.H:446
static constexpr std::string_view parser_f3_s[]
Definition AMReX_Parser_Y.H:145
std::size_t parser_ast_size(struct parser_node *node)
Definition AMReX_Parser_Y.cpp:309
struct parser_node * parser_newusrfn(struct parser_symbol *fname, std::vector< struct parser_node * > const &nv)
Definition AMReX_Parser_Y.cpp:158
__host__ __device__ T parser_math_sinh(T a)
Definition AMReX_Parser_Y.H:385
__host__ __device__ T parser_math_log10(T a)
Definition AMReX_Parser_Y.H:357
struct parser_node * parser_newusrf1(struct parser_symbol *fname, struct parser_node *l)
Definition AMReX_Parser_Y.cpp:132
void parser_ast_print(struct parser_node *node, std::string const &space, std::ostream &printer)
Definition AMReX_Parser_Y.cpp:1614
bool parser_same_symbol(struct parser_node *a, struct parser_node *b)
Definition AMReX_Parser_Y.cpp:756
static constexpr std::string_view parser_node_s[]
Definition AMReX_Parser_Y.H:173
double parser_get_number(struct parser_node *node)
Definition AMReX_Parser_Y.cpp:2087
std::set< std::string > parser_get_symbols(struct amrex_parser *parser)
Definition AMReX_Parser_Y.cpp:2062
__host__ __device__ T parser_math_atan2(T a, T b)
Definition AMReX_Parser_Y.H:442
double(*)(double, double, double, double) ParserUserFn4
Definition AMReX_Parser_Y.H:29
__host__ __device__ T parser_math_asinh(T a)
Definition AMReX_Parser_Y.H:397
__host__ __device__ T parser_math_pow(T a, T b)
Definition AMReX_Parser_Y.H:438
bool parser_node_equal(struct parser_node *a, struct parser_node *b)
Definition AMReX_Parser_Y.cpp:764
__host__ __device__ T parser_math_atan(T a)
Definition AMReX_Parser_Y.H:381
__host__ __device__ T parser_math_exp(T a)
Definition AMReX_Parser_Y.H:349
struct parser_node * parser_ast_dup(struct amrex_parser *my_parser, struct parser_node *node)
Definition AMReX_Parser_Y.cpp:381
struct parser_node * parser_newcmpchain(struct parser_node *nl, enum parser_f2_t cmp, struct parser_node *nr)
Definition AMReX_Parser_Y.cpp:231
__host__ __device__ T parser_math_cosh(T a)
Definition AMReX_Parser_Y.H:389
__host__ __device__ T parser_math_tanh(T a)
Definition AMReX_Parser_Y.H:393
__host__ __device__ double parser_call_f2(enum parser_f2_t type, double a, double b)
Definition AMReX_Parser_Y.H:507
void Abort(const std::string &msg)
Print out message to cerr and exit via abort().
Definition AMReX.cpp:230
void parser_defexpr(struct parser_node *body)
Definition AMReX_Parser_Y.cpp:29
struct parser_node * parser_newsymbol(struct parser_symbol *symbol)
Definition AMReX_Parser_Y.cpp:89
parser_node_t
Definition AMReX_Parser_Y.H:150
@ PARSER_USRF1
Definition AMReX_Parser_Y.H:160
@ PARSER_SYMBOL
Definition AMReX_Parser_Y.H:152
@ PARSER_MUL
Definition AMReX_Parser_Y.H:155
@ PARSER_SUB
Definition AMReX_Parser_Y.H:154
@ PARSER_F1
Definition AMReX_Parser_Y.H:157
@ PARSER_LIST
Definition AMReX_Parser_Y.H:164
@ PARSER_USRFN
Definition AMReX_Parser_Y.H:162
@ PARSER_DIV
Definition AMReX_Parser_Y.H:156
@ PARSER_ADD
Definition AMReX_Parser_Y.H:153
@ PARSER_ASSIGN
Definition AMReX_Parser_Y.H:163
@ PARSER_F3
Definition AMReX_Parser_Y.H:159
@ PARSER_NUMBER
Definition AMReX_Parser_Y.H:151
@ PARSER_USRF2
Definition AMReX_Parser_Y.H:161
@ PARSER_F2
Definition AMReX_Parser_Y.H:158
double(*)(double) ParserUserFn1
Definition AMReX_Parser_Y.H:26
void parser_ast_get_symbols(struct parser_node *node, std::set< std::string > &symbols, std::set< std::string > &local_symbols)
Definition AMReX_Parser_Y.cpp:1901
struct parser_symbol * parser_makesymbol(char *name)
Definition AMReX_Parser_Y.cpp:35
static constexpr std::string_view parser_f2_s[]
Definition AMReX_Parser_Y.H:114
struct amrex_parser * amrex_parser_new()
Definition AMReX_Parser_Y.cpp:248
static constexpr std::string_view parser_f1_s[]
Definition AMReX_Parser_Y.H:62
void parser_ast_regvar(struct parser_node *node, char const *name, int i)
Definition AMReX_Parser_Y.cpp:1790
struct parser_node * parser_newnumber(double d)
Definition AMReX_Parser_Y.cpp:77
struct parser_node * parser_newf1(enum parser_f1_t ftype, struct parser_node *l)
Definition AMReX_Parser_Y.cpp:95
struct parser_node * parser_newlist(struct parser_node *nl, struct parser_node *nr)
Definition AMReX_Parser_Y.cpp:187
__host__ __device__ T parser_math_asin(T a)
Definition AMReX_Parser_Y.H:373
Definition AMReX_Parser_Y.H:307
void * p_root
Definition AMReX_Parser_Y.H:308
void * p_free
Definition AMReX_Parser_Y.H:309
std::size_t sz_mempool
Definition AMReX_Parser_Y.H:311
struct parser_node * ast
Definition AMReX_Parser_Y.H:310
Definition AMReX_Parser_Y.H:264
enum parser_node_t type
Definition AMReX_Parser_Y.H:265
struct parser_node * v
Definition AMReX_Parser_Y.H:267
struct parser_symbol * s
Definition AMReX_Parser_Y.H:266
Definition AMReX_Parser_Y.H:216
struct parser_node * padding1
Definition AMReX_Parser_Y.H:220
struct parser_node * l
Definition AMReX_Parser_Y.H:219
enum parser_f1_t ftype
Definition AMReX_Parser_Y.H:218
enum parser_node_t type
Definition AMReX_Parser_Y.H:217
struct parser_node * padding2
Definition AMReX_Parser_Y.H:221
Definition AMReX_Parser_Y.H:224
struct parser_node * l
Definition AMReX_Parser_Y.H:227
struct parser_node * padding
Definition AMReX_Parser_Y.H:229
struct parser_node * r
Definition AMReX_Parser_Y.H:228
enum parser_node_t type
Definition AMReX_Parser_Y.H:225
enum parser_f2_t ftype
Definition AMReX_Parser_Y.H:226
Definition AMReX_Parser_Y.H:232
enum parser_node_t type
Definition AMReX_Parser_Y.H:233
struct parser_node * n3
Definition AMReX_Parser_Y.H:237
struct parser_node * n1
Definition AMReX_Parser_Y.H:235
struct parser_node * n2
Definition AMReX_Parser_Y.H:236
enum parser_f3_t ftype
Definition AMReX_Parser_Y.H:234
Definition AMReX_Parser_Y.H:197
struct parser_node * l
Definition AMReX_Parser_Y.H:200
struct parser_node * padding2
Definition AMReX_Parser_Y.H:202
enum parser_node_t padding
Definition AMReX_Parser_Y.H:199
struct parser_node * r
Definition AMReX_Parser_Y.H:201
enum parser_node_t type
Definition AMReX_Parser_Y.H:198
Definition AMReX_Parser_Y.H:205
double value
Definition AMReX_Parser_Y.H:207
enum parser_node_t type
Definition AMReX_Parser_Y.H:206
Definition AMReX_Parser_Y.H:210
char * name
Definition AMReX_Parser_Y.H:212
enum parser_node_t type
Definition AMReX_Parser_Y.H:211
int ip
Definition AMReX_Parser_Y.H:213
Definition AMReX_Parser_Y.H:240
struct parser_node * l
Definition AMReX_Parser_Y.H:244
struct parser_node * padding1
Definition AMReX_Parser_Y.H:245
char * name
Definition AMReX_Parser_Y.H:243
enum parser_node_t type
Definition AMReX_Parser_Y.H:241
enum parser_node_t padding
Definition AMReX_Parser_Y.H:242
Definition AMReX_Parser_Y.H:248
enum parser_node_t padding
Definition AMReX_Parser_Y.H:250
struct parser_node * l
Definition AMReX_Parser_Y.H:252
char * name
Definition AMReX_Parser_Y.H:251
struct parser_node * r
Definition AMReX_Parser_Y.H:253
enum parser_node_t type
Definition AMReX_Parser_Y.H:249
Definition AMReX_Parser_Y.H:256
struct parser_node ** others
Definition AMReX_Parser_Y.H:261
struct parser_node * n1
Definition AMReX_Parser_Y.H:260
char * name
Definition AMReX_Parser_Y.H:259
short argc
Definition AMReX_Parser_Y.H:258
enum parser_node_t type
Definition AMReX_Parser_Y.H:257