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
Towards XFEM - Cut Cell Quadrature #84
Conversation
@jwpeterson - have you looked at all at QComposite in here? As the father of pretty much all our quadrature, I'd be especially interested in your thoughts... |
On Apr 13, 2013, at 7:44 AM, "Benjamin S. Kirk" notifications@github.com wrote:
Sure thing... In a broad sense, I've heard it's better to use low-order quadratures with more intervals when dealing with discontinuous functions... |
QComposite uses the correct subcell decomposition when combining its In the general case of a discontinuity of unknown location, though, |
On Apr 13, 2013, at 11:02 AM, "roystgnr" notifications@github.com wrote:
That's right. When a distance function is present, it resolves the discontinuity exactly and used whatever rule you requested on the subcells whose union defines the two parts of the cut element. There is an important partial specialization missing right now - for various netwon-cotes rules the subcells will produce duplicate points which are harmless but should be detected and combined for matrix assembly efficiency.
My thoughts here would be to use the cut cell stuff when the interface location is known, and perhaps Monte Carlo or something when it is not? -Ben |
libMesh - C++ Finite Element Library » libmesh #490 SUCCESS |
So if I understand correctly, the main ideas of QComposite are: I guess #2 is a reasonable approach vs. just holding a QBase* in QComposite and forwarding relevant calls to it? One downside of the template approach is that you have to do explicit instantiations for QComposite et al. and add all the 'using QSubCell::xyz' stuff. Finally, would you ever be in a situation where you'd need QComposite because then QComposite would be derived from itself ;-) Some other comments: I've found that tetgen is generally a pretty bad piece of software... From your comments, it looks like it's generating zero volume elements for you? Have you tried upgrading our version? Looks like we have 1.4.1 but there may be a 1.4.3 available. I'm also curious if there's anything better out there... Just curious, what's the idea behind the numbering of our recent quadrature rule enumerations: QCLOUGH=21, QCOMPOSITE=31? |
Oops, markdown. That should have read "...explicit instantiations for |
And "...would you ever be in a situation where you'd need Totally ruining the joke... |
I'll see if it is worth an upgrade. Notably, when allowing tetgen to generate 'quality' meshes it does not produce the zero volume cells, but it does produce way more than I need. Since for this application the interpolation properties of the subtets are irrelevant (all they are used for is mapping quadrature points) its not such a big deal. Longer term, though, if this becomes a commonly used funcitonality we could perhaps reimplement this to use QHull or something else.
@roystgnr - any comments on the 21? I was just kinda following suit, for no good reason other than maybe someone might want to mod it with 30 - although I'd highly discourage that kind of thing! |
Whoever added our Infinite element types to the FEFamily enum added a We could actually reorganize the quadrature enums if we wanted, I |
libMesh - C++ Finite Element Library » libmesh #528 SUCCESS |
@jwpeterson wrote
Yes, I've got a similar impression. I'm looking into Qhull as an alternative: http://www.qhull.org I think it could easily do everything I'm asking of Tetgen in this particular application - namely, return the convex hull of a small number of points in 3D. -Ben |
On Wed, May 8, 2013 at 8:59 AM, Benjamin S. Kirk
That's interesting! At one point I was debating on using a 3D hull for one Cody
|
Is it also possible to use this integration with other cutting geometries than just linear level-set-functions? |
…l and we are good
This PR needs some freshening up. I'll reopen a new PR for the rebased branch, and refer back to this one. |
No rush on this, but this is 40 commits already and no one has seen it, so I'm putting this out there for some initial feedback.
The API is basically demonstrated in the new examples/subdomains/subdomains_ex3 where we seek to integrate a discontinuous function not aligned with the mesh.
The approach is as follows: QComposite defines a composite quadrature rule based on an underlying Gauss quadrature rule.
For uncut cells, this reverts to a standard Gauss rule, for cells cut by an interface, the cell is decomposed into simplices via the new ElemCutter class, whose current implementation uses triangle/tetgen, and agglomerates the simplex quadrature points/weights into a "composite' rule.
The current implementation requires being able to provide COMM_SELF to the "working" meshes created inside the ElemCutter class.
The ElemCutter class right now takes vertex values of a signed distance function to locate the cut, but this is ripe with opportunity for extension.