海底黑烟囱喷出的热液会沸腾吗?

摘要

人类历史上首个海底黑烟囱是在1979年的Rivera Submersible Experiment航次发现的, 位于东太平洋海隆的加拉帕戈斯扩张中心。这个发现是地球科学史上乃至人类科学史上的一件大事儿, 该研究报道登上了当时的Science封面,封面的照片是用美国的阿尔文(Alvin)载人深潜器拍摄的。 科学家乘坐阿尔文深潜器对第一个黑烟囱进行了原位观测,喷口温度高达380° ± 30°C,烟囱高度达50 m。 海底黑烟囱不论是对地球科学、环境、资源、乃至生命科学都具有非常重要的意义。 因此对海底黑烟囱的形成过程以及热液流体的物理、化学性质的研究和认识对揭示这一自然现象的本质具有重要的科学意义。

https://raw.githubusercontent.com/zguoch/PubPic/master/LongqiVenting_Jiaolong.gif

蛟龙号载人深潜器在西南印度洋脊拍摄的龙旂热液区的黑烟囱(节选自《蛟龙探海》纪录片)

热液流体相分离

要回答 黑烟囱热液会不会沸腾 这个问题,必须从黑烟囱喷发的流体的物理性质及所处的温度压力条件入手。对海底热液流体物理性质的研究一般有两种近似:(1)把流体近似为水;(2)把流体近似为NaCl水溶液。当然了,海水和热液都不是纯水,也不可能只有NaCl一种溶质,但是海水和热液的物理性质与这这二者相近,而且NaCl水溶液更接近实际情况。比如,通常用质量分数为3.2 NaCl的NaCl水溶液表示海水。fig:VentTPPhaseDiagram 展示了已经观测到的海底热液喷口流体温度和所处的压力(红色小点)及水和盐水的相图,其中红色曲线表示水的沸腾曲线

https://raw.githubusercontent.com/zguoch/PubPic/master/Vents_TP_PhaseDiagram.svg

海底热液喷口流体的温度和压力观测数据及水和NaCl-H2O的相图。观测数据见 InterRidge 数据库。蓝色虚线和紫色虚线分别表示盐度为3.2% 和32% NaCl的盐溶液的沸腾曲线。

众所周知,临界点的温度为373.946 \(^{\circ}\text{C}\), 压力为220.64 bar,近似为2.2 km 水深的静水压。因此,当温度或压力超过临界点,就会形成超临界水。而当温度和压力都低于临界点的时候,就有三种情况出现:(1)如果温度压力低于沸腾曲线,则不沸腾,流体处于液相;(2)如果温度压力高于沸腾曲线,则流体处于蒸汽相;(3)如果温度压力位于沸腾曲线上,则出现液相-蒸汽相平衡态,即两相共存的状态。从图中可以看出,目前观测到的至少有8个热液喷口流体可能处于气相或两相共存的状态,而至少20个喷口流体处于超临界水的状态。 所以,海底热液喷口也是超临界水形成的天然场所。

https://raw.githubusercontent.com/zguoch/PubPic/master/PhaseDiagram_XTP.png

盐溶液在三维相图,其中X轴表示盐度、Y轴表示温度、Z轴表示压力。洋红色曲面表示三相共存曲面、绿色曲面表示液相-固相共存界面、蓝色和橙色表示液相-蒸汽相共存界面、红色点表示水的临界点、红点以上的红色曲线表示盐溶液的临界曲线、红色点以下的一小段红色曲线表示水的沸腾曲线。

可用鼠标或者手指滑动转动从其他视角观看

如果考虑盐度的影响,问题就变得复杂的多了。从 fig:VentTPPhaseDiagram 中可以看出,盐度越小,其沸腾曲线越接近纯水的沸腾曲线,而盐度越大其沸腾曲线越接近与三相(液相-蒸汽相-岩盐固相)共存曲线。与纯水不同,温度压力条件高于盐溶液的沸腾曲线的时候,会出现三种情况:(1)温度压力条件位于沸腾曲线与三相共存曲线之间的区域,流体以液相-蒸汽相两相共存的状态;(2)温度压力条件位于三相曲线上,则流体处于三相共存状态;(3)温度压力高于三相曲线,则出现蒸汽相-固相共存状态。因此 fig:VentTPPhaseDiagram半透明蓝色区域表示的是潜在的蒸汽相-液相共存区域,也可称之为沸腾区域,是否出现沸腾现象则具体取决于盐度。 比如对于位于水深1000 m且温度约为320的热液喷口,如果盐度小于32% (图中紫色曲线)则处于蒸汽相-液相两相共存状态;如果盐度高于32%,则以单相液相存在。盐溶液的三维相图如 fig:PhaseDiagram_XTP, 而 fig:VentTPPhaseDiagram 中的相边界曲线相当于在三维相图中切去X=0、X=0.032和X=0.32三个切片。值得一提的是,海底热液喷口的超临界水和蒸汽相均已观测到,但大多数的黑烟囱还是处于纯液相状态,即 fig:VentTPPhaseDiagram 中大多数的数据点都位于水的沸腾曲线下方。

NaCl-H2O二元系统的状态方程

以上讨论的热液的相分离的问题是可以通过水或盐水(NaCl-H2O二元系统)的状态方程(EOS: Equation of State)准确分析的。值得注意的是,与我们人生中接触到的第一个状态方程——理想气体的状态方程不同,盐溶液的状态方程非常复杂,是温度、压力和盐度的非线性函数。那么问题来了,既然这么复杂,上面讲到的相图是怎么计算出来的?答案是 本文作者已经开发了相应的计算软件 ,包括ios系统下名叫 swEOS 的App(测试版本可直接在苹果的App Store下载使用)和名叫 pyswEOS 的Python程序包(可通过 pip install pyswEOS 命令安装),其他版本或平台的软件(桌面端软件和可调用的C++函数库、R、TCL和JavaScript等接口)将会很快开源发布。绘制 fig:VentTPPhaseDiagram 的python代码如下。

