📄 工程1.frm
字号:
Height = 495
Left = 4440
TabIndex = 10
Top = 360
Width = 1095
End
Begin VB.Label Label8
Caption = "第一排生产井井距/m"
Height = 495
Left = 2400
TabIndex = 9
Top = 360
Width = 975
End
Begin VB.Label Label7
Caption = "注水井排井距/m"
Height = 375
Left = 120
TabIndex = 8
Top = 360
Width = 1215
End
End
Begin VB.Frame Frame1
Caption = "参数1"
Height = 1335
Left = 120
TabIndex = 0
Top = 120
Width = 8535
Begin VB.TextBox Text6
Height = 270
Left = 3600
TabIndex = 28
Text = "10"
Top = 840
Width = 735
End
Begin VB.TextBox Text5
Height = 270
Left = 1440
TabIndex = 27
Text = "0.85"
Top = 840
Width = 735
End
Begin VB.TextBox Text4
Height = 270
Left = 7440
TabIndex = 26
Text = "1.12"
Top = 240
Width = 735
End
Begin VB.TextBox Text3
Height = 270
Left = 5520
TabIndex = 25
Text = "9"
Top = 240
Width = 615
End
Begin VB.TextBox Text2
Height = 270
Left = 3600
TabIndex = 24
Text = "0.5"
Top = 240
Width = 735
End
Begin VB.TextBox Text1
Height = 270
Left = 1440
TabIndex = 23
Text = "16"
Top = 240
Width = 735
End
Begin VB.Label Label6
Caption = "折算半径/cm"
Height = 375
Left = 2520
TabIndex = 6
Top = 840
Width = 735
End
Begin VB.Label Label5
Caption = "原油密度"
Height = 255
Left = 240
TabIndex = 5
Top = 840
Width = 975
End
Begin VB.Label Label4
Caption = "原油体积系数"
Height = 375
Left = 6480
TabIndex = 4
Top = 240
Width = 975
End
Begin VB.Label Label3
Caption = "原油粘度/mPa.s"
Height = 375
Left = 4560
TabIndex = 3
Top = 240
Width = 735
End
Begin VB.Label Label2
Caption = "渗透率/um^2"
Height = 375
Left = 2520
TabIndex = 2
Top = 240
Width = 1095
End
Begin VB.Label Label1
Caption = "地层有效厚度/m"
Height = 375
Left = 240
TabIndex = 1
Top = 240
Width = 1215
End
End
Begin VB.Label Label25
Caption = "班级序号"
Height = 315
Left = 660
TabIndex = 53
Top = 5700
Width = 855
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Dim he As Double '有效厚度
Dim Ka As Double '渗透率
Dim Uo As Double '原油粘度
Dim Bo As Double '原油体积系数
Dim Density As Double '原油密度
Dim Rw As Double '井径
Dim a_Ini As Double '注水井井排井距
Dim a_Pro1 As Double '第一排生产井井距一半
Dim a_Pro2 As Double '第二排生产井井距一半
Dim a_Pro3 As Double '第三排生产井井距一半
Dim L1 As Double '注水井与第一排生产井井排距离
Dim L2 As Double '第一排生产井井排与第二排生产井井排距离
Dim L3 As Double '第二排生产井井排与第三排生产井井排距离
Dim P_Ini As Double '注水井井底压力
Dim P_Pro1 As Double '第一排生产井井底压力
Dim P_Pro2 As Double '第二排生产井井底压力
Dim P_pro3 As Double '第三排生产井井底压力
Dim Qo(1 To 3) As Double '各生产井井排单井产量
Dim n0 As Integer '注水井井数
Dim n1 As Integer '第一排生产井井数
Dim n2 As Integer '第二排生产井井数
Dim n3 As Integer '第三排生产井井数
Dim Rin0 As Double '注水井渗流内阻
Dim Rin1 As Double, Rin2 As Double, Rin3 As Double '各生产井井排内阻
Dim Rout1 As Double, Rout2 As Double, Rout3 As Double '生产井井排间外部阻力
Const PAI = 3.14159265
Sub load()
Dim temp As Double
' Dim temp2 As Double
he = Val(Text1.Text) * 100 '换算单位
Ka = Val(Text2.Text)
Uo = Val(Text3.Text)
Bo = Val(Text4.Text)
Density = Val(Text5.Text)
Rw = Val(Text6.Text)
temp = Val(Text23.Text) * 10 + 200
' a_Ini = Val(Text7.Text) * 100 / 2
' a_Pro1 = Val(Text8.Text) * 100 / 2
' a_Pro2 = Val(Text9.Text) * 100 / 2
' a_Pro3 = Val(Text10.Text) * 100 / 2
' temp2 = 200 + temp1 * 10
a_Ini = temp * 100 / 2
a_Pro1 = a_Ini
a_Pro2 = a_Ini
a_Pro3 = a_Ini
Text7.Text = temp
Text8.Text = temp
Text9.Text = temp
Text10.Text = temp
L1 = Val(Text11.Text) * 100
L2 = Val(Text12.Text) * 100
L3 = Val(Text13.Text) * 100
P_Ini = Val(Text14.Text) * 10
P_Pro1 = Val(Text15.Text) * 10
P_Pro2 = Val(Text16.Text) * 10
P_pro3 = Val(Text17.Text) * 10
n0 = Val(Text18.Text)
n1 = Val(Text19.Text)
n2 = Val(Text20.Text)
n3 = Val(Text21.Text)
End Sub
Private Sub Command1_Click()
Call load
Dim chucuo
If Text23.Text = "" Then
chucuo = MsgBox("请输入你的班级序号!", vbOKOnly, "错误!")
Text23.SetFocus
End If
Dim dblA(1 To 3, 1 To 3) As Double
Dim dblB(1 To 3) As Double
dblB(1) = P_Ini - P_Pro1
dblB(2) = P_Pro1 - P_Pro2
dblB(3) = P_Pro2 - P_pro3
Call R_InOut '计算渗流阻力
dblA(1, 1) = Rin0 + Rout1 + Rin1
dblA(2, 1) = -Rin1
dblA(3, 1) = 0
dblA(1, 2) = Rin0 + Rout1
dblA(2, 2) = Rin2 + Rout2
dblA(3, 2) = -Rin2
dblA(1, 3) = Rin0 + Rout1
dblA(2, 3) = Rout2
dblA(3, 3) = Rin3 + Rout3
Call LU(3, dblA(), dblB()) '求解方程组
End Sub
'计算渗流阻力
Private Sub R_InOut()
Dim temp1 As Double, temp2 As Double
'外阻
temp1 = Uo / Ka / he
Rout1 = temp1 / (2 * a_Pro1 * n1) * L1
Rout2 = temp1 / (2 * a_Pro2 * n2) * L2
Rout3 = temp1 / (2 * a_Pro3 * n3) * L3
'Debug.Print Rout3
'内阻
temp2 = Uo * 0.5 / PAI / Ka / he
Rin0 = temp2 * Log(a_Ini / PAI / Rw) / n0
Rin1 = temp2 * Log(a_Pro1 / PAI / Rw) / n1
Rin2 = temp2 * Log(a_Pro2 / PAI / Rw) / n2
Rin3 = temp2 * Log(a_Pro3 / PAI / Rw) / n3
End Sub
'采用LU分解求解线性方程组
'n方程维数,dblA存储方程组的系数矩阵,dblB存储方程组常数向量,x矩阵返回值
Private Sub LU(n As Integer, dblA() As Double, dblB() As Double)
Dim k As Integer, j As Integer, r As Integer, i As Integer
Dim sum1 As Double, sum2 As Double
Dim L() As Double, U() As Double, X() As Double, Y() As Double
ReDim L(1 To n, 1 To n) 'L矩阵向量
ReDim U(1 To n, 1 To n) 'U矩阵向量
ReDim Y(1 To n) 'y矩阵向量
ReDim X(1 To n) '返回最终解向量
For k = 1 To n
'求解U矩阵向量
For j = k To n
If k = 1 Then
U(k, j) = dblA(k, j)
Else
sum1 = 0
For r = 1 To k - 1
sum1 = sum1 + L(k, r) * U(r, j)
Next r
U(k, j) = dblA(k, j) - sum1
End If
Next j
'求解L矩阵向量
For i = k + 1 To n
For r = 1 To k - 1
sum2 = 0
sum2 = sum2 + L(i, r) * U(r, k)
Next r
L(i, k) = (dblA(i, k) - sum2) / U(k, k)
Next i
Next k
'求解y矩阵向量
Dim sum3 As Double
For i = 1 To n
If i = 1 Then
Y(i) = dblB(i)
Else
sum3 = 0
For k = 1 To i - 1
sum3 = sum3 + L(i, k) * Y(k)
Next k
Y(i) = dblB(i) - sum3
End If
Next i
'求解
Dim sum4 As Double
For i = n To 1 Step -1
sum4 = 0
For k = i + 1 To n
sum4 = sum4 + U(i, k) * X(k)
Next k
X(i) = (Y(i) - sum4) / U(i, i)
' Print x(i)
Next i
Dim jj As Integer
'将结果化成单位为t/d,地面条件
Qo(1) = X(1) * Density * 0.0864 / Bo / n1
Qo(2) = X(2) * Density * 0.0864 / Bo / n2
Qo(3) = X(3) * Density * 0.0864 / Bo / n3
For jj = 1 To n
Text22(jj - 1) = Format(Qo(jj), "0.00") '输出
Next jj
End Sub
Private Sub Command2_Click()
End
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -