Tip
Need help? Please let us know in the SUEWS Community.
Please report issues with the manual on GitHub Issues (or use Report Issue for This Page for page-specific feedback).
Please cite SUEWS with proper information from our Zenodo page.
6.1. SUEWSSimulation Class#
The SUEWSSimulation class provides a simplified object-oriented interface for running SUEWS simulations.
6.1.1. Key Features#
YAML Configuration: Load configurations from YAML files
Configuration Updates: Update configuration with dictionaries or YAML files
Forcing Management: Load single files, lists of files, or DataFrames
Simple API: Clean interface focused on essential functionality
Format Support: Save results in txt or parquet formats via OutputConfig
For usage examples and tutorials, see SUEWSSimulation Tutorial.
6.1.2. Class Reference#
6.1.2.1. Core Properties#
Access simulation configuration, forcing data, results, and status checks.
Access to simulation configuration. |
|
Access to forcing data as SUEWSForcing object. |
|
Access to simulation results DataFrame (raw). |
|
Check if simulation is configured and ready to run. |
|
Check if simulation has been run successfully. |
6.1.2.2. Advanced Properties#
For spin-up runs, state continuation, and deep model inspection.
Initial state DataFrame for simulation. |
|
Final state DataFrame after simulation. |
6.1.2.3. Setup Methods#
Configure simulations, load forcing data, and initialise from various sources.
Update simulation configuration. |
|
Update meteorological forcing data. |
|
Create SUEWSSimulation instance with built-in sample data. |
|
Create SUEWSSimulation from saved state for continuation runs. |
6.1.2.4. Execution Methods#
Run simulations and reset state for re-execution with different parameters.
6.1.2.5. Output Methods#
Save results to files and extract specific variables from output groups.
Save simulation results according to OutputConfig settings. |
|
Extract specific variable from simulation results. |
6.1.2.6. Full Class Reference#
- class supy.SUEWSSimulation(config: str | Path | dict | Any = None)[source]#
Bases:
objectSimplified SUEWS simulation class for urban climate modelling.
This class provides a clean interface for: - Loading and updating configuration - Managing forcing data - Running simulations - Saving results
Examples
Basic usage:
>>> sim = SUEWSSimulation("config.yaml") >>> sim.update_forcing("forcing.txt") >>> sim.run() >>> sim.save("output_dir/")
Updating configuration:
>>> sim.update_config({"model": {"control": {"tstep": 600}}}) >>> sim.reset() >>> sim.run()
- classmethod from_output(output: SUEWSOutput) SUEWSSimulation[source]#
Create SUEWSSimulation from previous output for continuation runs.
Convenience method that extracts the final state from a SUEWSOutput object and creates a new simulation ready for continuation.
- Parameters:
output (SUEWSOutput) – Output object from a previous simulation run.
- Returns:
Simulation instance initialised with final state from output, ready for new forcing data and run.
- Return type:
Examples
Seamless continuation from previous run:
>>> # Run first period >>> sim1 = SUEWSSimulation("config.yaml") >>> sim1.update_forcing("forcing_2023.txt") >>> output1 = sim1.run()
>>> # Continue from output state >>> sim2 = SUEWSSimulation.from_output(output1) >>> sim2.update_forcing("forcing_2024.txt") >>> output2 = sim2.run()
See also
from_stateCreate from saved state file or DataFrame
SUEWSOutput.state_finalFinal state property for restart
- classmethod from_sample_data()[source]#
Create SUEWSSimulation instance with built-in sample data.
This factory method provides a quick way to create a simulation object pre-loaded with sample configuration and forcing data, ideal for tutorials, testing, and learning the SUEWS workflow.
- Returns:
Simulation instance ready to run with sample data loaded.
- Return type:
Examples
Quick start with sample data:
>>> from supy import SUEWSSimulation >>> sim = SUEWSSimulation.from_sample_data() >>> sim.run() >>> results = sim.results
- classmethod from_state(state: str | Path | DataFrame)[source]#
Create SUEWSSimulation from saved state for continuation runs.
Load a previously saved model state to continue simulation from where it left off. Useful for multi-period runs or scenario testing with different forcing data.
- Parameters:
state (str, Path, or pandas.DataFrame) –
State to load for continuation. Can be:
Path to CSV file:
df_state.csvordf_state_{site}.csvPath to Parquet file:
{site}_SUEWS_state_final.parquetDataFrame: df_state_final: model final states from previous simulation
- Returns:
Simulation instance initialised with loaded state, ready for new forcing data and run.
- Return type:
Warning
If the saved state was created with a different SUEWS version, a warning is issued about potential compatibility issues.
Examples
Continue from saved file:
>>> # Period 1 >>> sim1 = SUEWSSimulation("config.yaml") >>> sim1.update_forcing("forcing_2023.txt") >>> sim1.run() >>> paths = sim1.save("output/")
>>> # Period 2 - continue from saved state >>> sim2 = SUEWSSimulation.from_state("output/df_state.csv") >>> sim2.update_forcing("forcing_2024.txt") >>> sim2.run()
Continue from DataFrame directly:
>>> # In-memory continuation without saving to file >>> sim1 = SUEWSSimulation.from_sample_data() >>> sim1.run() >>> df_state_final = sim1.state_final >>> >>> # Continue with new forcing >>> sim2 = SUEWSSimulation.from_state(df_state_final) >>> sim2.update_forcing("forcing_2024.txt") >>> sim2.run()
Load from Parquet format:
>>> sim2 = SUEWSSimulation.from_state( ... "output/TestSite_SUEWS_state_final.parquet" ... )
See also
saveSave simulation results and state
resetClear results and reset to initial state
state_finalAccess final state from completed simulation
- get_variable(var_name: str, group: str | None = None, site: int | str | None = None) DataFrame[source]#
Extract specific variable from simulation results.
Convenience method to extract variables from the MultiIndex column structure without needing to understand the internal data layout.
- Parameters:
- Returns:
DataFrame with selected variable(s), indexed by time.
- Return type:
- Raises:
RuntimeError – If simulation hasn’t been run yet.
ValueError – If variable name not found in results, or if variable is ambiguous (appears in multiple groups) and no group specified.
Examples
Extract sensible heat flux:
>>> sim = SUEWSSimulation.from_sample_data() >>> sim.run() >>> qh = sim.get_variable("QH") >>> qh.plot() # Quick visualisation
Handle variables in multiple groups:
>>> # If 'Tair' appears in both 'forcing' and 'output' groups: >>> tair = sim.get_variable("Tair", group="output")
See also
resultsFull simulation output DataFrame
- is_complete() bool[source]#
Check if simulation has been run successfully.
- Returns:
True if simulation has completed and results are available.
- Return type:
Examples
>>> sim = SUEWSSimulation.from_sample_data() >>> sim.is_complete() False
>>> sim.run() >>> sim.is_complete() True
- is_ready() bool[source]#
Check if simulation is configured and ready to run.
- Returns:
True if both configuration and forcing data are loaded.
- Return type:
Examples
>>> sim = SUEWSSimulation() >>> sim.is_ready() False
>>> sim = SUEWSSimulation.from_sample_data() >>> sim.is_ready() True
- reset() SUEWSSimulation[source]#
Reset simulation to initial state, clearing results.
- Returns:
Self, for method chaining.
- Return type:
Examples
>>> sim.run() >>> sim.reset().run() # Re-run with same configuration
- run(start_date=None, end_date=None, chunk_day: int = 3660, **run_kwargs) SUEWSOutput[source]#
Run SUEWS simulation using the Rust bridge backend.
- Parameters:
- Returns:
Simulation results wrapped in an OOP interface with analysis and plotting convenience methods. Access raw DataFrame via
.to_dataframe()or.df.- Return type:
SUEWSOutput
- Raises:
RuntimeError – If configuration or forcing data is missing.
Examples
>>> sim = SUEWSSimulation.from_sample_data() >>> output = sim.run() >>> output.QH # Access sensible heat flux >>> output.diurnal_average("QH") # Get diurnal pattern >>> output.to_dataframe() # Get raw DataFrame
- save(output_path: str | Path | None = None, **save_kwargs) list[str][source]#
Save simulation results according to OutputConfig settings.
- Parameters:
output_path (str or Path, optional) – Output directory path. If None, uses current directory.
save_kwargs (dict) –
Additional keyword arguments for customising output.
Currently supported kwargs:
- formatstr
Output format: ‘txt’ (default) or ‘parquet’. Note: This overrides config file settings.
Not currently supported (due to internal constraints):
freq_s: Controlled by config.model.control.output_file.freq
site: Derived from config.sites[0].name
save_tstep: Not configurable via OOP interface
output_level: Not configurable via OOP interface
These parameters are determined by the configuration object. To change them, update your configuration file or use
update_config()before running the simulation.
- Returns:
List of paths to saved files.
- Return type:
- Raises:
RuntimeError – If no simulation results are available.
Examples
Save with default settings from config:
>>> sim.run() >>> paths = sim.save()
Save to specific directory with custom format:
>>> sim.run() >>> paths = sim.save("output/", format="parquet")
- update_config(config: str | Path | dict | SUEWSConfig, auto_load_forcing: bool = True) SUEWSSimulation[source]#
Update simulation configuration.
Can accept full or partial configuration updates.
- Parameters:
config (str, Path, dict, or SUEWSConfig) – Configuration source: - Path to YAML file - Dictionary with parameters (can be partial) - SUEWSConfig object
auto_load_forcing (bool, optional) –
If True (default), automatically load forcing data specified in the config file. If False, forcing must be loaded explicitly using
update_forcing().Set to False when: - You want explicit control over forcing data loading - Forcing file paths in config are placeholders - You plan to provide forcing data programmatically
- Returns:
Self, for method chaining.
- Return type:
Examples
>>> sim.update_config("new_config.yaml") >>> sim.update_config({"model": {"control": {"tstep": 300}}}) >>> sim.update_config("config.yaml").update_forcing("forcing.txt")
Explicit forcing control:
>>> sim.update_config("config.yaml", auto_load_forcing=False) >>> sim.update_forcing("custom_forcing.txt")
- update_forcing(forcing_data: str | Path | list | DataFrame | SUEWSForcing) SUEWSSimulation[source]#
Update meteorological forcing data.
- Parameters:
forcing_data (str, Path, list of paths, pandas.DataFrame, or SUEWSForcing) – Forcing data source: - Path to a single forcing file - List of paths to forcing files (concatenated in order) - Path to directory containing forcing files (deprecated) - DataFrame with forcing data - SUEWSForcing object
- Returns:
Self, for method chaining.
- Return type:
Notes
When loading from file paths, forcing data is resampled to match the model timestep from
model.control.tstepin the configuration. If no configuration is loaded, defaults to 300 seconds (5 minutes).Examples
>>> sim.update_forcing("forcing_2023.txt") >>> sim.update_forcing(["forcing_2023.txt", "forcing_2024.txt"]) >>> sim.update_forcing(df_forcing) >>> sim.update_forcing(SUEWSForcing.from_file("forcing.txt")) >>> sim.update_config(cfg).update_forcing(forcing).run()
- property config: SUEWSConfig | None#
Access to simulation configuration.
- Returns:
Complete SUEWS configuration object. None if no configuration loaded.
- Return type:
SUEWSConfig or None
See also
update_configLoad or update configuration
state_initAccess initial state derived from configuration
- property forcing: SUEWSForcing | None#
Access to forcing data as SUEWSForcing object.
- Returns:
Meteorological forcing data wrapped in OOP interface with validation and analysis methods. None if no forcing loaded.
- Return type:
SUEWSForcing or None
See also
- df_forcing variables
Complete forcing data structure and variable descriptions
update_forcingLoad forcing data from files or DataFrames
Examples
>>> sim = SUEWSSimulation.from_sample_data() >>> sim.forcing.summary() # Get forcing statistics >>> sim.forcing.Tair # Access air temperature >>> sim.forcing.df # Access raw DataFrame
- property output: SUEWSOutput | None#
Access to simulation results as SUEWSOutput object.
Note
Preferred pattern is
output = sim.run()which returns the sameSUEWSOutputobject. This property is provided for convenience when re-accessing results after simulation.- Returns:
Simulation results wrapped in OOP interface with analysis and plotting convenience methods. None if simulation hasn’t been run yet.
- Return type:
SUEWSOutput or None
See also
runRun simulation and return SUEWSOutput (preferred)
- df_output variables
Complete output data structure
Examples
Preferred pattern - capture return value:
>>> sim = SUEWSSimulation.from_sample_data() >>> output = sim.run() # Capture output >>> output.QH # Access sensible heat flux
Alternative - use property after run:
>>> sim = SUEWSSimulation.from_sample_data() >>> sim.run() >>> sim.output.QH # Re-access via property
- property results: DataFrame | None#
Access to simulation results DataFrame (raw).
Deprecated since version 2025.1: Use
output = sim.run()to get aSUEWSOutputobject, thenoutput.dffor the raw DataFrame if needed.- Returns:
Complete simulation output with all variable groups. None if simulation hasn’t been run yet.
- Return type:
pandas.DataFrame or None
See also
outputAccess results as SUEWSOutput object with analysis methods
- df_output variables
Complete output data structure and variable descriptions
get_variableExtract specific variables from output groups
saveSave results to files
- property state_final: DataFrame | None#
Final state DataFrame after simulation.
Available only after running simulation. Contains evolved state variables that can be used to continue simulation.
- Returns:
Final state after simulation run. None if simulation hasn’t been run yet.
- Return type:
pandas.DataFrame or None
See also
- df_state variables
Complete state data structure and variable descriptions
state_initInitial state before simulation
resetClear results and reset to initial state
from_stateCreate new simulation from this final state
Examples
>>> sim = SUEWSSimulation.from_sample_data() >>> sim.run() >>> sim.state_final is not None True
- property state_init: DataFrame | None#
Initial state DataFrame for simulation.
- Returns:
Initial state with surface characteristics and parameters. None if no configuration loaded.
- Return type:
pandas.DataFrame or None
See also
- df_state variables
Complete state data structure and variable descriptions
state_finalFinal state after simulation
from_stateCreate simulation from existing state
Examples
>>> sim = SUEWSSimulation.from_sample_data() >>> sim.state_init.shape (1, 1403)
6.1.3. Quick Example#
from supy import SUEWSSimulation
# Create and run simulation
sim = SUEWSSimulation('config.yml')
sim.update_forcing('forcing_data.txt')
sim.run()
# Access results - use get_variable() for safe extraction
qh = sim.get_variable('QH') # Sensible heat flux
qe = sim.get_variable('QE') # Latent heat flux
# For variables in multiple groups, specify which one
albedo = sim.get_variable('AlbSnow', group='SUEWS')
# Save results
sim.save('output_dir/')
# Update configuration and re-run
sim.update_config({'model': {'control': {'tstep': 600}}})
sim.reset()
sim.run()
Note
Some variables appear in multiple output groups (e.g., AlbSnow in both SUEWS and DailyState).
Use the get_variable() method with the group parameter to disambiguate. See the tutorial for details.