PDNET source code


This page contains source code listings for PDNET.  All fortran and C files, as well as the Makefile are listed.

Makefile Makefile to build fdriver and cdriver.
debug.h Definitions of debug macros used in PDNET.
pdnet.h General use definitions and macros used in PDNET ANSI C modules.
cdriver.c C language driver: Main procedure for invoking the PDNET FORTRAN subroutines for the solution of linear minimum cost network flow problems.
pderr.c Error message printing procedures.
pdmxfl.c FORTRAN callable functions to test feasibility and detect early optimality of minimum cost network problems in PDNET.
pdrdmc.c Functions to read a DIMACS-format network data file. It includes an interface suitable for use with FORTRAN programs.
fdriver.f Driver program for pdnet.f: Fortran subroutines for the solution of linear minimum cost network flow problems.
dblas1.f FORTRAN 77 reference implementation for the Level 1 BLAS.
dnsubs.f Constructs the layered network of the residual network with respect to the current flow.
pdattx.f Computes the product y=a*(1/teta)*a'x.
pdbdst.f Builds a data structure for accessing each individual tree in a spanning forest from subroutine pdmxst. Vertices are listed in ascending order of indices in each tree list.
pdbkst.f Given a spanning tree defined by vertices in dfs order and parent edges, computes the solution the system s'x = b (back substitution).
pdchkp.f Checks validity of parameters.
pdchmf.f Checks optimality of flow by using max flow criterion.
pdckfs.f Checks if the network has enough capacity for the proposed flow.
pdcosn.f
Computes approximate cosine of directions.
pdcrhs.f
Computes the right-hand side of the normal equations to be solved.  Predefines the sets l and u.
pddflt.f Sets in info array default values for PDNET internal parameters.
pddkey.f Decreases the key of a node in the Fibonacci heap and performs multispliting and multilinking to restore the invariants of the heap.
pddlob.f Computes dual objective value for a given solution of an LP with upper bounds and 0 lower bounds.
pddlof.f Based on a tentative optimal dual solution, determines the corresponding optimal face. Assumes the given dual solution is interior to the optimal face.
pddlot.f
Orthogonally project current interior dual solution onto hyperplane defined by spanning forest.
pddmin.f Deletes the node with minimum key in the Fibonnacci heap.
pddstr.f Constructs an additional data structure used by the primal-dual interior-point algorithm.
pdfdst.f Returns the canonical element of the set containing  x. Each set is represented by a rooted tree. The nodes of the tree are the elements of the set; the canonical element is the root of the tree.  Each node x has a pointer p(x) to its parent in the tree; the root points to itself.
pdginf.f Gets values of all parameters and statistics from arrays info() and dinfo().
pdhprm.f Picks-up a minimum spanning tree from a directed network. It uses a Fibonacci heap data structure to maintain the set of nodes that have not yet been included in the spanning tree.
pdierr.f Prints error message corresponding to code ierror.
pdinst.f Inserts a new tree in the Fibonacci heap and performs multilinking to restore the heap invariants.
pdiqrd.f Constructs the diagonal matrix diag and the vector ndiag wich stores the nondiagonal elements of
the matrix f.
pdivec.f Performs the operation x = const. It is based on dcopy dblas routine.
pdlink.f Links two subtrees in a Fiboncci heap by updating the arrays pred, rank, llink, rlink  and first.
pdlkst.f Forms a new set that is the union of the two sets whose canonical elements are  x and y, destroying the two old sets.  select and return the canonical element of the new set. This operation assumes x != y.  This routine uses a union by rank heuristic.
pdmkob.f Computes the current value of the objective function.
pdmxst.f Given a graph g and a ordering of the edges, this subroutine applies Kruskal's algorithm and builds a maximum spanning forest.
pdnet.f Main subroutine for the PDNET package.
pdodst.f Given a spanning tree or forest, this subroutine finds permutations for vertices and tree edges that yield an incidence matrix with a block triangular structure.
pdoptm.f Checks the optimality of the sets b, l, and u indicated by the primal-dual interior point method. If the sets are optimal, then the optimal flows are computed.
pdout.f Prints summary report.
pdpcgd.f Solves the system a*teta*at x = b by means of a preconditioned conjugate gradient (PCG) algorithm.
pdpdat.f Finds the data characteristics of the problem.
pdphdr.f Print report header with program identification, problem instance information, run-time and compile-time parameters.
pdpntr.f Distributes the auxiliary vectors over a working vector.
pdprtb.f Perturbs and transforms the data to double precision.
pdpryx.f Computes the scalar product alfa=x'y. This subroutine is based on the dblas ddot routine.
pdresd.f Computes the l1 norm of z.
pdsbvc.f Performs the operation z=x-y. The vectors x, z and y have dimension dim. This subroutine is based on the dblas daxpy routine.
pdsedg.f Sorts edges according to weights.
pdsinf.f
Sets values of all parameters and statistics from arrays info() and dinfo().
pdsout.f Prints summary report at the end of each iteration.
pdsplt.f Splits a tree into two subtrees in a Fibonacci heap by updating the arrays pred, rank, llink, rlink, first and lost.
pdsprm.f
Sets values of external parameters stored in info().
pdstat.f
Gets output statistics from info() array.
pdsteq.f
Performs the operation x = y.  The vectors x and y have both dimension dim.  This subroutine is based on dcopy dblas routine.
pdstpt.f Computes the starting values for the primal-dual interior point algorithm.
pdsviq.f Solves a system with the IQRD matrix.
pdtpia.f Uses Tapia indicators to determine edge classes = (low,active,cap).
pdtrfm.f
Removes the lower bounds from the formulation.
pdupsl.f Updates the primal and dual solutions in the network primal-dual interior-point algorithm. Furthermore, this subroutine updates the parameter miu.
pdupv1.f Updates the vector x by using the formula x = x + alfa*y, where y is a scalar. This subroutine is based on the dblas daxpy routine.
pdupv2.f Updates the vector x by using the formula x = y + alfa*x, where alfa is a scalar.
pdwrkd.f Computes the size requiremnt for double precision workspace array.