  This paper presents a Python library to model pooling problems, a class of
network flow problems with many engineering applications. The library
automatically generates a mixed-integer quadratically-constrained quadratic
optimization problem from a given network structure. The library additionally
uses the network structure to build 1) a convex linear relaxation of the
non-convex quadratic program and 2) a mixed-integer linear restriction of the
problem. We integrate the pooling network library with galini, an open-source
extensible global solver for quadratic optimization. We demonstrate galini's
extensible characteristics by using the pooling library to develop two galini
plug-ins: 1) a cut generator plug-in that adds valid inequalities in the galini
cut loop and 2) a primal heuristic plug-in that uses the mixed-integer linear
restriction. We test galini on large scale pooling problems and show that,
thanks to the good upper bound provided by the mixed-integer linear restriction
and the good lower bounds provided by the convex relaxation, we obtain
optimality gaps that are competitive with Gurobi 9.1 on the largest problem
instances.
