On Thu, Aug 20, 2015 at 10:05 AM, Roy Stogner <[email protected]>
wrote:
>
> 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.
>
OK, sounds good, thanks.
> 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.
OK.
> 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.
>
Makes sense, thanks for clarifying.
David
------------------------------------------------------------------------------
_______________________________________________
Libmesh-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/libmesh-devel