Calculates the derivative of a scalar-valued function w.r.t. a scalar-valued variable using complex step differentiation.
Type | Intent | Optional | Attributes | Name | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
private impure function f(z) result(fz)Arguments
Return Value complex(kind=rk)scalar complex function |
||||||||||||||||||||
real(kind=rk), | intent(in) | :: | x |
scalar variable |
||||||||||||||||
real(kind=rk), | intent(in) | :: | h |
perturbation for complex step differentiation |
derivative of w.r.t.
impure function complex_step_derivative_T0_T0(f, x, h) result(dfdx) real(rk), intent(in) :: x !! scalar variable real(rk), intent(in) :: h !! perturbation for complex step differentiation real(rk) :: dfdx !! derivative of \(f\) w.r.t. \(x\) interface !! scalar-valued function to differentiate impure function f(z) result(fz) use kinds complex(rk), intent(in) :: z !! scalar complex variable complex(rk) :: fz !! scalar complex function end function f end interface ! Check for potential division by zero if (abs(h)<tiny(0.0_rk)) error stop 'Division by zero. Please provide a non-zero value for h.' dfdx = aimag(f(cmplx(x, h, rk))) / h end function complex_step_derivative_T0_T0