*     *************************************************************************

      double precision function mxflow( x, u, l, iarc, next,
     +                                  rgmx, bigfl )

*     *************************************************************************

*     Purpose :
*     ---------

*     Given the orientation (sign of NEXT) of the basic arc
*     IARC in the cycle formed by the nonbasic arc with the
*     basis spanning tree and the direction (opposite sign
*     of RGMAX) of the change of flow on the nonbasic arc, the
*     function determines the direction (opposite sign of the
*     product NEXT*RGMAX) of the change of flow on the basic 
*     arc IARC and computes the maximum steplength (MXFLOW)
*     for keeping feasibility on basic arc IARC.

*     Parameters :
*     ------------

*     x       ( dble )

*       input  : the value of the flow on the basic arc IARC.
*       output : unmodified.

*     u       ( dble )

*       input  : the upper bound on the basic arc IARC.
*       output : unmodified.

*     l       ( dble )

*       input  : the lower bound on the basic arc IARC.
*       output : unmodified.

*     iarc    ( int )

*       input  : the indice of the basic arc for which we
*                compute the maxixmum steplength MXFLOW
*                for keeping feasibility.
*                If IARC <= ARCS, then the basic variable is
*                                 is a non artificial variable.
*                If IARC >  ARCS, then the basic variable is
*                                 is an artificial variable.
*       output : unmodified.

*     next    ( int )

*       input  : the sign of this value determines the
*                orientation of the basic arc IARC in the
*                cycle formed by the nonbasic arc and the
*                basis spanning tree.
*                If NEXT > 0, then the basic arc IARC has
*                             an orientation identical to 
*                             that of the nonbasic arc in
*                             the cycle.
*                If NEXT < 0, then the basic arc IARC has
*                             an orientation opposite to 
*                             that of the nonbasic arc in
*                             the cycle.
*       output : unmodified.

*     rgmx    ( dble )

*       input  : the reduced cost of the nonbasic variable.
*                The opposite sign of RGMAX determines the
*                direction of the change of flow on the 
*                nonbasic arc.
*       output : unmodified.

*     bigfl   ( dble )

*       input  : a constant whose value is greater then 
*                the maximum steplength allowed for keeping
*                feasibility.
*       output : unmodified.

*     mxflow  ( dble )

*       input  : meaningless.
*       output : the maximum steplength for keeping feasibility
*                on basic arc IARC.

*     Routines used :
*     ---------------

*     None.

*     Programming :
*     -------------

*     D. Tuyttens

*     ========================================================================

*     Routine parameters

      double precision  x, l, u, rgmx, bigfl
      integer           iarc, next

*     Common specifications

      integer           arcs, nodes, elem
      common / prbdim / arcs, nodes, elem

      double precision  zero, one, two, three, half, tenm1, tenm2, tenm4
      common / prbcst / zero, one, two, three, half, tenm1, tenm2, tenm4

      if( next*rgmx.lt.zero ) then
*
*       The direction of the change of flow 
*       on the basic arc IARC is positive.
*       The change of flow is limited by the
*       upper bound of the basic arc IARC.
*
        if( iarc.le.arcs ) then
          mxflow = u - x
        else
          mxflow = bigfl
        endif
*
      else
*
*       The direction of the change of flow 
*       on the basic arc IARC is negative.
*       The change of flow is limited by the
*       lower bound of the basic arc IARC.
*
        if( iarc.le.arcs ) then
          mxflow = x - l
        else
          mxflow = x
        endif
*
      endif
*
      return
      end
