\begin{frame}{Moteur chimique}

  \begin{columns}
    \column{.7\textwidth}\centering
    \begin{itemize}
      \item \structure{Modèle}
        \begin{itemize}
          \item Réaction-Diffusion-Évaporation à la Turing
            \medskip
          \item EDP couplées
            \begin{equation*}
              \frac{\partial\orr\varphi}{\partial t} =
              \orr{\text{X}}(\orr\varphi) +
              \orr{\text{D}} \cdot
              \nabla^2\orr\varphi
              - \orr{\text{E}} \cdot \orr\varphi
            \end{equation*}
        \end{itemize}
      \item \structure{Simulation}
        \begin{itemize}
          \item Discrétisation de type différences finies sur un automate
            cellulaire 2D
            \medskip
          \item Algorithme Propagation Parallèle à la Margolus (PPM)
            \begin{itemize}
              \item Simuler un automate cellulaire sur un support SIMD
              \item Faire correspondre la segmentation de l'espace aux processus
              \item Éviter les accès concurrents à la même zone mémoire
            \end{itemize}
        \end{itemize}
    \end{itemize}

    \column{.2\textwidth}
    \moteurs[structure!30]
  \end{columns}

% Animation du «calque» de démonstration de PPM
  \uncover<2->{
    \tikz[overlay,opacity=.95,transform canvas={scale around=.8:(current page.center)}]
    \draw[black,fill=white,rounded corners,ultra thick]
    (current page.south west) rectangle (current page.north east);
    \only<2-7>{
      \tikz[overlay] \node[anchor=center] at (current page.center) {
        \begin{tikzpicture}[
          cell/.style={black,size=1.5mm,circle,inner sep=0pt,font=\TINY},
          neighbor cell/.style={black,size=1.5mm,circle,inner sep=0pt,font=\small},
          center cell/.style={cell,white,fill=black},
          spy using outlines={circle,red,size=58mm,magnification=4,connect spies}]
          \begin{scope}[scale=.5]
            \clip (-27mm,-27mm) rectangle (27mm,27mm);

            % Background
            \only<2,4-6>{%
              \fill[blue!50,shift={(5mm,5mm)}] (-1cm,-1cm) rectangle (1cm,1cm);
              \fill[red!50,shift={(-5mm,-5mm)}] (-1cm,-1cm) rectangle (1cm,1cm);
            }
            \only<3,6->{%
              \fill[red!50,shift={(-5mm,-5mm)}] (-1cm,-1cm) rectangle (1cm,1cm);
              \fill[blue!50,shift={(5mm,5mm)}] (-1cm,-1cm) rectangle (1cm,1cm);
            }

            \only<4-7>{
              \begin{scope}
                \clip (-3mm,-3mm) rectangle (3mm,3mm);
                \draw[very thin] (-5mm,-5mm) grid (5mm,5mm);
              \end{scope}
            }
            \only<4-6>{
              \begin{scope}[shift={(-1cm,0)}]
                \clip (-3mm,-3mm) rectangle (3mm,3mm);
                \draw[very thin] (-5mm,-5mm) grid (5mm,5mm);
              \end{scope}
              \begin{scope}[shift={(-1cm,-1cm)}]
                \clip (-3mm,-3mm) rectangle (3mm,3mm);
                \draw[very thin] (-5mm,-5mm) grid (5mm,5mm);
              \end{scope}
              \begin{scope}[shift={(0cm,-1cm)}]
                \clip (-3mm,-3mm) rectangle (3mm,3mm);
                \draw[very thin] (-5mm,-5mm) grid (5mm,5mm);
              \end{scope}
            }
            \only<2,3>{
              \node[center cell,font=\small] at ( -0mm, -0mm) {$A$};
              \node[cell,font=\small] at (-10mm, -0mm) {$B$};
              \node[cell,font=\small] at (-10mm,-10mm) {$C$};
              \node[cell,font=\small] at ( -0mm,-10mm) {$D$};
            }
            \only<2,3,4>{
              % Voisins
              \node[neighbor cell] at ( 1cm, 0cm) {$v_{A,1}$};
              \node[neighbor cell] at ( 1cm, 1cm) {$v_{A,2}$};
              \node[neighbor cell] at ( 0cm, 1cm) {$v_{A,3}$};
              \node[neighbor cell] at (-1cm, 1cm) {$v_{B,1}$};
              \node[neighbor cell] at (-2cm, 1cm) {$v_{B,2}$};
              \node[neighbor cell] at (-2cm, 0cm) {$v_{B,3}$};
              \node[neighbor cell] at (-2cm,-1cm) {$v_{C,1}$};
              \node[neighbor cell] at (-2cm,-2cm) {$v_{C,2}$};
              \node[neighbor cell] at (-1cm,-2cm) {$v_{C,3}$};
              \node[neighbor cell] at ( 0cm,-2cm) {$v_{D,1}$};
              \node[neighbor cell] at ( 1cm,-2cm) {$v_{D,2}$};
              \node[neighbor cell] at ( 1cm,-1cm) {$v_{D,3}$};
            }
            \only<4>{
              \begin{scope}[scale=0.5,shift={(-5mm,-5mm)}]
                \node[center cell] at ( -0mm, -0mm) {$A$};
                \node[cell]        at (-10mm, -0mm) {$B$};
                \node[cell]        at (-10mm,-10mm) {$C$};
                \node[cell]        at ( -0mm,-10mm) {$D$};

                \node[cell] at ( 1cm, 0cm) {$v_{A,1}$};
                \node[cell] at ( 1cm, 1cm) {$v_{A,2}$};
                \node[cell] at ( 0cm, 1cm) {$v_{A,3}$};
                \node[cell] at (-1cm, 1cm) {$v_{B,1}$};
                \node[cell] at (-2cm, 1cm) {$v_{B,2}$};
                \node[cell] at (-2cm, 0cm) {$v_{B,3}$};
                \node[cell] at (-2cm,-1cm) {$v_{C,1}$};
                \node[cell] at (-2cm,-2cm) {$v_{C,2}$};
                \node[cell] at (-1cm,-2cm) {$v_{C,3}$};
                \node[cell] at ( 0cm,-2cm) {$v_{D,1}$};
                \node[cell] at ( 1cm,-2cm) {$v_{D,2}$};
                \node[cell] at ( 1cm,-1cm) {$v_{D,3}$};
              \end{scope}
            }
            \only<5>{
              \begin{scope}[scale=0.5,shift={(-5mm,-5mm)}]
                \node[center cell] at ( -0mm, -0mm) {$A'$};
                \node[cell]        at (-10mm, -0mm) {$B'$};
                \node[cell]        at (-10mm,-10mm) {$C'$};
                \node[cell]        at ( -0mm,-10mm) {$D'$};
              \end{scope}
            }
            \only<6>{
              \begin{scope}[scale=0.5,shift={(5mm,5mm)}]
                \node[center cell] at ( -0mm, -0mm) {$A'$};
                \node[cell]        at (-10mm, -0mm) {$B'$};
                \node[cell]        at (-10mm,-10mm) {$C'$};
                \node[cell]        at ( -0mm,-10mm) {$D'$};
              \end{scope}
              \begin{scope}[scale=0.5,shift={(-15mm,5mm)}]
                \node[cell] at ( -0mm, -0mm) {$A'$};
                \node[cell] at (-10mm, -0mm) {$B'$};
                \node[cell] at (-10mm,-10mm) {$C'$};
                \node[cell] at ( -0mm,-10mm) {$D'$};
              \end{scope}
              \begin{scope}[scale=0.5,shift={(-15mm,-15mm)}]
                \node[cell] at ( -0mm, -0mm) {$A'$};
                \node[cell] at (-10mm, -0mm) {$B'$};
                \node[cell] at (-10mm,-10mm) {$C'$};
                \node[cell] at ( -0mm,-10mm) {$D'$};
              \end{scope}
              \begin{scope}[scale=0.5,shift={(5mm,-15mm)}]
                \node[cell] at ( -0mm, -0mm) {$A'$};
                \node[cell] at (-10mm, -0mm) {$B'$};
                \node[cell] at (-10mm,-10mm) {$C'$};
                \node[cell] at ( -0mm,-10mm) {$D'$};
              \end{scope}
            }
            \only<7>{
              \begin{scope}[scale=0.5,shift={(5mm,5mm)}]
                \node[center cell] at ( -0mm, -0mm) {$A'$};
                \node[cell]        at (-10mm, -0mm) {$B'$};
                \node[cell]        at (-10mm,-10mm) {$C'$};
                \node[cell]        at ( -0mm,-10mm) {$D'$};
              \end{scope}
            }

            % Grilles:
            \draw[xshift=5mm,yshift=5mm,thin] ( -5cm, -5cm) grid ( 5cm, 5cm);
            \only<2,4-6>{\draw[xshift=5mm,yshift=5mm, step=2cm, thick]%
            ( -5cm, -5cm) grid ( 5cm, 5cm);}
            \only<3,7>{\draw[xshift=-5mm,yshift=-5mm, step=2cm, thick]%
            ( -5cm, -5cm) grid ( 5cm, 5cm);}

            \only<2,4-6>{
              \coordinate (spyhook) at (-5mm,-5mm);
            }
            \only<3,7>{
              \coordinate (spyhook) at (5mm,5mm);
            }
          \end{scope}

          \spy on (spyhook) in node (zoom) at (5cm,0);
        \end{tikzpicture}
      };
    }
  }
\end{frame}
