cumsum_r Function

public recursive function cumsum_r(arr, seed) result(ans)

Arguments

Type IntentOptional AttributesName
real(kind=SP), intent(in), DIMENSION(:):: arr
real(kind=SP), intent(in), optional :: seed

Return Value real(kind=SP), DIMENSION(size(arr))


Called by

proc~~cumsum_r~~CalledByGraph proc~cumsum_r cumsum_r proc~cumsum_r->proc~cumsum_r interface~cumsum cumsum interface~cumsum->proc~cumsum_r

Contents

Source Code


Source Code

	RECURSIVE FUNCTION cumsum_r(arr,seed) RESULT(ans)
	REAL(SP), DIMENSION(:), INTENT(IN) :: arr
	REAL(SP), OPTIONAL, INTENT(IN) :: seed
	REAL(SP), DIMENSION(size(arr)) :: ans
	INTEGER(I4B) :: n,j
	REAL(SP) :: sd
	n=size(arr)
	if (n == 0_i4b) RETURN
	sd=0.0_sp
	if (present(seed)) sd=seed
	ans(1)=arr(1)+sd
	if (n < NPAR_CUMSUM) then
		do j=2,n
			ans(j)=ans(j-1)+arr(j)
		end do
	else
		ans(2:n:2)=cumsum_r(arr(2:n:2)+arr(1:n-1:2),sd)
		ans(3:n:2)=ans(2:n-1:2)+arr(3:n:2)
	end if
	END FUNCTION cumsum_r