码迷,mamicode.com
首页 > Web开发 > 详细

Draft-JSS模板

时间:2014-10-08 16:19:36      阅读:1057      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   http   color   io   os   ar   for   

bubuko.com,布布扣bubuko.com,布布扣bubuko.com,布布扣bubuko.com,布布扣bubuko.com,布布扣bubuko.com,布布扣bubuko.com,布布扣bubuko.com,布布扣bubuko.com,布布扣bubuko.com,布布扣bubuko.com,布布扣bubuko.com,布布扣bubuko.com,布布扣bubuko.com,布布扣bubuko.com,布布扣

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\if@restonecol
 211 \newif\if@titlepage
 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\if@IEEEusingAfourpaper       \@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\f@family\@IEEEstringpcr\string_\else
 588 \ifx\f@family\@IEEEstringcmtt\string_\else
 589 \ifx\f@family\@IEEEstringptm\kern 0em\vbox{\hrule\@width 0.5em\@height 0.5pt\kern -0.3ex}\else
 590 \ifx\f@family\@IEEEstringppl\kern 0em\vbox{\hrule\@width 0.5em\@height 0.5pt\kern -0.3ex}\else
 591 \ifx\f@family\@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}{\f@size 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 \if@IEEEusingAfourpaper 
 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  \if@IEEEusingAfourpaper 
 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 % \z@ is the same as zero, but faster.
 965 \partopsep          \z@
 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             \z@
 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            \z@
 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         \z@
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\p@enumii{\theenumi}
1047 \def\p@enumiii{\theenumi(\theenumii)}
1048 \def\p@enumiv{\p@enumiii\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\z@ \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\z@ \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\if@restonecol
1476 \def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
1477     \else \newpage \fi \thispagestyle{empty}\c@page\z@}
1478 \def\endtitlepage{\if@restonecol\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\if@IEEEenableoneshotfootnoterule
1531 \@IEEEenableoneshotfootnoterulefalse
1532 \ifCLASSOPTIONcompsoc
1533 \def\footnoterule{\relax\if@IEEEenableoneshotfootnoterule
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 \g@addto@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\l@section#1#2{\addpenalty{\@secpenalty}\addvspace{1.0em plus 1pt}%
1659     \@tempdima 2.75em \begingroup \parindent \z@ \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\l@subsection{\@dottedtocline{2}{2.75em}{3.75em}}
1664 \def\l@subsubsection{\@dottedtocline{3}{6.5em}{4.5em}}
1665 % must provide \l@ 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\l@paragraph{\@dottedtocline{4}{6.5em}{5.5em}}
1669 \def\l@subparagraph{\@dottedtocline{5}{6.5em}{6.5em}}
1670 \def\listoffigures{\section*{\listfigurename}\@starttoc{lof}}
1671 \def\l@figure{\@dottedtocline{1}{0em}{2.75em}}
1672 \def\listoftables{\section*{\listtablename}\@starttoc{lot}}
1673 \let\l@table\l@figure
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\c@figure}
1819 \def\fps@figure{tbp}
1820 \def\ftype@figure{1}
1821 \def\ext@figure{lof}
1822 \def\fnum@figure{\figurename~\thefigure}
1823 \def\figure{\@float{figure}}
1824 \def\endfigure{\end@float}
1825 \@namedef{figure*}{\@dblfloat{figure}}
1826 \@namedef{endfigure*}{\end@dblfloat}
1827 \newcounter{table}
1828 \ifCLASSOPTIONcompsoc
1829 \def\thetable{\arabic{table}}
1830 \else
1831 \def\thetable{\@Roman\c@table}
1832 \fi
1833 \def\fps@table{tbp}
1834 \def\ftype@table{2}
1835 \def\ext@table{lot}
1836 \def\fnum@table{\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{\reset@font\footnotesize\@setminipage}\@float{table}}
1840 \def\endtable{\end@float}
1841 % v1.6b double column tables need to default to footnotesize as well.
1842 \@namedef{table*}{\def\@floatboxreset{\reset@font\footnotesize\@setminipage}\@dblfloat{table}}
1843 \@namedef{endtable*}{\end@dblfloat}
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\if@IEEEeqnarraystarform% flag to indicate if the environment was called as the star form
1862 \@IEEEeqnarraystarformfalse
1863 
1864 \newif\if@advanceIEEEeqncolcnt% 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 \if@IEEEeqnarrayISinner% only do something inside an IEEEeqnarray
1894 \if@IEEElastlinewassubequation\addtocounter{equation}{-1}\else\setcounter{IEEEsubequation}{1}\fi%
1895 \def\@currentlabel{\p@IEEEsubequation\theIEEEsubequation}\fi}
1896 
1897 % flag to indicate that an equation is a sub equation
1898 \newif\if@IEEEissubequation%
1899 \@IEEEissubequationfalse
1900 
1901 % allows users to "push away" equations that get too close to the equation numbers
1902 \def\IEEEeqnarraynumspace{\hphantom{\if@IEEEissubequation\theIEEEsubequationdis\else\theequationdis\fi}}
1903 
1904 % provides a way to span multiple columns within IEEEeqnarray environments
1905 % will consider \if@advanceIEEEeqncolcnt 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 @IEEEeqnarraycolPRE@IEEEdefault\endcsname#3\relax\relax\relax\relax\relax%
1918 \relax\relax\relax\relax\relax\csname @IEEEeqnarraycolPOST@IEEEdefault\endcsname%
1919 \fi%
1920 % advance column counter only if the IEEEeqnarray environment wants it
1921 \if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by #1\relax\fi}
1922 
1923 % like \omit, but maintains track of the column counter for \IEEEeqnarray
1924 \def\IEEEeqnarrayomit{\omit\if@advanceIEEEeqncolcnt\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 \if@advanceIEEEeqncolcnt\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 \if@advanceIEEEeqncolcnt\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 \if@advanceIEEEeqncolcnt\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 \if@advanceIEEEeqncolcnt\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 \if@advanceIEEEeqncolcnt\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 \if@advanceIEEEeqncolcnt\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\if@IEEEeqnarrayISinner % 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\if@IEEEeqnarrayusemasterstrut % 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 \if@IEEEeqnarrayusemasterstrut\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 \if@IEEEeqnarrayISinner% 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 \if@IEEEeqnarrayISinner% 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 \if@IEEEeqnarrayusemasterstrut
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{\end@IEEEeqnarray}
2382 
2383 \@namedef{IEEEeqnarray*}{\@IEEEeqnarraystarformtrue\@IEEEeqnarray}
2384 \@namedef{endIEEEeqnarray*}{\end@IEEEeqnarray}
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    \if@IEEEeqnarraystarform\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\z@\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{\p@equation\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\z@% 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\z@skip\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\z@skip\hb@xt@\z@\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\end@IEEEeqnarray{\@IEEEeqnarrayglobalizestrutstatus&\@@IEEEeqnarraycr\egroup%
2444 \if@IEEElastlinewassubequation\global\advance\c@IEEEsubequation\m@ne\fi%
2445 \global\advance\c@equation\m@ne%
2446 $$\@ignoretrue}
2447 
2448 % need a way to remember if last line is a subequation
2449 \newif\if@IEEElastlinewassubequation%
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\z@skip}
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     \if@eqnsw%
2498      \if@IEEEissubequation\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     \if@IEEEeqnarraystarform\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\z@\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{\end@IEEEeqnarraybox}
2532 \@namedef{IEEEeqnarrayboxm*}{\@IEEEeqnarraystarformtrue\@IEEEeqnarrayboxHBOXSWfalse\@IEEEeqnarraybox}
2533 \@namedef{endIEEEeqnarrayboxm*}{\end@IEEEeqnarraybox}
2534 
2535 \def\IEEEeqnarrayboxt{\@IEEEeqnarraystarformfalse\@IEEEeqnarrayboxHBOXSWtrue\@IEEEeqnarraybox}
2536 \def\endIEEEeqnarrayboxt{\end@IEEEeqnarraybox}
2537 \@namedef{IEEEeqnarrayboxt*}{\@IEEEeqnarraystarformtrue\@IEEEeqnarrayboxHBOXSWtrue\@IEEEeqnarraybox}
2538 \@namedef{endIEEEeqnarrayboxt*}{\end@IEEEeqnarraybox}
2539 
2540 \def\IEEEeqnarraybox{\@IEEEeqnarraystarformfalse\ifmmode\@IEEEeqnarrayboxHBOXSWfalse\else\@IEEEeqnarrayboxHBOXSWtrue\fi%
2541 \@IEEEeqnarraybox}
2542 \def\endIEEEeqnarraybox{\end@IEEEeqnarraybox}
2543 
2544 \@namedef{IEEEeqnarraybox*}{\@IEEEeqnarraystarformtrue\ifmmode\@IEEEeqnarrayboxHBOXSWfalse\else\@IEEEeqnarrayboxHBOXSWtrue\fi%
2545 \@IEEEeqnarraybox}
2546 \@namedef{endIEEEeqnarraybox*}{\end@IEEEeqnarraybox}
2547 
2548 % flag to indicate if the \IEEEeqnarraybox needs to put things into an hbox{$ $} 
2549 % for \vcenter in non-math mode
2550 \newif\if@IEEEeqnarrayboxHBOXSW%
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\z@\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\z@skip\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    \if@IEEEeqnarrayboxHBOXSW \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\end@IEEEeqnarraybox{\@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 \if@IEEEeqnarrayboxHBOXSW $\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\z@skip}
2639 
2640 % IEEEeqnarraybox does not automatically increase line spacing by \jot
2641 \def\@IEEEeqnarrayboxXCR[#1]{\ifnum0=`{\fi}%
2642 \cr\noalign{\if@IEEEeqnarraystarform\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 \if@advanceIEEEeqncolcnt\@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 \if@advanceIEEEeqncolcnt\@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 \if@twoside
2926  \ifCLASSOPTIONtechnote
2927    \def\ps@headings{%
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\ps@headings{%
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\ps@headings{%
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\ps@IEEEtitlepagestyle{\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    \if@IEEEusingpubid
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\ps@IEEEpeerreviewcoverpagestyle{%
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    \if@IEEEusingpubid
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      \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi
3080      \@ifundefined{b@\@citeb}{\mbox{\reset@font\bfseries ?}%
3081        \G@refundefinedtrue
3082        \@latex@warning
3083          {Citation `\@citeb‘ on page \thepage \space undefined}}%
3084        {\hbox{\csname b@\@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 url@samestyle\endcsname}
3104 
3105 % V1.6 class files should always provide these
3106 \def\newblock{\hskip .11em\@plus.33em\@minus.07em}
3107 \let\@openbib@code\@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     \if@filesw\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\c@enumiv=\@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\c@enumiv}}%
3159     {\settowidth\labelwidth{\@biblabel{#1}}%
3160     \leftmargin\labelwidth
3161     \advance\leftmargin\labelsep\relax
3162     \itemsep \IEEEbibitemsep\relax
3163     \usecounter{enumiv}%
3164     \let\p@enumiv\@empty
3165     \renewcommand\theenumiv{\@arabic\c@enumiv}}%
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\f@size%
3256 \global\let\@IEEESAVESTATEfontbaselineskip\f@baselineskip%
3257 \global\let\@IEEESAVESTATEfontencoding\f@encoding%
3258 \global\let\@IEEESAVESTATEfontfamily\f@family%
3259 \global\let\@IEEESAVESTATEfontseries\f@series%
3260 \global\let\@IEEESAVESTATEfontshape\f@shape}
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\if@IEEEprevauthorblockincol   \@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 \if@IEEEprevauthorblockincol\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 \if@IEEEprevauthorblockincol\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\z@\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\end@IEEEauthorhalign{\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\z@skip}
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\if@IEEEWARNand
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]{\if@IEEEWARNand\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\if@twoside\ifodd\c@page\else
3392 \hbox{}\thispagestyle{#1}\newpage\if@twocolumn\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\z@ \@maketitle\@IEEEstatictitlevskip\@IEEEaftertitletext%
3409      \thispagestyle{IEEEpeerreviewcoverpagestyle}\@thanks%
3410   \else
3411      \if@twocolumn%
3412         \ifCLASSOPTIONtechnote%
3413            \newpage\global\@topnum\z@ \@maketitle\@IEEEstatictitlevskip\@IEEEaftertitletext%
3414         \else
3415            \twocolumn[\@maketitle\@IEEEdynamictitlevspace\@IEEEaftertitletext]%
3416         \fi
3417      \else
3418         \newpage\global\@topnum\z@ \@maketitle\@IEEEstatictitlevskip\@IEEEaftertitletext%
3419      \fi
3420      \thispagestyle{IEEEtitlepagestyle}\@thanks%
3421   \fi
3422   % pullup page for pubid if used.
3423   \if@IEEEusingpubid
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     \protected@xdef\@thanks{\@thanks
3486         \protect\footnotetext[\the\c@footnote]{\@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\if@IEEEbreakcompsocthanksitem \@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     \protected@xdef\@thanks{\@thanks
3509         \protect\footnotetext[\the\c@footnote]{\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\if@IEEEbreakcompsocthanksitem\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        \if@IEEEusingpubid\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     \if@twocolumn
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\if@twocolumn\else\endquotation\fi
3718     \normalfont\normalsize}
3719 
3720 \def\IEEEkeywords{\normalfont
3721     \if@twocolumn
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\if@twocolumn\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       \if@twocolumn\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       \if@twocolumn\else\quotation\fi\itshape\@IEEEabskeysecsize%
3740       \par\@IEEEgobbleleadPARNLSP}
3741   \else% compsoc not conference
3742 \def\abstract{\normalfont\@IEEEtweakunitybaselinestretch{1.15}\sffamily
3743     \if@twocolumn
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     \if@twocolumn
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>\c@secnumdepth
3818      \let\@svsec\@empty
3819   \else
3820      \refstepcounter{#1}%
3821      % load section label and spacer into \@svsec
3822      \protected@edef\@svsec{\@seccntformat{#1}\relax}%
3823   \fi%
3824   \@tempskipa #5\relax
3825   \ifdim \@tempskipa>\z@% 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>\c@secnumdepth\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>\c@secnumdepth\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>\z@
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}{\z@}{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}{\z@}{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}{\z@}{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}{\z@}{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}{\z@}{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}{\z@}{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}{\z@}{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}{\z@}{-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}{\z@}{-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}{\z@}{-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 \z@ 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 \ps@headings
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    \if@twoside
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\Hy@chapapp{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\Hy@chapapp{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>\z@\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\if@IEEEbiographyTOCentrynotmade
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 \if@IEEEbiographyTOCentrynotmade%
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 \if@IEEEbiographyTOCentrynotmade%
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\if@IEEEusingpubid
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 \if@twocolumn\if@IEEEusingpubid\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\if@IEEEWARNthanks
4534 \newif\if@IEEEWARNIEEEPARstart
4535 \newif\if@IEEEWARNIEEEbiography
4536 \newif\if@IEEEWARNIEEEbiographynophoto
4537 \newif\if@IEEEWARNIEEEpubid
4538 \newif\if@IEEEWARNIEEEpubidadjcol
4539 \newif\if@IEEEWARNIEEEmembership
4540 \newif\if@IEEEWARNIEEEaftertitletext
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\if@IEEEWARNIEEEPARstart\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\if@IEEEWARNIEEEPARstart\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{\if@IEEEWARNthanks\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\if@IEEEWARNIEEEPARstart\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][]{\if@IEEEWARNIEEEbiography\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=\end@IEEEbogusbiography
4612 
4613 \renewenvironment{IEEEbiographynophoto}[1]{\if@IEEEWARNIEEEbiographynophoto\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{\if@IEEEWARNIEEEpubid\typeout{** WARNING: \noexpand\IEEEpubid 
4618  is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEpubidfalse}
4619 \def\IEEEpubidadjcol{\if@IEEEWARNIEEEpubidadjcol\typeout{** WARNING: \noexpand\IEEEpubidadjcol
4620  is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEpubidadjcolfalse}
4621 \def\IEEEmembership#1{\if@IEEEWARNIEEEmembership\typeout{** WARNING: \noexpand\IEEEmembership
4622  is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEmembershipfalse}
4623 \def\IEEEaftertitletext#1{\if@IEEEWARNIEEEaftertitletext\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: tqwei@cs.ecnu.edu.cn}
 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 }

 

Draft-JSS模板

标签:des   style   blog   http   color   io   os   ar   for   

原文地址:http://www.cnblogs.com/jinliangjiuzhuang/p/4011033.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!