Laminar & turbulent flow.
For more related figures, please have a look at the Fluid Dynamics category.
Edit and compile if you like:
% Author: Izaak Neutelings (November 2020)
\documentclass[border=3pt,tikz]{standalone}
\usepackage{physics}
\usepackage{tikz}
\usepackage[outline]{contour} % glow around text
\usetikzlibrary{patterns,decorations.pathmorphing}
\usetikzlibrary{decorations.markings}
\usetikzlibrary{arrows.meta}
\usetikzlibrary{calc}
\tikzset{>=latex}
\contourlength{1.1pt}
\colorlet{mydarkblue}{blue!40!black}
\colorlet{myblue}{blue!70!black}
\colorlet{myred}{red!65!black}
\colorlet{myorange}{orange!90!black!90}
\colorlet{vcol}{green!45!black}
\colorlet{watercol}{blue!80!cyan!10!white}
\colorlet{darkwatercol}{blue!80!cyan!80!black!30!white}
\colorlet{metalcol}{blue!25!black!30!white}
\tikzstyle{piston}=[blue!50!black,top color=blue!30,bottom color=blue!50,middle color=blue!20,shading angle=0]
\tikzstyle{water}=[draw=mydarkblue,rounded corners=0.1,top color=watercol!90,bottom color=watercol!90!black,middle color=watercol!50,shading angle=20]
\tikzstyle{horizontal water}=[water,top color=watercol!90!black!90,bottom color=watercol!90!black!90,middle color=watercol!80,shading angle=0]
\tikzstyle{metal}=[draw=metalcol!10!black,rounded corners=0.1,top color=metalcol,bottom color=metalcol!80!black,shading angle=10]
\tikzstyle{vvec}=[->,very thick,vcol,line cap=round]
\tikzstyle{force}=[->,myred,very thick,line cap=round]
\tikzstyle{width}=[{Latex[length=4,width=3]}-{Latex[length=4,width=3]}]
\def\tick#1#2{\draw[thick] (#1)++(#2:0.12) --++ (#2-180:0.24)}
\begin{document}
% LAMINAR FLOW LAYERS
\begin{tikzpicture}
\def\L{5.0} % total length
\def\Rx{0.40} % big pipe vertical radius right
\def\Ry{0.90} % big pipe vertical radius right
\def\v{1.3} % velocity magnitude
\def\N{3} % velocity magnitude
% WATER
\draw[horizontal water,thick]
(0,\Ry) -- (0,-\Ry) coordinate (A1) --++ (\L,0) arc(-90:90:{\Rx} and \Ry) -- cycle;
\draw[water]
(\L,0) ellipse({\Rx} and \Ry);
\draw[water]
(0,0) ellipse({\Rx} and \Ry);
%\draw[horizontal water,line width=0.1] %draw=none
% (0,-\Ry) rectangle (\L,\Ry);
\foreach \i [evaluate={\x=(\i-0.5)/(\N+0.5)}] in {1,...,\N}{
\draw[mydarkblue] %,line width=0.05
(0,0) ellipse({\x*\Rx} and \x*\Ry)
(\L,0) ellipse({\x*\Rx} and \x*\Ry);
\draw[mydarkblue] %,dashed] %,line width=0.05
(0, \x*\Ry) --++ (\L,0)
(0,-\x*\Ry) --++ (\L,0); %arc(90:-90:{\x*\Rx} and \x*\Ry) --++ (-\L,0);
}
%\draw[horizontal water,draw=none]
% (0,{-\N/(\N+1)*\Ry}) rectangle (\L,{\N/(\N+1)*\Ry});
\draw[water,thick]
(0,0) ellipse({\Rx} and \Ry);
\foreach \i [evaluate={\x=(\i-0.5)/(\N+0.5)}] in {1,...,\N}{
\draw[mydarkblue] (0,0) ellipse({\x*\Rx} and \x*\Ry);
}
%\draw[mydarkblue,thick]
% (0,\Ry) arc(90:-90:{\Rx} and \Ry) coordinate (A1) --++ (\L,0) arc(-90:90:{\Rx} and \Ry) -- cycle;
\draw[vcol!70!black,dashed,samples=100,smooth,variable=\y,domain=-1:1]
plot({0.4*\L+\v*(1-0.7*\y*\y)},\y*\Ry);
\draw[vvec] (0.4*\L,0) --++ (\v,0);
\foreach \i [evaluate={\y=(\i)/(\N+0.5); \vy=\v*(1-0.7*\y^2);}] in {1,...,\N}{
\draw[vvec] (0.4*\L, \y*\Ry) --++ (\vy,0);
\draw[vvec] (0.4*\L,-\y*\Ry) --++ (\vy,0);
}
\end{tikzpicture}
% PRESSURE
\begin{tikzpicture}[x={(1cm,0)},y={(0.55cm,0.40cm)},z={(0,1cm)}]
\def\L{1.8} % cube side
\def\H{1.2} % total height
\def\d{0.8} % total distance
\def\N{7} % number of layers
\def\t{\H/\N} % layer thickness
%\draw[dark water] (0,0,0) -- (\L,0,0) -- (\L,\L,0) -- ( 0,\L,0) -- cycle;
\def\layer#1#2#3#4{
\draw[#1] (#2+\L,0,#3) --++ (0,\L,0) --++ (0,0,-#4) --++ (0,-\L,0) -- cycle;
\draw[#1] (#2,0,#3) --++ (\L,0,0) --++ (0,0,-#4) --++ (-\L,0,0) -- cycle;
\draw[#1] (#2,0,#3) --++ (\L,0,0) --++ (0,\L,0) --++ (-\L,0,0) -- cycle;
}
\layer{metal}{0}{0}{0.6*\t}
\foreach \i [evaluate={\x=(\i-1)*\d/(\N-1); \ya=\i*\H/\N; \yb=(\i-1)*\H/\N;}] in {1,...,\N}{
\layer{water}{\x}{\ya}{\t}
}
\layer{metal}{\d}{\H+0.6*\t}{0.6*\t}
\draw[force] (\L+\d,0.7*\L,\H+0.3*\t) --++ (1.2,0,0) node[above=1,right=-2] {$\vb{F}$};
\draw[vvec] (\L+\d,0.4*\L,\H-0.5*\t) --++ (1,0,0) node[below=0,right=-1] {$\vb{v}$};
\node at (\d+0.45*\L,0.5*\L,\H+0.6*\t) {$A$};
%\draw[width] (0.06*\L,0,0) --++ (0,0,\H) node[midway,fill=white,inner sep=0.5] {$h$};
\draw[->,thick]
(-0.1*\L,0,-0.1*\H) --++ (0,0,1.4*\H) node[above=-1] {$z$};
\tick{-0.1*\L,0,0}{0} node[left=-1] {0};
\tick{-0.1*\L,0,\H}{0} node[left=-1] {$h$};
\end{tikzpicture}
% LAMINAR FLOW around object
\begin{tikzpicture}
\def\W{7.0} % total length
\def\H{3.5} % total height
\def\R{1.0} % total distance
\def\N{5} % number of layers
\def\t{\H/\N} % layer thickness
\draw[water,shading angle=0,draw=none]
(-0.52*\W,-0.52*\H) rectangle (0.52*\W,0.52*\H);
\draw[metal]
(0,0) circle(\R);
\foreach \s in {-1,1}{
\foreach \i [evaluate={\fy=\s*(\i-0.5)/\N; \y=\fy*0.5*\H;}] in {1,...,\N}{
\draw[myblue,thick,postaction={decorate},decoration={markings,
mark=at position {0.2} with {\arrow{latex}},mark=at position 0.9 with {\arrow{latex}}}]
(-\W/2,\y) to[out=0,in=180] (0,\s*\R+0.7*\fy) to[out=0,in=180] (\W/2,\y);
}
}
\end{tikzpicture}
% TURBULENCE around object
\begin{tikzpicture}
\def\W{7.0} % total length
\def\H{3.5} % total height
\def\R{1.0} % total distance
\def\N{5} % number of layers
\def\t{\H/\N} % layer thickness
\draw[water,shading angle=0,draw=none]
(-0.52*\W,-0.52*\H) rectangle (0.52*\W,0.52*\H);
\draw[metal]
(0,0) circle(\R);
\foreach \s in {-1,1}{
\foreach \i [evaluate={\fy=\s*(\i-0.5)/\N; \y=\fy*0.5*\H;}] in {3,...,\N}{
\draw[myblue,thick,postaction={decorate},decoration={markings,
mark=at position {0.2} with {\arrow{latex}},mark=at position 0.9 with {\arrow{latex}}}]
(-\W/2,\y) to[out=0,in=180] (0,\s*\R+0.7*\fy) to[out=0,in=180] (\W/2,\y);
}
}
%\def\p{node[circle,fill=red,inner sep=0.9] {}} % probe dot
\draw[myblue,thick,postaction={decorate},decoration={markings,
mark=at position {0.2} with {\arrow{latex}},mark=at position 0.75 with {\arrow{latex}}}]
(-\W/2,{1.5/\N*0.5*\H}) to[out=0,in=180] (0,{\R+0.7*1.5/\N}) to[out=0,in=140,looseness=1.2]
(0.28*\W,0.17*\H) to[out=-40,in=180,looseness=1.1] (0.40*\W,0.02*\H) to[out=0,in=50,looseness=4]
(0.38*\W,0.15*\H);
\draw[myblue,thick,postaction={decorate},decoration={markings,
mark=at position {0.2} with {\arrow{latex}},mark=at position 0.75 with {\arrow{latex}}}]
(-\W/2,{0.5/\N*0.5*\H}) to[out=0,in=180] (0,{\R+0.7*0.5/\N}) to[out=0,in=140,looseness=1.0]
(0.20*\W,0.20*\H) to[out=-40,in=-70,looseness=3] (0.16*\W,0.15*\H);
\draw[myblue,thick,postaction={decorate},decoration={markings,
mark=at position {0.2} with {\arrow{latex}},mark=at position 0.75 with {\arrow{latex}}}]
(-\W/2,{-0.5/\N*0.5*\H}) to[out=0,in=180] (0,{-\R-0.7*0.5/\N}) to[out=0,in=-140,looseness=1.1]
(-40:1.15*\R) to[out=40,in=180,looseness=1.1] (0.27*\W,0.05*\H) to[out=0,in=-80,looseness=2]
(0.22*\W,-0.10*\H);
\draw[myblue,thick,postaction={decorate},decoration={markings,
mark=at position {0.2} with {\arrow{latex}},mark=at position 0.75 with {\arrow{latex}}}]
(-\W/2,{-1.5/\N*0.5*\H}) to[out=0,in=180] (0,{-\R-0.7*1.5/\N}) to[out=0,in=-150,looseness=1.1]
(0.30*\W,-0.16*\H) to[out=30,in=180,looseness=1.1] (0.46*\W,-0.05*\H) to[out=0,in=-110,looseness=4]
(0.41*\W,-0.13*\H);
\end{tikzpicture}
% TURBULENCE - REYNOLDS
\begin{tikzpicture}
\def\xmax{4.8}
\def\ymax{3.0}
\def\xa{0.40*0.7*\xmax}
\def\xb{0.55*0.7*\xmax}
\fill[myblue!8] (0,0) rectangle (\xa,\ymax);
\fill[myorange!10] (\xa,0) rectangle (\xb,\ymax);
\fill[myred!8] (\xb,0) rectangle (\xmax,\ymax);
\draw[->,thick] (-0.05*\xmax,0) -- (1.05*\xmax,0) node[below left=0] {Pressure difference $\Delta P$};
\draw[->,thick] (0,-0.05*\xmax) -- (0,1.10*\ymax) node[above left=0,rotate=90] {Flow};
\draw[thick] ({(\xa+\xb)/2},0.035*\ymax) --++ (0,-0.07*\ymax);
\draw[thick,myblue,dashed] (0,0) -- (0.7*\xmax,\ymax);
\draw[very thick,myblue] (0,0) -- (\xa,0.40*\ymax) coordinate (T1);
\draw[very thick,myorange] (T1) to[out=40,in=-155] (\xb,0.51*\ymax) coordinate (T2);
\draw[very thick,myred] (T2) to[out=25,in=180] (\xmax,0.67*\ymax);
\node[right,myblue] at (0,0.54*\ymax) {laminar};
\node[right,myred] at (0.53*\xmax,0.50*\ymax) {turbulent};
%\draw[dashed] ({(\xa+\xb)/2},0) --++ (0,\ymax) node[above] {$\mathrm{Re}\sim2300$};
\end{tikzpicture}
\end{document}
Click to download: fluid_dynamics_laminar.tex • fluid_dynamics_laminar.pdf
Open in Overleaf: fluid_dynamics_laminar.tex





Great, well done Izaak.
I was very happy when I came across these many beautiful TikZ examples by chance.
I made a few changes to the first image about laminar flow because it didn’t seem to be entirely consistent.
Here would be the adapted source code:
% LAMINAR FLOW LAYERS
\begin{tikzpicture}
\def\L{5.0} % total length
\def\Rx{0.40} % big pipe vertical radius right
\def\Ry{0.90} % big pipe vertical radius right
\def\v{1.3} % velocity magnitude
\def\N{3} % velocity magnitude
% WATER
\draw[horizontal water,thick]
(0,\Ry) — (0,-\Ry) coordinate (A1) –++ (\L,0) arc(-90:90:{\Rx} and \Ry) — cycle;
% \draw[water]
% (\L,0) ellipse({\Rx} and \Ry);
\draw[water]
(0,0) ellipse({\Rx} and \Ry);
\foreach \i [evaluate={\x=(\i-0.5)/(\N+0.5)}] in {1,…,\N}{
\draw[mydarkblue, dashed, dash pattern=on 2pt off 1pt]
(0,0) ellipse({\x*\Rx} and \x*\Ry)
(\L,0) ellipse({\x*\Rx} and \x*\Ry);
\draw[mydarkblue ,dashed, dash pattern=on 2pt off 1pt]
(0, \x*\Ry) –++ (\L,0)
(0,-\x*\Ry) –++ (\L,0);
\draw[mydarkblue,dashed, dash pattern=on 2pt off 1pt]
(\L,-\Ry) arc(270:90:{\Rx} and \Ry);
}
\draw[mydarkblue,thick]
(0,0) ellipse({\Rx} and \Ry);
\foreach \i [evaluate={\x=(\i-0.5)/(\N+0.5)}] in {1,…,\N}{
\draw[mydarkblue] (0,0) ellipse({\x*\Rx} and \x*\Ry);
}
\draw[vcol!70!black,dashed, dash pattern=on 2pt off 1pt,samples=100, smooth, variable=\y, domain=-1:1]
plot({0.5*\L+\v*(1-0.8*\y*\y)},\y*\Ry);
\draw[vvec] (0.5*\L,0) –++ (\v,0);
\foreach \i [evaluate={\y=(\i)/(\N+0.5); \vy=\v*(1-0.8*\y^2);}] in {1,…,\N}{
\draw[vvec] (0.5*\L, \y*\Ry) –++ (\vy,0);
\draw[vvec] (0.5*\L,-\y*\Ry) –++ (\vy,0);
\draw[vcol!70!black,dashed, dash pattern=on 2pt off 1pt]
(\L/2,-\Ry) arc(270:-90:{\Rx} and \Ry);
\draw[vcol!70!black]
(\L/2,-\Ry) arc(-90:90:{\Rx} and \Ry);%
}
\foreach \i [evaluate={\x=(\i-0.5)/(\N+0.5)}] in {1,…,\N}{
\draw[vcol!70!black ,dashed, dash pattern=on 2pt off 1pt]
(0,0) ellipse({\x*\Rx} and \x*\Ry)
(\L/2,0) ellipse({\x*\Rx} and \x*\Ry);
}
\end{tikzpicture}
Thank you for sharing these source code examples with us. With best regards
G. Stengert