program example_p
use, intrinsic :: iso_fortran_env, only: rk => real64
implicit none
real(rk), dimension(:), allocatable :: a
print*, " "
print*, "Running example..."
call pure_subroutine(10.0_rk, 7, a)
contains
#ifndef NOPURE_DEBUG
pure subroutine pure_subroutine(x, n, y)
#else
impure subroutine pure_subroutine(x, n, y)
#endif
use fordebug, only: timer, pwrite, ptimer_start, ptimer_stop
implicit none
real(rk), intent(in) :: x
integer, intent(in) :: n
real(rk), intent(out), allocatable :: y(:)
integer :: i
type(timer) :: t
real(rk) :: yi
! Print Rank 0 real64 with a message and format. message and format are optional
call pwrite(message="x = ", R0r64=x, format="(a,f7.3)")
! Write Rank 0 real64 with a message and format to a file. message and format are optional
call pwrite(message="x = ", R0r64=x, format="(a,f7.3)", file="example/example_p.txt", access="append")
! Print Rank 0 int32 with a message and format. message and format are optional
call pwrite(message="n = ", R0i32=n, format="(a,i3)")
! Write Rank 0 int32 with a message and format to a file. message and format are optional
call pwrite(message="n = ", R0i32=n, format="(a,i3)", file="example/example_p.txt", access="append")
! Print Rank 0 character with a format. format is optional
call pwrite(R0ch="start loop", format="(a)")
! Write Rank 0 character with a format to a file. format, access are optional
call pwrite(R0ch="start loop", format="(a)", file="example/example_p.txt", access="append")
allocate(y(n))
y(1) = 0.0_rk
! start pure timer
call ptimer_start(t)
! nvfortran 25.5.0 -> NVFORTRAN-S-1074-Procedure call in Do Concurrent is not supported yet
#if defined (__NVCOMPILER) || defined(NOPURE_DEBUG)
do i=2,n
#else
do concurrent (i=2:n) shared(x, y) local(yi)
#endif
yi = real(i-1, kind=rk) * x
y(i) = yi
! Print Rank 0 real64 with a message and format. message and format are optional
call pwrite(message="y(i) = ", R0r64=y(i), format="(a,f7.3)")
! ! Write Rank 0 real64 with a message and format to a file. message and format are optional
! call pwrite(message="y(i) = ", R0r64=y(i), format="(a,f7.3)", file="example/example_p.txt", access="append")
end do
! stop pure timer
call ptimer_stop(t)
! Print Rank 0 real64 with a message and format. message and format are optional
call pwrite(R0ch="end loop", format="(a)") ! format is optional
! Write Rank 0 real64 with a message and format to a file. message and format are optional
call pwrite(R0ch="end loop", format="(a)", file="example/example_p.txt", access="append")
! Print Rank 0 real64 with a message and format. message and format are optional
call pwrite(message="y = ",R1r64=y)
! Write Rank 0 real64 with a message and format to a file. message and format are optional
call pwrite(message="y = ",R1r64=y, file="example/example_p.txt", access="append")
end subroutine pure_subroutine
end program example_p