This repository contains an open graduate-level book and teaching materials for ME/BME 736: Advanced Finite Element Methods at South Dakota Mines. The material develops the mathematical formulation of finite element methods and connects it to explicit numerical implementation and FEniCSx computations. Heat conduction and solid mechanics are used as recurring model problems.
The Quarto sources are in book/. The current complete chapters cover:
- introduction to the finite element method;
- mathematical foundations;
- partial differential equations and variational formulations;
- model problems in heat transfer and solid mechanics;
- the finite element method in one dimension; and
- finite element approximation in multiple dimensions.
The book also includes appendices on real-analysis essentials and tensor
notation and index calculus. Later chapters will address error estimation,
adaptivity, constraints, mixed methods, nonlinear and transient problems, and
PDE-constrained optimization. The development status of each chapter is
maintained in book/status.qmd.
To render both the HTML and PDF versions from the repository root, use:
quarto render bookThe rendered files are written to book/_book/.
The assignment sources are in assignments/:
- Assignments 1 and 2: mathematical foundations;
- Assignment 3: variational formulations and energy principles; and
- Assignment 4: finite element computation in one and two dimensions.
Assignment 4 is supported by two executable notebooks:
notebooks/assembly/assembly_demo.ipynbdevelops one-dimensional assembly explicitly with NumPy; andnotebooks/diffusion/diffusion_2d_demo.ipynbsolves a two-dimensional diffusion problem with FEniCSx and examines mesh refinement and error.
See assignments/README.md for assignment rendering
and notebook-submission instructions.
The topic-based lecture materials in lectures/slides/
currently include:
- one-dimensional finite element assembly, boundary conditions, and reactions; and
- multidimensional finite elements, linear triangles, basis-function support, matrix sparsity, and a two-dimensional diffusion example.
Each topic directory contains the LaTeX source, figures, and final PDF. Build
instructions are given in
lectures/slides/README.md.
Focused notes in handouts/ cover one-dimensional finite elements,
local-to-global assembly, and examples of weak derivatives.
The course/ directory contains the Fall 2026
ME/BME 736 syllabus and
course flyer.
The book, notebooks, and assignments use a single Conda environment containing Quarto, Python, Jupyter, FEniCSx, MPI, PETSc, and the supporting scientific Python packages. Create it with:
conda env create -f environment/environment.yml
conda activate finite-elementsComplete setup, TinyTeX, Jupyter-kernel, MPI, and verification instructions are
provided in environment/README.md.
Copyright (C) 2026 Prashant K. Jha.
This work is free: you can redistribute it and/or modify it under the terms of
the GNU General Public License as published by the Free Software Foundation,
either version 3 of the License, or (at your option) any later version. It is
distributed without any warranty; see LICENSE for the full terms.