/*
*******************************************************************

TOOLKIT.H - Prototypes for EPANET Functions Exported to DLL Toolkit           
VERSION:    2.00
DATE:       5/8/00
            10/25/00
            3/1/01
            8/15/07    (2.00.11)
            2/14/08    (2.00.12)
AUTHOR:     L. Rossman
            US EPA - NRMRL

*******************************************************************
*/

//comment by ccr 2013.09:该头文件的主要作用是定义了epanet2.dll中可以使用的函数的原型定义,类似于接口声明。

// --- Define DLLEXPORT
//comment by ccr 2013.09:定义了DLLEXPORT宏的原因是EPANET的代码是C语言写成的,为了能在C++代码中得以重用,需要extern "C"标记用C写成的函数,具体可以参考博文:http://www.cnblogs.com/KingOfFreedom/articles/3309469.html

#ifdef DLL
  #ifdef __cplusplus
  #define DLLEXPORT extern "C" __declspec(dllexport) __stdcall
  #else
  #define DLLEXPORT __declspec(dllexport) __stdcall
  #endif
#else
  #ifdef __cplusplus
  #define DLLEXPORT extern "C"
  #else
  #define DLLEXPORT
  #endif
#endif

// --- Define the EPANET toolkit constants
#define EN_ELEVATION    0    /* Node parameters */         //节点相关的参数
#define EN_BASEDEMAND   1                                 
#define EN_PATTERN      2
#define EN_EMITTER      3
#define EN_INITQUAL     4
#define EN_SOURCEQUAL   5
#define EN_SOURCEPAT    6
#define EN_SOURCETYPE   7
#define EN_TANKLEVEL    8
#define EN_DEMAND       9
#define EN_HEAD         10
#define EN_PRESSURE     11
#define EN_QUALITY      12
#define EN_SOURCEMASS   13
#define EN_INITVOLUME   14
#define EN_MIXMODEL     15
#define EN_MIXZONEVOL   16

#define EN_TANKDIAM     17
#define EN_MINVOLUME    18
#define EN_VOLCURVE     19
#define EN_MINLEVEL     20
#define EN_MAXLEVEL     21
#define EN_MIXFRACTION  22
#define EN_TANK_KBULK   23

#define EN_DIAMETER     0    /* Link parameters */           //管段相关的参数
#define EN_LENGTH       1
#define EN_ROUGHNESS    2
#define EN_MINORLOSS    3
#define EN_INITSTATUS   4
#define EN_INITSETTING  5
#define EN_KBULK        6
#define EN_KWALL        7
#define EN_FLOW         8
#define EN_VELOCITY     9
#define EN_HEADLOSS     10
#define EN_STATUS       11
#define EN_SETTING      12
#define EN_ENERGY       13

#define EN_DURATION     0    /* Time parameters */           //运行时间相关的参数
#define EN_HYDSTEP      1
#define EN_QUALSTEP     2
#define EN_PATTERNSTEP  3
#define EN_PATTERNSTART 4
#define EN_REPORTSTEP   5
#define EN_REPORTSTART  6
#define EN_RULESTEP     7
#define EN_STATISTIC    8
#define EN_PERIODS      9

#define EN_NODECOUNT    0   /* Component counts */           //拓扑组件中的各类对象的个数
#define EN_TANKCOUNT    1
#define EN_LINKCOUNT    2
#define EN_PATCOUNT     3
#define EN_CURVECOUNT   4
#define EN_CONTROLCOUNT 5

#define EN_JUNCTION     0    /* Node types */                //节点的种类
#define EN_RESERVOIR    1
#define EN_TANK         2

#define EN_CVPIPE       0    /* Link types. */               //管段的种类,大部分是各类阀门,注意模型中阀门因为其具有阻力较大而被抽象成管段
#define EN_PIPE         1    /* See LinkType in TYPES.H */
#define EN_PUMP         2
#define EN_PRV          3
#define EN_PSV          4
#define EN_PBV          5
#define EN_FCV          6
#define EN_TCV          7
#define EN_GPV          8

#define EN_NONE         0    /* Quality analysis types. */     //水质分析类型
#define EN_CHEM         1    /* See QualType in TYPES.H */
#define EN_AGE          2
#define EN_TRACE        3

#define EN_CONCEN       0    /* Source quality types.      */ 
#define EN_MASS         1    /* See SourceType in TYPES.H. */
#define EN_SETPOINT     2
#define EN_FLOWPACED    3

#define EN_CFS          0    /* Flow units types.   */         //流量的单位
#define EN_GPM          1    /* See FlowUnitsType   */
#define EN_MGD          2    /* in TYPES.H.         */
#define EN_IMGD         3
#define EN_AFD          4
#define EN_LPS          5
#define EN_LPM          6
#define EN_MLD          7
#define EN_CMH          8
#define EN_CMD          9

