# My first LBM

Hello,

i’m trying to implement LBM on Visual Basic 6, visualizing the velocitiy vectors on the lattice points with directx8. It seems to work somehow, but I think there’s still something wrong in the main algorithm. Tho following code shows the streaming and collision steps, could someone overlook it and tell me if it’s wrong or right?

Commenting the code I found that my Bounce-Back-Alg. is nonsense, so I just deleted it for now…

``````

Sub streaming()                          'STREAMING

For i = 0 To N                           'POSITION X
For j = 0 To N                       'POSITION Y
For k = 0 To 8                   'DIRECTIONS
nextposx = i + Cx(k)         'CALCULATING THE NEXT POSITION WITH THE DIRECTION
nextposy = j + Cy(k)         'VECTOR  ( Cx(k), Cy(k) )
If Check6.Value = 1 Then     'PERIODIC BOUNDARIES
If nextposx = -1 Then    'NEXT POSITION SHOULD BE BETWEEN 0 AND N
nextposx = N
ElseIf nextposx = N + 1 Then
nextposx = 0
End If
If nextposy = -1 Then
nextposy = N
ElseIf nextposy = N + 1 Then
nextposy = 0
End If

fnew(nextposx, nextposy, k) = f(i, j, k)    'THE ACTUAL STREAMING

Else    'NONPERIODIC BOUNDARIES, IGNORE POINTS OUTSIDE LATTICE
If nextposx >= 0 And nextposx <= N And nextposy >= 0 And nextposy <= N Then
fnew(nextposx, nextposy, k) = f(i, j, k)  'THE ACTUAL STREAMING
End If
End If
Next k
Next j
Next i

For i = 0 To N
For j = 0 To N
For k = 0 To 8
f(i, j, k) = fnew(i, j, k)   'REASSIGN THE NEW DISTRIBUTION
Next k
Next j
Next i

End Sub

Sub collision()  'COLLISION

For i = 0 To N   'POSITION X
For j = 0 To N   'POSITION Y

fdensity(i, j) = 0   'DENSITY CALCULATION
For l = 0 To 8
fdensity(i, j) = fdensity(i, j) + f(i, j, l)
Next l

fxvelocity(i, j) = 0   'VELOCITY CALCULATION
fyvelocity(i, j) = 0
For l = 0 To 8
fxvelocity(i, j) = fxvelocity(i, j) + f(i, j, l) * Cx(l)
fyvelocity(i, j) = fyvelocity(i, j) + f(i, j, l) * Cy(l)
Next l
If fdensity(i, j) <> 0 Then   'PREVENT DIV. BY ZERO
fxvelocity(i, j) = fxvelocity(i, j) / fdensity(i, j)
fyvelocity(i, j) = fyvelocity(i, j) / fdensity(i, j)
Else
fxvelocity(i, j) = 0
fyvelocity(i, j) = 0
End If

For k = 0 To 8
'CALCULATE EQUILIBRIUM
fequilibrium = w(k) * fdensity(i, j) * (1 + 3 * (Cx(k) * fxvelocity(i, j) + Cy(k) * fyvelocity(i, j)) / (c * c) + 9 / 2 * (Cx(k) * fxvelocity(i, j) + Cy(k) * fyvelocity(i, j)) / (c * c * c * c) - 3 / 2 * (fxvelocity(i, j) * fxvelocity(i, j) + fyvelocity(i, j) * fyvelocity(i, j)) / (c * c))

'CALCULATE NEW DISTRIBUTION
fnew(i, j, k) = f(i, j, k) - 1 / tau * (f(i, j, k) - fequilibrium)
Next k
Next j
Next i

For i = 0 To N
For j = 0 To N
For k = 0 To 8
f(i, j, k) = fnew(i, j, k)  'REASSIGN THE NEW DISTRIBUTION
Next k
Next j
Next i

End Sub

``````

Thank you for reading until here,
Greets,
streikbrecher

Hi streikbrecher,

Congratulations on your first LB code! I’ve personally never seen a LB code written in Visual Basic before and found this pretty interesting. Have you by any chance had the opportunity to measure the execution speed of the code, and scale it against other languages, especially interpreted ones?

It is not easy to find errors in an incomplete code, because of the impossibility to run it and try it out. All in all, I have however the feeling that it does the right thing, except for a minor error in the computation of the equilibrium. The equilibrium has four components, which are all summed up and multiplied by rhow:
(a) the constant term “1”
(b) the term "3 c
u"