Use this page to plan a course, add a control assignment, build a laboratory, learn a skill, or find a process dataset. The resources connect control theory with chemical process models, instrumentation, computation, and engineering decisions.
| Change | Time | What to add | Good starting point |
|---|---|---|---|
| One class | 30 to 75 minutes | A prediction, simulation, or tuning task followed by an engineering check | LearnChemE process control resources |
| One assignment | One to two weeks | A dynamic model, controller design, simulation, and short interpretation | Ready-to-adapt assignments |
| Laboratory sequence | Three to six meetings | Step testing, parameter estimation, PID tuning, disturbance tests, and reflection | Temperature Control Lab |
| Course redesign | One term | Modeling, feedback, instrumentation, data, computation, projects, and AI-aware assessment | Course models below |
| Area | Students should be able to | Evidence |
|---|---|---|
| Dynamic modeling | Derive and simulate dynamic models from balances, constitutive relations, and operating assumptions | Equations, units, initial conditions, and limiting-case checks |
| System response | Connect poles, time constants, zeros, gain, delay, and damping to process behavior | Plots plus a physical explanation |
| Feedback design | Select, tune, and compare controllers for setpoint and disturbance goals | Closed-loop tests and justified performance measures |
| Instrumentation | Choose measurements, manipulated variables, valves, alarms, and control structures | P&ID or control narrative with failure considerations |
| Advanced control | Explain constraints, interactions, estimation, and prediction in multivariable or model predictive control | A checked simulation or design study |
| Data and computation | Estimate models from process data and distinguish identification error from control performance | Code, residuals, validation data, and reproducible settings |
| Professional judgment | Evaluate stability, safety, uncertainty, operability, and the limits of a model or generated answer | Engineering review and documented assumptions |
| Stage | Core topics | Student activity | Useful resource |
|---|---|---|---|
| 1. Dynamic thinking | Accumulation, state, time scale, linearization, and simulation | Predict a response before running the model | MIT OpenCourseWare 10.450 |
| 2. Process response | First and second order systems, delay, frequency response, and empirical models | Fit a model to a step test and inspect residuals | BYU Process Dynamics and Control |
| 3. Feedback | Stability, PID, tuning, anti-windup, and performance | Compare two tuning methods under a disturbance and constraint | ControlGuru |
| 4. Structure and hardware | Sensors, valves, cascade, feedforward, ratio, and override control | Create a control narrative and test an instrument fault | Process Control Design and Practice |
| 5. Estimation and interactions | System identification, observers, multivariable systems, and relative gain | Estimate a model from held-out data and select control pairings | SIPPY examples |
| 6. Constrained control | MPC, optimization, state estimation, and plantwide goals | Test constraints, mismatch, disturbances, and recovery | do-mpc CSTR example |
| 7. Integrated project | Safety, economics, data, communication, and responsible tool use | Defend a control design with code, tests, and an operating recommendation | Cases and datasets |
| Assignment | Time | Suggested source | What students submit |
|---|---|---|---|
| Model a tank or reactor | One week Introductory |
Notre Dame notebooks | Balance equations, assumptions, code, plots, unit checks, and a limiting case |
| Identify a process from data | One to two weeks Intermediate |
BYU course or SIPPY | Training and validation split, fitted model, residual plots, uncertainty, and intended use |
| Tune and stress-test PID | One laboratory Intermediate |
TCLab or LearnChemE simulations | Tuning choice, disturbance and noise tests, actuator behavior, and performance comparison |
| Design a control structure | Two weeks Intermediate |
Process Control Design and Practice | P&ID markup, pairing choices, alarm and interlock discussion, and startup considerations |
| Review control-system cybersecurity | One to two weeks Advanced |
NIST SP 800-82 Rev. 3 | Process and network boundary, data flows, threat scenarios, safety and availability effects, layered protections, and incident response priorities |
| Investigate an industrial fault | Two to four weeks Advanced |
Tennessee Eastman or IndPenSim | Fault definition, detection delay, false alarms, process explanation, and operator response |
| Design and review MPC | Three to five weeks Advanced |
Fired heater, adhesive coater, or do-mpc CSTR | Model, constraints, estimator assumptions, scenarios, benchmark controller, and limitations |
| Audit an AI-assisted solution | One week Intermediate |
GenAI guidance below | Saved prompt or interaction summary, corrected solution, tests, sources, and explanation of rejected suggestions |
| Step | Start here | What to do | Result |
|---|---|---|---|
| 1. Build a dynamic model | BYU Process Dynamics and Control | Derive one model from balances and predict its response before simulating it | One to two weeks Checked model and response plots |
| 2. Learn feedback | ControlGuru and LearnChemE | Practice stability, PID tuning, setpoint tracking, and disturbance rejection | Two to four weeks Controller comparison |
| 3. Work with data | SIPPY examples | Fit a model with one dataset and evaluate it on different data | One to two weeks Model and validation report |
| 4. Add hardware or a realistic case | TCLab or an industrial case | Test noise, constraints, mismatch, disturbances, and recovery | Two to four weeks Scenario results |
| 5. Complete a project | Assignment ideas | State the control goal, compare a baseline, test failure cases, and explain what an operator should do | Three to six weeks Reproducible project and oral explanation |
No-cost local path: combine the BYU or Notre Dame course materials with python-control or the GNU Octave control package, then use the TCLab emulator before adding hardware.
| Resource | Audience and level | What is included | Best use | Access and limits |
|---|---|---|---|---|
| Process Dynamics and Control Brigham Young University |
Instructor and learner Senior undergraduate |
Syllabus, schedule with assignments, notes, quizzes, projects, Python, MATLAB, Simulink, PID, feedforward, cascade, MPC, and TCLab | Full chemical engineering control course | Free online. The Python repository has no stated license. The MATLAB repository uses MIT. An earlier MATLAB and Simulink course remains available as an archive. |
| Process Control University of Notre Dame, 2026 |
Instructor and learner Senior undergraduate |
Current syllabus, schedule, and assignments with modeling, TCLab, PID, optimization, dynamic optimization, and MPC | Current course sequence and topic planning | Open course site. Some videos, submissions, and solutions use institutional systems. Check individual notebooks for reuse terms. |
| CBE30338 Chemical Process Control University of Notre Dame |
Instructor and learner Senior undergraduate |
More than 70 Jupyter notebooks on modeling, PID, optimization, estimation, and predictive control | Notebook-based course or selected assignments | Free and MIT licensed. The collection is archived, so test dependencies before class. |
| Process Control LearnCHE and McMaster |
Instructor and learner Senior undergraduate |
Archived course outline, videos, calendar, seven assignments with solutions, projects, and examinations | Course structure, instructor planning, and legacy problem sets | Free 2014 archive. Most LearnCHE materials use CC BY-SA 4.0, but check each item. Review old software and external links before assigning them. |
| Process Control Education McMaster University |
Instructor and learner Senior undergraduate |
Flipped course, Marlin textbook, e-lessons, quizzes, tutorials, slides, workshops, a sample 15-week course, and learning support materials. The ASEE case study explains the redesign. | Complete course design and flipped lessons | Free to study on an older HTTP-only site. Link to the work instead of redistributing it. |
| MIT OpenCourseWare 10.450 | Instructor and learner Undergraduate |
Lecture notes, 11 problem sets and a paper assignment, MATLAB files, and spreadsheets | Problem sets and modeling notes | Free under MIT OpenCourseWare terms. The course is from 2006. |
| Process Control Design and Practice Rowan University |
Instructor and learner Senior undergraduate |
Slides, text, syllabus, projects, P&IDs, hardware, architecture, batch control, HMI, and specifications | Practice-focused companion to a theory course | Core materials are free. Reuse terms are not clear for every item. Some tests and solutions require contacting the author. |
| Process Control Educational Resources Villanova University |
Instructor and learner Intermediate |
Inverted-class MATLAB and Simulink modules on ODEs, Laplace transforms, and PID | Short MATLAB-based modules | Academic use only. MATLAB and Simulink are required. |
| Process Control and Instrumentation and Advanced Process Control NPTEL |
Learner and instructor Undergraduate to graduate |
Video-based introductory and advanced courses with notes and assessment material | Self-study or supplemental lectures | Free to view. Certification may cost money. Reuse rights are not clear. |
| Numerical Optimal Control University of Freiburg |
Instructor and learner Graduate |
Lectures, manuscript, exercises, code, solutions, examinations, and project guidance using Python or MATLAB with CasADi | Advanced optimal-control module or graduate follow-on course | Free online archive. Plan for 10 to 20 hours per week. Reuse rights are not stated. |
| Resource and author | Level and publication | Topics and best use | Access and limits |
|---|---|---|---|
| Chemical Process Dynamics and Controls Woolf |
Undergraduate Living open text |
Modeling, instrumentation, PID, multivariable systems, optimization, statistics, and cases | CC BY 3.0. Student-contributed chapters have uneven depth, so review assigned sections. |
| Process Control: Designing Processes and Control Systems for Dynamic Performance Marlin |
Undergraduate Second edition, 2000 |
Full chemical process control text with supporting course materials | Free to read through McMaster. Use links and citations rather than redistributing the full work. |
| Lessons in Industrial Instrumentation Kuphaldt |
Introductory to intermediate Living open reference |
Instrumentation, sensors, valves, P&IDs, PID, PLCs, troubleshooting, and worksheets | CC BY 4.0. The collection is large and broader than a typical chemical engineering course. |
| Feedback Systems Astrom and Murray |
Intermediate to graduate Second edition materials |
General feedback theory, exercises, lectures, software, and optimization-based control | A complete PDF and supporting materials are free online. Site content is CC BY-NC-SA 4.0 unless noted otherwise. Check the book PDF terms before redistribution. |
| CACHE Virtual Process Control Book | Advanced undergraduate or graduate Legacy archive |
Instructor-selected readings on multivariable, robust, nonlinear, optimal, and model predictive control | Free archive. Rights vary by item and some external links are old. |
| Process Dynamics and Control Seborg, Edgar, Mellichamp, and Doyle |
Undergraduate Fourth edition, 2016 |
Established chemical engineering textbook and course reference | Commercial. Companion presentation slides are copyrighted supplements. |
| Principles and Practice of Automatic Process Control Smith and Corripio |
Undergraduate Third edition, 2005 |
Applied industrial control strategies, modeling, tuning, plantwide control, and case studies | Commercial and older. Confirm availability and companion software before adoption. |
| Process Control: Modeling, Design, and Simulation Bequette |
Undergraduate or graduate Second edition, 2023 |
Modeling, controller design, safety, digital control, and current MATLAB and Simulink examples | Commercial. Check student price and software access before adoption. |
| Process Dynamics, Modeling, and Control Ogunnaike and Ray |
Advanced undergraduate or graduate 1994 |
Detailed chemical process dynamics and multivariable control reference | Commercial textbook. Advanced for some undergraduate sequences. |
| Model Predictive Control: Theory, Computation, and Design Rawlings, Mayne, and Diehl |
Graduate Second edition, 2026 |
MPC theory, computation, code, figures, homework guidance, examinations, and errata | Downloadable text and teaching supplements. Copyright remains with the publisher, so link to the files rather than redistributing them. |
| Chemical Process Control Riggs |
Intermediate Legacy edition |
Practice-oriented chemical process control reference | Commercial and older. Use the library catalog to confirm local availability. |
| Resource | Best use | Scale and runs where | Access and limits |
|---|---|---|---|
| LearnChemE Process Control Resources | Short screencasts, quiz screencasts, ConcepTests, simulations, and virtual laboratories | Minutes to several class meetings Browser and downloadable activities |
Public learner resources. Instructor-only materials require an approved university account. Terms vary by item. |
| LearnChemE process control simulations and virtual laboratories | PID, dynamics, and simulated equipment activities without local hardware | One class to a multi-session assignment Browser |
Free to use online. Simulated equipment does not replace physical laboratory practice. |
| Temperature Control Lab and advanced TCLab sequence | Hands-on modeling, parameter estimation, PID, state estimation, MPC, and MHE | Emulator or Arduino-based kit Local Python, MATLAB, or Simulink |
The emulator lowers setup effort. Physical work needs a kit, USB access, power, support, and lab time. The Python package uses Apache licensing. |
| Using Microcontrollers in Chemical Engineering Classrooms AIChE |
Faculty introduction with parts lists, code, execution advice, and Python or MATLAB examples | One-hour instructor development Browser |
Login is required. Reuse is restricted. |
| Control101 MATLAB Toolbox | Live scripts, animations, virtual laboratories, and authentic control scenarios | Several activities MATLAB desktop |
The page identifies BSD and CC BY-NC-SA terms for different materials. Check the selected item. |
| University of Almeria Control Education Hub | PID, loop shaping, dead time, interactions, feedforward, interactive tools, and virtual or remote labs | Browser and desktop tools Varied setup |
Some materials accompany books or need local software. |
| UNED Interactive Control Tools Linear Control System Design Closed-Loop Shaping Time Series Analysis and Time Series Generator |
Linear design, loop shaping, and time-series exploration | Standalone applications Windows and macOS |
Free but dated. Test the binaries on current systems before assigning them. |
| Control Tutorials for MATLAB and Simulink | Tool training, live scripts, models, and general control examples | Short tutorials to full modules MATLAB and Simulink |
CC BY-SA 4.0. Most examples are mechanical rather than chemical. |
| MIT Drone Control Course Archive | Project-based control course design with small drones | Legacy MATLAB, Simulink, and hardware project | Historical inspiration only. The hardware is dated and may be difficult to source. |
Short video collections include the LearnChemE process control playlist, the Georgia Tech and LearnChemE playlist, the BYU Python for Process Control playlist, and the Control Loop Foundation overview.
| Tool | Category | Teaching use | Runs where and data location | Access and limits |
|---|---|---|---|---|
| python-control | Classical analysis | Linear and nonlinear systems, frequency response, state space, LQR, estimation, and examples | Local Python Models and data stay local |
BSD-3-Clause. Some advanced functions need the optional Slycot package. |
| ControlSystems.jl | Classical analysis and Julia ecosystem | Linear systems, time and frequency response, PID, LQR, identification, robust control, MPC, and documented examples | Local Julia Models and data stay local |
MIT. The ecosystem is broad and active. Learners new to Julia need language setup and orientation. |
| GNU Octave control package | Classical analysis | Free MATLAB-like exercises in system analysis, control synthesis, PID, state space, and frequency response | Local GNU Octave Models and data stay local |
GPL-3.0-or-later with BSD-3-Clause components. It uses SLICOT and needs a local Octave installation. |
| GEKKO | Dynamic optimization and MPC | Dynamic simulation, parameter estimation, MHE, MPC, regression, and real-time optimization | Local or hosted Python solve | MIT. Remote mode sends a model to a service. Use GEKKO(remote=False) when work must remain local. |
| SIPPY | System identification | SISO and MIMO identification with input-output and subspace methods | Local Python Data stay local |
LGPL-3.0. Requires CasADi and may use Slycot. Use the current Examples folder. |
| simple-pid | PID and hardware | Small PID coding exercises and hardware loops | Local Python Data stay local |
MIT. It supplies a controller, not a plant model or course sequence. |
| do-mpc | Dynamic optimization and MPC | Nonlinear and robust MPC, state estimation, uncertainty, and constraints | Local Python with CasADi Data stay local |
LGPL-3.0. Solver setup and computation make it better for advanced courses. |
| CasADi | Dynamic optimization and optimal control | Algorithmic differentiation, nonlinear optimization, dynamic models, and optimal-control transcription | Local C++, Python, MATLAB, or Octave | LGPL-3.0. It is a framework, not a turnkey controller. Learners need optimization, differential equation, and programming background. |
| IDAES control models | Process modeling and control | Rigorous process modeling, dynamic simulation, PID, and optimization projects | Local Python, Pyomo, IDAES, and solvers | Open source and powerful. Installation and model complexity are high for an introductory course. |
| harold | Classical analysis | Alternative Python systems and control toolbox | Local Python | MIT. The project is smaller and less active than python-control. |
| Skogestad-Python | Companion examples | Examples for multivariable control | Local Python | Legacy student-contributed code tested with older Python versions. No license is posted. |
| MathWorks courseware | Commercial courseware | Curated control courses, assignments, apps, MATLAB, Simulink, and TCLab materials | Desktop and some browser services | Some training is free. Accounts, institutional access, and paid toolboxes may be needed. |
| AspenTech Academic Program | Industrial commercial tools | HYSYS Dynamics, process simulation, advanced process control, and industry workflows | Licensed desktop and supported services | Institutional license, account, installation, and support access are required. |
| Control Station Academics | Industrial commercial tools | Integrated curriculum with textbook, lectures, laboratories, software, and faculty materials | Commercial desktop environment | Quote or demonstration required. Confirm pricing and student access before adoption. |
Choose a case that matches the course goal. Before assigning a download, check its size, format, license, software needs, and whether the process is simulated or physical.
| Case or dataset | Engineering use | Level and scale | Access and limits |
|---|---|---|---|
| Tennessee Eastman Challenge Process Archive | Plantwide, decentralized, fault-tolerant, and predictive control case studies | Advanced Large process with disturbances and many variables |
Public archive. Much of the MATLAB and Fortran code targets old software releases. |
| Modern Tennessee Eastman Data Repository | PCA, PLS, FDA, CVA, fault detection, monitoring, and data-driven control | Intermediate to advanced Training and test files with 52 variables |
BSD-3-Clause. Learners need process context before interpreting fault labels. |
| IndPenSim Dataset | Batch monitoring, fault detection, data-driven control, and advanced process control | Advanced 100 simulated penicillin batches, about 2.5 GB |
CC BY 4.0. Large download and simulated data. A companion notebook is available. |
| PRONTO Heterogeneous Process Dataset | Process monitoring with alarms, ultrasound, pressure, video, and mixed data types | Advanced About 1.7 GB in several formats |
Publicly downloadable. No license is shown, so verify reuse and cite the dataset. Storage and preprocessing add setup time. |
| Fired Heater MPC Project Georgia Tech |
Industry-based multivariable estimation and MPC design | Advanced Multi-session team project |
MATLAB interface and large simulation files. Copyrighted. Contact the author before redistributing. |
| Adhesive Coater MPC Project MIT |
Self-contained multivariable MPC design assignment | Advanced MATLAB project download |
Legacy files with no visible license. Test in a current MATLAB release. |
| APMonitor Nonlinear Model Library | Reactors, columns, tanks, fermentation, fuel cells, and other instructor-built problems | Introductory to advanced More than 40 model entries of varied size |
Public model collection. Licensing is not stated consistently for each model. |
| do-mpc CSTR | Nonlinear robust MPC under uncertainty and constraints | Advanced Course-sized Python model |
LGPL-3.0. Requires Python, CasADi, a solver, and nonlinear control background. |
| IDAES Examples | Rigorous process models, dynamic simulation, PID, steam systems, reactors, and flowsheet work | Advanced Small examples to full flowsheets |
Open source. Installation and solver needs are substantial. |
| Process Control Case Histories | Discussion of pH, compressor surge, pressure, temperature, interlocks, and startups | Intermediate Reading or incident-analysis assignment |
Free to read. The complete work is not openly licensed, so link to it rather than redistributing it. |
Data-driven methods can estimate models, states, faults, and control policies. GenAI can help plan, explain, code, and review. Neither replaces a physical model, a baseline controller, or an independent safety check.
| Resource | Best use | What students should check |
|---|---|---|
| CACHE Data-Driven Engineering resources | Sensor data, time series, hybrid models, system discovery, and engineering datasets | Sampling, leakage, physical bounds, extrapolation, drift, and uncertainty |
| Data-Driven Science and Engineering | Commercial Cambridge textbook with free videos, problem sets, code, and datasets on system identification, reduced-order models, dynamics, and control | Does the learned structure match the physics and intended operating range? Reuse terms for the free supplements are not stated. |
| PySINDy Examples | Discovering governing equations from dynamic data | Noise sensitivity, derivative estimates, term selection, and validation on a new trajectory |
| SIPPY Examples | Classical and subspace system identification | Excitation, order selection, residual correlation, and held-out prediction |
| PC-Gym documentation and repository | Reinforcement-learning benchmarks for CSTRs, extraction, crystallization, and other process control problems with NMPC comparisons | MIT and identified as pre-release. Pin a tested version. Use simulation first, compare with a model-based baseline, and check constraints, disturbances, sample needs, reward design, and reproducibility. |
| Stage | Appropriate AI help | Required student evidence |
|---|---|---|
| Define | Ask for missing variables, assumptions, disturbances, constraints, failure modes, and clarification questions | Student-written problem statement and final assumptions |
| Plan | Compare modeling, identification, control, and testing approaches before coding | Chosen plan, rejected options, and reasons |
| Build | Draft equations, pseudocode, tests, plotting code, or documentation in small steps | Version history and explanation of accepted changes |
| Critique | Search for sign errors, hidden assumptions, instability, saturation, numerical problems, and missing tests | Independent hand check, baseline comparison, and corrected result |
| Stress-test | Suggest disturbances, parameter errors, noise, delays, constraints, and sensor or actuator failures | Scenario table, plots, and control response discussion |
| Communicate | Improve organization and identify claims that need sources | Accurate citations, concise engineering recommendation, and known limits |
For local and commercial assistants, coding agents, privacy choices, prompting, and tool safeguards, use the CACHE Programming GenAI guide. For LLM foundations and Agentic Engineering, use the CACHE AI and Machine Learning guide.
Use the NIST Generative AI Profile to build a risk register, test plan, source record, and incident exercise.
Assess the reasoning and evidence that surround the final plots. A polished response or stable-looking simulation is not enough.
| Method | What it reveals | Example |
|---|---|---|
| Prediction before simulation | Physical understanding and sign reasoning | Sketch the expected response and explain gain, delay, and time scale |
| Staged submission | Planning, revision, and debugging | Submit problem definition, baseline, model, controller, tests, and final recommendation in stages |
| Live modification | Ownership of code and model | Change a constraint, disturbance, parameter, or sensor and explain the response |
| Oral check | Individual understanding in teamwork | Explain one equation, tuning choice, plot, failure case, and design tradeoff |
| Error diagnosis | Critical review skill | Find and repair a plausible sign, units, sampling, model, or controller error |
| Comparison to a baseline | Whether complexity adds value | Compare advanced control with a simple PID or manual operating policy |
| Review area | Questions | Evidence |
|---|---|---|
| Problem | Are the controlled, manipulated, measured, and disturbance variables clear? Are constraints and performance goals stated? | Control objective and variable table |
| Model | Do equations, units, signs, initial conditions, steady states, and assumptions match the process? | Derivation, dimensional checks, and limiting cases |
| Data | Is the experiment sufficiently exciting? Are sampling, filtering, missing data, drift, and leakage handled? | Experiment design, raw plots, and held-out validation |
| Stability | Is the stated stability result valid for the model, operating range, delay, and uncertainty? | Analysis plus nonlinear or scenario tests |
| Performance | Are setpoint, disturbance, noise, interaction, and recovery results compared fairly? | Common scenarios and stated metrics |
| Actuators and sensors | Are saturation, rate limits, dead band, noise, delay, failure, and calibration considered? | Stress tests and fallback behavior |
| Numerics | Do integration steps, solver status, tolerances, initial guesses, and scaling support the claim? | Solver record and refinement or sensitivity study |
| Safety and operation | What happens on failure? Which alarms, interlocks, manual actions, and safe states remain independent? | Hazard discussion and operating response |
| Reproducibility | Can another person run the model with documented versions, data, seeds, and steps? | Fresh run, source record, and clear instructions |
Ask students to report the tool, product, and model, date and version, local or cloud deployment, files or context shared, important prompts or a concise interaction summary, suggestions accepted, changed, and rejected, independent calculations, tests, sources, and remaining limitations. Students remain responsible for the engineering work they submit.
| Resource | Best use | Notes |
|---|---|---|
| Awesome Control Theory | Directory of books, courses, software, datasets, and communities | CC0 directory. Review each linked resource separately. |
| Resourcium | Broad collection of control and automation learning resources | Directory rather than a course. Check access and rights for each item. |
| IFAC Technical Committee on Control Education | Control education events, professional context, and community connections | The committee's older teaching repository links are not dependable. Use this as professional context, not a ready teaching collection. |
| IEEE Control Systems Society Technical Committee on Control Education | Control education activities and professional connections | Professional context, not a ready course. |
| BYU PRISM | Process systems research, modeling, optimization, and student projects | Research center site. Project availability changes. |
| McMaster Advanced Control Consortium | Industry and academic context for process automation research | Research consortium, not a teaching package. |
| Center for Advanced Process Decision-making | Research context for process synthesis, optimization, control, safety, and reliability | Advanced research context. |
| Texas-Wisconsin-California Control Consortium | Research context for modeling, monitoring, diagnosis, and nonlinear MPC | Research consortium. Public teaching materials vary. |
When suggesting a resource, include its audience, prerequisites, topic, expected time, setup needs, software, data size, license, available assignments, and known limits.
Send feedback to Dr. John Hedengren at Brigham Young University or Dr. Luke Landherr at Northeastern University.
Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer