A fully implicit constraint-preserving simulator for the black oil model of petroleum reservoirs