├── Makefile ├── abstract.tex ├── acknowledgements.tex ├── asymptote.sty ├── coil-design.tex ├── coil-design ├── circle-offset.asy ├── coil-coil.asy ├── coil-filament.asy ├── coil-mag-equiv.asy ├── coil-magnet.asy ├── coil-schem.asy ├── coil-shell.asy └── dual-coil.asy ├── conclusion.tex ├── control.tex ├── fngp.sty ├── front.tex ├── intro.tex ├── intro ├── eddy-h.asy ├── eddy-v.asy ├── vibration-base.asy ├── vibration-inertial.asy └── vibration-sdof.asy ├── magnet-design.tex ├── magnet-design ├── choi-spring.asy ├── coupling.asy ├── equal-area.asy ├── magratio.asy ├── magrotate-schem.asy ├── oblique.asy ├── rot-couple.asy ├── spring-ha.asy ├── spring-hv.asy ├── spring-zhv.asy ├── spring-zk3.asy └── twomagdir.asy ├── magnet-theory.tex ├── magnet-theory ├── akoun.asy ├── bhcurve.asy ├── bhknee.asy ├── coil-mag-equiv.asy ├── mag-nodes.asy ├── magnet-prices.m ├── magrot.asy ├── nodes-bigsmall.asy └── rot-geom.asy ├── mlist.cfg ├── multipole.tex ├── multipole ├── double-planar.asy ├── halbach-hdispl.asy ├── magperwave.asy ├── magratio.asy ├── multipole-max-nmag.asy ├── multipole-sep-eq.asy ├── multipole-sep-eq2.asy ├── multipole-sep.asy └── multipole-variables.asy ├── phdfig.asy ├── qzs.tex ├── qzs ├── heq-combined.asy ├── zerok-comb.asy ├── zerokspring-lbl.asy ├── zerokspring.asy ├── zks-schematic-qzs.asy └── zks-schematic.asy ├── readme.markdown ├── references.tex ├── refstyle.cfg ├── repro-research.tex ├── shortwrite.sty ├── thesis-maths.sty ├── thesis-preamble.sty ├── thesis.gls ├── thesis.pdf ├── thesis.tex ├── xpmt.tex └── xpmt ├── rig-coil.asy ├── rig-schematic.asy ├── simple-isolator-block.asy ├── spring-zk.asy └── vibration-base-feedback.asy /Makefile: -------------------------------------------------------------------------------- 1 | 2 | main = thesis 3 | support = thesis-preamble.sty thesis-maths.sty 4 | chapters = \ 5 | front abstract acknowledgements contents \ 6 | intro magnet-theory coil-design \ 7 | magnet-design multipole qzs control xpmt \ 8 | conclusion 9 | 10 | .PHONY: $(chapters) show clean 11 | 12 | show: $(main).pdf 13 | open $< 14 | osascript -e 'tell application "Skim" to revert item 1 of (every window whose name contains "'$<'")' 15 | 16 | thesis: $(main).pdf 17 | 18 | clean: 19 | rm -f *.pdf 20 | 21 | $(main).pdf: $(main).tex $(addsuffix .tex,$(chapters)) $(support) 22 | pdflatex --shell-escape $(main); \ 23 | bibtex $(main) 24 | 25 | $(chapters): %: ch-%.pdf 26 | open $< 27 | osascript -e 'tell the front window of application "Skim" to revert' 28 | 29 | ch-%.pdf: %.tex ch-%.bbl ch-%.aux $(support) 30 | pdflatex --shell-escape --jobname=ch-$* \ 31 | "\includeonly{$*}\input{$(main)}" 32 | 33 | ch-%.bbl: $(main).bbl 34 | cp $(main).bbl ch-$*.bbl 35 | 36 | ch-%.aux: $(main).aux 37 | cp $(main).aux ch-$*.aux 38 | -------------------------------------------------------------------------------- /abstract.tex: -------------------------------------------------------------------------------- 1 | \documentclass[10pt,a4paper]{memoir} 2 | \def\asydir{\jobname} 3 | \usepackage{thesis-preamble} 4 | \usepackage{geometry} 5 | \EndPreamble 6 | \pagestyle{empty} 7 | \def\standaloneabstract{} 8 | \begin{document} 9 | 10 | \ifx\standaloneabstract\undefined 11 | 12 | \section*{Abstract} 13 | 14 | \else 15 | 16 | \noindent {\Large Modelling and design of magnetic levitation systems for vibration isolation} 17 | 18 | \noindent {\scshape Will Robertson} 19 | 20 | \bigskip 21 | 22 | \expandafter\noindent 23 | \fi 24 | \small 25 | Vibration disturbance has a consistent negative impact on equipment and processes. 26 | The central theme of this thesis is the investigation of using permanent magnets in the design of a system for vibration isolation. 27 | 28 | The thesis begins with a comprehensive literature review on the subjects of passive and active vibration isolation, permanent magnetic systems, and the common area between these on nonlinear vibration systems using magnetic forces. 29 | The use of cylindrical and cuboid magnets is the primary focus of this work for which analytical solutions are known for calculating forces and torques. 30 | Subsequently, the state of the art in analytical modelling of permanent magnet systems is covered, including a contribution in this area for calculating the forces between cylindrical~magnets. 31 | 32 | A range of load bearing designs using simple permanent magnet arrangements are examined, with multiple designs suitable for a variety of objectives. 33 | A particular emphasis is placed on a system using inclined magnets, which can exhibit a load-independent resonance frequency. 34 | Load bearing using multipole magnet arrays is also discussed, in which a large number of magnets are used to generate more complex magnetic fields. 35 | A variety of multipole arrays are compared against each other, including linear and planar magnetisation patterns, and an optimisation is performed on a linear array with some resulting guidelines for designing such systems for load bearing. 36 | 37 | Permanent magnet levitation requires either passive or active stabilisation; therefore, the design of electromagnetic actuators for active control is covered with a new efficient method for calculating the forces between a cylindrical magnet and a solenoid. 38 | The optimisation of a solenoid actuator is performed and geometric parameters are found which are near-optimal for a range of operating~conditions. 39 | 40 | Two \qzs/ systems are introduced and analysed next. 41 | These systems are designed with a nonlinearity such that low stiffnesses are achieved while bearing large loads. 42 | The first system analysed is a purely mechanical device using linear springs; unlike most analyses of this design, the horizontal forces are also considered and it is shown that \qzs/ is capable in all translational directions simultaneously. 43 | However, a notable disadvantage of such spring systems is their difficulty in online tuning to adapt to changing operating conditions. 44 | A magnetic \qzs/ system is then analysed in detail and design criteria are introduced, providing a design framework for such systems and showing how the complex interaction of variables affects the resulting dynamic behaviour. 45 | Although the system is nonlinear, the effects of the nonlinearities on the vibration response are shown to be generally negligible. 46 | 47 | The thesis concludes with some experimental results of the same \qzs/ system, constructed as a single degree of freedom prototype. 48 | The quasi-static and dynamic behaviour of the system matches the theory well, and active vibration control is performed to improve the vibration isolation characteristics of the device. 49 | 50 | \normalsize 51 | \end{document} 52 | 53 | -------------------------------------------------------------------------------- /acknowledgements.tex: -------------------------------------------------------------------------------- 1 | %!TEX root = thesis.tex 2 | 3 | \section*{Acknowledgements \& Dedication} 4 | 5 | \begin{quote} 6 | \itshape 7 | Thanks to my supervisors Ben and Anthony, who gave me the freedom to be myself and who inspired me beyond my work. 8 | My appreciation couldn't be greater for the long leash they allowed me. 9 | With stricter guidance I may have finished sooner, but I believe neither I nor this thesis would have been the better for it. 10 | 11 | \medskip 12 | \noindent 13 | This thesis is dedicated to those many with whom I've shared this happy life, especially to those in this time who have come into this strange world and to those who have departed from it. 14 | \end{quote} 15 | -------------------------------------------------------------------------------- /asymptote.sty: -------------------------------------------------------------------------------- 1 | %% 2 | %% This is file `asymptote.sty', 3 | %% generated with the docstrip utility. 4 | %% 5 | %% The original source files were: 6 | %% 7 | %% asy-latex.dtx (with options: `pkg') 8 | %% ____________________________ 9 | %% The ASYMPTOTE package 10 | %% 11 | %% (C) 2003 Tom Prince 12 | %% (C) 2003-2010 John Bowman 13 | %% (C) 2010 Will Robertson 14 | %% 15 | %% Adapted from comment.sty 16 | %% 17 | %% Licence: GPL2+ 18 | %% 19 | \ProvidesPackage{asymptote} 20 | [2011/05/15 v1.24 Asymptote style file for LaTeX] 21 | \def\Asymptote{{\tt Asymptote}} 22 | \InputIfFileExists{\jobname.pre}{}{} 23 | \newbox\ASYbox 24 | \newcounter{asy} 25 | \newwrite\AsyStream 26 | \newwrite\AsyPreStream 27 | \newif\ifASYinline 28 | \newif\ifASYattach 29 | \newif\ifASYkeepAspect 30 | \ASYkeepAspecttrue 31 | \RequirePackage{keyval} 32 | \RequirePackage{ifthen} 33 | \RequirePackage{color,graphicx} 34 | \IfFileExists{ifpdf.sty}{ 35 | \RequirePackage{ifpdf} 36 | }{ 37 | \expandafter\newif\csname ifpdf\endcsname 38 | \ifx\pdfoutput\@undefined\else 39 | \ifcase\pdfoutput\else 40 | \pdftrue 41 | \fi 42 | \fi 43 | } 44 | \IfFileExists{ifxetex.sty}{ 45 | \RequirePackage{ifxetex} 46 | }{ 47 | \expandafter\newif\csname ifxetex\endcsname 48 | \ifx\XeTeXversion\@undefined\else 49 | \xetextrue 50 | \fi 51 | } 52 | \IfFileExists{catchfile.sty}{ 53 | \RequirePackage{catchfile} 54 | }{ 55 | \newcommand\CatchFileDef[3]{% 56 | \begingroup 57 | \everyeof{% 58 | \ENDCATCHFILEMARKER 59 | \noexpand 60 | }% 61 | \long\def\@tempa##1\ENDCATCHFILEMARKER{% 62 | \endgroup 63 | \def#1{##1}% 64 | }% 65 | #3% 66 | \expandafter\@tempa\@@input #2\relax 67 | } 68 | } 69 | \newif\if@asy@attachfile@loaded 70 | \AtBeginDocument{% 71 | \@ifpackageloaded{attachfile2}{\@asy@attachfile@loadedtrue}{}% 72 | \let\asy@check@attachfile\asy@check@attachfile@loaded 73 | } 74 | \newcommand\asy@check@attachfile@loaded{% 75 | \if@asy@attachfile@loaded\else 76 | \PackageError{asymptote}{You must load the attachfile2 package}{^^J% 77 | You have requested the [attach] option for some or all of your^^J% 78 | Asymptote graphics, which requires the attachfile2 package.^^J% 79 | Please load it in the document preamble.^^J% 80 | }% 81 | \fi 82 | } 83 | \newcommand\asy@check@attachfile{% 84 | \AtBeginDocument{\asy@check@attachfile@loaded}% 85 | \let\asy@check@attachfile\@empty 86 | } 87 | \def\csarg#1#2{\expandafter#1\csname#2\endcsname} 88 | \DeclareOption{inline}{% 89 | \ASYinlinetrue 90 | } 91 | \DeclareOption{attach}{% 92 | \asy@check@attachfile 93 | \ASYattachtrue 94 | } 95 | \ProcessOptions* 96 | \def\asydir{} 97 | \def\ASYprefix{} 98 | \newif\ifASYPDF 99 | \ifxetex 100 | \ASYPDFtrue 101 | \else 102 | \ifpdf 103 | \ASYPDFtrue 104 | \fi 105 | \fi 106 | \ifASYPDF 107 | \def\AsyExtension{pdf} 108 | \else 109 | \def\AsyExtension{eps} 110 | \fi 111 | \def\unquoteJobname#1"#2"#3\relax{% 112 | \def\rawJobname{#1}% 113 | \ifx\rawJobname\empty 114 | \def\rawJobname{#2}% 115 | \fi 116 | } 117 | \expandafter\unquoteJobname\jobname""\relax 118 | \def\fixstar#1*#2\relax{% 119 | \def\argtwo{#2}% 120 | \ifx\argtwo\empty 121 | \gdef\Jobname{#1}% 122 | \else 123 | \fixstar#1-#2\relax 124 | \fi 125 | } 126 | \expandafter\fixstar\rawJobname*\relax 127 | \def\Ginclude@eps#1{% 128 | \message{<#1>}% 129 | \bgroup 130 | \def\@tempa{!}% 131 | \dimen@\Gin@req@width 132 | \dimen@ii.1bp\relax 133 | \divide\dimen@\dimen@ii 134 | \@tempdima\Gin@req@height 135 | \divide\@tempdima\dimen@ii 136 | \special{PSfile=#1\space 137 | llx=\Gin@llx\space 138 | lly=\Gin@lly\space 139 | urx=\Gin@urx\space 140 | ury=\Gin@ury\space 141 | \ifx\Gin@scalex\@tempa\else rwi=\number\dimen@\space\fi 142 | \ifx\Gin@scaley\@tempa\else rhi=\number\@tempdima\space\fi 143 | \ifGin@clip clip\fi}% 144 | \egroup 145 | } 146 | \immediate\openout\AsyPreStream=\Jobname.pre\relax 147 | \AtEndDocument{\immediate\closeout\AsyPreStream} 148 | \def\WriteAsyLine#1{% 149 | \immediate\write\AsyStream{\detokenize{#1}}% 150 | } 151 | \def\globalASYdefs{} 152 | \def\WriteGlobalAsyLine#1{% 153 | \expandafter\g@addto@macro 154 | \expandafter\globalASYdefs 155 | \expandafter{\detokenize{#1^^J}}% 156 | } 157 | \def\ProcessAsymptote#1{% 158 | \begingroup 159 | \def\CurrentAsymptote{#1}% 160 | \let\do\@makeother \dospecials 161 | \@makeother\^^L% and whatever other special cases 162 | \catcode`\ =10 163 | \endlinechar`\^^M \catcode`\^^M=12 \xAsymptote 164 | } 165 | \begingroup 166 | \catcode`\^^M=12 \endlinechar=-1\relax% 167 | \gdef\xAsymptote{% 168 | \expandafter\ProcessAsymptoteLine% 169 | } 170 | \gdef\ProcessAsymptoteLine#1^^M{% 171 | \def\@tempa{#1}% 172 | {% 173 | \escapechar=-1\relax% 174 | \xdef\@tempb{\string\\end\string\{\CurrentAsymptote\string\}}% 175 | }% 176 | \ifx\@tempa\@tempb% 177 | \edef\next{\endgroup\noexpand\end{\CurrentAsymptote}}% 178 | \else% 179 | \ThisAsymptote{#1}% 180 | \let\next\ProcessAsymptoteLine% 181 | \fi% 182 | \next% 183 | } 184 | \endgroup 185 | \newcommand\asy[1][]{% 186 | \stepcounter{asy}% 187 | \setkeys{ASYkeys}{#1}% 188 | \ifASYattach 189 | \ASYinlinefalse 190 | \fi 191 | \ifx\asydir\empty\else 192 | \def\ASYprefix{\asydir/}% 193 | \fi 194 | \immediate\write\AsyPreStream{% 195 | \noexpand\InputIfFileExists{% 196 | \ASYprefix\Jobname-\the\c@asy.pre}{}{}% 197 | } 198 | \asy@write@graphic@header 199 | \let\ThisAsymptote\WriteAsyLine 200 | \ProcessAsymptote{asy}% 201 | } 202 | \def\endasy{% 203 | \asy@finalise@stream 204 | \asy@input@graphic 205 | } 206 | \def\asy@write@graphic@header{% 207 | \immediate\openout\AsyStream=\ASYprefix\Jobname-\the\c@asy.asy\relax 208 | \gdef\AsyFile{\ASYprefix\Jobname-\the\c@asy}% 209 | \immediate\write\AsyStream{% 210 | if(!settings.multipleView) settings.batchView=false;^^J% 211 | \ifxetex 212 | settings.tex="xelatex";^^J% 213 | \else\ifASYPDF 214 | settings.tex="pdflatex";^^J% 215 | \fi\fi 216 | \ifASYinline 217 | settings.inlinetex=true;^^J% 218 | deletepreamble();^^J% 219 | \fi 220 | defaultfilename="\Jobname-\the\c@asy";^^J% 221 | if(settings.render < 0) settings.render=4;^^J% 222 | settings.outformat="";^^J% 223 | \ifASYattach 224 | settings.inlineimage=false;^^J% 225 | settings.embed=false;^^J% 226 | settings.toolbar=true;^^J% 227 | \else 228 | settings.inlineimage=true;^^J% 229 | settings.embed=true;^^J% 230 | settings.toolbar=false;^^J% 231 | viewportmargin=(2,2);^^J% 232 | \fi 233 | \globalASYdefs 234 | }% 235 | } 236 | \def\asy@expand@keepAspect{% 237 | \ifASYkeepAspect keepAspect=true% 238 | \else keepAspect=false% 239 | \fi% 240 | } 241 | \def\asy@finalise@stream{% 242 | \ifx\ASYwidth\@empty 243 | \ifx\ASYheight\@empty 244 | % write nothing! 245 | \else 246 | \immediate\write\AsyStream{size(0,\ASYheight,\asy@expand@keepAspect);}% 247 | \fi 248 | \else 249 | \ifx\ASYheight\@empty 250 | \immediate\write\AsyStream{size(\ASYwidth,0,\asy@expand@keepAspect);}% 251 | \else 252 | \immediate\write\AsyStream{size(\ASYwidth,\ASYheight,\asy@expand@keepAspect);}% 253 | \fi 254 | \fi 255 | \edef\ASYviewportwidth{\ASYviewportwidth}% locally "freeze" viewportwidth 256 | \ifx\ASYviewportwidth\@empty 257 | \ifx\ASYviewportheight\@empty 258 | % write nothing! 259 | \else 260 | \immediate\write\AsyStream{viewportsize=(0,\ASYviewportheight);}% 261 | \fi 262 | \else 263 | \ifx\ASYviewportheight\@empty 264 | \immediate\write\AsyStream{viewportsize=(\ASYviewportwidth,0);}% 265 | \else 266 | \immediate\write\AsyStream{% 267 | viewportsize=(\ASYviewportwidth,\ASYviewportheight);}% 268 | \fi 269 | \fi 270 | \immediate\closeout\AsyStream 271 | } 272 | \def\asy@input@graphic{% 273 | \ifASYinline 274 | \IfFileExists{"\AsyFile.tex"}{% 275 | \catcode`:=12\relax 276 | \@@input"\AsyFile.tex"\relax 277 | }{% 278 | \PackageWarning{asymptote}{file `\AsyFile.tex' not found}% 279 | }% 280 | \else 281 | \IfFileExists{"\AsyFile.\AsyExtension"}{% 282 | \ifASYattach 283 | \ifASYPDF 284 | \IfFileExists{"\AsyFile+0.pdf"}{% 285 | \setbox\ASYbox=\hbox{\includegraphics[hiresbb]{"\AsyFile+0".pdf}}% 286 | }{% 287 | \setbox\ASYbox=\hbox{\includegraphics[hiresbb]{"\AsyFile".pdf}}% 288 | }% 289 | \else 290 | \setbox\ASYbox=\hbox{\includegraphics[hiresbb]{"\AsyFile.eps"}}% 291 | \fi 292 | \textattachfile{\AsyFile.\AsyExtension}{\phantom{\copy\ASYbox}}% 293 | \vskip-\ht\ASYbox 294 | \indent 295 | \box\ASYbox 296 | \else 297 | \ifASYPDF 298 | \includegraphics[hiresbb]{"\AsyFile".pdf}% 299 | \else 300 | \includegraphics[hiresbb]{"\AsyFile.eps"}% 301 | \fi 302 | \fi 303 | }{% 304 | \IfFileExists{"\AsyFile.tex"}{% 305 | \catcode`:=12 306 | \@@input"\AsyFile.tex"\relax 307 | }{% 308 | \PackageWarning{asymptote}{% 309 | file `\AsyFile.\AsyExtension' not found% 310 | }% 311 | }% 312 | }% 313 | \fi 314 | } 315 | \def\asydef{% 316 | \let\ThisAsymptote\WriteGlobalAsyLine 317 | \ProcessAsymptote{asydef}% 318 | } 319 | \newcommand\asyinclude[2][]{% 320 | \begingroup 321 | \stepcounter{asy}% 322 | \setkeys{ASYkeys}{#1}% 323 | \ifASYattach 324 | \ASYinlinefalse 325 | \fi 326 | \ifx\asydir\empty\else 327 | \def\ASYprefix{\asydir/}% 328 | \fi 329 | \immediate\write\AsyPreStream{% 330 | \noexpand\InputIfFileExists{% 331 | \ASYprefix\Jobname-\the\c@asy.pre}{}{}% 332 | } 333 | \asy@write@graphic@header 334 | \IfFileExists{#2.asy}{% 335 | \CatchFileDef\@tempa{#2.asy}{% 336 | \let\do\@makeother 337 | \dospecials 338 | \endlinechar=10\relax 339 | } 340 | }{ 341 | \IfFileExists{#2}{% 342 | \CatchFileDef\@tempa{#2}{% 343 | \let\do\@makeother 344 | \dospecials 345 | \endlinechar=10\relax 346 | } 347 | }{ 348 | \PackageWarning{asymptote}{file #2 not found}% 349 | } 350 | } 351 | \immediate\write\AsyStream{\unexpanded\expandafter{\@tempa}}% 352 | \asy@finalise@stream 353 | \asy@input@graphic 354 | \endgroup 355 | } 356 | \newcommand{\ASYanimategraphics}[5][]{% 357 | \IfFileExists{_#3.pdf}{% 358 | \animategraphics[{#1}]{#2}{_#3}{#4}{#5}% 359 | }{} 360 | } 361 | \newcommand\asysetup[1]{\setkeys{ASYkeys}{#1}} 362 | \define@key{ASYkeys}{dir}{% 363 | \def\asydir{#1}% 364 | } 365 | \def\ASYwidth{} 366 | \define@key{ASYkeys}{width}{% 367 | \edef\ASYwidth{\the\dimexpr#1\relax}% 368 | } 369 | \def\ASYheight{} 370 | \define@key{ASYkeys}{height}{% 371 | \edef\ASYheight{\the\dimexpr#1\relax}% 372 | } 373 | \define@key{ASYkeys}{keepAspect}[true]{% 374 | \ifthenelse{\equal{#1}{true}} 375 | {\ASYkeepAspecttrue} 376 | {\ASYkeepAspectfalse}% 377 | } 378 | \def\ASYviewportwidth{\ASYdefaultviewportwidth} 379 | \def\ASYdefaultviewportwidth{% 380 | \ifASYattach \@empty \else \the\linewidth \fi 381 | } 382 | \define@key{ASYkeys}{viewportwidth}{% 383 | \edef\ASYviewportwidth{\the\dimexpr#1\relax}% 384 | } 385 | \def\ASYviewportheight{} 386 | \define@key{ASYkeys}{viewportheight}{% 387 | \edef\ASYviewportheight{\the\dimexpr#1\relax}% 388 | } 389 | \define@key{ASYkeys}{inline}[true]{% 390 | \ifthenelse{\equal{#1}{true}} 391 | {\ASYinlinetrue} 392 | {\ASYinlinefalse}% 393 | } 394 | \define@key{ASYkeys}{attach}[true]{% 395 | \ifthenelse{\equal{#1}{true}} 396 | {\ASYattachtrue} 397 | {\ASYattachfalse}% 398 | } 399 | -------------------------------------------------------------------------------- /coil-design/circle-offset.asy: -------------------------------------------------------------------------------- 1 | 2 | import phdfig; 3 | 4 | size(5cm,5cm); 5 | 6 | // major axes 7 | real X1=-1, X2=7, Y1=-1, Y2=6; 8 | real R2=3, RT=40; 9 | real T1=20, T2=70, TR=R2-1; 10 | 11 | draw((X1,0)--(X2,0),Arrow); 12 | draw((0,Y1)--(0,Y2),Arrow); 13 | draw((0,0)--R2*dir(RT),Arrow); 14 | draw(arc((0,0),TR,T1,T2),Arrow); 15 | label("$x$",(X2,0),E); 16 | label("$y$",(0,Y2),N); 17 | label("$r$",R2*dir(RT),NE); 18 | label("$\phi$",TR*dir(T2),N); 19 | 20 | // circle 21 | pair L=(6,5); 22 | real r=2; 23 | 24 | filldraw(circle(L,r),lightgrey); 25 | 26 | real rO=0.75; 27 | real h=L.y-r-rO; 28 | draw((L.x-r,h)--(L.x+r,h),Arrows(size=4pt)); 29 | label("$2R$",(L.x,h),S); 30 | 31 | // minor axes 32 | real x1=-r-0.5, x2=-x1+0.5, y1=-r-0.5, y2=-y1+0.5; 33 | real r2=r+2, rt=40; 34 | real t1=20, t2=70, tr=r2-1; 35 | 36 | draw(L+(x1,0)--L+(x2,0),Arrow); 37 | draw(L+(0,y1)--L+(0,y2),Arrow); 38 | draw(L--L+r2*dir(rt),Arrow); 39 | draw(arc(L,tr,t1,t2),Arrow); 40 | label("$x'$",L+(x2,0),E); 41 | label("$y'$",L+(0,y2),N); 42 | label("$r'$",L+r2*dir(rt),NE); 43 | label("$\phi'$",L+tr*dir(t2),NE); 44 | 45 | // axis offset 46 | pair AO=(-0.5,-0.5); 47 | draw((AO.x,0)--(AO.x,L.y),Arrows(size=4pt)); 48 | label("$\eta$",(AO.x,0.5*L.y),W); 49 | 50 | draw((0,AO.y)--(L.x,AO.y),Arrows(size=4pt)); 51 | label("$\xi$",(0.5*L.x,AO.y),S); 52 | 53 | // infinitesimal area 54 | real dt1=-40, dr1=0.4*r; 55 | real dt2=dt1+20, dr2=dr1+0.4; 56 | filldraw( 57 | arc(L,dr1,dt1,dt2) 58 | --arc(L,dr2,dt2,dt1) 59 | --cycle,green); 60 | label("$\mathrm{d}a$",L+dr1*dir(dt1),S); 61 | -------------------------------------------------------------------------------- /coil-design/coil-coil.asy: -------------------------------------------------------------------------------- 1 | import solids; 2 | 3 | size(5cm,5cm); 4 | currentprojection=orthographic(5,2,2,up=Y); 5 | currentlight=Viewport; 6 | 7 | real rm = 4, rc=3; 8 | real dz = 6, lm = 4, lc = 3; 9 | real l; 10 | 11 | l= 2; 12 | draw("$r_1$",Z*(dz+lm+l) -- Z*(dz+lm+l)+Y*rm,W,black,Bars3(dir=Z)); 13 | draw("$r_2$",Z*(-l) -- Z*(-l)+Y*rc,E,black,Bars3(dir=Z)); 14 | 15 | l = 1.5; 16 | draw("$h_1$",Z*(dz+lm)-Y*(rm+l) -- Z*(dz)-Y*(rm+l),S,black,Bars3(dir=Y)); 17 | draw("$h_2$",Z*(lc)-Y*(rc+l) -- Z*(0)-Y*(rc+l),S,black,Bars3(dir=Y)); 18 | 19 | l = 1.5; 20 | draw("$z$",Z*(dz+lm/2)+Y*(rm+l)--Z*lc/2+Y*(rm+l),Bars3(dir=Y)); 21 | 22 | revolution r=cylinder(O,rc,lc,Z); 23 | draw(r,black+thick()); 24 | 25 | draw( Z*(dz+lm/2)+cos(pi/6)*Y*rm+sin(pi/6)*X*rm .. 26 | Z*(dz+lm/2)+X*rm .. 27 | Z*(dz+lm/2)-cos(pi/2.5)*Y*rm+sin(pi/2.5)*X*rm , Arrow3 ); 28 | 29 | label("\fontfamily{ptm}\selectfont N",O); 30 | label("\fontfamily{ptm}\selectfont S",Z*lc); 31 | 32 | revolution r=cylinder(dz*Z,rm,lm,Z); 33 | draw(r,black+thick()); 34 | 35 | // Axis: 36 | //draw(O--Z*(dz+lm),dotted); 37 | 38 | 39 | -------------------------------------------------------------------------------- /coil-design/coil-filament.asy: -------------------------------------------------------------------------------- 1 | 2 | settings.prc=false; 3 | settings.render=0; 4 | 5 | import phdfig; 6 | import three; 7 | 8 | size(4cm,4cm); 9 | currentprojection=orthographic(2,2,2,up=Y); 10 | 11 | real Nm = 17, Nr = 2, Nz = 5; 12 | 13 | real rm = 1, rc=2, Rc=2.5; 14 | real dz = 3, lm = 2, lc = 2; 15 | 16 | for (int nm=0; nm <= Nm; ++nm) { 17 | draw(circle((0,0,dz+nm*lm/Nm),rm,normal=Z)); 18 | } 19 | for (int nz=0; nz <= Nz; ++nz) { 20 | for (int nr=0; nr <= Nr; ++nr) { 21 | draw(circle((0,0,nz*lc/Nz),rc+(Rc-rc)*nr/Nr,normal=Z)); 22 | } 23 | } 24 | 25 | -------------------------------------------------------------------------------- /coil-design/coil-mag-equiv.asy: -------------------------------------------------------------------------------- 1 | import solids; 2 | 3 | size(5cm,5cm); 4 | currentprojection=orthographic(5,0,2,up=-X); 5 | currentlight=Viewport; 6 | 7 | real rm = 4, rc=4; 8 | real dz = 0, dy = 10, lm = 4, lc = 4; 9 | real l; 10 | 11 | revolution r=cylinder(O,rc,lc,Z); 12 | draw(r,black+thick()); 13 | 14 | path3 p = Z*(dz+lm/2)+sin(pi/6)*Y*rm+cos(pi/6)*X*rm .. 15 | Z*(dz+lm/2)+X*rm .. 16 | Z*(dz+lm/2)-sin(pi/3)*Y*rm+cos(pi/3)*X*rm; 17 | 18 | draw( shift(Y*dy)*reverse(p) , arrow=Arrow3 , thick() ); 19 | 20 | label("\fontfamily{ptm}\selectfont S",O); 21 | label("\fontfamily{ptm}\selectfont N",Z*lc); 22 | 23 | label("\fontfamily{ptm}\selectfont Magnet",Z*1.8*lc); 24 | label("\fontfamily{ptm}\selectfont Coil",dy*Y+Z*1.8*lc); 25 | 26 | revolution r=cylinder(dy*Y,rm,lm,Z); 27 | draw(r,black+thick()); 28 | 29 | draw("\fontfamily{ptm}\fontsize{9pt}{9pt} $h$",16Y--16Y+Z*lc,Bars3(dir=Y)); 30 | 31 | // Axis: 32 | //draw(O--Z*(dz+lm),dotted); 33 | 34 | 35 | -------------------------------------------------------------------------------- /coil-design/coil-magnet.asy: -------------------------------------------------------------------------------- 1 | 2 | settings.prc=false; 3 | settings.render=0; 4 | 5 | import solids; 6 | 7 | size(4cm,4cm); 8 | currentprojection=orthographic(2,2,2,up=Y); 9 | 10 | real rm = 1, rc=2, Rc=2.5; 11 | real dz = 3, lm = 2, lc = 2; 12 | 13 | 14 | path3 rev=rc*X--rc*X+lc*Z--Rc*X+lc*Z--Rc*X--cycle; 15 | revolution torus=revolution(rev,Z); 16 | draw(surface(torus),lightgreen+opacity(0.5),nolight); 17 | 18 | 19 | revolution r=cylinder(O,Rc,lc,Z); 20 | //draw(surface(r),lightgreen+opacity(0.5),render(merge=true)); 21 | //draw(r,blue); 22 | 23 | revolution r=cylinder(O,rc,lc,Z); 24 | draw(r,black+linewidth(1),black+solid); 25 | 26 | revolution R=cylinder(O,Rc,lc,Z); 27 | draw(R,black+linewidth(1),black+solid); 28 | 29 | revolution r=cylinder(dz*Z,rm,lm,Z); 30 | draw(surface(r),white,nolight,render(merge=true)); 31 | draw(r,black+linewidth(1)); 32 | 33 | //filldraw(project(circle(lc*Z,Rc,Z)^^reverse(circle(lc*Z,rc,Z))),lightgrey); 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /coil-design/coil-schem.asy: -------------------------------------------------------------------------------- 1 | import phdfig; 2 | 3 | texpreamble(" 4 | \providecommand\dispaxial{z} 5 | \providecommand\oradiusMag{r_m} 6 | \providecommand\lengthCoil{L_c} 7 | \providecommand\lengthMag{L_m} 8 | \providecommand\iradiusCoil{r_c} 9 | \providecommand\oradiusCoil{R_c} 10 | \providecommand\turnsZCoil{N_z} 11 | \providecommand\turnsRCoil{N_r} 12 | "); 13 | 14 | size(8cm,8cm); 15 | real as=4pt; 16 | real Lc=14, Lm=12, Lgap=15, Disp=20; 17 | real Rm=5, Ri=7, Ro=12, Rg=Ro-Ri; 18 | real offset=2, vcnt = Ro+2*offset, hcnt=-Lc/2-3*offset; 19 | 20 | draw((0,0)--(0,vcnt),dashed+grey); 21 | draw((Disp,0)--(Disp,vcnt),dashed+grey); 22 | draw((Disp-Lm/2,0)--(hcnt,0),dashdotted+grey); 23 | 24 | coilxo(Ri,Ro,Lc,(0,0)); 25 | magnet2d(Lm,2*Rm,(Disp,0),0,0); 26 | 27 | draw((0,Ro+offset)--(Disp,Ro+offset),Arrow(size=as),L="$\dispaxial$",align=N); 28 | 29 | draw( (Disp+Lm/2+offset,-Rm) -- (Disp+Lm/2+offset,Rm), Arrows(size=as),L="$2\oradiusMag$",align=E ); 30 | 31 | draw( (-Lc/2,-Ro-offset)--(Lc/2,-Ro-offset) , Arrows(size=as),L="$\lengthCoil$",align=S); 32 | draw( (Disp-Lm/2,-Rm-offset)--(Disp+Lm/2,-Rm-offset) , Arrows(size=as),L="$\lengthMag$",align=S); 33 | 34 | draw( (hcnt+2*offset,0)--(hcnt+2*offset,-Ri) , Arrow(size=as), L="$\iradiusCoil$", align=E ); 35 | draw( (hcnt+offset,0)--(hcnt+offset,-Ro) , Arrow(size=as), L="$\oradiusCoil$", align=W ); 36 | 37 | draw( (-Lc/2+Rg/6,-Ri+Rg/6) -- 38 | (-Lc/2+Rg/6,-Ri+2*Rg/6) -- 39 | (+Lc/2-Rg/6,-Ri+2*Rg/6) -- 40 | (+Lc/2-Rg/6,-Ri+Rg/6) 41 | , L="$\turnsZCoil$", align=N 42 | ); 43 | 44 | draw( (+Lc/2+Rg/6, -Ri-Rg/6) -- 45 | (+Lc/2+2*Rg/6,-Ri-Rg/6) -- 46 | (+Lc/2+2*Rg/6,-Ro+Rg/6) -- 47 | (+Lc/2+Rg/6, -Ro+Rg/6) 48 | , L="$\turnsRCoil$", align=E 49 | ); 50 | -------------------------------------------------------------------------------- /coil-design/coil-shell.asy: -------------------------------------------------------------------------------- 1 | 2 | settings.prc=false; 3 | settings.render=0; 4 | 5 | import solids; 6 | 7 | size(4cm,4cm); 8 | currentprojection=orthographic(2,2,2,up=Y); 9 | currentlight=Viewport; 10 | 11 | int Nz = 2; 12 | 13 | real rm = 1, rc=2, Rc=2.5; 14 | real dz = 3, lm = 2, lc = 2; 15 | 16 | 17 | 18 | for (int nz=Nz; nz >= 0; nz=nz-1 ) { 19 | revolution r=cylinder(O,Rc-(Rc-rc)*nz/Nz,lc,Z); 20 | draw(surface(r),red+opacity(0.5),nolight); 21 | draw(r,black+linewidth(0.6),black+solid); 22 | } 23 | 24 | 25 | revolution r=cylinder(dz*Z,rm,lm,Z); 26 | draw(surface(r),white,nolight,render(merge=true)); 27 | draw(r,black+linewidth(0.6),black+solid); 28 | 29 | 30 | -------------------------------------------------------------------------------- /coil-design/dual-coil.asy: -------------------------------------------------------------------------------- 1 | import phdfig; 2 | 3 | size(5cm,5cm); 4 | real Lc=15, Lm=12.7, Lgap=15, Disp=Lc/3+Lgap/3; 5 | real Rm=5, Ri=7, Ro=12; 6 | real offset = 2; 7 | 8 | 9 | draw((0,Ro)--(0,Ro+2*offset),dashed+grey); 10 | draw((0,-Ro)--(0,-Ro-2*offset),dashed+grey); 11 | draw((Disp,Rm)--(Disp,Ro+2*offset),dashed+grey); 12 | draw((Lc+Lgap,Ro)--(Lc+Lgap,Ro+2*offset),dashed+grey); 13 | draw((Lc+Lgap,-Ro)--(Lc+Lgap,-Ro-2*offset),dashed+grey); 14 | 15 | coilxo(Ri, Ro, Lc, (0,0) ); 16 | coilxo(Ri, Ro, Lc, (Lgap+Lc,0) ,swap=true ); 17 | magnet2d(Lm,2*Rm,(Disp,0),0); 18 | 19 | draw((0,-Ro-offset)--(Lgap+Lc,-Ro-offset),Arrows,L="\providecommand\coilDualGap{G}$\coilDualGap$",align=N); 20 | draw((0,Ro+offset)--(Disp,Ro+offset),Arrow,L="$\dispaxial$",align=N); 21 | -------------------------------------------------------------------------------- /conclusion.tex: -------------------------------------------------------------------------------- 1 | 2 | 3 | \documentclass[11pt,a4paper]{memoir} 4 | \def\asydir{\jobname} 5 | \usepackage{thesis-preamble} 6 | \usepackage{geometry} 7 | \EndPreamble 8 | \pagestyle{empty} 9 | \begin{document} 10 | 11 | \chapter{Conclusion} 12 | \chaplabel{conc} 13 | 14 | \referpaper{This chapter consists of a summary of the thesis (\secref*{thesis-summary}) and a list of suggestions for future work (\secref*{future-work}). 15 | The summary presented here complements the detailed concluding remarks for the individual chapters.} 16 | 17 | \section{Thesis summary} 18 | \seclabel{thesis-summary} 19 | 20 | Vibration disturbance from environmental sources is a continual problem. 21 | The work of this thesis has been an investigation into developing magnetic and electromagnetic systems for providing vibration isolation for sensitive equipment. 22 | As this work was cross-disciplinary, a broad literature review was presented on vibration isolations systems, magnetic and electromagnetic devices, and nonlinear \qzs/ structures. 23 | The perceived advantages of \qzs/ for vibration isolation formed an inspiration for the type of magnetic system investigated in this work. 24 | 25 | The modelling of magnetic forces for complex magnet geometries is still an active field of research. 26 | The main contribution in this area from this thesis is the significant simplification of the force equation between coaxial cylindrical magnets (\secref[vref]{cyl-forces}). 27 | The forces between pairs of both cuboid and cylindrical shaped magnets can be calculated from equations from the literature, and since these equations can often be time-consuming to transcribe, a compilation of this theory is provided in a Matlab and Mathematica program which has been made available for use by the general public. 28 | 29 | There are numerous geometric possibilities for permanent magnet systems for load bearing (`magnetic springs', \chapref[vref]{magnet-design}); an overview of such magnetic springs using cuboid magnets was presented. 30 | For single-axis load bearing, magnetic force is maximised for a magnet depth of around \SI{40}{\%} the face size; magnetic cylinders will generate slightly greater forces than square-faced cuboids. 31 | Magnetic systems tend to exhibit significant trade-offs in their force and stiffness characteristics, especially involving degrees of instability. 32 | A rotationally-stable magnetic spring was proposed but initial results from simulation suggest the system is highly sensitive to perturbations and imbalances. 33 | In addition, achieving rotational stability decreases the load-bearing ability of the system. 34 | As more discrete magnets are used in a magnetic spring design, the cross-coupling force--displacement characteristics become increasingly difficult to analyse. 35 | It is suggested that the fewer magnets used to achieve a desired behaviour the more robust and well-characterised the system will be. 36 | 37 | It has been shown that magnetic springs are highly versatile in the design objectives they can achieve. 38 | Three major analyses of different magnetic springs were presented. 39 | The first of these was an inclined magnet spring design proposed to achieve a load-independent resonance frequency (\secref[vref]{oblique}). 40 | Primarily designed for single-axis operation, cross-coupling between axes resulted in planar instability even for positive stiffnesses in each direction. 41 | The study of this instability demonstrated the theoretical complexity of designing such systems. 42 | 43 | The second magnetic study focussed on multipole magnet arrays in various configurations. 44 | For this study, the geometric parameters to define a multipole array were introduced, and the effect of varying these parameters to achieve larger peak forces for a given array volume were presented (\chapref[vref]{multipole}). 45 | Multipole arrays have increased cost involved with fabrication and system design, but provide unique advantages over using discrete magnets. 46 | In particular, the single-sided nature of the magnetic field is an advantage in systems where shielding of the magnetic field is required. 47 | An investigation on linear magnet arrays showed that significant numbers of magnetisation wavelengths are needed to show an appreciable improvement over homogeneous magnets, and the more wavelengthsthat are included the greater the benefit of using an increased number of magnets per wavelenth of magnetisation. 48 | A comparison of linear and planar multipole arrays was performed, and it was shown that the cross-coupling behaviour between horizontal displacement and vertical force differs significantly between the~two. 49 | 50 | The third magnetic study was a theoretical investigation leading into an experimental component. 51 | A preliminary analysis was performed on a \qzs/ system using inclined linear mechanical springs (\secref[vref]{qzszks}) where it was shown that although planar \qzs/ was possible to achieve it required careful tuning. 52 | This was followed by a detailed analysis of the parameters involved in a \qzs/ design with one repulsive and one attractive set of magnet forces (\secref[vref]{qzs}). 53 | 54 | Continuing from the theoretical analysis of the \qzs/ magnetic spring, a one \dof/ prototype was built and low frequency vibration isolation demonstrated (\chapref[vref]{xpmt}). 55 | Experimental measurements demonstrated that the damping induced by eddy currents in the permanent magnets for this system was very low ($\dampingratio<\SI{1}{\%}$), but increased the closer the magnets became. 56 | This damping ratio was negligible compared to the eddy currents induced in the electromagnetic actuator of the system. 57 | Due to this low damping ratio, the resonance peaks for the system were significant, and active control was investigated as a method to improve the transmissibility at resonance. 58 | One major obstacle with improving vibration isolation at these low frequencies is the difficulty with measuring inertial properties, specifically velocity, for performing active feedback control. 59 | 60 | In the construction of the apparatus for the \qzs/ experiments, an electromagnetic actuator was constructed using a dual-coil design. 61 | An optimisation was deemed necessary to reduce the size and cost of constructing such devices. 62 | This required a model of the magnetic forces between a cylindrical magnet and a coil, and a particularly efficient new method for calculating the axial force between a cylindrical magnet and an electromagnetic coil with many radial windings was presented (\secref[vref]{magcoil-theory}). 63 | 64 | The developed method was then used in an optimisation for designing electromagnetic actuators (\secref[vref]{magnetcoil-optimisation}). 65 | In this case, the optimised variable was peak force, and it was shown that optimal geometric parameters can be derived given magnet volume and coil resistance alone. 66 | A wire diameter of around \SI{1.5}{mm} was shown to produce the most efficient actuators, with a cylindrical magnet length to diameter aspect ratio of approximately \num{0.75} and a coil length to diameter aspect ratio of approximately \num{2.5}. 67 | 68 | \section{Future work} 69 | \seclabel{future-work} 70 | 71 | This work leaves open many areas of investigation for the future. 72 | Some of these are highlighted here. 73 | 74 | \subsection{Magnetic forces} 75 | 76 | \begin{enumerate}\itemsep=\medskipamount 77 | \item 78 | While a number of force and torque magnet interaction equations have been published for various geometries, there are still a number of unmodelled scenarios. 79 | Future research in this area should consider consolidating theory for the forces and torques between magnets for additional magnet shapes and under arbitrary poses. 80 | Some examples of unexplored areas of research are: 81 | \begin{enumerate} 82 | \item Forces between cylindrical magnets with rotation around one axis. 83 | \item Forces between cuboid magnets and between cylindrical magnets with arbitrary rotation. 84 | \item Torque between cuboid and cylindrical magnets with rotation. 85 | \item Forces and torques between spherical magnets. 86 | \item Forces and torques between triangular-shaped magnets of various orientations. 87 | \item Force between pairs of differently-shaped magnets (such as the force between one cuboid and one cylindrical magnet). 88 | \end{enumerate} 89 | Development of theory for these scenarios would mean that finite element analysis would not be required to conduct a dynamic simulation with realistic forces and torques of a six degree of freedom electromagnetic system. 90 | 91 | \item 92 | Investigate the non-ideal effects seen with respect to magnet forces; \eg, given some experimental evidence that larger magnets produce magnetic fields with smaller magnitudes than expected, what is the influence between magnet size and ability to create magnetisation homogeneously? 93 | 94 | \item 95 | Similarly, the design of multipole magnet arrays has seen comparatively little experimental validation. 96 | \begin{enumerate} 97 | \item 98 | What are the practical limitations to designing such multipole arrays? 99 | \item 100 | It requires significant computational effort to calculate forces between multipole arrays with large numbers of magnets. Can models for such arrays be reduced to consider only the significant magnet interactions, hence reducing calculation time? 101 | \item 102 | It is expected that their cross-coupling effects will be non-negligible for many applications; can six \dof/ behaviour of such devices be realistically simulated? 103 | \end{enumerate} 104 | 105 | \end{enumerate} 106 | 107 | \subsection{Electromagnetic forces} 108 | 109 | \begin{enumerate} 110 | \item For designing coil actuators, the inductance of the system determines the bandwidth of operation. 111 | This should be included in any optimisation routine; it is suspected this will have significant effects on the suitability of certain geometries in some cases, such as the high-frequency operation of coils designed for maximum force. 112 | 113 | \item An extension on calculating coil forces to include the interaction between curved and straight sections could allow very fast analytic solutions compared to finite element analysis for more complex coil geometries such as `race-track' shapes. 114 | 115 | \item A thermal model could be incorporated into the analysis to ensure specific temperature bounds are not exceeded during dynamic operation. 116 | The development of a multi-physics simulation involving magnetic forces, eddy current forces, induction effects, and thermal effects would provide a powerful tool for electromagnet design. 117 | 118 | \item The `sleeve-coil' electromagnet design analysed in this thesis allows for little off-axis motion. 119 | Further work is necessary to optimise alternate actuator designs, such as `pancake' coils for use in longer-stroke multi-directional actuators. 120 | \end{enumerate} 121 | 122 | \subsection{Vibration control} 123 | 124 | \begin{enumerate} 125 | \item 126 | `Skyhook damping' requires an estimate of the absolute velocity for feedback control. 127 | Integrating accelerometer measurements has limitations at low frequencies due to filters in the charge amplification and the integration technique itself. 128 | Magnetic geophones offer an alternative sensing option and other estimation filters have been presented; to what degree can low-frequency vibration be measured for active control? 129 | 130 | \item 131 | Nonlinear viscous damping elements have been shown to produce results approaching that of the ideal case of skyhook damping. 132 | Can this technique be emulated in practise using a nonlinear active control system? 133 | If so, how do the results compare against a passive nonlinear system? 134 | Finally, what side-effects do the nonlinearities add to the vibration response? 135 | 136 | \item 137 | Is it possible to construct a highly sensitive acceleration sensor based on the motion of a levitating magnet near its \qzs/ position? 138 | \end{enumerate} 139 | 140 | \subsection{\QZS/} 141 | 142 | \begin{enumerate} 143 | \item 144 | The experimental results shown for the \qzs/ magnetic system are for a single \dof/ only, and the constraints imposed on such systems can limit their high-frequency performance (seen for example in friction in linear bearings); a project to extend the \qzs/ system to six \dofs/ is of practical interest and is already under way. 145 | 146 | \item 147 | Load balancing for maintaining \qzs/ and avoiding instability is required for practical application. 148 | This is also being investigated separately in a parallel project. 149 | 150 | \item 151 | Is it possible to design a nonlinear controller to maintain \qzs/ for a magnetic device? 152 | Intuitively, there cannot be a stable system that achieves perfect \qzs/; therefore, what are the limits to which such a system can be bound? 153 | \end{enumerate} 154 | 155 | 156 | \end{document} 157 | -------------------------------------------------------------------------------- /fngp.sty: -------------------------------------------------------------------------------- 1 | 2 | \RequirePackage{xparse} 3 | 4 | \ExplSyntaxOn 5 | 6 | \def\groupstrut{\vphantom{k_g}} 7 | 8 | \DeclareDocumentCommand\gp {o m+} { 9 | \IfNoValueTF {#1} { 10 | \left[ 11 | \groupstrut % manually enlarge the smallest delimiter style 12 | #2 13 | \right] 14 | } { 15 | \csname fngp_#1_l:n\endcsname[ 16 | #2 17 | \csname fngp_#1_r:n\endcsname] 18 | } 19 | } 20 | 21 | \DeclareDocumentCommand\fn {o m+} { 22 | \mathopen{} 23 | \IfNoValueTF {#1} { 24 | \mathclose{ 25 | \left( 26 | #2 27 | \right) 28 | } 29 | } { 30 | \mathclose{ 31 | \csname fngp_#1_l:n\endcsname( 32 | #2 33 | \csname fngp_#1_r:n\endcsname) 34 | } 35 | } 36 | } 37 | 38 | \cs_set_eq:NN \fngp_stretch_l:n \left 39 | \cs_set_eq:NN \fngp_stretch_r:n \right 40 | 41 | \cs_set_eq:NN \fngp_small_l:n \use:n 42 | \cs_set_eq:NN \fngp_small_r:n \use:n 43 | \cs_set_eq:NN \fngp_big_l:n \bigl 44 | \cs_set_eq:NN \fngp_big_r:n \bigr 45 | \cs_set_eq:NN \fngp_Big_l:n \Bigl 46 | \cs_set_eq:NN \fngp_Big_r:n \Bigr 47 | \cs_set_eq:NN \fngp_bigg_l:n \biggl 48 | \cs_set_eq:NN \fngp_bigg_r:n \biggr 49 | \cs_set_eq:NN \fngp_Bigg_l:n \Biggl 50 | \cs_set_eq:NN \fngp_Bigg_r:n \Biggr 51 | 52 | \cs_set_eq:cN {fngp_0_l:n} \use:n 53 | \cs_set_eq:cN {fngp_0_r:n} \use:n 54 | \cs_set_eq:cN {fngp_1_l:n} \bigl 55 | \cs_set_eq:cN {fngp_1_r:n} \bigr 56 | \cs_set_eq:cN {fngp_2_l:n} \Bigl 57 | \cs_set_eq:cN {fngp_2_r:n} \Bigr 58 | \cs_set_eq:cN {fngp_3_l:n} \biggl 59 | \cs_set_eq:cN {fngp_3_r:n} \biggr 60 | \cs_set_eq:cN {fngp_4_l:n} \Biggl 61 | \cs_set_eq:cN {fngp_4_r:n} \Biggr 62 | 63 | \ExplSyntaxOff 64 | -------------------------------------------------------------------------------- /front.tex: -------------------------------------------------------------------------------- 1 | \documentclass[11pt,a4paper]{memoir} 2 | \def\asydir{\jobname} 3 | \usepackage{thesis-preamble} 4 | \EndPreamble 5 | \title{ 6 | Modelling and design of magnetic levitation systems for vibration isolation 7 | } 8 | \begin{document} 9 | 10 | \pagestyle{empty} 11 | \phantomsection 12 | \label{titlepage} 13 | \bookmark[dest=titlepage]{Title page} 14 | \calccentering{\unitlength} 15 | \begin{adjustwidth*}{\unitlength}{-\unitlength} 16 | \setlength{\parindent}{0pt} 17 | 18 | \begin{flushright} 19 | \grf[width=50mm]{Figures/logo}\hspace*{-1cm} 20 | \end{flushright} 21 | 22 | \vfill 23 | 24 | Faculty of Engineering, 25 | Computer and Mathematical Sciences\\ 26 | \textsc{school of mechanical engineering} 27 | 28 | \vfill 29 | 30 | \begin{minipage}{0.97\textwidth} 31 | \Large\raggedright\csname @title\endcsname 32 | \end{minipage} 33 | 34 | \vspace{10mm} 35 | 36 | William Samuel Parker Robertson 37 | 38 | \vfill 39 | \vfill 40 | 41 | \begin{minipage}{0.50\textwidth} 42 | \raggedright 43 | \itshape 44 | A thesis submitted in fulfilment of the\\ requirements for the degree of\\ 45 | Doctor of Philosophy 46 | 47 | \bigskip 48 | November 2013 49 | \end{minipage} 50 | \vfill 51 | 52 | \end{adjustwidth*} 53 | 54 | \clearpage 55 | 56 | \null\vfill 57 | 58 | \begin{center} 59 | 60 | \itshape 61 | 62 | \begin{tabular}{@{}l@{~~}l@{}} 63 | Supervisors: & Assoc.\,Prof.\ Ben Cazzolato \\ 64 | & Assoc.\,Prof.\ Anthony Zander 65 | \end{tabular} 66 | 67 | \bigskip 68 | 69 | Copyright %\textcopyright\ 70 | 2003--2013 Will Robertson 71 | 72 | \bigskip 73 | % Document generated \today\\ 74 | Submission date: August 9, 2013\\ 75 | Amendment date: November 26, 2013 76 | 77 | 78 | \bigskip 79 | School of Mechanical Engineering\\ 80 | The University of Adelaide, 5005\\ 81 | SA, Australia 82 | \end{center} 83 | 84 | \cleardoublepage 85 | 86 | \def\PPP{\unskip~\,\textup\P~\,} 87 | 88 | \section*{Declaration} 89 | 90 | {\centering\begin{minipage}{0.89\textwidth} 91 | \nonfrenchspacing 92 | \parfillskip=0pt 93 | I certify that this work contains no material which has been accepted for the award of any other degree or diploma in any university or other tertiary institution and, to the best of my knowledge and belief, contains no material previously published or written by another person, except where due reference has been made in the text. In addition, I certify that no part of this work will, in the future, be used in a submission for any other degree or diploma in any university or other tertiary institution without the prior approval of the University of Adelaide and where applicable, any partner institution responsible for the joint-award of this degree. 94 | \PPP 95 | I give consent to this copy of my thesis, when deposited in the University Library, being made available for loan and photocopying, subject to the provisions of the Copyright Act 1968. 96 | \PPP 97 | I also give permission for the digital version of my thesis to be made available on the web, via the University’s digital research repository, the Library catalogue and also through web search engines, unless permission has been granted by the University to restrict access for a period of time. 98 | \par 99 | 100 | \vspace*{1cm} 101 | 102 | \hrulefill\hrulefill\hrulefill\hfill\hrulefill\hrulefill 103 | 104 | \noindent\small\textsc{signed}\hfill\textsc{dated} 105 | 106 | \end{minipage}\par} 107 | 108 | 109 | \cleardoublepage 110 | 111 | \section*{Acknowledgements \& Dedication} 112 | 113 | \begin{quote} 114 | \itshape 115 | Thanks to my supervisors Ben and Anthony, who gave me the freedom to be myself and who inspired me beyond my work. 116 | My appreciation couldn't be greater for the long leash they allowed me. 117 | With stricter guidance I may have finished sooner, but I believe neither I nor this thesis would have been the better for it. 118 | 119 | \medskip 120 | \noindent 121 | This thesis is dedicated to those many with whom I've shared this happy life, especially to those in this time who have come into this strange world and to those who have departed from it. 122 | \end{quote} 123 | 124 | 125 | \end{document} 126 | -------------------------------------------------------------------------------- /intro/eddy-h.asy: -------------------------------------------------------------------------------- 1 | 2 | import phdfig; 3 | 4 | unitsize(1cm); 5 | 6 | // major axes 7 | pair massgap = (0,2); 8 | pair blockw = (2,0); 9 | pair blockh = (0,2); 10 | pair condw = (0.2,0); 11 | pair condh = (0,1.8); 12 | pair mag = (1,1); 13 | pair maggap = (0.5,0); 14 | pair arrowgap = (-0.2,0); 15 | pair arrowh = (0,0.7); 16 | pair magdist = massgap+blockh/2+blockw/2+condw+maggap+(mag.x/2,0); 17 | 18 | drawspring(start=(0,0),end=massgap,nospring=0.3,width=0.8,points=5); 19 | 20 | path block = (0,0) -- blockw -- blockw+blockh -- blockh -- cycle; 21 | path cond = (0,0) -- condw -- condw+condh -- condh -- cycle; 22 | path motion = (0,0) -- arrowgap -- arrowgap+arrowh; 23 | 24 | draw(shift(massgap-0.5*blockw)*block); 25 | filldraw(shift(massgap+0.5*blockw+0.5*(blockh-condh))*cond,lightgrey); 26 | draw(shift(massgap+blockh/2-blockw/2)*motion,Arrow); 27 | 28 | magnet2d(mag.x,mag.y,magdist,180); 29 | 30 | drawground(width=1,wlen=0.2); 31 | -------------------------------------------------------------------------------- /intro/eddy-v.asy: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | import phdfig; 5 | 6 | unitsize(1cm); 7 | 8 | // major axes 9 | pair massgap = (0,2); 10 | pair blockw = (2,0); 11 | pair blockh = (0,2); 12 | pair condw = (1.8,0); 13 | pair condh = (0,0.2); 14 | pair mag = (1,1); 15 | pair maggap = (0,0.5); 16 | pair arrowgap = (-0.2,0); 17 | pair arrowh = (0,0.7); 18 | pair magdist = massgap+blockh+condh+maggap+(0,mag.y/2); 19 | 20 | drawspring(start=(0,0),end=massgap,nospring=0.3,width=0.8,points=5); 21 | 22 | path block = (0,0) -- blockw -- blockw+blockh -- blockh -- cycle; 23 | path cond = (0,0) -- condw -- condw+condh -- condh -- cycle; 24 | path motion = (0,0) -- arrowgap -- arrowgap+arrowh; 25 | 26 | draw(shift(massgap-0.5*blockw)*block); 27 | filldraw(shift(massgap+blockh-condw/2)*cond,lightgrey); 28 | draw(shift(massgap+blockh/2-blockw/2)*motion,Arrow); 29 | 30 | magnet2d(mag.x,mag.y,magdist,-90); 31 | 32 | drawground(width=1,wlen=0.2); 33 | -------------------------------------------------------------------------------- /intro/vibration-base.asy: -------------------------------------------------------------------------------- 1 | 2 | import phdfig; 3 | 4 | texpreamble("\ 5 | \providecommand\mass{M} \ 6 | \providecommand\dispBase{x_1} \ 7 | \providecommand\dispMass{x_2} \ 8 | \providecommand\dampingRel{c} \ 9 | \providecommand\dampingAbs{c_{\textrm{sky}}} \ 10 | \providecommand\stiffnessRel{k} \ 11 | \providecommand\forceIn{f} \ 12 | "); 13 | 14 | real w = 5mm, dh = 20mm, sp = 10mm; 15 | 16 | real massh = 7mm, massw = 3sp; 17 | 18 | drawmass( start=(0,-massh), 19 | height=massh, 20 | left=massw/2, 21 | right=massw/2 ); 22 | 23 | drawmotion( start=(massw/2,-massh/2) , 24 | offset=5mm, length=5mm, 25 | label="$\dispBase$" ); 26 | 27 | drawspring((-sp,0),(-sp,dh),width=w,label="$\stiffnessRel$"); 28 | drawdamper((0,0),(0,dh),width=w,label="$\dampingRel$"); 29 | drawinputforce((sp,0),(sp,dh),width=w,label="$\forceIn$",labelpos=E); 30 | 31 | drawmass( start=(0,dh), 32 | height=massh, 33 | left=massw/2, 34 | right=massw/2 , 35 | label="$\mass$"); 36 | drawmotion( start=(massw/2,dh+massh/2) , 37 | offset=5mm, length=5mm, 38 | label="$\dispMass$" ); 39 | -------------------------------------------------------------------------------- /intro/vibration-inertial.asy: -------------------------------------------------------------------------------- 1 | 2 | import phdfig; 3 | 4 | texpreamble("\ 5 | \providecommand\massBase{m_1} \ 6 | \providecommand\massMass{m_2} \ 7 | \providecommand\massAbsorb{m_3} \ 8 | \providecommand\dispBase{x_1} \ 9 | \providecommand\dispMass{x_2} \ 10 | \providecommand\dispAbsorb{x_3} \ 11 | \providecommand\dampingRel{c} \ 12 | \providecommand\dampingAbsorb{c_a} \ 13 | \providecommand\stiffnessRel{k} \ 14 | \providecommand\stiffnessAbsorb{k_a} \ 15 | \providecommand\forceAbsorb{f_a} \ 16 | "); 17 | 18 | real w = 5mm, dh = 20mm, sp = 15mm; 19 | 20 | real massh = 7mm, massw = 3sp; 21 | 22 | drawmass( start=(0,-massh), 23 | height=massh, 24 | left=massw/2, 25 | right=massw/2 , 26 | label=""); 27 | 28 | drawmotion( start=(massw/2,-massh/2) , 29 | offset=5mm, length=5mm, 30 | label="$\dispBase$" ); 31 | 32 | drawspring((-1.5sp/2,0),(-1.5sp/2,dh),width=w,label="$\stiffnessRel$"); 33 | drawdamper((1.5sp/2,0),(1.5sp/2,dh),width=w,label="$\dampingRel$"); 34 | 35 | drawmass( start=(0,dh), 36 | height=massh, 37 | left=massw/2, 38 | right=massw/2 , 39 | label="$\massMass$"); 40 | 41 | drawmotion( start=(massw/2,dh+massh/2) , 42 | offset=5mm, length=5mm, 43 | label="$\dispMass$" ); 44 | 45 | real yabs = 2dh+massh; 46 | 47 | drawspring((-sp,yabs-dh),(-sp,yabs),width=w,label="$\stiffnessAbsorb$"); 48 | drawdamper((0,yabs-dh),(0,yabs),width=w,label="$\dampingAbsorb$"); 49 | drawinputforce((sp,yabs-dh),(sp,yabs),width=w,label="$\forceAbsorb$"); 50 | 51 | drawmass( start=(0,yabs), 52 | height=massh, 53 | left=massw/2, 54 | right=massw/2 , 55 | label="$\massAbsorb$"); 56 | 57 | drawmotion( start=(massw/2,yabs+massh/2) , 58 | offset=5mm, length=5mm, 59 | label="$\dispAbsorb$" ); 60 | 61 | label("\makebox[0pt][r]{Ground}",(-massw/2-3mm,-massh/2),align=E); 62 | label("\makebox[0pt][r]{Mass}",(-massw/2-3mm,dh+massh/2),align=E); 63 | label("\makebox[0pt][r]{Inertial mass}",(-massw/2-3mm,yabs+massh/2),align=E); 64 | -------------------------------------------------------------------------------- /intro/vibration-sdof.asy: -------------------------------------------------------------------------------- 1 | 2 | import phdfig; 3 | 4 | texpreamble("\ 5 | \providecommand\dispMass{x}\ 6 | \providecommand\massMass{m}\ 7 | \providecommand\stiffness{k}\ 8 | \providecommand\damping{c}\ 9 | \providecommand\forceIn{f}\ 10 | \providecommand\forceDisturb{F}\ 11 | "); 12 | 13 | real w = 5mm, dh = 20mm, sp = 10mm; 14 | 15 | drawground( width=3sp ); 16 | drawspring((-sp,0),(-sp,dh),width=w,label="$\stiffness$"); 17 | drawdamper((0,0),(0,dh),width=w,label="$\damping$"); 18 | drawinputforce((sp,0),(sp,dh),width=w,label="$\forceIn$",labelpos=E); 19 | 20 | real massh = 10mm, massw = 3sp; 21 | drawmass( start=(0,dh), 22 | height=massh, 23 | left=massw/2, 24 | right=massw/2 , 25 | label="$\massMass$"); 26 | 27 | drawmotion( start=(massw/2,dh+massh/2) , 28 | offset=5mm, length=5mm, 29 | label="$\dispMass$" ); 30 | 31 | draw((0,dh+massh+7mm)--(0,dh+massh),Arrow); 32 | label("$\forceDisturb$",(0,dh+massh+7mm),E); 33 | -------------------------------------------------------------------------------- /magnet-design/choi-spring.asy: -------------------------------------------------------------------------------- 1 | 2 | import phdfig; 3 | 4 | texpreamble(" 5 | \providecommand\forceVec{\mathbf F} 6 | \providecommand\dispvert{z} 7 | \providecommand\choiGap{l} 8 | "); 9 | 10 | unitsize(1cm); 11 | 12 | real a= 1, b=a, d = 2.5, g = 0.75; 13 | real as = 4pt; 14 | 15 | real tmpL; 16 | pair tmpa,tmpb,tmpc,tmpd,tmpSE,tmpNE,tmpSW,tmpNW ; 17 | 18 | // base magnets 19 | 20 | magnet2d(a,a,(g/2+a/2,0),90); 21 | drawground(width=b,origin=(g/2+a/2,-a/2),wlen=0.2); 22 | 23 | magnet2d(a,a,(-g/2-a/2,0),90); 24 | drawground(width=b,origin=(-g/2-a/2,-a/2),wlen=0.2); 25 | 26 | // floating magnet 27 | 28 | magnet2d(a,a,(0,d),-90); 29 | 30 | // dimensions 31 | 32 | pair tmpa = (a+g/2+0.1,a/2); 33 | draw(tmpa--tmpa+(0,d-2a),Arrow(size=as),L="$\az$",align=4N); 34 | draw(tmpa--tmpa+(d-2a,0),Arrow(size=as),L="$\ax$",align=4E); 35 | 36 | tmpa = (0,d+a/2+0.1); 37 | draw(tmpa--tmpa+(0,0.6),Arrow(size=2as),L=Label(L="$\forceVec$",position=EndPoint),align=NE); 38 | 39 | draw( (-g/2 ,a/2+0.1) -- (g/2, a/2+0.1) , Arrows(size=as),L="$\choiGap$",align=N); 40 | 41 | real X = 0.4; 42 | draw( (-g/2-a-2X,0)--(-g/2-a,0) , p=dashed ); 43 | draw( (-g/2-a-2X,d)--(-a/2,d) , p=dashed ); 44 | draw( (-g/2-a-X,0)--(-g/2-a-X,d) , Arrow(size=as) , L="$\dispvert$", align=W); 45 | -------------------------------------------------------------------------------- /magnet-design/coupling.asy: -------------------------------------------------------------------------------- 1 | 2 | import phdfig; 3 | 4 | texpreamble(" 5 | \providecommand\disturb{s} 6 | \providecommand\dispvert{z} 7 | \providecommand\disphoriz{y} 8 | "); 9 | 10 | unitsize(1cm); 11 | 12 | real m=1; 13 | real A=0.8; 14 | 15 | pair O = (0,0); 16 | pair mx=(m,0); 17 | pair my=(0,m); 18 | 19 | pair hgap = (2.5,0); 20 | pair vgap = (0,2.5); 21 | pair arr = (1.5,0); 22 | pair arrv = (0,-0.25); 23 | pair v = (0,-0.5); 24 | 25 | // lower magnet 26 | magnet2d(m,m,-vgap,90); 27 | 28 | // floating magnet 29 | magnet2d(m,m,v,-90); 30 | 31 | draw( shift(-mx-mx/2-my/2) * ( O -- mx ) , dashed ); 32 | draw( shift(-my/2-vgap) * ( O -- -my ) , dashed ); 33 | draw( ( O -- my ) , dashed ); 34 | 35 | draw( shift(-mx-my/2) * ( O -- (0,A) ), Arrow(size=6pt),L="$\dispvert$",align=W); 36 | draw( shift(-my-vgap) * ( O -- (A,0) ), Arrow(size=6pt),L="$\disturb$"); 37 | draw( shift(my/2) * ( O -- (A,0) ), Arrow(size=6pt),L="$\disphoriz$",align=N); 38 | 39 | // axes 40 | pair aoff = -hgap+(0,-2); 41 | real xx = 0.5; 42 | real zz = 0.5; 43 | draw(shift(aoff)*((xx,0)--(0,0)--(0,zz)),Arrows(size=4pt)); 44 | label("$\ay$",aoff+(xx,0),SE); 45 | label("$\az$",aoff+(0,zz),NE); 46 | -------------------------------------------------------------------------------- /magnet-design/equal-area.asy: -------------------------------------------------------------------------------- 1 | 2 | import phdfig; 3 | texpreamble("\providecommand\radiusMag{r}"); 4 | 5 | size(0,3cm); 6 | 7 | real sqrtpi = 1.77245; 8 | real radius = 1; 9 | real halfsidelength = sqrtpi*radius/2; 10 | real offset = halfsidelength + 0.3; 11 | 12 | draw(box((-halfsidelength,-halfsidelength),(halfsidelength,halfsidelength))); 13 | draw((0,radius)..(radius,0)..(0,-radius)..(-radius,0)..cycle); 14 | 15 | draw((-offset,radius)--(-offset,-radius),Arrows(5pt)); 16 | label("$2\radiusMag$",(-offset,0),W); 17 | 18 | draw((offset,halfsidelength)--(offset,-halfsidelength),Arrows(5pt)); 19 | label("$\faceCub=\radiusMag\sqrt{\pi}$",(offset,0),E); 20 | 21 | 22 | -------------------------------------------------------------------------------- /magnet-design/magratio.asy: -------------------------------------------------------------------------------- 1 | 2 | import phdfig; 3 | 4 | texpreamble(" 5 | \providecommand\displ{z}\providecommand\faceCub{b}\providecommand\lengthCub{a} 6 | "); 7 | 8 | size(4cm); 9 | 10 | real a = 0.6, b = 1, d = 1.5; 11 | real as = 4pt; 12 | 13 | real tmpL; 14 | pair tmpa,tmpb,tmpc,tmpd,tmpSE,tmpNE,tmpSW,tmpNW ; 15 | 16 | // base magnet 17 | 18 | magnet2d(b,a,(0,0),90); 19 | drawground(width=b,origin=(0,-a/2),wlen=0.1); 20 | 21 | // float magnet 22 | 23 | magnet2d(b,a,(0,d),-90); 24 | 25 | // directions 26 | 27 | pair tmpa = (b/2+0.05,a/2); 28 | draw(tmpa--tmpa+(0.25,0)); 29 | draw(tmpa+(0.25,0)--tmpa+(0.25,d-a),Arrow(size=as),L="$\displ$",align=NE); 30 | 31 | tmpa = (0,d+a/2+0.05); 32 | draw(tmpa--tmpa+(0,0.4),Arrow(size=as),L="$F$",align=NE); 33 | 34 | // labels 35 | 36 | tmpa = (0,d-a/2-0.2); 37 | draw(tmpa-(b/2,0)--tmpa+(b/2,0),Arrows(size=as),L="$\faceCub$",align=S); 38 | 39 | tmpa = (-b/2-0.2,d); 40 | draw(tmpa-(0,a/2)--tmpa+(0,a/2),Arrows(size=as),L="$\lengthCub$",align=W); 41 | -------------------------------------------------------------------------------- /magnet-design/magrotate-schem.asy: -------------------------------------------------------------------------------- 1 | 2 | import phdfig; 3 | 4 | texpreamble(" 5 | \providecommand\magnetGap{G} 6 | \providecommand\springDepth{d} 7 | \providecommand\lengthCube{c} 8 | \providecommand\leverArm{l} 9 | "); 10 | 11 | size(6cm); 12 | 13 | real as = 4pt; // arrowheads 14 | 15 | pair z; 16 | path p; 17 | 18 | real w1 = 5, w2 = 15; 19 | real d1 = 10, d2 = 10; 20 | real s1 = 4, s2 = 3; 21 | real g = 5, g2 = 5; 22 | 23 | 24 | // real laxis = 5; 25 | // draw( (laxis,0) -- (0,0) -- (0,laxis) , Arrows); 26 | // label("$x$",(laxis,0),align=SE); 27 | // label("$y$",(0,laxis),align=NW); 28 | 29 | draw( (0, d2+w1) -- (0, -w1) , dashdotted); 30 | draw( (-w1,0) -- (w1+w2+s2/2, 0) , dashdotted); 31 | 32 | draw( (0, d2) -- ( w2+s2/2, d2) -- (w2+s2/2, 0) ); 33 | 34 | 35 | magnet2d(s1,s1,dist=(w1 , d1-s1/2), 90); 36 | magnet2d(s1,s1,(w1 , d1+g+s1/2), 90); 37 | drawground(width=s1,origin=( w1,d1+g+s1),wlen=1,angle=180); 38 | 39 | magnet2d(s2,s2,( w2, d2-s2/2), 90); 40 | magnet2d(s2,s2,( w2, d2+g+s2/2),-90); 41 | drawground(width=s2,origin=( w2, d2+g+s2),wlen=1,angle=180,whiskers=7); 42 | 43 | // widths 44 | 45 | z = (0,-2); 46 | p = (0,0) -- (w1,0); 47 | draw( shift(z)*p , Arrows(size=as) , L="$\leverArm_1$", align=S); 48 | 49 | z = (0,-4.5); 50 | p = (0,0) -- (w2,0); 51 | draw( shift(z)*p , Arrows(size=as) , L="$\leverArm_2$", align=S); 52 | 53 | // heights 54 | 55 | z = (-2,0); 56 | p = (0,0) -- (0,d1); 57 | draw( shift(z)*p , Arrows(size=as) , L="$\springDepth$", align=W); 58 | 59 | z = (-2,d1); 60 | p = (0,0) -- (0,g); 61 | draw( shift(z)*p , Arrows(size=as) , L="$\magnetGap$", align=W); 62 | 63 | // msizes 64 | 65 | z = (w1-s1/2,d1-s1-1); 66 | p = (0,0) -- (s1,0); 67 | draw( shift(z)*p , Arrows(size=as) , L="$\lengthCube_1$", align=S); 68 | 69 | z = (w2-s2/2,d2-s2-1); 70 | p = (0,0) -- (s2,0); 71 | draw( shift(z)*p , Arrows(size=as) , L="$\lengthCube_2$", align=S); 72 | 73 | z = (w1+s1/2+1,d1-s1); 74 | p = (0,0) -- (0,s1); 75 | draw( shift(z)*p , Arrows(size=as) , L="$\lengthCube_1$", align=E); 76 | 77 | z = (w2+s2/2+1,d2-s2); 78 | p = (0,0) -- (0,s2); 79 | draw( shift(z)*p , Arrows(size=as) , L="$\lengthCube_2$", align=E); 80 | 81 | 82 | // axes 83 | 84 | pair aoff = (-8,-5); 85 | real xx = 3; 86 | real zz = 3; 87 | draw(shift(aoff)*((xx,0)--(0,0)--(0,zz)),Arrows(size=4pt)); 88 | label("$\ax$",aoff+(xx,0),SE); 89 | label("$\ay$",aoff+(0,zz),NE); 90 | -------------------------------------------------------------------------------- /magnet-design/oblique.asy: -------------------------------------------------------------------------------- 1 | 2 | import phdfig; 3 | 4 | texpreamble(" 5 | \providecommand\mbqforce{f} 6 | \providecommand\mbqmagw{w} 7 | \providecommand\mbqmagh{h} 8 | \providecommand\mbqvdisp{v} 9 | \providecommand\mbqmagangle{\theta} 10 | \providecommand\mbqoffset{o} 11 | "); 12 | 13 | size(7cm); 14 | 15 | real T = 40, TT = 180-T; 16 | real a = 0.6, b = 1, g = 0.9, d = 2, dy = d*Cos(T), G = 3.2; 17 | 18 | real as = 4pt; 19 | 20 | real tmpL; 21 | pair tmpa,tmpb,tmpc,tmpd,tmpSE,tmpNE,tmpSW,tmpNW ; 22 | 23 | // base magnets 24 | 25 | magnet2d(a,b,(0,0),0, magrotate=T); 26 | tmpSE = rotate(T)*(-a/2,-b/2); 27 | tmpSW = rotate(T)*(-a/2,b/2); 28 | drawgroundwhiskers( 29 | width=b, angle=-90+T, 30 | origin=(0,0)+(tmpSE+tmpSW)/2, 31 | wlen=0.1); 32 | 33 | magnet2d(a,b,(G,0),0, magrotate=TT); 34 | tmpSE = rotate(TT)*(-a/2,-b/2); 35 | tmpSW = rotate(TT)*(-a/2,b/2); 36 | drawgroundwhiskers( 37 | width=b, angle=-90+TT, 38 | origin=(G,0)+(tmpSE+tmpSW)/2, 39 | wlen=0.1); 40 | 41 | tmpa = rotate(T)*(a/2,0)+(0,0); 42 | tmpb = rotate(TT)*(a/2,0)+(G,0); 43 | pair disporigin = tmpa; 44 | draw(tmpa--tmpb,dashed); 45 | 46 | // angle label 47 | 48 | tmpL = 1; 49 | tmpSE = rotate(T)*(-a/2,-b/2); // bottom of left base magnet 50 | 51 | tmpa = tmpSE+(tmpL,0); 52 | tmpb = tmpSE+rotate(T)*(tmpL,0); 53 | 54 | draw(tmpSE--tmpa,dashed); 55 | draw(tmpSE--tmpb,dashed); 56 | 57 | draw(tmpa{N}..tmpb,L="$\mbqmagangle$",Arrow(size=as),align=(-1,-0.2)); 58 | 59 | // float magnets 60 | 61 | magnet2d(a,b,(g,dy),180, magrotate=T); 62 | magnet2d(a,b,(G,0)+(-g,dy),180, magrotate=TT); 63 | 64 | tmpa = rotate(T)*(a/2,-b/2)+(g,dy); 65 | tmpb = rotate(TT)*(a/2,b/2)+(G-g,dy); 66 | draw(tmpa--tmpb); 67 | 68 | tmpa = rotate(T)*(a/2,b/2)+(g,dy); 69 | tmpb = rotate(TT)*(a/2,-b/2)+(G-g,dy); 70 | draw(tmpa--tmpb); 71 | 72 | tmpc = 0.5(tmpa+tmpb); 73 | dot(tmpc); 74 | draw(tmpc--tmpc+(0,0.5),L="$\mbqforce$",NE,Arrow(size=as)); 75 | 76 | // mag labels 77 | 78 | tmpL = 0.2; 79 | tmpNE = rotate(TT)*(-a/2-tmpL,b/2)+(G-g,dy); 80 | tmpNW = rotate(TT)*(-a/2-tmpL,-b/2)+(G-g,dy); 81 | draw(tmpNW--tmpNE,L="$\mbqmagw$",SE,Arrows(size=as)); 82 | 83 | tmpSW = rotate(TT)*(a/2,-b/2-tmpL)+(G-g,dy); 84 | tmpNW = rotate(TT)*(-a/2,-b/2-tmpL)+(G-g,dy); 85 | draw(tmpNW--tmpSW,L="$\mbqmagh$",NE,Arrows(size=as)); 86 | 87 | // disp labels 88 | 89 | tmpNE = rotate(T)*(-a/2,b/2)+(g,dy); 90 | tmpNW = rotate(T)*(-a/2,-b/2)+(g,dy); 91 | 92 | tmpc = (tmpNW+tmpNE)/2; 93 | tmpd = (disporigin.x,tmpc.y); 94 | draw((tmpc.x,disporigin.y)--tmpc,L="$\mbqvdisp$",E,Arrow(size=as)); 95 | draw((tmpc.x,disporigin.y)--disporigin,L="$\mbqoffset$",N,Arrow(size=as)); 96 | 97 | // axes 98 | 99 | pair O = (3.5,1.25); 100 | real o = 1; 101 | draw(O--O+(0,o),L="$\ay$",2NE,Arrow); 102 | draw(O--O+(o,0),L="$\ax$",SSE,Arrow); 103 | -------------------------------------------------------------------------------- /magnet-design/rot-couple.asy: -------------------------------------------------------------------------------- 1 | 2 | import phdfig; 3 | 4 | unitsize(1cm); 5 | 6 | real m=1; 7 | pair mx=(m,0); 8 | pair my=(0,m); 9 | 10 | pair hgap = (2.5,0); 11 | pair vgap = (0,3); 12 | pair arr = (1.2,0); 13 | pair v = (0,-0.5); 14 | 15 | // axes 16 | pair aoff = -hgap-vgap; 17 | real xx = 0.5; 18 | real zz = 0.5; 19 | draw(shift(aoff)*((xx,0)--(0,0)--(0,zz)),Arrows(size=4pt)); 20 | label("$\ax$",aoff+(xx,0),SE); 21 | label("$\az$",aoff+(0,zz),NE); 22 | 23 | aoff = aoff+(0,1.5); 24 | draw( shift(aoff)*( scale(1/5)*( (1,-1)..(-1,-1)..(-1,1)..(1,1) ) ), Arrow ); 25 | label("+",aoff); 26 | 27 | // base magnet 28 | magnet2d(m,m,-vgap,90); 29 | drawground(width=m,wlen=0.2,origin=-vgap-my/2,angle=0,whiskers=7); 30 | 31 | // floating magnet 32 | magnet2d(m,m,v,-90); 33 | 34 | draw( my/2+v-- my/2+v+(0,1.2), Arrow,L="$F_m$",align=W+NW); 35 | draw( -my/2+v-- -my/2+v-(0,1.2), Arrow,L="$F_g$",align=W+SW); 36 | 37 | draw( shift( (0.2,0) )*(v+(0,1)..v+(1,0)..v+(0,-1)) , arrow=Arrow, L="Unstable",align=NE); 38 | 39 | 40 | ////////////////// 41 | 42 | pair S = (4,0); 43 | pair s = (5,0); 44 | 45 | // base magnets 46 | magnet2d(m,m,S-vgap,90); 47 | drawground(width=m,wlen=0.2,origin=S-vgap-my/2,angle=0,whiskers=7); 48 | magnet2d(m,m,S+s-vgap,90); 49 | drawground(width=m,wlen=0.2,origin=S+s-vgap-my/2,angle=0,whiskers=7); 50 | 51 | // floating magnet 52 | pair h = (0,2); 53 | magnet2d(m,m,S+v,-90); 54 | magnet2d(m,m,S+s+v,-90); 55 | 56 | // coupling 57 | draw( S+v+my/2 -- S+v+h -- S+s+v+h -- S+s+v+my/2, p=linewidth(2)); 58 | dot( S+s/2+h+v ,p=linewidth(5)); 59 | draw( S+s/2+h+v -- S+s/2+h+v-(0,1.2) , Arrow, L="$F_g$",align=W+SW); 60 | 61 | draw( -my/2+S+v-(0,1.2) -- -my/2+S+v , Arrow,L="$F_m$",align=W+SW); 62 | draw( -my/2+S+s+v-(0,1.2) -- -my/2+S+s+v , Arrow,L="$F_m$",align=W+SW); 63 | 64 | draw( shift( S+s/2+h+(0.1,0) )*(v+(0,-1)..v+(1,0)..v+(0,1)) , arrow=Arrow); 65 | label("Stable",S+s/2+h+v+(0.5,1),align=NE); 66 | 67 | -------------------------------------------------------------------------------- /magnet-design/spring-ha.asy: -------------------------------------------------------------------------------- 1 | 2 | import phdfig; 3 | 4 | texpreamble(" 5 | \providecommand\lengthCube{c} 6 | \providecommand\magnetGap{G} 7 | "); 8 | 9 | unitsize(1cm); 10 | 11 | real m=1; 12 | pair mx=(m,0); 13 | pair my=(0,m); 14 | 15 | pair hgap = (2.5,0); 16 | pair arr = (1.5,0); 17 | pair arrv = (0,-0.25); 18 | pair v = (0,-0.5); 19 | 20 | // side magnet 21 | magnet2d(m,m, hgap,90); 22 | magnet2d(m,m,-hgap,90); 23 | drawground(width=m,wlen=0.2,origin= hgap-(0,m/2),angle=0,whiskers=7); 24 | drawground(width=m,wlen=0.2,origin=-hgap-(0,m/2),angle=0,whiskers=7); 25 | 26 | // floating magnet 27 | magnet2d(m,m,v,-90); 28 | 29 | draw(-mx/2+v-- -arr+arrv, Arrow(size=6pt)); 30 | draw( mx/2+v-- arr+arrv, Arrow(size=6pt)); 31 | draw( shift(0,0.75)*( -mx/2 -- mx/2 ) , Arrows(size=4pt) , L="$\lengthCube$" , align=N ); 32 | draw( shift(0,0.75)*( -mx/2 -- -hgap+mx/2 ) , Arrows(size=4pt) , L="$\magnetGap$" ); 33 | 34 | // axes 35 | pair aoff = -hgap+(0,-2); 36 | real xx = 0.5; 37 | real zz = 0.5; 38 | draw(shift(aoff)*((xx,0)--(0,0)--(0,zz)),Arrows(size=4pt)); 39 | label("$\ax$",aoff+(xx,0),SE); 40 | label("$\az$",aoff+(0,zz),NE); 41 | -------------------------------------------------------------------------------- /magnet-design/spring-hv.asy: -------------------------------------------------------------------------------- 1 | 2 | import phdfig; 3 | 4 | unitsize(1cm); 5 | 6 | real m=1; 7 | pair mx=(m,0); 8 | pair my=(0,m); 9 | 10 | pair hgap = (2.5,0); 11 | pair vgap = (0,2.5); 12 | pair arr = (1.5,0); 13 | pair arrv = (0,-0.25); 14 | pair v = (0,-0.5); 15 | 16 | // side magnet 17 | magnet2d(m,m, hgap,90); 18 | drawground(width=m,wlen=0.2,origin= hgap-my/2,angle=0,whiskers=7); 19 | 20 | magnet2d(m,m,-hgap,90); 21 | drawground(width=m,wlen=0.2,origin=-hgap-my/2,angle=0,whiskers=7); 22 | 23 | magnet2d(m,m,-vgap,90); 24 | drawground(width=m,wlen=0.2,origin=-vgap-my/2,angle=0,whiskers=7); 25 | 26 | // floating magnet 27 | magnet2d(m,m,v,-90); 28 | 29 | draw(-mx/2+v-- -arr+arrv, Arrow(size=6pt)); 30 | draw( mx/2+v-- arr+arrv, Arrow(size=6pt)); 31 | draw( my/2+v-- my/2+v+(0,1.2), Arrow(size=6pt)); 32 | 33 | // axes 34 | pair aoff = -hgap+(0,-2); 35 | real xx = 0.5; 36 | real zz = 0.5; 37 | draw(shift(aoff)*((xx,0)--(0,0)--(0,zz)),Arrows(size=4pt)); 38 | label("$\ax$",aoff+(xx,0),SE); 39 | label("$\az$",aoff+(0,zz),NE); 40 | -------------------------------------------------------------------------------- /magnet-design/spring-zhv.asy: -------------------------------------------------------------------------------- 1 | 2 | import phdfig; 3 | 4 | unitsize(1cm); 5 | 6 | real m=1; 7 | pair mx=(m,0); 8 | pair my=(0,m); 9 | 10 | pair hgap = (2.5,0); 11 | pair vgap = (0,2.5); 12 | pair arr = (1.5,0); 13 | pair arrv = (0,-0.25); 14 | pair v = (0,-0.5); 15 | 16 | // side magnet 17 | magnet2d(m,m, hgap,90); 18 | drawground(width=m,wlen=0.2,origin= hgap-my/2,angle=0,whiskers=7); 19 | 20 | magnet2d(m,m,-hgap,90); 21 | drawground(width=m,wlen=0.2,origin=-hgap-my/2,angle=0,whiskers=7); 22 | 23 | magnet2d(m,m,-vgap,90); 24 | drawground(width=m,wlen=0.2,origin=-vgap-my/2,angle=0,whiskers=7); 25 | 26 | magnet2d(m,m, vgap,-90); 27 | drawground(width=m,wlen=0.2,origin= vgap+my/2,angle=180,whiskers=7); 28 | 29 | // floating magnet 30 | magnet2d(m,m,v,-90); 31 | 32 | draw(-mx/2+v-- -arr+arrv, Arrow(size=6pt)); 33 | draw( mx/2+v-- arr+arrv, Arrow(size=6pt)); 34 | draw( my/2+v-- my/2+v+(0,1.2), Arrow(size=6pt)); 35 | 36 | real lbl = 1; 37 | draw( hgap+vgap+(0,lbl) -- vgap+(0,lbl) , L="$l_x$", Arrows(size=4pt), align=N); 38 | draw( -hgap+vgap+(0,lbl) -- vgap+(0,lbl) , L="$l_x$", Arrows(size=4pt), align=N); 39 | 40 | draw( hgap+vgap+(lbl,0) -- hgap+(lbl,0) , L="$l_z$", Arrows(size=4pt), align=E); 41 | draw( hgap-vgap+(lbl,0) -- hgap+(lbl,0) , L="$l_z$", Arrows(size=4pt), align=E); 42 | 43 | // axes 44 | pair aoff = -hgap-vgap; 45 | real xx = 0.5; 46 | real zz = 0.5; 47 | draw(shift(aoff)*((xx,0)--(0,0)--(0,zz)),Arrows(size=4pt)); 48 | label("$\ax$",aoff+(xx,0),SE); 49 | label("$\az$",aoff+(0,zz),NE); 50 | -------------------------------------------------------------------------------- /magnet-design/spring-zk3.asy: -------------------------------------------------------------------------------- 1 | 2 | import phdfig; 3 | 4 | unitsize(1cm); 5 | 6 | real m=1; 7 | pair mx=(m,0); 8 | pair my=(0,m); 9 | 10 | 11 | real M = -4; 12 | real L = -1.5; 13 | real D = 1.5; 14 | real U = 3.5; 15 | pair arr = (0,0.75); 16 | 17 | pair fixb=(M,0); 18 | pair fixu=(M,U); 19 | pair fleq=(M,D); 20 | pair xo; 21 | pair xoo=(-0.5,0); 22 | pair out=(0.5,0); 23 | 24 | // middle 25 | xo = (fixb+fixu)/2; 26 | 27 | // floating magnet 28 | magnet2d(m,m,fleq,-90); 29 | draw(fleq+mx/2--fleq+mx/2+2*out,dashed); 30 | 31 | // top magnet 32 | magnet2d(m,m,fixu,-90); 33 | drawground(width=m,wlen=0.2,origin=fixu+(0,m/2),angle=180,whiskers=7); 34 | 35 | // labels 36 | draw(shift(mx/2+out)*(fleq--fleq+arr),Arrow(size=6pt)); 37 | label("Unstable",(M,L)); 38 | 39 | 40 | M = 0; 41 | pair fixb=(M,0); 42 | pair fixu=(M,U); 43 | pair fleq=(M,D); 44 | 45 | // middle 46 | xo = (fixb+fixu)/2; 47 | 48 | // floating magnet 49 | magnet2d(m,m,fleq,-90); 50 | draw(fleq+mx/2--fleq+mx/2+2*out,dashed); 51 | 52 | // bottom magnet 53 | magnet2d(m,m,fixb,90); 54 | drawground(width=m,wlen=0.2,origin=-my/2,whiskers=7); 55 | 56 | draw(shift(mx/2+out)*(fleq--fleq+arr),Arrow(size=6pt)); 57 | label("Stable",(M,L)); 58 | 59 | 60 | 61 | 62 | 63 | 64 | M = 4; 65 | pair fixb=(M,0); 66 | pair fixu=(M,U); 67 | pair fleq=(M,D); 68 | 69 | // middle 70 | xo = (fixb+fixu)/2; 71 | 72 | // floating magnet 73 | magnet2d(m,m,fleq,-90); 74 | draw(fleq+mx/2--fleq+mx/2+2*out,dashed); 75 | 76 | // bottom magnet 77 | magnet2d(m,m,fixb,90); 78 | drawground(width=m,wlen=0.2,origin=fixb-my/2,whiskers=7); 79 | 80 | // top magnet 81 | magnet2d(m,m,fixu,-90); 82 | drawground(width=m,wlen=0.2,origin=fixu+(0,m/2),angle=180,whiskers=7); 83 | 84 | draw(shift(mx/2+out)*(fleq--fleq+arr),Arrow(size=6pt)); 85 | label("Quasi--zero stiffness",(M,L)); 86 | 87 | 88 | 89 | // axis 90 | 91 | pair aoff = (-4,0)-my/2; 92 | real xx = 0.5; 93 | real zz = 0.5; 94 | draw(shift(aoff)*((xx,0)--(0,0)--(0,zz)),Arrows(size=4pt)); 95 | label("$\ax$",aoff+(xx,0),SE); 96 | label("$\az$",aoff+(0,zz),NE); 97 | -------------------------------------------------------------------------------- /magnet-design/twomagdir.asy: -------------------------------------------------------------------------------- 1 | 2 | import phdfig; 3 | 4 | size(5cm); 5 | 6 | real a = 1, b = 1, d = 2.5; 7 | real as = 4pt; 8 | 9 | real tmpL; 10 | pair tmpa,tmpb,tmpc,tmpd,tmpSE,tmpNE,tmpSW,tmpNW ; 11 | 12 | // base magnet 13 | 14 | magnet2d(b,a,(0,0),90); 15 | drawground(width=b,origin=(0,-a/2),wlen=0.2); 16 | 17 | // float magnets 18 | 19 | magnet2d(b,a,(0,d),-90); 20 | magnet2d(b,a,(d,0),+90); 21 | 22 | // directions 23 | 24 | pair tmpa = (-b/2-0.1,a/2); 25 | draw(tmpa--tmpa+(-0.5,0)); 26 | draw(tmpa+(-0.25,0)--tmpa+(-0.25,d-a),Arrow(size=as),L="$z$",align=NE); 27 | 28 | pair tmpa = (b/2,a/2+0.1); 29 | draw(tmpa--tmpa+(0,0.5)); 30 | draw(tmpa+(0,0.25)--tmpa+(d-a,0.25),Arrow(size=as),L="$x$",align=NE); 31 | 32 | tmpa = (0,d+a/2+0.1); 33 | draw(tmpa--tmpa+(0,0.6),Arrow(size=2as),L="$F_z$",align=NE); 34 | 35 | tmpa = (d+a/2+0.1,0); 36 | draw(tmpa--tmpa+(0.6,0),Arrow(size=2as),L="$F_x$",align=E+S+SE); 37 | -------------------------------------------------------------------------------- /magnet-theory/akoun.asy: -------------------------------------------------------------------------------- 1 | 2 | import phdfig; 3 | settings.prc=false; 4 | settings.render=0; 5 | 6 | texpreamble(" 7 | \providecommand\hwxX{a} 8 | \providecommand\hwyX{b} 9 | \providecommand\hwzX{c} 10 | \providecommand\hwxF{A} 11 | \providecommand\hwyF{B} 12 | \providecommand\hwzF{C} 13 | \providecommand\cdx{x} 14 | \providecommand\cdy{y} 15 | \providecommand\cdz{z} 16 | \providecommand\inlinevect[1]{[#1]} 17 | "); 18 | 19 | size(8cm,0); 20 | currentprojection=orthographic((2,2,2),up=(0,0,1)); 21 | 22 | // axes 23 | real X1=-1, X2=4, Y1=-1, Y2=4, Z1=-1, Z2=4; 24 | triple axisoffset=(-10,2,15); 25 | draw(shift(axisoffset)*((X1,0,0)--(X2,0,0)),Arrow3); 26 | draw(shift(axisoffset)*((0,Y1,0)--(0,Y2,0)),Arrow3); 27 | draw(shift(axisoffset)*((0,0,Z1)--(0,0,Z2)),Arrow3); 28 | label("$\ax$",project(shift(axisoffset)*(X2,0,0)),W); 29 | label("$\ay$",project(shift(axisoffset)*(0,Y2,0)),E); 30 | label("$\az$",project(shift(axisoffset)*(0,0,Z2)),1.5E); 31 | 32 | 33 | // first magnet 34 | real a=3,b=4,c=5; 35 | triple m=(a,b,c); 36 | draw((-a,0,0)--(a,0,0),gray); 37 | draw((0,-b,0)--(0,b,0),gray); 38 | draw((0,0,-c)--(0,0,c),gray); 39 | drawcube(m); 40 | label(L="\vbox{\hbox{Fixed}\hbox{magnet}}",project((-a,-b,c)),2N+W); 41 | 42 | // second magnet 43 | real A=3.5, B=2.5, C=4.5; 44 | triple M=(A,B,C); 45 | triple gap=(-25,12,5); 46 | draw(shift(gap)*((-a,0,0)--(a,0,0)),gray); 47 | draw(shift(gap)*((0,-b,0)--(0,b,0)),gray); 48 | draw(shift(gap)*((0,0,-c)--(0,0,c)),gray); 49 | drawcube(M,gap); 50 | label(L="\vbox{\hbox{Floating}\hbox{magnet}}",project((shift(gap)*(-A,-B,C))),2N); 51 | 52 | // offset 53 | //draw(box((0,0,0),gap),gray); 54 | //draw(shift((gap.x/2,0,0))*((0,0,0)--(0,gap.y,0)),Arrows); 55 | //draw(shift((gap.x/2,0,0))*((0,0,0)--(0,0,gap.z)),Arrows); 56 | //draw(shift((0,gap.y/2,gap.z))*((0,0,0)--(gap.x,0,0)),Arrows); 57 | 58 | draw((0,0,0)--gap,Arrow3); 59 | label(L="$\inlinevect{\cdx,\cdy,\cdz}$",project((2*gap/3)),NW); 60 | 61 | // labels 62 | real oo = 1; 63 | path3 p1, p2, p3; 64 | p1 = shift(0,b+oo,-c)*((a,0,0)--(-a,0,0)); 65 | p2 = shift(a+oo,0,-c)*((0,b,0)--(0,-b,0)); 66 | p3 = shift(a,-b-oo,0)*((0,0,c)--(0,0,-c)); 67 | draw(p1,arrow=Arrows3(size=4pt)); 68 | draw(p2,Arrows3(size=4pt)); 69 | draw(p3,Arrows3(size=4pt)); 70 | label(L="$2\hwxX$",project((midpoint(p1))),SE); 71 | label(L="$2\hwyX$",project((midpoint(p2))),SW); 72 | label(L="$2\hwzX$",project((midpoint(p3))),W); 73 | 74 | p1 = shift(gap)*shift(0,B+oo,-C)*((A,0,0)--(-A,0,0)); 75 | p2 = shift(gap)*shift(A+oo,0,-C)*((0,B,0)--(0,-B,0)); 76 | p3 = shift(gap)*shift(-A-oo,B,0)*((0,0,C)--(0,0,-C)); 77 | draw(p1,Arrows3(size=4pt)); 78 | draw(p2,Arrows3(size=4pt)); 79 | draw(p3,Arrows3(size=4pt)); 80 | label(L="$2\hwxF$",project((midpoint(p1))),SE); 81 | label(L="$2\hwyF$",project((midpoint(p2))),SW); 82 | label(L="$2\hwzF$",project((midpoint(p3))),E); 83 | -------------------------------------------------------------------------------- /magnet-theory/bhcurve.asy: -------------------------------------------------------------------------------- 1 | 2 | import phdfig; 3 | 4 | texpreamble(" 5 | \providecommand\magH{\mathbf H} 6 | \providecommand\magB{\mathbf B} 7 | \providecommand\remanence{B_r} 8 | \providecommand\coerce{H_c} 9 | \providecommand\BHmax{[BH]_{\mathrm{max}}} 10 | "); 11 | 12 | unitsize(0.5cm); 13 | 14 | pair X = (1,0); 15 | pair Y = (0,1); 16 | 17 | pair AX = 5*X; 18 | pair AY = 5*Y; 19 | 20 | real r = 1.25; 21 | filldraw( -r*AX -- (0,0) -- r*AY -- r*(-AX+AY) -- cycle , palegreen , invisible ); 22 | 23 | real Br = 2.5; 24 | real Hc = 2; 25 | real Hci = 3; 26 | 27 | dot( (0,Br) , L="$\remanence$",NW); 28 | dot( (-Hc,0), L="$-\coerce$" ,NW ); 29 | 30 | pair sat = extension( (-Hc,0) , (0,Br) , (Hci,0) , (Hci,1) ); 31 | pair knee = extension( (-Hc,0) , (0,Br) , (-Hci,0) , (-Hci,1) ); 32 | pair satoff = (5.5,0); 33 | 34 | dot( knee , blue ); 35 | label( "Knee" , knee , W ); 36 | label( "Saturation" , sat+satoff , NW); 37 | 38 | draw( -knee -- (Hci,0), dotted ); 39 | label( "$\coerce{}_i$" , (Hci,0) , S); 40 | 41 | // draw( (0,0) -- sat , dashed , Arrow(position=0.3) ); 42 | 43 | draw( sat -- knee , blue+dashed ); 44 | draw( knee -- -sat , blue+dashed ); 45 | draw( -sat -- -knee , blue+dashed ); 46 | draw( -knee -- sat , blue+dashed ); 47 | 48 | // AXES 49 | 50 | draw( -AX -- AX , Arrows(size=6pt)); 51 | draw( -AY -- AY , Arrows(size=6pt)); 52 | label("$|\magH|$",AX,align=SE); 53 | label("$|\magB|$",AY,align=NE); 54 | 55 | // curves 56 | 57 | draw( satoff+sat{-1,0} .. (-Hc,0) .. {-1,0}-sat-satoff , Arrow(position=0.6) ); 58 | draw( satoff+sat{-1,0} .. (-Hc,0) .. {-1,0}-sat-satoff , Arrow(position=1.5) ); 59 | draw( -sat-satoff{1,0} .. (Hc,0) .. {1,0}satoff+sat , Arrow(position=0.55) ); 60 | draw( -sat-satoff{1,0} .. (Hc,0) .. {1,0}satoff+sat , Arrow(position=1.5) ); 61 | -------------------------------------------------------------------------------- /magnet-theory/bhknee.asy: -------------------------------------------------------------------------------- 1 | 2 | import phdfig; 3 | 4 | texpreamble(" 5 | \providecommand\magH{\mathbf H} 6 | \providecommand\magB{\mathbf B} 7 | \providecommand\remanence{B_r} 8 | \providecommand\coerce{H_c} 9 | \providecommand\BHmax{[BH]_{\mathrm{max}}} 10 | "); 11 | 12 | unitsize(0.5cm); 13 | 14 | pair X = (1,0); 15 | pair Y = (0,1); 16 | 17 | pair AX = 5*X; 18 | pair AY = 5*Y; 19 | 20 | real r = 1.25; 21 | filldraw( -r*AX -- (0,0) -- r*AY -- r*(-AX+AY) -- cycle , palegreen , invisible ); 22 | 23 | real Br = 3; 24 | real Hc = 2; 25 | real Hci = 1.5; 26 | 27 | pair sat = extension( (-Hc,0) , (0,Br) , (Hci,0) , (Hci,1) ); 28 | pair knee = extension( (-Hc,0) , (0,Br) , (-Hci,0) , (-Hci,1) ); 29 | pair satoff = (3.1,0); 30 | 31 | dot( knee , blue ); 32 | label( "Knee" , knee , W ); 33 | dot( (0,Br) , L="$\remanence$",NW); 34 | 35 | label( L="$\coerce=\coerce{}_i$",(Hci+0.2,0.1),NE); 36 | dot( (Hci,0) ); 37 | 38 | // draw( (0,0) -- sat , dashed , Arrow(position=0.3) ); 39 | 40 | draw( sat -- knee , blue+dashed ); 41 | draw( knee -- -sat , blue+dashed ); 42 | draw( -sat -- -knee , blue+dashed ); 43 | draw( -knee -- sat , blue+dashed ); 44 | 45 | // AXES 46 | 47 | draw( -AX -- AX , Arrows(size=6pt)); 48 | draw( -AY -- AY , Arrows(size=6pt)); 49 | label("$\magH$",AX,align=SE); 50 | label("$\magB$",AY,align=NE); 51 | 52 | 53 | // curves 54 | 55 | draw( satoff+sat{-1,0} .. (-Hci,0) .. {-1,0}-sat-satoff , Arrow(position=0.5) ); 56 | draw( satoff+sat{-1,0} .. (-Hci,0) .. {-1,0}-sat-satoff , Arrow(position=1.5) ); 57 | draw( -sat-satoff{1,0} .. (Hci,0) .. {1,0}satoff+sat , Arrow(position=0.5) ); 58 | draw( -sat-satoff{1,0} .. (Hci,0) .. {1,0}satoff+sat , Arrow(position=1.5) ); 59 | -------------------------------------------------------------------------------- /magnet-theory/coil-mag-equiv.asy: -------------------------------------------------------------------------------- 1 | import solids; 2 | settings.prc=false; 3 | settings.render=0; 4 | 5 | texpreamble(" 6 | \usepackage{mathpazo} 7 | \providecommand\lengthCoil{L_c} 8 | "); 9 | 10 | size(5cm,5cm); 11 | currentprojection=orthographic(5,0,2,up=-X); 12 | currentlight=Viewport; 13 | 14 | real rm = 4, rc=4; 15 | real dz = 0, dy = 10, lm = 4, lc = 4; 16 | real l; 17 | 18 | revolution r=cylinder(O,rc,lc,Z); 19 | draw(r,black+thick()); 20 | 21 | path3 p = Z*(dz+lm/2)+sin(pi/6)*Y*rm+cos(pi/6)*X*rm .. 22 | Z*(dz+lm/2)+X*rm .. 23 | Z*(dz+lm/2)-sin(pi/3)*Y*rm+cos(pi/3)*X*rm; 24 | 25 | draw( shift(Y*dy)*reverse(p) , arrow=Arrow3 , thick() ); 26 | 27 | label("S",O); 28 | label("N",Z*lc); 29 | 30 | label("Magnet",Z*1.8*lc); 31 | label("Coil",dy*Y+Z*1.8*lc); 32 | 33 | revolution r=cylinder(dy*Y,rm,lm,Z); 34 | draw(r,black+thick()); 35 | 36 | draw("$\lengthCoil$",16Y--16Y+Z*lc,Bars3(dir=Y)); 37 | 38 | // Axis: 39 | //draw(O--Z*(dz+lm),dotted); 40 | 41 | 42 | -------------------------------------------------------------------------------- /magnet-theory/mag-nodes.asy: -------------------------------------------------------------------------------- 1 | settings.prc=false; 2 | settings.render=0; 3 | 4 | import phdfig; 5 | 6 | texpreamble("\usepackage{minibox}"); 7 | 8 | currentprojection=orthographic((2,4,2),up=(0,0,1)); 9 | 10 | real u=0.2cm; 11 | 12 | // first magnet 13 | real a=4u,b=3u,c=5u; 14 | triple m=(a,b,c); 15 | drawcube(m); 16 | 17 | dot((a,b,c),L="\tiny$(0,0,0)$",SE); 18 | dot((-a,b,c),L="\tiny$(1,0,0)$",E); 19 | 20 | dot((a,-b,c),L="\tiny$(0,1,0)$",W,gray); 21 | dot((-a,-b,c),gray); 22 | dot((a,b,-c),L="\tiny$(0,0,1)$",S,gray); 23 | dot((-a,b,-c),L="\tiny$(1,0,1)$",SE,gray); 24 | dot((a,-b,-c),L="\tiny$(0,1,1)$",SW,gray); 25 | dot((-a,-b,-c),L="\tiny$(1,1,1)$",NW,gray); 26 | 27 | // second magnet 28 | real A=a, B=b, C=c; 29 | triple M=(A,B,C); 30 | triple gap=(0,0,3.5c); 31 | drawcube(M,gap); 32 | 33 | 34 | dot(gap+(a,b,c),L="\tiny$(0,0,0)$",NNE); 35 | dot(gap+(-a,b,c),L="\tiny$(1,0,0)$",E); 36 | 37 | dot(gap+(a,-b,c),L="\tiny$(0,1,0)$",W,gray); 38 | dot(gap+(-a,-b,c),L="\tiny$(1,1,0)$",N,gray); 39 | dot(gap+(a,b,-c),L="\tiny$(0,0,1)$",S,gray); 40 | dot(gap+(-a,b,-c),L="\tiny$(1,0,1)$",SE,gray); 41 | dot(gap+(a,-b,-c),L="\tiny$(0,1,1)$",SW,gray); 42 | dot(gap+(-a,-b,-c),gray); 43 | 44 | path3 p1, p2; 45 | p1 = (a,b,c)--gap+(-a,b,c); 46 | p2 = (-a,b,c)--gap+(a,b,c); 47 | real t=0.03; 48 | 49 | draw(relpoint(p1,t)--relpoint(p1,1-t),Arrow3(size=8),p=linewidth(1)); 50 | draw(relpoint(p2,t)--relpoint(p2,1-t),Arrow3(size=8),p=linewidth(1)); 51 | 52 | 53 | label(L="\minibox[r]{Fixed magnet\\ Nodes $(i,k,p)$}",project((a,-b,0)),3W); 54 | label(L="\minibox[r]{Floating magnet\\ Nodes $(j,l,q)$}",project(gap+(a,-b,0)),3W); 55 | -------------------------------------------------------------------------------- /magnet-theory/magnet-prices.m: -------------------------------------------------------------------------------- 1 | 2 | % apr 2009 ? 3 | size = ... 4 | 2.54*[1/8 3/16 1/4 5/16 3/8 7/16 1/2 9/16 5/8 3/4 1 1.5 2]; 5 | price = ... 6 | [0.09 0.23 0.35 0.85 1.15 1.70 2.5 4.25 5.65 7.7 18.75 47.5 112]; 7 | 8 | % dec 2011 9 | size2 = ... 10 | 2.54*[1/8 3/16 1/4 5/16 3/8 7/16 1/2 9/16 5/8 3/4 1 1.5 2]; 11 | price2 = ... 12 | [0.2 0.44 0.8 1.32 2.08 3.08 4.4 6.04 8.04 13.36 39.96 129.44 224.40]; 13 | 14 | % dec 2012 15 | size3 = ... 16 | 2.54*[1/8 3/16 1/4 5/16 3/8 7/16 1/2 9/16 5/8 3/4 1 1.5 2]; 17 | price3 = ... 18 | [0.25 0.38 0.68 1.15 1.82 2.70 3.83 5.27 7.02 11.61 26.19 84.26 193.35]; 19 | 20 | % aug 2013 21 | size4 = ... 22 | 2.54*[1/8 3/16 1/4 5/16 3/8 7/16 1/2 9/16 5/8 3/4 1 1.5 2]; 23 | price4 = ... 24 | [0.18 0.38 0.68 1.15 1.82 2.70 3.83 5.27 7.02 11.61 26.19 84.26 195.35]; 25 | 26 | willfig('mag-price','small'); clf; hold on 27 | plot(size.^3,price,'.-','color',[0 0 0],'markeredgecolor','k') 28 | plot(size2.^3,price2,'.-','color',[0 0 0],'markeredgecolor','k') 29 | %plot(size3.^3,price3,'--','color',[0 0 0],'markeredgecolor','k') 30 | text(2,20,'2011') 31 | text(0.5,0.5,'2009') 32 | colourplot 33 | set(gca,'xscale','log','yscale','log') 34 | axis([0.01 300 0.03 500]) 35 | set(gca,'xtick',logspace(-2,2,5),'ytick',logspace(-1,2,4)) 36 | xlabel('Magnet volume, \si{(mm)^3}','interpreter','none') 37 | ylabel('Price per unit, U.S. dollars') 38 | 39 | matlabfrag('mag-price') 40 | 41 | 42 | 43 | %% 44 | % Material Type 45 | % Residual Flux Density (Br) 46 | % Coercive Force (Hc) 47 | % Intrinsic Coercive Force (Hci) 48 | % Max.Energy Product (BH)max 49 | % N42 13.0-13.2 KGs >11.0 KOe >12 KOe 40-42 MGOe 50 | % N52 14.5-14.8 KGs >11.2 KOe >11 KOe 49.5-52 MGOe 51 | 52 | mu0 = 4*pi*1e-7; 53 | bhmax42 = 7957.7*mean([40 42]); 54 | bhmax52 = 7957.7*mean([49.5 52]); 55 | rem42 = sqrt(4*mu0*bhmax42); 56 | rem52 = sqrt(4*mu0*bhmax52); 57 | 58 | br42 = 0.1*mean([13.0 13.2]); 59 | br52 = 0.1*mean([14.5 14.8]); 60 | 61 | ratio = (rem52/rem42) 62 | ratio2 = (br52/br42) 63 | 64 | finc = ratio^2 65 | finc2 = ratio2^2 66 | 67 | bhmaxmax = 7957.7*144; 68 | brmax = sqrt(4*mu0*bhmaxmax); 69 | ratio_max = brmax/br42 70 | fincmax = ratio_max^2 71 | 72 | %% 73 | n42 = [ 0.09 0.23 0.38 0.19 0.46 0.47 0.89 2.50 0.63 5.75 ... 74 | 0.96 1.50 3.30 9.10 14.85 6.40 47.50 9.75 15.25 28.95 57.5] 75 | n52 = [ 0.15 0.32 0.47 0.27 0.60 0.62 1.15 3.50 ... 76 | 0.85 7.50 1.20 1.95 4.30 12.50 18.75 8.00 60.00 13.25 21.5 34.5 95] 77 | 78 | mean(n42)\mean(n52) 79 | 80 | figure 81 | plot(n52./n42) 82 | -------------------------------------------------------------------------------- /magnet-theory/magrot.asy: -------------------------------------------------------------------------------- 1 | 2 | import phdfig; 3 | 4 | texpreamble(" 5 | \providecommand\force{\vec F} 6 | \providecommand\cdx{\alpha} 7 | \providecommand\cdy{\beta} 8 | \providecommand\cdz{\gamma} 9 | \providecommand\mrot{\theta} 10 | \providecommand\hwxX{a} 11 | \providecommand\hwyX{b} 12 | \providecommand\hwzX{c} 13 | \providecommand\hwxF{A} 14 | \providecommand\hwyF{B} 15 | \providecommand\hwzF{C} 16 | "); 17 | 18 | unitsize(1cm); 19 | 20 | real w_body = 0.8pt; 21 | real w_dim = 0.4pt; 22 | pen pen_body = linewidth(w_body); 23 | pen pen_dim = linewidth(w_dim); 24 | 25 | defaultpen(pen_body); 26 | 27 | pair mx1=(1.4,0); 28 | pair my1=(0,1.2); 29 | 30 | pair mx2=(1.2,0); 31 | pair my2=(0,1.4); 32 | 33 | pair arr = (1.5,0); 34 | pair arrv = (0,-0.25); 35 | pair displ = (2,3); 36 | pair magO = (0,0); 37 | 38 | real magrot = 30; 39 | 40 | // magnets 41 | magnet2d(mx1.x,my1.y,magO,90); 42 | magnet2d(mx2.x,my2.y,displ,90,magrotate=magrot); 43 | 44 | //dot(magO); 45 | //dot(displ); 46 | 47 | // magnet dims 48 | 49 | pair ax = (-1,0); 50 | pair ay = (0,-1); 51 | 52 | pair lx = (displ.x+2,0); 53 | pair ly = (0,displ.y+2); 54 | 55 | label("$2\hwzX$",magO-mx1/2,align=W); 56 | label("$2\hwyX$",magO-my1/2,align=S); 57 | 58 | label("$2\hwzF$",displ+rotate(magrot)*(-mx2/2),align=W); 59 | label("$2\hwyF$",displ+rotate(magrot)*(my2/2),align=N); 60 | 61 | // labels 62 | draw( shift(lx)*( magO -- (magO.x,displ.y) ) , Arrows(size=4pt) , p=pen_dim, L="$\cdz$"); 63 | draw( shift(ly)*( magO -- (displ.x,magO.y) ) , Arrows(size=4pt) , p=pen_dim, L="$\cdy$"); 64 | 65 | draw( displ -- displ + 0.6*(-1,-2) , p=linewidth(2*w_body), Arrow(size=6pt) , L="$\forceVec$", align=4*S+0.5*E); 66 | 67 | // dashes 68 | draw( magO -- lx , p=pen_dim+dashed+grey); 69 | draw( lx+(0,displ.y) -- displ , p=pen_dim+dashed+grey); 70 | 71 | draw( magO -- ly , p=pen_dim+dashed+grey); 72 | draw( ly+(displ.x,0) -- displ , p=pen_dim+dashed+grey); 73 | 74 | draw( displ -- displ + rotate(magrot)*(2,0) , p=pen_dim+dashed+grey); 75 | label( "$\mrot$", displ + rotate(magrot)*(1,0) , S); 76 | 77 | // axes 78 | pair aoff = (-3,0); 79 | real xx = 0.5; 80 | real zz = 0.5; 81 | draw(shift(aoff)*((xx,0)--(0,0)--(0,zz)),Arrows(size=4pt),p=pen_dim); 82 | label("$\ay$",aoff+(xx,0),SE); 83 | label("$\az$",aoff+(0,zz),NE); 84 | -------------------------------------------------------------------------------- /magnet-theory/nodes-bigsmall.asy: -------------------------------------------------------------------------------- 1 | settings.prc=false; 2 | settings.render=0; 3 | 4 | import phdfig; 5 | 6 | texpreamble("\usepackage{minibox}"); 7 | 8 | currentprojection=orthographic((2,4,2),up=(0,0,1)); 9 | real u = 0.15cm; 10 | 11 | // first magnet 12 | real a=4u,b=3u,c=5u; 13 | triple m=(a,b,c); 14 | drawcube(m); 15 | 16 | dot((a,b,c),gray); 17 | dot((-a,b,c),gray); 18 | dot((a,-b,c),gray); 19 | dot((-a,-b,c),gray); 20 | dot((a,b,-c),gray); 21 | dot((-a,b,-c),gray); 22 | dot((a,-b,-c),gray); 23 | dot((-a,-b,-c),gray); 24 | 25 | // second magnet 26 | real A=a, B=b, C=c; 27 | triple M=(A,B,C); 28 | triple gap=(0,0,4c); 29 | drawcube(M,gap); 30 | 31 | dot(gap+(a,b,c),gray); 32 | dot(gap+(-a,b,c),gray); 33 | dot(gap+(a,-b,c),gray); 34 | dot(gap+(-a,-b,c),gray); 35 | dot(gap+(a,b,-c),gray); 36 | dot(gap+(-a,b,-c),gray); 37 | dot(gap+(a,-b,-c),gray); 38 | dot(gap+(-a,-b,-c),gray); 39 | 40 | 41 | // third magnet 42 | real A=3a, B=3b, C=c; 43 | triple M3=(A,B,C); 44 | triple gap=(0,0,4c); 45 | drawcube(M3,gap); 46 | 47 | 48 | dot(gap+(A,B,C),gray); 49 | dot(gap+(-A,B,C),gray); 50 | dot(gap+(A,-B,C),gray); 51 | dot(gap+(-A,-B,C),gray); 52 | dot(gap+(A,B,-C),gray); 53 | dot(gap+(-A,B,-C),gray); 54 | dot(gap+(A,-B,-C),gray); 55 | dot(gap+(-A,-B,-C),gray); 56 | 57 | path3 p1; 58 | real t=0.07; 59 | p1 = (-a,b,c)--gap+(-a,b,-c); 60 | draw(relpoint(p1,t)--relpoint(p1,1-t),Arrow3(size=8),p=linewidth(1)); 61 | 62 | draw( (-a,b,c)--(-a,B,c)--(-A,B,c)--(-A,b,c)--cycle , dashed + gray ); 63 | draw( (-A,B,c)--gap+(-A,B,c) , dashed + gray ); 64 | draw( (-A,b,c)--gap+(-A,b,-c)--gap+(-a,b,-c) , dashed + gray ); 65 | 66 | real t=0.05; 67 | p1 = (-a,b,c)--gap+(-A,B,-C); 68 | draw(relpoint(p1,t)--relpoint(p1,1-t),Arrow3(size=8),p=linewidth(1)); 69 | 70 | draw( gap+(-a,b,-c)--gap+(-a,B,-c)--(-a,B,c) , dashed + gray ); 71 | -------------------------------------------------------------------------------- /magnet-theory/rot-geom.asy: -------------------------------------------------------------------------------- 1 | 2 | import phdfig; 3 | 4 | texpreamble(" 5 | \providecommand\force{\vec F} 6 | \providecommand\cdx{d_x} 7 | \providecommand\cdy{d_y} 8 | \providecommand\cdz{d_z} 9 | "); 10 | 11 | unitsize(1cm); 12 | 13 | real w_body = 0.8pt; 14 | real w_dim = 0.4pt; 15 | pen pen_body = linewidth(w_body); 16 | pen pen_dim = linewidth(w_dim); 17 | 18 | defaultpen(pen_body); 19 | 20 | pair mx1=(1.5,0); 21 | pair my1=(0,1.5); 22 | 23 | pair mx2=(1.5,0); 24 | pair my2=(0,1.5); 25 | 26 | real magrot = 30; 27 | 28 | pair rorigin = (0,5); 29 | pair lever = (0,-2); 30 | pair displ = rorigin+rotate(magrot)*lever; 31 | pair magO = (0,0); 32 | 33 | // magnets 34 | 35 | dot(rorigin,L="$O_m$",align=N); 36 | draw(rorigin--displ,p=linewidth(2)); 37 | magnet2d(mx1.x,my1.y,magO,90); 38 | magnet2d(mx2.x,my2.y,displ,-90,magrotate=magrot); 39 | 40 | //dot(magO); 41 | //dot(displ); 42 | 43 | // magnet dims 44 | 45 | pair ax = (-1,0); 46 | pair ay = (0,-1); 47 | 48 | pair lx = (displ.x+1.5,0); 49 | pair lx2 = (displ.x+2,0); 50 | pair ly = (0,displ.y-1.5); 51 | 52 | 53 | // labels 54 | draw( shift(lx)*( magO -- (magO.x,displ.y) ) , Arrows(size=4pt) , p=pen_dim, L="$\cdz$",align=W); 55 | draw( shift(ly)*( magO -- (displ.x,magO.y) ) , Arrows(size=4pt) , p=pen_dim, L="$\cdy$"); 56 | 57 | draw( shift(lx2)*( magO -- rorigin ) , Arrows(size=4pt) , p=pen_dim, L="$z_l$",align=E); 58 | 59 | // dashes 60 | draw( magO -- lx2 , p=pen_dim+dashed+grey); 61 | draw( lx+(0,displ.y) -- displ , p=pen_dim+dashed+grey); 62 | draw( lx2+(0,rorigin.y) -- rorigin , p=pen_dim+dashed+grey); 63 | draw( ly+(displ.x,0) -- displ , p=pen_dim+dashed+grey); 64 | draw( rorigin -- my1/2 , p=pen_dim+dashed+grey); 65 | 66 | draw( rorigin -- rorigin+rotate(magrot-90)*lever, p=pen_dim+dashed+grey); 67 | draw( displ -- displ+rotate(magrot-90)*lever, p=pen_dim+dashed+grey); 68 | draw( rorigin+rotate(magrot-90)*lever -- displ+rotate(magrot-90)*lever , p=pen_dim,L="$l_m$", Arrows(size=4pt)); 69 | 70 | label( "$\theta$", rorigin + rotate(magrot/2)*lever/2.5 ); 71 | 72 | // axes 73 | pair aoff = (-3,0); 74 | real xx = 0.5; 75 | real zz = 0.5; 76 | draw(shift(aoff)*((xx,0)--(0,0)--(0,zz)),Arrows(size=4pt),p=pen_dim); 77 | label("$\ay$",aoff+(xx,0),SE); 78 | label("$\az$",aoff+(0,zz),NE); 79 | -------------------------------------------------------------------------------- /mlist.cfg: -------------------------------------------------------------------------------- 1 | %% 2 | %% This is file `mlist.cfg', 3 | %% generated with the docstrip utility. 4 | %% 5 | %% The original source files were: 6 | %% 7 | %% mlist.dtx (with options: `defaults') 8 | %% 9 | %% __________________________________ 10 | %% Copyright (C) 2007 Will Robertson 11 | %% 12 | %% License information appended. 13 | %% 14 | %% 15 | \mlistsetup{% 16 | sep={,}, 17 | sepsep={;}, 18 | wrapcmd=\mlistparen, 19 | wrapone={}{}, 20 | dots=\dots, 21 | dot={\,\cdot\,}, 22 | elemcmd=\mlistelem, 23 | headcmd=\mathbf, 24 | index={}, 25 | headhook={}, 26 | } 27 | \newmlist\vect[ 28 | wrapcmd=\mlistparen, 29 | wraponecmd=\mlistnowrap, 30 | elemcmd=\mlistsub, 31 | headcmd=\mathbf, 32 | ] 33 | \newmlist\matr[ 34 | sep=&, 35 | sepsep=\\, 36 | wrap={\begin{bmatrix}} 37 | {\end{bmatrix}}, 38 | ] 39 | \newmlist\func[ 40 | headcmd=\mlisthead, 41 | wrapcmd=\mlistheadparen, 42 | wraponecmd, 43 | ] 44 | \newmlist\mset[ 45 | headcmd=\mathbb, 46 | sep=\times, 47 | wrapcmd=\mlistsup, 48 | wraponecmd, 49 | ] 50 | \newmset\setR{R} 51 | \newmset\setC{C} 52 | \newmset\setN{N} 53 | \newmset\setZ{Z} 54 | %% 55 | %% Copyright (C) 2007 by Will Robertson 56 | %% 57 | %% Distributable under the LaTeX Project Public License, 58 | %% version 1.3c or higher (your choice). The latest version of 59 | %% this license is at: http://www.latex-project.org/lppl.txt 60 | %% 61 | %% This work is "maintained" (as per LPPL maintenance status) 62 | %% by Will Robertson. 63 | %% 64 | %% This work consists of the file mlist.dtx 65 | %% and the derived files mlist.pdf, 66 | %% mlist.sty, 67 | %% mlist.cfg, and 68 | %% mlist.ins. 69 | %% 70 | %% 71 | %% End of file `mlist.cfg'. 72 | -------------------------------------------------------------------------------- /multipole/double-planar.asy: -------------------------------------------------------------------------------- 1 | 2 | import phdfig; 3 | 4 | unitsize(0.8cm); 5 | 6 | texpreamble(" 7 | \providecommand\ax{\hat x} 8 | \providecommand\ay{\hat y} 9 | \providecommand\az{\hat z} 10 | \providecommand\muphdgap{d} 11 | \providecommand\muphdispl{\beta} 12 | \providecommand\mupvdispl{\delta} 13 | "); 14 | 15 | real h = 1, w = 1, d=1.5h, hdispl = 0.7; 16 | 17 | real T = 5; 18 | real W = 10; 19 | 20 | magnet2d(w,h,(0*w,0), 90); 21 | magnet2d(w,h,(1*w,0),135); 22 | cuboid2d(w,h,(2*w,0)); 23 | magnet2d(w,h,(3*w,0), 45); 24 | magnet2d(w,h,(4*w,0), 90); 25 | 26 | magnet2d(w,h,(W+0*w,0), 90); 27 | magnet2d(w,h,(W+1*w,0),135); 28 | cuboid2d(w,h,(W+2*w,0)); 29 | magnet2d(w,h,(W+3*w,0), 45); 30 | magnet2d(w,h,(W+4*w,0), 90); 31 | 32 | magnet2d(w,h,(hdispl+0*w,d),-90); 33 | magnet2d(w,h,(hdispl+1*w,d),-135); 34 | cuboid2d(w,h,(hdispl+2*w,d)); 35 | magnet2d(w,h,(hdispl+3*w,d),-45); 36 | magnet2d(w,h,(hdispl+4*w,d),-90); 37 | 38 | draw( (hdispl+4.5*w,d+h/2) -- (W-hdispl-0.5w,d+h/2) ); 39 | draw( (hdispl+4.5*w,d-h/2) -- (W-hdispl-0.5w,d-h/2) ); 40 | pair O = ( (hdispl+4.5*w)/2+(W-hdispl-0.5w)/2 ,0); 41 | dot( O ); 42 | real aa = 0.9; 43 | draw( O--(O+(aa,0)) , Arrow(size=4pt) ); 44 | draw( O--(O+(0,d)) , Arrow(size=4pt) ,L="$\mupvdispl$", align=SW); 45 | draw( O+(-aa,d) -- O+(aa,d) , dashed ); 46 | label(O+(aa,0),L="$\muphdispl$",align=S); 47 | 48 | magnet2d(w,h,(W-hdispl+0*w,d),-90); 49 | magnet2d(w,h,(W-hdispl+1*w,d),-135); 50 | cuboid2d(w,h,(W-hdispl+2*w,d)); 51 | magnet2d(w,h,(W-hdispl+3*w,d),-45); 52 | magnet2d(w,h,(W-hdispl+4*w,d),-90); 53 | 54 | drawground( 55 | width = 5w, 56 | origin = (2w,-h/2), 57 | whiskers=15, 58 | wlen=0.3 59 | ); 60 | 61 | drawground( 62 | width = 5w, 63 | origin = (W+2w,-h/2), 64 | whiskers=15, 65 | wlen=0.3 66 | ); 67 | 68 | pair O = (-2,0); 69 | real l = 0.7; 70 | dot(O); 71 | draw(O--O+(0,l),L="$\az$",align=2NE,Arrow(size=4pt)); 72 | draw(O--O+(l,0),L="$\ay$",align=2SE,Arrow(size=4pt)); 73 | 74 | // hdispl label 75 | 76 | draw( (-w/2,h/2)--(-w/2,1.5*d) , dashed); 77 | draw( 78 | (-w/2,d)--(hdispl-w/2,d), 79 | L="$\muphdgap$", 80 | Arrows(size=4pt), 81 | align=N); 82 | 83 | draw( (W+9w/2,h/2)--(W+9w/2,1.5*d) , dashed); 84 | draw( 85 | (W+9w/2,d)--(W-hdispl+9w/2,d), 86 | L="$\muphdgap$", 87 | Arrows(size=4pt), 88 | align=N); 89 | -------------------------------------------------------------------------------- /multipole/halbach-hdispl.asy: -------------------------------------------------------------------------------- 1 | 2 | import phdfig; 3 | 4 | texpreamble(" 5 | \providecommand\ax{\hat x} 6 | \providecommand\ay{\hat y} 7 | \providecommand\az{\hat z} 8 | \providecommand\muphdispl{\beta} 9 | \providecommand\mupvdispl{\delta} 10 | "); 11 | 12 | real h = 1cm, w = 1cm, d=1.5h, hdispl = 1.5cm; 13 | 14 | real T = 5; 15 | 16 | for(int n=0; n 71 | 72 | \ExplSyntaxOn 73 | 74 | \cs_new:Nn \wspr_greek_trans:N 75 | { 76 | \tl_set_eq:NN \l_tmpa_tl #1 77 | \tl_replace_all:Nnn \l_tmpa_tl {\bm} {} 78 | \tl_replace_all:Nnn \l_tmpa_tl {\dot} {} 79 | \tl_replace_all:Nnn \l_tmpa_tl {\ddot} {} 80 | \tl_replace_all:Nnn \l_tmpa_tl {\vect} {} 81 | \tl_replace_all:Nnn \l_tmpa_tl {\hat} {} 82 | \tl_replace_all:Nnn \l_tmpa_tl {\alpha} {zzzgreek-a} 83 | \tl_replace_all:Nnn \l_tmpa_tl {\beta} {zzzgreek-b} 84 | \tl_replace_all:Nnn \l_tmpa_tl {\delta} {zzzgreek-d} 85 | \tl_replace_all:Nnn \l_tmpa_tl {\epsilon} {zzzgreek-e} 86 | \tl_replace_all:Nnn \l_tmpa_tl {\varepsilon} {zzzgreek-ee} 87 | \tl_replace_all:Nnn \l_tmpa_tl {\iota} {zzzgreek-i} 88 | \tl_replace_all:Nnn \l_tmpa_tl {\omicron} {zzzgreek-o} 89 | \tl_replace_all:Nnn \l_tmpa_tl {\pi} {zzzgreek-p} 90 | \tl_replace_all:Nnn \l_tmpa_tl {\gamma} {zzzgreek-c} 91 | \tl_replace_all:Nnn \l_tmpa_tl {\zeta} {zzzgreek-f} 92 | \tl_replace_all:Nnn \l_tmpa_tl {\eta} {zzzgreek-g} 93 | \tl_replace_all:Nnn \l_tmpa_tl {\theta} {zzzgreek-h} 94 | \tl_replace_all:Nnn \l_tmpa_tl {\vartheta} {zzzgreek-hh} 95 | \tl_replace_all:Nnn \l_tmpa_tl {\kappa} {zzzgreek-j} 96 | \tl_replace_all:Nnn \l_tmpa_tl {\lambda} {zzzgreek-k} 97 | \tl_replace_all:Nnn \l_tmpa_tl {\mu} {zzzgreek-l} 98 | \tl_replace_all:Nnn \l_tmpa_tl {\nu} {zzzgreek-m} 99 | \tl_replace_all:Nnn \l_tmpa_tl {\xi} {zzzgreek-n} 100 | \tl_replace_all:Nnn \l_tmpa_tl {\rho} {zzzgreek-q} 101 | \tl_replace_all:Nnn \l_tmpa_tl {\sigma} {zzzgreek-r} 102 | \tl_replace_all:Nnn \l_tmpa_tl {\varsigma} {zzzgreek-rr} 103 | \tl_replace_all:Nnn \l_tmpa_tl {\tau} {zzzgreek-s} 104 | \tl_replace_all:Nnn \l_tmpa_tl {\upsilon} {zzzgreek-t} 105 | \tl_replace_all:Nnn \l_tmpa_tl {\phi} {zzzgreek-u} 106 | \tl_replace_all:Nnn \l_tmpa_tl {\Phi} {zzzgreek-U} 107 | \tl_replace_all:Nnn \l_tmpa_tl {\varphi} {zzzgreek-uu} 108 | \tl_replace_all:Nnn \l_tmpa_tl {\chi} {zzzgreek-v} 109 | \tl_replace_all:Nnn \l_tmpa_tl {\psi} {zzzgreek-w} 110 | \tl_replace_all:Nnn \l_tmpa_tl {\omega} {zzzgreek-x} 111 | \tl_set:Nf \l_tmpa_tl { \l_tmpa_tl } 112 | \tl_set:Nx #1 { \tl_to_str:N \l_tmpa_tl } 113 | } 114 | 115 | \DeclareDocumentCommand \newvariable { m O{} m } 116 | { 117 | \tl_clear:N \nomennom 118 | \tl_clear:N \nomensort 119 | \tl_clear:N \nomenentry 120 | \setkeys{thesisnomen}{#2} 121 | 122 | \edef \nomenlabel { \cs_to_str:N #1 } 123 | \ifx \nomenentry \empty \def \nomenentry{ \unexpanded{\ensuremath{#3}} } \fi 124 | \ifx \empty \nomensort \tl_set:Nn \nomensort {#3} \fi 125 | \wspr_greek_trans:N \nomensort 126 | 127 | \tl_if_empty:NT \nomennom \ERROR 128 | \use:x 129 | { 130 | \noexpand\newglossaryentry 131 | {\nomenlabel} 132 | { 133 | % parent = \nomenparent, 134 | name = \exp_not:N \ensuremath { \exp_not:V \nomenentry }, % used in glossary 135 | text = \unexpanded{\ensuremath{#3}}, % used in text 136 | sort = \nomensort, 137 | description = {\unexpanded\expandafter{\nomennom}}, 138 | }% 139 | % \protected\def\noexpand #1{{\noexpand\color{red}\noexpand\gls{\nomenlabel}}}% 140 | \protected\def\noexpand #1{\noexpand\gls{\nomenlabel}}% 141 | % \protected\def\noexpand #1{}% 142 | } 143 | } 144 | 145 | \DeclareDocumentCommand \newmvar { m m m O{} m } 146 | % E.G.: \newmvar\newfunc\magforce{F_m}[elem={\mdim,\ndisp},index={1,2}]{nom={Magnet force vector}} 147 | { 148 | \tl_clear:N \nomennom 149 | \tl_clear:N \nomensort 150 | \tl_clear:N \nomenentry 151 | \setkeys{thesisnomen}{#5} 152 | 153 | \ifx \nomenentry \empty 154 | \ifx #1 \newvect 155 | \gdef \nomenentry {\vect #3} 156 | \else 157 | \gdef \nomenentry {#3} 158 | \fi 159 | \fi 160 | \edef \nomenlabel { \cs_to_str:N #2 } 161 | \ifx \empty \nomensort \tl_set:Nn \nomensort {#3} \fi 162 | \wspr_greek_trans:N \nomensort 163 | 164 | \tl_if_empty:NT \nomennom \ERROR 165 | 166 | \use:x 167 | { 168 | \exp_not:N \newglossaryentry 169 | {\nomenlabel} 170 | { 171 | % parent = \nomenparent, 172 | text = \exp_not:n { \ensuremath{#3} }, % used in text 173 | name = \exp_not:N \ensuremath { \exp_not:V \nomenentry }, % used in glossary 174 | sort = \nomensort, 175 | description = { \exp_not:V \nomennom }, 176 | } 177 | \exp_not:N #1 \exp_not:N #2 178 | { 179 | { 180 | % \exp_not:N \color {red} 181 | \exp_not:N \gls{\nomenlabel} 182 | } 183 | } 184 | [ \exp_not:n {#4} ] 185 | } 186 | } 187 | \errorcontextlines=999 188 | \ExplSyntaxOff 189 | 190 | \define@key{thesisnomen}{nom}{\gdef\nomennom{#1}} 191 | \define@key{thesisnomen}{sort}{\gdef\nomensort{#1}} 192 | \define@key{thesisnomen}{entry}{\gdef\nomenentry{#1}} 193 | \let\nomenparent\empty 194 | 195 | %%%%%%%%%%%%%%%%%%%%%%% 196 | \newcommand\RMSof[1]{#1_{\textsc{rms}}} 197 | 198 | \newvariable\s[nom=Laplace variable]{s} 199 | 200 | %%%%%%%%%%%%%%%%%%%%%%% 201 | %% MAGNETS 202 | 203 | \newvariable\incr[nom={Displacement increment}]{\delta} 204 | 205 | \newvariable\ratioCub[nom=Square-face cuboid magnet aspect ratio]{\gamma} 206 | \newvariable\ratioCoil[nom=Coil aspect ratio]{\beta} 207 | \newvariable\ratioMag[nom=Cylindrical magnet aspect ratio]{\alpha} 208 | \newvariable\ratioLengthArea[nom={Ratio of magnet length squared to face area}]{\nu} 209 | 210 | \newvariable\lengthCub[nom=Cuboid magnet depth]{a} 211 | \newvariable\faceCub[nom=Cuboid magnet face side length]{b} 212 | \newvariable\lengthCube[nom=Cube magnet side length]{c} 213 | \newvariable\magnetGap[nom=Gap between magnets in various magnetic spring designs]{G} 214 | \let\choiGap\magnetGap 215 | 216 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 217 | 218 | % Axes directions: 219 | \newvariable\ax[nom={Cartesian unit vector}]{\hat x} 220 | \newvariable\ay[nom={Cartesian unit vector}]{\hat y} 221 | \newvariable\az[nom={Cartesian unit vector}]{\hat z} 222 | 223 | \newvariable\volume[nom=Volume]{V} 224 | \newvariable\area[nom=Area]{A} 225 | \newvariable\surface[nom=Integration surface]{S} 226 | \newvariable\diffsurface[nom=Differential region of the integration surface]{s} 227 | \newvariable\diffvolume[nom=Differential region of the integration volume]{v} 228 | \newvariable\vecarea[nom=Vector area (direction normal to plane)]{\vect A} 229 | 230 | \let\olddot\dot 231 | \let\oldddot\ddot 232 | \def\dot{\expandafter\olddot} 233 | \def\ddot{\expandafter\oldddot} 234 | 235 | \newvariable\e[nom={Euler's number, the natural logarithm base, $\approx 2.71828$}]{e} 236 | 237 | \newvariable\varianceNoise[nom=White noise variance]{S_w} 238 | \newvariable\normn[nom=Surface normal vector,sort=n]{\hat{\vect{n}}} 239 | \newvariable\forceMag[nom=Magnitude of force]{F} 240 | %\newvariable\forceMagnet[nom=Magnetic force]{F_m} 241 | \def\forceMagnet{\forceMag_m} 242 | \newvariable\stiffnessMag[nom={Magnitude of stiffness characteristic (derivative of force with respect to displacement)}]{K} 243 | \newvariable\forceVec[nom=Force vector]{\vect F} 244 | 245 | \newvariable\forceGrav[nom=Gravity force]{F_g} 246 | \newvariable\gravity[nom=Acceleration due to gravity]{g} 247 | \newvariable\disp[nom=Displacement]{x} 248 | \let\displ\disp 249 | \newvariable\disturb[nom=Disturbance]{p} 250 | 251 | \newcommand\equil{\text{eq}} 252 | 253 | \newvariable\pos[nom=Displacement vector]{\vect x} 254 | \newvariable\velocity[nom=Velocity vector]{\vect v} 255 | 256 | \newvariable\natfreq[nom={Natural frequency, $\sqrt{\stiffness/\mass}$}]{\omega_n} 257 | \newvariable\resfreq[nom={Resonance frequency, $\natfreq\sqrt{1-\dampingratio^2}$}]{\omega_d} 258 | \newcommand\approaches{\rightarrow} 259 | 260 | \newvariable\flux[nom=Magnetic flux vector]{\bm\Phi} 261 | \newvariable\magH[nom=Magnetic field strength vector]{\vect H} 262 | \newvariable\magB[nom=Magnetic flux density vector]{\vect B} 263 | \newvariable\remanence[nom=Remanence magnetisation]{B_r} 264 | \newvariable\maggradesym[nom={Magnet grade, units \si{MG.Oe}}]{N} 265 | \newcommand\magn[1]{{\remanence}_{#1}} 266 | \newvariable\coerce[nom=Coercivity]{H_c} 267 | \newvariable\Msat[nom=Magnetisation at saturation]{M_{\mathrm{sat}}} 268 | %\newvect\magflux{B} 269 | \let\magflux\magB 270 | \newvariable\magM[nom=Magnetisation vector]{\vect M} 271 | \newvariable\magN[nom=Unit magnetisation vector, sort=\vect M]{\hat{\vect M}} 272 | \newvariable\magJ[nom=Current density vector]{\vect J} 273 | \newvariable\magJm[nom=Equivalent `surface current' vector due to magnetisation]{\vect J_m} 274 | \newvariable\magjm[nom=Differential `Surface current' due to magnetisation]{\vect j_m} 275 | 276 | \newvariable\permVac[nom=Magnetic permeability of the vacuum]{\mu_0} 277 | \let\permvac\permVac 278 | 279 | \newvariable{\perm}[nom=Magnetic permeability of a material]{\mu} 280 | %\newcommand{\permMag}{\mu} 281 | \let\permMag\perm 282 | \newvariable{\permrel}[nom=Relative permeability of a material]{\mu_r} 283 | \newcommand\magconst{\frac{\permVac}{4\pi}} 284 | 285 | %%%%%%%%%%%%%%%%%%%%%%%% 286 | %% MAGNETS 287 | %%%%%%%%%%%%%%%%%%%%%%%% 288 | 289 | \newcommand\cdx{d_x} 290 | \newcommand\cdy{d_y} 291 | \newcommand\cdz{d_z} 292 | \newvariable\magcd[nom={Distance vector between the centres of two magnets, $\magcd=\inlinevect{\cdx,\cdy,\cdz}$}]{\vect d} 293 | 294 | %\newvariable\cnrx[nom={$\ax$ component of $\cornerd$}]{\delta_x} 295 | %\newvariable\cnry[nom={$\ay$ component of $\cornerd$}]{\delta_y} 296 | %\newvariable\cnrz[nom={$\az$ component of $\cornerd$}]{\delta_z} 297 | \newcommand\cnrx{\delta_x} 298 | \newcommand\cnry{\delta_y} 299 | \newcommand\cnrz{\delta_z} 300 | \newvariable\cornerd[nom={Distance vector between a pair of corners/nodes of two magnets, $\cornerd=\inlinevect{\cnrx,\cnry,\cnrz}$}]{\bm\delta} 301 | \newvariable\cnrl[nom={Euclidean distance of $\cornerd$, $\sqrt{\cnrx^2+\cnry^2+\cnrz^2}$}]{r} 302 | 303 | \newvariable\cdcnrX[nom={Distance vector between a magnet's centre and one of its corners/nodes (fixed magnet)}]{\vect r} 304 | \newvariable\cdcnrF[nom={Distance vector between a magnet's centre and one of its corners/nodes (floating magnet)}]{\vect R} 305 | 306 | \newvariable\Fzz[nom={Force between two cuboid magnets both magnetised in the $\az$ direction},sort=Fzz]{\vect F_{z,z}} 307 | \newvariable\Fzznode[nom={`Force' between two magnetic nodes for cuboid magnets magnetised in the $\az$ direction, used to calculate $\Fzz$},sort=zzzgreek-uzz]{\bm\phi_{z,z}} 308 | 309 | \newvariable\Fzy[nom={Force between two cuboid magnets; the first magnetised in the $\az$ direction, the second in $\ay$},sort=Fzy]{\vect F_{z,y}} 310 | \newvariable\Fzynode[nom={`Force' between two magnetic nodes for orthogonally-magnetised cuboid magnets, used to calculate $\Fzy$},sort=zzzgreek-uzy]{\bm\phi_{z,y}} 311 | \newvariable\Kzy[nom={Stiffness between two cuboid magnets; the first magnetised in the $\az$ direction, the second in $\ax$},sort=Kzy]{\vect K_{z,y}} 312 | \newvariable\Kzynode[nom={`Stiffness' between two magnetic nodes for cuboid magnets magnetised in the $\az$ and $\ay$ directions respectively, used to calculate $\Kzz$},sort=zzzgreek-jzy]{\bm \kappa_{z,y}} 313 | 314 | \newvariable\Fzx[nom={Force between two cuboid magnets; the first magnetised in the $\az$ direction, the second in $\ax$},sort=Fzy]{\vect F_{z,x}} 315 | 316 | \newvariable\Kzz[nom={Stiffness between two cuboid magnets magnetised in the $\az$ direction},sort=Kzz]{\vect K_{z,z}} 317 | \newvariable\Kzznode[nom={`Stiffness' between two magnetic nodes for cuboid magnets magnetised in the $\az$ direction, used to calculate $\Kzz$},sort=zzzgreek-jzz]{\bm \kappa_{z,z}} 318 | \newvariable\Tzz[nom={Torque between two cuboid magnets magnetised in the $\az$ direction},sort=Tzz]{\vect T_{z,z}} 319 | \newvariable\Txx[nom={Torque between two cuboid magnets magnetised in the $\ax$ direction},sort=Tzz]{\vect T_{x,x}} 320 | \newvariable\Tzznode[nom={`Torque' between two magnetic nodes for cuboid magnets magnetised in the $\az$ direction, used to calculate $\Tzz$},sort=zzzgreek-w]{\bm\psi} 321 | \newvariable\Tzy[nom={Torque between two cuboid magnets; the first magnetised in the $\az$ direction, the second in $\ay$},sort=Tzy]{\vect T_{z,y}} 322 | 323 | \newvariable\hwx[nom={Half-length of cuboid magnet, $\ax$ direction}]{a} 324 | \newvariable\hwy[nom={Half-length of cuboid magnet, $\ay$ direction}]{b} 325 | \newvariable\hwz[nom={Half-length of cuboid magnet, $\az$ direction}]{c} 326 | 327 | \newcommand\hwxX{\hwx_1} 328 | \newcommand\hwyX{\hwy_1} 329 | \newcommand\hwzX{\hwz_1} 330 | \newvariable\mwX[nom={Vector of magnet side lengths (fixed)}]{\vect s} 331 | \newvariable\mwF[nom={Vector of magnet side lengths (floating)}]{\vect S} 332 | 333 | \newcommand\hwxF{\hwx_2} 334 | \newcommand\hwyF{\hwy_2} 335 | \newcommand\hwzF{\hwz_2} 336 | 337 | \newvariable\rotX[nom={Planar rotation matrix around the $\ax$ axis}]{\vect R_x} 338 | \newvariable\rotY[nom={Planar rotation matrix around the $\ay$ axis}]{\vect R_y} 339 | \newvariable\rotZ[nom={Planar rotation matrix around the $\az$ axis}]{\vect R_z} 340 | 341 | \newvariable\mrot[nom={Magnet rotation/inclination}]{\theta} 342 | \let\mbqmagangle\mrot 343 | 344 | %%%%%%%%%%%%%%%%%%%%%%%% 345 | 346 | \newvariable{\mdip}[nom=Magnetic dipole]{\vect m} 347 | \newvariable{\BHmax}[nom=Maximum energy product,sort=BHmax]{\ensuremath{\gp{BH}_{\mathrm{max}}}} 348 | \newmacro \bhcurve {$B$$H$ curve} 349 | \newmacro \Hinf {\ensuremath{H^\infty}} 350 | 351 | %%%%%%%%%%%%%%%% 352 | %% Eddy currents 353 | 354 | \newvariable\magJeddy[nom=Eddy current density vector]{\vect J_{\mathrm{eddy}}} 355 | \newvariable\forceEddy[nom=Eddy current force vector]{\vect F_{\mathrm{eddy}}} 356 | \newvariable\conductivity[nom=Conductivity]{\sigma} 357 | 358 | \newcommand\half{\textstyle\frac12} 359 | \newcommand\quarter{\textstyle\frac14} 360 | 361 | \newcommand{\dee}[1]{\mathrm{d}#1} 362 | \newcommand{\intd}[3][]{\int#1#2\,\dee{#3}} 363 | \newcommand{\od}[2]{\frac{\dee{#1}}{\dee{#2}}} 364 | \newcommand{\pd}[2]{\frac{\partial #1}{\partial #2}} 365 | 366 | \let\crossprod\times 367 | \let\cross\times 368 | \let\dotprod\cdot 369 | \DeclareRobustCommand\invtimes{\,} 370 | 371 | \let\grad\Grad 372 | \let\curl\Curl 373 | \newcommand{\divgrad}{\nabla^2} 374 | \newcommand{\divgradxyz}[1]{\od{^2#1}{x^2} +\od{^2#1}{y^2} +\od{^2#1}{z^2}} 375 | 376 | \def\T{^{\mathsf{T}}} 377 | 378 | \newcommand\bdot{\bm{\cdot}} 379 | 380 | %%%%%%%%%%%%%%%%%%%%%%%%%%% 381 | %% Vibrations 382 | 383 | \newglossaryentry{vibrations}{name={Vibrations}, description={\nopostdesc}} 384 | \def\nomenparent{vibrations} 385 | 386 | \newvariable\stiffness[nom=Stiffness coefficient]{k} 387 | \newvariable\klin[nom=Linearised stiffness at a certain point]{k_{\mathrm{lin}}} 388 | 389 | \newvariable\ii[nom=The imaginary number $\sqrt{-1}$]{i} 390 | \newvariable\freq[nom=Frequency]{\omega} 391 | 392 | \def\maybedot{} 393 | \newvariable\dispBase[nom=Base displacement,sort=x1]{\noexpand\maybedot x_1} 394 | \newvariable\laplaceBase[nom={Base response, Laplace domain},sort=X1,entry=X_1\fn{\s}]{X_1} 395 | \newcommand\velBase{{\let\maybedot\dot \dispBase}} 396 | \newcommand\accBase{{\let\maybedot\ddot \dispBase}} 397 | 398 | \newvariable\dispMass[nom=Displacement of the vibration mass,sort=x2]{\noexpand\maybedot x_2} 399 | \newvariable\laplaceMass[nom={Vibration mass response, Laplace domain},sort=X2,entry=X_2\fn{\s}]{X_2} 400 | \newcommand\velMass{{\let\maybedot\dot \dispMass}} 401 | \newcommand\accMass{{\let\maybedot\ddot \dispMass}} 402 | 403 | \newvariable\massAbsorb[nom=Vibration neutraliser mass]{m_a} 404 | \newvariable\dispAbsorb[nom=Vibration neutraliser displacement]{x_a} 405 | %\newvariable\respAbsorb[nom={Vibration neutraliser response, Laplace domain}]{X_a\fn{\s}} 406 | \newvariable\dampingAbsorb[nom=Damping coefficient of the vibration neutraliser]{c_a} 407 | \newvariable\stiffnessAbsorb[nom=Stiffness of the vibration neutraliser]{k_a} 408 | \newvariable\forceAbsorb[nom=Active force input for an inertial mass or vibration neutraliser]{f_a} 409 | 410 | % todo 411 | \newcommand\Block[1][999]{% 412 | {\ifcase #1 \def\maybesubscript{_0}\or \def\maybesubscript{_1}\or \def\maybesubscript{_2}\or \def\maybesubscript{_3}\or \def\maybesubscript{_4}\else\fi\transferFunction} 413 | } 414 | \def\maybesubscript{} 415 | \newvariable\transferFunction[nom=Transfer function]{G\noexpand\maybesubscript\fn{\s}} 416 | \newvariable\BlockController[nom=Controller transfer function]{K_c\fn{\s}} 417 | \newcommand\freqHPfilter{\freq_c} 418 | 419 | \newvariable\dampingRel[nom=Relative velocity damping coefficient]{c} 420 | \newvariable\dampingAbs[nom=Absolute velocity (skyhook) damping coefficient]{c_{\mathrm{sky}}} 421 | \let\stiffnessRel\stiffness 422 | \newvariable\forceIn[nom=Force input]{f} 423 | \newvariable\laplaceForce[nom={Force input response, Laplace domain}]{F\fn{\s}} 424 | \newvariable\forceDisturb[nom=Force disturbance]{f_d} 425 | 426 | \newvariable\transmissibility[nom=Transmissibility,entry={T\fn{\s}, T\fn{\freq}}]{T} 427 | \newvariable\varianceGain[nom={Variance gain, alternative of transmissibility $\transmissibility$},entry=V\fn{\freq}]{V} 428 | \newvariable\Time[nom=Time]{t} 429 | \newvariable\period[nom=Period]{T} 430 | \newvariable\inttrans[nom=Root-sum-square of the transmissibility magnitude]{T_{\textsc{rss}}} 431 | 432 | \newcommand\gainArbitrary{g_{(\cdot)}} 433 | \newvariable\gainDisp[nom=Feedback gain on relative displacement]{g_k} 434 | \newvariable\gainVel[nom=Feedback gain on relative velocity]{g_c} 435 | \newvariable\gainAcc[nom=Feedback gain on relative acceleration]{g_a} 436 | \newvariable\gainSkymass[nom=Feedback gain on absolute displacement]{g_m} 437 | \newvariable\gainSkyhook[nom=Feedback gain on absolute velocity]{g_v} 438 | \newvariable\gainSkyspring[nom=Feedback gain on absolute acceleration]{g_d} 439 | 440 | \newvariable\dampingratio[nom={Damping ratio, $0.5\dampingRel/\sqrt{\stiffness\mass}$.}]{\zeta} 441 | 442 | \newvariable\powerSpectMagnet 443 | [nom=Power spectrum accelerometer measurements of the moving magnet] 444 | {P_{mm}\fn{\freq}} 445 | \newvariable\powerSpectBase 446 | [nom=Power spectrum accelerometer measurements of the base disturbance] 447 | {P_{bb}\fn{\freq}} 448 | \newvariable\crossSpectMagnetBase 449 | [nom=Cross spectrum accelerometer measurements between the moving magnet and base disturbance] 450 | {P_{mb}\fn{\freq}} 451 | 452 | \newvariable\potentialEnergy[nom=Potential energy]{U} 453 | 454 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 455 | %% COIL 456 | 457 | \newglossaryentry{coil}{name={Coil}, description={\nopostdesc}} 458 | \def\nomenparent{coil} 459 | 460 | \newcommand\SuffixCoil{c} 461 | \newcommand\surfCoil{\surface_\SuffixCoil} 462 | \newcommand\volCoil{\volume_\SuffixCoil} 463 | \newcommand\diffsurfCoil{\diffsurface_\SuffixCoil} 464 | \newcommand\diffvolCoil{\diffvolume_\SuffixCoil} 465 | 466 | \newcommand\SuffixMagnet{m} 467 | \newcommand\surfMag{\surface_\SuffixMagnet} 468 | \newcommand\volMag{\volume_\SuffixMagnet} 469 | \newcommand\diffsurfMag{\diffsurface_\SuffixMagnet} 470 | \newcommand\diffvolMag{\diffvolume_\SuffixMagnet} 471 | 472 | \newmvar\newvect\distrMag{d} 473 | [headcmd=\boldsubs{1},elemcmd=\mlistelem,elem={\distr_1,\dista_1,\distz_1}] 474 | {nom={Position vector for differential magnet volume in cylindrical coordinates $\distrMag=\inlinevect{\distrMag{1},\distrMag{2},\distrMag{3}}$}, 475 | entry={\vect d_1}} 476 | \newmvar\newvect\distrCoil{d} 477 | [headcmd=\boldsubs{2},elemcmd=\mlistelem,elem={\distr_2,\dista_2,\distz_2}] 478 | {nom={Position vector for differential coil volume in cylindrical coordinates, $\distrCoil=\inlinevect{\distrCoil{1},\distrCoil{2},\distrCoil{3}}$}, 479 | entry={\vect d_2}} 480 | 481 | \newvariable\distr[nom={Radial component of distance vector in cylindrical coordinates}]{r} 482 | \newvariable\dista[nom={Angular component of distance vector in cylindrical coordinates}]{\phi} 483 | \newvariable\distz[nom={Axial component of distance vector in cylindrical coordinates}]{z} 484 | 485 | \newvect\distcMag{d}[headcmd=\boldsubs{1},elemcmd=\mlistelem,elem={x_1,y_1,z_1}] 486 | \newvect\distcCoil{d}[headcmd=\boldsubs{2},elemcmd=\mlistelem,elem={x_2,y_2,z_2}] 487 | 488 | \newvariable\iradiusCoil[nom=Thick coil inner radius]{r_c} 489 | \newvariable\oradiusCoil[nom=Thick coil outer radius]{R_c} 490 | \newvariable\iradiusMag[nom=Magnet inner radius]{r_m} 491 | \newvariable\oradiusMag[nom=Magnet outer radius]{R_m} 492 | \def\radiusMag{\oradiusMag} 493 | \newvariable\cradiusCoil[nom=Clearance between magnet and inner coil radii]{r_g} 494 | 495 | \newvariable\lengthCoil[nom=Coil length]{L_c} 496 | \newvariable\lengthMag[nom=Magnet length]{L_m} 497 | \newvariable\offsetCoilMag[nom=Distance between the axial centres of the coil and magnet]{d_z} 498 | 499 | \newvariable\lengthWire[nom=Length of the wire in the coil]{l_w} 500 | \newvariable\resistanceCoil[nom=Coil resistance]{R} 501 | \newvariable\areaWire[nom=Cross-sectional area of the wire in the coil]{a_w} 502 | \newvariable\resistivity[nom=Resistivity]{\rho} 503 | 504 | \newvariable\turnsCoil[nom=Number of turns in the coil]{N} 505 | \newvariable\turnsRCoil[nom=Number of turns in the radial direction]{N_r} 506 | \newvariable\turnsZCoil[nom=Number of turns in the axial direction]{N_z} 507 | \newvariable\turnsZMag[nom=Magnet equivalent `turns' for filament current model]{N_m} 508 | 509 | \newvariable\radiusWire[nom=Radius of wire]{r_w} 510 | \newvariable\diamWire[nom=Diameter of wire]{d_w} 511 | 512 | \newvariable\current[nom=Current]{I} 513 | \let\currentCoil\current 514 | 515 | \newvariable\COILnmag[nom=Number of smaller permanent magnets]{n} 516 | 517 | %\newvariable\coilDualGap[nom=Gap (axial) between adjacent coils]{G} 518 | 519 | \newvariable\forceFilament[nom={Axial force between two circular current loops}]{F_f} 520 | \newvariable\forceThickCoil[nom={Axial force between a thick coil and a magnet}]{F_c} 521 | \newvariable\radius[nom=Radius]{r} 522 | 523 | \newvariable\Fax[nom={Axial force between two cylindrical thin coils/magnets}]{F_z} 524 | \newvariable\Fecc[nom={Radial force between two cylindrical thin coils/magnets}]{F_r} 525 | \let\Fr\Fecc 526 | \let\forceShell\Fax 527 | 528 | \def\fpeak{\forceMag_{\mathrm{peak}}} 529 | \def\fmax{\forceMag_{\mathrm{max}}} 530 | %\newvariable\fnorm[nom={Thick-coil/magnet force evaluated with a current of \SI{1}{A}}]{\hat \forceThickCoil} 531 | %\newvariable\fnpeak[nom={Peak coil/magnet force over displacement}]{\hat \forceMag_{\mathrm{peak}}} 532 | %\newvariable\fnmax[nom={Optimised coil/magnet peak force}]{\hat \forceMag_{\mathrm{max}}} 533 | %\newvariable\currmax[nom={Maximum current for a given (copper) wire diameter}]{\currentCoil_{\mathrm{max}}\fn{\diamWire}} 534 | \newcommand\fnorm{\hat\forceThickCoil} 535 | \newcommand\fnpeak{\expandafter\hat\fpeak} 536 | \newcommand\fnmax{\expandafter\hat\fmax} 537 | \newcommand\currmax{\currentCoil_{\mathrm{max}}\fn{\diamWire}} 538 | 539 | \newvariable\safetyFactor[nom={Factor of safety}]{S_f} 540 | 541 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 542 | %%%%%%%%%%%%%%%%%%%% QZS %%%%%%%%%%%%%%%%%%%%%%%%% 543 | 544 | \newglossaryentry{qzs}{name={\QZS/}, description={\nopostdesc}} 545 | \def\nomenparent{qzs} 546 | 547 | % parameters 548 | \newvariable\mdim[nom=Cube magnet side length]{a} 549 | \newvariable\ngap[nom=Normalised magnet gap]{d} 550 | \newvariable\ndisp[nom=Normalised nominal magnet displacement]{l} 551 | \newvariable\ndispZ[nom=Normalised nominal magnet displacement]{h} 552 | \newvariable\dmax[nom=Maximum displacement bound]{\delta} 553 | \newvariable\dmin[nom={Closest (normalised) allowable displacement from \qzs/ to avoid instability}]{\epsilon} 554 | \newvariable\mass[nom=Mass]{m} 555 | \let\massMass\mass %% rm 556 | \let\freqdesign\resfreq 557 | \newvariable\damping[nom=Damping coefficient]{c} 558 | 559 | \newvariable\qqO[nom={Polynomial coefficient for modelling magnet force},sort=Qz1]{q_0\fn{\ngap}} 560 | \newvariable\qqII[nom={Polynomial coefficient for modelling magnet force},sort=Qz2]{q_2\fn{\ngap}} 561 | \newvariable\qqIV[nom={Polynomial coefficient for modelling magnet force},sort=Qz2]{q_4\fn{\ngap}} 562 | 563 | \newvariable\ccA[nom=Coefficient for empirical magnet force equation]{Q_0} 564 | \newvariable\ccB[nom=Coefficient for empirical magnet force equation]{Q_1} 565 | \newvariable\ccC[nom=Coefficient for empirical magnet force equation]{Q_2} 566 | \newvariable\ccD[nom=Coefficient for empirical magnet force equation]{Q_3} 567 | \newvariable\nn[nom=Exponential for empirical magnet force equation]{n} 568 | 569 | \newvariable\nk[nom=Nonlinearity measure]{\eta_k} 570 | 571 | % "functions": variables that depend on parameters 572 | 573 | %% single magnets: 574 | \newvariable\magforce[nom=Magnet force for coaxial cube magnets,sort=Fs]{F_s} 575 | \newvariable\nforce[nom=Normalised magnet force for coaxial cube magnets,sort=fs]{f_s} 576 | \newvariable\magstiffness[nom={Magnet stiffness characteristic for coaxial cube magnets},sort=Ks]{K_s} 577 | \newvariable\nstiffness[nom={Normalised magnet stiffness characteristic for coaxial cube magnets},sort=ks]{k_s} 578 | 579 | %% QZS system: 580 | \newmvar\newfunc\frepl{F_{\mathrm{repl}}}[elem={\mdim,\ngap,\ndispZ},index={1,2,3}]{nom=Magnet force (repulsion magnet)} 581 | \newmvar\newfunc\fattr{F_{\mathrm{attr}}}[elem={\mdim,\ngap,\ndispZ},index={1,2,3}]{nom=Magnet force (attraction magnet)} 582 | 583 | \newmvar\newfunc\magforceZ{F_T}[elem={\mdim,\ngap,\ndispZ},index={1,2,3}]{nom=\QZS/ vertical magnet force function} 584 | \newmvar\newfunc\nforceZ{f_T}[elem={\ngap,\ndispZ},index={1,2}]{nom=Normalised \QZS/ vertical magnet force} 585 | \newmvar\newfunc\magstiffnessZ{K_T}[elem={\mdim,\ngap,\ndispZ},index={1,2,3}]{nom=\QZS/ vertical magnet stiffness function} 586 | \newmvar\newfunc\nstiffnessZ{k_T}[elem={\ngap,\ndispZ},index={1,2}]{nom=Normalised \QZS/ vertical magnet stiffness} 587 | 588 | \newmvar\newfunc\krepl{K_{\mathrm{repl}}}[elem={\mdim,\ngap,\heq{} },index={1,2,3}]{nom=Magnet stiffness (repulsion magnet),sort=Krepl} 589 | \newmvar\newfunc\kattr{K_{\mathrm{attr}}}[elem={\mdim,\ngap,\heq{} },index={1,2,3}]{nom=Magnet stiffness (attraction magnet),sort=Kattr} 590 | \newmvar\newfunc\QZSkratio{\kappa}[elem={\mdim,\ngap,\heq{} },index={1,2,3}]{nom=\QZS/ Stiffness ratio} 591 | 592 | \newmvar\newfunc\heq{h_q}[elem={\mdim,\ngap,\mass},index={1,2,3}]{nom=Normalised displacement at equilibrium} 593 | \newmvar\newfunc\keq{K_q}[elem={\mdim,\ngap,\mass},index={1,2,3}]{nom=Stiffness at equilibrium} 594 | \newmvar\newfunc\feq{f_q}[elem={\mdim,\ngap,\mass},index={1,2,3}]{nom=Normalised force at equilibrium} 595 | 596 | \def\mathlog\left[#1\right]{\ln\fn{#1}} 597 | \def\mathatan\left[#1\right]{\arctan\fn{#1}} 598 | \newcommand\eqdef{\stackrel{\makebox[0pt][c]{\tiny def}}{=}} 599 | 600 | \newvariable\ampExcite[nom=Amplitude of sinusoidal base excitation]{A_e} 601 | 602 | %%%%%% ZKS %%%%%%%%% 603 | 604 | \newglossaryentry{zks}{name={\QZS/ inclined springs}, description={\nopostdesc}} 605 | \def\nomenparent{zks} 606 | 607 | \providecommand\labelsize{\scriptsize} 608 | 609 | \newvariable\dispvert[nom={Vertical displacement}]{z} 610 | \newvariable\dispaxial[nom={Axial displacement}]{z} 611 | \newvariable\dispradial[nom=Radial distance between two cylindrical objects]{e_r} 612 | \newvariable\disphoriz[nom=Horizontal displacement]{y} 613 | %\newvariable\ZKSdisp[nom=Vertical displacement of the inclined spring]{z} 614 | \let\ZKSdisp\dispvert 615 | \newvariable\ZKSdispMin[nom=Maximum deflection of the vertical spring]{z_{\mathrm{min}}} 616 | \newvariable\ZKSshift[nom=Horizontal displacement of the inclined spring]{x} 617 | 618 | \newvariable\ZKSwidth[nom=Inclined spring horizontal dimension]{w} 619 | \newvariable\ZKSheight[nom=Inclined spring vertical dimension]{h} 620 | \newvariable\ZKSlength[nom=Undeflected inclined spring length]{L_0} 621 | \newmvar\newfunc\ZKSlengthcomp{L}[elem={\ZKSshift,\ZKSdisp},index={1,2}]{nom=Length of inclined spring under load} 622 | 623 | \newvariable\ZKSvlength[nom=Undeflected vertical spring length]{H_0} 624 | 625 | \newmvar\newfunc\ZKSvlengthcomp{H}[elem={\ZKSshift,\ZKSdisp},index={1,2}]{nom=Length of vertical spring under load} 626 | 627 | \newcommand\ZKSincl{i} 628 | \newcommand\ZKSvert{v} 629 | 630 | \newcommand\ZKScompress{C} 631 | \newvariable\ZKScompressI[ 632 | nom=Compression of the inclined springs at \qzs/]{\ZKScompress_\ZKSincl} 633 | \newvariable\ZKScompressV[ 634 | nom=Compression of the vertical spring at \qzs/]{\ZKScompress_\ZKSvert} 635 | 636 | \newvariable\ZKSlengthratio[ 637 | sort=zzzgreek-g, 638 | nom=Ratio between inclined and vertical 639 | spring lengths]{\eta} 640 | \newvariable\ZKSratio[ 641 | nom=Ratio between the inclined spring 642 | width and height] 643 | {\gamma} 644 | \newvariable\ZKSkratio[ 645 | nom=Ratio between the inclined and 646 | vertical spring stiffnesses] 647 | {\alpha} 648 | 649 | \newvariable\ZKSnorm[nom=Inclined spring normalised displacement in the load bearing direction]{\xi} 650 | %\newvariable\ZKSnormMin[nom=Inclined spring maximum normalised displacement below the equilibrium before the spring reaches zero deflection]{\xi_{\mathrm{min}}} 651 | \newcommand\ZKSnormMin{\ZKSnorm_{\mathrm{min}}} 652 | 653 | \newvariable\ZKSoff[nom=Percentage difference between $\ZKSratio$ and $\ZKSratioQZS$]{\epsilon} 654 | 655 | \newcommand\ZKSQZS{_{\textsc{qzs}}} 656 | 657 | \newcommand 658 | %\newvariable 659 | \ZKSlengthratioQZS 660 | % [nom=Value of $\ZKSlengthratio$ corresponding 661 | % to \qzs/ in both directions] 662 | {\eta\ZKSQZS} 663 | %\newvariable 664 | \newcommand 665 | \ZKSkratioQZS 666 | % [nom=Value of $\ZKSkratio$ corresponding to 667 | % \qzs/ in both directions] 668 | {\alpha\ZKSQZS} 669 | %\newvariable 670 | \newcommand 671 | \ZKSratioQZS 672 | % [nom=Value of $\ZKSratio$ for which \qzs/ in 673 | % the vertical direction is achieved, 674 | % sort=\gamma] 675 | {\ZKSratio\ZKSQZS} 676 | 677 | \newcommand\ZKSstiff{k} 678 | \newvariable\ZKSstiffincl[nom=Inclined spring stiffness]{\ZKSstiff_\ZKSincl} 679 | \newvariable\ZKSstiffvert[nom=Vertical spring stiffness]{\ZKSstiff_\ZKSvert} 680 | 681 | \newvariable\ZKSstiffnessV[nom=Stiffness characteristic in the vertical direction]{K_v} 682 | \newvariable\ZKSstiffnessH[nom=Stiffness characteristic in the horizontal direction]{K_h} 683 | 684 | \newcommand\ZKSforce{F} 685 | \protected\def\SUBSUB{} 686 | \newvariable\ZKSforceincl 687 | [nom={Force characteristic of the inclined spring, with vertical component $\ZKSforceinclV$ and horizontal component $\ZKSforceinclH$}] 688 | {\ZKSforce_{\ZKSincl\SUBSUB}\gdef\SUBSUB{}} 689 | 690 | \newvariable\ZKSforcevert 691 | [nom={Force characteristic of the vertical spring, with vertical component $\ZKSforcevertV$ and horizontal component $\ZKSforcevertH$}] 692 | {\ZKSforce_{\ZKSvert\SUBSUB}\gdef\SUBSUB{}} 693 | 694 | \newvariable\ZKSforcetotal 695 | [nom={Force characteristic of the overall inclined spring \qzs/ mechanism, with vertical component $\ZKSforcetotalV$ and horizontal component $\ZKSforcetotalH$}] 696 | {\ZKSforce_{t\SUBSUB}\gdef\SUBSUB{}} 697 | 698 | \newcommand\ZKSforceinclV{\gdef\SUBSUB{_v}\ZKSforceincl} 699 | \newcommand\ZKSforcevertV{\gdef\SUBSUB{_v}\ZKSforcevert} 700 | \newcommand\ZKSforcetotalV{\gdef\SUBSUB{_v}\ZKSforcetotal} 701 | \newcommand\ZKSforceinclH{\gdef\SUBSUB{_h}\ZKSforceincl} 702 | \newcommand\ZKSforcevertH{\gdef\SUBSUB{_h}\ZKSforcevert} 703 | \newcommand\ZKSforcetotalH{\gdef\SUBSUB{_h}\ZKSforcetotal} 704 | 705 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 706 | % RIG 707 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 708 | 709 | \newglossaryentry{xpmt}{name={Experimental prototype}, description={\nopostdesc}} 710 | \def\nomenparent{xpmt} 711 | 712 | \newvariable\InertiaMoment[nom=Moment of inertia]{I} 713 | \newvariable\InertiaMomentBeam[nom=Beam moment of inertia]{\InertiaMoment_b} 714 | \newvariable\InertiaMomentMagnets[nom=Magnets moment of inertia]{\InertiaMoment_m} 715 | \newvariable\InertiaMomentTotal[nom=Total moment of inertia]{\InertiaMoment_t} 716 | 717 | %\newvariable\MassBeam[nom=Beam mass]{m_b} 718 | %\newvariable\MassBeamOuter[nom=Beam `outer' mass]{m_1} 719 | %\newvariable\MassBeamInner[nom=Beam `inner' mass]{m_2} 720 | \newvariable\LengthBeam[nom=Beam length]{L_b} 721 | \newvariable\HeightBeam[nom=Beam height]{h_b} 722 | \newvariable\WidthBeam[nom=Beam width]{w_b} 723 | \newvariable\ThicknessBeam[nom=Beam shell thickness]{t_b} 724 | 725 | \newvariable\DensityAluminium[nom=Density of aluminium]{\rho_{\mathrm{a}}} 726 | 727 | \newvariable\OriginBeam[nom=Beam pin origin height]{p_b} 728 | \newvariable\OriginMagLow[nom=Low magnet height]{ p_m } 729 | \newvariable\OriginMagHigh[nom=High magnet height]{ p_n } 730 | \newvariable\OriginMagGap[nom=Magnet gap]{ p_g } 731 | \newvariable\OriginQZS[nom=\QZS/ position]{p_q} 732 | 733 | %\newvariable\MassRigMagnets[nom=Mass of the floating magnets and support]{m_m} 734 | \newvariable\LengthRigMagnets[nom=Horizontal offset of the magnets support]{l_m} 735 | \newvariable\HeightRigMagnets[nom=Height of the magnets support]{h_m} 736 | \newvariable\HeightBuffer[nom=Height `buffer' to account for additional thicknesses]{h_{\epsilon}} 737 | 738 | \newvariable\LengthSensor[nom=Horizontal offset of the laser sensor]{l_s} 739 | \newvariable\HeightSensor[nom=Height of the laser sensor]{h_s} 740 | 741 | \newvariable\DisplSensor[nom=Displacement measured by the laser sensor]{x_s} 742 | \newvariable\DisplSensorBeam[nom=Displacement of the beam at the position of the laser sensor from `zero']{ x_b} 743 | \newvariable\DisplSensorBeamProj[nom=Projected displacement of the beam to the magnets support]{ x_p} 744 | \newvariable\DisplMag[nom=Displacement of the magnets support]{x_m} 745 | 746 | %\newvariable\RadiusMag[nom=Radius of the magnets]{r} 747 | %\newvariable\RadiusICoil[nom=Inner radius of the coil]{r_1} 748 | %\newvariable\RadiusOCoil[nom=Outer radius of the coil]{r_2} 749 | \let\RadiusICoil\iradiusCoil 750 | \let\RadiusOCoil\oradiusCoil 751 | \let\RadiusMag\oradiusMag 752 | 753 | %\newvariable\HeightMag[nom=Height of the magnets]{h} 754 | \let\HeightMag\lengthMag 755 | \newvariable\HeightRig[nom=Height of the apparatus]{H} 756 | \newvariable\HeightCoil[nom=Height of the coil]{h_c} 757 | \newvariable\GapCoil[nom=Axial gap between the dual coils]{G} 758 | \let\coilDualGap\GapCoil 759 | 760 | %\newvariable\DispMag[nom=Displacement from \qzs/]{x} 761 | \let\DispMag\disp 762 | %\newvariable\AngleMag[nom=Angle of the beam]{\theta} 763 | \newvariable\MomentMag[nom=Moment produced by the magnet forces]{M_\theta} 764 | \newvariable\ForceRigMagnets[nom=Force to the magnets]{F_x} 765 | %\newvariable\EquivMassRig[nom=Equivalent mass of the beam]{m_e} 766 | 767 | \newvariable\rigNormGap[nom=Normalised magnet gap]{g} 768 | 769 | \newvariable\MagCentre[nom={Magnet centre position},sort=xm]{{x_m}} 770 | 771 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 772 | 773 | %%%%%%%%%%% MULTIPOLE 774 | 775 | \newglossaryentry{mup}{name={Multipole magnet design}, description={\nopostdesc}} 776 | \def\nomenparent{mup} 777 | 778 | \newvariable\mupi[nom={Magnet index in the $\ax$ direction.}]{i} 779 | \newvariable\mupj[nom={Magnet index in the $\ay$ direction.}]{j} 780 | 781 | \newvariable\muplength[nom=Multipole array length]{l} 782 | \newvariable\mupheight[nom=Multipole array height]{h} 783 | %\newvariable\mupdepth[nom=Multipole array depth]{d} 784 | \newvariable\springDepth[nom=Magnetic spring depth]{d} 785 | \let\mupdepth\springDepth 786 | 787 | \newvariable\mupwavelength[nom=Multipole array wavelength]{\lambda} 788 | %\newvariable\mupfacegap[nom=Multipole array face gap]{G} 789 | \let\mupfacegap\magnetGap 790 | %\newvariable\mupmaglength[nom=Length of each magnet in a multipole array]{b} 791 | \let\mupmaglength\faceCub 792 | \newvariable\mupmagperwave[nom=Multipole array number of magnets per wavelength]{R} 793 | \newvariable\mupNmag[nom=Multipole array number of magnets]{N} 794 | \newvariable\mupNwaves[nom=Multipole array number of wavelengths]{W} 795 | \let\mupNwave\mupNwaves % oops 796 | 797 | %\newvariable\mupqlh[nom={Length of horizontally-magnetised quasi-Halbach array magnets}]{m_1} 798 | %\newvariable\mupqlv[nom={Length of vertically-magnetised quasi-Halbach array magnets}]{m_2} 799 | \newcommand\mupqlh{\mupmaglength_1} 800 | \newcommand\mupqlv{\mupmaglength_2} 801 | \newvariable\mupqratio[nom={Ratio between magnet lengths in a quasi-Halbach array}]{\gamma} 802 | 803 | \newvariable\mupmagrot[nom=Multipole array magnetisation rotation between successive magnets]{\vartheta} 804 | \newvariable\mupmagpol[nom=Magnetisation direction of the first magnet in a multipole array]{\vartheta_0} 805 | \newvariable\mupmagpolx[nom=Magnetisation direction in the $\ax$--$\az$ plane of the first magnet in a multipole array]{\vartheta_{xz}} 806 | \newvariable\mupmagpoly[nom=Magnetisation direction in the $\ay$--$\az$ plane of the first magnet in a multipole array]{\vartheta_{yz}} 807 | \newvariable\muphdgap[nom={Dual-multipole array horizontal offset}]{p} 808 | %\newvariable\muphdispl[nom={Multipole array horizontal displacement}]{y} 809 | %\newvariable\mupvdispl[nom={Multipole array vertical displacement}]{z} 810 | \let\muphdispl\disphoriz 811 | \let\mupvdispl\dispvert 812 | %\newvariable\volume[nom=Multipole array volume]{V} 813 | \newvariable\magnamp[nom=Amplitude of magnetisation vector]{M} 814 | 815 | %%%%%%%%% OBLIQUE 816 | 817 | \newglossaryentry{mbq}{name={Inclined magnet design}, description={\nopostdesc}} 818 | \def\nomenparent{mbq} 819 | 820 | \newcommand\mbqvdir{y} 821 | \newcommand\mbqhdir{x} 822 | \newcommand\mbqpdir{z} 823 | \let\mbqvaxis\ay 824 | \let\mbqhaxis\ax 825 | \let\mbqpaxis\az 826 | 827 | \newcommand\mbqvpert{\Delta\mbqvdisp} 828 | \newcommand\mbqhpert{\Delta\mbqhdisp} 829 | \newcommand\mbqrotpert{\Delta\mbqrotz} 830 | 831 | % \newvariable\mbqmass[nom=Inclined]{M} 832 | \let\mbqmass\mass 833 | \newvariable\mbqmomentofinertia[nom=Inclined magnet system moment of inertia]{I_m} 834 | \newvariable\mbqrotz[nom=Inclined magnets planar rotation]{\varphi} 835 | \newcommand\mbqvelrotz{\dot{\mbqrotz}} 836 | \newcommand\mbqaccrotz{\ddot{\mbqrotz}} 837 | \newvariable\mbqvdisp[nom=Inclined magnets vertical displacement]{\mbqvdir} 838 | \newvariable\mbqhdisp[nom=Inclined magnets horizontal displacement]{\mbqhdir} 839 | \newvariable\mbqpdisp[nom=Inclined magnets out-of-plane displacement]{\mbqpdir} 840 | \newcommand\mbqvvel{\dot{\mbqvdisp}} 841 | \newcommand\mbqhvel{\dot{\mbqhdisp}} 842 | \newcommand\mbqpvel{\dot{\mbqpdisp}} 843 | \newcommand\mbqvacc{\ddot{\mbqvdisp}} 844 | \newcommand\mbqhacc{\ddot{\mbqhdisp}} 845 | \newcommand\mbqpacc{\ddot{\mbqpdisp}} 846 | %\newvariable\mbqmagh[nom=Cuboid magnet depth]{a} 847 | %\newvariable\mbqmagw[nom=Cuboid magnet face size]{b} 848 | \let\mbqmagh\lengthCub 849 | \let\mbqmagw\faceCub 850 | 851 | %\newvariable\mbqforce[nom=Force vector between inclined magnets in the global coordinate system]{\vect F} 852 | \let\mbqforce\forceVec 853 | \newvariable\mbqptorque[nom=Inclined magnets torque]{T_\mbqpdir} 854 | 855 | \newcommand\mbqvforce{\forceMag_\mbqvdir} 856 | \newcommand\mbqhforce{\forceMag_\mbqhdir} 857 | \newcommand\mbqpforce{\forceMag_\mbqpdir} 858 | \newcommand\mbqvstiff{\stiffness_\mbqvdir} 859 | \newcommand\mbqhstiff{\stiffness_\mbqhdir} 860 | \newcommand\mbqpstiff{\stiffness_\mbqpdir} 861 | \newcommand\mbqzrotstiff{\stiffness_\varphi} 862 | \newcommand\mbqvdamp{\dampingRel_\mbqvdir} 863 | \newcommand\mbqhdamp{\dampingRel_\mbqhdir} 864 | \newcommand\mbqzrotdamp{\dampingRel_\varphi} 865 | 866 | \newvariable\mbqmforce[nom=Force vector between inclined magnets in the local coordinate systems of the fixed magnet]{\vect G} 867 | %\newvariable\mbqmagangle[nom=Inclined magnets inclination]{\theta} 868 | \newcommand\mbqcompmagangle{\mbqmagangle'} 869 | %\newvariable\mbqcompmagangle[nom=Inlined magnets inclination (complementary)]{\phi} 870 | \newvariable\mbqoffset[nom=Inclined magnets horizontal offset at the nominal position]{d} 871 | 872 | \newvariable\mbqunit[nom={Cuboid magnet unit length, cube root of volume}]{u} 873 | \let\msize\mbqunit 874 | \newvariable\mbqlever[nom={Lever arm}]{l} 875 | \let\leverArm\mbqlever 876 | \newvariable\mbqCoMvec[nom={Displacement vector between magnet centre and centre of mass (lever arm)}]{\vect l} 877 | \newvariable\mbqleverdispl[nom={Displacement vector due to rotation around centre of mass}]{\vect p} 878 | %\newvariable\mbqmagratio[]{\gamma} 879 | %\newvariable\mbqvolume[]{V} 880 | \let\mbqmagratio\ratioCub 881 | \let\mbqvolume\volume 882 | \newvariable\mbqmasseq[nom=Equivalent mass]{m_{\mathrm{eq}}} 883 | \let\masseq\mbqmasseq 884 | 885 | \newvariable\mbqdispl[nom=Position vector]{\vect r} 886 | \newvariable\mbqmdispl[nom=Position vector]{\vect s} 887 | \newvariable\mbqlocl[nom=Displacement vectors from the spring magnet centres to the centre of rotation in the coordinate system of the magnets]{\vect t} 888 | 889 | %\newcommand\mbqrot[1]{\mathbf R(#1)} 890 | \let\mbqrot\rotZ 891 | 892 | %%%%% 893 | 894 | 895 | -------------------------------------------------------------------------------- /thesis-preamble.sty: -------------------------------------------------------------------------------- 1 | %!TEX root = thesis.tex 2 | \ProvidesPackage{thesis-preamble} 3 | 4 | 5 | \RequirePackage{printlen} 6 | \uselengthunit{pt} 7 | 8 | %%% SHORTCUTS 9 | 10 | \RequirePackage[english]{shortwrite} 11 | 12 | \newcommand\code[1]{\texttt{#1}} 13 | \newcommand\note[1]{\unskip\footnote{#1}} 14 | \feetbelowfloat 15 | \setlength{\footmarkwidth}{1.5em} 16 | \setlength{\footmarksep}{0em} 17 | \setlength{\footparindent}{0em} 18 | \footmarkstyle{#1.~} 19 | 20 | \DeclareRobustCommand\dash{% 21 | \unskip\nobreak\thinspace\textemdash\allowbreak\thinspace\ignorespaces} 22 | 23 | \newcommand\acro[1]{\textsc{\MakeLowercase{#1}}} 24 | \newcommand\newacro[1]{\@namedef{#1}{\acro{#1}}} 25 | 26 | \newacro{FFT} 27 | \newacro{PDF} 28 | \newacro{PID} 29 | 30 | \DeclareRobustCommand\maggrade[1]{% 31 | \edef\@tempa{\rmdefault}% 32 | \ifx\f@family\@tempa 33 | \textsc{n#1}% 34 | \else 35 | N#1% 36 | \fi 37 | } 38 | 39 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 40 | 41 | \newcommand\newmacro[2]{\def#1/{#2}} 42 | 43 | \newcommand\price[2][\$]{#1#2} 44 | \newcommand\usdollar{\textsc{u.s.}\$} 45 | 46 | \newmacro \ANSYS {\textsc{ansys}} 47 | \newmacro \Matlab {Matlab} 48 | \newmacro \maglev {maglev} 49 | \newmacro \dof {degree of freedom} 50 | \newmacro \dofs {degrees of freedom} 51 | \newmacro \BnK {Br\"uel~\& Kj\ae r} 52 | \newmacro \magnetorh {magnetorheological} 53 | \newmacro \vibneut {vibration neutraliser} 54 | \newmacro \Vibneut {Vibration neutraliser} 55 | \newmacro \emf {electromotive force} 56 | \newmacro \backemf {back--\emf/} 57 | \newmacro \coordinate {coordinate} 58 | \newmacro \sic {[\textit{sic}]} 59 | 60 | \newmacro \KJMagnetics {% 61 | K\,\&\,J~Magnetics \cite{kjmagnetics}% 62 | } 63 | 64 | \newmacro \threeD {three dimensional} 65 | \newmacro \twoD {two dimensional} 66 | 67 | \newmacro \AC {time varying} 68 | \newmacro \PhD {Ph.\,D\sw@ensuresingleperiod} 69 | \newmacro \qzs {quasi--zero stiffness} 70 | \newmacro \QZS {Quasi--zero stiffness} 71 | \newmacro \RMS {root-mean-square} 72 | \newmacro \RSS {root-sum-square} 73 | 74 | % COMPOUND WORDS 75 | \newcommand \compound [2] {#1\-#2} 76 | 77 | 78 | 79 | 80 | \edef\thesisjobname{\jobname} 81 | \newcommand\chapterinclude[1]{% 82 | \def\jobname{#1} 83 | \include{#1} 84 | \let\jobname\thesisjobname 85 | } 86 | 87 | \newcommand\referpaper[1]{\begin{quote}\textit{#1}\end{quote}} 88 | 89 | \g@addto@macro\quote{\itshape} 90 | 91 | %%% PACKAGES 92 | 93 | \RequirePackage[T1]{fontenc} % sane font encoding 94 | \RequirePackage{textcomp} % provide lots of new symbols 95 | \RequirePackage{lmodern} 96 | \RequirePackage[sc,osf]{mathpazo}% for math 97 | 98 | \usepackage[scaled=0.86]{berasans} 99 | 100 | \RequirePackage{microtype} 101 | \RequirePackage{morefloats} 102 | \RequirePackage{pifont} 103 | \newcommand\diameter{\Pisymbol{psy}{'306}} 104 | \linespread{1.1} % Palatino needs more leading 105 | \frenchspacing 106 | \normalfont 107 | 108 | \RequirePackage[ 109 | process=auto, 110 | crop=pdfcrop, 111 | ps2pdf-options={-dCompatibilityLevel=1.4 -dPDFSETTINGS=/prepress}, 112 | cleanup={.tex,.dvi,.ps,.pdf,.log,-blx.bib,% 113 | .nav,.out,.out.ps,.pfg,.snm,.toc,.mp} 114 | ]{pstool} 115 | 116 | \newcommand\pregen[1]{#1} 117 | 118 | \RequirePackage[utf8]{inputenc}% sane input encoding 119 | \DeclareUnicodeCharacter{2014}{\dash} 120 | \DeclareUnicodeCharacter{2022}{\item} 121 | 122 | \RequirePackage{siunitx} 123 | \protected\def\sipi{\mbox{\ensuremath{\pi}}} 124 | \sisetup{numaddn=\sipi} 125 | 126 | \RequirePackage{ 127 | calc, 128 | colortbl, 129 | graphicx, 130 | epstopdf, 131 | etex, 132 | import, 133 | minibox, 134 | multicol, 135 | psfrag, 136 | refstyle, 137 | soul, 138 | suffix, 139 | varioref, 140 | xcolor, 141 | zref, 142 | } 143 | 144 | \let\setstretch\setSpacing % memoir is stupid 145 | \RequirePackage[format=plain,indent=\parindent,labelfont={sc,small},textfont={rm,small,stretch=1.15}]{caption} 146 | \captionsetup[table]{position=top} 147 | \subcaptionlabelfont{\normalfont} 148 | \subcaptionfont{\normalfont} 149 | 150 | %%% NOMEN 151 | 152 | \usepackage[section,sanitize]{glossaries} 153 | \usepackage{glossary-longragged} 154 | 155 | \newglossarystyle{wspr}{% 156 | \renewenvironment{theglossary}% 157 | {\begin{longtable}{@{}l@{\,}>{\raggedright}p{\glsdescwidth}% 158 | >{\raggedright}p{\glspagelistwidth}@{}}}% 159 | {\end{longtable}}% 160 | \renewcommand*{\glossaryheader}{% 161 | \bfseries\entryname~&\bfseries\descriptionname& 162 | \bfseries\pagelistname\tabularnewline\endhead}% 163 | \renewcommand*{\glsgroupheading}[1]{}% 164 | \renewcommand*{\glossaryentryfield}[5]{% 165 | \glsentryitem{##1}\glstarget{##1}{##2} & ##3 & ##5\tabularnewline}% 166 | \renewcommand*{\glossarysubentryfield}[6]{% 167 | & 168 | \glssubentryitem{##2}% 169 | \glstarget{##2}{\strut}##4 & ##6\tabularnewline}% 170 | \renewcommand*{\glsgroupskip}{ & &\tabularnewline}% 171 | } 172 | 173 | \glossarystyle{wspr} 174 | \glsdisablehyper 175 | 176 | \makeglossaries 177 | \renewcommand\glossaryname{Nomenclature} 178 | \renewcommand\entryname{Symbol} 179 | \renewcommand\pagelistname{Page} 180 | %\addtolength\glsdescwidth{1cm} 181 | \addtolength\glspagelistwidth{1.8cm} 182 | 183 | 184 | \usepackage{docmute} 185 | 186 | %%%%%%%%%%%%%%%%%%%% 187 | 188 | %% MATHS 189 | \RequirePackage{amsmath,amssymb,bm,cool,mathtools,fngp} 190 | \let\PI\relax 191 | \newacro{PI} 192 | 193 | \RequirePackage{mlist} 194 | \RequirePackage{thesis-maths} 195 | \@ifpackageloaded{mathpazo}{\PassOptionsToPackage{mathpazo}{flexisym}}{} 196 | \RequirePackage{breqn} 197 | \setkeys{breqn}{labelprefix=eq:} 198 | 199 | %%%%%%%%%%% 200 | 201 | \EndPreamble 202 | 203 | 204 | \RequirePackage[style=british]{csquotes} 205 | \MakeOuterQuote{"} 206 | 207 | %% Hyperref 208 | \RequirePackage[breaklinks,plainpages=false,pdfpagelabels]{hyperref} 209 | \pdfstringdefDisableCommands{\def\dash{ - }} 210 | 211 | \definecolor{darkred}{rgb}{0.4,0,0} 212 | \definecolor{darkgreen}{rgb}{0,0.4,0} 213 | \definecolor{darkblue}{rgb}{0,0,0.4} 214 | %\hypersetup{linkcolor=darkred, citecolor=darkblue, filecolor=black, urlcolor=black} 215 | \hypersetup{linkcolor=black , citecolor=black , filecolor=black, urlcolor=black} 216 | \AtBeginDocument{\hypersetup{pdfauthor={\@author},pdftitle={\@title}}} 217 | 218 | \RequirePackage[open,openlevel=4]{bookmark} 219 | \RequirePackage{hypcap} 220 | 221 | %% biblatex 222 | \RequirePackage[ 223 | hyperref,backref, 224 | sortcites, 225 | date=short, 226 | bibencoding=inputenc, 227 | maxcitenames=2, 228 | mincitenames=1, 229 | maxbibnames=10, 230 | minbibnames=10, 231 | firstinits=true, 232 | sorting=nyt, 233 | bibstyle=numeric, 234 | citestyle=numeric-comp, 235 | backref, 236 | block=ragged, 237 | isbn=false, 238 | % biburlnumpenalty=9000, 239 | % biburlucpenalty=9000, 240 | % biburllcpenalty=9000, 241 | ]{biblatex} 242 | \def\bibfont{\small} 243 | \bibliography{journals,phd,ARK} 244 | \renewbibmacro*{in:}{}% remove "In: " before the journal title 245 | \AtBeginDocument{\renewcommand\bibname{References}} 246 | 247 | % bibtex default to apply SENTENCE CASE to bib titles 248 | \DeclareFieldFormat{sentencecase}{\MakeSentenceCase{#1}} 249 | 250 | \renewbibmacro*{title}{% 251 | \ifthenelse{\iffieldundef{title}\AND\iffieldundef{subtitle}} 252 | {} 253 | {\ifthenelse{\ifentrytype{article}\OR\ifentrytype{inbook}% 254 | \OR\ifentrytype{incollection}\OR\ifentrytype{inproceedings}% 255 | \OR\ifentrytype{inreference}} 256 | {\printtext[title]{% 257 | \printfield[sentencecase]{title}% 258 | \setunit{\subtitlepunct}% 259 | \printfield[sentencecase]{subtitle}}}% 260 | {\printtext[title]{% 261 | \printfield[sentencecase]{title}% 262 | \setunit{\subtitlepunct}% 263 | \printfield[sentencecase]{subtitle}}}% 264 | \newunit}% 265 | \printfield{titleaddon}} 266 | 267 | 268 | \def\nobreakbefore{% 269 | \relax\ifvmode\else 270 | \ifhmode 271 | \ifdim \lastskip > 0pt\relax 272 | \unskip\nobreakspace 273 | \fi 274 | \fi 275 | \fi 276 | } 277 | \let\oldcite\cite 278 | \renewcommand\cite{\nobreakbefore\oldcite} 279 | \let\oldcite\parencite 280 | \renewcommand\parencite{\nobreakbefore\oldcite} 281 | 282 | \ifpdf 283 | \setkeys{Gin}{quiet} 284 | \fi 285 | 286 | \ifpdf % otherwise pstool screws up 287 | \RequirePackage[inline]{asymptote} 288 | \renewcommand\asydir{asy} 289 | \fi 290 | 291 | %% HUH?!?! 292 | 293 | \def\asy@input@graphic{% 294 | \IfFileExists{"\AsyFile.tex"}{% 295 | \catcode`:=12\relax 296 | \let\TMPII\jobname 297 | \let\jobname\Jobname 298 | \@@input"\AsyFile.tex"\relax 299 | \let\jobname\TMPII 300 | }{% 301 | \PackageWarning{asymptote}{file `\AsyFile.tex' not found}% 302 | }% 303 | } 304 | 305 | %%%%%%%%%%%%%%%%% 306 | %%% FIGURES 307 | 308 | \RequirePackage{pgfplots} 309 | 310 | \let\subfloat\subbottom 311 | 312 | \def\phdpath{PhD/} 313 | \def\coilpath{\phdpath Coil/fig/} 314 | 315 | \newcommand\grf[2][]{\includegraphics[#1]{\phdpath #2}} 316 | 317 | \newcommand\ImportIfFileExists[4]{% 318 | \IfFileExists{#1#2} 319 | {\import{#1}{#2}#3} 320 | {#4}} 321 | 322 | % Symmetric ragged commands 323 | \newcommand\IfOddPage{% 324 | \checkoddpage 325 | \ifoddpage\expandafter\@firstoftwo 326 | \else\expandafter\@secondoftwo\fi} 327 | \newcommand\raggedout{\IfOddPage\raggedright\raggedleft} 328 | \newcommand\raggedin{\IfOddPage\raggedleft\raggedright} 329 | 330 | % Subfigures 331 | \newsubfloat{figure} 332 | \newenvironment{subfigure}[1][0.4]{% 333 | \begin{minipage}[t]{#1\linewidth} 334 | \centering 335 | \let\caption\subcaption 336 | }{% 337 | \end{minipage}% 338 | } 339 | \newenvironment{sidefigure}[1][0.4]{% 340 | \begin{minipage}[t]{#1\linewidth} 341 | \centering 342 | }{% 343 | \end{minipage}% 344 | } 345 | 346 | % wide: 347 | \newenvironment{wide}{% 348 | \begin{adjustwidth*}{0pt}{-\marginparsep-\marginparwidth} 349 | \raggedout 350 | }{% 351 | \end{adjustwidth*}% 352 | } 353 | 354 | %% Force font sizes in MathPSfrag & matlabfrag: 355 | \def\PFGstyle{\footnotesize} 356 | \def\matlabtextA{\footnotesize} 357 | \def\matlabtextB{\footnotesize} 358 | \def\matlabtextC{\footnotesize} 359 | 360 | %% 361 | \newcommand\gridIV[5][1em]{% 362 | #2\hspace{#1}#3\\ 363 | [#1]#4\hspace{#1}#5} 364 | \newcommand\gridVI[7][0.5em]{% 365 | #2\hspace{#1}#3\hspace{#1}#4\\[#1] 366 | #5\hspace{#1}#6\hspace{#1}#7} 367 | 368 | \strictpagecheck 369 | 370 | % Make maths use lining numbers: (old-style look bad most-times) 371 | \DeclareMathSymbol{0}{0}{letters}{'060} 372 | \DeclareMathSymbol{1}{0}{letters}{'061} 373 | \DeclareMathSymbol{2}{0}{letters}{'062} 374 | \DeclareMathSymbol{3}{0}{letters}{'063} 375 | \DeclareMathSymbol{4}{0}{letters}{'064} 376 | \DeclareMathSymbol{5}{0}{letters}{'065} 377 | \DeclareMathSymbol{6}{0}{letters}{'066} 378 | \DeclareMathSymbol{7}{0}{letters}{'067} 379 | \DeclareMathSymbol{8}{0}{letters}{'070} 380 | \DeclareMathSymbol{9}{0}{letters}{'071} 381 | 382 | %%%%%%%%%%%%% 383 | %! FLOATS 384 | \renewcommand{\topfraction}{.8} 385 | \renewcommand{\bottomfraction}{.3} 386 | \renewcommand{\textfraction}{.15} 387 | \renewcommand{\floatpagefraction}{.66} 388 | \renewcommand{\dbltopfraction}{.66} 389 | \renewcommand{\dblfloatpagefraction}{.66} 390 | \setcounter{topnumber}{9} 391 | \setcounter{bottomnumber}{9} 392 | \setcounter{totalnumber}{20} 393 | \setcounter{dbltopnumber}{9} 394 | 395 | \renewenvironment{figure}[1][\fps@figure] 396 | {\edef\@tempa{\noexpand\@float{figure}[#1]} 397 | \@tempa\capstart\centering} 398 | {\end@float} 399 | \renewenvironment{table}[1][\fps@table] 400 | {\edef\@tempa{\noexpand\@float{table}[#1]} 401 | \@tempa\capstart\centering} 402 | {\end@float} 403 | 404 | 405 | %% Floats & captions 406 | \captionnamefont{\scshape} 407 | %\setlength\captionwidth{0.9\linewidth} 408 | %\changecaptionwidth 409 | 410 | \newcommand\lofcaption[2]{\caption[#1]{#1#2}} 411 | \DeclareRobustCommand\periodifnocomma{\@ifnextchar,{}{.}} 412 | 413 | %%%%%%%%%%%% 414 | % These are the varioref definitions: 415 | % \newcommand{\varioprefix}{See~} 416 | % \newcommand{\myvariohook}[1]{\marginpar{\small\centering \varioprefix #1}} 417 | % \def\reftextcurrent{} 418 | % \def\reftextfaceafter{} 419 | % \def\reftextfacebefore{} 420 | % \def\reftextafter{~on the \reftextvario{following}{next} page} 421 | % \def\reftextbefore{~on the \reftextvario{previous page}{preceding page}} 422 | % \def\reftextafter{} 423 | % \def\reftextbefore{} 424 | % \def\reftextfaraway#1{\myvariohook{p.\,\pageref{#1}}} 425 | % \def\reftextpagerange#1#2{\myvariohook{pp.\,\pageref{#1}--\pageref{#2}}} 426 | 427 | %%%%%%%%%%%%%%%%%%%%% 428 | %! MEMOIR CUSTOMISE 429 | 430 | \maxsecnumdepth{subsection} % number subsections 431 | \maxtocdepth{subsection} % include subsections in ToC 432 | 433 | \renewcommand{\cftchapterpagefont}{} 434 | \renewcommand{\cftchapterfont}{} % no bold! 435 | \renewcommand\cftdotsep{999} % no dots 436 | 437 | % for page numbers: 438 | \newcommand\thesispage{\normalfont \thepage} 439 | 440 | %%% CHAPTERS 441 | \makechapterstyle{wspr}{% 442 | \setlength\beforechapskip{0pt} 443 | \setlength\midchapskip{0pt} 444 | \setlength\afterchapskip{40pt} 445 | \renewcommand\chapnamefont{% 446 | \normalfont\centering\large\scshape\MakeLowercase} 447 | \renewcommand\chapnumfont{% 448 | \normalfont\centering\fontsize{60pt}{0pt}\selectfont} 449 | \renewcommand\chaptitlefont{% 450 | \normalfont\HUGE\bfseries\centering} 451 | \renewcommand\printchaptername{% 452 | \marginpar{\chapnamefont{\@chapapp}}} 453 | \renewcommand\chapternamenum{} 454 | \renewcommand\printchapternum{% 455 | \marginpar{\chapnumfont\thechapter}} 456 | \makeoddfoot{plain}{}{\thesispage}{} 457 | } 458 | \chapterstyle{wspr} 459 | 460 | 461 | %%% SECTIONS 462 | \newcommand\marginnum[2]{% 463 | \noindent 464 | \let\@tempa\relax 465 | \savebox\@tempboxa{#2}% 466 | %\null\marginpar{#1\@tempa}% 467 | #1\@tempa\quad#2} 468 | 469 | \def\secstyle{\centering\scshape} 470 | \def\subsecstyle{\centering\itshape} 471 | \def\subsubsecstyle{\centering\small\itshape} 472 | 473 | \setsecheadstyle{\marginnum\secstyle} 474 | \setsubsecheadstyle{\marginnum\subsecstyle} 475 | \setsubsubsecheadstyle{\marginnum\subsubsecstyle} 476 | 477 | \setsecnumformat{\unexpanded{% 478 | \protected@xdef\@tempa{{\upshape\S\csname the#1\endcsname}}}} 479 | 480 | %%%%% 481 | 482 | \renewcommand\contentsname{Table of Contents} 483 | \nouppercaseheads 484 | 485 | \def\printtoctitle#1{\section*{#1}} 486 | \def\printloftitle#1{\section*{#1}} 487 | \def\printlottitle#1{\section*{#1}} 488 | 489 | %%%%% 490 | 491 | %% Page headers 492 | \setlength{\headheight}{\baselineskip} 493 | \setlength{\headwidth}{\textwidth+\marginparsep+0.5\marginparwidth} 494 | \makepagestyle{wspr} 495 | \makepsmarks{wspr}{% 496 | \let\@mkboth\markboth% 497 | \def\chaptermark##1{% 498 | \markboth{% 499 | \if@mainmatter 500 | \textsc{Chapter \thechapter:} % 501 | \fi 502 | ##1}{##1}}% 503 | \def\sectionmark##1{% 504 | \markright{% 505 | \if@mainmatter 506 | \textsc{\S\thesection:} % 507 | \fi 508 | ##1}}} 509 | \makerunningwidth{wspr}{\headwidth} 510 | \makeheadposition{wspr}{flushright}{flushleft}{}{} 511 | \makeevenhead{wspr}{\thesispage} {} {\small\leftmark} 512 | \makeoddhead{wspr} {\small\rightmark} {} {\thesispage} 513 | \pagestyle{wspr} 514 | 515 | \makeheadrule{wspr}{\dimexpr\textwidth+0.5\marginparwidth+\marginparsep\relax}{0.4pt} 516 | 517 | %%% LISTS 518 | \renewcommand*{\descriptionlabel}[1]{\hspace\labelsep\normalfont\itshape #1} 519 | \firmlists* 520 | \renewcommand\labelitemi{\textbf{--}} 521 | 522 | \addtolength\cftbeforechapterskip{-1pt} 523 | 524 | \renewcommand \cftchapterfont {\scshape} 525 | \renewcommand \cftsectionfont {\normalfont} 526 | \renewcommand \cftsubsectionfont {\itshape\small} 527 | \renewcommand \cftsubsectionpagefont {\upshape\small} 528 | 529 | \renewcommand \cftfigurefont {\small} 530 | \renewcommand \cfttablefont {\small} 531 | 532 | %%% 533 | 534 | \raggedbottom 535 | \renewcommand{\insertchapterspace}{% 536 | \addcontentsline{lof}{chapter}{% 537 | \protect\chapternumberline{\thechapter}\f@rtoc}% 538 | \addcontentsline{lot}{chapter}{% 539 | \protect\chapternumberline{\thechapter}\f@rtoc}% 540 | } 541 | 542 | %%% epigraphs 543 | 544 | \setlength\epigraphwidth{0.6\textwidth} 545 | \epigraphfontsize{\footnotesize\em} 546 | 547 | 548 | 549 | 550 | 551 | %%% trick asy 552 | 553 | \def\ASYprefix{} 554 | \newbox\ASYbox 555 | \newdimen\ASYdimen 556 | \long\def\ASYbase#1#2{\leavevmode\setbox\ASYbox=\hbox{#1}\ASYdimen=\ht\ASYbox% 557 | \setbox\ASYbox=\hbox{#2}\lower\ASYdimen\box\ASYbox} 558 | \long\def\ASYaligned(#1,#2)(#3,#4)#5#6#7{\leavevmode% 559 | \setbox\ASYbox=\hbox{#7}% 560 | \setbox\ASYbox\hbox{\ASYdimen=\ht\ASYbox% 561 | \advance\ASYdimen by\dp\ASYbox\kern#3\wd\ASYbox\raise#4\ASYdimen\box\ASYbox}% 562 | \put(#1,#2){#5\wd\ASYbox 0pt\dp\ASYbox 0pt\ht\ASYbox 0pt\box\ASYbox#6}}% 563 | \long\def\ASYalignT(#1,#2)(#3,#4)#5#6{% 564 | \ASYaligned(#1,#2)(#3,#4){% 565 | \special{pdf:q #5 0 0 cm}% 566 | }{% 567 | \special{pdf:Q}% 568 | }{#6}} 569 | \long\def\ASYalign(#1,#2)(#3,#4)#5{\ASYaligned(#1,#2)(#3,#4){}{}{#5}} 570 | \def\ASYraw#1{#1} 571 | 572 | -------------------------------------------------------------------------------- /thesis.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wspr/thesis/5f10178c3ee7ef76c09b9158fc4edfdcecf92bbc/thesis.pdf -------------------------------------------------------------------------------- /thesis.tex: -------------------------------------------------------------------------------- 1 | \documentclass[11pt,a4paper]{memoir} 2 | \usepackage{thesis-preamble} 3 | \EndPreamble 4 | \begin{document} 5 | 6 | \title{ 7 | Modelling and design of magnetic levitation systems for vibration isolation 8 | } 9 | 10 | \chapterinclude{front} 11 | 12 | \frontmatter 13 | \pagestyle{plain} 14 | 15 | \chapterinclude{abstract} 16 | \cleardoublepage 17 | 18 | \pagestyle{wspr} 19 | 20 | \renewcommand\tocheadstart{} 21 | \renewcommand\aftertoctitle{} 22 | \renewcommand\lofheadstart{} 23 | \renewcommand\afterloftitle{} 24 | \renewcommand\lotheadstart{} 25 | \renewcommand\afterlottitle{} 26 | 27 | \tableofcontents* 28 | \clearpage 29 | \listoftables 30 | \clearpage 31 | \listoffigures 32 | \clearpage 33 | 34 | \renewcommand\glossarypreamble{% 35 | \addcontentsline{toc}{chapter}{Nomenclature} 36 | \thispagestyle{chapter} 37 | Most mathematical symbols used in this document are listed herein with page number cross-referencing. 38 | Page numbers listed will not include where these symbols are used in graphs or some figures. 39 | There are some cases where the same symbol has been used for multiple purposes; these should be unambiguous based on the context of the work. 40 | 41 | In mathematical contexts, care has been take to be consistent in the use of parentheses for function arguments (such as $f(x)=x^2$) and square brackets for both grouping ($A\times\gp{B\times C}$) and vector/matrix notation ($\vect F = \inlinevect{F_x,F_y,F_z}$). 42 | \par\bigskip 43 | } 44 | \small\printglossary[title=\glossaryname,toctitle=\glossaryname]\normalsize 45 | 46 | \cleardoublepage 47 | \mainmatter 48 | \chapterinclude{intro} 49 | \chapterinclude{magnet-theory} 50 | \chapterinclude{magnet-design} 51 | \chapterinclude{multipole} 52 | \chapterinclude{coil-design} 53 | \chapterinclude{qzs} 54 | \chapterinclude{xpmt} 55 | 56 | \renewcommand\insertchapterspace{} % kill LoF and LoT chapter headings 57 | \chapterinclude{conclusion} 58 | 59 | %\backmatter % kills appendix numbering 60 | \clearpage 61 | 62 | \DeleteQuotes 63 | \MakeInnerQuote{"} 64 | \printbibliography 65 | 66 | \clearpage 67 | 68 | \appendix 69 | \include{repro-research} 70 | 71 | \thispagestyle{empty} 72 | \null 73 | \clearpage 74 | 75 | \end{document} 76 | 77 | # Figure 1.7: make like Figure 1.6 78 | # coil design scalebox :( 79 | -------------------------------------------------------------------------------- /xpmt/rig-coil.asy: -------------------------------------------------------------------------------- 1 | 2 | import phdfig; 3 | 4 | texpreamble("\ 5 | \providecommand\RadiusMag{r_m}\ 6 | \providecommand\HeightMag{h_m}\ 7 | \providecommand\RadiusICoil{r_1}\ 8 | \providecommand\RadiusOCoil{r_2}\ 9 | \providecommand\HeightCoil{h_c}\ 10 | \providecommand\GapCoil{g_c}\ 11 | "); 12 | 13 | unitsize(2mm); 14 | 15 | real magR = 9.5/2, magH = 12.7; 16 | real coilRi = 6, coilRo = 8, coilH = 5, coilG = magH/2; 17 | real shimRi = 5.5, shimRo = 9, shimHx = 3; 18 | 19 | draw((magH,0)--(27,0),grey+dashed); 20 | 21 | real a=5pt; 22 | real x=15; 23 | path p = (x,0)--(x,magR); 24 | draw(p,Arrow(a),L="$\RadiusMag$",align=E); 25 | x = 20; 26 | p = (x,0)--(x,coilRi); 27 | draw(p,Arrow(a),L="$\RadiusICoil$",align=E); 28 | x = 25; 29 | p = (x,0)--(x,coilRo); 30 | draw(p,Arrow(a),L="$\RadiusOCoil$",align=E); 31 | 32 | real y = 10; 33 | p = (-coilH/2,y)--(coilH/2,y); 34 | draw(p,Arrows(a),L="$\strut\HeightCoil$",align=N); 35 | p = (coilH/2+coilG,y)--(3coilH/2+coilG,y); 36 | draw(p,Arrows(a),L="$\strut\HeightCoil$",align=N); 37 | p = (coilH/2,y)--(coilH/2+coilG,y); 38 | draw(p,Arrows(a),L="$\strut\GapCoil$",align=N); 39 | 40 | y = -y; 41 | p = (coilH/2+coilG/2-magH/2,y)--(coilH/2+coilG/2+magH/2,y); 42 | draw(p,Arrows(a),L="$\HeightMag$",align=S); 43 | 44 | dual_coil(Lm=magH , Rm=magR ,Lc=coilH,R1=coilRi,R2=coilRo,Gap=coilG,Disp=coilG/2+coilH/2,Origin=(0,0)); 45 | 46 | pair[] z; 47 | z[0] = (-coilH/2-shimHx,shimRi); 48 | z[1] = (z[0].x,shimRo); 49 | z[2] = z[1]+(shimHx,0); 50 | z[3] = (z[2].x,coilRi); 51 | z[4] = z[3]+(coilH,0); 52 | z[5] = (z[4].x,shimRo); 53 | z[6] = z[5]+(coilG,0); 54 | z[7] = (z[6].x,coilRi); 55 | z[8] = z[7]+(coilH,0); 56 | z[9] = (z[8].x,shimRo); 57 | z[10] = z[9]+(shimHx,0); 58 | z[11] = (z[10].x,shimRi); 59 | 60 | draw(z[0]--z[1]--z[2]--z[3]--z[4]--z[5]--z[6]--z[7]--z[8]--z[9]--z[10]--z[11]--cycle); 61 | 62 | 63 | z[0] = (-coilH/2-shimHx,-shimRi); 64 | z[1] = (z[0].x,-shimRo); 65 | z[2] = z[1]+(shimHx,0); 66 | z[3] = (z[2].x,-coilRi); 67 | z[4] = z[3]+(coilH,0); 68 | z[5] = (z[4].x,-shimRo); 69 | z[6] = z[5]+(coilG,0); 70 | z[7] = (z[6].x,-coilRi); 71 | z[8] = z[7]+(coilH,0); 72 | z[9] = (z[8].x,-shimRo); 73 | z[10] = z[9]+(shimHx,0); 74 | z[11] = (z[10].x,-shimRi); 75 | 76 | draw(z[0]--z[1]--z[2]--z[3]--z[4]--z[5]--z[6]--z[7]--z[8]--z[9]--z[10]--z[11]--cycle); 77 | 78 | -------------------------------------------------------------------------------- /xpmt/rig-schematic.asy: -------------------------------------------------------------------------------- 1 | 2 | texpreamble(" 3 | \providecommand\BlockInertiaLength{a} 4 | \providecommand\BlockInertiaHeight{b} 5 | \providecommand\BlockInertiaOffset{d} 6 | \providecommand\LengthRigMagnets{ L_m } 7 | \providecommand\HeightRigMagnets{ h_m } 8 | \providecommand\LengthSensor{ L_s } 9 | \providecommand\HeightSensor{ h_s } 10 | \providecommand\HeightRig{ H } 11 | \providecommand\OriginBeam{ o_b } 12 | \providecommand\DisplSensor{ x_s } 13 | \providecommand\OriginMagLow{ o_m } 14 | \providecommand\OriginMagHigh{ o_n } 15 | \providecommand\OriginMagGap{ x_0 } 16 | \usepackage{minibox} 17 | "); 18 | 19 | import phdfig; 20 | 21 | unitsize(1mm); 22 | 23 | real frameW = 55, frameH = 70, frameD = 5, frameT = 5, frameB = 70; 24 | real emH = 10, emRi = 8, emRo = 12, emMagR = 5, emMagH = 6, emMagGap = 4; 25 | 26 | real magY = 5; // height of shaker magnet above ground 27 | 28 | real groundW = 15, groundH = 5, groundY = 5, groundWhiskers = 7; 29 | real whiskersL = 0.6*groundH; 30 | 31 | real beamY = 20, beamL = 1.8(frameW-frameT), beamH = 7; 32 | real magX = 0.98beamL, magW = 5, magH = 6, magSep = 10, magGap = 3; 33 | real suppW = 0.6*magW; 34 | real pinY = 20, pinH = 5; 35 | 36 | real lw_body = 1pt; 37 | real lw_dim = 0.4pt; 38 | defaultpen(linewidth(lw_body)); 39 | 40 | real coilRi = 4, coilRo = 6, coilH = 7; 41 | 42 | real sensorX = 50, sensorH = 20, sensorW = 8, sensorSuppH = 7, sensorSuppW = 3; 43 | 44 | real a = 5pt; // arrow size 45 | real tmp; 46 | 47 | pair[] z=new pair[200]; 48 | path[] p; 49 | pair O = (0,0); 50 | 51 | // ground shaker 52 | 53 | z[1] = O + (frameT/2,0); 54 | z[2] = O - (frameT/2,0); 55 | z[3] = z[1] + (0,magY); 56 | z[4] = z[2] + (0,magY); 57 | draw(z[1]--z[3]--z[4]--z[2]--cycle); // shaker magnet support 58 | 59 | drawground(width=groundW,wlen=whiskersL,whiskers=groundWhiskers); 60 | magnet2d(width=2emMagR,height=emMagH,dist=(0,magY+emMagH/2),magangle=90); 61 | label("\minibox{Ground\\Shaker}",(21,magY+emMagH/2)); 62 | 63 | // shaker coil 64 | 65 | z[9] = (emRi, magY+emMagH+emMagGap); 66 | z[10] = (emRo, z[9].y); 67 | z[11] = z[10]-(0,emH); 68 | z[12] = z[9] -(0,emH); 69 | 70 | p = z[9]--z[10]--z[11]--z[12]--cycle^^z[9]--z[11]^^z[10]--z[12]; 71 | 72 | draw(p); 73 | draw(shift(-2emRi-(emRo-emRi))*p); 74 | 75 | // FRAME (bottom half) 76 | 77 | z[13] = z[10]; 78 | z[14] = (-z[10].x,z[10].y); 79 | z[15] = z[13]+(0,frameT); 80 | z[16] = z[14]+(0,frameT); 81 | z[17] = ( frameT/2,z[15].y); 82 | z[18] = (-frameT/2,z[16].y); 83 | z[19] = z[17] + (0,frameD); 84 | z[20] = z[18] + (0,frameD); 85 | 86 | // top half 87 | 88 | z[21] = ( frameB,z[19].y); 89 | z[22] = (-frameB,z[21].y); 90 | z[23] = z[21] + (0,frameT); 91 | z[24] = z[22] + (0,frameT); 92 | z[25] = ( frameW,z[23].y); 93 | z[26] = (-frameW,z[24].y); 94 | z[27] = z[25] + (0,frameH); 95 | z[28] = z[26] + (0,frameH); 96 | 97 | draw(z[13]--z[15]--z[17]--z[19]--z[21]--z[23]--z[25]--z[27]--z[28]--z[26]--z[24]--z[22]--z[20]--z[18]--z[16]--z[14]--cycle); 98 | 99 | 100 | // inner 101 | 102 | // SE, SW, NE, NW 103 | z[29] = z[25] + (-frameT,0); 104 | z[30] = z[26] + ( frameT,0); 105 | z[31] = z[27] - (frameT,frameT); 106 | z[32] = z[28] + (frameT,-frameT); 107 | 108 | 109 | // ground and springs 110 | 111 | z[131] = 0.5*(z[23]+z[25]); 112 | z[132] = 0.5*(z[24]+z[26]); 113 | z[33] = z[131] + (0,frameH+groundY); 114 | z[34] = z[132] + (0,frameH+groundY); 115 | 116 | drawspring(z[131],z[33],points=12); 117 | drawspring(z[132],z[34],points=12); 118 | 119 | label(L=rotate(90)*("Support springs"),(z[131]+z[33])/2+(10,0)); 120 | 121 | drawground(z[33],angle=180,width=groundW,wlen=whiskersL,whiskers=groundWhiskers); 122 | drawground(z[34],angle=180,width=groundW,wlen=whiskersL,whiskers=groundWhiskers); 123 | 124 | // beam 125 | 126 | z[35] = z[30] + (pinH,pinY); 127 | 128 | drawpinonly( origin = z[35], 129 | height = pinH, 130 | angle = -90); 131 | 132 | label("\minibox{Pin\\joint}",z[35],NE); 133 | 134 | z[36] = z[35] + (beamL,0); 135 | z[37] = z[36] + (0,-beamH); 136 | z[38] = z[35] + (0,-beamH); 137 | 138 | draw(z[35]--z[36]--z[37]--z[38]--cycle); 139 | 140 | label(L="Beam",(z[35]+z[36]+z[37]+z[38])/4); 141 | 142 | // MAGNETS 143 | 144 | pair magCentre = z[30] + (magX,0); 145 | 146 | // base support 147 | z[40] = magCentre + (-suppW/2,0); 148 | z[41] = z[40] + (suppW,0); 149 | z[42] = (z[41].x,z[35].y) - (0,magGap+beamH+magH); 150 | z[43] = z[42] - (suppW,0); 151 | 152 | pair magBaseCentre = z[42]-(suppW/2,0)+(0,magH/2); 153 | 154 | // base magnet 155 | z[44] = (magCentre.x + magW/2 , z[43].y); 156 | z[45] = z[44] + (0,magH); 157 | magnet2d(width=magW,height=magH,dist=magBaseCentre,magangle=90); 158 | 159 | // floating magnets 160 | z[50] = z[45] + (0,magGap); 161 | z[51] = z[50] + (0,magH); 162 | z[52] = z[51] - (magW,0); 163 | z[53] = z[50] - (magW,0); 164 | p = z[50]--z[51]--z[52]--z[53]--cycle; 165 | 166 | pair magTopCentre = z[50]+(-magW/2,2magSep+3magH+magH/2+magGap); 167 | pair magFloatLowCentre = z[50]+(-magW/2,magH/2); 168 | pair magFloatMidCentre = magFloatLowCentre + (0,magSep+magH); 169 | pair magFloatHighCentre = magFloatLowCentre + (0,2magSep+2magH); 170 | 171 | magnet2d(width=magW,height=magH,dist=magTopCentre,magangle=-90); // (:top magnet) 172 | magnet2d(width=magW,height=magH,dist=magFloatLowCentre,magangle=-90); // (:top magnet) 173 | magnet2d(width=magW,height=magH,dist=magFloatMidCentre,magangle=-90); // (:top magnet) 174 | magnet2d(width=magW,height=magH,dist=magFloatHighCentre,magangle=-90); // (:top magnet) 175 | 176 | // floating supports 177 | z[54] = z[51] + (-magW/2+suppW/2,0); 178 | z[55] = z[54] + (0,magSep); 179 | z[56] = z[55] - (suppW,0); 180 | z[57] = z[54] - (suppW,0); 181 | p = z[54]--z[55]--z[56]--z[57]--cycle; 182 | filldraw(p,white); 183 | draw( shift((0,magSep+magH)) *p ); 184 | 185 | // top support 186 | z[60] = z[50] + (-magW/2+suppW/2,2magSep+4magH+magGap); 187 | z[61] = (z[60].x , z[31].y); 188 | z[62] = z[61] - (suppW,0); 189 | z[63] = z[60] - (suppW,0); 190 | 191 | 192 | 193 | 194 | // INNER 195 | 196 | // sensor support: 197 | z[311] = z[32] + (sensorX,0); 198 | z[312] = z[311] - (0,sensorSuppH); 199 | z[313] = z[312] - (sensorSuppW,0); 200 | z[314] = z[313] + (0,sensorSuppH); 201 | 202 | 203 | // coil support: 204 | pair coilCentre = z[50] + (-magW/2,magSep+1.5magH); 205 | z[75] = coilCentre + (coilRo,suppW/2); // NW 206 | z[76] = ( z[29].x , z[75].y ); // NE 207 | z[77] = z[76] - (0,suppW); // SE 208 | z[78] = z[75] - (0,suppW); // SW 209 | 210 | draw(z[29] 211 | --z[77]--z[78]--z[75]--z[76] // (:coil) 212 | --z[31] 213 | --z[61]--z[60]--z[63]--z[62] // (:top magnet support) 214 | --z[311]--z[312]--z[313]--z[314] // (:sensor) 215 | --z[32] 216 | --z[30] 217 | --z[40]--z[43]--z[42]--z[41] // (:bottom magnet support) 218 | --cycle ); 219 | 220 | label(L="Frame",z[30]/2+z[29]/2,N); 221 | 222 | // sensor 223 | 224 | path sens = (0,0)--(sensorW,0)--(sensorW,-sensorH)--(0,-sensorH)--cycle; 225 | draw(shift(z[313]+(sensorSuppW/2-sensorW/2,0))*sens); 226 | 227 | pair sensorbase = z[313]+(sensorSuppW/2,-sensorH); 228 | 229 | // coil 230 | 231 | z[70] = coilCentre + (coilRi,coilH/2); 232 | z[71] = z[70] + (coilRo-coilRi,0); 233 | z[72] = z[71] - (0,coilH); 234 | z[73] = z[70] - (0,coilH); 235 | p = z[70]--z[71]--z[72]--z[73]--cycle^^z[70]--z[72]^^z[71]--z[73]; 236 | 237 | draw(p); 238 | draw( shift( (-(coilRo+coilRi),0) )*p ); 239 | 240 | // labels 241 | 242 | 243 | draw( shift(20,0)*(z[30]--z[32]) , Arrows(a) , L="$\HeightRig$" , align=W , p=linewidth(lw_dim)); 244 | 245 | tmp = z[32].y+15; 246 | draw( (z[35].x,tmp)--(magCentre.x,tmp) , Arrows(a) , p=linewidth(lw_dim)); 247 | label( (magCentre.x,tmp) , L="$\LengthRigMagnets$" , align=E ); 248 | 249 | tmp = z[32].y+10; 250 | draw( (z[35].x,tmp)--(sensorbase.x,tmp) , Arrows(a) , p=linewidth(lw_dim)); 251 | label( (sensorbase.x,tmp), L="$\LengthSensor$", align=E ); 252 | label("Sensor",sensorbase-(0,2.5)); 253 | 254 | tmp = -20; 255 | draw((tmp,z[36].y)--(tmp,sensorbase.y) , Arrows(a) , L="$\DisplSensor$" , align=W , p=linewidth(lw_dim)); 256 | draw((tmp,sensorbase.y)--(tmp,z[32].y) , Arrows(a) , L="$\HeightSensor$" , align=W , p=linewidth(lw_dim)); 257 | draw( (tmp,z[35].y) -- (tmp,z[30].y) , Arrows(a) , L="$\OriginBeam$" , align=W , p=linewidth(lw_dim)); 258 | 259 | 260 | 261 | 262 | tmp = magBaseCentre.x - 25; 263 | draw( shift(tmp,0)*((0,z[30].y)--(0,magBaseCentre.y+magH/2)) , Arrows(a) , L="$\OriginMagLow$",align=W, p=linewidth(lw_dim)); 264 | draw( shift(tmp,0)*((0,z[32].y)--(0,magTopCentre.y-magH/2)) , Arrows(a) , L="$\OriginMagHigh$",align=W, p=linewidth(lw_dim)); 265 | 266 | // draw( shift(5,0)*( magBaseCentre -- magFloatLowCentre ) , Arrows(a) , L="$\OriginMagGap$",align=SE, p=linewidth(lw_dim)); 267 | 268 | label( shift(-3,0)*( magBaseCentre ) , L="\minibox[r]{Lower\\magnets}", W); 269 | label( shift(-3,0)*( magTopCentre ) , L="\minibox[r]{Upper\\magnets}", W); 270 | 271 | draw( shift(-25,0)*( magFloatLowCentre-(0,magH/2) -- magFloatHighCentre+(0,magH/2)) , Arrows(a) , L="$\HeightRigMagnets$" , align=W , p=linewidth(lw_dim)); 272 | 273 | label(L=shift(-30,0)*rotate(90)*("Actuator"), magFloatLowCentre/2 + magFloatHighCentre/2); 274 | 275 | -------------------------------------------------------------------------------- /xpmt/simple-isolator-block.asy: -------------------------------------------------------------------------------- 1 | 2 | texpreamble("\ 3 | \providecommand\laplaceBase{X}\ 4 | \providecommand\laplaceMass{Y}\ 5 | \providecommand\Block[1][]{G_{#1}}\ 6 | \providecommand\BlockController{K}"); 7 | 8 | import phdfig; 9 | import flowchart; 10 | 11 | size(8cm); 12 | 13 | block GAIN1=rectangle("\makebox[1cm]{$\Block[1]$}",(0,0),dx=10); 14 | block SUM=circle("$\sum$",(1.25,0)); 15 | block GAIN2=rectangle("\makebox[1cm]{$\Block[2]$}",(2.5,0),dx=10); 16 | block CONTROL=rectangle("\makebox[1cm]{$\BlockController$}",(2.5,-1),dx=10); 17 | 18 | draw(GAIN1); 19 | draw(GAIN2); 20 | draw(SUM); 21 | draw(CONTROL); 22 | 23 | add(new void(frame f, transform t) { 24 | picture pic; 25 | 26 | draw(pic, 27 | Label("\raisebox{0.5ex}{$s^2\laplaceBase$}",0,W), 28 | path(new pair[]{GAIN1.left(t)-(30,0),GAIN1.left(t)},Vertical), 29 | Arrow,PenMargin); 30 | 31 | draw(pic, 32 | path(new pair[]{GAIN1.right(t),SUM.left(t)},Horizontal), 33 | Arrow,PenMargin); 34 | 35 | draw(pic, 36 | path(new pair[]{SUM.right(t),GAIN2.left(t)},Horizontal), 37 | Arrow,PenMargin); 38 | 39 | draw(pic, 40 | Label("\raisebox{0.5ex}{$s^2 \laplaceMass$}",1,E), 41 | path(new pair[]{GAIN2.right(t),GAIN2.right(t)+(45,0)},Horizontal), 42 | Arrow,PenMargin); 43 | 44 | dot(pic,GAIN2.right(t)+(20,0)); 45 | draw(pic, 46 | path(new pair[]{GAIN2.right(t)+(20,0),CONTROL.right(t)},Vertical), 47 | Arrow,PenMargin); 48 | 49 | draw(pic, 50 | Label("$F$",1,SW), 51 | path(new pair[]{CONTROL.left(t),SUM.bottom(t)},Horizontal), 52 | Arrow,PenMargin); 53 | 54 | add(f,pic.fit()); 55 | }); 56 | -------------------------------------------------------------------------------- /xpmt/spring-zk.asy: -------------------------------------------------------------------------------- 1 | 2 | import phdfig; 3 | 4 | texpreamble(" 5 | \providecommand\OriginMagGap{x_g} 6 | \providecommand\DispMag{x} 7 | \providecommand\HeightMag{h} 8 | "); 9 | 10 | unitsize(1cm); 11 | 12 | real m=1; 13 | pair mx=(m,0); 14 | pair my=(0,m); 15 | 16 | real M = 0; 17 | real L = -1.5; 18 | real U = 6; 19 | real D = U/2 -1; 20 | pair arr = (0,0.75); 21 | 22 | pair fixb=(M,0); 23 | pair fixu=(M,U); 24 | pair fleq=(M,D); 25 | pair xo; 26 | pair xoo=(-0.5,0); 27 | pair out=(0.5,0); 28 | 29 | // middle 30 | xo = (fixb+fixu)/2; 31 | 32 | // floating magnet 33 | magnet2d(m,m,fleq,-90); 34 | draw(fleq+mx/2--fleq+mx/2+2*out,dashed); 35 | 36 | // bottom magnet 37 | magnet2d(m,m,fixb,90); 38 | drawground(width=m,wlen=0.2,origin=fixb-my/2,whiskers=7); 39 | 40 | // top magnet 41 | magnet2d(m,m,fixu,-90); 42 | drawground(width=m,wlen=0.2,origin=fixu+(0,m/2),angle=180,whiskers=7); 43 | 44 | draw(shift(mx/2+out)*(fleq--xo),Arrows(size=4pt),L="$\DispMag$"); 45 | draw(shift(fixb+mx/2+out)*(-my/2--my/2),Arrows(size=4pt),L="$\HeightMag$"); 46 | 47 | // 48 | 49 | draw(fixb-mx/2--fixb-mx/2-2*out,dashed); 50 | draw(fixu-mx/2--fixu-mx/2-2*out,dashed); 51 | draw(fixb/2+fixu/2-mx/2-2*out--fixb/2+fixu/2+mx/2+2*out,dashed); 52 | 53 | draw(fixb-mx/2-out -- fixu/2+fixb/2-mx/2-out,Arrows(size=4pt), L="$\OriginMagGap$", align=W); 54 | draw(fixu-mx/2-out -- fixu/2+fixb/2-mx/2-out,Arrows(size=4pt), L="$\OriginMagGap$", align=W); 55 | 56 | -------------------------------------------------------------------------------- /xpmt/vibration-base-feedback.asy: -------------------------------------------------------------------------------- 1 | 2 | unitsize(1mm); 3 | 4 | import phdfig; 5 | 6 | texpreamble("\ 7 | \providecommand\massMass{m_2} \ 8 | \providecommand\accBase{\ddot x_1} \ 9 | \providecommand\accMass{\ddot x_2} \ 10 | \providecommand\damping{c} \ 11 | \providecommand\stiffness{k} \ 12 | \providecommand\forceIn{f} \ 13 | \providecommand\BlockController{K} \ 14 | "); 15 | 16 | real w = 5, dh = 20, sp = 12; 17 | real acc = 2; 18 | real massh = 8, massw = 3*sp; 19 | 20 | drawmass( start=(0,-massh), 21 | height=massh, 22 | left=massw/2, 23 | right=massw/2 , 24 | label=""); 25 | drawmotion( start=(massw/2,-massh/2) , 26 | label="$\accBase$" , offset=5, length=5 ); 27 | 28 | drawspring((0,0),(0,dh),width=w,label="$\stiffness$",labelpos=E); 29 | drawdamper((sp,0),(sp,dh),width=w,label="$\damping$",E); 30 | 31 | drawmass( start=(0,dh), 32 | height=massh, 33 | left=massw/2, 34 | right=massw/2 , 35 | label="$\massMass$"); 36 | drawmotion( start=(massw/2,dh+massh/2) , 37 | label="$\accMass$" , offset=5, length=5 ); 38 | 39 | filldraw ( shift((-0.5acc,dh+massh))*box((0,0),(acc,acc)) ); 40 | 41 | pair[] z; 42 | z[0] = (0,dh+massh+acc); 43 | z[1] = z[0] + (0,7.5); 44 | z[2] = z[1] - (30,0); 45 | z[3] = z[2] - (0,7.5); 46 | real gainh=10; 47 | z[4] = z[3] - (0,gainh); 48 | z[5] = (z[3].x,0.5dh); 49 | z[6] = (-sp-w/2,z[5].y); 50 | draw( z[0]--z[1]--z[2]--z[3] , Arrow ); 51 | draw( z[4]--z[5]--z[6] , Arrow ); 52 | 53 | draw(shift(z[4]-0.5gainh)*box((0,0),(gainh,gainh))); 54 | label("$\BlockController$",z[4]+(0,gainh/2)); 55 | drawinputforce( (-sp,0) ,(-sp,dh),width=w,label="$\forceIn$",labelpos=E); 56 | 57 | --------------------------------------------------------------------------------