[petsc-dev] MatTransposeMatMult() bug

Matthew Knepley knepley at gmail.com
Wed Mar 17 14:49:28 CDT 2021


On Wed, Mar 17, 2021 at 3:27 PM Zhang, Hong via petsc-dev <
petsc-dev at mcs.anl.gov> wrote:

> Pierre,
> Do you mean a possible bug in C=AtB MatTransposeMatMult()?
> Can you provide a stand-alone test without hpddm that reproduces this
> error?
>

Hong, you should be able to just configure with --download-hpddm and then
run that ex76 test.

  Thanks,

     Matt


> Hong
> ------------------------------
> *From:* petsc-dev <petsc-dev-bounces at mcs.anl.gov> on behalf of Pierre
> Jolivet <pierre at joliv.et>
> *Sent:* Wednesday, March 17, 2021 4:31 AM
> *To:* For users of the development version of PETSc <petsc-dev at mcs.anl.gov
> >
> *Subject:* [petsc-dev] MatTransposeMatMult() bug
>
> Hello,
> While trying out Stefano’s PCApplyMat_MG() code (*), we stumbled upon
> weird numerical errors when reusing a Mat for both MatProduct_AB and
> MatProduct_AtB.
> This reminded me that there has been a long-standing issue
> with MatTransposeMatMult(), see
> https://www.mcs.anl.gov/petsc/petsc-current/src/ksp/pc/impls/hpddm/hpddm.cxx.html#line608,
> that I never looked into.
> I’ve now been trying to figure this out, because this has side effects in
> multiple places (PCMG and PCHPDDM at least), and thus could impact
> user-code as well?
> With this commit:
> https://gitlab.com/petsc/petsc/-/commit/03d8bd538039defc2fcc3e37d523735c4aaceba0
> +
> $ mpirun -n 4 src/ksp/ksp/tutorials/ex76 -ksp_converged_reason -pc_type
> hpddm -pc_hpddm_levels_1_eps_nev 20 -ksp_type preonly -mat_type aij
> -load_dir ${DATAFILESPATH}/matrices/hpddm/GENEO -rhs 2
> -pc_hpddm_coarse_correction balanced -C_input_mattransposematmult
> -D_output_mattransposematmult
> I’m seeing that C is nonzero, but D is full of zeros.
> Mat Object: 4 MPI processes
>   type: mpidense
> 5.7098316584361917e-08 1.0159399260517841e-07
> 1.5812349976211856e-07 2.0688121715350138e-07
> 2.4887556933361981e-08 4.8111092300772958e-08
> 1.4606298643602107e-07 1.7213611729839211e-07
> […]
> Mat Object: 4 MPI processes
>   type: mpidense
> 0.0000000000000000e+00 0.0000000000000000e+00
> 0.0000000000000000e+00 0.0000000000000000e+00
> 0.0000000000000000e+00 0.0000000000000000e+00
> 0.0000000000000000e+00 0.0000000000000000e+00
> […]
>
> If one switches to a MatType which has no MatProduct_AtB implementation
> with B of type MPIDense (reminder: in that case, the product is computed
> column-by-column), e.g., -mat_type sbaij, one gets the expected result.
> Mat Object: 4 MPI processes
>   type: mpidense
> 7.2003197398135299e-01 9.5191869895699011e-01
> 6.1793966541680234e-02 9.3884397585488877e-01
> 1.0022337823233585e-02 2.4653068080134588e-01
> 1.4463931936094099e-01 8.6111517670701687e-01
>
> Is there a bug somewhere with the MatAIJ implementation, or am I doing
> something which is not allowed by the MatProduct() machinery?
>
> Thanks,
> Pierre
>
> (*) https://gitlab.com/petsc/petsc/-/merge_requests/3717
>


-- 
What most experimenters take for granted before they begin their
experiments is infinitely more interesting than any results to which their
experiments lead.
-- Norbert Wiener

https://www.cse.buffalo.edu/~knepley/ <http://www.cse.buffalo.edu/~knepley/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20210317/bd9f8d14/attachment-0001.html>


More information about the petsc-dev mailing list