# gerulab/wave-matlab architecture

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

- Interactive diagram: https://gitdiagram.com/gerulab/wave-matlab
- Repository: https://github.com/gerulab/wave-matlab

## Overview

WAVE-Matlab is a MATLAB implementation of the WAVE soil-water-flow model. Its apparent user workflow is to provide soil, climate, and boundary-condition inputs, run coupled water, solute, and temperature calculations (with crop-related options in the Gabriel version), then inspect or store outputs. The tree identifies these capabilities, but no source excerpts were supplied; the graph therefore maps the principal subsystems without asserting call order or data-transfer edges.

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_inputs["Inputs and setup"]
  node_gabriel_runner["WAVE runner<br/>[runwave.m]"]
  node_gabriel_reader["Input readers<br/>[read_inputfile.m]"]
  node_gabriel_init["Initialization<br/>[initialize.m]"]
  node_gabriel_bc["Boundary conditions"]
  node_sall_reader["Input reader<br/>[read_input.m]"]
  node_sall_bc["Boundary conditions"]
end

subgraph group_physics["Soil processes"]
  node_gabriel_water["Water flow solver<br/>[solve_flow.m]"]
  node_gabriel_solute["Solute solver<br/>[solve_solute.m]"]
  node_gabriel_temp["Temperature solver"]
  node_sall_water["Water flow solver<br/>[solve_flow.m]"]
  node_sall_solute["Solute solvers<br/>[solve_solute.m]"]
  node_sall_temp["Temperature solver"]
end

subgraph group_crop["Crop processes"]
  node_gabriel_crop["Crop model"]
  node_gabriel_uptake["Root uptake<br/>[in_root_uptake.m]"]
  node_gabriel_nitrogen["Nitrogen processes<br/>[nit_intg.m]"]
  node_sall_nitrogen["Nitrogen processes<br/>[nit_intg.m]"]
end

subgraph group_results["Results"]
  node_gabriel_store["Output storage<br/>[store_data.m]"]
  node_gabriel_plot["Model plots"]
  node_sall_store["Output storage<br/>[store_data.m]"]
  node_sall_plot["Model plots<br/>[draw_output.m]"]
end

node_user(("Model user"))

