summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/asmeconf/examples/asmeconf-lualatex-ode-example.tex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/asmeconf/examples/asmeconf-lualatex-ode-example.tex')
-rw-r--r--macros/latex/contrib/asmeconf/examples/asmeconf-lualatex-ode-example.tex254
1 files changed, 254 insertions, 0 deletions
diff --git a/macros/latex/contrib/asmeconf/examples/asmeconf-lualatex-ode-example.tex b/macros/latex/contrib/asmeconf/examples/asmeconf-lualatex-ode-example.tex
new file mode 100644
index 0000000000..6db7d9c08a
--- /dev/null
+++ b/macros/latex/contrib/asmeconf/examples/asmeconf-lualatex-ode-example.tex
@@ -0,0 +1,254 @@
+% !TEX TS-program = LuaLaTeX
+% !TEX encoding = UTF-8 Unicode
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% This file is an example of using asmeconf with lualatex to solve and plot an ode in a landscape figure.
+%%
+%% Author: John H. Lienhard V
+%% Department of Mechanical Engineering
+%% Massachusetts Institute of Technology
+%% Cambridge, MA 02139-4307 USA
+%%
+ %=========================================================
+%%
+%% LICENSE:
+%%
+%% Copyright (c) 2021 John H. Lienhard
+%% Offered under the MIT license: https://ctan.org/license/mit
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\documentclass[varvw,colorlinks,nofoot]{asmeconf}
+
+\hypersetup{%
+ pdftitle={Example of asmconf with LuaLaTeX to solve an ODE},
+ pdfkeywords={asmeconf, LuaLaTeX, ODE, pgfplots, landscape figure},
+ pdfauthor={John H. Lienhard},
+}
+
+\usepackage[figuresright]{rotating}% to use a landscape figure
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Now use lua code
+
+%% Runge-Kutta for simple first-order ODE
+\begin{luacode*}
+-- Differential equation y’(t) = f(t,y)
+-- with f(t,y) = A * y * cos(t+sqrt(1+y)).
+-- Initial condition: y(0) = 1
+function f(t,y,A)
+ return A * y * math.cos(t+math.sqrt(1+y))
+end
+-- Code to write PGFplots data as coordinates
+function print_RKfour(tMax,npoints,A,option)
+ local t0 = 0.0
+ local y0 = 1.0
+ local A = A
+ local h = (tMax-t0)/(npoints-1)
+ local t = t0
+ local y = y0
+ if option~=[[]] then
+ tex.sprint("\\addplot["..option.."] coordinates{")
+ else
+ tex.sprint("\\addplot coordinates{")
+ end
+ tex.sprint("("..t0..","..y0..")")
+ for i=1, npoints do
+ k1 = h * f(t,y,A)
+ k2 = h * f(t+h/2,y+k1/2,A)
+ k3 = h * f(t+h/2,y+k2/2,A)
+ k4 = h * f(t+h,y+k3,A)
+ y = y + (k1+2*k2+2*k3+k4)/6
+ t = t + h
+ tex.sprint("("..t..","..y..")")
+ end
+ tex.sprint("}")
+end
+\end{luacode*}
+
+%% Define a latex macro to call the case to be plotted
+\newcommand\addLUADEDplot[4][]{%
+ \directlua{print_RKfour(#2,#3,#4,[[#1]])}%
+}
+% SYNTAX: Solution of the initial value problem
+% Code assumed t = 0 at start and y(0) = 1
+% #2 is the final time
+% #3 is the number of points
+% #4 is an amplitude parameter
+% #1 are options passed to the pgfplots \addplot function.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% For plotting the results, call pgfplots package
+
+\usepackage{pgfplots}% load AFTER xcolor, which was already called by asmeconf.cls
+\pgfplotsset{compat=newest}% to activate latest features
+
+\pgfplotsset{%
+ width=\textwidth,%
+ height=0.6\textwidth,%
+ /tikz/font={\sffamily},%
+ % every axis plot/.style={line width=2pt},
+ every axis/.append style={very thick},% see manual page 189
+ every minor tick/.append style={very thin,black},% modifies the style `every tick'
+ every minor grid/.append style={very thin, color=Snow4},
+ every major tick/.append style={thin, black},% modifies the style `every minor tick'
+ every major grid/.append style={thin, color=Snow4},
+ major tick length={1.2em},
+ minor tick length={0.5em},
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% This environment will generate the .bib file the first time you run the code
+% if the .bib file already exists, it will not be overwritten
+\begin{filecontents}{asmeconf-lualatex-ode-example.bib}
+@online{fairbairns,
+ author = {Robin Fairbairns and Sebastian Rahtz and Leonor Barroca},
+ title = {A Package for Rotated Objects in \LaTeX},
+ version = {2.16d},
+ organization = {Comprehensive \TeX\ Archive Network},
+ year = {2016},
+ url = {https://www.ctan.org/pkg/rotating},
+ urldate = {October 2, 2019},
+}
+@article{montijano2014,
+ title = {Numerical methods with {\LuaLaTeX}},
+ author = {Juan I. Montijano and Mario P{\'{e}}rez and Luis R{\'{a}}ndez and Juan Luis Varona},
+ year = 2014,
+ volume = 35,
+ month = {January},
+ number = 1,
+ pages = {51--56},
+ journal = {TUGboat},
+ url = {https://tug.org/TUGboat/tb35-1/tb109montijano.pdf},
+ note = {Open access.}
+}
+@manual{pgfplots,
+ title = {Manual for Package \textsc{PGFPLOTS}},
+ url = {https://ctan.org/pkg/pgfplots},
+ author = {Christian Feuers{\"{a}}nger},
+ version = {1.17},
+ year = {2020},
+ organization = {Comprehensive \TeX\ Archive Network},
+ month = feb,
+ urldate = {January 4, 2021},
+}
+@manual{lua,
+ author = {Roberto {l}erusalimschy and Luiz Henrique {de Figueiredo} and Waldemar Celes},
+ title = {{L}ua 5.3 Reference Manual},
+ url = {https://www.lua.org/manual/5.3/},
+ organization = {Pontifical Catholic University},
+ address = {Rio de Janeiro, Brazil},
+ year = {2017},
+}
+\end{filecontents}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{document}
+
+\ConfName{Proceedings of the \texttt{asmeconf} \linebreak International Examples Congress and Exposition}
+\ConfAcronym{AIECE21}
+\ConfDate{January 20, 2021}
+\ConfCity{Cambridge, MA}
+\PaperNo{AIECE2021-0001}
+
+\title{Example of \NoCaseChange{{\upshape\hologo{LuaLaTeX}}} with asmeconf.cls for ODE Integration}
+
+\SetAuthors{John H.\ Lienhard V\affil{1}\CorrespondingAuthor{lienhard@mit.edu}}
+\SetAffiliation{1}{Massachusetts Institute of Technology, Cambridge, MA}
+
+\maketitle
+
+\versionfootnote{Version~1.0, \today}
+
+\keywords{asmeconf, \hologo{LuaLaTeX}, ODE, pgfplots, landscape}
+
+%%%%%%%%% ABSTRACT %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{abstract}
+This paper is an example of using \texttt{asmeconf} with {\upshape\hologo{LuaLaTeX}} to solve an ODE initial value problem using a fourth-order Runge-Kutta method and to plot the result using \texttt{PGFPLOTS}. The use of a landscape figure is also illustrated. References are given for further reading.
+\end{abstract}
+
+%%%%%%%%% NOMENCLATURE (OPTIONAL) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\begin{nomenclature}
+\entry{$A$}{Constant parameter [--]}
+\entry{$t$}{Time [s]}
+\entry{$y(t)$}{Position [m]}
+\end{nomenclature}
+
+%%%%%%%%% BODY OF PAPER %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\section{Introduction}
+\hologo{LuaLaTeX} is built upon the Lua programming language~\cite{lua}. By directly using Lua code in a \LaTeX\ file, we can accomplish a wide range of tasks, as illustrated in the open-access paper by Montijano et al.~\cite{montijano2014}. In the present example, we follow Montijano et al.\ in solving a nonlinear first-order ordinary differential equation and plotting the result---all within a single \LaTeX\ file!
+
+\section{Solution to an initial value problem}
+We consider an initial value problem like that of Montijano et al.:
+\begin{equation}\label{eqn:1}
+y'(t) = A\cdot y(t) \cos\Big(t + \sqrt{1 + y(t)}\,\Big) \text{ with }y(0)=1
+\end{equation}
+Here, $A$ is a constant. We may adopt a fourth-order Runge-Kutta algorithm for the integration, which we shall perform to $t = 30$~s using a 400 point discretization. The details of the Runge-Kutta algorithm and a listing of the code are given in Montijano et al. (You can also read the code in the present \texttt{.tex} file.)
+
+The algorithm is implemented directly in the preamble of this file, and the results are plotted in Fig.~\ref{fig:1} for $A = \{0.25, 0.5, 0.75, 1.0\}$. Plotting is done using the \texttt{PGFPLOTS} package~\cite{pgfplots}.
+
+Landscape figures, such as Fig.~\ref{fig:1}, may be produced at full-page size by putting \verb|\usepackage[figuresright]{rotating}| in your \texttt{.tex} file's preamble and using the \texttt{sidewaysfigure*} environment~\cite{fairbairns}.
+
+\begin{sidewaysfigure*}
+\begin{tikzpicture}
+\begin{axis}[%
+ xmin=0.,
+ xmax=30.,
+ ymin=0.0,
+ ymax=1.1,
+ xtick={0,5,...,30},
+ ytick={0,0.2,...,1.0},
+ minor x tick num=4,
+ minor y tick num=3,
+ xlabel={Time, $\mathsf{t}$ [s]},
+ ylabel={Position, $\mathsf{y}$ [m]},
+ xticklabel={$\mathsf{\pgfmathprintnumber{\tick}}$},
+ yticklabel={$\mathsf{\pgfmathprintnumber{\tick}}$},
+ legend style={
+ at={(0.7,0.85)},
+ anchor=west,
+ fill=none,
+ cells={anchor=west},
+ },
+ ]
+% tMax = 30, npoints = 400, A is the last argument
+\addLUADEDplot[color=Purple4,densely dashed,,very thick]{30}{400}{0.25};% color names are from xcolor package
+ \addlegendentry[fill=white]{$\mathsf{A = 0.25}$};
+\addLUADEDplot[color=Chartreuse4,dashdotted,very thick]{30}{400}{0.5};
+ \addlegendentry[fill=white]{$\mathsf{A = 0.5}$};
+\addLUADEDplot[color=Red3,densely dotted,very thick]{30}{400}{0.75};
+ \addlegendentry[fill=white]{$\mathsf{A = 0.75}$};
+\addLUADEDplot[color=Blue3,smooth,very thick]{30}{400}{1};
+ \addlegendentry[fill=white]{$\mathsf{A = 1}$};
+\end{axis}
+\end{tikzpicture}
+\caption{A trial of pgfplot with Luacode Runge-Kutta integration\label{fig:1}}
+\end{sidewaysfigure*}
+
+
+%%% CONCLUSIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\section{Conclusion}
+\hologo{LuaLaTeX} enables numerical computations within a \LaTeX\ environment. By combining this capability with
+\texttt{PGFPlots}, the need for separate numerical and/or graphics packages can be reduced.
+
+%%% ACKNOWLEDGMENTS %%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\section*{Acknowledgments}
+The example shown in this paper is directly based on an example given by Montijano et al.~\cite{montijano2014}. Additional examples, such as the
+Lorenz attractor, are contained in that paper.
+
+
+%%% REFERENCES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\bibliographystyle{asmeconf}%% .bst file following ASME conference format. Do not change.
+\bibliography{asmeconf-lualatex-ode-example}%% this bib file will be generated from the filecontents environment upon first run of this .tex file.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\end{document}
+