Files
OneCAD-Simulation/tests/oracle/nl-contact-patch/expected.json
T
jyvikoandClaude Opus 5.5 945a2076c3 verification: implicit contact patch test and Hertz line contact
Two oracle cases: the contact patch test on non-matching meshes in small and finite sliding,
and Hertz's cylinder on a flat under force control (peak pressure, pressure distribution,
subsurface stress). docs/fem.md describes the formulation, the literature survey its papers;
ROADMAP M7 and parity are updated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UhhZMBTviDQxZvwnyP89fo
2026-10-14 14:58:32 -04:00

432 lines
10 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"title": "Contact patch test: two blocks with non-matching meshes in uniaxial compression (implicit mortar contact)",
"kind": "theory",
"source": "The contact patch test: a contact discretisation must transmit a uniform pressure across a non-matching interface exactly; Taylor & Papadopoulos, On a patch test for contact problems in two dimensions, Nonlinear Computational Mechanics, Springer 1991, 690–702; Crisfield, Re-visiting the contact patch test, IJNME 48:435–449, 2000; passed by mortar methods: Puso & Laursen, CMAME 193:601–629, 2004. Uniaxial stress between frictionless symmetry planes is uniform in both blocks",
"quantities": [
{
"id": "small_lower_corner",
"quantity": "Small: σ_zz of the lower block's corner element under the interface (element 10) over that of the upper block's corner element over it (element 19)",
"measure": {
"command": "solve.probe",
"params": {
"step": "Small",
"elements": [
10
]
},
"pointer": "/elements/0/stress/0/2",
"over": {
"command": "solve.probe",
"params": {
"step": "Small",
"elements": [
19
]
},
"pointer": "/elements/0/stress/0/2"
}
},
"value": 1.0,
"tolerance": {
"relative": 1e-06
},
"reason": "small sliding is linear and its mortar integrals exact on these rectangular faces: a uniform stress is the discrete solution up to the convergence tolerance (10⁻¹⁰)"
},
{
"id": "small_lower_centre",
"quantity": "Small: σ_zz of the lower block's centre element under the interface (element 14) over that of element 19",
"measure": {
"command": "solve.probe",
"params": {
"step": "Small",
"elements": [
14
]
},
"pointer": "/elements/0/stress/0/2",
"over": {
"command": "solve.probe",
"params": {
"step": "Small",
"elements": [
19
]
},
"pointer": "/elements/0/stress/0/2"
}
},
"value": 1.0,
"tolerance": {
"relative": 1e-06
},
"reason": "as for the corner element"
},
{
"id": "small_lower_base",
"quantity": "Small: σ_zz of the lower block's bottom corner element (element 1) over that of element 19",
"measure": {
"command": "solve.probe",
"params": {
"step": "Small",
"elements": [
1
]
},
"pointer": "/elements/0/stress/0/2",
"over": {
"command": "solve.probe",
"params": {
"step": "Small",
"elements": [
19
]
},
"pointer": "/elements/0/stress/0/2"
}
},
"value": 1.0,
"tolerance": {
"relative": 1e-06
},
"reason": "as for the corner element"
},
{
"id": "small_upper_top",
"quantity": "Small: σ_zz of the upper block's top far corner element (element 26) over that of element 19",
"measure": {
"command": "solve.probe",
"params": {
"step": "Small",
"elements": [
26
]
},
"pointer": "/elements/0/stress/0/2",
"over": {
"command": "solve.probe",
"params": {
"step": "Small",
"elements": [
19
]
},
"pointer": "/elements/0/stress/0/2"
}
},
"value": 1.0,
"tolerance": {
"relative": 1e-06
},
"reason": "as for the corner element"
},
{
"id": "small_lateral",
"quantity": "Small: σ_xx of element 14 over its σ_zz (uniaxial stress: 0)",
"measure": {
"command": "solve.probe",
"params": {
"step": "Small",
"elements": [
14
]
},
"pointer": "/elements/0/stress/0/0",
"over": {
"command": "solve.probe",
"params": {
"step": "Small",
"elements": [
14
]
},
"pointer": "/elements/0/stress/0/2"
}
},
"value": 0.0,
"tolerance": {
"absolute": 1e-06
},
"reason": "frictionless symmetry planes and a frictionless interface leave the blocks free to expand sideways; the non-matching interface must not hold them"
},
{
"id": "small_pressure",
"quantity": "Small: the contact pressure at the secondary node (0.5, 0.5, 1) over −σ_zz of element 19",
"measure": {
"command": "solve.probe",
"params": {
"step": "Small",
"at": [
[
0.5,
0.5,
1.0
]
]
},
"pointer": "/nodes/0/contact/0/pressure",
"over": {
"command": "solve.probe",
"params": {
"step": "Small",
"elements": [
19
]
},
"pointer": "/elements/0/stress/0/2",
"scale": -1.0
}
},
"value": 1.0,
"tolerance": {
"relative": 1e-06
},
"reason": "the mortar multipliers are the nodal values of the contact pressure, uniform and equal to the stress across the interface"
},
{
"id": "small_force",
"quantity": "Small: the integrated contact pressure over the reaction at the pushed top",
"measure": {
"from": "small",
"pointer": "/contacts/0/normal_force",
"over": {
"command": "results.reactions",
"params": {
"step": "Small",
"sets": [
"top"
]
},
"pointer": "/sets/0/force/2",
"scale": -1.0
}
},
"value": 1.0,
"tolerance": {
"relative": 1e-06
},
"reason": "the pressure carries the whole load across the interface"
},
{
"id": "finite_lower_corner",
"quantity": "Finite: σ_zz of the lower block's corner element under the interface (element 10) over that of the upper block's corner element over it (element 19)",
"measure": {
"command": "solve.probe",
"params": {
"step": "Finite",
"elements": [
10
]
},
"pointer": "/elements/0/stress/0/2",
"over": {
"command": "solve.probe",
"params": {
"step": "Finite",
"elements": [
19
]
},
"pointer": "/elements/0/stress/0/2"
}
},
"value": 1.0,
"tolerance": {
"relative": 0.0002
},
"reason": "finite sliding is exact up to the geometric terms of the gaps the augmentation leaves (10⁻⁵ of the element thickness) and the default convergence tolerances"
},
{
"id": "finite_lower_centre",
"quantity": "Finite: σ_zz of the lower block's centre element under the interface (element 14) over that of element 19",
"measure": {
"command": "solve.probe",
"params": {
"step": "Finite",
"elements": [
14
]
},
"pointer": "/elements/0/stress/0/2",
"over": {
"command": "solve.probe",
"params": {
"step": "Finite",
"elements": [
19
]
},
"pointer": "/elements/0/stress/0/2"
}
},
"value": 1.0,
"tolerance": {
"relative": 0.0002
},
"reason": "as for the corner element"
},
{
"id": "finite_lower_base",
"quantity": "Finite: σ_zz of the lower block's bottom corner element (element 1) over that of element 19",
"measure": {
"command": "solve.probe",
"params": {
"step": "Finite",
"elements": [
1
]
},
"pointer": "/elements/0/stress/0/2",
"over": {
"command": "solve.probe",
"params": {
"step": "Finite",
"elements": [
19
]
},
"pointer": "/elements/0/stress/0/2"
}
},
"value": 1.0,
"tolerance": {
"relative": 0.0002
},
"reason": "as for the corner element"
},
{
"id": "finite_upper_top",
"quantity": "Finite: σ_zz of the upper block's top far corner element (element 26) over that of element 19",
"measure": {
"command": "solve.probe",
"params": {
"step": "Finite",
"elements": [
26
]
},
"pointer": "/elements/0/stress/0/2",
"over": {
"command": "solve.probe",
"params": {
"step": "Finite",
"elements": [
19
]
},
"pointer": "/elements/0/stress/0/2"
}
},
"value": 1.0,
"tolerance": {
"relative": 0.0002
},
"reason": "as for the corner element"
},
{
"id": "finite_lateral",
"quantity": "Finite: σ_xx of element 14 over its σ_zz (uniaxial stress: 0)",
"measure": {
"command": "solve.probe",
"params": {
"step": "Finite",
"elements": [
14
]
},
"pointer": "/elements/0/stress/0/0",
"over": {
"command": "solve.probe",
"params": {
"step": "Finite",
"elements": [
14
]
},
"pointer": "/elements/0/stress/0/2"
}
},
"value": 0.0,
"tolerance": {
"absolute": 0.0002
},
"reason": "frictionless symmetry planes and a frictionless interface leave the blocks free to expand sideways; the non-matching interface must not hold them"
},
{
"id": "finite_pressure",
"quantity": "Finite: the contact pressure at the secondary node (0.5, 0.5, 1) over −σ_zz of element 19",
"measure": {
"command": "solve.probe",
"params": {
"step": "Finite",
"at": [
[
0.5,
0.5,
1.0
]
]
},
"pointer": "/nodes/0/contact/0/pressure",
"over": {
"command": "solve.probe",
"params": {
"step": "Finite",
"elements": [
19
]
},
"pointer": "/elements/0/stress/0/2",
"scale": -1.0
}
},
"value": 1.0,
"tolerance": {
"relative": 0.0002
},
"reason": "the mortar multipliers are the nodal values of the contact pressure, uniform and equal to the stress across the interface"
},
{
"id": "finite_force",
"quantity": "Finite: the integrated contact pressure over the reaction at the pushed top",
"measure": {
"from": "finite",
"pointer": "/contacts/0/normal_force",
"over": {
"command": "results.reactions",
"params": {
"step": "Finite",
"sets": [
"top"
]
},
"pointer": "/sets/0/force/2",
"scale": -1.0
}
},
"value": 1.0,
"tolerance": {
"relative": 0.0002
},
"reason": "the pressure carries the whole load across the interface"
},
{
"id": "small_stress",
"quantity": "Small: σ_zz of element 19 (uniaxial stress E ε = −10 for the 1% squeeze)",
"measure": {
"command": "solve.probe",
"params": {
"step": "Small",
"elements": [
19
]
},
"pointer": "/elements/0/stress/0/2"
},
"value": -10.0,
"tolerance": {
"relative": 0.0001
},
"reason": "the squeeze less the penetration the augmented Lagrangian leaves (up to 10⁻⁵ of the element thickness, a few 10⁻⁵ of the squeeze)"
}
]
}