click node_gabriel_runner "https://github.com/gerulab/wave-matlab/blob/master/v_gabriel_130313/runwave.m"
click node_gabriel_reader "https://github.com/gerulab/wave-matlab/blob/master/v_gabriel_130313/read_inputfile.m"
click node_gabriel_init "https://github.com/gerulab/wave-matlab/blob/master/v_gabriel_130313/initialize.m"
click node_gabriel_bc "https://github.com/gerulab/wave-matlab/blob/master/v_gabriel_130313/soil_boundary_conditions.m"
click node_sall_reader "https://github.com/gerulab/wave-matlab/blob/master/v_sall_290710/read_input.m"
click node_sall_bc "https://github.com/gerulab/wave-matlab/blob/master/v_sall_290710/soil_boundary_conditions.m"
click node_gabriel_water "https://github.com/gerulab/wave-matlab/blob/master/v_gabriel_130313/solve_flow.m"
click node_gabriel_solute "https://github.com/gerulab/wave-matlab/blob/master/v_gabriel_130313/solve_solute.m"
click node_gabriel_temp "https://github.com/gerulab/wave-matlab/blob/master/v_gabriel_130313/solve_temperature_JV.m"
click node_sall_water "https://github.com/gerulab/wave-matlab/blob/master/v_sall_290710/solve_flow.m"
click node_sall_solute "https://github.com/gerulab/wave-matlab/blob/master/v_sall_290710/solve_solute.m"
click node_sall_temp "https://github.com/gerulab/wave-matlab/blob/master/v_sall_290710/solve_temperature.m"
click node_gabriel_crop "https://github.com/gerulab/wave-matlab/blob/master/v_gabriel_130313/run_crop_model_leek2.m"
click node_gabriel_uptake "https://github.com/gerulab/wave-matlab/blob/master/v_gabriel_130313/in_root_uptake.m"
click node_gabriel_nitrogen "https://github.com/gerulab/wave-matlab/blob/master/v_gabriel_130313/nit_intg.m"
click node_sall_nitrogen "https://github.com/gerulab/wave-matlab/blob/master/v_sall_290710/nit_intg.m"
click node_gabriel_store "https://github.com/gerulab/wave-matlab/blob/master/v_gabriel_130313/store_data.m"
click node_gabriel_plot "https://github.com/gerulab/wave-matlab/blob/master/v_gabriel_130313/draw_output_wavemat.m"
click node_sall_store "https://github.com/gerulab/wave-matlab/blob/master/v_sall_290710/store_data.m"
click node_sall_plot "https://github.com/gerulab/wave-matlab/blob/master/v_sall_290710/draw_output.m"

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_gabriel_runner,node_gabriel_reader,node_gabriel_init,node_gabriel_bc,node_sall_reader,node_sall_bc,node_user toneBlue
class node_gabriel_water,node_gabriel_solute,node_gabriel_temp,node_sall_water,node_sall_solute,node_sall_temp toneAmber
class node_gabriel_crop,node_gabriel_uptake,node_gabriel_nitrogen,node_sall_nitrogen toneMint
class node_gabriel_store,node_gabriel_plot,node_sall_store,node_sall_plot toneRose
```

## Components

### Inputs and setup

- [WAVE runner](https://github.com/gerulab/wave-matlab/blob/master/v_gabriel_130313/runwave.m): `v_gabriel_130313/runwave.m`
- [Input readers](https://github.com/gerulab/wave-matlab/blob/master/v_gabriel_130313/read_inputfile.m): `v_gabriel_130313/read_inputfile.m`
- [Initialization](https://github.com/gerulab/wave-matlab/blob/master/v_gabriel_130313/initialize.m): `v_gabriel_130313/initialize.m`
- [Boundary conditions](https://github.com/gerulab/wave-matlab/blob/master/v_gabriel_130313/soil_boundary_conditions.m): `v_gabriel_130313/soil_boundary_conditions.m`
- [Input reader](https://github.com/gerulab/wave-matlab/blob/master/v_sall_290710/read_input.m): `v_sall_290710/read_input.m`
- [Boundary conditions](https://github.com/gerulab/wave-matlab/blob/master/v_sall_290710/soil_boundary_conditions.m): `v_sall_290710/soil_boundary_conditions.m`

### Soil processes

- [Water flow solver](https://github.com/gerulab/wave-matlab/blob/master/v_gabriel_130313/solve_flow.m): `v_gabriel_130313/solve_flow.m`
- [Solute solver](https://github.com/gerulab/wave-matlab/blob/master/v_gabriel_130313/solve_solute.m): `v_gabriel_130313/solve_solute.m`
- [Temperature solver](https://github.com/gerulab/wave-matlab/blob/master/v_gabriel_130313/solve_temperature_JV.m): `v_gabriel_130313/solve_temperature_JV.m`
- [Water flow solver](https://github.com/gerulab/wave-matlab/blob/master/v_sall_290710/solve_flow.m): `v_sall_290710/solve_flow.m`
- [Solute solvers](https://github.com/gerulab/wave-matlab/blob/master/v_sall_290710/solve_solute.m): `v_sall_290710/solve_solute.m`
- [Temperature solver](https://github.com/gerulab/wave-matlab/blob/master/v_sall_290710/solve_temperature.m): `v_sall_290710/solve_temperature.m`

### Crop processes

- [Crop model](https://github.com/gerulab/wave-matlab/blob/master/v_gabriel_130313/run_crop_model_leek2.m): `v_gabriel_130313/run_crop_model_leek2.m`
- [Root uptake](https://github.com/gerulab/wave-matlab/blob/master/v_gabriel_130313/in_root_uptake.m): `v_gabriel_130313/in_root_uptake.m`
- [Nitrogen processes](https://github.com/gerulab/wave-matlab/blob/master/v_gabriel_130313/nit_intg.m): `v_gabriel_130313/nit_intg.m`
- [Nitrogen processes](https://github.com/gerulab/wave-matlab/blob/master/v_sall_290710/nit_intg.m): `v_sall_290710/nit_intg.m`

### Results

- [Output storage](https://github.com/gerulab/wave-matlab/blob/master/v_gabriel_130313/store_data.m): `v_gabriel_130313/store_data.m`
- [Model plots](https://github.com/gerulab/wave-matlab/blob/master/v_gabriel_130313/draw_output_wavemat.m): `v_gabriel_130313/draw_output_wavemat.m`
- [Output storage](https://github.com/gerulab/wave-matlab/blob/master/v_sall_290710/store_data.m): `v_sall_290710/store_data.m`
- [Model plots](https://github.com/gerulab/wave-matlab/blob/master/v_sall_290710/draw_output.m): `v_sall_290710/draw_output.m`

### Other components

- **Model user**
