From 0725a1c16e505a7b26ea7abc265b9c3290645128 Mon Sep 17 00:00:00 2001 From: Sampo Niskanen Date: Wed, 23 Jan 2013 08:24:53 +0200 Subject: [PATCH] Write-up on lower stage descent --- core/doc/techdoc/.gitignore | 4 + core/doc/techdoc/DEPENDENCIES.txt | 7 + .../chapter-aerodynamic-properties.tex | 33 +- .../figures/lower-stage/lower-stage.eps | 563 ++++++++++++++++++ .../figures/lower-stage/lower-stage.fig | 50 ++ .../figures/lower-stage/lower-stage.pdf | Bin 0 -> 6806 bytes 6 files changed, 647 insertions(+), 10 deletions(-) create mode 100644 core/doc/techdoc/.gitignore create mode 100644 core/doc/techdoc/DEPENDENCIES.txt create mode 100644 core/doc/techdoc/figures/lower-stage/lower-stage.eps create mode 100644 core/doc/techdoc/figures/lower-stage/lower-stage.fig create mode 100644 core/doc/techdoc/figures/lower-stage/lower-stage.pdf diff --git a/core/doc/techdoc/.gitignore b/core/doc/techdoc/.gitignore new file mode 100644 index 000000000..e48445453 --- /dev/null +++ b/core/doc/techdoc/.gitignore @@ -0,0 +1,4 @@ +*.log +*.aux +*.dvi +*.bak diff --git a/core/doc/techdoc/DEPENDENCIES.txt b/core/doc/techdoc/DEPENDENCIES.txt new file mode 100644 index 000000000..9f2e2f1f9 --- /dev/null +++ b/core/doc/techdoc/DEPENDENCIES.txt @@ -0,0 +1,7 @@ + +The following packages need to be installed on top of the basic +texlive installation to compile the technical documentation (in Ubuntu): + +texlive-latex-extra +texlive-math-extra +texlive-fonts-extra diff --git a/core/doc/techdoc/chapter-aerodynamic-properties.tex b/core/doc/techdoc/chapter-aerodynamic-properties.tex index cf2eb8815..14e7ca0be 100644 --- a/core/doc/techdoc/chapter-aerodynamic-properties.tex +++ b/core/doc/techdoc/chapter-aerodynamic-properties.tex @@ -2244,15 +2244,16 @@ during descent, significantly reducing their speed. This kind of tumbling is difficult if not impossible to model in 6-DOF, and the orientation is typically not of interest anyway. -Therefore for simulating the descent of aerodynamically unstable -stages, it is sufficient to compute the average aerodynamic drag of +For simulating the descent of aerodynamically unstable stages, it is +therefore sufficient to compute the average aerodynamic drag of the tumbling lower stage. While model rockets are built in very peculiar forms, staged rockets are typically much more conservative in their design. The lower stages are most often formed of just a body tube and fins. Five such models were constructed for testing their descent aerodynamic drag. -The physical properties of the models are listed in Table~XX. +The physical properties of the models are listed in +Table~\ref{tab-lower-stages}. % # fins % root chord @@ -2261,16 +2262,28 @@ The physical properties of the models are listed in Table~XX. % diameter % mass \begin{table} +\label{tab-lower-stages} \caption{Physical properties of the lower stage models} +\begin{center} +\parbox{85mm}{ \begin{tabular}{cccccc} -Model: & #1 & #2 & #3 & #4 & #5 \\ -fins & 3 & 3 & 4 & 0 & 3 \\ -$C_r$ & & & & - & \\ -$C_t$ & & & & - & \\ -$s$ & & & & - & \\ -$d$ & & & & & \\ -$m$ & & & & & \\ +Model & \#1 & \#2 & \#3 & \#4 & \#5 \\ +\hline +No. fins & 3 & 3 & 4 & 0 & 3 \\ +$C_r$ / mm & 50 & 70 & 70 & - & 200 \\ +$C_t$ / mm & 25 & 40 & 40 & - & 140 \\ +$s$ / mm & 50 & 60 & 60 & - & 130 \\ +$l_0$ / mm & 10 & 10 & 10 & - & 25 \\ +$d$ / mm & 18 & 44 & 44 & 44 & 103 \\ +$l$ / mm & 74 & 108 & 108 & 100 & 290 \\ +$m$ / g & 8.1 & 18.0& 21.8& 6.8 & \\ +\hline \end{tabular} +} +\parbox{50mm}{ +\epsfig{file=figures/lower-stage/lower-stage,width=50mm} +} +\end{center} \end{table} The drop tests were performed from a height of XX meters and the drop diff --git a/core/doc/techdoc/figures/lower-stage/lower-stage.eps b/core/doc/techdoc/figures/lower-stage/lower-stage.eps new file mode 100644 index 000000000..6198862af --- /dev/null +++ b/core/doc/techdoc/figures/lower-stage/lower-stage.eps @@ -0,0 +1,563 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Title: lower-stage.fig +%%Creator: fig2dev Version 3.2 Patchlevel 5d +%%CreationDate: Sat Jan 19 12:25:32 2013 +%%BoundingBox: 0 0 341 229 +%Magnification: 1.0000 +%%EndComments +%%BeginProlog +/MyAppDict 100 dict dup begin def +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end + +% This junk string is used by the show operators +/PATsstr 1 string def +/PATawidthshow { % cx cy cchar rx ry string + % Loop over each character in the string + { % cx cy cchar rx ry char + % Show the character + dup % cx cy cchar rx ry char char + PATsstr dup 0 4 -1 roll put % cx cy cchar rx ry char (char) + false charpath % cx cy cchar rx ry char + /clip load PATdraw + % Move past the character (charpath modified the + % current point) + currentpoint % cx cy cchar rx ry char x y + newpath + moveto % cx cy cchar rx ry char + % Reposition by cx,cy if the character in the string is cchar + 3 index eq { % cx cy cchar rx ry + 4 index 4 index rmoveto + } if + % Reposition all characters by rx ry + 2 copy rmoveto % cx cy cchar rx ry + } forall + pop pop pop pop pop % - + currentpoint + newpath + moveto +} bind def +/PATcg { + 7 dict dup begin + /lw currentlinewidth def + /lc currentlinecap def + /lj currentlinejoin def + /ml currentmiterlimit def + /ds [ currentdash ] def + /cc [ currentrgbcolor ] def + /cm matrix currentmatrix def + end +} bind def +% PATdraw - calculates the boundaries of the object and +% fills it with the current pattern +/PATdraw { % proc + save exch + PATpcalc % proc nw nh px py + 5 -1 roll exec % nw nh px py + newpath + PATfill % - + restore +} bind def +% PATfill - performs the tiling for the shape +/PATfill { % nw nh px py PATfill - + PATDict /CurrentPattern get dup begin + setfont + % Set the coordinate system to Pattern Space + PatternGState PATsg + % Set the color for uncolored pattezns + PaintType 2 eq { PATDict /PColor get PATsc } if + % Create the string for showing + 3 index string % nw nh px py str + % Loop for each of the pattern sources + 0 1 Multi 1 sub { % nw nh px py str source + % Move to the starting location + 3 index 3 index % nw nh px py str source px py + moveto % nw nh px py str source + % For multiple sources, set the appropriate color + Multi 1 ne { dup PC exch get PATsc } if + % Set the appropriate string for the source + 0 1 7 index 1 sub { 2 index exch 2 index put } for pop + % Loop over the number of vertical cells + 3 index % nw nh px py str nh + { % nw nh px py str + currentpoint % nw nh px py str cx cy + 2 index oldshow % nw nh px py str cx cy + YStep add moveto % nw nh px py str + } repeat % nw nh px py str + } for + 5 { pop } repeat + end +} bind def + +% PATkshow - kshow with the current pattezn +/PATkshow { % proc string + exch bind % string proc + 1 index 0 get % string proc char + % Loop over all but the last character in the string + 0 1 4 index length 2 sub { + % string proc char idx + % Find the n+1th character in the string + 3 index exch 1 add get % string proc char char+1 + exch 2 copy % strinq proc char+1 char char+1 char + % Now show the nth character + PATsstr dup 0 4 -1 roll put % string proc chr+1 chr chr+1 (chr) + false charpath % string proc char+1 char char+1 + /clip load PATdraw + % Move past the character (charpath modified the current point) + currentpoint newpath moveto + % Execute the user proc (should consume char and char+1) + mark 3 1 roll % string proc char+1 mark char char+1 + 4 index exec % string proc char+1 mark... + cleartomark % string proc char+1 + } for + % Now display the last character + PATsstr dup 0 4 -1 roll put % string proc (char+1) + false charpath % string proc + /clip load PATdraw + neewath + pop pop % - +} bind def +% PATmp - the makepattern equivalent +/PATmp { % patdict patmtx PATmp patinstance + exch dup length 7 add % We will add 6 new entries plus 1 FID + dict copy % Create a new dictionary + begin + % Matrix to install when painting the pattern + TilingType PATtcalc + /PatternGState PATcg def + PatternGState /cm 3 -1 roll put + % Check for multi pattern sources (Level 1 fast color patterns) + currentdict /Multi known not { /Multi 1 def } if + % Font dictionary definitions + /FontType 3 def + % Create a dummy encoding vector + /Encoding 256 array def + 3 string 0 1 255 { + Encoding exch dup 3 index cvs cvn put } for pop + /FontMatrix matrix def + /FontBBox BBox def + /BuildChar { + mark 3 1 roll % mark dict char + exch begin + Multi 1 ne {PaintData exch get}{pop} ifelse % mark [paintdata] + PaintType 2 eq Multi 1 ne or + { XStep 0 FontBBox aload pop setcachedevice } + { XStep 0 setcharwidth } ifelse + currentdict % mark [paintdata] dict + /PaintProc load % mark [paintdata] dict paintproc + end + gsave + false PATredef exec true PATredef + grestore + cleartomark % - + } bind def + currentdict + end % newdict + /foo exch % /foo newlict + definefont % newfont +} bind def +% PATpcalc - calculates the starting point and width/height +% of the tile fill for the shape +/PATpcalc { % - PATpcalc nw nh px py + PATDict /CurrentPattern get begin + gsave + % Set up the coordinate system to Pattern Space + % and lock down pattern + PatternGState /cm get setmatrix + BBox aload pop pop pop translate + % Determine the bounding box of the shape + pathbbox % llx lly urx ury + grestore + % Determine (nw, nh) the # of cells to paint width and height + PatHeight div ceiling % llx lly urx qh + 4 1 roll % qh llx lly urx + PatWidth div ceiling % qh llx lly qw + 4 1 roll % qw qh llx lly + PatHeight div floor % qw qh llx ph + 4 1 roll % ph qw qh llx + PatWidth div floor % ph qw qh pw + 4 1 roll % pw ph qw qh + 2 index sub cvi abs % pw ph qs qh-ph + exch 3 index sub cvi abs exch % pw ph nw=qw-pw nh=qh-ph + % Determine the starting point of the pattern fill + %(px, py) + 4 2 roll % nw nh pw ph + PatHeight mul % nw nh pw py + exch % nw nh py pw + PatWidth mul exch % nw nh px py + end +} bind def + +% Save the original routines so that we can use them later on +/oldfill /fill load def +/oldeofill /eofill load def +/oldstroke /stroke load def +/oldshow /show load def +/oldashow /ashow load def +/oldwidthshow /widthshow load def +/oldawidthshow /awidthshow load def +/oldkshow /kshow load def + +% These defs are necessary so that subsequent procs don't bind in +% the originals +/fill { oldfill } bind def +/eofill { oldeofill } bind def +/stroke { oldstroke } bind def +/show { oldshow } bind def +/ashow { oldashow } bind def +/widthshow { oldwidthshow } bind def +/awidthshow { oldawidthshow } bind def +/kshow { oldkshow } bind def +/PATredef { + MyAppDict begin + { + /fill { /clip load PATdraw newpath } bind def + /eofill { /eoclip load PATdraw newpath } bind def + /stroke { PATstroke } bind def + /show { 0 0 null 0 0 6 -1 roll PATawidthshow } bind def + /ashow { 0 0 null 6 3 roll PATawidthshow } + bind def + /widthshow { 0 0 3 -1 roll PATawidthshow } + bind def + /awidthshow { PATawidthshow } bind def + /kshow { PATkshow } bind def + } { + /fill { oldfill } bind def + /eofill { oldeofill } bind def + /stroke { oldstroke } bind def + /show { oldshow } bind def + /ashow { oldashow } bind def + /widthshow { oldwidthshow } bind def + /awidthshow { oldawidthshow } bind def + /kshow { oldkshow } bind def + } ifelse + end +} bind def +false PATredef +% Conditionally define setcmykcolor if not available +/setcmykcolor where { pop } { + /setcmykcolor { + 1 sub 4 1 roll + 3 { + 3 index add neg dup 0 lt { pop 0 } if 3 1 roll + } repeat + setrgbcolor - pop + } bind def +} ifelse +/PATsc { % colorarray + aload length % c1 ... cn length + dup 1 eq { pop setgray } { 3 eq { setrgbcolor } { setcmykcolor + } ifelse } ifelse +} bind def +/PATsg { % dict + begin + lw setlinewidth + lc setlinecap + lj setlinejoin + ml setmiterlimit + ds aload pop setdash + cc aload pop setrgbcolor + cm setmatrix + end +} bind def + +/PATDict 3 dict def +/PATsp { + true PATredef + PATDict begin + /CurrentPattern exch def + % If it's an uncolored pattern, save the color + CurrentPattern /PaintType get 2 eq { + /PColor exch def + } if + /CColor [ currentrgbcolor ] def + end +} bind def +% PATstroke - stroke with the current pattern +/PATstroke { + countdictstack + save + mark + { + currentpoint strokepath moveto + PATpcalc % proc nw nh px py + clip newpath PATfill + } stopped { + (*** PATstroke Warning: Path is too complex, stroking + with gray) = + cleartomark + restore + countdictstack exch sub dup 0 gt + { { end } repeat } { pop } ifelse + gsave 0.5 setgray oldstroke grestore + } { pop restore pop } ifelse + newpath +} bind def +/PATtcalc { % modmtx tilingtype PATtcalc tilematrix + % Note: tiling types 2 and 3 are not supported + gsave + exch concat % tilingtype + matrix currentmatrix exch % cmtx tilingtype + % Tiling type 1 and 3: constant spacing + 2 ne { + % Distort the pattern so that it occupies + % an integral number of device pixels + dup 4 get exch dup 5 get exch % tx ty cmtx + XStep 0 dtransform + round exch round exch % tx ty cmtx dx.x dx.y + XStep div exch XStep div exch % tx ty cmtx a b + 0 YStep dtransform + round exch round exch % tx ty cmtx a b dy.x dy.y + YStep div exch YStep div exch % tx ty cmtx a b c d + 7 -3 roll astore % { a b c d tx ty } + } if + grestore +} bind def +/PATusp { + false PATredef + PATDict begin + CColor PATsc + end +} bind def + +% left45 +11 dict begin +/PaintType 1 def +/PatternType 1 def +/TilingType 1 def +/BBox [0 0 1 1] def +/XStep 1 def +/YStep 1 def +/PatWidth 1 def +/PatHeight 1 def +/Multi 2 def +/PaintData [ + { clippath } bind + { 20 20 true [ 20 0 0 -20 0 20 ] + {<8020004010002008001004000802000401000200 + 8001004000802000401080200040100020080010 + 0400080200040100020080010040008020004010>} + imagemask } bind +] def +/PaintProc { + pop + exec fill +} def +currentdict +end +/P4 exch def + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +/pageheader { +save +newpath 0 229 moveto 0 0 lineto 341 0 lineto 341 229 lineto closepath clip newpath +-112.0 284.4 translate +1 -1 scale +$F2psBegin +10 setmiterlimit +0 slj 0 slc + 0.06299 0.06299 sc +} bind def +/pagefooter { +$F2psEnd +restore +} bind def +%%EndProlog +pageheader +% +% Fig objects follow +% +% +% here starts figure with depth 50 +% Polyline +0 slj +0 slc +7.500 slw +gs clippath +4980 1487 m 4980 1335 l 4920 1335 l 4920 1487 l 4920 1487 l 4950 1367 l 4980 1487 l cp +4920 3013 m 4920 3165 l 4980 3165 l 4980 3013 l 4980 3013 l 4950 3133 l 4920 3013 l cp +eoclip +n 4950 3150 m + 4950 1350 l gs col0 s gr gr + +% arrowhead +n 4920 3013 m 4950 3133 l 4980 3013 l col0 s +% arrowhead +n 4980 1487 m 4950 1367 l 4920 1487 l col0 s +% Polyline +15.000 slw +n 1800 3150 m + 6750 3150 l gs col0 s gr +% Polyline +n 1800 4050 m + 6750 4050 l gs col0 s gr +% Polyline +n 3375 3150 m 3825 1350 l 5625 1350 l + 6075 3150 l gs col0 s gr +% Polyline +n 6525 3150 m 6300 3150 l 6300 4050 l 6525 4050 l + cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def +15.00 15.00 sc P4 [16 0 0 -16 420.00 210.00] PATmp PATsp ef gr PATusp gs col0 s gr +% Polyline +7.500 slw +gs clippath +5938 3405 m 6090 3405 l 6090 3345 l 5938 3345 l 5938 3345 l 6058 3375 l 5938 3405 l cp +3512 3345 m 3360 3345 l 3360 3405 l 3512 3405 l 3512 3405 l 3392 3375 l 3512 3345 l cp +eoclip +n 3375 3375 m + 6075 3375 l gs col0 s gr gr + +% arrowhead +n 3512 3345 m 3392 3375 l 3512 3405 l col0 s +% arrowhead +n 5938 3405 m 6058 3375 l 5938 3345 l col0 s +% Polyline +gs clippath +6613 2955 m 6765 2955 l 6765 2895 l 6613 2895 l 6613 2895 l 6733 2925 l 6613 2955 l cp +6212 2895 m 6060 2895 l 6060 2955 l 6212 2955 l 6212 2955 l 6092 2925 l 6212 2895 l cp +eoclip +n 6075 2925 m + 6750 2925 l gs col0 s gr gr + +% arrowhead +n 6212 2895 m 6092 2925 l 6212 2955 l col0 s +% arrowhead +n 6613 2955 m 6733 2925 l 6613 2895 l col0 s +% Polyline +gs clippath +1937 4245 m 1785 4245 l 1785 4305 l 1937 4305 l 1937 4305 l 1817 4275 l 1937 4245 l cp +6613 4305 m 6765 4305 l 6765 4245 l 6613 4245 l 6613 4245 l 6733 4275 l 6613 4305 l cp +eoclip +n 6750 4275 m + 1800 4275 l gs col0 s gr gr + +% arrowhead +n 6613 4305 m 6733 4275 l 6613 4245 l col0 s +% arrowhead +n 1937 4245 m 1817 4275 l 1937 4305 l col0 s +% Polyline +gs clippath +6945 3913 m 6945 4065 l 7005 4065 l 7005 3913 l 7005 3913 l 6975 4033 l 6945 3913 l cp +7005 3287 m 7005 3135 l 6945 3135 l 6945 3287 l 6945 3287 l 6975 3167 l 7005 3287 l cp +eoclip +n 6975 3150 m + 6975 4050 l gs col0 s gr gr + +% arrowhead +n 7005 3287 m 6975 3167 l 6945 3287 l col0 s +% arrowhead +n 6945 3913 m 6975 4033 l 7005 3913 l col0 s +% Polyline +gs clippath +5488 1155 m 5640 1155 l 5640 1095 l 5488 1095 l 5488 1095 l 5608 1125 l 5488 1155 l cp +3962 1095 m 3810 1095 l 3810 1155 l 3962 1155 l 3962 1155 l 3842 1125 l 3962 1095 l cp +eoclip +n 3825 1125 m + 5625 1125 l gs col0 s gr gr + +% arrowhead +n 3962 1095 m 3842 1125 l 3962 1155 l col0 s +% arrowhead +n 5488 1155 m 5608 1125 l 5488 1095 l col0 s +/Times-Italic ff 190.50 scf sf +4725 3555 m +gs 1 -1 sc (C) col0 sh gr +/Times-Italic ff 190.50 scf sf +4995 2385 m +gs 1 -1 sc (s) col0 sh gr +/Times-Italic ff 190.50 scf sf +7065 3645 m +gs 1 -1 sc (d) col0 sh gr +/Times-Italic ff 190.50 scf sf +4320 4500 m +gs 1 -1 sc (l) col0 sh gr +/Times-Italic ff 190.50 scf sf +6390 2835 m +gs 1 -1 sc (l) col0 sh gr +/Times-Italic ff 111.13 scf sf +4770 1080 m +gs 1 -1 sc (t) col0 sh gr +/Times-Roman ff 111.13 scf sf +6435 2880 m +gs 1 -1 sc (0) col0 sh gr +/Times-Italic ff 111.13 scf sf +4860 3600 m +gs 1 -1 sc (r) col0 sh gr +/Times-Italic ff 190.50 scf sf +4635 1035 m +gs 1 -1 sc (C) col0 sh gr +% here ends figure; +pagefooter +showpage +%%Trailer +end +%EOF diff --git a/core/doc/techdoc/figures/lower-stage/lower-stage.fig b/core/doc/techdoc/figures/lower-stage/lower-stage.fig new file mode 100644 index 000000000..f9ceeecda --- /dev/null +++ b/core/doc/techdoc/figures/lower-stage/lower-stage.fig @@ -0,0 +1,50 @@ +#FIG 3.2 Produced by xfig version 3.2.5b +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 4950 3150 4950 1350 +2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 1800 3150 6750 3150 +2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 1800 4050 6750 4050 +2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 4 + 3375 3150 3825 1350 5625 1350 6075 3150 +2 2 0 2 0 7 50 -1 44 0.000 0 0 -1 0 0 5 + 6525 3150 6300 3150 6300 4050 6525 4050 6525 3150 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 3375 3375 6075 3375 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 6075 2925 6750 2925 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 6750 4275 1800 4275 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 6975 3150 6975 4050 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 1 2 + 0 0 1.00 60.00 120.00 + 0 0 1.00 60.00 120.00 + 3825 1125 5625 1125 +4 0 0 50 -1 1 12 0.0000 4 135 135 4725 3555 C\001 +4 0 0 50 -1 1 12 0.0000 4 90 75 4995 2385 s\001 +4 0 0 50 -1 1 12 0.0000 4 135 105 7065 3645 d\001 +4 0 0 50 -1 1 12 0.0000 4 135 60 4320 4500 l\001 +4 0 0 50 -1 1 12 0.0000 4 135 60 6390 2835 l\001 +4 0 0 50 -1 1 7 0.0000 4 60 30 4770 1080 t\001 +4 0 0 50 -1 0 7 0.0000 4 75 60 6435 2880 0\001 +4 0 0 50 -1 1 7 0.0000 4 45 45 4860 3600 r\001 +4 0 0 50 -1 1 12 0.0000 4 135 135 4635 1035 C\001 diff --git a/core/doc/techdoc/figures/lower-stage/lower-stage.pdf b/core/doc/techdoc/figures/lower-stage/lower-stage.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e4fb3a68059283dfa72b537106347d84e31b2755 GIT binary patch literal 6806 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 literal 0 HcmV?d00001