* ************************************************************************* subroutine nbstat( x, xst, su, nsu, ba, nba, nb, + nacti, naibs, iss, ip, kdist ) * ************************************************************************* * Purpose : * --------- * This routine modifies the status of the superbasic * variables that are bounded. These variables become * nonbasic. The superbasic set SU is reordered. * Parameters : * ------------ * x ( dble ) * input : the current iterate vector. * output : unmodified. * xst ( int ) * input : vector containing the status of the variables. * output : the status of the superbasic variables that are * bounded are modified and correspond to the status * of nonbasic variables. * su ( int ) * input : vector containing the indices of the superbasic * variables. * output : the vector contains only the indices of the * superbasic variables that are not bounded. * nsu ( int ) * input : the number of superbasic variables. * output : the number of superbasic variables that are not * bounded. * ba ( int ) * input : vector containing the indices of the basic variables. * output : unmodified. * nba ( int ) * input : the number of basic variables. * output : unmodified. * nb ( int ) * input : the number of nonbasic variables. * output : this number increases by one each time a * superbasic variable is detected as bounded. * nacti ( int ) * input : the number of variables that have been activated. * output : this number increases by one each time a * superbasic variable is detected as bounded. * naibs ( int ) * input : vector whose IPth component contains the number * of superbasic variables in independent set IP. * output : the component decreases by one each time a * superbasic variable is detected as bounded. * iss ( int ) * input : vector whose kth component contains the indice of * independent superbasic set in which the kth variable * is included. If the kth component is zero, then * variable k is not included in one independent set. * output : the components corresponding to the indices of the * superbasic variables that are bounded are set to zero. * If the superbasic set becomes empty, the components * corresponding to the indices of the basic variables are * also set to zero. * ip ( int ) * input : the indice of the independent superbasic set * in which where are working. * output : unmodified. * kdist ( int ) * input : vector containing for each superbasic variable * the length of its flow augmenting path. * output : only the components of the superbasic variables * that are not bounded are maintained. * Routines used : * --------------- * abs. * snxdej, sxdej, sxnbl, sxnbu, gxbdg, xlower, isetcd. * Programming : * ------------- * D. Tuyttens * ======================================================================== * Routine parameters integer xst(*), su(*), nsu, ba(*), nba, nb, + nacti, naibs(*), iss(*), ip, kdist(*) double precision x(*) * Internal variables integer ik, k, next logical gxbdg double precision lb, xlower * Common specifications double precision epsmch, huge, tiny, tol common / prbmch / epsmch, huge, tiny, tol double precision zero, one, two, three, half, tenm1, tenm2, tenm4 common / prbcst / zero, one, two, three, half, tenm1, tenm2, tenm4 * * Initialize the status of the independent set IP to * an independent set that does not need to be de-joined. * call snxdej(xst(ip)) * * Loop on the superbasic variables and test if * some of them are bounded. * next = 0 do 10 ik = 1 , nsu k = su(ik) if( gxbdg(xst(k)) ) then * * The superbasic variable K is bounded. * Modify its status such that it corresponds * to a nonbasic variable. * lb = xlower(k) if( x(k)-lb .le. tol*(one+abs(lb)) ) then call sxnbl(xst(k)) else call sxnbu(xst(k)) endif * * The nonbasic set is increased, but the * superbasic set is decreased. * The status of the independent set IP, * is modified and correspond to the status of * an independent set that need to be de-joined. * nb = nb + 1 naibs(ip) = naibs(ip) - 1 iss(k) = 0 nacti = nacti + 1 call sxdej(xst(ip)) else * * The superbasic variable is not bounded. * The vectors SU and KDIST are reordered. * next = next + 1 su(next) = su(ik) kdist(next) = kdist(ik) endif 10 continue nsu = next * * If the superbasic set becomes empty, * then the independent set IP disappears. * if( naibs(ip).eq.0 ) then call snxdej(xst(ip)) call isetcd(nba, ba, iss, 0 ) endif * return end