<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
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.<br>
-sanjay<br>
<pre class="moz-signature" cols="72">
</pre>
<div class="moz-cite-prefix">On 5/31/21 9:33 AM, Matthew Knepley
wrote:<br>
</div>
<blockquote type="cite"
cite="mid:CAMYG4GmjmbTg8_6TU9FGEfkwooRrfeJtiwtxaYwg-GDAQF2MAQ@mail.gmail.com">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<div dir="ltr">
<div dir="ltr">On Mon, May 31, 2021 at 11:12 AM Stefano Zampini
<<a href="mailto:stefano.zampini@gmail.com"
moz-do-not-send="true">stefano.zampini@gmail.com</a>>
wrote:<br>
</div>
<div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left:1px solid
rgb(204,204,204);padding-left:1ex">
<div dir="ltr">Mike
<div><br>
</div>
<div>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. </div>
</div>
</blockquote>
<div><br>
</div>
<div>Stefano and Mark are correct. This will work.</div>
<div><br>
</div>
<div>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</div>
<div>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</div>
<div>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</div>
<div>example of me doing this in SNES ex71, Poiseuille flow in
a tilted channel.</div>
<div><br>
</div>
<div> Thanks,</div>
<div><br>
</div>
<div> Matt</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">
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">Il giorno lun 31 mag
2021 alle ore 16:52 Mark Adams <<a
href="mailto:mfadams@lbl.gov" target="_blank"
moz-do-not-send="true">mfadams@lbl.gov</a>> ha
scritto:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left:1px solid
rgb(204,204,204);padding-left:1ex">
<div dir="ltr">
<div dir="ltr"><br>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Mon, May 31,
2021 at 9:20 AM Michael Wick <<a
href="mailto:michael.wick.1980@gmail.com"
target="_blank" moz-do-not-send="true">michael.wick.1980@gmail.com</a>>
wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px
0px 0px 0.8ex;border-left:1px solid
rgb(204,204,204);padding-left:1ex">
<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"
target="_blank" moz-do-not-send="true">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"
target="_blank" moz-do-not-send="true">https://lists.mcs.anl.gov/pipermail/petsc-users/2018-June/035477.html</a>).</div>
</div>
</blockquote>
<div><br>
</div>
<div>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.</div>
<div><br>
</div>
<div>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.</div>
<div><br>
</div>
<div>Mark</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">
<div dir="ltr">
<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>
</blockquote>
</div>
</div>
</blockquote>
</div>
<br clear="all">
<div><br>
</div>
-- <br>
<div dir="ltr">Stefano</div>
</blockquote>
</div>
<br clear="all">
<div><br>
</div>
-- <br>
<div dir="ltr" class="gmail_signature">
<div dir="ltr">
<div>
<div dir="ltr">
<div>
<div dir="ltr">
<div>What most experimenters take for granted before
they begin their experiments is infinitely more
interesting than any results to which their
experiments lead.<br>
-- Norbert Wiener</div>
<div><br>
</div>
<div><a href="http://www.cse.buffalo.edu/~knepley/"
target="_blank" moz-do-not-send="true">https://www.cse.buffalo.edu/~knepley/</a><br>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
<br>
</body>
</html>