diff --git a/Fortran/MAIN_UFRN.f90 b/Fortran/MAIN_UFRN.f90 index dfe6f34..0db5410 100644 --- a/Fortran/MAIN_UFRN.f90 +++ b/Fortran/MAIN_UFRN.f90 @@ -1,105 +1,105 @@ -SUBROUTINE MAIN_UFRN(nriver ,& !河道数量 - nsect ,& !河道计算断面数最大值 - krc ,& !河道汊点数最大值 - ndata ,& !计算时刻数 - Ns ,& !河道断面数 - Pc ,& !河道汊点数 - Nrc ,& !河道汊点微段号 - Lc ,& !汊点类型 - Dric ,& !流动方向 - XJ ,& !流量过程 - Asave ,& !水库面积 - ds ,& !河道几何数据 - bd ,& !梯形断面底宽 - zd ,& !梯形断面底高程 - sm ,& !梯形断面边坡系数 - rough ,& !梯形断面糙率 - ZZ0 ,& !计算区域初始水位 - Zctr ,& !河道末端挡潮闸运行控制水位 - Qp ,& !计算区域入河流量过程 - UB1 ,& !上游边界条件类型1(1——水位边界,2——流量边界,3——水位流量关系) - UB2 ,& !上游边界条件类型2(1——河网外边界,2——河网内边界) - DB1 ,& !下游边界条件类型1(1——水位边界,2——流量边界,3——水位流量关系) - DB2 ,& !下游边界条件类型2(1——河网外边界,2——河网内边界) - UBV ,& !上游外边界断面处的水位,或流量过程 - NUB ,& !上游内边界断面所连接的河道编号、微段编号 - DBV ,& !下游外边界断面处的水位,或流量,或闸下潮位过程 - Gate ,& !Gate(1,i) = 闸净宽;Gate(2,i) = 最大过流量;Gate(3,i) = 流量公式C1;Gate(4,i) = 流量公式C2 (流量公式Q=C1*B*e*dZ^C2中的C1和C2) - NDB ,& !下游内边界断面所连接的河道编号、微段编号 - Aphi ,& !下游流量内边界(管涵)的过流断面面积、流速系数 - period ,& !计算小时数 - dt ,& !计算时间步长 - sita ,& !水量隐格式权系数 - sorz ,& !水位迭代松弛因子 - sorq ,& !流量迭代松弛因子 - epsz ,& !水位迭代控制精度 - epsq ,& !流量迭代控制精度 - Bsor1 ,& !水闸外边界计算中的松弛因子 - Bsor2 ,& !管涵内边界计算中的松弛因子 - Z ,& !输出河道水位 - Q )& !输出河道流量 +SUBROUTINE MAIN_UFRN(nriver ,& !娌抽亾鏁伴噺 + nsect ,& !娌抽亾璁$畻鏂潰鏁版渶澶у + krc ,& !娌抽亾姹婄偣鏁版渶澶у + ndata ,& !璁$畻鏃跺埢鏁 + Ns ,& !娌抽亾鏂潰鏁 + Pc ,& !娌抽亾姹婄偣鏁 + Nrc ,& !娌抽亾姹婄偣寰鍙 + Lc ,& !姹婄偣绫诲瀷 + Dric ,& !娴佸姩鏂瑰悜 + XJ ,& !娴侀噺杩囩▼ + Asave ,& !姘村簱闈㈢Н + ds ,& !娌抽亾鍑犱綍鏁版嵁 + bd ,& !姊舰鏂潰搴曞 + zd ,& !姊舰鏂潰搴曢珮绋 + sm ,& !姊舰鏂潰杈瑰潯绯绘暟 + rough ,& !姊舰鏂潰绯欑巼 + ZZ0 ,& !璁$畻鍖哄煙鍒濆姘翠綅 + Zctr ,& !娌抽亾鏈鎸℃疆闂歌繍琛屾帶鍒舵按浣 + Qp ,& !璁$畻鍖哄煙鍏ユ渤娴侀噺杩囩▼ + UB1 ,& !涓婃父杈圭晫鏉′欢绫诲瀷1锛1鈥斺旀按浣嶈竟鐣岋紝2鈥斺旀祦閲忚竟鐣,3鈥斺旀按浣嶆祦閲忓叧绯伙級 + UB2 ,& !涓婃父杈圭晫鏉′欢绫诲瀷2锛1鈥斺旀渤缃戝杈圭晫锛2鈥斺旀渤缃戝唴杈圭晫锛 + DB1 ,& !涓嬫父杈圭晫鏉′欢绫诲瀷1锛1鈥斺旀按浣嶈竟鐣岋紝2鈥斺旀祦閲忚竟鐣,3鈥斺旀按浣嶆祦閲忓叧绯伙級 + DB2 ,& !涓嬫父杈圭晫鏉′欢绫诲瀷2锛1鈥斺旀渤缃戝杈圭晫锛2鈥斺旀渤缃戝唴杈圭晫锛 + UBV ,& !涓婃父澶栬竟鐣屾柇闈㈠鐨勬按浣嶏紝鎴栨祦閲忚繃绋 + NUB ,& !涓婃父鍐呰竟鐣屾柇闈㈡墍杩炴帴鐨勬渤閬撶紪鍙枫佸井娈电紪鍙 + DBV ,& !涓嬫父澶栬竟鐣屾柇闈㈠鐨勬按浣嶏紝鎴栨祦閲忥紝鎴栭椄涓嬫疆浣嶈繃绋 + Gate ,& !Gate(1,i) = 闂稿噣瀹斤紱Gate(2,i) = 鏈澶ц繃娴侀噺锛汫ate(3,i) = 娴侀噺鍏紡C1锛汫ate(4,i) = 娴侀噺鍏紡C2 锛堟祦閲忓叕寮廞=C1*B*e*dZ^C2涓殑C1鍜孋2锛 + NDB ,& !涓嬫父鍐呰竟鐣屾柇闈㈡墍杩炴帴鐨勬渤閬撶紪鍙枫佸井娈电紪鍙 + Aphi ,& !涓嬫父娴侀噺鍐呰竟鐣岋紙绠℃兜锛夌殑杩囨祦鏂潰闈㈢Н銆佹祦閫熺郴鏁 + period ,& !璁$畻灏忔椂鏁 + dt ,& !璁$畻鏃堕棿姝ラ暱 + sita ,& !姘撮噺闅愭牸寮忔潈绯绘暟 + sorz ,& !姘翠綅杩唬鏉惧紱鍥犲瓙 + sorq ,& !娴侀噺杩唬鏉惧紱鍥犲瓙 + epsz ,& !姘翠綅杩唬鎺у埗绮惧害 + epsq ,& !娴侀噺杩唬鎺у埗绮惧害 + Bsor1 ,& !姘撮椄澶栬竟鐣岃绠椾腑鐨勬澗寮涘洜瀛 + Bsor2 ,& !绠℃兜鍐呰竟鐣岃绠椾腑鐨勬澗寮涘洜瀛 + Z ,& !杈撳嚭娌抽亾姘翠綅 + Q )& !杈撳嚭娌抽亾娴侀噺 BIND(C, NAME="MAIN_UFRN") !DEC$ ATTRIBUTES DLLEXPORT::MAIN_UFRN IMPLICIT NONE - INTEGER::nriver ! 河道数量 - INTEGER::nsect ! 河道计算断面数最大值 - INTEGER::krc ! 河道汊点数最大值 - INTEGER::ndata ! 计算时刻数(时间步数据点数量) + INTEGER::nriver ! 娌抽亾鏁伴噺 + INTEGER::nsect ! 娌抽亾璁$畻鏂潰鏁版渶澶у + INTEGER::krc ! 娌抽亾姹婄偣鏁版渶澶у + INTEGER::ndata ! 璁$畻鏃跺埢鏁帮紙鏃堕棿姝ユ暟鎹偣鏁伴噺锛 INTEGER::MRIVER integer River,tstep INTEGER::I INTEGER::II - ! 河道组态数据 - INTEGER::Ns(nriver) ! 各河道断面数(维度: NRIVER) - INTEGER::Pc(nriver) ! 各河道汊点数(维度: NRIVER) - INTEGER::Nrc(krc,nriver) ! 汊点类型(1-普通,2-集中入流,3-调蓄水库)(维度: KRC, NRIVER) - INTEGER::Lc(krc,nriver) ! 汊点连接的微段编号(维度: KRC, NRIVER) + ! 娌抽亾缁勬佹暟鎹 + INTEGER::Ns(nriver) ! 鍚勬渤閬撴柇闈㈡暟锛堢淮搴: NRIVER锛 + INTEGER::Pc(nriver) ! 鍚勬渤閬撴眾鐐规暟锛堢淮搴: NRIVER锛 + INTEGER::Nrc(krc,nriver) ! 姹婄偣绫诲瀷锛1-鏅氾紝2-闆嗕腑鍏ユ祦锛3-璋冭搫姘村簱锛夛紙缁村害: KRC, NRIVER锛 + INTEGER::Lc(krc,nriver) ! 姹婄偣杩炴帴鐨勫井娈电紪鍙凤紙缁村害: KRC, NRIVER锛 - !边界条件 - INTEGER::UB1(nriver) ! 上游边界类型(1-水位,2-流量,3-水位流量关系)(维度: NRIVER) - INTEGER::UB2(nriver) ! 上游边界位置(1-外边界,2-内边界)(维度: NRIVER) - INTEGER::DB1(nriver) ! 下游边界类型(同上)(维度: NRIVER) - INTEGER::DB2(nriver) ! 下游边界位置(同上)(维度: NRIVER) - INTEGER::NUB(2,nriver) ! 上游内边界连接的河道和微段(维度: 2, NRIVER) - INTEGER::NDB(2,nriver) ! 下游内边界连接的河道和微段(维度: 2, NRIVER) + !杈圭晫鏉′欢 + INTEGER::UB1(nriver) ! 涓婃父杈圭晫绫诲瀷锛1-姘翠綅锛2-娴侀噺锛3-姘翠綅娴侀噺鍏崇郴锛夛紙缁村害: NRIVER锛 + INTEGER::UB2(nriver) ! 涓婃父杈圭晫浣嶇疆锛1-澶栬竟鐣岋紝2-鍐呰竟鐣岋級锛堢淮搴: NRIVER锛 + INTEGER::DB1(nriver) ! 涓嬫父杈圭晫绫诲瀷锛堝悓涓婏級锛堢淮搴: NRIVER锛 + INTEGER::DB2(nriver) ! 涓嬫父杈圭晫浣嶇疆锛堝悓涓婏級锛堢淮搴: NRIVER锛 + INTEGER::NUB(2,nriver) ! 涓婃父鍐呰竟鐣岃繛鎺ョ殑娌抽亾鍜屽井娈碉紙缁村害: 2, NRIVER锛 + INTEGER::NDB(2,nriver) ! 涓嬫父鍐呰竟鐣岃繛鎺ョ殑娌抽亾鍜屽井娈碉紙缁村害: 2, NRIVER锛 - REAL::ZZ0 ! 计算区域初始水位(m) - REAL::Zctr ! 河道末端挡潮闸控制水位(m) - REAL::period ! 计算总时长(小时) - REAL::dt ! 计算时间步长(秒) - REAL::sita ! 隐格式权系数(0.5~1.0) - REAL::sorz ! 水位迭代松弛因子(0~1) - REAL::sorq ! 流量迭代松弛因子(0~1) - REAL::epsz ! 水位迭代收敛精度(m) - REAL::epsq ! 流量迭代收敛精度(m?/s) - REAL::Bsor1 ! 水闸边界松弛因子 - REAL::Bsor2 ! 管涵边界松弛因子 + REAL::ZZ0 ! 璁$畻鍖哄煙鍒濆姘翠綅锛坢锛 + REAL::Zctr ! 娌抽亾鏈鎸℃疆闂告帶鍒舵按浣嶏紙m锛 + REAL::period ! 璁$畻鎬绘椂闀匡紙灏忔椂锛 + REAL::dt ! 璁$畻鏃堕棿姝ラ暱锛堢锛 + REAL::sita ! 闅愭牸寮忔潈绯绘暟锛0.5~1.0锛 + REAL::sorz ! 姘翠綅杩唬鏉惧紱鍥犲瓙锛0~1锛 + REAL::sorq ! 娴侀噺杩唬鏉惧紱鍥犲瓙锛0~1锛 + REAL::epsz ! 姘翠綅杩唬鏀舵暃绮惧害锛坢锛 + REAL::epsq ! 娴侀噺杩唬鏀舵暃绮惧害锛坢?/s锛 + REAL::Bsor1 ! 姘撮椄杈圭晫鏉惧紱鍥犲瓙 + REAL::Bsor2 ! 绠℃兜杈圭晫鏉惧紱鍥犲瓙 REAL::ql REAL::condu,condd(3) REAL::Bs,As,Rs,Cs - !河道汊点数据 - REAL::Dric(krc,nriver) ! 汊点流动方向(流入1,流出-1)(维度: KRC, NRIVER) - REAL::Qj(ndata,krc,nriver) ! 集中入流流量过程(维度: NDATA, KRC, NRIVER) - REAL::Asave(krc,nriver) ! 调蓄水库面积(m?)(维度: KRC, NRIVER) + !娌抽亾姹婄偣鏁版嵁 + REAL::Dric(krc,nriver) ! 姹婄偣娴佸姩鏂瑰悜锛堟祦鍏1锛屾祦鍑-1锛夛紙缁村害: KRC, NRIVER锛 + REAL::Qj(ndata,krc,nriver) ! 闆嗕腑鍏ユ祦娴侀噺杩囩▼锛堢淮搴: NDATA, KRC, NRIVER锛 + REAL::Asave(krc,nriver) ! 璋冭搫姘村簱闈㈢Н锛坢?锛夛紙缁村害: KRC, NRIVER锛 - !河道几何数据 - REAL::ds(nsect - 1,nriver) ! 微段长度(m)(维度: nsect - 1, NRIVER) - REAL::bd(nsect,nriver) ! 断面底宽(m)(维度: NSECT, NRIVER) - REAL::zd(nsect,nriver) ! 断面底高程(m)(维度: NSECT, NRIVER) - REAL::sm(nsect,nriver) ! 边坡系数(-)(维度: NSECT, NRIVER) - REAL::rough(nsect,nriver) ! 糙率(曼宁系数)(维度: NSECT, NRIVER) + !娌抽亾鍑犱綍鏁版嵁 + REAL::ds(nsect - 1,nriver) ! 寰闀垮害锛坢锛夛紙缁村害: nsect - 1, NRIVER锛 + REAL::bd(nsect,nriver) ! 鏂潰搴曞锛坢锛夛紙缁村害: NSECT, NRIVER锛 + REAL::zd(nsect,nriver) ! 鏂潰搴曢珮绋嬶紙m锛夛紙缁村害: NSECT, NRIVER锛 + REAL::sm(nsect,nriver) ! 杈瑰潯绯绘暟锛-锛夛紙缁村害: NSECT, NRIVER锛 + REAL::rough(nsect,nriver) ! 绯欑巼锛堟浖瀹佺郴鏁帮級锛堢淮搴: NSECT, NRIVER锛 - !边界过程数据 - REAL::UBV(ndata,nriver) ! 上游外边界水位/流量过程(维度: NDATA, NRIVER) - REAL::DBV(ndata,nriver) ! 下游外边界水位/流量过程(维度: NDATA, NRIVER) - REAL::Gate(4,nriver) ! 闸门参数(净宽、最大流量、C1、C2)(维度: 4, NRIVER) - REAL::Aphi(2,nriver) ! 管涵过流参数(面积、流速系数)(维度: 2, NRIVER) - REAL::Qp(ndata) ! 计算区域入河总流量过程(m?/s)(维度: NDATA) + !杈圭晫杩囩▼鏁版嵁 + REAL::UBV(ndata,nriver) ! 涓婃父澶栬竟鐣屾按浣/娴侀噺杩囩▼锛堢淮搴: NDATA, NRIVER锛 + REAL::DBV(ndata,nriver) ! 涓嬫父澶栬竟鐣屾按浣/娴侀噺杩囩▼锛堢淮搴: NDATA, NRIVER锛 + REAL::Gate(4,nriver) ! 闂搁棬鍙傛暟锛堝噣瀹姐佹渶澶ф祦閲忋丆1銆丆2锛夛紙缁村害: 4, NRIVER锛 + REAL::Aphi(2,nriver) ! 绠℃兜杩囨祦鍙傛暟锛堥潰绉佹祦閫熺郴鏁帮級锛堢淮搴: 2, NRIVER锛 + REAL::Qp(ndata) ! 璁$畻鍖哄煙鍏ユ渤鎬绘祦閲忚繃绋嬶紙m?/s锛夛紙缁村害: NDATA锛 REAL::Z0(nsect,nriver) REAL::Q0(nsect,nriver) @@ -109,7 +109,7 @@ SUBROUTINE MAIN_UFRN(nriver ,& ! REAL::Zc(nsect,nriver),Qc(nsect,nriver) REAL::XJ(ndata,nriver*krc) - REAL::maxtstep + INTEGER::maxtstep REAL::maxiter REAL::ttime REAL::fc @@ -129,7 +129,7 @@ SUBROUTINE MAIN_UFRN(nriver ,& ! MRIVER = nsect - 1 - Scanal = 0.0 ! Scanal——河网所有河道的合计长度,用于计算旁侧入流量ql + Scanal = 0.0 ! Scanal鈥斺旀渤缃戞墍鏈夋渤閬撶殑鍚堣闀垮害锛岀敤浜庤绠楁梺渚у叆娴侀噺ql DO I = 1,ndata DO J = 1,KRC @@ -141,15 +141,15 @@ SUBROUTINE MAIN_UFRN(nriver ,& ! DO J = 1,nriver DO I = 1,Ns(j)-1 - Scanal = Scanal + ds(i,j) ! 每条河道各微段的长度,普通汊点、集中入流微段及调蓄水库的长度取0,每条河道的首末微段长度必须取一个非零值。 + Scanal = Scanal + ds(i,j) ! 姣忔潯娌抽亾鍚勫井娈电殑闀垮害锛屾櫘閫氭眾鐐广侀泦涓叆娴佸井娈靛強璋冭搫姘村簱鐨勯暱搴﹀彇0锛屾瘡鏉℃渤閬撶殑棣栨湯寰闀垮害蹇呴』鍙栦竴涓潪闆跺笺 END DO END DO - ! 计算时间步长 + ! 璁$畻鏃堕棿姝ラ暱 maxtstep=period*3600/dt - maxiter=1000 ! 仿真模拟步数 + maxiter=1000 ! 浠跨湡妯℃嫙姝ユ暟 - ! 给河道水位、流量赋初值 + ! 缁欐渤閬撴按浣嶃佹祦閲忚祴鍒濆 DO river=1,nriver DO Is=1,Ns(river) Z0(Is,river)=ZZ0 @@ -157,9 +157,9 @@ SUBROUTINE MAIN_UFRN(nriver ,& ! END DO END DO - DO tstep=1,maxtstep ! 步数累加器 + DO tstep=1,maxtstep ! 姝ユ暟绱姞鍣 - ttime=dt*tstep/3600.0 ! 真实时刻 + ttime=dt*tstep/3600.0 ! 鐪熷疄鏃跺埢 iter=0 DO river=1,nriver @@ -169,11 +169,11 @@ SUBROUTINE MAIN_UFRN(nriver ,& ! END DO END DO - ! 计算当前时刻入河流量大小 - call int_a( ttime ,& ! 真实时刻 // 输入参数 - ndata ,& ! 入河流量变化过程时段数 - Qp ,& ! 入河流量变化过程线 - fc ) ! 当前时刻入河流量大小 // 输出参数 + ! 璁$畻褰撳墠鏃跺埢鍏ユ渤娴侀噺澶у皬 + call int_a( ttime ,& ! 鐪熷疄鏃跺埢 // 杈撳叆鍙傛暟 + ndata ,& ! 鍏ユ渤娴侀噺鍙樺寲杩囩▼鏃舵鏁 + Qp ,& ! 鍏ユ渤娴侀噺鍙樺寲杩囩▼绾 + fc ) ! 褰撳墠鏃跺埢鍏ユ渤娴侀噺澶у皬 // 杈撳嚭鍙傛暟 ql=fc/Scanal @@ -187,7 +187,7 @@ SUBROUTINE MAIN_UFRN(nriver ,& ! END DO DO river=1,nriver - ! 确定计算时刻河段上下游边界条件值 + ! 纭畾璁$畻鏃跺埢娌虫涓婁笅娓歌竟鐣屾潯浠跺 call sub_bound( NRIVER ,& NSECT ,& MRIVER ,& @@ -226,7 +226,7 @@ SUBROUTINE MAIN_UFRN(nriver ,& ! condu ,& condd ) - ! 用四点隐格式计算未知时层水位Z和流量Q + ! 鐢ㄥ洓鐐归殣鏍煎紡璁$畻鏈煡鏃跺眰姘翠綅Z鍜屾祦閲廞 call sub_QZ( NRIVER ,& NSECT ,& MRIVER ,& @@ -315,7 +315,7 @@ SUBROUTINE MAIN_UFRN(nriver ,& ! DO river=1,nriver DO Is=1,Ns(river) - ! 计算断面几何要素 + ! 璁$畻鏂潰鍑犱綍瑕佺礌 call sub_sect(NRIVER ,& NSECT ,& MRIVER ,&