【精品】应急平台模型实现技术规范_第1页
【精品】应急平台模型实现技术规范_第2页
【精品】应急平台模型实现技术规范_第3页
【精品】应急平台模型实现技术规范_第4页
【精品】应急平台模型实现技术规范_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、应急平台模型实现技术规范简介本文档主要说明在技术上如何针对模型组的实际情况,把现有成果和力量应用到国办应 急平台上,同时对整个体系架构、相关实现技术、技术瓶颈做一下简单介绍。目前的情况跟据我们的人致了解,i前模型组的各个单位的产品从技术上可以分成如下儿类:1、有成熟的产品,c+、fortran、c、matlab、.net等语言实现,运行需要专门的 运行环境,如操作系统、所需类腭等等,运算量大、有固定的输入输出模式,输入输出 量都很大,系统十分稳定,能够自动运行,使用频率高。2、有成熟的产品,采用c+> fortran> c、等语言实现,提供人机交 互界而,计算量不是太大,系统的输入

2、、计算、输出等模块耦合性比较强,运行依赖于 特定环境、如依赖于特定的g1s平台等,使用频率不是太高3、有成熟的产品,纯模型计算,一般用fortran语言实现,计算量较小,使用较 频繁,而且不同的模型有可能组合使川,比如综合性的预测预警分析等。4、处于研究阶段,模型的需求要求计算得并不是十分精确,只要求采用一些经验 公式算出大概的结果,输入输出和计算量都不人,使用也较为频繁。整体架构为了满足国办应急平台的需求,同时充分考虑i前模型组的各个单位的实际情况,模型 和平台的结合准备采用多种方式进行整合。整合方式按照实现方式可以分成两类:1、数据報合,对于集成难度较高的模型采用此种集成方式,谟模型的特点

3、是计 算量大、输入输出数据量大,开发技术体系封闭,对运行环境耍求苛刻。对这类模型, 我们不会把整个模型的实现嵌入到应急平台内部,而只是利用模型输出的结果。2、应川整合,对于使川频率较髙,计算童不人,而且经常需要不同模型结合使川 的模型采用此种整合方式。整个模型的实现会嵌入应急平台内部,由应急平台控制模型 的运行、输入、输出。对于数据整合,模型需耍把计算出的结果报送到应急平台z中,运算结果的规范需要跟 各个业务组进行约定,根据需求选择上报到数据库、或上报数据文件、图片、文档等内容。 国办的工作人员根据模型上报的内容对事件进行处理。1=1前国办应急项1=1组止在建设基础信 息库、预案库、gis库等

4、数据库,模型所需的数据输入可以从基础数据库中提取,也可以从 gis数据库提取,格式以基础库中的数据格式为准。应急平台提供运算结杲上报的人机界而, 对于数据彊特别大的数据町以采用ftp的方式发送到应急平台,一般情况下如果数据量 特别巨大,推荐采用文字和多媒体描述方式报送。对于应川整合,所有的模型都必须按照统一的技术标准进行开发或者重构,所有的模型 都会部署在一台或多台模型服务器上,在模型服务器上的模型的接口都统一封装成web service形式。应丿ij服务器调川模型的时候首先会在系统中查找这个模型的调川接口,然后 再通过web service调用模型进行计算,计算的结果直接返回,整个过程采用同

5、步的方式进 行-。技术要求独立运行的模型需要满足如下要求:1、数据的输入必须按照应急平台基础数据库的数据格式进行输入,如果基础数据库中 没冇所需的数据,对以采川数据文件、临时数据库等方式来存储输入数据。2、数据的输出必须通过应急平台输出界而进行输出,输出的格式和类型需要和各个业 务组进行沟通。和应急平台整合在一起的模型需要满足的要求如下:1、模型必须封装成统一的web service接口。2、模型的运行不能够互相干扰。3、模型必须能够长时间稳定运行。4、模型的实现不能存在任何内存溢出问题。5、建议采用java语言或者fortranjava和c混合编成来实现,直接用c或c+问题会 比较多。6、模

