v4 doc: added macroprocessor slides

git-svn-id: https://www.dynare.org/svn/dynare/dynare_v4@1933 ac1d8469-bf42-47a9-8791-bf33cf982152
time-shift
sebastien 2008-07-04 14:30:46 +00:00
parent de66e31008
commit 400267ab92
6 changed files with 10429 additions and 0 deletions

Binary file not shown.

View File

@ -0,0 +1,516 @@
\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\mode<handout>
{
\usepackage{pgfpages}
\pgfpagesuselayout{4 on 1}[a4paper,border shrink=3mm,landscape]
\usetheme{Madrid}
\usecolortheme{seagull}
}
\mode<beamer>
{
\usetheme{Madrid}
}
\title{The Dynare Macro-processor}
\subtitle{Dynare Summer School 2008}
\author{Sébastien Villemot}
\institute[BoFrance - PSE]{Bank of France - Paris School of Economics}
\date{July 3, 2008}
\AtBeginSection[]
{
\begin{frame}
\frametitle{Outline}
\tableofcontents[currentsection]
\end{frame}
}
\begin{document}
\begin{frame}
\titlepage
\end{frame}
\begin{frame}
\frametitle{Outline}
\tableofcontents
\end{frame}
\section{Overview}
\begin{frame}
\frametitle{Motivation}
\begin{itemize}
\item The \textbf{Dynare language} (used in MOD files) is well suited for describing economic models
\item However, it lacks some useful features, such as:
\begin{itemize}
\item a loop mechanism for automatically repeating similar blocks of equations (such as in multi-country models)
\item an operator for indexed sums or products inside equations
\item a mechanism for splitting large MOD-files in smaller modular files
\item the possibility of conditionally including some equations or some runtime commands
\end{itemize}
\item The \textbf{Dynare Macro-language} was specifically designed to address these issues
\item Being flexible and fairly general, it can also be helpful in other situations
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Design of the macro-language}
\begin{itemize}
\item The Dynare Macro-language provides a new set of \textbf{macro-commands} which can be inserted inside MOD-files
\item Language features include:
\begin{itemize}
\item file inclusion
\item loops
\item conditional inclusion (if/then/else structures)
\item expression substitution
\end{itemize}
% \item Technically, this language is independent of the basic Dynare language, and is processed by a separate component of the Dynare pre-processor, called the \textbf{macro-processor}
\item The macro-processor transforms a MOD file with macro-commands into a MOD file without macro-commands (doing text expansions/inclusions) and then feeds it to the Dynare parser
\item The key point to understand is that the macro-processor only does \textbf{text substitution} (like the C preprocessor or the PHP language)
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Old Dynare design}
\includegraphics[width=0.95\linewidth]{old-design.pdf}
\end{frame}
\begin{frame}
\frametitle{New Dynare design}
\includegraphics[width=0.95\linewidth]{new-design.pdf}
\end{frame}
\section{Syntax}
\begin{frame}[fragile=singleslide]
\frametitle{Macro Directives}
\begin{itemize}
\item Directives begin with an at-sign followed by a pound sign (\verb+@#+) and occupy exactly one line
\item However, a directive can be continued on next line by adding two anti-slashes (\verb+\\+) at the end of the line to be continued
\item A directive produces no output, but serves to give instructions to the macro processor
\end{itemize}
\end{frame}
\begin{frame}[fragile=singleslide]
\frametitle{Inclusion directive}
This directive simply includes the content of another file at the place where it is inserted.
\begin{block}{Syntax}
\verb+@#include "+\textit{filename}\verb+"+
\end{block}
\begin{block}{Example}
\begin{verbatim}
@#include "modelcomponent.mod"
\end{verbatim}
\end{block}
Note that it is possible to include a file from an included file (nested includes).
\end{frame}
\begin{frame}
\frametitle{Variables}
\begin{itemize}
\item The macro processor maintains its own list of variables (distinct of model variables and of Matlab variables)
\item Variables can be of four types:
\begin{itemize}
\item integer
\item character string (declared between \textit{double} quotes)
\item array of integers
\item array of strings
\end{itemize}
\item No boolean type:
\begin{itemize}
\item false is represented by integer zero
\item true is any non-null integer
\end{itemize}
\end{itemize}
\end{frame}
\begin{frame}[fragile=singleslide]
\frametitle{Macro-expressions (1/2)}
It is possible to construct macro-expressions, using standard operators.
\begin{block}{Operators on integers}
\begin{itemize}
\item arithmetic operators: \texttt{+,-,*,/}
\item comparison operators: \texttt{<,>,<=,>=,==,!=}
\item logical operators: \verb+&&,||,!+
\item integer ranges: \texttt{1:4} is equivalent to integer array \texttt{[1,2,3,4]}
\end{itemize}
\end{block}
\begin{block}{Operators on character strings}
\begin{itemize}
\item comparison operators: \texttt{==,!=}
\item concatenation: \texttt{+}
\item extraction of substrings: if \texttt{s} is a string, then one can write \texttt{s[3]} or \texttt{s[4:6]}
\end{itemize}
\end{block}
\end{frame}
\begin{frame}[fragile=singleslide]
\frametitle{Macro-expressions (2/2)}
\begin{block}{Operators on arrays}
\begin{itemize}
\item dereferencing: if \texttt{v} is an array, then \texttt{v[2]} is its $2^{\textrm{nd}}$ element
\item concatenation: \texttt{+}
\item difference \texttt{-}: returns the first operand from which the elements of the second operand have been removed
\item extraction of sub-arrays: \textit{e.g.} \texttt{v[4:6]}
\end{itemize}
\end{block}
Macro-expressions can be used at two places:
\begin{itemize}
\item inside macro directives, directly
\item in the body of the MOD-file, between an at-sign and curly braces (like \verb+@{expr}+): the macro processor will substitute the expression with its value
\end{itemize}
\end{frame}
\begin{frame}[fragile=singleslide]
\frametitle{Define directive}
The value of a macro-variable can be defined with the \verb+@#define+ directive.
\begin{block}{Syntax}
\verb+@#define +\textit{variable\_name}\verb+ = +\textit{expression}
\end{block}
\begin{block}{Examples}
\begin{verbatim}
@#define x = 5
@#define y = "foo"
@#define v = [ 1, 2, 4 ]
@#define w = [ "foo", "bar" ]
@#define z = 3+v[2]
\end{verbatim}
\end{block}
\end{frame}
\begin{frame}[fragile=singleslide]
\frametitle{Expression substitution}
\framesubtitle{Dummy example}
\begin{block}{Before macro-processing}
\begin{verbatim}
@#define x = [ "B", "C" ]
@#define i = 2
model;
A = @{x[i]};
end;
\end{verbatim}
\end{block}
\begin{block}{After macro-processing}
\begin{verbatim}
model;
A = C;
end;
\end{verbatim}
\end{block}
\end{frame}
\begin{frame}[fragile=singleslide]
\frametitle{Loop directive}
\begin{block}{Syntax}
\verb+@#for +\textit{variable\_name}\verb+ in +\textit{array\_expr} \\
\verb+ +\textit{loop\_body} \\
\verb+@#endfor+
\end{block}
\begin{block}{Example: before macro-processing}
\small
\begin{verbatim}
model;
@#for country in [ "home", "foreign" ]
GDP_@{country} = K_@{country}^a * L_@{country}^(1-a)
@#endfor
end;
\end{verbatim}
\normalsize
\end{block}
\begin{block}{Example: after macro-processing}
\small
\begin{verbatim}
model;
GDP_home = K_home^a * L_home^(1-a);
GDP_foreign = K_foreign^a * L_foreign^(1-a);
end;
\end{verbatim}
\normalsize
\end{block}
\end{frame}
\begin{frame}[fragile=singleslide]
\frametitle{Conditional inclusion directive}
\begin{columns}[T]
\column{0.47\linewidth}
\begin{block}{Syntax 1}
\verb+@#if +\textit{integer\_expr} \\
\verb+ +\textit{body included if expr != 0} \\
\verb+@#endif+
\end{block}
\column{0.47\linewidth}
\begin{block}{Syntax 2}
\verb+@#if +\textit{integer\_expr} \\
\verb+ +\textit{body included if expr != 0} \\
\verb+@#else+ \\
\verb+ +\textit{body included if expr == 0} \\
\verb+@#endif+
\end{block}
\end{columns}
\begin{block}{Example: alternative monetary policy rules}
\scriptsize
\begin{verbatim}
@#define linear_mon_pol = ...
...
model;
@#if linear_mon_pol
i = w*i(-1) + (1-w)*i_ss + w2*(pie-piestar)
@#else
i = i(-1)^w * i_ss^(1-w) * (pie/piestar)^w2
@#endif
...
end;
\end{verbatim}
\scriptsize
\end{block}
\end{frame}
\begin{frame}[fragile=singleslide]
\frametitle{Echo and error directives}
\begin{itemize}
\item The echo directive will simply display a message on standard output
\item The error directive will display the message and make Dynare stop (only makes sense inside a conditional inclusion directive)
\end{itemize}
\begin{block}{Syntax}
\verb+@#echo +\textit{string\_expr} \\
\verb+@#error +\textit{string\_expr}
\end{block}
\begin{block}{Examples}
\begin{verbatim}
@#echo "Information message."
@#error "Error message!"
\end{verbatim}
\end{block}
\end{frame}
\begin{frame}
\frametitle{Saving the macro-expanded MOD file}
\begin{itemize}
\item For \textbf{debugging or learning} purposes, it is possible to save the output of the macro-processor
\item This output is a valid MOD-file, obtained after processing the macro-commands of the original MOD-file
% \item Useful to understand how the macro-processor works
\item Just add the \texttt{savemacro} option on the Dynare command line (after the name of your MOD-file)
\item If MOD file is \texttt{filename.mod}, then the macro-expanded version will be saved in \texttt{filename-macroexp.mod}
\end{itemize}
\end{frame}
% \begin{frame}
% \frametitle{Note on error messages}
% \end{frame}
\section{Typical usages}
\begin{frame}[fragile=singleslide]
\frametitle{Modularization}
\begin{itemize}
\item The \verb+@#include+ directive can be used to split MOD-files into several modular components
\item Example setup:
\begin{itemize}
\item \texttt{modeldesc.mod}: contains variable declarations, model equations and shocks declarations
\item \texttt{simul.mod}: includes \texttt{modeldesc.mod}, calibrates parameters and runs stochastic simulations
\item \texttt{estim.mod}: includes \texttt{modeldesc.mod}, declares priors on parameters and runs bayesian estimation
\item Dynare can be called on \texttt{simul.mod} and \texttt{estim.mod} (but it makes no sense to run it on \texttt{modeldesc.mod})
\end{itemize}
\end{itemize}
\end{frame}
\begin{frame}[fragile=singleslide]
\frametitle{Indexed sums or products}
\framesubtitle{Example: moving average}
\begin{columns}[T]
\column{0.47\linewidth}
\begin{block}{Before macro-processing}
\begin{verbatim}
@#define window = 2
var x MA_x;
...
model;
...
MA_x = 1/@{2*window+1}*(
@#for i in -window:window
+x(@{i})
@#endfor
);
...
end;
\end{verbatim}
\end{block}
\column{0.47\linewidth}
\begin{block}{After macro-processing}
\begin{verbatim}
var x MA_x;
...
model;
...
MA_x = 1/5*(
+x(-2)
+x(-1)
+x(0)
+x(1)
+x(2)
);
...
end;
\end{verbatim}
\end{block}
\end{columns}
\end{frame}
\begin{frame}[fragile=singleslide]
\frametitle{Multi-country models}
\framesubtitle{MOD-file skeleton example}
\scriptsize
\begin{verbatim}
@#define countries = [ "US", "EU", "AS", "JP", "RC" ]
@#define nth_co = "US"
@#for co in countries
var Y_@{co} K_@{co} L_@{co} i_@{co} E_@{co} ...;
parameters a_@{co} ...;
varexo ...;
@#endfor
model;
@#for co in countries
Y_@{co} = K_@{co}^a_@{co} * L_@{co}^(1-a_@{co});
...
@# if co != nth_co
(1+i_@{co}) = (1+i_@{nth_co}) * E_@{co}(+1) / E_@{co}; // UIP relation
@# else
E_@{co} = 1;
@# endif
@#endfor
end;
\end{verbatim}
\normalsize
\end{frame}
\begin{frame}
\frametitle{Endogeneizing parameters (1/3)}
\begin{itemize}
\item When doing the steady-state calibration of the model, it may be useful to consider a parameter as an endogenous (and vice-versa)
\item Example:
\begin{gather*}
y = \left(\alpha^{\frac{1}{\xi}} \ell^{1-\frac{1}{\xi}} + (1-\alpha)^{\frac{1}{\xi}}k^{1-\frac{1}{\xi}}\right)^{\frac{\xi}{\xi - 1}} \\
lab\_rat = \frac{w \ell}{p y}
\end{gather*}
\item During simulation or estimation, the share parameter $\alpha$ is a parameter, and $lab\_rat$ is an endogenous variable
\item But for steady-state calibration, we may want to impose an economically relevant value for $lab\_rat$, and deduce the implied value for $\alpha$ \\
$\Rightarrow$ during calibration, $\alpha$ is endogenous and $lab\_rat$ is a parameter
\end{itemize}
\end{frame}
\begin{frame}[fragile=singleslide]
\frametitle{Endogeneizing parameters (2/3)}
\begin{itemize}
\item Create \texttt{modeqs.mod} with variable declarations and model equations
\item For declaration of \texttt{alpha} and \texttt{lab\_rat}:
\footnotesize
\begin{verbatim}
@#if steady
var alpha;
parameter lab_rat;
@#else
parameter alpha;
var lab_rat;
@#endif
\end{verbatim}
\normalsize
\item Create \texttt{steady.mod}:
\begin{itemize}
\item begins with \verb+@#define steady = 1+
\item then with \verb+@#include "modeqs.mod"+
\item initializes parameters (including \texttt{lab\_rat}, excluding \texttt{alpha})
\item computes steady state (using hints for endogenous, including \texttt{alpha})
\item saves values of parameters and endogenous at steady-state to a file
\end{itemize}
\end{itemize}
\end{frame}
\begin{frame}[fragile=singleslide]
\frametitle{Endogeneizing parameters (3/3)}
\begin{itemize}
\item Create \texttt{simul.mod}:
\begin{itemize}
\item begins with \verb+@#define steady = 0+
\item then with \verb+@#include "modeqs.mod"+
\item loads values of parameters and endogenous at steady-state from file
\item computes simulations
\end{itemize}
\item \textit{Note:} functions for saving and loading parameters and endogenous are not yet in Dynare distribution (they should be soon, ask me if you're interested)
\end{itemize}
\end{frame}
% \begin{frame}
% \frametitle{Matlab loops vs macro-processor loops}
% \end{frame}
\section{Conclusion}
\begin{frame}[fragile=singleslide]
\frametitle{Possible future developments}
\begin{itemize}
\item Find a nicer syntax for indexed sums/products
\item Implement other control structures: \texttt{elsif}, \texttt{switch/case}, \texttt{while/until} loops
\item Implement macro-functions (or templates), with a syntax like:
\small
\verb+@define QUADRATIC_COST(x, x_ss, phi) = phi/2*(x/x_ss-1)^2+
\normalsize
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Dynare for Octave (1/2)}
\begin{itemize}
\item GNU Octave (or simply Octave) is a high-level language, primarily intended for numerical computations
\item Basically, it is a free clone of Matlab
\item Runs on MS Windows, Linux and MacOS
\item Advantages:
\begin{itemize}
\item mostly compatible with Matlab: same syntax, almost same set of functions
\item free software, no license needed
\item source code available
\item software under constant development
\item dynamic and responsive community of developers
\end{itemize}
\item Inconvenients:
\begin{itemize}
\item slower than Matlab
\item less user-friendly (no fancy graphical user interface)
\end{itemize}
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Dynare for Octave (2/2)}
\begin{itemize}
\item Small adjustments have been made in recent versions of Dynare to make it run on Octave
\item This makes Dynare 100\% free software
\item If you're interested in using Dynare for Octave, go to: \\
\url{http://www.cepremap.cnrs.fr/DynareWiki/DynareOctave}
\item Adapting Dynare for Octave is still a work in progress \\
$\Rightarrow$ feedback is welcome
\end{itemize}
\end{frame}
\end{document}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,346 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://web.resource.org/cc/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="862.10712"
height="382.82141"
id="svg5540"
sodipodi:version="0.32"
inkscape:version="0.45.1"
version="1.0"
sodipodi:docbase="K:\Commun\Villemot\Macroprocessor"
sodipodi:docname="new-design.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
inkscape:export-filename="K:\Commun\Villemot\Macroprocessor\new-design.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<defs
id="defs5542">
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend"
style="overflow:visible">
<path
id="path3243"
d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z "
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
transform="matrix(-0.8,0,0,-0.8,-10,0)" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.7"
inkscape:cx="488.94636"
inkscape:cy="380.52134"
inkscape:document-units="px"
inkscape:current-layer="layer1"
width="1052.3622px"
height="744.09448px"
inkscape:window-width="1024"
inkscape:window-height="712"
inkscape:window-x="-4"
inkscape:window-y="-4" />
<metadata
id="metadata5545">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Calque 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-78.642861,-39.058769)">
<g
id="g4418"
transform="translate(467.50002,289.64286)">
<text
sodipodi:linespacing="125%"
id="text4420"
y="56.6479"
x="361.42862"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial"
xml:space="preserve"><tspan
id="tspan4422"
y="56.6479"
x="361.42862"
sodipodi:role="line">Matlab files</tspan><tspan
id="tspan4424"
y="81.6479"
x="361.42862"
sodipodi:role="line">representing</tspan><tspan
id="tspan4426"
y="106.6479"
x="361.42862"
sodipodi:role="line">the model</tspan></text>
<path
transform="matrix(1.0528522,0,0,1.0682674,-22.862484,-9.0197689)"
d="M 431.42857 79.808769 A 66.428574 51.42857 0 1 1 298.57143,79.808769 A 66.428574 51.42857 0 1 1 431.42857 79.808769 z"
sodipodi:ry="51.42857"
sodipodi:rx="66.428574"
sodipodi:cy="79.808769"
sodipodi:cx="365"
id="path4428"
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
sodipodi:type="arc" />
</g>
<g
id="g4430"
transform="translate(-555.35711,282.49999)">
<text
sodipodi:linespacing="125%"
id="text4432"
y="65.21933"
x="691.42859"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial"
xml:space="preserve"><tspan
y="65.21933"
x="691.42859"
id="tspan4434"
sodipodi:role="line">Output:</tspan><tspan
id="tspan4436"
y="90.21933"
x="691.42859"
sodipodi:role="line">Results,</tspan><tspan
id="tspan4438"
y="115.21933"
x="691.42859"
sodipodi:role="line">Graphics</tspan></text>
<path
d="M 747.14283 85.523056 A 54.285713 51.42857 0 1 1 638.5714,85.523056 A 54.285713 51.42857 0 1 1 747.14283 85.523056 z"
sodipodi:ry="51.42857"
sodipodi:rx="54.285713"
sodipodi:cy="85.523056"
sodipodi:cx="692.85712"
id="path4440"
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
sodipodi:type="arc" />
</g>
<g
id="g4452"
transform="translate(-25.357118,291.07143)">
<text
sodipodi:linespacing="125%"
id="text4454"
y="68.076462"
x="525.71436"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial"
xml:space="preserve"><tspan
y="68.076462"
x="525.71436"
id="tspan4456"
sodipodi:role="line">Dynare</tspan><tspan
id="tspan4458"
y="93.076462"
x="525.71436"
sodipodi:role="line">Matlab routines</tspan></text>
<rect
y="36.951626"
x="448.57144"
height="75.714287"
width="152.85715"
id="rect4460"
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
</g>
<path
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="M 757.92859,365.8802 L 577.07147,365.8802"
id="path4466"
inkscape:connector-type="polyline"
inkscape:connection-end="#g4452"
inkscape:connection-start="#g4418" />
<path
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="M 422.21432,366.33835 L 192.78572,367.69591"
id="path4468"
inkscape:connector-type="polyline"
inkscape:connection-start="#g4452"
inkscape:connection-end="#g4430" />
<g
id="g6668">
<text
sodipodi:linespacing="125%"
id="text4470"
y="117.30877"
x="143.92857"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial"
xml:space="preserve"><tspan
y="117.30877"
x="143.92857"
id="tspan4472"
sodipodi:role="line">MOD file</tspan><tspan
id="tspan4474"
y="142.30877"
x="143.92857"
sodipodi:role="line">with macro</tspan><tspan
id="tspan4482"
y="167.30877"
x="143.92857"
sodipodi:role="line">commands</tspan></text>
<path
transform="matrix(1.0725676,0,0,0.999374,99.5973,-252.25554)"
d="M 98.57143 390.52304 A 58.57143 56.42857 0 1 1 -18.57143,390.52304 A 58.57143 56.42857 0 1 1 98.57143 390.52304 z"
sodipodi:ry="56.42857"
sodipodi:rx="58.57143"
sodipodi:cy="390.52304"
sodipodi:cx="40"
id="path4504"
style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
sodipodi:type="arc" />
</g>
<g
id="g5516"
transform="translate(316.78572,-245.35715)">
<text
sodipodi:linespacing="125%"
id="text4476"
y="368.38019"
x="307.14285"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial"
xml:space="preserve"><tspan
y="368.38019"
x="307.14285"
id="tspan4478"
sodipodi:role="line">MOD file</tspan><tspan
id="tspan4480"
y="393.38019"
x="307.14285"
sodipodi:role="line">without macro</tspan><tspan
id="tspan4484"
y="418.38019"
x="307.14285"
sodipodi:role="line">commands</tspan></text>
<path
transform="translate(-8.5714286,-4.2857143)"
d="M 389.99999 391.95163 A 72.85714 65 0 1 1 244.28571,391.95163 A 72.85714 65 0 1 1 389.99999 391.95163 z"
sodipodi:ry="65"
sodipodi:rx="72.85714"
sodipodi:cy="391.95163"
sodipodi:cx="317.14285"
id="path5475"
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
sodipodi:type="arc" />
</g>
<g
id="g5510"
transform="translate(243.92858,-236.78572)">
<text
sodipodi:linespacing="125%"
id="text4486"
y="372.66592"
x="165.71428"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial"
xml:space="preserve"><tspan
id="tspan4490"
y="372.66592"
x="165.71428"
sodipodi:role="line">Macro</tspan><tspan
id="tspan4492"
y="397.66592"
x="165.71428"
sodipodi:role="line">Processor</tspan></text>
<rect
y="339.80878"
x="110"
height="72.85714"
width="115.71429"
id="rect5477"
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
</g>
<g
id="g5523"
transform="translate(372.5,-249.64286)">
<text
sodipodi:linespacing="125%"
id="text4494"
y="368.38019"
x="455.71426"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial"
xml:space="preserve"><tspan
y="368.38019"
x="455.71426"
id="tspan4496"
sodipodi:role="line">Parser,</tspan><tspan
id="tspan4498"
y="393.38019"
x="455.71426"
sodipodi:role="line">Analytical</tspan><tspan
id="tspan4500"
y="418.38019"
x="455.71426"
sodipodi:role="line">derivator...</tspan></text>
<rect
y="339.80878"
x="395.71429"
height="94.285713"
width="120"
id="rect5479"
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
</g>
<path
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="M 206.35715,138.3618 L 352.92858,139.13938"
id="path5532"
inkscape:connector-type="polyline"
inkscape:connection-end="#g5510"
inkscape:connection-start="#g6668" />
<path
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="M 470.64287,140.23901 L 551.5,141.32071"
id="path5534"
inkscape:connector-type="polyline"
inkscape:connection-start="#g5510"
inkscape:connection-end="#g5516" />
<path
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="M 699.21428,140.48835 L 767.21429,138.81229"
id="path5536"
inkscape:connector-type="polyline"
inkscape:connection-start="#g5516"
inkscape:connection-end="#g5523" />
<path
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="M 828.36474,185.45163 L 828.75359,309.8802"
id="path5538"
inkscape:connector-type="polyline"
inkscape:connection-end="#g4418"
inkscape:connection-start="#g5523" />
<rect
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:1.5, 4.5;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect5596"
width="634.28571"
height="201.42857"
x="305.71429"
y="39.808769" />
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial"
x="404.28574"
y="232.66591"
id="text6567"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan6569"
x="404.28574"
y="232.66591">Dynare preprocessor</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 17 KiB

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,267 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://web.resource.org/cc/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="657.71429"
height="312"
id="svg2"
sodipodi:version="0.32"
inkscape:version="0.45.1"
version="1.0"
sodipodi:docbase="K:\Commun\Villemot\Macroprocessor"
sodipodi:docname="old-design.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
inkscape:export-filename="K:\Commun\Villemot\Macroprocessor\old-design.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<defs
id="defs4">
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend"
style="overflow:visible">
<path
id="path3243"
d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z "
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
transform="matrix(-0.8,0,0,-0.8,-10,0)" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.7"
inkscape:cx="555.04474"
inkscape:cy="220.62111"
inkscape:document-units="px"
inkscape:current-layer="layer1"
width="1052.3622px"
height="744.09448px"
inkscape:window-width="1024"
inkscape:window-height="712"
inkscape:window-x="-4"
inkscape:window-y="-4" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Calque 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-138.99998,-35.951625)">
<text
xml:space="preserve"
style="font-size:48px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial"
x="60"
y="72.362183"
id="text2160"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan2162"
x="60"
y="72.362183"></tspan></text>
<g
id="g6679"
transform="translate(-52.857143,-31.428572)">
<text
sodipodi:linespacing="125%"
id="text2164"
y="125.21933"
x="251.42856"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial"
xml:space="preserve"><tspan
y="125.21933"
x="251.42856"
id="tspan2166"
sodipodi:role="line">MOD</tspan><tspan
id="tspan2168"
y="150.21933"
x="251.42856"
sodipodi:role="line">File</tspan></text>
<path
transform="matrix(1.0924144,0,0,1.1873521,180.35562,37.324342)"
d="M 102.85714 79.094482 A 37.142857 33.57143 0 1 1 28.57143,79.094482 A 37.142857 33.57143 0 1 1 102.85714 79.094482 z"
sodipodi:ry="33.57143"
sodipodi:rx="37.142857"
sodipodi:cy="79.094482"
sodipodi:cx="65.714287"
id="path2216"
style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
sodipodi:type="arc" />
</g>
<g
id="g2239"
transform="translate(358.57143,25.714291)">
<text
sodipodi:linespacing="125%"
id="text2178"
y="56.6479"
x="361.42862"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial"
xml:space="preserve"><tspan
id="tspan2182"
y="56.6479"
x="361.42862"
sodipodi:role="line">Matlab files</tspan><tspan
id="tspan2188"
y="81.6479"
x="361.42862"
sodipodi:role="line">representing</tspan><tspan
id="tspan2212"
y="106.6479"
x="361.42862"
sodipodi:role="line">the model</tspan></text>
<path
transform="matrix(1.0528522,0,0,1.0682674,-22.862484,-9.0197689)"
d="M 431.42857 79.808769 A 66.428574 51.42857 0 1 1 298.57143,79.808769 A 66.428574 51.42857 0 1 1 431.42857 79.808769 z"
sodipodi:ry="51.42857"
sodipodi:rx="66.428574"
sodipodi:cy="79.808769"
sodipodi:cx="365"
id="path2218"
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
sodipodi:type="arc" />
</g>
<g
id="g2226"
transform="translate(-498.57142,210)">
<text
sodipodi:linespacing="125%"
id="text2200"
y="65.21933"
x="691.42859"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial"
xml:space="preserve"><tspan
y="65.21933"
x="691.42859"
id="tspan2202"
sodipodi:role="line">Output:</tspan><tspan
id="tspan2206"
y="90.21933"
x="691.42859"
sodipodi:role="line">Results,</tspan><tspan
id="tspan2210"
y="115.21933"
x="691.42859"
sodipodi:role="line">Graphics</tspan></text>
<path
d="M 747.14283 85.523056 A 54.285713 51.42857 0 1 1 638.5714,85.523056 A 54.285713 51.42857 0 1 1 747.14283 85.523056 z"
sodipodi:ry="51.42857"
sodipodi:rx="54.285713"
sodipodi:cy="85.523056"
sodipodi:cx="692.85712"
id="path2220"
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
sodipodi:type="arc" />
</g>
<g
id="g5495"
transform="translate(257.14285,-64.285714)">
<text
sodipodi:linespacing="125%"
id="text2170"
y="132.36218"
x="218.57144"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial"
xml:space="preserve"><tspan
id="tspan2174"
y="132.36218"
x="218.57144"
sodipodi:role="line">Dynare</tspan><tspan
id="tspan2192"
y="157.36218"
x="218.57144"
sodipodi:role="line">Preprocessor:</tspan><tspan
y="182.36218"
x="218.57144"
sodipodi:role="line"
id="tspan5483">parser, analytical</tspan><tspan
y="207.36218"
x="218.57144"
sodipodi:role="line"
id="tspan5487">derivator</tspan></text>
<rect
y="101.57445"
x="137.47997"
height="126.46864"
width="163.6115"
id="rect2222"
style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.67421651;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
</g>
<g
id="g2233"
transform="translate(194.28571,221.42857)">
<text
sodipodi:linespacing="125%"
id="text2194"
y="68.076462"
x="525.71436"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial"
xml:space="preserve"><tspan
y="68.076462"
x="525.71436"
id="tspan2196"
sodipodi:role="line">Dynare</tspan><tspan
id="tspan2198"
y="93.076462"
x="525.71436"
sodipodi:role="line">Matlab routines</tspan></text>
<rect
y="36.951626"
x="448.57144"
height="75.714287"
width="152.85715"
id="rect2224"
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
</g>
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
d="M 241,99.916281 L 393.28571,100.30877"
id="path2258"
inkscape:connector-type="polyline"
inkscape:connection-end="#g5495"
inkscape:connection-start="#g6679" />
<path
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="M 559.57142,101.0107 L 649,101.53521"
id="path2260"
inkscape:connector-type="polyline"
inkscape:connection-end="#g2239"
inkscape:connection-start="#g5495" />
<path
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="M 719.79412,157.95162 L 719.42858,257.3802"
id="path2262"
inkscape:connector-type="polyline"
inkscape:connection-start="#g2239"
inkscape:connection-end="#g2233" />
<path
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="M 641.85715,296.13199 L 249.57141,295.59827"
id="path2264"
inkscape:connector-type="polyline"
inkscape:connection-start="#g2233"
inkscape:connection-end="#g2226" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB