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

📄 平板热传导.frm

📁 一维
💻 FRM
字号:
VERSION 5.00
Begin VB.Form Formpanel 
   Caption         =   "平板热传导"
   ClientHeight    =   8070
   ClientLeft      =   60
   ClientTop       =   345
   ClientWidth     =   10755
   LinkTopic       =   "Form1"
   ScaleHeight     =   8070
   ScaleWidth      =   10755
   StartUpPosition =   3  '窗口缺省
   Begin VB.PictureBox Picture1 
      Height          =   5295
      Left            =   120
      ScaleHeight     =   5235
      ScaleWidth      =   7155
      TabIndex        =   15
      Top             =   480
      Width           =   7215
   End
   Begin VB.Frame Frame1 
      Caption         =   "参数选择"
      Height          =   2895
      Left            =   7920
      TabIndex        =   0
      Top             =   240
      Width           =   2535
      Begin VB.ComboBox Combta 
         Height          =   300
         ItemData        =   "平板热传导.frx":0000
         Left            =   1080
         List            =   "平板热传导.frx":0016
         TabIndex        =   18
         Top             =   2280
         Width           =   1095
      End
      Begin VB.ComboBox Combody 
         Height          =   300
         ItemData        =   "平板热传导.frx":0043
         Left            =   1080
         List            =   "平板热传导.frx":0053
         TabIndex        =   13
         Top             =   1320
         Width           =   1095
      End
      Begin VB.ComboBox Combodt 
         Height          =   300
         ItemData        =   "平板热传导.frx":0071
         Left            =   1080
         List            =   "平板热传导.frx":0081
         TabIndex        =   4
         Top             =   360
         Width           =   1095
      End
      Begin VB.ComboBox Combodx 
         Height          =   300
         ItemData        =   "平板热传导.frx":009F
         Left            =   1080
         List            =   "平板热传导.frx":00AF
         TabIndex        =   3
         Top             =   840
         Width           =   1095
      End
      Begin VB.ComboBox Combotime 
         Height          =   300
         ItemData        =   "平板热传导.frx":00CD
         Left            =   1080
         List            =   "平板热传导.frx":00EC
         TabIndex        =   2
         Top             =   1800
         Width           =   1095
      End
      Begin VB.Label Label6 
         AutoSize        =   -1  'True
         Caption         =   "热传导系数"
         Height          =   180
         Left            =   0
         TabIndex        =   17
         Top             =   2400
         Width           =   900
      End
      Begin VB.Label Label5 
         Alignment       =   2  'Center
         AutoSize        =   -1  'True
         Caption         =   "Y轴步长"
         Height          =   180
         Left            =   240
         TabIndex        =   14
         Top             =   1320
         Width           =   645
      End
      Begin VB.Label Label2 
         Alignment       =   2  'Center
         AutoSize        =   -1  'True
         Caption         =   "时间步长"
         Height          =   180
         Left            =   120
         TabIndex        =   7
         Top             =   360
         Width           =   855
      End
      Begin VB.Label Label3 
         Alignment       =   2  'Center
         AutoSize        =   -1  'True
         Caption         =   "x轴步长"
         Height          =   180
         Left            =   240
         TabIndex        =   6
         Top             =   840
         Width           =   645
      End
      Begin VB.Label Label4 
         Alignment       =   2  'Center
         AutoSize        =   -1  'True
         Caption         =   "时间"
         Height          =   180
         Left            =   480
         TabIndex        =   5
         Top             =   1800
         Width           =   375
      End
   End
   Begin VB.Frame Frame2 
      Height          =   2895
      Left            =   7920
      TabIndex        =   1
      Top             =   3000
      Width           =   2535
      Begin VB.CommandButton Command1 
         Caption         =   "清屏"
         Height          =   495
         Left            =   240
         TabIndex        =   16
         Top             =   1200
         Width           =   1815
      End
      Begin VB.CommandButton cmdend 
         Caption         =   "结束"
         Height          =   495
         Left            =   240
         TabIndex        =   9
         Top             =   2040
         Width           =   1815
      End
      Begin VB.CommandButton cmdok 
         Caption         =   "(ADI)计算数值解并绘图"
         Height          =   495
         Left            =   240
         TabIndex        =   8
         Top             =   360
         Width           =   1815
      End
   End
   Begin VB.Frame Frame3 
      Height          =   1455
      Left            =   4920
      TabIndex        =   10
      Top             =   6000
      Width           =   5655
      Begin VB.TextBox TxtResult 
         Height          =   375
         Left            =   1920
         TabIndex        =   11
         Top             =   600
         Width           =   3615
      End
      Begin VB.Label Label1 
         Alignment       =   2  'Center
         AutoSize        =   -1  'True
         Caption         =   "结果已保存至"
         Height          =   180
         Left            =   540
         TabIndex        =   12
         Top             =   720
         Width           =   1095
      End
   End
