490 unsigned int head = 0;
492 for (
unsigned int pos = 0; pos <
_rpn.size(); ++pos)
496 const auto inst =
_rpn[pos];
498 switch (
_rpn[pos].op)
506 stack[head] = p(inst.arg);
507 else if (inst.arg == 3)
521 KOKKOS_ASSERT(datum);
523 stack[head] =
_fields[idx](*datum, qp);
528 KOKKOS_ASSERT(datum);
541 stack[head - 1] = -stack[head - 1];
544 stack[head - 1] = !::Kokkos::round(stack[head - 1]);
547 stack[head - 2] = ::Kokkos::abs(stack[head - 2] - stack[head - 1]) <=
_epsilon;
551 stack[head - 2] = ::Kokkos::abs(stack[head - 2] - stack[head - 1]) >
_epsilon;
555 stack[head - 2] = ::Kokkos::round(stack[head - 2]) && ::Kokkos::round(stack[head - 1]);
559 stack[head - 2] = ::Kokkos::round(stack[head - 2]) || ::Kokkos::round(stack[head - 1]);
563 stack[head - 3] = ::Kokkos::round(stack[head - 3]) ? stack[head - 2] : stack[head - 1];
566 KOKKOS_FPARSER_COMPARE(LT, <, -
_epsilon);
567 KOKKOS_FPARSER_COMPARE(LEQ, <=,
_epsilon);
568 KOKKOS_FPARSER_COMPARE(GT, >,
_epsilon);
569 KOKKOS_FPARSER_COMPARE(GEQ, >=, -
_epsilon);
570 KOKKOS_FPARSER_BINARY(ADD, +);
571 KOKKOS_FPARSER_BINARY(SUB, -);
572 KOKKOS_FPARSER_BINARY(MUL, *);
573 KOKKOS_FPARSER_BINARY(DIV, /);
574 KOKKOS_FPARSER_FUNCTION_1(ABS, abs);
575 KOKKOS_FPARSER_FUNCTION_1(ACOS, acos);
576 KOKKOS_FPARSER_FUNCTION_1(ACOSH, acosh);
577 KOKKOS_FPARSER_FUNCTION_1(ASIN, asin);
578 KOKKOS_FPARSER_FUNCTION_1(ASINH, asinh);
579 KOKKOS_FPARSER_FUNCTION_1(ATAN, atan);
580 KOKKOS_FPARSER_FUNCTION_2(ATAN2, atan2);
581 KOKKOS_FPARSER_FUNCTION_1(ATANH, atanh);
582 KOKKOS_FPARSER_FUNCTION_1(CBRT, cbrt);
583 KOKKOS_FPARSER_FUNCTION_1(CEIL, ceil);
584 KOKKOS_FPARSER_FUNCTION_1(COS, cos);
585 KOKKOS_FPARSER_FUNCTION_1(COSH, cosh);
586 KOKKOS_FPARSER_FUNCTION_INV_1(COT, tan);
587 KOKKOS_FPARSER_FUNCTION_INV_1(CSC, sin);
588 KOKKOS_FPARSER_FUNCTION_1(EXP, exp);
589 KOKKOS_FPARSER_FUNCTION_1(EXP2, exp2);
590 KOKKOS_FPARSER_FUNCTION_1(FLOOR, floor);
591 KOKKOS_FPARSER_FUNCTION_2(HYPOT, hypot);
592 KOKKOS_FPARSER_FUNCTION_1(INT, round);
593 KOKKOS_FPARSER_FUNCTION_1(LOG, log);
594 KOKKOS_FPARSER_FUNCTION_1(LOG2, log2);
595 KOKKOS_FPARSER_FUNCTION_1(LOG10, log10);
596 KOKKOS_FPARSER_FUNCTION_2(MAX, max);
597 KOKKOS_FPARSER_FUNCTION_2(MIN, min);
598 KOKKOS_FPARSER_FUNCTION_2(POW, pow);
599 KOKKOS_FPARSER_FUNCTION_INV_1(SEC, cos);
600 KOKKOS_FPARSER_FUNCTION_1(SIN, sin);
601 KOKKOS_FPARSER_FUNCTION_1(SINH, sinh);
602 KOKKOS_FPARSER_FUNCTION_1(SQRT, sqrt);
603 KOKKOS_FPARSER_FUNCTION_1(TAN, tan);
604 KOKKOS_FPARSER_FUNCTION_1(TANH, tanh);
605 KOKKOS_FPARSER_FUNCTION_1(TRUNC, trunc);
609 KOKKOS_ASSERT(head == 1);
611 return stack[head - 1];