numeric_calculus.f90 Source File


Contents

Source Code


Source Code

module foreng_numeric_calculus

use foreng_env

contains 

    function calc_derivative(func, x_0, dx) result (dydx)
        
        real(real64), external :: func  !! Ptr to an external function
        real(real64), intent(in) :: x_0 !! Value at which to calculate the derivative
        real(real64), optional :: dx    !! Optional step size. If not present, defaults to \(10^{-100}\) 
        real(real64) :: dydx            !! \(\frac{dy}{dx}\) at \(x = x_0\)

        real(real64) :: f_x0, f_x1
        real(real64) :: dx_

        if(.not. present(dx)) then
            dx_ = 1D-100
        else
            dx_ = dx
        end if

        f_x0 = func(x_0)
        f_x1 = func(x_0 + dx_)
        dydx = (f_x1 - f_x0)/dx_

    end function

end module