<div dir="ltr">Hi PETSc team:<div><br></div><div>I am considering implementing a skew roller boundary condition for my elasticity problem. The method is based on this journal paper: <a href="http://inside.mines.edu/~vgriffit/pubs/All_J_Pubs/18.pdf">http://inside.mines.edu/~vgriffit/pubs/All_J_Pubs/18.pdf</a></div><div><br></div><div>Or you may find the method in the attached Bathe's slides, pages 9 -10.</div><div><br></div><div>Roughly speaking, a (very) sparse matrix T will be created which takes the shape [ I, O; O, R], where R is a 3x3 rotation matrix. And the original linear problem K U = F will be modified into (T^t K T) (T^t U) = T^t F. In doing so, one can enforce a roller boundary condition on a slanted surface.</div><div><br></div><div>I think it can be an easy option if I can generate the T matrix and do two matrix multiplications to get T^t K T. I noticed that there is a MatPtAP function. Yet, after reading a previous discussion, it seems that this function is not designed for this purposes (<a href="https://lists.mcs.anl.gov/pipermail/petsc-users/2018-June/035477.html">https://lists.mcs.anl.gov/pipermail/petsc-users/2018-June/035477.html</a>).</div><div><br></div><div>I assume I can only call MatMatMult & MatTransposeMatMult to do this job, correct? Is there any existingly PETSc function to do T^t K T in one call?</div><div><br></div><div>Thanks,</div><div><br></div><div>Mike</div><div><br></div></div>