Skip to content

Commit

Permalink
Merge pull request #36 from bradleyjeck/ver22
Browse files Browse the repository at this point in the history
Support new capablities in epanet version 2.2
  • Loading branch information
bradleyjeck committed Nov 2, 2023
2 parents b4aafeb + bb84aca commit 24c8345
Show file tree
Hide file tree
Showing 114 changed files with 4,580 additions and 32 deletions.
1 change: 1 addition & 0 deletions .Rbuildignore
@@ -1,3 +1,4 @@
travis.yml$
^\.so$
^\.o$
Makefile
6 changes: 3 additions & 3 deletions DESCRIPTION
@@ -1,8 +1,8 @@
Package: epanet2toolkit
Type: Package
Title: Call 'EPANET' Functions to Simulate Pipe Networks
Version: 0.7.0
Date: 2023-02-08
Version: 1.0.0
Date: 2023-10-31
Authors@R: c(
person("Ernesto", "Arandia", email="earandia.ie@gmail.com", role='aut'),
person("Bradley", "Eck", email="brad@bradeck.net", role = c('aut','cre')),
Expand Down Expand Up @@ -41,4 +41,4 @@ Description: Enables simulation of water piping networks using 'EPANET'.
License: MIT + file LICENSE
Copyright: COPYRIGHTS
URL: https://github.com/bradleyjeck/epanet2toolkit
RoxygenNote: 7.1.1
RoxygenNote: 7.2.3
124 changes: 124 additions & 0 deletions NAMESPACE
@@ -1,13 +1,40 @@
# Generated by roxygen2: do not edit by hand

export(ENaddcontrol)
export(ENaddcurve)
export(ENadddemand)
export(ENaddlink)
export(ENaddnode)
export(ENaddpattern)
export(ENclearreport)
export(ENclose)
export(ENcloseH)
export(ENcloseQ)
export(ENcopyreport)
export(ENdeletecurve)
export(ENdeletedemand)
export(ENdeletelink)
export(ENdeletenode)
export(ENdeletepattern)
export(ENepanet)
export(ENgetaveragepatternvalue)
export(ENgetbasedemand)
export(ENgetcontrol)
export(ENgetcoord)
export(ENgetcount)
export(ENgetcurveid)
export(ENgetcurveindex)
export(ENgetcurvelen)
export(ENgetcurvetype)
export(ENgetcurvevalue)
export(ENgetdemandindex)
export(ENgetdemandmodel)
export(ENgetdemandname)
export(ENgetdemandpattern)
export(ENgetelseaction)
export(ENgeterror)
export(ENgetflowunits)
export(ENgetheadcurveindex)
export(ENgetlinkid)
export(ENgetlinkindex)
export(ENgetlinknodes)
Expand All @@ -17,15 +44,21 @@ export(ENgetnodeid)
export(ENgetnodeindex)
export(ENgetnodetype)
export(ENgetnodevalue)
export(ENgetnumdemands)
export(ENgetoption)
export(ENgetpatternid)
export(ENgetpatternindex)
export(ENgetpatternlen)
export(ENgetpatternvalue)
export(ENgetpumptype)
export(ENgetqualinfo)
export(ENgetqualtype)
export(ENgetstatistic)
export(ENgetthenaction)
export(ENgettimeparam)
export(ENgetversion)
export(ENgetvertex)
export(ENgetvertexcount)
export(ENinitH)
export(ENinitQ)
export(ENnextH)
Expand All @@ -34,45 +67,136 @@ export(ENopen)
export(ENopenH)
export(ENopenQ)
export(ENreport)
export(ENresetreport)
export(ENrunH)
export(ENrunQ)
export(ENsaveH)
export(ENsavehydfile)
export(ENsaveinpfile)
export(ENsetbasedemand)
export(ENsetcontrol)
export(ENsetcoord)
export(ENsetcurveid)
export(ENsetcurvevalue)
export(ENsetdemandmodel)
export(ENsetdemandname)
export(ENsetdemandpattern)
export(ENsetelseaction)
export(ENsetheadcurveindex)
export(ENsetjuncdata)
export(ENsetlinkid)
export(ENsetlinknodes)
export(ENsetlinktype)
export(ENsetlinkvalue)
export(ENsetnodeid)
export(ENsetnodevalue)
export(ENsetoption)
export(ENsetpattern)
export(ENsetpatternid)
export(ENsetpatternvalue)
export(ENsetqualtype)
export(ENsetreport)
export(ENsetrulepriority)
export(ENsetstatusreport)
export(ENsettankdata)
export(ENsetthenaction)
export(ENsettimeparam)
export(ENsetvertices)
export(ENsolveH)
export(ENsolveQ)
export(ENstepQ)
export(ENusehydfile)
useDynLib(epanet2toolkit,RENaddcontrol)
useDynLib(epanet2toolkit,RENaddcurve)
useDynLib(epanet2toolkit,RENadddemand)
useDynLib(epanet2toolkit,RENaddlink)
useDynLib(epanet2toolkit,RENaddnode)
useDynLib(epanet2toolkit,RENaddpattern)
useDynLib(epanet2toolkit,RENaddrule)
useDynLib(epanet2toolkit,RENclearreport)
useDynLib(epanet2toolkit,RENcloseQ)
useDynLib(epanet2toolkit,RENcopyreport)
useDynLib(epanet2toolkit,RENdeletecontrol)
useDynLib(epanet2toolkit,RENdeletecurve)
useDynLib(epanet2toolkit,RENdeletedemand)
useDynLib(epanet2toolkit,RENdeletelink)
useDynLib(epanet2toolkit,RENdeletenode)
useDynLib(epanet2toolkit,RENdeletepattern)
useDynLib(epanet2toolkit,RENdeleterule)
useDynLib(epanet2toolkit,RENepanet)
useDynLib(epanet2toolkit,RENgetaveragepatternvalue)
useDynLib(epanet2toolkit,RENgetbasedemand)
useDynLib(epanet2toolkit,RENgetcoord)
useDynLib(epanet2toolkit,RENgetcount)
useDynLib(epanet2toolkit,RENgetcurveid)
useDynLib(epanet2toolkit,RENgetcurveindex)
useDynLib(epanet2toolkit,RENgetcurvelen)
useDynLib(epanet2toolkit,RENgetcurvetype)
useDynLib(epanet2toolkit,RENgetcurvevalue)
useDynLib(epanet2toolkit,RENgetdemandindex)
useDynLib(epanet2toolkit,RENgetdemandmodel)
useDynLib(epanet2toolkit,RENgetdemandname)
useDynLib(epanet2toolkit,RENgetdemandpattern)
useDynLib(epanet2toolkit,RENgetelseaction)
useDynLib(epanet2toolkit,RENgeterror)
useDynLib(epanet2toolkit,RENgetheadcurveindex)
useDynLib(epanet2toolkit,RENgetnumdemands)
useDynLib(epanet2toolkit,RENgetoption)
useDynLib(epanet2toolkit,RENgetpremise)
useDynLib(epanet2toolkit,RENgetpumptype)
useDynLib(epanet2toolkit,RENgetqualinfo)
useDynLib(epanet2toolkit,RENgetqualtype)
useDynLib(epanet2toolkit,RENgetrule)
useDynLib(epanet2toolkit,RENgetruleID)
useDynLib(epanet2toolkit,RENgetstatistic)
useDynLib(epanet2toolkit,RENgetthenaction)
useDynLib(epanet2toolkit,RENgettimeparam)
useDynLib(epanet2toolkit,RENgettitle)
useDynLib(epanet2toolkit,RENgetversion)
useDynLib(epanet2toolkit,RENgetvertex)
useDynLib(epanet2toolkit,RENgetvertexcount)
useDynLib(epanet2toolkit,RENinit)
useDynLib(epanet2toolkit,RENinitQ)
useDynLib(epanet2toolkit,RENnextQ)
useDynLib(epanet2toolkit,RENopenQ)
useDynLib(epanet2toolkit,RENreport)
useDynLib(epanet2toolkit,RENresetreport)
useDynLib(epanet2toolkit,RENrunQ)
useDynLib(epanet2toolkit,RENsaveH)
useDynLib(epanet2toolkit,RENsavehydfile)
useDynLib(epanet2toolkit,RENsaveinpfile)
useDynLib(epanet2toolkit,RENsetbasedemand)
useDynLib(epanet2toolkit,RENsetcoord)
useDynLib(epanet2toolkit,RENsetcurveid)
useDynLib(epanet2toolkit,RENsetcurvevalue)
useDynLib(epanet2toolkit,RENsetdemandmodel)
useDynLib(epanet2toolkit,RENsetdemandname)
useDynLib(epanet2toolkit,RENsetdemandpattern)
useDynLib(epanet2toolkit,RENsetelseaction)
useDynLib(epanet2toolkit,RENsetflowunits)
useDynLib(epanet2toolkit,RENsetheadcurveindex)
useDynLib(epanet2toolkit,RENsetjuncdata)
useDynLib(epanet2toolkit,RENsetlinkid)
useDynLib(epanet2toolkit,RENsetlinknodes)
useDynLib(epanet2toolkit,RENsetlinktype)
useDynLib(epanet2toolkit,RENsetnodeid)
useDynLib(epanet2toolkit,RENsetoption)
useDynLib(epanet2toolkit,RENsetpatternid)
useDynLib(epanet2toolkit,RENsetpremise)
useDynLib(epanet2toolkit,RENsetpremiseindex)
useDynLib(epanet2toolkit,RENsetpremisevalue)
useDynLib(epanet2toolkit,RENsetqualtype)
useDynLib(epanet2toolkit,RENsetreport)
useDynLib(epanet2toolkit,RENsetrulepriority)
useDynLib(epanet2toolkit,RENsetstatusreport)
useDynLib(epanet2toolkit,RENsettankdata)
useDynLib(epanet2toolkit,RENsetthenaction)
useDynLib(epanet2toolkit,RENsettimeparam)
useDynLib(epanet2toolkit,RENsetvertices)
useDynLib(epanet2toolkit,RENsolveH)
useDynLib(epanet2toolkit,RENsolveQ)
useDynLib(epanet2toolkit,RENstepQ)
useDynLib(epanet2toolkit,RENusehydfile)
useDynLib(epanet2toolkit,enClose)
useDynLib(epanet2toolkit,enCloseH)
useDynLib(epanet2toolkit,enGetControl)
Expand Down
5 changes: 3 additions & 2 deletions R/Rtoolkit.R
Expand Up @@ -116,7 +116,8 @@ ENclose <- function() {
#' \code{EN_LINKCOUNT} \tab 2 \tab Links\cr
#' \code{EN_PATCOUNT} \tab 3 \tab Time patterns\cr
#' \code{EN_CURVECOUNT} \tab 4 \tab Curves\cr
#' \code{EN_CONTROLCOUNT} \tab 5 \tab Simple controls
#' \code{EN_CONTROLCOUNT} \tab 5 \tab Simple controls\cr
#' \code{EN_RULECOUNT} \tab 5 \tab Simple controls
#' }
#'
#' The number of junctions in a network equals the number of nodes minus the number of tanks and reservoirs.
Expand All @@ -129,7 +130,7 @@ ENclose <- function() {
#' ENclose()
ENgetcount <- function(compcode) {

codeTable = c("EN_NODECOUNT", "EN_TANKCOUNT", "EN_LINKCOUNT", "EN_PATCOUNT", "EN_CURVECOUNT", "EN_CONTROLCOUNT")
codeTable = c("EN_NODECOUNT", "EN_TANKCOUNT", "EN_LINKCOUNT", "EN_PATCOUNT", "EN_CURVECOUNT", "EN_CONTROLCOUNT", "EN_RULECOUNT")

# check the arguments
if( length(compcode) != 1 ) stop("can only get one component at time")
Expand Down
17 changes: 15 additions & 2 deletions R/codes.r
Expand Up @@ -10,15 +10,28 @@
check_epanet_error <- function( rv ){

if( !is.integer(rv)) stop("rv must be integer")

goodMsg <- NA
#try(goodMsg <- ENgeterror(rv))

if( rv == 0){
return()
} else if( rv > 100){
# return values greater than 100 are fatal errors
msg <- paste("epanet error ", rv)
if( is.na(goodMsg)){
msg <- paste("epanet error ", rv)
} else {
msg <- goodMsg
}
stop(msg)
} else if( rv <= 100 ){
msg <- paste("epanet warning ", rv)
# return value 100 or less are warnings; continue evaluating
if (is.na(goodMsg)){
# unable to obtain a good message so just return the error code
msg <- paste("epanet warning ", rv)
} else {
msg <- goodMsg
}
warning(msg)
}
}
Expand Down
39 changes: 39 additions & 0 deletions R/controls.r
Expand Up @@ -147,3 +147,42 @@ ENsetcontrol <- function(cindex, ctype = NULL, lindex = NULL, setting = NULL, ni
return(invisible())

}



#' Add a new simple control
#'
#' @param type the type of control to add (see details)
#' @param linkIndex the index of a link to control (starting from 1)
#' @param setting control setting applied to the link
#' @param nodeIndex index of the node used to control the link
#' (0 for EN_TIMER and EN_TIMEOFDAY controls).
#' @param level action level (tank level, junction pressure, or time in seconds)
#' that triggers the control.
#' @return index index of the new control.
#' @export
#' @useDynLib epanet2toolkit RENaddcontrol
ENaddcontrol <- function(type, linkIndex, setting, nodeIndex, level){


control_type_int <- lookup_enum_value(EN_ControlType,type)
res <- .C("RENaddcontrol", as.integer(control_type_int), as.integer(linkIndex),
as.numeric(setting), as.integer(nodeIndex), as.numeric(level),
as.integer(-1), as.integer(-1))
check_epanet_error(res[[7]])
controlIndex <- res[[6]]
return(controlIndex)
}


#' Deletes an existing simple control
#'
#' @param controlIndex the index of the control to delete (starting from 1).
#' @return null invisibly
#' @useDynLib epanet2toolkit RENdeletecontrol
ENdeletecontrol <- function(controlIndex){

res <- .C("RENdeletecontrol", as.integer(controlIndex), as.integer(-1))
check_epanet_error(res[[2]])
return(invisible())
}

0 comments on commit 24c8345

Please sign in to comment.