SUBROUTINE svbksb_sp(u,w,v,b,x) USE nrtype; USE nrutil, ONLY : assert_eq REAL(SP), DIMENSION(:,:), INTENT(IN) :: u,v REAL(SP), DIMENSION(:), INTENT(IN) :: w,b REAL(SP), DIMENSION(:), INTENT(OUT) :: x INTEGER(I4B) :: mdum,ndum REAL(SP), DIMENSION(size(x)) :: tmp mdum=assert_eq(size(u,1),size(b),'svbksb_sp: mdum') ndum=assert_eq((/size(u,2),size(v,1),size(v,2),size(w),size(x)/),& 'svbksb_sp: ndum') where (w /= 0.0) tmp=matmul(b,u)/w elsewhere tmp=0.0 end where x=matmul(v,tmp) END SUBROUTINE svbksb_sp SUBROUTINE svbksb_dp(u,w,v,b,x) USE nrtype; USE nrutil, ONLY : assert_eq REAL(DP), DIMENSION(:,:), INTENT(IN) :: u,v REAL(DP), DIMENSION(:), INTENT(IN) :: w,b REAL(DP), DIMENSION(:), INTENT(OUT) :: x INTEGER(I4B) :: mdum,ndum REAL(DP), DIMENSION(size(x)) :: tmp mdum=assert_eq(size(u,1),size(b),'svbksb_dp: mdum') ndum=assert_eq((/size(u,2),size(v,1),size(v,2),size(w),size(x)/),& 'svbksb_dp: ndum') where (w /= 0.0) tmp=matmul(b,u)/w elsewhere tmp=0.0 end where x=matmul(v,tmp) END SUBROUTINE svbksb_dp