<div dir="ltr">Hey,<br><br><div class="gmail_extra"><br><div class="gmail_quote">On 13 February 2017 at 19:41, 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:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
   From the manual page: KSPSetComputeOperators() is not propagated to the sub KSP.<br></blockquote><div><br></div><div>Hmm - it does indeed say that.<br></div><div>The statement is partially correct. <br></div><div>If a DM is not attached to the KSP, the computeoperators method is NOT propagated.<br></div><div>If a DM is attached, is in fact propagated, see <font size="2"><span style="font-weight:normal"><span class="gmail-file-name">telescope_dmda.c : 502<br></span></span></font></div><div>As usual the doc lags behind the implementation :( [my fault]<br></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">
<br>
   Yet there is some code<br>
sred->ignore_kspcomputeoperato<wbr>rs = PETSC_FALSE;<br>
if (sred->ignore_kspcomputeoperat<wbr>ors) {<br>
          ierr = PetscViewerASCIIPrintf(subview<wbr>er,"  Telescope: ignoring KSPComputeOperators\n");CHKERR<wbr>Q(ierr);<br>
        }<br>
  ierr = PetscOptionsBool("-pc_telescop<wbr>e_ignore_kspcomputeoperators",<wbr>"Ignore method used to compute A","PCTelescopeSetIgnoreKSPCom<wbr>puteOperators",sred->ignore_ks<wbr>pcomputeoperators,&sred->ignor<wbr>e_kspcomputeoperators,0);CHKER<wbr>RQ(ierr);<br>
  etc<br>
<br>
   that seems to indicate that Dave May intended to have support for KSPComputeOperator ... but didn't complete it.<br></blockquote><div><br></div><div>True - I didn't try this implementation out with any SNES examples.<br></div><div>Note it is/was tested and to my knowledge does work for linear cases. <br></div><div>Hopefully someone can confirm/deny this.<br><br></div><div>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></div><div><br></div><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<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></blockquote><div><br><div>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></div><div>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></div><div><br></div><div><br></div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<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></blockquote><div><br></div><div>Hmmm - that seems awkward. Sounds like the user will have to do something magical in their hook definition...<br></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">
<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></blockquote><div><br></div><div>LOL. <br></div><div> <br><br></div><div>Cheers,<br></div><div>  Dave<br></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
<br>
<br>
> On Feb 13, 2017, at 10:01 AM, Zhang, Hong <<a href="mailto:hongzhang@anl.gov" target="_blank">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/d<wbr>ocumentation/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-mkl<wbr>-avx512-opt --PETSC_DIR=/homes/hongzh/Proj<wbr>ects/petsc --download-cmake --download-revolve=1 --with-blaslapack-dir=/opt/int<wbr>el/2017-initial/compilers_and_<wbr>libraries_2017/linux/mkl/lib/<wbr>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/sr<wbr>c/snes/interface/snes.c<br>
> [0]PETSC ERROR: #2 KSPComputeOperators_SNES() line 569 in /home/hongzh/Projects/petsc/sr<wbr>c/snes/interface/snes.c<br>
> [0]PETSC ERROR: #3 KSPSetUp() line 327 in /home/hongzh/Projects/petsc/sr<wbr>c/ksp/ksp/interface/itfunc.c<br>
> [0]PETSC ERROR: #4 KSPSolve() line 599 in /home/hongzh/Projects/petsc/sr<wbr>c/ksp/ksp/interface/itfunc.c<br>
> [0]PETSC ERROR: #5 PCApply_Telescope_dmda() line 952 in /home/hongzh/Projects/petsc/sr<wbr>c/ksp/pc/impls/telescope/teles<wbr>cope_dmda.c<br>
> [0]PETSC ERROR: #6 PCApply() line 458 in /home/hongzh/Projects/petsc/sr<wbr>c/ksp/pc/interface/precon.c<br>
> [0]PETSC ERROR: #7 KSP_PCApply() line 251 in /homes/hongzh/Projects/petsc/i<wbr>nclude/petsc/private/kspimpl.h<br>
> [0]PETSC ERROR: #8 KSPSolve_PREONLY() line 22 in /home/hongzh/Projects/petsc/sr<wbr>c/ksp/ksp/impls/preonly/preonl<wbr>y.c<br>
> [0]PETSC ERROR: #9 KSPSolve() line 656 in /home/hongzh/Projects/petsc/sr<wbr>c/ksp/ksp/interface/itfunc.c<br>
> [0]PETSC ERROR: #10 PCMGMCycle_Private() line 19 in /home/hongzh/Projects/petsc/sr<wbr>c/ksp/pc/impls/mg/mg.c<br>
> [0]PETSC ERROR: #11 PCMGMCycle_Private() line 53 in /home/hongzh/Projects/petsc/sr<wbr>c/ksp/pc/impls/mg/mg.c<br>
> [0]PETSC ERROR: #12 PCMGMCycle_Private() line 53 in /home/hongzh/Projects/petsc/sr<wbr>c/ksp/pc/impls/mg/mg.c<br>
> [0]PETSC ERROR: #13 PCMGMCycle_Private() line 53 in /home/hongzh/Projects/petsc/sr<wbr>c/ksp/pc/impls/mg/mg.c<br>
> [0]PETSC ERROR: #14 PCMGMCycle_Private() line 53 in /home/hongzh/Projects/petsc/sr<wbr>c/ksp/pc/impls/mg/mg.c<br>
> [0]PETSC ERROR: #15 PCApply_MG() line 331 in /home/hongzh/Projects/petsc/sr<wbr>c/ksp/pc/impls/mg/mg.c<br>
> [0]PETSC ERROR: #16 PCApply() line 458 in /home/hongzh/Projects/petsc/sr<wbr>c/ksp/pc/interface/precon.c<br>
> [0]PETSC ERROR: #17 KSP_PCApply() line 251 in /homes/hongzh/Projects/petsc/i<wbr>nclude/petsc/private/kspimpl.h<br>
> [0]PETSC ERROR: #18 KSPInitialResidual() line 67 in /home/hongzh/Projects/petsc/sr<wbr>c/ksp/ksp/interface/itres.c<br>
> [0]PETSC ERROR: #19 KSPSolve_GMRES() line 233 in /home/hongzh/Projects/petsc/sr<wbr>c/ksp/ksp/impls/gmres/gmres.c<br>
> [0]PETSC ERROR: #20 KSPSolve() line 656 in /home/hongzh/Projects/petsc/sr<wbr>c/ksp/ksp/interface/itfunc.c<br>
> [0]PETSC ERROR: #21 SNESSolve_NEWTONLS() line 224 in /home/hongzh/Projects/petsc/sr<wbr>c/snes/impls/ls/ls.c<br>
> [0]PETSC ERROR: #22 SNESSolve() line 3967 in /home/hongzh/Projects/petsc/sr<wbr>c/snes/interface/snes.c<br>
> [0]PETSC ERROR: #23 TS_SNESSolve() line 171 in /home/hongzh/Projects/petsc/sr<wbr>c/ts/impls/implicit/theta/thet<wbr>a.c<br>
> [0]PETSC ERROR: #24 TSStep_Theta() line 211 in /home/hongzh/Projects/petsc/sr<wbr>c/ts/impls/implicit/theta/thet<wbr>a.c<br>
> [0]PETSC ERROR: #25 TSStep() line 3808 in /home/hongzh/Projects/petsc/sr<wbr>c/ts/interface/ts.c<br>
> [0]PETSC ERROR: #26 TSSolve() line 4053 in /home/hongzh/Projects/petsc/sr<wbr>c/ts/interface/ts.c<br>
> [0]PETSC ERROR: #27 main() line 171 in /homes/hongzh/Projects/petsc/s<wbr>rc/ts/examples/tutorials/advec<wbr>tion-diffusion-reaction/ex5adj<wbr>_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_reduct<wbr>ion_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>
</blockquote></div><br></div></div>