An unstructured finite-volume algorithm for predicting flow in rivers and estuaries