#define EN_TRIALS       0   /* Misc. options */               //选项部分
#define EN_ACCURACY     1
#define EN_TOLERANCE    2
#define EN_EMITEXPON    3
#define EN_DEMANDMULT   4

#define EN_LOWLEVEL     0   /* Control types.  */             //控制类型
#define EN_HILEVEL      1   /* See ControlType */
#define EN_TIMER        2   /* in TYPES.H.     */
#define EN_TIMEOFDAY    3

#define EN_AVERAGE      1   /* Time statistic types.    */    //时间统计类型
#define EN_MINIMUM      2   /* See TstatType in TYPES.H */
#define EN_MAXIMUM      3
#define EN_RANGE        4

#define EN_MIX1         0   /* Tank mixing models */         
#define EN_MIX2         1
#define EN_FIFO         2
#define EN_LIFO         3

#define EN_NOSAVE       0   /* Save-results-to-file flag */
#define EN_SAVE         1

#define EN_INITFLOW    10   /* Re-initialize flows flag  */

// --- Declare the EPANET toolkit functions
//comment by ccr 2013.09:本部分的函数的具体说明可以参考EPANET提供的“toolkit.chm”,里面有详细的使用说明以及例子.

int  DLLEXPORT ENepanet(char *, char *, char *, void (*) (char *));  //该函数用于运行一个完整的模拟计算

int  DLLEXPORT ENopen(char *, char *, char *);
 int  DLLEXPORT ENsaveinpfile(char *);                                           //将模型中的数据保存成标准的INPUT文件格式
 int  DLLEXPORT ENclose(void);

//水力解算相关的函数
 int  DLLEXPORT ENsolveH(void);           
 int  DLLEXPORT ENsaveH(void);
 int  DLLEXPORT ENopenH(void);
 int  DLLEXPORT ENinitH(int);
 int  DLLEXPORT ENrunH(long *);
 int  DLLEXPORT ENnextH(long *);
 int  DLLEXPORT ENcloseH(void);
 int  DLLEXPORT ENsavehydfile(char *);
 int  DLLEXPORT ENusehydfile(char *);

//水质解算相关的函数
 int  DLLEXPORT ENsolveQ(void);
 int  DLLEXPORT ENopenQ(void);
 int  DLLEXPORT ENinitQ(int);
 int  DLLEXPORT ENrunQ(long *);
 int  DLLEXPORT ENnextQ(long *);
 int  DLLEXPORT ENstepQ(long *);
 int  DLLEXPORT ENcloseQ(void);

//计算结果的报告格式输出
 int  DLLEXPORT ENwriteline(char *);
 int  DLLEXPORT ENreport(void);
 int  DLLEXPORT ENresetreport(void);
 int  DLLEXPORT ENsetreport(char *);

//获取管网中的控制、模型等信息
 int  DLLEXPORT ENgetcontrol(int, int *, int *, float *,
                int *, float *);
 int  DLLEXPORT ENgetcount(int, int *);
 int  DLLEXPORT ENgetoption(int, float *);
 int  DLLEXPORT ENgettimeparam(int, long *);
 int  DLLEXPORT ENgetflowunits(int *);
 int  DLLEXPORT ENgetpatternindex(char *, int *);
 int  DLLEXPORT ENgetpatternid(int, char *);
 int  DLLEXPORT ENgetpatternlen(int, int *);
 int  DLLEXPORT ENgetpatternvalue(int, int, float *);
 int  DLLEXPORT ENgetqualtype(int *, int *);
 int  DLLEXPORT ENgeterror(int, char *, int);

//获取管网中的节点的信息
 int  DLLEXPORT ENgetnodeindex(char *, int *);
 int  DLLEXPORT ENgetnodeid(int, char *);
 int  DLLEXPORT ENgetnodetype(int, int *);
 int  DLLEXPORT ENgetnodevalue(int, int, float *);

//获取管网中的管段等信息
 int  DLLEXPORT ENgetlinkindex(char *, int *);
 int  DLLEXPORT ENgetlinkid(int, char *);
 int  DLLEXPORT ENgetlinktype(int, int *);
 int  DLLEXPORT ENgetlinknodes(int, int *, int *);
 int  DLLEXPORT ENgetlinkvalue(int, int, float *);

int  DLLEXPORT ENgetversion(int *);
 
 //设置模型解算参数
 int  DLLEXPORT ENsetcontrol(int, int, int, float, int, float);
 int  DLLEXPORT ENsetnodevalue(int, int, float);
 int  DLLEXPORT ENsetlinkvalue(int, int, float);
 int  DLLEXPORT ENaddpattern(char *);
 int  DLLEXPORT ENsetpattern(int, float *, int);
 int  DLLEXPORT ENsetpatternvalue(int, int, float);
 int  DLLEXPORT ENsettimeparam(int, long);
 int  DLLEXPORT ENsetoption(int, float);
 int  DLLEXPORT ENsetstatusreport(int);
 int  DLLEXPORT ENsetqualtype(int, char *, char *, char *);

EPANET头文件解读系列3——TOOLKIT.H的更多相关文章

  1. EPANET头文件解读系列4——EPANET2.H

    该头文件的功能与系列3中的TOOLKIT.H类似,而且内容也几乎一致,所以也就不再详细介绍.

  2. EPANET头文件解读系列7——MEMPOOL.H

    //EPANET应用程序使用了大量的节点与管段数据,而且每个对象数据又有不同时段的数据,这些数据占用了大量内存,而mempool.h就是一个简单快速的内存分配相关的头文件/***  mempool.h ...

  3. EPANET头文件解读系列6——HASH.H

    该文件是EPANET中HASH.C的头文件,下面列出了该文件的源码以及我的中文注释 /* HASH.H**** Header file for Hash Table module HASH.C***/ ...

  4. EPANET头文件解读系列8——FUNCS.H

    /***************************************************************************                         ...

  5. EPANET头文件解读系列2——ENUMSTXT.H

    在前一系统中介绍了text.h,回顾下,该文件包含了EPANET中所有字符串常量的定义,而ENUMSTXT.H文件则是以text.h中定义的字符串常量为基础,来对这些字符串常量进行合理的分组,形成字符 ...

  6. EPANET头文件解读系列5——TYPES.H

    /************************************************************************                            ...

  7. EPANET头文件解读系列1——TEXT.H

    定义在TEXT.H文件中的字符常量都以小写开头,然后紧跟一个下划线,再接着就全是大写字母 /***************************************************** ...

  8. EPANET头文件解读系列9——VARS.H

    /*************************************************************************            Global Variabl ...

  9. 头文件带和不带.h的区别

    所有C++标准库的头文件都是没有.h结尾的.这么做是为了区分,C标准库的头文件和C++标准库的头文件.比如最具代表性的: #include <string.h> // C 标准库头文件,包 ...

随机推荐

  1. html/css实现文字自动换行,超出部分出现(...)

    PS:这是我在别人博客copy下来的 做前端的我们都会发现这样一个问题,当你控制文字出现多行时,而这多行是有限制的(比如超出部分隐藏不显示),而这多行文字如果全部是数字或者字母抑或是数字和字母的组合时 ...

  2. Python开发【Django】:Admin配置管理

    Admin创建登录用户 数据库结构表: from django.db import models # Create your models here. class UserProfile(models ...

  3. 【我的Android进阶之旅】Android 源代码中的Java代码中//$NON-NLS-1$ 注释是什么意思?

    1.背景 最近在负责公司基础业务和移动基础设施的开发工作,正在负责Lint代码静态检查工作.因此编写了自定义的Lint规则,在编写自定义的Lint规则前,当然是需要去把Google的关于Lint检测的 ...

  4. EasyUI Pagination 分页

    通过 $.fn.pagination.defaults 重写默认的 defaults. 分页(pagination)允许用户通过翻页导航数据.它支持页面导航和页面长度选择的可配置选项.用户可以在分页的 ...

  5. 田忌赛马Java解答

    你一定听过田忌赛马的故事吧?     如果3匹马变成1000匹,齐王仍然让他的马按从优到劣的顺序出赛,田忌可以按任意顺序选择他的赛马出赛.赢一局,田忌可以得到200两银子,输一局,田忌就要输掉200两 ...

  6. (转)SSIS_数据流转换(Union All&合并联接&合并)

    Union All : 与sql语言 Union All 一样,不用排序,上下合并多个表.Union All转换替代合并转换:输入输出无需排序,合并超过两个表 合并联接 : 有左连接.内连接.完全连接 ...

  7. Smarty 模板布局继承

    Smarty 模板继承 在覆盖父模板的{block}块以外的地方, 子模板不能定义任何内容.任何在{block}以外的 内容都会被自动忽略. 在子模板和父模板中的{block}内容,可以通过 appe ...

  8. ng-深度学习-课程笔记-12: 深度卷积网络的实例探究(Week2)

    1 实例探究( Cast Study ) 这一周,ng对几个关于计算机视觉的经典网络进行实例分析,LeNet-5,AlexNet,VGG,ResNet,Inception. 2 经典网络( Class ...

  9. Python 操作 SQL 数据库 (ORCAL)

    MySQLdb.connect是python 连接MySQL数据库的方法,在Python中 import MySQLdb即可使用,至于connect中的参数很简单:host:MySQL服务器名user ...

  10. STM32 IO口双向问题

    源: STM32 IO口双向问题