[petsc-users] KSP Solver giving inf's

Kaushik Kulkarni kaushikggg at gmail.com
Sat Apr 8 11:21:49 CDT 2017


Yes that worked. Thanks a lot.

On Sat, Apr 8, 2017 at 9:49 PM, Matthew Knepley <knepley at gmail.com> wrote:

>
>
> On Apr 8, 2017 10:20, "Kaushik Kulkarni" <kaushikggg at gmail.com> wrote:
>
> Hello Matthew,
> The same happened for:
>
> PetscReal   loc[]  = { 0.0,  2.0,  1.0,
>                            1.0, -2.0, -3.0,
>                           -1.0,  1.0,  2.0};
> PetscReal   b_array[] = { -8.0,
>                                     0.0,
>                                     3.0};
>
> And this time I checked the matrix to be non-singular(determinant=1). I am
> again getting (inf, inf, inf) as the solution.
>
> On running with -ksp_converged_reason the following message comes:
> Linear solve did not converge due to DIVERGED_PCSETUP_FAILED iterations 0
> PCSETUP_FAILED due to FACTOR_NUMERIC_ZEROPIVOT
>
>
> 1) Always check the return code of every call using CHKERRQ(ierr)
>
> 2) You get Info because x I'd uninitialized and the solve failed
>
> 3) You are using LU but have a zero on the diagonal. Use -pc_type jacobi
> and it will work
>
>
>    Matt
>
> I am once again appending the whole code for reference.
>
> Thanks.
> ---------
>
> static char help[] = "KSP try.\n\n";
>
>
> #include "petsc.h"
> #include "petscksp.h"
>
>
> int main(int argc, char *argv[])
> {
>     /// matrix creation variables.
>     PetscInt    *idxm = new PetscInt[3];
>     PetscInt    *idxn = new PetscInt[3];
>     PetscReal   loc[]  = { 0.0,  2.0,  1.0,
>                                  1.0, -2.0, -3.0,
>                                 -1.0,  1.0,  2.0};
>     PetscReal   b_array[] = { -8.0,
>                                0.0,
>                                3.0};
>
>     PetscInt i;
>     KSP      ksp;
>
>     /// Declaring the vectors
>     Vec     x, b;
>
>     // Declaring matrices
>     Mat A;
>
>     PetscInitialize(&argc,&argv,(char*)0,help);
>     // Creating vectors
>     VecCreateSeq(PETSC_COMM_SELF, 3, &x);
>     VecCreateSeq(PETSC_COMM_SELF, 3, &b);
>     // Creating matrix
>     MatCreateSeqAIJ(PETSC_COMM_SELF, 3, 3, 3, NULL, &A);
>     // Creating the indices
>     for(i=0; i<3; i++) {
>         idxm[i] = i;
>         idxn[i] = i;
>     }
>     // Assembling the vector b and x
>     VecSetValues(b, 3, idxm, b_array, INSERT_VALUES);
>     VecAssemblyBegin(b);
>     VecAssemblyEnd(b);
>
>     //Assembling the Matrix
>     MatSetValues(A, 3, idxm, 3, idxn, loc, INSERT_VALUES);
>     MatAssemblyBegin(A, MAT_FINAL_ASSEMBLY);
>     MatAssemblyEnd(A, MAT_FINAL_ASSEMBLY);
>
>     // KSP related operations
>     KSPCreate(PETSC_COMM_SELF, &ksp);
>     KSPSetType(ksp, KSPGMRES);
>     KSPSetOperators(ksp, A, A);
>     KSPSetFromOptions(ksp);
>     KSPSolve(ksp,b,x);
>     KSPDestroy(&ksp);
>
>     VecView(x, PETSC_VIEWER_STDOUT_SELF);
>
>     PetscFinalize();
>     return 0;
> }//End of file
> --------
>
>
> On Sat, Apr 8, 2017 at 7:01 PM, Matthew Knepley <knepley at gmail.com> wrote:
>
>> On Sat, Apr 8, 2017 at 8:26 AM, Kaushik Kulkarni <kaushikggg at gmail.com>
>> wrote:
>>
>>> I guess there is a miscalculation:
>>> 2*row1 + row2 = (4, 0, 0)
>>>
>>
>> You are right here, but I think it is still rank deficient.
>>
>>   Thanks,
>>
>>     Matt
>>
>>
>>> Thanks,
>>> Kaushik
>>>
>>> On Apr 8, 2017 6:52 PM, "Matthew Knepley" <knepley at gmail.com> wrote:
>>>
>>> On Sat, Apr 8, 2017 at 6:54 AM, Kaushik Kulkarni <kaushikggg at gmail.com>
>>> wrote:
>>>
>>>> Hello,
>>>> I just started with PETSc and was trying the KSP Solvers. I was trying
>>>> for the problem -
>>>>
>>>> int main(int argc, char *argv[])
>>>> {
>>>>     /// matrix creation variables.
>>>>     PetscInt    *idxm = new PetscInt[3];
>>>>     PetscInt    *idxn = new PetscInt[3];
>>>>
>>>
>>> Note that the problem below is rank deficient (2 * row 1 + row 2 = 0).
>>> Its not clear to me whether b is
>>> in the range space of the operator.
>>>
>>>   Thanks,
>>>
>>>     Matt
>>>
>>>
>>>>     PetscReal   loc[]  = { 1.0, -2.0, -6.0,
>>>>                                    2.0,  4.0, 12.0,
>>>>                                    1.0, -4.0,-12.0};
>>>>     PetscReal   b_array[] = {  12.0,
>>>>                               -17.0,
>>>>                                22.0};
>>>>     PetscInt i;
>>>>     KSP      ksp;
>>>>
>>>>     /// Declaring the vectors
>>>>     Vec     x, b;
>>>>
>>>>     // Declaring matrices
>>>>     Mat A;
>>>>
>>>>     PetscInitialize(&argc,&argv,(char*)0,help);
>>>>     // Creating vectors
>>>>     VecCreateSeq(PETSC_COMM_SELF, 3, &x);
>>>>     VecCreateSeq(PETSC_COMM_SELF, 3, &b);
>>>>     // Creating matrix
>>>>     MatCreateSeqAIJ(PETSC_COMM_SELF, 3, 3, 3, NULL, &A);
>>>>     // Creating the indices
>>>>     for(i=0; i<3; i++) {
>>>>         idxm[i] = i;
>>>>         idxn[i] = i;
>>>>     }
>>>>     // Assembling the vector b and x
>>>>     VecSetValues(b, 3, idxm, b_array, INSERT_VALUES);
>>>>     VecAssemblyBegin(b);
>>>>     VecAssemblyEnd(b);
>>>>
>>>>     //Assembling the Matrix
>>>>     MatSetValues(A, 3, idxm, 3, idxn, loc, INSERT_VALUES);
>>>>     MatAssemblyBegin(A, MAT_FINAL_ASSEMBLY);
>>>>     MatAssemblyEnd(A, MAT_FINAL_ASSEMBLY);
>>>>
>>>>     // KSP related operations
>>>>     KSPCreate(PETSC_COMM_SELF, &ksp);
>>>>     KSPSetType(ksp, KSPGMRES);
>>>>     KSPSetOperators(ksp, A, A);
>>>>     KSPSetFromOptions(ksp);
>>>>     KSPSolve(ksp,b,x);
>>>>     KSPDestroy(&ksp);
>>>>
>>>>     VecView(x, PETSC_VIEWER_STDOUT_SELF);
>>>>
>>>>     PetscFinalize();
>>>>     return 0;
>>>> }
>>>>
>>>> But the obtained solution is found out to be- (inf, inf, inf).
>>>>
>>>> I wanted to know whether I am doing something wrong or is the problem
>>>> inherently not solvable using GMRES. Currently I am running the code in a
>>>> sequential manner(no parallelism intended).
>>>>
>>>> Thank you.
>>>>
>>>
>>>
>>>
>>> --
>>> What most experimenters take for granted before they begin their
>>> experiments is infinitely more interesting than any results to which their
>>> experiments lead.
>>> -- Norbert Wiener
>>>
>>>
>>>
>>
>>
>> --
>> What most experimenters take for granted before they begin their
>> experiments is infinitely more interesting than any results to which their
>> experiments lead.
>> -- Norbert Wiener
>>
>
>
>
> --
> Kaushik Kulkarni
> Fourth Year Undergraduate
> Department of Mechanical Engineering
> Indian Institute of Technology Bombay
> Mumbai, India
> https://kaushikcfd.github.io/About/
> +91-9967687150 <+91%2099676%2087150>
>
>
>


-- 
Kaushik Kulkarni
Fourth Year Undergraduate
Department of Mechanical Engineering
Indian Institute of Technology Bombay
Mumbai, India
https://kaushikcfd.github.io/About/
+91-9967687150
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20170408/4d00f13e/attachment-0001.html>


More information about the petsc-users mailing list