Commits

Jozsef Bakosi authored 0951d401c20
WIP on overset: flags transfer correct, velocity almost modulo symmetry surface At this point overset appears to almost work in serial and parallel. Flags transfer works, symmetry appears to be correctly taken into account, however, some more debugging needed since the transferred solution fields (velocity) while appear correct inside the domain of both background and overset meshes, the velocity values on the symmetry surface are only correct on the background mesh but not the overset mesh. This is somewhat surprising because the flags appear correct on both meshes both inside the domain as well as on the symmetry surface and the same logic runs within NodeSearch::determineActualCollisions() regarding symmetry. Details * Add parsing for symmetry condition for intergrid boundary specification This is used in NodeSearch::determineActualCollisions() to shift the destination points by a small number during interpolation so points on the symmetry surface aligned are still found by the search. * Add parsing for layers configuration for intergrid boundary specification This is used to specify the number of mesh layers for each of three different layers that are "grown" around the intergrid boundary, done in Discretization::intergrid(). * Add multi-mesh-aware parsing for the href block This can be used to specify href blocks to perform initial mesh refinement independently for the overset and/or the background meshes. * Add hole search Hole search is used to find those regions of the background mesh which need to masked out where the overset mesh has no mesh. This is specified by the intergrid_2 block within the overset block, referring to a list of sidesets. Around these sidesets, a hole is assumed and searched. Data structures for finding holes is setup in Discretization::hole(). The boundary nodes of the intergrid-boundary surface are reduced to all partitions of the background mesh, resulting in topologically complete holes on each background-mesh partitions. The send/contribute is in hole() with the receive in aggregateHoles(). This allows finding holes by computing surface integrals in Discretization::holefind(). For the algorithm, see doc/papers/work/hole. * Setting up intergrid layers Independent of the hole search, which happens on the background mesh only, the intergrid layers are configured in Discretization intergrid(), which happens on the overset mesh only. Three layers are setup by growing the surface of the integrid/hole surface, where mesh nodes are flagged: (1) intergrid boundary flagged by 1.0, indicating that solution from mesh 1 (overset) will be used there, (2) middle (or buffer) layers, flagged by -1.0, used to not modify the solution there, allowing the solution to relax, and (3) an outer, solution transfer, layer, flagged by 0.0, where the solution from the background mesh 0 will be used. The default values of the flag in a mesh point is -2.0. The thickness can be configured for all three regions by specifying the number of adjacent mesh layers for each. The defaults are { 2, 4, 2 }. * Transfer flags This commit puts in code to first transfer flags only and not solutions. This is controlled by the bool trflag, passed Discretization::transfer(). Note that flag transfer only happens from overset to background. * Using holes The mesh nodes marked with as inside of a hole on the background mesh are zeroed out. This is in LohCG::holeset(), called multiple times during a time step, whenever this is necessary. * Tests All three existing regression tests exercising overset are disabled because the logic changes here quite a lot so either those tests need to be updated or new ones need to replace the existing ones once overset works. At this point I do not know when and who will continue the overset functionality. A doc page on some basics on how the method is supposed to work, how it works so far, and how it can be tested will be put in under doc/pages/inciter_overset.dox.