<div dir="ltr"><div dir="ltr">On Sun, Sep 10, 2023 at 3:01 PM Karthikeyan Chockalingam - STFC UKRI <<a href="mailto:karthikeyan.chockalingam@stfc.ac.uk">karthikeyan.chockalingam@stfc.ac.uk</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="msg-5193916087098992094">





<div lang="EN-GB" style="overflow-wrap: break-word;">
<div class="m_-5193916087098992094WordSection1">
<p class="MsoNormal"><span style="font-size:11pt">I will solve the coupled problem in a non-linear fashion using SNES, so I will have one residual for each variable R(u1) and R(u2) and the resulting Jacobian matrix<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt">J =  [J11 J12
<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt">         J21 J22] for each element.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt">For first-order Lagrange elements (in 2D) will have four nodes, then J would be of size 8 x 8. Let's say the variables are u and v. The order would be [u1 u2 u3 u4 v1 v2 v3 v4].<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt">Or should I rearrange the above entrées in the element Jacobian so as to have [u1 v1 u2 v2 u3 v3 u4 v4] ordering? In that case, the Jacobian will not have block ordering I guess.</span></p></div></div></div></blockquote><div><br></div><div>This is the correct order to get block matrices.</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="msg-5193916087098992094"><div lang="EN-GB" style="overflow-wrap: break-word;"><div class="m_-5193916087098992094WordSection1">
<p class="MsoNormal"><span style="font-size:11pt">In my case, the discretization of the u and v are from the same element space.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt">Can you please elaborate when you say, “Just enlarge the block size of your matrix”?
<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt">I have never used block size before and not sure what it accomplishes.
<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt">Do you mean to say, I should use MATBAIJ instead of MATAIJ?</span></p></div></div></div></blockquote><div><br></div><div>You do not need to change the type, just give the AIJ matrix a blocksize of 2.</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="msg-5193916087098992094"><div lang="EN-GB" style="overflow-wrap: break-word;"><div class="m_-5193916087098992094WordSection1">
<p class="MsoNormal"><span style="font-size:11pt">Kind regards,<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt">Karthik.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt"><u></u> <u></u></span></p>
<div id="m_-5193916087098992094mail-editor-reference-message-container">
<div>
<div style="border-right:none;border-bottom:none;border-left:none;border-top:1pt solid rgb(181,196,223);padding:3pt 0cm 0cm">
<p class="MsoNormal" style="margin-bottom:12pt"><b><span style="font-size:12pt;color:black">From:
</span></b><span style="font-size:12pt;color:black">Matthew Knepley <<a href="mailto:knepley@gmail.com" target="_blank">knepley@gmail.com</a>><br>
<b>Date: </b>Sunday, 10 September 2023 at 19:03<br>
<b>To: </b>Chockalingam, Karthikeyan (STFC,DL,HC) <<a href="mailto:karthikeyan.chockalingam@stfc.ac.uk" target="_blank">karthikeyan.chockalingam@stfc.ac.uk</a>><br>
<b>Cc: </b><a href="mailto:petsc-users@mcs.anl.gov" target="_blank">petsc-users@mcs.anl.gov</a> <<a href="mailto:petsc-users@mcs.anl.gov" target="_blank">petsc-users@mcs.anl.gov</a>><br>
<b>Subject: </b>Re: [petsc-users] Coupled system of equations on unstructured mesh<u></u><u></u></span></p>
</div>
<div>
<div>
<p class="MsoNormal"><span style="font-size:11pt">On Sun, Sep 10, 2023 at 1:48 PM Karthikeyan Chockalingam - STFC UKRI via petsc-users <<a href="mailto:petsc-users@mcs.anl.gov" target="_blank">petsc-users@mcs.anl.gov</a>> wrote:<u></u><u></u></span></p>
</div>
<div>
<blockquote style="border-top:none;border-right:none;border-bottom:none;border-left:1pt solid rgb(204,204,204);padding:0cm 0cm 0cm 6pt;margin-left:4.8pt;margin-right:0cm">
<div>
<div>
<div>
<p class="MsoNormal"><span style="font-size:11pt">Hello,<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt"> <u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt">I have so far solved scalar field problems using finite elements on a given (<b>unstructured</b>) mesh. I made use of
<span style="color:black">MATMPIAIJ</span> to create matrixes, <span class="m_-5193916087098992094m8670309824937278731s1">
MatCreateVecs</span>(<span class="m_-5193916087098992094m8670309824937278731s2">A</span>, &<span class="m_-5193916087098992094m8670309824937278731s2">b</span>, &<span class="m_-5193916087098992094m8670309824937278731s2">x</span>) to create vectors, and
<span style="color:rgb(108,54,169)">MatZeroRowsColumnsIS </span>to set boundary conditions.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt"> <u></u><u></u></span></p>
<p class="MsoNormal" style="background:white">
<span style="font-size:11pt;color:black">Now, I would like to solve a coupled system of equations for the quantities u1 and u2 on the (<b>unstructured</b>)  mesh. I.e., the matrix should get the double number of rows and columns,
</span><span style="font-size:11pt"><u></u><u></u></span></p>
<p class="MsoNormal" style="background:white">
<span style="font-size:11pt;color:black"> </span><span style="font-size:11pt"><u></u><u></u></span></p>
<p class="MsoNormal" style="background:white">
<span style="font-size:11pt;color:black">A = [A00  A01 </span><span style="font-size:11pt"><u></u><u></u></span></p>
<p class="MsoNormal" style="background:white">
<span style="font-size:11pt;color:black">        A10  A11]</span><span style="font-size:11pt"><u></u><u></u></span></p>
</div>
</div>
</div>
</blockquote>
<div>
<p class="MsoNormal"><span style="font-size:11pt"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:11pt">This is usually not a good way to think of it. This division means that all variables of one field come before<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:11pt">all those of another. It is much more common to group together all the unknowns at a given point.<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:11pt"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:11pt">You could, if the discretizations of u1 and u2 are the same, just enlarge the blocksize of your matrix. Then you set u1 and u2 for each vec location, or a 2x2 block for each Jacobian location.<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:11pt"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:11pt">  Thanks,<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:11pt"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:11pt">     Matt<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:11pt"> <u></u><u></u></span></p>
</div>
<blockquote style="border-top:none;border-right:none;border-bottom:none;border-left:1pt solid rgb(204,204,204);padding:0cm 0cm 0cm 6pt;margin-left:4.8pt;margin-right:0cm">
<div>
<div>
<div>
<p class="MsoNormal" style="background:white">
<span style="font-size:11pt;color:black">the vectors contain twice the number of entries (e.g. first all u1s and then all u2s). I would like to be sure that the entries of u1 and u2, which are associated with the same element are located on the same processor.</span><span style="font-size:11pt"><u></u><u></u></span></p>
<p class="MsoNormal" style="background:white">
<span style="font-size:11pt;color:black"> </span><span style="font-size:11pt"><u></u><u></u></span></p>
<p class="MsoNormal" style="background:white">
<span style="font-size:11pt;color:black">Is a pre-defined structure already available within PETSc to enlarge such a single equation to store the entries of coupled equations?</span><span style="font-size:11pt"><u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt"> <u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt">-\Delta u_1+c_{11} u_1+c_{12} u_2=f_1<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt">-\Delta u_2+c_{21} u_1+c_{22} u_2=f_2<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt"> <u></u><u></u></span></p>
<p class="MsoNormal" style="background:white">
<span style="font-size:11pt;color:black">Would I still be able to use </span><span style="font-size:11pt;color:rgb(108,54,169)">MatZeroRowsColumnsIS
</span><span style="font-size:11pt;color:black">u1 and u2 independently to enforce boundary conditions?
</span><span style="font-size:11pt;color:rgb(108,54,169)">MatZeroRowsColumnsIS</span><span style="font-size:11pt;color:black">(</span><span style="font-size:11pt;color:rgb(50,109,116)">A</span><span style="font-size:11pt;color:black">,
</span><span style="font-size:11pt;color:rgb(50,109,116)">is</span><span style="font-size:11pt;color:black">,
</span><span style="font-size:11pt;color:rgb(28,0,207)">1</span><span style="font-size:11pt;color:black">,
</span><span style="font-size:11pt;color:rgb(50,109,116)">x</span><span style="font-size:11pt;color:black">,
</span><span style="font-size:11pt;color:rgb(50,109,116)">b</span><span style="font-size:11pt;color:black">);</span><span style="font-size:11pt"><u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt"> <u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt">I don’t know where to begin. I have so far only been exposed to using
<span style="color:black">MATMPIAIJ and MatSetValues to create and assign values to matrix entries respectively.
</span>I would be grateful if you could provide the stepwise guide.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt"> <u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt">Kind regards,<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt">Karthik.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt"> <u></u><u></u></span></p>
<div>
<div>
<div>
<p class="MsoNormal"><span style="font-size:11pt">-- <u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><b><span style="font-size:10.5pt;font-family:Arial,sans-serif;color:rgb(45,45,98)">Karthik Chockalingam, Ph.D.</span></b><span style="font-size:11pt"><u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:Arial,sans-serif;color:black">Senior Research Software Engineer</span><span style="font-size:11pt"><u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:Arial,sans-serif;color:black">High Performance Systems Engineering Group</span><span style="font-size:11pt"><u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:Arial,sans-serif;color:black">Hartree Centre | Science and Technology Facilities Council</span><span style="font-size:11pt"><u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:Arial,sans-serif;color:rgb(33,33,33)"><a href="mailto:karthikeyan.chockalingam@stfc.ac.uk" target="_blank">karthikeyan.chockalingam@stfc.ac.uk</a></span><span style="font-size:11pt"><u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:12pt;font-family:"Times New Roman",serif;color:black"> </span><span style="font-size:10.5pt;font-family:Arial,sans-serif;color:rgb(65,65,65)"> </span><span style="font-size:11pt"><u></u><u></u></span></p>
<p class="MsoNormal"><b><span style="font-size:10.5pt;font-family:Arial,sans-serif;color:rgb(65,65,65)"> </span></b><span style="font-size:12pt;font-family:"Times New Roman",serif;color:rgb(31,73,125)"><b>Error!
 Filename not specified.</b></span><span style="font-size:11pt"><u></u><u></u></span></p>
</div>
</div>
</div>
<p class="MsoNormal"><span style="font-size:11pt"> <u></u><u></u></span></p>
</div>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"><span style="font-size:11pt"><br clear="all">
<u></u><u></u></span></p>
<div>
<p class="MsoNormal"><span style="font-size:11pt"><u></u> <u></u></span></p>
</div>
<p class="MsoNormal"><span class="m_-5193916087098992094gmailsignatureprefix"><span style="font-size:11pt">--
</span></span><span style="font-size:11pt"><u></u><u></u></span></p>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<p class="MsoNormal"><span style="font-size:11pt">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<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:11pt"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:11pt"><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><u></u><u></u></span></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</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>