<div><span class="gmail_quote">On 8/20/09, <b class="gmail_sendername">nicolas aunai</b> &lt;<a href="mailto:nicolas.aunai@gmail.com">nicolas.aunai@gmail.com</a>&gt; wrote:</span>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">Hi,</blockquote>
<div> </div>
<div> </div>
<div>I will answer the questions that I can below:</div>
<div> </div><br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">I&#39;ve written a little code based on the exercice 29, to solve my<br>equation (u - mu*laplacian(u) = f) with one DOF and with dirichlet<br>
boundary conditions.<br><br>my code is here :<br><br><a href="http://nau.cetp.ipsl.fr/inertia1.c">http://nau.cetp.ipsl.fr/inertia1.c</a><br><br>It seems that the code is *very* slow (never waited the end...) when<br>the dmmg_nlevels is &gt; 4 (with a 3x3 coarsest grid).</blockquote>

<div> </div>
<div> </div>
<div>Send the output of -log_summary.</div>
<div> </div><br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">The refinement factor has the default value 2, and I want my fine grid<br>to be for example nx=513, ny=257 grid points.<br>
<br><br>I have some more questions :<br><br>1/ How can I change the linear solver and preconditionner *in* the<br>code, not with the command -ksp_type and -pc_type ?</blockquote>
<div> </div>
<div>You can use DMMGGetKSP() and then KSPGetPC(), and then extract</div>
<div>the various parts of the MG PC. However, I would never ever do this. First,</div>
<div>it precludes nice testing you can do by just setting the PC to LU and the</div>
<div>KSP to preonly. Furthermore, it seems to preclude nice optimizations to</div>
<div>be made later. I really really really recommend that you do not do this.</div>
<div> </div><br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">2/ What and Where is actually used the linear solver and the<br>preconditionners ? Is it used at each grid level as a smoother ? Can<br>
we change the pre/post smoothing parameters ?</blockquote>
<div> </div>
<div> </div>
<div>Yes, and yes. You can always use -help to see all the options that can</div>
<div>customize the solve.</div>
<div> </div><br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">3/ My code is written to work in parallel, can I use a direct solver<br>when I&#39;m at the coarset grid (small matrix) ?</blockquote>

<div> </div>
<div> </div>
<div>Yes. The default is to solve the coarse problem redundantly using LU.</div>
<div>You can also use a parallel 3rd party LU.</div>
<div> </div><br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">4/ When I add -ksp_monitor, do I see the residual of the smoothing<br>iterations at each grid level ? If no, what is it ?</blockquote>

