Coupled multiphysics
Overview
Every physics so far solved for a single field — a displacement, a temperature, a potential. Real devices often couple two fields, so that one drives the other: a voltage that strains a crystal, a temperature gradient that builds a voltage, a fluid pressure that deforms a porous solid. These are coupled problems, and the same solve(Physics(), mesh, material; …) marker pattern handles them; the only difference is that a coupled solve returns a NamedTuple of fields.
Piezoelectricity
A piezoelectric material — quartz, PZT, PVDF — couples mechanics to electrostatics. Apply a voltage and it strains (the actuator effect); strain it and it charges (the sensor effect). The constitutive law adds a coupling term in both directions,
\[\boldsymbol{\sigma} = C\varepsilon - e^{T}E , \qquad D = e\,\varepsilon + \epsilon E ,\]
so stress $\boldsymbol{\sigma}$ depends on the electric field $E$ as well as the strain $\varepsilon$, and the electric displacement $D$ depends on the strain. Rasmah solves the coupled displacement–potential system as one linear block.
Rasmah.Piezoelectricity — Type
PiezoelectricityElectro-mechanical coupling: solve for the displacement :u and the electric potential :φ.
Theory
A piezoelectric material couples mechanics and electrostatics: an applied voltage strains it (the actuator effect), and an applied strain charges it (the sensor effect). The coupled constitutive law is
\[\boldsymbol{\sigma} = C\varepsilon - e^{T}E, \qquad D = e\,\varepsilon + \epsilon E,\]
where $C$ is the elastic stiffness, $e$ the piezoelectric coupling (related to the strain matrix d), and $\epsilon$ the permittivity. Rasmah solves the coupled displacement–potential system directly.
Solving
solve(Piezoelectricity(), m, material; fixed_u, loads_u, fixed_φ, loads_φ) returns (; u, φ). The material supplies the stiffness C, the piezoelectric strain matrix d, and the permittivity ε (e.g. pzt).
Example
julia> Piezoelectricity() isa AbstractPhysics
trueA worked example: a voltage-driven actuator
Apply a $100\ \text{V}$ potential across a PZT block and watch it strain:
m = tetrahedralize_box(1.0, 1.0, 1.0, 4, 4, 4)
left = nodes_in_box(m, [0.0, 0.0, 0.0], [0.0, 1.0, 1.0])
right = nodes_in_box(m, [1.0, 0.0, 0.0], [1.0, 1.0, 1.0])
r = solve(Piezoelectricity(), m, pzt;
fixed_u = left,
fixed_φ = (left => 0.0, right => 100.0))
maximum(abs.(r.u))1.56896928398627e-8 mThe voltage strains the crystal through the inverse piezoelectric effect. The potential itself ramps from $0$ to $100\ \text{V}$ across the block:
maximum(abs.(r.φ))100.0 m^2·kg/(s^3·A)vtk(m; field=r.φ, fieldname="φ", edges=false)Thermoelectricity
A temperature gradient across a conductor also drives an electric potential — the Seebeck effect, which is how a thermocouple works. Rasmah couples the heat equation to the charge equation through the Seebeck coefficient $S$: a temperature difference $\Delta T$ builds a potential $S\,\Delta T$.
Rasmah.Thermoelectricity — Type
ThermoelectricityThermo-electric (Seebeck/Peltier) coupling: solve for the temperature :T and the electric potential :φ.
Theory
A temperature gradient across a conductor drives an electric potential — the Seebeck effect. The reverse, an electric current driving heat transport, is the Peltier effect. Rasmah solves the coupled heat + charge system, with the Seebeck coefficient $S$ coupling the temperature gradient to the potential.
Solving
solve(Thermoelectricity(), m, material; fixed_T, loads_T, fixed_φ, loads_φ) returns (; T, φ). The material supplies the thermal conductivity k, the electrical conductivity σ, and the Seebeck coefficient S. The Seebeck voltage across a temperature difference $\Delta T$ is $S\,\Delta T$.
Example
julia> Thermoelectricity() isa AbstractPhysics
trueA worked example: the Seebeck voltage
Hold a conductor at $0\ \text{K}$ on one face and $100\ \text{K}$ on the other, with a Seebeck coefficient of $10^{-4}\ \text{V/K}$:
te = Material(youngs_modulus=200e9, poisson_ratio=0.3, thermal_conductivity=50.0,
electrical_conductivity=1e7, seebeck_coefficient=1e-4)
r = solve(Thermoelectricity(), m, te;
fixed_T = (left => 0.0, right => 100.0),
fixed_φ = (left => 0.0))
maximum(abs.(r.φ))0.010000000000000018 m^2·kg/(s^3·A)The Seebeck voltage comes out $S\,\Delta T = 10^{-4} \cdot 100 = 0.01\ \text{V}$ — exactly the coefficient times the temperature drop:
vtk(m; field=r.T, fieldname="T", edges=false)Poroelasticity
A fluid-saturated porous solid — soil, rock, biological tissue — deforms when its pore fluid is pressured, and the deformation squeezes the pores back. Biot's theory couples the solid displacement $u$ to the pore pressure $p$: pressure contributes an isotropic stress $-\alpha\,p\,I$ ($\alpha$ the Biot coefficient), and the fluid flows by Darcy's law with permeability $k$.
Rasmah.PoroElasticity — Type
COVEXCLLINE
PoroElasticity # COV_EXCL_LINEBiot quasi-static poroelasticity: solve for the displacement :u and the pore pressure :p.
Theory
A porous solid saturated with fluid (soil, rock, tissue) deforms when the pore fluid is pressured — and the deformation in turn squeezes the pores. Biot's theory couples the solid displacement $u$ to the pore pressure $p$: the effective stress is $\boldsymbol{\sigma} = C\varepsilon - \alpha\,p\,I$, where $\alpha$ is the Biot coefficient (how much pressure couples to stress), and fluid flow obeys Darcy's law with permeability $k$.
Solving
solve(PoroElasticity(), m, material, k, α; fixed_u, loads_u, fixed_p, loads_p) returns (; u, p). The material supplies the stiffness C; k is the permeability and α the Biot coefficient (passed positionally).
Example
julia> PoroElasticity() isa AbstractPhysics
trueA worked example: pressuring a porous block
Pressurize one face of a porous solid and watch it swell:
rock = Material(youngs_modulus=200e9, poisson_ratio=0.3)
r = solve(PoroElasticity(), m, rock, 1e-12, 0.6;
fixed_u = left,
fixed_p = (left => 0.0, right => 1.0e5))
maximum(abs.(r.u))6.294877595159258e-8 mThe $10^5\ \text{Pa}$ pore-pressure difference strains the solid through the Biot coupling, giving a displacement of $\approx 6 \times 10^{-8}\ \text{m}$.
Next steps
Coupled solid physics shares the block-solver machinery with the fluid solvers — the Stokes and Navier–Stokes markers — which are the subject of the fluid-flow chapter. The linear algebra underneath every coupled block solve is covered in Sparse linear algebra.
