Skip to content

Nonlinear Voigt rule of mixtures as a weighted_sum wiring - #140

Draft
petlenz wants to merge 1 commit into
feature/uvwmaterial-mappingfrom
feature/voigt-composite
Draft

petlenz wants to merge 1 commit into
feature/uvwmaterial-mappingfrom
feature/voigt-composite

Conversation

@petlenz

@petlenz petlenz commented Oct 16, 2026 •

Copy link
Copy Markdown
Member

Part of #117 (the Voigt half) and of the uvwmaterial port (#94); stacked on #139.

small_strain_rule_of_mixture_history with the Voigt kernel (equal strain in every phase, history per phase) needs no new material: each phase reads the composite strain source, and weighted_sum with constant_scalar fractions produces Σ cᵢ σᵢ and Σ cᵢ Cᵢ — the consistent Voigt tangent. This PR pins that with tests and documents it in the mapping.

Tests (test_voigt_composite, 2): a J2 phase and an elastic phase under uniaxial stress through the driver — the composite stress equals the fraction-weighted phase stresses at every step while the plastic phase yields, and the tangent matches central differences to 1e-6; while elastic the wiring equals the linear rule of mixtures (phase nodes on the two tangents, rule_of_mixture voigt, linear_stress) in stress and tangent.

Not in this PR: the Reuss kernel (equal stress, phase strains from an inner Newton with history) waits for the vector Newton work in flight; and weighted_sum cannot be written in JSON yet because the parameter converter has no reader for its terms (vector of string pairs), so there is no report for this wiring — both noted on #117. The converter (#139) emits the same Voigt wiring as rule_of_mixture + mean_field_stress for a card with a nonlinear phase.

942/942 tests pass (GCC 14, reports on).

@petlenz

petlenz commented Oct 17, 2026

Copy link
Copy Markdown
Member Author

Review findings (design, tmech expressions instead of component loops, modern C++, comments, tests, correctness). Severity: must = wrong result, hang, build break or unreachable feature; should = design, duplication, accuracy; nit = style.

Voigt composite wiring — ready (with one should)

  • [should] json_parameter_converter.h:117 already has variant<double, pair<string,string>>; a vector<pair<string,string>> reader is small and would let this ship docs/materials/voigt_composite/report.json instead of "not from JSON yet".

@petlenz
petlenz force-pushed the feature/uvwmaterial-mapping branch from b35575b to 68a6d39 Compare October 17, 2026 14:51
@petlenz
petlenz force-pushed the feature/voigt-composite branch from 3d2fd8e to 4e92931 Compare October 17, 2026 15:01
@petlenz
petlenz force-pushed the feature/uvwmaterial-mapping branch from 68a6d39 to d920fb3 Compare October 17, 2026 16:16
@petlenz
petlenz force-pushed the feature/voigt-composite branch from 4e92931 to bf49f47 Compare October 17, 2026 16:16
@petlenz
petlenz force-pushed the feature/uvwmaterial-mapping branch from d920fb3 to fdaa5f7 Compare October 17, 2026 17:22
@petlenz
petlenz force-pushed the feature/voigt-composite branch from bf49f47 to e5e56ce Compare October 17, 2026 17:22
@petlenz

petlenz commented Oct 17, 2026

Copy link
Copy Markdown
Member Author

Rebased: the linear reference is a rule_of_mixture over two inclusion phases fed by the same c_plastic/c_elastic constants the weighted_sum wiring uses.

@petlenz
petlenz force-pushed the feature/uvwmaterial-mapping branch from fdaa5f7 to 00adc74 Compare October 17, 2026 21:44
@petlenz
petlenz force-pushed the feature/voigt-composite branch from e5e56ce to 3693657 Compare October 17, 2026 21:44
@petlenz
petlenz force-pushed the feature/uvwmaterial-mapping branch from 00adc74 to 439b34d Compare October 17, 2026 22:46
@petlenz
petlenz force-pushed the feature/voigt-composite branch from 3693657 to d067a3e Compare October 17, 2026 22:46
@petlenz
petlenz force-pushed the feature/uvwmaterial-mapping branch from 439b34d to c81bf8f Compare October 18, 2026 13:13
@petlenz
petlenz force-pushed the feature/voigt-composite branch from d067a3e to a586b3c Compare October 18, 2026 13:25
@petlenz
petlenz force-pushed the feature/uvwmaterial-mapping branch from c81bf8f to d9a9773 Compare October 18, 2026 13:38
@petlenz
petlenz force-pushed the feature/voigt-composite branch from a586b3c to 6cd5670 Compare October 18, 2026 13:38
@petlenz
petlenz force-pushed the feature/uvwmaterial-mapping branch from d9a9773 to 76c0d56 Compare October 18, 2026 18:55
@petlenz
petlenz force-pushed the feature/voigt-composite branch from 6cd5670 to 8a28695 Compare October 18, 2026 18:55
@petlenz
petlenz force-pushed the feature/uvwmaterial-mapping branch from 76c0d56 to 083302e Compare October 18, 2026 20:03
@petlenz
petlenz force-pushed the feature/voigt-composite branch from 8a28695 to 11c29c7 Compare October 18, 2026 20:03
@petlenz
petlenz force-pushed the feature/uvwmaterial-mapping branch from 083302e to b6f2221 Compare October 18, 2026 20:22
@petlenz
petlenz force-pushed the feature/voigt-composite branch from 11c29c7 to a5df503 Compare October 18, 2026 20:22
Every phase reads the composite strain; weighted_sum with constant_scalar
fractions gives the Voigt stress and the consistent tangent. Tested with
a J2 and an elastic phase under uniaxial stress against the weighted
phase stresses and against rule_of_mixture while elastic.
@petlenz
petlenz force-pushed the feature/uvwmaterial-mapping branch from b6f2221 to 98ec074 Compare October 19, 2026 04:07
@petlenz
petlenz force-pushed the feature/voigt-composite branch from a5df503 to 53d3c19 Compare October 19, 2026 04:07
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.

1 participant