Skip to content
Snippets Groups Projects
Commit c43dabf7 authored by Dylan Kierans's avatar Dylan Kierans
Browse files

Additional sp interfaces for init and negation routines

parent 42572e17
No related branches found
No related tags found
1 merge request!96Draft: Trying out parameterized derived data types
......@@ -55,6 +55,7 @@ MODULE mo_fortran_tools
PUBLIC :: init_zero_contiguous_dp, init_zero_contiguous_sp
PUBLIC :: init_contiguous_dp, init_contiguous_sp
PUBLIC :: init_contiguous_i4, init_contiguous_l
PUBLIC :: init_contiguous, init_zero_contiguous
PUBLIC :: minval_1d
PUBLIC :: minval_2d
PUBLIC :: resize_arr_c1d
......@@ -239,6 +240,7 @@ MODULE mo_fortran_tools
MODULE PROCEDURE init_zero_4d_sp
MODULE PROCEDURE init_zero_4d_i4
MODULE PROCEDURE init_1d_dp
MODULE PROCEDURE init_1d_sp
MODULE PROCEDURE init_2d_dp
MODULE PROCEDURE init_2d_sp
MODULE PROCEDURE init_3d_dp
......@@ -252,6 +254,7 @@ MODULE mo_fortran_tools
INTERFACE negative2zero
MODULE PROCEDURE negative2zero_4d_dp
MODULE PROCEDURE negative2zero_4d_sp
END INTERFACE negative2zero
INTERFACE var_scale
......@@ -316,6 +319,16 @@ MODULE mo_fortran_tools
MODULE PROCEDURE cast_from_t_ptr_3d_arr
END INTERFACE cast_from_t_ptr
INTERFACE init_contiguous
MODULE PROCEDURE init_contiguous_sp
MODULE PROCEDURE init_contiguous_dp
END INTERFACE init_contiguous
INTERFACE init_zero_contiguous
MODULE PROCEDURE init_zero_contiguous_dp
MODULE PROCEDURE init_zero_contiguous_sp
END INTERFACE init_zero_contiguous
INTEGER, PARAMETER :: SUCCESS = 0
CONTAINS
......@@ -1519,6 +1532,28 @@ CONTAINS
CALL acc_wait_if_requested(1, opt_acc_async)
END SUBROUTINE init_1d_dp
SUBROUTINE init_1d_sp(init_var, init_val, lacc, opt_acc_async)
REAL(sp), INTENT(OUT) :: init_var(:)
REAL(sp), INTENT(IN) :: init_val
LOGICAL, INTENT(IN), OPTIONAL :: lacc
LOGICAL, INTENT(IN), OPTIONAL :: opt_acc_async
INTEGER :: i1, m1
LOGICAL :: lzacc
CALL set_acc_host_or_device(lzacc, lacc)
m1 = SIZE(init_var, 1)
!$ACC PARALLEL LOOP DEFAULT(PRESENT) ASYNC(1) IF(lzacc)
!$omp do private(i1)
DO i1 = 1, m1
init_var(i1) = init_val
END DO
!$omp end do nowait
!$ACC END PARALLEL LOOP
CALL acc_wait_if_requested(1, opt_acc_async)
END SUBROUTINE init_1d_sp
SUBROUTINE init_2d_dp(init_var, init_val, lacc, opt_acc_async)
REAL(dp), INTENT(OUT) :: init_var(:, :)
REAL(dp), INTENT(IN) :: init_val
......@@ -1971,6 +2006,43 @@ CONTAINS
CALL acc_wait_if_requested(1, opt_acc_async)
END SUBROUTINE negative2zero_4d_dp
SUBROUTINE negative2zero_4d_sp(var, lacc, opt_acc_async)
REAL(sp), INTENT(inout) :: var(:, :, :, :)
LOGICAL, INTENT(IN), OPTIONAL :: lacc
LOGICAL, INTENT(IN), OPTIONAL :: opt_acc_async
INTEGER :: i1, i2, i3, i4, m1, m2, m3, m4
REAL(sp) :: v
LOGICAL :: lzacc
CALL set_acc_host_or_device(lzacc, lacc)
m1 = SIZE(var, 1)
m2 = SIZE(var, 2)
m3 = SIZE(var, 3)
m4 = SIZE(var, 4)
!$ACC PARALLEL LOOP DEFAULT(PRESENT) PRIVATE(v) ASYNC(1) COLLAPSE(4) IF(lzacc)
#if (defined(__INTEL_COMPILER))
!$omp do private(i1,i2,i3,i4)
#else
!$omp do collapse(4)
#endif
DO i4 = 1, m4
DO i3 = 1, m3
DO i2 = 1, m2
DO i1 = 1, m1
v = var(i1, i2, i3, i4)
var(i1, i2, i3, i4) = (ABS(v) + v)*0.5_sp
END DO
END DO
END DO
END DO
!$omp end do nowait
CALL acc_wait_if_requested(1, opt_acc_async)
END SUBROUTINE negative2zero_4d_sp
SUBROUTINE init_contiguous_dp(var, n, v, lacc, opt_acc_async)
INTEGER, INTENT(IN) :: n
REAL(dp), INTENT(OUT) :: var(n)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment