mike-rain
Turn a timestamped rainfall CSV (design storm, gauge record, climate-scenario series) into a MIKE+ rainfall .dfs0 via the mike-plus MCP server, verified by read-back, ready to drive a model's rainfall
Files1
View on GitHubSKILL.mdskills/mike-rain/SKILL.md
GitHubMIKE+ Rain
MIKE+ rainfall boundaries read a .dfs0 of Rainfall Intensity, mm/h,
mean-step-backward: exactly the shape of DHI's own example rain files
(Sirius_IDF_1year_rainfall.dfs0). This skill produces that file from a CSV.
Tool
mike_rain_to_dfs0—{csv, out_dfs0, time_col?, value_col?, unit?, item_name?}unit:'mm/h'(intensity, default) or'mm'(depth per step, converted with each step's own duration; the conversion is reported).- Returns
{dfs0, item, n_steps, start, end, timestep_s, uniform_step, total_depth_mm, peak_intensity_mm_h, peak_time, conversion}after reading the file back.
Conventions
- Time column first, value column second by default; name them if the CSV differs.
- Rejects negative values, non-numeric cells, unsorted duplicates, fewer than two steps: fix the CSV, do not silently clean it.
- Report
total_depth_mmandpeak_intensity_mm_h; ifuniform_stepis false say so (MIKE 1D accepts irregular steps, but the user should know). - The tool never touches the model. To make a MIKE 1D model use the new rain, edit its rainfall boundary with
mike-paramson a COPY. The boundary lives in tablemsm_BBoundary(the rainfall row hasTypeNo = 1; in Sirius_RTC its MUID isRainfall) with columnsTSConnection= dfs0 path relative to the model folder (DHI's example:Sirius_IDF_1year_rainfall.dfs0), so write the new file into the model copy folder,TimeseriesName= the dfs0 item name (must match: passitem_nametomike_rain_to_dfs0, or set this column toRainfall),DataTypeName=Rainfall Intensity.mike_get_values {table: msm_BBoundary, columns: [TypeNo, TSConnection, TimeseriesName, DataTypeName]}first, thenmike_set_valueson that MUID, then run and checkmike_results_summary.
- The same
.dfs0is whatmike_plot_rain_flow/mike_plot_comparetake asrain_dfs0, so use it for the figure of the run it drove.
Orchestration
mike_rain_to_dfs0 {csv, out_dfs0: runs/<case>/00_model/storm.dfs0, item_name: <existing TimeseriesName or 'Rainfall'>}
mike_get_values {sqlite: <copy>, table: msm_BBoundary, columns: [TypeNo, TSConnection, TimeseriesName]}
mike_set_values {sqlite: <copy>, table: msm_BBoundary, muids: [<rain row>], values: {TSConnection: storm.dfs0, TimeseriesName: ...}}
mike_run -> mike_results_summary (skip_hours) -> mike_plot_rain_flow {rain_dfs0: storm.dfs0}
mike_manifest_write {inputs: [csv, storm.dfs0], ...}