<div dir="ltr"><div dir="ltr">On Sun, Jun 18, 2023 at 2:13 PM Duan Junming via petsc-users <<a href="mailto:petsc-users@mcs.anl.gov">petsc-users@mcs.anl.gov</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 class="msg4742194475290155037">




<div dir="ltr">
<div id="m_4742194475290155037divtagdefaultwrapper" style="font-size:12pt;color:rgb(0,0,0);font-family:"Times New Roman",Times,serif" dir="ltr">
Dear all,
<div><br>
</div>
<div>I am using DMPlex to manage the unknowns, two fields, one for pressure, and one for velocities with two/three components, defined in each cell. They're represented by polynomials, with N (10~50) dofs for each component.</div>
<div>I have an operator which can be written in a matrix form (N-by-N, dense), to be applied on the pressure field or each component of the velocities in each cell (the same for each cell and also for each component).</div>
<div>I was wondering which matrix should be defined to implement the block matrix-vector multiplication, here block means the pressure or the component of the velocities. Maybe a sequential block mat? Could you recommend any example?</div>
<div>Or I just implement this matrix-vector multiplication by hand?</div></div></div></div></blockquote><div><br></div><div>1) It sounds like you have a collocated discretization, meaning p,u,v,w are all at the same spots. Is this true?</div><div><br></div><div>2) You have a dense operator, like FFT, that can act on each component</div><div><br></div><div>3) I think you should make a vector with blocksize d+1 and extract the components with</div><div><br></div><div>  <a href="https://petsc.org/main/manualpages/Vec/VecStrideGather/">https://petsc.org/main/manualpages/Vec/VecStrideGather/</a></div><div><br></div><div>then act on them, then restore with</div><div><br></div><div>  <a href="https://petsc.org/main/manualpages/Vec/VecStrideScatter/">https://petsc.org/main/manualpages/Vec/VecStrideScatter/</a></div><div><br></div><div>You can use the *All() versions to do all the components at once.</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="msg4742194475290155037"><div dir="ltr"><div id="m_4742194475290155037divtagdefaultwrapper" style="font-size:12pt;color:rgb(0,0,0);font-family:"Times New Roman",Times,serif" dir="ltr">
<div>Thanks!</div>
<div>Junming</div>
</div>
</div>

</div></blockquote></div><br clear="all"><div><br></div><span class="gmail_signature_prefix">-- </span><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">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div></div></div></div>