<div> </div>
<div>I believe you can use -dmmg_ksp_monitor, however I can&#39;t check right</div>
<div>now since I am at Domodedovo airport. You can check using -help.</div>
<div> </div><br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">5/ My code is just a test code with some analytical RHS. In the end,<br>the solver is supposed to be added in a simulation code where the RHS<br>
will be a/ the result of some other calculation, b/ changing with time<br>(the system being solved at each time step). Is it relevant to look at<br>the timing with this test code since the RHS is not the one that is<br>supposed to be (i.e. is the RHS very important for convergence speed)<br>
?</blockquote>
<div> </div>
<div>This depends completely on the particular problem. Usually not.</div>
<div> </div><br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">6/ When the solver will be added in the simulation, will it be much<br>more efficient to setup the solution vector with the previous solution<br>
as an initial guess ?</blockquote>
<div> </div>
<div>Yes, usually if you are solving for the full solution and not an update.</div>
<div> </div><br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">7/ My goal is not to do full dirichlet conditions like I have done in<br>the test code above, but rather DA_XPERIODIC and dirichlet in the Y<br>
direction. I have observed that with a refinement factor of 2, and a<br>coarsest grid (nx=3,ny=3), when dmmg_nlevels is set to 2 I don&#39;t have<br>a 5x5 grid but a 6x5 grid, why ? for dmmg_nlevels = 8 I have 384x257<br>
grid instead of the 257^2 grid I was expected... what is the reason<br>for this ?<br><br>8/ With DA_XPERIODIC, am I supposed to use the stencil as if I were<br>within the domain when I&#39;m on periodic &quot;borders&quot;, i.e. is col[1].i =<br>
i-1 is ok when i=0 (left border) ?</blockquote>
<div> </div>
<div>Yes.</div>
<div> </div>
<div>   Matt</div><br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">Ok that&#39;s it for the moment,<br>Thx<br><br><br>Nico<br><br><br><br>2009/8/19 Barry Smith &lt;<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>&gt;:<br>
&gt;<br>&gt; On Aug 19, 2009, at 2:04 AM, nicolas aunai wrote:<br>&gt;<br>&gt;&gt; Hi,<br>&gt;&gt;<br>&gt;&gt; OK then, lets go for multigrid.<br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt; When I&#39;m looking for example at exercice 32 :<br>
&gt;&gt;<br>&gt;&gt; <a href="http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-current/src/ksp/ksp/examples/tutorials/ex32.c.html">http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-current/src/ksp/ksp/examples/tutorials/ex32.c.html</a><br>
&gt;&gt;<br>&gt;&gt; I realize that I don&#39;t understand some things, in particular about the<br>&gt;&gt; DMMGSetKSP function.<br>&gt;&gt;<br>&gt;&gt; I need to give the RHS function and the ComputeMatrix function.<br>&gt;&gt;<br>
&gt;&gt; 1/ My operator is always the same during the simulation, I was<br>&gt;&gt; thinking to build the matrix once and for all at the begining of the<br>&gt;&gt; program. Why can&#39;t I do that ? Is it because at each multigrid level<br>
&gt;&gt; the required matrix is different (size) and it can only be built with<br>&gt;&gt; the information the DA is giving ?<br>&gt;<br>&gt;    Yes. The idea is rather than you giving the matrix. You give the function<br>
&gt; that fills up the matrix.<br>&gt;&gt;<br>&gt;&gt; 2/ I don&#39;t really understand the prototype of the callback function<br>&gt;&gt; ComputeMatrix. The first argument is the DMMG object, ok. But the<br>&gt;&gt; second and third arguments are matrices called &#39;J&#39; and &#39;jac&#39;.  It<br>
&gt;&gt; seems (at least in ex32) that &#39;J&#39; is not used, what is the goal of<br>&gt;&gt; this matrix in general ?<br>&gt;<br>&gt;   Sometimes one uses say a second order discretization to define the system<br>&gt; but wants a cheap preconditioner built from the first order discretization.<br>
&gt; Hence the two matrices. If you are not doing this then you pass the same<br>&gt; matrix in both slots.<br>&gt;<br>&gt;&gt;<br>&gt;&gt; Is &#39;jac&#39; stands for jacobian ? Reading the ComputeMatrix() code, it<br>&gt;&gt; seems that the &#39;jac&#39; matrix is built like a standard finite difference<br>
&gt;&gt; matrix, with the stencil corresponding to the operator I have to<br>&gt;&gt; solve. if so, why is it called &#39;jacobian&#39; ? (sorry it looks more a<br>&gt;&gt; math question than a petsc question...)<br>&gt;<br>
&gt;   This is just brought over from the nonlinear solver code. It could just be<br>&gt; called matrix here.<br>&gt;<br>&gt;   Barry<br>&gt;<br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt; Another quick question :<br>&gt;&gt;<br>&gt;&gt; Why is there no documentation for the function &#39;DMMGGetr(dmmg)&#39; which<br>
&gt;&gt; seems to be part of the petsc library since I can&#39;t see the definition<br>&gt;&gt; of the function in the exercice file. I suppose it computes the<br>&gt;&gt; residual ?<br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt; I guess this is it.... for the moment.<br>
&gt;&gt; Thx<br>&gt;&gt;<br>&gt;&gt; Nico<br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt; 2009/8/19 Barry Smith &lt;<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>&gt;:<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; On Aug 18, 2009, at 11:42 AM, nicolas aunai wrote:<br>
&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; Hello,<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; Yes it is a bit overkill indeed :-) I was looking at ex29 actually...<br>&gt;&gt;&gt;&gt; which is still linear and with DA&#39;s but scalar.<br>
&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; But I&#39;d rather like not use multigrids, however I have not seen an<br>&gt;&gt;&gt;&gt; example of a code that uses DA&#39;s and KSP solvers.<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; Every example use multigrids.<br>
&gt;&gt;&gt;<br>&gt;&gt;&gt;  Multigrid is the way to go for this problem, it will be faster than some<br>&gt;&gt;&gt; generic preconditioned CG.<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; When you have a multicomponent linear equation to solve on a<br>
&gt;&gt;&gt;&gt; rectangular uniform grid such as mine, is it good to :<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; 1/  use DA&#39;s to represent your grid<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; 2/ create the matrix corresponding to your operator once and for all<br>
&gt;&gt;&gt;&gt; (the operator neve changes).( In fact there are 2 matrices because two<br>&gt;&gt;&gt;&gt; cases possibles (Neumann/periodic or Dirichlet/Periodic, depending on<br>&gt;&gt;&gt;&gt; the component). but never minds)<br>
&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; 3/ Call KSPSolve() 3 times (for each vector component associated with<br>&gt;&gt;&gt;&gt; the<br>&gt;&gt;&gt;&gt; DA) ?<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;  Yes. You can do all this using the DMMG object.<br>
&gt;&gt;&gt;<br>&gt;&gt;&gt;  Note that the DMMG object in your linear case just manages a KSP and the<br>&gt;&gt;&gt; meshes for you. In the end it is a KSPSolve() that actually does the<br>&gt;&gt;&gt; solve<br>&gt;&gt;&gt; and you have full control over the solve including using -pc_type icc or<br>
&gt;&gt;&gt; something else that does not use multigrid. Though multigrid will be<br>&gt;&gt;&gt; faster.<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;  Barry<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; Thx<br>
&gt;&gt;&gt;&gt; Nico<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; 2009/8/18 Aron Ahmadia &lt;<a href="mailto:aron.ahmadia@kaust.edu.sa">aron.ahmadia@kaust.edu.sa</a>&gt;:<br>&gt;&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;&gt; ex19 comes to mind, though it&#39;s a bit overkill for what you&#39;re doing...<br>
&gt;&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;&gt; <a href="http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-current/src/snes/examples/tutorials/ex19.c.html">http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-current/src/snes/examples/tutorials/ex19.c.html</a><br>
&gt;&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;&gt; ex19 uses DAs and DMMG, which is kind of like a meta-DA for using<br>&gt;&gt;&gt;&gt;&gt; multigrid-style solvers.  Both work well with structured grids.<br>&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; You may also want to review the PETSc manual section on DA.<br>&gt;&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;&gt; A<br>&gt;&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;&gt; On Tue, Aug 18, 2009 at 3:30 AM, nicolas aunai<br>
&gt;&gt;&gt;&gt;&gt; &lt;<a href="mailto:nicolas.aunai@gmail.com">nicolas.aunai@gmail.com</a>&gt;<br>&gt;&gt;&gt;&gt;&gt; wrote:<br>&gt;&gt;&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;&gt;&gt; Dear all,<br>&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;&gt;&gt; I have a simulation code (particle in cell) in which I have to solve a<br>&gt;&gt;&gt;&gt;&gt;&gt; linear vector equation 4 times per time step. A typical run consists<br>
&gt;&gt;&gt;&gt;&gt;&gt; of 50 000 time steps. The grid is rectangular and uniform of size Lx,<br>&gt;&gt;&gt;&gt;&gt;&gt; Ly, with nx+1 and ny+1 points in the x and y direction respectively.,<br>&gt;&gt;&gt;&gt;&gt;&gt; (nx, ny) could be at max (1024,1024).<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;&gt;&gt; The vector equation is the following :<br>&gt;&gt;&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;&gt;&gt; B(x,y) - a*Laplacian(B(x,y)) = S(x,y)<br>&gt;&gt;&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; Where B and S are 2D vector fields with 3 components (Bx, By, Bz and<br>&gt;&gt;&gt;&gt;&gt;&gt; Sx, Sy, Sz), each depending on the x and y coordinates.<br>&gt;&gt;&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; &#39;a&#39; is a positive constant, smaller than one, typically a= 0.02<br>&gt;&gt;&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;&gt;&gt; Boundary conditions may depend on for which B component we are solving<br>
&gt;&gt;&gt;&gt;&gt;&gt; the equation. On the x=cst borders, the boundary is always periodic,<br>&gt;&gt;&gt;&gt;&gt;&gt; no matter what component is solved, but on y=cst borders, the boundary<br>&gt;&gt;&gt;&gt;&gt;&gt; condition can be either Neumann or Dirichlet.<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;&gt;&gt; So far, I have written a small code that creates a vector solution, a<br>&gt;&gt;&gt;&gt;&gt;&gt; vector RHS and the matrix operator, and solve a scalar equation of<br>
&gt;&gt;&gt;&gt;&gt;&gt; this type. Solving my vector equation would then just call 3 times<br>&gt;&gt;&gt;&gt;&gt;&gt; this kind of code... but I believe there is another way to deal with<br>&gt;&gt;&gt;&gt;&gt;&gt; vector fields and linear systems with Petsc, using DAs no ? Could<br>
&gt;&gt;&gt;&gt;&gt;&gt; someone explain me how solve this the proper way and/or show me some<br>&gt;&gt;&gt;&gt;&gt;&gt; code solving linear system with vector fields ? (is there an example<br>&gt;&gt;&gt;&gt;&gt;&gt; in the exercices that I would not have seen ?)<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;&gt;&gt; Thanks a lot<br>&gt;&gt;&gt;&gt;&gt;&gt; Nico<br>&gt;&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; --<br>&gt;&gt;&gt;&gt;&gt; Aron Jamil Ahmadia<br>&gt;&gt;&gt;&gt;&gt; Assistant Research Scientist<br>&gt;&gt;&gt;&gt;&gt; King Abdullah University of Science and Technology<br>&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>&gt;&gt;&gt;<br>&gt;<br>&gt;<br></blockquote></div><br><br clear="all"><br>-- <br>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>
-- Norbert Wiener