On Sun, 5 Jul 2015, David Knezevic wrote:
1. In the last part of DofMap::build_constraint_matrix_and_vector() we have:
if ((C.n() == Cnew.m()) && // If the constraint matrix
(Cnew.n() == elem_dofs.size())) // is constrained...
{
C.right_multiply(Cnew);
So now here we have (CD)
// If x = Cy + h and y = Dz + g
// Then x = (CD)z + (Cg + h)
C.vector_mult_add(H, 1, Hnew);
And now here we have h + CD*g...
}
It seems to me that according to the comment we should do C.vector_mult_add(H,
1, Hnew); before C.right_multiply(Cnew), no? Isn't the code
currently using "CDg + h" instead of "Cg + h" ? (Most likely I've just
misunderstood the code... but anyway, I thought I'd ask.)
No, it looks like you're right. Sorry I let this get buried. I'll
set up a branch with the fix and see if it affects anything.
I don't think it will, though. IIRC the recursive constraint matrix
construction is now redundant because we have to expand out recursive
constraints earlier anyways to get stuff synched properly in parallel.
2. What happens if we have a "cycle" of dof constraints? Would the
recursive constraints code handle that properly?
Nope. IIRC you'll get an assertion failure in debug mode, or
incorrect results in opt mode.
---
Roy
------------------------------------------------------------------------------
_______________________________________________
Libmesh-devel mailing list
Libmesh-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libmesh-devel