SCOREC / core

parallel finite element unstructured meshes
Other
182 stars 62 forks source link

Add a feature to Chef to double domain in one direction of an existing mesh/simulation-with-solution #346

Open KennethEJansen opened 3 years ago

KennethEJansen commented 3 years ago

In our simulations it is not uncommon to run for a time at one domain width and then desire to continue the simulation with twice the domain width at the same resolution (thus doubling the number of elements and (almost) doubling the number of nodes). There are a few ways to do this: 1) brute force - regenerate the mesh and find some tool to interpolate with wrapped periodicity from the current simulation 2) duplicate the mesh (including the attached solution) and then condense out and stitch-up the duplicated layer of nodes. This also requires re-evaluating or otherwise correcting the boundary conditions 3) adapt and scale. Idea here is to split every edge that is purely in the z direction (not any of the diagonals and yes, the meshes in question have mesh lines extending from every point in the plane perpendicular to the direction we want to double BUT the number of points along that z line vary---not a simple extrusion), By splitting the edge and then scaling the domain we avoid the stitching problem though we would have to re-evaluate the solution since the attached solution will get stretched by the scaling step. This could be a 1D interpolation if we stored the original solution as a z + solution for each of the 2D root vertices. Anyway, focusing back on the adapt step and finally getting to my question, how hard would it be to use core adapt tools to: A) mark the edges that need to be split B) split ONLY those edges C) perform face swaps to improve the element shape (see attached figure but, as you can imagine, if you are not splitting any of the edges that are not aligned in Z, those diagonal edges are going to say long and then get 2x longer than desired once the scaling is applied.)

If there are existing tools for option 2 that might be easiest but, in a short conversation with Cameron, option 3 seemed like it might be easier but of course even Cameron does not possess the core-dev crystal ball and maybe some of you have thoughts to share on this Adapt to expand domain.pdf

Note the original grid is 2B nodes and when we double it (or more) it will be 4 B (or more) so brute force is not very attractive.