卡西欧VC270改3D VC++在HST3D热运移模拟程序前后处理中的应用

  摘 要:HST3D作为一款在国内外得到较广泛应用的模拟地下水热运移的软件,涉及输入文件的建立,其过程很不直观。利用VC++对话框控件和CStdioFile写文件的方法,基本实现HST3D的前处理。HST3D的输出文件为txt文档,结合Surfer Automation接口技术,实现了对Surfer等值线图绘制方法和属性的调用,完成了等值线图的绘制,实现HST3D的后处理。通过可视化的开发,可有效提高HST3D程序的易用性。
  关键词:VC++;HST3D;前处理;后处理;Surfer
  中图分类号:TP316 文献标识码:A 文章编号:16727800(2012)011006903
  ________________________________________
  基金项目:国家火炬计划环境建设项目(2010GH551118)
  作者简介:张艳(1983-),女,硕士,福州市科技情报所助理工程师,研究方向为信息化。0 引言
  地热是一种取之不尽用之不竭的资源,使用地热几乎不排放温室气体。简言之,地热是满足全球能源需求的一种近乎完美的解决方案。为了利用地热资源,地下水源热泵空调系统以地下水作为载体,将浅部含水层中的地下水抽出进行采能,然后再将其回灌到地下。
  地下水热运移数值模拟能够很好地模拟地下水系统中的热运移过程,具有高效性、灵活性和相对廉价等特点。目前国际上有多种能够模拟地下水热运移的软件,其中HST3D程序在国内外得到较广泛应用。
  一个完整的地下水模拟过程包含3个部分:前处理、模型计算和后处理。前处理是指在进行模拟计算之前对计算过程中所需数据的整理、组织、输入及计算网格的编号与生成;模型计算是进行地下水能量运移正反演计算;后处理是将计算所产生的结果数据,用图形或表格显示或存放起来,以供研究人员方便地进行分析和使用。HST3D热运移模拟程序就是进行模型计算工作,但HST3D热运移模拟程序涉及数据文件的建立,其过程十分不直观,本文通过VC++编程实现了在HST3D热运移模拟程序前后可视化处理,提高了该模型的易用性。
  1 HST3D系统模块
  1.1 HST3D热运移模拟程序的前处理
  HST3D由FORTRAN写成,FORTRAN是一种适合科学和工程计算的程序,特别是在水利工程领域,过去许多复杂而繁琐的计算程序和程序库都是用FORTRAN设计语言编写的。虽然,FORTRAN语言在这些计算领域效率很高,但大多利用DOS操作系统,采用数据文件形式提供数据,这种方式易产生数据错位和数据本身的错误,不利于检修,而且图形功能弱,计算结果可视化存在缺陷,很难形成与用户交互的图形界面,这就需要进行前处理。
  图1 HST3D系统模块
  本文在对话框中完成数据的输入,并自动生成HST3D所需要的数据文件。
  1.2 HST3D热运移模拟程序的后处理
  Sufer软件提供用户程序与Surfer服务器之间的Automation接口技术,该接口涵盖了绘图的所有功能;Surfer支持多种高级程序语言的二次开发。本文以VC为开发平台对Sufer提供的automation接口进行调用,实现输出等值线图的自动绘制。
  2 系统实现
  2.1 网格剖分对话框
  网格剖分对话框如图2所示,其具体实现过程简述如下:
  (1)将编辑框控件与成员变量相关联。
  (2)确定按钮代码如下,实现将编辑框数据写入txt文件。其中,endy、endz的计算与endx类似,y、z的输出与x的输出类似,均省略。
  图2 网格剖分对话框 图3 设置水井对话框
  UpdateData();
  CStdioFile mFile;
  CFileException mExcept;
  mFile.Open("d:1.txt",CFile::modeCreate|CFile::modeWrite,&mExcept);
  CString string="C.1.6 "+m_nx+" "+m_ny+" "+m_nz+"rn";
  mFile.WriteString(string);
  int endx=atoi(m_x0)+atoi(m_nx)*atoi(m_dx);
  CString x;
  x.Format("C.2.2A.2A %s. %drn",m_x0,endx);
  mFile.WriteString(x);
  mFile.Close();
  2.2 设置水井对话框
  设置水井对话框如图3所示,其具体实现过程简述如下:
  (1)ListCtrl控件与成员变量关联。
  (2)“增加井点”按钮代码,将编辑框数据填入ListCtrl控件:
  UpdateData();
  m_cListCtrl.InsertItem(0,m_name);
  m_cListCtrl.SetItemText(0,1,m_x);
  m_cListCtrl.SetItemText(0,2,m_y);
  (3)“确定”按钮的主要代码如下,将ListCtrl控件数据分行写入txt文件:
  int nLine=m_cListCtrl.GetItemCount();
  int nCol=m_cListCtrl.GetHeaderCtrl()->GetItemCount();
  for(int i=0;i   {CString itemstr;
  for(int j=1;jGridData(vpXYZInputFile.bstrVal,vtXCol.lVal, vtYCol.lVal, vtZCol.lVal, vDefaultArg, … , vpOutputGridFile.bstrVal, srfGridFmtS7, vDefaultArg, … , &vtStatus);//调用IApplication下的GridData函数,其中省略号表示默认参数vDefaultArg省略
  2.5 实现grd文件的显示
  VC++除了可以通过上述方法调用Surfer以外,还可以通过创建ActiveX 控件调用Surfer。其具体实现过程简述如下:
  (1)在Visual Basic 中新建一个Active X Control项目。
  (2)点击“Project”菜单下的“references”,选中“Surfer 8 Typed Library”并确定。
  (3)在此新项目中编写所需要的函数供VC++调用:
  Public Function xs()
  "声明对象
  Dim SurferApp, Plot, ContourMapFrame, ContourMap As Object
  Dim InFile, GridFile, BaseName As String
  "创建 Surfer Application对象
  Set SurferApp = CreateObject("Surfer.Application")
  SurferApp.Visible = True
  Set Plot = SurferApp.Documents.Add()
  Set ContourMapFrame = Plot.Shapes.AddContourMap("D:result.grd")
  Set ContourMap = ContourMapFrame.Overlays(1)
  ContourMap.FillContours = True
  "显示等值线
  Plot.Export ("D:result.jpg")
  End Function
  (4)选中“File”菜单中的“Make *.ocx”子菜单生成自定义的Active X 控件。
  (5)打开VC中要调用ActiveX 控件的对话框,点击右键并在弹出的菜单中选中“Insert Active X Control” 菜单,最后在弹出的对话框中选中刚生成的ActiveX控件。
  (6)为该控件关联成员变量m_xs。在class view中可以看到,已自动加入的控件类,并且具有控件的所有接口。
  (7)在待调用的显示函数中加入语句m_xs.xs(),调用此Active X 控件对象的成员函数即可完成对Surfer Automation 的调用。如图4所示。
  图4 调用Surfer显示等值线
  也可实现三维等值线图的显示,只需将xs函数代码做部分修改。如图5所示。
  图5 调用Surfer显示三维等值线
  Set MapFrame = Plot.Shapes.AddSurface("D:result.grd")
  Dim SurfaceMap As Object
  Set SurfaceMap = MapFrame.Overlays(1)
  3 结语
  由于面向地热发电的模拟需求,开展HST3D热运移模拟程序前后处理的开发,切合实际需要。本文利用VC++的对话框控件,从而实现HST3D程序的前处理,将fortran程序的科学计算的高效性与VC++可视化的优势相结合;并结合Surfer Automation接口技术,完成了等值线图的绘制,提高了HST3D程序应用的可视化效果。
  参考文献:
  [1] 斯伦贝谢公司.地热资源开采[J].油田新技术,2009(4).
  [2] 赵静,闫振鹏,邵景力,等.HST3D程序及其在热运移模拟方面的实际应用[J].资源与产业,2009(4).
  [3] CHIASSON A D. Advances in modeling of ground source heat pump systems[D].Oklahoma City:Oklahoma State University, 1999.
  [4] 尹立河,李清.国外地下水热运移软件开发现状与趋势[J].西北地质,2007(4).
  [5] 朱从旭.混合编程与FORTRAN计算程序图形界面的实现[J].中南工业大学学报:自然科学版,2000(6).
  [6] 周阳,黄浩云,李志强.基于C#与Surfer Automation完成大气污染扩散等值线自动化生成[J].环境科学与管理,2011(1).
  [7] 水资源与环境工程北京市重点实验室.FlowHeat 1.0软件用户手册[Z].2006.
  [8] 王新,陈同俊,孟凡荣.Surfer二次开发的VC++实现[J]. 微计算机信息,2009(25).
  (责任编辑:杜能钢)