Skip to main content

Module mixture

Module mixture 

Source
Expand description

Two substances made into one, and the honest answer about what that one is.

A motor is copper, electrical steel, magnets and air. A populated board is FR-4, copper and solder. A printed part is PLA and voids. A thermal buffer is a wax in an aluminium matrix. Every one of those wants to be one Substance so a lumped model or a coarse grid can hold it, and the properties of that one substance are not the properties of its main constituent — Substance::with_specific_heat says so and is worth a factor of two on a motor.

What this module refuses to do is make the numbers up. The properties of a mixture divide into three kinds, and conflating them is the whole failure mode:

what a mixture rule can say
density, volumetric heat capacity, latent heatexact, from conservation alone
conductivity, stiffnessbounded. No single value exists without knowing the microstructure
emissivitynothing. It is a property of the surface, and a mixture has no surface

The middle row is the one that matters, and it is not a small effect. A 50/50 aluminium and borosilicate composite conducts somewhere between 2.21 and 84.06 W/m·K — a factor of 38 — and which end depends entirely on whether the glass is in plates across the flux or in fibres along it. Both extremes are realisable. A library that answered 0.5·167 + 0.5·1.114 would be handing back the upper bound of a 38-fold range as if it were a measurement. On a half-copper, half-FR-4 board it is a 335-fold range.

So Mix reports the exact properties as values and the bounded ones as bounds, and Mix::as_substance makes the caller supply the conductivity and refuses one outside the bounds. Choosing is the caller’s job; the library’s job is to refuse an impossible choice.

§The bounds, and why there are two pairs

Voigt and Reuss are the arithmetic and harmonic means by volume fraction. They hold for any microstructure whatever and they are attained — a laminate loaded along its layers is exactly Voigt, and the same laminate across its layers is exactly Reuss. a_composite.rs measures both on one block, which is also the demonstration that no single number can exist: the same composite has two different conductivities depending on the direction of the flux.

Hashin–Shtrikman are tighter and buy that with an assumption: the microstructure is statistically isotropic. A laminate is not, which is why HS does not contain the laminate’s own answers and is not a replacement for the outer pair. For a foam, a filled polymer or a packed powder it is the pair to use, and it is narrower — for the aluminium and glass above, 4.33 to 67.6 against 2.21 to 84.06, which takes the range from 38-fold to 16-fold. Narrower and still wide: with a 150-fold contrast between the phases no bound is going to be comfortable, and that is the honest state of the problem rather than a deficiency of the bound.

There is an HS pair for stiffness too — Mix::shear_hashin_shtrikman and Mix::bulk_hashin_shtrikman — and how tight it is turns out to depend on which modulus you ask about. For a three-dimensional checkerboard, measured, the upper bound on the shear modulus is tight to within 0.5% and the one on the bulk modulus is at least 2.8% loose. That is not something the algebra says, and a_checkerboard.rs is where it is measured.

§Stiffness, and the reason there is no effective (E, ν)

Mix::shear_bounds and Mix::p_wave_modulus_bounds arrived once Waves::fill existed, because until there was per-element material in pantometry-elastic there was nothing in this workspace a bound on stiffness could be checked against, and a bound nothing can falsify is a comment rather than an API. Both are now checked against Backus averaging — the exact long-wavelength moduli of a layered elastic medium — in crates/pantometry-elastic/tests/a_layered_wave.rs, and the harmonic end again statically in a_layered_block.rs, which gets it nine orders sharper because an elliptic solve has no time in it: 4.8e-13 against the wave’s 3.5e-4.

What is deliberately absent is a Young’s modulus and a Poisson ratio for the mixture, and that absence is the physics rather than a gap. A composite of two isotropic materials is generally anisotropic. A laminate has a different stiffness along its layers than across them — measured, the shear modulus differs by a factor of 5.5 for aluminium against PLA — so there is no single pair (E, ν) that describes it, and a function returning one would be inventing an isotropy the material does not have. Mix therefore does not produce an crate::substance::MechanicalProps and Mix::as_substance leaves the mechanical block absent.

No yield strength either, and that one is not a missing feature. A composite’s yield is governed by the weaker phase and by the interface between them, so it is not a mixture of the two yields in any ordering — Voigt–Reuss does not bound it and a rule of mixtures for it would be wrong rather than imprecise.

Structs§

Mix
A composite: substances and the fraction of the volume each occupies.