SUBROUTINE fdjac(x,fvec,df) USE nrtype; USE nrutil, ONLY : assert_eq IMPLICIT NONE REAL(SP), DIMENSION(:), INTENT(IN) :: fvec REAL(SP), DIMENSION(:), INTENT(INOUT) :: x REAL(SP), DIMENSION(:,:), INTENT(OUT) :: df INTERFACE FUNCTION funcv(x) USE nrtype IMPLICIT NONE REAL(SP), DIMENSION(:), INTENT(IN) :: x REAL(SP), DIMENSION(size(x)) :: funcv END FUNCTION funcv END INTERFACE REAL(SP), PARAMETER :: EPS=1.0e-4_sp INTEGER(I4B) :: j,n REAL(SP), DIMENSION(size(x)) :: xsav,xph,h n=assert_eq(size(x),size(fvec),size(df,1),size(df,2),'fdjac') xsav=x h=EPS*abs(xsav) where (h == 0.0) h=EPS xph=xsav+h h=xph-xsav do j=1,n x(j)=xph(j) df(:,j)=(funcv(x)-fvec(:))/h(j) x(j)=xsav(j) end do END SUBROUTINE fdjac