IEEEtran.cls
1 %% 2 %% IEEEtran.cls 2007/03/05 version V1.7a 3 %% 4 %% 5 %% This is the official IEEE LaTeX class for authors of the Institute of 6 %% Electrical and Electronics Engineers (IEEE) Transactions journals and 7 %% conferences. 8 %% 9 %% Support sites: 10 %% http://www.michaelshell.org/tex/ieeetran/ 11 %% http://www.ctan.org/tex-archive/macros/latex/contrib/IEEEtran/ 12 %% and 13 %% http://www.ieee.org/ 14 %% 15 %% Based on the original 1993 IEEEtran.cls, but with many bug fixes 16 %% and enhancements (from both JVH and MDS) over the 1996/7 version. 17 %% 18 %% 19 %% Contributors: 20 %% Gerry Murray (1993), Silvano Balemi (1993), 21 %% Jon Dixon (1996), Peter N"uchter (1996), 22 %% Juergen von Hagen (2000), and Michael Shell (2001-2007) 23 %% 24 %% 25 %% Copyright (c) 1993-2000 by Gerry Murray, Silvano Balemi, 26 %% Jon Dixon, Peter N"uchter, 27 %% Juergen von Hagen 28 %% and 29 %% Copyright (c) 2001-2007 by Michael Shell 30 %% 31 %% Current maintainer (V1.3 to V1.7): Michael Shell 32 %% See: 33 %% http://www.michaelshell.org/ 34 %% for current contact information. 35 %% 36 %% Special thanks to Peter Wilson (CUA) and Donald Arseneau 37 %% for allowing the inclusion of the \@ifmtarg command 38 %% from their ifmtarg LaTeX package. 39 %% 40 %%************************************************************************* 41 %% Legal Notice: 42 %% This code is offered as-is without any warranty either expressed or 43 %% implied; without even the implied warranty of MERCHANTABILITY or 44 %% FITNESS FOR A PARTICULAR PURPOSE! 45 %% User assumes all risk. 46 %% In no event shall IEEE or any contributor to this code be liable for 47 %% any damages or losses, including, but not limited to, incidental, 48 %% consequential, or any other damages, resulting from the use or misuse 49 %% of any information contained here. 50 %% 51 %% All comments are the opinions of their respective authors and are not 52 %% necessarily endorsed by the IEEE. 53 %% 54 %% This work is distributed under the LaTeX Project Public License (LPPL) 55 %% ( http://www.latex-project.org/ ) version 1.3, and may be freely used, 56 %% distributed and modified. A copy of the LPPL, version 1.3, is included 57 %% in the base LaTeX documentation of all distributions of LaTeX released 58 %% 2003/12/01 or later. 59 %% Retain all contribution notices and credits. 60 %% ** Modified files should be clearly indicated as such, including ** 61 %% ** renaming them and changing author support contact information. ** 62 %% 63 %% File list of work: IEEEtran.cls, IEEEtran_HOWTO.pdf, bare_adv.tex, 64 %% bare_conf.tex, bare_jrnl.tex, bare_jrnl_compsoc.tex 65 %% 66 %% Major changes to the user interface should be indicated by an 67 %% increase in the version numbers. If a version is a beta, it will 68 %% be indicated with a BETA suffix, i.e., 1.4 BETA. 69 %% Small changes can be indicated by appending letters to the version 70 %% such as "IEEEtran_v14a.cls". 71 %% In all cases, \Providesclass, any \typeout messages to the user, 72 %% \IEEEtransversionmajor and \IEEEtransversionminor must reflect the 73 %% correct version information. 74 %% The changes should also be documented via source comments. 75 %%************************************************************************* 76 %% 77 % 78 % Available class options 79 % e.g., \documentclass[10pt,conference]{IEEEtran} 80 % 81 % *** choose only one from each category *** 82 % 83 % 9pt, 10pt, 11pt, 12pt 84 % Sets normal font size. The default is 10pt. 85 % 86 % conference, journal, technote, peerreview, peerreviewca 87 % determines format mode - conference papers, journal papers, 88 % correspondence papers (technotes), or peer review papers. The user 89 % should also select 9pt when using technote. peerreview is like 90 % journal mode, but provides for a single-column "cover" title page for 91 % anonymous peer review. The paper title (without the author names) is 92 % repeated at the top of the page after the cover page. For peer review 93 % papers, the \IEEEpeerreviewmaketitle command must be executed (will 94 % automatically be ignored for non-peerreview modes) at the place the 95 % cover page is to end, usually just after the abstract (keywords are 96 % not normally used with peer review papers). peerreviewca is like 97 % peerreview, but allows the author names to be entered and formatted 98 % as with conference mode so that author affiliation and contact 99 % information can be easily seen on the cover page. 100 % The default is journal. 101 % 102 % draft, draftcls, draftclsnofoot, final 103 % determines if paper is formatted as a widely spaced draft (for 104 % handwritten editor comments) or as a properly typeset final version. 105 % draftcls restricts draft mode to the class file while all other LaTeX 106 % packages (i.e., \usepackage{graphicx}) will behave as final - allows 107 % for a draft paper with visible figures, etc. draftclsnofoot is like 108 % draftcls, but does not display the date and the word "DRAFT" at the foot 109 % of the pages. If using one of the draft modes, the user will probably 110 % also want to select onecolumn. 111 % The default is final. 112 % 113 % letterpaper, a4paper 114 % determines paper size: 8.5in X 11in or 210mm X 297mm. CHANGING THE PAPER 115 % SIZE WILL NOT ALTER THE TYPESETTING OF THE DOCUMENT - ONLY THE MARGINS 116 % WILL BE AFFECTED. In particular, documents using the a4paper option will 117 % have reduced side margins (A4 is narrower than US letter) and a longer 118 % bottom margin (A4 is longer than US letter). For both cases, the top 119 % margins will be the same and the text will be horizontally centered. 120 % For final submission to IEEE, authors should use US letter (8.5 X 11in) 121 % paper. Note that authors should ensure that all post-processing 122 % (ps, pdf, etc.) uses the same paper specificiation as the .tex document. 123 % Problems here are by far the number one reason for incorrect margins. 124 % IEEEtran will automatically set the default paper size under pdflatex 125 % (without requiring a change to pdftex.cfg), so this issue is more 126 % important to dvips users. Fix config.ps, config.pdf, or ~/.dvipsrc for 127 % dvips, or use the dvips -t papersize option instead as needed. See the 128 % testflow documentation 129 % http://www.ctan.org/tex-archive/macros/latex/contrib/IEEEtran/testflow 130 % for more details on dvips paper size configuration. 131 % The default is letterpaper. 132 % 133 % oneside, twoside 134 % determines if layout follows single sided or two sided (duplex) 135 % printing. The only notable change is with the headings at the top of 136 % the pages. 137 % The default is oneside. 138 % 139 % onecolumn, twocolumn 140 % determines if text is organized into one or two columns per page. One 141 % column mode is usually used only with draft papers. 142 % The default is twocolumn. 143 % 144 % compsoc 145 % Use the format of the IEEE Computer Society. 146 % 147 % romanappendices 148 % Use the "Appendix I" convention when numbering appendices. IEEEtran.cls 149 % now defaults to Alpha "Appendix A" convention - the opposite of what 150 % v1.6b and earlier did. 151 % 152 % captionsoff 153 % disables the display of the figure/table captions. Some IEEE journals 154 % request that captions be removed and figures/tables be put on pages 155 % of their own at the end of an initial paper submission. The endfloat 156 % package can be used with this class option to achieve this format. 157 % 158 % nofonttune 159 % turns off tuning of the font interword spacing. Maybe useful to those 160 % not using the standard Times fonts or for those who have already "tuned" 161 % their fonts. 162 % The default is to enable IEEEtran to tune font parameters. 163 % 164 % 165 %---------- 166 % Available CLASSINPUTs provided (all are macros unless otherwise noted): 167 % \CLASSINPUTbaselinestretch 168 % \CLASSINPUTinnersidemargin 169 % \CLASSINPUToutersidemargin 170 % \CLASSINPUTtoptextmargin 171 % \CLASSINPUTbottomtextmargin 172 % 173 % Available CLASSINFOs provided: 174 % \ifCLASSINFOpdf (TeX if conditional) 175 % \CLASSINFOpaperwidth (macro) 176 % \CLASSINFOpaperheight (macro) 177 % \CLASSINFOnormalsizebaselineskip (length) 178 % \CLASSINFOnormalsizeunitybaselineskip (length) 179 % 180 % Available CLASSOPTIONs provided: 181 % all class option flags (TeX if conditionals) unless otherwise noted, 182 % e.g., \ifCLASSOPTIONcaptionsoff 183 % point size options provided as a single macro: 184 % \CLASSOPTIONpt 185 % which will be defined as 9, 10, 11, or 12 depending on the document‘s 186 % normalsize point size. 187 % also, class option peerreviewca implies the use of class option peerreview 188 % and classoption draft implies the use of class option draftcls 189 190 191 192 193 194 \ProvidesClass{IEEEtran}[2007/03/05 V1.7a by Michael Shell] 195 \typeout{-- See the "IEEEtran_HOWTO" manual for usage information.} 196 \typeout{-- http://www.michaelshell.org/tex/ieeetran/} 197 \NeedsTeXFormat{LaTeX2e} 198 199 % IEEEtran.cls version numbers, provided as of V1.3 200 % These values serve as a way a .tex file can 201 % determine if the new features are provided. 202 % The version number of this IEEEtrans.cls can be obtained from 203 % these values. i.e., V1.4 204 % KEEP THESE AS INTEGERS! i.e., NO {4a} or anything like that- 205 % (no need to enumerate "a" minor changes here) 206 \def\IEEEtransversionmajor{1} 207 \def\IEEEtransversionminor{7} 208 209 % These do nothing, but provide them like in article.cls 210 \newif\[email protected] 211 \newif\[email protected] 212 213 214 % class option conditionals 215 \newif\ifCLASSOPTIONonecolumn \CLASSOPTIONonecolumnfalse 216 \newif\ifCLASSOPTIONtwocolumn \CLASSOPTIONtwocolumntrue 217 218 \newif\ifCLASSOPTIONoneside \CLASSOPTIONonesidetrue 219 \newif\ifCLASSOPTIONtwoside \CLASSOPTIONtwosidefalse 220 221 \newif\ifCLASSOPTIONfinal \CLASSOPTIONfinaltrue 222 \newif\ifCLASSOPTIONdraft \CLASSOPTIONdraftfalse 223 \newif\ifCLASSOPTIONdraftcls \CLASSOPTIONdraftclsfalse 224 \newif\ifCLASSOPTIONdraftclsnofoot \CLASSOPTIONdraftclsnofootfalse 225 226 \newif\ifCLASSOPTIONpeerreview \CLASSOPTIONpeerreviewfalse 227 \newif\ifCLASSOPTIONpeerreviewca \CLASSOPTIONpeerreviewcafalse 228 229 \newif\ifCLASSOPTIONjournal \CLASSOPTIONjournaltrue 230 \newif\ifCLASSOPTIONconference \CLASSOPTIONconferencefalse 231 \newif\ifCLASSOPTIONtechnote \CLASSOPTIONtechnotefalse 232 233 \newif\ifCLASSOPTIONnofonttune \CLASSOPTIONnofonttunefalse 234 235 \newif\ifCLASSOPTIONcaptionsoff \CLASSOPTIONcaptionsofffalse 236 237 \newif\ifCLASSOPTIONcompsoc \CLASSOPTIONcompsocfalse 238 239 \newif\ifCLASSOPTIONromanappendices \CLASSOPTIONromanappendicesfalse 240 241 242 % class info conditionals 243 244 % indicates if pdf (via pdflatex) output 245 \newif\ifCLASSINFOpdf \CLASSINFOpdffalse 246 247 248 % V1.6b internal flag to show if using a4paper 249 \newif\[email protected] \@IEEEusingAfourpaperfalse 250 251 252 253 % IEEEtran class scratch pad registers 254 % dimen 255 \newdimen\@IEEEtrantmpdimenA 256 \newdimen\@IEEEtrantmpdimenB 257 % count 258 \newcount\@IEEEtrantmpcountA 259 \newcount\@IEEEtrantmpcountB 260 % token list 261 \newtoks\@IEEEtrantmptoksA 262 263 % we use \CLASSOPTIONpt so that we can ID the point size (even for 9pt docs) 264 % as well as LaTeX‘s \@ptsize to retain some compatability with some 265 % external packages 266 \def\@ptsize{0} 267 % LaTeX does not support 9pt, so we set \@ptsize to 0 - same as that of 10pt 268 \DeclareOption{9pt}{\def\CLASSOPTIONpt{9}\def\@ptsize{0}} 269 \DeclareOption{10pt}{\def\CLASSOPTIONpt{10}\def\@ptsize{0}} 270 \DeclareOption{11pt}{\def\CLASSOPTIONpt{11}\def\@ptsize{1}} 271 \DeclareOption{12pt}{\def\CLASSOPTIONpt{12}\def\@ptsize{2}} 272 273 274 275 \DeclareOption{letterpaper}{\setlength{\paperheight}{11in}% 276 \setlength{\paperwidth}{8.5in}% 277 \@IEEEusingAfourpaperfalse 278 \def\CLASSOPTIONpaper{letter}% 279 \def\CLASSINFOpaperwidth{8.5in}% 280 \def\CLASSINFOpaperheight{11in}} 281 282 283 \DeclareOption{a4paper}{\setlength{\paperheight}{297mm}% 284 \setlength{\paperwidth}{210mm}% 285 \@IEEEusingAfourpapertrue 286 \def\CLASSOPTIONpaper{a4}% 287 \def\CLASSINFOpaperwidth{210mm}% 288 \def\CLASSINFOpaperheight{297mm}} 289 290 \DeclareOption{oneside}{\@twosidefalse\@mparswitchfalse 291 \CLASSOPTIONonesidetrue\CLASSOPTIONtwosidefalse} 292 \DeclareOption{twoside}{\@twosidetrue\@mparswitchtrue 293 \CLASSOPTIONtwosidetrue\CLASSOPTIONonesidefalse} 294 295 \DeclareOption{onecolumn}{\CLASSOPTIONonecolumntrue\CLASSOPTIONtwocolumnfalse} 296 \DeclareOption{twocolumn}{\CLASSOPTIONtwocolumntrue\CLASSOPTIONonecolumnfalse} 297 298 % If the user selects draft, then this class AND any packages 299 % will go into draft mode. 300 \DeclareOption{draft}{\CLASSOPTIONdrafttrue\CLASSOPTIONdraftclstrue 301 \CLASSOPTIONdraftclsnofootfalse} 302 % draftcls is for a draft mode which will not affect any packages 303 % used by the document. 304 \DeclareOption{draftcls}{\CLASSOPTIONdraftfalse\CLASSOPTIONdraftclstrue 305 \CLASSOPTIONdraftclsnofootfalse} 306 % draftclsnofoot is like draftcls, but without the footer. 307 \DeclareOption{draftclsnofoot}{\CLASSOPTIONdraftfalse\CLASSOPTIONdraftclstrue 308 \CLASSOPTIONdraftclsnofoottrue} 309 \DeclareOption{final}{\CLASSOPTIONdraftfalse\CLASSOPTIONdraftclsfalse 310 \CLASSOPTIONdraftclsnofootfalse} 311 312 \DeclareOption{journal}{\CLASSOPTIONpeerreviewfalse\CLASSOPTIONpeerreviewcafalse 313 \CLASSOPTIONjournaltrue\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotefalse} 314 315 \DeclareOption{conference}{\CLASSOPTIONpeerreviewfalse\CLASSOPTIONpeerreviewcafalse 316 \CLASSOPTIONjournalfalse\CLASSOPTIONconferencetrue\CLASSOPTIONtechnotefalse} 317 318 \DeclareOption{technote}{\CLASSOPTIONpeerreviewfalse\CLASSOPTIONpeerreviewcafalse 319 \CLASSOPTIONjournalfalse\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotetrue} 320 321 \DeclareOption{peerreview}{\CLASSOPTIONpeerreviewtrue\CLASSOPTIONpeerreviewcafalse 322 \CLASSOPTIONjournalfalse\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotefalse} 323 324 \DeclareOption{peerreviewca}{\CLASSOPTIONpeerreviewtrue\CLASSOPTIONpeerreviewcatrue 325 \CLASSOPTIONjournalfalse\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotefalse} 326 327 \DeclareOption{nofonttune}{\CLASSOPTIONnofonttunetrue} 328 329 \DeclareOption{captionsoff}{\CLASSOPTIONcaptionsofftrue} 330 331 \DeclareOption{compsoc}{\CLASSOPTIONcompsoctrue} 332 333 \DeclareOption{romanappendices}{\CLASSOPTIONromanappendicestrue} 334 335 336 % default to US letter paper, 10pt, twocolumn, one sided, final, journal 337 \ExecuteOptions{letterpaper,10pt,twocolumn,oneside,final,journal} 338 % overrride these defaults per user requests 339 \ProcessOptions 340 341 342 343 % Computer Society conditional execution command 344 \long\def\@IEEEcompsoconly#1{\relax\ifCLASSOPTIONcompsoc\relax#1\relax\fi\relax} 345 % inverse 346 \long\def\@IEEEnotcompsoconly#1{\relax\ifCLASSOPTIONcompsoc\else\relax#1\relax\fi\relax} 347 % compsoc conference 348 \long\def\@IEEEcompsocconfonly#1{\relax\ifCLASSOPTIONcompsoc\ifCLASSOPTIONconference\relax#1\relax\fi\fi\relax} 349 % compsoc not conference 350 \long\def\@IEEEcompsocnotconfonly#1{\relax\ifCLASSOPTIONcompsoc\ifCLASSOPTIONconference\else\relax#1\relax\fi\fi\relax} 351 352 353 % IEEE uses Times Roman font, so we‘ll default to Times. 354 % These three commands make up the entire times.sty package. 355 \renewcommand{\sfdefault}{phv} 356 \renewcommand{\rmdefault}{ptm} 357 \renewcommand{\ttdefault}{pcr} 358 359 \@IEEEcompsoconly{\typeout{-- Using IEEE Computer Society mode.}} 360 361 % V1.7 compsoc nonconference papers, use Palatino/Palladio as the main text font, 362 % not Times Roman. 363 \@IEEEcompsocnotconfonly{\renewcommand{\rmdefault}{ppl}} 364 365 % enable Times/Palatino main text font 366 \normalfont\selectfont 367 368 369 370 371 372 % V1.7 conference notice message hook 373 \def\@IEEEconsolenoticeconference{\typeout{}% 374 \typeout{** Conference Paper **}% 375 \typeout{Before submitting the final camera ready copy, remember to:}% 376 \typeout{}% 377 \typeout{ 1. Manually equalize the lengths of two columns on the last page}% 378 \typeout{ of your paper;}% 379 \typeout{}% 380 \typeout{ 2. Ensure that any PostScript and/or PDF output post-processing}% 381 \typeout{ uses only Type 1 fonts and that every step in the generation}% 382 \typeout{ process uses the appropriate paper size.}% 383 \typeout{}} 384 385 386 % we can send console reminder messages to the user here 387 \AtEndDocument{\ifCLASSOPTIONconference\@IEEEconsolenoticeconference\fi} 388 389 390 % warn about the use of single column other than for draft mode 391 \ifCLASSOPTIONtwocolumn\else% 392 \ifCLASSOPTIONdraftcls\else% 393 \typeout{** ATTENTION: Single column mode is not typically used with IEEE publications.}% 394 \fi% 395 \fi 396 397 398 % V1.7 improved paper size setting code. 399 % Set pdfpage and dvips paper sizes. Conditional tests are similar to that 400 % of ifpdf.sty. Retain within {} to ensure tested macros are never altered, 401 % even if only effect is to set them to \relax. 402 % if \pdfoutput is undefined or equal to relax, output a dvips special 403 {\@ifundefined{pdfoutput}{\AtBeginDvi{\special{papersize=\CLASSINFOpaperwidth,\CLASSINFOpaperheight}}}{% 404 % pdfoutput is defined and not equal to \relax 405 % check for pdfpageheight existence just in case someone sets pdfoutput 406 % under non-pdflatex. If exists, set them regardless of value of \pdfoutput. 407 \@ifundefined{pdfpageheight}{\relax}{\global\pdfpagewidth\paperwidth 408 \global\pdfpageheight\paperheight}% 409 % if using \pdfoutput=0 under pdflatex, send dvips papersize special 410 \ifcase\pdfoutput 411 \AtBeginDvi{\special{papersize=\CLASSINFOpaperwidth,\CLASSINFOpaperheight}}% 412 \else 413 % we are using pdf output, set CLASSINFOpdf flag 414 \global\CLASSINFOpdftrue 415 \fi}} 416 417 % let the user know the selected papersize 418 \typeout{-- Using \CLASSINFOpaperwidth\space x \CLASSINFOpaperheight\space 419 (\CLASSOPTIONpaper)\space paper.} 420 421 \ifCLASSINFOpdf 422 \typeout{-- Using PDF output.} 423 \else 424 \typeout{-- Using DVI output.} 425 \fi 426 427 428 % The idea hinted here is for LaTeX to generate markleft{} and markright{} 429 % automatically for you after you enter \author{}, \journal{}, 430 % \journaldate{}, journalvol{}, \journalnum{}, etc. 431 % However, there may be some backward compatibility issues here as 432 % well as some special applications for IEEEtran.cls and special issues 433 % that may require the flexible \markleft{}, \markright{} and/or \markboth{}. 434 % We‘ll leave this as an open future suggestion. 435 %\newcommand{\journal}[1]{\def\@journal{#1}} 436 %\def\@journal{} 437 438 439 440 % pointsize values 441 % used with ifx to determine the document‘s normal size 442 \def\@IEEEptsizenine{9} 443 \def\@IEEEptsizeten{10} 444 \def\@IEEEptsizeeleven{11} 445 \def\@IEEEptsizetwelve{12} 446 447 448 449 % FONT DEFINITIONS (No sizexx.clo file needed) 450 % V1.6 revised font sizes, displayskip values and 451 % revised normalsize baselineskip to reduce underfull vbox problems 452 % on the 58pc = 696pt = 9.5in text height we want 453 % normalsize #lines/column baselineskip (aka leading) 454 % 9pt 63 11.0476pt (truncated down) 455 % 10pt 58 12pt (exact) 456 % 11pt 52 13.3846pt (truncated down) 457 % 12pt 50 13.92pt (exact) 458 % 459 460 % we need to store the nominal baselineskip for the given font size 461 % in case baselinestretch ever changes. 462 % this is a dimen, so it will not hold stretch or shrink 463 \newdimen\@IEEEnormalsizeunitybaselineskip 464 \@IEEEnormalsizeunitybaselineskip\baselineskip 465 466 \ifx\CLASSOPTIONpt\@IEEEptsizenine 467 \typeout{-- This is a 9 point document.} 468 \def\normalsize{\@setfontsize{\normalsize}{9}{11.0476pt}}% 469 \setlength{\@IEEEnormalsizeunitybaselineskip}{11.0476pt}% 470 \normalsize 471 \abovedisplayskip 1.5ex plus3pt minus1pt% 472 \belowdisplayskip \abovedisplayskip% 473 \abovedisplayshortskip 0pt plus3pt% 474 \belowdisplayshortskip 1.5ex plus3pt minus1pt 475 \def\small{\@setfontsize{\small}{8.5}{10pt}} 476 \def\footnotesize{\@setfontsize{\footnotesize}{8}{9pt}} 477 \def\scriptsize{\@setfontsize{\scriptsize}{7}{8pt}} 478 \def\tiny{\@setfontsize{\tiny}{5}{6pt}} 479 % sublargesize is the same as large - 10pt 480 \def\sublargesize{\@setfontsize{\sublargesize}{10}{12pt}} 481 \def\large{\@setfontsize{\large}{10}{12pt}} 482 \def\Large{\@setfontsize{\Large}{12}{14pt}} 483 \def\LARGE{\@setfontsize{\LARGE}{14}{17pt}} 484 \def\huge{\@setfontsize{\huge}{17}{20pt}} 485 \def\Huge{\@setfontsize{\Huge}{20}{24pt}} 486 \fi 487 488 489 % Check if we have selected 10 points 490 \ifx\CLASSOPTIONpt\@IEEEptsizeten 491 \typeout{-- This is a 10 point document.} 492 \def\normalsize{\@setfontsize{\normalsize}{10}{12.00pt}}% 493 \setlength{\@IEEEnormalsizeunitybaselineskip}{12pt}% 494 \normalsize 495 \abovedisplayskip 1.5ex plus4pt minus2pt% 496 \belowdisplayskip \abovedisplayskip% 497 \abovedisplayshortskip 0pt plus4pt% 498 \belowdisplayshortskip 1.5ex plus4pt minus2pt 499 \def\small{\@setfontsize{\small}{9}{10pt}} 500 \def\footnotesize{\@setfontsize{\footnotesize}{8}{9pt}} 501 \def\scriptsize{\@setfontsize{\scriptsize}{7}{8pt}} 502 \def\tiny{\@setfontsize{\tiny}{5}{6pt}} 503 % sublargesize is a tad smaller than large - 11pt 504 \def\sublargesize{\@setfontsize{\sublargesize}{11}{13.4pt}} 505 \def\large{\@setfontsize{\large}{12}{14pt}} 506 \def\Large{\@setfontsize{\Large}{14}{17pt}} 507 \def\LARGE{\@setfontsize{\LARGE}{17}{20pt}} 508 \def\huge{\@setfontsize{\huge}{20}{24pt}} 509 \def\Huge{\@setfontsize{\Huge}{24}{28pt}} 510 \fi 511 512 513 % Check if we have selected 11 points 514 \ifx\CLASSOPTIONpt\@IEEEptsizeeleven 515 \typeout{-- This is an 11 point document.} 516 \def\normalsize{\@setfontsize{\normalsize}{11}{13.3846pt}}% 517 \setlength{\@IEEEnormalsizeunitybaselineskip}{13.3846pt}% 518 \normalsize 519 \abovedisplayskip 1.5ex plus5pt minus3pt% 520 \belowdisplayskip \abovedisplayskip% 521 \abovedisplayshortskip 0pt plus5pt% 522 \belowdisplayshortskip 1.5ex plus5pt minus3pt 523 \def\small{\@setfontsize{\small}{10}{12pt}} 524 \def\footnotesize{\@setfontsize{\footnotesize}{9}{10.5pt}} 525 \def\scriptsize{\@setfontsize{\scriptsize}{8}{9pt}} 526 \def\tiny{\@setfontsize{\tiny}{6}{7pt}} 527 % sublargesize is the same as large - 12pt 528 \def\sublargesize{\@setfontsize{\sublargesize}{12}{14pt}} 529 \def\large{\@setfontsize{\large}{12}{14pt}} 530 \def\Large{\@setfontsize{\Large}{14}{17pt}} 531 \def\LARGE{\@setfontsize{\LARGE}{17}{20pt}} 532 \def\huge{\@setfontsize{\huge}{20}{24pt}} 533 \def\Huge{\@setfontsize{\Huge}{24}{28pt}} 534 \fi 535 536 537 % Check if we have selected 12 points 538 \ifx\CLASSOPTIONpt\@IEEEptsizetwelve 539 \typeout{-- This is a 12 point document.} 540 \def\normalsize{\@setfontsize{\normalsize}{12}{13.92pt}}% 541 \setlength{\@IEEEnormalsizeunitybaselineskip}{13.92pt}% 542 \normalsize 543 \abovedisplayskip 1.5ex plus6pt minus4pt% 544 \belowdisplayskip \abovedisplayskip% 545 \abovedisplayshortskip 0pt plus6pt% 546 \belowdisplayshortskip 1.5ex plus6pt minus4pt 547 \def\small{\@setfontsize{\small}{10}{12pt}} 548 \def\footnotesize{\@setfontsize{\footnotesize}{9}{10.5pt}} 549 \def\scriptsize{\@setfontsize{\scriptsize}{8}{9pt}} 550 \def\tiny{\@setfontsize{\tiny}{6}{7pt}} 551 % sublargesize is the same as large - 14pt 552 \def\sublargesize{\@setfontsize{\sublargesize}{14}{17pt}} 553 \def\large{\@setfontsize{\large}{14}{17pt}} 554 \def\Large{\@setfontsize{\Large}{17}{20pt}} 555 \def\LARGE{\@setfontsize{\LARGE}{20}{24pt}} 556 \def\huge{\@setfontsize{\huge}{22}{26pt}} 557 \def\Huge{\@setfontsize{\Huge}{24}{28pt}} 558 \fi 559 560 561 % V1.6 The Computer Modern Fonts will issue a substitution warning for 562 % 24pt titles (24.88pt is used instead) increase the substitution 563 % tolerance to turn off this warning 564 \def\fontsubfuzz{.9pt} 565 % However, the default (and correct) Times font will scale exactly as needed. 566 567 568 % warn the user in case they forget to use the 9pt option with 569 % technote 570 \ifCLASSOPTIONtechnote% 571 \ifx\CLASSOPTIONpt\@IEEEptsizenine\else% 572 \typeout{** ATTENTION: Technotes are normally 9pt documents.}% 573 \fi% 574 \fi 575 576 577 % V1.7 578 % Improved \textunderscore to provide a much better fake _ when used with 579 % OT1 encoding. Under OT1, detect use of pcr or cmtt \ttfamily and use 580 % available true _ glyph for those two typewriter fonts. 581 \def\@IEEEstringptm{ptm} % Times Roman family 582 \def\@IEEEstringppl{ppl} % Palatino Roman family 583 \def\@IEEEstringphv{phv} % Helvetica Sans Serif family 584 \def\@IEEEstringpcr{pcr} % Courier typewriter family 585 \def\@IEEEstringcmtt{cmtt} % Computer Modern typewriter family 586 \DeclareTextCommandDefault{\textunderscore}{\leavevmode 587 \ifx\[email protected]\@IEEEstringpcr\string_\else 588 \ifx\[email protected]\@IEEEstringcmtt\string_\else 589 \ifx\[email protected]\@IEEEstringptm\kern 0em\vbox{\hrule\@width 0.5em\@height 0.5pt\kern -0.3ex}\else 590 \ifx\[email protected]\@IEEEstringppl\kern 0em\vbox{\hrule\@width 0.5em\@height 0.5pt\kern -0.3ex}\else 591 \ifx\[email protected]\@IEEEstringphv\kern -0.03em\vbox{\hrule\@width 0.62em\@height 0.52pt\kern -0.33ex}\kern -0.03em\else 592 \kern 0.09em\vbox{\hrule\@width 0.6em\@height 0.44pt\kern -0.63pt\kern -0.42ex}\kern 0.09em\fi\fi\fi\fi\fi\relax} 593 594 595 596 597 % set the default \baselinestretch 598 \def\baselinestretch{1} 599 \ifCLASSOPTIONdraftcls 600 \def\baselinestretch{1.5}% default baselinestretch for draft modes 601 \fi 602 603 604 % process CLASSINPUT baselinestretch 605 \ifx\CLASSINPUTbaselinestretch\@IEEEundefined 606 \else 607 \edef\baselinestretch{\CLASSINPUTbaselinestretch} % user CLASSINPUT override 608 \typeout{** ATTENTION: Overriding \string\baselinestretch\space to 609 \baselinestretch\space via \string\CLASSINPUT.} 610 \fi 611 612 \normalsize % make \baselinestretch take affect 613 614 615 616 617 % store the normalsize baselineskip 618 \newdimen\CLASSINFOnormalsizebaselineskip 619 \CLASSINFOnormalsizebaselineskip=\baselineskip\relax 620 % and the normalsize unity (baselinestretch=1) baselineskip 621 % we could save a register by giving the user access to 622 % \@IEEEnormalsizeunitybaselineskip. However, let‘s protect 623 % its read only internal status 624 \newdimen\CLASSINFOnormalsizeunitybaselineskip 625 \CLASSINFOnormalsizeunitybaselineskip=\@IEEEnormalsizeunitybaselineskip\relax 626 % store the nominal value of jot 627 \newdimen\IEEEnormaljot 628 \IEEEnormaljot=0.25\baselineskip\relax 629 630 % set \jot 631 \jot=\IEEEnormaljot\relax 632 633 634 635 636 % V1.6, we are now going to fine tune the interword spacing 637 % The default interword glue for Times under TeX appears to use a 638 % nominal interword spacing of 25% (relative to the font size, i.e., 1em) 639 % a maximum of 40% and a minimum of 19%. 640 % For example, 10pt text uses an interword glue of: 641 % 642 % 2.5pt plus 1.49998pt minus 0.59998pt 643 % 644 % However, IEEE allows for a more generous range which reduces the need 645 % for hyphenation, especially for two column text. Furthermore, IEEE 646 % tends to use a little bit more nominal space between the words. 647 % IEEE‘s interword spacing percentages appear to be: 648 % 35% nominal 649 % 23% minimum 650 % 50% maximum 651 % (They may even be using a tad more for the largest fonts such as 24pt.) 652 % 653 % for bold text, IEEE increases the spacing a little more: 654 % 37.5% nominal 655 % 23% minimum 656 % 55% maximum 657 658 % here are the interword spacing ratios we‘ll use 659 % for medium (normal weight) 660 \def\@IEEEinterspaceratioM{0.35} 661 \def\@IEEEinterspaceMINratioM{0.23} 662 \def\@IEEEinterspaceMAXratioM{0.50} 663 664 % for bold 665 \def\@IEEEinterspaceratioB{0.375} 666 \def\@IEEEinterspaceMINratioB{0.23} 667 \def\@IEEEinterspaceMAXratioB{0.55} 668 669 670 % command to revise the interword spacing for the current font under TeX: 671 % \fontdimen2 = nominal interword space 672 % \fontdimen3 = interword stretch 673 % \fontdimen4 = interword shrink 674 % since all changes to the \fontdimen are global, we can enclose these commands 675 % in braces to confine any font attribute or length changes 676 \def\@@@IEEEsetfontdimens#1#2#3{{% 677 \setlength{\@IEEEtrantmpdimenB}{\[email protected] pt}% grab the font size in pt, could use 1em instead. 678 \setlength{\@IEEEtrantmpdimenA}{#1\@IEEEtrantmpdimenB}% 679 \fontdimen2\font=\@IEEEtrantmpdimenA\relax 680 \addtolength{\@IEEEtrantmpdimenA}{-#2\@IEEEtrantmpdimenB}% 681 \fontdimen3\font=-\@IEEEtrantmpdimenA\relax 682 \setlength{\@IEEEtrantmpdimenA}{#1\@IEEEtrantmpdimenB}% 683 \addtolength{\@IEEEtrantmpdimenA}{-#3\@IEEEtrantmpdimenB}% 684 \fontdimen4\font=\@IEEEtrantmpdimenA\relax}} 685 686 % revise the interword spacing for each font weight 687 \def\@@IEEEsetfontdimens{{% 688 \mdseries 689 \@@@IEEEsetfontdimens{\@IEEEinterspaceratioM}{\@IEEEinterspaceMAXratioM}{\@IEEEinterspaceMINratioM}% 690 \bfseries 691 \@@@IEEEsetfontdimens{\@IEEEinterspaceratioB}{\@IEEEinterspaceMAXratioB}{\@IEEEinterspaceMINratioB}% 692 }} 693 694 % revise the interword spacing for each font shape 695 % \slshape is not often used for IEEE work and is not altered here. The \scshape caps are 696 % already a tad too large in the free LaTeX fonts (as compared to what IEEE uses) so we 697 % won‘t alter these either. 698 \def\@IEEEsetfontdimens{{% 699 \normalfont 700 \@@IEEEsetfontdimens 701 \normalfont\itshape 702 \@@IEEEsetfontdimens 703 }} 704 705 % command to revise the interword spacing for each font size (and shape 706 % and weight). Only the \rmfamily is done here as \ttfamily uses a 707 % fixed spacing and \sffamily is not used as the main text of IEEE papers. 708 \def\@IEEEtunefonts{{\selectfont\rmfamily 709 \tiny\@IEEEsetfontdimens 710 \scriptsize\@IEEEsetfontdimens 711 \footnotesize\@IEEEsetfontdimens 712 \small\@IEEEsetfontdimens 713 \normalsize\@IEEEsetfontdimens 714 \sublargesize\@IEEEsetfontdimens 715 \large\@IEEEsetfontdimens 716 \LARGE\@IEEEsetfontdimens 717 \huge\@IEEEsetfontdimens 718 \Huge\@IEEEsetfontdimens}} 719 720 % if the nofonttune class option is not given, revise the interword spacing 721 % now - in case IEEEtran makes any default length measurements, and make 722 % sure all the default fonts are loaded 723 \ifCLASSOPTIONnofonttune\else 724 \@IEEEtunefonts 725 \fi 726 727 % and again at the start of the document in case the user loaded different fonts 728 \AtBeginDocument{\ifCLASSOPTIONnofonttune\else\@IEEEtunefonts\fi} 729 730 731 732 % V1.6 733 % LaTeX is a little to quick to use hyphenations 734 % So, we increase the penalty for their use and raise 735 % the badness level that triggers an underfull hbox 736 % warning. The author may still have to tweak things, 737 % but the appearance will be much better "right out 738 % of the box" than that under V1.5 and prior. 739 % TeX default is 50 740 \hyphenpenalty=750 741 % If we didn‘t adjust the interword spacing, 2200 might be better. 742 % The TeX default is 1000 743 \hbadness=1350 744 % IEEE does not use extra spacing after punctuation 745 \frenchspacing 746 747 % V1.7 increase this a tad to discourage equation breaks 748 \binoppenalty=1000 % default 700 749 \relpenalty=800 % default 500 750 751 752 % margin note stuff 753 \marginparsep 10pt 754 \marginparwidth 20pt 755 \marginparpush 25pt 756 757 758 % if things get too close, go ahead and let them touch 759 \lineskip 0pt 760 \normallineskip 0pt 761 \lineskiplimit 0pt 762 \normallineskiplimit 0pt 763 764 % The distance from the lower edge of the text body to the 765 % footline 766 \footskip 0.4in 767 768 % normally zero, should be relative to font height. 769 % put in a little rubber to help stop some bad breaks (underfull vboxes) 770 \parskip 0ex plus 0.2ex minus 0.1ex 771 772 \parindent 1.0em 773 774 \topmargin -49.0pt 775 \headheight 12pt 776 \headsep 0.25in 777 778 % use the normal font baselineskip 779 % so that \topskip is unaffected by changes in \baselinestretch 780 \topskip=\@IEEEnormalsizeunitybaselineskip 781 \textheight 58pc % 9.63in, 696pt 782 % Tweak textheight to a perfect integer number of lines/page. 783 % The normal baselineskip for each document point size is used 784 % to determine these values. 785 \ifx\CLASSOPTIONpt\@IEEEptsizenine\textheight=63\@IEEEnormalsizeunitybaselineskip\fi % 63 lines/page 786 \ifx\CLASSOPTIONpt\@IEEEptsizeten\textheight=58\@IEEEnormalsizeunitybaselineskip\fi % 58 lines/page 787 \ifx\CLASSOPTIONpt\@IEEEptsizeeleven\textheight=52\@IEEEnormalsizeunitybaselineskip\fi % 52 lines/page 788 \ifx\CLASSOPTIONpt\@IEEEptsizetwelve\textheight=50\@IEEEnormalsizeunitybaselineskip\fi % 50 lines/page 789 790 791 \columnsep 1pc 792 \textwidth 43pc % 2 x 21pc + 1pc = 43pc 793 794 795 % the default side margins are equal 796 \[email protected] 797 \oddsidemargin 14.32mm 798 \evensidemargin 14.32mm 799 \else 800 \oddsidemargin 0.680in 801 \evensidemargin 0.680in 802 \fi 803 % compensate for LaTeX‘s 1in offset 804 \addtolength{\oddsidemargin}{-1in} 805 \addtolength{\evensidemargin}{-1in} 806 807 808 809 % adjust margins for conference mode 810 \ifCLASSOPTIONconference 811 \topmargin -0.25in 812 % we retain the reserved, but unused space for headers 813 \addtolength{\topmargin}{-\headheight} 814 \addtolength{\topmargin}{-\headsep} 815 \textheight 9.25in % The standard for conferences (668.4975pt) 816 % Tweak textheight to a perfect integer number of lines/page. 817 \ifx\CLASSOPTIONpt\@IEEEptsizenine\textheight=61\@IEEEnormalsizeunitybaselineskip\fi % 61 lines/page 818 \ifx\CLASSOPTIONpt\@IEEEptsizeten\textheight=56\@IEEEnormalsizeunitybaselineskip\fi % 56 lines/page 819 \ifx\CLASSOPTIONpt\@IEEEptsizeeleven\textheight=50\@IEEEnormalsizeunitybaselineskip\fi % 50 lines/page 820 \ifx\CLASSOPTIONpt\@IEEEptsizetwelve\textheight=48\@IEEEnormalsizeunitybaselineskip\fi % 48 lines/page 821 \fi 822 823 824 % compsoc conference 825 \ifCLASSOPTIONcompsoc 826 \ifCLASSOPTIONconference 827 % compsoc conference use a larger value for columnsep 828 \columnsep 0.375in 829 % compsoc conferences want 1in top margin, 1.125in bottom margin 830 \topmargin 0in 831 \addtolength{\topmargin}{-6pt}% we tweak this a tad to better comply with top of line stuff 832 % we retain the reserved, but unused space for headers 833 \addtolength{\topmargin}{-\headheight} 834 \addtolength{\topmargin}{-\headsep} 835 \textheight 8.875in % (641.39625pt) 836 % Tweak textheight to a perfect integer number of lines/page. 837 \ifx\CLASSOPTIONpt\@IEEEptsizenine\textheight=58\@IEEEnormalsizeunitybaselineskip\fi % 58 lines/page 838 \ifx\CLASSOPTIONpt\@IEEEptsizeten\textheight=53\@IEEEnormalsizeunitybaselineskip\fi % 53 lines/page 839 \ifx\CLASSOPTIONpt\@IEEEptsizeeleven\textheight=48\@IEEEnormalsizeunitybaselineskip\fi % 48 lines/page 840 \ifx\CLASSOPTIONpt\@IEEEptsizetwelve\textheight=46\@IEEEnormalsizeunitybaselineskip\fi % 46 lines/page 841 \textwidth 6.5in 842 % the default side margins are equal 843 \[email protected] 844 \oddsidemargin 22.45mm 845 \evensidemargin 22.45mm 846 \else 847 \oddsidemargin 1in 848 \evensidemargin 1in 849 \fi 850 % compensate for LaTeX‘s 1in offset 851 \addtolength{\oddsidemargin}{-1in} 852 \addtolength{\evensidemargin}{-1in} 853 \fi\fi 854 855 856 857 % draft mode settings override that of all other modes 858 % provides a nice 1in margin all around the paper and extra 859 % space between the lines for editor‘s comments 860 \ifCLASSOPTIONdraftcls 861 % want 1in from top of paper to text 862 \setlength{\topmargin}{-\headsep}% 863 \addtolength{\topmargin}{-\headheight}% 864 % we want 1in side margins regardless of paper type 865 \oddsidemargin 0in 866 \evensidemargin 0in 867 % set the text width 868 \setlength{\textwidth}{\paperwidth}% 869 \addtolength{\textwidth}{-2.0in}% 870 \setlength{\textheight}{\paperheight}% 871 \addtolength{\textheight}{-2.0in}% 872 % digitize textheight to be an integer number of lines. 873 % this may cause the bottom margin to be off a tad 874 \addtolength{\textheight}{-1\topskip}% 875 \divide\textheight by \baselineskip% 876 \multiply\textheight by \baselineskip% 877 \addtolength{\textheight}{\topskip}% 878 \fi 879 880 881 882 % process CLASSINPUT inner/outer margin 883 % if inner margin defined, but outer margin not, set outer to inner. 884 \ifx\CLASSINPUTinnersidemargin\@IEEEundefined 885 \else 886 \ifx\CLASSINPUToutersidemargin\@IEEEundefined 887 \edef\CLASSINPUToutersidemargin{\CLASSINPUTinnersidemargin} 888 \fi 889 \fi 890 891 \ifx\CLASSINPUToutersidemargin\@IEEEundefined 892 \else 893 % if outer margin defined, but inner margin not, set inner to outer. 894 \ifx\CLASSINPUTinnersidemargin\@IEEEundefined 895 \edef\CLASSINPUTinnersidemargin{\CLASSINPUToutersidemargin} 896 \fi 897 \setlength{\oddsidemargin}{\CLASSINPUTinnersidemargin} 898 \ifCLASSOPTIONtwoside 899 \setlength{\evensidemargin}{\CLASSINPUToutersidemargin} 900 \else 901 \setlength{\evensidemargin}{\CLASSINPUTinnersidemargin} 902 \fi 903 \addtolength{\oddsidemargin}{-1in} 904 \addtolength{\evensidemargin}{-1in} 905 \setlength{\textwidth}{\paperwidth} 906 \addtolength{\textwidth}{-\CLASSINPUTinnersidemargin} 907 \addtolength{\textwidth}{-\CLASSINPUToutersidemargin} 908 \typeout{** ATTENTION: Overriding inner side margin to \CLASSINPUTinnersidemargin\space and 909 outer side margin to \CLASSINPUToutersidemargin\space via \string\CLASSINPUT.} 910 \fi 911 912 913 914 % process CLASSINPUT top/bottom text margin 915 % if toptext margin defined, but bottomtext margin not, set bottomtext to toptext margin 916 \ifx\CLASSINPUTtoptextmargin\@IEEEundefined 917 \else 918 \ifx\CLASSINPUTbottomtextmargin\@IEEEundefined 919 \edef\CLASSINPUTbottomtextmargin{\CLASSINPUTtoptextmargin} 920 \fi 921 \fi 922 923 \ifx\CLASSINPUTbottomtextmargin\@IEEEundefined 924 \else 925 % if bottomtext margin defined, but toptext margin not, set toptext to bottomtext margin 926 \ifx\CLASSINPUTtoptextmargin\@IEEEundefined 927 \edef\CLASSINPUTtoptextmargin{\CLASSINPUTbottomtextmargin} 928 \fi 929 \setlength{\topmargin}{\CLASSINPUTtoptextmargin} 930 \addtolength{\topmargin}{-1in} 931 \addtolength{\topmargin}{-\headheight} 932 \addtolength{\topmargin}{-\headsep} 933 \setlength{\textheight}{\paperheight} 934 \addtolength{\textheight}{-\CLASSINPUTtoptextmargin} 935 \addtolength{\textheight}{-\CLASSINPUTbottomtextmargin} 936 % in the default format we use the normal baselineskip as topskip 937 % we only need 0.7 of this to clear typical top text and we need 938 % an extra 0.3 spacing at the bottom for descenders. This will 939 % correct for both. 940 \addtolength{\topmargin}{-0.3\@IEEEnormalsizeunitybaselineskip} 941 \typeout{** ATTENTION: Overriding top text margin to \CLASSINPUTtoptextmargin\space and 942 bottom text margin to \CLASSINPUTbottomtextmargin\space via \string\CLASSINPUT.} 943 \fi 944 945 946 947 948 949 950 951 % LIST SPACING CONTROLS 952 953 % Controls the amount of EXTRA spacing 954 % above and below \trivlist 955 % Both \list and IED lists override this. 956 % However, \trivlist will use this as will most 957 % things built from \trivlist like the \center 958 % environment. 959 \topsep 0.5\baselineskip 960 961 % Controls the additional spacing around lists preceded 962 % or followed by blank lines. IEEE does not increase 963 % spacing before or after paragraphs so it is set to zero. 964 % \[email protected] is the same as zero, but faster. 965 \partopsep \[email protected] 966 967 % Controls the spacing between paragraphs in lists. 968 % IEEE does not increase spacing before or after paragraphs 969 % so this is also zero. 970 % With IEEEtran.cls, global changes to 971 % this value DO affect lists (but not IED lists). 972 \parsep \[email protected] 973 974 % Controls the extra spacing between list items. 975 % IEEE does not put extra spacing between items. 976 % With IEEEtran.cls, global changes to this value DO affect 977 % lists (but not IED lists). 978 \itemsep \[email protected] 979 980 % \itemindent is the amount to indent the FIRST line of a list 981 % item. It is auto set to zero within the \list environment. To alter 982 % it, you have to do so when you call the \list. 983 % However, IEEE uses this for the theorem environment 984 % There is an alternative value for this near \leftmargini below 985 \itemindent -1em 986 987 % \leftmargin, the spacing from the left margin of the main text to 988 % the left of the main body of a list item is set by \list. 989 % Hence this statement does nothing for lists. 990 % But, quote and verse do use it for indention. 991 \leftmargin 2em 992 993 % we retain this stuff from the older IEEEtran.cls so that \list 994 % will work the same way as before. However, itemize, enumerate and 995 % description (IED) could care less about what these are as they 996 % all are overridden. 997 \leftmargini 2em 998 %\itemindent 2em % Alternative values: sometimes used. 999 %\leftmargini 0em 1000 \leftmarginii 1em 1001 \leftmarginiii 1.5em 1002 \leftmarginiv 1.5em 1003 \leftmarginv 1.0em 1004 \leftmarginvi 1.0em 1005 \labelsep 0.5em 1006 \labelwidth \[email protected] 1007 1008 1009 % The old IEEEtran.cls behavior of \list is retained. 1010 % However, the new V1.3 IED list environments override all the 1011 % @list stuff (\@listX is called within \list for the 1012 % appropriate level just before the user‘s list_decl is called). 1013 % \topsep is now 2pt as IEEE puts a little extra space around 1014 % lists - used by those non-IED macros that depend on \list. 1015 % Note that \parsep and \itemsep are not redefined as in 1016 % the sizexx.clo \@listX (which article.cls uses) so global changes 1017 % of these values DO affect \list 1018 % 1019 \def\@listi{\leftmargin\leftmargini \topsep 2pt plus 1pt minus 1pt} 1020 \let\@listI\@listi 1021 \def\@listii{\leftmargin\leftmarginii\labelwidth\leftmarginii% 1022 \advance\labelwidth-\labelsep \topsep 2pt} 1023 \def\@listiii{\leftmargin\leftmarginiii\labelwidth\leftmarginiii% 1024 \advance\labelwidth-\labelsep \topsep 2pt} 1025 \def\@listiv{\leftmargin\leftmarginiv\labelwidth\leftmarginiv% 1026 \advance\labelwidth-\labelsep \topsep 2pt} 1027 \def\@listv{\leftmargin\leftmarginv\labelwidth\leftmarginv% 1028 \advance\labelwidth-\labelsep \topsep 2pt} 1029 \def\@listvi{\leftmargin\leftmarginvi\labelwidth\leftmarginvi% 1030 \advance\labelwidth-\labelsep \topsep 2pt} 1031 1032 1033 % IEEE uses 5) not 5. 1034 \def\labelenumi{\theenumi)} \def\theenumi{\arabic{enumi}} 1035 1036 % IEEE uses a) not (a) 1037 \def\labelenumii{\theenumii)} \def\theenumii{\alph{enumii}} 1038 1039 % IEEE uses iii) not iii. 1040 \def\labelenumiii{\theenumiii)} \def\theenumiii{\roman{enumiii}} 1041 1042 % IEEE uses A) not A. 1043 \def\labelenumiv{\theenumiv)} \def\theenumiv{\Alph{enumiv}} 1044 1045 % exactly the same as in article.cls 1046 \def\[email protected]{\theenumi} 1047 \def\[email protected]{\theenumi(\theenumii)} 1048 \def\[email protected]{\[email protected]\theenumiii} 1049 1050 % itemized list label styles 1051 \def\labelitemi{$\scriptstyle\bullet$} 1052 \def\labelitemii{\textbf{--}} 1053 \def\labelitemiii{$\ast$} 1054 \def\labelitemiv{$\cdot$} 1055 1056 1057 1058 % **** V1.3 ENHANCEMENTS **** 1059 % Itemize, Enumerate and Description (IED) List Controls 1060 % *************************** 1061 % 1062 % 1063 % IEEE seems to use at least two different values by 1064 % which ITEMIZED list labels are indented to the right 1065 % For The Journal of Lightwave Technology (JLT) and The Journal 1066 % on Selected Areas in Communications (JSAC), they tend to use 1067 % an indention equal to \parindent. For Transactions on Communications 1068 % they tend to indent ITEMIZED lists a little more--- 1.3\parindent. 1069 % We‘ll provide both values here for you so that you can choose 1070 % which one you like in your document using a command such as: 1071 % setlength{\IEEEilabelindent}{\IEEEilabelindentB} 1072 \newdimen\IEEEilabelindentA 1073 \IEEEilabelindentA \parindent 1074 1075 \newdimen\IEEEilabelindentB 1076 \IEEEilabelindentB 1.3\parindent 1077 % However, we‘ll default to using \parindent 1078 % which makes more sense to me 1079 \newdimen\IEEEilabelindent 1080 \IEEEilabelindent \IEEEilabelindentA 1081 1082 1083 % This controls the default amount the enumerated list labels 1084 % are indented to the right. 1085 % Normally, this is the same as the paragraph indention 1086 \newdimen\IEEEelabelindent 1087 \IEEEelabelindent \parindent 1088 1089 % This controls the default amount the description list labels 1090 % are indented to the right. 1091 % Normally, this is the same as the paragraph indention 1092 \newdimen\IEEEdlabelindent 1093 \IEEEdlabelindent \parindent 1094 1095 % This is the value actually used within the IED lists. 1096 % The IED environments automatically set its value to 1097 % one of the three values above, so global changes do 1098 % not have any effect 1099 \newdimen\IEEElabelindent 1100 \IEEElabelindent \parindent 1101 1102 % The actual amount labels will be indented is 1103 % \IEEElabelindent multiplied by the factor below 1104 % corresponding to the level of nesting depth 1105 % This provides a means by which the user can 1106 % alter the effective \IEEElabelindent for deeper 1107 % levels 1108 % There may not be such a thing as correct "standard IEEE" 1109 % values. What IEEE actually does may depend on the specific 1110 % circumstances. 1111 % The first list level almost always has full indention. 1112 % The second levels I‘ve seen have only 75% of the normal indentation 1113 % Three level or greater nestings are very rare. I am guessing 1114 % that they don‘t use any indentation. 1115 \def\IEEElabelindentfactori{1.0} % almost always one 1116 \def\IEEElabelindentfactorii{0.75} % 0.0 or 1.0 may be used in some cases 1117 \def\IEEElabelindentfactoriii{0.0} % 0.75? 0.5? 0.0? 1118 \def\IEEElabelindentfactoriv{0.0} 1119 \def\IEEElabelindentfactorv{0.0} 1120 \def\IEEElabelindentfactorvi{0.0} 1121 1122 % value actually used within IED lists, it is auto 1123 % set to one of the 6 values above 1124 % global changes here have no effect 1125 \def\IEEElabelindentfactor{1.0} 1126 1127 % This controls the default spacing between the end of the IED 1128 % list labels and the list text, when normal text is used for 1129 % the labels. 1130 \newdimen\IEEEiednormlabelsep 1131 \IEEEiednormlabelsep 0.6em 1132 1133 % This controls the default spacing between the end of the IED 1134 % list labels and the list text, when math symbols are used for 1135 % the labels (nomenclature lists). IEEE usually increases the 1136 % spacing in these cases 1137 \newdimen\IEEEiedmathlabelsep 1138 \IEEEiedmathlabelsep 1.2em 1139 1140 % This controls the extra vertical separation put above and 1141 % below each IED list. IEEE usually puts a little extra spacing 1142 % around each list. However, this spacing is barely noticeable. 1143 \newskip\IEEEiedtopsep 1144 \IEEEiedtopsep 2pt plus 1pt minus 1pt 1145 1146 1147 % This command is executed within each IED list environment 1148 % at the beginning of the list. You can use this to set the 1149 % parameters for some/all your IED list(s) without disturbing 1150 % global parameters that affect things other than lists. 1151 % i.e., renewcommand{\IEEEiedlistdecl}{\setlength{\labelsep}{5em}} 1152 % will alter the \labelsep for the next list(s) until 1153 % \IEEEiedlistdecl is redefined. 1154 \def\IEEEiedlistdecl{\relax} 1155 1156 % This command provides an easy way to set \leftmargin based 1157 % on the \labelwidth, \labelsep and the argument \IEEElabelindent 1158 % Usage: \IEEEcalcleftmargin{width-to-indent-the-label} 1159 % output is in the \leftmargin variable, i.e., effectively: 1160 % \leftmargin = argument + \labelwidth + \labelsep 1161 % Note controlled spacing here, shield end of lines with % 1162 \def\IEEEcalcleftmargin#1{\setlength{\leftmargin}{#1}% 1163 \addtolength{\leftmargin}{\labelwidth}% 1164 \addtolength{\leftmargin}{\labelsep}} 1165 1166 % This command provides an easy way to set \labelwidth to the 1167 % width of the given text. It is the same as 1168 % \settowidth{\labelwidth}{label-text} 1169 % and useful as a shorter alternative. 1170 % Typically used to set \labelwidth to be the width 1171 % of the longest label in the list 1172 \def\IEEEsetlabelwidth#1{\settowidth{\labelwidth}{#1}} 1173 1174 % When this command is executed, IED lists will use the 1175 % IEEEiedmathlabelsep label separation rather than the normal 1176 % spacing. To have an effect, this command must be executed via 1177 % the \IEEEiedlistdecl or within the option of the IED list 1178 % environments. 1179 \def\IEEEusemathlabelsep{\setlength{\labelsep}{\IEEEiedmathlabelsep}} 1180 1181 % A flag which controls whether the IED lists automatically 1182 % calculate \leftmargin from \IEEElabelindent, \labelwidth and \labelsep 1183 % Useful if you want to specify your own \leftmargin 1184 % This flag must be set (\IEEEnocalcleftmargintrue or \IEEEnocalcleftmarginfalse) 1185 % via the \IEEEiedlistdecl or within the option of the IED list 1186 % environments to have an effect. 1187 \newif\ifIEEEnocalcleftmargin 1188 \IEEEnocalcleftmarginfalse 1189 1190 % A flag which controls whether \IEEElabelindent is multiplied by 1191 % the \IEEElabelindentfactor for each list level. 1192 % This flag must be set via the \IEEEiedlistdecl or within the option 1193 % of the IED list environments to have an effect. 1194 \newif\ifIEEEnolabelindentfactor 1195 \IEEEnolabelindentfactorfalse 1196 1197 1198 % internal variable to indicate type of IED label 1199 % justification 1200 % 0 - left; 1 - center; 2 - right 1201 \def\@IEEEiedjustify{0} 1202 1203 1204 % commands to allow the user to control IED 1205 % label justifications. Use these commands within 1206 % the IED environment option or in the \IEEEiedlistdecl 1207 % Note that changing the normal list justifications 1208 % is nonstandard and IEEE may not like it if you do so! 1209 % I include these commands as they may be helpful to 1210 % those who are using these enhanced list controls for 1211 % other non-IEEE related LaTeX work. 1212 % itemize and enumerate automatically default to right 1213 % justification, description defaults to left. 1214 \def\IEEEiedlabeljustifyl{\def\@IEEEiedjustify{0}}%left 1215 \def\IEEEiedlabeljustifyc{\def\@IEEEiedjustify{1}}%center 1216 \def\IEEEiedlabeljustifyr{\def\@IEEEiedjustify{2}}%right 1217 1218 1219 1220 1221 % commands to save to and restore from the list parameter copies 1222 % this allows us to set all the list parameters within 1223 % the list_decl and prevent \list (and its \@list) 1224 % from overriding any of our parameters 1225 % V1.6 use \edefs instead of dimen‘s to conserve dimen registers 1226 % Note controlled spacing here, shield end of lines with % 1227 \def\@IEEEsavelistparams{\edef\@IEEEiedtopsep{\the\topsep}% 1228 \edef\@IEEEiedlabelwidth{\the\labelwidth}% 1229 \edef\@IEEEiedlabelsep{\the\labelsep}% 1230 \edef\@IEEEiedleftmargin{\the\leftmargin}% 1231 \edef\@IEEEiedpartopsep{\the\partopsep}% 1232 \edef\@IEEEiedparsep{\the\parsep}% 1233 \edef\@IEEEieditemsep{\the\itemsep}% 1234 \edef\@IEEEiedrightmargin{\the\rightmargin}% 1235 \edef\@IEEEiedlistparindent{\the\listparindent}% 1236 \edef\@IEEEieditemindent{\the\itemindent}} 1237 1238 % Note controlled spacing here 1239 \def\@IEEErestorelistparams{\topsep\@IEEEiedtopsep\relax% 1240 \labelwidth\@IEEEiedlabelwidth\relax% 1241 \labelsep\@IEEEiedlabelsep\relax% 1242 \leftmargin\@IEEEiedleftmargin\relax% 1243 \partopsep\@IEEEiedpartopsep\relax% 1244 \parsep\@IEEEiedparsep\relax% 1245 \itemsep\@IEEEieditemsep\relax% 1246 \rightmargin\@IEEEiedrightmargin\relax% 1247 \listparindent\@IEEEiedlistparindent\relax% 1248 \itemindent\@IEEEieditemindent\relax} 1249 1250 1251 % v1.6b provide original LaTeX IED list environments 1252 % note that latex.ltx defines \itemize and \enumerate, but not \description 1253 % which must be created by the base classes 1254 % save original LaTeX itemize and enumerate 1255 \let\LaTeXitemize\itemize 1256 \let\endLaTeXitemize\enditemize 1257 \let\LaTeXenumerate\enumerate 1258 \let\endLaTeXenumerate\endenumerate 1259 1260 % provide original LaTeX description environment from article.cls 1261 \newenvironment{LaTeXdescription} 1262 {\list{}{\labelwidth\[email protected] \itemindent-\leftmargin 1263 \let\makelabel\descriptionlabel}} 1264 {\endlist} 1265 \newcommand*\descriptionlabel[1]{\hspace\labelsep 1266 \normalfont\bfseries #1} 1267 1268 1269 % override LaTeX‘s default IED lists 1270 \def\itemize{\@IEEEitemize} 1271 \def\enditemize{\@endIEEEitemize} 1272 \def\enumerate{\@IEEEenumerate} 1273 \def\endenumerate{\@endIEEEenumerate} 1274 \def\description{\@IEEEdescription} 1275 \def\enddescription{\@endIEEEdescription} 1276 1277 % provide the user with aliases - may help those using packages that 1278 % override itemize, enumerate, or description 1279 \def\IEEEitemize{\@IEEEitemize} 1280 \def\endIEEEitemize{\@endIEEEitemize} 1281 \def\IEEEenumerate{\@IEEEenumerate} 1282 \def\endIEEEenumerate{\@endIEEEenumerate} 1283 \def\IEEEdescription{\@IEEEdescription} 1284 \def\endIEEEdescription{\@endIEEEdescription} 1285 1286 1287 % V1.6 we want to keep the IEEEtran IED list definitions as our own internal 1288 % commands so they are protected against redefinition 1289 \def\@IEEEitemize{\@ifnextchar[{\@@IEEEitemize}{\@@IEEEitemize[\relax]}} 1290 \def\@IEEEenumerate{\@ifnextchar[{\@@IEEEenumerate}{\@@IEEEenumerate[\relax]}} 1291 \def\@IEEEdescription{\@ifnextchar[{\@@IEEEdescription}{\@@IEEEdescription[\relax]}} 1292 \def\@endIEEEitemize{\endlist} 1293 \def\@endIEEEenumerate{\endlist} 1294 \def\@endIEEEdescription{\endlist} 1295 1296 1297 % DO NOT ALLOW BLANK LINES TO BE IN THESE IED ENVIRONMENTS 1298 % AS THIS WILL FORCE NEW PARAGRAPHS AFTER THE IED LISTS 1299 % IEEEtran itemized list MDS 1/2001 1300 % Note controlled spacing here, shield end of lines with % 1301 \def\@@IEEEitemize[#1]{% 1302 \ifnum\@itemdepth>3\relax\@toodeep\else% 1303 \ifnum\@listdepth>5\relax\@toodeep\else% 1304 \advance\@itemdepth\@ne% 1305 \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}% 1306 % get the labelindentfactor for this level 1307 \advance\@listdepth\@ne% we need to know what the level WILL be 1308 \edef\IEEElabelindentfactor{\csname IEEElabelindentfactor\romannumeral\the\@listdepth\endcsname}% 1309 \advance\@listdepth-\@ne% undo our increment 1310 \def\@IEEEiedjustify{2}% right justified labels are default 1311 % set other defaults 1312 \IEEEnocalcleftmarginfalse% 1313 \IEEEnolabelindentfactorfalse% 1314 \topsep\IEEEiedtopsep% 1315 \IEEElabelindent\IEEEilabelindent% 1316 \labelsep\IEEEiednormlabelsep% 1317 \partopsep 0ex% 1318 \parsep 0ex% 1319 \itemsep 0ex% 1320 \rightmargin 0em% 1321 \listparindent 0em% 1322 \itemindent 0em% 1323 % calculate the label width 1324 % the user can override this later if 1325 % they specified a \labelwidth 1326 \settowidth{\labelwidth}{\csname labelitem\romannumeral\the\@itemdepth\endcsname}% 1327 \@IEEEsavelistparams% save our list parameters 1328 \list{\csname\@itemitem\endcsname}{% 1329 \@IEEErestorelistparams% override any list{} changes 1330 % to our globals 1331 \let\makelabel\@IEEEiedmakelabel% v1.6b setup \makelabel 1332 \IEEEiedlistdecl% let user alter parameters 1333 #1\relax% 1334 % If the user has requested not to use the 1335 % labelindent factor, don‘t revise \labelindent 1336 \ifIEEEnolabelindentfactor\relax% 1337 \else\IEEElabelindent=\IEEElabelindentfactor\labelindent% 1338 \fi% 1339 % Unless the user has requested otherwise, 1340 % calculate our left margin based 1341 % on \IEEElabelindent, \labelwidth and 1342 % \labelsep 1343 \ifIEEEnocalcleftmargin\relax% 1344 \else\IEEEcalcleftmargin{\IEEElabelindent}% 1345 \fi}\fi\fi}% 1346 1347 1348 % DO NOT ALLOW BLANK LINES TO BE IN THESE IED ENVIRONMENTS 1349 % AS THIS WILL FORCE NEW PARAGRAPHS AFTER THE IED LISTS 1350 % IEEEtran enumerate list MDS 1/2001 1351 % Note controlled spacing here, shield end of lines with % 1352 \def\@@IEEEenumerate[#1]{% 1353 \ifnum\@enumdepth>3\relax\@toodeep\else% 1354 \ifnum\@listdepth>5\relax\@toodeep\else% 1355 \advance\@enumdepth\@ne% 1356 \edef\@enumctr{enum\romannumeral\the\@enumdepth}% 1357 % get the labelindentfactor for this level 1358 \advance\@listdepth\@ne% we need to know what the level WILL be 1359 \edef\IEEElabelindentfactor{\csname IEEElabelindentfactor\romannumeral\the\@listdepth\endcsname}% 1360 \advance\@listdepth-\@ne% undo our increment 1361 \def\@IEEEiedjustify{2}% right justified labels are default 1362 % set other defaults 1363 \IEEEnocalcleftmarginfalse% 1364 \IEEEnolabelindentfactorfalse% 1365 \topsep\IEEEiedtopsep% 1366 \IEEElabelindent\IEEEelabelindent% 1367 \labelsep\IEEEiednormlabelsep% 1368 \partopsep 0ex% 1369 \parsep 0ex% 1370 \itemsep 0ex% 1371 \rightmargin 0em% 1372 \listparindent 0em% 1373 \itemindent 0em% 1374 % calculate the label width 1375 % We‘ll set it to the width suitable for all labels using 1376 % normalfont 1) to 9) 1377 % The user can override this later 1378 \settowidth{\labelwidth}{9)}% 1379 \@IEEEsavelistparams% save our list parameters 1380 \list{\csname label\@enumctr\endcsname}{\usecounter{\@enumctr}% 1381 \@IEEErestorelistparams% override any list{} changes 1382 % to our globals 1383 \let\makelabel\@IEEEiedmakelabel% v1.6b setup \makelabel 1384 \IEEEiedlistdecl% let user alter parameters 1385 #1\relax% 1386 % If the user has requested not to use the 1387 % IEEElabelindent factor, don‘t revise \IEEElabelindent 1388 \ifIEEEnolabelindentfactor\relax% 1389 \else\IEEElabelindent=\IEEElabelindentfactor\IEEElabelindent% 1390 \fi% 1391 % Unless the user has requested otherwise, 1392 % calculate our left margin based 1393 % on \IEEElabelindent, \labelwidth and 1394 % \labelsep 1395 \ifIEEEnocalcleftmargin\relax% 1396 \else\IEEEcalcleftmargin{\IEEElabelindent}% 1397 \fi}\fi\fi}% 1398 1399 1400 % DO NOT ALLOW BLANK LINES TO BE IN THESE IED ENVIRONMENTS 1401 % AS THIS WILL FORCE NEW PARAGRAPHS AFTER THE IED LISTS 1402 % IEEEtran description list MDS 1/2001 1403 % Note controlled spacing here, shield end of lines with % 1404 \def\@@IEEEdescription[#1]{% 1405 \ifnum\@listdepth>5\relax\@toodeep\else% 1406 % get the labelindentfactor for this level 1407 \advance\@listdepth\@ne% we need to know what the level WILL be 1408 \edef\IEEElabelindentfactor{\csname IEEElabelindentfactor\romannumeral\the\@listdepth\endcsname}% 1409 \advance\@listdepth-\@ne% undo our increment 1410 \def\@IEEEiedjustify{0}% left justified labels are default 1411 % set other defaults 1412 \IEEEnocalcleftmarginfalse% 1413 \IEEEnolabelindentfactorfalse% 1414 \topsep\IEEEiedtopsep% 1415 \IEEElabelindent\IEEEdlabelindent% 1416 % assume normal labelsep 1417 \labelsep\IEEEiednormlabelsep% 1418 \partopsep 0ex% 1419 \parsep 0ex% 1420 \itemsep 0ex% 1421 \rightmargin 0em% 1422 \listparindent 0em% 1423 \itemindent 0em% 1424 % Bogus label width in case the user forgets 1425 % to set it. 1426 % TIP: If you want to see what a variable‘s width is you 1427 % can use the TeX command \showthe\width-variable to 1428 % display it on the screen during compilation 1429 % (This might be helpful to know when you need to find out 1430 % which label is the widest) 1431 \settowidth{\labelwidth}{Hello}% 1432 \@IEEEsavelistparams% save our list parameters 1433 \list{}{\@IEEErestorelistparams% override any list{} changes 1434 % to our globals 1435 \let\makelabel\@IEEEiedmakelabel% v1.6b setup \makelabel 1436 \IEEEiedlistdecl% let user alter parameters 1437 #1\relax% 1438 % If the user has requested not to use the 1439 % labelindent factor, don‘t revise \IEEElabelindent 1440 \ifIEEEnolabelindentfactor\relax% 1441 \else\IEEElabelindent=\IEEElabelindentfactor\IEEElabelindent% 1442 \fi% 1443 % Unless the user has requested otherwise, 1444 % calculate our left margin based 1445 % on \IEEElabelindent, \labelwidth and 1446 % \labelsep 1447 \ifIEEEnocalcleftmargin\relax% 1448 \else\IEEEcalcleftmargin{\IEEElabelindent}\relax% 1449 \fi}\fi} 1450 1451 % v1.6b we use one makelabel that does justification as needed. 1452 \def\@IEEEiedmakelabel#1{\relax\if\@IEEEiedjustify 0\relax 1453 \makebox[\labelwidth][l]{\normalfont #1}\else 1454 \if\@IEEEiedjustify 1\relax 1455 \makebox[\labelwidth][c]{\normalfont #1}\else 1456 \makebox[\labelwidth][r]{\normalfont #1}\fi\fi} 1457 1458 1459 % VERSE and QUOTE 1460 % V1.7 define environments with newenvironment 1461 \newenvironment{verse}{\let\\=\@centercr 1462 \list{}{\itemsep\[email protected] \itemindent -1.5em \listparindent \itemindent 1463 \rightmargin\leftmargin\advance\leftmargin 1.5em}\item\relax} 1464 {\endlist} 1465 \newenvironment{quotation}{\list{}{\listparindent 1.5em \itemindent\listparindent 1466 \rightmargin\leftmargin \parsep 0pt plus 1pt}\item\relax} 1467 {\endlist} 1468 \newenvironment{quote}{\list{}{\rightmargin\leftmargin}\item\relax} 1469 {\endlist} 1470 1471 1472 % \titlepage 1473 % provided only for backward compatibility. \maketitle is the correct 1474 % way to create the title page. 1475 \newif\[email protected] 1476 \def\titlepage{\@restonecolfalse\[email protected]\@restonecoltrue\onecolumn 1477 \else \newpage \fi \thispagestyle{empty}\[email protected]\[email protected]} 1478 \def\endtitlepage{\[email protected]\twocolumn \else \newpage \fi} 1479 1480 % standard values from article.cls 1481 \arraycolsep 5pt 1482 \arrayrulewidth .4pt 1483 \doublerulesep 2pt 1484 1485 \tabcolsep 6pt 1486 \tabbingsep 0.5em 1487 1488 1489 %% FOOTNOTES 1490 % 1491 %\skip\footins 10pt plus 4pt minus 2pt 1492 % V1.6 respond to changes in font size 1493 % space added above the footnotes (if present) 1494 \skip\footins 0.9\baselineskip plus 0.4\baselineskip minus 0.2\baselineskip 1495 1496 % V1.6, we need to make \footnotesep responsive to changes 1497 % in \baselineskip or strange spacings will result when in 1498 % draft mode. Here is a little LaTeX secret - \footnotesep 1499 % determines the height of an invisible strut that is placed 1500 % *above* the baseline of footnotes after the first. Since 1501 % LaTeX considers the space for characters to be 0.7/baselineskip 1502 % above the baseline and 0.3/baselineskip below it, we need to 1503 % use 0.7/baselineskip as a \footnotesep to maintain equal spacing 1504 % between all the lines of the footnotes. IEEE often uses a tad 1505 % more, so use 0.8\baselineskip. This slightly larger value also helps 1506 % the text to clear the footnote marks. Note that \thanks in IEEEtran 1507 % uses its own value of \footnotesep which is set in \maketitle. 1508 {\footnotesize 1509 \global\footnotesep 0.8\baselineskip} 1510 1511 1512 \skip\@mpfootins = \skip\footins 1513 \fboxsep = 3pt 1514 \fboxrule = .4pt 1515 % V1.6 use 1em, then use LaTeX2e‘s \@makefnmark 1516 % Note that IEEE normally *left* aligns the footnote marks, so we don‘t need 1517 % box resizing tricks here. 1518 \long\def\@makefntext#1{\parindent 1em\indent\hbox{\@makefnmark}#1}% V1.6 use 1em 1519 % V1.7 compsoc does not use superscipts for footnote marks 1520 \ifCLASSOPTIONcompsoc 1521 \def\@IEEEcompsocmakefnmark{\hbox{\normalfont\@thefnmark.\ }} 1522 \long\def\@makefntext#1{\parindent 1em\indent\hbox{\@IEEEcompsocmakefnmark}#1} 1523 \fi 1524 1525 % IEEE does not use footnote rules 1526 \def\footnoterule{} 1527 1528 % V1.7 for compsoc, IEEE uses a footnote rule only for \thanks. We devise a "one-shot" 1529 % system to implement this. 1530 \newif\[email protected] 1531 \@IEEEenableoneshotfootnoterulefalse 1532 \ifCLASSOPTIONcompsoc 1533 \def\footnoterule{\relax\[email protected] 1534 \kern-5pt 1535 \hbox to \columnwidth{\hfill\vrule width 0.5\columnwidth height 0.4pt\hfill} 1536 \kern4.6pt 1537 \global\@IEEEenableoneshotfootnoterulefalse 1538 \else 1539 \relax 1540 \fi} 1541 \fi 1542 1543 % V1.6 do not allow LaTeX to break a footnote across multiple pages 1544 \interfootnotelinepenalty=10000 1545 1546 % V1.6 discourage breaks within equations 1547 % Note that amsmath normally sets this to 10000, 1548 % but LaTeX2e normally uses 100. 1549 \interdisplaylinepenalty=2500 1550 1551 % default allows section depth up to /paragraph 1552 \setcounter{secnumdepth}{4} 1553 1554 % technotes do not allow /paragraph 1555 \ifCLASSOPTIONtechnote 1556 \setcounter{secnumdepth}{3} 1557 \fi 1558 % neither do compsoc conferences 1559 \@IEEEcompsocconfonly{\setcounter{secnumdepth}{3}} 1560 1561 1562 \newcounter{section} 1563 \newcounter{subsection}[section] 1564 \newcounter{subsubsection}[subsection] 1565 \newcounter{paragraph}[subsubsection] 1566 1567 % used only by IEEEtran‘s IEEEeqnarray as other packages may 1568 % have their own, different, implementations 1569 \newcounter{IEEEsubequation}[equation] 1570 1571 % as shown when called by user from \ref, \label and in table of contents 1572 \def\theequation{\arabic{equation}} % 1 1573 \def\theIEEEsubequation{\theequation\alph{IEEEsubequation}} % 1a (used only by IEEEtran‘s IEEEeqnarray) 1574 \ifCLASSOPTIONcompsoc 1575 % compsoc is all arabic 1576 \def\thesection{\arabic{section}} 1577 \def\thesubsection{\thesection.\arabic{subsection}} 1578 \def\thesubsubsection{\thesubsection.\arabic{subsubsection}} 1579 \def\theparagraph{\thesubsubsection.\arabic{paragraph}} 1580 \else 1581 \def\thesection{\Roman{section}} % I 1582 % V1.7, \mbox prevents breaks around - 1583 \def\thesubsection{\mbox{\thesection-\Alph{subsection}}} % I-A 1584 % V1.7 use I-A1 format used by IEEE rather than I-A.1 1585 \def\thesubsubsection{\thesubsection\arabic{subsubsection}} % I-A1 1586 \def\theparagraph{\thesubsubsection\alph{paragraph}} % I-A1a 1587 \fi 1588 1589 % From Heiko Oberdiek. Because of the \mbox in \thesubsection, we need to 1590 % tell hyperref to disable the \mbox command when making PDF bookmarks. 1591 % This done already with hyperref.sty version 6.74o and later, but 1592 % it will not hurt to do it here again for users of older versions. 1593 \@ifundefined{pdfstringdefPreHook}{\let\pdfstringdefPreHook\@empty}{}% 1594 \[email protected]@macro\pdfstringdefPreHook{\let\mbox\relax} 1595 1596 1597 % Main text forms (how shown in main text headings) 1598 % V1.6, using \thesection in \thesectiondis allows changes 1599 % in the former to automatically appear in the latter 1600 \ifCLASSOPTIONcompsoc 1601 \ifCLASSOPTIONconference% compsoc conference 1602 \def\thesectiondis{\thesection.} 1603 \def\thesubsectiondis{\thesectiondis\arabic{subsection}.} 1604 \def\thesubsubsectiondis{\thesubsectiondis\arabic{subsubsection}.} 1605 \def\theparagraphdis{\thesubsubsectiondis\arabic{paragraph}.} 1606 \else% compsoc not conferencs 1607 \def\thesectiondis{\thesection} 1608 \def\thesubsectiondis{\thesectiondis.\arabic{subsection}} 1609 \def\thesubsubsectiondis{\thesubsectiondis.\arabic{subsubsection}} 1610 \def\theparagraphdis{\thesubsubsectiondis.\arabic{paragraph}} 1611 \fi 1612 \else% not compsoc 1613 \def\thesectiondis{\thesection.} % I. 1614 \def\thesubsectiondis{\Alph{subsection}.} % B. 1615 \def\thesubsubsectiondis{\arabic{subsubsection})} % 3) 1616 \def\theparagraphdis{\alph{paragraph})} % d) 1617 \fi 1618 1619 % just like LaTeX2e‘s \@eqnnum 1620 \def\theequationdis{{\normalfont \normalcolor (\theequation)}}% (1) 1621 % IEEEsubequation used only by IEEEtran‘s IEEEeqnarray 1622 \def\theIEEEsubequationdis{{\normalfont \normalcolor (\theIEEEsubequation)}}% (1a) 1623 % redirect LaTeX2e‘s equation number display and all that depend on 1624 % it, through IEEEtran‘s \theequationdis 1625 \def\@eqnnum{\theequationdis} 1626 1627 1628 1629 % V1.7 provide string macros as article.cls does 1630 \def\contentsname{Contents} 1631 \def\listfigurename{List of Figures} 1632 \def\listtablename{List of Tables} 1633 \def\refname{References} 1634 \def\indexname{Index} 1635 \def\figurename{Fig.} 1636 \def\tablename{TABLE} 1637 \@IEEEcompsocconfonly{\def\figurename{Figure}\def\tablename{Table}} 1638 \def\partname{Part} 1639 \def\appendixname{Appendix} 1640 \def\abstractname{Abstract} 1641 % IEEE specific names 1642 \def\IEEEkeywordsname{Index Terms} 1643 \def\IEEEproofname{Proof} 1644 1645 1646 % LIST OF FIGURES AND TABLES AND TABLE OF CONTENTS 1647 % 1648 \def\@pnumwidth{1.55em} 1649 \def\@tocrmarg{2.55em} 1650 \def\@dotsep{4.5} 1651 \setcounter{tocdepth}{3} 1652 1653 % adjusted some spacings here so that section numbers will not easily 1654 % collide with the section titles. 1655 % VIII; VIII-A; and VIII-A.1 are usually the worst offenders. 1656 % MDS 1/2001 1657 \def\tableofcontents{\section*{\contentsname}\@starttoc{toc}} 1658 \def\[email protected]#1#2{\addpenalty{\@secpenalty}\addvspace{1.0em plus 1pt}% 1659 \@tempdima 2.75em \begingroup \parindent \[email protected] \rightskip \@pnumwidth% 1660 \parfillskip-\@pnumwidth {\bfseries\leavevmode #1}\hfil\hbox to\@pnumwidth{\hss #2}\par% 1661 \endgroup} 1662 % argument format #1:level, #2:labelindent,#3:labelsep 1663 \def\[email protected]{\@dottedtocline{2}{2.75em}{3.75em}} 1664 \def\[email protected]{\@dottedtocline{3}{6.5em}{4.5em}} 1665 % must provide \[email protected] defs for ALL sublevels EVEN if tocdepth 1666 % is such as they will not appear in the table of contents 1667 % these defs are how TOC knows what level these things are! 1668 \def\[email protected]{\@dottedtocline{4}{6.5em}{5.5em}} 1669 \def\[email protected]{\@dottedtocline{5}{6.5em}{6.5em}} 1670 \def\listoffigures{\section*{\listfigurename}\@starttoc{lof}} 1671 \def\[email protected]{\@dottedtocline{1}{0em}{2.75em}} 1672 \def\listoftables{\section*{\listtablename}\@starttoc{lot}} 1673 \let\[email protected]\[email protected] 1674 1675 1676 %% Definitions for floats 1677 %% 1678 %% Normal Floats 1679 \floatsep 1\baselineskip plus 0.2\baselineskip minus 0.2\baselineskip 1680 \textfloatsep 1.7\baselineskip plus 0.2\baselineskip minus 0.4\baselineskip 1681 \@fptop 0pt plus 1fil 1682 \@fpsep 0.75\baselineskip plus 2fil 1683 \@fpbot 0pt plus 1fil 1684 \def\topfraction{0.9} 1685 \def\bottomfraction{0.4} 1686 \def\floatpagefraction{0.8} 1687 % V1.7, let top floats approach 90% of page 1688 \def\textfraction{0.1} 1689 1690 %% Double Column Floats 1691 \dblfloatsep 1\baselineskip plus 0.2\baselineskip minus 0.2\baselineskip 1692 1693 \dbltextfloatsep 1.7\baselineskip plus 0.2\baselineskip minus 0.4\baselineskip 1694 % Note that it would be nice if the rubber here actually worked in LaTeX2e. 1695 % There is a long standing limitation in LaTeX, first discovered (to the best 1696 % of my knowledge) by Alan Jeffrey in 1992. LaTeX ignores the stretchable 1697 % portion of \dbltextfloatsep, and as a result, double column figures can and 1698 % do result in an non-integer number of lines in the main text columns with 1699 % underfull vbox errors as a consequence. A post to comp.text.tex 1700 % by Donald Arseneau confirms that this had not yet been fixed in 1998. 1701 % IEEEtran V1.6 will fix this problem for you in the titles, but it doesn‘t 1702 % protect you from other double floats. Happy vspace‘ing. 1703 1704 \@dblfptop 0pt plus 1fil 1705 \@dblfpsep 0.75\baselineskip plus 2fil 1706 \@dblfpbot 0pt plus 1fil 1707 \def\dbltopfraction{0.8} 1708 \def\dblfloatpagefraction{0.8} 1709 \setcounter{dbltopnumber}{4} 1710 1711 \intextsep 1\baselineskip plus 0.2\baselineskip minus 0.2\baselineskip 1712 \setcounter{topnumber}{2} 1713 \setcounter{bottomnumber}{2} 1714 \setcounter{totalnumber}{4} 1715 1716 1717 1718 % article class provides these, we should too. 1719 \newlength\abovecaptionskip 1720 \newlength\belowcaptionskip 1721 % but only \abovecaptionskip is used above figure captions and *below* table 1722 % captions 1723 \setlength\abovecaptionskip{0.5\baselineskip} 1724 \setlength\belowcaptionskip{0pt} 1725 % V1.6 create hooks in case the caption spacing ever needs to be 1726 % overridden by a user 1727 \def\@IEEEfigurecaptionsepspace{\vskip\abovecaptionskip\relax}% 1728 \def\@IEEEtablecaptionsepspace{\vskip\abovecaptionskip\relax}% 1729 1730 1731 % 1.6b revise caption system so that \@makecaption uses two arguments 1732 % as with LaTeX2e. Otherwise, there will be problems when using hyperref. 1733 \def\@IEEEtablestring{table} 1734 1735 \ifCLASSOPTIONcompsoc 1736 % V1.7 compsoc \@makecaption 1737 \ifCLASSOPTIONconference% compsoc conference 1738 \long\def\@makecaption#1#2{% 1739 % test if is a for a figure or table 1740 \ifx\@captype\@IEEEtablestring% 1741 % if a table, do table caption 1742 \normalsize\begin{center}{\normalfont\sffamily\normalsize {#1.}~ #2}\end{center}% 1743 \@IEEEtablecaptionsepspace 1744 % if not a table, format it as a figure 1745 \else 1746 \@IEEEfigurecaptionsepspace 1747 \setbox\@tempboxa\hbox{\normalfont\sffamily\normalsize {#1.}~ #2}% 1748 \ifdim \wd\@tempboxa >\hsize% 1749 % if caption is longer than a line, let it wrap around 1750 \setbox\@tempboxa\hbox{\normalfont\sffamily\normalsize {#1.}~ }% 1751 \parbox[t]{\hsize}{\normalfont\sffamily\normalsize \noindent\unhbox\@tempboxa#2}% 1752 % if caption is shorter than a line, center 1753 \else% 1754 \hbox to\hsize{\normalfont\sffamily\normalsize\hfil\box\@tempboxa\hfil}% 1755 \fi\fi} 1756 \else% nonconference compsoc 1757 \long\def\@makecaption#1#2{% 1758 % test if is a for a figure or table 1759 \ifx\@captype\@IEEEtablestring% 1760 % if a table, do table caption 1761 \normalsize\begin{center}{\normalfont\sffamily\normalsize #1}\\{\normalfont\sffamily\normalsize #2}\end{center}% 1762 \@IEEEtablecaptionsepspace 1763 % if not a table, format it as a figure 1764 \else 1765 \@IEEEfigurecaptionsepspace 1766 \setbox\@tempboxa\hbox{\normalfont\sffamily\normalsize {#1.}~ #2}% 1767 \ifdim \wd\@tempboxa >\hsize% 1768 % if caption is longer than a line, let it wrap around 1769 \setbox\@tempboxa\hbox{\normalfont\sffamily\normalsize {#1.}~ }% 1770 \parbox[t]{\hsize}{\normalfont\sffamily\normalsize \noindent\unhbox\@tempboxa#2}% 1771 % if caption is shorter than a line, left justify 1772 \else% 1773 \hbox to\hsize{\normalfont\sffamily\normalsize\box\@tempboxa\hfil}% 1774 \fi\fi} 1775 \fi 1776 1777 \else% traditional noncompsoc \@makecaption 1778 \long\def\@makecaption#1#2{% 1779 % test if is a for a figure or table 1780 \ifx\@captype\@IEEEtablestring% 1781 % if a table, do table caption 1782 \footnotesize\begin{center}{\normalfont\footnotesize #1}\\{\normalfont\footnotesize\scshape #2}\end{center}% 1783 \@IEEEtablecaptionsepspace 1784 % if not a table, format it as a figure 1785 \else 1786 \@IEEEfigurecaptionsepspace 1787 % 3/2001 use footnotesize, not small; use two nonbreaking spaces, not one 1788 \setbox\@tempboxa\hbox{\normalfont\footnotesize {#1.}~~ #2}% 1789 \ifdim \wd\@tempboxa >\hsize% 1790 % if caption is longer than a line, let it wrap around 1791 \setbox\@tempboxa\hbox{\normalfont\footnotesize {#1.}~~ }% 1792 \parbox[t]{\hsize}{\normalfont\footnotesize\noindent\unhbox\@tempboxa#2}% 1793 % if caption is shorter than a line, center if conference, left justify otherwise 1794 \else% 1795 \ifCLASSOPTIONconference \hbox to\hsize{\normalfont\footnotesize\hfil\box\@tempboxa\hfil}% 1796 \else \hbox to\hsize{\normalfont\footnotesize\box\@tempboxa\hfil}% 1797 \fi\fi\fi} 1798 \fi 1799 1800 1801 1802 % V1.7 disable captions class option, do so in a way that retains operation of \label 1803 % within \caption 1804 \ifCLASSOPTIONcaptionsoff 1805 \long\def\@makecaption#1#2{\vspace*{2em}\footnotesize\begin{center}{\footnotesize #1}\end{center}% 1806 \let\@IEEEtemporiglabeldefsave\label 1807 \let\@IEEEtemplabelargsave\relax 1808 \def\label##1{\gdef\@IEEEtemplabelargsave{##1}}% 1809 \setbox\@tempboxa\hbox{#2}% 1810 \let\label\@IEEEtemporiglabeldefsave 1811 \ifx\@IEEEtemplabelargsave\relax\else\label{\@IEEEtemplabelargsave}\fi} 1812 \fi 1813 1814 1815 % V1.7 define end environments with \def not \let so as to work OK with 1816 % preview-latex 1817 \newcounter{figure} 1818 \def\thefigure{\@arabic\[email protected]} 1819 \def\[email protected]{tbp} 1820 \def\[email protected]{1} 1821 \def\[email protected]{lof} 1822 \def\[email protected]{\figurename~\thefigure} 1823 \def\figure{\@float{figure}} 1824 \def\endfigure{\[email protected]} 1825 \@namedef{figure*}{\@dblfloat{figure}} 1826 \@namedef{endfigure*}{\[email protected]} 1827 \newcounter{table} 1828 \ifCLASSOPTIONcompsoc 1829 \def\thetable{\arabic{table}} 1830 \else 1831 \def\thetable{\@Roman\[email protected]} 1832 \fi 1833 \def\[email protected]{tbp} 1834 \def\[email protected]{2} 1835 \def\[email protected]{lot} 1836 \def\[email protected]{\tablename~\thetable} 1837 % V1.6 IEEE uses 8pt text for tables 1838 % to default to footnotesize, we hack into LaTeX2e‘s \@floatboxreset and pray 1839 \def\table{\def\@floatboxreset{\[email protected]\footnotesize\@setminipage}\@float{table}} 1840 \def\endtable{\[email protected]} 1841 % v1.6b double column tables need to default to footnotesize as well. 1842 \@namedef{table*}{\def\@floatboxreset{\[email protected]\footnotesize\@setminipage}\@dblfloat{table}} 1843 \@namedef{endtable*}{\[email protected]} 1844 1845 1846 1847 1848 %% 1849 %% START OF IEEEeqnarry DEFINITIONS 1850 %% 1851 %% Inspired by the concepts, examples, and previous works of LaTeX 1852 %% coders and developers such as Donald Arseneau, Fred Bartlett, 1853 %% David Carlisle, Tony Liu, Frank Mittelbach, Piet van Oostrum, 1854 %% Roland Winkler and Mark Wooding. 1855 %% I don‘t make the claim that my work here is even near their calibre. ;) 1856 1857 1858 % hook to allow easy changeover to IEEEtran.cls/tools.sty error reporting 1859 \def\@IEEEclspkgerror{\ClassError{IEEEtran}} 1860 1861 \newif\[email protected]% flag to indicate if the environment was called as the star form 1862 \@IEEEeqnarraystarformfalse 1863 1864 \newif\[email protected]% tracks if the environment should advance the col counter 1865 % allows a way to make an \IEEEeqnarraybox that can be used within an \IEEEeqnarray 1866 % used by IEEEeqnarraymulticol so that it can work properly in both 1867 \@advanceIEEEeqncolcnttrue 1868 1869 \newcount\@IEEEeqnnumcols % tracks how many IEEEeqnarray cols are defined 1870 \newcount\@IEEEeqncolcnt % tracks how many IEEEeqnarray cols the user actually used 1871 1872 1873 % The default math style used by the columns 1874 \def\IEEEeqnarraymathstyle{\displaystyle} 1875 % The default text style used by the columns 1876 % default to using the current font 1877 \def\IEEEeqnarraytextstyle{\relax} 1878 1879 % like the iedlistdecl but for \IEEEeqnarray 1880 \def\IEEEeqnarraydecl{\relax} 1881 \def\IEEEeqnarrayboxdecl{\relax} 1882 1883 % \yesnumber is the opposite of \nonumber 1884 % a novel concept with the same def as the equationarray package 1885 % However, we give IEEE versions too since some LaTeX packages such as 1886 % the MDWtools mathenv.sty redefine \nonumber to something else. 1887 \providecommand{\yesnumber}{\global\@eqnswtrue} 1888 \def\IEEEyesnumber{\global\@eqnswtrue} 1889 \def\IEEEnonumber{\global\@eqnswfalse} 1890 1891 1892 \def\IEEEyessubnumber{\global\@IEEEissubequationtrue\global\@eqnswtrue% 1893 \[email protected]% only do something inside an IEEEeqnarray 1894 \[email protected]\addtocounter{equation}{-1}\else\setcounter{IEEEsubequation}{1}\fi% 1895 \def\@currentlabel{\[email protected]\theIEEEsubequation}\fi} 1896 1897 % flag to indicate that an equation is a sub equation 1898 \newif\[email protected]% 1899 \@IEEEissubequationfalse 1900 1901 % allows users to "push away" equations that get too close to the equation numbers 1902 \def\IEEEeqnarraynumspace{\hphantom{\[email protected]\theIEEEsubequationdis\else\theequationdis\fi}} 1903 1904 % provides a way to span multiple columns within IEEEeqnarray environments 1905 % will consider \[email protected] before globally advancing the 1906 % column counter - so as to work within \IEEEeqnarraybox 1907 % usage: \IEEEeqnarraymulticol{number cols. to span}{col type}{cell text} 1908 \long\def\IEEEeqnarraymulticol#1#2#3{\multispan{#1}% 1909 % check if column is defined 1910 \relax\expandafter\ifx\csname @IEEEeqnarraycolDEF#2\endcsname\@IEEEeqnarraycolisdefined% 1911 \csname @IEEEeqnarraycolPRE#2\endcsname#3\relax\relax\relax\relax\relax% 1912 \relax\relax\relax\relax\relax\csname @IEEEeqnarraycolPOST#2\endcsname% 1913 \else% if not, error and use default type 1914 \@IEEEclspkgerror{Invalid column type "#2" in \string\IEEEeqnarraymulticol.\MessageBreak 1915 Using a default centering column instead}% 1916 {You must define IEEEeqnarray column types before use.}% 1917 \csname @[email protected]\endcsname#3\relax\relax\relax\relax\relax% 1918 \relax\relax\relax\relax\relax\csname @[email protected]\endcsname% 1919 \fi% 1920 % advance column counter only if the IEEEeqnarray environment wants it 1921 \[email protected]\global\advance\@IEEEeqncolcnt by #1\relax\fi} 1922 1923 % like \omit, but maintains track of the column counter for \IEEEeqnarray 1924 \def\IEEEeqnarrayomit{\omit\[email protected]\global\advance\@IEEEeqncolcnt by 1\relax\fi} 1925 1926 1927 % provides a way to define a letter referenced column type 1928 % usage: \IEEEeqnarraydefcol{col. type letter/name}{pre insertion text}{post insertion text} 1929 \def\IEEEeqnarraydefcol#1#2#3{\expandafter\def\csname @IEEEeqnarraycolPRE#1\endcsname{#2}% 1930 \expandafter\def\csname @IEEEeqnarraycolPOST#1\endcsname{#3}% 1931 \expandafter\def\csname @IEEEeqnarraycolDEF#1\endcsname{1}} 1932 1933 1934 % provides a way to define a numerically referenced inter-column glue types 1935 % usage: \IEEEeqnarraydefcolsep{col. glue number}{glue definition} 1936 \def\IEEEeqnarraydefcolsep#1#2{\expandafter\def\csname @IEEEeqnarraycolSEP\romannumeral #1\endcsname{#2}% 1937 \expandafter\def\csname @IEEEeqnarraycolSEPDEF\romannumeral #1\endcsname{1}} 1938 1939 1940 \def\@IEEEeqnarraycolisdefined{1}% just a macro for 1, used for checking undefined column types 1941 1942 1943 % expands and appends the given argument to the \@IEEEtrantmptoksA token list 1944 % used to build up the \halign preamble 1945 \def\@IEEEappendtoksA#1{\edef\@@IEEEappendtoksA{\@IEEEtrantmptoksA={\the\@IEEEtrantmptoksA #1}}% 1946 \@@IEEEappendtoksA} 1947 1948 % also appends to \@IEEEtrantmptoksA, but does not expand the argument 1949 % uses \toks8 as a scratchpad register 1950 \def\@IEEEappendNOEXPANDtoksA#1{\toks8={#1}% 1951 \edef\@@IEEEappendNOEXPANDtoksA{\@IEEEtrantmptoksA={\the\@IEEEtrantmptoksA\the\toks8}}% 1952 \@@IEEEappendNOEXPANDtoksA} 1953 1954 % define some common column types for the user 1955 % math 1956 \IEEEeqnarraydefcol{l}{$\IEEEeqnarraymathstyle}{$\hfil} 1957 \IEEEeqnarraydefcol{c}{\hfil$\IEEEeqnarraymathstyle}{$\hfil} 1958 \IEEEeqnarraydefcol{r}{\hfil$\IEEEeqnarraymathstyle}{$} 1959 \IEEEeqnarraydefcol{L}{$\IEEEeqnarraymathstyle{}}{{}$\hfil} 1960 \IEEEeqnarraydefcol{C}{\hfil$\IEEEeqnarraymathstyle{}}{{}$\hfil} 1961 \IEEEeqnarraydefcol{R}{\hfil$\IEEEeqnarraymathstyle{}}{{}$} 1962 % text 1963 \IEEEeqnarraydefcol{s}{\IEEEeqnarraytextstyle}{\hfil} 1964 \IEEEeqnarraydefcol{t}{\hfil\IEEEeqnarraytextstyle}{\hfil} 1965 \IEEEeqnarraydefcol{u}{\hfil\IEEEeqnarraytextstyle}{} 1966 1967 % vertical rules 1968 \IEEEeqnarraydefcol{v}{}{\vrule width\arrayrulewidth} 1969 \IEEEeqnarraydefcol{vv}{\vrule width\arrayrulewidth\hfil}{\hfil\vrule width\arrayrulewidth} 1970 \IEEEeqnarraydefcol{V}{}{\vrule width\arrayrulewidth\hskip\doublerulesep\vrule width\arrayrulewidth} 1971 \IEEEeqnarraydefcol{VV}{\vrule width\arrayrulewidth\hskip\doublerulesep\vrule width\arrayrulewidth\hfil}% 1972 {\hfil\vrule width\arrayrulewidth\hskip\doublerulesep\vrule width\arrayrulewidth} 1973 1974 % horizontal rules 1975 \IEEEeqnarraydefcol{h}{}{\leaders\hrule height\arrayrulewidth\hfil} 1976 \IEEEeqnarraydefcol{H}{}{\leaders\vbox{\hrule width\arrayrulewidth\vskip\doublerulesep\hrule width\arrayrulewidth}\hfil} 1977 1978 % plain 1979 \IEEEeqnarraydefcol{x}{}{} 1980 \IEEEeqnarraydefcol{X}{$}{$} 1981 1982 % the default column type to use in the event a column type is not defined 1983 \IEEEeqnarraydefcol{@IEEEdefault}{\hfil$\IEEEeqnarraymathstyle}{$\hfil} 1984 1985 1986 % a zero tabskip (used for "-" col types) 1987 \def\@IEEEeqnarraycolSEPzero{0pt plus 0pt minus 0pt} 1988 % a centering tabskip (used for "+" col types) 1989 \def\@IEEEeqnarraycolSEPcenter{1000pt plus 0pt minus 1000pt} 1990 1991 % top level default tabskip glues for the start, end, and inter-column 1992 % may be reset within environments not always at the top level, e.g., \IEEEeqnarraybox 1993 \edef\@IEEEeqnarraycolSEPdefaultstart{\@IEEEeqnarraycolSEPcenter}% default start glue 1994 \edef\@IEEEeqnarraycolSEPdefaultend{\@IEEEeqnarraycolSEPcenter}% default end glue 1995 \edef\@IEEEeqnarraycolSEPdefaultmid{\@IEEEeqnarraycolSEPzero}% default inter-column glue 1996 1997 1998 1999 % creates a vertical rule that extends from the bottom to the top a a cell 2000 % Provided in case other packages redefine \vline some other way. 2001 % usage: \IEEEeqnarrayvrule[rule thickness] 2002 % If no argument is provided, \arrayrulewidth will be used for the rule thickness. 2003 \newcommand\IEEEeqnarrayvrule[1][\arrayrulewidth]{\vrule\@width#1\relax} 2004 2005 % creates a blank separator row 2006 % usage: \IEEEeqnarrayseprow[separation length][font size commands] 2007 % default is \IEEEeqnarrayseprow[0.25\normalbaselineskip][\relax] 2008 % blank arguments inherit the default values 2009 % uses \skip5 as a scratch register - calls \@IEEEeqnarraystrutsize which uses more scratch registers 2010 \def\IEEEeqnarrayseprow{\relax\@ifnextchar[{\@IEEEeqnarrayseprow}{\@IEEEeqnarrayseprow[0.25\normalbaselineskip]}} 2011 \def\@IEEEeqnarrayseprow[#1]{\relax\@ifnextchar[{\@@IEEEeqnarrayseprow[#1]}{\@@IEEEeqnarrayseprow[#1][\relax]}} 2012 \def\@@IEEEeqnarrayseprow[#1][#2]{\def\@IEEEeqnarrayseprowARGONE{#1}% 2013 \ifx\@IEEEeqnarrayseprowARGONE\@empty% 2014 % get the skip value, based on the font commands 2015 % use skip5 because \IEEEeqnarraystrutsize uses \skip0, \skip2, \skip3 2016 % assign within a bogus box to confine the font changes 2017 {\setbox0=\hbox{#2\relax\global\skip5=0.25\normalbaselineskip}}% 2018 \else% 2019 {\setbox0=\hbox{#2\relax\global\skip5=#1}}% 2020 \fi% 2021 \@IEEEeqnarrayhoptolastcolumn\IEEEeqnarraystrutsize{\skip5}{0pt}[\relax]\relax} 2022 2023 % creates a blank separator row, but omits all the column templates 2024 % usage: \IEEEeqnarrayseprowcut[separation length][font size commands] 2025 % default is \IEEEeqnarrayseprowcut[0.25\normalbaselineskip][\relax] 2026 % blank arguments inherit the default values 2027 % uses \skip5 as a scratch register - calls \@IEEEeqnarraystrutsize which uses more scratch registers 2028 \def\IEEEeqnarrayseprowcut{\multispan{\@IEEEeqnnumcols}\relax% span all the cols 2029 % advance column counter only if the IEEEeqnarray environment wants it 2030 \[email protected]\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% 2031 \@ifnextchar[{\@IEEEeqnarrayseprowcut}{\@IEEEeqnarrayseprowcut[0.25\normalbaselineskip]}} 2032 \def\@IEEEeqnarrayseprowcut[#1]{\relax\@ifnextchar[{\@@IEEEeqnarrayseprowcut[#1]}{\@@IEEEeqnarrayseprowcut[#1][\relax]}} 2033 \def\@@IEEEeqnarrayseprowcut[#1][#2]{\def\@IEEEeqnarrayseprowARGONE{#1}% 2034 \ifx\@IEEEeqnarrayseprowARGONE\@empty% 2035 % get the skip value, based on the font commands 2036 % use skip5 because \IEEEeqnarraystrutsize uses \skip0, \skip2, \skip3 2037 % assign within a bogus box to confine the font changes 2038 {\setbox0=\hbox{#2\relax\global\skip5=0.25\normalbaselineskip}}% 2039 \else% 2040 {\setbox0=\hbox{#2\relax\global\skip5=#1}}% 2041 \fi% 2042 \IEEEeqnarraystrutsize{\skip5}{0pt}[\relax]\relax} 2043 2044 2045 2046 % draws a single rule across all the columns optional 2047 % argument determines the rule width, \arrayrulewidth is the default 2048 % updates column counter as needed and turns off struts 2049 % usage: \IEEEeqnarrayrulerow[rule line thickness] 2050 \def\IEEEeqnarrayrulerow{\multispan{\@IEEEeqnnumcols}\relax% span all the cols 2051 % advance column counter only if the IEEEeqnarray environment wants it 2052 \[email protected]\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% 2053 \@ifnextchar[{\@IEEEeqnarrayrulerow}{\@IEEEeqnarrayrulerow[\arrayrulewidth]}} 2054 \def\@IEEEeqnarrayrulerow[#1]{\leaders\hrule height#1\hfil\relax% put in our rule 2055 % turn off any struts 2056 \IEEEeqnarraystrutsize{0pt}{0pt}[\relax]\relax} 2057 2058 2059 % draws a double rule by using a single rule row, a separator row, and then 2060 % another single rule row 2061 % first optional argument determines the rule thicknesses, \arrayrulewidth is the default 2062 % second optional argument determines the rule spacing, \doublerulesep is the default 2063 % usage: \IEEEeqnarraydblrulerow[rule line thickness][rule spacing] 2064 \def\IEEEeqnarraydblrulerow{\multispan{\@IEEEeqnnumcols}\relax% span all the cols 2065 % advance column counter only if the IEEEeqnarray environment wants it 2066 \[email protected]\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% 2067 \@ifnextchar[{\@IEEEeqnarraydblrulerow}{\@IEEEeqnarraydblrulerow[\arrayrulewidth]}} 2068 \def\@IEEEeqnarraydblrulerow[#1]{\relax\@ifnextchar[{\@@IEEEeqnarraydblrulerow[#1]}% 2069 {\@@IEEEeqnarraydblrulerow[#1][\doublerulesep]}} 2070 \def\@@IEEEeqnarraydblrulerow[#1][#2]{\def\@IEEEeqnarraydblrulerowARG{#1}% 2071 % we allow the user to say \IEEEeqnarraydblrulerow[][] 2072 \ifx\@IEEEeqnarraydblrulerowARG\@empty% 2073 \@IEEEeqnarrayrulerow[\arrayrulewidth]% 2074 \else% 2075 \@IEEEeqnarrayrulerow[#1]\relax% 2076 \fi% 2077 \def\@IEEEeqnarraydblrulerowARG{#2}% 2078 \ifx\@IEEEeqnarraydblrulerowARG\@empty% 2079 \\\IEEEeqnarrayseprow[\doublerulesep][\relax]% 2080 \else% 2081 \\\IEEEeqnarrayseprow[#2][\relax]% 2082 \fi% 2083 \\\multispan{\@IEEEeqnnumcols}% 2084 % advance column counter only if the IEEEeqnarray environment wants it 2085 \[email protected]\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% 2086 \def\@IEEEeqnarraydblrulerowARG{#1}% 2087 \ifx\@IEEEeqnarraydblrulerowARG\@empty% 2088 \@IEEEeqnarrayrulerow[\arrayrulewidth]% 2089 \else% 2090 \@IEEEeqnarrayrulerow[#1]% 2091 \fi% 2092 } 2093 2094 % draws a double rule by using a single rule row, a separator (cutting) row, and then 2095 % another single rule row 2096 % first optional argument determines the rule thicknesses, \arrayrulewidth is the default 2097 % second optional argument determines the rule spacing, \doublerulesep is the default 2098 % usage: \IEEEeqnarraydblrulerow[rule line thickness][rule spacing] 2099 \def\IEEEeqnarraydblrulerowcut{\multispan{\@IEEEeqnnumcols}\relax% span all the cols 2100 % advance column counter only if the IEEEeqnarray environment wants it 2101 \[email protected]\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% 2102 \@ifnextchar[{\@IEEEeqnarraydblrulerowcut}{\@IEEEeqnarraydblrulerowcut[\arrayrulewidth]}} 2103 \def\@IEEEeqnarraydblrulerowcut[#1]{\relax\@ifnextchar[{\@@IEEEeqnarraydblrulerowcut[#1]}% 2104 {\@@IEEEeqnarraydblrulerowcut[#1][\doublerulesep]}} 2105 \def\@@IEEEeqnarraydblrulerowcut[#1][#2]{\def\@IEEEeqnarraydblrulerowARG{#1}% 2106 % we allow the user to say \IEEEeqnarraydblrulerow[][] 2107 \ifx\@IEEEeqnarraydblrulerowARG\@empty% 2108 \@IEEEeqnarrayrulerow[\arrayrulewidth]% 2109 \else% 2110 \@IEEEeqnarrayrulerow[#1]% 2111 \fi% 2112 \def\@IEEEeqnarraydblrulerowARG{#2}% 2113 \ifx\@IEEEeqnarraydblrulerowARG\@empty% 2114 \\\IEEEeqnarrayseprowcut[\doublerulesep][\relax]% 2115 \else% 2116 \\\IEEEeqnarrayseprowcut[#2][\relax]% 2117 \fi% 2118 \\\multispan{\@IEEEeqnnumcols}% 2119 % advance column counter only if the IEEEeqnarray environment wants it 2120 \[email protected]\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% 2121 \def\@IEEEeqnarraydblrulerowARG{#1}% 2122 \ifx\@IEEEeqnarraydblrulerowARG\@empty% 2123 \@IEEEeqnarrayrulerow[\arrayrulewidth]% 2124 \else% 2125 \@IEEEeqnarrayrulerow[#1]% 2126 \fi% 2127 } 2128 2129 2130 2131 % inserts a full row‘s worth of &‘s 2132 % relies on \@IEEEeqnnumcols to provide the correct number of columns 2133 % uses \@IEEEtrantmptoksA, \count0 as scratch registers 2134 \def\@IEEEeqnarrayhoptolastcolumn{\@IEEEtrantmptoksA={}\count0=1\relax% 2135 \loop% add cols if the user did not use them all 2136 \ifnum\count0<\@IEEEeqnnumcols\relax% 2137 \@IEEEappendtoksA{&}% 2138 \advance\count0 by 1\relax% update the col count 2139 \repeat% 2140 \the\@IEEEtrantmptoksA%execute the &‘s 2141 } 2142 2143 2144 2145 \newif\[email protected] % flag to indicate if we are within the lines 2146 \@IEEEeqnarrayISinnerfalse % of an IEEEeqnarray - after the IEEEeqnarraydecl 2147 2148 \edef\@IEEEeqnarrayTHEstrutheight{0pt} % height and depth of IEEEeqnarray struts 2149 \edef\@IEEEeqnarrayTHEstrutdepth{0pt} 2150 2151 \edef\@IEEEeqnarrayTHEmasterstrutheight{0pt} % default height and depth of 2152 \edef\@IEEEeqnarrayTHEmasterstrutdepth{0pt} % struts within an IEEEeqnarray 2153 2154 \edef\@IEEEeqnarrayTHEmasterstrutHSAVE{0pt} % saved master strut height 2155 \edef\@IEEEeqnarrayTHEmasterstrutDSAVE{0pt} % and depth 2156 2157 \newif\[email protected] % flag to indicate that the master strut value 2158 \@IEEEeqnarrayusemasterstruttrue % is to be used 2159 2160 2161 2162 % saves the strut height and depth of the master strut 2163 \def\@IEEEeqnarraymasterstrutsave{\relax% 2164 \expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax% 2165 \expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax% 2166 % remove stretchability 2167 \dimen0\skip0\relax% 2168 \dimen2\skip2\relax% 2169 % save values 2170 \edef\@IEEEeqnarrayTHEmasterstrutHSAVE{\the\dimen0}% 2171 \edef\@IEEEeqnarrayTHEmasterstrutDSAVE{\the\dimen2}} 2172 2173 % restores the strut height and depth of the master strut 2174 \def\@IEEEeqnarraymasterstrutrestore{\relax% 2175 \expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutHSAVE\relax% 2176 \expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutDSAVE\relax% 2177 % remove stretchability 2178 \dimen0\skip0\relax% 2179 \dimen2\skip2\relax% 2180 % restore values 2181 \edef\@IEEEeqnarrayTHEmasterstrutheight{\the\dimen0}% 2182 \edef\@IEEEeqnarrayTHEmasterstrutdepth{\the\dimen2}} 2183 2184 2185 % globally restores the strut height and depth to the 2186 % master values and sets the master strut flag to true 2187 \def\@IEEEeqnarraystrutreset{\relax% 2188 \expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax% 2189 \expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax% 2190 % remove stretchability 2191 \dimen0\skip0\relax% 2192 \dimen2\skip2\relax% 2193 % restore values 2194 \xdef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% 2195 \xdef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% 2196 \global\@IEEEeqnarrayusemasterstruttrue} 2197 2198 2199 % if the master strut is not to be used, make the current 2200 % values of \@IEEEeqnarrayTHEstrutheight, \@IEEEeqnarrayTHEstrutdepth 2201 % and the use master strut flag, global 2202 % this allows user strut commands issued in the last column to be carried 2203 % into the isolation/strut column 2204 \def\@IEEEeqnarrayglobalizestrutstatus{\relax% 2205 \[email protected]\else% 2206 \xdef\@IEEEeqnarrayTHEstrutheight{\@IEEEeqnarrayTHEstrutheight}% 2207 \xdef\@IEEEeqnarrayTHEstrutdepth{\@IEEEeqnarrayTHEstrutdepth}% 2208 \global\@IEEEeqnarrayusemasterstrutfalse% 2209 \fi} 2210 2211 2212 2213 % usage: \IEEEeqnarraystrutsize{height}{depth}[font size commands] 2214 % If called outside the lines of an IEEEeqnarray, sets the height 2215 % and depth of both the master and local struts. If called inside 2216 % an IEEEeqnarray line, sets the height and depth of the local strut 2217 % only and sets the flag to indicate the use of the local strut 2218 % values. If the height or depth is left blank, 0.7\normalbaselineskip 2219 % and 0.3\normalbaselineskip will be used, respectively. 2220 % The optional argument can be used to evaluate the lengths under 2221 % a different font size and styles. If none is specified, the current 2222 % font is used. 2223 % uses scratch registers \skip0, \skip2, \skip3, \dimen0, \dimen2 2224 \def\IEEEeqnarraystrutsize#1#2{\relax\@ifnextchar[{\@IEEEeqnarraystrutsize{#1}{#2}}{\@IEEEeqnarraystrutsize{#1}{#2}[\relax]}} 2225 \def\@IEEEeqnarraystrutsize#1#2[#3]{\def\@IEEEeqnarraystrutsizeARG{#1}% 2226 \ifx\@IEEEeqnarraystrutsizeARG\@empty% 2227 {\setbox0=\hbox{#3\relax\global\skip3=0.7\normalbaselineskip}}% 2228 \skip0=\skip3\relax% 2229 \else% arg one present 2230 {\setbox0=\hbox{#3\relax\global\skip3=#1\relax}}% 2231 \skip0=\skip3\relax% 2232 \fi% if null arg 2233 \def\@IEEEeqnarraystrutsizeARG{#2}% 2234 \ifx\@IEEEeqnarraystrutsizeARG\@empty% 2235 {\setbox0=\hbox{#3\relax\global\skip3=0.3\normalbaselineskip}}% 2236 \skip2=\skip3\relax% 2237 \else% arg two present 2238 {\setbox0=\hbox{#3\relax\global\skip3=#2\relax}}% 2239 \skip2=\skip3\relax% 2240 \fi% if null arg 2241 % remove stretchability, just to be safe 2242 \dimen0\skip0\relax% 2243 \dimen2\skip2\relax% 2244 % dimen0 = height, dimen2 = depth 2245 \[email protected]% inner does not touch master strut size 2246 \edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% 2247 \edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% 2248 \@IEEEeqnarrayusemasterstrutfalse% do not use master 2249 \else% outer, have to set master strut too 2250 \edef\@IEEEeqnarrayTHEmasterstrutheight{\the\dimen0}% 2251 \edef\@IEEEeqnarrayTHEmasterstrutdepth{\the\dimen2}% 2252 \edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% 2253 \edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% 2254 \@IEEEeqnarrayusemasterstruttrue% use master strut 2255 \fi} 2256 2257 2258 % usage: \IEEEeqnarraystrutsizeadd{added height}{added depth}[font size commands] 2259 % If called outside the lines of an IEEEeqnarray, adds the given height 2260 % and depth to both the master and local struts. 2261 % If called inside an IEEEeqnarray line, adds the given height and depth 2262 % to the local strut only and sets the flag to indicate the use 2263 % of the local strut values. 2264 % In both cases, if a height or depth is left blank, 0pt is used instead. 2265 % The optional argument can be used to evaluate the lengths under 2266 % a different font size and styles. If none is specified, the current 2267 % font is used. 2268 % uses scratch registers \skip0, \skip2, \skip3, \dimen0, \dimen2 2269 \def\IEEEeqnarraystrutsizeadd#1#2{\relax\@ifnextchar[{\@IEEEeqnarraystrutsizeadd{#1}{#2}}{\@IEEEeqnarraystrutsizeadd{#1}{#2}[\relax]}} 2270 \def\@IEEEeqnarraystrutsizeadd#1#2[#3]{\def\@IEEEeqnarraystrutsizearg{#1}% 2271 \ifx\@IEEEeqnarraystrutsizearg\@empty% 2272 \skip0=0pt\relax% 2273 \else% arg one present 2274 {\setbox0=\hbox{#3\relax\global\skip3=#1}}% 2275 \skip0=\skip3\relax% 2276 \fi% if null arg 2277 \def\@IEEEeqnarraystrutsizearg{#2}% 2278 \ifx\@IEEEeqnarraystrutsizearg\@empty% 2279 \skip2=0pt\relax% 2280 \else% arg two present 2281 {\setbox0=\hbox{#3\relax\global\skip3=#2}}% 2282 \skip2=\skip3\relax% 2283 \fi% if null arg 2284 % remove stretchability, just to be safe 2285 \dimen0\skip0\relax% 2286 \dimen2\skip2\relax% 2287 % dimen0 = height, dimen2 = depth 2288 \[email protected]% inner does not touch master strut size 2289 % get local strut size 2290 \expandafter\skip0=\@IEEEeqnarrayTHEstrutheight\relax% 2291 \expandafter\skip2=\@IEEEeqnarrayTHEstrutdepth\relax% 2292 % add it to the user supplied values 2293 \advance\dimen0 by \skip0\relax% 2294 \advance\dimen2 by \skip2\relax% 2295 % update the local strut size 2296 \edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% 2297 \edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% 2298 \@IEEEeqnarrayusemasterstrutfalse% do not use master 2299 \else% outer, have to set master strut too 2300 % get master strut size 2301 \expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax% 2302 \expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax% 2303 % add it to the user supplied values 2304 \advance\dimen0 by \skip0\relax% 2305 \advance\dimen2 by \skip2\relax% 2306 % update the local and master strut sizes 2307 \edef\@IEEEeqnarrayTHEmasterstrutheight{\the\dimen0}% 2308 \edef\@IEEEeqnarrayTHEmasterstrutdepth{\the\dimen2}% 2309 \edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% 2310 \edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% 2311 \@IEEEeqnarrayusemasterstruttrue% use master strut 2312 \fi} 2313 2314 2315 % allow user a way to see the struts 2316 \newif\ifIEEEvisiblestruts 2317 \IEEEvisiblestrutsfalse 2318 2319 % inserts an invisible strut using the master or local strut values 2320 % uses scratch registers \skip0, \skip2, \dimen0, \dimen2 2321 \def\@IEEEeqnarrayinsertstrut{\relax% 2322 \[email protected] 2323 % get master strut size 2324 \expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax% 2325 \expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax% 2326 \else% 2327 % get local strut size 2328 \expandafter\skip0=\@IEEEeqnarrayTHEstrutheight\relax% 2329 \expandafter\skip2=\@IEEEeqnarrayTHEstrutdepth\relax% 2330 \fi% 2331 % remove stretchability, probably not needed 2332 \dimen0\skip0\relax% 2333 \dimen2\skip2\relax% 2334 % dimen0 = height, dimen2 = depth 2335 % allow user to see struts if desired 2336 \ifIEEEvisiblestruts% 2337 \vrule width0.2pt height\dimen0 depth\dimen2\relax% 2338 \else% 2339 \vrule width0pt height\dimen0 depth\dimen2\relax\fi} 2340 2341 2342 % creates an invisible strut, useable even outside \IEEEeqnarray 2343 % if \IEEEvisiblestrutstrue, the strut will be visible and 0.2pt wide. 2344 % usage: \IEEEstrut[height][depth][font size commands] 2345 % default is \IEEEstrut[0.7\normalbaselineskip][0.3\normalbaselineskip][\relax] 2346 % blank arguments inherit the default values 2347 % uses \dimen0, \dimen2, \skip0, \skip2 2348 \def\IEEEstrut{\relax\@ifnextchar[{\@IEEEstrut}{\@IEEEstrut[0.7\normalbaselineskip]}} 2349 \def\@IEEEstrut[#1]{\relax\@ifnextchar[{\@@IEEEstrut[#1]}{\@@IEEEstrut[#1][0.3\normalbaselineskip]}} 2350 \def\@@IEEEstrut[#1][#2]{\relax\@ifnextchar[{\@@@IEEEstrut[#1][#2]}{\@@@IEEEstrut[#1][#2][\relax]}} 2351 \def\@@@IEEEstrut[#1][#2][#3]{\mbox{#3\relax% 2352 \def\@IEEEstrutARG{#1}% 2353 \ifx\@IEEEstrutARG\@empty% 2354 \skip0=0.7\normalbaselineskip\relax% 2355 \else% 2356 \skip0=#1\relax% 2357 \fi% 2358 \def\@IEEEstrutARG{#2}% 2359 \ifx\@IEEEstrutARG\@empty% 2360 \skip2=0.3\normalbaselineskip\relax% 2361 \else% 2362 \skip2=#2\relax% 2363 \fi% 2364 % remove stretchability, probably not needed 2365 \dimen0\skip0\relax% 2366 \dimen2\skip2\relax% 2367 \ifIEEEvisiblestruts% 2368 \vrule width0.2pt height\dimen0 depth\dimen2\relax% 2369 \else% 2370 \vrule width0.0pt height\dimen0 depth\dimen2\relax\fi}} 2371 2372 2373 % enables strut mode by setting a default strut size and then zeroing the 2374 % \baselineskip, \lineskip, \lineskiplimit and \jot 2375 \def\IEEEeqnarraystrutmode{\IEEEeqnarraystrutsize{0.7\normalbaselineskip}{0.3\normalbaselineskip}[\relax]% 2376 \baselineskip=0pt\lineskip=0pt\lineskiplimit=0pt\jot=0pt} 2377 2378 2379 2380 \def\IEEEeqnarray{\@IEEEeqnarraystarformfalse\@IEEEeqnarray} 2381 \def\endIEEEeqnarray{\[email protected]} 2382 2383 \@namedef{IEEEeqnarray*}{\@IEEEeqnarraystarformtrue\@IEEEeqnarray} 2384 \@namedef{endIEEEeqnarray*}{\[email protected]} 2385 2386 2387 % \IEEEeqnarray is an enhanced \eqnarray. 2388 % The star form defaults to not putting equation numbers at the end of each row. 2389 % usage: \IEEEeqnarray[decl]{cols} 2390 \def\@IEEEeqnarray{\relax\@ifnextchar[{\@@IEEEeqnarray}{\@@IEEEeqnarray[\relax]}} 2391 \def\@@IEEEeqnarray[#1]#2{% 2392 % default to showing the equation number or not based on whether or not 2393 % the star form was involked 2394 \[email protected]\global\@eqnswfalse 2395 \else% not the star form 2396 \global\@eqnswtrue 2397 \fi% if star form 2398 \@IEEEissubequationfalse% default to no subequations 2399 \@IEEElastlinewassubequationfalse% assume last line is not a sub equation 2400 \@IEEEeqnarrayISinnerfalse% not yet within the lines of the halign 2401 \@IEEEeqnarraystrutsize{0pt}{0pt}[\relax]% turn off struts by default 2402 \@IEEEeqnarrayusemasterstruttrue% use master strut till user asks otherwise 2403 \IEEEvisiblestrutsfalse% diagnostic mode defaults to off 2404 % no extra space unless the user specifically requests it 2405 \lineskip=0pt\relax 2406 \lineskiplimit=0pt\relax 2407 \baselineskip=\normalbaselineskip\relax% 2408 \jot=\IEEEnormaljot\relax% 2409 \mathsurround\[email protected]\relax% no extra spacing around math 2410 \@advanceIEEEeqncolcnttrue% advance the col counter for each col the user uses, 2411 % used in \IEEEeqnarraymulticol and in the preamble build 2412 \stepcounter{equation}% advance equation counter before first line 2413 \setcounter{IEEEsubequation}{0}% no subequation yet 2414 \def\@currentlabel{\[email protected]\theequation}% redefine the ref label 2415 \IEEEeqnarraydecl\relax% allow a way for the user to make global overrides 2416 #1\relax% allow user to override defaults 2417 \let\\\@IEEEeqnarraycr% replace newline with one that can put in eqn. numbers 2418 \global\@IEEEeqncolcnt\[email protected]% col. count = 0 for first line 2419 \@IEEEbuildpreamble #2\end\relax% build the preamble and put it into \@IEEEtrantmptoksA 2420 % put in the column for the equation number 2421 \ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi% col separator for those after the first 2422 \toks0={##}% 2423 % advance the \@IEEEeqncolcnt for the isolation col, this helps with error checking 2424 \@IEEEappendtoksA{\global\advance\@IEEEeqncolcnt by 1\relax}% 2425 % add the isolation column 2426 \@IEEEappendtoksA{\tabskip\[email protected]\bgroup\the\toks0\egroup}% 2427 % advance the \@IEEEeqncolcnt for the equation number col, this helps with error checking 2428 \@IEEEappendtoksA{&\global\advance\@IEEEeqncolcnt by 1\relax}% 2429 % add the equation number col to the preamble 2430 \@IEEEappendtoksA{\tabskip\[email protected]\[email protected]@\[email protected]\bgroup\hss\the\toks0\egroup}% 2431 % note \@IEEEeqnnumcols does not count the equation col or isolation col 2432 % set the starting tabskip glue as determined by the preamble build 2433 \tabskip=\@IEEEBPstartglue\relax 2434 % begin the display alignment 2435 \@IEEEeqnarrayISinnertrue% commands are now within the lines 2436 $$\everycr{}\halign to\displaywidth\bgroup 2437 % "exspand" the preamble 2438 \span\the\@IEEEtrantmptoksA\cr} 2439 2440 % enter isolation/strut column (or the next column if the user did not use 2441 % every column), record the strut status, complete the columns, do the strut if needed, 2442 % restore counters to correct values and exit 2443 \def\[email protected]{\@IEEEeqnarrayglobalizestrutstatus&\@@IEEEeqnarraycr\egroup% 2444 \[email protected]\global\advance\[email protected]\[email protected]\fi% 2445 \global\advance\[email protected]\[email protected]% 2446 $$\@ignoretrue} 2447 2448 % need a way to remember if last line is a subequation 2449 \newif\[email protected]% 2450 \@IEEElastlinewassubequationfalse 2451 2452 % IEEEeqnarray uses a modifed \\ instead of the plain \cr to 2453 % end rows. This allows for things like \\*[vskip amount] 2454 % This "cr" macros are modified versions those for LaTeX2e‘s eqnarray 2455 % the {\ifnum0=`} braces must be kept away from the last column to avoid 2456 % altering spacing of its math, so we use & to advance to the next column 2457 % as there is an isolation/strut column after the user‘s columns 2458 \def\@IEEEeqnarraycr{\@IEEEeqnarrayglobalizestrutstatus&% save strut status and advance to next column 2459 {\ifnum0=`}\fi 2460 \@ifstar{% 2461 \global\@eqpen\@M\@IEEEeqnarrayYCR 2462 }{% 2463 \global\@eqpen\interdisplaylinepenalty \@IEEEeqnarrayYCR 2464 }% 2465 } 2466 2467 \def\@IEEEeqnarrayYCR{\@testopt\@IEEEeqnarrayXCR\[email protected]} 2468 2469 \def\@IEEEeqnarrayXCR[#1]{% 2470 \ifnum0=`{\fi}% 2471 \@@IEEEeqnarraycr 2472 \noalign{\penalty\@eqpen\vskip\jot\vskip #1\relax}}% 2473 2474 \def\@@IEEEeqnarraycr{\@IEEEtrantmptoksA={}% clear token register 2475 \advance\@IEEEeqncolcnt by -1\relax% adjust col count because of the isolation column 2476 \ifnum\@IEEEeqncolcnt>\@IEEEeqnnumcols\relax 2477 \@IEEEclspkgerror{Too many columns within the IEEEeqnarray\MessageBreak 2478 environment}% 2479 {Use fewer \string &‘s or put more columns in the IEEEeqnarry column\MessageBreak 2480 specifications.}\relax% 2481 \else 2482 \loop% add cols if the user did not use them all 2483 \ifnum\@IEEEeqncolcnt<\@IEEEeqnnumcols\relax 2484 \@IEEEappendtoksA{&}% 2485 \advance\@IEEEeqncolcnt by 1\relax% update the col count 2486 \repeat 2487 % this number of &‘s will take us the the isolation column 2488 \fi 2489 % execute the &‘s 2490 \the\@IEEEtrantmptoksA% 2491 % handle the strut/isolation column 2492 \@IEEEeqnarrayinsertstrut% do the strut if needed 2493 \@IEEEeqnarraystrutreset% reset the strut system for next line or IEEEeqnarray 2494 &% and enter the equation number column 2495 % is this line needs an equation number, display it and advance the 2496 % (sub)equation counters, record what type this line was 2497 \[email protected]% 2498 \[email protected]\theIEEEsubequationdis\addtocounter{equation}{1}\stepcounter{IEEEsubequation}% 2499 \global\@IEEElastlinewassubequationtrue% 2500 \else% display a standard equation number, initialize the IEEEsubequation counter 2501 \theequationdis\stepcounter{equation}\setcounter{IEEEsubequation}{0}% 2502 \global\@IEEElastlinewassubequationfalse\fi% 2503 \fi% 2504 % reset the eqnsw flag to indicate default preference of the display of equation numbers 2505 \[email protected]\global\@eqnswfalse\else\global\@eqnswtrue\fi 2506 \global\@IEEEissubequationfalse% reset the subequation flag 2507 % reset the number of columns the user actually used 2508 \global\@IEEEeqncolcnt\[email protected]\relax 2509 % the real end of the line 2510 \cr} 2511 2512 2513 2514 2515 2516 % \IEEEeqnarraybox is like \IEEEeqnarray except the box form puts everything 2517 % inside a vtop, vbox, or vcenter box depending on the letter in the second 2518 % optional argument (t,b,c). Vbox is the default. Unlike \IEEEeqnarray, 2519 % equation numbers are not displayed and \IEEEeqnarraybox can be nested. 2520 % \IEEEeqnarrayboxm is for math mode (like \array) and does not put the vbox 2521 % within an hbox. 2522 % \IEEEeqnarrayboxt is for text mode (like \tabular) and puts the vbox within 2523 % a \hbox{$ $} construct. 2524 % \IEEEeqnarraybox will auto detect whether to use \IEEEeqnarrayboxm or 2525 % \IEEEeqnarrayboxt depending on the math mode. 2526 % The third optional argument specifies the width this box is to be set to - 2527 % natural width is the default. 2528 % The * forms do not add \jot line spacing 2529 % usage: \IEEEeqnarraybox[decl][pos][width]{cols} 2530 \def\IEEEeqnarrayboxm{\@IEEEeqnarraystarformfalse\@IEEEeqnarrayboxHBOXSWfalse\@IEEEeqnarraybox} 2531 \def\endIEEEeqnarrayboxm{\[email protected]} 2532 \@namedef{IEEEeqnarrayboxm*}{\@IEEEeqnarraystarformtrue\@IEEEeqnarrayboxHBOXSWfalse\@IEEEeqnarraybox} 2533 \@namedef{endIEEEeqnarrayboxm*}{\[email protected]} 2534 2535 \def\IEEEeqnarrayboxt{\@IEEEeqnarraystarformfalse\@IEEEeqnarrayboxHBOXSWtrue\@IEEEeqnarraybox} 2536 \def\endIEEEeqnarrayboxt{\[email protected]} 2537 \@namedef{IEEEeqnarrayboxt*}{\@IEEEeqnarraystarformtrue\@IEEEeqnarrayboxHBOXSWtrue\@IEEEeqnarraybox} 2538 \@namedef{endIEEEeqnarrayboxt*}{\[email protected]} 2539 2540 \def\IEEEeqnarraybox{\@IEEEeqnarraystarformfalse\ifmmode\@IEEEeqnarrayboxHBOXSWfalse\else\@IEEEeqnarrayboxHBOXSWtrue\fi% 2541 \@IEEEeqnarraybox} 2542 \def\endIEEEeqnarraybox{\[email protected]} 2543 2544 \@namedef{IEEEeqnarraybox*}{\@IEEEeqnarraystarformtrue\ifmmode\@IEEEeqnarrayboxHBOXSWfalse\else\@IEEEeqnarrayboxHBOXSWtrue\fi% 2545 \@IEEEeqnarraybox} 2546 \@namedef{endIEEEeqnarraybox*}{\[email protected]} 2547 2548 % flag to indicate if the \IEEEeqnarraybox needs to put things into an hbox{$ $} 2549 % for \vcenter in non-math mode 2550 \newif\[email protected]% 2551 \@IEEEeqnarrayboxHBOXSWfalse 2552 2553 \def\@IEEEeqnarraybox{\relax\@ifnextchar[{\@@IEEEeqnarraybox}{\@@IEEEeqnarraybox[\relax]}} 2554 \def\@@IEEEeqnarraybox[#1]{\relax\@ifnextchar[{\@@@IEEEeqnarraybox[#1]}{\@@@IEEEeqnarraybox[#1][b]}} 2555 \def\@@@IEEEeqnarraybox[#1][#2]{\relax\@ifnextchar[{\@@@@IEEEeqnarraybox[#1][#2]}{\@@@@IEEEeqnarraybox[#1][#2][\relax]}} 2556 2557 % #1 = decl; #2 = t,b,c; #3 = width, #4 = col specs 2558 \def\@@@@IEEEeqnarraybox[#1][#2][#3]#4{\@IEEEeqnarrayISinnerfalse % not yet within the lines of the halign 2559 \@IEEEeqnarraymasterstrutsave% save current master strut values 2560 \@IEEEeqnarraystrutsize{0pt}{0pt}[\relax]% turn off struts by default 2561 \@IEEEeqnarrayusemasterstruttrue% use master strut till user asks otherwise 2562 \IEEEvisiblestrutsfalse% diagnostic mode defaults to off 2563 % no extra space unless the user specifically requests it 2564 \lineskip=0pt\relax% 2565 \lineskiplimit=0pt\relax% 2566 \baselineskip=\normalbaselineskip\relax% 2567 \jot=\IEEEnormaljot\relax% 2568 \mathsurround\[email protected]\relax% no extra spacing around math 2569 % the default end glues are zero for an \IEEEeqnarraybox 2570 \edef\@IEEEeqnarraycolSEPdefaultstart{\@IEEEeqnarraycolSEPzero}% default start glue 2571 \edef\@IEEEeqnarraycolSEPdefaultend{\@IEEEeqnarraycolSEPzero}% default end glue 2572 \edef\@IEEEeqnarraycolSEPdefaultmid{\@IEEEeqnarraycolSEPzero}% default inter-column glue 2573 \@advanceIEEEeqncolcntfalse% do not advance the col counter for each col the user uses, 2574 % used in \IEEEeqnarraymulticol and in the preamble build 2575 \IEEEeqnarrayboxdecl\relax% allow a way for the user to make global overrides 2576 #1\relax% allow user to override defaults 2577 \let\\\@IEEEeqnarrayboxcr% replace newline with one that allows optional spacing 2578 \@IEEEbuildpreamble #4\end\relax% build the preamble and put it into \@IEEEtrantmptoksA 2579 % add an isolation column to the preamble to stop \\‘s {} from getting into the last col 2580 \ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi% col separator for those after the first 2581 \toks0={##}% 2582 % add the isolation column to the preamble 2583 \@IEEEappendtoksA{\tabskip\[email protected]\bgroup\the\toks0\egroup}% 2584 % set the starting tabskip glue as determined by the preamble build 2585 \tabskip=\@IEEEBPstartglue\relax 2586 % begin the alignment 2587 \everycr{}% 2588 % use only the very first token to determine the positioning 2589 % this stops some problems when the user uses more than one letter, 2590 % but is probably not worth the effort 2591 % \noindent is used as a delimiter 2592 \def\@IEEEgrabfirstoken##1##2\noindent{\let\@IEEEgrabbedfirstoken=##1}% 2593 \@IEEEgrabfirstoken#2\relax\relax\noindent 2594 % \@IEEEgrabbedfirstoken has the first token, the rest are discarded 2595 % if we need to put things into and hbox and go into math mode, do so now 2596 \[email protected] \leavevmode \hbox \bgroup $\fi% 2597 % use the appropriate vbox type 2598 \if\@IEEEgrabbedfirstoken t\relax\vtop\else\if\@IEEEgrabbedfirstoken c\relax% 2599 \vcenter\else\vbox\fi\fi\bgroup% 2600 \@IEEEeqnarrayISinnertrue% commands are now within the lines 2601 \ifx#3\relax\halign\else\halign to #3\relax\fi% 2602 \bgroup 2603 % "exspand" the preamble 2604 \span\the\@IEEEtrantmptoksA\cr} 2605 2606 % carry strut status and enter the isolation/strut column, 2607 % exit from math mode if needed, and exit 2608 \def\[email protected]{\@IEEEeqnarrayglobalizestrutstatus% carry strut status 2609 &% enter isolation/strut column 2610 \@IEEEeqnarrayinsertstrut% do strut if needed 2611 \@IEEEeqnarraymasterstrutrestore% restore the previous master strut values 2612 % reset the strut system for next IEEEeqnarray 2613 % (sets local strut values back to previous master strut values) 2614 \@IEEEeqnarraystrutreset% 2615 % ensure last line, exit from halign, close vbox 2616 \crcr\egroup\egroup% 2617 % exit from math mode and close hbox if needed 2618 \[email protected] $\egroup\fi} 2619 2620 2621 2622 % IEEEeqnarraybox uses a modifed \\ instead of the plain \cr to 2623 % end rows. This allows for things like \\[vskip amount] 2624 % This "cr" macros are modified versions those for LaTeX2e‘s eqnarray 2625 % For IEEEeqnarraybox, \\* is the same as \2626 % the {\ifnum0=`} braces must be kept away from the last column to avoid 2627 % altering spacing of its math, so we use & to advance to the isolation/strut column 2628 % carry strut status into isolation/strut column 2629 \def\@IEEEeqnarrayboxcr{\@IEEEeqnarrayglobalizestrutstatus% carry strut status 2630 &% enter isolation/strut column 2631 \@IEEEeqnarrayinsertstrut% do strut if needed 2632 % reset the strut system for next line or IEEEeqnarray 2633 \@IEEEeqnarraystrutreset% 2634 {\ifnum0=`}\fi% 2635 \@ifstar{\@IEEEeqnarrayboxYCR}{\@IEEEeqnarrayboxYCR}} 2636 2637 % test and setup the optional argument to \\[] 2638 \def\@IEEEeqnarrayboxYCR{\@testopt\@IEEEeqnarrayboxXCR\[email protected]} 2639 2640 % IEEEeqnarraybox does not automatically increase line spacing by \jot 2641 \def\@IEEEeqnarrayboxXCR[#1]{\ifnum0=`{\fi}% 2642 \cr\noalign{\[email protected]\else\vskip\jot\fi\vskip#1\relax}} 2643 2644 2645 2646 % starts the halign preamble build 2647 \def\@IEEEbuildpreamble{\@IEEEtrantmptoksA={}% clear token register 2648 \let\@IEEEBPcurtype=u%current column type is not yet known 2649 \let\@IEEEBPprevtype=s%the previous column type was the start 2650 \let\@IEEEBPnexttype=u%next column type is not yet known 2651 % ensure these are valid 2652 \def\@IEEEBPcurglue={0pt plus 0pt minus 0pt}% 2653 \def\@IEEEBPcurcolname{@IEEEdefault}% name of current column definition 2654 % currently acquired numerically referenced glue 2655 % use a name that is easier to remember 2656 \let\@IEEEBPcurnum=\@IEEEtrantmpcountA% 2657 \@IEEEBPcurnum=0% 2658 % tracks number of columns in the preamble 2659 \@IEEEeqnnumcols=0% 2660 % record the default end glues 2661 \edef\@IEEEBPstartglue{\@IEEEeqnarraycolSEPdefaultstart}% 2662 \edef\@IEEEBPendglue{\@IEEEeqnarraycolSEPdefaultend}% 2663 % now parse the user‘s column specifications 2664 \@@IEEEbuildpreamble} 2665 2666 2667 % parses and builds the halign preamble 2668 \def\@@IEEEbuildpreamble#1#2{\let\@@nextIEEEbuildpreamble=\@@IEEEbuildpreamble% 2669 % use only the very first token to check the end 2670 % \noindent is used as a delimiter as \end can be present here 2671 \def\@IEEEgrabfirstoken##1##2\noindent{\let\@IEEEgrabbedfirstoken=##1}% 2672 \@IEEEgrabfirstoken#1\relax\relax\noindent 2673 \ifx\@IEEEgrabbedfirstoken\end\let\@@nextIEEEbuildpreamble=\@@IEEEfinishpreamble\else% 2674 % identify current and next token type 2675 \@IEEEgetcoltype{#1}{\@IEEEBPcurtype}{1}% current, error on invalid 2676 \@IEEEgetcoltype{#2}{\@IEEEBPnexttype}{0}% next, no error on invalid next 2677 % if curtype is a glue, get the glue def 2678 \if\@IEEEBPcurtype g\@IEEEgetcurglue{#1}{\@IEEEBPcurglue}\fi% 2679 % if curtype is a column, get the column def and set the current column name 2680 \if\@IEEEBPcurtype c\@IEEEgetcurcol{#1}\fi% 2681 % if curtype is a numeral, acquire the user defined glue 2682 \if\@IEEEBPcurtype n\@IEEEprocessNcol{#1}\fi% 2683 % process the acquired glue 2684 \if\@IEEEBPcurtype g\@IEEEprocessGcol\fi% 2685 % process the acquired col 2686 \if\@IEEEBPcurtype c\@IEEEprocessCcol\fi% 2687 % ready prevtype for next col spec. 2688 \let\@IEEEBPprevtype=\@IEEEBPcurtype% 2689 % be sure and put back the future token(s) as a group 2690 \fi\@@nextIEEEbuildpreamble{#2}} 2691 2692 2693 % executed just after preamble build is completed 2694 % warn about zero cols, and if prevtype type = u, put in end tabskip glue 2695 \def\@@IEEEfinishpreamble#1{\ifnum\@IEEEeqnnumcols<1\relax 2696 \@IEEEclspkgerror{No column specifiers declared for IEEEeqnarray}% 2697 {At least one column type must be declared for each IEEEeqnarray.}% 2698 \fi%num cols less than 1 2699 %if last type undefined, set default end tabskip glue 2700 \if\@IEEEBPprevtype u\@IEEEappendtoksA{\tabskip=\@IEEEBPendglue}\fi} 2701 2702 2703 % Identify and return the column specifier‘s type code 2704 \def\@IEEEgetcoltype#1#2#3{% 2705 % use only the very first token to determine the type 2706 % \noindent is used as a delimiter as \end can be present here 2707 \def\@IEEEgrabfirstoken##1##2\noindent{\let\@IEEEgrabbedfirstoken=##1}% 2708 \@IEEEgrabfirstoken#1\relax\relax\noindent 2709 % \@IEEEgrabfirstoken has the first token, the rest are discarded 2710 % n = number 2711 % g = glue (any other char in catagory 12) 2712 % c = letter 2713 % e = \end 2714 % u = undefined 2715 % third argument: 0 = no error message, 1 = error on invalid char 2716 \let#2=u\relax% assume invalid until know otherwise 2717 \ifx\@IEEEgrabbedfirstoken\end\let#2=e\else 2718 \ifcat\@IEEEgrabbedfirstoken\relax\else% screen out control sequences 2719 \if0\@IEEEgrabbedfirstoken\let#2=n\else 2720 \if1\@IEEEgrabbedfirstoken\let#2=n\else 2721 \if2\@IEEEgrabbedfirstoken\let#2=n\else 2722 \if3\@IEEEgrabbedfirstoken\let#2=n\else 2723 \if4\@IEEEgrabbedfirstoken\let#2=n\else 2724 \if5\@IEEEgrabbedfirstoken\let#2=n\else 2725 \if6\@IEEEgrabbedfirstoken\let#2=n\else 2726 \if7\@IEEEgrabbedfirstoken\let#2=n\else 2727 \if8\@IEEEgrabbedfirstoken\let#2=n\else 2728 \if9\@IEEEgrabbedfirstoken\let#2=n\else 2729 \ifcat,\@IEEEgrabbedfirstoken\let#2=g\relax 2730 \else\ifcat a\@IEEEgrabbedfirstoken\let#2=c\relax\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi 2731 \if#2u\relax 2732 \if0\noexpand#3\relax\else\@IEEEclspkgerror{Invalid character in column specifications}% 2733 {Only letters, numerals and certain other symbols are allowed \MessageBreak 2734 as IEEEeqnarray column specifiers.}\fi\fi} 2735 2736 2737 % identify the current letter referenced column 2738 % if invalid, use a default column 2739 \def\@IEEEgetcurcol#1{\expandafter\ifx\csname @IEEEeqnarraycolDEF#1\endcsname\@IEEEeqnarraycolisdefined% 2740 \def\@IEEEBPcurcolname{#1}\else% invalid column name 2741 \@IEEEclspkgerror{Invalid column type "#1" in column specifications.\MessageBreak 2742 Using a default centering column instead}% 2743 {You must define IEEEeqnarray column types before use.}% 2744 \def\@IEEEBPcurcolname{@IEEEdefault}\fi} 2745 2746 2747 % identify and return the predefined (punctuation) glue value 2748 \def\@IEEEgetcurglue#1#2{% 2749 % ! = \! (neg small) -0.16667em (-3/18 em) 2750 % , = \, (small) 0.16667em ( 3/18 em) 2751 % : = \: (med) 0.22222em ( 4/18 em) 2752 % ; = \; (large) 0.27778em ( 5/18 em) 2753 % ‘ = \quad 1em 2754 % " = \qquad 2em 2755 % . = 0.5\arraycolsep 2756 % / = \arraycolsep 2757 % ? = 2\arraycolsep 2758 % * = 1fil 2759 % + = \@IEEEeqnarraycolSEPcenter 2760 % - = \@IEEEeqnarraycolSEPzero 2761 % Note that all em values are referenced to the math font (textfont2) fontdimen6 2762 % value for 1em. 2763 % 2764 % use only the very first token to determine the type 2765 % this prevents errant tokens from getting in the main text 2766 % \noindent is used as a delimiter here 2767 \def\@IEEEgrabfirstoken##1##2\noindent{\let\@IEEEgrabbedfirstoken=##1}% 2768 \@IEEEgrabfirstoken#1\relax\relax\noindent 2769 % get the math font 1em value 2770 % LaTeX2e‘s NFSS2 does not preload the fonts, but \IEEEeqnarray needs 2771 % to gain access to the math (\textfont2) font‘s spacing parameters. 2772 % So we create a bogus box here that uses the math font to ensure 2773 % that \textfont2 is loaded and ready. If this is not done, 2774 % the \textfont2 stuff here may not work. 2775 % Thanks to Bernd Raichle for his 1997 post on this topic. 2776 {\setbox0=\hbox{$\displaystyle\relax$}}% 2777 % fontdimen6 has the width of 1em (a quad). 2778 \@IEEEtrantmpdimenA=\fontdimen6\textfont2\relax% 2779 % identify the glue value based on the first token 2780 % we discard anything after the first 2781 \if!\@IEEEgrabbedfirstoken\@IEEEtrantmpdimenA=-0.16667\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else 2782 \if,\@IEEEgrabbedfirstoken\@IEEEtrantmpdimenA=0.16667\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else 2783 \if:\@IEEEgrabbedfirstoken\@IEEEtrantmpdimenA=0.22222\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else 2784 \if;\@IEEEgrabbedfirstoken\@IEEEtrantmpdimenA=0.27778\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else 2785 \if‘\@IEEEgrabbedfirstoken\@IEEEtrantmpdimenA=1\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else 2786 \if"\@IEEEgrabbedfirstoken\@IEEEtrantmpdimenA=2\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else 2787 \if.\@IEEEgrabbedfirstoken\@IEEEtrantmpdimenA=0.5\arraycolsep\edef#2{\the\@IEEEtrantmpdimenA}\else 2788 \if/\@IEEEgrabbedfirstoken\edef#2{\the\arraycolsep}\else 2789 \if?\@IEEEgrabbedfirstoken\@IEEEtrantmpdimenA=2\arraycolsep\edef#2{\the\@IEEEtrantmpdimenA}\else 2790 \if *\@IEEEgrabbedfirstoken\edef#2{0pt plus 1fil minus 0pt}\else 2791 \if+\@IEEEgrabbedfirstoken\edef#2{\@IEEEeqnarraycolSEPcenter}\else 2792 \if-\@IEEEgrabbedfirstoken\edef#2{\@IEEEeqnarraycolSEPzero}\else 2793 \edef#2{\@IEEEeqnarraycolSEPzero}% 2794 \@IEEEclspkgerror{Invalid predefined inter-column glue type "#1" in\MessageBreak 2795 column specifications. Using a default value of\MessageBreak 2796 0pt instead}% 2797 {Only !,:;‘"./?*+ and - are valid predefined glue types in the\MessageBreak 2798 IEEEeqnarray column specifications.}\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} 2799 2800 2801 2802 % process a numerical digit from the column specification 2803 % and look up the corresponding user defined glue value 2804 % can transform current type from n to g or a as the user defined glue is acquired 2805 \def\@IEEEprocessNcol#1{\if\@IEEEBPprevtype g% 2806 \@IEEEclspkgerror{Back-to-back inter-column glue specifiers in column\MessageBreak 2807 specifications. Ignoring consecutive glue specifiers\MessageBreak 2808 after the first}% 2809 {You cannot have two or more glue types next to each other\MessageBreak 2810 in the IEEEeqnarray column specifications.}% 2811 \let\@IEEEBPcurtype=a% abort this glue, future digits will be discarded 2812 \@IEEEBPcurnum=0\relax% 2813 \else% if we previously aborted a glue 2814 \if\@IEEEBPprevtype a\@IEEEBPcurnum=0\let\@IEEEBPcurtype=a%maintain digit abortion 2815 \else%acquire this number 2816 % save the previous type before the numerical digits started 2817 \if\@IEEEBPprevtype n\else\let\@IEEEBPprevsavedtype=\@IEEEBPprevtype\fi% 2818 \multiply\@IEEEBPcurnum by 10\relax% 2819 \advance\@IEEEBPcurnum by #1\relax% add in number, \relax is needed to stop TeX‘s number scan 2820 \if\@IEEEBPnexttype n\else%close acquisition 2821 \expandafter\ifx\csname @IEEEeqnarraycolSEPDEF\expandafter\romannumeral\number\@IEEEBPcurnum\endcsname\@IEEEeqnarraycolisdefined% 2822 \edef\@IEEEBPcurglue{\csname @IEEEeqnarraycolSEP\expandafter\romannumeral\number\@IEEEBPcurnum\endcsname}% 2823 \else%user glue not defined 2824 \@IEEEclspkgerror{Invalid user defined inter-column glue type "\number\@IEEEBPcurnum" in\MessageBreak 2825 column specifications. Using a default value of\MessageBreak 2826 0pt instead}% 2827 {You must define all IEEEeqnarray numerical inter-column glue types via\MessageBreak 2828 \string\IEEEeqnarraydefcolsep \space before they are used in column specifications.}% 2829 \edef\@IEEEBPcurglue{\@IEEEeqnarraycolSEPzero}% 2830 \fi% glue defined or not 2831 \let\@IEEEBPcurtype=g% change the type to reflect the acquired glue 2832 \let\@IEEEBPprevtype=\@IEEEBPprevsavedtype% restore the prev type before this number glue 2833 \@IEEEBPcurnum=0\relax%ready for next acquisition 2834 \fi%close acquisition, get glue 2835 \fi%discard or acquire number 2836 \fi%prevtype glue or not 2837 } 2838 2839 2840 % process an acquired glue 2841 % add any acquired column/glue pair to the preamble 2842 \def\@IEEEprocessGcol{\if\@IEEEBPprevtype a\let\@IEEEBPcurtype=a%maintain previous glue abortions 2843 \else 2844 % if this is the start glue, save it, but do nothing else 2845 % as this is not used in the preamble, but before 2846 \if\@IEEEBPprevtype s\edef\@IEEEBPstartglue{\@IEEEBPcurglue}% 2847 \else%not the start glue 2848 \if\@IEEEBPprevtype g%ignore if back to back glues 2849 \@IEEEclspkgerror{Back-to-back inter-column glue specifiers in column\MessageBreak 2850 specifications. Ignoring consecutive glue specifiers\MessageBreak 2851 after the first}% 2852 {You cannot have two or more glue types next to each other\MessageBreak 2853 in the IEEEeqnarray column specifications.}% 2854 \let\@IEEEBPcurtype=a% abort this glue 2855 \else% not a back to back glue 2856 \if\@IEEEBPprevtype c\relax% if the previoustype was a col, add column/glue pair to preamble 2857 \ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi 2858 \toks0={##}% 2859 % make preamble advance col counter if this environment needs this 2860 \[email protected]\@IEEEappendtoksA{\global\advance\@IEEEeqncolcnt by 1\relax}\fi 2861 % insert the column defintion into the preamble, being careful not to expand 2862 % the column definition 2863 \@IEEEappendtoksA{\tabskip=\@IEEEBPcurglue}% 2864 \@IEEEappendNOEXPANDtoksA{\begingroup\csname @IEEEeqnarraycolPRE}% 2865 \@IEEEappendtoksA{\@IEEEBPcurcolname}% 2866 \@IEEEappendNOEXPANDtoksA{\endcsname}% 2867 \@IEEEappendtoksA{\the\toks0}% 2868 \@IEEEappendNOEXPANDtoksA{\relax\relax\relax\relax\relax% 2869 \relax\relax\relax\relax\relax\csname @IEEEeqnarraycolPOST}% 2870 \@IEEEappendtoksA{\@IEEEBPcurcolname}% 2871 \@IEEEappendNOEXPANDtoksA{\endcsname\relax\relax\relax\relax\relax% 2872 \relax\relax\relax\relax\relax\endgroup}% 2873 \advance\@IEEEeqnnumcols by 1\relax%one more column in the preamble 2874 \else% error: non-start glue with no pending column 2875 \@IEEEclspkgerror{Inter-column glue specifier without a prior column\MessageBreak 2876 type in the column specifications. Ignoring this glue\MessageBreak 2877 specifier}% 2878 {Except for the first and last positions, glue can be placed only\MessageBreak 2879 between column types.}% 2880 \let\@IEEEBPcurtype=a% abort this glue 2881 \fi% previous was a column 2882 \fi% back-to-back glues 2883 \fi% is start column glue 2884 \fi% prev type not a 2885 } 2886 2887 2888 % process an acquired letter referenced column and, if necessary, add it to the preamble 2889 \def\@IEEEprocessCcol{\if\@IEEEBPnexttype g\else 2890 \if\@IEEEBPnexttype n\else 2891 % we have a column followed by something other than a glue (or numeral glue) 2892 % so we must add this column to the preamble now 2893 \ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi%col separator for those after the first 2894 \if\@IEEEBPnexttype e\@IEEEappendtoksA{\tabskip=\@IEEEBPendglue\relax}\else%put in end glue 2895 \@IEEEappendtoksA{\tabskip=\@IEEEeqnarraycolSEPdefaultmid\relax}\fi% or default mid glue 2896 \toks0={##}% 2897 % make preamble advance col counter if this environment needs this 2898 \[email protected]\@IEEEappendtoksA{\global\advance\@IEEEeqncolcnt by 1\relax}\fi 2899 % insert the column definition into the preamble, being careful not to expand 2900 % the column definition 2901 \@IEEEappendNOEXPANDtoksA{\begingroup\csname @IEEEeqnarraycolPRE}% 2902 \@IEEEappendtoksA{\@IEEEBPcurcolname}% 2903 \@IEEEappendNOEXPANDtoksA{\endcsname}% 2904 \@IEEEappendtoksA{\the\toks0}% 2905 \@IEEEappendNOEXPANDtoksA{\relax\relax\relax\relax\relax% 2906 \relax\relax\relax\relax\relax\csname @IEEEeqnarraycolPOST}% 2907 \@IEEEappendtoksA{\@IEEEBPcurcolname}% 2908 \@IEEEappendNOEXPANDtoksA{\endcsname\relax\relax\relax\relax\relax% 2909 \relax\relax\relax\relax\relax\endgroup}% 2910 \advance\@IEEEeqnnumcols by 1\relax%one more column in the preamble 2911 \fi%next type not numeral 2912 \fi%next type not glue 2913 } 2914 2915 2916 %% 2917 %% END OF IEEEeqnarry DEFINITIONS 2918 %% 2919 2920 2921 2922 2923 % set up the running headings, this complex because of all the different 2924 % modes IEEEtran supports 2925 \[email protected] 2926 \ifCLASSOPTIONtechnote 2927 \def\[email protected]{% 2928 \def\@oddhead{\hbox{}\scriptsize\leftmark \hfil \thepage} 2929 \def\@evenhead{\scriptsize\thepage \hfil \leftmark\hbox{}} 2930 \ifCLASSOPTIONdraftcls 2931 \ifCLASSOPTIONdraftclsnofoot 2932 \def\@oddfoot{}\def\@evenfoot{}% 2933 \else 2934 \def\@oddfoot{\scriptsize\@date\hfil DRAFT} 2935 \def\@evenfoot{\scriptsize DRAFT\hfil\@date} 2936 \fi 2937 \else 2938 \def\@oddfoot{}\def\@evenfoot{} 2939 \fi} 2940 \else % not a technote 2941 \def\[email protected]{% 2942 \ifCLASSOPTIONconference 2943 \def\@oddhead{} 2944 \def\@evenhead{} 2945 \else 2946 \def\@oddhead{\hbox{}\scriptsize\rightmark \hfil \thepage} 2947 \def\@evenhead{\scriptsize\thepage \hfil \leftmark\hbox{}} 2948 \fi 2949 \ifCLASSOPTIONdraftcls 2950 \def\@oddhead{\hbox{}\scriptsize\rightmark \hfil \thepage} 2951 \def\@evenhead{\scriptsize\thepage \hfil \leftmark\hbox{}} 2952 \ifCLASSOPTIONdraftclsnofoot 2953 \def\@oddfoot{}\def\@evenfoot{}% 2954 \else 2955 \def\@oddfoot{\scriptsize\@date\hfil DRAFT} 2956 \def\@evenfoot{\scriptsize DRAFT\hfil\@date} 2957 \fi 2958 \else 2959 \def\@oddfoot{}\def\@evenfoot{}% 2960 \fi} 2961 \fi 2962 \else % single side 2963 \def\[email protected]{% 2964 \ifCLASSOPTIONconference 2965 \def\@oddhead{} 2966 \def\@evenhead{} 2967 \else 2968 \def\@oddhead{\hbox{}\scriptsize\leftmark \hfil \thepage} 2969 \def\@evenhead{} 2970 \fi 2971 \ifCLASSOPTIONdraftcls 2972 \def\@oddhead{\hbox{}\scriptsize\leftmark \hfil \thepage} 2973 \def\@evenhead{} 2974 \ifCLASSOPTIONdraftclsnofoot 2975 \def\@oddfoot{} 2976 \else 2977 \def\@oddfoot{\scriptsize \@date \hfil DRAFT} 2978 \fi 2979 \else 2980 \def\@oddfoot{} 2981 \fi 2982 \def\@evenfoot{}} 2983 \fi 2984 2985 2986 % title page style 2987 \def\[email protected]{\def\@oddfoot{}\def\@evenfoot{}% 2988 \ifCLASSOPTIONconference 2989 \def\@oddhead{}% 2990 \def\@evenhead{}% 2991 \else 2992 \def\@oddhead{\hbox{}\scriptsize\leftmark \hfil \thepage}% 2993 \def\@evenhead{\scriptsize\thepage \hfil \leftmark\hbox{}}% 2994 \fi 2995 \ifCLASSOPTIONdraftcls 2996 \def\@oddhead{\hbox{}\scriptsize\leftmark \hfil \thepage}% 2997 \def\@evenhead{\scriptsize\thepage \hfil \leftmark\hbox{}}% 2998 \ifCLASSOPTIONdraftclsnofoot\else 2999 \def\@oddfoot{\scriptsize \@date\hfil DRAFT}% 3000 \def\@evenfoot{\scriptsize DRAFT\hfil \@date}% 3001 \fi 3002 \else 3003 % all non-draft mode footers 3004 \[email protected] 3005 % for title pages that are using a pubid 3006 % do not repeat pubid if using peer review option 3007 \ifCLASSOPTIONpeerreview 3008 \else 3009 \footskip 0pt% 3010 \ifCLASSOPTIONcompsoc 3011 \def\@oddfoot{\hss\normalfont\scriptsize\raisebox{-1.5\@IEEEnormalsizeunitybaselineskip}[0ex][0ex]{\@IEEEpubid}\hss}% 3012 \def\@evenfoot{\hss\normalfont\scriptsize\raisebox{-1.5\@IEEEnormalsizeunitybaselineskip}[0ex][0ex]{\@IEEEpubid}\hss}% 3013 \else 3014 \def\@oddfoot{\hss\normalfont\footnotesize\raisebox{1.5ex}[1.5ex]{\@IEEEpubid}\hss}% 3015 \def\@evenfoot{\hss\normalfont\footnotesize\raisebox{1.5ex}[1.5ex]{\@IEEEpubid}\hss}% 3016 \fi 3017 \fi 3018 \fi 3019 \fi} 3020 3021 3022 % peer review cover page style 3023 \def\[email protected]{% 3024 \def\@oddhead{}\def\@evenhead{}% 3025 \def\@oddfoot{}\def\@evenfoot{}% 3026 \ifCLASSOPTIONdraftcls 3027 \ifCLASSOPTIONdraftclsnofoot\else 3028 \def\@oddfoot{\scriptsize \@date\hfil DRAFT}% 3029 \def\@evenfoot{\scriptsize DRAFT\hfil \@date}% 3030 \fi 3031 \else 3032 % non-draft mode footers 3033 \[email protected] 3034 \footskip 0pt% 3035 \ifCLASSOPTIONcompsoc 3036 \def\@oddfoot{\hss\normalfont\scriptsize\raisebox{-1.5\@IEEEnormalsizeunitybaselineskip}[0ex][0ex]{\@IEEEpubid}\hss}% 3037 \def\@evenfoot{\hss\normalfont\scriptsize\raisebox{-1.5\@IEEEnormalsizeunitybaselineskip}[0ex][0ex]{\@IEEEpubid}\hss}% 3038 \else 3039 \def\@oddfoot{\hss\normalfont\footnotesize\raisebox{1.5ex}[1.5ex]{\@IEEEpubid}\hss}% 3040 \def\@evenfoot{\hss\normalfont\footnotesize\raisebox{1.5ex}[1.5ex]{\@IEEEpubid}\hss}% 3041 \fi 3042 \fi 3043 \fi} 3044 3045 3046 % start with empty headings 3047 \def\rightmark{}\def\leftmark{} 3048 3049 3050 %% Defines the command for putting the header. \footernote{TEXT} is the same 3051 %% as \markboth{TEXT}{TEXT}. 3052 %% Note that all the text is forced into uppercase, if you have some text 3053 %% that needs to be in lower case, for instance et. al., then either manually 3054 %% set \leftmark and \rightmark or use \MakeLowercase{et. al.} within the 3055 %% arguments to \markboth. 3056 \def\markboth#1#2{\def\leftmark{\@IEEEcompsoconly{\sffamily}\MakeUppercase{#1}}% 3057 \def\rightmark{\@IEEEcompsoconly{\sffamily}\MakeUppercase{#2}}} 3058 \def\footernote#1{\markboth{#1}{#1}} 3059 3060 \def\today{\ifcase\month\or 3061 January\or February\or March\or April\or May\or June\or 3062 July\or August\or September\or October\or November\or December\fi 3063 \space\number\day, \number\year} 3064 3065 3066 3067 3068 %% CITATION AND BIBLIOGRAPHY COMMANDS 3069 %% 3070 %% V1.6 no longer supports the older, nonstandard \shortcite and \citename setup stuff 3071 % 3072 % 3073 % Modify Latex2e \@citex to separate citations with "], [" 3074 \def\@citex[#1]#2{% 3075 \let\@citea\@empty 3076 \@cite{\@for\@citeb:=#2\do 3077 {\@citea\def\@citea{], [}% 3078 \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}% 3079 \[email protected]\immediate\write\@auxout{\string\citation{\@citeb}}\fi 3080 \@ifundefined{[email protected]\@citeb}{\mbox{\[email protected]\bfseries ?}% 3081 \[email protected] 3082 \@[email protected] 3083 {Citation `\@citeb‘ on page \thepage \space undefined}}% 3084 {\hbox{\csname [email protected]\@citeb\endcsname}}}}{#1}} 3085 3086 % V1.6 we create hooks for the optional use of Donald Arseneau‘s 3087 % cite.sty package. cite.sty is "smart" and will notice that the 3088 % following format controls are already defined and will not 3089 % redefine them. The result will be the proper sorting of the 3090 % citation numbers and auto detection of 3 or more entry "ranges" - 3091 % all in IEEE style: [1], [2], [5]--[7], [12] 3092 % This also allows for an optional note, i.e., \cite[mynote]{..}. 3093 % If the \cite with note has more than one reference, the note will 3094 % be applied to the last of the listed references. It is generally 3095 % desired that if a note is given, only one reference is listed in 3096 % that \cite. 3097 % Thanks to Mr. Arseneau for providing the required format arguments 3098 % to produce the IEEE style. 3099 \def\citepunct{], [} 3100 \def\citedash{]--[} 3101 3102 % V1.7 default to using same font for urls made by url.sty 3103 \AtBeginDocument{\csname [email protected]\endcsname} 3104 3105 % V1.6 class files should always provide these 3106 \def\newblock{\hskip .11em\@plus.33em\@minus.07em} 3107 \let\@[email protected]\@empty 3108 3109 3110 % Provide support for the control entries of IEEEtran.bst V1.00 and later. 3111 % V1.7 optional argument allows for a different aux file to be specified in 3112 % order to handle multiple bibliographies. For example, with multibib.sty: 3113 % \newcites{sec}{Secondary Literature} 3114 % \bstctlcite[@auxoutsec]{BSTcontrolhak} 3115 \def\bstctlcite{\@ifnextchar[{\@bstctlcite}{\@bstctlcite[@auxout]}} 3116 \def\@bstctlcite[#1]#2{\@bsphack 3117 \@for\@citeb:=#2\do{% 3118 \edef\@citeb{\expandafter\@firstofone\@citeb}% 3119 \[email protected]\immediate\write\csname #1\endcsname{\string\citation{\@citeb}}\fi}% 3120 \@esphack} 3121 3122 % V1.6 provide a way for a user to execute a command just before 3123 % a given reference number - used to insert a \newpage to balance 3124 % the columns on the last page 3125 \edef\@IEEEtriggerrefnum{0} % the default of zero means that 3126 % the command is not executed 3127 \def\@IEEEtriggercmd{\newpage} 3128 3129 % allow the user to alter the triggered command 3130 \long\def\IEEEtriggercmd#1{\long\def\@IEEEtriggercmd{#1}} 3131 3132 % allow user a way to specify the reference number just before the 3133 % command is executed 3134 \def\IEEEtriggeratref#1{\@IEEEtrantmpcountA=#1% 3135 \edef\@IEEEtriggerrefnum{\the\@IEEEtrantmpcountA}}% 3136 3137 % trigger command at the given reference 3138 \def\@IEEEbibitemprefix{\@IEEEtrantmpcountA=\@IEEEtriggerrefnum\relax% 3139 \advance\@IEEEtrantmpcountA by -1\relax% 3140 \ifnum\[email protected]=\@IEEEtrantmpcountA\relax\@IEEEtriggercmd\relax\fi} 3141 3142 3143 \def\@biblabel#1{[#1]} 3144 3145 % compsoc journals left align the reference numbers 3146 \@IEEEcompsocnotconfonly{\def\@biblabel#1{[#1]\hfill}} 3147 3148 % controls bib item spacing 3149 \def\IEEEbibitemsep{0pt plus .5pt} 3150 3151 \@IEEEcompsocconfonly{\def\IEEEbibitemsep{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}} 3152 3153 3154 \def\thebibliography#1{\section*{\refname}% 3155 \addcontentsline{toc}{section}{\refname}% 3156 % V1.6 add some rubber space here and provide a command trigger 3157 \footnotesize\@IEEEcompsocconfonly{\small}\vskip 0.3\baselineskip plus 0.1\baselineskip minus 0.1\baselineskip% 3158 \list{\@biblabel{\@arabic\[email protected]}}% 3159 {\settowidth\labelwidth{\@biblabel{#1}}% 3160 \leftmargin\labelwidth 3161 \advance\leftmargin\labelsep\relax 3162 \itemsep \IEEEbibitemsep\relax 3163 \usecounter{enumiv}% 3164 \let\[email protected]\@empty 3165 \renewcommand\theenumiv{\@arabic\[email protected]}}% 3166 \let\@IEEElatexbibitem\bibitem% 3167 \def\bibitem{\@IEEEbibitemprefix\@IEEElatexbibitem}% 3168 \def\newblock{\hskip .11em plus .33em minus .07em}% 3169 % originally: 3170 % \sloppy\clubpenalty4000\widowpenalty4000% 3171 % by adding the \interlinepenalty here, we make it more 3172 % difficult, but not impossible, for LaTeX to break within a reference. 3173 % IEEE almost never breaks a reference (but they do it more often with 3174 % technotes). You may get an underfull vbox warning around the bibliography, 3175 % but the final result will be much more like what IEEE will publish. 3176 % MDS 11/2000 3177 \ifCLASSOPTIONtechnote\sloppy\clubpenalty4000\widowpenalty4000\interlinepenalty100% 3178 \else\sloppy\clubpenalty4000\widowpenalty4000\interlinepenalty500\fi% 3179 \sfcode`\.=1000\relax} 3180 \let\endthebibliography=\endlist 3181 3182 3183 3184 3185 % TITLE PAGE COMMANDS 3186 % 3187 % 3188 % \IEEEmembership is used to produce the sublargesize italic font used to indicate author 3189 % IEEE membership. compsoc uses a large size sans slant font 3190 \def\IEEEmembership#1{{\@IEEEnotcompsoconly{\sublargesize}\normalfont\@IEEEcompsoconly{\sffamily}\textit{#1}}} 3191 3192 3193 % \IEEEauthorrefmark{} produces a footnote type symbol to indicate author affiliation. 3194 % When given an argument of 1 to 9, \IEEEauthorrefmark{} follows the standard LaTeX footnote 3195 % symbol sequence convention. However, for arguments 10 and above, \IEEEauthorrefmark{} 3196 % reverts to using lower case roman numerals, so it cannot overflow. Do note that you 3197 % cannot use \footnotemark[] in place of \IEEEauthorrefmark{} within \author as the footnote 3198 % symbols will have been turned off to prevent \thanks from creating footnote marks. 3199 % \IEEEauthorrefmark{} produces a symbol that appears to LaTeX as having zero vertical 3200 % height - this allows for a more compact line packing, but the user must ensure that 3201 % the interline spacing is large enough to prevent \IEEEauthorrefmark{} from colliding 3202 % with the text above. 3203 % V1.7 make this a robust command 3204 \DeclareRobustCommand*{\IEEEauthorrefmark}[1]{\raisebox{0pt}[0pt][0pt]{\textsuperscript{\footnotesize\ensuremath{\ifcase#1\or *\or \dagger\or \ddagger\or% 3205 \mathsection\or \mathparagraph\or \|\or **\or \dagger\dagger% 3206 \or \ddagger\ddagger \else\textsuperscript{\expandafter\romannumeral#1}\fi}}}} 3207 3208 3209 % FONT CONTROLS AND SPACINGS FOR CONFERENCE MODE AUTHOR NAME AND AFFILIATION BLOCKS 3210 % 3211 % The default font styles for the author name and affiliation blocks (confmode) 3212 \def\@IEEEauthorblockNstyle{\normalfont\@IEEEcompsocnotconfonly{\sffamily}\sublargesize\@IEEEcompsocconfonly{\large}} 3213 \def\@IEEEauthorblockAstyle{\normalfont\@IEEEcompsocnotconfonly{\sffamily}\@IEEEcompsocconfonly{\itshape}\normalsize\@IEEEcompsocconfonly{\large}} 3214 % The default if the user does not use an author block 3215 \def\@IEEEauthordefaulttextstyle{\normalfont\@IEEEcompsocnotconfonly{\sffamily}\sublargesize} 3216 3217 % spacing from title (or special paper notice) to author name blocks (confmode) 3218 % can be negative 3219 \def\@IEEEauthorblockconfadjspace{-0.25em} 3220 % compsoc conferences need more space here 3221 \@IEEEcompsocconfonly{\def\@IEEEauthorblockconfadjspace{0.75\@IEEEnormalsizeunitybaselineskip}} 3222 3223 % spacing between name and affiliation blocks (confmode) 3224 % This can be negative. 3225 % IEEE doesn‘t want any added spacing here, but I will leave these 3226 % controls in place in case they ever change their mind. 3227 % Personally, I like 0.75ex. 3228 %\def\@IEEEauthorblockNtopspace{0.75ex} 3229 %\def\@IEEEauthorblockAtopspace{0.75ex} 3230 \def\@IEEEauthorblockNtopspace{0.0ex} 3231 \def\@IEEEauthorblockAtopspace{0.0ex} 3232 % baseline spacing within name and affiliation blocks (confmode) 3233 % must be positive, spacings below certain values will make 3234 % the position of line of text sensitive to the contents of the 3235 % line above it i.e., whether or not the prior line has descenders, 3236 % subscripts, etc. For this reason it is a good idea to keep 3237 % these above 2.6ex 3238 \def\@IEEEauthorblockNinterlinespace{2.6ex} 3239 \def\@IEEEauthorblockAinterlinespace{2.75ex} 3240 3241 % This tracks the required strut size. 3242 % See the \@IEEEauthorhalign command for the actual default value used. 3243 \def\@IEEEauthorblockXinterlinespace{2.7ex} 3244 3245 % variables to retain font size and style across groups 3246 % values given here have no effect as they will be overwritten later 3247 \gdef\@IEEESAVESTATEfontsize{10} 3248 \gdef\@IEEESAVESTATEfontbaselineskip{12} 3249 \gdef\@IEEESAVESTATEfontencoding{OT1} 3250 \gdef\@IEEESAVESTATEfontfamily{ptm} 3251 \gdef\@IEEESAVESTATEfontseries{m} 3252 \gdef\@IEEESAVESTATEfontshape{n} 3253 3254 % saves the current font attributes 3255 \def\@IEEEcurfontSAVE{\global\let\@IEEESAVESTATEfontsize\[email protected]% 3256 \global\let\@IEEESAVESTATEfontbaselineskip\[email protected]% 3257 \global\let\@IEEESAVESTATEfontencoding\[email protected]% 3258 \global\let\@IEEESAVESTATEfontfamily\[email protected]% 3259 \global\let\@IEEESAVESTATEfontseries\[email protected]% 3260 \global\let\@IEEESAVESTATEfontshape\[email protected]} 3261 3262 % restores the saved font attributes 3263 \def\@IEEEcurfontRESTORE{\fontsize{\@IEEESAVESTATEfontsize}{\@IEEESAVESTATEfontbaselineskip}% 3264 \fontencoding{\@IEEESAVESTATEfontencoding}% 3265 \fontfamily{\@IEEESAVESTATEfontfamily}% 3266 \fontseries{\@IEEESAVESTATEfontseries}% 3267 \fontshape{\@IEEESAVESTATEfontshape}% 3268 \selectfont} 3269 3270 3271 % variable to indicate if the current block is the first block in the column 3272 \newif\[email protected] \@IEEEprevauthorblockincolfalse 3273 3274 3275 % the command places a strut with height and depth = \@IEEEauthorblockXinterlinespace 3276 % we use this technique to have complete manual control over the spacing of the lines 3277 % within the halign environment. 3278 % We set the below baseline portion at 30%, the above 3279 % baseline portion at 70% of the total length. 3280 % Responds to changes in the document‘s \baselinestretch 3281 \def\@IEEEauthorstrutrule{\@IEEEtrantmpdimenA\@IEEEauthorblockXinterlinespace% 3282 \@IEEEtrantmpdimenA=\baselinestretch\@IEEEtrantmpdimenA% 3283 \rule[-0.3\@IEEEtrantmpdimenA]{0pt}{\@IEEEtrantmpdimenA}} 3284 3285 3286 % blocks to hold the authors‘ names and affilations. 3287 % Makes formatting easy for conferences 3288 % 3289 % use real definitions in conference mode 3290 % name block 3291 \def\IEEEauthorblockN#1{\relax\@IEEEauthorblockNstyle% set the default text style 3292 \gdef\@IEEEauthorblockXinterlinespace{0pt}% disable strut for spacer row 3293 % the \expandafter hides the \cr in conditional tex, see the array.sty docs 3294 % for details, probably not needed here as the \cr is in a macro 3295 % do a spacer row if needed 3296 \[email protected]\expandafter\@IEEEauthorblockNtopspaceline\fi 3297 \global\@IEEEprevauthorblockincoltrue% we now have a block in this column 3298 %restore the correct strut value 3299 \gdef\@IEEEauthorblockXinterlinespace{\@IEEEauthorblockNinterlinespace}% 3300 % input the author names 3301 #1% 3302 % end the row if the user did not already 3303 \crcr} 3304 % spacer row for names 3305 \def\@IEEEauthorblockNtopspaceline{\cr\noalign{\vskip\@IEEEauthorblockNtopspace}} 3306 % 3307 % affiliation block 3308 \def\IEEEauthorblockA#1{\relax\@IEEEauthorblockAstyle% set the default text style 3309 \gdef\@IEEEauthorblockXinterlinespace{0pt}%disable strut for spacer row 3310 % the \expandafter hides the \cr in conditional tex, see the array.sty docs 3311 % for details, probably not needed here as the \cr is in a macro 3312 % do a spacer row if needed 3313 \[email protected]\expandafter\@IEEEauthorblockAtopspaceline\fi 3314 \global\@IEEEprevauthorblockincoltrue% we now have a block in this column 3315 %restore the correct strut value 3316 \gdef\@IEEEauthorblockXinterlinespace{\@IEEEauthorblockAinterlinespace}% 3317 % input the author affiliations 3318 #1% 3319 % end the row if the user did not already 3320 \crcr} 3321 % spacer row for affiliations 3322 \def\@IEEEauthorblockAtopspaceline{\cr\noalign{\vskip\@IEEEauthorblockAtopspace}} 3323 3324 3325 % allow papers to compile even if author blocks are used in modes other 3326 % than conference or peerreviewca. For such cases, we provide dummy blocks. 3327 \ifCLASSOPTIONconference 3328 \else 3329 \ifCLASSOPTIONpeerreviewca\else 3330 % not conference or peerreviewca mode 3331 \def\IEEEauthorblockN#1{#1}% 3332 \def\IEEEauthorblockA#1{#1}% 3333 \fi 3334 \fi 3335 3336 3337 3338 % we provide our own halign so as not to have to depend on tabular 3339 \def\@IEEEauthorhalign{\@IEEEauthordefaulttextstyle% default text style 3340 \lineskip=0pt\relax% disable line spacing 3341 \lineskiplimit=0pt\relax% 3342 \baselineskip=0pt\relax% 3343 \@IEEEcurfontSAVE% save the current font 3344 \mathsurround\[email protected]\relax% no extra spacing around math 3345 \let\\\@IEEEauthorhaligncr% replace newline with halign friendly one 3346 \tabskip=0pt\relax% no column spacing 3347 \everycr{}% ensure no problems here 3348 \@IEEEprevauthorblockincolfalse% no author blocks yet 3349 \def\@IEEEauthorblockXinterlinespace{2.7ex}% default interline space 3350 \vtop\bgroup%vtop box 3351 \halign\bgroup&\relax\hfil\@IEEEcurfontRESTORE\relax ##\relax 3352 \hfil\@IEEEcurfontSAVE\@IEEEauthorstrutrule\cr} 3353 3354 % ensure last line, exit from halign, close vbox 3355 \def\[email protected]{\crcr\egroup\egroup} 3356 3357 % handle bogus star form 3358 \def\@IEEEauthorhaligncr{{\ifnum0=`}\fi\@ifstar{\@@IEEEauthorhaligncr}{\@@IEEEauthorhaligncr}} 3359 3360 % test and setup the optional argument to \\[] 3361 \def\@@IEEEauthorhaligncr{\@testopt\@@@IEEEauthorhaligncr\[email protected]} 3362 3363 % end the line and do the optional spacer 3364 \def\@@@IEEEauthorhaligncr[#1]{\ifnum0=`{\fi}\cr\noalign{\vskip#1\relax}} 3365 3366 3367 3368 % flag to prevent multiple \and warning messages 3369 \newif\[email protected] 3370 \@IEEEWARNandtrue 3371 3372 % if in conference or peerreviewca modes, we support the use of \and as \author is a 3373 % tabular environment, otherwise we warn the user that \and is invalid 3374 % outside of conference or peerreviewca modes. 3375 \def\and{\relax} % provide a bogus \and that we will then override 3376 3377 \renewcommand{\and}[1][\relax]{\[email protected]\typeout{** WARNING: \noexpand\and is valid only 3378 when in conference or peerreviewca}\typeout{modes (line \the\inputlineno).}\fi\global\@IEEEWARNandfalse} 3379 3380 \ifCLASSOPTIONconference% 3381 \renewcommand{\and}[1][\hfill]{\end{@IEEEauthorhalign}#1\begin{@IEEEauthorhalign}}% 3382 \fi 3383 \ifCLASSOPTIONpeerreviewca 3384 \renewcommand{\and}[1][\hfill]{\end{@IEEEauthorhalign}#1\begin{@IEEEauthorhalign}}% 3385 \fi 3386 3387 3388 % page clearing command 3389 % based on LaTeX2e‘s \cleardoublepage, but allows different page styles 3390 % for the inserted blank pages 3391 \def\@IEEEcleardoublepage#1{\clearpage\[email protected]\ifodd\[email protected]\else 3392 \hbox{}\thispagestyle{#1}\newpage\if[email protected]\hbox{}\thispagestyle{#1}\newpage\fi\fi\fi} 3393 3394 3395 % user command to invoke the title page 3396 \def\maketitle{\par% 3397 \begingroup% 3398 \normalfont% 3399 \def\thefootnote{}% the \thanks{} mark type is empty 3400 \def\footnotemark{}% and kill space from \thanks within author 3401 \let\@makefnmark\relax% V1.7, must *really* kill footnotemark to remove all \textsuperscript spacing as well. 3402 \footnotesize% equal spacing between thanks lines 3403 \footnotesep 0.7\baselineskip%see global setting of \footnotesep for more info 3404 % V1.7 disable \thanks note indention for compsoc 3405 \@IEEEcompsoconly{\long\def\@makefntext##1{\parindent 1em\noindent\hbox{\@makefnmark}##1}}% 3406 \normalsize% 3407 \ifCLASSOPTIONpeerreview 3408 \newpage\global\@topnum\[email protected] \@maketitle\@IEEEstatictitlevskip\@IEEEaftertitletext% 3409 \thispagestyle{IEEEpeerreviewcoverpagestyle}\@thanks% 3410 \else 3411 \[email protected]% 3412 \ifCLASSOPTIONtechnote% 3413 \newpage\global\@topnum\[email protected] \@maketitle\@IEEEstatictitlevskip\@IEEEaftertitletext% 3414 \else 3415 \twocolumn[\@maketitle\@IEEEdynamictitlevspace\@IEEEaftertitletext]% 3416 \fi 3417 \else 3418 \newpage\global\@topnum\[email protected] \@maketitle\@IEEEstatictitlevskip\@IEEEaftertitletext% 3419 \fi 3420 \thispagestyle{IEEEtitlepagestyle}\@thanks% 3421 \fi 3422 % pullup page for pubid if used. 3423 \[email protected] 3424 \enlargethispage{-\@IEEEpubidpullup}% 3425 \fi 3426 \endgroup 3427 \setcounter{footnote}{0}\let\maketitle\relax\let\@maketitle\relax 3428 \gdef\@thanks{}% 3429 % v1.6b do not clear these as we will need the title again for peer review papers 3430 % \gdef\@author{}\gdef\@title{}% 3431 \let\thanks\relax} 3432 3433 3434 3435 % V1.7 parbox to format \@IEEEcompsoctitleabstractindextext 3436 \long\def\@IEEEcompsoctitleabstractindextextbox#1{\parbox{0.915\textwidth}{#1}} 3437 3438 % formats the Title, authors names, affiliations and special paper notice 3439 % THIS IS A CONTROLLED SPACING COMMAND! Do not allow blank lines or unintentional 3440 % spaces to enter the definition - use % at the end of each line 3441 \def\@maketitle{\newpage 3442 \begin{center}% 3443 \ifCLASSOPTIONtechnote% technotes 3444 {\bfseries\large\@IEEEcompsoconly{\sffamily}\@title\par}\vskip 1.3em{\lineskip .5em\@IEEEcompsoconly{\sffamily}\@author 3445 \@IEEEspecialpapernotice\par{\@IEEEcompsoconly{\vskip 1.5em\relax 3446 \@IEEEcompsoctitleabstractindextextbox{\@IEEEcompsoctitleabstractindextext}\par 3447 \hfill\@IEEEcompsocdiamondline\hfill\hbox{}\par}}}\relax 3448 \else% not a technote 3449 \vskip0.2em{\Huge\@IEEEcompsoconly{\sffamily}\@IEEEcompsocconfonly{\normalfont\normalsize\vskip 2\@IEEEnormalsizeunitybaselineskip 3450 \bfseries\Large}\@title\par}\vskip1.0em\par% 3451 % V1.6 handle \author differently if in conference mode 3452 \ifCLASSOPTIONconference% 3453 {\@IEEEspecialpapernotice\mbox{}\vskip\@IEEEauthorblockconfadjspace% 3454 \mbox{}\hfill\begin{@IEEEauthorhalign}\@author\end{@IEEEauthorhalign}\hfill\mbox{}\par}\relax 3455 \else% peerreviewca, peerreview or journal 3456 \ifCLASSOPTIONpeerreviewca 3457 % peerreviewca handles author names just like conference mode 3458 {\@IEEEcompsoconly{\sffamily}\@IEEEspecialpapernotice\mbox{}\vskip\@IEEEauthorblockconfadjspace% 3459 \mbox{}\hfill\begin{@IEEEauthorhalign}\@author\end{@IEEEauthorhalign}\hfill\mbox{}\par 3460 {\@IEEEcompsoconly{\vskip 1.5em\relax 3461 \@IEEEcompsoctitleabstractindextextbox{\@IEEEcompsoctitleabstractindextext}\par\hfill 3462 \@IEEEcompsocdiamondline\hfill\hbox{}\par}}}\relax 3463 \else% journal or peerreview 3464 {\lineskip.5em\@IEEEcompsoconly{\sffamily}\sublargesize\@author\@IEEEspecialpapernotice\par 3465 {\@IEEEcompsoconly{\vskip 1.5em\relax 3466 \@IEEEcompsoctitleabstractindextextbox{\@IEEEcompsoctitleabstractindextext}\par\hfill 3467 \@IEEEcompsocdiamondline\hfill\hbox{}\par}}}\relax 3468 \fi 3469 \fi 3470 \fi\end{center}} 3471 3472 3473 3474 % V1.7 Computer Society "diamond line" which follows index terms for nonconference papers 3475 \def\@IEEEcompsocdiamondline{\vrule depth 0pt height 0.5pt width 4cm\hspace{7.5pt}% 3476 \raisebox{-3.5pt}{\fontfamily{pzd}\fontencoding{U}\fontseries{m}\fontshape{n}\fontsize{11}{12}\selectfont\char70}% 3477 \hspace{7.5pt}\vrule depth 0pt height 0.5pt width 4cm\relax} 3478 3479 % V1.7 standard LateX2e \thanks, but with \itshape under compsoc. Also make it a \long\def 3480 % We also need to trigger the one-shot footnote rule 3481 \def\@IEEEtriggeroneshotfootnoterule{\global\@IEEEenableoneshotfootnoteruletrue} 3482 3483 3484 \long\def\thanks#1{\footnotemark 3485 \[email protected]\@thanks{\@thanks 3486 \protect\footnotetext[\the\[email protected]]{\@IEEEcompsoconly{\itshape 3487 \protect\@IEEEtriggeroneshotfootnoterule\relax}\ignorespaces#1}}} 3488 \let\@thanks\@empty 3489 3490 % V1.7 allow \author to contain \par‘s. This is needed to allow \thanks to contain \par. 3491 \long\def\author#1{\gdef\@author{#1}} 3492 3493 3494 % in addition to setting up IEEEitemize, we need to remove a baselineskip space above and 3495 % below it because \list‘s \pars introduce blank lines because of the footnote struts. 3496 \def\@IEEEsetupcompsocitemizelist{\def\labelitemi{$\bullet$}% 3497 \setlength{\IEEElabelindent}{0pt}\setlength{\parskip}{0pt}% 3498 \setlength{\partopsep}{0pt}\setlength{\topsep}{0.5\baselineskip}\vspace{-1\baselineskip}\relax} 3499 3500 3501 % flag for fake non-compsoc \IEEEcompsocthanksitem - prevents line break on very first item 3502 \newif\[email protected] \@IEEEbreakcompsocthanksitemfalse 3503 3504 \ifCLASSOPTIONcompsoc 3505 % V1.7 compsoc bullet item \thanks 3506 % also, we need to redefine this to destroy the argument in \@IEEEdynamictitlevspace 3507 \long\def\IEEEcompsocitemizethanks#1{\relax\@IEEEbreakcompsocthanksitemfalse\footnotemark 3508 \[email protected]\@thanks{\@thanks 3509 \protect\footnotetext[\the\[email protected]]{\itshape\protect\@IEEEtriggeroneshotfootnoterule 3510 {\let\IEEEiedlistdecl\relax\protect\begin{IEEEitemize}[\protect\@IEEEsetupcompsocitemizelist]\ignorespaces#1\relax 3511 \protect\end{IEEEitemize}}\protect\vspace{-1\baselineskip}}}} 3512 \DeclareRobustCommand*{\IEEEcompsocthanksitem}{\item} 3513 \else 3514 % non-compsoc, allow for dual compilation via rerouting to normal \thanks 3515 \long\def\IEEEcompsocitemizethanks#1{\thanks{#1}} 3516 % redirect to "pseudo-par" \hfil\break\indent after swallowing [] from \IEEEcompsocthanksitem[] 3517 \DeclareRobustCommand{\IEEEcompsocthanksitem}{\@ifnextchar [{\@IEEEthanksswallowoptionalarg}% 3518 {\@IEEEthanksswallowoptionalarg[\relax]}} 3519 % be sure and break only after first item, be sure and ignore spaces after optional argument 3520 \def\@IEEEthanksswallowoptionalarg[#1]{\relax\[email protected]\hfil\break 3521 \indent\fi\@IEEEbreakcompsocthanksitemtrue\ignorespaces} 3522 \fi 3523 3524 3525 % V1.6b define the \IEEEpeerreviewmaketitle as needed 3526 \ifCLASSOPTIONpeerreview 3527 \def\IEEEpeerreviewmaketitle{\@IEEEcleardoublepage{empty}% 3528 \ifCLASSOPTIONtwocolumn 3529 \twocolumn[\@IEEEpeerreviewmaketitle\@IEEEdynamictitlevspace] 3530 \else 3531 \newpage\@IEEEpeerreviewmaketitle\@IEEEstatictitlevskip 3532 \fi 3533 \thispagestyle{IEEEtitlepagestyle}} 3534 \else 3535 % \IEEEpeerreviewmaketitle does nothing if peer review option has not been selected 3536 \def\IEEEpeerreviewmaketitle{\relax} 3537 \fi 3538 3539 % peerreview formats the repeated title like the title in journal papers. 3540 \def\@IEEEpeerreviewmaketitle{\begin{center}\@IEEEcompsoconly{\sffamily}% 3541 \normalfont\normalsize\vskip0.2em{\Huge\@title\par}\vskip1.0em\par 3542 \end{center}} 3543 3544 3545 3546 % V1.6 3547 % this is a static rubber spacer between the title/authors and the main text 3548 % used for single column text, or when the title appears in the first column 3549 % of two column text (technotes). 3550 \def\@IEEEstatictitlevskip{{\normalfont\normalsize 3551 % adjust spacing to next text 3552 % v1.6b handle peer review papers 3553 \ifCLASSOPTIONpeerreview 3554 % for peer review papers, the same value is used for both title pages 3555 % regardless of the other paper modes 3556 \vskip 1\baselineskip plus 0.375\baselineskip minus 0.1875\baselineskip 3557 \else 3558 \ifCLASSOPTIONconference% conference 3559 \vskip 1\baselineskip plus 0.375\baselineskip minus 0.1875\baselineskip% 3560 \else% 3561 \ifCLASSOPTIONtechnote% technote 3562 \vskip 1\baselineskip plus 0.375\baselineskip minus 0.1875\baselineskip% 3563 \else% journal uses more space 3564 \vskip 2.5\baselineskip plus 0.75\baselineskip minus 0.375\baselineskip% 3565 \fi 3566 \fi 3567 \fi}} 3568 3569 3570 % V1.6 3571 % This is a dynamically determined rigid spacer between the title/authors 3572 % and the main text. This is used only for single column titles over two 3573 % column text (most common) 3574 % This is bit tricky because we have to ensure that the textheight of the 3575 % main text is an integer multiple of \baselineskip 3576 % otherwise underfull vbox problems may develop in the second column of the 3577 % text on the titlepage 3578 % The possible use of \IEEEpubid must also be taken into account. 3579 \def\@IEEEdynamictitlevspace{{% 3580 % we run within a group so that all the macros can be forgotten when we are done 3581 \long\def\thanks##1{\relax}%don‘t allow \thanks to run when we evaluate the vbox height 3582 \long\def\IEEEcompsocitemizethanks##1{\relax}%don‘t allow \IEEEcompsocitemizethanks to run when we evaluate the vbox height 3583 \normalfont\normalsize% we declare more descriptive variable names 3584 \let\@IEEEmaintextheight=\@IEEEtrantmpdimenA%height of the main text columns 3585 \let\@IEEEINTmaintextheight=\@IEEEtrantmpdimenB%height of the main text columns with integer # lines 3586 % set the nominal and minimum values for the title spacer 3587 % the dynamic algorithm will not allow the spacer size to 3588 % become less than \@IEEEMINtitlevspace - instead it will be 3589 % lengthened 3590 % default to journal values 3591 \def\@IEEENORMtitlevspace{2.5\baselineskip}% 3592 \def\@IEEEMINtitlevspace{2\baselineskip}% 3593 % conferences and technotes need tighter spacing 3594 \ifCLASSOPTIONconference%conference 3595 \def\@IEEENORMtitlevspace{1\baselineskip}% 3596 \def\@IEEEMINtitlevspace{0.75\baselineskip}% 3597 \fi 3598 \ifCLASSOPTIONtechnote%technote 3599 \def\@IEEENORMtitlevspace{1\baselineskip}% 3600 \def\@IEEEMINtitlevspace{0.75\baselineskip}% 3601 \fi% 3602 % get the height that the title will take up 3603 \ifCLASSOPTIONpeerreview 3604 \settoheight{\@IEEEmaintextheight}{\vbox{\hsize\textwidth \@IEEEpeerreviewmaketitle}}% 3605 \else 3606 \settoheight{\@IEEEmaintextheight}{\vbox{\hsize\textwidth \@maketitle}}% 3607 \fi 3608 \@IEEEmaintextheight=-\@IEEEmaintextheight% title takes away from maintext, so reverse sign 3609 % add the height of the page textheight 3610 \advance\@IEEEmaintextheight by \textheight% 3611 % correct for title pages using pubid 3612 \ifCLASSOPTIONpeerreview\else 3613 % peerreview papers use the pubid on the cover page only. 3614 % And the cover page uses a static spacer. 3615 \[email protected]\advance\@IEEEmaintextheight by -\@IEEEpubidpullup\fi 3616 \fi% 3617 % subtract off the nominal value of the title bottom spacer 3618 \advance\@IEEEmaintextheight by -\@IEEENORMtitlevspace% 3619 % \topskip takes away some too 3620 \advance\@IEEEmaintextheight by -\topskip% 3621 % calculate the column height of the main text for lines 3622 % now we calculate the main text height as if holding 3623 % an integer number of \normalsize lines after the first 3624 % and discard any excess fractional remainder 3625 % we subtracted the first line, because the first line 3626 % is placed \topskip into the maintext, not \baselineskip like the 3627 % rest of the lines. 3628 \@IEEEINTmaintextheight=\@IEEEmaintextheight% 3629 \divide\@IEEEINTmaintextheight by \baselineskip% 3630 \multiply\@IEEEINTmaintextheight by \baselineskip% 3631 % now we calculate how much the title spacer height will 3632 % have to be reduced from nominal (\@IEEEREDUCEmaintextheight is always 3633 % a positive value) so that the maintext area will contain an integer 3634 % number of normal size lines 3635 % we change variable names here (to avoid confusion) as we no longer 3636 % need \@IEEEINTmaintextheight and can reuse its dimen register 3637 \let\@IEEEREDUCEmaintextheight=\@IEEEINTmaintextheight% 3638 \advance\@IEEEREDUCEmaintextheight by -\@IEEEmaintextheight% 3639 \advance\@IEEEREDUCEmaintextheight by \baselineskip% 3640 % this is the calculated height of the spacer 3641 % we change variable names here (to avoid confusion) as we no longer 3642 % need \@IEEEmaintextheight and can reuse its dimen register 3643 \let\@IEEECOMPENSATElen=\@IEEEmaintextheight% 3644 \@IEEECOMPENSATElen=\@IEEENORMtitlevspace% set the nominal value 3645 % we go with the reduced length if it is smaller than an increase 3646 \ifdim\@IEEEREDUCEmaintextheight < 0.5\baselineskip\relax% 3647 \advance\@IEEECOMPENSATElen by -\@IEEEREDUCEmaintextheight% 3648 % if the resulting spacer is too small back out and go with an increase instead 3649 \ifdim\@IEEECOMPENSATElen<\@IEEEMINtitlevspace\relax% 3650 \advance\@IEEECOMPENSATElen by \baselineskip% 3651 \fi% 3652 \else% 3653 % go with an increase because it is closer to the nominal than a decrease 3654 \advance\@IEEECOMPENSATElen by -\@IEEEREDUCEmaintextheight% 3655 \advance\@IEEECOMPENSATElen by \baselineskip% 3656 \fi% 3657 % set the calculated rigid spacer 3658 \vspace{\@IEEECOMPENSATElen}}} 3659 3660 3661 3662 % V1.6 3663 % we allow the user access to the last part of the title area 3664 % useful in emergencies such as when a different spacing is needed 3665 % This text is NOT compensated for in the dynamic sizer. 3666 \let\@IEEEaftertitletext=\relax 3667 \long\def\IEEEaftertitletext#1{\def\@IEEEaftertitletext{#1}} 3668 3669 % V1.7 provide a way for users to enter abstract and keywords 3670 % into the onecolumn title are. This text is compensated for 3671 % in the dynamic sizer. 3672 \let\@IEEEcompsoctitleabstractindextext=\relax 3673 \long\def\IEEEcompsoctitleabstractindextext#1{\def\@IEEEcompsoctitleabstractindextext{#1}} 3674 % V1.7 provide a way for users to get the \@IEEEcompsoctitleabstractindextext if 3675 % not in compsoc journal mode - this way abstract and keywords can be placed 3676 % in their conventional position if not in compsoc mode. 3677 \def\IEEEdisplaynotcompsoctitleabstractindextext{% 3678 \ifCLASSOPTIONcompsoc% display if compsoc conf 3679 \ifCLASSOPTIONconference\@IEEEcompsoctitleabstractindextext\fi 3680 \else% or if not compsoc 3681 \@IEEEcompsoctitleabstractindextext\fi} 3682 3683 3684 % command to allow alteration of baselinestretch, but only if the current 3685 % baselineskip is unity. Used to tweak the compsoc abstract and keywords line spacing. 3686 \def\@IEEEtweakunitybaselinestretch#1{{\def\baselinestretch{1}\selectfont 3687 \global\@tempskipa\baselineskip}\ifnum\@tempskipa=\baselineskip% 3688 \def\baselinestretch{#1}\selectfont\fi\relax} 3689 3690 3691 % abstract and keywords are in \small, except 3692 % for 9pt docs in which they are in \footnotesize 3693 % Because 9pt docs use an 8pt footnotesize, \small 3694 % becomes a rather awkward 8.5pt 3695 \def\@IEEEabskeysecsize{\small} 3696 \ifx\CLASSOPTIONpt\@IEEEptsizenine 3697 \def\@IEEEabskeysecsize{\footnotesize} 3698 \fi 3699 3700 % compsoc journals use \footnotesize, compsoc conferences use normalsize 3701 \@IEEEcompsoconly{\def\@IEEEabskeysecsize{\footnotesize}} 3702 \@IEEEcompsocconfonly{\def\@IEEEabskeysecsize{\normalsize}} 3703 3704 3705 3706 3707 % V1.6 have abstract and keywords strip leading spaces, pars and newlines 3708 % so that spacing is more tightly controlled. 3709 \def\abstract{\normalfont 3710 \[email protected] 3711 \@IEEEabskeysecsize\bfseries\textit{\abstractname}---\relax 3712 \else 3713 \begin{center}\vspace{-1.78ex}\@IEEEabskeysecsize\textbf{\abstractname}\end{center}\quotation\@IEEEabskeysecsize 3714 \fi\@IEEEgobbleleadPARNLSP} 3715 % V1.6 IEEE wants only 1 pica from end of abstract to introduction heading when in 3716 % conference mode (the heading already has this much above it) 3717 \def\endabstract{\relax\ifCLASSOPTIONconference\vspace{0ex}\else\vspace{1.34ex}\fi\par\[email protected]\else\endquotation\fi 3718 \normalfont\normalsize} 3719 3720 \def\IEEEkeywords{\normalfont 3721 \[email protected] 3722 \@IEEEabskeysecsize\bfseries\textit{\IEEEkeywordsname}---\relax 3723 \else 3724 \begin{center}\@IEEEabskeysecsize\textbf{\IEEEkeywordsname}\end{center}\quotation\@IEEEabskeysecsize 3725 \fi\@IEEEgobbleleadPARNLSP} 3726 \def\endIEEEkeywords{\relax\ifCLASSOPTIONtechnote\vspace{1.34ex}\else\vspace{0.67ex}\fi 3727 \par\[email protected]\else\endquotation\fi% 3728 \normalfont\normalsize} 3729 3730 % V1.7 compsoc keywords index terms 3731 \ifCLASSOPTIONcompsoc 3732 \ifCLASSOPTIONconference% compsoc conference 3733 \def\abstract{\normalfont 3734 \begin{center}\@IEEEabskeysecsize\textbf{\large\abstractname}\end{center}\vskip 0.5\baselineskip plus 0.1\baselineskip minus 0.1\baselineskip 3735 \[email protected]\else\quotation\fi\itshape\@IEEEabskeysecsize% 3736 \par\@IEEEgobbleleadPARNLSP} 3737 \def\IEEEkeywords{\normalfont\vskip 1.5\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip 3738 \begin{center}\@IEEEabskeysecsize\textbf{\large\IEEEkeywordsname}\end{center}\vskip 0.5\baselineskip plus 0.1\baselineskip minus 0.1\baselineskip 3739 \[email protected]\else\quotation\fi\itshape\@IEEEabskeysecsize% 3740 \par\@IEEEgobbleleadPARNLSP} 3741 \else% compsoc not conference 3742 \def\abstract{\normalfont\@IEEEtweakunitybaselinestretch{1.15}\sffamily 3743 \[email protected] 3744 \@IEEEabskeysecsize\noindent\textbf{\abstractname}---\relax 3745 \else 3746 \begin{center}\vspace{-1.78ex}\@IEEEabskeysecsize\textbf{\abstractname}\end{center}\quotation\@IEEEabskeysecsize% 3747 \fi\@IEEEgobbleleadPARNLSP} 3748 \def\IEEEkeywords{\normalfont\@IEEEtweakunitybaselinestretch{1.15}\sffamily 3749 \[email protected] 3750 \@IEEEabskeysecsize\vskip 0.5\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip\noindent 3751 \textbf{\IEEEkeywordsname}---\relax 3752 \else 3753 \begin{center}\@IEEEabskeysecsize\textbf{\IEEEkeywordsname}\end{center}\quotation\@IEEEabskeysecsize% 3754 \fi\@IEEEgobbleleadPARNLSP} 3755 \fi 3756 \fi 3757 3758 3759 3760 % gobbles all leading \, \\ and \par, upon finding first token that 3761 % is not a \ , \\ or a \par, it ceases and returns that token 3762 % 3763 % used to strip leading \, \\ and \par from the input 3764 % so that such things in the beginning of an environment will not 3765 % affect the formatting of the text 3766 \long\def\@IEEEgobbleleadPARNLSP#1{\let\@IEEEswallowthistoken=0% 3767 \let\@IEEEgobbleleadPARNLSPtoken#1% 3768 \let\@IEEEgobbleleadPARtoken=\par% 3769 \let\@IEEEgobbleleadNLtoken=\\% 3770 \let\@IEEEgobbleleadSPtoken=\ % 3771 \def\@IEEEgobbleleadSPMACRO{\ }% 3772 \ifx\@IEEEgobbleleadPARNLSPtoken\@IEEEgobbleleadPARtoken% 3773 \let\@IEEEswallowthistoken=1% 3774 \fi% 3775 \ifx\@IEEEgobbleleadPARNLSPtoken\@IEEEgobbleleadNLtoken% 3776 \let\@IEEEswallowthistoken=1% 3777 \fi% 3778 \ifx\@IEEEgobbleleadPARNLSPtoken\@IEEEgobbleleadSPtoken% 3779 \let\@IEEEswallowthistoken=1% 3780 \fi% 3781 % a control space will come in as a macro 3782 % when it is the last one on a line 3783 \ifx\@IEEEgobbleleadPARNLSPtoken\@IEEEgobbleleadSPMACRO% 3784 \let\@IEEEswallowthistoken=1% 3785 \fi% 3786 % if we have to swallow this token, do so and taste the next one 3787 % else spit it out and stop gobbling 3788 \ifx\@IEEEswallowthistoken 1\let\@IEEEnextgobbleleadPARNLSP=\@IEEEgobbleleadPARNLSP\else% 3789 \let\@IEEEnextgobbleleadPARNLSP=#1\fi% 3790 \@IEEEnextgobbleleadPARNLSP}% 3791 3792 3793 3794 3795 % TITLING OF SECTIONS 3796 \def\@IEEEsectpunct{:\ \,} % Punctuation after run-in section heading (headings which are 3797 % part of the paragraphs), need little bit more than a single space 3798 % spacing from section number to title 3799 % compsoc conferences use regular period/space punctuation 3800 \ifCLASSOPTIONcompsoc 3801 \ifCLASSOPTIONconference 3802 \def\@IEEEsectpunct{.\ } 3803 \fi\fi 3804 3805 3806 \def\@seccntformat#1{\csname the#1dis\endcsname\hskip 0.5em\relax} 3807 3808 \ifCLASSOPTIONcompsoc 3809 % compsoc journals need extra spacing 3810 \ifCLASSOPTIONconference\else 3811 \def\@seccntformat#1{\csname the#1dis\endcsname\hskip 1em\relax} 3812 \fi\fi 3813 3814 %v1.7 put {} after #6 to allow for some types of user font control 3815 %and use \@@par rather than \par 3816 \def\@sect#1#2#3#4#5#6[#7]#8{% 3817 \ifnum #2>\[email protected] 3818 \let\@svsec\@empty 3819 \else 3820 \refstepcounter{#1}% 3821 % load section label and spacer into \@svsec 3822 \[email protected]\@svsec{\@seccntformat{#1}\relax}% 3823 \fi% 3824 \@tempskipa #5\relax 3825 \ifdim \@tempskipa>\[email protected]% tempskipa determines whether is treated as a high 3826 \begingroup #6{\relax% or low level heading 3827 \noindent % subsections are NOT indented 3828 % print top level headings. \@svsec is label, #8 is heading title 3829 % IEEE does not block indent the section title text, it flows like normal 3830 {\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\@@par}}% 3831 \endgroup 3832 \addcontentsline{toc}{#1}{\ifnum #2>\[email protected]\relax\else 3833 \protect\numberline{\csname the#1\endcsname}\fi#7}% 3834 \else % printout low level headings 3835 % svsechd seems to swallow the trailing space, protect it with \mbox{} 3836 % got rid of sectionmark stuff 3837 \def\@svsechd{#6{\hskip #3\relax\@svsec #8\@IEEEsectpunct\mbox{}}% 3838 \addcontentsline{toc}{#1}{\ifnum #2>\[email protected]\relax\else 3839 \protect\numberline{\csname the#1\endcsname}\fi#7}}% 3840 \fi%skip down 3841 \@xsect{#5}} 3842 3843 3844 % section* handler 3845 %v1.7 put {} after #4 to allow for some types of user font control 3846 %and use \@@par rather than \par 3847 \def\@ssect#1#2#3#4#5{\@tempskipa #3\relax 3848 \ifdim \@tempskipa>\[email protected] 3849 %\begingroup #4\@hangfrom{\hskip #1}{\interlinepenalty \@M #5\par}\endgroup 3850 % IEEE does not block indent the section title text, it flows like normal 3851 \begingroup \noindent #4{\relax{\hskip #1}{\interlinepenalty \@M #5\@@par}}\endgroup 3852 % svsechd swallows the trailing space, protect it with \mbox{} 3853 \else \def\@svsechd{#4{\hskip #1\relax #5\@IEEEsectpunct\mbox{}}}\fi 3854 \@xsect{#3}} 3855 3856 3857 %% SECTION heading spacing and font 3858 %% 3859 % arguments are: #1 - sectiontype name 3860 % (for \@sect) #2 - section level 3861 % #3 - section heading indent 3862 % #4 - top separation (absolute value used, neg indicates not to indent main text) 3863 % If negative, make stretch parts negative too! 3864 % #5 - (absolute value used) positive: bottom separation after heading, 3865 % negative: amount to indent main text after heading 3866 % Both #4 and #5 negative means to indent main text and use negative top separation 3867 % #6 - font control 3868 % You‘ve got to have \normalfont\normalsize in the font specs below to prevent 3869 % trouble when you do something like: 3870 % \section{Note}{\ttfamily TT-TEXT} is known to ... 3871 % IEEE sometimes REALLY stretches the area before a section 3872 % heading by up to about 0.5in. However, it may not be a good 3873 % idea to let LaTeX have quite this much rubber. 3874 \ifCLASSOPTIONconference% 3875 % IEEE wants section heading spacing to decrease for conference mode 3876 \def\section{\@startsection{section}{1}{\[email protected]}{1.5ex plus 1.5ex minus 0.5ex}% 3877 {0.7ex plus 1ex minus 0ex}{\normalfont\normalsize\centering\scshape}}% 3878 \def\subsection{\@startsection{subsection}{2}{\[email protected]}{1.5ex plus 1.5ex minus 0.5ex}% 3879 {0.7ex plus .5ex minus 0ex}{\normalfont\normalsize\itshape}}% 3880 \else % for journals 3881 \def\section{\@startsection{section}{1}{\[email protected]}{3.0ex plus 1.5ex minus 1.5ex}% V1.6 3.0ex from 3.5ex 3882 {0.7ex plus 1ex minus 0ex}{\normalfont\normalsize\centering\scshape}}% 3883 \def\subsection{\@startsection{subsection}{2}{\[email protected]}{3.5ex plus 1.5ex minus 1.5ex}% 3884 {0.7ex plus .5ex minus 0ex}{\normalfont\normalsize\itshape}}% 3885 \fi 3886 3887 % for both journals and conferences 3888 % decided to put in a little rubber above the section, might help somebody 3889 \def\subsubsection{\@startsection{subsubsection}{3}{\parindent}{0ex plus 0.1ex minus 0.1ex}% 3890 {0ex}{\normalfont\normalsize\itshape}}% 3891 \def\paragraph{\@startsection{paragraph}{4}{2\parindent}{0ex plus 0.1ex minus 0.1ex}% 3892 {0ex}{\normalfont\normalsize\itshape}}% 3893 3894 3895 % compsoc 3896 \ifCLASSOPTIONcompsoc 3897 \ifCLASSOPTIONconference 3898 % compsoc conference 3899 \def\section{\@startsection{section}{1}{\[email protected]}{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}% 3900 {1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}{\normalfont\large\bfseries}}% 3901 \def\subsection{\@startsection{subsection}{2}{\[email protected]}{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}% 3902 {1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}{\normalfont\sublargesize\bfseries}}% 3903 \def\subsubsection{\@startsection{subsubsection}{3}{\[email protected]}{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}% 3904 {0ex}{\normalfont\normalsize\bfseries}}% 3905 \def\paragraph{\@startsection{paragraph}{4}{2\parindent}{0ex plus 0.1ex minus 0.1ex}% 3906 {0ex}{\normalfont\normalsize}}% 3907 \else% compsoc journals 3908 % use negative top separation as compsoc journals do not indent paragraphs after section titles 3909 \def\section{\@startsection{section}{1}{\[email protected]}{-3ex plus -2ex minus -1.5ex}% 3910 {0.7ex plus 1ex minus 0ex}{\normalfont\large\sffamily\bfseries\scshape}}% 3911 % Note that subsection and smaller may not be correct for the Computer Society, 3912 % I have to look up an example. 3913 \def\subsection{\@startsection{subsection}{2}{\[email protected]}{-3.5ex plus -1.5ex minus -1.5ex}% 3914 {0.7ex plus .5ex minus 0ex}{\normalfont\normalsize\sffamily\bfseries}}% 3915 \def\subsubsection{\@startsection{subsubsection}{3}{\[email protected]}{-2.5ex plus -1ex minus -1ex}% 3916 {0.5ex plus 0.5ex minus 0ex}{\normalfont\normalsize\sffamily\itshape}}% 3917 \def\paragraph{\@startsection{paragraph}{4}{2\parindent}{-0ex plus -0.1ex minus -0.1ex}% 3918 {0ex}{\normalfont\normalsize}}% 3919 \fi\fi 3920 3921 3922 3923 3924 %% ENVIRONMENTS 3925 % "box" symbols at end of proofs 3926 \def\IEEEQEDclosed{\mbox{\rule[0pt]{1.3ex}{1.3ex}}} % for a filled box 3927 % V1.6 some journals use an open box instead that will just fit around a closed one 3928 \def\IEEEQEDopen{{\setlength{\fboxsep}{0pt}\setlength{\fboxrule}{0.2pt}\fbox{\rule[0pt]{0pt}{1.3ex}\rule[0pt]{1.3ex}{0pt}}}} 3929 \ifCLASSOPTIONcompsoc 3930 \def\IEEEQED{\IEEEQEDopen} % default to open for compsoc 3931 \else 3932 \def\IEEEQED{\IEEEQEDclosed} % otherwise default to closed 3933 \fi 3934 3935 % v1.7 name change to avoid namespace collision with amsthm. Also add support 3936 % for an optional argument. 3937 \def\IEEEproof{\@ifnextchar[{\@IEEEproof}{\@IEEEproof[\IEEEproofname]}} 3938 \def\@IEEEproof[#1]{\par\noindent\hspace{2em}{\itshape #1: }} 3939 \def\endIEEEproof{\hspace*{\fill}~\IEEEQED\par} 3940 3941 3942 %\itemindent is set to \[email protected] by list, so define new temporary variable 3943 \newdimen\@IEEEtmpitemindent 3944 \def\@begintheorem#1#2{\@IEEEtmpitemindent\itemindent\topsep 0pt\rmfamily\trivlist% 3945 \item[\hskip \labelsep{\indent\itshape #1\ #2:}]\itemindent\@IEEEtmpitemindent} 3946 \def\@opargbegintheorem#1#2#3{\@IEEEtmpitemindent\itemindent\topsep 0pt\rmfamily \trivlist% 3947 % V1.6 IEEE is back to using () around theorem names which are also in italics 3948 % Thanks to Christian Peel for reporting this. 3949 \item[\hskip\labelsep{\indent\itshape #1\ #2\ (#3):}]\itemindent\@IEEEtmpitemindent} 3950 % V1.7 remove bogus \unskip that caused equations in theorems to collide with 3951 % lines below. 3952 \def\@endtheorem{\endtrivlist} 3953 3954 % V1.6 3955 % display command for the section the theorem is in - so that \thesection 3956 % is not used as this will be in Roman numerals when we want arabic. 3957 % LaTeX2e uses \def\@thmcounter#1{\noexpand\arabic{#1}} for the theorem number 3958 % (second part) display and \def\@thmcountersep{.} as a separator. 3959 % V1.7 intercept calls to the section counter and reroute to \@IEEEthmcounterinsection 3960 % to allow \appendix(ices} to override as needed. 3961 % 3962 % special handler for sections, allows appendix(ices) to override 3963 \gdef\@IEEEthmcounterinsection#1{\arabic{#1}} 3964 % string macro 3965 \edef\@IEEEstringsection{section} 3966 3967 % redefine the #1#2[#3] form of newtheorem to use a hook to \@IEEEthmcounterinsection 3968 % if section in_counter is used 3969 \def\@xnthm#1#2[#3]{% 3970 \expandafter\@ifdefinable\csname #1\endcsname 3971 {\@definecounter{#1}\@newctr{#1}[#3]% 3972 \edef\@IEEEstringtmp{#3} 3973 \ifx\@IEEEstringtmp\@IEEEstringsection 3974 \expandafter\xdef\csname the#1\endcsname{% 3975 \noexpand\@IEEEthmcounterinsection{#3}\@thmcountersep 3976 \@thmcounter{#1}}% 3977 \else 3978 \expandafter\xdef\csname the#1\endcsname{% 3979 \expandafter\noexpand\csname the#3\endcsname \@thmcountersep 3980 \@thmcounter{#1}}% 3981 \fi 3982 \global\@namedef{#1}{\@thm{#1}{#2}}% 3983 \global\@namedef{end#1}{\@endtheorem}}} 3984 3985 3986 3987 %% SET UP THE DEFAULT PAGESTYLE 3988 \[email protected] 3989 \pagenumbering{arabic} 3990 3991 % normally the page counter starts at 1 3992 \setcounter{page}{1} 3993 % however, for peerreview the cover sheet is page 0 or page -1 3994 % (for duplex printing) 3995 \ifCLASSOPTIONpeerreview 3996 \[email protected] 3997 \setcounter{page}{-1} 3998 \else 3999 \setcounter{page}{0} 4000 \fi 4001 \fi 4002 4003 % standard book class behavior - let bottom line float up and down as 4004 % needed when single sided 4005 \ifCLASSOPTIONtwoside\else\raggedbottom\fi 4006 % if two column - turn on twocolumn, allow word spacings to stretch more and 4007 % enforce a rigid position for the last lines 4008 \ifCLASSOPTIONtwocolumn 4009 % the peer review option delays invoking twocolumn 4010 \ifCLASSOPTIONpeerreview\else 4011 \twocolumn 4012 \fi 4013 \sloppy 4014 \flushbottom 4015 \fi 4016 4017 4018 4019 4020 % \APPENDIX and \APPENDICES definitions 4021 4022 % This is the \@ifmtarg command from the LaTeX ifmtarg package 4023 % by Peter Wilson (CUA) and Donald Arseneau 4024 % \@ifmtarg is used to determine if an argument to a command 4025 % is present or not. 4026 % For instance: 4027 % \@ifmtarg{#1}{\typeout{empty}}{\typeout{has something}} 4028 % \@ifmtarg is used with our redefined \section command if 4029 % \appendices is invoked. 4030 % The command \section will behave slightly differently depending 4031 % on whether the user specifies a title: 4032 % \section{My appendix title} 4033 % or not: 4034 % \section{} 4035 % This way, we can eliminate the blank lines where the title 4036 % would be, and the unneeded : after Appendix in the table of 4037 % contents 4038 \begingroup 4039 \catcode`\Q=3 4040 \long\gdef\@ifmtarg#1{\@xifmtarg#1QQ\@secondoftwo\@firstoftwo\@nil} 4041 \long\gdef\@xifmtarg#1#2Q#3#4#5\@nil{#4} 4042 \endgroup 4043 % end of \@ifmtarg defs 4044 4045 4046 % V1.7 4047 % command that allows the one time saving of the original definition 4048 % of section to \@IEEEappendixsavesection for \appendix or \appendices 4049 % we don‘t save \section here as it may be redefined later by other 4050 % packages (hyperref.sty, etc.) 4051 \def\@IEEEsaveoriginalsectiononce{\let\@IEEEappendixsavesection\section 4052 \let\@IEEEsaveoriginalsectiononce\relax} 4053 4054 % neat trick to grab and process the argument from \section{argument} 4055 % we process differently if the user invoked \section{} with no 4056 % argument (title) 4057 % note we reroute the call to the old \section* 4058 \def\@IEEEprocessthesectionargument#1{% 4059 \@ifmtarg{#1}{% 4060 \@IEEEappendixsavesection*{\appendixname~\thesectiondis}% 4061 \addcontentsline{toc}{section}{\appendixname~\thesection}}{% 4062 \@IEEEappendixsavesection*{\appendixname~\thesectiondis \\* #1}% 4063 \addcontentsline{toc}{section}{\appendixname~\thesection: #1}}} 4064 4065 % we use this if the user calls \section{} after 4066 % \appendix-- which has no meaning. So, we ignore the 4067 % command and its argument. Then, warn the user. 4068 \def\@IEEEdestroythesectionargument#1{\typeout{** WARNING: Ignoring useless 4069 \protect\section\space in Appendix (line \the\inputlineno).}} 4070 4071 4072 % remember \thesection forms will be displayed in \ref calls 4073 % and in the Table of Contents. 4074 % The \sectiondis form is used in the actual heading itself 4075 4076 % appendix command for one single appendix 4077 % normally has no heading. However, if you want a 4078 % heading, you can do so via the optional argument: 4079 % \appendix[Optional Heading] 4080 \def\appendix{\relax} 4081 \renewcommand{\appendix}[1][]{\@IEEEsaveoriginalsectiononce\par 4082 % v1.6 keep hyperref‘s identifiers unique 4083 \gdef\theHsection{Appendix.A}% 4084 % v1.6 adjust hyperref‘s string name for the section 4085 \xdef\[email protected]{appendix}% 4086 \setcounter{section}{0}% 4087 \setcounter{subsection}{0}% 4088 \setcounter{subsubsection}{0}% 4089 \setcounter{paragraph}{0}% 4090 \gdef\thesection{A}% 4091 \gdef\thesectiondis{}% 4092 \gdef\thesubsection{\Alph{subsection}}% 4093 \gdef\@IEEEthmcounterinsection##1{A} 4094 \refstepcounter{section}% update the \ref counter 4095 \@ifmtarg{#1}{\@IEEEappendixsavesection*{\appendixname}% 4096 \addcontentsline{toc}{section}{\appendixname}}{% 4097 \@IEEEappendixsavesection*{\appendixname~\\* #1}% 4098 \addcontentsline{toc}{section}{\appendixname: #1}}% 4099 % redefine \section command for appendix 4100 % leave \section* as is 4101 \def\section{\@ifstar{\@IEEEappendixsavesection*}{% 4102 \@IEEEdestroythesectionargument}}% throw out the argument 4103 % of the normal form 4104 } 4105 4106 4107 4108 % appendices command for multiple appendices 4109 % user then calls \section with an argument (possibly empty) to 4110 % declare the individual appendices 4111 \def\appendices{\@IEEEsaveoriginalsectiononce\par 4112 % v1.6 keep hyperref‘s identifiers unique 4113 \gdef\theHsection{Appendix.\Alph{section}}% 4114 % v1.6 adjust hyperref‘s string name for the section 4115 \xdef\[email protected]{appendix}% 4116 \setcounter{section}{-1}% we want \refstepcounter to use section 0 4117 \setcounter{subsection}{0}% 4118 \setcounter{subsubsection}{0}% 4119 \setcounter{paragraph}{0}% 4120 \ifCLASSOPTIONromanappendices% 4121 \gdef\thesection{\Roman{section}}% 4122 \gdef\thesectiondis{\Roman{section}}% 4123 \@IEEEcompsocconfonly{\gdef\thesectiondis{\Roman{section}.}}% 4124 \gdef\@IEEEthmcounterinsection##1{A\arabic{##1}} 4125 \else% 4126 \gdef\thesection{\Alph{section}}% 4127 \gdef\thesectiondis{\Alph{section}}% 4128 \@IEEEcompsocconfonly{\gdef\thesectiondis{\Alph{section}.}}% 4129 \gdef\@IEEEthmcounterinsection##1{\Alph{##1}} 4130 \fi% 4131 \refstepcounter{section}% update the \ref counter 4132 \setcounter{section}{0}% NEXT \section will be the FIRST appendix 4133 % redefine \section command for appendices 4134 % leave \section* as is 4135 \def\section{\@ifstar{\@IEEEappendixsavesection*}{% process the *-form 4136 \refstepcounter{section}% or is a new section so, 4137 \@IEEEprocessthesectionargument}}% process the argument 4138 % of the normal form 4139 } 4140 4141 4142 4143 % \IEEEPARstart 4144 % Definition for the big two line drop cap letter at the beginning of the 4145 % first paragraph of journal papers. The first argument is the first letter 4146 % of the first word, the second argument is the remaining letters of the 4147 % first word which will be rendered in upper case. 4148 % In V1.6 this has been completely rewritten to: 4149 % 4150 % 1. no longer have problems when the user begins an environment 4151 % within the paragraph that uses \IEEEPARstart. 4152 % 2. auto-detect and use the current font family 4153 % 3. revise handling of the space at the end of the first word so that 4154 % interword glue will now work as normal. 4155 % 4. produce correctly aligned edges for the (two) indented lines. 4156 % 4157 % We generalize things via control macros - playing with these is fun too. 4158 % 4159 % V1.7 added more control macros to make it easy for IEEEtrantools.sty users 4160 % to change the font style. 4161 % 4162 % the number of lines that are indented to clear it 4163 % may need to increase if using decenders 4164 \def\@IEEEPARstartDROPLINES{2} 4165 % minimum number of lines left on a page to allow a \@IEEEPARstart 4166 % Does not take into consideration rubber shrink, so it tends to 4167 % be overly cautious 4168 \def\@IEEEPARstartMINPAGELINES{2} 4169 % V1.7 the height of the drop cap is adjusted to match the height of this text 4170 % in the current font (when \IEEEPARstart is called). 4171 \def\@IEEEPARstartHEIGHTTEXT{T} 4172 % the depth the letter is lowered below the baseline 4173 % the height (and size) of the letter is determined by the sum 4174 % of this value and the height of the \@IEEEPARstartHEIGHTTEXT in the current 4175 % font. It is a good idea to set this value in terms of the baselineskip 4176 % so that it can respond to changes therein. 4177 \def\@IEEEPARstartDROPDEPTH{1.1\baselineskip} 4178 % V1.7 the font the drop cap will be rendered in, 4179 % can take zero or one argument. 4180 \def\@IEEEPARstartFONTSTYLE{\bfseries} 4181 % V1.7 any additional, non-font related commands needed to modify 4182 % the drop cap letter, can take zero or one argument. 4183 \def\@IEEEPARstartCAPSTYLE{\MakeUppercase} 4184 % V1.7 the font that will be used to render the rest of the word, 4185 % can take zero or one argument. 4186 \def\@IEEEPARstartWORDFONTSTYLE{\relax} 4187 % V1.7 any additional, non-font related commands needed to modify 4188 % the rest of the word, can take zero or one argument. 4189 \def\@IEEEPARstartWORDCAPSTYLE{\MakeUppercase} 4190 % This is the horizontal separation distance from the drop letter to the main text. 4191 % Lengths that depend on the font (e.g., ex, em, etc.) will be referenced 4192 % to the font that is active when \IEEEPARstart is called. 4193 \def\@IEEEPARstartSEP{0.15em} 4194 % V1.7 horizontal offset applied to the left of the drop cap. 4195 \def\@IEEEPARstartHOFFSET{0em} 4196 % V1.7 Italic correction command applied at the end of the drop cap. 4197 \def\@IEEEPARstartITLCORRECT{\/} 4198 4199 % V1.7 compoc uses nonbold drop cap and small caps word style 4200 \ifCLASSOPTIONcompsoc 4201 \def\@IEEEPARstartFONTSTYLE{\mdseries} 4202 \def\@IEEEPARstartWORDFONTSTYLE{\scshape} 4203 \def\@IEEEPARstartWORDCAPSTYLE{\relax} 4204 \fi 4205 4206 % definition of \IEEEPARstart 4207 % THIS IS A CONTROLLED SPACING AREA, DO NOT ALLOW SPACES WITHIN THESE LINES 4208 % 4209 % The token \@IEEEPARstartfont will be globally defined after the first use 4210 % of \IEEEPARstart and will be a font command which creates the big letter 4211 % The first argument is the first letter of the first word and the second 4212 % argument is the rest of the first word(s). 4213 \def\IEEEPARstart#1#2{\par{% 4214 % if this page does not have enough space, break it and lets start 4215 % on a new one 4216 \@IEEEtranneedspace{\@IEEEPARstartMINPAGELINES\baselineskip}{\relax}% 4217 % V1.7 move this up here in case user uses \textbf for \@IEEEPARstartFONTSTYLE 4218 % which uses command \leavevmode which causes an unwanted \indent to be issued 4219 \noindent 4220 % calculate the desired height of the big letter 4221 % it extends from the top of \@IEEEPARstartHEIGHTTEXT in the current font 4222 % down to \@IEEEPARstartDROPDEPTH below the current baseline 4223 \settoheight{\@IEEEtrantmpdimenA}{\@IEEEPARstartHEIGHTTEXT}% 4224 \addtolength{\@IEEEtrantmpdimenA}{\@IEEEPARstartDROPDEPTH}% 4225 % extract the name of the current font in bold 4226 % and place it in \@IEEEPARstartFONTNAME 4227 \def\@IEEEPARstartGETFIRSTWORD##1 ##2\relax{##1}% 4228 {\@IEEEPARstartFONTSTYLE{\selectfont\edef\@IEEEPARstartFONTNAMESPACE{\fontname\font\space}% 4229 \xdef\@IEEEPARstartFONTNAME{\expandafter\@IEEEPARstartGETFIRSTWORD\@IEEEPARstartFONTNAMESPACE\relax}}}% 4230 % define a font based on this name with a point size equal to the desired 4231 % height of the drop letter 4232 \font\@IEEEPARstartsubfont\@IEEEPARstartFONTNAME\space at \@IEEEtrantmpdimenA\relax% 4233 % save this value as a counter (integer) value (sp points) 4234 \@IEEEtrantmpcountA=\@IEEEtrantmpdimenA% 4235 % now get the height of the actual letter produced by this font size 4236 \settoheight{\@IEEEtrantmpdimenB}{\@IEEEPARstartsubfont\@IEEEPARstartCAPSTYLE{#1}}% 4237 % If something bogus happens like the first argument is empty or the 4238 % current font is strange, do not allow a zero height. 4239 \ifdim\@IEEEtrantmpdimenB=0pt\relax% 4240 \typeout{** WARNING: IEEEPARstart drop letter has zero height! (line \the\inputlineno)}% 4241 \typeout{ Forcing the drop letter font size to 10pt.}% 4242 \@IEEEtrantmpdimenB=10pt% 4243 \fi% 4244 % and store it as a counter 4245 \@IEEEtrantmpcountB=\@IEEEtrantmpdimenB% 4246 % Since a font size doesn‘t exactly correspond to the height of the capital 4247 % letters in that font, the actual height of the letter, \@IEEEtrantmpcountB, 4248 % will be less than that desired, \@IEEEtrantmpcountA 4249 % we need to raise the font size, \@IEEEtrantmpdimenA 4250 % by \@IEEEtrantmpcountA / \@IEEEtrantmpcountB 4251 % But, TeX doesn‘t have floating point division, so we have to use integer 4252 % division. Hence the use of the counters. 4253 % We need to reduce the denominator so that the loss of the remainder will 4254 % have minimal affect on the accuracy of the result 4255 \divide\@IEEEtrantmpcountB by 200% 4256 \divide\@IEEEtrantmpcountA by \@IEEEtrantmpcountB% 4257 % Then reequalize things when we use TeX‘s ability to multiply by 4258 % floating point values 4259 \@IEEEtrantmpdimenB=0.005\@IEEEtrantmpdimenA% 4260 \multiply\@IEEEtrantmpdimenB by \@IEEEtrantmpcountA% 4261 % \@IEEEPARstartfont is globaly set to the calculated font of the big letter 4262 % We need to carry this out of the local calculation area to to create the 4263 % big letter. 4264 \global\font\@IEEEPARstartfont\@IEEEPARstartFONTNAME\space at \@IEEEtrantmpdimenB% 4265 % Now set \@IEEEtrantmpdimenA to the width of the big letter 4266 % We need to carry this out of the local calculation area to set the 4267 % hanging indent 4268 \settowidth{\global\@IEEEtrantmpdimenA}{\@IEEEPARstartfont 4269 \@IEEEPARstartCAPSTYLE{#1\@IEEEPARstartITLCORRECT}}}% 4270 % end of the isolated calculation environment 4271 % add in the extra clearance we want 4272 \advance\@IEEEtrantmpdimenA by \@IEEEPARstartSEP\relax% 4273 % add in the optional offset 4274 \advance\@IEEEtrantmpdimenA by \@IEEEPARstartHOFFSET\relax% 4275 % V1.7 don‘t allow negative offsets to produce negative hanging indents 4276 \@IEEEtrantmpdimenB\@IEEEtrantmpdimenA 4277 \ifnum\@IEEEtrantmpdimenB < 0 \@IEEEtrantmpdimenB 0pt\fi 4278 % \@IEEEtrantmpdimenA has the width of the big letter plus the 4279 % separation space and \@IEEEPARstartfont is the font we need to use 4280 % Now, we make the letter and issue the hanging indent command 4281 % The letter is placed in a box of zero width and height so that other 4282 % text won‘t be displaced by it. 4283 \hangindent\@IEEEtrantmpdimenB\hangafter=-\@IEEEPARstartDROPLINES% 4284 \makebox[0pt][l]{\hspace{-\@IEEEtrantmpdimenA}% 4285 \raisebox{-\@IEEEPARstartDROPDEPTH}[0pt][0pt]{\hspace{\@IEEEPARstartHOFFSET}% 4286 \@IEEEPARstartfont\@IEEEPARstartCAPSTYLE{#1\@IEEEPARstartITLCORRECT}% 4287 \hspace{\@IEEEPARstartSEP}}}% 4288 {\@IEEEPARstartWORDFONTSTYLE{\@IEEEPARstartWORDCAPSTYLE{\selectfont#2}}}} 4289 4290 4291 4292 4293 4294 4295 % determines if the space remaining on a given page is equal to or greater 4296 % than the specified space of argument one 4297 % if not, execute argument two (only if the remaining space is greater than zero) 4298 % and issue a \newpage 4299 % 4300 % example: \@IEEEtranneedspace{2in}{\vfill} 4301 % 4302 % Does not take into consideration rubber shrinkage, so it tends to 4303 % be overly cautious 4304 % Based on an example posted by Donald Arseneau 4305 % Note this macro uses \@IEEEtrantmpdimenB internally for calculations, 4306 % so DO NOT PASS \@IEEEtrantmpdimenB to this routine 4307 % if you need a dimen register, import with \@IEEEtrantmpdimenA instead 4308 \def\@IEEEtranneedspace#1#2{\penalty-100\begingroup%shield temp variable 4309 \@IEEEtrantmpdimenB\pagegoal\advance\@IEEEtrantmpdimenB-\pagetotal% space left 4310 \ifdim #1>\@IEEEtrantmpdimenB\relax% not enough space left 4311 \ifdim\@IEEEtrantmpdimenB>\[email protected]\relax #2\fi% 4312 \newpage% 4313 \fi\endgroup} 4314 4315 4316 4317 % IEEEbiography ENVIRONMENT 4318 % Allows user to enter biography leaving place for picture (adapts to font size) 4319 % As of V1.5, a new optional argument allows you to have a real graphic! 4320 % V1.5 and later also fixes the "colliding biographies" which could happen when a 4321 % biography‘s text was shorter than the space for the photo. 4322 % MDS 7/2001 4323 % V1.6 prevent multiple biographies from making multiple TOC entries 4324 \newif\[email protected] 4325 \global\@IEEEbiographyTOCentrynotmadetrue 4326 4327 % biography counter so hyperref can jump directly to the biographies 4328 % and not just the previous section 4329 \newcounter{IEEEbiography} 4330 \setcounter{IEEEbiography}{0} 4331 4332 % photo area size 4333 \def\@IEEEBIOphotowidth{1.0in} % width of the biography photo area 4334 \def\@IEEEBIOphotodepth{1.25in} % depth (height) of the biography photo area 4335 % area cleared for photo 4336 \def\@IEEEBIOhangwidth{1.14in} % width cleared for the biography photo area 4337 \def\@IEEEBIOhangdepth{1.25in} % depth cleared for the biography photo area 4338 % actual depth will be a multiple of 4339 % \baselineskip, rounded up 4340 \def\@IEEEBIOskipN{4\baselineskip}% nominal value of the vskip above the biography 4341 4342 \newenvironment{IEEEbiography}[2][]{\normalfont\@IEEEcompsoconly{\sffamily}\footnotesize% 4343 \unitlength 1in\parskip=0pt\par\parindent 1em\interlinepenalty500% 4344 % we need enough space to support the hanging indent 4345 % the nominal value of the spacer 4346 % and one extra line for good measure 4347 \@IEEEtrantmpdimenA=\@IEEEBIOhangdepth% 4348 \advance\@IEEEtrantmpdimenA by \@IEEEBIOskipN% 4349 \advance\@IEEEtrantmpdimenA by 1\baselineskip% 4350 % if this page does not have enough space, break it and lets start 4351 % with a new one 4352 \@IEEEtranneedspace{\@IEEEtrantmpdimenA}{\relax}% 4353 % nominal spacer can strech, not shrink use 1fil so user can out stretch with \vfill 4354 \vskip \@IEEEBIOskipN plus 1fil minus 0\baselineskip% 4355 % the default box for where the photo goes 4356 \def\@IEEEtempbiographybox{{\setlength{\fboxsep}{0pt}\framebox{% 4357 \begin{minipage}[b][\@IEEEBIOphotodepth][c]{\@IEEEBIOphotowidth}\centering PLACE\\ PHOTO\\ HERE \end{minipage}}}}% 4358 % 4359 % detect if the optional argument was supplied, this requires the 4360 % \@ifmtarg command as defined in the appendix section above 4361 % and if so, override the default box with what they want 4362 \@ifmtarg{#1}{\relax}{\def\@IEEEtempbiographybox{\mbox{\begin{minipage}[b][\@IEEEBIOphotodepth][c]{\@IEEEBIOphotowidth}% 4363 \centering% 4364 #1% 4365 \end{minipage}}}}% end if optional argument supplied 4366 % Make an entry into the table of contents only if we have not done so before 4367 \[email protected]% 4368 % link labels to the biography counter so hyperref will jump 4369 % to the biography, not the previous section 4370 \setcounter{IEEEbiography}{-1}% 4371 \refstepcounter{IEEEbiography}% 4372 \addcontentsline{toc}{section}{Biographies}% 4373 \global\@IEEEbiographyTOCentrynotmadefalse% 4374 \fi% 4375 % one more biography 4376 \refstepcounter{IEEEbiography}% 4377 % Make an entry for this name into the table of contents 4378 \addcontentsline{toc}{subsection}{#2}% 4379 % V1.6 properly handle if a new paragraph should occur while the 4380 % hanging indent is still active. Do this by redefining \par so 4381 % that it will not start a new paragraph. (But it will appear to the 4382 % user as if it did.) Also, strip any leading pars, newlines, or spaces. 4383 \let\@IEEEBIOORGparCMD=\par% save the original \par command 4384 \edef\par{\hfil\break\indent}% the new \par will not be a "real" \par 4385 \settoheight{\@IEEEtrantmpdimenA}{\@IEEEtempbiographybox}% get height of biography box 4386 \@IEEEtrantmpdimenB=\@IEEEBIOhangdepth% 4387 \@IEEEtrantmpcountA=\@IEEEtrantmpdimenB% countA has the hang depth 4388 \divide\@IEEEtrantmpcountA by \baselineskip% calculates lines needed to produce the hang depth 4389 \advance\@IEEEtrantmpcountA by 1% ensure we overestimate 4390 % set the hanging indent 4391 \hangindent\@IEEEBIOhangwidth% 4392 \hangafter-\@IEEEtrantmpcountA% 4393 % reference the top of the photo area to the top of a capital T 4394 \settoheight{\@IEEEtrantmpdimenB}{\mbox{T}}% 4395 % set the photo box, give it zero width and height so as not to disturb anything 4396 \noindent\makebox[0pt][l]{\hspace{-\@IEEEBIOhangwidth}\raisebox{\@IEEEtrantmpdimenB}[0pt][0pt]{% 4397 \raisebox{-\@IEEEBIOphotodepth}[0pt][0pt]{\@IEEEtempbiographybox}}}% 4398 % now place the author name and begin the bio text 4399 \noindent\textbf{#2\ }\@IEEEgobbleleadPARNLSP}{\relax\let\par=\@IEEEBIOORGparCMD\par% 4400 % 7/2001 V1.5 detect when the biography text is shorter than the photo area 4401 % and pad the unused area - preventing a collision from the next biography entry 4402 % MDS 4403 \ifnum \prevgraf <\@IEEEtrantmpcountA\relax% detect when the biography text is shorter than the photo 4404 \advance\@IEEEtrantmpcountA by -\prevgraf% calculate how many lines we need to pad 4405 \advance\@IEEEtrantmpcountA by -1\relax% we compensate for the fact that we indented an extra line 4406 \@IEEEtrantmpdimenA=\baselineskip% calculate the length of the padding 4407 \multiply\@IEEEtrantmpdimenA by \@IEEEtrantmpcountA% 4408 \noindent\rule{0pt}{\@IEEEtrantmpdimenA}% insert an invisible support strut 4409 \fi% 4410 \par\normalfont} 4411 4412 4413 4414 % V1.6 4415 % added biography without a photo environment 4416 \newenvironment{IEEEbiographynophoto}[1]{% 4417 % Make an entry into the table of contents only if we have not done so before 4418 \[email protected]% 4419 % link labels to the biography counter so hyperref will jump 4420 % to the biography, not the previous section 4421 \setcounter{IEEEbiography}{-1}% 4422 \refstepcounter{IEEEbiography}% 4423 \addcontentsline{toc}{section}{Biographies}% 4424 \global\@IEEEbiographyTOCentrynotmadefalse% 4425 \fi% 4426 % one more biography 4427 \refstepcounter{IEEEbiography}% 4428 % Make an entry for this name into the table of contents 4429 \addcontentsline{toc}{subsection}{#1}% 4430 \normalfont\@IEEEcompsoconly{\sffamily}\footnotesize\interlinepenalty500% 4431 \vskip 4\baselineskip plus 1fil minus 0\baselineskip% 4432 \parskip=0pt\par% 4433 \noindent\textbf{#1\ }\@IEEEgobbleleadPARNLSP}{\relax\par\normalfont} 4434 4435 4436 % provide the user with some old font commands 4437 % got this from article.cls 4438 \DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm} 4439 \DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf} 4440 \DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt} 4441 \DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf} 4442 \DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit} 4443 \DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl} 4444 \DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc} 4445 \DeclareRobustCommand*\cal{\@fontswitch\relax\mathcal} 4446 \DeclareRobustCommand*\mit{\@fontswitch\relax\mathnormal} 4447 4448 4449 % SPECIAL PAPER NOTICE COMMANDS 4450 % 4451 % holds the special notice text 4452 \def\@IEEEspecialpapernotice{\relax} 4453 4454 % for special papers, like invited papers, the user can do: 4455 % \IEEEspecialpapernotice{(Invited Paper)} before \maketitle 4456 \def\IEEEspecialpapernotice#1{\ifCLASSOPTIONconference% 4457 \def\@IEEEspecialpapernotice{{\sublargesize\textit{#1}\vspace*{1em}}}% 4458 \else% 4459 \def\@IEEEspecialpapernotice{{\\*[1.5ex]\sublargesize\textit{#1}}\vspace*{-2ex}}% 4460 \fi} 4461 4462 4463 4464 4465 % PUBLISHER ID COMMANDS 4466 % to insert a publisher‘s ID footer 4467 % V1.6 \IEEEpubid has been changed so that the change in page size and style 4468 % occurs in \maketitle. \IEEEpubid must now be issued prior to \maketitle 4469 % use \IEEEpubidadjcol as before - in the second column of the title page 4470 % These changes allow \maketitle to take the reduced page height into 4471 % consideration when dynamically setting the space between the author 4472 % names and the maintext. 4473 % 4474 % the amount the main text is pulled up to make room for the 4475 % publisher‘s ID footer 4476 % IEEE uses about 1.3\baselineskip for journals, 4477 % dynamic title spacing will clean up the fraction 4478 \def\@IEEEpubidpullup{1.3\baselineskip} 4479 \ifCLASSOPTIONtechnote 4480 % for technotes it must be an integer of baselineskip as there can be no 4481 % dynamic title spacing for two column mode technotes (the title is in the 4482 % in first column) and we should maintain an integer number of lines in the 4483 % second column 4484 % There are some examples (such as older issues of "Transactions on 4485 % Information Theory") in which IEEE really pulls the text off the ID for 4486 % technotes - about 0.55in (or 4\baselineskip). We‘ll use 2\baselineskip 4487 % and call it even. 4488 \def\@IEEEpubidpullup{2\baselineskip} 4489 \fi 4490 4491 % V1.7 compsoc does not use a pullup 4492 \ifCLASSOPTIONcompsoc 4493 \def\@IEEEpubidpullup{0pt} 4494 \fi 4495 4496 % holds the ID text 4497 \def\@IEEEpubid{\relax} 4498 4499 % flag so \maketitle can tell if \IEEEpubid was called 4500 \newif\[email protected] 4501 \global\@IEEEusingpubidfalse 4502 % issue this command in the page to have the ID at the bottom 4503 % V1.6 use before \maketitle 4504 \def\IEEEpubid#1{\def\@IEEEpubid{#1}\global\@IEEEusingpubidtrue} 4505 4506 4507 % command which will pull up (shorten) the column it is executed in 4508 % to make room for the publisher ID. Place in the second column of 4509 % the title page when using \IEEEpubid 4510 % Is smart enough not to do anything when in single column text or 4511 % if the user hasn‘t called \IEEEpubid 4512 % currently needed in for the second column of a page with the 4513 % publisher ID. If not needed in future releases, please provide this 4514 % command and define it as \relax for backward compatibility 4515 % v1.6b do not allow command to operate if the peer review option has been 4516 % selected because \IEEEpubidadjcol will not be on the cover page. 4517 % V1.7 do nothing if compsoc 4518 \def\IEEEpubidadjcol{\ifCLASSOPTIONcompsoc\else\ifCLASSOPTIONpeerreview\else 4519 \[email protected]\[email protected]\enlargethispage{-\@IEEEpubidpullup}\fi\fi\fi\fi} 4520 4521 % Special thanks to Peter Wilson, Daniel Luecking, and the other 4522 % gurus at comp.text.tex, for helping me to understand how best to 4523 % implement the IEEEpubid command in LaTeX. 4524 4525 4526 4527 %% Lockout some commands under various conditions 4528 4529 % general purpose bit bucket 4530 \newsavebox{\@IEEEtranrubishbin} 4531 4532 % flags to prevent multiple warning messages 4533 \newif\[email protected] 4534 \newif\[email protected] 4535 \newif\[email protected] 4536 \newif\[email protected] 4537 \newif\[email protected] 4538 \newif\[email protected] 4539 \newif\[email protected] 4540 \newif\[email protected] 4541 \@IEEEWARNthankstrue 4542 \@IEEEWARNIEEEPARstarttrue 4543 \@IEEEWARNIEEEbiographytrue 4544 \@IEEEWARNIEEEbiographynophototrue 4545 \@IEEEWARNIEEEpubidtrue 4546 \@IEEEWARNIEEEpubidadjcoltrue 4547 \@IEEEWARNIEEEmembershiptrue 4548 \@IEEEWARNIEEEaftertitletexttrue 4549 4550 4551 %% Lockout some commands when in various modes, but allow them to be restored if needed 4552 %% 4553 % save commands which might be locked out 4554 % so that the user can later restore them if needed 4555 \let\@IEEESAVECMDthanks\thanks 4556 \let\@IEEESAVECMDIEEEPARstart\IEEEPARstart 4557 \let\@IEEESAVECMDIEEEbiography\IEEEbiography 4558 \let\@IEEESAVECMDendIEEEbiography\endIEEEbiography 4559 \let\@IEEESAVECMDIEEEbiographynophoto\IEEEbiographynophoto 4560 \let\@IEEESAVECMDendIEEEbiographynophoto\endIEEEbiographynophoto 4561 \let\@IEEESAVECMDIEEEpubid\IEEEpubid 4562 \let\@IEEESAVECMDIEEEpubidadjcol\IEEEpubidadjcol 4563 \let\@IEEESAVECMDIEEEmembership\IEEEmembership 4564 \let\@IEEESAVECMDIEEEaftertitletext\IEEEaftertitletext 4565 4566 4567 % disable \IEEEPARstart when in draft mode 4568 % This may have originally been done because the pre-V1.6 drop letter 4569 % algorithm had problems with a non-unity baselinestretch 4570 % At any rate, it seems too formal to have a drop letter in a draft 4571 % paper. 4572 \ifCLASSOPTIONdraftcls 4573 \def\IEEEPARstart#1#2{#1#2\[email protected]\typeout{** ATTENTION: \noexpand\IEEEPARstart 4574 is disabled in draft mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEPARstartfalse} 4575 \fi 4576 % and for technotes 4577 \ifCLASSOPTIONtechnote 4578 \def\IEEEPARstart#1#2{#1#2\[email protected]\typeout{** WARNING: \noexpand\IEEEPARstart 4579 is locked out for technotes (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEPARstartfalse} 4580 \fi 4581 4582 4583 % lockout unneeded commands when in conference mode 4584 \ifCLASSOPTIONconference 4585 % when locked out, \thanks, \IEEEbiography, \IEEEbiographynophoto, \IEEEpubid, 4586 % \IEEEmembership and \IEEEaftertitletext will all swallow their given text. 4587 % \IEEEPARstart will output a normal character instead 4588 % warn the user about these commands only once to prevent the console screen 4589 % from filling up with redundant messages 4590 \def\thanks#1{\[email protected]\typeout{** WARNING: \noexpand\thanks 4591 is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNthanksfalse} 4592 \def\IEEEPARstart#1#2{#1#2\[email protected]\typeout{** WARNING: \noexpand\IEEEPARstart 4593 is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEPARstartfalse} 4594 4595 4596 % LaTeX treats environments and commands with optional arguments differently. 4597 % the actual ("internal") command is stored as \\commandname 4598 % (accessed via \csname\string\commandname\endcsname ) 4599 % the "external" command \commandname is a macro with code to determine 4600 % whether or not the optional argument is presented and to provide the 4601 % default if it is absent. So, in order to save and restore such a command 4602 % we would have to save and restore \\commandname as well. But, if LaTeX 4603 % ever changes the way it names the internal names, the trick would break. 4604 % Instead let us just define a new environment so that the internal 4605 % name can be left undisturbed. 4606 \newenvironment{@IEEEbogusbiography}[2][]{\[email protected]\typeout{** WARNING: \noexpand\IEEEbiography 4607 is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEbiographyfalse% 4608 \setbox\@IEEEtranrubishbin\vbox\bgroup}{\egroup\relax} 4609 % and make biography point to our bogus biography 4610 \let\IEEEbiography=\@IEEEbogusbiography 4611 \let\endIEEEbiography=\[email protected] 4612 4613 \renewenvironment{IEEEbiographynophoto}[1]{\[email protected]\typeout{** WARNING: \noexpand\IEEEbiographynophoto 4614 is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEbiographynophotofalse% 4615 \setbox\@IEEEtranrubishbin\vbox\bgroup}{\egroup\relax} 4616 4617 \def\IEEEpubid#1{\[email protected]\typeout{** WARNING: \noexpand\IEEEpubid 4618 is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEpubidfalse} 4619 \def\IEEEpubidadjcol{\[email protected]\typeout{** WARNING: \noexpand\IEEEpubidadjcol 4620 is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEpubidadjcolfalse} 4621 \def\IEEEmembership#1{\[email protected]\typeout{** WARNING: \noexpand\IEEEmembership 4622 is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEmembershipfalse} 4623 \def\IEEEaftertitletext#1{\[email protected]\typeout{** WARNING: \noexpand\IEEEaftertitletext 4624 is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEaftertitletextfalse} 4625 \fi 4626 4627 4628 % provide a way to restore the commands that are locked out 4629 \def\IEEEoverridecommandlockouts{% 4630 \typeout{** ATTENTION: Overriding command lockouts (line \the\inputlineno).}% 4631 \let\thanks\@IEEESAVECMDthanks% 4632 \let\IEEEPARstart\@IEEESAVECMDIEEEPARstart% 4633 \let\IEEEbiography\@IEEESAVECMDIEEEbiography% 4634 \let\endIEEEbiography\@IEEESAVECMDendIEEEbiography% 4635 \let\IEEEbiographynophoto\@IEEESAVECMDIEEEbiographynophoto% 4636 \let\endIEEEbiographynophoto\@IEEESAVECMDendIEEEbiographynophoto% 4637 \let\IEEEpubid\@IEEESAVECMDIEEEpubid% 4638 \let\IEEEpubidadjcol\@IEEESAVECMDIEEEpubidadjcol% 4639 \let\IEEEmembership\@IEEESAVECMDIEEEmembership% 4640 \let\IEEEaftertitletext\@IEEESAVECMDIEEEaftertitletext} 4641 4642 4643 4644 % need a backslash character for typeout output 4645 {\catcode`\|=0 \catcode`\\=12 4646 |xdef|@IEEEbackslash{\}} 4647 4648 4649 % hook to allow easy disabling of all legacy warnings 4650 \def\@IEEElegacywarn#1#2{\typeout{** ATTENTION: \@IEEEbackslash #1 is deprecated (line \the\inputlineno). 4651 Use \@IEEEbackslash #2 instead.}} 4652 4653 4654 % provide for legacy commands 4655 \def\authorblockA{\@IEEElegacywarn{authorblockA}{IEEEauthorblockA}\IEEEauthorblockA} 4656 \def\authorblockN{\@IEEElegacywarn{authorblockN}{IEEEauthorblockN}\IEEEauthorblockN} 4657 \def\authorrefmark{\@IEEElegacywarn{authorrefmark}{IEEEauthorrefmark}\IEEEauthorrefmark} 4658 \def\PARstart{\@IEEElegacywarn{PARstart}{IEEEPARstart}\IEEEPARstart} 4659 \def\pubid{\@IEEElegacywarn{pubid}{IEEEpubid}\IEEEpubid} 4660 \def\pubidadjcol{\@IEEElegacywarn{pubidadjcol}{IEEEpubidadjcol}\IEEEpubidadjcol} 4661 \def\QED{\@IEEElegacywarn{QED}{IEEEQED}\IEEEQED} 4662 \def\QEDclosed{\@IEEElegacywarn{QEDclosed}{IEEEQEDclosed}\IEEEQEDclosed} 4663 \def\QEDopen{\@IEEElegacywarn{QEDopen}{IEEEQEDopen}\IEEEQEDopen} 4664 \def\specialpapernotice{\@IEEElegacywarn{specialpapernotice}{IEEEspecialpapernotice}\IEEEspecialpapernotice} 4665 4666 4667 4668 % provide for legacy environments 4669 \def\biography{\@IEEElegacywarn{biography}{IEEEbiography}\IEEEbiography} 4670 \def\biographynophoto{\@IEEElegacywarn{biographynophoto}{IEEEbiographynophoto}\IEEEbiographynophoto} 4671 \def\keywords{\@IEEElegacywarn{keywords}{IEEEkeywords}\IEEEkeywords} 4672 \def\endbiography{\endIEEEbiography} 4673 \def\endbiographynophoto{\endIEEEbiographynophoto} 4674 \def\endkeywords{\endIEEEkeywords} 4675 4676 4677 % provide for legacy IED commands/lengths when possible 4678 \let\labelindent\IEEElabelindent 4679 \def\calcleftmargin{\@IEEElegacywarn{calcleftmargin}{IEEEcalcleftmargin}\IEEEcalcleftmargin} 4680 \def\setlabelwidth{\@IEEElegacywarn{setlabelwidth}{IEEEsetlabelwidth}\IEEEsetlabelwidth} 4681 \def\usemathlabelsep{\@IEEElegacywarn{usemathlabelsep}{IEEEusemathlabelsep}\IEEEusemathlabelsep} 4682 \def\iedlabeljustifyc{\@IEEElegacywarn{iedlabeljustifyc}{IEEEiedlabeljustifyc}\IEEEiedlabeljustifyc} 4683 \def\iedlabeljustifyl{\@IEEElegacywarn{iedlabeljustifyl}{IEEEiedlabeljustifyl}\IEEEiedlabeljustifyl} 4684 \def\iedlabeljustifyr{\@IEEElegacywarn{iedlabeljustifyr}{IEEEiedlabeljustifyr}\IEEEiedlabeljustifyr} 4685 4686 4687 4688 % let \proof use the IEEEtran version even after amsthm is loaded 4689 % \proof is now deprecated in favor of \IEEEproof 4690 \AtBeginDocument{\def\proof{\@IEEElegacywarn{proof}{IEEEproof}\IEEEproof}\def\endproof{\endIEEEproof}} 4691 4692 % V1.7 \overrideIEEEmargins is no longer supported. 4693 \def\overrideIEEEmargins{% 4694 \typeout{** WARNING: \string\overrideIEEEmargins \space no longer supported (line \the\inputlineno).}% 4695 \typeout{** Use the \string\CLASSINPUTinnersidemargin, \string\CLASSINPUToutersidemargin \space controls instead.}} 4696 4697 4698 \endinput 4699 4700 %%%%%%%%%%%%%%%%%%%%%%%%%%%%% End of IEEEtran.cls %%%%%%%%%%%%%%%%%%%%%%%%%%%% 4701 % That‘s all folks!
Draft-JSS.tex
1 %\documentclass[10pt,journal,cspaper,compsoc]{IEEETran} 2 \documentclass[journal]{IEEETran} 3 %\documentclass{comjnl} 4 \usepackage{times} 5 \usepackage{graphicx} 6 \usepackage{psfrag} 7 \usepackage{epsfig} 8 \usepackage{algorithm} 9 \usepackage{algorithmic} 10 %\usepackage{algpseudocode} 11 \usepackage{multicol} 12 \usepackage{multirow} 13 \usepackage{setspace} 14 15 \usepackage{cite} 16 \usepackage{array} 17 \usepackage{amssymb} 18 \usepackage[cmex10]{amsmath} 19 \interdisplaylinepenalty=2500 20 \usepackage{mdwmath} 21 \usepackage{mdwtab} 22 \usepackage[tight,footnotesize]{subfigure} 23 %\usepackage{fixltx2e} 24 \usepackage{mdwlist} 25 \usepackage[amssymb]{SIunits} 26 \usepackage[usenames]{color} 27 \usepackage{amsmath} 28 \usepackage{caption} 29 \usepackage{slashbox} 30 \usepackage{yhmath} 31 32 33 34 \begin{document} 35 36 \title{Quasi-Static Fault-Tolerant Scheduling Schemes for Energy-Efficient Hard Real-Time Systems} 37 \author{Tongquan~Wei,~\IEEEmembership{Member,~IEEE,} 38 Piyush~Mishra,~\IEEEmembership{Member,~IEEE,} 39 Kaijie~Wu,~\IEEEmembership{Member,~IEEE,} 40 and Junlong~Zhou 41 42 43 \thanks{T. Wei and J. Zhou are with the CS department of East China Normal University, Shanghai, China 200241 email: [email protected]} 44 \thanks{P. Mishra is with the GE Global Research, Niskayuna, NY 12309.} 45 \thanks{K. Wu are with the ECE department of University of Illinois, Chicago, IL 60607.} 46 \thanks{The preliminary version of this manuscript appeared in ICCAD, $2006$.} 47 \thanks{This work was supported in part by the Fundamental Research Funds for the Central Universities of China under the grant No. 78220021.} 48 } 49 \maketitle 50 51 52 53 \begin{abstract} 54 This paper investigates fault tolerance and Dynamic Voltage Scaling (DVS) in hard real-time systems. The authors present quasi-static task scheduling algorithms that consist of offline components and online components. The offline components are designed the way they enable the online components to achieve energy savings by using the dynamic slack due to variations in task execution times and uncertainties in fault occurrences. The proposed schemes utilize a fault model that considers the effects of voltage scaling on transient fault rate. Simulation results based on real-life task sets and processor data sheets show that the proposed scheduling schemes achieve energy savings of up to 50\% over the state-of-art low-energy offline scheduling techniques and incur negligible runtime overheads. A hard real-time real-life test bed has been developed allowing the validation of the proposed algorithms. 55 \end{abstract} 56 57 \begin{IEEEkeywords} 58 Energy-efficient dynamic scheduling, dynamic voltage scaling (DVS), fault tolerance, hard real-time embedded systems. 59 \end{IEEEkeywords} 60 61 62 63 64 \section {Introduction}\label{Introduction} 65 The number of faults in hardware, particularly the transient faults, has been rising continuously due to the increasing complexity of design, aggressive technology scaling, and extreme operating conditions. For example, the increasing integration level of transistors, reducing feature sizes, and lowering voltage levels are making the integrated circuits highly susceptible to radiation-induced bit-flips. In addition, high-energy particles, such as neutrons from cosmic radiation, are able to introduce transient faults in electronic systems \cite{NORMAND96}. On the other hand, a growing number of complex safety critical applications operate under extreme conditions and demand ultra-reliability and high performance. For example, hard real-time systems deployed in navigation, process control, and system surveillance require the high fault tolerance without sacrificing the feasibility of task sets. The need for reliability is rising even in non-critical applications which are prone to operate in harsher environments but have lower expectancy of failures. Common examples include outdoor sensor networks and massive communication infrastructure deployed in fields which suffer frequent physical abuse and are often exposed to strong radiation. 66 67 68 Numerous fault-tolerance techniques have been proposed for real-time systems \cite{SHIN84,SHIN87,KWAK01,AXER11,HUANG11CODES}. One of the typically used fault-tolerance techniques is online concurrent fault detection followed by a hardware-based checkpointing and rollback recovery mechanism. 69 It allows processors to rollback to the previously known valid states to resume normal executions by exploiting the slack time available in task schedules. Traditionally, fault tolerance techniques aim to maximize the fault coverage and minimize the fault detection latency and associated redundancy costs \cite{PRADHAN86}. The costs are usually measured in terms of hardware, time, or information overhead and are of great significance in real-time embedded systems due to their severe resource constraints. 70 71 72 Owing to the fast-evolving application of real-time systems in battery-powered portable devices, energy has emerged as another important design constraint. Dynamic power management is an active area of research and several techniques have been proposed to minimize energy consumption at the system level \cite{BENINI00}. The energy efficiency is achieved by dynamically reconfiguring active system components and selectively turning off system components when they are idle. Dynamic Voltage Scaling (DVS) is a widely used system level power management technique that exploits technological advances in power supply circuits to reduce the energy consumption. It reduces the processor power consumption by dynamically scaling down the processor supply voltage at the cost of the increased execution times. 73 74 75 Fault tolerance and energy have been jointly investigated in the literature. On one hand, with the continuous shrinking of the feature size and reducing of voltage margins, it is expected that all digital computing systems will be remarkably vulnerable to transient faults \cite{ERNST04}. Fault-tolerance in real-time systems is typically achieved by using some forms of redundancy. This redundancy causes extra power dissipations and hence necessitates energy efficient schemes for batter-powered real-time systems to reduce heat dissipation and extend operational lifetime. 76 On the other hand, energy management through dynamic voltage scaling has adverse effects on system reliability. Scaling down the supply voltage results in an increase in the rate of transient faults \cite{ZHU04}. Consequently, both fault-tolerance and energy efficiency have been the primary design goals for real-time systems, integrated in the design process at all levels for joint optimization with the system feasibility. 77 78 79 80 In the recent past, considerable attention has been paid to exploit the DVS technique to achieve energy savings in the presence of transient faults and a number of excellent energy-efficient fault-tolerance schemes have been designed for real-time embedded systems \cite{ZHANG03+,MELHEM04,ZHU04,WEI06,ZHANG06,ZHAO09ICCAD,ZHAO11DAC,Iqbal11}. In this paper a systematic approach is proposed to derive energy-efficient fault-tolerant task schedules for hard real-time embedded systems by utilizing both the static and dynamic slack in the task schedules. Based on the observation that the probability of the single event upset (SEU)-induced faults remains low in the foreseeable future and fault-free condition will continue to dominate \cite{REED03,WEULERSSE06,LANGLEY03}, one fundamental innovation has been introduced in the proposed energy-efficient fault-tolerance schemes. 81 That is, unlike the traditional approach that focuses on designing offline energy-efficient fault-tolerance algorithms, the proposed scheme aims to achieve further round of energy savings by designing efficient offline algorithms that enable the adaptation of the offline schedules to the runtime behavior of fault occurrences. 82 83 84 85 \subsection {Related Work}\label{Related Work} 86 Extensive research has been performed to investigate the energy efficiency of real-time systems from both offline and online perspective \cite{SHIN99,GRUIAN01,PILLAI01,SAEWONG03,KRISHNA03,MOCHOCKI07,HUANG09,HUANG11RTSJ,PERATHONER10}. The power efficient version of fixed-priority preemptive scheduling such as rate monotonic scheduling was explored by Shin and Choi in \cite{SHIN99}. Power reduction is achieved by exploiting the slack time both inherent in system schedule and due to runtime variations in task execution time. 87 Similarly, Gruian et al. presented a scheduling policy for hard real-time tasks with fixed priorities assigned in a rate monotonic manner \cite{GRUIAN01}. The offline scheduling uses exact timing analysis to derive multiple voltage scaling factors for each task based on stochastic characteristics of task execution time. The online scheduling policy distributes available slack time on priority basis. 88 Based on the voltage scaling algorithms proposed in \cite{PILLAI01}, four voltage scaling algorithms including Sys-Clock, PM-Clock, and DPM-Clock were proposed in \cite{SAEWONG03} for different hardware which may have high or low voltage scaling overhead and different taskset characteristics. Of these algorithms, Sys-Clock assigns a single frequency to all tasks in a task set, PM-Clock assign multiple frequencies to tasks in a task set, and DPM-Clock dynamically adapts offline task schedule to runtime behaviors of task execution times. 89 Krishna and Lee \cite{KRISHNA03} described a two phase heuristic for independent and periodic tasks. The heuristic has an offline component computing a voltage schedule based on worst case execution time, and an online component utilizing slack time due to variations in task execution time for further round of energy savings. 90 In \cite{MOCHOCKI07}, both offline and online scheduling schemes were proposed to handle the transition time and energy overhead of DVS processors. The offline scheme generates task schedule during design time based on a prior known task execution time while the online scheme effectively accommodates runtime variations of task execution time to achieve energy savings. 91 Online algorithms were presented in \cite{HUANG09} and \cite{HUANG11RTSJ} to effectively reduce system energy consumption to handle event streams with hard real-time guarantees. The scheduling scheme adaptively controls the power mode of the processor to postpone the processing of arrival events as late as possible. 92 Although energy efficiency in real-time systems were explored from both offline and online aspects in the above literature, fault tolerance which is an another important design constraints were not considered. 93 94 95 Fault-tolerance is another important design constraint in energy efficient real-time systems. Joint optimization of energy and fault-tolerance in real-time embedded systems has attracted considerable attention in the past decade \cite{MELHEM04,ZHANG03+,ZHANG06,Iqbal11,ZHAO11DAC,ZHAO09ICCAD,WEI11TCAD}. 96 Melhem et al. proposed DVS techniques to exploit slacks in a task schedule to reduce energy consumption while tolerating faults during task execution \cite{MELHEM04}. A task in the task schedule is assumed to be susceptible to at most one fault occurrence and the processor can scale its frequency in a continuous range. 97 In \cite{ZHANG03+} and \cite{ZHANG06} a fixed priority offline scheduling scheme was proposed based on the rate monotonic scheduling to tolerate faults in hard real-time systems. Practical design issues such as checkpointing cost and voltage switching overhead are considered. 98 Fault-tolerance scheduling techniques were developed in \cite{ZHAO11DAC} and \cite{ZHAO09ICCAD} to minimize the system-level energy consumption while still preserving the system¡¯s original reliability. 99 Fault tolerance is achieved by reserving shared recovery blocks that can be used by any task at the runtime. 100 In \cite{Iqbal11}, the authors presented a soft error aware energy efficient scheduling technique for soft real-time systems with stochastic task execution times. The task execution time estimation is modeled as a joint state-space model, the solution of which is found by an online Monte Carlo sampling based recursive technique. 101 102 103 An offline reliability-aware power management scheme is presented in \cite{ZHU08} for real-time tasks with probabilistic execution times. The scheme puts aside just enough slack to guarantee the required reliability while leaving more slack for energy management to achieve better energy savings. In \cite{POP07}, the authors addressed the scheduling and voltage scaling for hard real-time applications that have been statically mapped on heterogeneous distributed embedded systems. Tasks in a given task set are assumed to share a common deadline and the effect of voltage scaling on system reliability is taken into account. Shafik et al. \cite{SHAFIK10} examined the impact of application 104 task mapping on the reliability of MPSoC. The number of transient faults is minimized without compromising the timeliness of the system. All these energy-aware fault-tolerance schemes, however, statically derive offline task schedules to guarantee hard timing constraints, hence are conservative and can not utilize the dynamic slack due to variations in task execution times and uncertainties in fault occurrences for further energy savings. 105 106 107 Zhang et al. developed an online scheduling algorithm that combines checkpointing with DVS to tolerate faults in real-time uni-processor systems with periodic tasks \cite{ZHANG03}. However, this scheme can not handle hard real-time task scheduling. In \cite{IZOSIMOV08}, the authors present an approach to the synthesis of fault-tolerant schedules for embedded applications with soft and hard real-time constraints. A set of task schedules is synthesized offline and, at run time, the scheduler selects the right schedule based on the fault occurrence and the actual task execution times such that hard timing constraints are guaranteed and the overall processor utilization is maximized. However, the presented approach does not take energy into account. 108 109 110 In this paper efficient scheduling schemes are proposed to combine offline feasibility analysis and online voltage scaling for hard real-time systems based on the exact timing analysis of the rate monotonic algorithm (RMA). Two offline scheduling algorithms that enable the dynamic adaptation are proposed. One is the application level voltage scaling (A-DVS) algorithm where all the tasks run at the same processor speed. The other one is the task level voltage scaling (T-DVS) algorithm where the tasks run at their individual speeds. Instead of iteratively deriving the response time of each task for feasibility analysis, the exact timing analysis approach \cite{LEHOCZKY89} is used in the proposed algorithms for feasibility analysis. This strategy strikingly simplifies the adaptation of the proposed offline A-DVS and T-DVS algorithms to the runtime behavior of fault occurrences. 111 The adaptation of the offline task schedules to the runtime behavior of fault occurrences is implemented by 1) pre-computing and saving in a lookup table the maximum slack requirements for the processor to dynamically slow down, 2) retrieving and comparing the stored slack time requirements with the generated cumulative slack in the runtime, and 3) dynamically scaling down processor speed when the generated slack time is equal to or greater than the stored slack requirements. 112 Xtrem \cite{CONTRERAS04}, a SimpleScalar-based Intel XScale processor simulator, was used to evaluate the runtime overhead of the proposed scheduling schemes in addition to extensive simulation experiments. A hard real-time test bed has been designed and the proposed algorithms were also verified on the test bed. 113 114 115 \subsection{Contributions and Outline}\label{Outline} 116 The main contributions of this paper are summarized as follows. 117 \begin{itemize} 118 \item Quasi-static task scheduling algorithms consisting of offline components and online components are proposed. The offline components are designed the way they enables the online components to save energy in the runtime using slack due to uncertainties in fault occurrences. 119 \item The proposed schemes are based on a fault model that considers the effect of DVS on transient fault rate. The worst case number of fault occurrences in a task at a certain voltage level is derived according to the given task level reliability goal. This strategy facilitates the design of systems with various reliability requirements. 120 \item In addition to being verified under simulation environments, the proposed schemes also are implemented and validated on a real-life hard real-time test bed. 121 \end{itemize} 122 123 124 The rest of the paper is organized as follows. Section \ref{Models} introduces the system models. Section \ref{Proposed Schemes} describes the feasibility analysis for ECRMA-based fault-tolerance task scheduling, and proposes two offline task scheduling algorithms with different DVS granularity. 125 Section \ref{Online-DVS} adapts the offline task schedules to the runtime behavior of task execution and fault occurrences. Section \ref{Experiments} presents the experimental results to demonstrate energy savings and runtime overhead. Section \ref{Implementation on testbed} describes the implementation of a hard real-time test bed for energy measurement and Section \ref{conclusion} concludes the paper. 126 127 128 129 \section{System Architecture and Models}\label{Models} 130 The focus of the study is a fixed-priority hard real-time embedded system comprising a DVS-capable uni-processor and a power-aware memory. It is assumed that the scheduler of the system is preemptive, such that, if required, the scheduler may suspend the current task and switch the system context to a new task according to its scheduling scheme. 131 132 133 \subsection{Architecture and Application Model}\label{Arch&APP Model} 134 Consider a task set $\Gamma$ consisting of $n$ independent periodic tasks \{$\tau_1, \tau_2, \cdots, \tau_n$ \}. The timing characteristics of the task $\tau_i$ are defined as a tuple $\tau_i = \{T_i, D_i, C_i\}$, where $T_i$ is the period, $D_i$ is the deadline, and $C_i$ is the worst case execution cycles. The hyper-period of the task set, denoted by $T$, is the lowest common multiple of all task periods $\{T_1, T_2,\cdots, T_n\}$. 135 136 137 It is assumed that tasks are arranged in the decreasing order of priorities according to the fixed priority rate monotonic algorithm (RMA) \cite{LIU73}, that is, $T_1 < T_2 <, \cdots, < T_n$ is such that the period of task $\tau_i$ is smaller than the period of task $\tau_j$ for $i<j$. The processor is assumed to support $L$ discrete frequency or voltage levels. Frequency levels and voltage levels are used interchangeably throughout this paper. Let $f_i$ denote the operating frequency of task $\tau_i$, where $i (1< i < n)$ is the index of the task in the task set $\Gamma$. The operating frequency $f_i$ of task $\tau_i$ can be expressed as a function of the processor voltage level $l$ at which the task is running, that is, $f_i = f(l)$. Tasks in a given task set is assumed to be scheduled using RMA and the resulting schedule is feasible under fault-free conditions at a certain voltage level. 138 139 140 141 \subsection{Fault and Recovery Model }\label{Fault Model} 142 It is assumed that a watchdog processor is used for timing checking. Faults are assumed to be detected using low-latency fault detection techniques such as the simultaneous multithreading scheme \cite{REINHARDT00} such that the fault detection overhead is small enough to be accounted for in task execution time. Upon detecting faults, system is assumed to recover via backward recovery mechanism, where a set of checkpoints are inserted into a computing system for fault-tolerance. At each checkpoint, valid system states are copied and stored for error recovery. If one or more faults are detected during computation, the application rolls back to the immediate previous checkpoint, retrieves the stored system states, and resumes computation from the checkpoint. 143 144 145 The reliability of a task is defined to be the probability of completing the task successfully subject to faults \cite{ZHU04}. Although reliability targets are typically given system-wide, it is a common practice to derive the per-task values (unit requirements) from system-wide values (system requirements). Assuming all tasks in a given task set share a common given reliability goal, then the task level reliability is maintained if all tasks in the task set finish their execution successfully under the given reliability target. Let $R_i$ denote the reliability of task $\tau_i$. $R_i$ is derived as follows. 146 147 148 Let $k_i$ denote the exact number of fault occurrences in task $\tau_i$, $f_i$ denote the operating frequency of task $\tau_i$ at the voltage level $l$ ($1 \leq l \leq L$), and $O_{il}$ denote the optimal number of checkpoints for task $\tau_i$ at the voltage level $l$ that minimizes the worst case response time of the task. Assuming checkpointing intervals are equal, the $O_{il}$ is then given by 149 $$O_{il} = \left \lceil \sqrt{\frac{k_i C_i}{c_s f_i}} - 1 \right \rceil \quad \text {or} \quad \left \lfloor \sqrt{\frac{k_i C_i}{c_s f_i}} - 1 \right \rfloor,$$ 150 where $C_i$ is the execution cycles of task $\tau_i$ and $c_s$ is the checkpointing overhead \cite{ZHANG06}. $c_s$ is assumed to be constant. For the sake of easy presentation, $O_{il}$ is simply denoted by 151 \begin{align}\label{eqn:OPTchekptNum} 152 O_{il} = \left\| \sqrt{ \frac{k_i C_i} {c_s f_i}} - 1 \right\|. 153 \end{align} 154 Let $OE_i$ be the overall execution time of an instance of task $\tau_i$. Considering the checkpointing overhead and fault recovery overhead, the $OE_i$ is derived as \cite{ZHANG06} 155 \begin{align}\label{eqn:OE-i} 156 OE_i = \frac {C_i} {f_i} + O_{il} \times c_s + \frac{k_i C_i}{f_i (O_{il}+1)} + 2k_i c_s. 157 \end{align} 158 159 160 Transient fault occurrences are typically modeled using the Poisson distribution. 161 Let $\lambda_l$ be the average fault arrival rate at the frequency level $l$. The $\lambda_l$ can be derived using the equation $\lambda_l = \gamma \times e^{-\alpha f_i},$ where $\gamma$ and $\alpha$ are constant parameters and $f_i$ is the operating frequency of the task $\tau_i$ \cite{ZHU04}. The probability of $k_i$ fault occurrences during the execution of task $\tau_i$ at frequency $f_i$ is thus given by 162 $$\frac{e^{- \lambda_l \times OE_i} \times ( \lambda_l \times OE_i)^{k_i}} {k_i!},$$ and the reliability $R_i$ of task $\tau_i$ is hence written as 163 \begin{align}\label{eqn:Reliability0} 164 R_i = \sum_{k_i}{\frac{e^{- \lambda_l \times OE_i} \times ( \lambda_l \times OE_i)^{k_i}} {k_i!}}. 165 \end{align} 166 This definition of reliability considers the fault occurrences during the whole interval of $OE_i$. In other words, the fault occurrences during the recovery of a task from faults is taken into account. 167 168 169 Let $R_g$ denote the task level reliability goal, then the reliability of task $\tau_i$ is maintained if the inequality 170 \begin{align}\label{eqn:Reliability} 171 R_g \le R_i 172 \end{align} 173 holds. Since $\lambda_l, OE_i$, and $k_i$ all are functions of the voltage level $l$ of task $\tau_i$, $R_i$ is also a function of the voltage level $l$ of task $\tau_i$. For a given voltage level $l$ ($1 \le l \le L$), $\lambda_l$ and $OE_i$ are known; thus, the worst case number of fault occurrences $k_i$ at the voltage level $l$ subject to target reliability $R_g$ can be iteratively derived using the inequality (\ref{eqn:Reliability}). 174 175 176 177 \subsection{Energy Model}\label{Energy Model} 178 The power consumption of a CMOS device can be modeled as the sum of dynamic power consumption and static power consumption. The average dynamic power consumption is a function of the supply voltage and the operating frequency. Let $p_{d}$, $V_{dd}$, and $f$ be the average dynamic power consumption, supply voltage, and operating frequency, respectively, then $p_{d} \propto {V_{dd}}^2 f$ holds \cite{WESTE92}. Assuming processors use voltage scaling technique to scale frequency, the operating frequency is then approximately linear with the supply voltage \cite{WESTE92}. As a result, the average dynamic power consumption can be estimated by a strictly increasing and convex function of the operating frequency, that is, $p_{d}\propto f^3$. 179 180 181 As technology advances towards deep sub-micro devices, the static power consumption due to leakage current and other current drawn continuously from the power supply has been increasing dramatically. It has been shown that the major contributors of the static power consumption are the subthreshold leakage current and the reverse bias junction current \cite{MARTIN02}. Let $p_s$ denote the static power consumption of a device, $I_{subn}$ denote the sub-threshold leakage current, and $I_j$ denote the reverse bias junction current, then the static power consumption of the device is given by $p_s = V_{dd} I_{subn} + |V_{bs}| I_j,$ 182 where $V_{bs}$ is the body bias voltage, and $V_{dd}$ is the supply voltage \cite{JEJURIKAR04}. For a certain generation of technology, the sub-threshold leakage current $I_{subn}$ is the function of the supply voltage $V_{dd}$, and the $V_{bs}$ and $I_j$ are technology constants. 183 184 185 The total energy ($E_{tot}$) consumed by real-time tasks in a given task set is hence estimated by 186 \begin{align} \label{eqn:Etot} 187 E_{tot} = \sum_{i=1}^n OE_i \times \frac{T}{T_i}\times (p_d + p_s), 188 \end{align} 189 where $OE_i$ is the overall execution time of task $\tau_i$, as is given in Equation (\ref{eqn:OE-i}), and $\frac{T}{T_i}$ is the number of instances of the task $\tau_i$ in the hyper-period $T$. 190 191 192 193 \section{Offline Scheduling Algorithms for Fault-Tolerant Hard Real-Time Systems}\label{Proposed Schemes} 194 The Rate Monotonic Algorithm (RMA), proposed by Liu and Layland in 1973, is an optimal fixed priority algorithm that schedules periodic tasks by assigning higher priorities to tasks with shorter periods \cite{LIU73}. 195 The classical analysis of RMA yields a conservative bound on the processor utilization below which a system is guaranteed to meet all task deadlines. 196 Lehoczky et al. showed that this conservative utilization bound of RMA can be relaxed based on the exact characterization of RMA (ECRMA) to derive both the necessary and sufficient conditions for the feasibility analysis of a schedule \cite{LEHOCZKY89}. This section first provides an overview of the ECRMA-based feasibility analysis of fault-tolerant task schedules, then presents the two proposed offline task scheduling algorithms of different granularity. 197 198 199 200 \subsection{ECRMA-Based Feasibility Analysis of Fault-Tolerant Task Schedules}\label{Feasibility of FT RMA} 201 The worst case behavior of RMA occurs when all tasks in a task set are instantiated simultaneously and are ready for execution immediately after initiation. This time instant is called critical instant. It has been shown that a schedule of independent periodic tasks is feasible if the first instance of each task is schedulable when it is instantiated at a critical instant. 202 Lehoczky et al. showed that periodic tasks in a task set are schedulable for all task phasing if and only if at any time instance before the deadline of a task, the total demand for processor time by the task is equal to or less than the current available processor time \cite{LEHOCZKY89}. Specifically, let $$W_i(t)= \sum_{j=1}^{i} OE_j \left\lceil \frac{t}{T_j} \right\rceil \notag 203 $$ 204 denote the total demand of task $\tau_i$ for processor time over $[0, t]$, assuming $0$ is the critical instant. The necessary and sufficient condition for the periodic task $\tau_i$ to be schedulable is given by $$\min_t \left(\frac{W_i(t)}{t}\right) \le 1, \quad 0 < t < T_i, 205 $$ 206 and the entire task set is schedulable iff 207 \begin{align}\label{equ:taskSet iff condition} 208 \max_i \left( \min_t \left(\frac{W_i(t)}{t}\right) \right) \le 1, \quad 0 < t < T_i, \ 1 \le i \le n. 209 \end{align} 210 211 212 Further, it was shown that the schedulability test of each task needs to be performed only at a finite number of time instances called scheduling points. This is because the normalized demand of task $\tau_i$ on a processor, given by $W_i(t)/t$, is strictly decreasing except at those scheduling points. The set of scheduling points of task $\tau_i, S_i$, is defined as multiples of $T_g$ for $T_g \le T_i$, that is, $$S_i=\left\{h \times T_g|g = 1,2,\cdots,i; h =1,2,\cdots, \left\lfloor{\frac {T_i} {T_g}}\right\rfloor \right\}.$$ 213 214 215 Substitute the $S_i$ and the $W_i(t)$ into the Equation (\ref{equ:taskSet iff condition}), the necessary and sufficient condition for real-time tasks in a given task set to be feasible becomes 216 \begin{align}\label{eqn:taskSet SP iff condition} 217 \max_i \left( \min_t \sum_{j=1}^{i} OE_j \frac {\left\lceil \frac{t}{T_j} \right\rceil } {t} \right) \le 1, \ t \in S_i, 1 \le i \le n. 218 \end{align} 219 220 221 The proposed task scheduling techniques exploit the exact characterization of RMA to efficiently verify the feasibility of an offline schedule in the presence of faults and to dynamically adapt DVS policies to uncertainties of fault occurrences. As is shown in Equation (\ref{eqn:taskSet SP iff condition}), the task execution time with fault recovery overhead, which is denoted by $OE_j$, is utilized in the feasibility analysis of the offline schedule. As a result, the generated feasible task schedules will be feasible when faults occur. 222 223 224 The proposed task scheduling techniques offer three advantages over the previous techniques: (1) higher tolerance to fault recovery overhead due to the relaxed constraints of the exact characterization of RMA, (2) low-cost ECRMA-based offline feasibility analysis schemes, and (3) efficient extension to the runtime reevaluation of DVS policies due to the relatively lower complexity of the offline feasibility analysis. 225 In this paper, the scheduling point-based exact characterization of RMA provides a systematic approach to improve the feasibility of a schedule while tolerating faults for enhanced reliability and scaling voltage for energy efficiency. Two offline algorithms are proposed to integrate fault-tolerance and DVS policy evaluation by systematically searching for the energy-efficient fault-tolerant schedule for a given set of tasks, which are described in the next subsections. 226 227 228 229 \subsection{Application Level Voltage Scaling (A-DVS)}\label{ADVS} 230 The application level voltage scaling (A-DVS) is designed for the scenario where all tasks in a given task set run at the same processor speed. The A-DVS is suitable for systems in which frequent voltage and frequency scaling is inefficient. 231 Fig. \ref{Alg:ADVS} shows A-DVS algorithm to derive energy efficient voltage setting subject to fault and feasibility constraints. Inputs to the algorithm are the task set $\Gamma$, the lowest voltage level ($low$) and highest voltage level ($high$) supported by the processor, the maximum number of faults each task should tolerate ($k_i$), and checkpoint overhead ($c_s$). Voltage levels $low$ and $high$ are initially set to $1$ and $L$, respectively. 232 233 234 \begin{figure} 235 \begin{flushleft} 236 \textbf{Procedure} A-DVS($\Gamma,low, high, k_i, c_s$) 237 \end{flushleft} 238 \algsetup{linenodelimiter=.} 239 \begin{algorithmic}[1] 240 \STATE $low =1; high =L;$ 241 \FOR {$\tau_i, 1 \le i \le n $} 242 \STATE $S_i=\left\{h \times T_g|g = 1,2,\cdots,i; h =1,2,\cdots, \left\lfloor{\frac {T_i} {T_g}}\right\rfloor \right\}$ \COMMENT{Derive $S_i$, the set of scheduling points of task $\tau_i$} 243 \ENDFOR 244 \WHILE {$low \le high$} 245 \STATE $mid = (low + high)/2$ 246 \IF{FCA($\Gamma, S, k_i, c_s, mid$)} 247 \STATE $high = mid -1$ 248 \ELSIF {(!FCA($\Gamma, S, k_i, c_s, mid$)) $\&\&$ ($mid==L$)} 249 \PRINT \texttt{"Infeasible Schedule"} 250 \STATE \textbf{exit}(1) \COMMENT{Exit when infeasible} 251 \ELSE 252 \STATE $low=mid +1$ 253 \ENDIF 254 \ENDWHILE 255 \RETURN $mid$ 256 \end{algorithmic} 257 \caption{Application level voltage scaling algorithm (A-DVS).} 258 \label{Alg:ADVS} 259 \end{figure} 260 261 262 263 A-DVS starts by computing the set of scheduling points $S_i$ of task $\tau_i$, and then iteratively performs feasibility analysis using ECRMA to select the proper DVS strategy while tolerating $k_i$ faults in each task instance. $S$ denotes the array of $S_i$ for $1 \le i \le n$. Lines $2$ to $4$ iteratively compute scheduling points of $n$ tasks with the time complexity of $O(n^2R)$, where $n$ is the number of tasks in the task set and $R$ is the ratio of the largest period to the smallest period. Lines $5$ to $15$ iteratively search the energy efficient voltage level in the range from $low$ to $high$ based on the binary search algorithm. For a given voltage level $mid = (low + high)/2$, the feasibility checking subroutine FCA is called to test the feasibility of a schedule at the voltage level. If the schedule is found feasible, $high$ is updated to $(mid - 1)$ in line $8$, else $low$ is updated to $(mid + 1)$ in line $13$. This process continues until a feasible schedule is found for all tasks or the highest voltage level $L$ is reached without satisfying the Equation (\ref{eqn:taskSet SP iff condition}), in which case the task set is deemed infeasible (lines $10$ and $11$). Line $16$ returns the energy efficient voltage level of the feasible schedule. The time complexity of deriving $S$, the set of scheduling points of all tasks in the task set, is $O(n^2R)$, and the time complexity of the binary search algorithm is $O(\log_2L)$ \cite{CORMEN01}. The overall time complexity of A-DVS algorithm depends on the complexity of FCA algorithm. 264 265 266 Note that the binary search based A-DVS algorithm is valid only if the energy consumption is monotonic with respect to frequency/voltage changes. When the processor static power consumption as well as context switching overhead is considered, the monotonicity does not hold. In this case, there exists a critical processor speed below which scaling down the processor speed will instead increase the energy consumption \cite{JEJURIKAR04}. In other words, executing a task below the critical speed consumes more time and energy. Hence, in the binary search based A-DVS algorithm, the minimum voltage level $low$ is initialized to the level corresponding to the processor critical speed. 267 268 269 \begin{figure} 270 \textbf{Procedure} FCA($\Gamma, S, k_i, c_s, l$) 271 \algsetup{linenodelimiter=.} 272 \begin{algorithmic}[1] 273 \STATE $Schedulable=0; Demand=0; i=j=p=q=1$ 274 \FOR {$\tau_i, 1 \le i \le n $} %\COMMENT{Phase 1--Compute total cost $OE_j$} 275 \FOR {$\tau_j, j \le i $} 276 \STATE $O_{jl} = \max \left( \left\| \sqrt{ \frac{k_i C_j} {c_s f_j}} - 1 \right\|, 0 \right)$ 277 \STATE $OE_j=\frac{C_j} {f_j} + O_{jl}\times c_s + \frac{k_i C_j} {f_j (O_{jl}+1)} + 2k_i c_s$ 278 \ENDFOR 279 \FOR {$s_{iq} \in S_i$} %\COMMENT{ siq in Si is the qth scheduling point of task i} 280 \STATE $Demand =0$ 281 \FOR {$\tau_p, 1 \le p \le i $} 282 \STATE $Demand = Demand +OE_p \times \left\lceil s_{iq} /T_p \right\rceil $ 283 \ENDFOR 284 \IF{$Demand \le s_{iq}$} 285 \STATE $Schedulable=1; q=1$ 286 \STATE \textbf{break} 287 \ELSE \STATE $Schedulable=0; q = q + 1$ 288 \ENDIF 289 \ENDFOR 290 \IF {$Schedulable =0 $} \RETURN (0) 291 \ELSE \STATE $i= i +1$ 292 \ENDIF 293 \ENDFOR 294 \RETURN (1) 295 \end{algorithmic} 296 \caption{Feasibility checking algorithm (FCA).} 297 \label{Alg:FCA} 298 \end{figure} 299 300 301 Fig. \ref{Alg:FCA} describes the feasibility checking algorithm FCA. It takes as inputs the task set ($\Gamma$), the array of $S_i$ ($S$), the maximum number of faults each task should tolerate ($k_i$), checkpoint overhead ($c_s$), and the current voltage level ($l$). 302 303 304 The FCA algorithm uses a flag $Schedulable$ which is reset to 0 whenever a task is found un-schedulable at the current common voltage level, and a buffer $Demand$ which holds the total demand for processor time at scheduling points at the current voltage level. The algorithm operates in two phases. Phase $1$, consisting of lines 3 to 6, derives the optimum number of checkpoints at the current voltage level and compute the worst case execution time $OE_i$ of the current task $\tau_i$. 305 Phase $2$, consisting of lines $7$ to $18$, verifies the schedulability of the current task using Equation (\ref{eqn:taskSet SP iff condition}). It computes the total time demand of task $\tau_i$ at each scheduling point, check the schedulability of the task, and set the $Schedulable$ flag accordingly. If task $\tau_i$ is found schedulable, the algorithm proceeds to the next task; else it returns 0 to A-DVS routine. 306 307 308 The time complexity of phase $1$ and phase $2$ of FCA algorithm is $O(n^2)$ and $O(n^2R)$, respectively, and the overall time complexity of FCA algorithm is $O(n^2R)$. Considering the time complexity of binary search algorithm, the overall time complexity of A-DVS algorithm is $O(n^2R\log_2L)$ and the average time complexity per task is $O(nR\log_2L)$. When compared to the application level technique proposed in \cite{ZHANG06}, which has the time complexity of $O(n^2RL)$, A-DVS incurs an order of magnitude lower cost. The relative lower-complexity of the A-DVS algorithm enables the adaptation of the offline task schedules to the runtime time behavior of task execution time and fault occurrences for further energy savings. The dynamic extension of A-DVS algorithm is explored in Section \ref{D-ADVS}. 309 310 311 312 \subsection{Task Level Voltage Scaling (T-DVS)}\label{TDVS} 313 The task level voltage scaling (T-DVS) offers higher energy savings and improves fault-tolerance at the cost of increased complexity. T-DVS algorithm shown in Fig. \ref{Alg:TDVS} is similar to the A-DVS except whenever a task, for example task $\tau_i$, is found un-schedulable. In this case, the T-DVS repeatedly selects one task from among the tasks of equal and higher priorities and scales the voltage level of the task up by one level until task $\tau_i$ becomes schedulable. If the highest voltage level for all tasks of equal and higher priorities is reached and task $\tau_i$ is still un-schedulable, the task set is deemed to be infeasible. The task selected for voltage scaling satisfies two requirements: (1) its voltage level is lower than the highest processor supported voltage level and (2) the subsequent increase in energy consumption due to scaling up the voltage level of the selected task is minimal among all candidate tasks. 314 315 316 Inputs to T-DVS are a task set $\Gamma$ which is assumed to be feasible at a certain voltage level, the maximum number of faults each task instance should tolerate ($k_i$), and checkpointing overhead($c_s$). The parameters used to track the state of a schedule include $f_i$ and $Level_i$ which denote the operating frequency and voltage level of task $\tau_i$, respectively, and $min$ which denotes the index of the task selected for voltage scaling. For the sake of easy presentation, $f$ and $Level$ are used to denote the arrays of operating frequencies and voltage levels of tasks in the task set, respectively. It is assumed that the operating frequency $f_i$ of task $\tau_i$ is a function of the voltage level $Level_i$, that is, $f_i = f(Level_i)$. 317 318 319 Lines 2 to 4 initialize the operating frequency $f_i$ and voltage level $Level_i$ of task $\tau_i$ to $f(1)$ and $1$, respectively. Lines 5 to 7 iteratively compute the scheduling points of $n$ tasks in the task set. The time complexity of the computation is in order of $O(n^2R)$, where $R$ is the ratio of the largest period to the smallest period of tasks in the task set. Rest of the algorithm operates in $2$ phases, which are iterated for each task in the task set. Phase 1, consisting of lines 9 and 10, derives the optimum number of checkpoints of task $\tau_i$ at the current voltage level and compute the worst case overall execution time $OE_i$ for task $\tau_i$. The array of the worst case overall execution time of tasks in a task set is denoted by $OE$. Unlike A-DVS, phase $1$ of T-DVS takes constant time. Phase 2, consisting of lines 11 to 28, verifies the schedulability of task $\tau_i$ using Equation (\ref{eqn:taskSet SP iff condition}) and performs voltage scaling at task level. Line $11$ calls the schedulability checking subroutine (SCA) to verify the schedulability of task $\tau_i$ at the operating frequency of $f_i$. If task $\tau_i$ is found schedulable, the algorithm proceeds to the next task (line 13), else a task is selected for voltage scaling (lines 15 to 27). In line 16 the MINIMUM algorithm \cite{CORMEN01} is called and the index $min$ of the task selected for voltage scaling is returned. Task $\tau_{min}$ is the task that results in the minimal energy increase among all candidate tasks for voltage scaling. 320 321 322 If the voltage level $Level_{min}$ is found lower than $L$, then the operating frequency $f_{min}$ of task $\tau_{min}$ is raised by one level in lines 18 and 19, the optimal number of checkpointing $O_{min,l}$ and the overall execution time $OE_{min}$ of task $\tau_{min}$ are updated respectively in lines 20 and 21, and the schedulability of task $\tau_{min}$ is reevaluated based on the updated total time demand in line 22. Else if the voltage level $Level_{min}$ is found equal to the highest voltage level $L$, task $\tau_i$ is un-schedulable. This process continues until a feasible schedule is found for the task set or the highest voltage level is reached without satisfying Equation (\ref{eqn:taskSet SP iff condition}), in which case the schedule of the task set is deemed infeasible. 323 324 325 326 \begin{figure} 327 \textbf{Procedure} T-DVS($\Gamma, k_i, c_s$) 328 \algsetup{linenodelimiter=.} 329 \begin{algorithmic}[1] 330 \STATE $Schedulable=0; i=1$ 331 \FOR {$\tau_i, 1 \le i \le n $} 332 \STATE $f_i=f(1); Level_i=1$ 333 \ENDFOR 334 \FOR {$\tau_i, 1 \le i \le n $} 335 \STATE $S_i=\left\{h \times T_g|g = 1,2,\cdots,i; h =1,2,\cdots, \left\lfloor{\frac {T_i} {T_g}}\right\rfloor \right\}$ 336 \COMMENT{Derive $S_i$, the set of scheduling points for task $\tau_i$} 337 \ENDFOR 338 \FOR {$\tau_i, 1 \le i \le n $} 339 \STATE $O_{il} = \max \left( \left\| \sqrt{ \frac{k_i C_i} {c_s f_i}} - 1 \right\|, 0 \right)$ 340 \STATE $OE_i=\frac{C_i} {f_i} + O_{il} \times c_s + \frac{k_i C_i} {f_i (O_{il}+1)} + 2k_i c_s$ 341 \STATE $Schedulable = SCA(S, OE, i)$\342 \COMMENT{$OE$ denotes the array of $OE_i$ and $S$ denotes the array of $S_i$} 343 \IF {$Schedulable =1 $} 344 \STATE $i=i+1$ 345 \ELSE 346 \WHILE {$!Schedulable$} 347 \STATE $min = MINIMUM (Level, OE, i)$ 348 \IF {$Level_{min} < L$} 349 \STATE $Level_{min} = Level_{min} + 1$ 350 \STATE $f_{min} = f(Level_{min})$ 351 \STATE $O_{min,l} = \max \left( \left\| \sqrt{ \frac{k_i C_{min}} {c_s f_{min}}} - 1 \right\|, 0 \right)$ 352 \STATE $OE_{min}=\frac{C_{min}} {f_{min}} + O_{min,l}\times c_s + \frac{k_i C_{min}} {f_{min} (O_{min,l}+1)} + 2k_i c_s$ 353 \STATE $Schedulable = SCA(S, OE, i)$ 354 \ELSE 355 \PRINT \texttt{"Infeasible Schedule"} 356 \STATE \textbf{exit}(1) 357 \ENDIF 358 \ENDWHILE 359 \ENDIF 360 \ENDFOR 361 \end{algorithmic} 362 \caption{Task level voltage scaling algorithm (T-DVS).} 363 \label{Alg:TDVS} 364 \end{figure} 365 366 367 368 369 The MINIMUM algorithm, shown in line $16$ of Fig. \ref{Alg:TDVS}, takes as inputs the array of voltage levels ($Level$), the array of overall execution time of tasks in the task set ($OE$), and index of the task whose schedulability needs to be tested ($i$). The algorithm is implemented by deriving the energy increase of each task due to voltage scaling and returning the index of the task that incurs the minimum energy increase. Index of any candidate task is returned if all tasks with equal or higher priorities reach the highest processor voltage level. 370 371 372 The schedulability checking algorithm (SCA) is described in Fig. \ref{Alg:SCA}. Inputs to SCA are the array of $S_i$ ($S$), the array of the overall execution time of tasks in the task set ($OE$), and the index of the task whose schedulability needs to be tested ($i$). Line $1$ initializes the flags $Schedulable$ and $Demand$ to $0$. For each scheduling point of task $\tau_i$, lines $3$ to $6$ compute the total time demand of task $\tau_i$. Lines $7$ to $12$ check the schedulability of the task and set the $Schedulable$ flag accordingly. 373 The time complexity of SCA algorithm is $O(nR)$. 374 375 376 Unlike the task level feasibility analysis algorithm of \cite{ZHANG06}, T-DVS does not need to exhaustively explore all $L^n$ possible combinations of tasks and voltage levels. The first feasible schedule generated by the algorithm is the desired task schedule and taken as the output. The time complexity of T-DVS algorithm is dominated by the complexity of feasibility analysis and voltage scaling. 377 The feasibility analysis and voltage scaling involves $nL \times (nR+n)$ iterations for each task; thus, the time complexity of T-DVS per task is $O(n^2RL)$, which is one order of magnitude lower than that of previous techniques \cite{ZHANG06}. The online reevaluation of T-DVS algorithm is much simpler and takes constant time. The operation of the reevaluation is detailed in Section \ref{D-TDVS}. 378 379 380 381 \begin{figure} 382 \textbf{Procedure} SCA($S, OE, i$) 383 \algsetup{linenodelimiter=.} 384 \begin{algorithmic}[1] 385 \STATE $Schedulable=0; Demand=0; p=q=1$ 386 \FOR {$s_{iq} \in S_i$} 387 \STATE $Demand =0$ 388 \FOR {$\tau_p, 1 \le p \le i $} 389 \STATE $Demand = Demand +OE_p \times \left\lceil s_{iq} /T_p \right\rceil $ 390 \ENDFOR 391 \IF{$Demand \le s_{iq}$} 392 \STATE $Schedulable=1$ 393 \STATE \textbf{break} 394 \ELSE \STATE $Schedulable=0; q = q + 1$ 395 \ENDIF 396 \ENDFOR 397 \RETURN¡¡{$Schedulable$} 398 \end{algorithmic} 399 \caption{Schedulability checking algorithm (SCA).} 400 \label{Alg:SCA} 401 \end{figure} 402 403 404 405 \section{Online Reevaluation of DVS Policies}\label{Online-DVS} 406 Offline scheduling assumes that all tasks exhibit the worst case execution time and all faults occur during the checkpointing. However, the runtime behavior of task execution and fault occurrences can vary significantly and the average case characteristics are considerably better than the worst case characteristics. Hence, the online reevaluation of DVS policies that adapts the offline schedules to the runtime characteristics of task execution and fault occurrences can save significant energy. The proposed offline algorithms, A-DVS and T-DVS, provide efficient mechanisms to exploit the slack generated in the runtime to slow down the processor to save energy. Note that A-DVS and T-DVS feasibility analysis guarantees that offline schedules meet all timing constraints. Therefore, dynamic DVS policies proposed in this section only need to ensure that the feasibility of the modified task schedules is preserved in the runtime. 407 408 409 \subsection{Reevaluation of DVS Policies at Application Level}\label{D-ADVS} 410 For a given task set, the output of the A-DVS algorithm described in Section \ref{ADVS} is a voltage level $l$ below which the input task set becomes infeasible. This implies that one or more tasks in the task set fail to satisfy the Equation (\ref{eqn:taskSet SP iff condition}) at the voltage level $(l-1)$. In the runtime, not all tasks execute up to their worst case execution times and not all faults occur during task executions. Hence, the slack generated in the runtime could be used to dynamically scale down the processor speed to save energy. 411 It is assumed that tasks ready for execution are put into a ready queue. The online DVS policy manager runs a test to determine whether the cumulative slack is sufficient to slow down the processor for all the unexecuted lower priority tasks in the ready queue. The test compares the amount of time needed for all the unexecuted lower priority tasks in the ready queue to be feasible at $(l-1)$ or a lower voltage level with the available slack, as is discussed below. 412 413 414 Let $slk$ denote the accumulated slack time and $slk_i$ denote the slack time from task $\tau_i$. The accumulated slack $slk$ can be expressed as the sum of the slack from individual tasks. For instance, the accumulated slack can be written as $$slk = \sum_{i=1}^{n}{slk_i}$$ for $1 \le i \le n$. The slack from individual tasks is updated regularly at several time instants. The slack $slk_i$ from the task $\tau_i$ is initialized to 0 and updated at the end of the execution of the task to incorporate the generated slack. It is reset to 0 at the deadline of the task, indicating that the slack from the task is expired when a new instance of the task is released. When the accumulated slack is consumed by lower priority tasks, the slack from the task of the highest priority is consumed first. For example, if the priority of task $\tau_1$ is higher than that of task $\tau_2$ and the available accumulated slack is composed of $slk_1$ and $slk_2$, the $slk_2$ is not consumed until the $slk_1$ is used up when the accumulated slack is utilized to slow down the processor. 415 416 417 Define the execution time overflow as the additional time required by a task to be feasibly scheduled by each scheduling point at a certain voltage level. Let $ovfl_{il}$ denote the execution time overflow of task $\tau_i$ at the voltage level $l$. The $ovfl_{il}$ is set to $0$ if task $\tau_i$ is schedulable at the voltage level $l$, else it is computed as the difference between the worst case response time $R_{il}$ of task $\tau_i$ at the voltage level $l$ and the deadline $D_i$ of task $\tau_i$, as is given below: 418 419 \begin{eqnarray}\label{equ:OVFL} 420 ovfl_{il} = \left\{ \begin{array}{rl} 421 R_{il} - D_i &\mbox {$R_{il} \ge D_i$} \422 0 &\mbox {$R_{il} < D_i$} 423 \end{array} \right. 424 \end{eqnarray} 425 426 427 Consider an offline application level task schedule with the voltage level of $l$ and assume in the runtime the execution of task $\tau_{i-1}$ is finished. The voltage level of the processor can be feasibly scaled down to $(l-1)$ if the accumulated slack time $slk$ is greater than the sum of the execution time overflows of all the remaining unexecuted lower priority tasks in the ready queue. In other words, the processor can be scaled down to the voltage level $(l-1)$ if the inequality 428 \begin{align}\label{equ:runtime dvs condition} 429 slk = \sum_{p=1}^{i-1}{slk_p} \ge \sum_{p=i}^{n} ovfl_{p,(l-1)} 430 \end{align} 431 holds, assuming the tasks $\tau_p$ for $i \le p \le n$ are in the ready queue. 432 433 434 As is shown in Equation (\ref{equ:OVFL}), the straightforward approach to compute $ovfl_{il}$ requires iteratively estimating the response times $R_{il}$ of task $\tau_i$, hence it is highly computation intensive. An alternate simple yet efficient approach is proposed as follows. For the task $\tau_i$, $ovfl_{il}$ is the minimum of the differences between $t_2$ and $t_1$, where $t_2$ is the total demand for processor time by the task at the voltage level $l$ and $t_1$ is the scheduling points of the task. As a result, the execution time overflow $ovfl_{il}$ of task $\tau_i$ ($1 \le i \le n$) at the voltage level $l$ ($1 \le l \le L$) is given by 435 \begin{align}\label{equ:ovfl-ECRMA} 436 ovfl_{il}=\max \left( \min_{t_1} (t_2 - t_1), 0 \right) \quad t_1 \in S_i, 437 \end{align} 438 where $t_2$ is given by $$t_2 = \sum_{p=1}^{i} OE_p \times \left\lceil \frac {s_{iq}} {T_p} \right\rceil,$$ $S_i$ is the set of scheduling points for task $\tau_i$, and $s_{iq}$ is the $q^{th}$ scheduling point in $S_i$. $OE_p$ is given in Equation (\ref{eqn:OE-i}), and is re-written as 439 $$OE_p = \frac{C_p} {f_p} + O_{pl} \times c_s + \frac{k_i C_p} {f_p (O_{pl}+1)} +2 k_i c_s.$$ 440 441 442 Since both $t_1$ and $t_2$ are computed during the offline feasibility analysis of the A-DVS algorithm, the execution time overflow given in Equation (\ref{equ:ovfl-ECRMA}) can be pre-computed during the offline feasibility analysis and stored in system memory to form a lookup table. The lookup table is implemented in software program as an array or associative array. The table can be pre-calculated and stored in static program storage or can be calculated as part of a program‘s initialization phase. In the runtime, the scheduler searches the lookup table at the end of each task execution to calculate the sum of the execution time overflows of all the remaining unexecuted lower priority tasks, compares the derived execution time overflows with the accumulated slack time, and determines if the processor can be feasibly scaled down according to Equation (\ref{equ:runtime dvs condition}). This strategy of dynamic scheduling significantly reduces the runtime computation overhead without compromising the feasibility performance of the task schedule. 443 444 445 As is shown in Equation (\ref{equ:ovfl-ECRMA}), the proposed scheme computes the execution time overflow based on the minimum of differences between $t_2$ and $t_1$, hence it provides a better opportunity to scale the processor frequency. Fig. \ref{alg:DADVS} demonstrates the algorithms for the runtime reevaluation of DVS policies at the application level. Reevaluation of DVS polices is performed whenever a task instance finishes its execution. This strategy avoids incurring during the task execution any extra overhead that may cause the task to miss its deadline. Meanwhile, it ensures that the current accumulated slack time is checked sufficiently frequently such that the supply voltage can be scaled down opportunely to achieve energy savings if the accumulated slack time is large enough. The dynamic application level voltage scaling algorithm, D-ADVS, is shown in Fig. \ref{alg:DADVS}, where $i$ is the index of the task $\tau_i$ to be executed, $l$ is the voltage level of task $\tau_i$, and $ovfl_{sum}$ is the sum of the overflows of unexecuted lower priority tasks in the ready queue. Line 1 updates the $slk$ and initializes $ovfl_{sum}$ to 0. In line 2, subroutine \textbf{Overflow} is called to calculate the sum of the overflows of unexecuted lower priority tasks in the ready queue. Lines 3 to 6 iteratively scale down the processor voltage level if the accumulated slack time is large enough. Line 4 scales down the voltage level and operating frequency for all the remaining tasks by one level. Line 5 updates the $slk$ by reducing $ovfl_{sum}$ and line 6 updates the $ovfl_{sum}$ by calling subroutine \textbf{Overflow} to explore the possibilities of further scaling down the processor voltage level. The \textbf{Overflow} subroutine is described in Fig. \ref{alg:overflow}, where the notations $i, l$, and $ovfl_{sum}$ have the same definition as in the D-ADVS algorithm. The algorithm retrieves overflows of tasks $\tau_j$ ($i \le j \le n$) at the voltage level ($l-1$) from the lookup table stored in system memory in line 3, and calculates the sum of the overflows in line 4. Line 6 returns the $ovfl_{sum}$. The overall time complexity of the D-ADVS algorithm is $O(nL)$. 446 447 448 449 The example shown in Table \ref{table:DADVS example} demonstrates the application level runtime DVS reevaluation before a certain scheduling point. Consider a task set of four periodic tasks running on a processor which supports 3 voltage levels, as shown in Table \ref{table:DADVS example}. Execution time overflows for each task at the voltage level 3 are 0, denoting a feasible schedule at the voltage level 3. At the voltage level 2, task $\tau_1$ and $\tau_2$ are schedulable while task $\tau_3$ and $\tau_4$ are not schedulable since $ovfl_{12} = ovfl_{22} = 0$ but $ovfl_{32} = 1$ and $ovfl_{42} = 2$. Therefore, the processor runs at the voltage level 3 to maintain the feasibility of the schedule. However, if the slack $slk_2$ generated in the runtime satisfies $slk_2 \ge (ovfl_{32} + ovfl_{42}) = 3$, the processor can be scaled down to level 2 without violating the feasibility of the schedule. The same procedure can be utilized iteratively at successive voltage levels and for successive slacks produced in the system. 450 451 452 \begin{table} 453 \caption {Runtime DVS reevaluation at application level.} 454 \label{table:DADVS example} 455 \begin{center} 456 \scriptsize 457 \begin{tabular}{|c|c|c|c|} 458 \hline 459 \backslashbox{Tasks}{voltage level} & 1 & 2 & 3 \\ \hline 460 $\tau_1$ & $ovfl_{11}=0 $ & $ovfl_{12}=0$ & $ovfl_{13}=0$ \\ \hline 461 $\tau_2$ & $ovfl_{21}=3 $ & $ovfl_{22}=0$ & $ovfl_{23}=0$ \\ \hline 462 $\tau_3$ & $ovfl_{31}=4 $ & $ovfl_{32}=1$ & $ovfl_{33}=0$ \\ \hline 463 $\tau_4$ & $ovfl_{41}=5 $ & $ovfl_{42}=2$ & $ovfl_{43}=0$ \\ \hline 464 \end{tabular} 465 \end{center} 466 \end{table} 467 468 469 470 \begin{figure} 471 \centering 472 \begin{flushleft} 473 \textbf{Procedure} D-ADVS($i, l$) 474 \end{flushleft} 475 \centering 476 \algsetup{linenodelimiter=.} 477 \begin{algorithmic}[1] 478 \STATE $slk = \sum_{p=1}^{i-1}{slk_p}$; $ovfl_{sum}$ =0 479 \STATE $ovfl_{sum}$ = Overflow$(i, l)$ 480 \WHILE {$slk \ge ovfl_{sum}$} 481 \STATE $l=l-1$; 482 \STATE $slk = slk - ovfl_{sum}$ 483 \STATE $ovfl_{sum}$ = Overflow$(i, l)$ 484 \ENDWHILE 485 \RETURN 486 \end{algorithmic} 487 \caption{Dynamic application level voltage scaling algorithm (D-ADVS).} 488 \label{alg:DADVS} 489 \end{figure} 490 491 492 493 494 \begin{figure} 495 \begin{flushleft} 496 \textbf{Procedure} Overflow ($i, l$) 497 \end{flushleft} 498 \algsetup{linenodelimiter=.} 499 \begin{algorithmic}[1] 500 \STATE update $ovfl_{sum} = 0$ 501 \FOR {$i \le j \le n$} 502 \STATE retrieve $ovfl_{j,(l-1)}$ from the lookup table 503 \STATE $ovfl_{sum} = ovfl_{sum} + ovfl_{j,(l-1)}$ 504 \ENDFOR 505 \RETURN $ovfl_{sum}$ 506 \end{algorithmic} 507 \caption{Runtime execution time overflow retrieval algorithm.} 508 \label{alg:overflow} 509 \end{figure} 510 511 512 513 514 \begin{figure} 515 \centering 516 \begin{flushleft} 517 \textbf{Procedure} D-TDVS($i, l$) 518 \end{flushleft} 519 \centering 520 \algsetup{linenodelimiter=.} 521 \begin{algorithmic}[1] 522 \STATE $slk = \sum_{p=1}^{i-1}{slk_p}$; 523 \STATE retrieve $ovfl_{i,(l-1)}$ of task $\tau_i$ from lookup table 524 \WHILE {$slk \ge ovfl_{i,(l-1)}$} 525 \STATE $l=l-1$; 526 \STATE $slk = slk - ovfl_{i,(l-1)}$ 527 \STATE update $ovfl_{i,(l-1)}$ based on the lookup table 528 \ENDWHILE 529 \RETURN 530 \end{algorithmic} 531 \caption{Dynamic task level voltage scaling algorithm (D-TDVS).} 532 \label{alg:DTDVS} 533 \end{figure} 534 535 536 537 \subsection{Reevaluation of DVS Policies at Task Level}\label{D-TDVS} 538 The dynamic reevaluation of DVS strategies at the task level is similar to the reevaluation of DVS policies at the application level. During the offline scheduling, the T-DVS algorithm given in Section \ref{TDVS} statically derives the optimum combination of frequency allocations for all the tasks and stores the information, such as the pre-computed execution time overflows and overall execution times of tasks, in a lookup table for dynamic adaptation. In the runtime, the frequency of each task is scaled individually without affecting the operating frequency of other tasks. 539 540 Fig. \ref{alg:DTDVS} shows the dynamic reevaluation of T-DVS scheduling, referred as to D-TDVS. Assume task $\tau_{i-1}$ finishes its execution and task $\tau_i$ is scheduled to execute at the voltage level $l$. The scheduler checks if the accumulated slack time $slk$ from tasks $\tau_j$ ($1 \le j \le i-1$) is large enough to scale down the frequency $f_i$ of task $\tau_i$ by one or more levels. This can be verified by comparing the execution time overflow of task $\tau_i$ at lower voltage levels with the current available slack $slk$. If the available slack $slk$ is greater than the execution time overflow of task $\tau_i$ at the voltage level ($l-1$), the processor voltage is scaled down by one level and the current available slack is updated, else the slack continues to accumulate for tasks with lower priorities until it is updated when task $\tau_i$ is finished. 541 542 543 The runtime reevaluation of task level scheduling can be even simpler. That is, after task $\tau_{i-1}$ finishes its execution at the operating frequency $f_{i-1}$ and the current slack time $slk$ is ready, the new candidate operating frequency $f_i‘$ of task $\tau_i$ is derived as $$f_i‘=f_i \times \frac {OE_i} {slk + OE_i},$$ where $OE_i$ is the overall execution time of task $\tau_i$ at the frequency $f_i$. Comparing $f_i‘$ with the lower frequencies supported by the processor determines whether or not the operating frequency $f_i$ of task $\tau_i$ can be feasibly scaled down. This scheme takes constant time. It requires $n\times (L-1)$ extra memory space to store the overall execution time of each task for the adaptation of the offline task schedule to the runtime behavior of tasks and fault characteristics. 544 545 546 547 \section{Simulation Results and Overhead Analysis}\label{Experiments} 548 The proposed scheduling schemes consist of offline components (A-DVS and T-DVS) and online components (D-ADVS and D-TDVS). Energy efficiency and fault tolerance capabilities of the proposed schemes were validated using extensive simulation experiments. The scheduling overhead of the online components of the proposed schemes was also evaluated using Xtrem \cite{CONTRERAS04}, a SimpleScalar-based Intel XScale processor simulator. 549 550 551 Real-life task set benchmarks from \cite{KIM96} and \cite{LOCKE91} were used to compare the performance and energy characteristics of the proposed schemes with those of the scheduling schemes presented in \cite{ZHANG06}. 552 Similar to the approach in \cite{ZHANG06}, the worst case number of fault occurrences in a task instance is assumed to be a fixed number $k$, which is essentially the number of fault occurrences of the longest task at the lowest frequency level. This strategy of selecting $k$ ensures a fair comparison between the proposed schemes and the benchmarking schemes in \cite{ZHANG06}. Since the proposed schemes utilize the slack due to uncertainties in fault occurrences for energy savings, wether or not using a fixed number of fault occurrences does not affect the effectiveness of the proposed schemes. 553 Two DVS-capable processors, Transmeta Crusoe supporting 5 voltage and frequency levels \cite{TRANSMETA} and Intel XScale PXA260 supporting 3 voltage and frequency levels \cite{INTEL-PXA}, were used for estimating the energy consumption. The discrete frequencies, supply voltages, and TDP power of the two processors are listed in Table \ref{table:processor-param}. 554 555 556 557 \begin{table} 558 \caption {Processor frequencies, supply voltages and power(in \cite{TRANSMETA,INTEL-PXA}).} 559 \label{table:processor-param} 560 \begin{center} 561 \scriptsize 562 \begin{tabular}{|c|c|c|c|} 563 \hline 564 \backslashbox{Processors}{Characteristics} & ($\mega\hertz$) & ($\volt$) & ($\milli\watt$)\565 \cline{1-4} 566 & 200 & 1.0 & 178 \567 \cline{2-4} 568 Intel XScale PXA260 & 300 & 1.1 & 283 \569 \cline{2-4} 570 & 400 & 1.3 & 411 \\ \hline 571 \multicolumn {4}{c}{} \\ \hline 572 & 300 & 1.2 & 1300 \\ \cline{2-4} 573 & 400 & 1.225 & 1900 \\ \cline{2-4} 574 Transmeta Crusoe & 533 & 1.35 & 3000 \\ \cline{2-4} 575 & 600 & 1.5 & 4200 \\ \cline{2-4} 576 & 667 & 1.6 & 5300 \\ \hline 577 \end{tabular} 578 \end{center} 579 \end{table} 580 581 582 \begin{table} 583 \caption {INS and CNC real-life task sets.} 584 \label{table:INS/CNC taskset} 585 \begin{center} 586 \scriptsize 587 \begin{tabular}{|c|c|c|c|c|c|c|} 588 \hline 589 Task & \multicolumn{2}{c|}{Period ($\micro\second$)}& \multicolumn{2}{c|}{Deadline ($\micro\second$)} & \multicolumn{2}{c|}{WCET ($\micro\second$)}\\ \cline{2-7} 590 index & INS&CNC & INS&CNC& INS&CNC \\ \hline 591 1 & 2,500 & 2,400& 2,500 & 2,400 & 1,180 & 35 \\ \hline 592 2 & 40,000 & 2,400& 40,000 & 2,400 & 4,280 & 40 \\ \hline 593 3 & 625,000 & 4,800& 625,000 & 4,800 & 10,280 & 80 \\ \hline 594 4 & 1,000,000& 4,800& 1,000,000& 4,800 & 20,280 & 720 \\ \hline 595 5 & 1,000,000& 2,400& 1,000,000& 2,400 & 100,280& 165 \\ \hline 596 6 & 1,250,000& 2,400& 1,250,000& 2,400 & 25,000 & 165 \\ \hline 597 7 & & 9,600& & 4,000 & & 570 \\ \hline 598 8 & & 7,800& & 4,000 & & 570 \\ \hline 599 \end{tabular} 600 \end{center} 601 \end{table} 602 603 604 605 \subsection{Energy Characteristics}\label{Experiments:Energy} 606 Two real-life task sets, Inertial Navigation System (INS) \cite{LOCKE91} and Computer Numerical Control (CNC) \cite{KIM96}, were utilized to benchmark the energy consumption of the proposed scheduling algorithms. The characteristics of the benchmarking task sets are shown in Table \ref{table:INS/CNC taskset}, where 607 the worst case execution time of a task is assumed to correspond to the maximum processor speed. It is assumed that both checkpointing and data retrieval take 0.4$\milli\second$, and the energy overhead of both checkpointing and data retrieval is 160$\micro\joule$. It is also assumed that online energy savings are achieved by only using the slack due to variations in fault occurrences. 608 609 610 The online and offline components are integral parts of the proposed application and task level scheduling schemes. Energy savings are achieved by primarily using online components that are enabled by the offline components. 611 Energy values are obtained by multiplying processor power consumption and task execution time and considering checkpointing overhead and DVS transition overhead. Simulation results are reported for both application and task level techniques and compared with the JFTC, JFTA and JFTT techniques presented in \cite{ZHANG06}. 612 JFTC, JFTA and JFTT refer to offline constant frequency, application level voltage scaling, and task level voltage scaling schemes, respectively. 613 614 615 The online component is essentially a greedy heuristic since it scales down the processor speed to save energy once the available slack time is large enough. 616 An exhaustive search based online scheme is then developed to investigate the optimality of the proposed scheme. 617 In the exhaustive search based online scheme, all possible adaptations of offline task schedules due to the slack generated in the runtime are produced and the energy consumption of each adapted task schedule is computed. 618 The adapted task schedule with the minimum energy consumption is deemed to be optimal. The optimal adapted task schedule, referred to as $Optimal$, is compared with the proposed scheme in energy consumption. 619 In the presented results, $E_{13}$ denotes the percentage of ($E_1-E_3$)/$E_1\times100\%$, $E_{23}$ denotes the percentage of ($E_2-E_3$)/$E_2\times100\%$, $E_{43}$ denotes the percentage of ($E_4-E_3$)/$E_4\times100\%$, and $NF$ denotes an infeasible schedule. 620 %\backslashbox{Tasks}{voltage level} & 1 & 2 & 3 \\ \hline 621 622 \begin{table}[ht] 623 \begin{center} 624 \begin{tabular}{|c|c|c|} 625 626 \multicolumn{ 3}{c}{{\bf The final temperature $T_{end}$ of each task }} \627 \hline 628 Task & {Temperature} & {Temperature}\\ 629 Set & {TSVS} & {RTS} \630 \hline 631 task 1 & 76.5285 & 71.9620 \\ \cline{1-3} 632 633 task 2 & 83.0586 & 61.3535 \\ \cline{1-3} 634 635 task 3 & 89.5839 & 65.4356 \\ \cline{1-3} 636 637 task 4 & 91.4333 & 80.8576 \\ \cline{1-3} 638 639 task 5 & 108.714 & 96.7676 \\ \cline{1-3} 640 641 task 6 & 117.870 & 95.6829 \\ \cline{1-3} 642 643 task 7 & 106.363 & 109.983 \\ \cline{1-3} 644 645 task 8 & 118.104 & 103.140 \\ \cline{1-3} 646 647 task 9 & 119.419 & 97.8610 \\ \cline{1-3} 648 649 task 10 & 111.702 & 91.7257 \\ \cline{1-3} 650 651 task 11 & 113.545 & 90.8460 \\ \cline{1-3} 652 653 task 12 & 112.488 & 81.7293 \\ \cline{1-3} 654 655 task 13 & 107.332 & 77.3995 \\ \cline{1-3} 656 657 task 14 & 101.201 & 97.1904 \\ \cline{1-3} 658 659 task 15 & 94.6294 & 104.856 \\ \cline{1-3} 660 661 task 16 & 106.142 & 94.6062 \\ \cline{1-3} 662 663 task 17 & 117.629 & 100.567 \\ \cline{1-3} 664 665 task 18 & 102.603 & 105.390 \\ \cline{1-3} 666 667 task 19 & 105.944 & 94.1424 \\ \cline{1-3} 668 669 task 20 & 112.010 & 93.7714 \\ \cline{1-3} 670 671 {\bf average} & 104.815 & 90.7634 \\ \cline{1-3} 672 {\bf peak} & 119.419 & 109.983 \\ \cline{1-3} 673 \hline 674 \end{tabular} 675 \end{center} 676 \end{table} 677 678 \begin{table} 679 \caption {Energy consumption of task level voltage scaling on Transmeta Crusoe processor.} 680 \label{table:Energy-TDVS-Transmeta} 681 \begin{center} 682 \scriptsize 683 \begin{tabular}{|c|c|c|c|c|c|c|} 684 \hline 685 Task & $k$ & JFTC\cite{ZHANG06} & JFTT\cite{ZHANG06} & Proposed& $E_{13}$ & $E_{23}$\686 set & & $E_1$(mJ)& $E_2$(mJ)& $E_3$(mJ)& (\%)& (\%)\\ \hline 687 &1 &18.1 &14.9 &10.0 &44.8 &32.9\\ 688 &2 &24.3 &21.1 &12.9 &46.9 &38.9\\ \cline{2-7} 689 CNC&3 &29.8 &26.7 &13.4 &55.0 &49.8\\ \cline{2-7} 690 &4 &34.9 &34.1 &14.5 &58.5 &57.5\\ \cline{2-7} 691 &5 &$NF$ &$NF$ &13.1 &$-$ &$-$\\ \hline 692 &1 &6050.7 & 5457.6&4087.9 & 32.4 &25.1\\ \cline{2-7} 693 INS &2 &6735.1 & 6222.1&5070.4 &24.7 &18.5\\ \cline{2-7} 694 &3 &7300.2 &7284.1 &5637.4 &22.8 &22.6\\ \cline{2-7} 695 &4 &$NF$ &$NF$ &5961.6 &$-$ &$-$ \\ \hline 696 \end{tabular} 697 \end{center} 698 \end{table} 699 700 701 Table \ref{table:Energy-ADVS-Transmeta} shows that the proposed application level scheduling scheme saves 22-52\% energy over JFTC and 22-50\% energy over JFTA on Crusoe processors. 702 Table \ref{table:Energy-ADVS-Transmeta} also shows that the discrepancy in energy consumption of the proposed application level scheduling scheme and the exhaustive search based optimal scheme is up to 8\% for CNC task set. 703 The discrepancy is relatively small for INS task set. This is because execution times of tasks in INS task set are relatively long and much more slack is needed to scale down the processor speed. 704 Due to space limitation, the results on the comparison of the proposed scheme and the exhaustive search based optimal method is reported only for INS task set on Transmeta Crusoe processor. 705 706 707 Table \ref{table:Energy-TDVS-Transmeta} shows that the proposed task level scheduling scheme saves 22-58\% energy over JFTC and 18-57\% energy over JFTT on Crusoe processors. 708 Similarly, the energy savings of the proposed application and task level schemes over the benchmarking schemes on XScale processors are shown in Table \ref{table:Energy-ADVS-XScale} and Table \ref{table:Energy-TDVS-XScale}. 709 It can be drawn that the proposed scheduling schemes achieve significant energy savings when compared to the benchmarking scheduling schemes. This is primarily due to the runtime slack from uncertainties of fault occurrences. 710 It also can be drawn (e.g. for $k$ = 5 for CNC and $k$ = 4 for INS) that the proposed techniques have higher fault tolerance capabilities due to relaxed utilization constraints of the proposed ECRMA-based scheduling approach. 711 712 713 \begin{table} 714 \caption {Energy consumption of application level voltage scaling on Intel XScale processor.} 715 \label{table:Energy-ADVS-XScale} 716 \begin{center} 717 \scriptsize 718 \begin{tabular}{|c|c|c|c|c|c|c|} 719 \hline 720 Task & $k$ & JFTC\cite{ZHANG06} & JFTA\cite{ZHANG06} & Proposed& $E_{13}$ & $E_{23}$\721 set & & $E_1$($\milli\joule$)& $E_2$($\milli\joule$)& $E_3$($\milli\joule$)& (\%)& (\%)\\ \hline 722 &1 &7.6 &8.2 &3.6 &52.6 &56.1\\ \cline{2-7} 723 &2 &12.8 &13.8 &7.1 &44.5 &48.6\\ \cline{2-7} 724 CNC &3 &17.6 &18.8 &9.0 &48.9 &52.1\\ \cline{2-7} 725 &4 &22.2 &22.2 &10.5 &52.7 &52.7\\ \cline{2-7} 726 &5 &$NF$ &$NF$ &12.9 &$-$ &$-$ \\ \hline 727 &1 &1326.2 &1326.2 &923.8 &30.3 &30.3\\ \cline{2-7} 728 INS &2 &1853.6 &1853.6 &1248.4 &32.6 &32.6\\ \cline{2-7} 729 &3 &2298.2 &2298.2 &1510.6 &34.3 &34.3\\ \cline{2-7} 730 &4 &$NF$ &$NF$ &1758.8 &$-$ &$-$ \\ \hline 731 \end{tabular} 732 \end{center} 733 \end{table} 734 735 736 \begin{table} 737 \caption {Energy consumption of task level voltage scaling on Intel XScale processor.} 738 \label{table:Energy-TDVS-XScale} 739 \begin{center} 740 \scriptsize 741 \begin{tabular}{|c|c|c|c|c|c|c|} 742 \hline 743 Task & $k$ & JFTC\cite{ZHANG06} & JFTT\cite{ZHANG06} & Proposed& $E_{13}$ & $E_{23}$\744 set & & $E_1$($\milli\joule$)& $E_2$($\milli\joule$)& $E_3$($\milli\joule$)& (\%)& (\%)\\ \hline 745 &1 &7.6 &9.1 &3.6 &52.6 &60.4\\ \cline{2-7} 746 &2 &12.8 &14.5 &7.5 &41.4 &48.3\\ \cline{2-7} 747 CNC&3 &17.6 &18.5 &9.5 &46.0 &48.6\\ \cline{2-7} 748 &4 &22.2 &22.5 &11.0 &50.5 &51.1\\ \cline{2-7} 749 &5 &$NF$ &$NF$ &10.8 &$-$ &$-$\\ \hline 750 &1 &1326.2 &1327.5 &932.5 &30.3 &30.4\\ \cline{2-7} 751 INS &2 &1853.6 &1855.9 &1292.6 &30.3 &30.4\\ \cline{2-7} 752 &3 &2298.2 &2299.0 &1496.5 &34.9 &34.9\\ \cline{2-7} 753 &4 &$NF$ &$NF$ &1726.5 &$-$ &$-$ \\ \hline 754 \end{tabular} 755 \end{center} 756 \end{table} 757 758 759 760 \subsection{Runtime Overhead Analysis}\label{Experiments:Overhead} 761 The proposed quasi-static scheduling scheme comprises two components. One is the offline scheduling component and the other is the runtime counterpart of the offline component. Since it is the overhead of the runtime component that has adverse impact on system timeliness, the complexity of the runtime component of the quasi-static scheme is evaluated in this section using Xtrem \cite{CONTRERAS04}, a high level functional power simulator tailored for Intel Xscale Technology-based systems. 762 763 764 Xtrem is a powerful infrastructure capable of providing power and cycle level estimation for C-based applications targeted to Intel Xscale core. It is based on the widely used SimpleScalar-Arm architecture simulator and is used for verifying the time complexity of the proposed schemes and estimating the runtime impact of dynamic DVS policies on the schedule feasibility. Due to space limitation, only the overhead of the application level scheduling scheme is analyzed in this subsection. 765 766 767 The proposed dynamic D-ADVS scheme reduces runtime overhead by utilizing the pre-computed execution time overflow that is stored in system memory. The D-ADVS proceeds in three steps: (1) adding up the overflows of unexecuted tasks, (2) comparing the current available slack time with the sum of the overflows to make a decision on voltage scaling, and (3) updating the accumulated slack time. The D-ADVS is called whenever a task instance finishes its execution, which ensures that the feasibility of the offline schedule is maintained and the runtime generated slack time is utilized opportunely for energy savings. The D-ADVS scheme involves three primitive operations: addition, multiplication and division. Each operation takes 7 cycles on Xtrem. The experiment results show that the overall overhead of the proposed D-ADVS is 821 cycles to execute the first instances of all tasks in the CNC task set. Since the D-ADVS is called at the end of the execution of each task instance and repeats its three steps over each unexecuted task in the task set, it incurs the worst case overhead at its first call. Similarly, the D-ADVS incurs the best case overhead at its last call. It is shown in the experiment results that the average cycles for the worst case overhead is 190 and the average cycles for the best case overhead is 81, which translates to 0.48$\micro\second$ and 0.20$\micro\second$ respectively at the operating frequency of 400$\mega\hertz$. This time overhead is negligible when compared to the execution times of tasks in the CNC task set. 768 769 770 771 \section{Implementation of Scheduling Algorithms on a Real-Life Test Bed}\label{Implementation on testbed} 772 This section presents the implementation and validation of the proposed energy-efficient task scheduling schemes for hard real-time embedded systems. A real-life test bed has been developed to accurately benchmark the energy savings of the proposed scheduling schemes. The test bed comprises a dual-core Intel T2500 processor with dynamic voltage scaling capability and runs the Linux Fedora 8 based hard real-time scheduling. A detailed description of the implementation was presented in \cite{WEI11MEJ}. 773 774 775 776 \subsection{Implementation Process and Energy Measurement Method}\label{Implementation: platform construction} 777 The implementation of an energy-efficient task scheduling algorithm requires that the hardware and software platform on which the algorithm is to be implemented supports hard real-time scheduling, fixed priority and preemptive scheduling, and dynamic voltage scaling. A mini-ITX Express motherboard from Radisys Corporation \cite{RADISYS} was selected as the hardware platform due to its support of DVS and ease with energy measurement. The embedded motherboard mainly comprises an Intel Core Duo T2500 processor and 512M DDR2 memory module. T2500 is a DVS-capable processor with 2MB L2 cache. 778 The Linux Fedora 8 operating system, one of the most widely used operating systems, was chosen as the software platform for the implementation. It supports two fixed priority and preemptive real-time scheduling policies: First-In-First-Out (FIFO) and Round-Robin (RR). The FIFO policy was selected as the basis for implementing RMA-based scheduling schemes. The rate monotonic scheduling scheme is utilized to assigned priorities to tasks with different periods while FIFO is used to break ties when tasks have the same priorities. The Linux FIFO policy provides a simple yet efficient approach to implementing fixed-priority preemptive scheduling algorithms. 779 780 781 The implementation of the RMA-based task scheduling algorithms consists of two major steps: task generation and task scheduling. In the first step, Dhrystone-based independent and periodic tasks were generated and task characteristics were derived. In the second step, the generated tasks were scheduled using scheduling algorithms such as the JFTA \cite{ZHANG06} and the proposed A-DVS. 782 783 784 Dhrystone, a synthetic computing benchmark program developed to be representative of system programming \cite{WEICKER84}, was selected and modified to generate independent and periodic tasks. Dhrystone was written in C language code, has small size, and is portable to a large number of platforms and processor architectures. These characteristics make Dhrystone a popular benchmark in embedded applications due to its small memory requirements. The output of Dhrystone benchmark program is the number of iterations of the Dhrystone main code in unit time, which is derived by dividing a predefined number of iterations of the Dhrystone main code by the corresponding execution time. Tasks with different execution times are generated by varying the number of iterations of the Dhrystone main code. Ten tasks the execution times of which range from 1$\milli\second$ to 1000$\milli\second$ were generated using the Dhrystone benchmark program. Task utilizations were generated based on the Beta distribution of probability and were limited to being less than $\ln2$, the asymptotic bound of RMA \cite{WEI08}. Task periods were hence derived as the ratio of the task execution times to the task utilizations. 785 786 787 \begin{figure} 788 % Requires \usepackage{graphicx} 789 \begin{center} 790 \centering 791 \scriptsize 792 \includegraphics*[width=3.5in,viewport=220 505 640 660]{DAQ.pdf}\793 \end{center} 794 \caption{DAQ system and current probes for energy measurement.} 795 \label{Fig:DAQ system} 796 \end{figure} 797 798 799 Since the ATX 4-pin connector on the motherboard exclusively provides 12$\volt$ voltage to the voltage regulator module (VRM) of CPU and the ATX 20-pin connector on the motherboard provides 12$\volt$, 5$\volt$, and 3.3$\volt$ voltages to components on system board, the energy consumption of CPU and system board can be approximated by the energy delivered from ATX power supply connectors. This delivered energy can be derived by multiplying the currents flowing through ATX connectors by the voltages at the ATX connectors. Considering the fact that a VRM can achieve energy efficiency of up to 95\% and difficulties to directly measure energy consumption of an onboard device, this strategy for energy estimation can be used to sketch energy consumption of CPU and system board. More specifically, measurement of energy consumption is accomplished by using a DAQ system and Tektronix A622 AC/DC current probe. The DAQ system is comprised of an NI PCI-6040E DAQ, NI BNC-2110 connector block, and a host computer with LabView, as is shown in Figure \ref{Fig:DAQ system}. 800 801 802 803 \subsection{Numerical Results}\label{Implementation:Numerical results} 804 The offline scheduling algorithms presented in \cite{ZHANG06} and the proposed quasi-static scheduling schemes were implemented on the test bed. Due to space limitation, only the results for the JFTA \cite{ZHANG06} and the proposed application level scheduling scheme (the A-DVS combined with its dynamic counterpart D-ADVS) were reported. 805 One core of the Core Duo processor Intel T2500 was disabled in the implementation. 10 generated Dhrystone-based tasks were scheduled to execute on the test bed using the JFTA and the proposed application level scheme, respectively. Table \ref{table:Testbed-Energy-ADVS/JFTA} shows the energy consumptions of the core and system board, respectively. 806 $E_{JA}$ = ($E_J$ -$E_A$)/$E_J$ $\times$ 100\% denotes the energy savings of the proposed scheme when compared to the benchmarking scheme JFTA, where $E_J$ and $E_A$ represent energy consumptions of the task set under JFTA and the proposed application level scheme, respectively. $NF$ denotes that the tasks in the task set can not be feasibly scheduled. 807 808 809 \begin{table} 810 \caption {Energy consumptions of CPU and system board under JFTA and the proposed quasi-static application level scheduling scheme.} 811 \label{table:Testbed-Energy-ADVS/JFTA} 812 \begin{center} 813 \scriptsize 814 \begin{tabular}{|c|c|c|c|c|} 815 \hline 816 Mini-ITX& & JFTA\cite{ZHANG06} & Proposed & \817 motherboard &$k$ &$E_J$($\joule$)& $E_A$($\joule$) &$E_{AJ}$($\joule$)\\ \hline 818 &0 &312.1 &312.1 &0 \\ \cline{2-5} 819 &1 &396.7 &318.5 &19.7 \\ \cline{2-5} 820 &2 &408.4 &318.5 &22.0 \\ \cline{2-5} 821 Core &3 &418.1 &325.6 &22.1 \\ \cline{2-5} 822 &4 &436.2 &330.7 &24.2 \\ \cline{2-5} 823 &5 &$NF $ &341.2 & $-$ \\ \hline 824 &0 &489.1.2 &489.12 &0 \\ \cline{2-5} 825 &1 &488.5.6 &490.46 &-0.38 \\ \cline{2-5} 826 System &2 &488.7.2 &490.82 &-0.45 \\ \cline{2-5} 827 board &3 &489.1 &491.4 &-0.46 \\ \cline{2-5} 828 &4 &491.6 &490.4 &0.25 \\ \cline{2-5} 829 &5 &$ NF$ &491.0 & $-$ \\ \hline 830 \end{tabular} 831 \end{center} 832 \end{table} 833 834 835 836 The energy consumption of the proposed quasi-static application scheme is verified and compared with that of the JFTA. Table \ref{table:Testbed-Energy-ADVS/JFTA} shows that as compared to the proposed scheme, the JFTA consumes the same core energy in the absence of fault occurrences and consumes about 20\% more core energy in the presence of fault occurrences. This is because JFTA is an offline scheduling algorithm that considers the worst case fault occurrences to maintain the schedule feasibility. On the contrary, the proposed scheme is a quasi-static scheduling scheme the offline components of which enables the online components to save energy by utilizing uncertainties in fault occurrences. 837 838 839 The energy consumptions of the system board excluding the processor are close for the two scheduling algorithms under different fault arrival rates. For example, the difference between the JFTA and the proposed scheme in energy consumption of the system board is less than 0.5\% with the number of fault occurrences ranging from 0 to 5, as is shown in Table \ref{table:Testbed-Energy-ADVS/JFTA}. Furthermore, the energy consumption of the system board when it is idle is 479.8$\joule$, which is about 10$\joule$ less as compared to the energy consumption of the system board under the load of the Dhrystone-based task set. 840 841 842 There are three possible reasons for the relative stableness in the energy consumption of the system board. First, the Dhrystone is a CPU-intensive benchmark program and it does not intensively exercise the system board, especially the memory module, to store and load data. Second, the JFTA and the proposed scheduling algorithms are also CPU-intensive and their impact on the system board energy consumption is small. Finally, the total size of the instructions of the schedulers and the Dhrystone-based tasks in the form of an executable file is about 20$\kilo$. This file could be readily fit in the 2MB L2 cache of the Intel T2500 processor, which reduces the memory access overheads. 843 844 845 846 \section{CONCLUSION}\label{conclusion} 847 This paper presents efficient quasi-static scheduling schemes that combine the offline feasibility analysis of RMA schedules and the online voltage scaling for hard real-time systems. The proposed schemes captures the effects of voltage scaling on system reliability, and achieve energy savings by utilizing both the static slack in offline task schedules and dynamic slack due to variations in task execution time and uncertainties of fault occurrences. 848 The extension of the offline algorithms is enabled by pre-computing and saving in a lookup table the maximum slack requirements for the processor to slow down in the runtime. The stored slack time requirements are retrieved and compared at runtime with the accumulated slack. The online voltage scaling is performed whenever the generated slack time is equal to or greater than the stored slack requirements. Simulation results based on two real-life test sets and processor data sheets show that the proposed techniques achieve energy savings of up to 50\% over the state-of-the-art schemes. 849 A SimpleScalar-based Intel XScale processor simulator, Xtrem, was used to evaluate the proposed scheduling schemes in addition to extensive simulation experiments. A hard real-time test bed has been designed and the proposed algorithms were also verified on the test bed. 850 851 852 \bibliographystyle{IEEETran} 853 \bibliography{RefDBase} 854 \end{document}
RefDBase.bib
1 @ARTICLE{FAN03, 2 AUTHOR = {X. Fan and C. Ellis and A. Lebeck}, 3 TITLE = {The synergy between power-aware memory systems and processor voltage}, 4 JOURNAL = {Workshop on Power-Aware Computing Systems}, 5 YEAR = {2003}, 6 volume = {}, 7 number = {}, 8 pages = {}, 9 } 10 11 12 13 @ARTICLE{ZHU04, 14 AUTHOR = {D. Zhu and R. Melhem and D. Mosse}, 15 TITLE = {The effects of energy management on reliability in real-time embedded systems}, 16 JOURNAL = {Proceedings of the International Conference on Computer-Aided Design}, 17 YEAR = {2004}, 18 volume = {}, 19 number = {}, 20 pages = {}, 21 } 22 23 24 25 @ARTICLE{ZHANG04, 26 AUTHOR = {Y. Zhang and K. Chakrabarty}, 27 TITLE = {Task feasibility analysis and dynamic voltage scaling in fault-tolerant real-time embedded systems}, 28 JOURNAL = {The Proceedings of the Design Automation and Test in Europe}, 29 YEAR = {2004}, 30 volume = {}, 31 number = {}, 32 pages = {}, 33 } 34 35 36 37 @ARTICLE{LANGLEY03, 38 AUTHOR = {T. Langley and R. Koga and T. Morris }, 39 TITLE = {Single-event effects test results of 512MB SDRAMs}, 40 JOURNAL = {IEEE Radiation Effects Data Workshop}, 41 YEAR = {Jul. 2003}, 42 volume = {}, 43 number = {}, 44 pages = {98-101}, 45 } 46 47 48 @ARTICLE{NORMAND96, 49 AUTHOR = {E. Normand}, 50 TITLE = {Single event upset at ground level}, 51 JOURNAL = {IEEE Transactions on Nuclear Science}, 52 YEAR = {1996}, 53 volume = {43}, 54 number = {6}, 55 pages = {2742-2750}, 56 } 57 58 59 60 @ARTICLE{JEJURIKAR04, 61 AUTHOR = {R. Jejurikar and C. Pereira and R. Gupta}, 62 TITLE = {Leakage aware dynamic voltage scaling for real-time embedded systems}, 63 JOURNAL = {Proceedings of the DAC}, 64 YEAR = {2004}, 65 volume = {}, 66 number = {}, 67 pages = {275-280}, 68 } 69 70 71 @ARTICLE{BUTTS00, 72 AUTHOR = {J. Butts and G. Sohi}, 73 TITLE = {A static power model for architects}, 74 JOURNAL = {International Symposium on Microarchitecture}, 75 YEAR = {2000}, 76 volume = {}, 77 number = {}, 78 pages = {}, 79 80 81 82 83 @ARTICLE{FAN03, 84 AUTHOR = {X. Fan and C. Ellis and A. Lebeck}, 85 TITLE = {The synergy between power-aware memory systems and processor voltage}, 86 JOURNAL = {Workshop on Power-Aware Computing Systems}, 87 YEAR = {2003}, 88 volume = {}, 89 number = {}, 90 pages = {}, 91 } 92 93 94 95 @ARTICLE{ZHU04, 96 AUTHOR = {D. Zhu and R. Melhem and D. Mosse}, 97 TITLE = {The effects of energy management on reliability in real-time embedded systems}, 98 JOURNAL = {Proceedings of the International Conference on Computer-Aided Design}, 99 YEAR = {2004}, 100 volume = {}, 101 number = {}, 102 pages = {35-40}, 103 } 104 105 106 @ARTICLE{FOAD08, 107 AUTHOR = {F. Dabiri and N. Amini and M. Rofouei and M. Sarrafzadeh}, 108 TITLE = {Reliability-aware optimization for DVS-enabled real-time embedded systems}, 109 JOURNAL = {The 9th International Symposium on Quality Electronic Design}, 110 YEAR = {2008}, 111 volume = {}, 112 number = {}, 113 pages = {780-783}, 114 } 115 116 @ARTICLE{ZHANG04, 117 AUTHOR = {Y. Zhang and K. Chakrabarty}, 118 TITLE = {Task feasibility analysis and dynamic voltage scaling in fault-tolerant real-time embedded systems}, 119 JOURNAL = {Proceedings of the Design Automation and Test in Europe}, 120 YEAR = {2004}, 121 volume = {}, 122 number = {}, 123 pages = {}, 124 } 125 126 127 128 @ARTICLE{LANGLEY03, 129 AUTHOR = {T. Langley and R. Koga and T. Morris }, 130 TITLE = {Single-event effects test results of 512MB SDRAMs}, 131 JOURNAL = {IEEE Radiation Effects Data Workshop}, 132 YEAR = {Jul. 2003}, 133 volume = {}, 134 number = {}, 135 pages = {98-101}, 136 } 137 138 139 @ARTICLE{NORMAND96, 140 AUTHOR = {E. Normand}, 141 TITLE = {Single event upset at ground level}, 142 JOURNAL = {IEEE Transactions on Nuclear Science}, 143 YEAR = {1996}, 144 volume = {}, 145 number = {}, 146 pages = {}, 147 } 148 149 @ARTICLE{CHANDRAKASAN92, 150 AUTHOR = {A. Chandrakasan and S. Sheng and R. Brodersen}, 151 TITLE = {Low-power CMOS digital design}, 152 JOURNAL = {IEEE Journal of Solid-State Circuits}, 153 YEAR = {1992}, 154 volume = {}, 155 number = {}, 156 pages = {}, 157 } 158 159 @ARTICLE{REINHARDT00, 160 AUTHOR = {S. Reinhardt and S. Mukherjee}, 161 TITLE = {Transient fault detection via simultaneous multithreading}, 162 JOURNAL = {ACM SIGARCH Computer Architecture News}, 163 YEAR = {2000}, 164 volume = {}, 165 number = {}, 166 pages = {}, 167 } 168 169 @ARTICLE{AKYILDIZ02, 170 AUTHOR = {I. Akyildiz, W. Su, Y. Sankarasubramaniam, and E. Cayirci}, 171 TITLE = {Wireless sensor networks: A survey}, 172 JOURNAL = {IEEE Communications Magazine}, 173 YEAR = {2002}, 174 volume = {}, 175 number = {}, 176 pages = {}, 177 } 178 179 @ARTICLE{SHIN84, 180 AUTHOR = {K. Shin and Y. Lee}, 181 TITLE = {Error detection process-model, design and its impact on computer performance}, 182 JOURNAL = {IEEE Transactions on Computers}, 183 YEAR = {1984}, 184 volume = {C-33}, 185 number = {6}, 186 pages = {529-540}, 187 } 188 189 @ARTICLE{CHANDY75, 190 AUTHOR = {K. Chandy and J. Browne and C. Dissly and W. Uhrig}, 191 TITLE = {Analytic models for rollback and recovery strategies in data base systems}, 192 JOURNAL = {IEEE Transactions on Software Engineering}, 193 YEAR = {1975}, 194 volume = {}, 195 number = {}, 196 pages = {}, 197 } 198 199 @ARTICLE{CHANDY75, 200 AUTHOR = {K. Chandy and J. Browne and C. Dissly and W. Uhrig}, 201 TITLE = {Analytic models for rollback and recovery strategies in data base systems}, 202 JOURNAL = {IEEE Transactions on Software Engineering}, 203 YEAR = {1975}, 204 volume = {}, 205 number = {}, 206 pages = {}, 207 } 208 209 210 @ARTICLE{SHIN87, 211 AUTHOR = {K. Shin and T. Lin and Y. Lee}, 212 TITLE = {Optimal checkpointing of real-time tasks}, 213 JOURNAL = {IEEE Transactions on Computers}, 214 YEAR = {1987}, 215 volume = {C-36}, 216 number = {11}, 217 pages = {1328-1341}, 218 } 219 220 221 @ARTICLE{ZIV97, 222 AUTHOR = {A. Ziv and J. Bruck}, 223 TITLE = {An online algorithm for checkpoint placement}, 224 JOURNAL = {IEEE Transactions on Computers}, 225 YEAR = {1997}, 226 volume = {}, 227 number = {}, 228 pages = {}, 229 } 230 231 @ARTICLE{KWAK01, 232 AUTHOR = {S. Kwak and B. Choi and B. Kim}, 233 TITLE = {An optimal checkpointing strategy for real-time control systems under transient faults}, 234 JOURNAL = {IEEE Transactions on Reliability}, 235 YEAR = {2001}, 236 volume = {50}, 237 number = {3}, 238 pages = {293-301}, 239 } 240 241 @ARTICLE{CHANDRAKASAN92, 242 AUTHOR = {A. Chandrakasan and S. Sheng and R. Brodersen}, 243 TITLE = {Low-power CMOS digital design}, 244 JOURNAL = {IEEE Journal of Solid-State Circuits}, 245 YEAR = {1992}, 246 volume = {}, 247 number = {}, 248 pages = {}, 249 } 250 251 @ARTICLE{CHANDRAKASAN98, 252 AUTHOR = {J. Lorch and A.J. Smith}, 253 TITLE = {Software strategies for portable computer energy management}, 254 JOURNAL = {IEEE Personal Communication Magazine}, 255 YEAR = {1998}, 256 volume = {}, 257 number = {}, 258 pages = {}, 259 } 260 261 @ARTICLE{BENINI00, 262 AUTHOR = {L Benini and A Bogliolo and G. Micheli}, 263 TITLE = {A survey of design techniques for system-level dynamic power management}, 264 JOURNAL = {IEEE Transactions on VLSI Systems}, 265 YEAR = {2000}, 266 volume = {8}, 267 number = {3}, 268 pages = {299-316}, 269 } 270 271 @ARTICLE{NAMGOONG97, 272 AUTHOR = {W. Namgoong and M. Yu and T. Meng}, 273 TITLE = {A high-efficiency variable-voltage CMOS dynamic DC-DC switching regulator}, 274 JOURNAL = {IEEE International Solid-State Circuits Conference}, 275 YEAR = {1997}, 276 volume = {}, 277 number = {}, 278 pages = {}, 279 } 280 281 @ARTICLE{ISHIHARA98, 282 AUTHOR = {T. Ishihara and H. Yasuura}, 283 TITLE = {Voltage scheduling problem for dynamically variable voltage processors}, 284 JOURNAL = {Proceedings of the ISLPED}, 285 YEAR = {1998}, 286 volume = {}, 287 number = {}, 288 pages = {}, 289 } 290 291 @ARTICLE{QUAN01, 292 AUTHOR = {G. Quan and X. Hu}, 293 TITLE = {Energy efficient fixed-priority scheduling for real-time systems on variable voltage processors}, 294 JOURNAL = {Proceedings of the DAC}, 295 YEAR = {2001}, 296 volume = {}, 297 number = {}, 298 pages = {}, 299 } 300 301 @ARTICLE{SHIN00, 302 AUTHOR = {Y. Shin and K. Choi and T. Sakurai}, 303 TITLE = {Power optimization of real time embedded systems on variable speed processors}, 304 JOURNAL = {Proceedings of the ICCAD}, 305 YEAR = {2000}, 306 volume = {}, 307 number = {}, 308 pages = {}, 309 } 310 311 @ARTICLE{ERNST04, 312 AUTHOR = {D. Ernst and S. Das and S. Lee and D. Blaauw and T. Austin and T. Mudge and N. S. Kim and K. Flautner. Razor}, 313 TITLE = {Circuit-level correction of timing errors for low-power operation}, 314 JOURNAL = {IEEE Micro}, 315 YEAR = {2004}, 316 volume = {24}, 317 number = {6}, 318 pages = {10-20}, 319 } 320 321 @ARTICLE{ZHANG03, 322 AUTHOR = {Y. Zhang and K. Chakrabarty}, 323 TITLE = {Energy-aware adaptive checkpointing in embedded real-time systems}, 324 JOURNAL = {Proceedings of the DATE}, 325 YEAR = {2003}, 326 volume = {}, 327 number = {}, 328 pages = {}, 329 } 330 331 @ARTICLE{ZHANG03+, 332 AUTHOR = {Y. Zhang and K. Chakrabarty and V. Swaminathan}, 333 TITLE = {Energy-aware fault tolerance in fixed-priority real-time embedded systems}, 334 JOURNAL = {Proceedings of the ICCAD}, 335 YEAR = {2003}, 336 volume = {}, 337 number = {}, 338 pages = {}, 339 } 340 341 @ARTICLE{MELHEM04, 342 AUTHOR = {R. Melhem and D. Mosse and E. Elnozahy}, 343 TITLE = {The interplay of power management and fault recovery in real-time systems}, 344 JOURNAL = {IEEE Transactions on Computers}, 345 YEAR = {2004}, 346 volume = {53}, 347 number = {2}, 348 pages = {217-231}, 349 } 350 351 @ARTICLE{ZHANG06, 352 AUTHOR = {Y. Zhang and K. Chakrabarty}, 353 TITLE = {A unified approach for fault tolerance and dynamic power management in fixed-priority real-time embedded systems}, 354 JOURNAL = {IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems}, 355 YEAR = {2006}, 356 volume = {25}, 357 number = {1}, 358 pages = {111-125}, 359 } 360 361 @ARTICLE{WEI06, 362 AUTHOR = {T. Wei and P. Mishra and K. Wu and H. Liang}, 363 TITLE = {Online task-scheduling for fault-tolerant low-energy real-time systems}, 364 JOURNAL = {Proceedings of the International Conference on Computer-Aided Design $($ICCAD$)$}, 365 YEAR = {2006}, 366 volume = {}, 367 number = {}, 368 pages = {}, 369 } 370 371 @ARTICLE{REED03, 372 AUTHOR = {R. Reed and J. Kinnison and J. Pickel and S. Buchner and P. Marshall and S. Kniffin and K. LaBel}, 373 TITLE = {Single-event effects ground testing and on-orbit rate prediction methods: the past, present, and future}, 374 JOURNAL = {IEEE Transactions on Nuclear Science}, 375 YEAR = {2006}, 376 volume = {50}, 377 number = {3}, 378 pages = {622-634}, 379 } 380 381 @ARTICLE{WEULERSSE06, 382 AUTHOR = {C. Weulersse and G. Hubert and G. Forget and N. Buard and T. Carriere and P. Heins and J. Palau and F. Saigne and R. Gaillard}, 383 TITLE = {DASIE Analytical Version: A Predictive Tool for Neutrons, Protons and Heavy Ions Induced SEU Cross Section}, 384 JOURNAL = {IEEE Transactions on Nuclear Science}, 385 YEAR = {2006}, 386 volume = {53}, 387 number = {4}, 388 pages = {1876-1882}, 389 } 390 391 392 @ARTICLE{CHANDRAKASAN92, 393 AUTHOR = {A. Chandrakasan and S. Sheng and R. Brodersen}, 394 TITLE = {Low-power CMOS digital design}, 395 JOURNAL = {IEEE Journal of Solid-State Circuits}, 396 YEAR = {1992}, 397 volume = {27}, 398 number = {4}, 399 pages = {473-484}, 400 } 401 402 403 @ARTICLE{BENINI00, 404 AUTHOR = {L Benini and A Bogliolo and G. Micheli}, 405 TITLE = {A survey of design techniques for system-level dynamic power management}, 406 JOURNAL = {IEEE Transactions on VLSI Systems}, 407 YEAR = {2000}, 408 volume = {8}, 409 number = {3}, 410 pages = {299-316}, 411 } 412 413 414 @ARTICLE{LORCH98, 415 AUTHOR = {J. Lorch and A. J. Smith}, 416 TITLE = {Software strategies for portable computer energy management}, 417 JOURNAL = {IEEE Personal Communication Magazine}, 418 YEAR = {1998}, 419 volume = {5}, 420 number = {3}, 421 pages = {60-73}, 422 } 423 424 425 @ARTICLE{GUTNIK96, 426 AUTHOR = {V. Gutnik and A. Chandrakasan}, 427 TITLE = {An efficient controller for variable supply-voltage low power processing}, 428 JOURNAL = {Symposium on VLSI Circuits}, 429 YEAR = {1996}, 430 volume = {}, 431 number = {}, 432 pages = {158-159}, 433 } 434 435 @ARTICLE{NAMGOONG97, 436 AUTHOR = {W. Namgoong and M. Yu and T. Meng}, 437 TITLE = {A high-efficiency variable-voltage CMOS dynamic DC-DC switching regulator}, 438 JOURNAL = {IEEE International Solid-State Circuits Conference}, 439 YEAR = {1997}, 440 volume = {}, 441 number = {}, 442 pages = {380-381}, 443 } 444 445 446 447 448 @ARTICLE{MOSSE94, 449 AUTHOR = {D. Mosse and R. Melhem and S. Ghosh}, 450 TITLE = {Analysis of a fault-tolerant multiprocessor scheduling algorithm}, 451 JOURNAL = {The 24th International Symposium on Fault Tolerant Computing}, 452 YEAR = {1994}, 453 volume = {}, 454 number = {}, 455 pages = {}, 456 } 457 458 459 @ARTICLE{OH91, 460 AUTHOR = {Y. Oh and S. Son}, 461 TITLE = {Multiprocessor support for real-time fault-tolerant scheduling}, 462 JOURNAL = {IEEE Workshop on Architectural Aspect of Real-Time Systems}, 463 YEAR = {1991}, 464 volume = {}, 465 number = {}, 466 pages = {}, 467 } 468 469 470 @ARTICLE{GHOSH97, 471 AUTHOR = {S. Ghosh and R. Melhem and D. Mosse}, 472 TITLE = {Fault-tolerance through scheduling of aperiodic tasks in hard real-time multiprocessor systems}, 473 JOURNAL = {IEEE Transactions on Parallel and Distributed Systems}, 474 YEAR = {1997}, 475 volume = {8}, 476 number = {3}, 477 pages = {}, 478 } 479 480 481 482 @ARTICLE{MCKAY79, 483 AUTHOR = {M. McKay and R. Beckman and W. Conover}, 484 TITLE = {A Comparison of Three Methods for Selecting Values of Input Variables in the Analysis of Output from a Computer Code}, 485 JOURNAL = {Technometrics $($American Statistical Association$)$}, 486 YEAR = {1979}, 487 volume = {21}, 488 number = {2}, 489 pages = {}, 490 } 491 492 493 494 @ARTICLE{ZHU01, 495 AUTHOR = {D. Zhu and R. Melhem and B. Chiders}, 496 TITLE = {Scheduling with dynamic voltage/speed adjustment using slack reclamation in multiprocessor real-time systems 497 }, 498 JOURNAL = {IEEE Real-Time Systems Symposium}, 499 YEAR = {2001}, 500 volume = {}, 501 number = {}, 502 pages = {}, 503 } 504 505 506 @ARTICLE{YU02, 507 AUTHOR = {Y. Yu and V. Prasanna}, 508 TITLE = {Power-aware resource allocation for independent tasks in heterogeneous real-time systems}, 509 JOURNAL = {Proceedings of International Conference on Parallel and Distributed Systems}, 510 YEAR = {2002}, 511 volume = {}, 512 number = {}, 513 pages = {}, 514 } 515 516 517 @ARTICLE{AYDIN03, 518 AUTHOR = {H. Aydin and Q. Yang}, 519 TITLE = {Energy-aware partitioning for multiprocessor real-time systems}, 520 JOURNAL = {Proceedings of the International Parallel and Distributed Processing Symposium}, 521 YEAR = {2003}, 522 volume = {}, 523 number = {}, 524 pages = {}, 525 } 526 527 528 @ARTICLE{BARUAH04, 529 AUTHOR = {S. Baruah and J. Anderson}, 530 TITLE = {Energy-efficient synthesis of periodic task systems upon identical multiprocessor platforms}, 531 JOURNAL = {Proceedings of the International Conference on Distributed Computing Systems}, 532 YEAR = {2004}, 533 volume = {}, 534 number = {}, 535 pages = {}, 536 } 537 538 539 540 @ARTICLE{ALENAWY05, 541 AUTHOR = {T. AlEnawy and K. Aydin}, 542 TITLE = {Energy-aware task allocation for rate monotonic scheduling}, 543 JOURNAL = {IEEE Real-time and Embedded Technology and Applications Symposium}, 544 YEAR = {2005}, 545 volume = {}, 546 number = {}, 547 pages = {}, 548 } 549 550 551 @ARTICLE{ANDERSON04, 552 AUTHOR = {J. Anderson and S. Baruah}, 553 TITLE = {Energy-aware task allocation for rate monotonic scheduling}, 554 JOURNAL = {IEEE International Conference on Distributed Computing Systems}, 555 YEAR = {2004}, 556 volume = {}, 557 number = {}, 558 pages = {}, 559 } 560 561 562 @ARTICLE{CHEN04, 563 AUTHOR = {J. Chen and H. Hsu and K. Chuang and C. Yang and A. Pang and T. Kuo}, 564 TITLE = {Multiprocessor energy-efficient scheduling with task migration consideration}, 565 JOURNAL = {IEEE Euromicro Conference on Real-Time Systems}, 566 YEAR = {2004}, 567 volume = {}, 568 number = {}, 569 pages = {}, 570 } 571 572 573 @ARTICLE{YANG05, 574 AUTHOR = {C. Yang and J. Chen and T. Kuo}, 575 TITLE = {An approximation algorithm for energy-efficient scheduling on a chip multiprocessor}, 576 JOURNAL = {IEEE proceedings of the Design, Automation and Test in Europe}, 577 YEAR = {2005}, 578 volume = {}, 579 number = {}, 580 pages = {}, 581 } 582 583 584 @ARTICLE{WEI08, 585 AUTHOR = {T. Wei and P. Mishra and K. Wu and H. Liang }, 586 TITLE = {Fixed-Priority Allocation and Scheduling for Energy-Efficient Fault-Tolerance in Hard Real-Time Multiprocessor Systems}, 587 JOURNAL = {IEEE Transactions on Parallel and Distributed Systems}, 588 YEAR = {2008}, 589 volume = {19}, 590 number = {11}, 591 pages = {1511-1526}, 592 } 593 594 595 @ARTICLE{HONG98, 596 AUTHOR = {I. Hong and G. Qu and M. Potkonjak and M. Srivastava}, 597 TITLE = {Synthesis Techniques for Low-Power Hard Real-Time Systems on Variable Voltage Processors}, 598 JOURNAL = {Proceedings of 19th IEEE Real-Time Systems Symposium}, 599 YEAR = {1998}, 600 volume = {}, 601 number = {}, 602 pages = {}, 603 } 604 605 606 607 @ARTICLE{TERLAKY08, 608 AUTHOR = {T. Terlaky and A. Vannelli and H. Zhang}, 609 TITLE = {On routing in VLSI design and communication networks}, 610 JOURNAL = {Discrete Applied Mathematics}, 611 YEAR = {2008}, 612 volume = {156}, 613 number = {11}, 614 pages = {2178-2194}, 615 } 616 617 618 @ARTICLE{SHAH05, 619 AUTHOR = {S. Shah and A. Srivastava and D. Sharma and D. Sylvester and D. Blaauw and V. Zolotov}, 620 TITLE = {Discrete Vt assignment and gate sizing using a selfsnapping continuous formulation}, 621 JOURNAL = {ACM/IEEE International Conference on Computer-Aided Design}, 622 YEAR = {2005}, 623 volume = {}, 624 number = {}, 625 pages = {}, 626 } 627 628 629 @ARTICLE{LOCKE91, 630 AUTHOR = {D. Locke and D. Vogel and T. Mesler}, 631 TITLE = {Building a predictable avionics platform in Ada: A case study}, 632 JOURNAL = {The Proceedings of Real-Time Systems Symposium}, 633 YEAR = {1991}, 634 volume = {}, 635 number = {}, 636 pages = {}, 637 } 638 639 640 @ARTICLE{LIU73, 641 AUTHOR = {C. Liu and J. Layland}, 642 TITLE = {Scheduling algorithms for multiprogramming in a hard real time environment}, 643 JOURNAL = {Journal of the ACM}, 644 YEAR = {1973}, 645 volume = {20}, 646 number = {1}, 647 pages = {46-61}, 648 } 649 650 651 @ARTICLE{SHIVAKUMAR02, 652 AUTHOR = {P. Shivakumar and M. Kistler and S.W. Keckler and D. Burger and L. Alvisi}, 653 TITLE = {Modeling the effect of technology trends on the soft error rate of combinational logic}, 654 JOURNAL = {Proceedings of the DSN}, 655 YEAR = {2002}, 656 volume = {}, 657 number = {}, 658 pages = {}, 659 } 660 661 662 @ARTICLE{MAHMOOD88, 663 AUTHOR = {A. Mahmood and E. McCluskey}, 664 TITLE = {Concurrent error detection using watchdog processors - A survey}, 665 JOURNAL = {IEEE Transactions on Computer}, 666 YEAR = {1988}, 667 volume = {}, 668 number = {}, 669 pages = {}, 670 } 671 672 673 @ARTICLE{BORKAR99, 674 AUTHOR = {S. Borkar}, 675 TITLE = {Design challenges of technology scaling}, 676 JOURNAL = {IEEE Micro}, 677 YEAR = {1999}, 678 volume = {}, 679 number = {}, 680 pages = {23-29}, 681 } 682 683 @ARTICLE{DUARTE02, 684 AUTHOR = {D. Duarte and N. Vijaykrishnan and M. Irwin and Y. Tsai}, 685 TITLE = {Impact of technology scaling and packaging on dynamic voltage scaling techniques}, 686 JOURNAL = {15th Annual IEEE International ASIC/SOC Conference}, 687 YEAR = {2002}, 688 volume = {}, 689 number = {}, 690 pages = {}, 691 } 692 693 694 @ARTICLE{CALHOUN03, 695 AUTHOR = {B. Calhoun and F. Honore and A. Chandrakasan}, 696 TITLE = {Design methodology for fine-grained leakage control in MTCMOS}, 697 JOURNAL = {Proceedings of International Symposium on Low Power Electronics and Design}, 698 YEAR = {2003}, 699 volume = {}, 700 number = {}, 701 pages = {104-109}, 702 } 703 704 705 @ARTICLE{HU02, 706 AUTHOR = {Z. Hu and S. Kaxiras and M. Martonosi}, 707 TITLE = {Let caches decay: Reducing leakage energy via exploitation of cache generational behavior}, 708 JOURNAL = {ACM Transactions on Computer Systems}, 709 YEAR = {2002}, 710 volume = {}, 711 number = {}, 712 pages = {}, 713 } 714 715 716 @ARTICLE{MUTOH95, 717 AUTHOR = {S. Mutoh and T. Douseki and Y. Matsuya and T. Aoki and S. Shigematsu and J. Yamada}, 718 TITLE = {1-v power supply highspeed digital circuit technology with multithreshold-voltage CMOS}, 719 JOURNAL = {IEEE Journal of Solid-State Circuits}, 720 YEAR = {1995}, 721 volume = {}, 722 number = {}, 723 pages = {847-854}, 724 } 725 726 727 @ARTICLE{LEHOCZKY90, 728 AUTHOR = {J. Lehoczky}, 729 TITLE = {Fixed priority scheduling of periodic task sets with arbitrary deadlines}, 730 JOURNAL = {The Proceedings of Real-Time System Symposium}, 731 YEAR = {1990}, 732 volume = {}, 733 number = {}, 734 pages = {166-171}, 735 } 736 737 738 @ARTICLE{LEHOCZKY89, 739 AUTHOR = {J. Lehoczky and L. Sha and Y. Ding}, 740 TITLE = {The rate monotonic scheduling algorithm: Exact characterization and average case behavior}, 741 JOURNAL = {IEEE Real-Time Systems Symposium}, 742 YEAR = {1989}, 743 volume = {}, 744 number = {}, 745 pages = {}, 746 } 747 748 749 @ARTICLE{SHIN99, 750 AUTHOR = {Y. Shin and K. Choi}, 751 TITLE = {Power conscious fixed priority scheduling for hard real-time systems}, 752 JOURNAL = {Proceedings of the DAC}, 753 YEAR = {1999}, 754 volume = {}, 755 number = {}, 756 pages = {}, 757 } 758 759 760 761 @ARTICLE{CONTRERAS04, 762 AUTHOR = {G. Contreras and M. Martonosi and J. Peng and R. Ju and G. Lueh}, 763 TITLE = {XTREM: A power simulator for the Intel XScale Core}, 764 JOURNAL = {ACM SIGPLAN/SIGBED Conference on Languages, Compilers, and Tools for Embedded Systems}, 765 YEAR = {2004}, 766 volume = {}, 767 number = {}, 768 pages = {}, 769 } 770 771 772 773 @ARTICLE{BURGER97, 774 AUTHOR = {D. Burger and T. Austin}, 775 TITLE = {The SimpleScalar tool set, version 2.0}, 776 JOURNAL = {Computer Architecture News}, 777 YEAR = {1997}, 778 volume = {}, 779 number = {}, 780 pages = {}, 781 } 782 783 784 785 @ARTICLE{KIM96, 786 AUTHOR = {N. Kim and M. Ryu and S. Hong and M. Saksena and C. Choi and H. Shin}, 787 TITLE = {Visual assessment of a real-time system design: A case study on a CNC controller}, 788 JOURNAL = {Proceedings of the RTSS}, 789 YEAR = {1996}, 790 volume = {}, 791 number = {}, 792 pages = {}, 793 } 794 795 796 @ARTICLE{WEICKER84, 797 AUTHOR = {R. Weicker}, 798 TITLE = {Dhrystone: A Synthetic Systems Programming Benchmark}, 799 JOURNAL = {Communications of the ACM}, 800 YEAR = {1984}, 801 volume = {27}, 802 number = {10}, 803 pages = {1013-1030}, 804 } 805 806 807 @ARTICLE{HUA07, 808 AUTHOR = {S. Hua and G. Qu and S. Bhattacharyya}, 809 TITLE = {Probabilistic Design of Multimedia Embedded Systems}, 810 JOURNAL = {ACM Transactions on Embedded Computing Systems}, 811 YEAR = {2007}, 812 volume = {6}, 813 number = {3}, 814 pages = {}, 815 } 816 817 818 @ARTICLE{GRUIAN01, 819 AUTHOR = {F. Gruian}, 820 TITLE = {Hard real-time scheduling for low-energy using stochastic data and DVS processors}, 821 JOURNAL = {Proceedings of the international symposium on Low power electronics and design}, 822 YEAR = {2001}, 823 volume = {}, 824 number = {}, 825 pages = {46-51}, 826 } 827 828 @ARTICLE{ZHU08, 829 AUTHOR = {D. Zhu and H. Aydin and J. Chen}, 830 TITLE = {Optimistic Reliability Aware Energy Management for Real-Time Tasks with Probabilistic Execution Times}, 831 JOURNAL = {Proceedings of the Real-Time Systems Symposium}, 832 YEAR = {2008}, 833 volume = {}, 834 number = {}, 835 pages = {}, 836 } 837 838 @ARTICLE{IZOSIMOV08, 839 AUTHOR = {V. Izosimov and P. Pop and P. Eles and Z. Peng}, 840 TITLE = {Scheduling of fault-tolerant embedded systems with soft and hard timing constraints}, 841 JOURNAL = {Proceedings of the DATE}, 842 YEAR = {2008}, 843 volume = {}, 844 number = {}, 845 pages = {}, 846 } 847 848 849 @ARTICLE{POP07, 850 AUTHOR = {P. Pop and K. Poulsen and V. Izosimov and P. Eles}, 851 TITLE = {Scheduling and voltage scaling for energy/reliability trade-offs in fault-tolerant time-triggered embedded systems}, 852 JOURNAL = {Proceedings of the 5th IEEE/ACM international conference on Hardware/software codesign and system synthesis}, 853 YEAR = {2007}, 854 volume = {}, 855 number = {}, 856 pages = {}, 857 } 858 859 860 @ARTICLE{BINI09, 861 AUTHOR = {E. Bini and G. Buttazzo and G. Lipari}, 862 TITLE = {Minimizing CPU energy in real-time systems with discrete speed management}, 863 JOURNAL = {ACM Transactions on Embedded Computing Systems}, 864 YEAR = {2009}, 865 volume = {8}, 866 number = {4}, 867 pages = {}, 868 } 869 870 @ARTICLE{KRISHNA03, 871 AUTHOR = {C. Krishna and Y. Lee}, 872 TITLE = {Voltage-Clock-Scaling Adaptive Scheduling Techniques for Low Power in Hard Real-Time Systems}, 873 JOURNAL = {IEEE Transactions on Computers}, 874 YEAR = {2003}, 875 volume = {52}, 876 number = {12}, 877 pages = {1586-1593}, 878 } 879 880 @ARTICLE{CAMPBELL92, 881 AUTHOR = {A. Campbell and P. McDonald and K Ray }, 882 TITLE = {Single event upset rates in space}, 883 JOURNAL = {IEEE Transactions on Nuclear Science}, 884 YEAR = {1992}, 885 volume = {39}, 886 number = {6}, 887 pages = {1828-1835}, 888 } 889 890 @ARTICLE{ROUNDY04, 891 AUTHOR = {S. Roundy and D. Steingart and L. Frechette and P. Wright and J Rabaey}, 892 TITLE = {Power sources for wireless sensor networks}, 893 JOURNAL = {Proceedings of Wireless Sensor Networks}, 894 YEAR = {2004}, 895 volume = {}, 896 number = {}, 897 pages = {1-17}, 898 } 899 900 @ARTICLE{RAGHUNATHAN05, 901 AUTHOR = {V. Raghunathan and A. Kansal and J. Hsu and J. Friedman and M. Srivastava}, 902 TITLE = {Design considerations for solar energy harvesting wireless embedded systems}, 903 JOURNAL = {International Symposium on Information Processing in Sensor Networks}, 904 YEAR = {2005}, 905 volume = {}, 906 number = {}, 907 pages = {457- 462}, 908 } 909 910 @ARTICLE{JIANG05, 911 AUTHOR = {X. Jiang and J. Polastre and D. Culler}, 912 TITLE = {Perpetual environmentally powered sensor networks}, 913 JOURNAL = {International Symposium on Information Processing in Sensor Networks}, 914 YEAR = {2005}, 915 volume = {}, 916 number = {}, 917 pages = {463- 468}, 918 } 919 920 @ARTICLE{ALLAVENA01, 921 AUTHOR = {A. Allavena and D. Mosse}, 922 TITLE = {Scheduling of frame-based embedded systems with rechargeable batteries}, 923 JOURNAL = {Workshop on Power Management for Real-Time and Embedded Systems }, 924 YEAR = {2001}, 925 volume = {}, 926 number = {}, 927 pages = {}, 928 } 929 930 931 932 @ARTICLE{RUSU05, 933 AUTHOR = {C. Rusu and R. Melhem and D. Mosse }, 934 TITLE = {Multi-version scheduling in rechargeable energy-aware real-time systems}, 935 JOURNAL = {Journal of Embedded Computing}, 936 YEAR = {2005}, 937 volume = {}, 938 number = {}, 939 pages = {}, 940 } 941 942 943 @ARTICLE{MOSER06, 944 AUTHOR = {C. Moser and D. Brunelli and L. Thiele and L. Benini}, 945 TITLE = {Lazy scheduling for energy harvesting sensor nodes}, 946 JOURNAL = {Working Conference on Distributed and Parallel Embedded Systems}, 947 YEAR = {2006}, 948 volume = {}, 949 number = {}, 950 pages = {}, 951 } 952 953 954 955 @ARTICLE{MOSER08, 956 AUTHOR = {C. Moser and J. Chen and L. Thiele}, 957 TITLE = {Reward maximization for embedded systems with renewable energies}, 958 JOURNAL = {IEEE International Conference on Embedded and Real-Time Computing Systems and Applications}, 959 YEAR = {2008}, 960 volume = {}, 961 number = {}, 962 pages = {247-256}, 963 } 964 965 966 @ARTICLE{MOSER09, 967 AUTHOR = {C. Moser and J. Chen and L. Thiele }, 968 TITLE = {Optimal service level allocation in environmentally powered embedded systems}, 969 JOURNAL = {Proceedings of the ACM symposium on Applied Computing}, 970 YEAR = {2009}, 971 volume = {}, 972 number = {}, 973 pages = {}, 974 } 975 976 977 @ARTICLE{MISHRA03, 978 AUTHOR = {R. Mishra and N. Rastogi and D. Zhu and D. Mosse and R. Melhem}, 979 TITLE = {Energy aware scheduling for distributed real-time systems}, 980 JOURNAL = {Proceedings of International Parallel and Distributed Processing Symposium}, 981 YEAR = {2003}, 982 volume = {}, 983 number = {}, 984 pages = {21-29}, 985 986 } 987 988 989 @ARTICLE{MOSER09ISLPED, 990 AUTHOR = {C. Moser and J. Chen and L. Thiele }, 991 TITLE = {Power management in energy harvesting embedded systems with discrete service levels}, 992 JOURNAL = {Proceedings of the International Symposium on Low Power Electronics and Design}, 993 YEAR = {2009}, 994 volume = {}, 995 number = {}, 996 pages = {413¨C418}, 997 } 998 999 1000 @ARTICLE{MOSER08DATE, 1001 AUTHOR = {C. Moser and J. Chen and L. Thiele}, 1002 TITLE = {Adaptive power management in energy harvesting systems}, 1003 JOURNAL = {Proceedings of the Design, Automation and Test in Europe Conference and Exhibition}, 1004 YEAR = {2008}, 1005 volume = {}, 1006 number = {}, 1007 pages = {230-235}, 1008 } 1009 1010 1011 @ARTICLE{MOSER10ASPDAC, 1012 AUTHOR = {C. Moser and J. Chen and L. Thiele}, 1013 TITLE = {Dynamic power management in environmentally powered systems}, 1014 JOURNAL = {Proceedings of the Asia and South Pacific Design Automation Conference}, 1015 YEAR = {2010}, 1016 volume = {}, 1017 number = {}, 1018 pages = {81-88}, 1019 } 1020 1021 1022 @ARTICLE{LIU11VLSI, 1023 AUTHOR = {S. Liu and Q. Qiu and Q. Wu}, 1024 TITLE = {Harvesting-Aware Power Management for Real-Time Systems With Renewable Energy}, 1025 JOURNAL = {IEEE Transactions on Very Large Scale Integration (VLSI) Systems}, 1026 YEAR = {2011}, 1027 volume = {}, 1028 number = {}, 1029 pages = {}, 1030 } 1031 1032 1033 @ARTICLE{LIU2010, 1034 AUTHOR = {S. Liu and Q. Qiu and Q. Wu}, 1035 TITLE = {Accurate modeling and prediction of energy availability in energy harvesting real-time embedded systems}, 1036 JOURNAL = {International Green Computing Conference}, 1037 YEAR = {2010}, 1038 volume = {}, 1039 number = {}, 1040 pages = {469-476}, 1041 } 1042 1043 1044 @ARTICLE{LIU10ISLPED, 1045 AUTHOR = {S. Liu and J. Lu and Q. Qiu }, 1046 TITLE = {Load-matching adaptive task scheduling for energy efficiency in energy harvesting real-time embedded systems}, 1047 JOURNAL = {International Symposium on Low-Power Electronics and Design}, 1048 YEAR = {2010}, 1049 volume = {}, 1050 number = {}, 1051 pages = {325-330}, 1052 } 1053 1054 1055 1056 @ARTICLE{Lu11IGCC, 1057 AUTHOR = {J.Lu and Q.Qiu}, 1058 TITLE = {Scheduling and mapping of periodic tasks on multi-core embedded systems with energy harvesting}, 1059 JOURNAL = {International Green Computing Conference and Workshops (IGCC)}, 1060 YEAR = {2011}, 1061 volume = {}, 1062 number = {}, 1063 pages = {}, 1064 } 1065 1066 1067 @ARTICLE{LIU09DAC, 1068 AUTHOR = {S. Liu and Q. Wu and Q. Qiu}, 1069 TITLE = {An adaptive scheduling and voltage/freqency selection algorithm for real-time energy harvesting systems}, 1070 JOURNAL = {Proceedings of the Design Automation Conference}, 1071 YEAR = {2009}, 1072 volume = {}, 1073 number = {}, 1074 pages = {}, 1075 } 1076 1077 @ARTICLE{LIU08DATE, 1078 AUTHOR = {S. Liu and Q. Qiu and Q. Wu}, 1079 TITLE = {Energy aware dynamic voltage and frequency selection for real-time systems with energy harvesting}, 1080 JOURNAL = {Proceedings of the conference on Design, automation and test in Europe}, 1081 YEAR = {2008}, 1082 volume = {}, 1083 number = {}, 1084 pages = {}, 1085 } 1086 1087 @ARTICLE{KANSAL07TECS, 1088 AUTHOR = {A. Kansal and J. Hsu and S. Zahedi and M. Srivastava}, 1089 TITLE = {Power management in energy harvesting sensor networks}, 1090 JOURNAL = {ACM Transactions on Embedded Computing Systems}, 1091 YEAR = {2007}, 1092 volume = {6}, 1093 number = {4}, 1094 pages = {}, 1095 } 1096 1097 1098 @ARTICLE{CMOSER06, 1099 AUTHOR = {C. Moser and D. Brunelli and L. Thiele and L. Benini}, 1100 TITLE = {Real-time scheduling for energy harvesting sensor nodes}, 1101 JOURNAL = {Real-Time Systems Journal}, 1102 YEAR = {2007}, 1103 volume = {37}, 1104 number = {3}, 1105 pages = {}, 1106 } 1107 1108 1109 @ARTICLE{XIAN07, 1110 AUTHOR = {C. Xian and Y. Lu and Z. Li}, 1111 TITLE = {Energy-aware scheduling for Real-time multiprocessor systems with uncertain task execution time}, 1112 JOURNAL = {Proceedings of the DAC}, 1113 YEAR = {2007}, 1114 volume = {}, 1115 number = {}, 1116 pages = {}, 1117 } 1118 1119 1120 @ARTICLE{GURURAJ09, 1121 AUTHOR = {K. Gururaj and J. Cong}, 1122 TITLE = {Energy Efficient Multiprocessor Task Scheduling under Input-dependent Variation}, 1123 JOURNAL = {Proceedings of the DATE}, 1124 YEAR = {2009}, 1125 volume = {}, 1126 number = {}, 1127 pages = {}, 1128 } 1129 1130 1131 @ARTICLE{WATANABE07, 1132 AUTHOR = {R. Watanabe and M. Kondo and M. Imai and H. Nakamura and T. Nanya}, 1133 TITLE = {Task Scheduling under Performance Constraints for Reducing the Energy Consumption of the GALS Multi-Processor SoC}, 1134 JOURNAL = {Proceedings of the DATE}, 1135 YEAR = {2007}, 1136 volume = {}, 1137 number = {}, 1138 pages = {}, 1139 } 1140 1141 1142 @ARTICLE{BRIAO08, 1143 AUTHOR = {E. Briao and D. Barcelos and F. Wagner}, 1144 TITLE = {Dynamic Task Allocation Strategies in MPSoC for Soft Real-time Applications}, 1145 JOURNAL = {Proceedings of the DATE}, 1146 YEAR = {2008}, 1147 volume = {}, 1148 number = {}, 1149 pages = {}, 1150 } 1151 1152 1153 @ARTICLE{KOCH09, 1154 AUTHOR = {P. Koch}, 1155 TITLE = {How to Interface Energy Harvesting Models with Multiprocessor Scheduling Paradigms}, 1156 JOURNAL = {Wireless VITAE}, 1157 YEAR = {2009}, 1158 volume = {}, 1159 number = {}, 1160 pages = {}, 1161 } 1162 1163 1164 @ARTICLE{ZENG09, 1165 AUTHOR = {G. Zeng and T. Yokoyama and H. Tomiyama and H. Takada}, 1166 TITLE = {Practical Energy-Aware Scheduling for Real-Time Multiprocessor Systems}, 1167 JOURNAL = {15th IEEE International Conference on Embedded and Real-Time Computing Systems and Applications}, 1168 YEAR = {2009}, 1169 volume = {}, 1170 number = {}, 1171 pages = {}, 1172 } 1173 1174 @ARTICLE{CHEN98, 1175 AUTHOR = {C.Chen and C. Chu and D. Wong}, 1176 TITLE = {Fast and Exact Simultaneous Gate and Wire Sizing by Lagrangian Relaxation}, 1177 JOURNAL = {Proceedings of the ICCAD}, 1178 YEAR = {1998}, 1179 volume = {}, 1180 number = {}, 1181 pages = {}, 1182 } 1183 1184 1185 @ARTICLE{WEI10, 1186 AUTHOR = {T.Wei and Y. Guo and X. Chen and S.Hu}, 1187 TITLE = {Adaptive Task Allocation for Multiprocessor SoCs in Real-Time Energy Harvesting Systems}, 1188 JOURNAL = {International Symposium on Quality Electronic Design}, 1189 YEAR = {2010}, 1190 volume = {}, 1191 number = {}, 1192 pages = {}, 1193 } 1194 1195 1196 @ARTICLE{HUA03, 1197 AUTHOR = {S. Hua and G. Qu and S. Bhattacharyya}, 1198 TITLE = {Energy Reduction Techniques for Multimedia Applications with Tolerance to Deadline Misses}, 1199 JOURNAL = {Proceedings of the DAC}, 1200 YEAR = {2003}, 1201 volume = {}, 1202 number = {}, 1203 pages = {}, 1204 } 1205 1206 1207 @ARTICLE{WU90, 1208 AUTHOR = {M. Wu and D. Gajski}, 1209 TITLE = {Hypertool: A Programming Aid for Message-Passing Systems}, 1210 JOURNAL = {IEEE Transctions On Parallel and Distributed Systems}, 1211 YEAR = {1990}, 1212 volume = {1}, 1213 number = {3}, 1214 pages = {}, 1215 } 1216 1217 1218 @ARTICLE{PERING98, 1219 AUTHOR = {T. Pering and T. Burd and R. Broderson}, 1220 TITLE = {The simulation and evaluation of dynamic voltage scaling algorithms}, 1221 JOURNAL = {The International Symposium on Low Power Electronics and Design}, 1222 YEAR = {1998}, 1223 volume = {}, 1224 number = {}, 1225 pages = {76-81}, 1226 } 1227 1228 1229 @ARTICLE{BURD00, 1230 AUTHOR = {T. Burd and R. Broderson}, 1231 TITLE = {Design issues for dynamic voltage scaling}, 1232 JOURNAL = {International Symposium on Low Power Electronics and Design}, 1233 YEAR = {2000}, 1234 volume = {}, 1235 number = {}, 1236 pages = {9-14}, 1237 } 1238 1239 @ARTICLE{NOWKA02, 1240 AUTHOR = {K. Nowka and G. Carpenter and E. Donald and H. Ngo and B. Brock and K. Ishii and K. Nguyen and J. Burns}, 1241 TITLE = {A 0.9 V to 1.95 V dynamic voltage-scalable and frequency-scalable 32b PowerPC processor}, 1242 JOURNAL = {IEEE International conference on Solid State Circuits}, 1243 YEAR = {2002}, 1244 volume = {}, 1245 number = {}, 1246 pages = {340-341}, 1247 } 1248 1249 1250 @ARTICLE{GRUNWALD00, 1251 AUTHOR = {D. Grunwald and P. Levis and C. Morrey and M. Neufeld and K. Farkas}, 1252 TITLE = {Policies for dynamic clock scheduling}, 1253 JOURNAL = {The Symposium on Operating Systems Design and Implementation}, 1254 YEAR = {2000}, 1255 volume = {}, 1256 number = {}, 1257 pages = {73-86}, 1258 } 1259 1260 @ARTICLE{LEE96, 1261 AUTHOR = {C. Lee and R. Rajkumar and C. Mercer}, 1262 TITLE = {Experiences with Processor Reservation and Dynamic QOS in Real-Time Mach}, 1263 JOURNAL = {Proceedings of Multimedia}, 1264 YEAR = {1996}, 1265 volume = {}, 1266 number = {}, 1267 pages = {}, 1268 } 1269 1270 1271 @ARTICLE{PEDREIRAS07, 1272 AUTHOR = {P. Pedreiras and L. Almeida}, 1273 TITLE = {Task Management for Soft Real-Time Applicationsbased on General Purpose Operating Systems}, 1274 JOURNAL = {The 9th Workshop on Real-Time Systems}, 1275 YEAR = {2007}, 1276 volume = {}, 1277 number = {}, 1278 pages = {}, 1279 } 1280 1281 @ARTICLE{CHU97, 1282 AUTHOR = {H. Chu and K. Nahrstedt}, 1283 TITLE = {A Soft Real-Time Scheduling Server in UNIX Operating System}, 1284 JOURNAL = {Proceedings of European Workshop on Interactive Distributed Multimedia Systems and Telecommunication Services}, 1285 YEAR = {1997}, 1286 volume = {}, 1287 number = {}, 1288 pages = {}, 1289 } 1290 1291 @ARTICLE{MERCER94, 1292 AUTHOR = {C. Mercer and S. Savage and H. Tokuda}, 1293 TITLE = {Processor Capacity Reserves: Operating System Support for Multimedia Applications}, 1294 JOURNAL = {IEEE International Conference on Multimedia Computing and Systems}, 1295 YEAR = {1994}, 1296 volume = {}, 1297 number = {}, 1298 pages = {}, 1299 } 1300 1301 @ARTICLE{LEE00, 1302 AUTHOR = {S. Lee and T. Sakurai}, 1303 TITLE = {Run-Time Voltage Hopping for Low-Power Real-Time Systems}, 1304 JOURNAL = {Proceedings of the ACM/IEEE Design Automation Conference}, 1305 YEAR = {2000}, 1306 volume = {}, 1307 number = {}, 1308 pages = {}, 1309 } 1310 1311 1312 @ARTICLE{ZHU03, 1313 AUTHOR = {D. Zhu and R. Melhem and B. Chiders}, 1314 TITLE = {Scheduling with Dynamic Voltage/Speed Adjustment Using Slack Reclamation in Multiprocessor Real-Time Systems," IEEE Transactions on Parallel and Distributed Systems}, 1315 JOURNAL = {IEEE Transactions on Parallel and Distributed Systems}, 1316 YEAR = {2003}, 1317 volume = {14}, 1318 number = {7}, 1319 pages = {686-700}, 1320 } 1321 1322 @ARTICLE{SWAMINATHAN02, 1323 AUTHOR = {V. Swaminathan and C. Schweizer and K. Chakrabarty and A. Patel}, 1324 TITLE = {Experiences in Implementing an Energy-Driven Task Scheduler in RT-Linux}, 1325 JOURNAL = {Proceedings of the IEEE Real-Time and Embedded Technology and Applications Symposium}, 1326 YEAR = {2002}, 1327 volume = {}, 1328 number = {}, 1329 pages = {}, 1330 } 1331 1332 1333 @ARTICLE{MARTIN02, 1334 AUTHOR = {S. Martin and K. Flautner and T. Mudge and D. Blaauw}, 1335 TITLE = {Combined Dynamic Voltage Scaling and Adaptive Body Biasing for Lower Power Microprocessors under Dynamic Workloads}, 1336 JOURNAL = {Proceedings of the ICCAD}, 1337 YEAR = {2002}, 1338 volume = {}, 1339 number = {}, 1340 pages = {}, 1341 } 1342 1343 @ARTICLE{ZHAO08, 1344 AUTHOR = {B. Zhao and H. Aydin and D. Zhu}, 1345 TITLE = {Reliability-Aware Dynamic Voltage Scaling for Energy-Constrained Real-Time Embedded Systems}, 1346 JOURNAL = {Proceedings of the IEEE International Conference on Computer Design}, 1347 YEAR = {2008}, 1348 volume = {}, 1349 number = {}, 1350 pages = {}, 1351 } 1352 1353 @ARTICLE{JEJURIKAR05, 1354 AUTHOR = {R. Jejurikar and R.Gupta}, 1355 TITLE = {Dynamic Slack Reclamation with Procrastination Scheduling in Real-Time Embedded Systems}, 1356 JOURNAL = {Proceedings of the DAC}, 1357 YEAR = {2005}, 1358 volume = {}, 1359 number = {}, 1360 pages = {}, 1361 } 1362 1363 @ARTICLE{CHEN07, 1364 AUTHOR = {J. Chen and T. Kuo}, 1365 TITLE = {Procrastination Determination for Periodic RealTime Tasks in Leakage Aware Dynamic Voltage Scaling Systems}, 1366 JOURNAL = {Proceedings of the ICCAD}, 1367 YEAR = {2007}, 1368 volume = {}, 1369 number = {}, 1370 pages = {}, 1371 } 1372 1373 @ARTICLE{SAEWONG03, 1374 AUTHOR = {S. Saewong and R. Rajkumar}, 1375 TITLE = {Practical Voltage-Scaling for Fixed-Priority RT-Systems}, 1376 JOURNAL = {Proceedings of the IEEE Real-Time and Embedded Technology and Applications Symposium}, 1377 YEAR = {2003}, 1378 volume = {}, 1379 number = {}, 1380 pages = {}, 1381 } 1382 1383 @ARTICLE{PILLAI01, 1384 AUTHOR = {P. Pillai and K. Shin}, 1385 TITLE = {Real-Time Dynamic Voltage Scaling for Low-Power Embedded Operating Systems}, 1386 JOURNAL = {Proceedings of the ACM symposium on Operating Systems Principle}, 1387 YEAR = {2001}, 1388 volume = {}, 1389 number = {}, 1390 pages = {}, 1391 } 1392 1393 @ARTICLE{KANGA10, 1394 AUTHOR = {J. Kanga and S. Ranka}, 1395 Title = {Dynamic Slack Allocation Algorithms For Energy Minimization On Parallel Machines}, 1396 JOURNAL = {Journal of Parallel and Distributed Computing}, 1397 YEAR = {2010}, 1398 volume = {70}, 1399 number = {5}, 1400 pages = {417-430}, 1401 } 1402 1403 1404 @ARTICLE{MOCHOCKI07, 1405 AUTHOR = {B. Mochocki and X. Hu and G. Quan}, 1406 Title = {Transition-Overhead-Aware Voltage Scheduling for Fixed-Priority Real-Time Systems}, 1407 JOURNAL = {ACM Transactions on Design Automation of Electronic Systems}, 1408 YEAR = {2007}, 1409 volume = {12}, 1410 number = {2}, 1411 pages = {}, 1412 } 1413 1414 1415 @ARTICLE{HUANG09, 1416 AUTHOR = {K. Huang and L. Santinelli and J. Chen and L. Thiele and G. Buttazzo}, 1417 Title = {Adaptive Dynamic Power Management for Hard Real-Time Systems}, 1418 JOURNAL = {Proceedings of the IEEE Real-Time Systems Symposium}, 1419 YEAR = {2009}, 1420 volume = {}, 1421 number = {}, 1422 pages = {}, 1423 } 1424 1425 1426 @ARTICLE{RASHID05, 1427 AUTHOR = {M. Rashid and E. Tan and M. Huang and D. Albonesi}, 1428 Title = {Power-Efficient Error Tolerance in Chip Multiprocessor Systems}, 1429 JOURNAL = {IEEE Micro}, 1430 YEAR = {2005}, 1431 volume = {}, 1432 number = {}, 1433 pages = {}, 1434 } 1435 1436 1437 @ARTICLE{QI10, 1438 AUTHOR = {X. Qi and D. Zhu and H. Aydin}, 1439 Title = {Global Reliability-Aware Power Management for Multiprocessor Real-Time Systems}, 1440 JOURNAL = {IEEE International Conference on Embedded and Real-Time Computing Systems and Applications 1441 }, 1442 YEAR = {2010}, 1443 volume = {}, 1444 number = {}, 1445 pages = {}, 1446 } 1447 1448 1449 @ARTICLE{BEHJAT05, 1450 AUTHOR = {L. Behjat and A. Chiang}, 1451 Title = {Fast Integer Linear Programming Based Models for VLSI Global Routing}, 1452 JOURNAL = {IEEE International Symposium on Circuits and Systems}, 1453 YEAR = {2005}, 1454 volume = {}, 1455 number = {}, 1456 pages = {}, 1457 } 1458 1459 @ARTICLE{SHAFIK10, 1460 AUTHOR = {R. Shafik and B. Al-Hashimi and K. Chakrabarty}, 1461 Title = {Soft Error-Aware Design Optimization of Low Power and Time-Constrained Embedded Systems}, 1462 JOURNAL = {The Proceedings of the DATE}, 1463 YEAR = {2010}, 1464 volume = {}, 1465 number = {}, 1466 pages = {}, 1467 } 1468 1469 1470 @ARTICLE{JIANG04, 1471 AUTHOR = {L. Jiang and D. Liu and B. Yang}, 1472 Title = {Smart Home Reserch}, 1473 JOURNAL = {International Conference on Machine Learning and Cybernetics}, 1474 YEAR = {2004}, 1475 volume = {2}, 1476 number = {}, 1477 pages = {659-663}, 1478 } 1479 1480 @ARTICLE{CHEN09, 1481 AUTHOR = {C. Chen and Y. Tsoul and S. Liao, and C. Lin}, 1482 Title = {Implementing the Design of Smart Home and Achieving Energy Conservation}, 1483 JOURNAL = {IEEE Conference on Industrial Informatics}, 1484 YEAR = {2009}, 1485 volume = {}, 1486 number = {}, 1487 pages = {273-276}, 1488 } 1489 1490 1491 @ARTICLE{ROJCHAYA09, 1492 AUTHOR = {S. Rojchaya and M. Konghirun}, 1493 Title = {Development of Energy Management and Warning System for Resident: An Energy Saving Solution}, 1494 JOURNAL = {International Conference on Electrical Engineering/Electronics, Computer, Telecommunications and Information Technology}, 1495 YEAR = {2009}, 1496 volume = {1}, 1497 number = {}, 1498 pages = {426-429}, 1499 } 1500 1501 @ARTICLE{ALLCOTT09, 1502 AUTHOR = {H. Allcott}, 1503 Title = {Real Time Pricing and Electricity Markets}, 1504 JOURNAL = {Working Paper Harvard University}, 1505 YEAR = {2009}, 1506 volume = {1}, 1507 number = {}, 1508 pages = {}, 1509 } 1510 1511 1512 @ARTICLE{PEDRASA10A, 1513 AUTHOR = {M. Pedrasa and T. Spooner and I.MacGill}, 1514 Title = {Improved Energy Services Provision through the Intelligent Control of Distributed Energy Resources}, 1515 JOURNAL = {IEEE Bucharest Power Tech Conference}, 1516 YEAR = {2009}, 1517 volume = {}, 1518 number = {}, 1519 pages = {}, 1520 } 1521 1522 1523 @ARTICLE{PEDRASA10B, 1524 AUTHOR = {M. Pedrasa and T. Spooner and I.MacGill}, 1525 Title = {Coordinated Scheduling of Residential Distributed Energy Resources to Optimize Smart Home Energy Services}, 1526 JOURNAL = {IEEE Transactions on Smart Grid}, 1527 YEAR = {2010}, 1528 volume = {1}, 1529 number = {2}, 1530 pages = {134-144}, 1531 } 1532 1533 1534 1535 @ARTICLE{REISS05, 1536 AUTHOR = {P. Reiss and M. White}, 1537 Title = {Household Electricity Demand, Revisited}, 1538 JOURNAL = {Review of Economic Studies}, 1539 YEAR = {2005}, 1540 volume = {72}, 1541 number = {3}, 1542 pages = {853-883}, 1543 } 1544 1545 1546 1547 @ARTICLE{HOLLAND08, 1548 AUTHOR = {S. Holland and E. Mansur}, 1549 Title = {Is Real-Time Pricing Green? The Environmental Impacts of Electricity Demand Variance}, 1550 JOURNAL = {Review of Economics and Statistics}, 1551 YEAR = {2008}, 1552 volume = {90}, 1553 number = {3}, 1554 pages = {550-561}, 1555 } 1556 1557 @ARTICLE{LORENZ09, 1558 AUTHOR = {E. Lorenz and J. Hurka and D. Heinemann and H. Beyer}, 1559 Title = {Irradiance Forecasting for the Power Prediction of Grid-Connected Photovoltaic Systems}, 1560 JOURNAL = {IEEE Journal of Selected Topics in Applied Earth Observations and Remote Sensing}, 1561 YEAR = {2009}, 1562 volume = {2}, 1563 number = {3}, 1564 pages = {2-10}, 1565 } 1566 1567 1568 @ARTICLE{SULAIMAN09, 1569 AUTHOR = {S. Sulaiman and I. Musirin and T. Rahman}, 1570 Title = {Prediction of Grid-Photovoltaic System Output Using Three-Variate ANN Models}, 1571 JOURNAL = {WSEAS Transactions on Information Science and Applications}, 1572 YEAR = {2009}, 1573 volume = {6}, 1574 number = {}, 1575 pages = {}, 1576 } 1577 1578 1579 @ARTICLE{HAAS08, 1580 AUTHOR = {R. Haas and N. Nakicenovica and A. Ajanovica and T. Fabera and L. Kranzla and A. M¨¹llera and G. Resch}, 1581 Title = {Towards Sustainability of Energy Systems: A Primer on How to Apply the Concept of Energy Services to Identify Necessary Trends and Policies}, 1582 JOURNAL = {Energy Policy}, 1583 YEAR = {2008}, 1584 volume = {36}, 1585 number = {11}, 1586 pages = {4012-4021}, 1587 } 1588 1589 1590 @ARTICLE{EISA07, 1591 AUTHOR = {}, 1592 Title = {Title \text{XIII}$-$Smart Grid, Sec. 1301-1308, Statement of Policy on Modernization of Electricity Grid}, 1593 JOURNAL = {Energy Independence and Security Act of 2007 (EISA)}, 1594 YEAR = {}, 1595 volume = {}, 1596 number = {}, 1597 pages = {}, 1598 } 1599 1600 1601 1602 @ARTICLE{IPAKCHI09, 1603 AUTHOR = {A. Ipakchi and F. Albuyeh}, 1604 Title = {Grid of the future}, 1605 JOURNAL = {IEEE Power and Energy Magazine}, 1606 YEAR = {2009}, 1607 volume = {}, 1608 number = {}, 1609 pages = {52-62}, 1610 } 1611 1612 1613 @ARTICLE{MOHSENIAN-RAD10A, 1614 AUTHOR = {A. Mohsenian-Rad and V. Wong and J. Jatskevich and R. Schober and A. Leon-Garcia}, 1615 Title = {Autonomous Demand-Side Management Based on Game-Theoretic Energy Consumption Scheduling for the Future Smart Grid 1616 }, 1617 JOURNAL = {IEEE Transactions on Smart Grid}, 1618 YEAR = {2010}, 1619 volume = {1}, 1620 number = {3}, 1621 pages = {320-331}, 1622 } 1623 1624 1625 @ARTICLE{PIPATTANASOMPORN09, 1626 AUTHOR = {M. Pipattanasomporn and H. Feroze and S. Rahman}, 1627 Title = {Multi-Agent Systems in a Distributed Smart Grid: Design and Implementation}, 1628 JOURNAL = {Proceedings on IEEE PES Power Systems Conference and Exposition}, 1629 YEAR = {2009}, 1630 volume = {}, 1631 number = {}, 1632 pages = {}, 1633 } 1634 1635 1636 @ARTICLE{MOHSENIAN-RAD10B, 1637 AUTHOR = {A. Mohsenian-Rad and V. Wong and J. Jatskevich and R. Schober}, 1638 Title = {Optimal and Autonomous Incentive-based Energy Consumption Scheduling Algorithm for Smart Grid}, 1639 JOURNAL = {Innovative Smart Grid Technologies (ISGT)}, 1640 YEAR = {2010}, 1641 volume = {}, 1642 number = {}, 1643 pages = {}, 1644 } 1645 1646 @ARTICLE{MOHSENIAN-RAD10C, 1647 AUTHOR = {A. Mohsenian-Rad and A. Leon-Garcia}, 1648 Title = {Optimal Residential Load Control with Price Prediction in Real-Time Electricity Pricing Environments}, 1649 JOURNAL = {IEEE Transactions on Smart Grid}, 1650 YEAR = {2010}, 1651 volume = {1}, 1652 number = {2}, 1653 pages = {120-134}, 1654 } 1655 1656 1657 @ARTICLE{CARON10, 1658 AUTHOR = {S. Caron and G. Kesidis}, 1659 Title = {Incentive-based Energy Consumption Scheduling Algorithms for the Smart Grid}, 1660 JOURNAL = {IEEE International Conference on Smart Grid Communications (SmartGridComm)}, 1661 YEAR = {2010}, 1662 volume = {}, 1663 number = {}, 1664 pages = {}, 1665 } 1666 1667 %@ARTICLE{CHEN11, 1668 % AUTHOR = {C. Chen and S. Kishore and L. Snyder}, 1669 % Title = {An Innovative RTP-Based Residential Power Scheduling Scheme for Smart Grids}, 1670 % JOURNAL = {IEEE International Conference on Smart Grid Communications (SmartGridComm)}, 1671 % YEAR = {2011}, 1672 % volume = {}, 1673 % number = {}, 1674 % pages = {}, 1675 %} 1676 1677 @ARTICLE{LEE11A, 1678 AUTHOR = {J. Lee and G. Park and M. Kang and H. Kwak and S. Lee}, 1679 Title = {Design of a Power Scheduler Based on the Heuristic for Preemptive Appliances}, 1680 JOURNAL = {Intelligent Information And Database Systems, Lecture Notes In Computer Science}, 1681 YEAR = {2011}, 1682 volume = {6591/2011}, 1683 number = {}, 1684 pages = {396-405}, 1685 } 1686 1687 1688 @ARTICLE{LEE11B, 1689 AUTHOR = {J. Lee and G. Park and S. Kim and H. Kim and C. Sung}, 1690 Title = {Power consumption scheduling for peak load reduction in smart grid homes}, 1691 JOURNAL = {Proceedings of the ACM Symposium on Applied Computing}, 1692 YEAR = {2011}, 1693 volume = {}, 1694 number = {}, 1695 pages = {}, 1696 } 1697 1698 1699 1700 @ARTICLE{XIONG11, 1701 AUTHOR = {G. Xiong and C. Chen and S. Kishore and A. Yener}, 1702 Title = {Smart (In-home) Power Scheduling for Demand Response on the Smart Grid}, 1703 JOURNAL = {IEEE PES Innovative Smart Grid Technologies (ISGT)}, 1704 YEAR = {2011}, 1705 volume = {}, 1706 number = {}, 1707 pages = {}, 1708 } 1709 1710 1711 @ARTICLE{ZHANG11, 1712 AUTHOR = {D. Zhang and L. Papageorgiou and N. Samsatli and N. Shah}, 1713 Title = {Optimal Scheduling of Smart Homes Energy Consumption with Microgrid}, 1714 JOURNAL = {The International Conference on Smart Grids, Green Communications and IT Energy-aware Technologies}, 1715 YEAR = {2011}, 1716 volume = {}, 1717 number = {}, 1718 pages = {}, 1719 } 1720 1721 @ARTICLE{KIM11, 1722 AUTHOR = {T. Kim and H. Poor}, 1723 Title = {Scheduling Power Consumption with Price Uncertainty}, 1724 JOURNAL = {IEEE Transactions on Smart Grid}, 1725 YEAR = {2011}, 1726 volume = {2}, 1727 number = {3}, 1728 pages = {519-527}, 1729 } 1730 1731 @ARTICLE{VENAYAGAMOORTHY09, 1732 AUTHOR = {G. Venayagamoorthy}, 1733 Title = {Potentials and Promises of Computational Intelligence for Smart Grids}, 1734 JOURNAL = {IEEE Power and Energy Society General Meeting}, 1735 YEAR = {2009}, 1736 volume = {}, 1737 number = {}, 1738 pages = {}, 1739 } 1740 1741 1742 @ARTICLE{MOSLEHI10, 1743 AUTHOR = {K. Moslehi and R. Kumar}, 1744 Title = {A Reliability Perspective of the Smart Grid}, 1745 JOURNAL = {IEEE Transactions on Smart Grid}, 1746 YEAR = {2010}, 1747 volume = {1}, 1748 number = {1}, 1749 pages = {57-64}, 1750 } 1751 1752 @ARTICLE{LIGHTNER10, 1753 AUTHOR = {E. Lightner and S. Widergren}, 1754 Title = {An Orderly Transition to a Transformed Electricity System}, 1755 JOURNAL = {IEEE Transactions on Smart Grid}, 1756 YEAR = {2010}, 1757 volume = {1}, 1758 number = {1}, 1759 pages = {3-10}, 1760 } 1761 1762 @ARTICLE{SORTOMME11, 1763 AUTHOR = {E. Sortomme and M. Hindi and S. MacPherson and S. Venkata}, 1764 Title = {Coordinated Charging of Plug-In Hybrid Electric Vehicles to Minimize Distribution System Losses}, 1765 JOURNAL = {IEEE Transactions on Smart Grid}, 1766 YEAR = {2011}, 1767 volume = {2}, 1768 number = {1}, 1769 pages = {198-205}, 1770 } 1771 1772 1773 @ARTICLE{RUSSELL10, 1774 AUTHOR = {B. Russell and C. Benner}, 1775 Title = {Intelligent Systems for Improved Reliability and Failure Diagnosis in Distribution Systems}, 1776 JOURNAL = {IEEE Transactions on Smart Grid}, 1777 YEAR = {2010}, 1778 volume = {1}, 1779 number = {1}, 1780 pages = {48-56}, 1781 } 1782 1783 @ARTICLE{MOLDERINK10, 1784 AUTHOR = {A. Molderink and V. Bakker and M. Bosman and J. Hurink and G. Smit}, 1785 Title = {Management and Control of Domestic Smart Grid Technology}, 1786 JOURNAL = {IEEE Transactions on Smart Grid}, 1787 YEAR = {2010}, 1788 volume = {1}, 1789 number = {2}, 1790 pages = {109-119}, 1791 } 1792 1793 @ARTICLE{WEI11, 1794 AUTHOR = {T. Wei and X. Chen and S. Hu}, 1795 Title = {Reliability-Driven Energy Efficient Task Scheduling for Multiprocessor Real-Time Systems}, 1796 JOURNAL = {IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems}, 1797 YEAR = {2011}, 1798 volume = {}, 1799 number = {}, 1800 pages = {}, 1801 } 1802 1803 1804 @ARTICLE{ANN-PIETTE09, 1805 AUTHOR = {M. Ann-Piette and G. Ghatikar and S. Kiliccote and D. Watson and E. Koch and D. Hennage}, 1806 Title = {Design and Operation of an Open, Interoperable Automated Demand Response Infrastructure for Commercial Buildings}, 1807 JOURNAL = {Journal of Computing and Information Science in Engineering}, 1808 YEAR = {2009}, 1809 volume = {9}, 1810 number = {2}, 1811 pages = {1-9}, 1812 } 1813 1814 1815 @ARTICLE{VOJDANI08, 1816 AUTHOR = {A. Vojdani}, 1817 Title = {Smart integration}, 1818 JOURNAL = {IEEE Power and Energy Magazine}, 1819 YEAR = {2008}, 1820 volume = {}, 1821 number = {}, 1822 pages = {72-79}, 1823 } 1824 @ARTICLE{TSOUKALAS08, 1825 AUTHOR = {L. Tsoukalas and R. Gao}, 1826 Title = {From smart grids to an energy internet: Assumptions, architecrures, and requirements}, 1827 JOURNAL = {International Conference on Electric Utility Deregulation and Restructuring and Power Technologies}, 1828 YEAR = {2008}, 1829 volume = {}, 1830 number = {}, 1831 pages = {}, 1832 } 1833 1834 @ARTICLE{CHARY00, 1835 AUTHOR = {M. Chary and N. Sreenivasulu and K. Nageswara Rao and D. Saibabu}, 1836 Title = {From smart grids to an energy internet: Assumptions, architecrures, and requirements}, 1837 JOURNAL = {Proceedings of IEEE International Conference on Industrial Technology}, 1838 YEAR = {2000}, 1839 volume = {}, 1840 number = {}, 1841 pages = {}, 1842 } 1843 1844 @ARTICLE{LIAO10, 1845 AUTHOR = {C. Liao and S. Hu}, 1846 Title = {Multi-Scale Variation-Aware Techniques for High Performance Digital Microfluidic Lab-on-a-Chip Component Placement}, 1847 JOURNAL = {IEEE Transactions on NanoBioScience}, 1848 YEAR = {2011}, 1849 volume = {10}, 1850 number = {1}, 1851 pages = {51-58}, 1852 } 1853 1854 1855 @ARTICLE{ZHAO11DAC, 1856 AUTHOR = {B. Zhao and H. Aydin and D. Zhu}, 1857 Title = {Generalized Reliability-Oriented Energy Management for Real-time Embedded Applications}, 1858 JOURNAL = {Proceedings of the DAC}, 1859 YEAR = {2011}, 1860 volume = {}, 1861 number = {}, 1862 pages = {381-386}, 1863 } 1864 1865 @ARTICLE{ZHAO09ICCAD, 1866 AUTHOR = {B. Zhao and H. Aydin and D. Zhu}, 1867 Title = {Enhanced Reliability-Aware Power Management through Shared Recovery Technique}, 1868 JOURNAL = {Proceedings of the ICCAD}, 1869 YEAR = {2009}, 1870 volume = {}, 1871 number = {}, 1872 pages = {63-70}, 1873 } 1874 1875 1876 @ARTICLE{IQBAL11, 1877 AUTHOR = {N. Iqbal and M. Siddique and J. Henkel}, 1878 Title = {SEAL: Soft Error Aware Low Power Scheduling by Monte Carlo State Space Under the Influence of Stochastic Spatial and Temporal Dependencies}, 1879 JOURNAL = {Proceedings of the ICCAD}, 1880 YEAR = {2011}, 1881 volume = {}, 1882 number = {}, 1883 pages = {134-139}, 1884 } 1885 1886 1887 @ARTICLE{AXER11, 1888 AUTHOR = {P. Axer and M. Sebastian and R. Ernst}, 1889 Title = {Reliability Analysis for "MPSoCs" with Mixed-Critical, Hard Real-Time Constraints}, 1890 JOURNAL = {The International Conference on Hardware/Software Codesign and System Synthesis(CODES+ISSS)}, 1891 YEAR = {2011}, 1892 volume = {}, 1893 number = {}, 1894 pages = {149-158}, 1895 } 1896 1897 1898 1899 @ARTICLE{HUANG11CODES, 1900 AUTHOR = {J. Huang and J. Blech and A. Raabe}, 1901 Title = {Analysis and Optimization of Fault-Tolerant Task Scheduling on Multiprocessor Embedded Systems}, 1902 JOURNAL = {The International Conference on Hardware/Software Codesign and System Synthesis(CODES+ISSS)}, 1903 YEAR = {2011}, 1904 volume = {}, 1905 number = {}, 1906 pages = {247-256}, 1907 } 1908 1909 1910 @article{HUANG11RTSJ, 1911 author = {K. Huang and L. Santinelli and J. Chen and L. Thiele and G. Buttazzo}, 1912 title = {Applying Real-Time Interface and Calculus for Dynamic Power Management in Hard Real-Time Systems}, 1913 journal = {Real-Time Systems Journal}, 1914 number = {2}, 1915 pages = {163--193}, 1916 volume = {47}, 1917 year = {2011} 1918 } 1919 1920 1921 1922 1923 @article{HOUTHAKKER51, 1924 author = {H. Houthakker}, 1925 title = {Electricity tariffs in theory and practice}, 1926 journal = {The Economic Journal}, 1927 year = {1951}, 1928 volume = {61}, 1929 number = {241}, 1930 pages = {1-25}, 1931 } 1932 1933 @article{STEINER57, 1934 author = {P. Steiner}, 1935 title = {Peak loads and efficient pricing}, 1936 journal = {Quarterly Journal of Economics}, 1937 year = {1957} 1938 volume = {71}, 1939 number = {4}, 1940 pages = {585¨C610}, 1941 } 1942 1943 @article{BORENSTEIN04, 1944 author = {S. Borenstein}, 1945 title = {The long-run effects of real-time electricity pricing}, 1946 journal = {Center for the Study of Energy Markets - Working Paper}, 1947 year = {2004}, 1948 volume = {}, 1949 number = {}, 1950 pages = {}, 1951 } 1952 1953 @article{WOLAK06, 1954 author = {F. Wolak}, 1955 title = {Residential customer response to real-time pricing: The anaheim critical peak pricing experiment}, 1956 journal = {Center for the Study of Energy Markets - Working Paper}, 1957 year = {2006}, 1958 volume = {}, 1959 number = {}, 1960 pages = {}, 1961 } 1962 1963 1964 @article{BURKE09, 1965 author = {W. Burke and D. Auslander}, 1966 title = {Residential electricity auction with uniform pricing and cost constraints}, 1967 journal = {Proceedings of North American Power Symposium}, 1968 year = {2009}, 1969 volume = {}, 1970 number = {}, 1971 pages = {}, 1972 } 1973 1974 @article{CENTOLELLA09, 1975 author = {P. Centolella}, 1976 title = {The integration of Price Responsive Demand into Regional Transmission Organization (RTO) wholesale power markets and system operations}, 1977 journal = {Energy}, 1978 year = {2010}, 1979 volume = {35}, 1980 number = {4}, 1981 pages = {1568-1574}, 1982 } 1983 1984 @article{ALEXANDER07, 1985 author = {B. Alexander}, 1986 title = {Smart meters, real time pricing, and demand response programs: Implications for low income electric customers}, 1987 journal = {Oak Ridge National Laboratory Technical Report}, 1988 year = {2007} 1989 volume = {}, 1990 number = {}, 1991 pages = {}, 1992 } 1993 1994 1995 @article{HOLLAND08, 1996 author = {S. Holland and E. Mansur}, 1997 title = {Is real-time pricing green? the envirobmental impacts of electricity demand variance}, 1998 journal = {Review of Economics and Statistics}, 1999 year = {2008}, 2000 volume = {90}, 2001 number = {3}, 2002 pages = {550¨C561}, 2003 } 2004 2005 @article{REISS05, 2006 author = {P. Reiss and M.White}, 2007 title = {Household electricity demand, revisited}, 2008 journal = {Review of Economic Studies}, 2009 year = {2005}, 2010 volume = {72}, 2011 number = {3}, 2012 pages = {853¨C883}, 2013 } 2014 2015 @article{CATALAO07, 2016 author = {J. Catalao and S. Marianoa and V. Mendesb and L. Ferreirac}, 2017 title = {Short-term electricity prices forecasting in a competitive market: A neural network approach}, 2018 journal = {Electric Power Systems Research}, 2019 year = {2007}, 2020 volume = {77}, 2021 number = {10}, 2022 pages = {1297-1304}, 2023 } 2024 2025 2026 @article{GARCIA-MARTOS07, 2027 author = {C. Garcia-Martos and J. Rodriguez and M. Sanchez}, 2028 title = {Mixed Models for Short-Run Forecasting of Electricity Prices: Application for the Spanish Market}, 2029 journal = {IEEE Transactions on Power Systems}, 2030 year = {2007}, 2031 volume = {22}, 2032 number = {2}, 2033 pages = {544-552}, 2034 } 2035 2036 @article{ESRAM2007, 2037 author = {T. Esram and P. Chapman}, 2038 title = {Comparison of Photovoltaic Array Maximum Power Point Tracking Techniques}, 2039 journal = {IEEE Transactions on Energy Conversion}, 2040 year = {2007}, 2041 volume = {22}, 2042 number = {2}, 2043 pages = {439-449}, 2044 } 2045 2046 @article{KOBAYASHI03, 2047 author = {K. Kobayashi and I. Takano and Y. Sawada}, 2048 title = {A study on a two stage maximum power point tracking control of a photovoltaic system under partially shaded insolation conditions}, 2049 journal = {IEEE Power Engineering Society General Meeting}, 2050 year = {2003}, 2051 volume = {}, 2052 number = {}, 2053 pages = {}, 2054 } 2055 2056 @article{IRISAWA00, 2057 author = {K. Irisawa and T. Saito and I. Takano and Y. Sawada}, 2058 title = {Maximum power point tracking control of photovoltaic generation system under non-uniform insolation by means of monitoring cells}, 2059 journal = {Conference Record of the IEEE Photovoltaic Specialists Conference}, 2060 year = {2000}, 2061 volume = {}, 2062 number = {}, 2063 pages = {1707-1710}, 2064 } 2065 2066 2067 @article{BODUR94, 2068 author = {M. Bodur and M. Ermis}, 2069 title = {Maximum power point tracking for low power photovoltaic solar panels}, 2070 journal = {Proceedings of the Mediterranean Electrotechnical Conference}, 2071 year = {1994}, 2072 volume = {}, 2073 number = {}, 2074 pages = {}, 2075 } 2076 2077 2078 @article{PERATHONER10, 2079 author = {S. Perathoner and J. Chen and K. Lampka and N. Stoimenov and L. Thiele}, 2080 title = {Combining Optimistic and Pessimistic DVS Scheduling: An Adaptive Scheme and Analysis}, 2081 journal= {IEEE/ACM International Conference on Computer-Aided Design (ICCAD)}, 2082 number = {}, 2083 pages = {131--138 }, 2084 volume = {}, 2085 year = {2010} 2086 } 2087 2088 @article{HUANG09CDC, 2089 author = {K. Huang and L. Santinelli and J. Chen and L. Thiele and G. Buttazzo}, 2090 title = {Periodic Power Management Schemes for Real-Time Event Streams.}, 2091 journal = {IEEE Conference on Decision and Control (CDC)}, 2092 number = {}, 2093 pages = {6224--6231}, 2094 volume = {}, 2095 year = {2009} 2096 } 2097 2098 @ARTICLE{MOSER10JETC, 2099 AUTHOR = {C. Moser and J. Chen and L. Thiele}, 2100 TITLE = {An Energy Management Framework for Energy Harvesting Embedded Systems}, 2101 JOURNAL = {ACM Journal on Emerging Technologies in Computing Systems }, 2102 YEAR = {2010}, 2103 volume = {6}, 2104 number = {2}, 2105 pages = {}, 2106 } 2107 2108 2109 @ARTICLE{MOSER10TC, 2110 AUTHOR = {C. Moser and L. Thiele and D. Brunelli and L. Benini,}, 2111 TITLE = {Adaptive Power Management for Environmentally Powered Systems}, 2112 JOURNAL = {IEEE Transactions on Computers}, 2113 YEAR = {2010}, 2114 volume = {59}, 2115 number = {4}, 2116 pages = {478-491}, 2117 } 2118 2119 2120 @ARTICLE{MOHSENIAN-RAD11SGCN, 2121 AUTHOR = {C. Wu and H. Mohsenian-Rad and J. Huang and Y. Wang}, 2122 TITLE = {Demand Side Management for Wind Power Integration in Microgrid Using Dynamic Potential Game Theory}, 2123 JOURNAL = {IEEE International Workshop on Smart Grid Communications and Networks}, 2124 YEAR = {2011}, 2125 volume = {}, 2126 number = {}, 2127 pages = {}, 2128 } 2129 2130 @ARTICLE{PALENSKY11, 2131 AUTHOR = {P. Palensky and D. Dietrich}, 2132 TITLE = {Demand Side Management: Demand Response, Intelligent Energy Systems, and Smart Loads }, 2133 JOURNAL = {IEEE Transactions on Industrial Informatics}, 2134 YEAR = {2011}, 2135 volume = {7}, 2136 number = {3}, 2137 pages = {381 - 388}, 2138 } 2139 2140 2141 @ARTICLE{KHODAEI11, 2142 AUTHOR = {A. Khodaei and M. Shahidehpour and S. Bahramiradh}, 2143 TITLE = {\text{SCUC} with Hourly Demand Response Considering Intertemporal Load Characteristics}, 2144 JOURNAL = {IEEE Transaction on Smart Grid}, 2145 YEAR = {2011}, 2146 volume = {2}, 2147 number = {3}, 2148 pages = {564-571}, 2149 } 2150 2151 2152 @ARTICLE{WU-TPS12, 2153 AUTHOR = {L. Wu and M. Shahidehpour and Z. Li}, 2154 TITLE = {Comparison of Scenario-Based and Interval Optimization Approaches to Stochastic SCUC}, 2155 JOURNAL = {IEEE Transaction on Smart Grid}, 2156 YEAR = {2012}, 2157 volume = {27}, 2158 number = {2}, 2159 pages = {913-921}, 2160 } 2161 2162 2163 @ARTICLE{WU-TPS10, 2164 AUTHOR = {L. Wu and M. Shahidehpour and Y. Fu}, 2165 TITLE = {Security-Constrained Generation and Transmission Outage Scheduling With Uncertainties}, 2166 JOURNAL = {IEEE Transaction on Power Systems}, 2167 YEAR = {2010}, 2168 volume = {25}, 2169 number = {3}, 2170 pages = {1674-1685}, 2171 } 2172 2173 2174 @ARTICLE{WU-TPS07, 2175 AUTHOR = {L. Wu and M. Shahidehpour and T. Li}, 2176 TITLE = {Stochastic Security-Constrained Unit Commitment}, 2177 JOURNAL = {IEEE Transaction on Power Systems}, 2178 YEAR = {2007}, 2179 volume = {22}, 2180 number = {2}, 2181 pages = {800-811}, 2182 } 2183 2184 2185 @ARTICLE{WU-TPS08, 2186 AUTHOR = {L. Wu and M. Shahidehpour and T. Li}, 2187 TITLE = {Cost of Reliability Analysis based on Stochastic Unit Commitment}, 2188 JOURNAL = {IEEE Transaction on Power Systems}, 2189 YEAR = {2008}, 2190 volume = {23}, 2191 number = {3}, 2192 pages = {1364-1374}, 2193 } 2194 2195 2196 2197 @ARTICLE{KAEWPUANG12, 2198 AUTHOR = {R. Kaewpuang and D. Niyato and P. Wang}, 2199 TITLE = {Decomposition of Stochastic Power Management for Wireless Base Station in Smart Grid}, 2200 JOURNAL = {IEEE Wireless Communications Letters}, 2201 YEAR = {2012}, 2202 volume = {1}, 2203 number = {2}, 2204 pages = {97-100}, 2205 } 2206 2207 2208 @ARTICLE{GIVLER05, 2209 AUTHOR = {T. Givler and P. Lilienthal}, 2210 TITLE = {Using \text{HOMER} Software, \text{NREL}‘s Micropower Optimization Module, to explore the Role of Gen-sets in Small Solar Power Systems Case Study: Sri Lanka}, 2211 JOURNAL = {Technical Report NREL/TP-710-36774}, 2212 YEAR = {2005}, 2213 volume = {}, 2214 number = {}, 2215 pages = {}, 2216 } 2217 2218 2219 @ARTICLE{MARTINB10, 2220 AUTHOR = {L. Mart¨ªnb and L. Zarzalejoa and J. Poloa and A. Navarroa and R. Marchanteb and M. Conyb}, 2221 TITLE = {Prediction of Global Solar Irradiance Based on Time Series Analysis: Application to Solar Thermal Power Plants Energy Production Planning}, 2222 JOURNAL = {Solar Energy of Elsevier}, 2223 YEAR = {2010}, 2224 volume = {84}, 2225 number = {10}, 2226 pages = {1772¨C1781}, 2227 } 2228 2229 2230 @ARTICLE{KHATIBA12, 2231 AUTHOR = {T. Khatiba and A. Mohameda and K. Sopianb}, 2232 TITLE = {A Review of Solarenergy Modeling Techniques}, 2233 JOURNAL = {Renewable and Sustainable Energy Reviews of Elsevier}, 2234 YEAR = {2012}, 2235 volume = {16}, 2236 number = {5}, 2237 pages = {2864¨C2869}, 2238 } 2239 2240 2241 @ARTICLE{FADAREB09, 2242 AUTHOR = {D. Fadareb}, 2243 TITLE = {Modelling of solarenergy potential in Nigeria using an artificial neural network model}, 2244 JOURNAL = {Applied Energy of Elsevier}, 2245 YEAR = {2009}, 2246 volume = {86}, 2247 number = {9}, 2248 pages = {1410¨C1422}, 2249 } 2250 2251 2252 @ARTICLE{MELLITA10, 2253 AUTHOR = {A. Mellita and A. Pavanb}, 2254 TITLE = {A 24-h forecast of solar irradiance using artificial neural network: Application for performance prediction of a grid-connected PV plant at Trieste, Italy}, 2255 JOURNAL = {Solar Energy of Elsevier}, 2256 YEAR = {2010}, 2257 volume = {84}, 2258 number = {5}, 2259 pages = {807¨C821}, 2260 } 2261 2262 2263 @ARTICLE{MONTGOMERY90, 2264 AUTHOR = {D. Montgomery and L. Johnson and J. Gardiner}, 2265 TITLE = {Time Series Analysis}, 2266 JOURNAL = {McGraw-Hill}, 2267 YEAR = {1990}, 2268 volume = {}, 2269 number = {}, 2270 pages = {}, 2271 } 2272 2273 2274 @ARTICLE{PALIT05, 2275 AUTHOR = {A. Palit and D. Popovic}, 2276 TITLE = {Computational Intelligence in Time Series Forecasting}, 2277 JOURNAL = {Springer}, 2278 YEAR = {2005}, 2279 volume = {}, 2280 number = {}, 2281 pages = {}, 2282 } 2283 2284 2285 =========================================================================== 2286 @article{KYOCERA_SOLAR, 2287 title={Data Sheet of {KD200-54 P series PV} modules}, 2288 author="{kyocera Solar}", 2289 url={http://www.kyocerasolar.com/assets/001/5124.pdf}, 2290 year={}, 2291 publisher={} 2292 } 2293 2294 2295 @article{INTEL06, 2296 title = {Intel CorporationIntel Pentium {M} Processor on 90nm Process with {2MB} {L2} Cache Datasheet}, 2297 author="{Intel Corporation}", 2298 year={2006}, 2299 url={http://www.intel.com} 2300 } 2301 2302 2303 @article{INTEL04, 2304 author = "{Intel Corporation}", 2305 title = {Intel {PXA255} Processor Electrical, Mechanical, and Thermal Specification}, 2306 url = {http://www.intel.com}, 2307 year = {2004} 2308 } 2309 2310 2311 @article{AMD06, 2312 author = "{AMD Corporation}", 2313 title = {{AMD} Athlon 64 processor power and thermal data sheet}, 2314 url = {http://www.amd.com}, 2315 year = {2006} 2316 } 2317 2318 2319 @article{ITRS07, 2320 author = {}, 2321 title = {International Technology Roadmap for Semiconductors}, 2322 url = {http://www.itrs.net}, 2323 year = {2007} 2324 } 2325 2326 2327 2328 @article{INTEL-PXA, 2329 author = "{Intel Corporation}", 2330 title = {Intel {PXA26x} processor family electrical, mechanical, and thermal specification datasheet}, 2331 url = {http://developer.intel.com}, 2332 year = {} 2333 } 2334 2335 2336 @article{INTEL-XScale, 2337 author = "{Intel Corporation}", 2338 title = {Intel {XScale} processor family electrical, mechanical, and thermal specification datasheet}, 2339 url = {http://developer.intel.com}, 2340 year = {} 2341 } 2342 2343 2344 @article{TRANSMETA, 2345 author = "{Transmeta Corporation}", 2346 title = {Transmeta LongRun power management - Dynamic power management for Crusoe processors}, 2347 url = {http://www.transmeta.com}, 2348 year = {} 2349 } 2350 2351 @article{ITRS02, 2352 author = {}, 2353 title = {International Technology Roadmap for Semiconductors}, 2354 url = {http://www.itrs.net}, 2355 year = {2002} 2356 } 2357 2358 @article{RADISYS, 2359 author = "{Radisys Corporation}", 2360 title = {Endura {TP945GM} Motherboard}, 2361 url = {http://www.radisys.com}, 2362 year = {2002} 2363 } 2364 2365 @article{RTOSLIST, 2366 author = "{RTOS List}", 2367 title = {List of real-time operating systems}, 2368 url = {http://www.wikipedia.org}, 2369 year = {} 2370 } 2371 2372 @article{DHRYSTONE-CODE, 2373 author = "{Dhrystone source code}", 2374 title = {}, 2375 url = {http://www.cs.helsinki.fi}, 2376 year = {} 2377 } 2378 2379 @article{WIKI_A, 2380 author = "{Wikipedia}", 2381 title = {}, 2382 url = {http://www.wikipedia.org}, 2383 year = {} 2384 } 2385 2386 2387 @article{WIKI_B, 2388 author = "{Wikipedia}", 2389 title = {Compare State Renewable Portfolio Standard Programs}, 2390 url = {http://www.wikipedia.org}, 2391 year = {} 2392 } 2393 2394 2395 @article{AMEREN, 2396 author = "{Real-Time Price}", 2397 title = {}, 2398 url = {https://www2.ameren.com}, 2399 year = {} 2400 } 2401 2402 2403 2404 @article{LIFESPAN_RELIABILITY_SOLAR, 2405 author = "{Lifespan and Reliability of Solar Panel}", 2406 title = {}, 2407 url = {http://www.solarpanelinfo.com/solar-panels/solar-panel-cost.php}, 2408 year = {} 2409 } 2410 2411 @article{SOLAR_PANEL_PRICE, 2412 author = "{The Price of Solar Panel}", 2413 title = {}, 2414 url = {http://www.solarsystemsusa.net/solar-panels/}, 2415 year = {} 2416 } 2417 2418 @article{O&M_COST, 2419 author = "{Solar Operation and Maintenance Cost}", 2420 title = {}, 2421 url = {http://www.repartners.org/solar/pvcost.htm}, 2422 year = {} 2423 } 2424 2425 2426 ======================================================================== 2427 @BOOK{DARBY06, 2428 author = {S. Darby}, 2429 title= {The Effectiveness of Feedback on Energy Consumption}, 2430 publisher = {Environmental Change Institute, University of Oxford}, 2431 year =2006 2432 } 2433 2434 @BOOK{MASTERS04, 2435 author = {G. Masters}, 2436 title= {Renewable and Efficient Electric Power Systems}, 2437 publisher = {Wiley Online Library}, 2438 year = 2004 2439 } 2440 2441 2442 @BOOK{MAJZIK97, 2443 author = {I. Majzik}, 2444 title= {Concurrent error detection in multiprocessor systems using watchdog processors}, 2445 publisher = {Ph.D. Thesis}, 2446 year = 1997 2447 } 2448 2449 2450 @BOOK{CORMEN01, 2451 author = {T. Cormen and C. Leiserson and R. Rivest and C. Stein}, 2452 title= {Introduction to algorithm}, 2453 publisher = {The MIT Press}, 2454 year = 2001 2455 } 2456 2457 @BOOK{PRADHAN86, 2458 author = {D. Pradhan}, 2459 title = {Fault tolerance computing: Theory and techniques}, 2460 publisher = {Prentice Hall}, 2461 year = {1986} 2462 } 2463 2464 2465 @BOOK{FISHMAN95, 2466 author = {G. Fishman}, 2467 title = {Monte Carlo: Concepts, Algorithms, and Applications}, 2468 publisher = {Springer, New York}, 2469 year = {1995} 2470 } 2471 2472 @BOOK{WESTE92, 2473 author = {N. Weste and K. Eshraghian}, 2474 title = {Principles of CMOS VLSI Design: A System Perspective}, 2475 publisher = {Addison-Wesley Publishing Company}, 2476 year = {1992} 2477 } 2478 2479 @BOOK{BOVET05, 2480 author = {D.Bovet and M. Cesati}, 2481 title = {Understanding the Linux Kernel, 3rd Edition}, 2482 publisher = {O‘Reilly}, 2483 year = {2005} 2484 } 2485 2486 2487 @BOOK{LEWIS96, 2488 author = {B. Lewis and D. Berg}, 2489 title = {Threads primer--A guide to multithreaded programming}, 2490 publisher = {Prentice Hall}, 2491 year = {1996} 2492 } 2493 2494 @BOOK{LIU00, 2495 author = {J. Liu}, 2496 title = {Real-Time Systems}, 2497 publisher = {Prentice Hall}, 2498 year = {2000} 2499 } 2500 2501 2502 @BOOK{KANG02, 2503 AUTHOR = {S. Kang and Y.Leblebici}, 2504 TITLE = {CMOS Digital Integrated Circuits Analysis and Design}, 2505 PUBLISHER = {McGraw-Hill}, 2506 YEAR = {2002} 2507 2508 } 2509 2510 @BOOK{MONTGOMERY90, 2511 AUTHOR = {D. Montgomery and L. Johnson and J. Gardiner}, 2512 TITLE = {Forecasting and Time Series Analysis}, 2513 PUBLISHER = {McGraw-Hill}, 2514 YEAR = {1990} 2515 }
时间: 2024-10-19 14:53:38