///|
/// Bounded dense Cholesky factor, built once and reusable for coarse right-hand sides.
pub struct CoarseSolver {
  grid : Grid
  lower : Array[Double]
}

///|
pub fn CoarseSolver::new(operator : Operator) -> CoarseSolver raise SolverError {
  let g = operator.grid
  let n = g.unknowns()
  if n > 81 {
    raise Budget("dense coarse factorization is limited to 81 unknowns")
  }
  let width = g.nx - 1
  let lower = Array::make(n * n, 0.0)
  for row in 0.. 1 {
      lower[row * n + row - 1] = -operator.west[p]
    }
    if j > 1 {
      lower[row * n + row - width] = -operator.south[p]
    }
  }
  for row in 0.. Field raise SolverError {
  require_same(self.grid, rhs.grid)
  let g = self.grid
  let n = g.unknowns()
  let width = g.nx - 1
  let work = Array::make(n, 0.0)
  for row in 0.. Field raise SolverError {
  self.coarse.solve(rhs)
}