mirror of
https://github.com/JuliaFEM/JuliaFEM.jl.git
synced 2026-09-19 01:48:47 +00:00
650e442a37
- Add blank line after 'This example shows:' for markdown lint compliance - Minor formatting fix only, no content changes
Heat Equation Example: From Gmsh to Physics
Addresses Issue #183: Academic usage without built-in physics
This example demonstrates the complete workflow:
- Generate mesh using Gmsh
- Load mesh into JuliaFEM
- Assemble stiffness matrix and mass matrix
- Extract matrices for external solvers (e.g., DifferentialEquations.jl)
- Solve the heat equation
Problem Statement
Solve the transient heat equation on a unit square:
∂u/∂t = α∇²u + f(x,y,t)
with boundary conditions:
- u = 0 on left edge (Dirichlet)
- ∂u/∂n = 0 on other edges (Neumann, natural BC)
Initial condition: u(x,y,0) = sin(πx)sin(πy)
Quick Start
1. Generate mesh
gmsh -2 unit_square.geo -o unit_square.msh
This creates a triangular mesh of the unit square.
2. Run the example
julia --project gmsh_heat_equation.jl
What You Get
The example shows how to:
- Load Gmsh mesh files
- Create FEM elements with material properties
- Assemble global stiffness matrix K and mass matrix M
- Apply Dirichlet boundary conditions
- Extract the resulting ODE system: M du/dt = -K u + f
- Solve using your own time integrator
For Academic Users (Issue #183)
If you want to use JuliaFEM just for discretization (not the built-in physics):
# After assembly, extract the matrices:
K = problem.assembly.K # Stiffness matrix (SparseMatrixCSC)
M = problem.assembly.M # Mass matrix (SparseMatrixCSC)
f = problem.assembly.f # Force vector
# Now use these with DifferentialEquations.jl, Krylov.jl, etc.
# The ODE system is: M * du/dt = -K * u + f
Files
unit_square.geo- Gmsh geometry definitiongmsh_heat_equation.jl- Complete working exampleREADME.md- This file
See Also
- Tutorial:
docs/book/gmsh_tutorial.md(comprehensive step-by-step) - Issue #183: https://github.com/JuliaFEM/JuliaFEM.jl/issues/183