I am new to FreeFEM and I am figuring out how to use FreeFEM with the PETSc interface. Now I am learning about the Mat type of the PETSc package, but I do not fully understand all the functions that come with it. I am following the tutorial with examples by Pierre Jolivet (this one) and in the tutorial there are two specific opertations of which I am not sure what it does. The first one is
What does the J(v, v) operation do? (and is there any place where I could read about this?) I saw in the tutorial something about the weighted dot product, but what would determine the weight?
The second one is a way of creating a new mat as:
Mat A, C;
Mat B(A, C, Loc);
Again, what does this do? And how can I find out what this does? Is there any documentation on this or a way of searching for it in the source code?
Thanks in advance for any help. If anyone has any other good tutorials that can help me in understanding the FreeFEM-PETSc interface please let me know.
J(v, v) computes a scalar product according to the domain decomposition of
J. It is basically a weighted local scalar product, followed by a reduction. See line 43 of this parallel example vs. line 28 of this sequential example.
- Given one distributed matrix
Mat A, you can create a new distributed matrix
B following the same column and row distribution using a local matrix
Loc with the syntax
Mat B(A, Loc). If you have a different column and row distribution, here
A for the rows,
C for the columns, and
Loc is a rectangular matrix, you create a distributed rectangular matrix using the syntax
Mat B(A, C, Loc). See this Stokes example where there is a different column and row distribution (for velocity and pressure unknowns).
Here is some more materials if you are interested: Pierre Jolivet introduction to parallel FreeFEM part 1 - YouTube + Pierre Jolivet introduction to parallel FreeFEM part 2 - YouTube.
Don’t hesitate if you have other questions.
Thank you for the swift response. This helps me out in further understanding the language!