<div dir="ltr"><div style="font-family:arial,sans-serif;font-size:13.333333969116211px">Hi guys,</div><div style="font-family:arial,sans-serif;font-size:13.333333969116211px"><br></div><div style="font-family:arial,sans-serif;font-size:13.333333969116211px">
Please apologize if this question has already been raised in previous posts.</div><div style="font-family:arial,sans-serif;font-size:13.333333969116211px"><br></div><div style="font-family:arial,sans-serif;font-size:13.333333969116211px">
I am developing a code in fortran 90 to solve a 1D multicomponent problem.</div><div style="font-family:arial,sans-serif;font-size:13.333333969116211px"><div class="gmail_extra">For instance, something like</div><div class="gmail_extra">
<br></div><div class="gmail_extra">u_t = u_xx + R(u,v)</div><div class="gmail_extra">v_t = v_xx + R(u,v)</div></div><div style="font-family:arial,sans-serif;font-size:13.333333969116211px"><br></div><div style="font-family:arial,sans-serif;font-size:13.333333969116211px">
I have already implemented this for one component (u) and using DMDA. So far no problem. It works fine.<br></div><div style="font-family:arial,sans-serif;font-size:13.333333969116211px"><div class="gmail_extra"><br></div>
<div class="gmail_extra">Now I am trying to implement several components per node. Following example ex22f.F, for the residual function I would have for node i (1D)</div><div class="gmail_extra"><br></div><div class="gmail_extra">
F(1,i) = ....</div><div class="gmail_extra">F(2,i) = ....</div><div class="gmail_extra"><br></div><div class="gmail_extra">Now, I am not quite sure to understand how to construct the Jacobian when there are various components. In this case, how is the vector in PETSc ?</div>
<div class="gmail_extra"><br></div><div class="gmail_extra">Is it a long vector like (u0, u1, ..., umx-1 , v0, v1, ..., vmx-1) ?</div><div class="gmail_extra">Or is it (u0, v0, u1, v1, u2, v2, ....., umx-1, vmx-1) ?</div>
<div class="gmail_extra"><br></div><div class="gmail_extra">I don't understand the order of the components of the Jacobian and how to fill the matrix in that case.</div><div class="gmail_extra"><br></div><div class="gmail_extra">
For instance, for the first row of the Jacobian, should I calculate</div><div class="gmail_extra">dFu0/du0, dFu0/dFu1, ...., dFu0/dumx-1, dFu0/dv0, dFu0/dv1.....</div><div class="gmail_extra"><br></div><div class="gmail_extra">
or</div><div class="gmail_extra"><br></div><div class="gmail_extra">dFu0/du0, dFu0/dv0, dFu0/du1, dFu0/dv1, ....</div><div class="gmail_extra"><br></div><div class="gmail_extra">And then, which subroutine should I use to fill in the Matrix ? Simply MatSetValues ?</div>
<div class="gmail_extra"><br></div><div class="gmail_extra">Many thanks in advance for your help.</div><div class="gmail_extra"><br></div><div class="gmail_extra">Christophe</div></div>
</div>