<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Jan 24, 2020 at 9:25 AM Mark Cunningham <<a href="mailto:mark.cunningham@ariacoustics.com">mark.cunningham@ariacoustics.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>As a novice PETSc user, can I ask for some advice? I've found some test examples that do similar sorts of things but I would appreciate any suggestions.<br></div><div>I have a matrix generated from overset meshes with a structure like</div><div>A = |A0  B01     B0n|</div><div>      |B01  A1     B1n|</div><div>         :                 :</div><div>      |B0n    ...        An|   where the Ai are finite difference stencils and the Bij</div><div> represent interpolation between the grids.  <br></div><div>1. If I create a DMDA composite object that defines each of the grid sizes through repeated calls to DMCreate1D (because we are omitting blanked points from the 3D mesh) and create the matrix</div><div>through DMCreateMatrix, can I still fill the matrix through MatSetValues using the global index?</div></div></blockquote><div><br></div><div>You might just want to use an AIJ matrix if you are sparse (omitting points)</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>(This is how the code operates now.) <br></div><div><div>2. If I have to declare the matrix to be matnest and I have to create each of the subblocks individually, how do I cope with some of the Bij being all zero? </div></div></div></blockquote><div><br></div><div>A sparse matrix (AIJ) can be empty.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><div>Must there be a MatSetValues call for each block?</div></div></div></blockquote><div><br></div><div>With AIJ, yes. You need to keep track of indexing.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>3. The principle reason at the moment for the change is to use diag(A0...An) as the precondition matrix and use ILU on the blocks. If I set the preconditioner to be bjacobi and then fetch the subksps, can I then set the subpcs to be ilu? <br></div></div></blockquote><div><br></div><div>ILU is local, not MPI parallel, so you will get a diag block structure by default. So ILU is bjacobi with something on the blocks (eg, ILU), but you can specify bjacobi and then specify the PC on each block, not the KSP (I think). The KSP is global, but there may be a way to use a KSP PC if you really want to.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div></div><div>4. A further complication is we would like to have a boundary condition where the values of the boundary points are defined by an expansion in functions that satisfy the radiation condition.  So, I would like to define an index set that identifies the boundary points and define a PCSHELL on A<br></div><div>that for the pcsetup phase will do a QR factorization of the auxiliary matrix: G, where we're solving <br></div><div>Gy = QRy =c and then on pcapply do the Ry = Q* c triangular solve that will enable me to update <br></div><div>the boundary points (y subset of x the solution vector.)  How do I get the PCSHELL to work with the block jacobi strategy.</div></div></blockquote><div><br></div><div>Block Jacobi has a sub PC for each block. You can set these manually or with the command line (eg, -pc_type bjacobi -sub_pc_type ilu). You can register your shell PC, but you probably don't want to jump through these hoops at this point, so use things like KPSGetPC, PCGetSubBlocks (something like that). And keep digging down until you get to the block PCs.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><br></div><div>Thanks for any suggestions.</div><div><br></div><div>Mark Cunningham<br></div></div>
</blockquote></div></div>