Neko 1.99.7
A portable framework for high-order spectral element flow simulations
Loading...
Searching...
No Matches
expression.f90 File Reference

Go to the source code of this file.

Data Types

type  expression::token_t
 A single token of an expression. More...
 
type  expression::parser_t
 State of the recursive descent parser. More...
 
type  expression::expression_t
 A compiled mathematical expression. More...
 

Modules

module  expression
 Evaluation of mathematical expressions given as strings in the case file.
 

Functions/Subroutines

subroutine expression::expression_init (this, str)
 Compile an expression.
 
subroutine expression::parser_free (p)
 Release the memory held by the parser state.
 
subroutine expression::expression_free (this)
 Destructor.
 
subroutine expression::expression_eval (this, res, n, x, y, z, t, dt)
 Evaluate the expression in n points.
 
subroutine, public expression::expression_eval_static (str, res, n, x, y, z, usage)
 Compile an expression and evaluate it in a set of points, in a context where there is no time state.
 
subroutine, public expression::expression_check_finite (str, res, n, usage)
 Abort if an expression did not evaluate to a finite value everywhere.
 
subroutine expression::expr_tokenize (p)
 Split the source string into a stream of tokens.
 
subroutine expression::push_token (p, kind, pos)
 Append a token to the token stream.
 
recursive subroutine expression::parse_expr (p)
 Parse an additive expression.
 
recursive subroutine expression::parse_term (p)
 Parse a multiplicative expression.
 
recursive subroutine expression::parse_factor (p)
 Parse a possibly signed factor. Unary minus binds looser than ^, so -x^2 is -(x^2), as in Fortran.
 
recursive subroutine expression::parse_power (p)
 Parse an exponentiation. Right associative, so 2^3^2 is 2^(3^2).
 
recursive subroutine expression::parse_primary (p)
 Parse a literal, a symbol, a function call or a parenthesised expression.
 
subroutine expression::parse_symbol (p, k)
 Resolve a bare identifier into either a variable opcode or a literal.
 
integer function expression::func_op (name, nargs)
 Look up the opcode of a function.
 
subroutine expression::emit (p, op, val)
 Append an opcode, keeping track of how deep the evaluation stack gets.
 
subroutine expression::expr_error (p, msg, pos)
 Abort with a message pointing at the offending part of the expression.
 
pure logical function expression::is_digit (c)
 True if c is a decimal digit.
 
pure logical function expression::is_alpha (c)
 True if c is a letter.
 

Variables

integer, parameter, public expression::neko_expr_len = 256
 Maximum length of an expression string read from the case file.
 
integer, parameter expression::expr_max_ident = 64
 Maximum length of an identifier appearing in an expression.
 
integer, parameter expression::expr_chunk = 1024
 Number of points evaluated per pass over the opcode stream. Chosen so that the evaluation stack stays in cache irrespective of how many points the caller hands over in one go.
 
integer, parameter expression::op_lit = 1
 
integer, parameter expression::op_x = 2
 
integer, parameter expression::op_y = 3
 
integer, parameter expression::op_z = 4
 
integer, parameter expression::op_t = 5
 
integer, parameter expression::op_dt = 6
 
integer, parameter expression::op_unary = 20
 
integer, parameter expression::op_neg = 20
 
integer, parameter expression::op_sin = 21
 
integer, parameter expression::op_cos = 22
 
integer, parameter expression::op_tan = 23
 
integer, parameter expression::op_asin = 24
 
integer, parameter expression::op_acos = 25
 
integer, parameter expression::op_atan = 26
 
integer, parameter expression::op_sinh = 27
 
integer, parameter expression::op_cosh = 28
 
integer, parameter expression::op_tanh = 29
 
integer, parameter expression::op_exp = 30
 
integer, parameter expression::op_log = 31
 
integer, parameter expression::op_log10 = 32
 
integer, parameter expression::op_sqrt = 33
 
integer, parameter expression::op_abs = 34
 
integer, parameter expression::op_erf = 35
 
integer, parameter expression::op_erfc = 36
 
integer, parameter expression::op_step = 37
 
integer, parameter expression::op_ipow = 38
 
integer, parameter expression::op_binary = 60
 
integer, parameter expression::op_add = 60
 
integer, parameter expression::op_sub = 61
 
integer, parameter expression::op_mul = 62
 
integer, parameter expression::op_div = 63
 
integer, parameter expression::op_pow = 64
 
integer, parameter expression::op_atan2 = 65
 
integer, parameter expression::op_min = 66
 
integer, parameter expression::op_max = 67
 
integer, parameter expression::op_mod = 68
 
integer, parameter expression::tk_end = 0
 
integer, parameter expression::tk_num = 1
 
integer, parameter expression::tk_ident = 2
 
integer, parameter expression::tk_plus = 3
 
integer, parameter expression::tk_minus = 4
 
integer, parameter expression::tk_star = 5
 
integer, parameter expression::tk_slash = 6
 
integer, parameter expression::tk_pow = 7
 
integer, parameter expression::tk_lpar = 8
 
integer, parameter expression::tk_rpar = 9
 
integer, parameter expression::tk_comma = 10