forked from 1b-agent/fieldcraft-upstream
Neo-Hookean, Mooney–Rivlin and Yeoh materials in explicit dynamics, in total form from the deformation gradient (objective by construction): the one-point hex8 takes its mean F over the undeformed element and the stress τ/J; tet4 takes the isochoric stress of its own F with the average nodal pressure of the decoupled volumetric energy (Bonet–Burton at finite strain). Each element's frequency bound follows the tangent's largest normal stiffness. Small-displacement steps and thermal strain of hyperelastic elements are refused by name. Verified by uniaxial strain to λ = 1.5 of all three laws on hex8 and tet4 against the material point (to rounding), and the oracle case explicit-neo-hookean-implicit: a quasi-static explicit pull against the implicit nonlinear solver (lateral contraction to 0.09%, stress to 0.03%). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UhhZMBTviDQxZvwnyP89fo
245 lines
3.0 KiB
JSON
245 lines
3.0 KiB
JSON
[
|
|
{
|
|
"command": "mesh.block",
|
|
"params": {
|
|
"body": "Cube",
|
|
"kind": "tet4",
|
|
"corners": [
|
|
[
|
|
0,
|
|
0,
|
|
0
|
|
],
|
|
[
|
|
1,
|
|
0,
|
|
0
|
|
],
|
|
[
|
|
1,
|
|
1,
|
|
0
|
|
],
|
|
[
|
|
0,
|
|
1,
|
|
0
|
|
],
|
|
[
|
|
0,
|
|
0,
|
|
1
|
|
],
|
|
[
|
|
1,
|
|
0,
|
|
1
|
|
],
|
|
[
|
|
1,
|
|
1,
|
|
1
|
|
],
|
|
[
|
|
0,
|
|
1,
|
|
1
|
|
]
|
|
],
|
|
"divisions": [
|
|
2,
|
|
2,
|
|
2
|
|
],
|
|
"faces": {
|
|
"6": "x0",
|
|
"3": "y0",
|
|
"1": "z0",
|
|
"4": "x1"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"command": "model.set.create",
|
|
"params": {
|
|
"name": "all",
|
|
"geometry": [
|
|
{
|
|
"body": "Cube"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"command": "model.set.create",
|
|
"params": {
|
|
"name": "x0",
|
|
"geometry": [
|
|
{
|
|
"body": "Cube",
|
|
"face": "x0"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"command": "model.set.create",
|
|
"params": {
|
|
"name": "y0",
|
|
"geometry": [
|
|
{
|
|
"body": "Cube",
|
|
"face": "y0"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"command": "model.set.create",
|
|
"params": {
|
|
"name": "z0",
|
|
"geometry": [
|
|
{
|
|
"body": "Cube",
|
|
"face": "z0"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"command": "model.set.create",
|
|
"params": {
|
|
"name": "x1",
|
|
"geometry": [
|
|
{
|
|
"body": "Cube",
|
|
"face": "x1"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"command": "model.material.create",
|
|
"params": {
|
|
"name": "Rubber",
|
|
"elastic": {
|
|
"type": "isotropic",
|
|
"young": 10.0,
|
|
"poisson": 0.3
|
|
},
|
|
"density": 1.0,
|
|
"hyperelastic": {
|
|
"type": "neo_hookean"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"command": "model.section.create",
|
|
"params": {
|
|
"name": "cube",
|
|
"set": "all",
|
|
"material": "Rubber",
|
|
"kind": {
|
|
"type": "solid"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"command": "model.boundary_condition.create",
|
|
"params": {
|
|
"name": "sx",
|
|
"type": "symmetry",
|
|
"target": {
|
|
"set": "x0"
|
|
},
|
|
"plane": "x"
|
|
}
|
|
},
|
|
{
|
|
"command": "model.boundary_condition.create",
|
|
"params": {
|
|
"name": "sy",
|
|
"type": "symmetry",
|
|
"target": {
|
|
"set": "y0"
|
|
},
|
|
"plane": "y"
|
|
}
|
|
},
|
|
{
|
|
"command": "model.boundary_condition.create",
|
|
"params": {
|
|
"name": "sz",
|
|
"type": "symmetry",
|
|
"target": {
|
|
"set": "z0"
|
|
},
|
|
"plane": "z"
|
|
}
|
|
},
|
|
{
|
|
"command": "model.boundary_condition.create",
|
|
"params": {
|
|
"name": "pull",
|
|
"type": "displacement",
|
|
"target": {
|
|
"set": "x1"
|
|
},
|
|
"values": [
|
|
0.5,
|
|
null,
|
|
null,
|
|
null,
|
|
null,
|
|
null
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"command": "model.step.create",
|
|
"params": {
|
|
"name": "Static",
|
|
"procedure": {
|
|
"type": "nonlinear_static"
|
|
},
|
|
"boundary_conditions": [
|
|
"sx",
|
|
"sy",
|
|
"sz",
|
|
"pull"
|
|
],
|
|
"loads": []
|
|
}
|
|
},
|
|
{
|
|
"command": "model.step.create",
|
|
"params": {
|
|
"name": "Dynamic",
|
|
"procedure": {
|
|
"type": "explicit_dynamic",
|
|
"end_time": 100.0
|
|
},
|
|
"boundary_conditions": [
|
|
"sx",
|
|
"sy",
|
|
"sz",
|
|
"pull"
|
|
],
|
|
"loads": []
|
|
}
|
|
},
|
|
{
|
|
"command": "solve.nonlinear",
|
|
"params": {
|
|
"step": "Static"
|
|
},
|
|
"id": "implicit"
|
|
},
|
|
{
|
|
"command": "solve.explicit",
|
|
"params": {
|
|
"step": "Dynamic"
|
|
},
|
|
"id": "explicit"
|
|
}
|
|
] |