6、型只是简单的输入输出,不和展现界血存在耦合。7、web service的发布采川axis服务器进行统一发布,不能各个模型自己建立web service服务器,否则每台服务器只能部署一个web service服务器。8、模型的计算量不能太人,计算时间控制在10秒之内。应用集成方式:1、纯java实现,模型全部由jdk1.5实现,模型组可以以原代码的形式提供,也可以以 class文件或者jar文件的形式提供,软件开发组会把这个算法发布到模型服务器上,这 种应用方式适合计算量不是很大,乂需要经常使川的模型。推荐大多数的模型采用这种 形式,其好处是集成简单,系统町靠性、可维护性好。2、fortran&

7、gt;java> c混合实现,fortran语言不能直接发布成web service,昵z需要通过fortran 和c混合编程,把必要的fortran接口封装成c接口,然丿讦再通过jnkjava native interface ) 把c接口封装成java接口,最后通过axis服务器把该模型的接口发布成web service形 式。这种类型的集成方式适合对计算量不是太大随时可能会被调用的模型进行集成工 作。模型组需要把经过java封装的模型以class文件或问文件的形式提供给软件开发组, 软件开发组再发布到模型服务器上,并封装成web service接口。3、动态链接库或com形式实现,

8、有不少算法是以dll形式和com形式存在的,这种模型适合开发单机版的程序,并不适合开发服务器版,除非特殊情况,否则不推荐把这种形 式的模型集成到整个系统中来。如果一定要集成进来,只能采用jni的形式,把dll和 com接口封装成java接口,再发布成web service,dll和com还必须满足稳定性、独立性等耍求。4、其他,还有一些模型对运行环境要求比较特殊,计算杲也比较大,直接做集成难度较大, 只能根据实际情况来制订集成的方式。接口规范1、国办综合应用系统集成的所有模型接口采川java的interface形式定义,interface的包路 径按照“gov.csc.ems.model模型名

9、称缩写”的方式來组织。2、每个接口必须是imodel.java的子接口,imodel接口源文件如下:*/package govesc.emsmodel;import javaawtheadlessexception;/ * author国办应急平台开发组*/public interface imodel y/ *得到模型的版本号、版权信息*返回值类型为字符串,例如 ''版本1.0版权所有清华大学*/string getversion ();/ *得到模型的名称*返回值类型为字符串,例如 '、综合火灾预警模型"k*/string getmodelname();/

10、 *得到模型功能的详细描述"k*返回值类型为字符串,例如*大规模食物中毒及其引发综合事件预测预警模型,主要功能包括* 1.针对典型大规模食物屮毒预警与后果预测模型* 2.针对大规模食物中毒处置和救援的智能决策方案系统开发。*/string getmodeldescription();/ *得到模型的所有方法和参数列表*返回值类型为字符串,例如*功能:地震灾害烈度快速确定模型* 函数名称:earthquakeassess*输入参数:* double degree:地震级别,震中(在gis图上确定,或通过经纬度进行确定)*输出参数:* doublet radius (单位/km)等震线的

11、长轴、短轴(四种烈度:vi、vii> viii>ix)*通过gis绘图绘制椭鬪等震线,分别用红橙黄兰四种颜色分别显示。* radius 0 v:级短轴* radius 1 vi级长轴* radius 2 vh级短轴* radius 3 vi:级长轴* radius 4 级短轴* radius 5 viii级长轴* radius 6 ix级短轴* radius 7ix级长轴*适用说明:输入参数需要实时从界面录入*功能:地震灾害经济损失评估模型* 函数幺称:earthquakeassess ()*输入参数:* 1) 地震烈度,由上模型获取,直接反映在下述四个参数中* 2)房屋统计(土木

12、、砖木、多层砌体、框架结构各自的面积数,面积需要有上模型 统计分析出来)* double housearealx ix烈度级对应的每一类建筑结构的总血-积* double houseareaviii vii:烈度级对应的每一类建筑结构的总面积* double houseareavii vi工烈度级对应的每一类建筑结构的总面积* double houseareavi vi烈度级对应的每一类建筑结构的总而积*输出参数:各烈度区内地震灾害经济损失、整个地震区内灾害经济损失,以柱状图的形 式展现出来。*/string showahparameters ();getversion ()方法返回该模型的版

13、本号getmodelname ()方法返冋模型的名称get model descript ion ()方法返冋模型的详细描述showahparameters ()方法返冋所有的方法列表及其参数类型定义上述接口在模型中必须实现,模型自己的接口在派生接u的实现类屮完成。3、模型接口的实现类以“i接口名imp”命名,如火灾分析模型接口为“ifiremodel”,则 实现类的命名方式可以为“ifiremodellmp”,每个模型可以有多个实现类,但是接口必 须统一。4、模型参数的配置以java bean的标准形式传递到模型接口的实现类中。gis平台数据规范gis平台基于arcgis9.2,从模型在gi

14、s中表达的效率角度考虑,拟将模型结 果文件分为2个部分,文件格式为txt文本格式或者是一个长字符串,文本的数 据项包括数据自描述文件和数据实体文件两部分。a)数据口描述文件命名规则:"*-sclfdcscription” , ” *”部分为事故描述如“黄石 前进化工厂硫酸二甲脂泄漏”。内容包含数据名称、模型计算参数列表及含义、结果数据的数据项个数、数 据项名称、数据项含义的描述。例如:/名称/2007-05-11黄石前进化工厂硫酸二甲脂泄漏 /模型参数/泄漏物质:硫酸二甲脂风速:风向:/数据项/x: x坐标或经度,类型为doubley: y坐标或纬度,类型为doublez: z坐标或

15、高程,类型为doubletime:时刻,单位为秒attributel:属性项1,为模型屮的专业属性项,如气体浓度、温度等attribute2:属性项2、为模型中的专业属性项,如气体浓度、温度等attrtbute3:属性项3、为模型中的专业属性项,如气体浓度、温度等b)数据实体文件文件命名规则:“*-daui”,” *”部分为事故描述如“黄石前进化工厂 硫酸二甲脂泄漏”。文件第一行格式为各数据项名称,以逗号分隔,例 如:"x,y,z, time, attribute】, attribute2, attribute3-.”。从第二行开始,记录模型计算结果值。示例一 fortran和c混合

16、编程这里将详细介绍一下在c+中如何调用用fortran语言编写断数的问题,即fortran与 c卄的混合编程问题。通常情况下,c+ +与fortran的混合编程问题是利用动态链接库的方式进行的,换句 话说,如果在c/c+中调用fortran函数,应将fortran函数按照一定的协议编译为动态链 接库,然后即町实现二者的混合编程问题。实现这-目的有两种方式:显示链接与隐式链接, 下面通过两个非常简单的实例分别介绍之。编译环境:fortran:推荐使用 compaq visual fortran 6. 0 以上的版本,c+: microsoft visual c+6. 0。1 显式链接,(a) 找

17、开cvf编译器,然后新建一个fortran dll工程(选择fortran dynamic link library),并指定工程名,按确定按钮,然后新建-一个fortran源文件,并输入以下的 fortran 代码:(这里仅为说明问题,实际的问题比下而的代码要复杂得多。)subroutine output(n)!必须声明本函数为输出函数:dllexport!dec$ attributes dllexport: :outputimpliotnoneinteger nn= n+10write(*,*) ,'n=,nend subrouti ne output经编译,链接后,将在debug

