feat(continuum): Add abstract types for continuum mechanics

New file: src/domains/continuum/abstract.jl

Abstract types defined:
- AbstractContinuumTheory - Supertype for FullThreeD, PlaneStress, etc.
- AbstractKernel - Supertype for ContinuumKernel and future variants
- AbstractMaterialState - Supertype for material state (EmptyState, plasticity, etc.)

Purpose:
- Establish type hierarchy for dispatch
- Document interface expectations
- Enable future extensions (shells, beams, etc.)

These were previously defined in other files, now centralized
for clarity and maintainability.
This commit is contained in:
Jukka Aho
2025-11-20 16:56:40 +02:00
parent 2fb7fd1676
commit 1ddc369d56
+106
View File
@@ -0,0 +1,106 @@
# This file is a part of JuliaFEM.
# License is MIT: see https://github.com/JuliaFEM/JuliaFEM.jl/blob/master/LICENSE.md
"""
Abstract types for continuum mechanics domain.
This file contains ONLY abstract type definitions for the continuum domain.
Concrete types are in types.jl, implementations are in theory-specific files.
"""
# ============================================================================
# FORMULATION ABSTRACTS
# ============================================================================
"""
AbstractFormulation
Abstract type for discretization formulations.
**DESIGN PHILOSOPHY: Formulations are DOMAIN-AGNOSTIC dimensionality concepts.**
# Key Distinction: Formulation vs Theory
**Formulation** (domain-agnostic):
- Describes DIMENSIONALITY and geometric simplifications
- Used by multiple physics domains
- Examples: FullThreeD, Axisymmetric
- Can be reused across continuum, heat, acoustics, etc.
**Theory** (domain-specific):
- Describes PHYSICS assumptions (stress/strain, kinematics)
- Only meaningful for one physics domain
- Examples: PlaneStress (continuum), Kirchhoff (plates)
# Why Separate Them?
**Problem**: Heat transfer needs FullThreeD and Axisymmetric, just like continuum!
If FullThreeD is defined in domains/continuum/, heat can't use it without duplication.
**Solution**: Formulations are dimensionality (shared), theories are physics (domain-specific).
# Examples
```julia
# Domain-agnostic formulations
FullThreeD() # Used by: continuum, heat, poisson, acoustics
Axisymmetric() # Used by: continuum, heat, etc.
# Domain-specific theories (in domains/*/types.jl)
PlaneStress # domains/continuum/types.jl
PlaneStrain # domains/continuum/types.jl
Kirchhoff # domains/plates/types.jl
```
# See Also
- Concrete formulation types: `continuum/types.jl` (ContinuumFormulation)
- Formulation implementations: `continuum/formulations.jl`
- Architecture docs: `docs/src/design/formulations_and_theories.md`
"""
abstract type AbstractFormulation end
"""
AbstractContinuumTheory
Abstract type for continuum mechanics theories.
**Domain-specific physics assumptions** for solid mechanics.
# Theories
**PlaneStress (σ_xx, σ_yy, σ_xy, σ_zz = 0):**
- Thin plates and membranes (thickness << length/width)
- Out-of-plane stress σ_zz = 0
- Examples: Sheet metal, aircraft skin, thin-walled structures
**PlaneStrain (ε_xx, ε_yy, ε_xy, ε_zz = 0):**
- Thick sections with no variation in z-direction
- Out-of-plane strain ε_zz = 0
- Examples: Dams, tunnels, retaining walls, long cylinders
**FullThreeD:**
- No simplifications, all six stress/strain components
- Most accurate but most expensive
**Axisymmetric:**
- Geometry and loading symmetric about z-axis
- No circumferential variations (∂/∂θ = 0)
- Examples: Pressure vessels, pipes, rotating disks
# Mathematical Details
**Plane Stress (thin plate):**
- Stress state: σ_zz = σ_xz = σ_yz = 0
- Strain: ε_zz ≠ 0 (computed from σ_zz = 0 condition)
- Constitutive: 3×3 reduced stiffness matrix
**Plane Strain (thick section):**
- Strain state: ε_zz = γ_xz = γ_yz = 0
- Stress: σ_zz ≠ 0 (computed from ε_zz = 0 condition)
- Constitutive: 3×3 reduced stiffness matrix (different from plane stress!)
# See Also
- Concrete theories: `continuum/types.jl` (FullThreeD, PlaneStress, PlaneStrain, Axisymmetric)
- Theory implementations: `continuum/formulations.jl`
"""
abstract type AbstractContinuumTheory end