On Sat, Dec 1, 2012 at 12:48 AM, Hesameddin Ilatikhameneh <span dir="ltr"><<a href="mailto:hilatikh@purdue.edu" target="_blank">hilatikh@purdue.edu</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Sorry but I didn't get/understand the answer to my questions:<br>
<br>
1- I don't want to store Jacobian matrix so how is that Mat A is input of the function PetscErrorCode YourMatMult(Mat A,Vec X,Vec Y)?<br></blockquote><div><br></div><div>That Mat has type MATSHELL. It contains no data (or only the data you put there). You are implementing the Mat interface as you like.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
2- I need to find each row of Jacobian and multiply it with a vector which is needed in Petsc CG and store that to a vector. So there should be very specific function associated with specific method (like CG in this case).<br>

<br></blockquote><div><br></div><div>You just need to apply your operator to the Vec. Most matrix-free operators never explicitly construct entries of the matrix. (Other matrix-free operators include matrix-free finite difference, FFT, FMM, tensor product operations, unassembled Galerkin products, and approximate Schur complements.)</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
3- What is vector X in YourMatMult(Mat A,Vec X,Vec Y)? </blockquote><div><br></div><div>It's the Vec that's passed in. You use the Vec interface (VecGetArray, etc) to interact with it.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Where this matrix-multipication will be used?<br></blockquote><div><br></div><div>When CG (or any other method) needs to apply the matrix.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<br>
Thanks<br>
<div class="im HOEnZb">Hesam<br>
----- Original Message -----<br>
From: "Jed Brown" <<a href="mailto:jedbrown@mcs.anl.gov">jedbrown@mcs.anl.gov</a>><br>
To: "For users of the development version of PETSc" <<a href="mailto:petsc-dev@mcs.anl.gov">petsc-dev@mcs.anl.gov</a>><br>
</div><div class="HOEnZb"><div class="h5">Sent: Saturday, December 1, 2012 1:08:59 AM<br>
Subject: Re: [petsc-dev] Matrix Free Conjugate Gradient<br>
<br>
On Fri, Nov 30, 2012 at 11:53 PM, Hesameddin Ilatikhameneh < <a href="mailto:hilatikh@purdue.edu">hilatikh@purdue.edu</a> > wrote:<br>
<br>
<br>
<br>
<br>
Could you provide more information/example.<br>
I don't know that for example for matrix-free conjugate gradient in Petsc which matrix operation I should do.<br>
I guess that I need to write the function that gives Jacobian times a vector which is vector (Since I don't want to store Jacobian).<br>
If it is so, which vector is that vector? Petsc will do which parts of the algorithm?<br>
<br>
<br>
<br>
You implement<br>
<br>
<br>
PetscErrorCode YourMatMult(Mat A,Vec X,Vec Y);<br>
<br>
<br>
which computes Y <-- A*X. There is a section of the user's manual, as well as a couple examples linked from the page I sent.<br>
<br>
<br>
You only need to implement that one function, then pass -pc_type none so that no preconditioning is done. PETSc will do everything else in the solve.<br>
<br>
<br>
<br>
<br>
Thanks for your help.<br>
<br>
Hesam<br>
<br>
<br>
<br>
----- Original Message -----<br>
From: "Jed Brown" < <a href="mailto:jedbrown@mcs.anl.gov">jedbrown@mcs.anl.gov</a> ><br>
To: "For users of the development version of PETSc" < <a href="mailto:petsc-dev@mcs.anl.gov">petsc-dev@mcs.anl.gov</a> ><br>
Sent: Saturday, December 1, 2012 12:37:22 AM<br>
Subject: Re: [petsc-dev] Matrix Free Conjugate Gradient<br>
<br>
<a href="http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatShellSetOperation.html" target="_blank">http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatShellSetOperation.html</a><br>
<br>
<br>
<br>
Note that without an assembled matrix, you'll generally need to write your own preconditioner, which you can do using PCShell.<br>
<br>
<br>
<br>
On Fri, Nov 30, 2012 at 11:24 PM, Hesameddin Ilatikhameneh < <a href="mailto:hilatikh@purdue.edu">hilatikh@purdue.edu</a> > wrote:<br>
<br>
<br>
Hello,<br>
<br>
We have a very large system (100M variables) which we want to minimize its energy. We are using Petsc extensively for matrix operations.<br>
I know that it is theoretically possible to use conjugate gradient method without storing Jacobian matrix (which is very huge in this case) since the conjugate gradient needs Jacobian times a vector not Jacobian itself.<br>

<br>
I read your manual about matrix free methods but I couldn't find where I can determine that function to Jacobian times a vector.<br>
<br>
I appreciate your help.<br>
<br>
Thanks<br>
Hesam<br>
</div></div></blockquote></div><br></div>