1#ifndef AMREX_PARSER_Y_H_
2#define AMREX_PARSER_Y_H_
3#include <AMReX_Config.H>
57#if defined(__INTEL_COMPILER) && defined(__EDG__)
109#if defined(__INTEL_COMPILER) && defined(__EDG__)
140#if defined(__INTEL_COMPILER) && defined(__EDG__)
168#if defined(__INTEL_COMPILER) && defined(__EDG__)
274 "amrex parser: sizeof parser_node too small");
295 std::vector<struct parser_node*>
const& nv);
334 std::set<std::string>& local_symbols);
336 std::map<std::string,int>& user_functions);
411#if defined(__GNUC__) && !defined(__clang__) && !defined(__CUDA_ARCH__) && !defined(__NVCOMPILER)
412 return std::comp_ellint_1(k);
414 return amrex::Math::comp_ellint_1<T>(k);
422#if defined(__GNUC__) && !defined(__clang__) && !defined(__CUDA_ARCH__) && !defined(__NVCOMPILER)
423 return std::comp_ellint_2(k);
425 return amrex::Math::comp_ellint_2<T>(k);
448#if defined AMREX_USE_SYCL || defined __MINGW32__
463#if defined AMREX_USE_SYCL || defined __MINGW32__
479 case PARSER_EXP:
return parser_math_exp<double>(a);
480 case PARSER_LOG:
return parser_math_log<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);
499 case PARSER_ERF:
return parser_math_erf<double>(a);
511 return parser_math_pow<double>(a,
b);
513 return parser_math_atan2<double>(a,
b);
515 return (a >
b) ? 1.0 : 0.0;
517 return (a <
b) ? 1.0 : 0.0;
519 return (a >=
b) ? 1.0 : 0.0;
521 return (a <=
b) ? 1.0 : 0.0;
523 return (a ==
b) ? 1.0 : 0.0;
525 return (a !=
b) ? 1.0 : 0.0;
528 return ((a != 0.0) && (
b != 0.0)) ? 1.0 : 0.0;
530 return ((a != 0.0) || (
b != 0.0)) ? 1.0 : 0.0;
532 return (a < 0.0) ? 0.0 : ((a > 0.0) ? 1.0 :
b);
534 return parser_math_jn<double>(
int(a),
b);
536 return parser_math_yn<double>(
int(a),
b);
538 return (a <
b) ? a :
b;
540 return (a >
b) ? a :
b;
542 return std::fmod(a,
b);
553 return (a != 0.0) ?
b : c;
#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