smashbox.tutorial_python

Created on Thu Aug 21 12:03:55 2025

@author: maxime

  1#!/usr/bin/env python3
  2# -*- coding: utf-8 -*-
  3"""
  4Created on Thu Aug 21 12:03:55 2025
  5
  6@author: maxime
  7"""
  8
  9
 10if __name__ == "__main__":
 11
 12    import smashbox
 13
 14    bbox = {
 15        "left": 875000.0,
 16        "bottom": 6228000.0,
 17        "right": 1001000.0,
 18        "top": 6320000.0,
 19    }
 20
 21    sb = smashbox.SmashBox()
 22
 23    sb.myparam.set_param("bbox", bbox)
 24    sb.myparam.set_param("outlets_database", "db_sites")
 25    sb.myparam.set_param("smash_parameters_dt", 3600.0)
 26
 27    # RHAX
 28    sb.myparam.set_param(
 29        "outlets_shapefile",
 30        "/nas/RHAX/DONNEES/SIG/BASSINS/CONTOUR/SITES_L93/Hydro_Bassins.shp",
 31    )
 32
 33    sb.newmodel("rex")
 34
 35    sb.rex.mysetup.update_setup(
 36        {
 37            "start_time": "2014-01-01 00:00",
 38            "end_time": "2014-02-01 00:00",
 39        }
 40    )
 41
 42    # MAX
 43    sb.myparam.set_param(
 44        "outlets_shapefile",
 45        "/home/maxime/DATA/bassin_hydro/Hydro_Bassins.shp",
 46    )
 47
 48    sb.newmodel("rex")
 49
 50    sb.rex.mysetup.update_setup(
 51        {
 52            "pet_directory": "/home/maxime/DATA/ETP-SFR-FRA-INTERA_L93",
 53            "prcp_directory": "/home/maxime/DATA/PLUIE",
 54            "qobs_directory": "/home/maxime/DATA/QOBS_SITE_60M",
 55            "start_time": "2014-01-01 00:00",
 56            "end_time": "2014-02-01 00:00",
 57        }
 58    )
 59
 60    sb.rex.generate_mesh(
 61        query="(SURF>40) & (INFLUENCE=='Influence nulle ou faible')",
 62        area_error_th=0.2,
 63    )
 64
 65    # optimize parameters if required
 66    # sb.rex.optimize()
 67
 68    sb.rex.myplot.plot_mesh(fig_settings={"figname": "output/mesh.png"})
 69    sb.rex.myplot.plot_catchment_surface_error(
 70        fig_settings={"figname": "output/mesh_surface_error.png"}
 71    )
 72    sb.rex.myplot.plot_catchment_surface_consistency(
 73        fig_settings={"figname": "output/mesh_surface_consistency.png"}
 74    )
 75
 76    sb.rex.model()
 77    sb.rex.forward_run(return_options={"q_domain": True}, warmup=100)
 78
 79    sb.rex.mysmashmodel.mystats.foutlets_stats()
 80    sb.rex.mysmashmodel.mystats.fspatial_stats()
 81    sb.rex.mysmashmodel.mystats.fmisfit_stats()
 82
 83    sb.rex.myplot.multiplot_parameters(
 84        fig_settings={"figname": "output/muliplot_parameters.png"}
 85    )
 86    sb.rex.myplot.plot_parameters(
 87        fig_settings={"figname": "output/cp_parameters.png"}
 88    )
 89
 90    sb.rex.myplot.plot_outlet_stats(
 91        fig_settings={"figname": "output/outlets_max_discharges.png"}
 92    )
 93    sb.rex.myplot.plot_hydrograph(
 94        fig_settings={"figname": "output/outlet_discharges.png"}
 95    )
 96    sb.rex.myplot.plot_spatial_stats(
 97        fig_settings={"figname": "output/spatial_max_discharges.png"}
 98    )
 99
100    sb.rex.myplot.multiplot_misfit(
101        fig_settings={
102            "figname": "output/multiplot_nse_misfit.png",
103            "xsize": 15,
104            "ysize": 15,
105        }
106    )
107    sb.rex.myplot.plot_misfit(
108        misfit="nnse", fig_settings={"figname": "output/nnse_misfit.png"}
109    )
110    sb.rex.myplot.plot_misfit_map(
111        fig_settings={"figname": "output/map_nse_misfit.png"}
112    )