You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The general isai preconditioner seems to produce an incorrect output for cases where the sparsity pattern power for the approximate inverse is chosen to be greater than 1. Currently, the tests for general isai preconditioner use a matrix with full(dense) sparsity pattern (no zeroes) as the input matrix, thus the sparsity pattern does not change as the power is increased from 1 to anything greater than 1. As a result, the issue is not detected in the tests.
Running general isai preconditioner for the cases: pores_1 with sparsity power = 7 and LF10 with sparsity power = 9 demonstrates the problem very clearly.
With such high sparsity powers, the inverse pattern spy(A^spy_power) for both the cases is a full sparsity pattern, i.e with no zero elements.
The left approximate inverse: approx_inv_A * A = I on S, spy(approx_inv_A) = S = spy(A^spy_power)
Following from the above equation, in cases, where S = full sparsity pattern, approx_inv_A should be equal to the exact inverse of matrix A. However, it is turns out that the approximate inverse that is produced by general isai is not equal to the exact inverse for the above test cases.
Not only that, there are many cases where the iterative solvers converge with general isai preconditioner when spy_power used is equal to 1, but run out the maximum iteration limit when the spy_power is increased.
As a side note, the above problem is only for the case of general isai with spy_power > 1. Lower and upper triangular isai work perfectly fine.
The text was updated successfully, but these errors were encountered:
Quick check to identify where things go wrong: Does this also happen if you artificially turn the matrix dense by adding numerical zeros to its sparsity pattern?
My observation is that the general isai output gets messed up only for cases where there is a change in the sparsity pattern as the power is increased. If the sparsity pattern is already full, increasing the power does not induce any change in the pattern. In such cases, the output generated by general isai for any spy_power (> 1) is correct; it is the same as for spy_power = 1. In short, the isai works as expected.
Another observation: In the incorrect output, it seems that some of the rows are overwritten.
The general isai preconditioner seems to produce an incorrect output for cases where the sparsity pattern power for the approximate inverse is chosen to be greater than 1. Currently, the tests for general isai preconditioner use a matrix with full(dense) sparsity pattern (no zeroes) as the input matrix, thus the sparsity pattern does not change as the power is increased from 1 to anything greater than 1. As a result, the issue is not detected in the tests.
Running general isai preconditioner for the cases: pores_1 with sparsity power = 7 and LF10 with sparsity power = 9 demonstrates the problem very clearly.
With such high sparsity powers, the inverse pattern
spy(A^spy_power)
for both the cases is a full sparsity pattern, i.e with no zero elements.The left approximate inverse:
approx_inv_A * A = I on S, spy(approx_inv_A) = S = spy(A^spy_power)
Following from the above equation, in cases, where S = full sparsity pattern, approx_inv_A should be equal to the exact inverse of matrix A. However, it is turns out that the approximate inverse that is produced by general isai is not equal to the exact inverse for the above test cases.
Not only that, there are many cases where the iterative solvers converge with general isai preconditioner when spy_power used is equal to 1, but run out the maximum iteration limit when the spy_power is increased.
As a side note, the above problem is only for the case of general isai with spy_power > 1. Lower and upper triangular isai work perfectly fine.
The text was updated successfully, but these errors were encountered: