Oh yes I still have a website. Let’s post some stuff on it! Today I present some work on my laminar flow nozzle; an attempt to make a very stable (visibly not seeming to move) laminar water flow. I want laminar flow as it is optically very satisfying.

I made a video quickly explaining the concept and the current status. In this video I show you the third (fourth? I lost count) iteration in trying to do so. In this version, I use a 3D printed laminar flow nozzle. It consists of an adapter (to fit the tube), a section with very small flow channels (created by the infill pattern of the 3D printer), and a nozzle with a thin top with a small opening in it. Also, between the pump and the nozzle is a pressure vessel (a balloon in a yoghurt pot). In the previous iteration, I saw a lot of pressure variations; the pressure vessel should even this out. The section with small flow channels should make the flow laminar. In a larger diameter (dimension) channel, turbulent flow will occur (also depends on flow velocity and viscosity of the fluid). The Reynolds number can be used to compute whether flow will be turbulent or laminar.

At the end of this page is the Python script for computing Reynolds numbers. Basically, you want the Reynolds number to be below 2300 for laminar flow. There’s also some calculations how long the tube should be, in order to achieve laminar flow (the so called entrance length).

```
import math
# Compute Reynolds number for different flow configurations
# flowRateLperH = 500 # [l/h]
flowRateLperH = 750 # [l/h]
flowRate = flowRateLperH/3600 / 1000 # [m^3/s]
hoseDiameter = 10E-3 # [m]
hoseArea = (hoseDiameter/2)**2 * math.pi
flowSpeed = 1 # [m/s]
flowSpeed = flowRate / hoseArea
# print(flowSpeed)
kinematicViscosity = 0.8927E-6 # [m^2/s]
# Now compute for N smaller streams
# Idea: split a stream into N smaller streams
tubeDiameter = 40E-3 # [m]
tubeArea = (tubeDiameter/2)**2 * math.pi
nStream = 30
fillFactor = 0.7 # Some surface area is lost due to wall thickness
streamArea = tubeArea*fillFactor/nStream
streamDiameter = math.sqrt(streamArea/math.pi)
flowSpeed = flowRate / (tubeArea*fillFactor)
Re = flowSpeed*streamDiameter/kinematicViscosity
print('Tube diameter %.3f [mm]' % (tubeDiameter*1e3))
print(nStream, ' streams with diameter of %.3f [mm]' % (streamDiameter*1e3))
print('Reynolds number [-]: ', Re)
# Compute entrance length
# turbulent flow
# laminar flow
entranceLengthLam = 0.0575*Re*streamDiameter # laminar
# entranceLengthTurb = 1.359*streamDiameter*Re**0.25 # turbulent
print('Entrance length [m]: ', entranceLengthLam)
```

Hello! I really liked your project but had one question, I dont understand what the ‘nStream’ variable is. The nozzle shown in the video has ore than 30 openings, formed by the infill, for it to pass through. What exactly is this variable, and what does it increase or decrease?

Im asking as I am using this code, thank you by the way, to try some more optimization but am unsure what to enter for that variable.