\section{Coding Guidelines} \label{sc_guidelines} Writing code in a readable manner is very important, especially for future code developers (e.g. for adding features, debugging, etc.). This section is inspired by the DUNE coding guidelines \url{http://www.dune-project.org/doc/devel/codingstyle.html}, which is strongly recommended. \paragraph{Documentation:} Please document freely what each part of your code does. All comments/ documentation is in \textbf{English}. We proclaim the Doc-Me Dogma, which means whatever you do, please document it least with \begin{lstlisting}[style=DumuxCode] /*! \todo Please doc me! */ \end{lstlisting} That way at least the absence of documentation is documented, and it is easier to get rid of it systematically. Please comment \textbf{all}: \begin{itemize} \item Method Parameters (in / out) \item Method parameters which are not self-explanatory should always have a meaningful comment at calling sites. Example: \begin{lstlisting}[style=DumuxCode] localResidual.eval(/*includeBoundaries=*/true); \end{lstlisting} \item Template Parameters \item Return Values \item Exceptions thrown by a method \end{itemize} \paragraph{Naming:} To avoid duplicated types or variables and for a better understanding and usability of the code we have the following naming conventions: \begin{itemize} \item \textbf{Variables/Functions \ldots} \begin{itemize} \item start in \emph{lower} case and contain letters. \item \emph{CamelCase}: if the name consists of several words, then the first letter of a new word is capital. \item \emph{Self-Explaining}: in general abbreviations should be avoided (write saturation in stead of S) \item \emph{Abbreviations}: If and only if a single letter that represents an abbreviation or index is followed by a single letter (abbreviation or index), CamelCase is {\bf not} used. An inner-word underscore is only permitted if it symbolizes a fraction line. Afterwards, we continue with lower case, i.e. the common rules apply to both enumerator and denominator. Examples: \begin{itemize} \item \texttt{pw} but \texttt{pressureW} $\rightarrow$ because ``pressure'' is a word. \item \texttt{srnw} but \texttt{sReg} $\rightarrow$ because ``reg'' is not an abbreviation of a single letter. ``n'' abbreviates ``non'', ``w'' is ``wetting'', so not CamelCase. \item \texttt{pcgw} but \texttt{dTauDPi} $\rightarrow$ Both ``Tau'' and ``Pi'' are words, plus longer than a letter. \item \textbf{But:} \texttt{CaCO3} The only exception: chemical formulas are written in their chemically correct way $\rightarrow$ \texttt{CaCO3} \end{itemize} \end{itemize} \item \textbf{Private Data Variables:} Names of private data variables end with an underscore and are the only variables that contain underscores. \item \textbf{Type names:} For type names, the same rules as for variables apply. The only difference is that the \emph{first letter is capital}. \item \textbf{Files:} File names should consist of \emph{lower case} letters exclusively. Header files get the suffix \texttt{.hh}, implementation files the suffix \texttt{.cc} \item \textbf{The Exclusive-Access Macro:} Every header file traditionally begins with the definition of a preprocessor constant that is used to make sure that each header file is only included once. If your header file is called 'myheaderfile.hh', this constant should be DUMUX\_MYHEADERFILE\_HH. \item \textbf{Macros:} The use of preprocessor macros is strongly discouraged. If you have to use them for whatever reason, please use capital letters only. \end{itemize}