Accord.Math.Optimization.BoundedBroydenFletcherGoldfarbShanno.freev C# (CSharp) Method

freev() private static method

private static freev ( int n, int &nfree, int index, int _index_offset, int &nenter, int &ileave, int indx2, int _indx2_offset, int iwhere, int _iwhere_offset, bool &wrk, bool updatd, bool cnstnd, int iprint, int iter ) : void
n int
nfree int
index int
_index_offset int
nenter int
ileave int
indx2 int
_indx2_offset int
iwhere int
_iwhere_offset int
wrk bool
updatd bool
cnstnd bool
iprint int
iter int
return void
        private static void freev(int n, ref int nfree,
            int[] index, int _index_offset, ref int nenter, ref int ileave,
            int[] indx2, int _indx2_offset, int[] iwhere, int _iwhere_offset,
            ref bool wrk, bool updatd, bool cnstnd, int iprint, int iter)
        {

            int iact = 0;
            int i = 0;
            int k = 0;

            nenter = 0;
            ileave = (n + 1);

            if (((iter > 0) && cnstnd))
            {
                // c                           count the entering and leaving variables.
                {
                    for (i = 1; i <= nfree; i++)
                    {
                        k = index[(i - (1)) + _index_offset];

                        // 
                        // c            write(6,*) ' k  = index(i) ', k
                        // c            write(6,*) ' index = ', i
                        // 
                        if ((iwhere[(k - (1)) + _iwhere_offset] > 0))
                        {
                            ileave = (ileave - 1);
                            indx2[(ileave - (1)) + _indx2_offset] = k;

                            if ((iprint >= 100))
                            {
                                // DISPLAY: "Variable " + k + " leaves the set of free variables"
                            }
                        }
                    }
                }
                {
                    for (i = (1 + nfree); i <= n; i++)
                    {
                        k = index[(i - (1)) + _index_offset];
                        if ((iwhere[(k - (1)) + _iwhere_offset] <= 0))
                        {
                            nenter = (nenter + 1);
                            indx2[(nenter - (1)) + _indx2_offset] = k;

                            
                            if ((iprint >= 100))
                            {
                                // DISPLAY: "Variable " + k + " enters the set of free variables"
                            }
                        }
                    }
                }
                
                if ((iprint >= 99))
                {
                    // DISPLAY: ((n + 1) - ileave)) + " variables leave; "
                    //           nenter + " variables enter"
                }
            }

            wrk = ((((ileave < (n + 1))) || ((nenter > 0))) || updatd);

            // 
            // c     Find the index set of free and active variables at the GCP.
            // 
            nfree = 0;
            iact = (n + 1);
            {
                for (i = 1; i <= n; i++)
                {
                    if ((iwhere[(i - (1)) + _iwhere_offset] <= 0))
                    {
                        nfree = (nfree + 1);
                        index[(nfree - (1)) + _index_offset] = i;
                    }
                    else
                    {
                        iact = (iact - 1);
                        index[(iact - (1)) + _index_offset] = i;
                    }
                }
            }

            if ((iprint >= 99))
            {
                // DISPLAY: nfree + " variables are free at GCP " + (iter + 1))
            }
        }