poly_dd Function

public function poly_dd(x, coeffs)

Arguments

Type IntentOptional AttributesName
real(kind=DP), intent(in) :: x
real(kind=DP), intent(in), DIMENSION(:):: coeffs

Return Value real(kind=DP)


Called by

proc~~poly_dd~~CalledByGraph proc~poly_dd poly_dd proc~poly_ddv poly_ddv proc~poly_ddv->proc~poly_dd interface~poly poly interface~poly->proc~poly_dd interface~poly->proc~poly_ddv proc~poly_msk_ddv poly_msk_ddv interface~poly->proc~poly_msk_ddv proc~poly_msk_ddv->proc~poly_ddv

Contents

Source Code


Source Code

	FUNCTION poly_dd(x,coeffs)
	REAL(DP), INTENT(IN) :: x
	REAL(DP), DIMENSION(:), INTENT(IN) :: coeffs
	REAL(DP) :: poly_dd
	REAL(DP) :: pow
	REAL(DP), DIMENSION(:), ALLOCATABLE :: vec
	INTEGER(I4B) :: i,n,nn
	n=size(coeffs)
	if (n <= 0) then
		poly_dd=0.0_dp
	else if (n < NPAR_POLY) then
		poly_dd=coeffs(n)
		do i=n-1,1,-1
			poly_dd=x*poly_dd+coeffs(i)
		end do
	else
		allocate(vec(n+1))
		pow=x
		vec(1:n)=coeffs
		do
			vec(n+1)=0.0_dp
			nn=ishft(n+1,-1)
			vec(1:nn)=vec(1:n:2)+pow*vec(2:n+1:2)
			if (nn == 1) exit
			pow=pow*pow
			n=nn
		end do
		poly_dd=vec(1)
		deallocate(vec)
	end if
	END FUNCTION poly_dd