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 = {"left": 875000.0, "bottom": 6228000.0, "right": 1001000.0, "top": 6320000.0}
 15
 16    sb = smashbox.SmashBox()
 17
 18    sb.myparam.set_param("bbox", bbox)
 19    sb.myparam.set_param("outlets_database", "db_sites")
 20    sb.myparam.set_param("smash_parameters_dt", 3600.0)
 21
 22    # RHAX
 23    sb.myparam.set_param(
 24        "outlets_shapefile",
 25        "/nas/RHAX/DONNEES/SIG/BASSINS/CONTOUR/SITES_L93/Hydro_Bassins.shp",
 26    )
 27
 28    sb.newmodel("rex")
 29
 30    sb.rex.mysetup.update_setup(
 31        {
 32            "start_time": "2014-01-01 00:00",
 33            "end_time": "2014-02-01 00:00",
 34        }
 35    )
 36
 37    # MAX
 38    # sb.myparam.set_param(
 39    #     "outlets_shapefile",
 40    #     "/home/maxime/DEV/easysmash/smashbox/smashbox/asset/shapefile/Hydro_Bassins.shp",
 41    # )
 42
 43    # sb.newmodel("rex")
 44
 45    # sb.rex.mysetup.update_setup(
 46    #     {
 47    #         "pet_directory": "/home/maxime/DATA/ETP-SFR-FRA-INTERA_L93",
 48    #         "prcp_directory": "/home/maxime/DATA/PLUIE",
 49    #         "qobs_directory": "/home/maxime/DATA/QOBS_SITE_60M",
 50    #         "start_time": "2014-01-01 00:00",
 51    #         "end_time": "2014-02-01 00:00",
 52    #     }
 53    # )
 54
 55    sb.rex.generate_mesh(
 56        query="(SURF>40) & (INFLUENCE=='Influence nulle ou faible')", area_error_th=0.2
 57    )
 58
 59    # optimize parameters if required
 60    # sb.rex.optimize()
 61
 62    sb.rex.myplot.plot_mesh(fig_settings={"figname": "output/mesh.png"})
 63    sb.rex.myplot.plot_catchment_surface_error(
 64        fig_settings={"figname": "output/mesh_surface_error.png"}
 65    )
 66    sb.rex.myplot.plot_catchment_surface_consistency(
 67        fig_settings={"figname": "output/mesh_surface_consistency.png"}
 68    )
 69
 70    sb.rex.model()
 71    sb.rex.forward_run(return_options={"q_domain": True}, warmup=100)
 72
 73    sb.rex.mystats.foutlets_stats()
 74    sb.rex.mystats.fspatial_stats()
 75    sb.rex.mystats.fmisfit_stats()
 76
 77    sb.rex.myplot.multiplot_parameters(
 78        fig_settings={"figname": "output/muliplot_parameters.png"}
 79    )
 80    sb.rex.myplot.plot_parameters(fig_settings={"figname": "output/cp_parameters.png"})
 81
 82    sb.rex.myplot.plot_outlet_stats(
 83        fig_settings={"figname": "output/outlets_max_discharges.png"}
 84    )
 85    sb.rex.myplot.plot_hydrograph(
 86        fig_settings={"figname": "output/outlet_discharges.png"}
 87    )
 88    sb.rex.myplot.plot_spatial_stats(
 89        fig_settings={"figname": "output/spatial_max_discharges.png"}
 90    )
 91
 92    sb.rex.myplot.multiplot_misfit(
 93        fig_settings={
 94            "figname": "output/multiplot_nse_misfit.png",
 95            "xsize": 15,
 96            "ysize": 15,
 97        }
 98    )
 99    sb.rex.myplot.plot_misfit(
100        misfit="nnse", fig_settings={"figname": "output/nnse_misfit.png"}
101    )
102    sb.rex.myplot.plot_misfit_map(fig_settings={"figname": "output/map_nse_misfit.png"})