///|
fn Hierarchy::nested_level(
self : Hierarchy,
level : Int32,
rhs : Field,
cycles : Int32,
config : CycleConfig,
) -> Field raise SolverError {
if level == self.operators.length() - 1 {
return self.coarse.solve(rhs)
}
let coarse = self.nested_level(level + 1, restrict_full(rhs), cycles, config)
let mut current = prolong(coarse)
for _ in 0.. Field raise SolverError {
self.check_problem(problem)
if cycles_per_level < 1 || cycles_per_level > 8 {
raise Invalid("FMG cycles per level must be in 1..8")
}
problem.restore(self.nested_level(0, problem.rhs, cycles_per_level, config))
}