On Fri, 7 Jul 2017, Manav Bhatia wrote:

 I am working on a case where I need to dynamically add/remove constraints on 
dofs.

 I see the method DofMap::add_constraint_row to add a constraint
 row. Is there a corresponding method to delete these constraints
 for the dofmap?

Not a good one, IIRC, and I'm sure you'd have seen it if there was one
I'm forgetting.  I think all you could do at the moment is clear
everything then re-add the constraints you want to retain, which
sounds like an awful idea, until you read about the alternatives
below...

We'd be happy to add a patch which adds this functionality (assuming
it comes with a lot of unit testing so we don't break it again out
from under you!), but I'm afraid that at the moment it's probably much
harder than you're imagining to get it right in the general case:

For efficiency's sake, we currently pre-expand constraints.  So e.g.
if DoF A depends on B and C, and C depends on D and E, and E depends
on F and G, after (re-)initialization time the final constraint row
will have A depending on B, D, F, and G.  If you were to then remove
the constraint on C, the constraint on A would now be incorrect, and
what's worse, there would be no easy way to tell it was incorrect,
because in the expanded version there is no remaining A->C connection!

It would be reasonable to (optionally) forgo this pre-expansion, but
a bit of other code would have to be added to handle the unexpanded
case.  Dependency constraint equations would have to be communicated
properly on DistributedMesh while leaving the dependent constraints
unmodified, the send_list construction would have to be able to handle
indirect dependencies, and enforce_constraints_exactly() would have to
either walk through dependency trees or iterate up to the maximum tree
depth, just off the top of my head.

Alternatively, we could keep two constraints data structures, one
pre-expanded and one unexpanded, and use the latter to regenerate
(just the relevant parts of) the former whenever a constraint is
removed.  I'm not sure whether this would be easier or harder than the
first option.
---
Roy

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Libmesh-users mailing list
Libmesh-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libmesh-users

Reply via email to