# vvvrome/proyecto-nuclear architecture

> Architecture diagram of the GitHub repository vvvrome/proyecto-nuclear, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-11). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/vvvrome/proyecto-nuclear
- Repository: https://github.com/vvvrome/proyecto-nuclear

## Overview

Proyecto Nuclear is a Flask-based web simulator for a simplified nuclear plant. A browser user operates the dashboard and simulation endpoints; the application initializes a plant simulation and exposes its state, controls, telemetry, and OpenMC results. The principal domain stages are reactor kinetics and temperature feedback, thermal/power-cycle modeling, safety assessment, and telemetry/persistence. Separate academic-file routes support the ASIR and Física coursework. The README documents these capabilities; sampled code confirms app wiring and several simulation calls, but not every route’s internal behavior.

Main entry points: [`src/nuclear_sim/plant/simulation.py`](https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/plant/simulation.py) (Plant simulation), [`src/nuclear_sim/web/app.py`](https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/web/app.py) (Flask app), [`src/nuclear_sim/plant/reactor_dynamics.py`](https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/plant/reactor_dynamics.py) (Reactor dynamics), [`src/nuclear_sim/telemetry/simulation_recorder.py`](https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/telemetry/simulation_recorder.py) (Simulation recorder)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web application"]
  node_webapp["Flask app<br/>[app.py]"]
  node_dashboard["Dashboard routes<br/>[dashboard.py]"]
  node_simroutes["Simulation routes<br/>[simulation.py]"]
end

subgraph group_plant["Plant simulation"]
  node_plant_sim["Plant simulation<br/>[simulation.py]"]
  node_reactor["Reactor model<br/>[reactor.py]"]
  node_dynamics["Reactor dynamics"]
  node_controller["Plant controller"]
  node_instrumentation["Plant instrumentation"]
  node_safety["Safety integration"]
  node_safety_system["Safety system<br/>[system.py]"]
  node_actuator["Actuator<br/>[actuator.py]"]
end

subgraph group_physics["Physics models"]
  node_kinetics["Point kinetics"]
  node_feedback["Temperature feedback"]
  node_thermal["Thermal model<br/>[thermal_model.py]"]
  node_energy["Energy balance<br/>[energy_balance.py]"]
  node_power_cycle["Power cycle<br/>[power_cycle.py]"]
  node_heat_exchanger["Heat exchanger<br/>[heat_exchanger.py]"]
  node_openmc_model["OpenMC model<br/>[geometry.py]"]
  node_openmc_runner["OpenMC runner<br/>[runner.py]"]
  node_decay["Decay calculations<br/>[decay.py]"]
  node_decay_chain["Decay chains<br/>[decay_chain.py]"]
  node_inventory["Nuclide inventory<br/>[inventory.py]"]
  node_nuclides["Nuclide data<br/>[nuclide_data.py]"]
  node_radiation["Radiation field<br/>[radiation_field.py]"]
end

subgraph group_operations["Operations and data"]
  node_telemetry["Telemetry collector<br/>[collector.py]"]
  node_recorder["Simulation recorder"]
  node_repository["MySQL repository<br/>[repository.py]"]
  node_connection["Database connection<br/>[connection.py]"]
end

subgraph group_academic["Academic files"]
  node_academic_routes["Academic routes"]
  node_file_routes["File routes<br/>[files.py]"]
  node_file_storage["Academic storage<br/>[file_storage.py]"]
end

node_user(("Browser user"))
node_openmc(("OpenMC"))
node_mysql[("MySQL database")]

