8.9 KiB
8.9 KiB
FEMSurrogateTutorial Agent Instructions
Project Purpose
This repository is a Korean tutorial project for studying surrogate models in finite element method (FEM) structural analysis. The tutorial combines:
- Theory documents on surrogate modeling methods.
- NumPy/SciPy implementation of a 2D Euler-Bernoulli beam/frame element.
- Jupyter notebooks that build, validate, and compare surrogate models from generated FEM data.
The primary audience is graduate students and researchers who already know basic FEM and Python.
Tech Stack
- Python
>=3.12,<3.15 - Environment and dependency management:
uv,pyproject.toml,uv.lock - Numerical computing: NumPy, SciPy
- Machine learning: scikit-learn
- Data and plotting: pandas, matplotlib
- Notebook workflow: JupyterLab, ipykernel, nbconvert
- Testing and quality: pytest, ruff
- Model/result persistence: joblib, CSV, JSON
Architecture Rules
- CRITICAL: At the start of every new task or session, read
AGENTS.md,PROGRESS.md, andWORKNOTES.mdbefore planning or editing. Use them to understand current scope, completed work, open tasks, and known pitfalls. - CRITICAL: Keep
PROGRESS.mdcurrent while working. Update it whenever the task state materially changes, including completed milestones, in-progress work, blockers, verification status, and next actions. - CRITICAL: Record meaningful trial-and-error, mistakes, false starts, debugging discoveries, and corrective decisions in
WORKNOTES.md. Do not log routine command output; log lessons future agents need. - CRITICAL: Core calculation logic must live under
src/femsurrogate/; notebooks should explain and orchestrate, not hide reusable implementation in cells. - CRITICAL: FEM data for the tutorial must be generated with the in-repository 2D beam/frame implementation using NumPy/SciPy. Do not introduce Abaqus, ANSYS, OpenSeesPy, CalculiX, or other external solvers for v1.
- CRITICAL: Keep the structural model linear static and Euler-Bernoulli based for v1. Do not add Timoshenko shear deformation, geometric nonlinearity, material nonlinearity, dynamics, contact, or shell/solid elements unless explicitly requested.
- CRITICAL: Use
BeamExamples/CantileverBeam.txtandBeamExamples/CantileverBeam_Displacements.txtas the canonical solver verification fixture. The solver must reproduce the listedUx,Uy, andRzvalues within documented floating-point tolerance before it is used to generate surrogate training data. - CRITICAL: All random sampling, train/test splits, and model training examples must use fixed seeds for reproducibility.
- CRITICAL: Keep the project document and Python notebook based. Do not add browser app or design-system work.
- Keep public helper interfaces small and stable:
run_beam2d_case(params)generate_lhs_samples(bounds, n, seed)build_dataset(samples)make_model(model_name, random_state)evaluate_model(...)
Expected Repository Shape
docs/
PRD.md
ARCHITECTURE.md
ADR.md
theory/
00_surrogate_modeling_for_fem.md
01_doe_sampling_validation.md
02_response_surface_methodology.md
03_gaussian_process_kriging.md
04_random_forest.md
05_gradient_boosting.md
06_mlp_neural_network.md
PROGRESS.md
WORKNOTES.md
BeamExamples/
CantileverBeam.txt
CantileverBeam_Displacements.txt
notebooks/
00_beam2d_fea_dataset.ipynb
01_response_surface_surrogate.ipynb
02_gaussian_process_kriging_surrogate.ipynb
03_random_forest_surrogate.ipynb
04_gradient_boosting_surrogate.ipynb
05_mlp_surrogate.ipynb
06_compare_surrogate_models.ipynb
src/femsurrogate/
fea/
io.py
data/
surrogates/
plotting/
tests/
Development Process
- Start each session by reading
PROGRESS.mdandWORKNOTES.mdafterAGENTS.md. - Before making changes, update
PROGRESS.mdwith the current task, intended scope, and success criteria when they are not already recorded. - During longer tasks, update
PROGRESS.mdafter each meaningful milestone instead of waiting until the end. - When you encounter an implementation mistake, incorrect assumption, failed approach, non-obvious parser/detail issue, or verification problem, add a concise note to
WORKNOTES.mdwith the date and lesson learned. - At the end of a task, update
PROGRESS.mdwith completed work, verification commands/results, remaining risks, and recommended next step. - Use TDD for code changes: write a failing pytest first, implement the smallest passing change, then refactor only if needed.
- For documentation changes, verify that links, filenames, and referenced commands match the repository.
- Prefer simple educational implementations over production abstractions.
- Keep every change traceable to the tutorial goal. Do not add speculative tooling, dashboards, APIs, or deployment layers.
- Commit messages should follow Conventional Commits, for example
docs: define tutorial architectureorfeat: add beam2d solver.
Commands
Use these commands once the Python project files exist:
uv sync
uv run pytest
uv run ruff check .
uv run jupyter nbconvert --to notebook --execute notebooks/00_beam2d_fea_dataset.ipynb
For full notebook verification:
uv run jupyter nbconvert --to notebook --execute notebooks/00_beam2d_fea_dataset.ipynb
uv run jupyter nbconvert --to notebook --execute notebooks/01_response_surface_surrogate.ipynb
uv run jupyter nbconvert --to notebook --execute notebooks/02_gaussian_process_kriging_surrogate.ipynb
uv run jupyter nbconvert --to notebook --execute notebooks/03_random_forest_surrogate.ipynb
uv run jupyter nbconvert --to notebook --execute notebooks/04_gradient_boosting_surrogate.ipynb
uv run jupyter nbconvert --to notebook --execute notebooks/05_mlp_surrogate.ipynb
uv run jupyter nbconvert --to notebook --execute notebooks/06_compare_surrogate_models.ipynb
Documentation Standards
- Write tutorial content in Korean.
- Keep technical terms such as surrogate model, response surface, Gaussian process, Kriging, Random Forest, Gradient Boosting, MLP, DOE, LHS, RMSE, MAE, and R2 in English when that is clearer.
- Theory documents must include citations and links to primary or official sources where possible.
- Avoid long quotations. Summarize sources in your own words.
- When adding equations, define symbols and units near the equation.
- Each model-specific theory document should explain:
- Core idea and assumptions.
- Mathematical form.
- FEM structural-analysis use case.
- Strengths, weaknesses, and failure modes.
- Hyperparameters used in the matching notebook.
- References.
Progress And Work Notes
PROGRESS.md and WORKNOTES.md are mandatory handoff files for future agents.
PROGRESS.md should answer:
- What is the current project/task state?
- What has been completed?
- What is in progress?
- What is blocked or intentionally deferred?
- What verification has been run, with command names and results?
- What should the next agent do first?
WORKNOTES.md should answer:
- What assumptions turned out to be wrong?
- What approaches were tried and rejected?
- What parsing, numerical, notebook, or tooling pitfalls were discovered?
- What should future agents avoid repeating?
Keep both files concise and factual. Do not use them as a full chat transcript.
Data And Result Conventions
- Treat files under
BeamExamples/as checked-in verification fixtures, not generated data. BeamExamples/CantileverBeam.txtdefines a six-node, five-element cantilever beam with fixed node 1 and a downward nodal load at node 6.BeamExamples/CantileverBeam_Displacements.txtdefines expected nodalUx,Uy, andRzvalues for that example.- The BeamExamples fixture uses clockwise-positive
Rz; keep element stiffness, solver output, and regression comparisons in that convention. - For the 2D in-plane beam/frame solver, use
Area,ElasticModulus, andIzzfrom the example input. PreserveJ,Iyy, andPoisson'sRatiowhen parsing metadata, but do not use them in the v1 Euler-Bernoulli in-plane solve. - Store generated reference data under
data/reference/. - Store derived or regenerated data under
data/processed/. - Store metrics under
reports/results/. - Store predictions under
reports/predictions/. - Store generated figures under
reports/figures/. - Use SI units in data columns and encode units in column names where practical, for example
tip_uy_m,max_abs_bending_stress_pa,mass_kg,compliance_j. - Include metadata JSON for generated datasets with seed, sample count, bounds, and code version notes.
Review Checklist
- Does the change keep notebooks thin and reusable code in
src/femsurrogate/? - Does the FEM implementation remain a linear static 2D Euler-Bernoulli beam/frame model?
- Does the solver pass the
BeamExamples/CantileverBeam.txtdisplacement regression check? - Are random seeds fixed?
- Are tests added or updated for new code behavior?
- Do docs and notebooks refer to the same paths and artifact names?
- Are citations present for theory claims?
- Has browser-app and design-system work been avoided?