⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 工程1.frm

📁 根据渗流阻力法求取油井产量
💻 FRM
📖 第 1 页 / 共 2 页
字号:
         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 + -