This is a cold air supersonic nozzle I used for my master thesis. The super sonic flow is reachable with a total upstream pressure of 7.7bar.
Edit and compile if you like:
% Supersonic technical drawing % Author: Michele Muccioli \documentclass{standalone} \usepackage{tikz} \usetikzlibrary{calc,patterns,arrows,shapes.arrows,intersections} \usetikzlibrary{decorations} \usepackage{wasysym} \usepackage{siunitx} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % SECTION PATTERN DEFINITION % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newlength\thickness \pgfdeclarepatternformonly[\thickness]{section} {\pgfpointorigin} {\pgfpoint{1cm}{1cm}} {\pgfpoint{1cm}{1cm}} { \pgfsetlinewidth{\thickness} \pgfpathmoveto{\pgfpoint{0cm}{0cm}} \pgfpathlineto{\pgfpoint{1cm}{1cm}} \pgfpathclose \pgfsetlinewidth{\thickness} \pgfpathmoveto{\pgfpoint{0cm}{.5cm}} \pgfpathlineto{\pgfpoint{.5cm}{1cm}} \pgfpathclose \pgfsetlinewidth{\thickness} \pgfpathmoveto{\pgfpoint{.5cm}{0cm}} \pgfpathlineto{\pgfpoint{1cm}{.5cm}} \pgfusepath{stroke} } \tikzset{ thickness/.store in = \thickness, thickness = 0.5pt } %%%%%%%%%%%%%%%%%%%%%%%%% % DIMENSION DECORATIONS % %%%%%%%%%%%%%%%%%%%%%%%%% \makeatletter %-> New if \newif\if@dim@connection %-> New TeX dimensions \newdimen\dim@x \newdimen\dim@y \newdimen\dim@sep \newdimen\dim@overline \newdimen\dim@overlineI \newdimen\dim@overlineII \newdimen\dim@text@translation % x=, y= %\newif\iftikz@isdimension %\def\tikz@checkunit#1{% % \pgfmathparse{#1}% % \let\iftikz@isdimension=\ifpgfmathunitsdeclared% %} %\tikz@checkunit{1} %\iftikz@isdimension %true %\else %false %\fi % output scale % \pgf@pt@x=\pgf@x% % \pgf@pt@y=\pgf@y% % \let\pgf@pt@aa=\pgf@tempaa% % \let\pgf@pt@ba=\pgf@tempba% % \let\pgf@pt@ab=\pgf@tempab% % \let\pgf@pt@bb=\pgf@tempbb% % \def\pgf@trans@idtest{#1,#2,#3,#4}% % \ifx\pgf@trans@idtest\pgf@trans@idtext% % \else% % \pgf@pt@identityfalse%->\ifpgf@pt@identity % \fi% %-> Horizontal dimension \pgfdeclaredecoration{Hdim}{final}{% \state{final}{% % Setting needed dimensions from pgfkeys values. \tikz@checkunit{\pgfkeysvalueof{/pgf/decoration/distance}} \iftikz@isdimension \pgfmathsetlength{\dim@sep}{\pgfkeysvalueof{/pgf/decoration/distance}} \else \pgfmathsetlength{\dim@sep}{\pgfkeysvalueof{/pgf/decoration/distance}*\pgf@yy} \fi \pgfmathsetlength{\dim@x}{\pgfdecoratedpathlength*cos(\pgfdecoratedangle)} \pgfmathsetlength{\dim@y}{\pgfdecoratedpathlength*sin(\pgfdecoratedangle)} \pgfmathsetlength{\dim@overline}{\pgfkeysvalueof{/pgf/decoration/overline}} \pgfmathsetlength{\dim@text@translation}{\pgfkeysvalueof{/pgf/decoration/text translation}} % Setting text to write from pgfkeys value. \def\dim@text{\pgfkeysvalueof{/pgf/decoration/text}} % The overline verse (where it points. Positive or negative) depends % on dimension sep and angle of the segment to dimension. \ifdim0pt<\dim@sep % Case with positive dimension sep. % Normal behaviour. \pgfmathsetlength{\dim@overlineI}{\dim@overline} \pgfmathsetlength{\dim@overlineII}{\dim@overline} \else % Case with negative dimension sep. % The value of dimension overline I is different from % dimension overline II and it depends on the % quadrant where the the segment is. \pgfmathparse{abs(\dim@sep)Vertical dimension (NOT UTILISED IN THE FOLLOWING DRAWING) \pgfdeclaredecoration{Vdim}{final}{% \state{final}{% % Setting needed dimensions from pgfkeys values. \tikz@checkunit{\pgfkeysvalueof{/pgf/decoration/distance}} \iftikz@isdimension \pgfmathsetlength{\dim@sep}{\pgfkeysvalueof{/pgf/decoration/distance}} \else \pgfmathsetlength{\dim@sep}{\pgfkeysvalueof{/pgf/decoration/distance}*\pgf@yy} \fi \pgfmathsetlength{\dim@x}{\pgfdecoratedpathlength*cos(\pgfdecoratedangle)} \pgfmathsetlength{\dim@y}{\pgfdecoratedpathlength*sin(\pgfdecoratedangle)} \pgfmathsetlength{\dim@overline}{\pgfkeysvalueof{/pgf/decoration/overline}} \pgfmathsetlength{\dim@text@translation}{\pgfkeysvalueof{/pgf/decoration/text translation}} % Setting text to write from pgfkeys value. \def\dim@text{\pgfkeysvalueof{/pgf/decoration/text}} % The overline verse (where it points. Positive or negative) depends % on dimension sep and angle of the segment to dimension. \ifdim0pt<\dim@sep % Case with positive dimension sep. % Normal behaviour. \pgfmathsetlength{\dim@overlineI}{\dim@overline} \pgfmathsetlength{\dim@overlineII}{\dim@overline} \else % Case with negative dimension sep. % The value of dimension overline I is different from % dimension overline II and it depends on the % quadrant where the the segment is. \pgfmathparse{abs(\dim@sep) \pgfdecoratedangle % Third quadrant % Node drawing. It can be translate along the path with % text translation option. { \pgftransformshift{\pgfpoint{\dim@sep}{\dim@y/2-\dim@text@translation}} % In this case, the node must e rotated. \pgftransformrotate{-90} % Capturing the TikZ picture font size \dim@text@font \pgfnode{rectangle}{south}{\dim@text}{\dim@text@nodename}{\pgfusepath{discard}} } % Drawing the connection segments. \pgfpathmoveto{\pgfpoint{\dim@sep+\dim@overlineI}{0pt}} % Check if the first connection line must be drawn. \if@dim@connection \pgfpathlineto{\pgfpoint{0pt}{0pt}} \else \pgfpathlineto{\pgfpoint{\dim@sep-\dim@overlineI}{0pt}} \fi \pgfpathmoveto{\pgfpoint{\dim@sep+\dim@overlineII}{\dim@y}} % Check if the second connection line must be drawn. \if@dim@connection \pgfpathlineto{\pgfpoint{\dim@x}{\dim@y}} \else \pgfpathlineto{\pgfpoint{\dim@sep-\dim@overlineII}{\dim@y}} \fi % Draw an extra line if node text lies outside of the % dimension. \pgfmathparse{abs(.5\dim@y) \pgfdecoratedangle % First quadrant % Node drawing. It can be translate along the path with % text translation option. { \pgftransformshift{\pgfpoint{\dim@x+\dim@sep}{\dim@y/2-\dim@text@translation}} % In this case, the node must e rotated. \pgftransformrotate{-90} % Capturing the TikZ picture font size \dim@text@font \pgfnode{rectangle}{south}{\dim@text}{\dim@text@nodename}{\pgfusepath{discard}} } % Drawing the connection segments. \pgfpathmoveto{\pgfpoint{\dim@x+\dim@sep+\dim@overlineI}{0pt}} % Check if the first dimension connection must be drawn. \if@dim@connection \pgfpathlineto{\pgfpoint{0pt}{0pt}} \else \pgfpathlineto{\pgfpoint{\dim@x+\dim@sep-\dim@overlineI}{0pt}} \fi \pgfpathmoveto{\pgfpoint{\dim@x+\dim@sep+\dim@overlineII}{\dim@y}} % Check if the second dimension connection must be drawn. \if@dim@connection \pgfpathlineto{\pgfpoint{\dim@x}{\dim@y}} \else \pgfpathlineto{\pgfpoint{\dim@x+\dim@sep-\dim@overlineII}{\dim@y}} \fi % Draw an extra line if node text lies outside of the % dimension. \pgfmathparse{abs(.5\dim@y) Along the dimension \pgfdeclaredecoration{dim}{final}{ \state{final}{% % Check if the dimension inserted has unit \tikz@checkunit{\pgfkeysvalueof{/pgf/decoration/distance}} \iftikz@isdimension \pgfmathsetlength{\dim@sep}{\pgfkeysvalueof{/pgf/decoration/distance}} \else \pgfmathsetlength{\dim@sep}{\pgfkeysvalueof{/pgf/decoration/distance}*\pgf@yy} \fi % Overline value if function of the sep sign. \ifdim0pt>\dim@sep \pgfmathsetlength{\dim@overline}{-\pgfkeysvalueof{/pgf/decoration/overline}} \else \pgfmathsetlength{\dim@overline}{\pgfkeysvalueof{/pgf/decoration/overline}} \fi \pgfmathsetlength{\dim@text@translation}{\pgfkeysvalueof{/pgf/decoration/text translation}} % Setting the text to be inserted into the dimension node. \def\dim@text{\pgfkeysvalueof{/pgf/decoration/text}} { \pgftransformshift{\pgfpoint{\pgfdecoratedpathlength/2+\dim@text@translation}{\dim@sep}} % Capturing the TikZ picture font size \dim@text@font \pgfnode{rectangle}{south}{\dim@text}{\dim@text@nodename}{\pgfusepath{discard}} } \pgfpathmoveto{\pgfpoint{0pt}{\dim@sep+\dim@overline}} % Check if the first connection line mus b drawn \if@dim@connection \pgfpathlineto{\pgfpoint{0pt}{0pt}} \else \pgfpathlineto{\pgfpoint{0pt}{\dim@sep-\dim@overline}} \fi \pgfpathmoveto{\pgfpoint{(\pgfdecoratedpathlength}{\dim@sep+\dim@overline}} % Check if the first connection line mus b drawn \if@dim@connection \pgfpathlineto{\pgfpoint{\pgfdecoratedpathlength}{0pt}} \else \pgfpathlineto{\pgfpoint{(\pgfdecoratedpathlength}{\dim@sep-\dim@overline}} \fi % Draw an extra line if node text lies outside of the % dimension. \pgfmathparse{abs(.5*\pgfdecoratedpathlength) Initial values \pgfkeys{/pgf/decoration/.cd, distance/.initial = 10pt, overline/.initial = 1mm, text/.initial = {}, text translation/.initial = 0pt, text node name/.store in = \dim@text@nodename, text node name = dim_text, >/.store in = \dim@arrow@type, > = latex, connection/.is if = @dim@connection, connection = false, font/.store in = \dim@text@font, font = \tikz@textfont, } \makeatother %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % COMMANDS TO CALL DIMENSION DECORATIONS % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand\Hdimension[1][]{\path[decorate,decoration={Hdim,#1}]} \newcommand\Vdimension[1][]{\path[decorate,decoration={Vdim,#1}]} \newcommand\dimension[1][]{\path[decorate,decoration={dim,#1}]} \begin{document} \begin{tikzpicture}[x = 1mm, y = 1mm, > = latex, line join = round, font = \small] %%%%%%%%%%%%%%%%%% % NOZZLE DRAWING % %%%%%%%%%%%%%%%%%% %-> Origin definition \coordinate (o) at (0,0); %-> Nozzle % Symmetric characteristic is used in a % foreach command where the cycle is made % for upper part (up) with positive sign (+) % and lower part (down) with negative sign (-) \foreach \pos/\sign in {up/+,down/-}{ %%-> Points definitions \coordinate (A\pos) at ($(o)+(0,\sign11.5)$); \coordinate (B\pos) at ($(A\pos)+(0,\sign5.075)$); \coordinate (C\pos) at ($(B\pos)+(20,0)$); \coordinate (D\pos) at ($(C\pos)+(0,-\sign1.575)$); \coordinate (E\pos) at ($(D\pos)+(10,0)$); \coordinate (F\pos) at ($(E\pos)+(0,\sign11)$); \coordinate (G\pos) at ($(F\pos)+(0,\sign8)$); \coordinate (H\pos) at ($(G\pos)+(0,\sign6)$); \coordinate (I\pos) at ($(H\pos)+(10,0)$); \coordinate (L\pos) at (G\pos-|I\pos); \coordinate (M\pos) at (F\pos-|I\pos); \coordinate (N\pos) at (E\pos-|I\pos); \coordinate (O\pos) at ($(N\pos)+(100,0)$); \coordinate (P\pos) at ($(O\pos)+(10,-\sign10)$); \coordinate (throat_\pos) at ($(P\pos)-(43.8,\sign1.15)$); \coordinate (IN_\pos) at ($(A\pos)+(92.74,0)$); \coordinate (center1_\pos) at ($(o)+(92.74,\sign4.5)$); \coordinate (center2_\pos) at ($(throat_\pos)+(0,\sign7)$); %%-> Draw nozzle main body \draw[fill, pattern = section, line width = 1.1pt] \ifnum\sign1>0 (center1_\pos)++(45:7)arc(45:90:7)-- \else (center1_\pos)++(-45:7)arc(315:270:7)-- \fi (A\pos)-- (B\pos)-- (C\pos)-- (D\pos)-- (E\pos)-- (F\pos)-- (G\pos)-- (H\pos)-- (I\pos)-- (L\pos)-- (M\pos)-- (N\pos)-- (O\pos)-- (P\pos)-- (throat_\pos) \ifnum\sign1>0 arc(270:225:7) \else arc(90:135:7) \fi --cycle; %%-> Draw holes on the flange \draw[fill = white, line width = 1.1pt] (G\pos)rectangle(M\pos); %%-> Draw symmetric axis on flange holes \draw[dash pattern = on 3pt off 5pt on 6pt off 5pt, line width = 1pt] ($(F\pos)!.5!(G\pos)-(5,0)$)-- ($(L\pos)!.5!(M\pos)+(5,0)$); %%-> screw drawing \draw[dashed] (D\pos)--(D\pos-|A\pos); } %%-> Nozzle input and output closure \draw[line width = 1.1pt](Adown)--(Aup) (Pdown)--(Pup); %%-> Nozzle symmetry line \draw[dash pattern = on 3pt off 5pt on 6pt off 5pt, line width = 1pt] ($(Adown)!.5!(Aup)-(5,0)$)--($(Pdown)!.5!(Pup)+(5,0)$); %%%%%%%%%%%%%% % DIMENSIONS % %%%%%%%%%%%%%% % Macro to see the dimension % inserted. For debug. \newif\ifdimension \dimensionfalse %\dimensiontrue % if true, you will see the dimension number (%x) on the draw \newcount\Ndim=0 \def\SeeDim#1{\ifdimension\global\advance\Ndim by 1 \the\Ndim\else#1\fi} %-> 1 \Hdimension[text = \SeeDim{10}, distance = 3] (Hup) -- (Iup); %-> 2 \Hdimension[text = \SeeDim{10}, distance = 3] (Cup)--(Hup); %-> 3 \Hdimension[text = \SeeDim{20}, distance = 26.425] (Bup)--(Cup); %-> 4 \Hdimension[text = \SeeDim{100}, distance = 3] (Iup)--(Oup); %-> 5 \Hdimension[text = \SeeDim{10}, distance = 28] (Oup)--(Pup); %-> 6 \dimension[text = \SeeDim{\diameter30}, distance = -25] (Odown)--(Oup); %-> 7 \Hdimension[text = \SeeDim{43.8}, distance = -48.15] (throat_down)--(Odown); %-> 8 \Hdimension[text = \SeeDim{92.74}, distance = -40.5] (IN_down)--(Bdown); %-> 9 \dimension[text = \SeeDim{\diameter7.7}, text translation = -7mm, distance = 20] (throat_down)--(throat_up); %-> 10 \dimension[text = \SeeDim{\diameter10}, distance = -8] (Pdown)--(Pup); %-> 11 (by hand) \draw[->] (center1_up)--++(45:7)node[sloped, above = .4mm, pos = .3, inner sep = 0.5pt]{\SeeDim{R7}}; %-> 12 (by hand) \draw[->] (center2_up)--++(225:7)node[above = .4mm, pos = .4, inner sep = 0.5pt, rotate = 45, fill = white]{\SeeDim{R7}}; %-> 13 (by hand) \coordinate (raccordo_up) at ($(center1_up)+(45:7)$); \coordinate (raccordo_down) at ($(center1_down)+(-45:7)$); \draw (raccordo_up)--++(135:20); \draw (raccordo_down)--++(225:20); \path[name path=C1](raccordo_up)--++(-45:20); \path[name path=C2](raccordo_down)--++(45:20); \path[name intersections={of=C1 and C2}]; \coordinate (C90) at (intersection-1); \draw[<->] ($(C90)+(135:30)$)arc[start angle = 135, delta angle = 90, radius = 30]; \def\angle{35} \node[rotate = \angle+45, anchor = south] at ($(C90)+(135+\angle:30)$){\SeeDim{\ang{90}}}; %-> 14 \dimension[text = \SeeDim{\diameter60}, distance = -5, > = angle 45, text translation = .5cm] ($(Ldown)!.5!(Mdown)$)--($(Lup)!.5!(Mup)$); %-> 15 \dimension[text = \SeeDim{\diameter80}, distance = -10, text translation = .5cm] (Idown)--(Iup); %-> 16 \dimension[text = \SeeDim{\diameter8 ($\times$4)}, distance = 10, text translation = -12mm] (Gdown)--(Fdown); %-> 17 \dimension[text = \SeeDim{G1'}, distance = 10] (Bdown)--(Bup); %-> 18 \dimension[text = \SeeDim{\diameter23}, distance = 5] (Adown)--(Aup); % Dimensions scale \node[anchor = north west] at (current bounding box.south west) {All dimensions are in millimeters}; \end{tikzpicture} \end{document}
Click to download: supersonic-nozzle.tex • supersonic-nozzle.pdf
Open in Overleaf: supersonic-nozzle.tex