# 导入所需程序包并做一些绘图方面的设置,使图片更美观
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator
import numpy as np
# config font
mpl.rcParams['font.family'] = 'Arial'
mpl.rcParams['font.size'] = 12
mpl.rcParams['mathtext.fontset'] = 'cm'
# pyswEOS即为NaCl-H2O二元系统的EOS程序包
from pyswEOS import H2O
from pyswEOS import H2ONaCl
water=H2O.cH2O()
sw=H2ONaCl.cH2ONaCl()
# 全球范围内已的海底热液系统观测数据统计文件,可在Interridge数据库中下载
# 下载链接:https://vents-data.interridge.org/ventfields_list_all_CSV
fname_data='vent_fields_all-2.csv'
data=pd.read_csv(fname_data)
# print(data.keys())
maxT=data['Maximum Temperature']
bathy=data['Minimum Depth']
ind_valid=((maxT>200) & (bathy>0))
P=bathy[ind_valid]/10
T=maxT[ind_valid]
# print(len(P))
# print(T.values,P.values)
def getP_VL(T,X_wt0,nP=1000):
   Pmin,Pmax=H2ONaCl.PMIN,H2ONaCl.PMIN
   P_VL_L,P_VL_V=np.zeros_like(T),np.zeros_like(T)
   for j in range(0,len(T)):
      T0=T[j]
      if(T0<=H2O.T_Critic):
            Pmax = water.P_Boiling(T0)
      else:
            Pmax,X_tmp = sw.P_X_Critical(T0)
      P=np.append(np.linspace(Pmin,Pmax-10,nP),np.linspace(Pmax-10,Pmax,nP))
      for i in range(0,len(P)):
            X_wt_VL_L=sw.Mol2Wt(sw.X_VaporLiquidCoexistSurface_LiquidBranch(T0, P[i]))
            X_wt_VL_V=sw.Mol2Wt(sw.X_VaporLiquidCoexistSurface_VaporBranch(T0, P[i]))
            if(abs(X_wt_VL_L-X_wt0)<1E-3):
               P_VL_L[j]=P[i]
               break
            if(abs(X_wt_VL_V-X_wt0)<1E-3):
               P_VL_V[j]=P[i]
               break
   P_VL = np.append(P_VL_L[P_VL_L>0],P_VL_V[P_VL_V>0])
   T_VL_new = np.append(T_VL[P_VL_L>0],T_VL[P_VL_V>0])
   return P_VL,T_VL_new
fig=plt.figure(figsize=(8,4.5))
ax=plt.gca()
# 2. 纯水的沸腾曲线
T_boiling=np.linspace(H2O.TMIN, H2O.T_Critic, 100)
P_boiling=np.zeros_like(T_boiling)
for i in range(0,len(T_boiling)):
   P_boiling[i]=water.P_Boiling(T_boiling[i])
ax.plot(T_boiling, P_boiling, color='r',label='Boling curve of pure water')
# 3. 不同盐度的NaCl-H2O溶液的相分离曲线
T_VL=np.linspace(1, 450, 100)
# 3.1 X=wt% 3.2 NaCl
X,lc='3.2','b'
P_VL1,T_VL_new1=getP_VL(T_VL, float(X)/100)
ax.plot(T_VL_new1,P_VL1,color=lc,ls='--',label='Boiling curve of NaCl-H2O: %s wt%% NaCl'%(X))
# 3.2 X=wt% 40 NaCl
X,lc='32','m'
P_VL2,T_VL_new2=getP_VL(T_VL, float(X)/100)
ax.plot(T_VL_new2,P_VL2,color=lc,ls='--',label='Boiling curve of NaCl-H2O: %s wt%% NaCl'%(X))
# 4. V+L+V 三相界面
P_VLH=[sw.P_VaporLiquidHaliteCoexist(T0) for T0 in T_VL_new1]
ax.plot(T_VL_new1, P_VLH, color='k',label='Vapor + Halite + Liquid coexist')
ax.fill_between(T_VL_new1, P_VLH, P_VL1, fc='c',ec=None, label='Potential Vapor + Liquid phase region', alpha=0.3)
# 5. V+H 界面
ax.fill_between(T_VL_new1, P_VLH, 0, fc='limegreen',label='Vapor + Halite phase region', alpha=0.3)
# 1. 实际观测的热液喷口流体的温度和所处的水深
ax.scatter(T,P,marker='.',fc='r',ec='y',label='Survey data (InterRidge data base)')
ax.legend(loc='lower left')
ax.set_xlim(200,450)
ax.set_ylim(0.1,420)
ax.set_xlabel('Temperature ($^{\circ}$C)')
ax.set_ylabel('Pressure (bar)')
ax.invert_yaxis()
ax.grid(lw=0.1,color='k')
ax.yaxis.set_minor_locator(MultipleLocator(10))
ax.xaxis.set_minor_locator(MultipleLocator(10))
# ax.tick_params(axis='y', which='both', right=True, labelright=True)
axr=ax.twinx()
axr.set_ylim(np.array(ax.get_ylim())/100)
axr.yaxis.set_minor_locator(MultipleLocator(0.1))
axr.set_ylabel('Water depth (km)')
plt.tight_layout()
plt.savefig('Vent_TP_PhaseDiagram.jpg',dpi=400)
plt.savefig('Vent_TP_PhaseDiagram.svg')
plt.show()