dwnlt2 Function

private function dwnlt2(me, mend, ir, factor, tau, scale, wic)

To test independence of incoming column.

Test the column IC to determine if it is linearly independent of the columns already in the basis. In the initial tri. step, we usually want the heavy weight ALAMDA to be included in the test for independence. In this case, the value of FACTOR will have been set to 1.0 before this procedure is invoked. In the potentially rank deficient problem, the value of FACTOR will have been set to ALSQ=ALAMDA**2 to remove the effect of the heavy weight from the test for independence.

Write new column as partitioned vector

  • (A1) number of components in solution so far = NIV
  • (A2) M-NIV components

And compute

  • SN = inverse weighted length of A1
  • RN = inverse weighted length of A2

Call the column independent when RN > TAU*SN

Revision history

  • 790701 DATE WRITTEN. Hanson, R. J., (SNLA), Haskell, K. H., (SNLA)
  • 890620 Code extracted from WNLIT and made a subroutine. (RWC))
  • 900604 DP version created from SP version. (RWC)

Arguments

Type IntentOptional Attributes Name
integer :: me
integer :: mend
integer :: ir
real(kind=wp) :: factor
real(kind=wp) :: tau
real(kind=wp) :: scale(*)
real(kind=wp) :: wic(*)

Return Value logical


Called by

proc~~dwnlt2~~CalledByGraph proc~dwnlt2 bspline_defc_module::dwnlt2 proc~dwnlit bspline_defc_module::dwnlit proc~dwnlit->proc~dwnlt2 proc~dwnlsm bspline_defc_module::dwnlsm proc~dwnlsm->proc~dwnlit proc~dwnnls bspline_defc_module::dwnnls proc~dwnnls->proc~dwnlsm proc~dlpdp bspline_defc_module::dlpdp proc~dlpdp->proc~dwnnls proc~dlsi bspline_defc_module::dlsi proc~dlsi->proc~dlpdp proc~dlsei bspline_defc_module::dlsei proc~dlsei->proc~dlsi proc~dfcmn bspline_defc_module::dfcmn proc~dfcmn->proc~dlsei proc~dfc bspline_defc_module::dfc proc~dfc->proc~dfcmn

Source Code

   logical function dwnlt2 (me, mend, ir, factor, tau, scale, wic)

   real(wp) :: factor, scale(*), tau, wic(*)
   integer :: ir, me, mend

   real(wp) :: rn, sn, t
   integer :: j

   sn = 0.0_wp
   rn = 0.0_wp
   do j=1,mend
      t = scale(j)
      if (j<=me) t = t/factor
      t = t*wic(j)**2
      if (j<ir) then
         sn = sn + t
      else
         rn = rn + t
      endif
   end do
   dwnlt2 = rn > sn*tau**2

   end function dwnlt2