RasmahRasmah

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.PiezoelectricityType
Piezoelectricity

Electro-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
true
source

A 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 m

The 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.ThermoelectricityType
Thermoelectricity

Thermo-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
true
source

A 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.PoroElasticityType

COVEXCLLINE

PoroElasticity # COV_EXCL_LINE

Biot 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
true
source

A 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 m

The $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.