-
Notifications
You must be signed in to change notification settings - Fork 261
[CORE] General discussion regarding QUADRATURES #13085
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
Comments
|
Since it's labelled a general discussion, I'll go ahead and aim a suggestion at @KratosMultiphysics/nurbs-breps and @KratosMultiphysics/mpm. In my opinion, both the IGA and MPM apps struggle to align their abstractions with Kratos' layout, partially due to the relatively rigid quadrature system. I'm not exactly sure why, but both applications treat integration points as elements even though they'd have more conventional options. I'm not too familiar with either field, but I'd imagine that:
In any case, I think it would be neat if each element/geometry instance had the possibility to own its own integration object (kinda similar to |
After a brief discussion yesterday, @RiccardoRossi @AlejandroCornejo and myself reached consensus on removing them if are of course not being used. If they are being used, we'd implement them consistently for all the geometries, not necessarily for order 1 to 5.
This is what we also spoke about. The point is that, as you already know, everything must happen at compile time, something that turns into an extremely tight design constrain. |
This I don't think is possible. Also I don't think it is a good idea. Note that integration quadratures cannot be dynamic for the sake of efficiency. Right now, everything happens at compile time, so calling the integration points has no cost.
Ideally yes, but note that our IGA is not "classical" IGA but IBRA, hence, we will always have the trimming. Having said this, we will always have to deal with the trimming, which necessarily needs to happen at runtime and hence goes against the need of setting up the integration points at compile time. |
Small comment regarding IGA/IBRA: We plan to have the possibility of creating one layer abstraction by adding CC: @manuelmessmer |
Having said all this, let me try to put in short the bullet points that we need to address (some of them are of course wishes):
Let me note that some of these complexities and inconveniences come from the fact that we are relying on enum(s) wrap the integration methods. This is the unique thing that was available in ancient days to accomplish with the compile time requirement, but, maybe, with modern c++ we can do something else (pinging @roigcarlo for an imaginative solution). |
Mentioning @pablobecker as expert in dynamic allocated quadratures |
It's unlikely that I'll personally touch kratos quadrature in the near future so I'm not requesting any changes here, but I'll just share my unsolicited thoughts on it: I agree that storing shape function values at predetermined locations instead of evaluating them on the fly works very well for low order elements/geometries. That said, making this a requirement for every geometry and forbidding other approaches locks us out of whole families of methods (FCM comes to mind first, but I really mean any approach that relies on tweaking its shape functions or quadrature dynamically). This is quite a shame because kratos is primarily a research code and most other parts of our infrastructure would be able to support such methods.
The only cost we're sparing is the calculation of shape functions at each integration point. We still have to fetch cached shape function values from memory, which is absolutely not a negligible cost. |
We can think alternative approaches, but I think I will discuss with @pooyan-dadvand first, because I think my idea woul have a performance penalty. |
we had a first round of discussion on this one, taking also into account the feedback of @matekelemen as of today IT IS possible to store in a geometry a "flexible" GeometryData (chancing the pointer at construction time). This needs to be better documented but should take into account the use case of @matekelemen per regards the EXTENSION_GAUSS our impression is that they should be eventually removed to prevent usage as catch all this is very preliminary and we will iterate it further, nevertheless our current impression is that the integration rules should have:
anyhowthis would be a breaking change so it is just a working idea. please note however that EXTENSION_:GAUSS with different meaning should NOT be allowed |
COLLOCATION is not known at builiding time, am I right? |
well, you could have a collocation known at building time, for example dividing a triangle in 4, 16 and so on |
So, in practical terms, did we reach any consensus regarding this issue?@KratosMultiphysics/technical-committee |
Even though I note @loumalouomega 's initial intentions, I'd start by removing the extended Gauss quadratures as these are only correctly implemented for a few geometries and, as far as I know, these are not being used. |
We have been further discussing this in @KratosMultiphysics/technical-committee as a short term fix we shall change this list: enum class IntegrationMethod {
GI_GAUSS_1,
GI_GAUSS_2,
GI_GAUSS_3,
GI_GAUSS_4,
GI_GAUSS_5,
GI_EXTENDED_GAUSS_1,
GI_EXTENDED_GAUSS_2,
GI_EXTENDED_GAUSS_3,
GI_EXTENDED_GAUSS_4,
GI_EXTENDED_GAUSS_5,
GI_LOBATTO_1,
NumberOfIntegrationMethods // Note that this entry needs to be always the last to be used as integration methods counter
}; to enum class IntegrationMethod {
GI_GAUSS_1,
GI_GAUSS_2,
GI_GAUSS_3,
GI_GAUSS_4,
GI_GAUSS_5,
GI_LOBATTO_1,
GI_EXTENDED_GAUSS_1,
GI_EXTENDED_GAUSS_2,
GI_EXTENDED_GAUSS_3,
GI_EXTENDED_GAUSS_4,
GI_EXTENDED_GAUSS_5,
NumberOfIntegrationMethods // Note that this entry needs to be always the last to be used as integration methods counter
}; This implies the requirement of implementing the first order lobatto quadrature for all available geometries. In the mid term, the EXTENDED* quadratures should be fixed to be consisten across geometries, which would imply ideally naming them in a more self descriptive way. @rubenzorrilla will suprvise this syncronizing with @loumalouomega and @AlejandroCornejo |
I am OK, the place where I use my extended gauss points is quite hardcorded, so it can be a little bit more hardcoded. |
Uh oh!
There was an error while loading. Please reload this page.
Description:
While implementing a new element (#12897), I needed to add Lobatto quadratures.
Currently, Lobatto quadratures exist in Kratos for some geometries, but not all, and they’re not generally usable for arbitrary orders or integrations. To address this, I added order-one Lobatto quadratures (LOBATTO_1) for the classical geometries:
Open Issues
Purpose of
GI_GAUSS_EXTENDED
:The GI_GAUSS_EXTENDED quadratures appear inconsistent. Depending on the geometry, they either perform collocation or behave identically to standard Gauss quadratures.
Handling Missing Quadrature Implementations:
As it stands, all entries of the quadrature enumeration must be filled, even for cases where specific implementations are unavailable. This leads to duplicated definitions like using Gauss quadratures for GI_EXTENDED.
Looking for feedback and suggestions on these points to improve the quadrature handling in Kratos.
@loumalouomega @rubenzorrilla @RiccardoRossi
The text was updated successfully, but these errors were encountered: