ANYsolver 0.1.0__tar.gz → 0.1.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- anysolver-0.1.2/CHANGELOG.md +63 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/MANIFEST.in +7 -7
- {anysolver-0.1.0 → anysolver-0.1.2}/PKG-INFO +57 -19
- {anysolver-0.1.0 → anysolver-0.1.2}/README.md +167 -129
- {anysolver-0.1.0 → anysolver-0.1.2}/docs/ARCHITECTURE.md +318 -238
- {anysolver-0.1.0 → anysolver-0.1.2}/docs/ARC_LENGTH.md +70 -18
- {anysolver-0.1.0 → anysolver-0.1.2}/docs/NONLINEAR_PERFORMANCE.md +36 -18
- anysolver-0.1.2/docs/QUALITY_CONTROL.md +248 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/docs/THEORY.md +485 -282
- {anysolver-0.1.0 → anysolver-0.1.2}/pyproject.toml +2 -2
- {anysolver-0.1.0 → anysolver-0.1.2}/scripts/run_beam_shell_verification.py +12 -1
- anysolver-0.1.2/scripts/run_external_references.py +63 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/scripts/run_fe_verification.py +238 -113
- {anysolver-0.1.0 → anysolver-0.1.2}/src/ANYsolver.egg-info/PKG-INFO +57 -19
- {anysolver-0.1.0 → anysolver-0.1.2}/src/ANYsolver.egg-info/SOURCES.txt +10 -2
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/__init__.py +112 -67
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/anystructure_fem_mode.py +32 -32
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/arc_length.py +182 -19
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/assembly.py +44 -44
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/beam_shell_verification.py +3164 -2911
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/boundary.py +156 -34
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/buckling.py +149 -83
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/corotational.py +476 -370
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/elements.py +526 -110
- anysolver-0.1.2/src/anysolver/external_references.py +1370 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/fe_core.py +61 -36
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/fracture.py +19 -2
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/imperfections.py +42 -42
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/linalg.py +71 -9
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/mass_properties.py +16 -16
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/material_curves.py +231 -231
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/matrix_assembly.py +176 -47
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/mesh_gen.py +166 -166
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/mesh_load_bc_verification.py +608 -608
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/nonlinear_performance.py +128 -58
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/nonlinear_performance_batch_b.py +154 -22
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/nonlinear_performance_batch_c.py +41 -7
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/nonlinear_static.py +2363 -1413
- anysolver-0.1.2/src/anysolver/plasticity.py +1088 -0
- anysolver-0.1.2/src/anysolver/plasticity_qualification.py +758 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/production_readiness.py +308 -303
- anysolver-0.1.2/src/anysolver/recovery.py +2116 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/results.py +235 -181
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/runtime.py +186 -295
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/validation.py +332 -258
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/vectorized_nonlinear.py +57 -57
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_batch_b_activation.py +6 -6
- anysolver-0.1.2/tests/test_beam_shell_verification.py +286 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_corotational.py +392 -322
- anysolver-0.1.2/tests/test_external_references.py +318 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_fe_solver_buckling.py +116 -116
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_fe_solver_element_qualification.py +37 -37
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_fe_solver_infrastructure.py +138 -7
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_fe_solver_mass_modal.py +162 -162
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_fe_solver_nonlinear_dnv.py +335 -330
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_fe_solver_plasticity_qualification.py +70 -70
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_fe_solver_recovery_policy.py +26 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_fe_solver_reference_cases.py +49 -47
- anysolver-0.1.2/tests/test_fe_solver_triangular_shell_backend.py +356 -0
- anysolver-0.1.2/tests/test_follower_pressure.py +559 -0
- anysolver-0.1.2/tests/test_geometry_panel.py +114 -0
- anysolver-0.1.2/tests/test_initial_fields_and_staged_history.py +606 -0
- anysolver-0.1.2/tests/test_local_patch_transition.py +570 -0
- anysolver-0.1.2/tests/test_material_history_recovery.py +306 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_mesher_improvements.py +164 -164
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_nodal_stress_recovery.py +106 -106
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_nonlinear_performance.py +108 -108
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_nonlinear_performance_batch_b.py +74 -6
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_nonlinear_performance_batch_c.py +68 -5
- anysolver-0.1.2/tests/test_plane_stress_analytical_tangent.py +337 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_production_readiness.py +107 -103
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_production_validation.py +127 -127
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_quadratic_beam_nonlinear.py +147 -147
- anysolver-0.1.2/tests/test_recovery_qualification.py +463 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_runtime_api.py +43 -0
- anysolver-0.1.0/CHANGELOG.md +0 -22
- anysolver-0.1.0/docs/QUALITY_CONTROL.md +0 -128
- anysolver-0.1.0/scripts/run_external_references.py +0 -33
- anysolver-0.1.0/src/anysolver/external_references.py +0 -369
- anysolver-0.1.0/src/anysolver/plasticity.py +0 -419
- anysolver-0.1.0/src/anysolver/plasticity_qualification.py +0 -314
- anysolver-0.1.0/src/anysolver/recovery.py +0 -505
- anysolver-0.1.0/tests/reference_cases/README.md +0 -35
- anysolver-0.1.0/tests/test_beam_shell_verification.py +0 -135
- {anysolver-0.1.0 → anysolver-0.1.2}/LICENSE +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/MIGRATION.md +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/docs/reference_cases/README.md +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/scripts/benchmark_nonlinear_assembly.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/scripts/compare_fe_baselines.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/scripts/fetch_calculix_shell_reference.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/scripts/generate_fe_baselines.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/scripts/run_beam_validity.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/scripts/run_buckling_validity.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/scripts/run_capacity_workflow.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/scripts/run_cylinder_benchmark.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/scripts/run_element_qualification.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/scripts/run_fe_benchmarks.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/scripts/run_internal_shell_benchmark.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/scripts/run_mass_modal_validity.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/scripts/run_mesh_load_bc_verification.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/scripts/run_plasticity_qualification.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/scripts/run_recovery_policy.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/scripts/run_s4_validity.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/scripts/write_production_readiness.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/setup.cfg +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/ANYsolver.egg-info/dependency_links.txt +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/ANYsolver.egg-info/requires.txt +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/ANYsolver.egg-info/top_level.txt +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/baselines.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/beam_validity.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/benchmarks.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/buckling_validity.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/capacity_workflow.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/cases.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/composite_strip_verification.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/contact.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/cylinder_benchmarks.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/dynamics.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/element_qualification.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/jit_compiler.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/kernel_warmup.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/modal.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/nonlinear.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/nonlinear_performance_bootstrap.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/nonlinear_reduced_assembly.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/quality_control.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/recovery_policy.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/reference_cases.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/s4_validity.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/sesam_fem/__init__.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/sesam_fem/__main__.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/sesam_fem/diagnostics.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/sesam_fem/document.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/sesam_fem/exporter.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/sesam_fem/importer.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/sesam_fem/records.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/sesam_fem/schema.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/sesam_fem/sif_importer.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/sesam_fem/validation.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/shell_benchmarks.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/test_cases.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/src/anysolver/vectorized_stiffness.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/conftest.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/fixtures/fe_baselines/baseline.json +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_arc_length.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_beam_axis_conventions.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_fe_solver_anystructure_fem_mode.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_fe_solver_architecture.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_fe_solver_capacity_workflow.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_fe_solver_contact.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_fe_solver_corotational_beam.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_fe_solver_cylinder_benchmarks.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_fe_solver_dynamics.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_fe_solver_element_quality.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_fe_solver_fracture.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_fe_solver_nonlinear_limit_point.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_fe_solver_nonlinear_static.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_fe_solver_s4_validity.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_fe_solver_shell_verification.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_fe_solver_theory.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_fe_solver_triangular_shell.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_hht_alpha.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_mesh_load_bc_verification.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_nonlinear_impact_plasticity.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_performance_improvements.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_phase2.py +0 -0
- {anysolver-0.1.0 → anysolver-0.1.2}/tests/test_sesam_fem.py +0 -0
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## Unreleased
|
|
4
|
+
|
|
5
|
+
## 0.1.2 - 2026-07-28
|
|
6
|
+
|
|
7
|
+
- Add opt-in executable CalculiX reference validation with isolated case runs,
|
|
8
|
+
stale-output protection, timeouts, solver version/hash provenance, ASCII
|
|
9
|
+
FRD/DAT parsing, tolerance-controlled comparisons, and preserved evidence
|
|
10
|
+
semantics. Deck-only generation remains explicitly `not_executed`; stale
|
|
11
|
+
non-executed legacy reports are regenerated deterministically, while invalid
|
|
12
|
+
executed evidence is preserved and rejected for diagnosis.
|
|
13
|
+
- Add current-area follower pressure and its exact, generally nonsymmetric
|
|
14
|
+
external-load tangent to nonlinear static and arc-length solves. Extend
|
|
15
|
+
shell initial-stress stiffness to the Mindlin translation/director field
|
|
16
|
+
using membrane, bending, and second stress moments, and add the qualified
|
|
17
|
+
thin-ring pressure-buckling gate.
|
|
18
|
+
- Add an opt-in consistent corotational tangent through the full
|
|
19
|
+
pull-back/frame/rotate-forward chain rule. `auto` retains the lower-cost
|
|
20
|
+
rotated tangent for ordinary loads and selects the consistent tangent for
|
|
21
|
+
follower pressure.
|
|
22
|
+
- Unify nonlinear stress recovery around committed shell-layer and beam-fiber
|
|
23
|
+
histories, matching solution displacements, objective corotational frames,
|
|
24
|
+
component-level provenance, and explicit elastic fallbacks. Add guarded
|
|
25
|
+
full-integration Q4/Q8 patch recovery that separates discontinuities and
|
|
26
|
+
labels its optional surface-stress L2 indicator as non-energy-norm.
|
|
27
|
+
- Add shell membrane/bending stress and prestrain fields plus beam-fiber
|
|
28
|
+
initial fields, with zero-load equilibration, immutable field provenance,
|
|
29
|
+
exact load-stage boundary commits, and persistent plastic history through
|
|
30
|
+
multi-stage displacement control.
|
|
31
|
+
- Replace the default finite-difference plane-stress algorithmic tangent with
|
|
32
|
+
the analytical consistent derivative of the discrete return map. Retain the
|
|
33
|
+
representable-step numerical tangent as a qualification oracle and guarded
|
|
34
|
+
invalid-row fallback, add a safeguarded local consistency solve with
|
|
35
|
+
fail-closed residual checks, and add constitutive and full-Newton
|
|
36
|
+
parity/performance evidence.
|
|
37
|
+
|
|
38
|
+
## 0.1.1 - 2026-07-25
|
|
39
|
+
|
|
40
|
+
- Correct the layered-shell membrane/bending coupling tangent and keep the
|
|
41
|
+
accelerated plastic shell path consistent with the scalar return mapping.
|
|
42
|
+
- Fail closed for curved B3 members, experimental Q8R qualification, unsupported
|
|
43
|
+
DNV-RP-C208 thickness rows, and path-dependent staged displacement control.
|
|
44
|
+
- Include point masses in reported mass properties, make buckling constraints
|
|
45
|
+
call-order independent, and correct CalculiX gravity export.
|
|
46
|
+
- Remove quadratic model-construction and beam/shell coupling lookup scaling,
|
|
47
|
+
safely reset precomputed incoming elements, cache recovery operators and
|
|
48
|
+
topology signatures, defer optional acceleration imports, and use lower
|
|
49
|
+
PyPardiso thresholds only for compatible retained patterns.
|
|
50
|
+
- Preserve straight-sided B3 midpoint geometry through adaptive cylinder
|
|
51
|
+
refinement and reconstruct complete elastic layer states after accelerated
|
|
52
|
+
nonlinear solves.
|
|
53
|
+
- Add explicit runtime exports, generic generated-geometry API aliases, and
|
|
54
|
+
package-root arc-length exports.
|
|
55
|
+
- Adopt the pure-solver test files from ANYstructure (triangular shell
|
|
56
|
+
backend, local patch transition, geometry panel).
|
|
57
|
+
|
|
58
|
+
## 0.1.0 - 2026-07-22
|
|
59
|
+
|
|
60
|
+
- Transfer the qualified beam/shell solver from ANYintelligent into its own package.
|
|
61
|
+
- Add the headless runtime meshing and analysis facade formerly embedded in ANYstructure.
|
|
62
|
+
- Publish the Python import namespace as `anysolver` without a legacy `fe_solver` shim.
|
|
63
|
+
- Preserve SESAM interchange, verification, qualification, benchmark, and baseline workflows.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
include LICENSE
|
|
2
|
-
include README.md
|
|
3
|
-
include CHANGELOG.md
|
|
4
|
-
include MIGRATION.md
|
|
5
|
-
recursive-include docs *.md
|
|
6
|
-
recursive-include scripts *.py
|
|
7
|
-
recursive-include tests *.py *.json
|
|
1
|
+
include LICENSE
|
|
2
|
+
include README.md
|
|
3
|
+
include CHANGELOG.md
|
|
4
|
+
include MIGRATION.md
|
|
5
|
+
recursive-include docs *.md
|
|
6
|
+
recursive-include scripts *.py
|
|
7
|
+
recursive-include tests *.py *.json
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ANYsolver
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.2
|
|
4
4
|
Summary: Qualified beam and shell finite-element solver
|
|
5
5
|
Author-email: Audun Arnesen Nyhus <audunarn@gmail.com>
|
|
6
6
|
License-Expression: GPL-3.0-or-later
|
|
@@ -82,21 +82,23 @@ changes before making release claims.
|
|
|
82
82
|
| Area | Implemented functionality |
|
|
83
83
|
| --- | --- |
|
|
84
84
|
| Model | Six DOFs per node; SI units; materials, density, nodal mass, shell/beam topology, supports, and MPC constraints. |
|
|
85
|
-
| Shells | 3- and 6-node triangles; 4-node MITC-style and 8-node Mindlin-Reissner quadrilaterals; stiffness, mass, pressure,
|
|
85
|
+
| Shells | 3- and 6-node triangles; 4-node MITC-style and 8-node Mindlin-Reissner quadrilaterals; stiffness, mass, pressure, and stress recovery. The shell initial-stress operator includes membrane, bending, and second stress moments acting through the implemented Mindlin translation/director field. Q8R reduced integration is experimental and outside the qualified thin-bending/nonlinear-batch scope. |
|
|
86
86
|
| Beams | 2-node and straight-sided 3-node Timoshenko beams with axial, biaxial bending, shear, torsion, consistent/lumped mass options, geometric stiffness, and optional fiber-section plasticity. |
|
|
87
87
|
| Coupling | Coincident or eccentric beam-shell kinematics through explicit interpolated MPC transformations. |
|
|
88
|
-
| Loads | Nodal force/moment, shell pressure, in-plane edge loads, acceleration/gravity, prescribed displacement, load combinations, proportional and staged nonlinear loads. |
|
|
88
|
+
| Loads | Nodal force/moment, dead or current-area follower shell pressure, in-plane edge loads, acceleration/gravity, prescribed displacement, load combinations, proportional and staged nonlinear loads. Follower pressure includes its exact, generally nonsymmetric external-load tangent. |
|
|
89
89
|
| Linear analysis | Static single- and multiple-RHS solves, reactions and MPC-force diagnostics, free-free rigid-body nullspace handling, and sparse factorization reuse. |
|
|
90
90
|
| Modal and mass | Consistent mass assembly, point masses, model mass/inertia properties, constrained and free-free vibration modes. |
|
|
91
|
-
| Buckling | Linear eigenvalue buckling for beam axial force and shell
|
|
92
|
-
| Nonlinear static | Incremental Newton solution, adaptive stepping, force or displacement control, von Karman or opt-in corotational kinematics, layered shell J2 plasticity, beam fiber plasticity,
|
|
93
|
-
| Continuation | Bounded Crisfield-style spherical arc-length tracing through a first limit point and a guarded descending branch. |
|
|
91
|
+
| Buckling | Linear eigenvalue buckling for beam axial force and shell Mindlin initial-stress resultants, including sparse shift-invert and repeated-mode diagnostics. A follower-load stiffness can be included when its constrained tangent is symmetric; a general nonsymmetric follower eigenproblem is outside scope. |
|
|
92
|
+
| Nonlinear static | Incremental Newton solution, adaptive stepping, force or displacement control, dead or follower pressure, von Karman or opt-in corotational kinematics, rotated or consistent corotational tangent, layered shell J2 plasticity with a safeguarded local solve and analytical consistent tangent, beam fiber plasticity, stage-boundary commits, true preload/restart displacement control, and simplified element erosion. |
|
|
93
|
+
| Continuation | Bounded Crisfield-style spherical arc-length tracing through a first limit point and a guarded descending branch, including current-area follower pressure and its load tangent. |
|
|
94
94
|
| Dynamics | Newmark or HHT-alpha implicit transient response, Rayleigh damping, prescribed shell pressure patches, selected/envelope history storage, and memory preflight. |
|
|
95
95
|
| Impact/contact | One rigid sphere with frictionless penalty contact against shells and opt-in beam-axis segments; event substepping, Aitken relaxation, nonlinear material response, and engineering damage/erosion options. |
|
|
96
96
|
| Imperfections | Stress-free eigenmode, member-bow, plate-wave, flange-twist, explicit, and composite imperfection fields. |
|
|
97
|
+
| Initial fields | Element-local shell membrane/bending stress or membrane/curvature prestrain, arbitrary configured beam-fiber stress/prestrain distributions, zero-external-load equilibration, admissibility checks, and provenance kept separate from geometric imperfections. |
|
|
97
98
|
| Workflows | Normalized generated geometry to static/prestress/buckling; traceable static-to-buckling-to-imperfect nonlinear-capacity workflow. |
|
|
98
99
|
| Interchange | Pure-Python SESAM formatted FEM record/document parsing, guarded round-trip writing, supported semantic import to `FEModel`, coordinate transforms, beam orientation, and SIF shell-stress reading by load case. |
|
|
99
|
-
| Results | Result provenance
|
|
100
|
+
| Results | Result provenance; unified elastic or committed shell-layer/beam-fiber stress recovery; guarded Zienkiewicz-Zhu-style patch recovery for qualified shell neighborhoods; selected recovery; reaction filtering; validation diagnostics; deterministic baselines; benchmarks; and generated qualification reports. |
|
|
101
|
+
| External verification | Reproducible CalculiX input generation plus opt-in isolated execution, FRD/DAT parsing, solver provenance, and tolerance-controlled analytical comparison. Deck-only reports remain explicitly `not_executed` and make no numerical-agreement claim. |
|
|
100
102
|
|
|
101
103
|
Implemented does not automatically mean qualified for every geometry or load
|
|
102
104
|
regime. The live capability matrix is produced by
|
|
@@ -116,21 +118,46 @@ Important limits:
|
|
|
116
118
|
- the 3-node quadratic beam is straight-sided; curved members must be
|
|
117
119
|
represented by straight beam segments until a true curved formulation is
|
|
118
120
|
implemented;
|
|
119
|
-
- shell
|
|
120
|
-
|
|
121
|
-
|
|
121
|
+
- the shell initial-stress operator covers the in-plane `N`, `M`, and `H`
|
|
122
|
+
stress moments acting on Mindlin midsurface translations and director
|
|
123
|
+
gradients; it does not add drilling, transverse-normal-stress, or a
|
|
124
|
+
geometrically exact finite-rotation shell/director formulation;
|
|
125
|
+
- current-area follower pressure is supported in nonlinear static and
|
|
126
|
+
arc-length analyses, with its exact load tangent. Linear/dead pressure
|
|
127
|
+
remains the default. Linear buckling rejects a constrained nonsymmetric
|
|
128
|
+
follower-pressure pencil because general complex nonconservative
|
|
129
|
+
eigenanalysis is not implemented;
|
|
122
130
|
- no general shell-shell, body-body, frictional, rolling, or self-contact;
|
|
123
131
|
- no fluid-structure interaction, cavitation, or water-entry model;
|
|
124
132
|
- no cohesive cracks, remeshing, material separation, or fracture-mechanics
|
|
125
133
|
claim—the erosion models are engineering screens;
|
|
126
134
|
- no unrestricted deep post-buckling or automatic bifurcation branch switching;
|
|
127
|
-
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
-
|
|
132
|
-
|
|
133
|
-
|
|
135
|
+
- the consistent corotational tangent includes frame derivatives and is
|
|
136
|
+
selected automatically for follower pressure, but its numerical
|
|
137
|
+
frame-sensitivity evaluation is costlier than the rotated tangent used by
|
|
138
|
+
default for ordinary corotational solves;
|
|
139
|
+
- material-history-aware recovery requires retained, matching committed
|
|
140
|
+
nonlinear layer/fiber states; missing or invalid state is reported and the
|
|
141
|
+
affected components fall back explicitly to elastic reconstruction;
|
|
142
|
+
- the guarded patch-recovery fit is qualified only for locally planar,
|
|
143
|
+
consistently oriented, homogeneous, full-integration Q4 or Q8 shell
|
|
144
|
+
neighborhoods. Discontinuities remain separate, and the optional normalized
|
|
145
|
+
stress-L2 discrepancy is a diagnostic—not an energy-norm error estimate;
|
|
146
|
+
- initial stress/prestrain fields are qualified only in element-local reference
|
|
147
|
+
coordinates with `kinematics="von_karman"`. Shell fields use the documented
|
|
148
|
+
membrane/positive-face-bending convention, and beam fields require a
|
|
149
|
+
configured fiber section. Input stress must be admissible for the supplied
|
|
150
|
+
hardening state; equilibration may redistribute it and does not reconstruct
|
|
151
|
+
the manufacturing history. A field-bearing restart also requires its
|
|
152
|
+
matching converged displacement vector;
|
|
153
|
+
- the analytical plane-stress tangent is branch-consistent. The numerical
|
|
154
|
+
derivative remains an oracle and automatic invalid-row fallback; local
|
|
155
|
+
yield-residual nonconvergence fails closed;
|
|
156
|
+
- no unverified material laws or distortion ranges;
|
|
157
|
+
- SESAM `FEModel` export remains outside the supported interchange gate;
|
|
158
|
+
- CalculiX comparison requires a compatible local executable and an explicit
|
|
159
|
+
execution request. Deck generation alone is a reproducibility handoff, not
|
|
160
|
+
external numerical evidence.
|
|
134
161
|
|
|
135
162
|
Use `validate_production_model()`, the analysis-specific preflight checks, and
|
|
136
163
|
the generated production-scope artifacts before production use.
|
|
@@ -161,5 +188,16 @@ python scripts/run_fe_verification.py
|
|
|
161
188
|
```
|
|
162
189
|
|
|
163
190
|
The last command regenerates the canonical JSON and Markdown evidence under
|
|
164
|
-
`reports/verification/`.
|
|
165
|
-
|
|
191
|
+
`reports/verification/`. Its default external-reference mode generates
|
|
192
|
+
handoff decks with status `not_executed`; that status is not a pass or a claim
|
|
193
|
+
of numerical agreement. To execute the comparisons, provide a compatible
|
|
194
|
+
CalculiX executable on `PATH`, through `ANYSOLVER_CALCULIX_EXECUTABLE`, or with
|
|
195
|
+
`--calculix`, and run:
|
|
196
|
+
|
|
197
|
+
```powershell
|
|
198
|
+
python scripts/run_fe_verification.py --execute-calculix
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
An external case becomes passing evidence only after isolated execution,
|
|
202
|
+
successful FRD/DAT parsing, and every declared comparison meeting its
|
|
203
|
+
tolerance.
|
|
@@ -1,130 +1,168 @@
|
|
|
1
|
-
# ANYsolver finite-element solver
|
|
2
|
-
|
|
3
|
-
`anysolver` is a headless structural FE solver for beam,
|
|
4
|
-
shell, stiffened-panel, and cylindrical-shell analysis. It is an engineering
|
|
5
|
-
solver with an explicit qualification scope, not a general-purpose CAD,
|
|
6
|
-
contact, or fracture platform.
|
|
7
|
-
|
|
8
|
-
Install the released package with:
|
|
9
|
-
|
|
10
|
-
```powershell
|
|
11
|
-
python -m pip install ANYsolver
|
|
12
|
-
```
|
|
13
|
-
|
|
14
|
-
For coordinated local development with ANYstructure:
|
|
15
|
-
|
|
16
|
-
```powershell
|
|
17
|
-
python -m pip install -e C:\Github\ANYsolver
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
Core analyses and the solver-owned generated-geometry workflow are available
|
|
21
|
-
directly from `anysolver`; the lightweight normalized flat-panel and cylinder
|
|
22
|
-
facade is exposed through `anysolver.runtime`:
|
|
23
|
-
|
|
24
|
-
```python
|
|
25
|
-
from anysolver import (
|
|
26
|
-
FEModel,
|
|
27
|
-
GeneratedGeometryFEMConfig,
|
|
28
|
-
LoadCase,
|
|
29
|
-
run_generated_geometry_fem,
|
|
30
|
-
solve_linear,
|
|
31
|
-
)
|
|
32
|
-
from anysolver.runtime import LightweightFEMConfig, run_production_fem
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
The generic `GeneratedGeometryFEM*` names are the preferred workflow API.
|
|
36
|
-
Historical `AnyStructureFEM*` aliases remain available only for downstream
|
|
37
|
-
compatibility. Material selection is centralized in
|
|
38
|
-
`dnv_c208_steel_properties()` and `dnv_c208_steel_curve()`; the runtime facade
|
|
39
|
-
uses the same canonical table and validation.
|
|
40
|
-
|
|
41
|
-
The source code and tests are authoritative. Generated reports under
|
|
42
|
-
`reports/` are dated evidence snapshots and must be regenerated after solver
|
|
43
|
-
changes before making release claims.
|
|
44
|
-
|
|
45
|
-
## Functional overview
|
|
46
|
-
|
|
47
|
-
| Area | Implemented functionality |
|
|
48
|
-
| --- | --- |
|
|
49
|
-
| Model | Six DOFs per node; SI units; materials, density, nodal mass, shell/beam topology, supports, and MPC constraints. |
|
|
50
|
-
| Shells | 3- and 6-node triangles; 4-node MITC-style and 8-node Mindlin-Reissner quadrilaterals; stiffness, mass, pressure,
|
|
51
|
-
| Beams | 2-node and straight-sided 3-node Timoshenko beams with axial, biaxial bending, shear, torsion, consistent/lumped mass options, geometric stiffness, and optional fiber-section plasticity. |
|
|
52
|
-
| Coupling | Coincident or eccentric beam-shell kinematics through explicit interpolated MPC transformations. |
|
|
53
|
-
| Loads | Nodal force/moment, shell pressure, in-plane edge loads, acceleration/gravity, prescribed displacement, load combinations, proportional and staged nonlinear loads. |
|
|
54
|
-
| Linear analysis | Static single- and multiple-RHS solves, reactions and MPC-force diagnostics, free-free rigid-body nullspace handling, and sparse factorization reuse. |
|
|
55
|
-
| Modal and mass | Consistent mass assembly, point masses, model mass/inertia properties, constrained and free-free vibration modes. |
|
|
56
|
-
| Buckling | Linear eigenvalue buckling for beam axial force and shell
|
|
57
|
-
| Nonlinear static | Incremental Newton solution, adaptive stepping, force or displacement control, von Karman or opt-in corotational kinematics, layered shell J2 plasticity, beam fiber plasticity,
|
|
58
|
-
| Continuation | Bounded Crisfield-style spherical arc-length tracing through a first limit point and a guarded descending branch. |
|
|
59
|
-
| Dynamics | Newmark or HHT-alpha implicit transient response, Rayleigh damping, prescribed shell pressure patches, selected/envelope history storage, and memory preflight. |
|
|
60
|
-
| Impact/contact | One rigid sphere with frictionless penalty contact against shells and opt-in beam-axis segments; event substepping, Aitken relaxation, nonlinear material response, and engineering damage/erosion options. |
|
|
1
|
+
# ANYsolver finite-element solver
|
|
2
|
+
|
|
3
|
+
`anysolver` is a headless structural FE solver for beam,
|
|
4
|
+
shell, stiffened-panel, and cylindrical-shell analysis. It is an engineering
|
|
5
|
+
solver with an explicit qualification scope, not a general-purpose CAD,
|
|
6
|
+
contact, or fracture platform.
|
|
7
|
+
|
|
8
|
+
Install the released package with:
|
|
9
|
+
|
|
10
|
+
```powershell
|
|
11
|
+
python -m pip install ANYsolver
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
For coordinated local development with ANYstructure:
|
|
15
|
+
|
|
16
|
+
```powershell
|
|
17
|
+
python -m pip install -e C:\Github\ANYsolver
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Core analyses and the solver-owned generated-geometry workflow are available
|
|
21
|
+
directly from `anysolver`; the lightweight normalized flat-panel and cylinder
|
|
22
|
+
facade is exposed through `anysolver.runtime`:
|
|
23
|
+
|
|
24
|
+
```python
|
|
25
|
+
from anysolver import (
|
|
26
|
+
FEModel,
|
|
27
|
+
GeneratedGeometryFEMConfig,
|
|
28
|
+
LoadCase,
|
|
29
|
+
run_generated_geometry_fem,
|
|
30
|
+
solve_linear,
|
|
31
|
+
)
|
|
32
|
+
from anysolver.runtime import LightweightFEMConfig, run_production_fem
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
The generic `GeneratedGeometryFEM*` names are the preferred workflow API.
|
|
36
|
+
Historical `AnyStructureFEM*` aliases remain available only for downstream
|
|
37
|
+
compatibility. Material selection is centralized in
|
|
38
|
+
`dnv_c208_steel_properties()` and `dnv_c208_steel_curve()`; the runtime facade
|
|
39
|
+
uses the same canonical table and validation.
|
|
40
|
+
|
|
41
|
+
The source code and tests are authoritative. Generated reports under
|
|
42
|
+
`reports/` are dated evidence snapshots and must be regenerated after solver
|
|
43
|
+
changes before making release claims.
|
|
44
|
+
|
|
45
|
+
## Functional overview
|
|
46
|
+
|
|
47
|
+
| Area | Implemented functionality |
|
|
48
|
+
| --- | --- |
|
|
49
|
+
| Model | Six DOFs per node; SI units; materials, density, nodal mass, shell/beam topology, supports, and MPC constraints. |
|
|
50
|
+
| Shells | 3- and 6-node triangles; 4-node MITC-style and 8-node Mindlin-Reissner quadrilaterals; stiffness, mass, pressure, and stress recovery. The shell initial-stress operator includes membrane, bending, and second stress moments acting through the implemented Mindlin translation/director field. Q8R reduced integration is experimental and outside the qualified thin-bending/nonlinear-batch scope. |
|
|
51
|
+
| Beams | 2-node and straight-sided 3-node Timoshenko beams with axial, biaxial bending, shear, torsion, consistent/lumped mass options, geometric stiffness, and optional fiber-section plasticity. |
|
|
52
|
+
| Coupling | Coincident or eccentric beam-shell kinematics through explicit interpolated MPC transformations. |
|
|
53
|
+
| Loads | Nodal force/moment, dead or current-area follower shell pressure, in-plane edge loads, acceleration/gravity, prescribed displacement, load combinations, proportional and staged nonlinear loads. Follower pressure includes its exact, generally nonsymmetric external-load tangent. |
|
|
54
|
+
| Linear analysis | Static single- and multiple-RHS solves, reactions and MPC-force diagnostics, free-free rigid-body nullspace handling, and sparse factorization reuse. |
|
|
55
|
+
| Modal and mass | Consistent mass assembly, point masses, model mass/inertia properties, constrained and free-free vibration modes. |
|
|
56
|
+
| Buckling | Linear eigenvalue buckling for beam axial force and shell Mindlin initial-stress resultants, including sparse shift-invert and repeated-mode diagnostics. A follower-load stiffness can be included when its constrained tangent is symmetric; a general nonsymmetric follower eigenproblem is outside scope. |
|
|
57
|
+
| Nonlinear static | Incremental Newton solution, adaptive stepping, force or displacement control, dead or follower pressure, von Karman or opt-in corotational kinematics, rotated or consistent corotational tangent, layered shell J2 plasticity with a safeguarded local solve and analytical consistent tangent, beam fiber plasticity, stage-boundary commits, true preload/restart displacement control, and simplified element erosion. |
|
|
58
|
+
| Continuation | Bounded Crisfield-style spherical arc-length tracing through a first limit point and a guarded descending branch, including current-area follower pressure and its load tangent. |
|
|
59
|
+
| Dynamics | Newmark or HHT-alpha implicit transient response, Rayleigh damping, prescribed shell pressure patches, selected/envelope history storage, and memory preflight. |
|
|
60
|
+
| Impact/contact | One rigid sphere with frictionless penalty contact against shells and opt-in beam-axis segments; event substepping, Aitken relaxation, nonlinear material response, and engineering damage/erosion options. |
|
|
61
61
|
| Imperfections | Stress-free eigenmode, member-bow, plate-wave, flange-twist, explicit, and composite imperfection fields. |
|
|
62
|
-
|
|
|
63
|
-
|
|
|
64
|
-
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
-
|
|
92
|
-
|
|
93
|
-
-
|
|
94
|
-
|
|
95
|
-
- no
|
|
96
|
-
- no
|
|
97
|
-
-
|
|
98
|
-
the
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
-
|
|
108
|
-
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
-
|
|
112
|
-
|
|
113
|
-
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
62
|
+
| Initial fields | Element-local shell membrane/bending stress or membrane/curvature prestrain, arbitrary configured beam-fiber stress/prestrain distributions, zero-external-load equilibration, admissibility checks, and provenance kept separate from geometric imperfections. |
|
|
63
|
+
| Workflows | Normalized generated geometry to static/prestress/buckling; traceable static-to-buckling-to-imperfect nonlinear-capacity workflow. |
|
|
64
|
+
| Interchange | Pure-Python SESAM formatted FEM record/document parsing, guarded round-trip writing, supported semantic import to `FEModel`, coordinate transforms, beam orientation, and SIF shell-stress reading by load case. |
|
|
65
|
+
| Results | Result provenance; unified elastic or committed shell-layer/beam-fiber stress recovery; guarded Zienkiewicz-Zhu-style patch recovery for qualified shell neighborhoods; selected recovery; reaction filtering; validation diagnostics; deterministic baselines; benchmarks; and generated qualification reports. |
|
|
66
|
+
| External verification | Reproducible CalculiX input generation plus opt-in isolated execution, FRD/DAT parsing, solver provenance, and tolerance-controlled analytical comparison. Deck-only reports remain explicitly `not_executed` and make no numerical-agreement claim. |
|
|
67
|
+
|
|
68
|
+
Implemented does not automatically mean qualified for every geometry or load
|
|
69
|
+
regime. The live capability matrix is produced by
|
|
70
|
+
`write_production_readiness_artifacts()` and the verification manifest.
|
|
71
|
+
|
|
72
|
+
## Production scope
|
|
73
|
+
|
|
74
|
+
The qualified target is thin flat or cylindrical shell structure, with beam
|
|
75
|
+
stiffeners/girders represented through the documented coupling, inside the
|
|
76
|
+
verified mesh, material, distortion, eccentricity, and load ranges.
|
|
77
|
+
|
|
78
|
+
Important limits:
|
|
79
|
+
|
|
80
|
+
- no arbitrary CAD topology or automatic general-purpose meshing;
|
|
81
|
+
- Q8R is experimental: its hourglass stabilization is not qualified for thin
|
|
82
|
+
bending and it is deliberately excluded from nonlinear batch acceleration;
|
|
83
|
+
- the 3-node quadratic beam is straight-sided; curved members must be
|
|
84
|
+
represented by straight beam segments until a true curved formulation is
|
|
85
|
+
implemented;
|
|
86
|
+
- the shell initial-stress operator covers the in-plane `N`, `M`, and `H`
|
|
87
|
+
stress moments acting on Mindlin midsurface translations and director
|
|
88
|
+
gradients; it does not add drilling, transverse-normal-stress, or a
|
|
89
|
+
geometrically exact finite-rotation shell/director formulation;
|
|
90
|
+
- current-area follower pressure is supported in nonlinear static and
|
|
91
|
+
arc-length analyses, with its exact load tangent. Linear/dead pressure
|
|
92
|
+
remains the default. Linear buckling rejects a constrained nonsymmetric
|
|
93
|
+
follower-pressure pencil because general complex nonconservative
|
|
94
|
+
eigenanalysis is not implemented;
|
|
95
|
+
- no general shell-shell, body-body, frictional, rolling, or self-contact;
|
|
96
|
+
- no fluid-structure interaction, cavitation, or water-entry model;
|
|
97
|
+
- no cohesive cracks, remeshing, material separation, or fracture-mechanics
|
|
98
|
+
claim—the erosion models are engineering screens;
|
|
99
|
+
- no unrestricted deep post-buckling or automatic bifurcation branch switching;
|
|
100
|
+
- the consistent corotational tangent includes frame derivatives and is
|
|
101
|
+
selected automatically for follower pressure, but its numerical
|
|
102
|
+
frame-sensitivity evaluation is costlier than the rotated tangent used by
|
|
103
|
+
default for ordinary corotational solves;
|
|
104
|
+
- material-history-aware recovery requires retained, matching committed
|
|
105
|
+
nonlinear layer/fiber states; missing or invalid state is reported and the
|
|
106
|
+
affected components fall back explicitly to elastic reconstruction;
|
|
107
|
+
- the guarded patch-recovery fit is qualified only for locally planar,
|
|
108
|
+
consistently oriented, homogeneous, full-integration Q4 or Q8 shell
|
|
109
|
+
neighborhoods. Discontinuities remain separate, and the optional normalized
|
|
110
|
+
stress-L2 discrepancy is a diagnostic—not an energy-norm error estimate;
|
|
111
|
+
- initial stress/prestrain fields are qualified only in element-local reference
|
|
112
|
+
coordinates with `kinematics="von_karman"`. Shell fields use the documented
|
|
113
|
+
membrane/positive-face-bending convention, and beam fields require a
|
|
114
|
+
configured fiber section. Input stress must be admissible for the supplied
|
|
115
|
+
hardening state; equilibration may redistribute it and does not reconstruct
|
|
116
|
+
the manufacturing history. A field-bearing restart also requires its
|
|
117
|
+
matching converged displacement vector;
|
|
118
|
+
- the analytical plane-stress tangent is branch-consistent. The numerical
|
|
119
|
+
derivative remains an oracle and automatic invalid-row fallback; local
|
|
120
|
+
yield-residual nonconvergence fails closed;
|
|
121
|
+
- no unverified material laws or distortion ranges;
|
|
122
|
+
- SESAM `FEModel` export remains outside the supported interchange gate;
|
|
123
|
+
- CalculiX comparison requires a compatible local executable and an explicit
|
|
124
|
+
execution request. Deck generation alone is a reproducibility handoff, not
|
|
125
|
+
external numerical evidence.
|
|
126
|
+
|
|
127
|
+
Use `validate_production_model()`, the analysis-specific preflight checks, and
|
|
128
|
+
the generated production-scope artifacts before production use.
|
|
129
|
+
|
|
130
|
+
## Documentation map
|
|
131
|
+
|
|
132
|
+
- [`ARCHITECTURE.md`](docs/ARCHITECTURE.md): package boundaries, analysis flow, and
|
|
133
|
+
invariants.
|
|
134
|
+
- [`THEORY.md`](docs/THEORY.md): implemented formulations and validity limits.
|
|
135
|
+
- [`ARC_LENGTH.md`](docs/ARC_LENGTH.md): continuation controls and use.
|
|
136
|
+
- [`NONLINEAR_PERFORMANCE.md`](docs/NONLINEAR_PERFORMANCE.md): nonlinear assembly,
|
|
137
|
+
sparse backend, threading, and diagnostics.
|
|
138
|
+
- [`QUALITY_CONTROL.md`](docs/QUALITY_CONTROL.md): verification commands, evidence
|
|
139
|
+
hierarchy, and current checked status.
|
|
140
|
+
- [`reference_cases/README.md`](docs/reference_cases/README.md):
|
|
141
|
+
local CalculiX/PrePoMax reference-case layout.
|
|
142
|
+
- [`MIGRATION.md`](MIGRATION.md): source provenance, inclusion boundary, and
|
|
143
|
+
import changes.
|
|
144
|
+
|
|
145
|
+
## Basic verification
|
|
146
|
+
|
|
147
|
+
From the repository root:
|
|
148
|
+
|
|
149
|
+
```powershell
|
|
150
|
+
python -m pytest tests -q -p no:cacheprovider
|
|
151
|
+
python run_qc.py --no-save
|
|
152
|
+
python scripts/run_fe_verification.py
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
The last command regenerates the canonical JSON and Markdown evidence under
|
|
156
|
+
`reports/verification/`. Its default external-reference mode generates
|
|
157
|
+
handoff decks with status `not_executed`; that status is not a pass or a claim
|
|
158
|
+
of numerical agreement. To execute the comparisons, provide a compatible
|
|
159
|
+
CalculiX executable on `PATH`, through `ANYSOLVER_CALCULIX_EXECUTABLE`, or with
|
|
160
|
+
`--calculix`, and run:
|
|
161
|
+
|
|
162
|
+
```powershell
|
|
163
|
+
python scripts/run_fe_verification.py --execute-calculix
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
An external case becomes passing evidence only after isolated execution,
|
|
167
|
+
successful FRD/DAT parsing, and every declared comparison meeting its
|
|
168
|
+
tolerance.
|