[petsc-users] [petsc-maint] Performing a coordinate system rotation for the stiffness matrix
Sanjay Govindjee
s_g at berkeley.edu
Mon May 31 13:00:55 CDT 2021
In our FEA code we perform the rotations at the local level, before
assembly so that it is easy to apply the boundary conditions, then
unrotate locally after solution to get the usual Cartesian components.
Somehow this seems more efficient than doing this globally, but perhaps
I am missing something.
-sanjay
On 5/31/21 9:33 AM, Matthew Knepley wrote:
> On Mon, May 31, 2021 at 11:12 AM Stefano Zampini
> <stefano.zampini at gmail.com <mailto:stefano.zampini at gmail.com>> wrote:
>
> Mike
>
> as long as P is a sparse matrix with compatible rows and cols
> (i.e. rows(P)= cols(A) = rows (A)) , MatPtAP will compute the result.
>
>
> Stefano and Mark are correct. This will work.
>
> I implemented the same thing in my code in a different way. I put this
> transformation into the mapping between local and global
> vector spaces. The global degrees of
> freedom are the ones you want for boundary conditions (normal and
> tangential to the boundary), and I eliminate the ones that are
> constrained. The local degrees of
> freedom are the normal Caresian ones, and these are used for assembly.
> The map is used when I execute DMGlobalToLocal() and
> DMLocalToGlobal(). There is an
> example of me doing this in SNES ex71, Poiseuille flow in a tilted
> channel.
>
> Thanks,
>
> Matt
>
> Il giorno lun 31 mag 2021 alle ore 16:52 Mark Adams
> <mfadams at lbl.gov <mailto:mfadams at lbl.gov>> ha scritto:
>
>
>
> On Mon, May 31, 2021 at 9:20 AM Michael Wick
> <michael.wick.1980 at gmail.com
> <mailto:michael.wick.1980 at gmail.com>> wrote:
>
> Hi PETSc team:
>
> I am considering implementing a skew roller boundary
> condition for my elasticity problem. The method is based
> on this journal paper:
> http://inside.mines.edu/~vgriffit/pubs/All_J_Pubs/18.pdf
> <http://inside.mines.edu/~vgriffit/pubs/All_J_Pubs/18.pdf>
>
> Or you may find the method in the attached Bathe's slides,
> pages 9 -10.
>
> 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.
>
> 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
> (https://lists.mcs.anl.gov/pipermail/petsc-users/2018-June/035477.html
> <https://lists.mcs.anl.gov/pipermail/petsc-users/2018-June/035477.html>).
>
>
> Yes, and no. It is motivated and optimized for a Galerkin
> coarse grid operator for AMG solvers, but it is a projection
> and it should be fine. If not, we will fix it.
>
> We try to test our methods of "empty" operators , but I don't
> know if MatPtAP has ever been tested for super sparse P. Give
> it a shot and see what happens.
>
> Mark
>
>
> 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?
>
> Thanks,
>
> Mike
>
>
>
> --
> Stefano
>
>
>
> --
> 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-users/attachments/20210531/2a5e988d/attachment.html>
More information about the petsc-users
mailing list