On Thu, Oct 13, 2016 at 12:12 PM, David Knezevic <david.kneze...@akselos.com
> wrote:
> On Wed, Oct 12, 2016 at 9:07 PM, David Knezevic <
> david.kneze...@akselos.com> wrote:
>
>> On Wed, Oct 12, 2016 at 5:04 PM, Roy Stogner <royst...@ices.utexas.edu>
>> wrote:
>>
>>>
>>> On Sun, 9 Oct 2016, David Knezevic wrote:
>>>
>>> I've attached a modified version of misc_ex9 that attaches
>>>> constraints on one side of the "crack" and checks if the dof
>>>> constraints are present during assembly. This passes in serial but
>>>> fails in parallel because constraints are not communicated on the
>>>> GhostingFunctor-coupled-dofs.
>>>>
>>>
>>> I had to make a couple fixes to the test: switching mesh_1 and mesh_2
>>> to SerialMesh, and using
>>>
>>> dof_id_type neighbor_node_id = neighbor->node_ref(neighbor_no
>>> de_index).dof_number(0,0,0);
>>>
>>> to handle the case where node id isn't node dof id.
>>>
>>> The extra constraints I added mean that the problem doesn't make
>>>> physical sense anymore unfortunately, but at least it tests for the
>>>> constraint issue. Roy: I'm not sure if this is appropriate for a
>>>> unit test, but it should at least be helpful for when you want to
>>>> check your implementation.
>>>>
>>>
>>> It was, thanks! Here's hoping #1120 fixes the real problem too.
>>>
>>> The modified ex9 is too big for a unit test, and too contrived for an
>>> example, and I can't think of any easy way to fix that while
>>> maintaining the same level of test coverage. But if you can come up
>>> with anything that doesn't have both those problems I'd really love to
>>> get this case into continuous integration.
>>>
>>> If you can't come up with anything either... I suppose I could combine
>>> an extra-ghost-layers test case with a Dirichlet boundary and test a
>>> wide stencil? That should hit the same code paths. Plus, it's about
>>> time libMesh expanded into the cutting edge world of finite difference
>>> methods.
>>>
>>
>>
>> I just tried my real problem with your PR and it's still not working,
>> unfortunately. I'll have to look into that in more detail. I'll get back to
>> you when I have more info.
>>
>
>
> Roy, I've attached an updated version of the misc_ex9 test. The test now
> prints out has a Dirichlet boundary on one side of the domain (boundary ids
> 1 and 11), and it prints out the dof IDs on the "crack" that have
> constraints on them. With this I get the following output:
>
> 1 MPI process:
>
> *./example-opt*
> *constrained upper dofs: 1025 1026 *
> *constrained lower dofs: 0 1 *
>
> *constrained upper dofs: 1026 1029 *
> *constrained lower dofs: 1 8 *
>
> *constrained upper dofs: 1029 1031 *
> *constrained lower dofs: 8 12 *
>
> *constrained upper dofs: 1031 1033 *
> *constrained lower dofs: 12 16 *
>
> 2 MPI processes:
>
>
> *mpirun -np 2 ./example-opt --keep-cout*
> *constrained upper dofs: 500 501 502 503 *
> *constrained lower dofs: 525 526 *
>
> *constrained upper dofs: 501 504 505 502 *
> *constrained lower dofs: 526 533 *
>
> *constrained upper dofs: 504 506 507 505 *
> *constrained lower dofs: 533 537 *
>
> *constrained upper dofs: 506 508 509 507 *
> *constrained lower dofs: 537 541 *
>
> *constrained upper dofs: 503 502 510 511 *
> *constrained lower dofs: *
>
> *constrained upper dofs: 502 505 512 510 *
> *constrained lower dofs: *
>
> *constrained upper dofs: 505 507 513 512 *
> *constrained lower dofs: *
>
> *constrained upper dofs: 507 509 514 513 *
> *constrained lower dofs: *
>
> *constrained upper dofs: 511 510 515 516 *
> *constrained lower dofs: *
>
> *constrained upper dofs: 510 512 517 515 *
> *constrained lower dofs: *
>
> *constrained upper dofs: 512 513 518 517 *
> *constrained lower dofs: *
>
> *constrained upper dofs: 513 514 519 518 *
> *constrained lower dofs: *
>
> *constrained upper dofs: 516 515 520 521 *
> *constrained lower dofs: *
>
> *constrained upper dofs: 515 517 522 520 *
> *constrained lower dofs: *
>
> *constrained upper dofs: 517 518 523 522 *
> *constrained lower dofs: *
>
> *constrained upper dofs: 518 519 524 523 *
> *constrained lower dofs:*
>
> The 1 process output makes sense to me: there should be only five nodes on
> top and bottom that have a constraint. I don't understand the 2 process
> output, there seems to be many extra constraints. Do you think this
> indicates a bug in the constraint scattering?
>
> David
>
P.S. I changed the code slightly to print out the node info for each
constrained node on the "crack". The results are below. You can see that in
the parallel case, we have extra constraints that should not be there.
David
-----------------------------------------------------------------------
1 MPI process:
lower constrained node info: Node id()=0, processor_id()=0,
Point=(x,y,z)=( 0, 0, 20)
DoFs=(0/0/0)
lower constrained node info: Node id()=1, processor_id()=0,
Point=(x,y,z)=( 1, 0, 20)
DoFs=(0/0/1)
upper constrained node info: Node id()=1025, processor_id()=0,
Point=(x,y,z)=( 0, 0, 20)
DoFs=(0/0/1025)
upper constrained node info: Node id()=1026, processor_id()=0,
Point=(x,y,z)=( 1, 0, 20)
DoFs=(0/0/1026)
lower constrained node info: Node id()=1, processor_id()=0,
Point=(x,y,z)=( 1, 0, 20)
DoFs=(0/0/1)
lower constrained node info: Node id()=8, processor_id()=0,
Point=(x,y,z)=( 2, 0, 20)
DoFs=(0/0/8)
upper constrained node info: Node id()=1026, processor_id()=0,
Point=(x,y,z)=( 1, 0, 20)
DoFs=(0/0/1026)
upper constrained node info: Node id()=1029, processor_id()=0,
Point=(x,y,z)=( 2, 0, 20)
DoFs=(0/0/1029)
lower constrained node info: Node id()=8, processor_id()=0,
Point=(x,y,z)=( 2, 0, 20)
DoFs=(0/0/8)
lower constrained node info: Node id()=12, processor_id()=0,
Point=(x,y,z)=( 3, 0, 20)
DoFs=(0/0/12)
upper constrained node info: Node id()=1029, processor_id()=0,
Point=(x,y,z)=( 2, 0, 20)
DoFs=(0/0/1029)
upper constrained node info: Node id()=1031, processor_id()=0,
Point=(x,y,z)=( 3, 0, 20)
DoFs=(0/0/1031)
lower constrained node info: Node id()=12, processor_id()=0,
Point=(x,y,z)=( 3, 0, 20)
DoFs=(0/0/12)
lower constrained node info: Node id()=16, processor_id()=0,
Point=(x,y,z)=( 4, 0, 20)
DoFs=(0/0/16)
upper constrained node info: Node id()=1031, processor_id()=0,
Point=(x,y,z)=( 3, 0, 20)
DoFs=(0/0/1031)
upper constrained node info: Node id()=1033, processor_id()=0,
Point=(x,y,z)=( 4, 0, 20)
DoFs=(0/0/1033)
*2 MPI processes using --keep-cout:*
lower constrained node info: Node id()=0, processor_id()=1,
Point=(x,y,z)=( 0, 0, 20)
DoFs=(0/0/525)
lower constrained node info: Node id()=1, processor_id()=1,
Point=(x,y,z)=( 1, 0, 20)
DoFs=(0/0/526)
upper constrained node info: Node id()=1025, processor_id()=0,
Point=(x,y,z)=( 0, 0, 20)
DoFs=(0/0/500)
upper constrained node info: Node id()=1026, processor_id()=0,
Point=(x,y,z)=( 1, 0, 20)
DoFs=(0/0/501)
upper constrained node info: Node id()=1027, processor_id()=0,
Point=(x,y,z)=( 1, 1, 20)
DoFs=(0/0/502)
upper constrained node info: Node id()=1028, processor_id()=0,
Point=(x,y,z)=( 0, 1, 20)
DoFs=(0/0/503)
lower constrained node info: Node id()=1, processor_id()=1,
Point=(x,y,z)=( 1, 0, 20)
DoFs=(0/0/526)
lower constrained node info: Node id()=8, processor_id()=1,
Point=(x,y,z)=( 2, 0, 20)
DoFs=(0/0/533)
upper constrained node info: Node id()=1026, processor_id()=0,
Point=(x,y,z)=( 1, 0, 20)
DoFs=(0/0/501)
upper constrained node info: Node id()=1029, processor_id()=0,
Point=(x,y,z)=( 2, 0, 20)
DoFs=(0/0/504)
upper constrained node info: Node id()=1030, processor_id()=0,
Point=(x,y,z)=( 2, 1, 20)
DoFs=(0/0/505)
upper constrained node info: Node id()=1027, processor_id()=0,
Point=(x,y,z)=( 1, 1, 20)
DoFs=(0/0/502)
lower constrained node info: Node id()=8, processor_id()=1,
Point=(x,y,z)=( 2, 0, 20)
DoFs=(0/0/533)
lower constrained node info: Node id()=12, processor_id()=1,
Point=(x,y,z)=( 3, 0, 20)
DoFs=(0/0/537)
upper constrained node info: Node id()=1029, processor_id()=0,
Point=(x,y,z)=( 2, 0, 20)
DoFs=(0/0/504)
upper constrained node info: Node id()=1031, processor_id()=0,
Point=(x,y,z)=( 3, 0, 20)
DoFs=(0/0/506)
upper constrained node info: Node id()=1032, processor_id()=0,
Point=(x,y,z)=( 3, 1, 20)
DoFs=(0/0/507)
upper constrained node info: Node id()=1030, processor_id()=0,
Point=(x,y,z)=( 2, 1, 20)
DoFs=(0/0/505)
lower constrained node info: Node id()=12, processor_id()=1,
Point=(x,y,z)=( 3, 0, 20)
DoFs=(0/0/537)
lower constrained node info: Node id()=16, processor_id()=1,
Point=(x,y,z)=( 4, 0, 20)
DoFs=(0/0/541)
upper constrained node info: Node id()=1031, processor_id()=0,
Point=(x,y,z)=( 3, 0, 20)
DoFs=(0/0/506)
upper constrained node info: Node id()=1033, processor_id()=0,
Point=(x,y,z)=( 4, 0, 20)
DoFs=(0/0/508)
upper constrained node info: Node id()=1034, processor_id()=0,
Point=(x,y,z)=( 4, 1, 20)
DoFs=(0/0/509)
upper constrained node info: Node id()=1032, processor_id()=0,
Point=(x,y,z)=( 3, 1, 20)
DoFs=(0/0/507)
upper constrained node info: Node id()=1028, processor_id()=0,
Point=(x,y,z)=( 0, 1, 20)
DoFs=(0/0/503)
upper constrained node info: Node id()=1027, processor_id()=0,
Point=(x,y,z)=( 1, 1, 20)
DoFs=(0/0/502)
upper constrained node info: Node id()=1035, processor_id()=0,
Point=(x,y,z)=( 1, 2, 20)
DoFs=(0/0/510)
upper constrained node info: Node id()=1036, processor_id()=0,
Point=(x,y,z)=( 0, 2, 20)
DoFs=(0/0/511)
upper constrained node info: Node id()=1027, processor_id()=0,
Point=(x,y,z)=( 1, 1, 20)
DoFs=(0/0/502)
upper constrained node info: Node id()=1030, processor_id()=0,
Point=(x,y,z)=( 2, 1, 20)
DoFs=(0/0/505)
upper constrained node info: Node id()=1037, processor_id()=0,
Point=(x,y,z)=( 2, 2, 20)
DoFs=(0/0/512)
upper constrained node info: Node id()=1035, processor_id()=0,
Point=(x,y,z)=( 1, 2, 20)
DoFs=(0/0/510)
upper constrained node info: Node id()=1030, processor_id()=0,
Point=(x,y,z)=( 2, 1, 20)
DoFs=(0/0/505)
upper constrained node info: Node id()=1032, processor_id()=0,
Point=(x,y,z)=( 3, 1, 20)
DoFs=(0/0/507)
upper constrained node info: Node id()=1038, processor_id()=0,
Point=(x,y,z)=( 3, 2, 20)
DoFs=(0/0/513)
upper constrained node info: Node id()=1037, processor_id()=0,
Point=(x,y,z)=( 2, 2, 20)
DoFs=(0/0/512)
upper constrained node info: Node id()=1032, processor_id()=0,
Point=(x,y,z)=( 3, 1, 20)
DoFs=(0/0/507)
upper constrained node info: Node id()=1034, processor_id()=0,
Point=(x,y,z)=( 4, 1, 20)
DoFs=(0/0/509)
upper constrained node info: Node id()=1039, processor_id()=0,
Point=(x,y,z)=( 4, 2, 20)
DoFs=(0/0/514)
upper constrained node info: Node id()=1038, processor_id()=0,
Point=(x,y,z)=( 3, 2, 20)
DoFs=(0/0/513)
upper constrained node info: Node id()=1036, processor_id()=0,
Point=(x,y,z)=( 0, 2, 20)
DoFs=(0/0/511)
upper constrained node info: Node id()=1035, processor_id()=0,
Point=(x,y,z)=( 1, 2, 20)
DoFs=(0/0/510)
upper constrained node info: Node id()=1040, processor_id()=0,
Point=(x,y,z)=( 1, 3, 20)
DoFs=(0/0/515)
upper constrained node info: Node id()=1041, processor_id()=0,
Point=(x,y,z)=( 0, 3, 20)
DoFs=(0/0/516)
upper constrained node info: Node id()=1035, processor_id()=0,
Point=(x,y,z)=( 1, 2, 20)
DoFs=(0/0/510)
upper constrained node info: Node id()=1037, processor_id()=0,
Point=(x,y,z)=( 2, 2, 20)
DoFs=(0/0/512)
upper constrained node info: Node id()=1042, processor_id()=0,
Point=(x,y,z)=( 2, 3, 20)
DoFs=(0/0/517)
upper constrained node info: Node id()=1040, processor_id()=0,
Point=(x,y,z)=( 1, 3, 20)
DoFs=(0/0/515)
upper constrained node info: Node id()=1037, processor_id()=0,
Point=(x,y,z)=( 2, 2, 20)
DoFs=(0/0/512)
upper constrained node info: Node id()=1038, processor_id()=0,
Point=(x,y,z)=( 3, 2, 20)
DoFs=(0/0/513)
upper constrained node info: Node id()=1043, processor_id()=0,
Point=(x,y,z)=( 3, 3, 20)
DoFs=(0/0/518)
upper constrained node info: Node id()=1042, processor_id()=0,
Point=(x,y,z)=( 2, 3, 20)
DoFs=(0/0/517)
upper constrained node info: Node id()=1038, processor_id()=0,
Point=(x,y,z)=( 3, 2, 20)
DoFs=(0/0/513)
upper constrained node info: Node id()=1039, processor_id()=0,
Point=(x,y,z)=( 4, 2, 20)
DoFs=(0/0/514)
upper constrained node info: Node id()=1044, processor_id()=0,
Point=(x,y,z)=( 4, 3, 20)
DoFs=(0/0/519)
upper constrained node info: Node id()=1043, processor_id()=0,
Point=(x,y,z)=( 3, 3, 20)
DoFs=(0/0/518)
upper constrained node info: Node id()=1041, processor_id()=0,
Point=(x,y,z)=( 0, 3, 20)
DoFs=(0/0/516)
upper constrained node info: Node id()=1040, processor_id()=0,
Point=(x,y,z)=( 1, 3, 20)
DoFs=(0/0/515)
upper constrained node info: Node id()=1045, processor_id()=0,
Point=(x,y,z)=( 1, 4, 20)
DoFs=(0/0/520)
upper constrained node info: Node id()=1046, processor_id()=0,
Point=(x,y,z)=( 0, 4, 20)
DoFs=(0/0/521)
upper constrained node info: Node id()=1040, processor_id()=0,
Point=(x,y,z)=( 1, 3, 20)
DoFs=(0/0/515)
upper constrained node info: Node id()=1042, processor_id()=0,
Point=(x,y,z)=( 2, 3, 20)
DoFs=(0/0/517)
upper constrained node info: Node id()=1047, processor_id()=0,
Point=(x,y,z)=( 2, 4, 20)
DoFs=(0/0/522)
upper constrained node info: Node id()=1045, processor_id()=0,
Point=(x,y,z)=( 1, 4, 20)
DoFs=(0/0/520)
upper constrained node info: Node id()=1042, processor_id()=0,
Point=(x,y,z)=( 2, 3, 20)
DoFs=(0/0/517)
upper constrained node info: Node id()=1043, processor_id()=0,
Point=(x,y,z)=( 3, 3, 20)
DoFs=(0/0/518)
upper constrained node info: Node id()=1048, processor_id()=0,
Point=(x,y,z)=( 3, 4, 20)
DoFs=(0/0/523)
upper constrained node info: Node id()=1047, processor_id()=0,
Point=(x,y,z)=( 2, 4, 20)
DoFs=(0/0/522)
upper constrained node info: Node id()=1043, processor_id()=0,
Point=(x,y,z)=( 3, 3, 20)
DoFs=(0/0/518)
upper constrained node info: Node id()=1044, processor_id()=0,
Point=(x,y,z)=( 4, 3, 20)
DoFs=(0/0/519)
upper constrained node info: Node id()=1049, processor_id()=0,
Point=(x,y,z)=( 4, 4, 20)
DoFs=(0/0/524)
upper constrained node info: Node id()=1048, processor_id()=0,
Point=(x,y,z)=( 3, 4, 20)
DoFs=(0/0/523)
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
Libmesh-devel mailing list
Libmesh-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libmesh-devel