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_mod

Project 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.*