生態流量(Ecological Flow, EF) 是指維持河道內生態環境所需要的水流流量。生態流量計算方法眾多,主要分為水文學方法、棲息地模擬法、水力學方法、整體法等,各方法多用于計算維持河道生態平衡的最小生態流量(Minimum Ecological Flow, MEF)即生態基流。
水文學方法原理簡單、計算快捷,適應于較長河流生態流量的確定。同時該算法也可以用于缺乏水文站點和詳細水文數據的河流,應用較為廣泛。
【水文學法總結】河道內生態流量計算方法
- 1 Tennant法
- 1.1 原理
- 1.2 MATLAB計算代碼
- 2 最小月多年平均流量法(Minimum average monthly flux method, MAMFE)
- 2.1 原理
- 2.2 MATLAB計算代碼
- 3 年內展布計算法(Dynamic calculation method, DCM)
- 3.1 原理
- 3.2 MATLAB計算代碼
- 4 FDC法
- 4.1 原理
- 4.2 MATLAB計算代碼
- 5 多層次生境條件的改進Tennant法(MTMMHC法)
- 5.1 原理
- 5.2 MATLAB計算代碼
- 參考
1 Tennant法
1.1 原理
1.2 MATLAB計算代碼
代碼如下:
function [MEF, OEFmin] = getMEF_Tennant( Runoff )
%% 方法1:Tennant法
% 河道內生態流量:采用不同用水期(年/月尺度)相應天然徑流量的多年平均同期徑流量的百分比
% 輸入變量
% Runoff 月均徑流序列
% 輸出變量
% MEF 最小生態流量
% OEFmin 最優生態流量下限值
% AAF 多年平均年徑流量
% AMF 多年平均月徑流量nMonth =12;
nYear = length(Runoff)/nMonth;MF = reshape( Runoff, nMonth , nYear );
AAF = mean( sum( MF,2 ) );
AMF = mean( MF ,2 );MEF = 0.1* AMF;
OEFmin = 0.6* AMF;
end
2 最小月多年平均流量法(Minimum average monthly flux method, MAMFE)
2.1 原理
2.2 MATLAB計算代碼
代碼如下:
function MEF = getMEF_MAMFE( Runoff )
%% 方法2:最小月多年平均流量法
% 最小生態流量:河流每年最小月平均流量的多年平均值
% 輸入變量
% Runoff 月均徑流序列
% 輸出變量
% MEF 最小生態流量
% AAFmin 多年最小平均年徑流量
% MFmin 多年最小月均徑流量
% MF 月均徑流量nMonth =12;
nYear = length(Runoff)/nMonth;MF = reshape( Runoff, nMonth , nYear );
MFmin = min( MF ,[], 2 );
AAFmin = mean( MFmin );MEF = AAFmin;
end
3 年內展布計算法(Dynamic calculation method, DCM)
3.1 原理
年內展布法基于歷史流量資料,以年最小徑流總量與多年平均徑流總量二者之間的比值,得到各月生態流量與各月多年平均徑流量之間的關系,以此確定生態流量。
3.2 MATLAB計算代碼
代碼如下:
function MEF = getMEF_DCM( Runoff )
%% 方法3:年內展布計算法
% 輸入變量
% Runoff 月均徑流序列‘
% MEF 最小生態流量
% AAFmin 多年最小平均年徑流量
% MFmin 多年最小月均徑流量
% MF 月均徑流量nMonth =12;
nYear = length(Runoff)/nMonth;% 步驟1:根據長時間水文序列天然月均徑流資料,分別計算多年平均年徑流量和多年最小平均年徑流量
MF = reshape( Runoff, nMonth , nYear );
AAF = mean( sum( MF,2 ) );
MFmin = min( MF ,[], 2 );
AAFmin = mean( MFmin );% 步驟2:計算多年最小年均徑流量和多年平均年徑流量的比值η
eta = AAFmin/AAF;% 步驟3:根據多年平均月徑流量,計算各月最小生態流量
AMF = mean( MF , 2 );
MEF = AMF* eta;
end
4 FDC法
4.1 原理
4.2 MATLAB計算代碼
代碼如下:
function MEF = getMEF_FDC( Runoff )
%% 方法4:FDC法
% 取流量歷時曲線,頻率為90%時流量為河道內最小生態流量
% 輸入變量
% Runoff 月均徑流序列‘percent = 0.9;
flag = 0;
MEF = GetThreshold( Runoff , percent , flag);
end% 調用函數
% -------------------------------------------------------------------------------
function Th = GetThreshold( X , percent , flag)
% GetThreshold函數可根據樣本數據集X得到percent閾值下的臨界值
% 輸入參數 Input parameter
% X 數據(所有樣本),可為降水Precipitation,為向量數據
% percent 閾值百分數,如90%或95%,表示為小數,∈(0,1)
% flag 取值為0,表示取小值;取值為1,表示取大值
% 輸出參數 Output parameter
% Th 相應閾值下數值X = reshape( X,[],1 ); % 確保輸入序列X為行向量n = length( X );
I = zeros(n,1);
[Xsorted, ~] = sort( X, 'ascend'); % 按升序排列
for i=1:nI(i) = find( X(i)==Xsorted);
endif flag==0percent = 1-percent;
endP = (I-0.44)./(n+0.12);
[~, ThIndex] = min( abs(P-percent) );
Th = X(ThIndex);%{
figure(1)
hold on;box on;
h(1) = plot( X, P ,'k.','MarkerSize', 8);
h(2) = plot( Th,percent ,'rp','MarkerSize', 10,'MarkerFaceColor','r','MarkerEdgeColor','r');
h(3) = plot( [0 Th],[ percent percent],'k--','linewidth',1);
xlabel("X(P/T)");
ylabel("Percent");
set(gca,'FontSize',14,'Fontname', 'Times New Roman');
%}
end
5 多層次生境條件的改進Tennant法(MTMMHC法)
5.1 原理
生態流量采用MTMMHC法計算,其主要優勢在于:
①同傳統Tennant法以平均流量的單一百分比作為生態流量不同,它計算出不同月份不同水平年的生態流量,其中水平年的劃分基于月平均流量序列的不同保證率,能充分考慮流量的年內變化和年際變化(時間變異性);
②它以不同水平年組不同月份的月中值流量代替Tennant法中年平均流量或月平均流量,考慮了極端年際流量及流量年內分布不均的影響(時間變異性);
③采用MTMMHC法計算流域內不同子流域的各級生態流量,即在不同河段采用不同的生態流量,能改進在整個流域采用同一個生態流量的情況(空間變異性)。
5.2 MATLAB計算代碼
代碼如下: