-
Notifications
You must be signed in to change notification settings - Fork 83
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
Mortar methods generalizations and fixes #305
Conversation
I'm still trying to figure out what changes are needed in order to support more general cases (such as contact problems where the boundaries do not initially match) in the future. |
Indeed... I guess just trying increasingly trickier examples might reveal what works and what else might be needed? Is one still fairly simple example that does have a discretely nonmatching interface the insulted wire, with the wire and insulation meshed independently at different mesh-sizes so that the two sides of the interface are different polygonal approximations of the one geometric circle? |
Thanks for the idea of circular mortar boundary. I'll try to support it also. |
Uses a completely new logic for evaluating the global basis functions in MortarBasis constructor. The idea is to use an explicit d-1 dimensional space for the mortaring mesh. In this d-1 dimensional space we have three meshes: two helper meshes created from the original facet meshes via projection and one additional supermesh which contains all nodes from both helper meshes. Quadrature rule is generated for the supermesh and then inverse mapped using the helper mesh reference mappings. Next, the reference (facet) mapping for the original mesh is used to get global quadrature points. Finally, these global quadrature points are inverse mapped to the reference (volume) element of the original mesh and basis functions evaluated. This elaborate technique hopefully allows enough flexibility for general use cases in the future.
Now it's on a really ugly temporary state but I think the idea is now there. See the latest commit message for some spoilers. I'll continue on this next week. |
Fixes #215 . |
Instead of having explicit interface meshes, I've decided to use so-called mortar mappings that use similar interface meshes underneath. Then the syntax becomes quite nice since you only need to initialize two MortarBasis objects like this: mb = [
MortarBasis(m, e, mapping = mortar[0], intorder=2),
MortarBasis(M, E, mapping = mortar[1], intorder=2)
] where |
This is still in very raw state. I'll continue tomorrow. First I create a new example with "real" contact problem and then I tidy up the code. |
Remaining work:
|
Circular mortar boundary is not yet working/tested but it should be as simple as adding a new constructor to MortarPair with slightly different definition for the projection (functions proj and param). |
I'm still writing ex04.rst but it will take a while because even writing down the equations for contact problems takes some meditation. |
Here are the docs https://kinnala.github.io/scikit-fem-docs/examples/ex04.html |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't necessarily understand all of this, but it's impressive!
I might try to reproduce the solution for the insulated wire ex17 using this, then I might understand it better. The confusing part is how the bilinear and linear forms for the mortar matrices relate to the operators on the two meshes, probably because I'm less familiar with elasticity than heat transfer and fluid mechanics.
We would need to first add support for other projections than onto a predefined linear function. In principle, it should be as easy as using different In the literature, there are also ways to generalize this (such as closest point search) but I have not looked into it. I just know that it is possible. My next goal is to create |
This branch contains my work related to mortar methods.