Hi Roy, Thanks for that info. I'm only using ReplicatedMesh for now. Regarding this:
IIRC: on ReplicatedMesh we try to avoid communication as much as possible, > so you have to add user constraints identically on every processor. There > might be ways to get around that (add local constraints only, then re-add > after any repartitioning?) but I definitely wouldn't suggest trying to > depend on them. hmm, the reason I asked about this was because I had a case that hit a "cyclic loop" assertion in parallel when I added the constraints identically on every processor, and then when I changed it so that I only added the constraint on the processor that owned the constrained dof, it worked fine. I assumed that I must have been violating an assumption by adding the constraints identically on all processors, but your comment would indicate that isn't the case... I'd like to understand this better. Can you point me to the relevant code in the library? I've been looking through allgather_recursive_constraints and similar, and I figured they send and receive constraint rows as needed, which is why I assumed we didn't need to add constraint rows identically on all processors. David On Thu, Jan 25, 2018 at 6:06 PM, Roy Stogner <[email protected]> wrote: > > On Thu, 25 Jan 2018, David Knezevic wrote: > > Hi all (though Roy I think you're the expert on this one ;) ), >> > > Well, I was the least-amateur when I refactored the code, but an > *expert* would have also properly documented it, so apparently none of > those were available. > > I know that in DofMap::process_constraints libMesh handles communicating >> the constraint rows to the processes that need to know about them, but I >> just want to make sure that I satisfy any requirements that we have on how >> user-defined constraint rows should be set up in parallel initially. >> > > Good question! > > IIRC: on ReplicatedMesh we try to avoid communication as much as > possible, so you have to add user constraints identically on every > processor. There might be ways to get around that (add local > constraints only, then re-add after any repartitioning?) but I > definitely wouldn't suggest trying to depend on them. > > In particular: are we required to set up the constraint row only on >> the process that owns the constrained dof index, or can the >> constraint row be on any process (or all processes)? >> > > On DistributedMesh we set up library-added constraint rows on the > process that owns the constrained index, and I *think* we have the > same restriction on user constraints (to avoid the need for an initial > usually-redundant communication sweep sending out ghost dof > constraints). > --- > 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 [email protected] https://lists.sourceforge.net/lists/listinfo/libmesh-users