node_user -->|"uses over HTTP"| node_webapp
node_webapp -->|"registers"| node_dashboard
node_webapp -->|"registers"| node_simroutes
node_webapp -->|"registers"| node_academic_routes
node_webapp -->|"registers"| node_file_routes
node_webapp -->|"initializes"| node_plant_sim
node_webapp -->|"creates"| node_connection
node_webapp -->|"configures"| node_repository
node_webapp -->|"exposes listing"| node_file_storage
node_simroutes -.->|"controls"| node_plant_sim
node_plant_sim -->|"reads state"| node_reactor
node_plant_sim -->|"advances"| node_dynamics
node_plant_sim -->|"steps"| node_thermal
node_plant_sim -->|"runs"| node_power_cycle
node_plant_sim -->|"evaluates"| node_safety
node_plant_sim -->|"updates"| node_instrumentation
node_plant_sim -->|"collects state"| node_telemetry
node_dynamics -->|"uses"| node_kinetics
node_dynamics -->|"uses"| node_feedback
node_dynamics -->|"uses"| node_thermal
node_power_cycle -->|"transfers heat"| node_heat_exchanger
node_safety -->|"uses"| node_safety_system
node_controller -->|"controls"| node_reactor
node_controller -->|"sets position"| node_actuator
node_controller -->|"sets reactivity"| node_dynamics
node_openmc_model -.->|"configures simulation"| node_openmc_runner
node_openmc_runner -->|"runs neutronics"| node_openmc
node_telemetry -.->|"feeds recording"| node_recorder
node_recorder -->|"records state"| node_plant_sim
node_recorder -->|"collects readings"| node_telemetry
node_recorder -->|"persists records"| node_repository
node_connection -->|"connects"| node_mysql
node_repository -->|"reads and writes"| node_mysql
node_decay_chain -->|"uses"| node_decay
node_inventory -->|"uses"| node_decay
node_decay_chain -->|"loads data"| node_nuclides
node_academic_routes -.->|"file operations"| node_file_routes
node_file_routes -->|"uses"| node_file_storage

