← Back to all courses

Course D — OpenSees Developer: Constitutive Models, Elements and HPC

10 days (2 weeks)  |  For PhD students and postdocs  |  English

Overview

This is the flagship university course and the most technically advanced offering in the portfolio. It takes PhD students and postdocs from OpenSees user to OpenSees contributor — capable of implementing novel constitutive models and elements in C++, integrating them into the OpenSees framework, and deploying them at scale using OpenSeesMP on HPC infrastructure. There is no comparable course available in Europe: OpenSees documentation for developers is notoriously sparse, and the knowledge required to navigate and extend the codebase is typically acquired only through years of trial and error. This course compresses that learning into two structured weeks.

The pedagogical structure is deliberately layered: Week 1 uses Python to build intuition for constitutive model mathematics without the distraction of C++ syntax and compilation errors. Students implement return mapping algorithms, consistent tangent operators, and IMPL-EX integration from scratch in Python, verify them against analytical solutions, and develop a complete understanding of what the code must do before they write a single line of C++. Week 2 then translates this understanding into OpenSees C++ — students port their Python models into the NDMaterial interface, implement elements, and culminate in compiling OpenSeesMP, partitioning models with METIS, and running distributed jobs on Google Cloud Platform.

Prerequisites

Python proficiency (required), continuum mechanics fundamentals (required), OpenSees user experience (required), C++ basics (helpful but not required — Week 1 provides the bridge).

Software

Software: Python (NumPy, SciPy, Matplotlib), OpenSees source code, CMake, GCC/Clang, VS Code or CLion, OpenSeesMP, METIS, Google Cloud Platform

Learning Objectives

Week 1 — Theory and Python Implementation

Each day: theory session in the morning (2.5–3 hours), hands-on Python coding session in the afternoon (3–3.5 hours). All Python implementations use NumPy and SciPy only — no FEM libraries — so students see every algorithmic detail.

DayFocusMorning — TheoryAfternoon — Coding
Day 1Continuum mechanicsStress and strain tensors, objectivity, corotational framework, Voigt notation, spectral decompositionPython: tensor operations class, stress-strain curve generator, material state data structure
Day 2ElastoplasticityYield surface geometry, associated and non-associated flow rules, isotropic and kinematic hardening, loading/unloading conditions, consistency conditionPython: von Mises model with isotropic hardening, return mapping algorithm (radial return), stress update verification
Day 3Consistent tangentAlgorithmic vs continuum tangent, derivation of consistent tangent for von Mises model, quadratic convergence with Newton-RaphsonPython: tangent derivation, finite-difference verification, patch test at material point level
Day 4Cyclic modelsKinematic hardening (Armstrong-Frederick), combined hardening, Masing rules, soil-specific cyclic behaviour, pore pressure generation couplingPython: cyclic constitutive model, hysteresis loop generation, comparison with experimental data
Day 5IMPL-EXMotivation: stability vs accuracy, IMPL-EX algorithm derivation, error estimation, adaptive switching strategy, comparison with implicit integrationPython: IMPL-EX implementation of Day 2 model, side-by-side comparison with implicit, accuracy and stability parameter study

Week 2 — C++ Implementation and HPC Deployment

Each day: conceptual/architectural session in the morning, C++ coding session in the afternoon. By Day 7, students are porting their own Week 1 Python model into C++. By Day 10, they are running it in parallel on Google Cloud.

DayFocusMorning — TheoryAfternoon — Coding
Day 6OpenSees architectureCodebase structure, class hierarchy (Domain, Element, Material, Node, Integrator, Algorithm), build system with CMake, how to add a new class, UniaxialMaterial vs NDMaterial interfacesNavigate OpenSees source, compile from scratch, run a reference model via command line, locate relevant source files for NDMaterial
Day 7NDMaterial in C++NDMaterial interface: setTrialStrain, getStress, getTangent, commitState, revertToLastCommit, revertToStart. State variable management, serialisation (sendSelf/receiveSelf)Port the Week 1 von Mises Python model into a C++ NDMaterial. Compile, link, test against Python reference
Day 8Element formulation8-node brick element: shape functions, numerical integration (Gauss quadrature), residual vector, stiffness matrix assembly, material point loop, geometric nonlinearity basicsImplement a simplified brick element in C++ connected to the custom NDMaterial. Run a single-element patch test
Day 9Debugging and validationConvergence testing strategy, patch test requirements, debugging tools (GDB, Valgrind basics), numerical stability checks, common failure modes in constitutive implementationsFull debugging session: identify and fix bugs in Day 7–8 implementations, run patch test suite, verify quadratic convergence
Day 10OpenSeesMP and GCPOpenSeesMP architecture, domain decomposition strategy, METIS graph partitioning algorithm, MPI communication patterns, GCP VM setup, SSH, storage, cost monitoringCompile OpenSeesMP with MPI, partition a 3D model with METIS, deploy and run on GCP VM, retrieve and post-process distributed results