End
Attribute VB_Name = "Formpanel"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Sub TRIDAG(A(), B(), C(), R(), U(), N)   '追赶法子程序,求解矩阵
    ReDim GAM(N)  '根据传值过来的数组的大小来确定GAM的大小
    If B(1) = 0# Then Exit Sub
    BET = B(1)
    U(1) = R(1) / BET
    For j = 2 To N
        GAM(j) = C(j - 1) / BET
        BET = B(j) - A(j) * GAM(j)
        If BET = 0# Then Exit Sub
        U(j) = (R(j) - A(j) * U(j - 1)) / BET
    Next j
    For j = N - 1 To 1 Step -1
        U(j) = U(j) - GAM(j + 1) * U(j + 1)
    Next j
End Sub
    Private Sub cmdend_Click()
   Formpanel.Hide
   Form2.Show
    End Sub
    Private Sub spotplot(zz(), xw, yw, dx, dy)
Dim sx1, sx2, sy1, sy2 As Integer
Dim sx, sy As Double
Dim x, y, cx, cy As Single
Dim xx, yy, s As Single
Dim i, j, nx, ny As Integer
Dim sxx, syy As Single
Const pi = 3.14159
Picture1.Scale (0, 0)-(640, 480)

s = pi / 16
nx = Fix(xw / dx)
ny = Fix(yw / dy)


sx1 = 140: sx2 = 600
sy1 = 360: sy2 = 100

cx = (sx2 - sx1) / xw / 2
cy = (sy1 - sy2) / yw / 2
sxx = sx1 + 1 * cy * Cos(s)
syy = sy1 - 1 * cy * Sin(s)
Picture1.Line (sx1, sy1)-(sx2, sy1)
Picture1.CurrentX = sx2: Picture1.CurrentY = sy1 + 0.5: Picture1.Print "X"
Picture1.CurrentX = sx1 + 1 * cx: Picture1.CurrentY = sy1 + 0.5: Picture1.Print 1
Picture1.Line (sx1 + 1 * cx, sy1)-(sx1 + 1 * cx, sy1 - 8)
Picture1.Line (sx1, sy1)-(sxx, syy)
Picture1.CurrentX = sxx: Picture1.CurrentY = syy:   Picture1.Print 1
Picture1.CurrentX = sxx - 50: Picture1.CurrentY = syy - 20: Picture1.Print "Y"
Picture1.Line (sx1, sy1)-(sx1, sy1 - 150)
Picture1.CurrentX = sx1 - 50: Picture1.CurrentY = sy1 - 100: Picture1.Print 100
Picture1.CurrentX = sx1: Picture1.CurrentY = sy1 - 150: Picture1.Print "T"
Picture1.Line (sx1, sy1 - 100)-(sx1 + 8, sy1 - 100)
colorcode = 15 * Rnd
For j = 0 To ny
For i = 0 To nx
x = i * dx
xx = x * cx + sx1
y = j * dy
yy = sy1 - y * cy * Sin(s)
sx = xx + y * cy * Cos(s)
sy = yy - zz(i, j)
'sy = sy
Picture1.PSet (sx, sy), QBColor(colorcode)
Next i
Next j
End Sub

    '计算数值解主程序
    Private Sub cmdok_Click()
    'Const alpha = 0.0147214
    Dim total_x, total_y, total_t, dx, dy, dt
    'total_x是矩形边界x方向的长
    'total_y是矩形边界y方向得长
    'total_t是时间
    'dx,dy和dt分别是x轴方向的步长、y轴方向得步长和时间步长
    'alpha是热扩散系数
    Dim boundary, alpha As Single '定义边界值变量
    Dim i As Integer, j, k As Integer, nx As Integer, ny As Integer, nt As Integer
    Dim A(), B(), C(), R(), U()
    Dim point(), m As Double
    Dim judge As Integer
    '定义矩形边界的长和宽
    total_y = 1
    total_x = 1
    total_t = Val(Combotime.List(Combotime.ListIndex))
    alpha = Val(Combta.Text)
    '确定各方的步长
    dx = Val(Combodx.List(Combodx.ListIndex))
    dy = Val(Combody.List(Combody.ListIndex))
    dt = Val(Combodt.List(Combodt.ListIndex))
    If Combodx.ListIndex = -1 Or Combodt.ListIndex = -1 Or Combotime.ListIndex = -1 Or Combody.ListIndex = -1 Then
      i = MsgBox("未输入参数", vbExclamation Or vbOKCancel Or vbDefaultButton1, _
    "参数输入")  '若用户未填入参数提示用户
      Exit Sub
    End If
    '计算各方向的步长的点数
    nx = CInt(total_x / dx)
    ny = CInt(total_y / dy)
    nt = CInt(total_t / dt)
     '给边界变量赋值
    boundary = 100
   '根据点数定义数组大小
    ReDim point(nx, ny)
    '给point数组赋初始时刻的值
    For i = 0 To nx
    For j = 0 To ny
    point(i, j) = 0
    Next j
    Next i
    m = 0.5 * dt * alpha
'    If m / dx ^ 2 > 0.5 Or m / dy ^ 2 > 0.5 Then
'i = MsgBox("不收敛", vbExclamation Or vbOKCancel Or vbDefaultButton1, _
'"重新输入")
'Exit Sub
'End If
    '创建文件保存数据
    Open App.Path + "\计算结果.txt" For Output As #1
    judge = 0
  For k = 0 To nt - 1
  
 If judge = 0 Then
    
    '以下为对x是隐格式,y是显格式,计算前半时刻的温度值
  For j = 1 To ny - 1
    '重新定义追赶矩阵的大小
    ReDim A(1 To nx - 1), B(1 To nx - 1), C(1 To nx - 1), R(1 To nx - 1), U(1 To nx - 1)
    '给矩阵赋值
    R(1) = point(1, j) + (m / (dx ^ 2)) * boundary + (m / (dy ^ 2)) * (point(1, j + 1) - 2 * point(1, j) + point(1, j - 1))
    R(nx - 1) = point(nx - 1, j) + (m / (dx ^ 2)) * boundary + (m / (dy ^ 2)) * (point(nx - 1, j + 1) - 2 * point(nx - 1, j) + point(nx - 1, j - 1))
    For i = 2 To nx - 2
    R(i) = point(i, j) + (m / dy ^ 2) * (point(i, j + 1) - 2 * point(i, j) + point(i, j - 1))
    Next i
    For i = 2 To nx - 1
    A(i) = -m / (dx ^ 2)
    Next i
    For i = 1 To nx - 1
    B(i) = 1 + (2 * m) / (dx ^ 2)
    Next i
    For i = 1 To nx - 2
    C(i) = -m / (dx ^ 2)
    Next i
    Call TRIDAG(A(), B(), C(), R(), U(), (nx - 1))
    '将计算的结果赋给point数组
    For i = 1 To nx - 1
    point(i, j) = U(i)
    Next i
  Next j
  
   If k = 0 Then
    For i = 0 To nx
    point(i, 0) = 100: point(i, ny) = 100
    Next i
    For j = 0 To ny
    point(0, j) = 100: point(nx, j) = 100
    Next j
   End If
    '以下是对y是隐格式,对x是显格式,计算后半时刻的温度值
  For i = 1 To nx - 1
    ReDim A(1 To ny - 1), B(1 To ny - 1), C(1 To ny - 1), R(1 To ny - 1), U(1 To ny - 1)
    '给矩阵向量赋值
    R(1) = point(i, 1) + (m / (dy ^ 2)) * boundary + (m / (dx ^ 2)) * (point(i + 1, 1) - 2 * point(i, 1) + point(i - 1, 1))
    R(ny - 1) = point(i, ny - 1) + (m / (dy ^ 2)) * boundary + (m / (dx ^ 2)) * (point(i + 1, ny - 1) - 2 * point(i, ny - 1) + point(i - 1, ny - 1))
    For j = 2 To ny - 2
    R(j) = point(i, j) + (m / (dx ^ 2)) * (point(i + 1, j) - 2 * point(i, j) + point(i - 1, j))
    Next j
    For j = 2 To ny - 1
    A(j) = -(m / (dy ^ 2))
    Next j
    For j = 1 To ny - 1
    B(j) = 1 + 2 * (m / (dy ^ 2))
    Next j
    For j = 1 To ny - 2
    C(j) = -(m / (dy ^ 2))
    Next j
    Call TRIDAG(A(), B(), C(), R(), U(), (ny - 1))
    '将计算的结果赋给point数组
    For j = 1 To ny - 1
      point(i, j) = U(j)
    Next j
  Next i
  judge = 1
Else    '交换计算次序
    '以下是对y是隐格式,对x是显格式,计算前半时刻的温度值
 For i = 1 To nx - 1
    ReDim A(1 To ny - 1), B(1 To ny - 1), C(1 To ny - 1), R(1 To ny - 1), U(1 To ny - 1)
    '给矩阵的向量赋值
    R(1) = point(i, 1) + (m / (dy ^ 2)) * boundary + (m / (dx ^ 2)) * (point(i + 1, 1) - 2 * point(i, 1) + point(i - 1, 1))
    R(ny - 1) = point(i, ny - 1) + (m / (dy ^ 2)) * boundary + (m / (dx ^ 2)) * (point(i + 1, ny - 1) - 2 * point(i, ny - 1) + point(i - 1, ny - 1))
   For j = 2 To ny - 2
     R(j) = point(i, j) + (m / (dx ^ 2)) * (point(i + 1, j) - 2 * point(i, j) + point(i - 1, j))
    Next j
    For j = 2 To ny - 1
     A(j) = -(m / (dy ^ 2))
    Next j
    For j = 1 To ny - 1
     B(j) = 1 + 2 * (m / (dy ^ 2))
    Next j
    For j = 1 To ny - 2
     C(j) = -(m / (dy ^ 2))
    Next j
    Call TRIDAG(A(), B(), C(), R(), U(), (ny - 1))
    '将计算的结果赋给point数组
    For j = 1 To ny - 1
      point(i, j) = U(j)
    Next j
  Next i
  
   '以下为对x是隐格式,y是显格式,计算后半时刻的温度值
  For j = 1 To ny - 1
    '重新定义追赶矩阵的大小
    ReDim A(1 To nx - 1), B(1 To nx - 1), C(1 To nx - 1), R(1 To nx - 1), U(1 To nx - 1)
    '给追赶矩阵的右端向量R赋值
    R(1) = point(1, j) + (m / (dx ^ 2)) * boundary + (m / (dy ^ 2)) * (point(1, j + 1) - 2 * point(1, j) + point(1, j - 1))
    R(nx - 1) = point(nx - 1, j) + (m / (dx ^ 2)) * boundary + (m / (dy ^ 2)) * (point(nx - 1, j + 1) - 2 * point(nx - 1, j) + point(nx - 1, j - 1))
    For i = 2 To nx - 2
      R(i) = point(i, j) + (m / dy ^ 2) * (point(i, j + 1) - 2 * point(i, j) + point(i, j - 1))
    Next i
    For i = 2 To nx - 1
      A(i) = -m / (dx ^ 2)
    Next i
    For i = 1 To nx - 1
      B(i) = 1 + (2 * m) / (dx ^ 2)
    Next i
    For i = 1 To nx - 2
      C(i) = -m / (dx ^ 2)
    Next i
    Call TRIDAG(A(), B(), C(), R(), U(), (nx - 1))
    '将计算的结果赋给point数组
    For i = 1 To nx - 1
      point(i, j) = U(i)
    Next i
  Next j
  judge = 0
End If
Next k
    Call spotplot(point(), total_x, total_y, dx, dy)
    
    For i = 1 To nx - 1
    For j = 0 To ny
    Print #1, Format$(point(i, j), "##0.#0"); "    ";   '将结果保存至文件中
    Next j
    Print #1, "  "
    Next i
    Close #1                  '关闭文件
    
    TxtResult.Text = App.Path + "\计算结果.txt"   '显示文件保存路径
    End Sub

Private Sub Command1_Click()
Picture1.Cls
End Sub

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -