使用IDL进行氚羽流监测(一)——对研究区和环境进行建模

发布时间 2023-12-18 15:52:22作者: ENVI-IDL技术殿堂

本系列环境监测示例探讨了 IDL 帮助您表征环境条件、执行分析和创建可视化的方法。

在本例中,我们将查看一个模拟核废料处置场的周围环境。核反应堆的废料氚被堆积在靠近一条主要河流的地下储罐和储水井中。这些储罐或储水井随后发生泄露,现在一股受氚污染的水流正穿过沉积物流向河流。

对研究区和环境进行建模

首先,创绘制一些基本地图和地表图来描述研究区域的特征。请注意,研究区域为 10 km x 10 km。

假设每个储罐/储井都装满了包括氚在内的液体废料。官方记录显示,在“填满年份”之后没有再存放核废料。

储罐数量

装满年份

氚初始浓度

(pCi/L x 10 6 )

A-401

1995

7

A-402

1983

9

A-403

1984

0*

A-404

1996

5

A-405

1995

4

*未见氚信息相关报道。

读入地形数据并对其进行网格化

首先读入基础数据。数据位于IDL 安装目录下(IDLxx\examples\data\TankDataTerrain.csv)。该文件包含储罐或储井点的地表地形数据,以 X、Y、Z 坐标表示(均以米为单位)。文件的第四列数据为下层含水层表面的标高。

在本例中,我们使用ASCII_TEMPLATE创建一个模板,需指定数据从第二行开始,并在第3步中为FIELD1~4设置属性名称为X、Y、Z和AQ。然后使用READ_ASCII读入数据。

; 确保数据从第 2 行开始

; (第 1 行为列标题)。

; 创建基本模板并手动指定 X、Y、Z和 AQ 作为变量名。

myTemplate = ASCII_TEMPLATE(FILEPATH('TankDataTerrain.csv', $

  SUBDIRECTORY=['examples', 'data']))

site = READ_ASCII(FILEPATH('TankDataTerrain.csv', $

  SUBDIRECTORY=['examples', 'data']),TEMPLATE=myTemplate)

; 使用克里金法对数据进行网格化

; (将维度设置为 1000以符合研究区域的大小)。

; 如果愿意,可以选择其他网格方法。

grid = GRIDDATA(site.X, site.Y, site.Z, $

   DIMENSION=1000, METHOD="Kriging")

创建带有井位置的基础等高线图

创建一些基本的可视化输出来表示研究区域的特征。首先绘制基础地形等高线图。等高线绘制完成后,还将使用散点图和气泡图对储井位置和初始氚浓度进行叠加绘制。

; 创建一个颜色表变量。使用REVERSE关键字

; 使用 #74号颜色表作为 COLORTABLE 函数的关键字

; 翻转颜色,使较深的颜色在地形较低的地区。

myCT = COLORTABLE(74, /REVERSE)


; 设置索引变量来保存轮廓级别。

; 从网格数据创建等高线图。

index = [420,430,440,450,460,470,480,490,500,510, $

   520,530,540,550,560,570,580]

myContour = CONTOUR(grid, RGB_TABLE=myCT, $

   C_VALUE=index, ASPECT_RATIO=.75, /FILL, $

   TITLE="研究区地形与储罐位置", $

   XTITLE="Meters (x10)", YTITLE="Meters (x10)" , $

      font_name = 'Microsoft Yahei')

myContour2 = Contour(grid, COLOR='black', $

   C_VALUE=index, ASPECT_RATIO=.75, /OVERPLOT)


; 更改标题的字体大小。

myContour.TITLE.FONT_SIZE = 14


; 设置储井位置的变量。

; 井位置以同一坐标给出

; 与初始地形的 (x, y) 坐标系相同。

xLoc = [66,276,566,471,484]

yLoc = [210,221,146,483,313]

zLoc = [490,483,470,480,475]

i_tritium = [7, 9, 0, 5, 4]

labels = ['A-401','A-402','A-403','A-404','A-405']

; 绘制氚的相对初始浓度

; pCi/L x 10e6 使用 BUBBLEPLOT 函数。

tritium = BUBBLEPLOT(xLoc, yLoc, MAGNITUDE=i_tritium, $

   EXPONENT=0.75, /OVERPLOT, LABELS=labels,$

   LABEL_FONT_SIZE=8, LABEL_ALIGNMENT=0.0, $

   COLOR='chocolate', LABEL_POSITION='right')

; 使用 SCATTERPLOT 绘制每个气泡的中心点。

myPlot = SCATTERPLOT(xLoc, yLoc, /OVERPLOT, SYMBOL='*', $

   SYM_SIZE=1, SYM_FILLED=1, SYM_THICK=2, SYM_FILL_COLOR='black')


; 在图的左下角添加注释

; 使用数据坐标。

areaText = TEXT(50, 50, TARGET=myPlot, $

   '*气泡大小与初始氚浓度成正比。', $

   /DATA, COLOR='black', FONT_SIZE=8, FONT_STYLE='italic' , $

      font_name = 'Microsoft Yahei')

假设您选择使用示例中的参数,此时的输出结果应如下所示。初始图显示了填充的地形等高线,并标注了储井的位置,还直观地显示了 T0 时每个储井中发现的氚初始浓度的大小。