<ParameterList name="MueLu">

  <!-- Factory collection -->
  <ParameterList name="Factories">

    <!-- Note that ParameterLists must be defined prior to being used -->

    <ParameterList name="UncoupledAggregationFact">
      <Parameter name="factory"                             type="string" value="UncoupledAggregationFactory"/>
      <Parameter name="aggregation: ordering"                            type="string" value="natural"/>
      <Parameter name="aggregation: max selected neighbors"             type="int"    value="0"/>
      <Parameter name="aggregation: min agg size"           type="int"    value="4"/>
    </ParameterList>

    <ParameterList name="myTentativePFact">
      <Parameter name="factory"                             type="string" value="TentativePFactory"/>
    </ParameterList>
    <ParameterList name="myProlongatorFact">
      <Parameter name="factory"                             type="string" value="SaPFactory"/>
      <Parameter name="P"                                   type="string" value="myTentativePFact"/>
      <Parameter name="sa: damping factor"                  type="double" value="1.0"/>
    </ParameterList>
    <ParameterList name="myTentRestrictorFact">
      <Parameter name="factory"                             type="string" value="TransPFactory"/>
      <Parameter name="P"                                   type="string" value="myTentativePFact"/>
    </ParameterList>
    <ParameterList name="mySymRestrictorFact">
      <Parameter name="factory"                             type="string" value="TransPFactory"/>
      <Parameter name="P"                                   type="string" value="myProlongatorFact"/>
    </ParameterList>
    <ParameterList name="myNonsymRestrictorFact">
      <Parameter name="factory"                             type="string" value="GenericRFactory"/>
      <Parameter name="P"                                   type="string" value="myProlongatorFact"/>
    </ParameterList>

    
    <ParameterList name="SymGaussSeidel">
      <Parameter name="factory"                             type="string" value="TrilinosSmoother"/>
      <Parameter name="type"                                type="string" value="RELAXATION"/>
      <ParameterList name="ParameterList">
        <Parameter name="relaxation: type"                  type="string" value="Symmetric Gauss-Seidel"/>
        <Parameter name="relaxation: sweeps"                type="int"    value="10"/>
        <Parameter name="relaxation: damping factor"        type="double" value="0.8"/>
      </ParameterList>
    </ParameterList>

  </ParameterList>

  <!-- Definition of the multigrid preconditioner -->
  <ParameterList name="Hierarchy">

    <Parameter name="use kokkos refactor"                   type="bool"     value="true"/>
    <Parameter name="max levels"                            type="int"      value="10"/> <!-- Max number of levels -->
    <Parameter name="coarse: max size"                      type="int"      value="10"/> <!-- Min number of rows on coarsest level -->
    <Parameter name="verbosity"                             type="string"   value="High"/>

    <ParameterList name="All">
      <Parameter name="Smoother"                        type="string"   value="SymGaussSeidel"/>
      <Parameter name="Aggregates"                      type="string"   value="UncoupledAggregationFact"/>
      <Parameter name="Nullspace"                       type="string"   value="myTentativePFact"/>
      <Parameter name="P"                               type="string"   value="myProlongatorFact"/>
      <Parameter name="R"                               type="string"   value="mySymRestrictorFact"/>
      <Parameter name="CoarseSolver"                    type="string"   value="DirectSolver"/>
    </ParameterList>

  </ParameterList>
</ParameterList>
