commit 1b104c93e51964a6b05eb104abf8765aa4cb7334
parent 7258df6c58772cc0cc0a8c01f87d41a083be6222
Author: Ivan Gankevich <i.gankevich@spbu.ru>
Date: Sun, 26 Dec 2021 20:41:16 +0300
git collect
Diffstat:
22 files changed, 3955 insertions(+), 0 deletions(-)
diff --git a/aliascnt.sty b/aliascnt.sty
@@ -0,0 +1,88 @@
+%%
+%% This is file `aliascnt.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% aliascnt.dtx (with options: `package')
+%%
+%% This is a generated file.
+%%
+%% Project: aliascnt
+%% Version: 2009/09/08 v1.3
+%%
+%% Copyright (C) 2006, 2009 by
+%% Heiko Oberdiek <heiko.oberdiek at googlemail.com>
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version. This version of this license is in
+%% http://www.latex-project.org/lppl/lppl-1-3c.txt
+%% and the latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status "maintained".
+%%
+%% This Current Maintainer of this work is Heiko Oberdiek.
+%%
+%% This work consists of the main source file aliascnt.dtx
+%% and the derived files
+%% aliascnt.sty, aliascnt.pdf, aliascnt.ins, aliascnt.drv.
+%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{aliascnt}%
+ [2009/09/08 v1.3 Alias counter (HO)]%
+\newcommand*{\newaliascnt}[2]{%
+ \begingroup
+ \def\AC@glet##1{%
+ \global\expandafter\let\csname##1#1\expandafter\endcsname
+ \csname##1#2\endcsname
+ }%
+ \@ifundefined{c@#2}{%
+ \@nocounterr{#2}%
+ }{%
+ \expandafter\@ifdefinable\csname c@#1\endcsname{%
+ \AC@glet{c@}%
+ \AC@glet{the}%
+ \AC@glet{theH}%
+ \AC@glet{p@}%
+ \expandafter\gdef\csname AC@cnt@#1\endcsname{#2}%
+ \expandafter\gdef\csname cl@#1\expandafter\endcsname
+ \expandafter{\csname cl@#2\endcsname}%
+ }%
+ }%
+ \endgroup
+}
+\newcommand*{\aliascntresetthe}[1]{%
+ \@ifundefined{AC@cnt@#1}{%
+ \PackageError{aliascnt}{%
+ `#1' is not an alias counter%
+ }\@ehc
+ }{%
+ \expandafter\let\csname the#1\expandafter\endcsname
+ \csname the\csname AC@cnt@#1\endcsname\endcsname
+ }%
+}
+\newcommand*{\AC@findrootcnt}[1]{%
+ \@ifundefined{AC@cnt@#1}{%
+ #1%
+ }{%
+ \expandafter\AC@findrootcnt\csname AC@cnt@#1\endcsname
+ }%
+}
+\def\AC@patch#1{%
+ \expandafter\let\csname AC@org@#1reset\expandafter\endcsname
+ \csname @#1reset\endcsname
+ \expandafter\def\csname @#1reset\endcsname##1##2{%
+ \csname AC@org@#1reset\endcsname{##1}{\AC@findrootcnt{##2}}%
+ }%
+}
+\RequirePackage{remreset}
+\AC@patch{addto}
+\AC@patch{removefrom}
+\endinput
+%%
+%% End of file `aliascnt.sty'.
diff --git a/figures/bench-cpu-gpu.pdf b/figures/bench-cpu-gpu.pdf
Binary files differ.
diff --git a/figures/breakdown-cpu-gpu.pdf b/figures/breakdown-cpu-gpu.pdf
Binary files differ.
diff --git a/figures/classes.pdf b/figures/classes.pdf
Binary files differ.
diff --git a/figures/gl-cl-interop.pdf b/figures/gl-cl-interop.pdf
Binary files differ.
diff --git a/figures/sort-first.pdf b/figures/sort-first.pdf
Binary files differ.
diff --git a/figures/sort-last.pdf b/figures/sort-last.pdf
Binary files differ.
diff --git a/figures/sort-middle.pdf b/figures/sort-middle.pdf
Binary files differ.
diff --git a/llncs.cls b/llncs.cls
@@ -0,0 +1,1208 @@
+% LLNCS DOCUMENT CLASS -- version 2.20 (24-JUN-2015)
+% Springer Verlag LaTeX2e support for Lecture Notes in Computer Science
+%
+%%
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesClass{llncs}[2015/06/24 v2.20
+^^J LaTeX document class for Lecture Notes in Computer Science]
+% Options
+\let\if@envcntreset\iffalse
+\DeclareOption{envcountreset}{\let\if@envcntreset\iftrue}
+\DeclareOption{citeauthoryear}{\let\citeauthoryear=Y}
+\DeclareOption{oribibl}{\let\oribibl=Y}
+\let\if@custvec\iftrue
+\DeclareOption{orivec}{\let\if@custvec\iffalse}
+\let\if@envcntsame\iffalse
+\DeclareOption{envcountsame}{\let\if@envcntsame\iftrue}
+\let\if@envcntsect\iffalse
+\DeclareOption{envcountsect}{\let\if@envcntsect\iftrue}
+\let\if@runhead\iffalse
+\DeclareOption{runningheads}{\let\if@runhead\iftrue}
+
+\let\if@openright\iftrue
+\let\if@openbib\iffalse
+\DeclareOption{openbib}{\let\if@openbib\iftrue}
+
+% languages
+\let\switcht@@therlang\relax
+\def\ds@deutsch{\def\switcht@@therlang{\switcht@deutsch}}
+\def\ds@francais{\def\switcht@@therlang{\switcht@francais}}
+
+\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
+
+\ProcessOptions
+
+\LoadClass[twoside]{article}
+\RequirePackage{multicol} % needed for the list of participants, index
+\RequirePackage{aliascnt}
+
+\setlength{\textwidth}{12.2cm}
+\setlength{\textheight}{19.3cm}
+\renewcommand\@pnumwidth{2em}
+\renewcommand\@tocrmarg{3.5em}
+%
+\def\@dottedtocline#1#2#3#4#5{%
+ \ifnum #1>\c@tocdepth \else
+ \vskip \z@ \@plus.2\p@
+ {\leftskip #2\relax \rightskip \@tocrmarg \advance\rightskip by 0pt plus 2cm
+ \parfillskip -\rightskip \pretolerance=10000
+ \parindent #2\relax\@afterindenttrue
+ \interlinepenalty\@M
+ \leavevmode
+ \@tempdima #3\relax
+ \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
+ {#4}\nobreak
+ \leaders\hbox{$\m@th
+ \mkern \@dotsep mu\hbox{.}\mkern \@dotsep
+ mu$}\hfill
+ \nobreak
+ \hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor #5}%
+ \par}%
+ \fi}
+%
+\def\switcht@albion{%
+\def\abstractname{Abstract.}%
+\def\ackname{Acknowledgement.}%
+\def\andname{and}%
+\def\lastandname{\unskip, and}%
+\def\appendixname{Appendix}%
+\def\chaptername{Chapter}%
+\def\claimname{Claim}%
+\def\conjecturename{Conjecture}%
+\def\contentsname{Table of Contents}%
+\def\corollaryname{Corollary}%
+\def\definitionname{Definition}%
+\def\examplename{Example}%
+\def\exercisename{Exercise}%
+\def\figurename{Fig.}%
+\def\keywordname{{\bf Keywords:}}%
+\def\indexname{Index}%
+\def\lemmaname{Lemma}%
+\def\contriblistname{List of Contributors}%
+\def\listfigurename{List of Figures}%
+\def\listtablename{List of Tables}%
+\def\mailname{{\it Correspondence to\/}:}%
+\def\noteaddname{Note added in proof}%
+\def\notename{Note}%
+\def\partname{Part}%
+\def\problemname{Problem}%
+\def\proofname{Proof}%
+\def\propertyname{Property}%
+\def\propositionname{Proposition}%
+\def\questionname{Question}%
+\def\remarkname{Remark}%
+\def\seename{see}%
+\def\solutionname{Solution}%
+\def\subclassname{{\it Subject Classifications\/}:}%
+\def\tablename{Table}%
+\def\theoremname{Theorem}}
+\switcht@albion
+% Names of theorem like environments are already defined
+% but must be translated if another language is chosen
+%
+% French section
+\def\switcht@francais{%\typeout{On parle francais.}%
+ \def\abstractname{R\'esum\'e.}%
+ \def\ackname{Remerciements.}%
+ \def\andname{et}%
+ \def\lastandname{ et}%
+ \def\appendixname{Appendice}%
+ \def\chaptername{Chapitre}%
+ \def\claimname{Pr\'etention}%
+ \def\conjecturename{Hypoth\`ese}%
+ \def\contentsname{Table des mati\`eres}%
+ \def\corollaryname{Corollaire}%
+ \def\definitionname{D\'efinition}%
+ \def\examplename{Exemple}%
+ \def\exercisename{Exercice}%
+ \def\figurename{Fig.}%
+ \def\keywordname{{\bf Mots-cl\'e:}}%
+ \def\indexname{Index}%
+ \def\lemmaname{Lemme}%
+ \def\contriblistname{Liste des contributeurs}%
+ \def\listfigurename{Liste des figures}%
+ \def\listtablename{Liste des tables}%
+ \def\mailname{{\it Correspondence to\/}:}%
+ \def\noteaddname{Note ajout\'ee \`a l'\'epreuve}%
+ \def\notename{Remarque}%
+ \def\partname{Partie}%
+ \def\problemname{Probl\`eme}%
+ \def\proofname{Preuve}%
+ \def\propertyname{Caract\'eristique}%
+%\def\propositionname{Proposition}%
+ \def\questionname{Question}%
+ \def\remarkname{Remarque}%
+ \def\seename{voir}%
+ \def\solutionname{Solution}%
+ \def\subclassname{{\it Subject Classifications\/}:}%
+ \def\tablename{Tableau}%
+ \def\theoremname{Th\'eor\`eme}%
+}
+%
+% German section
+\def\switcht@deutsch{%\typeout{Man spricht deutsch.}%
+ \def\abstractname{Zusammenfassung.}%
+ \def\ackname{Danksagung.}%
+ \def\andname{und}%
+ \def\lastandname{ und}%
+ \def\appendixname{Anhang}%
+ \def\chaptername{Kapitel}%
+ \def\claimname{Behauptung}%
+ \def\conjecturename{Hypothese}%
+ \def\contentsname{Inhaltsverzeichnis}%
+ \def\corollaryname{Korollar}%
+%\def\definitionname{Definition}%
+ \def\examplename{Beispiel}%
+ \def\exercisename{\"Ubung}%
+ \def\figurename{Abb.}%
+ \def\keywordname{{\bf Schl\"usselw\"orter:}}%
+ \def\indexname{Index}%
+%\def\lemmaname{Lemma}%
+ \def\contriblistname{Mitarbeiter}%
+ \def\listfigurename{Abbildungsverzeichnis}%
+ \def\listtablename{Tabellenverzeichnis}%
+ \def\mailname{{\it Correspondence to\/}:}%
+ \def\noteaddname{Nachtrag}%
+ \def\notename{Anmerkung}%
+ \def\partname{Teil}%
+%\def\problemname{Problem}%
+ \def\proofname{Beweis}%
+ \def\propertyname{Eigenschaft}%
+%\def\propositionname{Proposition}%
+ \def\questionname{Frage}%
+ \def\remarkname{Anmerkung}%
+ \def\seename{siehe}%
+ \def\solutionname{L\"osung}%
+ \def\subclassname{{\it Subject Classifications\/}:}%
+ \def\tablename{Tabelle}%
+%\def\theoremname{Theorem}%
+}
+
+% Ragged bottom for the actual page
+\def\thisbottomragged{\def\@textbottom{\vskip\z@ plus.0001fil
+\global\let\@textbottom\relax}}
+
+\renewcommand\small{%
+ \@setfontsize\small\@ixpt{11}%
+ \abovedisplayskip 8.5\p@ \@plus3\p@ \@minus4\p@
+ \abovedisplayshortskip \z@ \@plus2\p@
+ \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@
+ \def\@listi{\leftmargin\leftmargini
+ \parsep 0\p@ \@plus1\p@ \@minus\p@
+ \topsep 8\p@ \@plus2\p@ \@minus4\p@
+ \itemsep0\p@}%
+ \belowdisplayskip \abovedisplayskip
+}
+
+\frenchspacing
+\widowpenalty=10000
+\clubpenalty=10000
+
+\setlength\oddsidemargin {63\p@}
+\setlength\evensidemargin {63\p@}
+\setlength\marginparwidth {90\p@}
+
+\setlength\headsep {16\p@}
+
+\setlength\footnotesep{7.7\p@}
+\setlength\textfloatsep{8mm\@plus 2\p@ \@minus 4\p@}
+\setlength\intextsep {8mm\@plus 2\p@ \@minus 2\p@}
+
+\setcounter{secnumdepth}{2}
+
+\newcounter {chapter}
+\renewcommand\thechapter {\@arabic\c@chapter}
+
+\newif\if@mainmatter \@mainmattertrue
+\newcommand\frontmatter{\cleardoublepage
+ \@mainmatterfalse\pagenumbering{Roman}}
+\newcommand\mainmatter{\cleardoublepage
+ \@mainmattertrue\pagenumbering{arabic}}
+\newcommand\backmatter{\if@openright\cleardoublepage\else\clearpage\fi
+ \@mainmatterfalse}
+
+\renewcommand\part{\cleardoublepage
+ \thispagestyle{empty}%
+ \if@twocolumn
+ \onecolumn
+ \@tempswatrue
+ \else
+ \@tempswafalse
+ \fi
+ \null\vfil
+ \secdef\@part\@spart}
+
+\def\@part[#1]#2{%
+ \ifnum \c@secnumdepth >-2\relax
+ \refstepcounter{part}%
+ \addcontentsline{toc}{part}{\thepart\hspace{1em}#1}%
+ \else
+ \addcontentsline{toc}{part}{#1}%
+ \fi
+ \markboth{}{}%
+ {\centering
+ \interlinepenalty \@M
+ \normalfont
+ \ifnum \c@secnumdepth >-2\relax
+ \huge\bfseries \partname~\thepart
+ \par
+ \vskip 20\p@
+ \fi
+ \Huge \bfseries #2\par}%
+ \@endpart}
+\def\@spart#1{%
+ {\centering
+ \interlinepenalty \@M
+ \normalfont
+ \Huge \bfseries #1\par}%
+ \@endpart}
+\def\@endpart{\vfil\newpage
+ \if@twoside
+ \null
+ \thispagestyle{empty}%
+ \newpage
+ \fi
+ \if@tempswa
+ \twocolumn
+ \fi}
+
+\newcommand\chapter{\clearpage
+ \thispagestyle{empty}%
+ \global\@topnum\z@
+ \@afterindentfalse
+ \secdef\@chapter\@schapter}
+\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne
+ \if@mainmatter
+ \refstepcounter{chapter}%
+ \typeout{\@chapapp\space\thechapter.}%
+ \addcontentsline{toc}{chapter}%
+ {\protect\numberline{\thechapter}#1}%
+ \else
+ \addcontentsline{toc}{chapter}{#1}%
+ \fi
+ \else
+ \addcontentsline{toc}{chapter}{#1}%
+ \fi
+ \chaptermark{#1}%
+ \addtocontents{lof}{\protect\addvspace{10\p@}}%
+ \addtocontents{lot}{\protect\addvspace{10\p@}}%
+ \if@twocolumn
+ \@topnewpage[\@makechapterhead{#2}]%
+ \else
+ \@makechapterhead{#2}%
+ \@afterheading
+ \fi}
+\def\@makechapterhead#1{%
+% \vspace*{50\p@}%
+ {\centering
+ \ifnum \c@secnumdepth >\m@ne
+ \if@mainmatter
+ \large\bfseries \@chapapp{} \thechapter
+ \par\nobreak
+ \vskip 20\p@
+ \fi
+ \fi
+ \interlinepenalty\@M
+ \Large \bfseries #1\par\nobreak
+ \vskip 40\p@
+ }}
+\def\@schapter#1{\if@twocolumn
+ \@topnewpage[\@makeschapterhead{#1}]%
+ \else
+ \@makeschapterhead{#1}%
+ \@afterheading
+ \fi}
+\def\@makeschapterhead#1{%
+% \vspace*{50\p@}%
+ {\centering
+ \normalfont
+ \interlinepenalty\@M
+ \Large \bfseries #1\par\nobreak
+ \vskip 40\p@
+ }}
+
+\renewcommand\section{\@startsection{section}{1}{\z@}%
+ {-18\p@ \@plus -4\p@ \@minus -4\p@}%
+ {12\p@ \@plus 4\p@ \@minus 4\p@}%
+ {\normalfont\large\bfseries\boldmath
+ \rightskip=\z@ \@plus 8em\pretolerance=10000 }}
+\renewcommand\subsection{\@startsection{subsection}{2}{\z@}%
+ {-18\p@ \@plus -4\p@ \@minus -4\p@}%
+ {8\p@ \@plus 4\p@ \@minus 4\p@}%
+ {\normalfont\normalsize\bfseries\boldmath
+ \rightskip=\z@ \@plus 8em\pretolerance=10000 }}
+\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}%
+ {-18\p@ \@plus -4\p@ \@minus -4\p@}%
+ {-0.5em \@plus -0.22em \@minus -0.1em}%
+ {\normalfont\normalsize\bfseries\boldmath}}
+\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}%
+ {-12\p@ \@plus -4\p@ \@minus -4\p@}%
+ {-0.5em \@plus -0.22em \@minus -0.1em}%
+ {\normalfont\normalsize\itshape}}
+\renewcommand\subparagraph[1]{\typeout{LLNCS warning: You should not use
+ \string\subparagraph\space with this class}\vskip0.5cm
+You should not use \verb|\subparagraph| with this class.\vskip0.5cm}
+
+\DeclareMathSymbol{\Gamma}{\mathalpha}{letters}{"00}
+\DeclareMathSymbol{\Delta}{\mathalpha}{letters}{"01}
+\DeclareMathSymbol{\Theta}{\mathalpha}{letters}{"02}
+\DeclareMathSymbol{\Lambda}{\mathalpha}{letters}{"03}
+\DeclareMathSymbol{\Xi}{\mathalpha}{letters}{"04}
+\DeclareMathSymbol{\Pi}{\mathalpha}{letters}{"05}
+\DeclareMathSymbol{\Sigma}{\mathalpha}{letters}{"06}
+\DeclareMathSymbol{\Upsilon}{\mathalpha}{letters}{"07}
+\DeclareMathSymbol{\Phi}{\mathalpha}{letters}{"08}
+\DeclareMathSymbol{\Psi}{\mathalpha}{letters}{"09}
+\DeclareMathSymbol{\Omega}{\mathalpha}{letters}{"0A}
+
+\let\footnotesize\small
+
+\if@custvec
+\def\vec#1{\mathchoice{\mbox{\boldmath$\displaystyle#1$}}
+{\mbox{\boldmath$\textstyle#1$}}
+{\mbox{\boldmath$\scriptstyle#1$}}
+{\mbox{\boldmath$\scriptscriptstyle#1$}}}
+\fi
+
+\def\squareforqed{\hbox{\rlap{$\sqcap$}$\sqcup$}}
+\def\qed{\ifmmode\squareforqed\else{\unskip\nobreak\hfil
+\penalty50\hskip1em\null\nobreak\hfil\squareforqed
+\parfillskip=0pt\finalhyphendemerits=0\endgraf}\fi}
+
+\def\getsto{\mathrel{\mathchoice {\vcenter{\offinterlineskip
+\halign{\hfil
+$\displaystyle##$\hfil\cr\gets\cr\to\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr\gets
+\cr\to\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr\gets
+\cr\to\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+\gets\cr\to\cr}}}}}
+\def\lid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr<\cr\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr<\cr
+\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr<\cr
+\noalign{\vskip1pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+<\cr
+\noalign{\vskip0.9pt}=\cr}}}}}
+\def\gid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
+$\displaystyle##$\hfil\cr>\cr\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr>\cr
+\noalign{\vskip1.2pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr>\cr
+\noalign{\vskip1pt}=\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+>\cr
+\noalign{\vskip0.9pt}=\cr}}}}}
+\def\grole{\mathrel{\mathchoice {\vcenter{\offinterlineskip
+\halign{\hfil
+$\displaystyle##$\hfil\cr>\cr\noalign{\vskip-1pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr
+>\cr\noalign{\vskip-1pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
+>\cr\noalign{\vskip-0.8pt}<\cr}}}
+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
+>\cr\noalign{\vskip-0.3pt}<\cr}}}}}
+\def\bbbr{{\rm I\!R}} %reelle Zahlen
+\def\bbbm{{\rm I\!M}}
+\def\bbbn{{\rm I\!N}} %natuerliche Zahlen
+\def\bbbf{{\rm I\!F}}
+\def\bbbh{{\rm I\!H}}
+\def\bbbk{{\rm I\!K}}
+\def\bbbp{{\rm I\!P}}
+\def\bbbone{{\mathchoice {\rm 1\mskip-4mu l} {\rm 1\mskip-4mu l}
+{\rm 1\mskip-4.5mu l} {\rm 1\mskip-5mu l}}}
+\def\bbbc{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm C$}\hbox{\hbox
+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}}}
+\def\bbbq{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm
+Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle\rm Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle\rm Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm Q$}\hbox{\raise
+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}}}}
+\def\bbbt{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm
+T$}\hbox{\hbox to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle\rm T$}\hbox{\hbox
+to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle\rm T$}\hbox{\hbox
+to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm T$}\hbox{\hbox
+to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}}}
+\def\bbbs{{\mathchoice
+{\setbox0=\hbox{$\displaystyle \rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox
+to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}}
+{\setbox0=\hbox{$\textstyle \rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox
+to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptstyle \rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox
+to0pt{\kern0.5\wd0\vrule height0.45\ht0\hss}\box0}}
+{\setbox0=\hbox{$\scriptscriptstyle\rm S$}\hbox{\raise0.5\ht0\hbox
+to0pt{\kern0.4\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox
+to0pt{\kern0.55\wd0\vrule height0.45\ht0\hss}\box0}}}}
+\def\bbbz{{\mathchoice {\hbox{$\mathsf\textstyle Z\kern-0.4em Z$}}
+{\hbox{$\mathsf\textstyle Z\kern-0.4em Z$}}
+{\hbox{$\mathsf\scriptstyle Z\kern-0.3em Z$}}
+{\hbox{$\mathsf\scriptscriptstyle Z\kern-0.2em Z$}}}}
+
+\let\ts\,
+
+\setlength\leftmargini {17\p@}
+\setlength\leftmargin {\leftmargini}
+\setlength\leftmarginii {\leftmargini}
+\setlength\leftmarginiii {\leftmargini}
+\setlength\leftmarginiv {\leftmargini}
+\setlength \labelsep {.5em}
+\setlength \labelwidth{\leftmargini}
+\addtolength\labelwidth{-\labelsep}
+
+\def\@listI{\leftmargin\leftmargini
+ \parsep 0\p@ \@plus1\p@ \@minus\p@
+ \topsep 8\p@ \@plus2\p@ \@minus4\p@
+ \itemsep0\p@}
+\let\@listi\@listI
+\@listi
+\def\@listii {\leftmargin\leftmarginii
+ \labelwidth\leftmarginii
+ \advance\labelwidth-\labelsep
+ \topsep 0\p@ \@plus2\p@ \@minus\p@}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii
+ \advance\labelwidth-\labelsep
+ \topsep 0\p@ \@plus\p@\@minus\p@
+ \parsep \z@
+ \partopsep \p@ \@plus\z@ \@minus\p@}
+
+\renewcommand\labelitemi{\normalfont\bfseries --}
+\renewcommand\labelitemii{$\m@th\bullet$}
+
+\setlength\arraycolsep{1.4\p@}
+\setlength\tabcolsep{1.4\p@}
+
+\def\tableofcontents{\chapter*{\contentsname\@mkboth{{\contentsname}}%
+ {{\contentsname}}}
+ \def\authcount##1{\setcounter{auco}{##1}\setcounter{@auth}{1}}
+ \def\lastand{\ifnum\value{auco}=2\relax
+ \unskip{} \andname\
+ \else
+ \unskip \lastandname\
+ \fi}%
+ \def\and{\stepcounter{@auth}\relax
+ \ifnum\value{@auth}=\value{auco}%
+ \lastand
+ \else
+ \unskip,
+ \fi}%
+ \@starttoc{toc}\if@restonecol\twocolumn\fi}
+
+\def\l@part#1#2{\addpenalty{\@secpenalty}%
+ \addvspace{2em plus\p@}% % space above part line
+ \begingroup
+ \parindent \z@
+ \rightskip \z@ plus 5em
+ \hrule\vskip5pt
+ \large % same size as for a contribution heading
+ \bfseries\boldmath % set line in boldface
+ \leavevmode % TeX command to enter horizontal mode.
+ #1\par
+ \vskip5pt
+ \hrule
+ \vskip1pt
+ \nobreak % Never break after part entry
+ \endgroup}
+
+\def\@dotsep{2}
+
+\let\phantomsection=\relax
+
+\def\hyperhrefextend{\ifx\hyper@anchor\@undefined\else
+{}\fi}
+
+\def\addnumcontentsmark#1#2#3{%
+\addtocontents{#1}{\protect\contentsline{#2}{\protect\numberline
+ {\thechapter}#3}{\thepage}\hyperhrefextend}}%
+\def\addcontentsmark#1#2#3{%
+\addtocontents{#1}{\protect\contentsline{#2}{#3}{\thepage}\hyperhrefextend}}%
+\def\addcontentsmarkwop#1#2#3{%
+\addtocontents{#1}{\protect\contentsline{#2}{#3}{0}\hyperhrefextend}}%
+
+\def\@adcmk[#1]{\ifcase #1 \or
+\def\@gtempa{\addnumcontentsmark}%
+ \or \def\@gtempa{\addcontentsmark}%
+ \or \def\@gtempa{\addcontentsmarkwop}%
+ \fi\@gtempa{toc}{chapter}%
+}
+\def\addtocmark{%
+\phantomsection
+\@ifnextchar[{\@adcmk}{\@adcmk[3]}%
+}
+
+\def\l@chapter#1#2{\addpenalty{-\@highpenalty}
+ \vskip 1.0em plus 1pt \@tempdima 1.5em \begingroup
+ \parindent \z@ \rightskip \@tocrmarg
+ \advance\rightskip by 0pt plus 2cm
+ \parfillskip -\rightskip \pretolerance=10000
+ \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip
+ {\large\bfseries\boldmath#1}\ifx0#2\hfil\null
+ \else
+ \nobreak
+ \leaders\hbox{$\m@th \mkern \@dotsep mu.\mkern
+ \@dotsep mu$}\hfill
+ \nobreak\hbox to\@pnumwidth{\hss #2}%
+ \fi\par
+ \penalty\@highpenalty \endgroup}
+
+\def\l@title#1#2{\addpenalty{-\@highpenalty}
+ \addvspace{8pt plus 1pt}
+ \@tempdima \z@
+ \begingroup
+ \parindent \z@ \rightskip \@tocrmarg
+ \advance\rightskip by 0pt plus 2cm
+ \parfillskip -\rightskip \pretolerance=10000
+ \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip
+ #1\nobreak
+ \leaders\hbox{$\m@th \mkern \@dotsep mu.\mkern
+ \@dotsep mu$}\hfill
+ \nobreak\hbox to\@pnumwidth{\hss #2}\par
+ \penalty\@highpenalty \endgroup}
+
+\def\l@author#1#2{\addpenalty{\@highpenalty}
+ \@tempdima=15\p@ %\z@
+ \begingroup
+ \parindent \z@ \rightskip \@tocrmarg
+ \advance\rightskip by 0pt plus 2cm
+ \pretolerance=10000
+ \leavevmode \advance\leftskip\@tempdima %\hskip -\leftskip
+ \textit{#1}\par
+ \penalty\@highpenalty \endgroup}
+
+\setcounter{tocdepth}{0}
+\newdimen\tocchpnum
+\newdimen\tocsecnum
+\newdimen\tocsectotal
+\newdimen\tocsubsecnum
+\newdimen\tocsubsectotal
+\newdimen\tocsubsubsecnum
+\newdimen\tocsubsubsectotal
+\newdimen\tocparanum
+\newdimen\tocparatotal
+\newdimen\tocsubparanum
+\tocchpnum=\z@ % no chapter numbers
+\tocsecnum=15\p@ % section 88. plus 2.222pt
+\tocsubsecnum=23\p@ % subsection 88.8 plus 2.222pt
+\tocsubsubsecnum=27\p@ % subsubsection 88.8.8 plus 1.444pt
+\tocparanum=35\p@ % paragraph 88.8.8.8 plus 1.666pt
+\tocsubparanum=43\p@ % subparagraph 88.8.8.8.8 plus 1.888pt
+\def\calctocindent{%
+\tocsectotal=\tocchpnum
+\advance\tocsectotal by\tocsecnum
+\tocsubsectotal=\tocsectotal
+\advance\tocsubsectotal by\tocsubsecnum
+\tocsubsubsectotal=\tocsubsectotal
+\advance\tocsubsubsectotal by\tocsubsubsecnum
+\tocparatotal=\tocsubsubsectotal
+\advance\tocparatotal by\tocparanum}
+\calctocindent
+
+\def\l@section{\@dottedtocline{1}{\tocchpnum}{\tocsecnum}}
+\def\l@subsection{\@dottedtocline{2}{\tocsectotal}{\tocsubsecnum}}
+\def\l@subsubsection{\@dottedtocline{3}{\tocsubsectotal}{\tocsubsubsecnum}}
+\def\l@paragraph{\@dottedtocline{4}{\tocsubsubsectotal}{\tocparanum}}
+\def\l@subparagraph{\@dottedtocline{5}{\tocparatotal}{\tocsubparanum}}
+
+\def\listoffigures{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \fi\section*{\listfigurename\@mkboth{{\listfigurename}}{{\listfigurename}}}
+ \@starttoc{lof}\if@restonecol\twocolumn\fi}
+\def\l@figure{\@dottedtocline{1}{0em}{1.5em}}
+
+\def\listoftables{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \fi\section*{\listtablename\@mkboth{{\listtablename}}{{\listtablename}}}
+ \@starttoc{lot}\if@restonecol\twocolumn\fi}
+\let\l@table\l@figure
+
+\renewcommand\listoffigures{%
+ \section*{\listfigurename
+ \@mkboth{\listfigurename}{\listfigurename}}%
+ \@starttoc{lof}%
+ }
+
+\renewcommand\listoftables{%
+ \section*{\listtablename
+ \@mkboth{\listtablename}{\listtablename}}%
+ \@starttoc{lot}%
+ }
+
+\ifx\oribibl\undefined
+\ifx\citeauthoryear\undefined
+\renewenvironment{thebibliography}[1]
+ {\section*{\refname}
+ \def\@biblabel##1{##1.}
+ \small
+ \list{\@biblabel{\@arabic\c@enumiv}}%
+ {\settowidth\labelwidth{\@biblabel{#1}}%
+ \leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \if@openbib
+ \advance\leftmargin\bibindent
+ \itemindent -\bibindent
+ \listparindent \itemindent
+ \parsep \z@
+ \fi
+ \usecounter{enumiv}%
+ \let\p@enumiv\@empty
+ \renewcommand\theenumiv{\@arabic\c@enumiv}}%
+ \if@openbib
+ \renewcommand\newblock{\par}%
+ \else
+ \renewcommand\newblock{\hskip .11em \@plus.33em \@minus.07em}%
+ \fi
+ \sloppy\clubpenalty4000\widowpenalty4000%
+ \sfcode`\.=\@m}
+ {\def\@noitemerr
+ {\@latex@warning{Empty `thebibliography' environment}}%
+ \endlist}
+\def\@lbibitem[#1]#2{\item[{[#1]}\hfill]\if@filesw
+ {\let\protect\noexpand\immediate
+ \write\@auxout{\string\bibcite{#2}{#1}}}\fi\ignorespaces}
+\newcount\@tempcntc
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+ \@tempcnta\z@\@tempcntb\m@ne\def\@citea{}\@cite{\@for\@citeb:=#2\do
+ {\@ifundefined
+ {b@\@citeb}{\@citeo\@tempcntb\m@ne\@citea\def\@citea{,}{\bfseries
+ ?}\@warning
+ {Citation `\@citeb' on page \thepage \space undefined}}%
+ {\setbox\z@\hbox{\global\@tempcntc0\csname b@\@citeb\endcsname\relax}%
+ \ifnum\@tempcntc=\z@ \@citeo\@tempcntb\m@ne
+ \@citea\def\@citea{,}\hbox{\csname b@\@citeb\endcsname}%
+ \else
+ \advance\@tempcntb\@ne
+ \ifnum\@tempcntb=\@tempcntc
+ \else\advance\@tempcntb\m@ne\@citeo
+ \@tempcnta\@tempcntc\@tempcntb\@tempcntc\fi\fi}}\@citeo}{#1}}
+\def\@citeo{\ifnum\@tempcnta>\@tempcntb\else
+ \@citea\def\@citea{,\,\hskip\z@skip}%
+ \ifnum\@tempcnta=\@tempcntb\the\@tempcnta\else
+ {\advance\@tempcnta\@ne\ifnum\@tempcnta=\@tempcntb \else
+ \def\@citea{--}\fi
+ \advance\@tempcnta\m@ne\the\@tempcnta\@citea\the\@tempcntb}\fi\fi}
+\else
+\renewenvironment{thebibliography}[1]
+ {\section*{\refname}
+ \small
+ \list{}%
+ {\settowidth\labelwidth{}%
+ \leftmargin\parindent
+ \itemindent=-\parindent
+ \labelsep=\z@
+ \if@openbib
+ \advance\leftmargin\bibindent
+ \itemindent -\bibindent
+ \listparindent \itemindent
+ \parsep \z@
+ \fi
+ \usecounter{enumiv}%
+ \let\p@enumiv\@empty
+ \renewcommand\theenumiv{}}%
+ \if@openbib
+ \renewcommand\newblock{\par}%
+ \else
+ \renewcommand\newblock{\hskip .11em \@plus.33em \@minus.07em}%
+ \fi
+ \sloppy\clubpenalty4000\widowpenalty4000%
+ \sfcode`\.=\@m}
+ {\def\@noitemerr
+ {\@latex@warning{Empty `thebibliography' environment}}%
+ \endlist}
+ \def\@cite#1{#1}%
+ \def\@lbibitem[#1]#2{\item[]\if@filesw
+ {\def\protect##1{\string ##1\space}\immediate
+ \write\@auxout{\string\bibcite{#2}{#1}}}\fi\ignorespaces}
+ \fi
+\else
+\@cons\@openbib@code{\noexpand\small}
+\fi
+
+\def\idxquad{\hskip 10\p@}% space that divides entry from number
+
+\def\@idxitem{\par\hangindent 10\p@}
+
+\def\subitem{\par\setbox0=\hbox{--\enspace}% second order
+ \noindent\hangindent\wd0\box0}% index entry
+
+\def\subsubitem{\par\setbox0=\hbox{--\,--\enspace}% third
+ \noindent\hangindent\wd0\box0}% order index entry
+
+\def\indexspace{\par \vskip 10\p@ plus5\p@ minus3\p@\relax}
+
+\renewenvironment{theindex}
+ {\@mkboth{\indexname}{\indexname}%
+ \thispagestyle{empty}\parindent\z@
+ \parskip\z@ \@plus .3\p@\relax
+ \let\item\par
+ \def\,{\relax\ifmmode\mskip\thinmuskip
+ \else\hskip0.2em\ignorespaces\fi}%
+ \normalfont\small
+ \begin{multicols}{2}[\@makeschapterhead{\indexname}]%
+ }
+ {\end{multicols}}
+
+\renewcommand\footnoterule{%
+ \kern-3\p@
+ \hrule\@width 2truecm
+ \kern2.6\p@}
+ \newdimen\fnindent
+ \fnindent1em
+\long\def\@makefntext#1{%
+ \parindent \fnindent%
+ \leftskip \fnindent%
+ \noindent
+ \llap{\hb@xt@1em{\hss\@makefnmark\ }}\ignorespaces#1}
+
+\long\def\@makecaption#1#2{%
+ \small
+ \vskip\abovecaptionskip
+ \sbox\@tempboxa{{\bfseries #1.} #2}%
+ \ifdim \wd\@tempboxa >\hsize
+ {\bfseries #1.} #2\par
+ \else
+ \global \@minipagefalse
+ \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
+ \fi
+ \vskip\belowcaptionskip}
+
+\def\fps@figure{htbp}
+\def\fnum@figure{\figurename\thinspace\thefigure}
+\def \@floatboxreset {%
+ \reset@font
+ \small
+ \@setnobreak
+ \@setminipage
+}
+\def\fps@table{htbp}
+\def\fnum@table{\tablename~\thetable}
+\renewenvironment{table}
+ {\setlength\abovecaptionskip{0\p@}%
+ \setlength\belowcaptionskip{10\p@}%
+ \@float{table}}
+ {\end@float}
+\renewenvironment{table*}
+ {\setlength\abovecaptionskip{0\p@}%
+ \setlength\belowcaptionskip{10\p@}%
+ \@dblfloat{table}}
+ {\end@dblfloat}
+
+\long\def\@caption#1[#2]#3{\par\addcontentsline{\csname
+ ext@#1\endcsname}{#1}{\protect\numberline{\csname
+ the#1\endcsname}{\ignorespaces #2}}\begingroup
+ \@parboxrestore
+ \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
+ \endgroup}
+
+% LaTeX does not provide a command to enter the authors institute
+% addresses. The \institute command is defined here.
+
+\newcounter{@inst}
+\newcounter{@auth}
+\newcounter{auco}
+\newdimen\instindent
+\newbox\authrun
+\newtoks\authorrunning
+\newtoks\tocauthor
+\newbox\titrun
+\newtoks\titlerunning
+\newtoks\toctitle
+
+\def\clearheadinfo{\gdef\@author{No Author Given}%
+ \gdef\@title{No Title Given}%
+ \gdef\@subtitle{}%
+ \gdef\@institute{No Institute Given}%
+ \gdef\@thanks{}%
+ \global\titlerunning={}\global\authorrunning={}%
+ \global\toctitle={}\global\tocauthor={}}
+
+\def\institute#1{\gdef\@institute{#1}}
+
+\def\institutename{\par
+ \begingroup
+ \parskip=\z@
+ \parindent=\z@
+ \setcounter{@inst}{1}%
+ \def\and{\par\stepcounter{@inst}%
+ \noindent$^{\the@inst}$\enspace\ignorespaces}%
+ \setbox0=\vbox{\def\thanks##1{}\@institute}%
+ \ifnum\c@@inst=1\relax
+ \gdef\fnnstart{0}%
+ \else
+ \xdef\fnnstart{\c@@inst}%
+ \setcounter{@inst}{1}%
+ \noindent$^{\the@inst}$\enspace
+ \fi
+ \ignorespaces
+ \@institute\par
+ \endgroup}
+
+\def\@fnsymbol#1{\ensuremath{\ifcase#1\or\star\or{\star\star}\or
+ {\star\star\star}\or \dagger\or \ddagger\or
+ \mathchar "278\or \mathchar "27B\or \|\or **\or \dagger\dagger
+ \or \ddagger\ddagger \else\@ctrerr\fi}}
+
+\def\inst#1{\unskip$^{#1}$}
+\def\fnmsep{\unskip$^,$}
+\def\email#1{{\tt#1}}
+\AtBeginDocument{\@ifundefined{url}{\def\url#1{#1}}{}%
+\@ifpackageloaded{babel}{%
+\@ifundefined{extrasenglish}{}{\addto\extrasenglish{\switcht@albion}}%
+\@ifundefined{extrasfrenchb}{}{\addto\extrasfrenchb{\switcht@francais}}%
+\@ifundefined{extrasgerman}{}{\addto\extrasgerman{\switcht@deutsch}}%
+\@ifundefined{extrasngerman}{}{\addto\extrasngerman{\switcht@deutsch}}%
+}{\switcht@@therlang}%
+\providecommand{\keywords}[1]{\par\addvspace\baselineskip
+\noindent\keywordname\enspace\ignorespaces#1}%
+}
+\def\homedir{\~{ }}
+
+\def\subtitle#1{\gdef\@subtitle{#1}}
+\clearheadinfo
+%
+%%% to avoid hyperref warnings
+\providecommand*{\toclevel@author}{999}
+%%% to make title-entry parent of section-entries
+\providecommand*{\toclevel@title}{0}
+%
+\renewcommand\maketitle{\newpage
+\phantomsection
+ \refstepcounter{chapter}%
+ \stepcounter{section}%
+ \setcounter{section}{0}%
+ \setcounter{subsection}{0}%
+ \setcounter{figure}{0}
+ \setcounter{table}{0}
+ \setcounter{equation}{0}
+ \setcounter{footnote}{0}%
+ \begingroup
+ \parindent=\z@
+ \renewcommand\thefootnote{\@fnsymbol\c@footnote}%
+ \if@twocolumn
+ \ifnum \col@number=\@ne
+ \@maketitle
+ \else
+ \twocolumn[\@maketitle]%
+ \fi
+ \else
+ \newpage
+ \global\@topnum\z@ % Prevents figures from going at top of page.
+ \@maketitle
+ \fi
+ \thispagestyle{empty}\@thanks
+%
+ \def\\{\unskip\ \ignorespaces}\def\inst##1{\unskip{}}%
+ \def\thanks##1{\unskip{}}\def\fnmsep{\unskip}%
+ \instindent=\hsize
+ \advance\instindent by-\headlineindent
+ \if!\the\toctitle!\addcontentsline{toc}{title}{\@title}\else
+ \addcontentsline{toc}{title}{\the\toctitle}\fi
+ \if@runhead
+ \if!\the\titlerunning!\else
+ \edef\@title{\the\titlerunning}%
+ \fi
+ \global\setbox\titrun=\hbox{\small\rm\unboldmath\ignorespaces\@title}%
+ \ifdim\wd\titrun>\instindent
+ \typeout{Title too long for running head. Please supply}%
+ \typeout{a shorter form with \string\titlerunning\space prior to
+ \string\maketitle}%
+ \global\setbox\titrun=\hbox{\small\rm
+ Title Suppressed Due to Excessive Length}%
+ \fi
+ \xdef\@title{\copy\titrun}%
+ \fi
+%
+ \if!\the\tocauthor!\relax
+ {\def\and{\noexpand\protect\noexpand\and}%
+ \protected@xdef\toc@uthor{\@author}}%
+ \else
+ \def\\{\noexpand\protect\noexpand\newline}%
+ \protected@xdef\scratch{\the\tocauthor}%
+ \protected@xdef\toc@uthor{\scratch}%
+ \fi
+ \addtocontents{toc}{\noexpand\protect\noexpand\authcount{\the\c@auco}}%
+ \addcontentsline{toc}{author}{\toc@uthor}%
+ \if@runhead
+ \if!\the\authorrunning!
+ \value{@inst}=\value{@auth}%
+ \setcounter{@auth}{1}%
+ \else
+ \edef\@author{\the\authorrunning}%
+ \fi
+ \global\setbox\authrun=\hbox{\small\unboldmath\@author\unskip}%
+ \ifdim\wd\authrun>\instindent
+ \typeout{Names of authors too long for running head. Please supply}%
+ \typeout{a shorter form with \string\authorrunning\space prior to
+ \string\maketitle}%
+ \global\setbox\authrun=\hbox{\small\rm
+ Authors Suppressed Due to Excessive Length}%
+ \fi
+ \xdef\@author{\copy\authrun}%
+ \markboth{\@author}{\@title}%
+ \fi
+ \endgroup
+ \setcounter{footnote}{\fnnstart}%
+ \clearheadinfo}
+%
+\def\@maketitle{\newpage
+ \markboth{}{}%
+ \def\lastand{\ifnum\value{@inst}=2\relax
+ \unskip{} \andname\
+ \else
+ \unskip \lastandname\
+ \fi}%
+ \def\and{\stepcounter{@auth}\relax
+ \ifnum\value{@auth}=\value{@inst}%
+ \lastand
+ \else
+ \unskip,
+ \fi}%
+ \begin{center}%
+ \let\newline\\
+ {\Large \bfseries\boldmath
+ \pretolerance=10000
+ \@title \par}\vskip .8cm
+\if!\@subtitle!\else {\large \bfseries\boldmath
+ \vskip -.65cm
+ \pretolerance=10000
+ \@subtitle \par}\vskip .8cm\fi
+ \setbox0=\vbox{\setcounter{@auth}{1}\def\and{\stepcounter{@auth}}%
+ \def\thanks##1{}\@author}%
+ \global\value{@inst}=\value{@auth}%
+ \global\value{auco}=\value{@auth}%
+ \setcounter{@auth}{1}%
+{\lineskip .5em
+\noindent\ignorespaces
+\@author\vskip.35cm}
+ {\small\institutename}
+ \end{center}%
+ }
+
+% definition of the "\spnewtheorem" command.
+%
+% Usage:
+%
+% \spnewtheorem{env_nam}{caption}[within]{cap_font}{body_font}
+% or \spnewtheorem{env_nam}[numbered_like]{caption}{cap_font}{body_font}
+% or \spnewtheorem*{env_nam}{caption}{cap_font}{body_font}
+%
+% New is "cap_font" and "body_font". It stands for
+% fontdefinition of the caption and the text itself.
+%
+% "\spnewtheorem*" gives a theorem without number.
+%
+% A defined spnewthoerem environment is used as described
+% by Lamport.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\@thmcountersep{}
+\def\@thmcounterend{.}
+
+\def\spnewtheorem{\@ifstar{\@sthm}{\@Sthm}}
+
+% definition of \spnewtheorem with number
+
+\def\@spnthm#1#2{%
+ \@ifnextchar[{\@spxnthm{#1}{#2}}{\@spynthm{#1}{#2}}}
+\def\@Sthm#1{\@ifnextchar[{\@spothm{#1}}{\@spnthm{#1}}}
+
+\def\@spxnthm#1#2[#3]#4#5{\expandafter\@ifdefinable\csname #1\endcsname
+ {\@definecounter{#1}\@addtoreset{#1}{#3}%
+ \expandafter\xdef\csname the#1\endcsname{\expandafter\noexpand
+ \csname the#3\endcsname \noexpand\@thmcountersep \@thmcounter{#1}}%
+ \expandafter\xdef\csname #1name\endcsname{#2}%
+ \global\@namedef{#1}{\@spthm{#1}{\csname #1name\endcsname}{#4}{#5}}%
+ \global\@namedef{end#1}{\@endtheorem}}}
+
+\def\@spynthm#1#2#3#4{\expandafter\@ifdefinable\csname #1\endcsname
+ {\@definecounter{#1}%
+ \expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}%
+ \expandafter\xdef\csname #1name\endcsname{#2}%
+ \global\@namedef{#1}{\@spthm{#1}{\csname #1name\endcsname}{#3}{#4}}%
+ \global\@namedef{end#1}{\@endtheorem}}}
+
+\def\@spothm#1[#2]#3#4#5{%
+ \@ifundefined{c@#2}{\@latexerr{No theorem environment `#2' defined}\@eha}%
+ {\expandafter\@ifdefinable\csname #1\endcsname
+ {\newaliascnt{#1}{#2}%
+ \expandafter\xdef\csname #1name\endcsname{#3}%
+ \global\@namedef{#1}{\@spthm{#1}{\csname #1name\endcsname}{#4}{#5}}%
+ \global\@namedef{end#1}{\@endtheorem}}}}
+
+\def\@spthm#1#2#3#4{\topsep 7\p@ \@plus2\p@ \@minus4\p@
+\refstepcounter{#1}\phantomsection
+\@ifnextchar[{\@spythm{#1}{#2}{#3}{#4}}{\@spxthm{#1}{#2}{#3}{#4}}}
+
+\def\@spxthm#1#2#3#4{\@spbegintheorem{#2}{\csname the#1\endcsname}{#3}{#4}%
+ \ignorespaces}
+
+\def\@spythm#1#2#3#4[#5]{\@spopargbegintheorem{#2}{\csname
+ the#1\endcsname}{#5}{#3}{#4}\ignorespaces}
+
+\def\@spbegintheorem#1#2#3#4{\trivlist
+ \item[\hskip\labelsep{#3#1\ #2\@thmcounterend}]#4}
+
+\def\@spopargbegintheorem#1#2#3#4#5{\trivlist
+ \item[\hskip\labelsep{#4#1\ #2}]{#4(#3)\@thmcounterend\ }#5}
+
+% definition of \spnewtheorem* without number
+
+\def\@sthm#1#2{\@Ynthm{#1}{#2}}
+
+\def\@Ynthm#1#2#3#4{\expandafter\@ifdefinable\csname #1\endcsname
+ {\global\@namedef{#1}{\@Thm{\csname #1name\endcsname}{#3}{#4}}%
+ \expandafter\xdef\csname #1name\endcsname{#2}%
+ \global\@namedef{end#1}{\@endtheorem}}}
+
+\def\@Thm#1#2#3{\topsep 7\p@ \@plus2\p@ \@minus4\p@
+\@ifnextchar[{\@Ythm{#1}{#2}{#3}}{\@Xthm{#1}{#2}{#3}}}
+
+\def\@Xthm#1#2#3{\@Begintheorem{#1}{#2}{#3}\ignorespaces}
+
+\def\@Ythm#1#2#3[#4]{\@Opargbegintheorem{#1}
+ {#4}{#2}{#3}\ignorespaces}
+
+\def\@Begintheorem#1#2#3{#3\trivlist
+ \item[\hskip\labelsep{#2#1\@thmcounterend}]}
+
+\def\@Opargbegintheorem#1#2#3#4{#4\trivlist
+ \item[\hskip\labelsep{#3#1}]{#3(#2)\@thmcounterend\ }}
+
+\if@envcntsect
+ \def\@thmcountersep{.}
+ \spnewtheorem{theorem}{Theorem}[section]{\bfseries}{\itshape}
+\else
+ \spnewtheorem{theorem}{Theorem}{\bfseries}{\itshape}
+ \if@envcntreset
+ \@addtoreset{theorem}{section}
+ \else
+ \@addtoreset{theorem}{chapter}
+ \fi
+\fi
+
+%definition of divers theorem environments
+\spnewtheorem*{claim}{Claim}{\itshape}{\rmfamily}
+\spnewtheorem*{proof}{Proof}{\itshape}{\rmfamily}
+\if@envcntsame % alle Umgebungen wie Theorem.
+ \def\spn@wtheorem#1#2#3#4{\@spothm{#1}[theorem]{#2}{#3}{#4}}
+\else % alle Umgebungen mit eigenem Zaehler
+ \if@envcntsect % mit section numeriert
+ \def\spn@wtheorem#1#2#3#4{\@spxnthm{#1}{#2}[section]{#3}{#4}}
+ \else % nicht mit section numeriert
+ \if@envcntreset
+ \def\spn@wtheorem#1#2#3#4{\@spynthm{#1}{#2}{#3}{#4}
+ \@addtoreset{#1}{section}}
+ \else
+ \def\spn@wtheorem#1#2#3#4{\@spynthm{#1}{#2}{#3}{#4}
+ \@addtoreset{#1}{chapter}}%
+ \fi
+ \fi
+\fi
+\spn@wtheorem{case}{Case}{\itshape}{\rmfamily}
+\spn@wtheorem{conjecture}{Conjecture}{\itshape}{\rmfamily}
+\spn@wtheorem{corollary}{Corollary}{\bfseries}{\itshape}
+\spn@wtheorem{definition}{Definition}{\bfseries}{\itshape}
+\spn@wtheorem{example}{Example}{\itshape}{\rmfamily}
+\spn@wtheorem{exercise}{Exercise}{\itshape}{\rmfamily}
+\spn@wtheorem{lemma}{Lemma}{\bfseries}{\itshape}
+\spn@wtheorem{note}{Note}{\itshape}{\rmfamily}
+\spn@wtheorem{problem}{Problem}{\itshape}{\rmfamily}
+\spn@wtheorem{property}{Property}{\itshape}{\rmfamily}
+\spn@wtheorem{proposition}{Proposition}{\bfseries}{\itshape}
+\spn@wtheorem{question}{Question}{\itshape}{\rmfamily}
+\spn@wtheorem{solution}{Solution}{\itshape}{\rmfamily}
+\spn@wtheorem{remark}{Remark}{\itshape}{\rmfamily}
+
+\def\@takefromreset#1#2{%
+ \def\@tempa{#1}%
+ \let\@tempd\@elt
+ \def\@elt##1{%
+ \def\@tempb{##1}%
+ \ifx\@tempa\@tempb\else
+ \@addtoreset{##1}{#2}%
+ \fi}%
+ \expandafter\expandafter\let\expandafter\@tempc\csname cl@#2\endcsname
+ \expandafter\def\csname cl@#2\endcsname{}%
+ \@tempc
+ \let\@elt\@tempd}
+
+\def\theopargself{\def\@spopargbegintheorem##1##2##3##4##5{\trivlist
+ \item[\hskip\labelsep{##4##1\ ##2}]{##4##3\@thmcounterend\ }##5}
+ \def\@Opargbegintheorem##1##2##3##4{##4\trivlist
+ \item[\hskip\labelsep{##3##1}]{##3##2\@thmcounterend\ }}
+ }
+
+\renewenvironment{abstract}{%
+ \list{}{\advance\topsep by0.35cm\relax\small
+ \leftmargin=1cm
+ \labelwidth=\z@
+ \listparindent=\z@
+ \itemindent\listparindent
+ \rightmargin\leftmargin}\item[\hskip\labelsep
+ \bfseries\abstractname]}
+ {\endlist}
+
+\newdimen\headlineindent % dimension for space between
+\headlineindent=1.166cm % number and text of headings.
+
+\def\ps@headings{\let\@mkboth\@gobbletwo
+ \let\@oddfoot\@empty\let\@evenfoot\@empty
+ \def\@evenhead{\normalfont\small\rlap{\thepage}\hspace{\headlineindent}%
+ \leftmark\hfil}
+ \def\@oddhead{\normalfont\small\hfil\rightmark\hspace{\headlineindent}%
+ \llap{\thepage}}
+ \def\chaptermark##1{}%
+ \def\sectionmark##1{}%
+ \def\subsectionmark##1{}}
+
+\def\ps@titlepage{\let\@mkboth\@gobbletwo
+ \let\@oddfoot\@empty\let\@evenfoot\@empty
+ \def\@evenhead{\normalfont\small\rlap{\thepage}\hspace{\headlineindent}%
+ \hfil}
+ \def\@oddhead{\normalfont\small\hfil\hspace{\headlineindent}%
+ \llap{\thepage}}
+ \def\chaptermark##1{}%
+ \def\sectionmark##1{}%
+ \def\subsectionmark##1{}}
+
+\if@runhead\ps@headings\else
+\ps@empty\fi
+
+\setlength\arraycolsep{1.4\p@}
+\setlength\tabcolsep{1.4\p@}
+
+\endinput
+%end of file llncs.cls
diff --git a/llncs.ind b/llncs.ind
@@ -0,0 +1,349 @@
+% This is LLNCS.IND the handmade demonstration
+% file for an author index from Springer-Verlag
+% for Lecture Notes in Computer Science,
+% version 2.2 for LaTeX2e
+%
+\begin{theindex}
+\item Abt~I. \idxquad{7}
+\item Ahmed~T. \idxquad{3}
+\item Andreev~V. \idxquad{24}
+\item Andrieu~B. \idxquad{27}
+\item Arpagaus~M. \idxquad{34}
+\indexspace
+\item Babaev~A. \idxquad{25}
+\item B\"arwolff~A. \idxquad{33}
+\item B\'an~J. \idxquad{17}
+\item Baranov~P. \idxquad{24}
+\item Barrelet~E. \idxquad{28}
+\item Bartel~W. \idxquad{11}
+\item Bassler~U. \idxquad{28}
+\item Beck~H.P. \idxquad{35}
+\item Behrend~H.-J. \idxquad{11}
+\item Berger~Ch. \idxquad{1}
+\item Bergstein~H. \idxquad{1}
+\item Bernardi~G. \idxquad{28}
+\item Bernet~R. \idxquad{34}
+\item Besan\c con~M. \idxquad{9}
+\item Biddulph~P. \idxquad{22}
+\item Binder~E. \idxquad{11}
+\item Bischoff~A. \idxquad{33}
+\item Blobel~V. \idxquad{13}
+\item Borras~K. \idxquad{8}
+\item Bosetti~P.C. \idxquad{2}
+\item Boudry~V. \idxquad{27}
+\item Brasse~F. \idxquad{11}
+\item Braun~U. \idxquad{2}
+\item Braunschweig~A. \idxquad{1}
+\item Brisson~V. \idxquad{26}
+\item B\"ungener~L. \idxquad{13}
+\item B\"urger~J. \idxquad{11}
+\item B\"usser~F.W. \idxquad{13}
+\item Buniatian~A. \idxquad{11,37}
+\item Buschhorn~G. \idxquad{25}
+\indexspace
+\item Campbell~A.J. \idxquad{1}
+\item Carli~T. \idxquad{25}
+\item Charles~F. \idxquad{28}
+\item Clarke~D. \idxquad{5}
+\item Clegg~A.B. \idxquad{18}
+\item Colombo~M. \idxquad{8}
+\item Courau~A. \idxquad{26}
+\item Coutures~Ch. \idxquad{9}
+\item Cozzika~G. \idxquad{9}
+\item Criegee~L. \idxquad{11}
+\item Cvach~J. \idxquad{27}
+\indexspace
+\item Dagoret~S. \idxquad{28}
+\item Dainton~J.B. \idxquad{19}
+\item Dann~A.W.E. \idxquad{22}
+\item Dau~W.D. \idxquad{16}
+\item Deffur~E. \idxquad{11}
+\item Delcourt~B. \idxquad{26}
+\item Buono~Del~A. \idxquad{28}
+\item Devel~M. \idxquad{26}
+\item De Roeck~A. \idxquad{11}
+\item Dingus~P. \idxquad{27}
+\item Dollfus~C. \idxquad{35}
+\item Dreis~H.B. \idxquad{2}
+\item Drescher~A. \idxquad{8}
+\item D\"ullmann~D. \idxquad{13}
+\item D\"unger~O. \idxquad{13}
+\item Duhm~H. \idxquad{12}
+\indexspace
+\item Ebbinghaus~R. \idxquad{8}
+\item Eberle~M. \idxquad{12}
+\item Ebert~J. \idxquad{32}
+\item Ebert~T.R. \idxquad{19}
+\item Efremenko~V. \idxquad{23}
+\item Egli~S. \idxquad{35}
+\item Eichenberger~S. \idxquad{35}
+\item Eichler~R. \idxquad{34}
+\item Eisenhandler~E. \idxquad{20}
+\item Ellis~N.N. \idxquad{3}
+\item Ellison~R.J. \idxquad{22}
+\item Elsen~E. \idxquad{11}
+\item Evrard~E. \idxquad{4}
+\indexspace
+\item Favart~L. \idxquad{4}
+\item Feeken~D. \idxquad{13}
+\item Felst~R. \idxquad{11}
+\item Feltesse~A. \idxquad{9}
+\item Fensome~I.F. \idxquad{3}
+\item Ferrarotto~F. \idxquad{31}
+\item Flamm~K. \idxquad{11}
+\item Flauger~W. \idxquad{11}
+\item Flieser~M. \idxquad{25}
+\item Fl\"ugge~G. \idxquad{2}
+\item Fomenko~A. \idxquad{24}
+\item Fominykh~B. \idxquad{23}
+\item Form\'anek~J. \idxquad{30}
+\item Foster~J.M. \idxquad{22}
+\item Franke~G. \idxquad{11}
+\item Fretwurst~E. \idxquad{12}
+\indexspace
+\item Gabathuler~E. \idxquad{19}
+\item Gamerdinger~K. \idxquad{25}
+\item Garvey~J. \idxquad{3}
+\item Gayler~J. \idxquad{11}
+\item Gellrich~A. \idxquad{13}
+\item Gennis~M. \idxquad{11}
+\item Genzel~H. \idxquad{1}
+\item Godfrey~L. \idxquad{7}
+\item Goerlach~U. \idxquad{11}
+\item Goerlich~L. \idxquad{6}
+\item Gogitidze~N. \idxquad{24}
+\item Goodall~A.M. \idxquad{19}
+\item Gorelov~I. \idxquad{23}
+\item Goritchev~P. \idxquad{23}
+\item Grab~C. \idxquad{34}
+\item Gr\"assler~R. \idxquad{2}
+\item Greenshaw~T. \idxquad{19}
+\item Greif~H. \idxquad{25}
+\item Grindhammer~G. \idxquad{25}
+\indexspace
+\item Haack~J. \idxquad{33}
+\item Haidt~D. \idxquad{11}
+\item Hamon~O. \idxquad{28}
+\item Handschuh~D. \idxquad{11}
+\item Hanlon~E.M. \idxquad{18}
+\item Hapke~M. \idxquad{11}
+\item Harjes~J. \idxquad{11}
+\item Haydar~R. \idxquad{26}
+\item Haynes~W.J. \idxquad{5}
+\item Hedberg~V. \idxquad{21}
+\item Heinzelmann~G. \idxquad{13}
+\item Henderson~R.C.W. \idxquad{18}
+\item Henschel~H. \idxquad{33}
+\item Herynek~I. \idxquad{29}
+\item Hildesheim~W. \idxquad{11}
+\item Hill~P. \idxquad{11}
+\item Hilton~C.D. \idxquad{22}
+\item Hoeger~K.C. \idxquad{22}
+\item Huet~Ph. \idxquad{4}
+\item Hufnagel~H. \idxquad{14}
+\item Huot~N. \idxquad{28}
+\indexspace
+\item Itterbeck~H. \idxquad{1}
+\indexspace
+\item Jabiol~M.-A. \idxquad{9}
+\item Jacholkowska~A. \idxquad{26}
+\item Jacobsson~C. \idxquad{21}
+\item Jansen~T. \idxquad{11}
+\item J\"onsson~L. \idxquad{21}
+\item Johannsen~A. \idxquad{13}
+\item Johnson~D.P. \idxquad{4}
+\item Jung~H. \idxquad{2}
+\indexspace
+\item Kalmus~P.I.P. \idxquad{20}
+\item Kasarian~S. \idxquad{11}
+\item Kaschowitz~R. \idxquad{2}
+\item Kathage~U. \idxquad{16}
+\item Kaufmann~H. \idxquad{33}
+\item Kenyon~I.R. \idxquad{3}
+\item Kermiche~S. \idxquad{26}
+\item Kiesling~C. \idxquad{25}
+\item Klein~M. \idxquad{33}
+\item Kleinwort~C. \idxquad{13}
+\item Knies~G. \idxquad{11}
+\item Ko~W. \idxquad{7}
+\item K\"ohler~T. \idxquad{1}
+\item Kolanoski~H. \idxquad{8}
+\item Kole~F. \idxquad{7}
+\item Kolya~S.D. \idxquad{22}
+\item Korbel~V. \idxquad{11}
+\item Korn~M. \idxquad{8}
+\item Kostka~P. \idxquad{33}
+\item Kotelnikov~S.K. \idxquad{24}
+\item Krehbiel~H. \idxquad{11}
+\item Kr\"ucker~D. \idxquad{2}
+\item Kr\"uger~U. \idxquad{11}
+\item Kubenka~J.P. \idxquad{25}
+\item Kuhlen~M. \idxquad{25}
+\item Kur\v{c}a~T. \idxquad{17}
+\item Kurzh\"ofer~J. \idxquad{8}
+\item Kuznik~B. \idxquad{32}
+\indexspace
+\item Lamarche~F. \idxquad{27}
+\item Lander~R. \idxquad{7}
+\item Landon~M.P.J. \idxquad{20}
+\item Lange~W. \idxquad{33}
+\item Lanius~P. \idxquad{25}
+\item Laporte~J.F. \idxquad{9}
+\item Lebedev~A. \idxquad{24}
+\item Leuschner~A. \idxquad{11}
+\item Levonian~S. \idxquad{11,24}
+\item Lewin~D. \idxquad{11}
+\item Ley~Ch. \idxquad{2}
+\item Lindner~A. \idxquad{8}
+\item Lindstr\"om~G. \idxquad{12}
+\item Linsel~F. \idxquad{11}
+\item Lipinski~J. \idxquad{13}
+\item Loch~P. \idxquad{11}
+\item Lohmander~H. \idxquad{21}
+\item Lopez~G.C. \idxquad{20}
+\indexspace
+\item Magnussen~N. \idxquad{32}
+\item Mani~S. \idxquad{7}
+\item Marage~P. \idxquad{4}
+\item Marshall~R. \idxquad{22}
+\item Martens~J. \idxquad{32}
+\item Martin~A.@ \idxquad{19}
+\item Martyn~H.-U. \idxquad{1}
+\item Martyniak~J. \idxquad{6}
+\item Masson~S. \idxquad{2}
+\item Mavroidis~A. \idxquad{20}
+\item McMahon~S.J. \idxquad{19}
+\item Mehta~A. \idxquad{22}
+\item Meier~K. \idxquad{15}
+\item Mercer~D. \idxquad{22}
+\item Merz~T. \idxquad{11}
+\item Meyer~C.A. \idxquad{35}
+\item Meyer~H. \idxquad{32}
+\item Meyer~J. \idxquad{11}
+\item Mikocki~S. \idxquad{6,26}
+\item Milone~V. \idxquad{31}
+\item Moreau~F. \idxquad{27}
+\item Moreels~J. \idxquad{4}
+\item Morris~J.V. \idxquad{5}
+\item M\"uller~K. \idxquad{35}
+\item Murray~S.A. \idxquad{22}
+\indexspace
+\item Nagovizin~V. \idxquad{23}
+\item Naroska~B. \idxquad{13}
+\item Naumann~Th. \idxquad{33}
+\item Newton~D. \idxquad{18}
+\item Neyret~D. \idxquad{28}
+\item Nguyen~A. \idxquad{28}
+\item Niebergall~F. \idxquad{13}
+\item Nisius~R. \idxquad{1}
+\item Nowak~G. \idxquad{6}
+\item Nyberg~M. \idxquad{21}
+\indexspace
+\item Oberlack~H. \idxquad{25}
+\item Obrock~U. \idxquad{8}
+\item Olsson~J.E. \idxquad{11}
+\item Ould-Saada~F. \idxquad{13}
+\indexspace
+\item Pascaud~C. \idxquad{26}
+\item Patel~G.D. \idxquad{19}
+\item Peppel~E. \idxquad{11}
+\item Phillips~H.T. \idxquad{3}
+\item Phillips~J.P. \idxquad{22}
+\item Pichler~Ch. \idxquad{12}
+\item Pilgram~W. \idxquad{2}
+\item Pitzl~D. \idxquad{34}
+\item Prell~S. \idxquad{11}
+\item Prosi~R. \idxquad{11}
+\indexspace
+\item R\"adel~G. \idxquad{11}
+\item Raupach~F. \idxquad{1}
+\item Rauschnabel~K. \idxquad{8}
+\item Reinshagen~S. \idxquad{11}
+\item Ribarics~P. \idxquad{25}
+\item Riech~V. \idxquad{12}
+\item Riedlberger~J. \idxquad{34}
+\item Rietz~M. \idxquad{2}
+\item Robertson~S.M. \idxquad{3}
+\item Robmann~P. \idxquad{35}
+\item Roosen~R. \idxquad{4}
+\item Royon~C. \idxquad{9}
+\item Rudowicz~M. \idxquad{25}
+\item Rusakov~S. \idxquad{24}
+\item Rybicki~K. \idxquad{6}
+\indexspace
+\item Sahlmann~N. \idxquad{2}
+\item Sanchez~E. \idxquad{25}
+\item Savitsky~M. \idxquad{11}
+\item Schacht~P. \idxquad{25}
+\item Schleper~P. \idxquad{14}
+\item von Schlippe~W. \idxquad{20}
+\item Schmidt~D. \idxquad{32}
+\item Schmitz~W. \idxquad{2}
+\item Sch\"oning~A. \idxquad{11}
+\item Schr\"oder~V. \idxquad{11}
+\item Schulz~M. \idxquad{11}
+\item Schwab~B. \idxquad{14}
+\item Schwind~A. \idxquad{33}
+\item Seehausen~U. \idxquad{13}
+\item Sell~R. \idxquad{11}
+\item Semenov~A. \idxquad{23}
+\item Shekelyan~V. \idxquad{23}
+\item Shooshtari~H. \idxquad{25}
+\item Shtarkov~L.N. \idxquad{24}
+\item Siegmon~G. \idxquad{16}
+\item Siewert~U. \idxquad{16}
+\item Skillicorn~I.O. \idxquad{10}
+\item Smirnov~P. \idxquad{24}
+\item Smith~J.R. \idxquad{7}
+\item Smolik~L. \idxquad{11}
+\item Spitzer~H. \idxquad{13}
+\item Staroba~P. \idxquad{29}
+\item Steenbock~M. \idxquad{13}
+\item Steffen~P. \idxquad{11}
+\item Stella~B. \idxquad{31}
+\item Stephens~K. \idxquad{22}
+\item St\"osslein~U. \idxquad{33}
+\item Strachota~J. \idxquad{11}
+\item Straumann~U. \idxquad{35}
+\item Struczinski~W. \idxquad{2}
+\indexspace
+\item Taylor~R.E. \idxquad{36,26}
+\item Tchernyshov~V. \idxquad{23}
+\item Thiebaux~C. \idxquad{27}
+\item Thompson~G. \idxquad{20}
+\item Tru\"ol~P. \idxquad{35}
+\item Turnau~J. \idxquad{6}
+\indexspace
+\item Urban~L. \idxquad{25}
+\item Usik~A. \idxquad{24}
+\indexspace
+\item Valkarova~A. \idxquad{30}
+\item Vall\'ee~C. \idxquad{28}
+\item Van Esch~P. \idxquad{4}
+\item Vartapetian~A. \idxquad{11}
+\item Vazdik~Y. \idxquad{24}
+\item Verrecchia~P. \idxquad{9}
+\item Vick~R. \idxquad{13}
+\item Vogel~E. \idxquad{1}
+\indexspace
+\item Wacker~K. \idxquad{8}
+\item Walther~A. \idxquad{8}
+\item Weber~G. \idxquad{13}
+\item Wegner~A. \idxquad{11}
+\item Wellisch~H.P. \idxquad{25}
+\item West~L.R. \idxquad{3}
+\item Willard~S. \idxquad{7}
+\item Winde~M. \idxquad{33}
+\item Winter~G.-G. \idxquad{11}
+\item Wolff~Th. \idxquad{34}
+\item Wright~A.E. \idxquad{22}
+\item Wulff~N. \idxquad{11}
+\indexspace
+\item Yiou~T.P. \idxquad{28}
+\indexspace
+\item \v{Z}\'a\v{c}ek~J. \idxquad{30}
+\item Zeitnitz~C. \idxquad{12}
+\item Ziaeepour~H. \idxquad{26}
+\item Zimmer~M. \idxquad{11}
+\item Zimmermann~W. \idxquad{11}
+\end{theindex}
diff --git a/llncsdoc.sty b/llncsdoc.sty
@@ -0,0 +1,42 @@
+% This is LLNCSDOC.STY the modification of the
+% LLNCS class file for the documentation of
+% the class itself.
+%
+\def\AmS{{\protect\usefont{OMS}{cmsy}{m}{n}%
+ A\kern-.1667em\lower.5ex\hbox{M}\kern-.125emS}}
+\def\AmSTeX{{\protect\AmS-\protect\TeX}}
+%
+\def\ps@myheadings{\let\@mkboth\@gobbletwo
+\def\@oddhead{\hbox{}\hfil\small\rm\rightmark
+\qquad\thepage}%
+\def\@oddfoot{}\def\@evenhead{\small\rm\thepage\qquad
+\leftmark\hfil}%
+\def\@evenfoot{}\def\sectionmark##1{}\def\subsectionmark##1{}}
+\ps@myheadings
+%
+\setcounter{tocdepth}{2}
+%
+\renewcommand{\labelitemi}{--}
+\newenvironment{alpherate}%
+{\renewcommand{\labelenumi}{\alph{enumi})}\begin{enumerate}}%
+{\end{enumerate}\renewcommand{\labelenumi}{enumi}}
+%
+\def\bibauthoryear{\begingroup
+\def\thebibliography##1{\section*{References}%
+ \small\list{}{\settowidth\labelwidth{}\leftmargin\parindent
+ \itemindent=-\parindent
+ \labelsep=\z@
+ \usecounter{enumi}}%
+ \def\newblock{\hskip .11em plus .33em minus -.07em}%
+ \sloppy
+ \sfcode`\.=1000\relax}%
+ \def\@cite##1{##1}%
+ \def\@lbibitem[##1]##2{\item[]\if@filesw
+ {\def\protect####1{\string ####1\space}\immediate
+ \write\@auxout{\string\bibcite{##2}{##1}}}\fi\ignorespaces}%
+\begin{thebibliography}{}
+\bibitem[1982]{clar:eke3} Clarke, F., Ekeland, I.: Nonlinear
+oscillations and boundary-value problems for Hamiltonian systems.
+Arch. Rat. Mech. Anal. 78, 315--333 (1982)
+\end{thebibliography}
+\endgroup}
diff --git a/main.tex b/main.tex
@@ -0,0 +1,70 @@
+\RequirePackage{amsmath}
+\documentclass[runningheads]{llncs}
+\usepackage{url}
+\usepackage{graphicx}
+\graphicspath{{figures/}}
+\usepackage{booktabs}
+\usepackage[caption=false]{subfig}
+\usepackage{mathtools}
+\usepackage{cleveref}
+\usepackage{amsmath}
+\usepackage{enumitem}
+\usepackage[boxed]{algorithm2e}
+
+\newcommand{\keywords}[1]{\par\addvspace\baselineskip
+\noindent\keywordname\enspace\ignorespaces#1}
+
+% custom mathematical expressions
+\newcommand{\Var}[1]{\sigma_{#1}^2}
+\newcommand{\Fourier}[1]{\mathcal{F}\left\{#1\right\}}
+\newcommand{\InverseFourier}[1]{\mathcal{F}^{-1}\left\{#1\right\}}
+\newcommand{\Fun}[1]{\mathcal{D}_1\left(x,#1\right)}
+\newcommand{\FunSecond}[1]{\mathcal{D}_2\left(x,#1\right)}
+\newcommand{\FunThird}[1]{\mathcal{D}_2\left(x,#1\right)}
+\newcommand{\FunThreeD}[1]{\mathcal{D}_3\left(x,y,#1\right)}
+\newcommand{\Sinh}[1]{\cosh\left(#1\right)}
+\newcommand{\SinhX}[1]{\sinh\left(#1\right)}
+
+\newcommand{\FourierY}[2]{\mathcal{F}_{#2}\!\left\{#1\right\}}
+\newcommand{\InverseFourierY}[2]{\mathcal{F}^{-1}_{#2}\!\left\{#1\right\}}
+
+\newcommand{\FourierX}[3]{\mathcal{F}_{#2}\!\left\{#1\right\}\!\left(#3\right)}
+\newcommand{\InverseFourierX}[3]{\mathcal{F}^{-1}_{#2}\!\left\{#1\right\}\!\left(#3\right)}
+
+% properly aligned version of sqrt for \zeta_y^2
+\newcommand{\SqrtZeta}[1]{\sqrt{\vphantom{\zeta_x^2}\smash[b]{#1}}}
+
+% wave vector
+\newcommand{\Kvec}{\vec{k}}
+\newcommand{\Kveclen}{\lvert\smash[b]{\Kvec}\rvert}
+
+
+
+
+\title{Acceleration of computing and visualization processes with OpenCL for standing sea wave simulation model}
+\titlerunning{Acceleration of computing and visualization}
+\toctitle{Acceleration of computing and visualization processes with OpenCL for standing sea wave simulation model}
+\author{Andrei Ivashchenko \and Alexey Belezeko \and Ivan Gankevich \and Vladimir Korkhov \and Nataliia Kulabukhova}
+\authorrunning{A.~Ivashchenko, A.~Belezeko, I.~Gankevich, V. Korkhov, N.~Kulabukhova}
+\tocauthor{A.\:Ivashchenko et al.}
+\institute{Saint Petersburg State University,\\Dept. of Computer Modeling and Multiprocessor Systems,\\Universitetskii prospekt 35, Petergof, Saint Petersburg, Russia 198504\\\email{aiivashchenko@cc.spbu.ru, alexey.belezeko@gmail.com, i.gankevich@spbu.ru, v.korkhov@spbu.ru, n.kulabukhova@spbu.ru}}
+
+
+% 1. Add authors. Check
+% 2. Architecture diagram. Check
+% 3. Resize figures. Check
+% 4. Rewrite section mentioning CUDA.
+
+\begin{document}
+
+\maketitle
+
+\input{src/abstract}
+\input{src/head}
+\input{src/body}
+\input{src/tail}
+
+\bibliographystyle{splncs03}
+\bibliography{src/refs.bib}
+
+\end{document}
diff --git a/readme.txt b/readme.txt
@@ -0,0 +1,30 @@
+Dear LLNCS user,
+
+The files in this directory belong to the LaTeX2e package for
+Lecture Notes in Computer Science (LNCS) of Springer-Verlag.
+
+It consists of the following files:
+
+ readme.txt this file
+
+ history.txt the version history of the package
+
+ llncs.cls the LaTeX2e document class
+
+ llncs.dem the sample input file
+
+ llncs.doc the documentation of the class (LaTeX source)
+ llncsdoc.pdf the documentation of the class (PDF version)
+ llncsdoc.sty the modification of the class for the documentation
+ llncs.ind an external (faked) author index file
+ subjidx.ind subject index demo from the Springer book package
+ llncs.dvi the resultig DVI file (remember to use binary transfer!)
+
+ sprmindx.sty supplementary style file for MakeIndex
+ (usage: makeindex -s sprmindx.sty <yourfile.idx>)
+
+ splncs03.bst current LNCS BibTeX style with alphabetic sorting
+
+ aliascnt.sty part of the Oberdiek bundle; allows more control over
+ the counters associated to any numbered item
+ remreset.sty by David Carlisle
diff --git a/remreset.sty b/remreset.sty
@@ -0,0 +1,39 @@
+
+% remreset package
+%%%%%%%%%%%%%%%%%%
+
+% Copyright 1997 David carlisle
+% This file may be distributed under the terms of the LPPL.
+% See 00readme.txt for details.
+
+% 1997/09/28 David Carlisle
+
+% LaTeX includes a command \@addtoreset that is used to declare that
+% a counter should be reset every time a second counter is incremented.
+
+% For example the book class has a line
+% \@addtoreset{footnote}{chapter}
+% So that the footnote counter is reset each chapter.
+
+% If you wish to bas a new class on book, but without this counter
+% being reset, then standard LaTeX gives no simple mechanism to do
+% this.
+
+% This package defines |\@removefromreset| which just undoes the effect
+% of \@addtorest. So for example a class file may be defined by
+
+% \LoadClass{book}
+% \@removefromreset{footnote}{chapter}
+
+
+\def\@removefromreset#1#2{{%
+ \expandafter\let\csname c@#1\endcsname\@removefromreset
+ \def\@elt##1{%
+ \expandafter\ifx\csname c@##1\endcsname\@removefromreset
+ \else
+ \noexpand\@elt{##1}%
+ \fi}%
+ \expandafter\xdef\csname cl@#2\endcsname{%
+ \csname cl@#2\endcsname}}}
+
+
diff --git a/splncs03.bst b/splncs03.bst
@@ -0,0 +1,1519 @@
+%% BibTeX bibliography style `splncs03'
+%%
+%% BibTeX bibliography style for use with numbered references in
+%% Springer Verlag's "Lecture Notes in Computer Science" series.
+%% (See Springer's documentation for llncs.cls for
+%% more details of the suggested reference format.) Note that this
+%% file will not work for author-year style citations.
+%%
+%% Use \documentclass{llncs} and \bibliographystyle{splncs03}, and cite
+%% a reference with (e.g.) \cite{smith77} to get a "[1]" in the text.
+%%
+%% This file comes to you courtesy of Maurizio "Titto" Patrignani of
+%% Dipartimento di Informatica e Automazione Universita' Roma Tre
+%%
+%% ================================================================================================
+%% This was file `titto-lncs-02.bst' produced on Wed Apr 1, 2009
+%% Edited by hand by titto based on `titto-lncs-01.bst' (see below)
+%%
+%% CHANGES (with respect to titto-lncs-01.bst):
+%% - Removed the call to \urlprefix (thus no "URL" string is added to the output)
+%% ================================================================================================
+%% This was file `titto-lncs-01.bst' produced on Fri Aug 22, 2008
+%% Edited by hand by titto based on `titto.bst' (see below)
+%%
+%% CHANGES (with respect to titto.bst):
+%% - Removed the "capitalize" command for editors string "(eds.)" and "(ed.)"
+%% - Introduced the functions titto.bbl.pages and titto.bbl.page for journal pages (without "pp.")
+%% - Added a new.sentence command to separate with a dot booktitle and series in the inproceedings
+%% - Commented all new.block commands before urls and notes (to separate them with a comma)
+%% - Introduced the functions titto.bbl.volume for handling journal volumes (without "vol." label)
+%% - Used for editors the same name conventions used for authors (see function format.in.ed.booktitle)
+%% - Removed a \newblock to avoid long spaces between title and "In: ..."
+%% - Added function titto.space.prefix to add a space instead of "~" after the (removed) "vol." label
+%% ================================================================================================
+%% This was file `titto.bst',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% merlin.mbs (with options: `vonx,nm-rvvc,yr-par,jttl-rm,volp-com,jwdpg,jwdvol,numser,ser-vol,jnm-x,btit-rm,bt-rm,edparxc,bkedcap,au-col,in-col,fin-bare,pp,ed,abr,mth-bare,xedn,jabr,and-com,and-com-ed,xand,url,url-blk,em-x,nfss,')
+%% ----------------------------------------
+%% *** Tentative .bst file for Springer LNCS ***
+%%
+%% Copyright 1994-2007 Patrick W Daly
+ % ===============================================================
+ % IMPORTANT NOTICE:
+ % This bibliographic style (bst) file has been generated from one or
+ % more master bibliographic style (mbs) files, listed above.
+ %
+ % This generated file can be redistributed and/or modified under the terms
+ % of the LaTeX Project Public License Distributed from CTAN
+ % archives in directory macros/latex/base/lppl.txt; either
+ % version 1 of the License, or any later version.
+ % ===============================================================
+ % Name and version information of the main mbs file:
+ % \ProvidesFile{merlin.mbs}[2007/04/24 4.20 (PWD, AO, DPC)]
+ % For use with BibTeX version 0.99a or later
+ %-------------------------------------------------------------------
+ % This bibliography style file is intended for texts in ENGLISH
+ % This is a numerical citation style, and as such is standard LaTeX.
+ % It requires no extra package to interface to the main text.
+ % The form of the \bibitem entries is
+ % \bibitem{key}...
+ % Usage of \cite is as follows:
+ % \cite{key} ==>> [#]
+ % \cite[chap. 2]{key} ==>> [#, chap. 2]
+ % where # is a number determined by the ordering in the reference list.
+ % The order in the reference list is alphabetical by authors.
+ %---------------------------------------------------------------------
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ eid
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ url
+ volume
+ year
+ }
+ {}
+ { label }
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+STRINGS { s t}
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+% newline$
+% "\newblock " write$ % removed for titto-lncs-01
+ " " write$ % to avoid long spaces between title and "In: ..."
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+FUNCTION {fin.entry}
+{ duplicate$ empty$
+ 'pop$
+ 'write$
+ if$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+FUNCTION {add.blank}
+{ " " * before.all 'output.state :=
+}
+
+
+FUNCTION {add.colon}
+{ duplicate$ empty$
+ 'skip$
+ { ":" * add.blank }
+ if$
+}
+
+FUNCTION {date.block}
+{
+ new.block
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+STRINGS {z}
+FUNCTION {remove.dots}
+{ 'z :=
+ ""
+ { z empty$ not }
+ { z #1 #1 substring$
+ z #2 global.max$ substring$ 'z :=
+ duplicate$ "." = 'pop$
+ { * }
+ if$
+ }
+ while$
+}
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+FUNCTION {emphasize}
+{ skip$ }
+FUNCTION {tie.or.space.prefix}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$
+}
+FUNCTION {titto.space.prefix} % always introduce a space
+{ duplicate$ text.length$ #3 <
+ { " " }
+ { " " }
+ if$
+ swap$
+}
+
+
+FUNCTION {capitalize}
+{ "u" change.case$ "t" change.case$ }
+
+FUNCTION {space.word}
+{ " " swap$ * " " * }
+ % Here are the language-specific definitions for explicit words.
+ % Each function has a name bbl.xxx where xxx is the English word.
+ % The language selected here is ENGLISH
+FUNCTION {bbl.and}
+{ "and"}
+
+FUNCTION {bbl.etal}
+{ "et~al." }
+
+FUNCTION {bbl.editors}
+{ "eds." }
+
+FUNCTION {bbl.editor}
+{ "ed." }
+
+FUNCTION {bbl.edby}
+{ "edited by" }
+
+FUNCTION {bbl.edition}
+{ "edn." }
+
+FUNCTION {bbl.volume}
+{ "vol." }
+
+FUNCTION {titto.bbl.volume} % for handling journals
+{ "" }
+
+FUNCTION {bbl.of}
+{ "of" }
+
+FUNCTION {bbl.number}
+{ "no." }
+
+FUNCTION {bbl.nr}
+{ "no." }
+
+FUNCTION {bbl.in}
+{ "in" }
+
+FUNCTION {bbl.pages}
+{ "pp." }
+
+FUNCTION {bbl.page}
+{ "p." }
+
+FUNCTION {titto.bbl.pages} % for journals
+{ "" }
+
+FUNCTION {titto.bbl.page} % for journals
+{ "" }
+
+FUNCTION {bbl.chapter}
+{ "chap." }
+
+FUNCTION {bbl.techrep}
+{ "Tech. Rep." }
+
+FUNCTION {bbl.mthesis}
+{ "Master's thesis" }
+
+FUNCTION {bbl.phdthesis}
+{ "Ph.D. thesis" }
+
+MACRO {jan} {"Jan."}
+
+MACRO {feb} {"Feb."}
+
+MACRO {mar} {"Mar."}
+
+MACRO {apr} {"Apr."}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"Jun."}
+
+MACRO {jul} {"Jul."}
+
+MACRO {aug} {"Aug."}
+
+MACRO {sep} {"Sep."}
+
+MACRO {oct} {"Oct."}
+
+MACRO {nov} {"Nov."}
+
+MACRO {dec} {"Dec."}
+
+MACRO {acmcs} {"ACM Comput. Surv."}
+
+MACRO {acta} {"Acta Inf."}
+
+MACRO {cacm} {"Commun. ACM"}
+
+MACRO {ibmjrd} {"IBM J. Res. Dev."}
+
+MACRO {ibmsj} {"IBM Syst.~J."}
+
+MACRO {ieeese} {"IEEE Trans. Software Eng."}
+
+MACRO {ieeetc} {"IEEE Trans. Comput."}
+
+MACRO {ieeetcad}
+ {"IEEE Trans. Comput. Aid. Des."}
+
+MACRO {ipl} {"Inf. Process. Lett."}
+
+MACRO {jacm} {"J.~ACM"}
+
+MACRO {jcss} {"J.~Comput. Syst. Sci."}
+
+MACRO {scp} {"Sci. Comput. Program."}
+
+MACRO {sicomp} {"SIAM J. Comput."}
+
+MACRO {tocs} {"ACM Trans. Comput. Syst."}
+
+MACRO {tods} {"ACM Trans. Database Syst."}
+
+MACRO {tog} {"ACM Trans. Graphic."}
+
+MACRO {toms} {"ACM Trans. Math. Software"}
+
+MACRO {toois} {"ACM Trans. Office Inf. Syst."}
+
+MACRO {toplas} {"ACM Trans. Progr. Lang. Syst."}
+
+MACRO {tcs} {"Theor. Comput. Sci."}
+
+FUNCTION {bibinfo.check}
+{ swap$
+ duplicate$ missing$
+ {
+ pop$ pop$
+ ""
+ }
+ { duplicate$ empty$
+ {
+ swap$ pop$
+ }
+ { swap$
+ pop$
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {bibinfo.warn}
+{ swap$
+ duplicate$ missing$
+ {
+ swap$ "missing " swap$ * " in " * cite$ * warning$ pop$
+ ""
+ }
+ { duplicate$ empty$
+ {
+ swap$ "empty " swap$ * " in " * cite$ * warning$
+ }
+ { swap$
+ pop$
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {format.url}
+{ url empty$
+ { "" }
+% { "\urlprefix\url{" url * "}" * }
+ { "\url{" url * "}" * } % changed in titto-lncs-02.bst
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+
+STRINGS { bibinfo}
+
+FUNCTION {format.names}
+{ 'bibinfo :=
+ duplicate$ empty$ 'skip$ {
+ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{vv~}{ll}{, jj}{, f{.}.}"
+ format.name$
+ bibinfo bibinfo.check
+ 't :=
+ nameptr #1 >
+ {
+ namesleft #1 >
+ { ", " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ "," *
+ t "others" =
+ {
+ " " * bbl.etal *
+ }
+ { " " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ } if$
+}
+FUNCTION {format.names.ed}
+{
+ 'bibinfo :=
+ duplicate$ empty$ 'skip$ {
+ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{f{.}.~}{vv~}{ll}{ jj}"
+ format.name$
+ bibinfo bibinfo.check
+ 't :=
+ nameptr #1 >
+ {
+ namesleft #1 >
+ { ", " * t * }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ "," *
+ t "others" =
+ {
+
+ " " * bbl.etal *
+ }
+ { " " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ } if$
+}
+FUNCTION {format.authors}
+{ author "author" format.names
+}
+FUNCTION {get.bbl.editor}
+{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ }
+
+FUNCTION {format.editors}
+{ editor "editor" format.names duplicate$ empty$ 'skip$
+ {
+ " " *
+ get.bbl.editor
+% capitalize
+ "(" swap$ * ")" *
+ *
+ }
+ if$
+}
+FUNCTION {format.note}
+{
+ note empty$
+ { "" }
+ { note #1 #1 substring$
+ duplicate$ "{" =
+ 'skip$
+ { output.state mid.sentence =
+ { "l" }
+ { "u" }
+ if$
+ change.case$
+ }
+ if$
+ note #2 global.max$ substring$ * "note" bibinfo.check
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title
+ duplicate$ empty$ 'skip$
+ { "t" change.case$ }
+ if$
+ "title" bibinfo.check
+}
+FUNCTION {output.bibitem}
+{ newline$
+ "\bibitem{" write$
+ cite$ write$
+ "}" write$
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {n.dashify}
+{
+ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {word.in}
+{ bbl.in capitalize
+ ":" *
+ " " * }
+
+FUNCTION {format.date}
+{
+ month "month" bibinfo.check
+ duplicate$ empty$
+ year "year" bibinfo.check duplicate$ empty$
+ { swap$ 'skip$
+ { "there's a month but no year in " cite$ * warning$ }
+ if$
+ *
+ }
+ { swap$ 'skip$
+ {
+ swap$
+ " " * swap$
+ }
+ if$
+ *
+ remove.dots
+ }
+ if$
+ duplicate$ empty$
+ 'skip$
+ {
+ before.all 'output.state :=
+ " (" swap$ * ")" *
+ }
+ if$
+}
+FUNCTION {format.btitle}
+{ title "title" bibinfo.check
+ duplicate$ empty$ 'skip$
+ {
+ }
+ if$
+}
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { bbl.volume volume tie.or.space.prefix
+ "volume" bibinfo.check * *
+ series "series" bibinfo.check
+ duplicate$ empty$ 'pop$
+ { emphasize ", " * swap$ * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { bbl.number }
+ { bbl.number capitalize }
+ if$
+ number tie.or.space.prefix "number" bibinfo.check * *
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { bbl.in space.word *
+ series "series" bibinfo.check *
+ }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition duplicate$ empty$ 'skip$
+ {
+ output.state mid.sentence =
+ { "l" }
+ { "t" }
+ if$ change.case$
+ "edition" bibinfo.check
+ " " * bbl.edition *
+ }
+ if$
+}
+INTEGERS { multiresult }
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+FUNCTION {format.pages}
+{ pages duplicate$ empty$ 'skip$
+ { duplicate$ multi.page.check
+ {
+ bbl.pages swap$
+ n.dashify
+ }
+ {
+ bbl.page swap$
+ }
+ if$
+ tie.or.space.prefix
+ "pages" bibinfo.check
+ * *
+ }
+ if$
+}
+FUNCTION {format.journal.pages}
+{ pages duplicate$ empty$ 'pop$
+ { swap$ duplicate$ empty$
+ { pop$ pop$ format.pages }
+ {
+ ", " *
+ swap$
+ n.dashify
+ pages multi.page.check
+ 'titto.bbl.pages
+ 'titto.bbl.page
+ if$
+ swap$ tie.or.space.prefix
+ "pages" bibinfo.check
+ * *
+ *
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {format.journal.eid}
+{ eid "eid" bibinfo.check
+ duplicate$ empty$ 'pop$
+ { swap$ duplicate$ empty$ 'skip$
+ {
+ ", " *
+ }
+ if$
+ swap$ *
+ }
+ if$
+}
+FUNCTION {format.vol.num.pages} % this function is used only for journal entries
+{ volume field.or.null
+ duplicate$ empty$ 'skip$
+ {
+% bbl.volume swap$ tie.or.space.prefix
+ titto.bbl.volume swap$ titto.space.prefix
+% rationale for the change above: for journals you don't want "vol." label
+% hence it does not make sense to attach the journal number to the label when
+% it is short
+ "volume" bibinfo.check
+ * *
+ }
+ if$
+ number "number" bibinfo.check duplicate$ empty$ 'skip$
+ {
+ swap$ duplicate$ empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ swap$
+ "(" swap$ * ")" *
+ }
+ if$ *
+ eid empty$
+ { format.journal.pages }
+ { format.journal.eid }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { bbl.chapter }
+ { type "l" change.case$
+ "type" bibinfo.check
+ }
+ if$
+ chapter tie.or.space.prefix
+ "chapter" bibinfo.check
+ * *
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.booktitle}
+{
+ booktitle "booktitle" bibinfo.check
+}
+FUNCTION {format.in.ed.booktitle}
+{ format.booktitle duplicate$ empty$ 'skip$
+ {
+% editor "editor" format.names.ed duplicate$ empty$ 'pop$ % changed by titto
+ editor "editor" format.names duplicate$ empty$ 'pop$
+ {
+ " " *
+ get.bbl.editor
+% capitalize
+ "(" swap$ * ") " *
+ * swap$
+ * }
+ if$
+ word.in swap$ *
+ }
+ if$
+}
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+FUNCTION {format.thesis.type}
+{ type duplicate$ empty$
+ 'pop$
+ { swap$ pop$
+ "t" change.case$ "type" bibinfo.check
+ }
+ if$
+}
+FUNCTION {format.tr.number}
+{ number "number" bibinfo.check
+ type duplicate$ empty$
+ { pop$ bbl.techrep }
+ 'skip$
+ if$
+ "type" bibinfo.check
+ swap$ duplicate$ empty$
+ { pop$ "t" change.case$ }
+ { tie.or.space.prefix * * }
+ if$
+}
+FUNCTION {format.article.crossref}
+{
+ key duplicate$ empty$
+ { pop$
+ journal duplicate$ empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref * warning$ }
+ { "journal" bibinfo.check emphasize word.in swap$ * }
+ if$
+ }
+ { word.in swap$ * " " *}
+ if$
+ " \cite{" * crossref * "}" *
+}
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ "editor" bibinfo.check
+ editor num.names$ duplicate$
+ #2 >
+ { pop$
+ "editor" bibinfo.check
+ " " * bbl.etal
+ *
+ }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ {
+ "editor" bibinfo.check
+ " " * bbl.etal
+ *
+ }
+ {
+ bbl.and space.word
+ * editor #2 "{vv~}{ll}" format.name$
+ "editor" bibinfo.check
+ *
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {format.book.crossref}
+{ volume duplicate$ empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ pop$ word.in
+ }
+ { bbl.volume
+ capitalize
+ swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word *
+ }
+ if$
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { series emphasize * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+FUNCTION {format.incoll.inproc.crossref}
+{
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { format.booktitle duplicate$ empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ }
+ { word.in swap$ * }
+ if$
+ }
+ { word.in key * " " *}
+ if$
+ }
+ { word.in format.crossref.editor * " " *}
+ if$
+ " \cite{" * crossref * "}" *
+}
+FUNCTION {format.org.or.pub}
+{ 't :=
+ ""
+ address empty$ t empty$ and
+ 'skip$
+ {
+ t empty$
+ { address "address" bibinfo.check *
+ }
+ { t *
+ address empty$
+ 'skip$
+ { ", " * address "address" bibinfo.check * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+FUNCTION {format.publisher.address}
+{ publisher "publisher" bibinfo.warn format.org.or.pub
+}
+
+FUNCTION {format.organization.address}
+{ organization "organization" bibinfo.check format.org.or.pub
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ add.colon
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ {
+ journal
+ "journal" bibinfo.check
+ "journal" output.check
+ add.blank
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check
+ add.colon
+ }
+ { format.authors output.nonnull
+ add.colon
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ new.sentence
+ format.number.series output
+ format.publisher.address output
+ }
+ {
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ add.colon
+ new.block
+ format.title "title" output.check
+ new.block
+ howpublished "howpublished" bibinfo.check output
+ address "address" bibinfo.check output
+ format.date output
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check
+ add.colon
+ }
+ { format.authors output.nonnull
+ add.colon
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ {
+ format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ new.sentence
+ format.number.series output
+ format.publisher.address output
+ }
+ {
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ add.colon
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.chapter.pages output
+ new.sentence
+ format.number.series output
+ format.publisher.address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ add.colon
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ new.sentence % added by titto
+ format.bvolume output
+ format.pages output
+ new.sentence
+ format.number.series output
+ publisher empty$
+ { format.organization.address output }
+ { organization "organization" bibinfo.check output
+ format.publisher.address output
+ }
+ if$
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+FUNCTION {conference} { inproceedings }
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization "organization" bibinfo.check
+ duplicate$ empty$ 'pop$
+ { output
+ address "address" bibinfo.check output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ add.colon
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ {
+ address new.block.checka
+ address "address" bibinfo.check output
+ }
+ 'skip$
+ if$
+ }
+ {
+ organization address new.block.checkb
+ organization "organization" bibinfo.check output
+ address "address" bibinfo.check output
+ }
+ if$
+ format.edition output
+ format.date output
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ add.colon
+ new.block
+ format.btitle
+ "title" output.check
+ new.block
+ bbl.mthesis format.thesis.type output.nonnull
+ school "school" bibinfo.warn output
+ address "address" bibinfo.check output
+ format.date "year" output.check
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ add.colon
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished "howpublished" bibinfo.check output
+ format.date output
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+ empty.misc.check
+}
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ add.colon
+ new.block
+ format.btitle
+ "title" output.check
+ new.block
+ bbl.phdthesis format.thesis.type output.nonnull
+ school "school" bibinfo.warn output
+ address "address" bibinfo.check output
+ format.date "year" output.check
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization "organization" bibinfo.check output
+ }
+ { format.editors output.nonnull }
+ if$
+ add.colon
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ editor empty$
+ { publisher empty$
+ { format.number.series output }
+ {
+ new.sentence
+ format.number.series output
+ format.publisher.address output
+ }
+ if$
+ }
+ { publisher empty$
+ {
+ new.sentence
+ format.number.series output
+ format.organization.address output }
+ {
+ new.sentence
+ format.number.series output
+ organization "organization" bibinfo.check output
+ format.publisher.address output
+ }
+ if$
+ }
+ if$
+ format.date "year" output.check
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ add.colon
+ new.block
+ format.title
+ "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" bibinfo.warn output
+ address "address" bibinfo.check output
+ format.date "year" output.check
+% new.block
+ format.url output
+% new.block
+ format.note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ add.colon
+ new.block
+ format.title "title" output.check
+ format.date output
+% new.block
+ format.url output
+% new.block
+ format.note "note" output.check
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+READ
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+INTEGERS { len }
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{ll{ }}{ ff{ }}{ jj{ }}"
+ format.name$ 't :=
+ nameptr #1 >
+ {
+ " " *
+ namesleft #1 = t "others" = and
+ { "zzzzz" * }
+ { t sortify * }
+ if$
+ }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+FUNCTION {presort}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+ITERATE {presort}
+SORT
+STRINGS { longest.label }
+INTEGERS { number.label longest.label.width }
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #1 'number.label :=
+ #0 'longest.label.width :=
+}
+FUNCTION {longest.label.pass}
+{ number.label int.to.str$ 'label :=
+ number.label #1 + 'number.label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+}
+EXECUTE {initialize.longest.label}
+ITERATE {longest.label.pass}
+FUNCTION {begin.bib}
+{ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\begin{thebibliography}{" longest.label * "}" *
+ write$ newline$
+ "\providecommand{\url}[1]{\texttt{#1}}"
+ write$ newline$
+ "\providecommand{\urlprefix}{URL }"
+ write$ newline$
+}
+EXECUTE {begin.bib}
+EXECUTE {init.state.consts}
+ITERATE {call.type$}
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}" write$ newline$
+}
+EXECUTE {end.bib}
+%% End of customized bst file
+%%
+%% End of file `titto.bst'.
+
+
diff --git a/sprmindx.sty b/sprmindx.sty
@@ -0,0 +1,4 @@
+delim_0 "\\idxquad "
+delim_1 "\\idxquad "
+delim_2 "\\idxquad "
+delim_n ",\\,"
diff --git a/src/abstract.tex b/src/abstract.tex
@@ -0,0 +1,5 @@
+\begin{abstract}
+ In this paper we highlight one of the possible acceleration approaches for the standing wave model simulation model with the use of OpenCL framework for GPGPU computations. We provide a description of the wave’s mathematical model, an explanation for the technology selection, as well as the identification of the algorithm part that can be accelerated. The text also contains a description of solution’s performance evaluation stage being compared with CPU-only program. The influence of OpenCL usage for improvements in rendering process is also shown here. Finally, possible ways of application improvement and further development are also considered.
+
+ \keywords{Computing, Mathematical modelling, OpenCL, OpenGL, Autoregressive process, Moving average process, Velocity potential field, Visualisation, Real-time simulation}
+\end{abstract}+
\ No newline at end of file
diff --git a/src/body.tex b/src/body.tex
@@ -0,0 +1,317 @@
+\section{Compute and graphics contexts interoperability}
+
+OpenGL itself does not contain any mechanisms that could help to organise the interaction between OpenGL and OpenCL. However, despite the fact that the specified functionality is not available, OpenGL supports the data and message exchange between its own contexts, the fundamental principles of which are laid in CL/GL interoperability \cite{opengl:orm}. Thus, it would be expediently to consider on this question as it represents the basics we need to understand.
+
+First, the graphics card, which is intended to be used for computation, should be checked for OpenCL shared context mode support. To find this out, the \texttt{clinfo} command line utility should be run on the target machine. If the required functionality is supported the \texttt{cl\_khr\_gl\_sharing} option will be specified in the ``Device Extensions'' section \cite{objects2013opencl}. This extension is provided by Khronos group and it is responsible for the interaction between APIs.
+
+The following extension contains all necessary functions for OpenCL, which are defined in \texttt{cl\_gl.h} header file. In general, they could be divided into three main groups:
+
+\begin{itemize}
+ \item Memory broker functions --- acquire and release allocated memory areas represented with OpenGL objects;
+ \item Object transformation functions --- create an OpenCL representation for OpenGL object;
+ \item Info functions --- provide various information about OpenGL context, like associated devices, object description, etc.
+\end{itemize}
+
+The next thing that should be discussed is data types, which could be driven by the interoperability API. This issue has been partially reviewed in~\cite{bogdanov:2016:CDR} at the discussion about graphics API parallelization. Basically, all OpenGL object are represented with two groups. The first one is a Container Object group the specificity of which lies in the fact that they can not be shared between contexts since they contain references to other objects, and GL standard disallow transfer for objects of that type, i.e.~they are not a point of our interest. Another group contains regular Objects, which could be shared between context without any limitations. Since we need to share only the data for now, we should take a look for the Buffer Object, which could actually store an array of unformatted memory allocated by the OpenGL context. Among all Buffer Objects, for the our particular case the Vertex Buffer Object should be used at first to transfer the surface representation data.
+
+\begin{figure}
+ \centering
+ \includegraphics[width=.99\linewidth]{gl-cl-interop}
+ %\includegraphics{gl-cl-interop}
+ \caption{OpenGL/OpenCL interoperability pipeline.\label{fig:gl-cl-interop}}
+\end{figure}
+
+Due to the fact that graphics unit could proceed with the single context at once, we will need to manage them manually by alternating them upon request. Following this way we should be able to build a pipeline as it presented in fig.~\ref{fig:gl-cl-interop}. Here, both contexts controlled by the main process are basically performing eight main steps to achieve the goal:
+
+\begin{enumerate}
+ \item First, check whether the \texttt{cl\_khr\_gl\_sharing} is supported by the target GPGPU.
+ \item If the previous step succeeds, initialise both compute and graphics contexts.
+ \item Next, the shared object is created by OpenGL. It will be used later on to pass the data back to graphics context.
+ \item Then, the control passes to the OpenCL context and the object is registered here for the sharing.
+ \item Apply a lock for the memory area acquired by the object.
+ \item Perform all required computations and write the results to the shared memory.
+ \item Release the lock and pass control to the graphics API.
+ \item Finally, process and draw geometry.
+\end{enumerate}
+
+\section{Standing sea waves simulation model}
+
+%\subsection{Introduction}
+
+Our approach to sea waves simulation is based on the autoregressive model---moving average (ARMA) model of sea waves~\cite{degtyarev2011modelling,degtyarev2013synoptic}. This model was developed as an superior alternative to existing linear Longuet---Higgins model. The new model simulates sea waves without assumptions of linear and small amplitude wave theories, i.e.
+\begin{itemize}
+ \item the model generates waves of arbitrary amplitudes,
+ \item period of wavy surface realisation equals the period of pseudo-random number generator (PRNG) and
+ \item it requires less number of coefficients to converge compared to Longuet---Higgins model.
+\end{itemize}
+This model allows to generate both propagating and standing sea waves via moving average and autoregressive process respectively, but for the purpose of this paper we narrow the discussion to standing waves and autoregressive (AR) process only.
+
+One implication of turning down the assumptions of linear wave theory is that it is not possible to use linear velocity potential field computation formulae for the new wavy surface, as they were derived under the same assumptions. As a result, the new analytic formula was derived, that determines velocity potential field under arbitrary wavy sea surface. This formula is particularly suitable for computation on GPUs:
+\begin{itemize}
+ \item it contains transcendental mathematical functions (hyperbolic cosines and complex exponents);
+ \item it is computed over large four-dimensional ($t$, $x$, $y$, $z$) region;
+ \item it is analytic with no information dependencies between individual data points in $t$ and $z$ dimensions.
+\end{itemize}
+Moreover, for the purpose of the verification of the resulting wavy surface, it is imperative to visualise the surface and velocity potential velocity field in real-time as the computation progresses. Performing two simulations at a time with different velocity potential field formulae allows to spot the difference in computed fields, and to visually compare the size and the shape of regions where the most wave energy is concentrated.
+
+Within the framework of autoregressive model for standing waves we investigate how GPGPU computations can be used to speed-up velocity potential field computation and make real-time visualisation of the surface as computation proceeds.
+
+\subsection{Governing equations for 3-dimensional AR process}
+
+Three-dimensional autoregressive process is defined by
+\begin{equation*}
+ \zeta_{i,j,k} =
+ \sum\limits_{l=0}^{p_1}
+ \sum\limits_{m=0}^{p_2}
+ \sum\limits_{n=0}^{p_3}
+ \Phi_{l,m,n} \zeta_{i-l,j-m,k-n}
+ \epsilon_{i,j,k}
+ ,
+ \label{eq:arma-process}
+\end{equation*}
+where $\zeta$ --- wave elevation, $\Phi$ --- AR coefficients, $\epsilon$ --- white noise with Gaussian distribution,
+$(p_1,p_2,p_3)$ --- AR process order, and
+$\Phi_{0,0,0} \equiv 0$. The input parameters are
+AR process coefficients and order.
+
+The coefficients $\Phi$ are calculated from ACF via
+three-dimensional Yule---Walker equations:
+\begin{equation*}
+ \Gamma
+ \left[
+ \begin{array}{l}
+ \Phi_{0,0,0}\\
+ \Phi_{0,0,1}\\
+ \vdotswithin{\Phi_{0,0,0}}\\
+ \Phi_{p_1,p_2,p_3}
+ \end{array}
+ \right]
+ =
+ \left[
+ \begin{array}{l}
+ K_{0,0,0}-\Var{\epsilon}\\
+ K_{0,0,1}\\
+ \vdotswithin{K_{0,0,0}}\\
+ K_{p_1,p_2,p_3}
+ \end{array}
+ \right],
+ \qquad
+ \Gamma=
+ \left[
+ \begin{array}{llll}
+ \Gamma_0 & \Gamma_1 & \cdots & \Gamma_{p_1} \\
+ \Gamma_1 & \Gamma_0 & \ddots & \vdotswithin{\Gamma_0} \\
+ \vdotswithin{\Gamma_0} & \ddots & \ddots & \Gamma_1 \\
+ \Gamma_{p_1} & \cdots & \Gamma_1 & \Gamma_0
+ \end{array}
+ \right],
+\end{equation*}
+where $\vec N = \left( p_1, p_2, p_3 \right)$, $\Var{\epsilon}$ --- white noise
+variance, and
+\begin{equation*}
+ \Gamma_i =
+ \left[
+ \begin{array}{llll}
+ \Gamma^0_i & \Gamma^1_i & \cdots & \Gamma^{p_2}_i \\
+ \Gamma^1_i & \Gamma^0_i & \ddots & \vdotswithin{\Gamma^0_i} \\
+ \vdotswithin{\Gamma^0_i} & \ddots & \ddots & \Gamma^1_i \\
+ \Gamma^{p_2}_i & \cdots & \Gamma^1_i & \Gamma^0_i
+ \end{array}
+ \right]
+ \qquad
+ \Gamma_i^j=
+ \left[
+ \begin{array}{llll}
+ K_{i,j,0} & K_{i,j,1} & \cdots & K_{i,j,p_3} \\
+ K_{i,j,1} & K_{i,j,0} & \ddots &x \vdotswithin{K_{i,j,0}} \\
+ \vdotswithin{K_{i,j,0}} & \ddots & \ddots & K_{i,j,1} \\
+ K_{i,j,p_3} & \cdots & K_{i,j,1} & K_{i,j,0}
+ \end{array}
+ \right],
+\end{equation*}
+Since $\Phi_{0,0,0}\equiv0$, the first row and column of $\Gamma$ can be
+eliminated. Matrix $\Gamma$ is block-toeplitz, positive definite and symmetric,
+hence the system is solved by Cholesky decomposition. White noise variance is
+estimated by
+\begin{equation*}
+ \Var{\epsilon} =
+ K_{0,0,0}
+ -
+ \sum\limits_{i=0}^{p_1}
+ \sum\limits_{i=0}^{p_2}
+ \sum\limits_{k=0}^{p_3}
+ \Phi_{i,j,k} K_{i,j,k}.
+\end{equation*}
+
+\subsection{Three-dimensional velocity potential field}
+
+The problem of finding pressure field under wavy sea surface represents inverse
+problem of hydrodynamics for incompressible inviscid fluid. System of equations
+for it in general case is written as~\cite{kochin1966theoretical}
+\begin{align}
+ & \nabla^2\phi = 0,\nonumber\\
+ & \phi_t+\frac{1}{2} |\vec{\upsilon}|^2 + g\zeta=-\frac{p}{\rho}, & \text{на }z=\zeta(x,y,t),\label{eq-problem}\\
+ & D\zeta = \nabla \phi \cdot \vec{n}, & \text{на }z=\zeta(x,y,t),\nonumber
+\end{align}
+where \(\phi\)~--- velocity potential, \(\zeta\)~--- elevation (\(z\) coordinate)
+of wavy surface, \(p\)~--- wave pressure, \(\rho\)~--- fluid density,
+\(\vec{\upsilon}=(\phi_x,\phi_y,\phi_z)\)~--- velocity vector, \(g\)~---
+acceleration of gravity, and \(D\)~--- substantial (Lagrange) derivative. The
+first equation is called continuity (Laplace) equation, the second one is the
+conservation of momentum law (the so called dynamic boundary condition); the
+third one is kinematic boundary condition for free wavy surface, which states
+that rate of change of wavy surface elevation (\(D\zeta\)) equals to the change of
+velocity potential derivative along the wavy surface normal
+(\(\nabla\phi\cdot\vec{n}\)).
+
+Inverse problem of hydrodynamics consists in solving this system of equations
+for \(\phi\). In this formulation dynamic boundary condition becomes explicit
+formula to determine pressure field using velocity potential derivatives
+obtained from the remaining equations. So, from mathematical point of view
+inverse problem of hydrodynamics reduces to Laplace equation with mixed boundary
+condition~--- Robin problem.
+
+Three-dimensional version of~\eqref{eq-problem} is written as
+\begin{align*}
+ \label{eq-problem-3d}
+ & \phi_{xx} + \phi_{yy} + \phi_{zz} = 0,\\
+ & \zeta_t + \zeta_x\phi_x + \zeta_y\phi_y
+ =
+ \frac{\zeta_x}{\SqrtZeta{1 + \zeta_x^2 + \zeta_y^2}} \phi_x
+ +\frac{\zeta_y}{\SqrtZeta{1 + \zeta_x^2 + \zeta_y^2}} \phi_y
+ - \phi_z, & \text{на }z=\zeta(x,y,t).\nonumber
+\end{align*}
+Using Fourier method with some assumptions the equation is solved yielding formula for
+\(\phi\):
+\begin{equation}
+ \label{eq:phi-high-amp}
+ \phi(x,y,z,t) = \InverseFourierY{
+ \frac{ \Sinh{\smash{2\pi \Kveclen (z+h)}} }
+ { 2\pi\Kveclen \Sinh{\smash{2\pi \Kveclen h}} }
+ \FourierY{ \frac{ \zeta_t }{ \left( i f_1(x,y) + i f_2(x,y) - 1 \right) } }{u,v}
+ }{x,y},
+\end{equation}
+where \(f_1(x,y)={\zeta_x}/{\SqrtZeta{1+\zeta_x^2+\zeta_y^2}}-\zeta_x\) and
+\(f_2(x,y)={\zeta_y}/{\SqrtZeta{1+\zeta_x^2+\zeta_y^2}}-\zeta_y\).
+
+
+\subsection{Architecture}
+
+Incorporation of OpenCL version of velocity potential solver into the existing source code reduced to an addition of two subclasses (fig.~\ref{fig:classes}):
+\begin{itemize}[leftmargin=4cm]
+ \item[\texttt{Realtime\_solver}] a subclass of abstract solver that implements computation of velocity potential field on GPU, and
+ \item[\texttt{ARMA\_realtime\_driver}] a subclass of control flow object~--- an object that defines the sequence of calls to subroutines~--- that implements real-time visualisation and stores OpenGL buffer objects that are shared with the solver. These objects are shared with the solver only if the solver is real-time.
+\end{itemize}
+The algorithm for computation and visualisation pipeline is presented in alg.\ref{alg:pipeline}.
+
+\begin{algorithm}
+ Initialise shared OpenCL/OpenGL context.\\
+ Generate the first wavy surface realisation time slice.\\
+ Compute corresponding velocity potential field.\\
+ \While{not exited}{
+ Visualise the current slice of wavy surface and velocity field.\\
+ Asynchronously compute next wavy surface time slice.\\
+ Compute its velocity potential field.
+ }
+ \caption{Main loop of computation and visualisation pipeline.\label{alg:pipeline}}
+\end{algorithm}
+
+
+\begin{figure}
+ \centering
+ \includegraphics[width=9cm]{classes}
+ \caption{Classes which implement OpenCL/OpenGL interoperability in the simulation code.\label{fig:classes}}
+\end{figure}
+
+\section{Evaluation}
+
+For the purpose of evaluation we use simplified version of \eqref{eq:phi-high-amp}:
+\begin{align}
+ \label{eq:phi-linear}
+ \phi(x,y,z,t) &= \InverseFourierY{
+ \frac{ \Sinh{\smash{2\pi \Kveclen (z+h)}} }
+ { 2\pi\Kveclen \Sinh{\smash{2\pi \Kveclen h}} }
+ \FourierY{ \zeta_t }{u,v}
+ }{x,y}\nonumber \\
+ &= \InverseFourierY{ g_1(u,v) \FourierY{ g_2(x,y) }{u,v} }{x,y}.
+\end{align}
+Since standing sea wave generator does not allow efficient GPU implementation due to autoregressive dependencies between wavy surface points, only velocity potential solver was rewritten in OpenCL and its performance was compared to existing OpenMP implementation.
+
+For each implementation the overall performance of the solver for a particular time instant was measured. Velocity field was computed for one $t$ point, for 128 $z$ points below wavy surface and for each $x$ and $y$ point of four-dimensional $(t,x,y,z)$ grid. The only parameter that was varied between subsequent programme runs is the size of the grid along $x$ dimension. A total of 10 runs were performed and average time of each stage was computed.
+
+A different FFT library was used for each version of the solver. For OpenMP version FFT routines from GNU Scientific Library (GSL)~\cite{galassi2015gnu} were used, and for OpenCL version clFFT library~\cite{clfft} was used instead. There are two major differences in the routines from these libraries.
+\begin{enumerate}
+
+ \item The order of frequencies in Fourier transforms is different and clFFT library requires reordering the result of~\eqref{eq:phi-linear} whereas GSL does not.
+
+ \item Discontinuity at $(x,y) = (0,0)$ of velocity potential field grid is handled automatically by clFFT library, whereas GSL library produce skewed values at this point.
+
+\end{enumerate}
+For GSL library an additional interpolation from neighbouring points was used to smooth velocity potential field at these points. We have not spotted other differences in FFT implementations that have impact on the overall performance.
+
+In the course of the numerical experiments we have measured how much time each solver's implementation spends in each computation stage to explain find out how efficient data copying between host and device is in OpenCL implementation, and how one implementation corresponds to the other in terms of performance.
+
+\section{Results}
+
+The experiments showed that GPU implementation outperforms CPU implementation by a factor of 10--15 (fig.~\ref{fig:bench-cpu-gpu}), however, distribution of time between computation stages is different for each implementation (fig.~\ref{fig:breakdown-cpu-gpu}). The major time consumer in CPU implementation is computation of $g_1$, whereas in GPU implementation its running time is comparable to computation of $g_2$. GPU computes $g_1$ much faster than CPU due to a large amount of modules for transcendental mathematical function computation. In both implementations $g_2$ is computed on CPU, but for GPU implementation the result is duplicated for each $z$ grid point in order to perform multiplication of all $XYZ$ planes along $z$ dimension in single OpenCL kernel, and, subsequently copied to GPU memory which severely hinders overall stage performance. Copying the resulting velocity potential field between CPU and GPU consumes $\approx{}20\%$ of velocity potential solver execution time.
+
+\begin{figure}
+ \centering
+ \includegraphics{bench-cpu-gpu}
+ \caption{Performance comparison of CPU (OpenMP) and GPU (OpenCL) versions of velocity potential solver.\label{fig:bench-cpu-gpu}}
+\end{figure}
+
+
+\begin{figure}
+ \centering
+ \includegraphics{breakdown-cpu-gpu}
+ \caption{Performance breakdown for GPU (OpenCL) and CPU (OpenMP) versions of velocity potential solver.\label{fig:breakdown-cpu-gpu}}
+\end{figure}
+
+\section{Discussion and future work}
+
+Simplified velocity potential formula~\eqref{eq:phi-linear} lacks $f_{1,2}$ functions which contain spatial derivatives of wavy surface $\zeta$ which are inefficient to compute on GPU. The remaining derivative $\zeta_t$ is also computed on CPU for the sake of efficiency. The future work is to find high-performance algorithm for multidimensional derivative computation on GPUs.
+
+OpenGL is still a single-thread library and in most cases of graphics applications only one thread manages the access to the GL context. This could lead to the performance drops, thread interoperability issues and complicated application architecture. Some workarounds could be found yet, like launching multiple processes and switching contexts between them, but it is not solving the problems mentioned about really. Thus, there are some premises exist, which are making sense to investigate on the similar result achievement with the newer APIs, such as a Vulkan and DirectX 12.
+
+Relatively the same statement could be made about the OpenCL toolkit. Despite the fact that general GPGPU computing interface allowed us to achieve some improvements through the waveform computation acceleration and and made a cross-platform execution possible, it still has some disadvantages. E.g., each core should be manually cached after the compilation, which is exactly proceeded over execution time. Moreover, it could happen that other compute APIs could show even better performance rates.
+
+We can also consider experimenting with dual chip GPU boards. The main idea here is to provide for both computing and rendering contexts an exclusive right to use their own dedicated GPU core in every moment of time. This improvement can help for the cases where intensive rendering routines are expected to be applied for the data obtained during the computations. In that way we will not lose the performance and, probably, will achieve even better results.
+
+And the most interesting question here is what should be done when the computing capabilities of the single node will be reached, or simply how do we scale. The part of application connected with direct computations could be handled in a common way by the one of MPI implementations. This method is compatible for both CUDA and CPU driven processes. Some concerns could appear at the stage of visualisation scaling.
+
+The first and simplest way to achieve the desired result is to accumulate data from the nodes after each computation round on the master node to join results and visualise them on it. But if we will make it like this we will lose the benefits of using a shared buffer for OpenCL and OpenGL. In addition, as the number of nodes will increase the bandwidth requirements of the channel will grow too, and in the end we will rest against its limitations.
+
+The second possible method of achieving the result is similar to the first one and has the same problems, but involves the usage of GPUDirect or DirectGMA technology for graphics cards depends on their vendor. The only difference here is that the exchange of data between nodes will be based on peer-to-peer protocol under CUDA context. It means that GPU will receive messages directly.
+
+The last possible way to solve this problem is to use distributed rendering techniques. It is based basically on combination of load distribution and objects or images composition algorithms, where three main ones can be distinguished: sort-first, sort-middle and sort-last~\cite{molnar:sorting}.
+
+\begin{figure}
+ \centering
+ \includegraphics[width=.9\linewidth]{sort-first}
+ \caption{Sort-first image compositing.\label{fig:sort-first}}
+\end{figure}
+
+Sort-first (fig.~\ref{fig:sort-first}) assumes that the scene should be divided into a number of zones, each processed on its own hardware. In fact, several cameras/viewports are created in the OpenGL context on different nodes, and then resulting frame buffers are simply merged into a single final frame. Two main problems that could be met here, but can be solved in some way, are artefacts at the joints of frame parts when using lossy compression and desynchronization of frame pieces when there is some motion on the scene.
+
+\begin{figure}
+ \centering
+ \includegraphics[width=.9\linewidth]{sort-middle}
+ \caption{Sort-middle image compositing.\label{fig:sort-middle}}
+\end{figure}
+
+Sort-middle (fig.~\ref{fig:sort-middle}) is not widely used in real time applications, due to the fact that it takes an extra time to produce and brings network overheads, but it is the most effective one. First, each node calculates geometry, and then workload is getting redistributed equally among all computing devices.
+
+Both methods described above do not really suit us well, since each of the nodes will process either a single frame, or a part of the total surface, and we will not involve a viewport in a such way, at least for now.
+
+\begin{figure}
+ \centering
+ \includegraphics[width=.9\linewidth]{sort-last}
+ \caption{Sort-last image compositing.\label{fig:sort-last}}
+\end{figure}
+
+Actually, we are interested in the sort-last method (fig.~\ref{fig:sort-last}) most of all. Unlike the previous two, the load distribution here is performed based on the 3D objects grouping and segmentation. Later on, alpha blending of rendered objects is performed to retain the resulting frame. This way may not be optimal in some cases, since nodes will have to render parts of objects that will be overlapped at the compositing stage, but still it allows to achieve the desired result.
+
+We can even make some optimisation steps here. For example, to reduce the load on the network channel, we can use an $N$-ary compositing. In other words, instead of joining all objects on the only node, we can exchange objects between N nodes first and connect them. For example, it can be done on the principle of a binary tree. We can also use various compression algorithms, which show the greatest performance for colour and numeric data.
+
+
diff --git a/src/head.tex b/src/head.tex
@@ -0,0 +1,31 @@
+\section{Introduction}
+
+In most cases, visualisation of scientific data obtained during simulation or computation process is carried out separately, after all the stages of calculation are completed. This fact is connected with a rather large number of factors: computation process could be executed with CPU-only nodes (however, this should not be considered as a problem since the Mesa 3D graphics library exists); the goal to complete a task as fast as possible could have greater priority, thus, all available resources would be used for this; data could be just difficult to process and synchronise during in runtime, if such a scenario was not assumed by the software solution.
+
+However, on the other hand, during the computation process, especially the long one, there is a need to monitor for performed operations and obtained results. In the case where such a control is possible the calculations could be suspended and the necessary tweaks made with a timely response. This kind of action may also be needed while debugging the program or testing a new mathematical model. Thus, in this article we will consider the possibility of interactive control organisation for calculations with a terms of visualisation, which will be performed using the OpenGL API.
+
+Another possible scenario of this approach is an interaction with simulated objects and processes in real-time. So, you can change the initial conditions, add new environmental parameters and observe the system's response immediately from the moment of the effect's influence beginning to its end. In the framework of ocean wave simulation this has educational value, as the effect of every change in the input parameter is immediately visible. In addition to this, instantaneous visualisation of ocean wavy surface brings simulation to a new level, where dynamically changing parameters to arbitrary values within predefined ranges allows to visually verify the model and its numerical code.
+
+For the experiment we have chosen an autoregressive model of standing waves within framework of which we have accelerated velocity potential field computation with the usage of GPGPU technology through the OpenCL framework. Since, data structures that are needed for visualisation are already stored in GPU memory, we take into account that fact and remove unnecessary copying between host and device using OpenGL/OpenCL interoperability API.
+
+\section{Related work}
+
+The idea of mixing various computing APIs is not a fresh one, also including for OpenGL/OpenCL interoperability. Nvidia has announced the support for this technology in the 2011, and since then we have been able to observe the related solutions appeared on the market.
+
+The idea of compute API usage was widely spread and adopted by entertainment industry, especially in game development sphere. Ever since the popularisation of the PhysX engine, which uses the capabilities of graphics cards to simulate a certain set of physical phenomena, it was clear that such a technology will find a place to be applied in the future \cite{geer:vut}. So, for today, almost all heavy dynamic particle systems you can met are using one of the general compute APIs \cite{unity:compute}.
+
+Another area of general usage where this technology was introduced is a computer vision. Industry standard library OpenCV has a special OCL module originally provided by AMD, which enables the acceleration for various algorithms, including ones for matrix transformations, image filtering and processing, object detection and many more~\cite{opencv:opencl}.
+
+However, the situation with scientific calculation is absolutely different. Unlike the entertainment software where the vast of the scene contents in most cases are generated in advance and the number of processes is strictly limited to ones affecting the environment at the current moment, for the scientific simulations almost everything should be calculated from scratch based only on given initial conditions, including the geometry (if it is meant by the process), the particle system, visual effects, etc. In addition, simulations by themselves are much more complicated, and the optimisation for dynamically forming geometric structures is quite difficult to perform.
+
+There is a way to achieve more efficient usage of resources while performing the visualisation of the computational experiment results, which are involving GPGPU to speed up the computation, and it is directly related to the accelerator exploitation. Thus, when graphics cards are used to compute, it is obvious that the data is already allocated on its memory. So, if there is a way to transform the data to the format that can be used by the graphic API, and also the way to transfer it between the compute and graphics contexts, then we will not have to copy it from the memory of GPU to the RAM and vice versa. Thus, the usage of OpenCL, CUDA, or any other compute API can boost the performance not only for the calculations themselves, but also for the results rendering. Thus, we have reviewed several papers which are referring to the stated problem to get a glance whether this approach could be used for the optimisation in our case.
+
+One of the most interesting cases was shown by the research group from Boston Northeastern University \cite{ukidave:2014:PEO}. The OpenCL/OpenGL interoperability was applied to five completely different applications related to the different study areas. For example, one of them is a Material Fault Detection program used for fault detection using wave propagation in anisotropic materials, which produces material layer surfaces. They have used a slot-based rendering technique, which means that data is precomputed for several frames in advance before passing it to the rendering context. As a result, they have been able to obtain 2.2 more frames in average with discrete AMD GPUs Radeon 7770 and Radeon 7970 and 1.9 more with AMD Fusion A8 APU.
+
+As for the image processing, we can refer to~\cite{liao:2012:GPC}, where the interop technique is used for panorama video image stitching. According to the provided metrics the best result is achieved with involving two buffers for both OpenCL computations and OpenGL rendering, and it is 12 times faster compared to the original CPU based solution. The paper is also showing that the proposed solution is scaled really well when the additional image capturing devices are attached to the system. We should also notice an another closely related case presented by Samsung at SIGGRAPH'13, which talks in general about real time video stream processing on mobile platforms captured by camera module with the usage of OpenCL and OpenGL ES interoperability~\cite{bucur:2013:OOE}.
+
+All the examples of GPGPU API interoperability mentioned above are proving that the proposed approach could be applied for the various set of problems to achieve the significant results in optimisation of calculations and visualisation itself. However, it should be said that the following solutions has been applied for the particular cases and not showing any general solution, which could be treated as a specificity of the interoperability method. During the study we will try to point out the major improvements made by research groups to complete our solution in a most optimal way.
+
+%\cite{michal:2011:OOA}
+%\cite{moulik:2011:RGC}
+
diff --git a/src/refs.bib b/src/refs.bib
@@ -0,0 +1,170 @@
+@Book{ kochin1966theoretical,
+ title = {Theoretical hydrodynamics [in Russian]},
+ author = {Kochin, N. and Kibel, I. and Roze, N.},
+ pages = {237},
+ year = {1966},
+ publisher = {FizMatLit}
+}
+
+@inproceedings{bucur:2013:OOE,
+ author = {Bucur, Adrian},
+ title = {{OpenCL} -- {OpenGL} {ES} Interop: Processing Live Video Streams on a Mobile Device -- Case Study},
+ booktitle = {ACM SIGGRAPH 2013 Mobile},
+ series = {SIGGRAPH'13},
+ year = {2013},
+ isbn = {978-1-4503-2341-3},
+ location = {Anaheim, California},
+ pages = {15},
+ url = {http://doi.acm.org/10.1145/2503512.2503532},
+ doi = {10.1145/2503512.2503532},
+ acmid = {2503532},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+}
+
+@inproceedings{ukidave:2014:PEO,
+ author = {Ukidave, Yash and Gong, Xiang and Kaeli, David},
+ title = {Performance Evaluation and Optimization Mechanisms for Inter-operable Graphics and Computation on GPUs},
+ booktitle = {Proceedings of Workshop on General Purpose Processing Using GPUs},
+ series = {GPGPU-7},
+ year = {2014},
+ isbn = {978-1-4503-2766-4},
+ location = {Salt Lake City, UT, USA},
+ pages = {37--45},
+ url = {http://doi.acm.org/10.1145/2576779.2576784},
+ doi = {10.1145/2576779.2576784},
+ acmid = {2576784},
+ publisher = {ACM},
+ address = {New York, NY, USA},
+ keywords = {GPGPU, Heterogeneous computing, Interoperability, OpenCL, OpenGL},
+}
+
+@INPROCEEDINGS{liao:2012:GPC,
+ author={W. S. Liao and T. J. Hsieh and Y. L. Chang},
+ booktitle={2012 IEEE 18th International Conference on Parallel and Distributed Systems},
+ title={GPU Parallel Computing of Spherical Panorama Video Stitching},
+ year={2012},
+ pages={890--895},
+ doi={10.1109/ICPADS.2012.146},
+ ISSN={1521-9097},
+ month={Dec}
+}
+
+@inproceedings{moulik:2011:RGC,
+ author = {Moulik, S. and Boonn, W.},
+ title = {The role of {GPU} computing in medical image analysis and visualization},
+ booktitle={SPIE Medical Imaging},
+ volume = {7967},
+ organization={International Society for Optics and Photonics},
+ pages = {1--8},
+ year = {2011},
+ doi = {10.1117/12.880093},
+ URL = {http://dx.doi.org/10.1117/12.880093}
+}
+
+@misc{michal:2011:OOA,
+ Author = {Micha\l \.{Z}abicki},
+ Title = {{OpenCL}/{OpenGL} approach for studying active {Brownian} motion},
+ Year = {2011},
+ Eprint = {arXiv:1104.2499},
+}
+
+@CONFERENCE{bogdanov:2016:CDR,
+ author={Bogdanova, A.V. and Ivashchenko, A.I. and Belezeko, A.I.},
+ title={Creating distributed rendering applications},
+ booktitle={CEUR Workshop Proceedings},
+ year={2016},
+ volume={1787},
+ pages={130--134},
+ url={http://ceur-ws.org/Vol-1787/130-134-paper-21.pdf},
+}
+
+
+
+
+@article{opencv:opencl,
+ title = {The OpenCV Library},
+ author = {Gary Bradsky},
+ journal = {Dr. Dobb's Journal of Software Tools},
+ year = {2000}
+}
+
+
+@book{galassi2015gnu,
+ author = {Galassi, M and Davies, J and Theiler, J and Gough, B and Jungman, G and Alken, P and Booth, M and Rossi, F and Ulerich, R},
+ title = {GNU Scientific Library Reference Manual},
+ year = {2009},
+ isbn = {0954612078, 9780954612078},
+ edition = {3},
+ publisher = {Network Theory Ltd.},
+ note = {Eds. Brian Gough}
+}
+
+@misc{clfft,
+ author = {{clFFT developers}},
+ title = {{clFFT: OpenCL Fast Fourier Transforms (FFTs)}},
+ howpublished = {\url{https://clmathlibraries.github.io/clFFT/}}
+}
+
+@misc{unity:compute,
+ author = {{Unity Technologies}},
+ title = {{Unity - Manual: Compute Shaders}},
+ howpublished = {\url{https://docs.unity3d.com/Manual/ComputeShaders.html}}
+}
+
+@ARTICLE{geer:vut,
+author={D. Geer},
+journal={Computer},
+title={Vendors Upgrade Their Physics Processing to Improve Gaming},
+year={2006},
+volume={39},
+number={8},
+pages={22-24},
+keywords={computer games;computer graphic equipment;parallel processing;physics computing;rendering (computer graphics);ATI GPU;Havok FX physics engine;add-in card;computer games;graphics-engine vendors;graphics-processing units;graphics-processing-engine software;parallel pixel-processing;physics processing unit;Bandwidth;Displays;Engines;Equations;Graphics;Manufacturing;Parallel processing;Physics;Rendering (computer graphics);Shape;game design and development;graphics engines},
+doi={10.1109/MC.2006.284},
+ISSN={0018-9162},
+month={Aug},}
+
+@article{objects2013opencl,
+ title={OpenCL API Reference},
+ author={Khronos Group},
+ year={2013}
+}
+
+@book{opengl:orm,
+ Author = {OpenGL Architecture Review Board},
+ Title = {Opengl Reference Manual: The Official Reference Document for Opengl, Release 1 (OTL)},
+ Publisher = {Addison-Wesley (C)},
+ Year = {1993},
+ ISBN = {0201632764}
+}
+
+@article{molnar:sorting,
+ title={A sorting classification of parallel rendering},
+ author={Molnar, Steven and Cox, Michael and Ellsworth, David and Fuchs, Henry},
+ journal={IEEE computer graphics and applications},
+ volume={14},
+ number={4},
+ pages={23--32},
+ year={1994},
+ publisher={IEEE}
+}
+
+
+@inproceedings{degtyarev2011modelling,
+ title={Modelling of incident waves near the ship’s hull (application of autoregressive approach in problems of simulation of rough seas)},
+ author={Degtyarev, AB and Reed, AM},
+ booktitle={Proceedings of the 12th International Ship Stability Workshop},
+ year={2011}
+}
+
+@article{degtyarev2013synoptic,
+ title={Synoptic and short-term modeling of ocean waves},
+ author={Degtyarev, Alexander B and Reed, Arthur M},
+ journal={International Shipbuilding Progress},
+ volume={60},
+ number={1-4},
+ pages={523--553},
+ year={2013},
+ publisher={IOS Press}
+}
diff --git a/src/tail.tex b/src/tail.tex
@@ -0,0 +1,12 @@
+\section{Conclusion}
+
+As a result of the investigation, we managed to achieve positive outcome in computation acceleration and its visualisation using interaction mechanisms between the graphics and compute contexts. The joint use of OpenGL and OpenCL allowed us to simultaneously use the shared areas of dedicated GPU memory for calculation and rendering, thereby saving us some time required to copy the data for RAM to the video card memory. Visualisation of real-time calculation results allowed to perform fine-grained control for the process showing us new opportunities for simulation with variable conditions.
+
+Proposed solution could be applied not only for the ocean wavy surface simulation, but for any other iterative computations, which are producing a sane amount of data. For example, we can reuse the result in a similar manner for the costs prediction of monetary assets.
+
+We have also determined the list of possible tasks that could be performed in the future to improve the functionality of the software solution. One of the directions is to experiment on combining various graphics and computing APIs to identify the most optimal solution.
+
+\section*{Acknowledgements}
+
+Research was supported by grants of Russian Foundation
+for Basic Research (projects no. 16-07-01111, 16-07-00886, 16-07-01113).
diff --git a/subjidx.ind b/subjidx.ind
@@ -0,0 +1,70 @@
+% clmomu01.ind
+%-----------------------------------------------------------------------
+% CLMoMu01 1.0: LaTeX style files for books
+% Sample index file for User's guide
+% (c) Springer-Verlag HD
+%-----------------------------------------------------------------------
+\begin{theindex}
+\item Absorption\idxquad 327
+\item Absorption of radiation \idxquad 289--292,\, 299,\,300
+\item Actinides \idxquad 244
+\item Aharonov-Bohm effect\idxquad 142--146
+\item Angular momentum\idxquad 101--112
+\subitem algebraic treatment\idxquad 391--396
+\item Angular momentum addition\idxquad 185--193
+\item Angular momentum commutation relations\idxquad 101
+\item Angular momentum quantization\idxquad 9--10,\,104--106
+\item Angular momentum states\idxquad 107,\,321,\,391--396
+\item Antiquark\idxquad 83
+\item $\alpha$-rays\idxquad 101--103
+\item Atomic theory\idxquad 8--10,\,219--249,\,327
+\item Average value\newline ({\it see also\/} Expectation value)
+15--16,\,25,\,34,\,37,\,357
+\indexspace
+\item Baker-Hausdorff formula\idxquad 23
+\item Balmer formula\idxquad 8
+\item Balmer series\idxquad 125
+\item Baryon\idxquad 220,\,224
+\item Basis\idxquad 98
+\item Basis system\idxquad 164,\,376
+\item Bell inequality\idxquad 379--381,\,382
+\item Bessel functions\idxquad 201,\,313,\,337
+\subitem spherical\idxquad 304--306,\, 309,\, 313--314,\,322
+\item Bound state\idxquad 73--74,\,78--79,\,116--118,\,202,\, 267,\,
+273,\,306,\,348,\,351
+\item Boundary conditions\idxquad 59,\, 70
+\item Bra\idxquad 159
+\item Breit-Wigner formula\idxquad 80,\,84,\,332
+\item Brillouin-Wigner perturbation theory\idxquad 203
+\indexspace
+\item Cathode rays\idxquad 8
+\item Causality\idxquad 357--359
+\item Center-of-mass frame\idxquad 232,\,274,\,338
+\item Central potential\idxquad 113--135,\,303--314
+\item Centrifugal potential\idxquad 115--116,\,323
+\item Characteristic function\idxquad 33
+\item Clebsch-Gordan coefficients\idxquad 191--193
+\item Cold emission\idxquad 88
+\item Combination principle, Ritz's\idxquad 124
+\item Commutation relations\idxquad 27,\,44,\,353,\,391
+\item Commutator\idxquad 21--22,\,27,\,44,\,344
+\item Compatibility of measurements\idxquad 99
+\item Complete orthonormal set\idxquad 31,\,40,\,160,\,360
+\item Complete orthonormal system, {\it see}\newline
+Complete orthonormal set
+\item Complete set of observables, {\it see\/} Complete
+set of operators
+\indexspace
+\item Eigenfunction\idxquad 34,\,46,\,344--346
+\subitem radial\idxquad 321
+\subsubitem calculation\idxquad 322--324
+\item EPR argument\idxquad 377--378
+\item Exchange term\idxquad 228,\,231,\,237,\,241,\,268,\,272
+\indexspace
+\item $f$-sum rule\idxquad 302
+\item Fermi energy\idxquad 223
+\indexspace
+\item H$^+_2$ molecule\idxquad 26
+\item Half-life\idxquad 65
+\item Holzwarth energies\idxquad 68
+\end{theindex}