Hi Matt,
I found my error! It's due to the output part in my code. How stupid I am! When 
I "Script" the matrix_viewer, I found the none-zero values. I'm ready to check 
my output code. Please forgive my stupid. Thank you for your patient reply! 
Hope you have a nice day!
Thank you very much!
daye







At 2018-03-24 19:58:57, "Matthew Knepley" <[email protected]> wrote:

On Sat, Mar 24, 2018 at 8:56 AM, 我 <[email protected]> wrote:

Hi Matt,
I have tested my code with a really small matrix(10*10) just now and the 
preconditioned matrix is obtained. But for my case, the output is still equal 
to zero. I'm thinking if it is because this coefficient matrix is too ill. In 
my case, due to the Dirichlet boundary condition, I multiply a really huge 
number(e.g. 1e+10) at the matrix's given position. So this matrix is combined 
with some really huge numbers. I don't know if it will influence the 
preconditioned matrix output.



Try changing the PC to Jacobi and see what you get. I think its not the huge 
numbers.


  Thanks,


     Matt
 
The viewer is PETSC_VIEWER_STDOUT_WORLD.
Thanks again!
daye







At 2018-03-24 19:26:34, "Matthew Knepley" <[email protected]> wrote:

On Sat, Mar 24, 2018 at 8:15 AM, 我 <[email protected]> wrote:

Hi Matt,
Sorry to distribute you again. I still have trouble with 
KSPComputeExplicitOperator. I reduced the matrix size to around 1000*1000. The 
time-cost of this function is acceptable, but when I output the preconditioned 
matrix, all the values are equal to zero! Here is part of my codes, do I 
operate error with this function?

PC pc;
KSP ksp;
Mat A,PA;
Vec b,x;
ierr=KSPCreate(PETSC_COMM_WORLD,&ksp);CHKERRQ(ierr);
ierr=KSPSetOperators(ksp,A,A);CHKERRQ(ierr);
ierr=KSPGetPC(ksp,&pc);CHKERRQ(ierr);
ierr=PCSetType(pc,PCHYPRE);CHKERRQ(ierr);
ierr=KSPSetType(ksp,KSPGMRES);CHKERRQ(ierr);
ierr=KSPSetFromOptions(ksp);CHKERRQ(ierr);
ierr=KSPSolve(ksp,b,x);CHKERRQ(ierr);
ierr=KSPComputeExplicitOperator(ksp,&PA);



There is no need to assemble the output matrix.
 
ierr=MatAssemblyBegin(PA,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
ierr=MatAssemblyEnd(PA,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);



What kind of viewer are you using? The code above should work. I would step 
through
in the debugger to see why one column is all zeros, or try it in an example like
SNES ex5 to make sure its not a problem in your code.


  Thanks,


    Matt
 
ierr=MatView(PA,viewer);CHKERRQ(ierr);

Thank you very much!
Daye








At 2018-03-23 07:41:26, "Matthew Knepley" <[email protected]> wrote:

On Thu, Mar 22, 2018 at 8:29 PM, 我 <[email protected]> wrote:

Hi all,
I want to analyze the preconditioned matrix. But the KSPComputeExplicitOperator 
costs too much time to obtain the matrix. My origin matrix is about 3000*3000 
sparse one. I noticed this function is applicable for the relative small 
system. What's the matrix-size limitation for this function? And for my case, 
any suggestions to solve it with less time?



This is just a really expensive operation. There is no way around it.


   Matt
 
Thank you very much!
daye






 






--

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


https://www.cse.buffalo.edu/~knepley/





 






--

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


https://www.cse.buffalo.edu/~knepley/





 






--

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


https://www.cse.buffalo.edu/~knepley/

Reply via email to