idaholab / moose

Multiphysics Object Oriented Simulation Environment
https://www.mooseframework.org
GNU Lesser General Public License v2.1
1.71k stars 1.04k forks source link

Dirichlet displacement BC and contact #7081

Open acasagran opened 8 years ago

acasagran commented 8 years ago

Description of the enhancement or error report

When using a Dirichlet displacement boundary condition to generate contact between two surfaces in a single time step, the contact is not being detected in that step. However, if the displacement is imposed using a Preset BC, the contact is detected and enforced. Also, if the Dirichlet BC case includes a second time step with no additional displacement, the contact is then detected and enforced in that step.

Rationale for the enhancement or information for reproducing the error

I've created a branch on my moose repository named dirichlet_contact_bc with 3 test cases illustrating the behavior described above.

Identified impact

(i.e. Internal object changes, limited interface changes, public API change, or a list of specific applications impacted)

permcody commented 8 years ago

Before anyone digs in, I'd like @friedmud and @bwspenc to comment. If I had to guess this looks like it might be an order of operations issue. Perhaps we aren't recalculating Geometric search information at the right time which explains one using the special "pre" BC works while the other one doesn't.

@acasagran - I think you mentioned you had a test case. Could you push up a branch?

dschwen commented 8 years ago

acasagran/dirichlet_contact_bc. https://github.com/acasagran/moose/commit/99e0be77c113d9414df2997c4d9dd7169f7f6e2c If you add this ticket number in the commits in that branch they show up here in the issue (and then even @permcody will see them).

friedmud commented 8 years ago

Looking

bwspenc commented 8 years ago

I'm not sure. The contact surfaces would be offset during the first iteration in a case like this, but the second iteration should cause there to be a penetration. Whatever is causing this problem could be causing other issues as well.

friedmud commented 8 years ago

@acasagran it looks like you forgot to check in the mesh file for that test you created...

acasagran commented 8 years ago

@friedmud If you use the run_test system the tests should work. The mesh file is referenced in the command line arguments of the tests file. If that doesn't work, let me know.

bwspenc commented 8 years ago

I just looked at this with @acasagran. Mechanical contact isn't detected or enforced in the first NL iteration (and it shouldn't) because the node is off the surface. Before contact is enforced, the problem is just a rigid body translation of an elastic volume, so there are no stresses, and it converges in 1 NL iteration. When he uses a PresetBC, it isn't converged in 1 NL iteration, so contact gets detected at the end of that iteration, and it gets enforced, and all is well. If we had a way to specify a minimum number of iterations, that would do the trick, although you'd need to know to do that on contact problems. If we could force another contact search after the model was converged, and repeat the solve if that changed from the previous search, that would work, and would require less user intervention.