L-BFGS-B  3.0
Large-scale Bound-constrained Optimization
freev.f File Reference

Go to the source code of this file.

Functions/Subroutines

subroutine freev (n, nfree, index, nenter, ileave, indx2, iwhere, wrk, updatd, cnstnd, iprint, iter)
 This subroutine counts the entering and leaving variables when iter > 0, and finds the index set of free and active variables at the GCP. More...
 

Function/Subroutine Documentation

◆ freev()

subroutine freev ( integer  n,
integer  nfree,
integer, dimension(n)  index,
integer  nenter,
integer  ileave,
integer, dimension(n)  indx2,
integer, dimension(n)  iwhere,
logical  wrk,
logical  updatd,
logical  cnstnd,
integer  iprint,
integer  iter 
)

This subroutine counts the entering and leaving variables when iter > 0, and finds the index set of free and active variables at the GCP.

Parameters
nnumber of parameters
nfreenumber of free parameters, i.e., those not at their bounds
indexfor i=1,...,nfree, index(i) are the indices of free variables
for i=nfree+1,...,n, index(i) are the indices of bound variables
On entry after the first iteration, index gives the free variables at the previous iteration.
On exit it gives the free variables based on the determination in cauchy using the array iwhere.
nenterOn exit nenter is the number of variables that entered the free set this iteration (were active, now free at the GCP).
ileaveOn exit indx2(ileave),...,indx2(n) list the variables that left the free set this iteration. ileave starts at n+1 and is decremented each time a leaving variable is recorded.
indx2On entry indx2 is unspecified.
On exit with iter>0, indx2 indicates which variables have changed status since the previous iteration.
For i= 1,...,nenter, indx2(i) have changed from bound to free.
For i= ileave+1,...,n, indx2(i) have changed from free to bound.
iwhereOn entry iwhere(i) classifies each variable's bound status (set by cauchy): <=0 means free at GCP, >0 means at-bound. Used here to compare against the previous index/nfree to detect leaving and entering variables.
wrkOn exit .true. if the active-set or L-BFGS bookkeeping has changed enough that the workspace WN needs to be rebuilt (some variable entered/left, or updatd is .true.).
updatdOn entry .true. if the L-BFGS matrix was updated in the previous iteration. Combined with the entering/leaving counts to set wrk.
cnstndWhether bounds are present (true if at least one variable is bounded). When false, the entering/leaving counting loop is skipped.
iprintConsole output flag (>=99 prints summary, >=100 prints per-variable change records).
iterCurrent outer iteration number. The entering/leaving counting loop only runs when iter > 0 (the first iteration has no "previous" set to compare against).

Definition at line 47 of file freev.f.

Referenced by mainlb().

Here is the caller graph for this function: