首先介绍下这3个文件的关系:可以说INPUT1.C的函数粒度最大,它的函数getdata()就完成了整个INPUT文件数据的读入,该函数又调用了INPUT2.C中的部分函数,INPUT2.C文件中的函数分为两类,一类是解析INPUT文件的函数;另一类是工具函数,包括将节点、管段数据存入哈希表中,构建哈希索引、字符串的匹配,从哈希表中查找数据等,该文件的粒度中等。而INPUT3.C的粒度是最细的,他是用于解析单行INPUT文件的对象内容并保存到内存中。INPUT3.C的组织结构也很简单,各个函数具有较大的相似性,分别是对INPUT文件中的不同段落数据的处理。

其中INPUT2.C文件中的unlinked()函数是检查孤立管点,这个数据检查的算法比较高效值得借鉴,该算法的巧妙之处可以参考代码中的注释:

 int  unlinked()
/*
**--------------------------------------------------------------
** Input: none ;输入:无
** Output: returns error code if any unlinked junctions found ;输出:如果存在孤立点则返回错误代码
** Purpose: checks for unlinked junctions in network ;目的:检查管网中的孤立点
**
** NOTE: unlinked tanks have no effect on computations. ;注意:没有连接的蓄水池对计算无效
**--------------------------------------------------------------
*/
{
char *marked;
int i,err, errcode;
errcode = ;
err = ;
marked = (char *) calloc(Nnodes+,sizeof(char)); //开辟连续的所有节点内存空间
ERRCODE(MEMCHECK(marked));
if (!errcode)
{
memset(marked,,(Nnodes+)*sizeof(char));//给这块内存空间置0
for (i=; i<=Nlinks; i++) /* Mark end nodes of each link */
{
marked[Link[i].N1]++;//以marked的内存的逻辑地址从1、2、3...开始去一一对应管段节点在Node中的索引值,从而标记出所有被管段引用作为始末节点的索引值,而所有未标记成功的就是孤立的点。
marked[Link[i].N2]++;
}
for (i=; i<=Njuncs; i++) /* Check each junction */
{
if (marked[i] == ) /* If not marked then error */
{
err++;
sprintf(Msg,ERR233,Node[i].ID);
writeline(Msg);
}
if (err >= MAXERRS) break;
}
if (err > ) errcode = ;
}
free(marked);
return(errcode);
} /* End of unlinked */

在INPUT1.C这个文件中,我们重点看下getdata(),就知道了它的功能:

 int  getdata()
/*
**----------------------------------------------------------------
** Input: none ;输入:无
** Output: returns error code ;输出:错误编号(大于100表示严重错误)
** Purpose: reads in network data from disk file;作用:从磁盘文件(*.inp)中读入管网模型数据
**----------------------------------------------------------------
*/
{
int errcode = ;
setdefaults(); /* Assign default data values ;给vars.h中的部分全局变量赋值*/
initreport(); /* Initialize reporting options ;初始化报表选项*/
rewind(InFile); /* Rewind input file ;将INPUT文件的指针指向文件的开始*/
ERRCODE(readdata()); /* Read in network data ;读取整个管网数据,该部分的具体实现是依赖INPUT2.C与INPUT3.C*/
if (!errcode) adjustdata(); /* Adjust data for default values ;调整数据的默认值,当INPUT文件对部分关键参数缺少描述时,这里将重新赋值*/
if (!errcode) initunits(); /* Initialize units on input data ;确定单位转换因子,EPANET中的单位体系就2种,一种是英美制US,一种是米制,根据确定的单位体系,来设置各节点、管段等的字段的转换参数*/
ERRCODE(inittanks()); /* Initialize tank volumes ;初始化水库的容积*/
if (!errcode) convertunits(); /* Convert units on input data ;在进行水力解算前对管段、节点、水泵、阀门的相关字段的单位数据进行转换*/
return(errcode);
} /* End of getdata */

EPANET中读取INPUT文件的函数文件——INPUT1.C/INPUT2.C/INPUT3.C的更多相关文章

  1. EPANET中读取INPUT文件的函数文件——INPUT3.C

    /* ********************************************************************** INPUT3.C -- Input data par ...

  2. C#项目实例中读取并修改App.config文件

    C#项目是指一系列独特的.复杂的并相互关联的活动,这些活动有着一个明确的目标或目的,必须在特定的时间.预算.资源限定内,依据规范完成.项目参数包括项目范围.质量.成本.时间.资源. 1. 向C#项目实 ...

  3. 在.NET中读取嵌入和使用资源文件的方法

    转http://www.jb51.net/article/84660.htm 本文分别介绍了使用GetManifestResourceStream读取嵌入资源,和使用. resx资源文件嵌入资源,希望 ...

  4. 总结文件操作函数-文件夹(三)-C语言

    获取.改变当前文件夹: 原型为: #include <unistd.h>   //头文件 char *getcwd(char *buf, size_t size); //获取当前文件夹.相 ...

  5. 第3章 Python基础-文件操作&函数 文件操作 练习题

    一.利用b模式,编写一个cp工具,要求如下: 1. 既可以拷贝文本又可以拷贝视频,图片等文件 2. 用户一旦参数错误,打印命令的正确使用方法,如usage: cp source_file target ...

  6. matlab初学者_脚本文件调用函数文件

    问题: matlab里面有两种文件,一种是脚本文件,一种是函数文件,为了模块化程序,我们需要把专门的功能写成一个函数封装到某个函数文件里面. 那么来看如何在脚本文件里调用函数文件中的函数. 注意点: ...

  7. java项目中读取src目录下的文件

    private void getUser(String tmpfile){ Properties props = new Properties(); props.load(DbTask.class.g ...

  8. 通过纯Java代码从excle中读取数据(为.xlsx文件)

    参考链接: 程序代码: package demo; import java.io.File; import java.io.IOException; import java.io.InputStrea ...

  9. [Java] 在 jar 文件中读取 resources 目录下的文件

    注意两点: 1. 将资源目录添加到 build path,确保该目录下的文件被拷贝到 jar 文件中. 2. jar 内部的东西,可以当作 stream 来读取,但不应该当作 file 来读取. 例子 ...

随机推荐

  1. FPGA4U FPGA SDRAM Controller

    -- https://fpga4u.epfl.ch/wiki/FPGA4U_Description -- The SDRAM bits data ..> signals, -- one ..&g ...

  2. Cocos2d-x3.x塔防游戏(保卫萝卜)从零开始(三)

    一.前提: 完成前一篇的内容. 具体参考:Cocos2d-x3.x塔防游戏(保卫萝卜)从零开始(二)篇 二.本篇目标: l  说说游戏中各种角色的动作.属性以及重构思路 l  进行代码重构让色狼大叔和 ...

  3. iOS:Tools:快速注释Doxygen

    Xcode5有个新特性就是自己定义的函数也会被检测集成到代码提示里面,也就是在Quick Help有提示.如 /** * @brief 设置id * * @param id 要设置的id */ +(v ...

  4. java bean、List、数组、map和Json的相互转化

    工程 json包为  代码 package com.my.json; public class ChildBean { private String childName; private String ...

  5. web项目总结

    web项目 Webroot下面的index.jsp页面的内容: <%@ page language="java" pageEncoding="UTF-8" ...

  6. 定时从远程的数据库中取数据,然后把取出来的数据插入或更新本地的oracle数据库的表

    最近项目中有一种需求: 大致需求是这样的 通过给定的 用户名和密码 要定时从远程的数据库中取数据,然后把取出来的数据插入或更新本地的oracle数据库的表 项目的结构式struts1 hibernat ...

  7. Ant自动编译打包&发布 android项目

    Eclipse用起来虽然方便,但是编译打包android项目还是比较慢,尤其将应用打包发布到各个渠道时,用Eclipse手动打包各种渠道包就有点不切实际了,这时候我们用到Ant帮我们自动编译打包了. ...

  8. Selenium实战脚本集(4)--简单的开发者头条客户端

    描述 去开发者头条抓取本日的top 10内容,也就是排在前面的10个,需要抓取标题和url 将这些内容保存在数据库,推荐使用sqlite 写个简单的客户端,要求可以展示每日的内容,点击标题后可以打开浏 ...

  9. CSS3学习笔记--transform基于原始数据(旋转木马实例)

    参考链接:好吧,CSS3 3D transform变换,不过如此! transform-style:preserve-3d属性要在图片所在的容器(父元素)中定义,perspective定义在父子元素上 ...

  10. 关于Unity程序在IOS和Android上显示内嵌网页的方式

    近期因为有须要在Unity程序执行在ios或android手机上显示内嵌网页.所以遍从网上搜集了一下相关的资料.整理例如以下: UnityWebCore 从搜索中先看到了这个.下载下来了以后发现这个的 ...