Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding Hot Start File save-during-simulation feature #393

Merged
merged 10 commits into from
Jul 13, 2023
12 changes: 6 additions & 6 deletions .github/workflows/build-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
strategy:
fail-fast: false
matrix:
os: [windows-2022, ubuntu-20.04, macos-10.15]
os: [windows-2022, ubuntu-20.04, macos-13.4]
requirements: [requirements-swmm.txt]
include:
- os: windows-2022
Expand Down Expand Up @@ -58,9 +58,9 @@ jobs:
shell: bash
working-directory: ./ci-tools/linux

- os: macos-10.15
- os: macos-13.4
sys_pkgs: brew install libomp #boost
boost_platform_version: 10.15
boost_platform_version: 13.4
boost_toolsit: clang
build_unit_test: make.zsh -t -g "Xcode"
build_reg_test: make.zsh -g "Xcode"
Expand Down Expand Up @@ -111,19 +111,19 @@ jobs:
# install boost on mac and linux
- name: Install required system packages on mac and linux
run: ${{ matrix.sys_pkgs }}
if: ${{ runner.os == 'macOS' }}
if: ${{ runner.os == 'macOS' }}

# boost takes a while to install on windows, so try to cache
- name: Install boost
# if: ${{runner.os == 'Windows'}}
# if: ${{runner.os == 'Windows'}}
uses: MarkusJx/[email protected]
id: install-boost
with:
# REQUIRED: Specify the required boost version
# A list of supported versions can be found here:
# https://github.com/MarkusJx/prebuilt-boost/blob/main/versions-manifest.json
boost_version: 1.81.0
link: shared
link: shared
# OPTIONAL: Specify a custon install location
# boost_install_dir: C:\some_directory
# OPTIONAL: Specify a platform version
Expand Down
6 changes: 6 additions & 0 deletions src/solver/include/toolkit.h
Original file line number Diff line number Diff line change
Expand Up @@ -612,6 +612,12 @@ EXPORT_TOOLKIT int swmm_setOutfallStage(int index, double stage);
*/
EXPORT_TOOLKIT int swmm_setGagePrecip(int index, double total_precip);

/**
@brief Save hotstart file during simulation
@param hsfile The file name of the hotstart file that user would like to save
*/
EXPORT_TOOLKIT int swmm_saveHotstart(char *hsfile);

