Developer Guide# PyLith design Design overview Boundary between Python and C++ PyLith Application Flow Time-Dependent Problem Code Layout Directory Structure PyLith implementation Code Structure Legend for class diagrams Application Problem Solution Physics and Finite-Element Objects Materials Boundary Conditions Interior Interfaces (Faults) Mesh Importing Output PETSc Finite-Element Implementation DMPlex Point Depth and Height pylith::topology::Field, PetscSection, and PetscVec Integration Projection Pointwise functions (kernels) Rebuilding PETSc and PyLith Rebuilding PETSc Rebuilding PyLith Overview Updating your fork Makefiles Build Targets Testing C++ unit tests CppUnit macros Method of Manufactured Solutions Debugging residual errors Debugging Jacobian errors Example Running C++ unit tests and MMS tests Running C++ unit tests Running MMS tests Using the debugger Using valgrind Python unit tests Full-scale tests Command line arguments Using the debugger Using valgrind Example Git Workflow Overview Git tasks Setting up your fork Set the upstream repository Creating a new feature branch Staging, Committing, and Pushing Changes Keeping a feature branch in sync with branch main Creating a pull request Adding remotes for accessing other PyLith forks Git Quick Reference Break commit into multiple commits Update from upstream Rebase branch off main Branches Delete branches Rename local branch Show merged/unmerged branches Debugging Debugging tools VS Code integration C++ unit test MMS test PyLith simulation Debugger quick reference Valgrind quick reference Viewing fields Viewing differences Running tests in CI Docker containers Performance Performance Tools Overview Evaluating Performance Quick View Graphical View Viewing Performance with FlameGraph Logging Contributing to PyLith Documentation Building the documentation Prerequisites Generating the documentation MyST Quick reference Style guide Headings Heading 2 Heading 3 Heading 4 Admonitions Lists Itemized lists Definition lists Field lists Code blocks Tables Figures Math Citations Table of contents Contributing to the documentation Workflow Creating a new example Checklist Coding Style General guidelines Formatting source files Error Checking C/C++ style Object Declaration Files Object Implementation Files Python style Adding New Governing Equations and/or Bulk Rheologies Overview Python C++ Integrated development environments Visual Studio Code Setting up VS Code Starting VS Code Extensions