18、 i录下生成两个文件,即dll文件与lib文件。(b) 启动 visual c+6. 0,然后新建一个 console i程(即 win32 console application, 当然在mfc中也是完成可行的)o按确定按钮,新建-个空的工程后,再新建一个c+源文 件,并输入以下的代码:# include < iostream.h>#include <windows.h>int main()typedef void (_stdcall * wndproc)(int& );hinstance hubrary= loadubrary(hpp.dllh); 加载动态

19、库文件if(hubrary= = null)cout&lt;&it;'1 can't find the dll file”&lt;&lt;endl;retur n -1;wndproctest=(wndproc)getprocaddress(hlibrary,"output"); 获得fortran导出窗数的 地址if(test= = null)8ut&lt;&lt;ncanft find the function file/'&lt;&lt;endl;return -2;int n=3

20、;test(n); 调用 fottran 函数freelibrary(hlibrary); 卸载动态库文件return 0;当编译通过后,将市fortran编译器生成的动态库文件(本算例为pp. dl 1)复制到c+的 debug文件夹中(即mmdebug),然后点击执行即可。2.隐式链接与上文所介绍的显示链接相比,隐式链接要相对容易一点。下面也通过一个算例进行说明。(1) 建立一个fortran动态库文件,其方法与上述完全相同,然后在cvf编译器中输入以 下的代码:subroutine output(n)!下面为对fortran函数的声明!ms$if .not. defined(linkdi

21、rect)!ms$attributes dllexport : output!ms$endifimpliotnoneinteger nn= n+10write(*,*) ,n=,nend subrouti ne output编译通过后,将在fortran工程文件夹的debug文件夹中牛成两个文件,即*. dll文件与 *. lib文件。(2) 新建一个c+ console项目,并新建一个c+文件,然后输入以下的代码:# include < iostream.h># include vwindows.h>声明函数output为extern型的,即是从外部调用的。extern ”

22、c' void _stdcall output(int& n);int main()int n=3;output(n);return 0;然后将fortran编译器生成的两个文件(dll文件与1让文件)复制到c+的当前日录下, 并将lib文件加入到当前的c+工程项目中,点击菜单“工程一添加工程一files”,然后 选中pp. lib文件即可,此时即对通过编译,执行此程序。示例二jni封装c接口为java接口java native interface (jni)是java语言的本地编程接口,是j2sdk的一部分。在java 程序中,我们可以通过jni实现一些用java语言不便实现

23、的功能。通常有以卜儿种情况我 们需要使用jni來实现。标准的java类库没有提供你的应用程序所需要的功能,通常这些功能是平台相关的 你希望使用一些己经有的类库或者应用程序,而他们并非用java语言编写的程序的某些部分对速度要求比较苛刻,你选择川汇编或者c语言来实现并在java语言 中调用他们下面我们开始编写hclloworld程丿芋,由于涉及到要编写c/c+代码因此我们会在开发中 使用 microsoft vc+工具。编写java代码我们在破盘上建立一个hello 11录作为我们的工作口录,首先我们需要编写自己的java 代码,在java代码中我们会声明native方法,代码非常简单。如下所示

24、class helloworldpublic native void displayhelloworld(); static s ystem. loadlibrary( "hellon);public static void main(string args) new hellowoiid().displayhelloworld();注意我们的displayhelloworld()方法的声明,它有一个关键字native,农明这个方法使用java 以外的语言实现。方法不包括实现,因为我们要用c/c+语言实现它。注意 system.loadlibrary('"hello

25、")这句代码,它是在静态初始化块中定义的,系统用来装载hello共 享库,这就是我们在后而生成的hello.dll (如果在其他的操作系统町能是其他的形式,比如 hello.so)编译java代码javac helloworld.java?生成 helloworld.class 文件创建.h文件这一步中我们要使川javah命令生成.h文件,这个文件要在后面的c/c+代码屮用到,我们 运行javah helloworldo这样我们可以看到在i相同目录卜生成了一个helloworld.h文件,文件内容 如下/* do not edit this file it is machine generated */

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论