From 309f3e6f44fb98c276f73a398b8bbfbcc7b5c531 Mon Sep 17 00:00:00 2001 From: Yen-Chen Chen <yen-chen.chen@kit.edu> Date: Thu, 28 Dec 2023 16:58:37 +0100 Subject: [PATCH] Fix power expression error for NAG compiler --- src/mo_expression.F90 | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/mo_expression.F90 b/src/mo_expression.F90 index e826523..6d9d296 100644 --- a/src/mo_expression.F90 +++ b/src/mo_expression.F90 @@ -1050,9 +1050,15 @@ CONTAINS CLASS(t_op_pow), INTENT(INOUT) :: this CLASS(t_result_stack_0D), INTENT(INOUT) :: result_stack REAL(real_kind), POINTER :: arg1, arg2 + INTEGER :: exponent CALL result_stack%pop(arg2) CALL result_stack%pop(arg1) - arg1 = arg1**arg2 + exponent = arg2 + IF (arg2 == exponent) THEN + arg1 = arg1**exponent + ELSE + arg1 = arg1**arg2 + END IF CALL result_stack%push(arg1) DEALLOCATE (arg2) END SUBROUTINE stack_op_pow_eval_0D @@ -1061,9 +1067,15 @@ CONTAINS CLASS(t_op_pow), INTENT(INOUT) :: this CLASS(t_result_stack_2D), INTENT(INOUT) :: result_stack REAL(real_kind), DIMENSION(:, :), POINTER :: arg1, arg2 + INTEGER, DIMENSION(:, :), ALLOCATABLE :: exponent CALL result_stack%pop(arg2) CALL result_stack%pop(arg1) - arg1 = arg1**arg2 + exponent = arg2 + IF (ALL(arg2 == exponent)) THEN + arg1 = arg1**exponent + ELSE + arg1 = arg1**arg2 + END IF CALL result_stack%push(arg1) DEALLOCATE (arg2) END SUBROUTINE stack_op_pow_eval_2D @@ -1072,9 +1084,15 @@ CONTAINS CLASS(t_op_pow), INTENT(INOUT) :: this CLASS(t_result_stack_3D), INTENT(INOUT) :: result_stack REAL(real_kind), DIMENSION(:, :, :), POINTER :: arg1, arg2 + INTEGER, DIMENSION(:, :, :), ALLOCATABLE :: exponent CALL result_stack%pop(arg2) CALL result_stack%pop(arg1) - arg1 = arg1**arg2 + exponent = arg2 + IF (ALL(arg2 == exponent)) THEN + arg1 = arg1**exponent + ELSE + arg1 = arg1**arg2 + END IF CALL result_stack%push(arg1) DEALLOCATE (arg2) END SUBROUTINE stack_op_pow_eval_3D -- GitLab