Skip to content

Restructuring of the OneBodyAssembler

akbib requested to merge new_onebodyassembler into master

In this branch I restructured the OneBodyAssembler (and P2OneBodyAssembler) a bit. It is still not optimal but allows to handle rigid obstacles which are given by a discrete surface easier. Optimally a projection like in the two-body case should be used, where the directions in which the obstacles are to be found (e.g. outer normals) and the obstacle values itself are computed together. This is for example necessary when the closest point projection is used. The OneBodyAssembler by now hardwired the outer normals as search directions which is still the default, but also other choices are possible by handing over a 'std::function<FVector(VertexEntity)>'. The computation of the obstacles are now hidden in the 'obsFunction' member which computes for a point of the grid and a search direction the distance to the obstacle, again in form of a std::function. This way, still a bisection can be used if necessary to determine the distance, but also discrete surface obstacles can be handled more efficiently. Further I coupled the P2OneBodyAssembler closer to the OneBodyAssembler. I think with a little more work one can unify these two classes completely by handing over the finite element basis, which would also be nice for the DualMortarCoupling/LeafP2MortarCoupling classes

Any objections or suggestions for improvement?

Best Jonny

Merge request reports