Fix chebyshev smoother for singular problems (#657)
See PR's description for additional info
This commit is contained in:
		
							parent
							
								
									b58585e0f0
								
							
						
					
					
						commit
						850fd47d07
					
				| @ -68,7 +68,7 @@ hypre_ParCSRRelax_Cheby_Setup(hypre_ParCSRMatrix *A,         /* matrix to relax | ||||
|    hypre_CSRMatrix *A_diag       = hypre_ParCSRMatrixDiag(A); | ||||
|    HYPRE_Real       theta, delta; | ||||
|    HYPRE_Real       den; | ||||
|    HYPRE_Real       upper_bound = 0.0, lower_bound = 0.0; | ||||
|    HYPRE_Real       upper_bound, lower_bound; | ||||
|    HYPRE_Int        num_rows     = hypre_CSRMatrixNumRows(A_diag); | ||||
|    HYPRE_Real      *coefs        = NULL; | ||||
|    HYPRE_Int        cheby_order; | ||||
| @ -89,18 +89,18 @@ hypre_ParCSRRelax_Cheby_Setup(hypre_ParCSRMatrix *A,         /* matrix to relax | ||||
|    /* we are using the order of p(A) */ | ||||
|    cheby_order = order - 1; | ||||
| 
 | ||||
|    if (min_eig >= 0.0) | ||||
|    if (max_eig <= 0.0) | ||||
|    { | ||||
|       upper_bound = min_eig * 1.1; | ||||
|       lower_bound = max_eig - (max_eig - upper_bound) * fraction; | ||||
|    } | ||||
|    else | ||||
|    { | ||||
|       /* make sure we are large enough - Adams et al. 2003 */ | ||||
|       upper_bound = max_eig * 1.1; | ||||
|       /* lower_bound = max_eig/fraction; */ | ||||
|       lower_bound = (upper_bound - min_eig) * fraction + min_eig; | ||||
|    } | ||||
|    else if (max_eig <= 0.0) | ||||
|    { | ||||
|       upper_bound = min_eig * 1.1; | ||||
|       lower_bound = max_eig - (max_eig - upper_bound) * fraction; | ||||
|    } | ||||
| 
 | ||||
|    /* theta and delta */ | ||||
|    theta = (upper_bound + lower_bound) / 2; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Victor A. Paludetto Magri
						Victor A. Paludetto Magri