Capstone Projects
Interactive menu-driven program using select case, functions, formatted output, and input validation with iostat.
Project 1 — Scientific calculator & unit converter (beginner)
Interactive menu-driven program using select case, functions, formatted output, and input validation with iostat. *Concepts: control flow, procedures, I/O, error handling.*
Project 2 — Statistics toolkit (beginner/intermediate)
A module computing mean, median, mode, variance, percentiles, histograms, and linear regression on data read from CSV files; outputs formatted reports. *Concepts: arrays, allocatables, sorting, file I/O, modules.*
Project 3 — Matrix library (intermediate)
A matrix derived type with overloaded operators (+, -, *, .t. transpose), LU decomposition, determinant, inverse, and a LAPACK-backed fast path; full test-drive test suite; fpm package. *Concepts: derived types, operator overloading, LAPACK, testing, fpm.*
module matrix_mod
use, intrinsic :: iso_fortran_env, only: dp => real64
implicit none
type :: matrix
real(dp), allocatable :: a(:, :)
contains
procedure, private :: mat_mul, mat_add
generic :: operator(*) => mat_mul
generic :: operator(+) => mat_add
end type matrix
contains
function mat_mul(x, y) result(z)
class(matrix), intent(in) :: x, y
type(matrix) :: z
if (size(x%a, 2) /= size(y%a, 1)) error stop "matrix: shape mismatch"
z%a = matmul(x%a, y%a)
end function mat_mul
function mat_add(x, y) result(z)
class(matrix), intent(in) :: x, y
type(matrix) :: z
z%a = x%a + y%a
end function mat_add
end module matrix_modProject 4 — Heat equation solver (advanced)
2-D transient heat diffusion with explicit and implicit (Crank–Nicolson + LAPACK/iterative) schemes, NAMELIST configuration, NetCDF or CSV output, OpenMP parallelization, visualization with Python/gnuplot. *Concepts: PDEs, numerical stability, I/O, OpenMP.*
Project 5 — N-body simulator (advanced)
Velocity-Verlet integration, energy conservation diagnostics, OpenMP + MPI versions, optional do concurrent GPU offload; benchmark strong and weak scaling. *Concepts: performance, parallel programming, scaling analysis.*
Project 6 — OOP particle-in-cell or finite-element framework (advanced)
Abstract base types for meshes/elements/solvers, polymorphic containers, submodules, and plug-in physics modules. *Concepts: OOP, polymorphism, submodules, software design.*
Project 7 — Python-accelerated library (expert)
Write performance-critical kernels (e.g., image filters, signal processing, Monte Carlo) in Fortran with bind(c); expose them to Python via f2py or ctypes; package with meson-python; compare with NumPy. *Concepts: interoperability, packaging, benchmarking.*
Project 8 — Legacy code modernization (expert)
Take an open-source FORTRAN 77 code (e.g., from Netlib), build a regression test harness, convert to free form, introduce modules, remove COMMON/GOTO, add kinds and intents, and document it with FORD — verifying identical results throughout. *Concepts: modernization, testing, refactoring, documentation.*