From 5b99a7a4276bd1db2a69f5c7c0df90eb39d01e09 Mon Sep 17 00:00:00 2001 From: Jukka Aho Date: Sat, 9 May 2026 18:34:40 +0300 Subject: [PATCH] feat(materials): add moisture diffusion conductivity tag Introduce `MoistureDiffusivity` for scalar moisture transport kernels. - Declare physics traits and constant diffusion tensors/scalars as appropriate. --- src/materials/moisture_diffusivity.jl | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/materials/moisture_diffusivity.jl diff --git a/src/materials/moisture_diffusivity.jl b/src/materials/moisture_diffusivity.jl new file mode 100644 index 0000000..2a8e677 --- /dev/null +++ b/src/materials/moisture_diffusivity.jl @@ -0,0 +1,27 @@ +# SPDX-FileCopyrightText: 2015-2026 Jukka Aho +# SPDX-License-Identifier: MIT + +""" +Isotropic moisture diffusivity `D_w` for a scalar humidity/pore-water field +[`MoistureContent`](@ref). The weak operator matches steady heat conduction +(`HeatKernel` with [`Thermal`](@ref) physics). +""" + +using Tensors + +struct MoistureDiffusivity <: AbstractMaterial + D_w::Float64 + + function MoistureDiffusivity(D_w::Float64) + D_w > 0 || throw(ArgumentError("Moisture diffusivity D_w must be positive")) + new(D_w) + end +end + +MoistureDiffusivity(; D_w::Real) = MoistureDiffusivity(Float64(D_w)) + +material_behavior(::MoistureDiffusivity) = StatelessConstantTangent() +supported_physics(::MoistureDiffusivity) = (Thermal{3}(),) + +@inline conductivity_tensor(m::MoistureDiffusivity) = m.D_w * one(SymmetricTensor{2,3,Float64,6}) +@inline scalar_diffusion_tensor(m::MoistureDiffusivity) = conductivity_tensor(m)