From: Roy S. <roy...@ic...> - 2018-06-06 19:26:12
|
On Wed, 6 Jun 2018, Caleb M Phillips wrote: > On Wed, Jun 6, 2018 at 1:45 PM, Roy Stogner <roy...@ic...> wrote: > > How expensive depends on your time stepping, and on your topology, I > believe. My biggest question would be about the latter: do you really > need to delete old nodes and add new nodes with every step? If your > mesh topology can remain unchanged then you can simply change the > geometry by setting new positions for the same old nodes, which ought > to be much simpler. > > That sounds much simpler, my only concern would be after too much > movement if the elements would become skewed. Or perhaps some > elements would be 100 microns and some 1 micron. Hmm... if you're working in 3D and you're worried about a little skew then you might be able to get away with just a smoother pass on internal nodes. If you're worried about a lot of skew then you'll be stuck working with Tets. You can't easily keep Hexes from skewing given enough deformation, but you can't remesh them easily *either*. > I would have to delete nodes if a cell were to die, obviously then > it would no longer be a part of the vessel. This is where meeting in person will help; I'm only 90% confident I understand what you're getting at without pictures. We can handle element deletion (and addition) to a mesh mid-simulation. > Is the error always the default? I'm surprised insert_node doesn't > take both a Node * and id. The documentation for insert_node literally says "Primarily intended for use with the mesh_inserter_iterator, only use if you know what you are doing..." I admit that that's only *slightly* scarier than the documentation for add_node() or add_point(), but still add_*() are intended for expert user code and insert_node() is basically only for internal use. If C++ had access control lists rather than just public/protected/private then insert_node would definitely be intra-library-only. > Is this done through adding a point first > with an id and then adding a node? I believe I've overthought this > processes several times! You can add_node(n), in which case we simply append n to the mesh with the next unused id, or you can insert_node(n), in which case we assume you've already chosen an unused n->id() and we scream at you if it isn't unused, or you can add_point(p), in which case we'll put a Node at that point. If you add_point(p) or add_point(p, id) and id is free, then we'll create a new Node; if you add_point(p, id) and there's already a node with that id then we'll just move it to p. Where this *really* gets tricky is when you want to do it on a distributed mesh... --- Roy |