Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Question about avaliable operators #76

Open
PortugalSolving opened this issue Apr 30, 2021 · 5 comments
Open

Question about avaliable operators #76

PortugalSolving opened this issue Apr 30, 2021 · 5 comments

Comments

@PortugalSolving
Copy link

Hello maintainers,

I am trying to get certain matvecs via QBX. In particular, I need to evaluate the adjoint double layer potential and the hyper singular operator of a given kernel. I already see how via S and D in the documentation under symbolic operator representations I can get a single and double layer potential, but I don't understand what Sp, Spp, Dp, and Dpp are. Moreover, what I really need is:

$T(f)(x) : = \int_{\Gamma} dG(x,y)/dn(x) * f(y) dS_{y}$ and $H(f)(x) := -\int_{\Gamma} d^{2}G(x,y)/dn(x)dn(y) f(y) dS_{y}$. How. do I get these out o the QBX infrastructure present in this package?

(These can be found via normal FMM/HMatrix means as in Bempp, but I'd like to compare these methods against QBX if it is possible)

@inducer
Copy link
Owner

inducer commented Apr 30, 2021

The notation is a bit non-standard, at least from a "continental European" perspective. Each "p" adds a (target) normal derivative. So your T is Sp (normal derivative of the single layer, aka adjoint of the double layer), and H is Dp (normal derivative of the double layer).

I'll add math descriptions to the docs. Let's leave this open to track that.

@PortugalSolving
Copy link
Author

Okay. Similar question: what about the sparse global mass matrix?

@inducer
Copy link
Owner

inducer commented Apr 30, 2021

pytential is based on Nyström discretization, i.e. it discretizes in terms of evaluation at quadrature points. To get from there to (approximate) Galerkin, you need to integrate against your basis of test functions. (That's assuming you're interested in the action of the mass matrix, not the matrix itself.) I can conceivably hack together an example with little effort. To more precisely match your needs, it would help me to know what test functions you would like to use and how they're represented.

We're also trying to enable easy data exchange between Firedrake and pytential, where Firedrake's role would be to take care of the variational bits. This here is one part of that. (meshmode is the discretization toolkit underlying potential.)

@PortugalSolving
Copy link
Author

So I am interested in the mass matrix itself as I am interested in the action of the inverse mass matrix in order to use this as part of preconditioner. If I use Firedrake, can I build the mass matrix there, and then transfer over a vector, act via the inverse, and then transfer over the results?

Other info:
-I was going to use CG or DG Lagrange basis function on triangles of some degree. I don't have a representation chosen as my hope was to just use something that your package provided (e.g. "meshmode.discretization.poly_element.PolynomialRecursiveNodesElementGroup"). Since some of these seem to provide reference mass matrices, my hope was to just accumulate them plus the transformation correction into a global mass matrix. However, I don't see the infrastructure to do this.
-If it matters, this is a problem for a 2d surface in 3d.

@inducer
Copy link
Owner

inducer commented Jun 2, 2021

You could use the implementation of the inverse mass operator from grudge. Note however that that may still have a few things wrong with it: inducer/grudge#114.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants