📄 readdata.vb
字号:
Imports System
Public Class ReadData
Public Shared Sub ReadFromFile(ByVal strFile As String)
Dim i, j, k As Int32
Dim str As String
Dim mi As New IO.StreamReader(strFile)
DataDescription = mi.ReadLine
str = mi.ReadLine
k = str.IndexOf(" ")
m = CInt(str.Substring(0, k)) - 1
n = CInt(str.Substring(k + 1, str.Length - k - 1)) - 1
ReDim flag(m, n), mass(m, n), eps(m, n), rho(m, n), u(m, n), v(m, n)
ReDim field(m, n)
For i = 0 To m
For j = 0 To n
str = mi.ReadLine
k = str.IndexOf(" ")
If k < 0 Then
flag(i, j) = CByte(str)
Else
flag(i, j) = CByte(str.Substring(0, k))
End If
Select Case flag(i, j)
Case CONST_EMPTY
dealEmpty(i, j)
Case CONST_WALL
dealWall(i, j, k, str)
Case CONST_NONE
dealNone()
Case CONST_IOLET
dealIOlet(i, j, k, str)
Case CONST_INTERFACE
itfArray.Add(New Int32() {i, j})
dealInterface(i, j, k, str)
Case CONST_FLUID
dealFluid(i, j, k, str)
End Select
Next
Next
mi.Close()
End Sub
Private Shared Sub dealEmpty(ByVal i As Int32, ByVal j As Int32)
End Sub
Private Shared Sub dealWall(ByVal i As Int32, ByVal j As Int32, ByRef k As Int32, ByRef str As String)
Dim l As Int32
Dim dd(1) As Double
l = str.IndexOf(" ", k + 1)
dd(0) = Val(str.Substring(k + 1, l - k - 1))
dd(1) = Val(str.Substring(l + 1))
field(i, j) = New WallCell(dd)
End Sub
Private Shared Sub dealNone()
End Sub
Private Shared Sub dealIOlet(ByVal i As Int32, ByVal j As Int32, ByRef k As Int32, ByRef str As String)
Dim ii, l As Int32
Dim dd(5) As Double
l = str.IndexOf(" ", k + 1)
dd(0) = Val(str.Substring(k + 1, l - k - 1))
k = str.IndexOf(" ", l + 1)
If k < 0 Then
dd(1) = CByte(str.Substring(l + 1))
Else
dd(1) = CByte(str.Substring(l + 1, k - l - 1))
End If
field(i, j) = New IOletCell(dd(0), dd(1))
Dim incell As IOletCell = field(i, j)
If dd(1) = CONST_FLUID Then
For ii = 2 To 4
l = str.IndexOf(" ", k + 1)
dd(ii) = Val(str.Substring(k + 1, l - k - 1))
k = l
Next
u(i, j) = dd(2)
v(i, j) = dd(3)
rho(i, j) = dd(4)
mass(i, j) = dd(4)
eps(i, j) = 1
field(i, j).f = Collide.getfe0(i, j)
ElseIf dd(1) = CONST_EMPTY Then
'nothing to do now
ElseIf dd(1) = CONST_INTERFACE Then
For ii = 2 To 5
l = str.IndexOf(" ", k + 1)
dd(ii) = Val(str.Substring(k + 1, l - k - 1))
k = l
Next
u(i, j) = dd(2)
v(i, j) = dd(3)
rho(i, j) = dd(4)
mass(i, j) = dd(5)
eps(i, j) = dd(5) / dd(4)
field(i, j).f = Collide.getfe0(i, j)
End If
End Sub
Private Shared Sub dealInterface(ByVal i As Int32, ByVal j As Int32, ByRef k As Int32, ByRef str As String)
field(i, j) = New InterfaceCell
Dim ii, l As Int32
Dim dd(3) As Double
For ii = 0 To 2
l = str.IndexOf(" ", k + 1)
dd(ii) = Val(str.Substring(k + 1, l - k - 1))
k = l
Next
dd(3) = Val(str.Substring(l + 1))
u(i, j) = dd(0)
v(i, j) = dd(1)
rho(i, j) = dd(2)
mass(i, j) = dd(3)
eps(i, j) = mass(i, j) / rho(i, j)
field(i, j).f = Collide.getfe0(i, j)
End Sub
Private Shared Sub dealFluid(ByVal i As Int32, ByVal j As Int32, ByRef k As Int32, ByRef str As String)
field(i, j) = New FluidCell
Dim ii, l As Int32
Dim dd(2) As Double
For ii = 0 To 1
l = str.IndexOf(" ", k + 1)
dd(ii) = Val(str.Substring(k + 1, l - k - 1))
k = l
Next
dd(2) = Val(str.Substring(l + 1))
u(i, j) = dd(0)
v(i, j) = dd(1)
rho(i, j) = dd(2)
mass(i, j) = rho(i, j)
eps(i, j) = 1
field(i, j).f = Collide.getfe0(i, j)
End Sub
End Class
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -