Repository navigation
Conversation
|
The cause behind Plan for this PR once tmech#38 is merged and tagged: bump the tmech pin, drop |
|
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. hencky_elasticity — needs changes
|
|
Review findings addressed in the last commit (tmech#38 is merged, pin → main 46d8fdd):
Not done here: a 2D runtime test — |
3d2fd8e to
4e92931
Compare
0a1f33c to
3506d30
Compare
4e92931 to
bf49f47
Compare
3506d30 to
1300c84
Compare
bf49f47 to
e5e56ce
Compare
1300c84 to
1d9084a
Compare
|
Producer/consumer pass: |
e5e56ce to
3693657
Compare
1d9084a to
cf75acb
Compare
3693657 to
d067a3e
Compare
cf75acb to
ec31ebe
Compare
d067a3e to
a586b3c
Compare
ec31ebe to
ebfb2d6
Compare
a586b3c to
6cd5670
Compare
ebfb2d6 to
df4dddb
Compare
6cd5670 to
8a28695
Compare
df4dddb to
a0b41e5
Compare
8a28695 to
11c29c7
Compare
a0b41e5 to
2e918d1
Compare
11c29c7 to
a5df503
Compare
2e918d1 to
d2a423f
Compare
core/log_strain.h: ln V and d ln V / dF from an eigendecomposition of F F^T (Eigen) with the divided-difference derivative, continuous through repeated eigenvalues; tmech's log of V gives wrong values at eigenvalue splits of about 1e-7 (petlenz/tmech#37). hencky_elasticity: tau = C : (ln V - eps_eig), P = tau F^-T, consistent dP/dF, optional eigenstrain. Report with the exact uniaxial and volumetric closed forms; reports take a per-case fd_step.
…he phase materials The composite is split into two nodes. mean_field_strain consumes the composite strain increment and the phases' tangents, fractions and Eshelby tensors and produces one strain per phase (history) and the concentration tensors, for the voigt, reuss, hill, dilute and mori_tanaka kernels. The phase materials consume those strains through strain_source / strain_property like any other strain. mean_field_stress averages the stresses and tangents they produce with the concentrations and reports a residual, the difference between the tangent a phase node carried and its material's current one. With linear phases every edge is global, one pass is exact and the result equals mean_field_tangent with a linear_stress to round-off, the phase strains and stresses available as properties. docs/mean_field.md describes the composite layer.
tmech main (46d8fdd, after tmech#38) is exact at repeated eigenvalues, so the material uses ln b from tmech::log(b) and its derivative, is Dim generic, and core/log_strain.h with its Eigen dependency goes away. The per-case fd_step of the reports is optional and no longer overrides the driver default; the 1e-6 workaround in the finite-strain standard is dropped (all three finite-strain reports pass at 1e-7). New tests: tangent at repeated and nearly repeated stretches (the tmech#37 symptom), objectivity P(RU) = R P(U) and P(R) = 0. Mapping document and card converter list the Hencky family.
a5df503 to
53d3c19
Compare
d2a423f to
72adaf0
Compare
…rain mean_field_strain and mean_field_stress: strain localisation around the phase materials (linear)
Closes #113. Part of the uvwmaterial port (#94); stacked on #140.
materials/hencky_elasticity.h(hencky_elasticity): ε = ln V = ½ ln b with b = FFᵀ, τ = C : (ε − ε_eig), P = τ F⁻ᵀ, dP/dF = (C : d ln V/dF)·F⁻ᵀ − P ⊠̄ F⁻¹ with d ln V/dF = ½ (d ln b/db) : (I⊠F + F⊠̄I); the stiffness a consumed property (tangent_source, e.g. anisotropic_tangentof produced K and G — so cure-dependent moduli are a wiring), optionaleigenstrain_source(thermal or chemical eigenstrain in the log strain), outputlog_strain. Dim generic. Replaceshencky_strains_linear_elasticand its thermo / thermo-chemo variants (the latter arehencky_elasticityplusthermal_eigenstrain).tmech pin → main
46d8fdd(tmech#38). The report of this PR found that tmech'slogandpolar_decompositionwere wrong at near-repeated eigenvalues (petlenz/tmech#37); the first version of this PR carried an interimcore/log_strain.hon Eigen. With the fix merged the material usestmech::log(b)and.derivative()directly, and the interim file, its tests and the Eigen include are gone. A tag would be preferable to the commit;FIND_PACKAGE_ARGS 1.2still accepts an installed 1.2.0, which lacks the fix — the next tmech release should raise it.Reports:
load_case::fd_stepisstd::optional; a case may set it, otherwise the driver default applies instead of being overwritten. The finite-strain standard'sfd_step: 1e-6workaround is dropped;report_hencky_elasticity,report_neo_hookeandreport_saint_venant_kirchhoffpass at 1e-7.docs/materials/hencky_elasticity/report.json: the finite-strain standard plus the uniaxial, volumetric and simple-shear closed forms.Tests (
test_hencky_elasticity, 7): dilatation P = 3K ln λ/λ exactly; the small-strain limit is linear elasticity; under uniaxial stress ln F₂₂ = −ν ln F₁₁ exactly and P₁₁ = E ln λ/λ, tangent against central differences at λ = 1.1, 1.5, 0.7 and in simple shear; the tangent at exactly and nearly repeated stretches (the tmech#37 symptom: (1.15, 1.15, 1), (1.2, 1.2, 1.2), (1.15, 1.15 + 1e-9, 1), (1.204, 0.9458, 0.9458)); objectivity P(RU) = R P(U) and P(R) = 0; constrained heating and free expansion with an eigenstrain; JSON.Docs:
docs/uvwmaterial-mapping.mdrow for the Hencky family; the card converter pointshencky_strains_linear_*athencky_elasticity(likesaint_venant_kirchhoff, a finite-strain card needs anexternal_deformation_gradient_sourcewritten by hand).907/907 tests pass (GCC 14, reports on).
JSON input
New material types:
hencky_elasticity. Ajson_modeldocument that loads (theFromJsontest of the PR):{"materials": [ {"type": "external_deformation_gradient_source", "name": "F"}, {"type": "constant_scalar", "name": "K", "value": 166.67}, {"type": "constant_scalar", "name": "G", "value": 76.92}, {"type": "isotropic_tangent", "name": "stiffness", "K_source": "K", "G_source": "G"}, {"type": "hencky_elasticity", "name": "h", "deformation_gradient_source": "F", "tangent_source": "stiffness"} ]}tangent_sourcea produced small-strain stiffness (cure-dependent moduli are a wiring); optionaleigenstrain_source(athermal_eigenstrain); outputsstress(P),tangent(dP/dF),log_strain.