Removing epanet-output from tools folder
epanet-output has been moved to epanet/src/outfile
This commit is contained in:
@@ -1,40 +0,0 @@
|
|||||||
#
|
|
||||||
# CMakeLists.txt - CMake configuration file for epanet-output library
|
|
||||||
#
|
|
||||||
# Created: March 9, 2018
|
|
||||||
# Author: Michael E. Tryby
|
|
||||||
# US EPA ORD/NRMRL
|
|
||||||
#
|
|
||||||
|
|
||||||
cmake_minimum_required (VERSION 3.0)
|
|
||||||
|
|
||||||
|
|
||||||
# Sets for output directory for executables and libraries.
|
|
||||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
|
||||||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
|
|
||||||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
|
|
||||||
|
|
||||||
|
|
||||||
set(CMAKE_C_VISIBILITY_PRESET hidden)
|
|
||||||
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
|
|
||||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
|
||||||
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
|
||||||
|
|
||||||
|
|
||||||
# configure file groups
|
|
||||||
set(EPANET_OUT_SOURCES src/epanet_output.c src/errormanager.c)
|
|
||||||
|
|
||||||
|
|
||||||
# the binary output file API
|
|
||||||
add_library(epanet-output SHARED ${EPANET_OUT_SOURCES})
|
|
||||||
target_include_directories(epanet-output PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)
|
|
||||||
|
|
||||||
include(GenerateExportHeader)
|
|
||||||
generate_export_header(epanet-output
|
|
||||||
BASE_NAME epanet_output
|
|
||||||
EXPORT_MACRO_NAME EXPORT_OUT_API
|
|
||||||
EXPORT_FILE_NAME epanet_output_export.h
|
|
||||||
STATIC_DEFINE SHARED_EXPORTS_BUILT_AS_STATIC)
|
|
||||||
|
|
||||||
file(COPY ${CMAKE_CURRENT_BINARY_DIR}/epanet_output_export.h DESTINATION
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/include)
|
|
||||||
@@ -1,82 +0,0 @@
|
|||||||
/*
|
|
||||||
* epanet_output.h - EPANET Output API
|
|
||||||
*
|
|
||||||
* Created on: Jun 4, 2014
|
|
||||||
*
|
|
||||||
* Author: Michael E. Tryby
|
|
||||||
* US EPA - ORD/NRMRL
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef EPANET_OUTPUT_H_
|
|
||||||
#define EPANET_OUTPUT_H_
|
|
||||||
/* Epanet Results binary file API */
|
|
||||||
|
|
||||||
|
|
||||||
#define MAXFNAME 259 // Max characters in file name
|
|
||||||
#define MAXID 31 // Max characters in ID name
|
|
||||||
|
|
||||||
|
|
||||||
// This is an opaque pointer to struct. Do not access variables.
|
|
||||||
typedef void* ENR_Handle;
|
|
||||||
|
|
||||||
|
|
||||||
#include "epanet_output_enums.h"
|
|
||||||
#include "epanet_output_export.h"
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int EXPORT_OUT_API ENR_init(ENR_Handle* p_handle_out);
|
|
||||||
|
|
||||||
int EXPORT_OUT_API ENR_open(ENR_Handle p_handle_in, const char* path);
|
|
||||||
|
|
||||||
int EXPORT_OUT_API ENR_getVersion(ENR_Handle p_handle_in, int* int_out);
|
|
||||||
|
|
||||||
int EXPORT_OUT_API ENR_getNetSize(ENR_Handle p_handle_in, int** int_out, int* int_dim);
|
|
||||||
|
|
||||||
int EXPORT_OUT_API ENR_getUnits(ENR_Handle p_handle_in, ENR_Units t_enum, int* int_out);
|
|
||||||
|
|
||||||
int EXPORT_OUT_API ENR_getTimes(ENR_Handle p_handle_in, ENR_Time t_enum, int* int_out);
|
|
||||||
|
|
||||||
int EXPORT_OUT_API ENR_getElementName(ENR_Handle p_handle_in, ENR_ElementType t_enum,
|
|
||||||
int elementIndex, char** string_out, int* slen);
|
|
||||||
|
|
||||||
int EXPORT_OUT_API ENR_getEnergyUsage(ENR_Handle p_handle_in, int pumpIndex,
|
|
||||||
int* int_out, float** float_out, int* int_dim);
|
|
||||||
|
|
||||||
int EXPORT_OUT_API ENR_getNetReacts(ENR_Handle p_handle_in, float** float_out, int* int_dim);
|
|
||||||
|
|
||||||
|
|
||||||
int EXPORT_OUT_API ENR_getNodeSeries(ENR_Handle p_handle_in, int nodeIndex, ENR_NodeAttribute t_enum,
|
|
||||||
int startPeriod, int endPeriod, float** outValueSeries, int* dim);
|
|
||||||
|
|
||||||
int EXPORT_OUT_API ENR_getLinkSeries(ENR_Handle p_handle_in, int linkIndex, ENR_LinkAttribute t_enum,
|
|
||||||
int startPeriod, int endPeriod, float** outValueSeries, int* dim);
|
|
||||||
|
|
||||||
int EXPORT_OUT_API ENR_getNodeAttribute(ENR_Handle p_handle_in, int periodIndex,
|
|
||||||
ENR_NodeAttribute t_enum, float** outValueArray, int* dim);
|
|
||||||
|
|
||||||
int EXPORT_OUT_API ENR_getLinkAttribute(ENR_Handle p_handle_in, int periodIndex,
|
|
||||||
ENR_LinkAttribute t_enum, float** outValueArray, int* dim);
|
|
||||||
|
|
||||||
int EXPORT_OUT_API ENR_getNodeResult(ENR_Handle p_handle_in, int periodIndex, int nodeIndex,
|
|
||||||
float** float_out, int* int_dim);
|
|
||||||
|
|
||||||
int EXPORT_OUT_API ENR_getLinkResult(ENR_Handle p_handle_in, int periodIndex, int linkIndex,
|
|
||||||
float** float_out, int* int_dim);
|
|
||||||
|
|
||||||
int EXPORT_OUT_API ENR_close(ENR_Handle* p_handle_out);
|
|
||||||
|
|
||||||
void EXPORT_OUT_API ENR_free(void** array);
|
|
||||||
|
|
||||||
void EXPORT_OUT_API ENR_clearError(ENR_Handle p_handle_in);
|
|
||||||
|
|
||||||
int EXPORT_OUT_API ENR_checkError(ENR_Handle p_handle_in, char** msg_buffer);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* EPANET_OUTPUT_H_ */
|
|
||||||
@@ -1,79 +0,0 @@
|
|||||||
/*
|
|
||||||
* epanet_output_enums.h - EPANET Output API enums
|
|
||||||
*
|
|
||||||
* Created on: March 11, 2019
|
|
||||||
*
|
|
||||||
* Author: Michael E. Tryby
|
|
||||||
* US EPA - ORD/NRMRL
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef EPANET_OUTPUT_ENUMS_H_
|
|
||||||
#define EPANET_OUTPUT_ENUMS_H_
|
|
||||||
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
ENR_node = 1,
|
|
||||||
ENR_link = 2
|
|
||||||
} ENR_ElementType;
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
ENR_flowUnits = 1,
|
|
||||||
ENR_pressUnits = 2,
|
|
||||||
ENR_qualUnits = 3
|
|
||||||
} ENR_Units;
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
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_MTR = 1,
|
|
||||||
ENR_KPA = 2
|
|
||||||
} ENR_PressUnits;
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
ENR_NONE = 0,
|
|
||||||
ENR_MGL = 1,
|
|
||||||
ENR_UGL = 2,
|
|
||||||
ENR_HOURS = 3,
|
|
||||||
ENR_PRCNT = 4
|
|
||||||
} ENR_QualUnits;
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
ENR_reportStart = 1,
|
|
||||||
ENR_reportStep = 2,
|
|
||||||
ENR_simDuration = 3,
|
|
||||||
ENR_numPeriods = 4
|
|
||||||
}ENR_Time;
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
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_LinkAttribute;
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* EPANET_OUTPUT_ENUMS_H_ */
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
#
|
|
||||||
# setup.py
|
|
||||||
#
|
|
||||||
# Created: 9/20/2017
|
|
||||||
# Author: Michael E. Tryby
|
|
||||||
# US EPA - ORD/NRMRL
|
|
||||||
#
|
|
||||||
# Setup up script for en_outputapi python extension
|
|
||||||
#
|
|
||||||
# Requires:
|
|
||||||
# Platform C language compiler
|
|
||||||
# Python packages: numpy
|
|
||||||
#
|
|
||||||
|
|
||||||
try:
|
|
||||||
from setuptools import setup, Extension
|
|
||||||
from setuptools.command.build_ext import build_ext
|
|
||||||
except ImportError:
|
|
||||||
from distutils.core import setup, Extension
|
|
||||||
from distutils.command.build_ext import build_ext
|
|
||||||
|
|
||||||
setup(
|
|
||||||
name = "epanet-output",
|
|
||||||
version = "0.1.0-alpha",
|
|
||||||
ext_modules = [
|
|
||||||
Extension("_epanet_output",
|
|
||||||
define_macros = [('epanet_output_EXPORTS', None)],
|
|
||||||
include_dirs = ['include'],
|
|
||||||
sources = ['src/epanet_output.i', 'src/epanet_output.c', 'src/errormanager.c'],
|
|
||||||
swig_opts=['-modern'],
|
|
||||||
language = 'C'
|
|
||||||
)
|
|
||||||
],
|
|
||||||
package_dir = {'':'src'},
|
|
||||||
py_modules = ['epanet_output'],
|
|
||||||
|
|
||||||
install_requires = [
|
|
||||||
'enum34'
|
|
||||||
]
|
|
||||||
)
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,203 +0,0 @@
|
|||||||
/*
|
|
||||||
* epanet_output.i - SWIG interface description file for EPANET Output API
|
|
||||||
*
|
|
||||||
* Created: 9/20/2017
|
|
||||||
*
|
|
||||||
* Author: Michael E. Tryby
|
|
||||||
* US EPA - ORD/NRMRL
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
%module epanet_output
|
|
||||||
%{
|
|
||||||
#include "errormanager.h"
|
|
||||||
#include "messages.h"
|
|
||||||
#include "epanet_output.h"
|
|
||||||
|
|
||||||
#define SWIG_FILE_WITH_INIT
|
|
||||||
%}
|
|
||||||
|
|
||||||
%include "typemaps.i"
|
|
||||||
|
|
||||||
/* DEFINE AND TYPEDEF MUST BE INCLUDED */
|
|
||||||
#define MAXMSG 53
|
|
||||||
|
|
||||||
typedef void* ENR_Handle;
|
|
||||||
|
|
||||||
|
|
||||||
%include "epanet_output_enums.h"
|
|
||||||
|
|
||||||
|
|
||||||
/* TYPEMAPS FOR OPAQUE POINTER */
|
|
||||||
/* Used for functions that output a new opaque pointer */
|
|
||||||
%typemap(in, numinputs=0) ENR_Handle* p_handle_out (ENR_Handle retval)
|
|
||||||
{
|
|
||||||
/* OUTPUT in */
|
|
||||||
retval = NULL;
|
|
||||||
$1 = &retval;
|
|
||||||
}
|
|
||||||
/* used for functions that take in an opaque pointer (or NULL)
|
|
||||||
and return a (possibly) different pointer */
|
|
||||||
%typemap(argout) ENR_Handle* p_handle_out
|
|
||||||
{
|
|
||||||
/* OUTPUT argout */
|
|
||||||
%append_output(SWIG_NewPointerObj(SWIG_as_voidptr(retval$argnum), $1_descriptor, 0));
|
|
||||||
}
|
|
||||||
/* No need for special IN typemap for opaque pointers, it works anyway */
|
|
||||||
|
|
||||||
|
|
||||||
/* TYPEMAP FOR IGNORING INT ERROR CODE RETURN VALUE */
|
|
||||||
%typemap(out) int {
|
|
||||||
$result = Py_None;
|
|
||||||
Py_INCREF($result);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* TYPEMAPS FOR INT ARGUMENT AS RETURN VALUE */
|
|
||||||
%typemap(in, numinputs=0) int* int_out (int temp) {
|
|
||||||
$1 = &temp;
|
|
||||||
}
|
|
||||||
%typemap(argout) int* int_out {
|
|
||||||
%append_output(PyInt_FromLong(*$1));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* TYPEMAP FOR MEMORY MANAGEMENT AND ENCODING OF STRINGS */
|
|
||||||
%typemap(in, numinputs=0)char** string_out (char* temp), int* slen (int temp){
|
|
||||||
$1 = &temp;
|
|
||||||
}
|
|
||||||
%typemap(argout)(char** string_out, int* slen) {
|
|
||||||
if (*$1) {
|
|
||||||
PyObject* o;
|
|
||||||
o = PyUnicode_FromStringAndSize(*$1, *$2);
|
|
||||||
|
|
||||||
$result = SWIG_Python_AppendOutput($result, o);
|
|
||||||
free(*$1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* TYPEMAPS FOR MEMORY MANAGEMNET OF FLOAT ARRAYS */
|
|
||||||
%typemap(in, numinputs=0)float** float_out (float* temp), int* int_dim (int temp){
|
|
||||||
$1 = &temp;
|
|
||||||
}
|
|
||||||
%typemap(argout) (float** float_out, int* int_dim) {
|
|
||||||
if (*$1) {
|
|
||||||
PyObject *o = PyList_New(*$2);
|
|
||||||
int i;
|
|
||||||
float* temp = *$1;
|
|
||||||
for(i=0; i<*$2; i++) {
|
|
||||||
PyList_SetItem(o, i, PyFloat_FromDouble((double)temp[i]));
|
|
||||||
}
|
|
||||||
$result = SWIG_Python_AppendOutput($result, o);
|
|
||||||
free(*$1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* TYPEMAPS FOR MEMORY MANAGEMENT OF INT ARRAYS */
|
|
||||||
%typemap(in, numinputs=0)int** int_out (long* temp), int* int_dim (int temp){
|
|
||||||
$1 = &temp;
|
|
||||||
}
|
|
||||||
%typemap(argout) (int** int_out, int* int_dim) {
|
|
||||||
if (*$1) {
|
|
||||||
PyObject *o = PyList_New(*$2);
|
|
||||||
int i;
|
|
||||||
long* temp = *$1;
|
|
||||||
for(i=0; i<*$2; i++) {
|
|
||||||
PyList_SetItem(o, i, PyInt_FromLong(temp[i]));
|
|
||||||
}
|
|
||||||
$result = SWIG_Python_AppendOutput($result, o);
|
|
||||||
free(*$1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* TYPEMAP FOR ENUMERATED TYPES */
|
|
||||||
%typemap(in) EnumeratedType (int val, int ecode = 0) {
|
|
||||||
if (PyObject_HasAttrString($input,"value")) {
|
|
||||||
PyObject* o;
|
|
||||||
o = PyObject_GetAttrString($input, "value");
|
|
||||||
ecode = SWIG_AsVal_int(o, &val);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "$symname" "', argument " "$argnum"" of type '" "$ltype""'");
|
|
||||||
}
|
|
||||||
|
|
||||||
$1 = ($1_type)(val);
|
|
||||||
}
|
|
||||||
%apply EnumeratedType {ENR_ElementType, ENR_Units, ENR_Time, ENR_NodeAttribute, ENR_LinkAttribute}
|
|
||||||
|
|
||||||
|
|
||||||
/* RENAME FUNCTIONS PYTHON STYLE */
|
|
||||||
%rename("%(undercase)s") "";
|
|
||||||
|
|
||||||
/* INSERTS CUSTOM EXCEPTION HANDLING IN WRAPPER */
|
|
||||||
%exception
|
|
||||||
{
|
|
||||||
char* err_msg;
|
|
||||||
ENR_clearError(arg1);
|
|
||||||
$function
|
|
||||||
if (ENR_checkError(arg1, &err_msg))
|
|
||||||
{
|
|
||||||
PyErr_SetString(PyExc_Exception, err_msg);
|
|
||||||
SWIG_fail;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* INSERT EXCEPTION HANDLING FOR THESE FUNCTIONS */
|
|
||||||
int ENR_open(ENR_Handle p_handle, const char* path);
|
|
||||||
|
|
||||||
int ENR_getVersion(ENR_Handle p_handle, int* int_out);
|
|
||||||
int ENR_getNetSize(ENR_Handle p_handle, int** int_out, int* int_dim);
|
|
||||||
int ENR_getUnits(ENR_Handle p_handle, ENR_Units t_enum, int* int_out);
|
|
||||||
int ENR_getTimes(ENR_Handle p_handle, ENR_Time t_enum, int* int_out);
|
|
||||||
int ENR_getElementName(ENR_Handle p_handle, ENR_ElementType t_enum,
|
|
||||||
int elementIndex, char** string_out, int* slen);
|
|
||||||
int ENR_getEnergyUsage(ENR_Handle p_handle, int pumpIndex,
|
|
||||||
int* int_out, float** float_out, int* int_dim);
|
|
||||||
int ENR_getNetReacts(ENR_Handle p_handle, float** float_out, int* int_dim);
|
|
||||||
|
|
||||||
|
|
||||||
int ENR_getNodeAttribute(ENR_Handle p_handle, int periodIndex,
|
|
||||||
ENR_NodeAttribute t_enum, float** float_out, int* int_dim);
|
|
||||||
int ENR_getLinkAttribute(ENR_Handle p_handle, int periodIndex,
|
|
||||||
ENR_LinkAttribute t_enum, float** float_out, int* int_dim);
|
|
||||||
%exception;
|
|
||||||
|
|
||||||
/* NO EXCEPTION HANDLING FOR THESE FUNCTIONS */
|
|
||||||
int ENR_init(ENR_Handle* p_handle_out);
|
|
||||||
int ENR_close(ENR_Handle* p_handle_out);
|
|
||||||
void ENR_free(void** array);
|
|
||||||
|
|
||||||
void ENR_clearError(ENR_Handle p_handle);
|
|
||||||
int ENR_checkError(ENR_Handle p_handle, char** msg_buffer);
|
|
||||||
|
|
||||||
|
|
||||||
/* CODE ADDED DIRECTLY TO SWIGGED INTERFACE MODULE */
|
|
||||||
%pythoncode%{
|
|
||||||
import enum
|
|
||||||
|
|
||||||
class ElementType(enum.Enum):
|
|
||||||
NODE = ENR_node
|
|
||||||
LINK = ENR_link
|
|
||||||
|
|
||||||
class Units(enum.Enum):
|
|
||||||
FLOW_UNIT = ENR_flowUnits
|
|
||||||
PRESS_UNIT = ENR_pressUnits
|
|
||||||
|
|
||||||
class Time(enum.Enum):
|
|
||||||
REPORT_START = ENR_reportStart
|
|
||||||
REPORT_STEP = ENR_reportStep
|
|
||||||
SIM_DURATION = ENR_simDuration
|
|
||||||
NUM_PERIODS = ENR_numPeriods
|
|
||||||
|
|
||||||
class NodeAttribute(enum.Enum):
|
|
||||||
DEMAND = ENR_demand
|
|
||||||
HEAD = ENR_head
|
|
||||||
PRESSURE = ENR_pressure
|
|
||||||
QUALITY = ENR_quality
|
|
||||||
|
|
||||||
class LinkAttribute(enum.Enum):
|
|
||||||
FLOW = ENR_flow
|
|
||||||
VELOCITY = ENR_velocity
|
|
||||||
HEADLOSS = ENR_headloss
|
|
||||||
AVG_QUALITY = ENR_avgQuality
|
|
||||||
STATUS = ENR_status
|
|
||||||
SETTING = ENR_setting
|
|
||||||
RX_RATE = ENR_rxRate
|
|
||||||
FRCTN_FCTR = ENR_frctnFctr
|
|
||||||
%}
|
|
||||||
@@ -1,74 +0,0 @@
|
|||||||
//-----------------------------------------------------------------------------
|
|
||||||
//
|
|
||||||
// errormanager.c
|
|
||||||
//
|
|
||||||
// Purpose: Provides a simple interface for managing runtime error messages.
|
|
||||||
//
|
|
||||||
// Date: 08/25/2017
|
|
||||||
//
|
|
||||||
// Author: Michael E. Tryby
|
|
||||||
// US EPA - ORD/NRMRL
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include "errormanager.h"
|
|
||||||
|
|
||||||
error_handle_t* new_errormanager(void (*p_error_message)(int, char*, int))
|
|
||||||
//
|
|
||||||
// Purpose: Constructs a new error handle.
|
|
||||||
//
|
|
||||||
{
|
|
||||||
error_handle_t* error_handle;
|
|
||||||
error_handle = (error_handle_t*)calloc(1, sizeof(error_handle_t));
|
|
||||||
|
|
||||||
error_handle->p_msg_lookup = p_error_message;
|
|
||||||
|
|
||||||
return error_handle;
|
|
||||||
}
|
|
||||||
|
|
||||||
void dst_errormanager(error_handle_t* error_handle)
|
|
||||||
//
|
|
||||||
// Purpose: Destroys the error handle.
|
|
||||||
//
|
|
||||||
{
|
|
||||||
free(error_handle);
|
|
||||||
}
|
|
||||||
|
|
||||||
int set_error(error_handle_t* error_handle, int errorcode)
|
|
||||||
//
|
|
||||||
// Purpose: Sets an error code in the handle.
|
|
||||||
//
|
|
||||||
{
|
|
||||||
// If the error code is 0 no action is taken and 0 is returned.
|
|
||||||
// This is a feature not a bug.
|
|
||||||
if (errorcode)
|
|
||||||
error_handle->error_status = errorcode;
|
|
||||||
|
|
||||||
return errorcode;
|
|
||||||
}
|
|
||||||
|
|
||||||
char* check_error(error_handle_t* error_handle)
|
|
||||||
//
|
|
||||||
// Purpose: Returns the error message or NULL.
|
|
||||||
//
|
|
||||||
// Note: Caller must free memory allocated by check_error
|
|
||||||
//
|
|
||||||
{
|
|
||||||
char* temp = NULL;
|
|
||||||
|
|
||||||
if (error_handle->error_status != 0) {
|
|
||||||
temp = (char*) calloc(ERR_MAXMSG, sizeof(char));
|
|
||||||
|
|
||||||
if (temp)
|
|
||||||
error_handle->p_msg_lookup(error_handle->error_status, temp, ERR_MAXMSG);
|
|
||||||
}
|
|
||||||
return temp;
|
|
||||||
}
|
|
||||||
|
|
||||||
void clear_error(error_handle_t* error_handle)
|
|
||||||
//
|
|
||||||
// Purpose: Clears the error from the handle.
|
|
||||||
//
|
|
||||||
{
|
|
||||||
error_handle->error_status = 0;
|
|
||||||
}
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
/*
|
|
||||||
* errormanager.h
|
|
||||||
*
|
|
||||||
* Created on: Aug 25, 2017
|
|
||||||
*
|
|
||||||
* Author: Michael E. Tryby
|
|
||||||
* US EPA - ORD/NRMRL
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef ERRORMANAGER_H_
|
|
||||||
#define ERRORMANAGER_H_
|
|
||||||
|
|
||||||
#define ERR_MAXMSG 256
|
|
||||||
|
|
||||||
typedef struct error_s {
|
|
||||||
int error_status;
|
|
||||||
void (*p_msg_lookup)(int, char*, int);
|
|
||||||
} error_handle_t;
|
|
||||||
|
|
||||||
error_handle_t* new_errormanager(void (*p_error_message)(int, char*, int));
|
|
||||||
void dst_errormanager(error_handle_t* error_handle);
|
|
||||||
|
|
||||||
int set_error(error_handle_t* error_handle, int errorcode);
|
|
||||||
char* check_error(error_handle_t* error_handle);
|
|
||||||
void clear_error(error_handle_t* error_handle);
|
|
||||||
|
|
||||||
#endif /* ERRORMANAGER_H_ */
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
/*
|
|
||||||
* messages.h - EPANET
|
|
||||||
*
|
|
||||||
* Created on: June 1, 2017
|
|
||||||
*
|
|
||||||
* Author: Michael E. Tryby
|
|
||||||
* US EPA - ORD/NRMRL
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef MESSAGES_H_
|
|
||||||
#define MESSAGES_H_
|
|
||||||
/*------------------- Error Messages --------------------*/
|
|
||||||
#define MSG_MAXLEN 53
|
|
||||||
|
|
||||||
#define WARN10 "Warning: model run issued warnings"
|
|
||||||
|
|
||||||
#define ERR411 "Input Error 411: no memory allocated for results"
|
|
||||||
#define ERR412 "Input Error 412: binary file hasn't been opened"
|
|
||||||
#define ERR421 "Input Error 421: invalid parameter code"
|
|
||||||
#define ERR422 "Input Error 422: reporting period index out of range"
|
|
||||||
#define ERR423 "Input Error 423: element index out of range"
|
|
||||||
|
|
||||||
#define ERR434 "File Error 434: unable to open binary file"
|
|
||||||
#define ERR435 "File Error 435: invalid binary file type"
|
|
||||||
#define ERR436 "File Error 436: no results in binary file"
|
|
||||||
|
|
||||||
#define ERRERR "Error: An unknown error has occurred"
|
|
||||||
|
|
||||||
#endif /* MESSAGES_H_ */
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
# __init__.py
|
|
||||||
#
|
|
||||||
# Created: 11/13/2017
|
|
||||||
# Author: Michael E. Tryby
|
|
||||||
# US EPA - ORD/NRMRL
|
|
||||||
#
|
|
||||||
|
|
||||||
import os
|
|
||||||
|
|
||||||
DATA_PATH = os.path.abspath(os.path.dirname(__file__))
|
|
||||||
|
|
||||||
OUTPUT_FILE_EXAMPLE1 = os.path.join(DATA_PATH, 'net1.out')
|
|
||||||
Binary file not shown.
@@ -1,251 +0,0 @@
|
|||||||
/*
|
|
||||||
* test_epanet_output.cpp
|
|
||||||
*
|
|
||||||
* Created: 8/4/2017
|
|
||||||
* Author: Michael E. Tryby
|
|
||||||
* US EPA - ORD/NRMRL
|
|
||||||
*
|
|
||||||
* Unit testing for EPANET Output API using google test.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <string>
|
|
||||||
#include "gtest/gtest.h"
|
|
||||||
|
|
||||||
#include "../src/epanet_output.h"
|
|
||||||
|
|
||||||
#define PROJECT_HOME "C:/Users/mtryby/Workspace/GitRepo/michaeltryby/epanet/"
|
|
||||||
#define DATA_PATH "tools/epanet-output/test/data/net1.out"
|
|
||||||
|
|
||||||
|
|
||||||
namespace {
|
|
||||||
|
|
||||||
TEST(ENR_init, InitTest) {
|
|
||||||
ENR_Handle p_handle;
|
|
||||||
|
|
||||||
int error = ENR_init(&p_handle);
|
|
||||||
ASSERT_EQ(0, error);
|
|
||||||
ASSERT_TRUE(p_handle != NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST(ENR_open, OpenTest) {
|
|
||||||
std::string path = std::string(PROJECT_HOME) + std::string(DATA_PATH);
|
|
||||||
ENR_Handle p_handle;
|
|
||||||
ENR_init(&p_handle);
|
|
||||||
|
|
||||||
int error = ENR_open(p_handle, path.c_str());
|
|
||||||
ASSERT_EQ(0, error);
|
|
||||||
ENR_close(&p_handle);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST(ENR_close, CloseTest) {
|
|
||||||
ENR_Handle p_handle;
|
|
||||||
int error = ENR_init(&p_handle);
|
|
||||||
|
|
||||||
error = ENR_close(&p_handle);
|
|
||||||
ASSERT_EQ(-1, error);
|
|
||||||
ASSERT_TRUE(p_handle != NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class OutputapiTest : public testing::Test {
|
|
||||||
protected:
|
|
||||||
// SetUp for OutputapiTest fixture
|
|
||||||
virtual void SetUp() {
|
|
||||||
std::string path = std::string(PROJECT_HOME) + std::string(DATA_PATH);
|
|
||||||
|
|
||||||
error = ENR_init(&p_handle);
|
|
||||||
ENR_clearError(p_handle);
|
|
||||||
error = ENR_open(p_handle, path.c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
// TearDown for OutputapiTest fixture
|
|
||||||
virtual void TearDown() {
|
|
||||||
ENR_free((void**)&array);
|
|
||||||
error = ENR_close(&p_handle);
|
|
||||||
}
|
|
||||||
|
|
||||||
int error = 0;
|
|
||||||
ENR_Handle p_handle = NULL;
|
|
||||||
|
|
||||||
float* array = NULL;
|
|
||||||
int array_dim = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
TEST_F(OutputapiTest, getNetSizeTest) {
|
|
||||||
int* i_array = NULL;
|
|
||||||
// nodes, tanks, links, pumps, valves
|
|
||||||
int ref_array[5] = {11,2,13,1,0};
|
|
||||||
|
|
||||||
error = ENR_getNetSize(p_handle, &i_array, &array_dim);
|
|
||||||
ASSERT_EQ(0, error);
|
|
||||||
|
|
||||||
for (int i = 0; i < array_dim; i++)
|
|
||||||
EXPECT_EQ(ref_array[i], i_array[i]);
|
|
||||||
|
|
||||||
ENR_free((void**)&i_array);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(OutputapiTest, getElementName) {
|
|
||||||
char* name = new char[MAXID];
|
|
||||||
int length, index = 1;
|
|
||||||
|
|
||||||
error = ENR_getElementName(p_handle, ENR_node, index, &name, &length);
|
|
||||||
ASSERT_EQ(0, error);
|
|
||||||
|
|
||||||
EXPECT_STREQ("10", name);
|
|
||||||
|
|
||||||
delete(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(OutputapiTest, getNodeAttributeTest) {
|
|
||||||
float ref_array[11] = { 1.0,
|
|
||||||
0.44407997,
|
|
||||||
0.43766347,
|
|
||||||
0.42827705,
|
|
||||||
0.41342604,
|
|
||||||
0.42804748,
|
|
||||||
0.44152543,
|
|
||||||
0.40502965,
|
|
||||||
0.38635802,
|
|
||||||
1.0,
|
|
||||||
0.96745253 };
|
|
||||||
|
|
||||||
error = ENR_getNodeAttribute(p_handle, 1, ENR_quality, &array, &array_dim);
|
|
||||||
ASSERT_EQ(0, error);
|
|
||||||
|
|
||||||
for (int i = 0; i < array_dim; i++)
|
|
||||||
EXPECT_FLOAT_EQ(ref_array[i], array[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(OutputapiTest, getLinkAttributeTest) {
|
|
||||||
float ref_array[13] = { 1848.5812,
|
|
||||||
1220.4274,
|
|
||||||
130.11162,
|
|
||||||
187.6893,
|
|
||||||
119.8884,
|
|
||||||
40.464489,
|
|
||||||
-748.58112,
|
|
||||||
478.15378,
|
|
||||||
191.73459,
|
|
||||||
30.111609,
|
|
||||||
140.46449,
|
|
||||||
59.535515,
|
|
||||||
1848.5812};
|
|
||||||
|
|
||||||
error = ENR_getLinkAttribute(p_handle, 1, ENR_flow, &array ,&array_dim);
|
|
||||||
ASSERT_EQ(0, error);
|
|
||||||
|
|
||||||
for (int i = 0; i < array_dim; i++)
|
|
||||||
EXPECT_FLOAT_EQ(ref_array[i], array[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(OutputapiTest, getNodeResultTest) {
|
|
||||||
float ref_array[4] = {0.041142918,
|
|
||||||
150.0,
|
|
||||||
987.98358,
|
|
||||||
120.45029};
|
|
||||||
|
|
||||||
error = ENR_getNodeResult(p_handle, 1, 2, &array, &array_dim);
|
|
||||||
ASSERT_EQ(0, error);
|
|
||||||
|
|
||||||
for (int i = 0; i < array_dim; i++)
|
|
||||||
EXPECT_FLOAT_EQ(ref_array[i], array[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(OutputapiTest, getLinkResultTest) {
|
|
||||||
float ref_array[8] = {0.58586824,
|
|
||||||
1892.2433,
|
|
||||||
0.0,
|
|
||||||
-200.71875,
|
|
||||||
1.0,
|
|
||||||
3.0,
|
|
||||||
1.0,
|
|
||||||
0.0};
|
|
||||||
|
|
||||||
error = ENR_getLinkResult(p_handle, 24, 13, &array, &array_dim);
|
|
||||||
ASSERT_EQ(0, error);
|
|
||||||
|
|
||||||
for (int i = 0; i < array_dim; i++)
|
|
||||||
EXPECT_FLOAT_EQ(ref_array[i], array[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(OutputapiTest, getNodeSeriesTest){
|
|
||||||
float ref_array[10] = {119.25731,
|
|
||||||
120.45029,
|
|
||||||
121.19854,
|
|
||||||
122.00622,
|
|
||||||
122.37414,
|
|
||||||
122.8122,
|
|
||||||
122.82034,
|
|
||||||
122.90379,
|
|
||||||
123.40434,
|
|
||||||
123.81807};
|
|
||||||
|
|
||||||
error = ENR_getNodeSeries(p_handle, 2, ENR_pressure, 0, 10, &array, &array_dim);
|
|
||||||
ASSERT_EQ(0, error);
|
|
||||||
|
|
||||||
for (int i = 0; i < array_dim; i++)
|
|
||||||
EXPECT_FLOAT_EQ(ref_array[i], array[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(OutputapiTest, getLinkSeriesTest) {
|
|
||||||
float ref_array[10] = {1234.2072,
|
|
||||||
1220.4274,
|
|
||||||
1164.4,
|
|
||||||
1154.8175,
|
|
||||||
1100.0635,
|
|
||||||
1094.759,
|
|
||||||
1041.7854,
|
|
||||||
1040.7617,
|
|
||||||
1087.556,
|
|
||||||
1082.5011};
|
|
||||||
|
|
||||||
error = ENR_getLinkSeries(p_handle, 2, ENR_flow, 0, 10, &array, &array_dim);
|
|
||||||
ASSERT_EQ(0, error);
|
|
||||||
|
|
||||||
for (int i = 0; i < array_dim; i++)
|
|
||||||
EXPECT_FLOAT_EQ(ref_array[i], array[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(OutputapiTest, getNetReactsTest) {
|
|
||||||
float ref_array[4] = {18806.59,
|
|
||||||
85424.438,
|
|
||||||
115174.05,
|
|
||||||
238972.66};
|
|
||||||
|
|
||||||
error = ENR_getNetReacts(p_handle, &array, &array_dim);
|
|
||||||
ASSERT_EQ(0, error);
|
|
||||||
|
|
||||||
for (int i = 0; i < array_dim; i++)
|
|
||||||
EXPECT_FLOAT_EQ(ref_array[i], array[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(OutputapiTest, getEnergyUsageTest) {
|
|
||||||
float ref_array[6] = {57.712959,
|
|
||||||
75.0,
|
|
||||||
880.41583,
|
|
||||||
96.254318,
|
|
||||||
96.707115,
|
|
||||||
0.0};
|
|
||||||
|
|
||||||
int linkIdx;
|
|
||||||
|
|
||||||
error = ENR_getEnergyUsage(p_handle, 1, &linkIdx, &array, &array_dim);
|
|
||||||
ASSERT_EQ(0, error);
|
|
||||||
|
|
||||||
for (int i = 0; i < array_dim; i++)
|
|
||||||
EXPECT_FLOAT_EQ(ref_array[i], array[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
GTEST_API_ int main(int argc, char **argv) {
|
|
||||||
|
|
||||||
printf("Running main() from gtest_main.cc\n");
|
|
||||||
testing::InitGoogleTest(&argc, argv);
|
|
||||||
|
|
||||||
return RUN_ALL_TESTS();
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user