/**
@brief Helper function to free memory array allocated in SWMM.
@param array The pointer to the array
Expand Down
40 changes: 40 additions & 0 deletions src/solver/toolkit.c
abhiramm7 marked this conversation as resolved.
Show resolved Hide resolved
Original file line number Diff line number Diff line change
Expand Up @@ -3096,6 +3096,46 @@ EXPORT_TOOLKIT int swmm_setGagePrecip(int index, double total_precip)
return error_code;
}

EXPORT_TOOLKIT int DLLEXPORT swmm_saveHotstart(char *hsfile)
///
/// Input: hotstart file ID name (able to overwrite)
/// Return API Error
/// Purpose: Allows hot start files to be created during a simulation
/// at any time.
{
int error_code = 0;
// Check if Open
if(swmm_IsOpenFlag() == FALSE)
{
error_code = ERR_TKAPI_INPUTNOTOPEN;
}
// Check if Simulation is Running
else if (swmm_IsStartedFlag() == FALSE)
{
error_code = ERR_TKAPI_SIM_NRUNNING;
}
else
{
// Storing Existing INP set HSFs
TFile tmpHotstart1 = Fhotstart1;
TFile tmpHotstart2 = Fhotstart2;
int _fl1_info = Fhotstart1.mode;
int _fl2_info = Fhotstart2.mode;
// Create info for New HSF
Fhotstart1.mode = NO_FILE;
Fhotstart2.mode = SAVE_FILE;
sstrncpy(Fhotstart2.name, hsfile, MAXFNAME);
// Saving Data
if (hotstart_open()) hotstart_close();
// Replacing INP set HSFs
Fhotstart2 = tmpHotstart2;
Fhotstart1 = tmpHotstart1;
Fhotstart1.mode = _fl1_info;
Fhotstart2.mode = _fl2_info;
}
return error_code;
}

EXPORT_TOOLKIT void swmm_freeMemory(void *memory)
//
// Purpose: Frees memory allocated by API calls
Expand Down
1 change: 1 addition & 0 deletions tests/solver/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ set(solver_test_srcs
test_solver.cpp
test_stats.cpp
test_inlets_and_drains.cpp
test_toolkit_hotstart.cpp
# ADD NEW TEST SUITES TO EXISTING TOOLKIT TEST MODULE
)

Expand Down
217 changes: 217 additions & 0 deletions tests/solver/data/hotstart/Simulation1.inp
Original file line number Diff line number Diff line change
@@ -0,0 +1,217 @@
[TITLE]
;;Project Title/Notes
Example 1

[OPTIONS]
;;Option Value
FLOW_UNITS CFS
INFILTRATION HORTON
FLOW_ROUTING DYNWAVE
LINK_OFFSETS DEPTH
MIN_SLOPE 0
ALLOW_PONDING NO
SKIP_STEADY_STATE NO

START_DATE 01/01/1998
START_TIME 00:00:00
REPORT_START_DATE 01/01/1998
REPORT_START_TIME 00:00:00
END_DATE 01/02/1998
END_TIME 12:00:00
SWEEP_START 1/1
SWEEP_END 12/31
DRY_DAYS 5
REPORT_STEP 01:00:00
WET_STEP 00:15:00
DRY_STEP 01:00:00
ROUTING_STEP 0:01:00

INERTIAL_DAMPING PARTIAL
NORMAL_FLOW_LIMITED BOTH
FORCE_MAIN_EQUATION H-W
VARIABLE_STEP 0.75
LENGTHENING_STEP 0
MIN_SURFAREA 0
MAX_TRIALS 0
HEAD_TOLERANCE 0
SYS_FLOW_TOL 5
LAT_FLOW_TOL 5
;MINIMUM_STEP 0.5
THREADS 1

[FILES]
SAVE HOTSTART INFILE_Simulation1.hsf

[EVAPORATION]
;;Data Source Parameters
;;-------------- ----------------
CONSTANT 0.0
DRY_ONLY NO

[RAINGAGES]
;;Name Format Interval SCF Source
;;-------------- --------- ------ ------ ----------
RG1 INTENSITY 1:00 1.0 TIMESERIES TS1

[SUBCATCHMENTS]
;;Name Rain Gage Outlet Area %Imperv Width %Slope CurbLen SnowPack
;;-------------- ---------------- ---------------- -------- -------- -------- -------- -------- ----------------
1 RG1 9 10 50 500 0.01 0
2 RG1 10 10 50 500 0.01 0
3 RG1 13 5 50 500 0.01 0
4 RG1 22 5 50 500 0.01 0
5 RG1 15 15 50 500 0.01 0
6 RG1 23 12 10 500 0.01 0
7 RG1 19 4 10 500 0.01 0
8 RG1 18 10 10 500 0.01 0

[SUBAREAS]
;;Subcatchment N-Imperv N-Perv S-Imperv S-Perv PctZero RouteTo PctRouted
;;-------------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
1 0.001 0.10 0.05 0.05 25 OUTLET
2 0.001 0.10 0.05 0.05 25 OUTLET
3 0.001 0.10 0.05 0.05 25 OUTLET
4 0.001 0.10 0.05 0.05 25 OUTLET
5 0.001 0.10 0.05 0.05 25 OUTLET
6 0.001 0.10 0.05 0.05 25 OUTLET
7 0.001 0.10 0.05 0.05 25 OUTLET
8 0.001 0.10 0.05 0.05 25 OUTLET

[INFILTRATION]
;;Subcatchment MaxRate MinRate Decay DryTime MaxInfil
;;-------------- ---------- ---------- ---------- ---------- ----------
1 0.35 0.25 4.14 0.50 0
2 0.7 0.3 4.14 0.50 0
3 0.7 0.3 4.14 0.50 0
4 0.7 0.3 4.14 0.50 0
5 0.7 0.3 4.14 0.50 0
6 0.7 0.3 4.14 0.50 0
7 0.7 0.3 4.14 0.50 0
8 0.7 0.3 4.14 0.50 0

[JUNCTIONS]
;;Name Elevation MaxDepth InitDepth SurDepth Aponded
;;-------------- ---------- ---------- ---------- ---------- ----------
9 1000 3 0 0 0
10 995 3 0 0 0
13 995 3 0 0 0
14 990 3 0 0 0
15 987 3 0 0 0
16 985 3 0 0 0
17 980 3 0 0 0
19 1010 3 0 0 0
20 1005 3 0 0 0
21 990 3 0 0 0
22 987 3 0 0 0
23 990 3 0 0 0
24 984 3 0 0 0

[OUTFALLS]
;;Name Elevation Type Stage Data Gated Route To
;;-------------- ---------- ---------- ---------------- -------- ----------------
18 975 FREE NO

[CONDUITS]
;;Name From Node To Node Length Roughness InOffset OutOffset InitFlow MaxFlow
;;-------------- ---------------- ---------------- ---------- ---------- ---------- ---------- ---------- ----------
1 9 10 400 0.01 0 0 0 0
4 19 20 200 0.01 0 0 0 0
5 20 21 200 0.01 0 0 0 0
6 10 21 400 0.01 0 1 0 0
7 21 22 300 0.01 1 1 0 0
8 22 16 300 0.01 0 0 0 0
10 17 18 400 0.01 0 0 0 0
11 13 14 400 0.01 0 0 0 0
12 14 15 400 0.01 0 0 0 0
13 15 16 400 0.01 0 0 0 0
14 23 24 400 0.01 0 0 0 0
15 16 24 100 0.01 0 0 0 0
16 24 17 400 0.01 0 0 0 0

[XSECTIONS]
;;Link Shape Geom1 Geom2 Geom3 Geom4 Barrels Culvert
;;-------------- ------------ ---------------- ---------- ---------- ---------- ---------- ----------
1 CIRCULAR 1.5 0 0 0 1
4 CIRCULAR 1 0 0 0 1
5 CIRCULAR 1 0 0 0 1
6 CIRCULAR 1 0 0 0 1
7 CIRCULAR 2 0 0 0 1
8 CIRCULAR 2 0 0 0 1
10 CIRCULAR 2 0 0 0 1
11 CIRCULAR 1.5 0 0 0 1
12 CIRCULAR 1.5 0 0 0 1
13 CIRCULAR 1.5 0 0 0 1
14 CIRCULAR 1 0 0 0 1
15 CIRCULAR 2 0 0 0 1
16 CIRCULAR 2 0 0 0 1

[POLLUTANTS]
;;Name Units Crain Cgw Crdii Kdecay SnowOnly Co-Pollutant Co-Frac Cdwf Cinit
;;-------------- ------ ---------- ---------- ---------- ---------- ---------- ---------------- ---------- ---------- ----------
TSS MG/L 0.0 0.0 0 0.0 NO * 0.0 0 0
Lead UG/L 0.0 0.0 0 0.0 NO TSS 0.2 0 0

[LANDUSES]
;; Sweeping Fraction Last
;;Name Interval Available Swept
;;-------------- ---------- ---------- ----------
Residential
Undeveloped

[COVERAGES]
;;Subcatchment Land Use Percent
;;-------------- ---------------- ----------
1 Residential 100.00
2 Residential 50.00
2 Undeveloped 50.00
3 Residential 100.00
4 Residential 50.00
4 Undeveloped 50.00
5 Residential 100.00
6 Undeveloped 100.00
7 Undeveloped 100.00
8 Undeveloped 100.00

[LOADINGS]
;;Subcatchment Pollutant Buildup
;;-------------- ---------------- ----------

[BUILDUP]
;;Land Use Pollutant Function Coeff1 Coeff2 Coeff3 Per Unit
;;-------------- ---------------- ---------- ---------- ---------- ---------- ----------
Residential TSS SAT 50 0 2 AREA
Residential Lead NONE 0 0 0 AREA
Undeveloped TSS SAT 100 0 3 AREA
Undeveloped Lead NONE 0 0 0 AREA

[WASHOFF]
;;Land Use Pollutant Function Coeff1 Coeff2 SweepRmvl BmpRmvl
;;-------------- ---------------- ---------- ---------- ---------- ---------- ----------
Residential TSS EXP 0.1 1 0 0
Residential Lead EMC 0 0 0 0
Undeveloped TSS EXP 0.1 0.7 0 0
Undeveloped Lead EMC 0 0 0 0

[TIMESERIES]
;;Name Date Time Value
;;-------------- ---------- ---------- ----------
;RAINFALL
TS1 0:00 0.0
TS1 1:00 0.25
TS1 2:00 0.5
TS1 3:00 0.8
TS1 4:00 0.4
TS1 5:00 0.1
TS1 6:00 0.0
TS1 27:00 0.0
TS1 28:00 0.4
TS1 29:00 0.2
TS1 30:00 0.0

[REPORT]
;;Reporting Options
INPUT NO
CONTROLS NO
SUBCATCHMENTS ALL
NODES ALL
LINKS ALL
Loading