click node_webapp "https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/web/app.py"
click node_dashboard "https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/web/routes/dashboard.py"
click node_simroutes "https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/web/routes/simulation.py"
click node_plant_sim "https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/plant/simulation.py"
click node_reactor "https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/plant/reactor.py"
click node_dynamics "https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/plant/reactor_dynamics.py"
click node_controller "https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/plant/plant_controller.py"
click node_instrumentation "https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/plant/plant_instrumentation.py"
click node_safety "https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/plant/safety_integration.py"
click node_safety_system "https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/safety/system.py"
click node_actuator "https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/instrumentation/actuator.py"
click node_kinetics "https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/plant/reactor_kinetics.py"
click node_feedback "https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/nuclear/kinetics/temperature_feedback.py"
click node_thermal "https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/thermal/thermal_model.py"
click node_energy "https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/thermal/energy_balance.py"
click node_power_cycle "https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/thermal/power_cycle.py"
click node_heat_exchanger "https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/thermal/heat_exchanger.py"
click node_openmc_model "https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/reactor/geometry.py"
click node_openmc_runner "https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/nuclear/openmc/runner.py"
click node_telemetry "https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/telemetry/collector.py"
click node_recorder "https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/telemetry/simulation_recorder.py"
click node_repository "https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/database/repository.py"
click node_connection "https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/database/connection.py"
click node_decay "https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/nuclear/decay.py"
click node_decay_chain "https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/nuclear/decay_chain.py"
click node_inventory "https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/nuclear/inventory.py"
click node_nuclides "https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/nuclear/nuclide_data.py"
click node_radiation "https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/radiation/radiation_field.py"
click node_academic_routes "https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/web/routes/fisica_asignatura.py"
click node_file_routes "https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/web/routes/files.py"
click node_file_storage "https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/web/file_storage.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_webapp,node_dashboard,node_simroutes,node_user toneBlue
class node_plant_sim,node_reactor,node_dynamics,node_controller,node_instrumentation,node_safety,node_safety_system,node_actuator,node_mysql toneAmber
class node_kinetics,node_feedback,node_thermal,node_energy,node_power_cycle,node_heat_exchanger,node_openmc_model,node_openmc_runner,node_decay,node_decay_chain,node_inventory,node_nuclides,node_radiation toneMint
class node_telemetry,node_recorder,node_repository,node_connection toneRose
class node_academic_routes,node_file_routes,node_file_storage,node_openmc toneIndigo
```

## Components

### Web application

- [Flask app](https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/web/app.py): `src/nuclear_sim/web/app.py`
- [Dashboard routes](https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/web/routes/dashboard.py): `src/nuclear_sim/web/routes/dashboard.py`
- [Simulation routes](https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/web/routes/simulation.py): `src/nuclear_sim/web/routes/simulation.py`

### Plant simulation

- [Plant simulation](https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/plant/simulation.py): `src/nuclear_sim/plant/simulation.py`
- [Reactor model](https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/plant/reactor.py): `src/nuclear_sim/plant/reactor.py`
- [Reactor dynamics](https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/plant/reactor_dynamics.py): `src/nuclear_sim/plant/reactor_dynamics.py`
- [Plant controller](https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/plant/plant_controller.py): `src/nuclear_sim/plant/plant_controller.py`
- [Plant instrumentation](https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/plant/plant_instrumentation.py): `src/nuclear_sim/plant/plant_instrumentation.py`
- [Safety integration](https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/plant/safety_integration.py): `src/nuclear_sim/plant/safety_integration.py`
- [Safety system](https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/safety/system.py): `src/nuclear_sim/safety/system.py`
- [Actuator](https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/instrumentation/actuator.py): `src/nuclear_sim/instrumentation/actuator.py`

### Physics models

- [Point kinetics](https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/plant/reactor_kinetics.py): `src/nuclear_sim/plant/reactor_kinetics.py`
- [Temperature feedback](https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/nuclear/kinetics/temperature_feedback.py): `src/nuclear_sim/nuclear/kinetics/temperature_feedback.py`
- [Thermal model](https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/thermal/thermal_model.py): `src/nuclear_sim/thermal/thermal_model.py`
- [Energy balance](https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/thermal/energy_balance.py): `src/nuclear_sim/thermal/energy_balance.py`
- [Power cycle](https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/thermal/power_cycle.py): `src/nuclear_sim/thermal/power_cycle.py`
- [Heat exchanger](https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/thermal/heat_exchanger.py): `src/nuclear_sim/thermal/heat_exchanger.py`
- [OpenMC model](https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/reactor/geometry.py): `src/nuclear_sim/reactor/geometry.py`
- [OpenMC runner](https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/nuclear/openmc/runner.py): `src/nuclear_sim/nuclear/openmc/runner.py`
- [Decay calculations](https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/nuclear/decay.py): `src/nuclear_sim/nuclear/decay.py`
- [Decay chains](https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/nuclear/decay_chain.py): `src/nuclear_sim/nuclear/decay_chain.py`
- [Nuclide inventory](https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/nuclear/inventory.py): `src/nuclear_sim/nuclear/inventory.py`
- [Nuclide data](https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/nuclear/nuclide_data.py): `src/nuclear_sim/nuclear/nuclide_data.py`
- [Radiation field](https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/radiation/radiation_field.py): `src/nuclear_sim/radiation/radiation_field.py`

### Operations and data

- [Telemetry collector](https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/telemetry/collector.py): `src/nuclear_sim/telemetry/collector.py`
- [Simulation recorder](https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/telemetry/simulation_recorder.py): `src/nuclear_sim/telemetry/simulation_recorder.py`
- [MySQL repository](https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/database/repository.py): `src/nuclear_sim/database/repository.py`
- [Database connection](https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/database/connection.py): `src/nuclear_sim/database/connection.py`

### Academic files

- [Academic routes](https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/web/routes/fisica_asignatura.py): `src/nuclear_sim/web/routes/fisica_asignatura.py`
- [File routes](https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/web/routes/files.py): `src/nuclear_sim/web/routes/files.py`
- [Academic storage](https://github.com/vvvrome/proyecto-nuclear/blob/main/src/nuclear_sim/web/file_storage.py): `src/nuclear_sim/web/file_storage.py`

### Other components

- **Browser user**
- **OpenMC**
- **MySQL database**

## Connections

- Browser user → Flask app: uses over HTTP (evidence: `README.md`)
- Flask app → Dashboard routes: registers (evidence: `src/nuclear_sim/web/app.py`)
- Flask app → Simulation routes: registers (evidence: `src/nuclear_sim/web/app.py`)
- Flask app → Academic routes: registers (evidence: `src/nuclear_sim/web/app.py`)
- Flask app → File routes: registers (evidence: `src/nuclear_sim/web/app.py`)
- Flask app → Plant simulation: initializes (evidence: `src/nuclear_sim/web/app.py`)
- Flask app → Database connection: creates (evidence: `src/nuclear_sim/web/app.py`)
- Flask app → MySQL repository: configures (evidence: `src/nuclear_sim/web/app.py`)
- Flask app → Academic storage: exposes listing (evidence: `src/nuclear_sim/web/app.py`)
- Simulation routes → Plant simulation: controls
- Plant simulation → Reactor model: reads state (evidence: `src/nuclear_sim/plant/simulation.py`)
- Plant simulation → Reactor dynamics: advances (evidence: `src/nuclear_sim/plant/simulation.py`)
- Plant simulation → Thermal model: steps (evidence: `src/nuclear_sim/plant/simulation.py`)
- Plant simulation → Power cycle: runs (evidence: `src/nuclear_sim/plant/simulation.py`)
- Plant simulation → Safety integration: evaluates (evidence: `src/nuclear_sim/plant/simulation.py`)
- Plant simulation → Plant instrumentation: updates (evidence: `src/nuclear_sim/plant/simulation.py`)
- Plant simulation → Telemetry collector: collects state (evidence: `src/nuclear_sim/plant/simulation.py`)
- Reactor dynamics → Point kinetics: uses (evidence: `src/nuclear_sim/plant/reactor_dynamics.py`)
- Reactor dynamics → Temperature feedback: uses (evidence: `src/nuclear_sim/plant/reactor_dynamics.py`)
- Reactor dynamics → Thermal model: uses (evidence: `src/nuclear_sim/plant/reactor_dynamics.py`)
- Power cycle → Heat exchanger: transfers heat (evidence: `src/nuclear_sim/thermal/power_cycle.py`)
- Safety integration → Safety system: uses (evidence: `src/nuclear_sim/plant/safety_integration.py`)
- Plant controller → Reactor model: controls (evidence: `src/nuclear_sim/plant/plant_controller.py`)
- Plant controller → Actuator: sets position (evidence: `src/nuclear_sim/plant/plant_controller.py`)
- Plant controller → Reactor dynamics: sets reactivity (evidence: `src/nuclear_sim/plant/plant_controller.py`)
- OpenMC model → OpenMC runner: configures simulation
- OpenMC runner → OpenMC: runs neutronics (evidence: `README.md`)
- Telemetry collector → Simulation recorder: feeds recording (evidence: `src/nuclear_sim/telemetry/simulation_recorder.py`)
- Simulation recorder → Plant simulation: records state (evidence: `src/nuclear_sim/telemetry/simulation_recorder.py`)
- Simulation recorder → Telemetry collector: collects readings (evidence: `src/nuclear_sim/telemetry/simulation_recorder.py`)
- Simulation recorder → MySQL repository: persists records (evidence: `src/nuclear_sim/telemetry/simulation_recorder.py`)
- Database connection → MySQL database: connects (evidence: `README.md`)
- MySQL repository → MySQL database: reads and writes (evidence: `README.md`)
- Decay chains → Decay calculations: uses (evidence: `src/nuclear_sim/nuclear/decay_chain.py`)
- Nuclide inventory → Decay calculations: uses (evidence: `src/nuclear_sim/nuclear/inventory.py`)
- Decay chains → Nuclide data: loads data (evidence: `scripts/run_decay_chain.py`)
- Academic routes → File routes: file operations
- File routes → Academic storage: uses (evidence: `src/nuclear_sim/web/routes/files.py`)
