From 606101af899f72a82fd7d4050ed55c0ee6c5979a Mon Sep 17 00:00:00 2001 From: Michael Tryby Date: Tue, 14 Aug 2018 11:10:27 -0400 Subject: [PATCH] Adding support for chem units --- tests/data/example1.out | Bin 0 -> 16832 bytes tests/test_output.cpp | 11 +- tools/epanet-output/include/epanet_output.h | 66 ++++++++---- tools/epanet-output/src/epanet_output.c | 39 ++++++- tools/epanet-output/src/messages.h | 2 +- .../epanet-output/test/epanet_output_test.py | 102 ------------------ 6 files changed, 89 insertions(+), 131 deletions(-) create mode 100644 tests/data/example1.out delete mode 100644 tools/epanet-output/test/epanet_output_test.py diff --git a/tests/data/example1.out b/tests/data/example1.out new file mode 100644 index 0000000000000000000000000000000000000000..416c98bde53c34b136525b364ade3842ec5d0f1d GIT binary patch literal 16832 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 literal 0 HcmV?d00001 diff --git a/tests/test_output.cpp b/tests/test_output.cpp index 3a0607e..c7fdc7a 100644 --- a/tests/test_output.cpp +++ b/tests/test_output.cpp @@ -22,7 +22,7 @@ #include "epanet_output.h" -#define DATA_PATH "./net1.out" +#define DATA_PATH "./example1.out" using namespace std; @@ -142,6 +142,15 @@ BOOST_FIXTURE_TEST_CASE(test_getNetSize, Fixture) ENR_free((void**)&i_array); } +BOOST_FIXTURE_TEST_CASE(test_getUnits, Fixture) { + int flag; + + error = ENR_getUnits(p_handle, ENR_chemUnits, &flag); + BOOST_REQUIRE(error == 0); + + BOOST_CHECK_EQUAL(flag, ENR_MGL); +} + BOOST_FIXTURE_TEST_CASE(test_getElementName, Fixture) { char* name = new char[MAXID]; int length, index = 1; diff --git a/tools/epanet-output/include/epanet_output.h b/tools/epanet-output/include/epanet_output.h index 0066d16..8a9b70e 100644 --- a/tools/epanet-output/include/epanet_output.h +++ b/tools/epanet-output/include/epanet_output.h @@ -18,22 +18,42 @@ typedef void* ENR_Handle; typedef enum { - ENR_node = 1, - ENR_link = 2 + ENR_node = 1, + ENR_link = 2 } ENR_ElementType; typedef enum { - ENR_getSeries = 1, - ENR_getAttribute = 2, - ENR_getResult = 3, - ENR_getReacts = 4, - ENR_getEnergy = 5 -} ENR_ApiFunction; + ENR_flowUnits = 1, + ENR_pressUnits = 2, + ENR_chemUnits = 3 +} ENR_Units; typedef enum { - ENR_flowUnits = 1, - ENR_pressUnits = 2 -} ENR_Units; + ENR_CFS = 0, + ENR_GPM = 1, + ENR_MGD = 2, + ENR_IMGD = 3, + ENR_AFD = 4, + ENR_LPS = 5, + ENR_LPM = 6, + ENR_MLD = 7, + ENR_CMH = 8, + ENR_CMD = 9 +} ENR_FlowUnits; + +typedef enum { + ENR_PSI = 0, + ENR_MTRS = 1, + ENR_KPA = 2 +} ENR_PressUnits; + +typedef enum { + ENR_NONE = 0, + ENR_MGL = 1, + ENR_UGL = 2, + ENR_HOURS = 3, + ENR_PRCNT = 4 +} ENR_ChemUnits; typedef enum { ENR_reportStart = 1, @@ -43,21 +63,21 @@ typedef enum { }ENR_Time; typedef enum { - ENR_demand = 1, - ENR_head = 2, - ENR_pressure = 3, - ENR_quality = 4 + ENR_demand = 1, + ENR_head = 2, + ENR_pressure = 3, + ENR_quality = 4 } ENR_NodeAttribute; typedef enum { - ENR_flow = 1, - ENR_velocity = 2, - ENR_headloss = 3, - ENR_avgQuality = 4, - ENR_status = 5, - ENR_setting = 6, - ENR_rxRate = 7, - ENR_frctnFctr = 8 + ENR_flow = 1, + ENR_velocity = 2, + ENR_headloss = 3, + ENR_avgQuality = 4, + ENR_status = 5, + ENR_setting = 6, + ENR_rxRate = 7, + ENR_frctnFctr = 8 } ENR_LinkAttribute; diff --git a/tools/epanet-output/src/epanet_output.c b/tools/epanet-output/src/epanet_output.c index 486ef81..7f21bee 100644 --- a/tools/epanet-output/src/epanet_output.c +++ b/tools/epanet-output/src/epanet_output.c @@ -57,7 +57,8 @@ #define MINNREC 14 // Minimum allowable number of records #define PROLOGUE 884 // Preliminary fixed length section of header -#define MAXID_P1 32 // Max. # characters in ID name +#define MAXID_P1 32 // EPANET max characters in ID name PLUS 1 +#define MAXMSG_P1 80 // EPANET max characters in message text PLUS 1 #define NELEMENTTYPES 5 // Number of element types #define NENERGYRESULTS 6 // Number of energy results @@ -303,6 +304,8 @@ int DLLEXPORT ENR_getUnits(ENR_Handle p_handle, ENR_Units code, int* unitFlag) */ { int errorcode = 0; + F_OFF offset; + char temp[MAXID_P1]; data_t* p_data; *unitFlag = -1; @@ -315,15 +318,37 @@ int DLLEXPORT ENR_getUnits(ENR_Handle p_handle, ENR_Units code, int* unitFlag) switch (code) { case ENR_flowUnits: - fseek(p_data->file, 9*WORDSIZE, SEEK_SET); + _fseek(p_data->file, 9*WORDSIZE, SEEK_SET); fread(unitFlag, WORDSIZE, 1, p_data->file); break; case ENR_pressUnits: - fseek(p_data->file, 10*WORDSIZE, SEEK_SET); + _fseek(p_data->file, 10*WORDSIZE, SEEK_SET); fread(unitFlag, WORDSIZE, 1, p_data->file); break; + case ENR_chemUnits: + offset = 7*WORDSIZE; + _fseek(p_data->file, offset, SEEK_SET); + fread(unitFlag, WORDSIZE, 1, p_data->file); + + if (*unitFlag == 0) *unitFlag = ENR_NONE; + + else if (*unitFlag == 1) { + offset = 15*WORDSIZE + 3*MAXMSG_P1 + 2*(MAXFNAME+1) + MAXID_P1; + _fseek(p_data->file, offset, SEEK_SET); + fread(temp, MAXID_P1, 1, p_data->file); + + if (!strcmp(temp, "mg/L")) *unitFlag = ENR_MGL; + else *unitFlag = ENR_UGL; + } + + else if (*unitFlag == 2) *unitFlag = ENR_HOURS; + + else *unitFlag = ENR_PRCNT; + + break; + default: errorcode = 421; } } @@ -378,6 +403,12 @@ int DLLEXPORT ENR_getTimes(ENR_Handle p_handle, ENR_Time code, int* time) return set_error(p_data->error_handle, errorcode); } +int DLLEXPORT ENR_getChemData(ENR_Handle p_handle, char** name, int* length) + +{ + return 0; +} + int DLLEXPORT ENR_getElementName(ENR_Handle p_handle, ENR_ElementType type, int elementIndex, char** name, int* length) /*------------------------------------------------------------------------ @@ -815,7 +846,7 @@ void errorLookup(int errcode, char* dest_msg, int dest_len) default: msg = ERRERR; } - strncpy(dest_msg, msg, MAXMSG); + strncpy(dest_msg, msg, MSGMAXLEN); } int validateFile(ENR_Handle p_handle) diff --git a/tools/epanet-output/src/messages.h b/tools/epanet-output/src/messages.h index 78725a1..d2515e9 100644 --- a/tools/epanet-output/src/messages.h +++ b/tools/epanet-output/src/messages.h @@ -10,7 +10,7 @@ #ifndef MESSAGES_H_ #define MESSAGES_H_ /*------------------- Error Messages --------------------*/ -#define MAXMSG 53 +#define MSGMAXLEN 53 #define WARN10 "Warning: model run issued warnings" diff --git a/tools/epanet-output/test/epanet_output_test.py b/tools/epanet-output/test/epanet_output_test.py deleted file mode 100644 index fa23d62..0000000 --- a/tools/epanet-output/test/epanet_output_test.py +++ /dev/null @@ -1,102 +0,0 @@ -# -# epanet_output_test.py -# -# Created: 11/8/2017 -# Author: Michael E. Tryby -# US EPA - ORD/NRMRL -# -# Unit testing for EPANET Output API using pytest. -# - -import pytest -import numpy as np - -import epanet_output as oapi - -from data import OUTPUT_FILE_EXAMPLE1 - -@pytest.fixture() -def enr_handle(request): - _handle = oapi.enr_init() - oapi.enr_open(_handle, OUTPUT_FILE_EXAMPLE1) - - def enr_close(): - oapi.enr_close() - - request.addfinalizer(enr_close) - return _handle - - -def test_get_times(enr_handle): - num_periods = oapi.enr_get_times(enr_handle, oapi.Time.NUM_PERIODS) - assert num_periods == 25 - - -# def test_get_size(file_path): -# handle = oapi.enr_init() -# oapi.enr_open(handle, file_path) -# -# size = oapi.enr_get_net_size(handle) -# -# print(size) -# -# handle = oapi.enr_close() -# -# def test_get_names(file_path): -# handle = oapi.enr_init() -# oapi.enr_open(handle, file_path) -# -# name = oapi.enr_get_element_name(handle, oapi.ElementType.NODE, 10) -# -# print(name) -# -# handle = oapi.enr_close() -# -# def test_get_energy(file_path): -# handle = oapi.enr_init() -# oapi.enr_open(handle, file_path) -# -# result = oapi.enr_get_energy_usage(handle, 1) -# -# print(result) -# -# handle = oapi.enr_close() -# -# def test_get_react(file_path): -# handle = oapi.enr_init() -# oapi.enr_open(handle, file_path) -# -# result = oapi.enr_get_net_reacts(handle) -# -# print(result) -# -# handle = oapi.enr_close() -# -def test_get_node_attribute(enr_handle): - ref_array = np.array([ 1., 0.44407997, 0.43766347, 0.42827705, 0.41342604, - 0.42804748, 0.44152543, 0.40502965, 0.38635802, 1., 0.96745253]) - - array = oapi.enr_get_node_attribute(enr_handle, 1, oapi.NodeAttribute.QUALITY) - assert len(array) == 11 - assert np.allclose(array, ref_array) - -def test_get_link_attribute(enr_handle): - ref_array = np.array([ 1848.58117676, 1220.42736816, 130.11161804, - 187.68930054, 119.88839722, 40.46448898, -748.58111572, 478.15377808, - 191.73458862, 30.11160851, 140.4644928, 59.53551483, 1848.58117676]) - - array = oapi.enr_get_link_attribute(enr_handle, 1, oapi.LinkAttribute.FLOW) - assert len(array) == 13 - assert np.allclose(array, ref_array) - -# if __name__ == "__main__": -# -# file_path = "M:\\net mydocuments\\EPA Projects\\EPAnet Examples\\net1.out" -# test_get_times(file_path) -# test_get_size(file_path) -# test_get_names(file_path) -# test_get_energy(file_path) -# test_get_react(file_path) -# test_get_node_attribute(file_path) -# test_get_link_attribute(file_path) -# \ No newline at end of file