Repository navigation
Cure-dependent inclusion fractions and chemical shrinkage as an eigenstrain - #137
Merged
Merged
Conversation
This was referenced Oct 16, 2026
petlenz
force-pushed
the
feature/kamal-sourour-rate
branch
from
October 16, 2026 23:43
f56825b to
515796b
Compare
petlenz
force-pushed
the
feature/curing-eigenstrain
branch
from
October 16, 2026 23:43
c660cef to
4a060f0
Compare
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. curing fractions / chemical shrinkage — ready with one should
|
This was referenced Oct 17, 2026
petlenz
force-pushed
the
feature/kamal-sourour-rate
branch
2 times, most recently
from
October 17, 2026 14:31
e4f80c1 to
316263a
Compare
petlenz
force-pushed
the
feature/curing-eigenstrain
branch
from
October 17, 2026 14:40
4a060f0 to
bd0004d
Compare
Member
Author
petlenz
force-pushed
the
feature/kamal-sourour-rate
branch
from
October 17, 2026 15:57
316263a to
9928a69
Compare
petlenz
force-pushed
the
feature/curing-eigenstrain
branch
from
October 17, 2026 16:05
bd0004d to
6eff511
Compare
petlenz
force-pushed
the
feature/kamal-sourour-rate
branch
from
October 17, 2026 17:04
9928a69 to
971cf5a
Compare
petlenz
force-pushed
the
feature/curing-eigenstrain
branch
from
October 17, 2026 17:12
6eff511 to
30fbcba
Compare
Member
Author
|
Producer/consumer pass: the curing inclusion gives its fraction only through |
petlenz
force-pushed
the
feature/kamal-sourour-rate
branch
from
October 17, 2026 21:36
971cf5a to
6966212
Compare
petlenz
force-pushed
the
feature/curing-eigenstrain
branch
from
October 17, 2026 21:36
30fbcba to
bc568df
Compare
petlenz
force-pushed
the
feature/kamal-sourour-rate
branch
from
October 17, 2026 22:46
6966212 to
5463017
Compare
petlenz
force-pushed
the
feature/curing-eigenstrain
branch
from
October 17, 2026 22:46
bc568df to
f964442
Compare
petlenz
force-pushed
the
feature/kamal-sourour-rate
branch
from
October 18, 2026 12:32
5463017 to
8558f90
Compare
petlenz
force-pushed
the
feature/curing-eigenstrain
branch
from
October 18, 2026 12:51
f964442 to
a4bd728
Compare
petlenz
force-pushed
the
feature/kamal-sourour-rate
branch
from
October 18, 2026 13:38
8558f90 to
e2a4434
Compare
petlenz
force-pushed
the
feature/curing-eigenstrain
branch
from
October 18, 2026 13:38
a4bd728 to
4c1aac1
Compare
petlenz
force-pushed
the
feature/kamal-sourour-rate
branch
from
October 18, 2026 18:55
e2a4434 to
39adb32
Compare
petlenz
force-pushed
the
feature/curing-eigenstrain
branch
from
October 18, 2026 18:56
4c1aac1 to
93a893f
Compare
petlenz
force-pushed
the
feature/kamal-sourour-rate
branch
from
October 18, 2026 20:03
39adb32 to
2afbfb9
Compare
petlenz
force-pushed
the
feature/curing-eigenstrain
branch
from
October 18, 2026 20:03
93a893f to
8a07c8c
Compare
petlenz
force-pushed
the
feature/kamal-sourour-rate
branch
from
October 18, 2026 20:22
2afbfb9 to
e7d2ffe
Compare
petlenz
force-pushed
the
feature/curing-eigenstrain
branch
from
October 18, 2026 20:22
8a07c8c to
e1819c4
Compare
core/isotropize.h: K = Pvol::C / Dim, G = Pdev::C / (2 (Dim(Dim+1)/2 - 1)), and the isotropic part built from them. core/lebedev.h with generated tables (tools/extract_lebedev.py from uvwmaterial's rule, precisions 3 to 23, up to 194 points): spherical means and integrals of tensor-valued functions of the direction. eshelby::depolarisation for ellipsoids via Carlson's R_J, the elliptic cylinder in closed form, and the cylinder along a direction.
Phases are materials providing a tangent, with volume fractions; outputs the effective tangent, the stress and the strain concentration tensors (sum c_i A_i = Isym). Report with the closed forms of the three kernels and their ordering. Report generator: derived values resolve in dependency order, independent of the key order.
…ent producer over phases The composite consumes the phases' produced tangents, fractions and Eshelby tensors and produces the effective tangent and the concentrations; the stress is a linear_stress on the tangent. It reaches into no other node: no material_ref, no eshelby(nu), no isotropisation of the matrix. Self-consistent is a graph cycle closed by one local edge: isotropic_moduli on the composite tangent produces nu of the effective medium, the Eshelby nodes read it with nu_edge = local (from nu_initial on the first pass), and one update() is one relaxed Picard step with "residual" as its error. The matrix is a phase with its own Eshelby node, so its shape is no longer a hard-coded sphere. material_point_evaluator closes the fixed point per host call (residual_property, residual_tolerance, max_passes; the report point names them). isotropic_moduli with a non-positive tolerance projects without the isotropy check, which the effective medium needs.
…ution Spheroidal fibres in an isotropic matrix with the second-order orientation tensor: Mori-Tanaka with the orientation-averaged dilute concentration, or the averaged unidirectional stiffness. Eshelby tensors per direction are cached for the matrix Poisson ratio. Report with aligned, injection-moulded and random states against the unidirectional composite and isotropy.
core/orientation.h: fit_acg solves a_i = R_D(b_j, b_k, b_i) / 3 with det b = 1 by Newton in the principal frame of the orientation tensor (any A, not only diagonal), the aligned case as a single direction, planar cases by an eigenvalue floor; nodes maps the Lebedev rule through B^-1/2; average integrates a function of the direction.
… in the fibre frame Both phases come in as produced properties (tangent, fraction, the fibre's Eshelby tensor along x1); the composite consumes them, forms the dilute concentration once in the fibre frame, rotates onto the quadrature directions with otimesu(R, R) fixed per direction, and produces the tangent and the two concentrations. The stress is a linear_stress on the tangent. No material_ref.
…history
sigma_{n+1} = sigma_n + C : (eps_{n+1} - eps_n) with the tangent read from
another material, for path-dependent tangents. Report: equals the total
form on every path, a closed path returns to zero, exact for any step.
Drivers: the convergence test also scales with |C| |d eps| (|A| |dF|), so
a hypoelastic stress crossing zero under stress control converges.
eps_th = alpha (T - T_ref) I from a scalar temperature source; linear elasticity subtracts an optional eigenstrain: sigma = C : (eps - eps_eig).
dz/dt = (k1 + k2 z^m) (1 - z)^n with Arrhenius rate constants, as a rate law for rk_integrator next to curing_rate (the autocatalytic term alone; nth order is curing_rate with m = 0).
inclusion takes a fraction_source ("material::property") so the volume
fraction can follow the degree of cure; the chemical shrinkage
beta xi I is thermal_eigenstrain with the cure state as its source.
petlenz
force-pushed
the
feature/kamal-sourour-rate
branch
from
October 19, 2026 04:07
e7d2ffe to
9037f62
Compare
petlenz
force-pushed
the
feature/curing-eigenstrain
branch
from
October 19, 2026 04:07
e1819c4 to
9af23f2
Compare
…ls-and-constants # Conflicts: # tests/CMakeLists.txt
…eshelby-tensors # Conflicts: # tests/CMakeLists.txt
…v-depolarisation # Conflicts: # tests/CMakeLists.txt
…/rule-of-mixture # Conflicts: # tests/CMakeLists.txt
# Conflicts: # include/numsim-materials/report/report_json.h # tests/CMakeLists.txt
residual_source, residual_tolerance and max_passes are driver parameters (material_point's defaults) and keys of the report's "point"; the mean-field tangent report uses them for the self-consistent fixed point.
…averaging # Conflicts: # tests/CMakeLists.txt
…-composite # Conflicts: # tests/CMakeLists.txt
…-elasticity # Conflicts: # include/numsim-materials/umat/deformation_gradient_driver.h # include/numsim-materials/umat/material_point_driver.h # tests/CMakeLists.txt
…genstrain # Conflicts: # tests/CMakeLists.txt
…-rate # Conflicts: # tests/CMakeLists.txt
…rain # Conflicts: # tests/CMakeLists.txt
petlenz
marked this pull request as ready for review
October 27, 2026 17:50
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #115. Part of the uvwmaterial port (#94); stacked on #136.
uvwmaterial's
eigenstrain_curing_material_baseanddegree_of_cure_dependent_materialbecome two wirings rather than classes:thermal_eigenstrainwith the degree of cure as its scalar source ("temperature_source": "cure","alpha": beta, reference 0); the integrator'sstateis a history like a temperature source's. Nothing new to port; the test pins it.phasereads its fraction from any producer (fraction_source/fraction_property, e.g."cure","state"of ascalar_stepperor aweighted_sumoutput); itsvolume_fractionoutput follows that property every update,scalar_complement_weightproduces the matrix fraction 1 − c, andmean_field_tangentreads both. Cure-dependent moduli already go throughweighted_sum.Tests (
test_curing_eigenstrain, 3): the phase fraction follows its source and the Mori–Tanaka bulk modulus follows the analytic formula at each value; constrained shrinkage gives −3Kβξ;fraction_sourcefrom JSON.No report yet (time-driven point, #126).
924/924 tests pass (GCC 14, reports on).