<ParameterList name="MueLu">

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

    <!-- Note that ParameterLists must be defined prior to being used -->
    <ParameterList name="myJacobi">
      <Parameter name="factory"                       type="string" value="TrilinosSmoother"/>
      <Parameter name="type"                                type="string" value="RELAXATION"/>
      <ParameterList name="ParameterList">
        <Parameter name="relaxation: type"                  type="string" value="Jacobi"/>
        <Parameter name="relaxation: sweeps"                type="int"    value="5"/>
        <Parameter name="relaxation: damping factor"        type="double" value="0.6"/>
      </ParameterList>
    </ParameterList>  
    
    <ParameterList name="ForwardGaussSeidel">
      <Parameter name="factory"                        type="string" value="TrilinosSmoother"/>
      <Parameter name="type"                                type="string"  value="RELAXATION"/>

      <ParameterList name="ParameterList">
        <Parameter name="relaxation: type"                  type="string"  value="Gauss-Seidel"/>
        <Parameter name="relaxation: backward mode"         type="bool"    value="false"/>
        <Parameter name="relaxation: sweeps"                type="int"     value="3"/>
        <Parameter name="relaxation: damping factor"        type="double"  value="0.6"/>
      </ParameterList>
    </ParameterList>
    
    <ParameterList name="BackwardGaussSeidel">
      <Parameter name="factory"                        type="string" value="TrilinosSmoother"/>
      <Parameter name="type"                                type="string"  value="RELAXATION"/>

      <ParameterList name="ParameterList">
        <Parameter name="relaxation: type"                  type="string"  value="Gauss-Seidel"/>
        <Parameter name="relaxation: backward mode"         type="bool"    value="true"/>
        <Parameter name="relaxation: sweeps"                type="int"     value="3"/>
        <Parameter name="relaxation: damping factor"        type="double"  value="0.6"/>
      </ParameterList>
    </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="3"/>
        <Parameter name="relaxation: damping factor"        type="double" value="0.7"/>
      </ParameterList>
    </ParameterList>
  </ParameterList>

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

    <Parameter name="max levels"                            type="int"      value="4"/>
    <Parameter name="coarse: max size"                      type="int"      value="10"/>
    <Parameter name="verbosity"                             type="string"   value="Low"/>

    <ParameterList name="Level1">
      <Parameter name="startLevel"            type="int" value="0"/>
      <Parameter name="Smoother"              type="string" value="myJacobi"/>
      <Parameter name="CoarseSolver"          type="string"  value="DirectSolver"/>
    </ParameterList>

    <ParameterList name="Level2">
      <Parameter name="startLevel"            type="int" value="1"/>
      <Parameter name="PreSmoother"           type="string" value="ForwardGaussSeidel"/>
      <Parameter name="PostSmoother"          type="string" value="BackwardGaussSeidel"/>
      <Parameter name="CoarseSolver"          type="string"  value="DirectSolver"/>
    </ParameterList>

    <ParameterList name="Level3">
      <Parameter name="startLevel"            type="int" value="2"/>
      <Parameter name="Smoother"              type="string" value="SymGaussSeidel"/>
      <Parameter name="CoarseSolver"          type="string"  value="DirectSolver"/>
    </ParameterList>
  </ParameterList>
</ParameterList>
