def METHOD_NAME(comm):
  # Build the linear system matrix
  nx = 100
  ny = 100 * comm.NumProc()
  mapParams = {"nx": nx,               # number of nodes in the X-direction
               "ny": ny,               # number of nodes in the Y-direction
               "mx": 1,                # number of processors in the X-direction
               "my": comm.NumProc()    # number of processors in the Y-direction
               }
  map    = Galeri.CreateMap("Cartesian2D", comm, mapParams)
  matrix = Galeri.CreateCrsMatrix("Laplace2D", map, mapParams)
  # Set up starting solution and right-hand side
  lhs = Epetra.Vector(map)
  lhs.Random()
  rhs = Epetra.Vector(map)
  rhs.PutScalar(0.0)
  # Set up the parameters for ML using a python dictionary
  mlList = {"max levels"                 : 3, 
            "output"                     : 10,
            "smoother: type"             : "symmetric Gauss-Seidel",
            "aggregation: type"          : "Uncoupled",
            "ML validate parameter list" : False
            }
  # Create the preconditioner and compute it
  prec = ML.MultiLevelPreconditioner(matrix, False)
  prec.SetParameterList(mlList)
  prec.ComputePreconditioner()
  # Set up the solver and solve using CG.
  solver = AztecOO.AztecOO(matrix, lhs, rhs)
  solver.SetPrecOperator(prec)
  solver.SetAztecOption(AztecOO.AZ_solver, AztecOO.AZ_cg);
  solver.SetAztecOption(AztecOO.AZ_output, 16);
  err = solver.Iterate(1550, 1e-5)
  #
  # The following command will prevent a Teuchos dangling reference error
  prec.DestroyPreconditioner()
  return err