<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On 13 February 2017 at 20:35, Barry Smith <span dir="ltr"><<a href="mailto:bsmith@mcs.anl.gov" target="_blank">bsmith@mcs.anl.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=""><br>
> On Feb 13, 2017, at 2:25 PM, Dave May <<a href="mailto:dave.mayhem23@gmail.com">dave.mayhem23@gmail.com</a>> wrote:<br>
><br>
> Hey,<br>
><br>
><br>
> On 13 February 2017 at 19:41, Barry Smith <<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>> wrote:<br>
><br>
>    From the manual page: KSPSetComputeOperators() is not propagated to the sub KSP.<br>
><br>
> Hmm - it does indeed say that.<br>
> The statement is partially correct.<br>
> If a DM is not attached to the KSP, the computeoperators method is NOT propagated.<br>
> If a DM is attached, is in fact propagated, see telescope_dmda.c : 502<br>
> As usual the doc lags behind the implementation :( [my fault]<br>
><br>
><br>
>    Yet there is some code<br>
> sred->ignore_<wbr>kspcomputeoperators = PETSC_FALSE;<br>
> if (sred->ignore_<wbr>kspcomputeoperators) {<br>
>           ierr = PetscViewerASCIIPrintf(<wbr>subviewer,"  Telescope: ignoring KSPComputeOperators\n");<wbr>CHKERRQ(ierr);<br>
>         }<br>
>   ierr = PetscOptionsBool("-pc_<wbr>telescope_ignore_<wbr>kspcomputeoperators","Ignore method used to compute A","<wbr>PCTelescopeSetIgnoreKSPCompute<wbr>Operators",sred->ignore_<wbr>kspcomputeoperators,&sred-><wbr>ignore_kspcomputeoperators,0);<wbr>CHKERRQ(ierr);<br>
>   etc<br>
><br>
>    that seems to indicate that Dave May intended to have support for KSPComputeOperator ... but didn't complete it.<br>
><br>
> True - I didn't try this implementation out with any SNES examples.<br>
> Note it is/was tested and to my knowledge does work for linear cases.<br>
> Hopefully someone can confirm/deny this.<br>
><br>
> I should also note that it was already fragile for the linear only case. For instance if the computeoperators function employed a matrix-free method which involved some stored data (e.g. viscosity on a quadrature point), then the user would have to cleverly (e.g. via a hack) also communicate said quadrature values from the parent comm to the sub-comm. I never found a clean way to manage this operation.<br>
><br>
><br>
><br>
>    In this case it is using KSPComputeOperators_SNES(KSP ksp,Mat A,Mat B,void *ctx); which needs a couple of things changed to get it to work:<br>
><br>
> 1) KSPComputeOperators_SNES() needs to work when the subdm is on a smaller set of processes so the call to SNESComputeJacobian() has to handle running on a subset of process (which of course it cannot do normally because the SNES has its full communicator while the DM only lives on a subset of processes).<br>
><br>
> The motivating idea behind adding support for setcomputeoperators was to (i) avoid having to permute an assembled operator defined on the parent comm, into the ordering on the sub-comm and (ii) to permit people to use a matrix-free implementation.<br>
><br>
> The SNES case, at least with an assembled jacobian, should be possible to make work. We would assemble J on the parent comm, then we can move the operator on the sub-comm and do what we like. Does that sound reasonable?<br>
<br>
</span>  No, what if there are multiple levels on the smaller DM? Always assembly on the full and somehow permute down? What if there is a telescope inside a telescope.<br></blockquote><div><br></div><div>You're right.. that case also kills my follow up suggestion. <br></div><br> <blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<span class="">><br>
><br>
><br>
><br>
> 2) The DMRestrictHook_SNESVecSol() has to handle switching to a DM on a smaller set of processes and remapping the "solution" vector to that smaller set.<br>
><br>
> Hmmm - that seems awkward. Sounds like the user will have to do something magical in their hook definition...<br>
<br>
</span>   Not really, the shrinking of the solution vector to the smaller comm is the same as the shrinking of the right hand side of the system. So the process of shrinking is not difficult it is having the DMRestrictHook_SNESVecSol() knowing about the smaller DMs.<br>
<div class="HOEnZb"><div class="h5">><br>
><br>
><br>
>   Dave and Jed,<br>
><br>
>     All and all looks awfully complex and fragile to get this working. What do you think?<br>
><br>
>    Barry<br>
><br>
>   Curse whoever designed PETSc originally and didn't take into account in its basic design the need to subcom PETSc objects to smaller communicators :-(<br>
><br>
> LOL.<br>
><br>
><br>
> Cheers,<br>
>   Dave<br>
><br>
><br>
><br>
><br>
> > On Feb 13, 2017, at 10:01 AM, Zhang, Hong <<a href="mailto:hongzhang@anl.gov">hongzhang@anl.gov</a>> wrote:<br>
> ><br>
> > Hi Barry,<br>
> ><br>
> > When using telescope, I get an error complaining about missing Jacobian. But apparently I have a Jacobian set by TSSetIJacobian().<br>
> ><br>
> > [0]PETSC ERROR: --------------------- Error Message ------------------------------<wbr>------------------------------<wbr>--<br>
> > [0]PETSC ERROR:<br>
> > [0]PETSC ERROR: Must call SNESSetJacobian(), DMSNESSetJacobian(), DMDASNESSetJacobianLocal(), etc<br>
> > [0]PETSC ERROR: See <a href="http://www.mcs.anl.gov/petsc/documentation/faq.html" rel="noreferrer" target="_blank">http://www.mcs.anl.gov/petsc/<wbr>documentation/faq.html</a> for trouble shooting.<br>
> > [0]PETSC ERROR: Petsc Development GIT revision: v3.7.4-2764-g0ff3c95  GIT Date: 2017-01-10 15:40:21 -0600<br>
> > [0]PETSC ERROR: ./ex5adj_ell on a arch-memalign-mkl-avx512-opt named <a href="http://isdp001.cels.anl.gov" rel="noreferrer" target="_blank">isdp001.cels.anl.gov</a> by hongzh Mon Feb 13 09:56:48 2017<br>
> > [0]PETSC ERROR: Configure options --COPTFLAGS="-g -O3 -xMIC-AVX512" --CXXOPTFLAGS="-g -O3 -xMIC-AVX512" --FOPTFLAGS="-g -O3 -xMIC-AVX512" --PETSC_ARCH=arch-memalign-<wbr>mkl-avx512-opt --PETSC_DIR=/homes/hongzh/<wbr>Projects/petsc --download-cmake --download-revolve=1 --with-blaslapack-dir=/opt/<wbr>intel/2017-initial/compilers_<wbr>and_libraries_2017/linux/mkl/<wbr>lib/intel64 --with-cc=mpiicc --with-cxx=mpiicpc --with-debugging=no --with-fc=mpiifort --with-memalign=64 --with-mpiexec=mpirun<br>
> > [0]PETSC ERROR: #1 SNESComputeJacobian() line 2242 in /home/hongzh/Projects/petsc/<wbr>src/snes/interface/snes.c<br>
> > [0]PETSC ERROR: #2 KSPComputeOperators_SNES() line 569 in /home/hongzh/Projects/petsc/<wbr>src/snes/interface/snes.c<br>
> > [0]PETSC ERROR: #3 KSPSetUp() line 327 in /home/hongzh/Projects/petsc/<wbr>src/ksp/ksp/interface/itfunc.c<br>
> > [0]PETSC ERROR: #4 KSPSolve() line 599 in /home/hongzh/Projects/petsc/<wbr>src/ksp/ksp/interface/itfunc.c<br>
> > [0]PETSC ERROR: #5 PCApply_Telescope_dmda() line 952 in /home/hongzh/Projects/petsc/<wbr>src/ksp/pc/impls/telescope/<wbr>telescope_dmda.c<br>
> > [0]PETSC ERROR: #6 PCApply() line 458 in /home/hongzh/Projects/petsc/<wbr>src/ksp/pc/interface/precon.c<br>
> > [0]PETSC ERROR: #7 KSP_PCApply() line 251 in /homes/hongzh/Projects/petsc/<wbr>include/petsc/private/kspimpl.<wbr>h<br>
> > [0]PETSC ERROR: #8 KSPSolve_PREONLY() line 22 in /home/hongzh/Projects/petsc/<wbr>src/ksp/ksp/impls/preonly/<wbr>preonly.c<br>
> > [0]PETSC ERROR: #9 KSPSolve() line 656 in /home/hongzh/Projects/petsc/<wbr>src/ksp/ksp/interface/itfunc.c<br>
> > [0]PETSC ERROR: #10 PCMGMCycle_Private() line 19 in /home/hongzh/Projects/petsc/<wbr>src/ksp/pc/impls/mg/mg.c<br>
> > [0]PETSC ERROR: #11 PCMGMCycle_Private() line 53 in /home/hongzh/Projects/petsc/<wbr>src/ksp/pc/impls/mg/mg.c<br>
> > [0]PETSC ERROR: #12 PCMGMCycle_Private() line 53 in /home/hongzh/Projects/petsc/<wbr>src/ksp/pc/impls/mg/mg.c<br>
> > [0]PETSC ERROR: #13 PCMGMCycle_Private() line 53 in /home/hongzh/Projects/petsc/<wbr>src/ksp/pc/impls/mg/mg.c<br>
> > [0]PETSC ERROR: #14 PCMGMCycle_Private() line 53 in /home/hongzh/Projects/petsc/<wbr>src/ksp/pc/impls/mg/mg.c<br>
> > [0]PETSC ERROR: #15 PCApply_MG() line 331 in /home/hongzh/Projects/petsc/<wbr>src/ksp/pc/impls/mg/mg.c<br>
> > [0]PETSC ERROR: #16 PCApply() line 458 in /home/hongzh/Projects/petsc/<wbr>src/ksp/pc/interface/precon.c<br>
> > [0]PETSC ERROR: #17 KSP_PCApply() line 251 in /homes/hongzh/Projects/petsc/<wbr>include/petsc/private/kspimpl.<wbr>h<br>
> > [0]PETSC ERROR: #18 KSPInitialResidual() line 67 in /home/hongzh/Projects/petsc/<wbr>src/ksp/ksp/interface/itres.c<br>
> > [0]PETSC ERROR: #19 KSPSolve_GMRES() line 233 in /home/hongzh/Projects/petsc/<wbr>src/ksp/ksp/impls/gmres/gmres.<wbr>c<br>
> > [0]PETSC ERROR: #20 KSPSolve() line 656 in /home/hongzh/Projects/petsc/<wbr>src/ksp/ksp/interface/itfunc.c<br>
> > [0]PETSC ERROR: #21 SNESSolve_NEWTONLS() line 224 in /home/hongzh/Projects/petsc/<wbr>src/snes/impls/ls/ls.c<br>
> > [0]PETSC ERROR: #22 SNESSolve() line 3967 in /home/hongzh/Projects/petsc/<wbr>src/snes/interface/snes.c<br>
> > [0]PETSC ERROR: #23 TS_SNESSolve() line 171 in /home/hongzh/Projects/petsc/<wbr>src/ts/impls/implicit/theta/<wbr>theta.c<br>
> > [0]PETSC ERROR: #24 TSStep_Theta() line 211 in /home/hongzh/Projects/petsc/<wbr>src/ts/impls/implicit/theta/<wbr>theta.c<br>
> > [0]PETSC ERROR: #25 TSStep() line 3808 in /home/hongzh/Projects/petsc/<wbr>src/ts/interface/ts.c<br>
> > [0]PETSC ERROR: #26 TSSolve() line 4053 in /home/hongzh/Projects/petsc/<wbr>src/ts/interface/ts.c<br>
> > [0]PETSC ERROR: #27 main() line 171 in /homes/hongzh/Projects/petsc/<wbr>src/ts/examples/tutorials/<wbr>advection-diffusion-reaction/<wbr>ex5adj_ell.c<br>
> > [0]PETSC ERROR: PETSc Option Table entries:<br>
> > [0]PETSC ERROR: -da_refine 4<br>
> > [0]PETSC ERROR: -dm_mat_type aij<br>
> > [0]PETSC ERROR: -forwardonly<br>
> > [0]PETSC ERROR: -ksp_converged_reason<br>
> > [0]PETSC ERROR: -ksp_view<br>
> > [0]PETSC ERROR: -mg_coarse_pc_telescope_<wbr>reduction_factor 2<br>
> > [0]PETSC ERROR: -mg_coarse_pc_type telescope<br>
> > [0]PETSC ERROR: -mg_coarse_telescope_pc_type lu<br>
> > [0]PETSC ERROR: -mg_levels_pc_type jacobi<br>
> > [0]PETSC ERROR: -pc_type mg<br>
> > [0]PETSC ERROR: -ts_dt 1<br>
> > [0]PETSC ERROR: -ts_max_steps 1<br>
> > [0]PETSC ERROR: ----------------End of Error Message -------send entire error message to petsc-maint@mcs.anl.gov-------<wbr>---<br>
> ><br>
> > Thanks,<br>
> > Hong<br>
><br>
><br>
<br>
</div></div></blockquote></div><br></div></div>