Skip to content

Add normal NCP options for mortar contact - #33323

Open
Andreas-Lepak wants to merge 1 commit into
idaholab:nextfrom
Andreas-Lepak:contact-normal-ncp-options
Open

Add normal NCP options for mortar contact#33323
Andreas-Lepak wants to merge 1 commit into
idaholab:nextfrom
Andreas-Lepak:contact-normal-ncp-options

Conversation

@Andreas-Lepak

Copy link
Copy Markdown
Collaborator

closes #33322

Reason

LM mortar normal contact currently exposes only the min-function NCP residual for the normal weighted-gap constraint. That preserves exact complementarity, but it gives users no input-level way to try smooth-min or Fischer-Burmeister forms when active-set transitions make nonlinear solves difficult.

Design

  • Add normal_ncp_function = MIN | SMOOTH_MIN | FISCHER_BURMEISTER | SMOOTH_FISCHER_BURMEISTER.
  • Add normal_ncp_smoothing_width for the smooth normal NCP functions.
  • Apply the selected residual in the static and dynamic LM mortar weighted-gap constraints, including the frictional subclasses that inherit the normal constraint.
  • Thread the parameters through ContactAction for formulation = mortar and reject them for non-mortar contact formulations.
  • Use a finite generalized derivative for exact Fischer-Burmeister at the origin so exact-touch states do not produce invalid AD derivatives.
  • Document the smoothing-width scale and add focused regression coverage for direct constraint use and action-based contact use.

Impact

Existing inputs and results are unchanged because MIN remains the default. Users gain optional smooth-min and Fischer-Burmeister normal NCP residuals for LM mortar contact. Penalty mortar and node-face contact are unchanged.

@moosebuild

moosebuild commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Job Documentation, step Docs: sync website on d89a464 wanted to post the following:

View the site here

This comment will be updated on new commits.

@Andreas-Lepak
Andreas-Lepak force-pushed the contact-normal-ncp-options branch from 4dc38ad to 92ccec4 Compare July 13, 2026 19:18
@lindsayad

Copy link
Copy Markdown
Member

Can you rebase to remove all the recipe failures? It would be great to see some results (perhaps tabular) that shows some solver characteristics with the different NCP choices

@Andreas-Lepak

Copy link
Copy Markdown
Collaborator Author

Can you rebase to remove all the recipe failures? It would be great to see some results (perhaps tabular) that shows some solver characteristics with the different NCP choices

I used the mortar LM 3D ironing problem also used in: #33358

The three new options all let the simulation run a littlle bit further before failure for the frictional case. For the frictionless case the SMOOTH_MIN performs a bit better than the other option, but it is not a big difference.

Scenario NCP function Smoothing width Final time Accepted steps Failed steps Total nonlinear iterations Completed
friction MIN 0 0.278314 17 5 90 no
friction SMOOTH_MIN 1e-4 0.294246 54 10 282 no
friction FISCHER_BURMEISTER 0 0.294169 28 7 152 no
friction SMOOTH_FISCHER_BURMEISTER 1e-5 0.294418 80 11 420 no
frictionless MIN 0 1.000000 21 0 70 yes
frictionless SMOOTH_MIN 1e-4 1.000000 20 0 56 yes
frictionless FISCHER_BURMEISTER 0 1.000000 24 0 99 yes
frictionless SMOOTH_FISCHER_BURMEISTER 1e-5 1.000000 24 0 101 yes

|

ncp_friction_comparison_selected_widths

Add selectable normal nonlinear complementarity functions for LM mortar normal contact, including smooth min and Fischer-Burmeister variants.

refs idaholab#33322

Co-authored-by: Andreas Henrik Frederiksen <andreas.frederiksen@inl.gov>

Co-authored-by: OpenAI Codex <codex@openai.com>
@Andreas-Lepak
Andreas-Lepak force-pushed the contact-normal-ncp-options branch from 68bf3fe to d89a464 Compare July 17, 2026 16:33
@moosebuild

Copy link
Copy Markdown
Contributor

Job Test, step Results summary on d89a464 wanted to post the following:

Framework test summary

Compared against a3c1a50 in job civet.inl.gov/job/3983715.

No change

Modules test summary

Compared against a3c1a50 in job civet.inl.gov/job/3983715.

Added tests

Test Time (s) Memory (MB)
contact/test:mortar_dynamics.block-dynamics-action-smooth-min-normal-ncp 1.20 119.87
contact/test:bouncing-block-contact.weighted_vel_pdass/action_smooth_fischer_burmeister_normal_ncp 0.64 176.79
contact/test:bouncing-block-contact.weighted_gap/fischer_burmeister_exact_touch_normal_ncp 0.60 77.49
contact/test:bouncing-block-contact.weighted_gap/smooth_normal_ncp_requires_width 0.58 66.13

@lindsayad

lindsayad commented Jul 20, 2026

Copy link
Copy Markdown
Member

I used the mortar LM 3D ironing problem also used in: #33358

I can't tell exactly what input this is. You're putting up a lot of PRs; it would help me if you can be as explicit as possible.

So it seems like the min function is superior to FB for frictionless contact. Frictional is a little harder for me to parse. Could you maybe post another table with the number of accepted and failed timestep counts and the number of nonlinear iterations removed and instead have two columns, one with average dt per (accepted) time step and another with average number of nonlinear iterations per (accepted) time step?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add selectable normal NCP functions for mortar contact

3 participants