\documentclass{article}
\usepackage{color}
\usepackage{alltt}
\usepackage[latin1]{inputenc}

\input {highlight.sty}

\title{d2q9.c}
\begin{document}
\pagecolor{bgcolor}
\noindent
\ttfamily
\hlstd{}\hldir{\#ifdef\ \textunderscore \textunderscore APPLE\textunderscore \textunderscore }\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hldir{\#include\ $<$GLUT/glut.h$>$}\hspace*{\fill}\\
\hlstd{}\hldir{\#else}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hldir{\#include\ $<$GL/glut.h$>$}\hspace*{\fill}\\
\hlstd{}\hldir{\#endif}\hspace*{\fill}\\
\hlstd{}\hspace*{\fill}\\
\hldir{\#include\ $<$stdio.h$>$}\hspace*{\fill}\\
\hlstd{}\hldir{\#include\ $<$stdlib.h$>$}\hspace*{\fill}\\
\hlstd{}\hldir{\#include\ $<$time.h$>$}\hspace*{\fill}\\
\hlstd{}\hldir{\#include\ $<$math.h$>$}\hspace*{\fill}\\
\hlstd{}\hspace*{\fill}\\
\hspace*{\fill}\\
\hldir{\#define\ LATTICE\textunderscore WIDTH}\hlstd{\ \ \ }\hldir{1000}\hspace*{\fill}\\
\hlstd{}\hldir{\#define\ LATTICE\textunderscore HEIGHT}\hlstd{\ \ }\hldir{500}\hspace*{\fill}\\
\hlstd{}\hspace*{\fill}\\
\hldir{\#define\ WINDOW\textunderscore WIDTH}\hlstd{\ \ \ \ }\hldir{LATTICE\textunderscore WIDTH}\hspace*{\fill}\\
\hlstd{}\hldir{\#define\ WINDOW\textunderscore HEIGHT}\hlstd{\ \ \ }\hldir{LATTICE\textunderscore HEIGHT}\hspace*{\fill}\\
\hlstd{}\hspace*{\fill}\\
\hldir{\#define\ X\textunderscore CUTOFF}\hlstd{\ \ \ \ \ \ \ \ }\hldir{5}\hspace*{\fill}\\
\hlstd{}\hldir{\#define\ FPS}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ }\hldir{4}\hspace*{\fill}\\
\hlstd{}\hspace*{\fill}\\
\hldir{\#define\ VECTOR\textunderscore SPACING}\hlstd{\ \ }\hldir{6}\hspace*{\fill}\\
\hlstd{}\hspace*{\fill}\\
\hldir{\#define\ POINT\textunderscore SIZE}\hlstd{\ \ \ \ \ \ }\hldir{6}\hspace*{\fill}\\
\hlstd{}\hldir{\#define\ SPACING}\hlstd{\ \ \ \ \ \ \ \ \ }\hldir{1}\hspace*{\fill}\\
\hlstd{}\hspace*{\fill}\\
\hldir{\#define\ Q}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hldir{9}\hspace*{\fill}\\
\hlstd{}\hldir{\#define\ DIM}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ }\hldir{2}\hspace*{\fill}\\
\hlstd{}\hldir{\#define\ BLOCK\textunderscore DIM}\hlstd{\ \ \ \ \ }\hldir{8}\hspace*{\fill}\\
\hlstd{}\hldir{\#define\ LATTICE\textunderscore SIZE\ LATTICE\textunderscore WIDTH\ {*}\ LATTICE\textunderscore HEIGHT\ {*}\ Q}\hspace*{\fill}\\
\hlstd{}\hldir{\#define\ LATTICE\textunderscore LENGTH\ LATTICE\textunderscore WIDTH\ {*}\ LATTICE\textunderscore HEIGHT}\hspace*{\fill}\\
\hlstd{}\hspace*{\fill}\\
\hldir{\#define\ OMEGA}\hlstd{\ \ \ }\hldir{1.5}\hspace*{\fill}\\
\hlstd{}\hspace*{\fill}\\
\hlkwb{int\ }\hlstd{step\ }\hlsym{=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlkwb{int\ }\hlstd{fps\ }\hlsym{=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;}\hspace*{\fill}\\
\hlstd{\hspace*{\fill}\\
dim3\ }\hlkwd{block}\hlstd{}\hlsym{(}\hlstd{BLOCK\textunderscore DIM}\hlsym{,\ }\hlstd{BLOCK\textunderscore DIM}\hlsym{,\ }\hlstd{}\hlnum{1}\hlstd{}\hlsym{);}\hspace*{\fill}\\
\hlstd{dim3\ }\hlkwd{grid}\hlstd{}\hlsym{(}\hlstd{LATTICE\textunderscore WIDTH\ }\hlsym{/\ }\hlstd{block}\hlsym{.}\hlstd{x}\hlsym{,\ }\hlstd{LATTICE\textunderscore HEIGHT\ }\hlsym{/\ }\hlstd{block}\hlsym{.}\hlstd{y}\hlsym{,\ }\hlstd{}\hlnum{1}\hlstd{}\hlsym{);}\hspace*{\fill}\\
\hlstd{}\hspace*{\fill}\\
\hlkwb{float\ }\hlstd{lattice}\hlsym{{[}}\hlstd{LATTICE\textunderscore HEIGHT\ }\hlsym{{*}\ }\hlstd{LATTICE\textunderscore WIDTH\ }\hlsym{{*}\ }\hlstd{Q}\hlsym{{]};}\hspace*{\fill}\\
\hlstd{}\hlkwb{float\ }\hlstd{tmp\textunderscore lattice}\hlsym{{[}}\hlstd{LATTICE\textunderscore HEIGHT\ }\hlsym{{*}\ }\hlstd{LATTICE\textunderscore WIDTH\ }\hlsym{{*}\ }\hlstd{Q}\hlsym{{]};}\hspace*{\fill}\\
\hlstd{}\hlkwb{int\ }\hlstd{boundary}\hlsym{{[}}\hlstd{LATTICE\textunderscore HEIGHT\ }\hlsym{{*}\ }\hlstd{LATTICE\textunderscore WIDTH}\hlsym{{]};}\hspace*{\fill}\\
\hlstd{}\hspace*{\fill}\\
\hlkwb{float\ }\hlstd{}\hlsym{{*}}\hlstd{gpu\textunderscore lattice}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlkwb{float\ }\hlstd{}\hlsym{{*}}\hlstd{gpu\textunderscore tmp\textunderscore lattice}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlkwb{int\ }\hlstd{}\hlsym{{*}}\hlstd{gpu\textunderscore boundary}\hlsym{;}\hspace*{\fill}\\
\hlstd{\textunderscore \textunderscore constant\textunderscore \textunderscore \ }\hlkwb{int\ }\hlstd{gpu\textunderscore e}\hlsym{{[}}\hlstd{Q\ }\hlsym{{*}\ }\hlstd{DIM}\hlsym{{]};}\hspace*{\fill}\\
\hlstd{\textunderscore \textunderscore constant\textunderscore \textunderscore \ }\hlkwb{float\ }\hlstd{gpu\textunderscore weights}\hlsym{{[}}\hlstd{Q}\hlsym{{]};}\hspace*{\fill}\\
\hlstd{\textunderscore \textunderscore constant\textunderscore \textunderscore \ }\hlkwb{float\ }\hlstd{gpu\textunderscore omega}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hspace*{\fill}\\
\hlkwb{int\ }\hlstd{e}\hlsym{{[}}\hlstd{Q\ }\hlsym{{*}\ }\hlstd{DIM}\hlsym{{]}\ =\ \{}\hlstd{}\hlnum{0}\hlstd{}\hlsym{,}\hlstd{}\hlnum{0}\hlstd{}\hlsym{,\ }\hlstd{}\hlnum{1}\hlstd{}\hlsym{,}\hlstd{}\hlnum{0}\hlstd{}\hlsym{,\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{,}\hlstd{}\hlnum{1}\hlstd{}\hlsym{,\ {-}}\hlstd{}\hlnum{1}\hlstd{}\hlsym{,}\hlstd{}\hlnum{0}\hlstd{}\hlsym{,\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{,{-}}\hlstd{}\hlnum{1}\hlstd{}\hlsym{,\ }\hlstd{}\hlnum{1}\hlstd{}\hlsym{,}\hlstd{}\hlnum{1}\hlstd{}\hlsym{,\ {-}}\hlstd{}\hlnum{1}\hlstd{}\hlsym{,}\hlstd{}\hlnum{1}\hlstd{}\hlsym{,\ {-}}\hlstd{}\hlnum{1}\hlstd{}\hlsym{,{-}}\hlstd{}\hlnum{1}\hlstd{}\hlsym{,\ }\hlstd{}\hlnum{1}\hlstd{}\hlsym{,{-}}\hlstd{}\hlnum{1}\hlstd{}\hlsym{\};}\hspace*{\fill}\\
\hlstd{}\hlkwb{float\ }\hlstd{weights}\hlsym{{[}}\hlstd{Q}\hlsym{{]}\ =\ \{}\hlstd{}\hlnum{4.0}\hlstd{}\hlsym{/}\hlstd{}\hlnum{9.0}\hlstd{}\hlsym{,\ }\hlstd{}\hlnum{1.0}\hlstd{}\hlsym{/}\hlstd{}\hlnum{9.0\ }\hlstd{}\hlsym{,\ }\hlstd{}\hlnum{1.0}\hlstd{}\hlsym{/}\hlstd{}\hlnum{9.0\ }\hlstd{}\hlsym{,\ }\hlstd{}\hlnum{1.0}\hlstd{}\hlsym{/}\hlstd{}\hlnum{9.0\ }\hlstd{}\hlsym{,\ }\hlstd{}\hlnum{1.0}\hlstd{}\hlsym{/}\hlstd{}\hlnum{9.0\ }\hlstd{}\hlsym{,}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlnum{1.0}\hlstd{}\hlsym{/}\hlstd{}\hlnum{36.0}\hlstd{}\hlsym{,\ }\hlstd{}\hlnum{1.0}\hlstd{}\hlsym{/}\hlstd{}\hlnum{36.0}\hlstd{}\hlsym{,\ }\hlstd{}\hlnum{1.0}\hlstd{}\hlsym{/}\hlstd{}\hlnum{36.0}\hlstd{}\hlsym{,\ }\hlstd{}\hlnum{1.0}\hlstd{}\hlsym{/}\hlstd{}\hlnum{36.0}\hlstd{}\hlsym{\};}\hspace*{\fill}\\
\hlstd{}\hspace*{\fill}\\
\hlkwb{void\ }\hlstd{}\hlkwd{init\textunderscore cuda}\hlstd{}\hlsym{(\ )\ \{}\hspace*{\fill}\\
\hlstd{\ }\hlkwd{cudaMalloc}\hlstd{}\hlsym{((}\hlstd{}\hlkwb{void\ }\hlstd{}\hlsym{{*}{*})\ \&}\hlstd{gpu\textunderscore lattice}\hlsym{,\ }\hlstd{LATTICE\textunderscore SIZE}\hlsym{);}\hspace*{\fill}\\
\hlstd{\ }\hlkwd{cudaMalloc}\hlstd{}\hlsym{((}\hlstd{}\hlkwb{void\ }\hlstd{}\hlsym{{*}{*})\ \&}\hlstd{gpu\textunderscore tmp\textunderscore lattice}\hlsym{,\ }\hlstd{LATTICE\textunderscore SIZE}\hlsym{);}\hspace*{\fill}\\
\hlstd{\ }\hlkwd{cudaMalloc}\hlstd{}\hlsym{((}\hlstd{}\hlkwb{void\ }\hlstd{}\hlsym{{*}{*})\ \&}\hlstd{gpu\textunderscore boundary}\hlsym{,\ }\hlstd{LATTICE\textunderscore LENGTH}\hlsym{);}\hspace*{\fill}\\
\hlstd{\hspace*{\fill}\\
\ }\hlkwd{cudaMemcpy}\hlstd{}\hlsym{(}\hlstd{gpu\textunderscore boundary}\hlsym{,\ }\hlstd{boundary}\hlsym{,\ }\hlstd{LATTICE\textunderscore LENGTH}\hlsym{,\ }\hlstd{cudaMemcpyHostToDevice}\hlsym{);}\hspace*{\fill}\\
\hlstd{\hspace*{\fill}\\
\ }\hlkwd{cudaMemcpyToSymbol}\hlstd{}\hlsym{(}\hlstd{gpu\textunderscore e}\hlsym{,\ }\hlstd{e}\hlsym{,\ }\hlstd{Q\ }\hlsym{{*}\ }\hlstd{DIM\ }\hlsym{{*}\ }\hlstd{}\hlkwa{sizeof}\hlstd{}\hlsym{(}\hlstd{}\hlkwb{int}\hlstd{}\hlsym{));}\hspace*{\fill}\\
\hlstd{\ }\hlkwd{cudaMemcpyToSymbol}\hlstd{}\hlsym{(}\hlstd{gpu\textunderscore weights}\hlsym{,\ }\hlstd{weights}\hlsym{,\ }\hlstd{Q\ }\hlsym{{*}\ }\hlstd{}\hlkwa{sizeof}\hlstd{}\hlsym{(}\hlstd{}\hlkwb{float}\hlstd{}\hlsym{));}\hspace*{\fill}\\
\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{\hspace*{\fill}\\
\textunderscore \textunderscore global\textunderscore \textunderscore \ }\hlkwb{void\ }\hlstd{}\hlkwd{resolve\textunderscore collisions}\hlstd{}\hlsym{(}\hlstd{}\hlkwb{float\ }\hlstd{}\hlsym{{*}\ }\hlstd{gpu\textunderscore lattice}\hlsym{,\ }\hlstd{}\hlkwb{float\ }\hlstd{}\hlsym{{*}\ }\hlstd{tmp\textunderscore lattice}\hlsym{)\ \{}\hspace*{\fill}\\
\hlstd{\ }\hlkwb{int\ }\hlstd{x\ }\hlsym{=\ }\hlstd{blockIdx}\hlsym{.}\hlstd{x\ }\hlsym{{*}\ }\hlstd{BLOCK\textunderscore DIM\ }\hlsym{+\ }\hlstd{threadIdx}\hlsym{.}\hlstd{x}\hlsym{;}\hspace*{\fill}\\
\hlstd{\ }\hlkwb{int\ }\hlstd{y\ }\hlsym{=\ }\hlstd{blockIdx}\hlsym{.}\hlstd{y}\hlstd{\ \ }\hlstd{}\hlsym{{*}\ }\hlstd{BLOCK\textunderscore DIM\ }\hlsym{+\ }\hlstd{threadIdx}\hlsym{.}\hlstd{y}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwb{int\ }\hlstd{i}\hlsym{,}\hlstd{j}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwb{int\ }\hlstd{rho}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwb{double\ }\hlstd{u}\hlsym{{[}}\hlstd{DIM}\hlsym{{]};}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwb{double\ }\hlstd{u\textunderscore squared}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwb{double\ }\hlstd{u\textunderscore dot\textunderscore e}\hlsym{{[}}\hlstd{Q}\hlsym{{]};}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwb{double\ }\hlstd{f\textunderscore eq}\hlsym{;}\hspace*{\fill}\\
\hlstd{\hspace*{\fill}\\
}\hlstd{\ \ \ \ }\hlstd{}\hlkwb{double\ }\hlstd{lattice}\hlsym{{[}}\hlstd{Q}\hlsym{{]};}\hspace*{\fill}\\
\hlstd{\hspace*{\fill}\\
}\hlstd{\ \ \ \ }\hlstd{}\hlkwa{for}\hlstd{}\hlsym{(}\hlstd{i\ }\hlsym{=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;\ }\hlstd{i\ }\hlsym{$<$\ }\hlstd{Q}\hlsym{;\ }\hlstd{i}\hlsym{++)\ \{}\hspace*{\fill}\\
\hlstd{\ lattice}\hlsym{{[}}\hlstd{i}\hlsym{{]}\ =\ }\hlstd{gpu\textunderscore lattice}\hlsym{{[}}\hlstd{y\ }\hlsym{{*}\ }\hlstd{LATTICE\textunderscore WIDTH\ }\hlsym{+\ }\hlstd{x\ }\hlsym{{*}\ }\hlstd{Q\ }\hlsym{+\ }\hlstd{i}\hlsym{{]};}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{\hspace*{\fill}\\
}\hlstd{\ \ \ \ }\hlstd{rho\ }\hlsym{=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwa{for}\hlstd{}\hlsym{(}\hlstd{i\ }\hlsym{=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;\ }\hlstd{i\ }\hlsym{$<$\ }\hlstd{Q}\hlsym{;\ }\hlstd{i}\hlsym{++)\ \{}\hspace*{\fill}\\
\hlstd{\ rho\ }\hlsym{+=\ }\hlstd{lattice}\hlsym{{[}}\hlstd{i}\hlsym{{]};}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{\hspace*{\fill}\\
}\hlstd{\ \ \ \ }\hlstd{}\hlkwa{for}\hlstd{}\hlsym{(}\hlstd{i\ }\hlsym{=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;\ }\hlstd{i\ }\hlsym{$<$\ }\hlstd{DIM}\hlsym{;\ }\hlstd{i}\hlsym{++)\ \{}\hspace*{\fill}\\
\hlstd{\ u}\hlsym{{[}}\hlstd{i}\hlsym{{]}\ =\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{\ }\hlkwa{for}\hlstd{}\hlsym{(}\hlstd{j\ }\hlsym{=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;\ }\hlstd{j\ }\hlsym{$<$\ }\hlstd{Q}\hlsym{;\ }\hlstd{j}\hlsym{++)\ \{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ }\hlstd{}\hlkwa{for}\hlstd{}\hlsym{(}\hlstd{i\ }\hlsym{=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;\ }\hlstd{i\ }\hlsym{$<$\ }\hlstd{DIM}\hlsym{;\ }\hlstd{i}\hlsym{++)\ \{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ }\hlstd{u}\hlsym{{[}}\hlstd{i}\hlsym{{]}\ +=\ }\hlstd{lattice}\hlsym{{[}}\hlstd{j}\hlsym{{]}\ {*}\ }\hlstd{gpu\textunderscore e}\hlsym{{[}}\hlstd{j\ }\hlsym{{*}\ }\hlstd{DIM\ }\hlsym{+\ }\hlstd{i}\hlsym{{]};}\hspace*{\fill}\\
\hlstd{\ }\hlsym{\}}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{\hspace*{\fill}\\
}\hlstd{\ \ \ \ }\hlstd{u\textunderscore squared\ }\hlsym{=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwa{for}\hlstd{}\hlsym{(}\hlstd{i\ }\hlsym{=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;\ }\hlstd{i\ }\hlsym{$<$\ }\hlstd{DIM}\hlsym{;\ }\hlstd{i}\hlsym{++)\ \{}\hspace*{\fill}\\
\hlstd{\ u\textunderscore squared\ }\hlsym{+=\ }\hlstd{u}\hlsym{{[}}\hlstd{i}\hlsym{{]}\ {*}\ }\hlstd{u}\hlsym{{[}}\hlstd{i}\hlsym{{]};}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{\hspace*{\fill}\\
}\hlstd{\ \ \ \ }\hlstd{}\hlkwa{for}\hlstd{}\hlsym{(}\hlstd{i\ }\hlsym{=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;\ }\hlstd{i\ }\hlsym{$<$\ }\hlstd{Q}\hlsym{;\ }\hlstd{i}\hlsym{++)\ \{}\hspace*{\fill}\\
\hlstd{\ u\textunderscore dot\textunderscore e}\hlsym{{[}}\hlstd{i}\hlsym{{]}\ =\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwa{for}\hlstd{}\hlsym{(}\hlstd{i\ }\hlsym{=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;\ }\hlstd{i\ }\hlsym{$<$\ }\hlstd{Q}\hlsym{;\ }\hlstd{i}\hlsym{++)\ \{}\hspace*{\fill}\\
\hlstd{\ }\hlkwa{for}\hlstd{}\hlsym{(}\hlstd{j\ }\hlsym{=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;\ }\hlstd{j\ }\hlsym{$<$\ }\hlstd{DIM}\hlsym{;\ }\hlstd{j}\hlsym{++)\ \{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ }\hlstd{u\textunderscore dot\textunderscore e}\hlsym{{[}}\hlstd{i}\hlsym{{]}\ +=\ }\hlstd{u}\hlsym{{[}}\hlstd{j}\hlsym{{]}\ {*}\ }\hlstd{gpu\textunderscore e}\hlsym{{[}}\hlstd{i\ }\hlsym{{*}\ }\hlstd{DIM\ }\hlsym{+\ }\hlstd{j}\hlsym{{]};}\hspace*{\fill}\\
\hlstd{\ }\hlsym{\}}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{\hspace*{\fill}\\
}\hlstd{\ \ \ \ }\hlstd{}\hlkwa{for}\hlstd{}\hlsym{(}\hlstd{i\ }\hlsym{=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;\ }\hlstd{i\ }\hlsym{$<$\ }\hlstd{Q}\hlsym{;\ }\hlstd{i}\hlsym{++)\ \{}\hspace*{\fill}\\
\hlstd{\ f\textunderscore eq\ }\hlsym{=\ }\hlstd{gpu\textunderscore weights}\hlsym{{[}}\hlstd{i}\hlsym{{]}\ {*}\ (}\hlstd{rho\ }\hlsym{{-}\ }\hlstd{}\hlnum{1.5\ }\hlstd{}\hlsym{{*}\ }\hlstd{u\textunderscore squared\ }\hlsym{+\ }\hlstd{}\hlnum{3\ }\hlstd{}\hlsym{{*}\ }\hlstd{u\textunderscore dot\textunderscore e}\hlsym{{[}}\hlstd{i}\hlsym{{]}\ +}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ }\hlstd{}\hlnum{4.5\ }\hlstd{}\hlsym{{*}\ }\hlstd{u\textunderscore dot\textunderscore e}\hlsym{{[}}\hlstd{i}\hlsym{{]}\ {*}\ }\hlstd{u\textunderscore dot\textunderscore e}\hlsym{{[}}\hlstd{i}\hlsym{{]});}\hspace*{\fill}\\
\hlstd{\ tmp\textunderscore lattice}\hlsym{{[}}\hlstd{y\ }\hlsym{{*}\ }\hlstd{LATTICE\textunderscore WIDTH\ }\hlsym{+\ }\hlstd{x\ }\hlsym{{*}\ }\hlstd{Q\ }\hlsym{+\ }\hlstd{i}\hlsym{{]}\ =\ (}\hlstd{}\hlnum{1.0\ }\hlstd{}\hlsym{{-}\ }\hlstd{OMEGA}\hlsym{)\ {*}\ }\hlstd{lattice}\hlsym{{[}}\hlstd{i}\hlsym{{]}\ +}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{OMEGA\ }\hlsym{{*}\ }\hlstd{f\textunderscore eq}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{\hspace*{\fill}\\
\textunderscore \textunderscore global\textunderscore \textunderscore \ }\hlkwb{void\ }\hlstd{}\hlkwd{propagate}\hlstd{}\hlsym{(}\hlstd{}\hlkwb{float\ }\hlstd{}\hlsym{{*}\ }\hlstd{gpu\textunderscore lattice}\hlsym{,\ }\hlstd{}\hlkwb{float\ }\hlstd{}\hlsym{{*}\ }\hlstd{gpu\textunderscore tmp\textunderscore lattice}\hlsym{,}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ }\hlstd{}\hlkwb{int\ }\hlstd{}\hlsym{{*}\ }\hlstd{gpu\textunderscore boundary}\hlsym{)\ \{}\hspace*{\fill}\\
\hlstd{\ }\hlkwb{int\ }\hlstd{x\ }\hlsym{=\ }\hlstd{blockIdx}\hlsym{.}\hlstd{x\ }\hlsym{{*}\ }\hlstd{BLOCK\textunderscore DIM\ }\hlsym{+\ }\hlstd{threadIdx}\hlsym{.}\hlstd{x}\hlsym{;}\hspace*{\fill}\\
\hlstd{\ }\hlkwb{int\ }\hlstd{y\ }\hlsym{=\ }\hlstd{blockIdx}\hlsym{.}\hlstd{y}\hlstd{\ \ }\hlstd{}\hlsym{{*}\ }\hlstd{BLOCK\textunderscore DIM\ }\hlsym{+\ }\hlstd{threadIdx}\hlsym{.}\hlstd{y}\hlsym{;}\hspace*{\fill}\\
\hlstd{\ }\hlkwb{int\ }\hlstd{i}\hlsym{,\ }\hlstd{e\textunderscore x}\hlsym{,\ }\hlstd{e\textunderscore y}\hlsym{,\ }\hlstd{new\textunderscore x}\hlsym{,\ }\hlstd{new\textunderscore y}\hlsym{,\ }\hlstd{new\textunderscore i}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwa{for}\hlstd{}\hlsym{(}\hlstd{i\ }\hlsym{=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;\ }\hlstd{i\ }\hlsym{$<$\ }\hlstd{Q}\hlsym{;\ }\hlstd{i}\hlsym{++)\ \{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{e\textunderscore x\ }\hlsym{=\ }\hlstd{gpu\textunderscore e}\hlsym{{[}}\hlstd{i\ }\hlsym{{*}\ }\hlstd{DIM}\hlsym{{]};}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{e\textunderscore y\ }\hlsym{=\ }\hlstd{gpu\textunderscore e}\hlsym{{[}}\hlstd{i\ }\hlsym{{*}\ }\hlstd{DIM\ }\hlsym{+\ }\hlstd{}\hlnum{1}\hlstd{}\hlsym{{]};}\hspace*{\fill}\\
\hlstd{}\hlcom{/{*}}\hlstd{\ \ \ \ \ \ }\hlcom{new\textunderscore x\ =\ (x\ +\ e\textunderscore x\ +\ LATTICE\textunderscore WIDTH)\ \%\ LATTICE\textunderscore WIDTH;{*}/}\hlstd{}\hspace*{\fill}\\
\hlcom{/{*}}\hlstd{\ \ \ \ \ \ }\hlcom{new\textunderscore y\ =\ (y\ +\ e\textunderscore y\ +\ LATTICE\textunderscore HEIGHT)\ \%\ LATTICE\textunderscore HEIGHT;{*}/}\hlstd{\hspace*{\fill}\\
}\hlstd{\ \ \ \ }\hlstd{new\textunderscore x\ }\hlsym{=\ }\hlstd{x\ }\hlsym{+\ }\hlstd{e\textunderscore x}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{new\textunderscore y\ }\hlsym{=\ }\hlstd{y\ }\hlsym{+\ }\hlstd{e\textunderscore y}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{new\textunderscore i\ }\hlsym{=\ (}\hlstd{i\ }\hlsym{+\ }\hlstd{gpu\textunderscore boundary}\hlsym{{[}}\hlstd{y\ }\hlsym{{*}\ }\hlstd{LATTICE\textunderscore WIDTH\ }\hlsym{+\ }\hlstd{x}\hlsym{{]}{*}(}\hlstd{}\hlnum{2\ }\hlstd{}\hlsym{+\ (}\hlstd{}\hlnum{1\ }\hlstd{}\hlsym{\&\ (}\hlstd{i}\hlsym{{*}}\hlstd{}\hlnum{4}\hlstd{}\hlsym{/}\hlstd{Q}\hlsym{){*}}\hlstd{}\hlnum{3}\hlstd{}\hlsym{)))\ \%\ }\hlstd{Q}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwa{if}\hlstd{}\hlsym{(}\hlstd{new\textunderscore x\ }\hlsym{$>$=\ }\hlstd{}\hlnum{0\ }\hlstd{}\hlsym{\&\&\ }\hlstd{new\textunderscore y\ }\hlsym{$>$=\ }\hlstd{}\hlnum{0\ }\hlstd{}\hlsym{\&\&\ }\hlstd{new\textunderscore x\ }\hlsym{$<$\ }\hlstd{LATTICE\textunderscore WIDTH\ }\hlsym{\&\&}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{new\textunderscore y\ }\hlsym{$<$\ }\hlstd{LATTICE\textunderscore HEIGHT}\hlsym{)\ \{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwa{if}\hlstd{}\hlsym{(}\hlstd{gpu\textunderscore tmp\textunderscore lattice}\hlsym{{[}}\hlstd{y\ }\hlsym{{*}\ }\hlstd{LATTICE\textunderscore WIDTH\ }\hlsym{+\ }\hlstd{x\ }\hlsym{{*}\ }\hlstd{Q\ }\hlsym{+\ }\hlstd{new\textunderscore i}\hlsym{{]}\ $>$\ }\hlstd{}\hlnum{1.0}\hlstd{}\hlsym{/}\hlstd{}\hlnum{3.0}\hlstd{}\hlsym{)\ \{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{gpu\textunderscore lattice}\hlsym{{[}}\hlstd{new\textunderscore y\ }\hlsym{{*}\ }\hlstd{LATTICE\textunderscore WIDTH\ }\hlsym{+\ }\hlstd{new\textunderscore x\ }\hlsym{{*}\ }\hlstd{Q\ }\hlsym{+\ }\hlstd{new\textunderscore i}\hlsym{{]}\ =\ }\hlstd{}\hlnum{1.0}\hlstd{}\hlsym{/}\hlstd{}\hlnum{3.0}\hlstd{}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwa{else\ }\hlstd{}\hlsym{\{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{gpu\textunderscore lattice}\hlsym{{[}}\hlstd{new\textunderscore y\ }\hlsym{{*}\ }\hlstd{LATTICE\textunderscore WIDTH\ }\hlsym{+\ }\hlstd{new\textunderscore x\ }\hlsym{{*}\ }\hlstd{Q\ }\hlsym{+}\hlstd{new\textunderscore i}\hlsym{{]}\ =}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ }\hlstd{gpu\textunderscore tmp\textunderscore lattice}\hlsym{{[}}\hlstd{y\ }\hlsym{{*}\ }\hlstd{LATTICE\textunderscore WIDTH\ }\hlsym{+\ }\hlstd{x\ }\hlsym{{*}\ }\hlstd{Q\ }\hlsym{+\ }\hlstd{i}\hlsym{{]};}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{}\hspace*{\fill}\\
\hlkwb{void\ }\hlstd{}\hlkwd{next}\hlstd{}\hlsym{(\ )\ \{}\hspace*{\fill}\\
\hlstd{}\hlslc{//\ cudaMemcpy(gpu\textunderscore lattice,\ lattice,\ LATTICE\textunderscore SIZE,\ cudaMemcpyHostToDevice);}\hspace*{\fill}\\
\hlstd{}\hlslc{//\ cudaMemcpy(gpu\textunderscore tmp\textunderscore lattice,\ tmp\textunderscore lattice,\ LATTICE\textunderscore SIZE,\ cudaMemcpyHostToDevice);}\hspace*{\fill}\\
\hlstd{\hspace*{\fill}\\
\ resolve\textunderscore collisions}\hlsym{$<$$<$$<$}\hlstd{grid}\hlsym{,\ }\hlstd{block}\hlsym{$>$$>$$>$(}\hlstd{gpu\textunderscore lattice}\hlsym{,\ }\hlstd{gpu\textunderscore tmp\textunderscore lattice}\hlsym{);}\hspace*{\fill}\\
\hlstd{\ propagate}\hlsym{$<$$<$$<$}\hlstd{grid}\hlsym{,\ }\hlstd{block}\hlsym{$>$$>$$>$(}\hlstd{gpu\textunderscore lattice}\hlsym{,\ }\hlstd{gpu\textunderscore tmp\textunderscore lattice}\hlsym{,\ }\hlstd{gpu\textunderscore boundary}\hlsym{);}\hspace*{\fill}\\
\hlstd{}\hlslc{//\ cudaMemcpy(lattice,\ gpu\textunderscore lattice,\ LATTICE\textunderscore SIZE,\ cudaMemcpyDeviceToHost);}\hspace*{\fill}\\
\hlstd{}\hlslc{//\ cudaMemcpy(tmp\textunderscore lattice,\ gpu\textunderscore tmp\textunderscore lattice,\ LATTICE\textunderscore SIZE,\ cudaMemcpyDeviceToHost);}\hspace*{\fill}\\
\hlstd{}\hspace*{\fill}\\
\hspace*{\fill}\\
\hlsym{\}}\hspace*{\fill}\\
\hlstd{}\hspace*{\fill}\\
\hlkwb{void\ }\hlstd{}\hlkwd{display}\hlstd{}\hlsym{(\ )\ \{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwb{int\ }\hlstd{x}\hlsym{,\ }\hlstd{y}\hlsym{,\ }\hlstd{i}\hlsym{,\ }\hlstd{j}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwb{int\ }\hlstd{v\textunderscore x}\hlsym{,\ }\hlstd{v\textunderscore y}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwb{double\ }\hlstd{slope}\hlsym{{[}}\hlstd{DIM}\hlsym{{]};}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwb{double\ }\hlstd{intensity}\hlsym{;}\hspace*{\fill}\\
\hlstd{\hspace*{\fill}\\
}\hlstd{\ \ \ \ }\hlstd{}\hlkwd{glClear}\hlstd{}\hlsym{(}\hlstd{GL\textunderscore COLOR\textunderscore BUFFER\textunderscore BIT\ }\hlsym{\textbar \ }\hlstd{GL\textunderscore DEPTH\textunderscore BUFFER\textunderscore BIT}\hlsym{);}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwd{glLoadIdentity}\hlstd{}\hlsym{(\ );}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwd{glPointSize}\hlstd{}\hlsym{(}\hlstd{POINT\textunderscore SIZE}\hlsym{);}\hspace*{\fill}\\
\hlstd{\hspace*{\fill}\\
}\hlstd{\ \ \ \ }\hlstd{}\hlkwd{glColor3f}\hlstd{}\hlsym{(}\hlstd{}\hlnum{0.0}\hlstd{}\hlsym{,\ }\hlstd{}\hlnum{1.0}\hlstd{}\hlsym{,\ }\hlstd{}\hlnum{0.0}\hlstd{}\hlsym{);}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwd{glBegin}\hlstd{}\hlsym{(}\hlstd{GL\textunderscore POINTS}\hlsym{);}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{for}\hlstd{}\hlsym{(}\hlstd{y\ }\hlsym{=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;\ }\hlstd{y\ }\hlsym{$<$\ }\hlstd{LATTICE\textunderscore HEIGHT}\hlsym{;\ }\hlstd{y}\hlsym{++)\ \{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{for}\hlstd{}\hlsym{(}\hlstd{x\ }\hlsym{=\ }\hlstd{X\textunderscore CUTOFF}\hlsym{;\ }\hlstd{x\ }\hlsym{$<$\ }\hlstd{LATTICE\textunderscore WIDTH}\hlsym{;\ }\hlstd{x}\hlsym{++)\ \{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{if}\hlstd{}\hlsym{(}\hlstd{boundary}\hlsym{{[}}\hlstd{y\ }\hlsym{{*}\ }\hlstd{LATTICE\textunderscore WIDTH\ }\hlsym{+\ }\hlstd{x}\hlsym{{]})\ \{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwd{glVertex3f}\hlstd{}\hlsym{(}\hlstd{x}\hlsym{,\ }\hlstd{y}\hlsym{,\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{);}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwd{glEnd}\hlstd{}\hlsym{(\ );}\hspace*{\fill}\\
\hlstd{\hspace*{\fill}\\
}\hlstd{\ \ \ \ }\hlstd{}\hlkwa{for\ }\hlstd{}\hlsym{(}\hlstd{x\ }\hlsym{=\ }\hlstd{X\textunderscore CUTOFF}\hlsym{;\ }\hlstd{x\ }\hlsym{$<$\ }\hlstd{LATTICE\textunderscore WIDTH}\hlsym{;\ }\hlstd{x\ }\hlsym{+=\ }\hlstd{VECTOR\textunderscore SPACING}\hlsym{)\ \{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{for\ }\hlstd{}\hlsym{(}\hlstd{y\ }\hlsym{=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;\ }\hlstd{y\ }\hlsym{$<$\ }\hlstd{LATTICE\textunderscore HEIGHT}\hlsym{;\ }\hlstd{y\ }\hlsym{+=\ }\hlstd{VECTOR\textunderscore SPACING}\hlsym{)\ \{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{intensity\ }\hlsym{=\ }\hlstd{}\hlnum{0.0}\hlstd{}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{for}\hlstd{}\hlsym{(}\hlstd{j\ }\hlsym{=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;\ }\hlstd{j\ }\hlsym{$<$\ }\hlstd{DIM}\hlsym{;\ }\hlstd{j}\hlsym{++)\ \{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{slope}\hlsym{{[}}\hlstd{j}\hlsym{{]}\ =\ }\hlstd{}\hlnum{0.0}\hlstd{}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{for}\hlstd{}\hlsym{(}\hlstd{v\textunderscore x\ }\hlsym{=\ }\hlstd{x}\hlsym{;\ }\hlstd{v\textunderscore x\ }\hlsym{$<$\ }\hlstd{x\ }\hlsym{+\ }\hlstd{VECTOR\textunderscore SPACING}\hlsym{;\ }\hlstd{v\textunderscore x}\hlsym{++)\ \{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{for}\hlstd{}\hlsym{(}\hlstd{v\textunderscore y\ }\hlsym{=\ }\hlstd{y}\hlsym{;\ }\hlstd{v\textunderscore y\ }\hlsym{$<$\ }\hlstd{y\ }\hlsym{+\ }\hlstd{VECTOR\textunderscore SPACING}\hlsym{;\ }\hlstd{v\textunderscore y}\hlsym{++)\ \{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{for}\hlstd{}\hlsym{(}\hlstd{i\ }\hlsym{=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;\ }\hlstd{i\ }\hlsym{$<$\ }\hlstd{Q}\hlsym{;\ }\hlstd{i}\hlsym{++)\ \{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{for}\hlstd{}\hlsym{(}\hlstd{j\ }\hlsym{=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;\ }\hlstd{j\ }\hlsym{$<$\ }\hlstd{DIM}\hlsym{;\ }\hlstd{j}\hlsym{++)\ \{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{intensity\ }\hlsym{+=\ }\hlstd{lattice}\hlsym{{[}}\hlstd{v\textunderscore y\ }\hlsym{{*}\ }\hlstd{LATTICE\textunderscore WIDTH\ }\hlsym{+\ }\hlstd{v\textunderscore x\ }\hlsym{{*}\ }\hlstd{Q\ }\hlsym{+\ }\hlstd{i}\hlsym{{]};}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{slope}\hlsym{{[}}\hlstd{j}\hlsym{{]}\ +=\ }\hlstd{e}\hlsym{{[}}\hlstd{i\ }\hlsym{{*}\ }\hlstd{DIM\ }\hlsym{+\ }\hlstd{j}\hlsym{{]}\ {*}\ }\hlstd{lattice}\hlsym{{[}}\hlstd{v\textunderscore y\ }\hlsym{{*}\ }\hlstd{LATTICE\textunderscore WIDTH\ }\hlsym{+\ }\hlstd{v\textunderscore x\ }\hlsym{{*}\ }\hlstd{Q\ }\hlsym{+\ }\hlstd{i}\hlsym{{]};}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{\hspace*{\fill}\\
}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{for}\hlstd{}\hlsym{(}\hlstd{j\ }\hlsym{=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;\ }\hlstd{j\ }\hlsym{$<$\ }\hlstd{DIM}\hlsym{;\ }\hlstd{j}\hlsym{++)\ \{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{slope}\hlsym{{[}}\hlstd{j}\hlsym{{]}\ /=\ }\hlstd{}\hlnum{0.5\ }\hlstd{}\hlsym{{*}\ }\hlstd{VECTOR\textunderscore SPACING}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{if}\hlstd{}\hlsym{(}\hlstd{slope}\hlsym{{[}}\hlstd{DIM}\hlsym{{-}}\hlstd{}\hlnum{1}\hlstd{}\hlsym{{]}\ $<$\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{)\ \{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwd{glColor3f}\hlstd{}\hlsym{(}\hlstd{}\hlnum{0.25\ }\hlstd{}\hlsym{+\ }\hlstd{intensity}\hlsym{,\ }\hlstd{intensity}\hlsym{,\ }\hlstd{intensity}\hlsym{/}\hlstd{}\hlnum{3}\hlstd{}\hlsym{);}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{else\ }\hlstd{}\hlsym{\{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwd{glColor3f}\hlstd{}\hlsym{(}\hlstd{intensity}\hlsym{/}\hlstd{}\hlnum{3}\hlstd{}\hlsym{,\ }\hlstd{intensity}\hlsym{,\ }\hlstd{}\hlnum{0.25\ }\hlstd{}\hlsym{+\ }\hlstd{intensity}\hlsym{);}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwd{glBegin}\hlstd{}\hlsym{(}\hlstd{GL\textunderscore LINES}\hlsym{);}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwd{glVertex3f}\hlstd{}\hlsym{(}\hlstd{x}\hlsym{,\ }\hlstd{y}\hlsym{,\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{);}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwd{glVertex3f}\hlstd{}\hlsym{(}\hlstd{x\ }\hlsym{+\ }\hlstd{slope}\hlsym{{[}}\hlstd{}\hlnum{0}\hlstd{}\hlsym{{]},\ }\hlstd{y\ }\hlsym{+\ }\hlstd{slope}\hlsym{{[}}\hlstd{}\hlnum{1}\hlstd{}\hlsym{{]},\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{);}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwd{glEnd}\hlstd{}\hlsym{(\ );}\hspace*{\fill}\\
\hlstd{\hspace*{\fill}\\
}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwd{glPointSize}\hlstd{}\hlsym{(}\hlstd{POINT\textunderscore SIZE}\hlsym{/}\hlstd{}\hlnum{3}\hlstd{}\hlsym{);}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwd{glVertex3f}\hlstd{}\hlsym{(}\hlstd{intensity}\hlsym{,\ }\hlstd{intensity}\hlsym{,\ }\hlstd{intensity}\hlsym{);}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwd{glBegin}\hlstd{}\hlsym{(}\hlstd{GL\textunderscore POINTS}\hlsym{);}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwd{glVertex3f}\hlstd{}\hlsym{(}\hlstd{x}\hlsym{,}\hlstd{y}\hlsym{,}\hlstd{}\hlnum{0}\hlstd{}\hlsym{);}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwd{glEnd}\hlstd{}\hlsym{(\ );}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{\hspace*{\fill}\\
}\hlstd{\ \ \ \ }\hlstd{}\hlkwd{glutSwapBuffers}\hlstd{}\hlsym{(\ );}\hspace*{\fill}\\
\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{}\hspace*{\fill}\\
\hlkwb{void\ }\hlstd{}\hlkwd{idle}\hlstd{}\hlsym{(\ )\ \{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwb{int\ }\hlstd{i}\hlsym{,\ }\hlstd{j}\hlsym{,\ }\hlstd{k}\hlsym{;}\hspace*{\fill}\\
\hlstd{\hspace*{\fill}\\
}\hlstd{\ \ \ \ }\hlstd{}\hlkwa{for\ }\hlstd{}\hlsym{(}\hlstd{i\ }\hlsym{=\ }\hlstd{}\hlnum{2}\hlstd{}\hlsym{;\ }\hlstd{i\ }\hlsym{$<$\ }\hlstd{X\textunderscore CUTOFF}\hlsym{;\ }\hlstd{i}\hlsym{++)\ \{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{for\ }\hlstd{}\hlsym{(}\hlstd{j\ }\hlsym{=\ }\hlstd{LATTICE\textunderscore HEIGHT}\hlsym{/}\hlstd{}\hlnum{2\ }\hlstd{}\hlsym{{-}\ }\hlstd{X\textunderscore CUTOFF}\hlsym{;\ }\hlstd{j\ }\hlsym{$<$\ }\hlstd{LATTICE\textunderscore HEIGHT}\hlsym{/}\hlstd{}\hlnum{2\ }\hlstd{}\hlsym{+\ }\hlstd{X\textunderscore CUTOFF}\hlsym{;\ }\hlstd{j}\hlsym{++)\ \{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{lattice}\hlsym{{[}}\hlstd{j\ }\hlsym{{*}\ }\hlstd{LATTICE\textunderscore WIDTH\ }\hlsym{+\ }\hlstd{i\ }\hlsym{{*}\ }\hlstd{Q\ }\hlsym{+\ }\hlstd{}\hlnum{1}\hlstd{}\hlsym{{]}\ =\ }\hlstd{}\hlnum{0.25}\hlstd{}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlcom{/{*}}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlcom{lattice{[}j{]}{[}i{]}{[}5{]}\ =\ 0.05;{*}/}\hlstd{}\hspace*{\fill}\\
\hlcom{/{*}}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlcom{lattice{[}j{]}{[}i{]}{[}8{]}\ =\ 0.05;{*}/}\hlstd{\hspace*{\fill}\\
\hspace*{\fill}\\
}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{tmp\textunderscore lattice}\hlsym{{[}}\hlstd{j\ }\hlsym{{*}\ }\hlstd{LATTICE\textunderscore WIDTH\ }\hlsym{+\ }\hlstd{i\ }\hlsym{{*}\ }\hlstd{Q\ }\hlsym{+\ }\hlstd{}\hlnum{1}\hlstd{}\hlsym{{]}\ =\ }\hlstd{}\hlnum{0.25}\hlstd{}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlcom{/{*}}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlcom{tmp\textunderscore lattice{[}j{]}{[}i{]}{[}5{]}\ =\ 0.05;{*}/}\hlstd{}\hspace*{\fill}\\
\hlcom{/{*}}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlcom{tmp\textunderscore lattice{[}j{]}{[}i{]}{[}8{]}\ =\ 0.05;{*}/}\hlstd{\hspace*{\fill}\\
}\hlstd{\ \ \ \ \ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{\hspace*{\fill}\\
}\hlstd{\ \ \ \ }\hlstd{}\hlkwa{if}\hlstd{}\hlsym{(}\hlstd{step\ }\hlsym{\textbar \textbar \ !}\hlstd{step}\hlsym{)\ \{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ }\hlstd{}\hlkwd{next}\hlstd{}\hlsym{(\ );}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ }\hlstd{step\ }\hlsym{=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{\ }\hlkwd{cudaMemcpy}\hlstd{}\hlsym{(}\hlstd{lattice}\hlsym{,\ }\hlstd{gpu\textunderscore lattice}\hlsym{,\ }\hlstd{LATTICE\textunderscore SIZE}\hlsym{,\ }\hlstd{cudaMemcpyDeviceToHost}\hlsym{);}\hspace*{\fill}\\
\hlstd{\ }\hlkwd{cudaMemcpy}\hlstd{}\hlsym{(}\hlstd{tmp\textunderscore lattice}\hlsym{,\ }\hlstd{gpu\textunderscore tmp\textunderscore lattice}\hlsym{,\ }\hlstd{LATTICE\textunderscore SIZE}\hlsym{,\ }\hlstd{cudaMemcpyDeviceToHost}\hlsym{);}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwa{if}\hlstd{}\hlsym{(}\hlstd{fps\ }\hlsym{==\ }\hlstd{FPS}\hlsym{)\ \{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ }\hlstd{}\hlkwd{glutPostRedisplay}\hlstd{}\hlsym{();}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ }\hlstd{fps\ }\hlsym{{-}=\ }\hlstd{FPS}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{fps}\hlsym{++;}\hspace*{\fill}\\
\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{}\hspace*{\fill}\\
\hlkwb{void\ }\hlstd{}\hlkwd{init\textunderscore vars}\hlstd{}\hlsym{(\ )}\hspace*{\fill}\\
\hlstd{}\hlsym{\{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwb{int\ }\hlstd{i}\hlsym{,\ }\hlstd{j}\hlsym{,\ }\hlstd{k}\hlsym{,\ }\hlstd{l}\hlsym{;}\hspace*{\fill}\\
\hlstd{\hspace*{\fill}\\
}\hlstd{\ \ \ \ }\hlstd{}\hlkwa{for}\hlstd{}\hlsym{(}\hlstd{i\ }\hlsym{=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;\ }\hlstd{i\ }\hlsym{$<$\ }\hlstd{LATTICE\textunderscore WIDTH}\hlsym{;\ }\hlstd{i}\hlsym{++)\ \{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{for}\hlstd{}\hlsym{(}\hlstd{j\ }\hlsym{=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;\ }\hlstd{j\ }\hlsym{$<$\ }\hlstd{LATTICE\textunderscore HEIGHT}\hlsym{;\ }\hlstd{j}\hlsym{++)\ \{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{boundary}\hlsym{{[}}\hlstd{i\ }\hlsym{{*}\ }\hlstd{LATTICE\textunderscore WIDTH\ }\hlsym{+\ }\hlstd{j}\hlsym{{]}\ =\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{for}\hlstd{}\hlsym{(}\hlstd{k\ }\hlsym{=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;\ }\hlstd{k\ }\hlsym{$<$\ }\hlstd{Q}\hlsym{;\ }\hlstd{k}\hlsym{++)\ \{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{lattice}\hlsym{{[}}\hlstd{j\ }\hlsym{{*}\ }\hlstd{LATTICE\textunderscore WIDTH\ }\hlsym{+\ }\hlstd{i\ }\hlsym{{*}\ }\hlstd{Q\ }\hlsym{+\ }\hlstd{k}\hlsym{{]}\ =\ }\hlstd{}\hlnum{0.10}\hlstd{}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{tmp\textunderscore lattice}\hlsym{{[}}\hlstd{j\ }\hlsym{{*}\ }\hlstd{LATTICE\textunderscore WIDTH\ }\hlsym{+\ }\hlstd{i\ }\hlsym{{*}\ }\hlstd{Q\ }\hlsym{+\ }\hlstd{k}\hlsym{{]}\ =\ }\hlstd{}\hlnum{0.10}\hlstd{}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{}\hspace*{\fill}\\
\hlcom{/{*}}\hlstd{\ \ \ \ }\hlcom{for\ (i\ =\ 0;\ i\ $<$\ X\textunderscore CUTOFF;\ i++)\ \{{*}/}\hlstd{}\hspace*{\fill}\\
\hlcom{/{*}}\hlstd{\ \ \ \ \ \ \ \ }\hlcom{for\ (j\ =\ 0;\ j\ $<$\ LATTICE\textunderscore HEIGHT;\ j++)\ \{{*}/}\hlstd{}\hspace*{\fill}\\
\hlcom{/{*}}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlcom{for(k\ =\ 0;\ k\ $<$\ Q;\ k++)\ \{{*}/}\hlstd{}\hspace*{\fill}\\
\hlcom{/{*}}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlcom{lattice{[}j{]}{[}i{]}{[}k{]}\ =\ 0.2;{*}/}\hlstd{}\hspace*{\fill}\\
\hlcom{/{*}}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlcom{tmp\textunderscore lattice{[}j{]}{[}i{]}{[}k{]}\ =\ 0.2;{*}/}\hlstd{}\hspace*{\fill}\\
\hlcom{/{*}}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlcom{\}{*}/}\hlstd{}\hspace*{\fill}\\
\hlcom{/{*}}\hlstd{\ \ \ \ \ \ \ \ }\hlcom{\}{*}/}\hlstd{}\hspace*{\fill}\\
\hlcom{/{*}}\hlstd{\ \ \ \ }\hlcom{\}{*}/}\hlstd{}\hspace*{\fill}\\
\hspace*{\fill}\\
\hlcom{/{*}}\hlstd{\ \ \ \ }\hlcom{for(i\ =\ LATTICE\textunderscore HEIGHT/3;\ i\ $<$\ 3{*}LATTICE\textunderscore WIDTH/4;\ i++)\ \{{*}/}\hlstd{}\hspace*{\fill}\\
\hlcom{/{*}}\hlstd{\ \ \ \ \ \ \ \ }\hlcom{for(j\ =\ LATTICE\textunderscore WIDTH/3;\ j\ $<$\ 3{*}LATTICE\textunderscore HEIGHT/4;\ j++)\ \{{*}/}\hlstd{}\hspace*{\fill}\\
\hlcom{/{*}}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlcom{for(k\ =\ 0;\ k\ $<$\ Q;\ k++)\ \{{*}/}\hlstd{}\hspace*{\fill}\\
\hlcom{/{*}}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlcom{lattice{[}j{]}{[}i{]}{[}k{]}\ =\ 0.2;{*}/}\hlstd{}\hspace*{\fill}\\
\hlcom{/{*}}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlcom{tmp\textunderscore lattice{[}j{]}{[}i{]}{[}k{]}\ =\ 0.2;{*}/}\hlstd{}\hspace*{\fill}\\
\hlcom{/{*}}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlcom{\}{*}/}\hlstd{}\hspace*{\fill}\\
\hlcom{/{*}}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlcom{lattice{[}j{]}{[}i{]}{[}1{]}\ =\ 0.2;{*}/}\hlstd{}\hspace*{\fill}\\
\hlcom{/{*}}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlcom{tmp\textunderscore lattice{[}j{]}{[}i{]}{[}1{]}\ =\ 0.2;{*}/}\hlstd{}\hspace*{\fill}\\
\hlcom{/{*}}\hlstd{\ \ \ \ \ \ \ \ }\hlcom{\}{*}/}\hlstd{}\hspace*{\fill}\\
\hlcom{/{*}}\hlstd{\ \ \ \ }\hlcom{\}{*}/}\hlstd{}\hspace*{\fill}\\
\hspace*{\fill}\\
\hlcom{/{*}}\hlstd{\ \ \ \ }\hlcom{for(i\ =\ LATTICE\textunderscore HEIGHT/6;\ i\ $<$\ LATTICE\textunderscore WIDTH/3;\ i++)\ \{{*}/}\hlstd{}\hspace*{\fill}\\
\hlcom{/{*}}\hlstd{\ \ \ \ \ \ \ \ }\hlcom{for(j\ =\ LATTICE\textunderscore WIDTH/6;\ j\ $<$\ LATTICE\textunderscore HEIGHT/3;\ j++)\ \{{*}/}\hlstd{}\hspace*{\fill}\\
\hlcom{/{*}}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlcom{for(k\ =\ 0;\ k\ $<$\ Q;\ k++)\ \{{*}/}\hlstd{}\hspace*{\fill}\\
\hlcom{/{*}}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlcom{lattice{[}i{]}{[}j{]}{[}k{]}\ =\ 1;{*}/}\hlstd{}\hspace*{\fill}\\
\hlcom{/{*}}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlcom{\}{*}/}\hlstd{}\hspace*{\fill}\\
\hlcom{/{*}}\hlstd{\ \ \ \ \ \ \ \ }\hlcom{\}{*}/}\hlstd{}\hspace*{\fill}\\
\hlcom{/{*}}\hlstd{\ \ \ \ }\hlcom{\}{*}/}\hlstd{\hspace*{\fill}\\
\hspace*{\fill}\\
}\hlstd{\ \ \ \ }\hlstd{}\hlkwb{int\ }\hlstd{x}\hlsym{,\ }\hlstd{y}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwb{double\ }\hlstd{d\textunderscore theta\ }\hlsym{=\ }\hlstd{}\hlnum{0.01}\hlstd{}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwb{double\ }\hlstd{theta\ }\hlsym{=\ }\hlstd{d\textunderscore theta}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwb{int\ }\hlstd{radius\ }\hlsym{=\ }\hlstd{}\hlnum{12}\hlstd{}\hlsym{;}\hspace*{\fill}\\
\hlstd{\hspace*{\fill}\\
}\hlstd{\ \ \ \ }\hlstd{}\hlkwa{for}\hlstd{}\hlsym{(}\hlstd{i\ }\hlsym{=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;\ }\hlstd{i\ }\hlsym{$<$\ }\hlstd{}\hlnum{2}\hlstd{}\hlsym{{*}}\hlstd{M\textunderscore PI}\hlsym{/}\hlstd{d\textunderscore theta}\hlsym{;\ }\hlstd{i}\hlsym{++,\ }\hlstd{theta\ }\hlsym{+=\ }\hlstd{d\textunderscore theta}\hlsym{)\ \{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{for}\hlstd{}\hlsym{(}\hlstd{j\ }\hlsym{=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;\ }\hlstd{j\ }\hlsym{$<$\ }\hlstd{radius}\hlsym{;\ }\hlstd{j}\hlsym{++)\ \{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{for}\hlstd{}\hlsym{(}\hlstd{k\ }\hlsym{=\ }\hlstd{}\hlnum{1}\hlstd{}\hlsym{;\ }\hlstd{k\ }\hlsym{$<$\ }\hlstd{}\hlnum{1}\hlstd{}\hlsym{;\ }\hlstd{k}\hlsym{++)\ \{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{x\ }\hlsym{=\ }\hlstd{k}\hlsym{{*}}\hlstd{LATTICE\textunderscore WIDTH}\hlsym{/}\hlstd{}\hlnum{6\ }\hlstd{}\hlsym{+\ }\hlstd{j\ }\hlsym{{*}\ }\hlstd{}\hlkwd{cos}\hlstd{}\hlsym{(}\hlstd{theta}\hlsym{);}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{y\ }\hlsym{=\ }\hlstd{k}\hlsym{{*}}\hlstd{LATTICE\textunderscore HEIGHT}\hlsym{/}\hlstd{}\hlnum{3\ }\hlstd{}\hlsym{+\ }\hlstd{j\ }\hlsym{{*}\ }\hlstd{}\hlkwd{sin}\hlstd{}\hlsym{(}\hlstd{theta}\hlsym{);}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{boundary}\hlsym{{[}}\hlstd{y\ }\hlsym{{*}\ }\hlstd{LATTICE\textunderscore WIDTH\ }\hlsym{+\ }\hlstd{x}\hlsym{{]}\ =\ }\hlstd{}\hlnum{1}\hlstd{}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{for}\hlstd{}\hlsym{(}\hlstd{l\ }\hlsym{=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;\ }\hlstd{l\ }\hlsym{$<$\ }\hlstd{Q}\hlsym{;\ }\hlstd{l}\hlsym{++)\ \{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{lattice}\hlsym{{[}}\hlstd{y\ }\hlsym{{*}\ }\hlstd{LATTICE\textunderscore WIDTH\ }\hlsym{+\ }\hlstd{x\ }\hlsym{{*}\ }\hlstd{Q\ }\hlsym{+\ }\hlstd{l}\hlsym{{]}\ =\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{tmp\textunderscore lattice}\hlsym{{[}}\hlstd{y\ }\hlsym{{*}\ }\hlstd{LATTICE\textunderscore WIDTH\ }\hlsym{+\ }\hlstd{x\ }\hlsym{{*}\ }\hlstd{Q\ }\hlsym{+\ }\hlstd{l}\hlsym{{]}\ =\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{\hspace*{\fill}\\
}\hlstd{\ \ \ \ }\hlstd{}\hlkwa{for}\hlstd{}\hlsym{(}\hlstd{i\ }\hlsym{=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;\ }\hlstd{i\ }\hlsym{$<$\ }\hlstd{}\hlnum{2}\hlstd{}\hlsym{{*}}\hlstd{M\textunderscore PI}\hlsym{/}\hlstd{d\textunderscore theta}\hlsym{;\ }\hlstd{i}\hlsym{++,\ }\hlstd{theta\ }\hlsym{+=\ }\hlstd{d\textunderscore theta}\hlsym{)\ \{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{for}\hlstd{}\hlsym{(}\hlstd{j\ }\hlsym{=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;\ }\hlstd{j\ }\hlsym{$<$\ }\hlstd{radius}\hlsym{;\ }\hlstd{j}\hlsym{++)\ \{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{x\ }\hlsym{=\ }\hlstd{LATTICE\textunderscore WIDTH}\hlsym{/}\hlstd{}\hlnum{2\ }\hlstd{}\hlsym{+\ }\hlstd{j\ }\hlsym{{*}\ }\hlstd{}\hlkwd{cos}\hlstd{}\hlsym{(}\hlstd{theta}\hlsym{);}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{y\ }\hlsym{=\ }\hlstd{LATTICE\textunderscore HEIGHT}\hlsym{/}\hlstd{}\hlnum{2\ }\hlstd{}\hlsym{+\ }\hlstd{j\ }\hlsym{{*}\ }\hlstd{}\hlkwd{sin}\hlstd{}\hlsym{(}\hlstd{theta}\hlsym{);}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{boundary}\hlsym{{[}}\hlstd{y\ }\hlsym{{*}\ }\hlstd{LATTICE\textunderscore WIDTH\ }\hlsym{+\ }\hlstd{x}\hlsym{{]}\ =\ }\hlstd{}\hlnum{1}\hlstd{}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{for}\hlstd{}\hlsym{(}\hlstd{k\ }\hlsym{=\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;\ }\hlstd{k\ }\hlsym{$<$\ }\hlstd{Q}\hlsym{;\ }\hlstd{k}\hlsym{++)\ \{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{lattice}\hlsym{{[}}\hlstd{y\ }\hlsym{{*}\ }\hlstd{LATTICE\textunderscore WIDTH\ }\hlsym{+\ }\hlstd{x\ }\hlsym{{*}\ }\hlstd{Q\ }\hlsym{+\ }\hlstd{k}\hlsym{{]}\ =\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{tmp\textunderscore lattice}\hlsym{{[}}\hlstd{y\ }\hlsym{{*}\ }\hlstd{LATTICE\textunderscore WIDTH\ }\hlsym{+\ }\hlstd{x\ }\hlsym{{*}\ }\hlstd{Q\ }\hlsym{+\ }\hlstd{k}\hlsym{{]}\ =\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{}\hspace*{\fill}\\
\hlcom{/{*}}\hspace*{\fill}\\
\hlcom{}\hlstd{\ \ \ \ }\hlcom{for(x\ =\ 0;\ x\ $<$\ LATTICE\textunderscore WIDTH;\ x++)\ \{}\hspace*{\fill}\\
\hlcom{}\hlstd{\ \ \ \ \ \ \ \ }\hlcom{boundary{[}x{]}\ =\ 1;}\hspace*{\fill}\\
\hlcom{}\hlstd{\ \ \ \ \ \ \ \ }\hlcom{boundary{[}(LATTICE\textunderscore HEIGHT{-}1)\ {*}\ LATTICE\textunderscore WIDTH\ +\ x{]}\ =\ 1;}\hspace*{\fill}\\
\hlcom{}\hlstd{\ \ \ \ \ \ \ \ }\hlcom{for(k\ =\ 0;\ k\ $<$\ Q;\ k++)\ \{}\hspace*{\fill}\\
\hlcom{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlcom{lattice{[}x\ {*}\ Q\ +\ k{]}\ =\ 0;}\hspace*{\fill}\\
\hlcom{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlcom{tmp\textunderscore lattice{[}x\ {*}\ Q\ +\ k{]}\ =\ 0;}\hspace*{\fill}\\
\hlcom{}\hspace*{\fill}\\
\hlcom{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlcom{lattice{[}(LATTICE\textunderscore HEIGHT{-}1)\ {*}\ LATTICE\textunderscore WIDTH\ +\ x\ {*}\ Q\ +\ k{]}\ =\ 0;}\hspace*{\fill}\\
\hlcom{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlcom{tmp\textunderscore lattice{[}(LATTICE\textunderscore HEIGHT{-}1)\ {*}\ LATTICE\textunderscore WIDTH\ +\ x\ {*}\ Q\ +\ k{]}\ =\ 0;}\hspace*{\fill}\\
\hlcom{}\hlstd{\ \ \ \ \ \ \ \ }\hlcom{\}}\hspace*{\fill}\\
\hlcom{}\hlstd{\ \ \ \ }\hlcom{\}}\hspace*{\fill}\\
\hlcom{{*}/}\hlstd{}\hspace*{\fill}\\
\hspace*{\fill}\\
\hlcom{/{*}}\hlstd{\ \ \ \ }\hlcom{for(x\ =\ 0;\ x\ $<$\ LATTICE\textunderscore HEIGHT;\ x++)\ \{{*}/}\hlstd{}\hspace*{\fill}\\
\hlcom{/{*}}\hlstd{\ \ \ \ \ \ \ \ }\hlcom{boundary{[}x{]}\ =\ 1;{*}/}\hlstd{}\hspace*{\fill}\\
\hlcom{/{*}}\hlstd{\ \ \ \ \ \ \ \ }\hlcom{boundary{[}x{]}{[}LATTICE\textunderscore WIDTH{-}1{]}\ =\ 1;{*}/}\hlstd{}\hspace*{\fill}\\
\hlcom{/{*}}\hlstd{\ \ \ \ \ \ \ \ }\hlcom{for(k\ =\ 0;\ k\ $<$\ Q;\ k++)\ \{{*}/}\hlstd{}\hspace*{\fill}\\
\hlcom{/{*}}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlcom{lattice{[}x{]}{[}0{]}{[}k{]}\ =\ 0;{*}/}\hlstd{}\hspace*{\fill}\\
\hlcom{/{*}}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlcom{tmp\textunderscore lattice{[}x{]}{[}0{]}{[}k{]}\ =\ 0;{*}/}\hlstd{}\hspace*{\fill}\\
\hspace*{\fill}\\
\hlcom{/{*}}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlcom{lattice{[}x{]}{[}LATTICE\textunderscore WIDTH{-}1{]}{[}k{]}\ =\ 0;{*}/}\hlstd{}\hspace*{\fill}\\
\hlcom{/{*}}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlcom{tmp\textunderscore lattice{[}x{]}{[}LATTICE\textunderscore WIDTH{-}1{]}{[}k{]}\ =\ 0;{*}/}\hlstd{}\hspace*{\fill}\\
\hlcom{/{*}}\hlstd{\ \ \ \ \ \ \ \ }\hlcom{\}{*}/}\hlstd{}\hspace*{\fill}\\
\hlcom{/{*}}\hlstd{\ \ \ \ }\hlcom{\}{*}/}\hlstd{}\hspace*{\fill}\\
\hlsym{\}}\hspace*{\fill}\\
\hlstd{}\hspace*{\fill}\\
\hlkwb{void\ }\hlstd{}\hlkwd{init\textunderscore gl}\hlstd{}\hlsym{()}\hspace*{\fill}\\
\hlstd{}\hlsym{\{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwd{glClearColor}\hlstd{}\hlsym{(}\hlstd{}\hlnum{0.0}\hlstd{}\hlsym{,\ }\hlstd{}\hlnum{0.0}\hlstd{}\hlsym{,\ }\hlstd{}\hlnum{0.0}\hlstd{}\hlsym{,\ }\hlstd{}\hlnum{0.0}\hlstd{}\hlsym{);}\hspace*{\fill}\\
\hlstd{\hspace*{\fill}\\
}\hlstd{\ \ \ \ }\hlstd{}\hlkwd{glMatrixMode}\hlstd{}\hlsym{(}\hlstd{GL\textunderscore PROJECTION}\hlsym{);}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwd{glLoadIdentity}\hlstd{}\hlsym{();}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwd{glOrtho}\hlstd{}\hlsym{(}\hlstd{}\hlnum{0.0}\hlstd{}\hlsym{,\ }\hlstd{WINDOW\textunderscore WIDTH}\hlsym{,\ }\hlstd{}\hlnum{0.0}\hlstd{}\hlsym{,\ }\hlstd{WINDOW\textunderscore HEIGHT}\hlsym{,\ {-}}\hlstd{}\hlnum{20.0}\hlstd{}\hlsym{,\ }\hlstd{}\hlnum{20.0}\hlstd{}\hlsym{);}\hspace*{\fill}\\
\hlstd{\hspace*{\fill}\\
}\hlstd{\ \ \ \ }\hlstd{}\hlkwd{glMatrixMode}\hlstd{}\hlsym{(}\hlstd{GL\textunderscore MODELVIEW}\hlsym{);}\hspace*{\fill}\\
\hlstd{\hspace*{\fill}\\
}\hlstd{\ \ \ \ }\hlstd{}\hlkwd{glHint}\hlstd{}\hlsym{(}\hlstd{GL\textunderscore PERSPECTIVE\textunderscore CORRECTION\textunderscore HINT}\hlsym{,\ }\hlstd{GL\textunderscore NICEST}\hlsym{);}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwd{glShadeModel}\hlstd{}\hlsym{(}\hlstd{GL\textunderscore SMOOTH}\hlsym{);}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwd{glPointSize}\hlstd{}\hlsym{(}\hlstd{POINT\textunderscore SIZE}\hlsym{);}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwd{glLineWidth}\hlstd{}\hlsym{(}\hlstd{POINT\textunderscore SIZE}\hlsym{);}\hspace*{\fill}\\
\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{}\hspace*{\fill}\\
\hlkwb{void\ }\hlstd{}\hlkwd{keyboard}\hlstd{}\hlsym{(}\hlstd{}\hlkwb{unsigned\ char\ }\hlstd{key}\hlsym{,\ }\hlstd{}\hlkwb{int\ }\hlstd{x}\hlsym{,\ }\hlstd{}\hlkwb{int\ }\hlstd{y}\hlsym{)\ \{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwa{if}\hlstd{}\hlsym{(}\hlstd{key\ }\hlsym{==\ }\hlstd{}\hlstr{'n'}\hlstd{}\hlsym{)\ \{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ \ \ \ \ }\hlstd{step\ }\hlsym{=\ }\hlstd{}\hlnum{1}\hlstd{}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{}\hlsym{\}}\hspace*{\fill}\\
\hlstd{}\hspace*{\fill}\\
\hlkwb{int\ }\hlstd{}\hlkwd{main}\hlstd{}\hlsym{(}\hlstd{}\hlkwb{int\ }\hlstd{argc}\hlsym{,\ }\hlstd{}\hlkwb{char}\hlstd{}\hlsym{{*}{*}\ }\hlstd{argv}\hlsym{)\ \{}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwd{glutInit}\hlstd{}\hlsym{(\&}\hlstd{argc}\hlsym{,\ }\hlstd{argv}\hlsym{);}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwd{glutInitDisplayMode}\hlstd{}\hlsym{(}\hlstd{GLUT\textunderscore DOUBLE\ }\hlsym{\textbar \ }\hlstd{GLUT\textunderscore RGB\ }\hlsym{\textbar \ }\hlstd{GLUT\textunderscore DEPTH}\hlsym{);}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwd{glutInitWindowSize}\hlstd{}\hlsym{(}\hlstd{WINDOW\textunderscore WIDTH}\hlsym{,\ }\hlstd{WINDOW\textunderscore HEIGHT}\hlsym{);}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwd{glutCreateWindow}\hlstd{}\hlsym{(}\hlstd{}\hlstr{"D2Q9"}\hlstd{}\hlsym{);}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwd{glEnable}\hlstd{}\hlsym{(}\hlstd{GL\textunderscore DEPTH\textunderscore TEST}\hlsym{);}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwd{init\textunderscore vars}\hlstd{}\hlsym{();}\hspace*{\fill}\\
\hlstd{\ }\hlkwd{init\textunderscore cuda}\hlstd{}\hlsym{(\ );}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwd{init\textunderscore gl}\hlstd{}\hlsym{();}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwd{glutDisplayFunc}\hlstd{}\hlsym{(}\hlstd{display}\hlsym{);}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwd{glutKeyboardUpFunc}\hlstd{}\hlsym{(}\hlstd{keyboard}\hlsym{);}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwd{glutIdleFunc}\hlstd{}\hlsym{(}\hlstd{idle}\hlsym{);}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwd{glutMainLoop}\hlstd{}\hlsym{();}\hspace*{\fill}\\
\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlkwa{return\ }\hlstd{}\hlnum{0}\hlstd{}\hlsym{;}\hspace*{\fill}\\
\hlstd{}\hlsym{\}}\hlstd{}\hspace*{\fill}\\
\mbox{}
\normalfont
\end {document}
(* LaTeX generated by highlight 2.6.9, http://www.andre-simon.de/ *)
