Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Teko: Parser hooks missing for setting up an inner preconditioned KSP as a sub-block solver #12674

Closed
MalachiTimothyPhillips opened this issue Jan 17, 2024 · 0 comments
Assignees
Labels
client: Sierra All issues that primarily impacts SNL Sierra codes pkg: Teko type: bug The primary issue is a bug in Trilinos code or tests

Comments

@MalachiTimothyPhillips
Copy link

@trilinos/teko
@cgcgcg

The idea is essentially to use Teko as a preconditioner inside an "outer" KSP. For one of the Teko sub-blocks, I want to solve it using an "inner" preconditioned KSP that is invoked at every iteration. The "inner" KSP is working as expected. However, there doesn't seem to be a way to specify the preconditioner type for the inner KSP in Teko.

Example input:

<!-- Outer KSP settings -->
<ParameterList name="Belos-Tpetra">
  <!-- Flexible GMRES required here due to desire to use inner KSP in Teko -->
  <Parameter name="Flexible GMRES" type="bool" value="true"/>
  <Parameter name="Maximum Iterations" type="int" value="500"/>
  <Parameter name="Convergence Tolerance" type="double" value="1e-9"/>
  <Parameter name="Implicit Residual Scaling" type="string" value="None"/>
  <Parameter name="Explicit Residual Scaling" type="string" value="None"/>
  <!-- GMRES(infty) -> high orthogonalization cost, will remove once working -->
  <Parameter name="Num Blocks" type="int" value="500"/>
  <Parameter name="Maximum Restarts" type="int" value="1"/>
  <Parameter name="Orthogonalization" type="string" value="ICGS"/>
</ParameterList>

<!-- Teko-block preconditioner for the outer KSP -->
<ParameterList name="Teko-Tpetra">
  <ParameterList name="Teko-parameters">
    <ParameterList name="my_teko_preco">
      <Parameter name="Type" type="string" value="Block Gauss-Seidel"/>
      <Parameter name="Use Upper Triangle" type="bool" value="true"/>
      <!-- I want to use an inner KSP here as part of the Teko-block preconditioner -->
      <Parameter name="Inverse Type 1"  type="string" value="iterative_solver"/>
      <Parameter name="Inverse Type 2"  type="string" value="direct"/>
      <Parameter name="Inverse Type 3"  type="string" value="direct"/>
    </ParameterList>

    <!-- Iterative solver for block 1 -->
    <ParameterList name="iterative_solver">
      <ParameterList name="VerboseObject">
        <Parameter name="Verbosity Level" type="string" value="low"/>
      </ParameterList>
      <Parameter name="Type" type="string" value="Belos"/>
      <Parameter name="Solver Type" type="string" value="Pseudo Block GMRES"/>
      <ParameterList name="Solver Types">
        <ParameterList name="Pseudo Block GMRES">
          <Parameter name="Convergence Tolerance" type="double" value="1e-8"/>
          <Parameter name="Maximum Iterations" type="int" value="100"/>
          <Parameter name="Verbosity" type="int" value="41"/>
          <Parameter name="Output Frequency" type="int" value="1"/>
          <Parameter name="Output Style" type="int" value="1"/>
          <Parameter name="Num Blocks" type="int" value="40"/>
        </ParameterList>
      </ParameterList>
    
      <!-- BEGIN BAD XML CONTENT -->
      <!--
        Everything up until now works, however these blocks aren't valid.
        The following exception is thrown:

        Error, the parameter {name="Preconditioner Types",type="ParameterList",value="..."}
        in the parameter (sub)list "ANONYMOUS->Teko-Tpetra->Teko-parameters->iterative_solver"
        was not found in the list of valid parameters!
        
        The valid parameters and types are:
          {
            "Solver Type" : string = Pseudo Block GMRES
            "Convergence Test Frequency" : int = 1
            "Left Preconditioner If Unspecified" : bool = 0
            "Solver Types" : ParameterList = ...
            "VerboseObject" : ParameterList = ...
          }
      -->
      <Parameter name="Preconditioner Type" type="string" value="Ifpack2"/>
      <ParameterList name="Preconditioner Types">
        <ParameterList name="Ifpack2">
          <Parameter name="Prec Type" type="string" value="SCHWARZ"/>
          <ParameterList name="Ifpack2 Settings">
            <Parameter name="schwarz: use reordering" type="bool" value="true"/>
            <Parameter name="schwarz: overlap level" type="int" value="0"/>
            <Parameter name="schwarz: num iterations" type="int" value="2"/>
          </ParameterList>
        </ParameterList>
      </ParameterList>
      <!-- END BAD XML CONTENT -->
    </ParameterList>

    <!-- Direct solver for blocks 2, 3 -->
    <ParameterList name="direct">
      <Parameter name="Type" type="string" value="Amesos2"/>
    </ParameterList>
  </ParameterList>
</ParameterList>
@MalachiTimothyPhillips MalachiTimothyPhillips added the type: bug The primary issue is a bug in Trilinos code or tests label Jan 17, 2024
@cgcgcg cgcgcg self-assigned this Jan 17, 2024
@cgcgcg cgcgcg added the client: Sierra All issues that primarily impacts SNL Sierra codes label Jan 17, 2024
@cgcgcg cgcgcg closed this as completed Feb 13, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
client: Sierra All issues that primarily impacts SNL Sierra codes pkg: Teko type: bug The primary issue is a bug in Trilinos code or tests
Projects
None yet
Development

No branches or pull requests

2 participants