install.tex 22.9 KB
Newer Older
1
2
\section{Installation of \Dumux} \label{install}
\subsection{Preliminary remarks}
3

David Werner's avatar
David Werner committed
4
5
6
7
8
9
In this section about installation it is assumed that you work on a UNIX or Linux compatible operating system
and that you are familiar with the use of a shell command-line.  You also should know how to install new software packages
or you should have a person aside which can give you assistance with the shell command-line and package installation. 
Below in section \ref{sec:prerequisites} we list prerequisites for running \Dune and \Dumux. 
Please check this paragraph whether you can fulfill them.
In addition in section \ref{sec:external-modules-libraries} some details on optional libraries and modules are given. \\
10

11
In a technical sense \Dumux is a module of \Dune. 
David Werner's avatar
David Werner committed
12
13
14
15
That's why the installation procedure of \Dumux is the same as that of \Dune. 
The details regarding the installation of \Dune are provided by {\Dune} website \cite{DUNE-INST}. 
If you are interested in more details of the build system, we use below,
they are given in {\Dune}'s Build System Howto \cite{DUNE-BS}.\\
16

17

David Werner's avatar
David Werner committed
18
As in a \Dune installation, all \Dune modules including \Dumux should be extracted into a common directory. We refer to that directory for purpose of documentation abstractly as {\Dune} root directory or shortly as {\Dune}-Root or in directory path's typed as \texttt{\Dune-Root}. For the real {\Dune} root directory in filesystem any valid directory name can be name chosen.\\
19

David Werner's avatar
David Werner committed
20
21
22
23
24
25
26
Source code files for each \Dune module are contained in their an own subdirectory within {\Dune}-Root.
We name this directory of a certain module, ``module's root directory" or \texttt{module-root-directory} in directory path's,
e.g. for module \texttt{dumux} these names are  ``dumux' root directory" respective \texttt{dumux-root-directory}.
The real directory names for modules can be chosen arbitrary, in this manual they are the same as the
module name or the module name extended by an version number suffix.
The name of a \Dune module itself is always defined via the content of file \texttt{dune.module} in its own root
directory, but this should not get changed by an user. The user is allowed to have own files and directories in \Dune-ROOT, which is not related to \Dune's need.
27

David Werner's avatar
David Werner committed
28
After installing source code for all relevant \Dune modules including \Dumux, \Dune is being built by the shell-command \texttt{dunecontrol} which is part of the {\Dune} build system. The {\Dune} build system is a front-end suited to \Dune's needs to the gnu tool \texttt{autoconf}.
29

David Werner's avatar
David Werner committed
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
\subsection{Prerequisites} \label{sec:prerequisites}
The gnu tool-chain of \texttt{g++}  and related gnu variants of autotools
(i.e. \texttt{autoconf}, \texttt{automake}, \texttt{libtool}) as well as gnus variant of \texttt{make}
must be available in a recent version. E.g. for ubuntu Linux these are contained in
packages \texttt{autoconf}, \texttt{automake}, \texttt{libtool}
and the C++ compiler \texttt{g++} and \texttt{make} are contained in \texttt{build-essential}.
As of time of this writing \texttt{g++} of version $\geqslant$ 4.5.0, \texttt{automake} of version $\geqslant$ 1.11.1,
\texttt{automake} of version $\geqslant$ 2.65,  \texttt{libtool} of version $\geqslant$ 2.2.6b
and gnu \texttt{make} version $\geqslant$ 3.81 seemed to work for building \Dumux.\\

\Dumux makes use of library \texttt{boost} of version $\geqslant$ 1.33.1.
It is thus necessary to install developer package of \texttt{boost}
or sometimes named \texttt{libboost}, the matching ubuntu Linux package is \texttt{libboost-dev}. \\

The building of contained documentation like this handbook requires \LaTeX\  and auxiliary tools
like \texttt{dvipdf} and \texttt{bibtex}. One usually chooses a \LaTeX\  distribution like \texttt{texlive} for doing that.
It is possible to switch off building of documentation by \texttt{--disable-documentation} in building options, i.e. as switch to \texttt{CONFIGURE\_FLAGS}.
Additional parts of documentation are contained in source code files as special formatted comments.
For extracting them the program \texttt{doxygen} is needed we use here versions $\geqslant$ 1.7.2, see for this section \ref{sec:build-doxy-doc}.\\

Depending whether you are going to use external libraries and modules for additional \Dune features 
additional software packages  may required. Some hints on that are given in section \ref{sec:external-modules-libraries}.\\

For code extraction out of tar-files gnus version of \texttt{tar} is used.
For accessing software repositories we recommend Apache subversion command-line client \texttt{svn}
contained in \texttt{apache subversion} of version $\geqslant$ 1.6.0 \cite{APACHE-SUBVERSION-HP}. 
56

57
\subsection{Obtaining source code for \Dune and \Dumux}
David Werner's avatar
David Werner committed
58
59
60
61
62
As written before \Dumux release 2.0 is based on \Dune release 2.0, comprising the core modules 
\texttt{dune-common}, \texttt{dune-grid}, \texttt{dune-istl}, \texttt{dune-localfunctions} and the external dune
module \texttt{dune-pdelab}. Thus for a \Dumux installation these modules are required to be installed.
Of course the external dune module \texttt{dumux} from \Dumux website is required too.
Use of optional further (external) \Dune modules  and/or external to \Dune libraries is possible and can provide additional features to the user. To some of these we refer briefly in section \ref{sec:external-modules-libraries}.\\
63
64
65

Two possibilities exist to get source code for \Dune and \Dumux.
Firstly \Dune and \Dumux can obtained as tar-archive files by download from respective {\Dune} and {\Dumux} website. They then need to be extracted, as described in the next section.
David Werner's avatar
David Werner committed
66
Secondly, described in the section next but one, is a method to obtain most recent source or even also every predecessors by direct access via Internet to software repositories of software revision control system of the software developer. \Dune and \Dumux use for their software repositories \texttt{apache subversion} or more shortly \texttt{subversion} or \texttt{svn}.
67
68
As a user does not always want the most recent version
certain version tags (i.e. special names) and version numbers and even software branches are means of software revision control system to provide different versions of a software from a software repository.
69

70
\paragraph{Obtaining the software by installing tar-files}
71
The a bit old fashioned named tape-archive-file shortly named tar-file or tarball is a common file format for distributing collections of files contained in these archives.
72
73
This part of installation is done as follows: 
Download the tarballs from the respective \Dune (version 2.0) and \Dumux websites to a certain path in your filesystem.
David Werner's avatar
David Werner committed
74
75
Create the {\Dune} root directory, named here DUMUX, then extract content of tar-files by command-line program tar into it.
Above, except download, it can achieved by the following shell commands, replace in them \texttt{path\_to\_tarball} with the directory path-name where the downloaded files are located.
76
77
78
79
80
81
82
83
84
85
86

\begin{lstlisting}[style=Bash]
$ mkdir DUMUX
$ cd DUMUX
$ tar xzvf path_to_tarball_of/dune-common-2.0.tar.gz 
$ tar xzvf path_to_tarball_of/dune-grid-2.0.tar.gz 
$ tar xzvf path_to_tarball_of/dune-istl-2.0.tar.gz 
$ tar xzvf path_to_tarball_of/dune-localfunctions-2.0.tar.gz 
$ tar xzvf path_to_tarball_of/dumux-2.0.tar.gz
\end{lstlisting}

David Werner's avatar
David Werner committed
87
To rephrase above remark about modules root directory, here dumux-root-directory name which came after extracting the tar-file is \texttt{dumux-2.0}.
88

89
Optional:
90
91
92
93
94
95
96
97
\begin{lstlisting}[style=Bash]
$ tar xzvf path_to_tarball_of/dune-grid-howto-2.0.tar.gz
\end{lstlisting}

However, the required \Dune-module \texttt{dune-pdelab} is not available as tar-file, thus you have to install it from software repository by the second method.  Thus if svn command is available, it can done as follows: 
\begin{lstlisting}[style=Bash]
$ svn co https://svn.dune-project.org/svn/dune-pdelab/branches/2.0snapshot dune-pdelab
\end{lstlisting}
98

99
100
101
\paragraph{Obtaining \Dune and \Dumux from software repositories} 

Using a software revision control system as subversion and its software repositories has beside it advantages for developer or developing groups as a tool for assisting them to keep the source code worked on in consistent fashion for an user, i.e. a member who is not in the developing group of a software project, of software also some advantages.
David Werner's avatar
David Werner committed
102
In general With direct access to the software repositories it is easier to keep up with code changes, to receive important bug fixes and to keep up with general developments of code.\\
Bernd Flemisch's avatar
Bernd Flemisch committed
103

David Werner's avatar
David Werner committed
104
105
To access Apache subversion software repositories a certain program is needed which is referred here shortly as \texttt{subversion client} or \texttt{svn client}. We use in our description the svn client of the apache subversion software itself, which is a command-line (shell) tool, mostly named \texttt{svn}. 
Apache subversion client is available for most Linux and UNIX distributions as software package by the distributor or can get installed by building it directly from source.\\
106

David Werner's avatar
David Werner committed
107
108
109
In technical speech of Apache subversion ``checking out a certain software version" means nothing more then fetching 
it from software repository and laying it out in the filesystem, additionally with software some files with meta information regarding the software revision control system itself are also laid out.
For a developer in \Dumux project it is easily possible to do the opposite i.e. uploading a modified version he created into software repository. This is usually termed as ``software check in".\\
110
111

The installation procedure is as follows:
112
Create {\Dune} root directory, named here below DUMUX.
113
114
Then, enter the previously created directory and checkout the modules. 
As you see below the checkout uses two different servers for sources one for \Dune and one for \Dumux, also the 
David Werner's avatar
David Werner committed
115
anonymous access to these repositories varies a little bit.\\ 
116

David Werner's avatar
David Werner committed
117
As described on \Dune's website \cite{DUNE-DOWNLOAD-SVN} we first do a checkout of some \Dune modules:
118
119

\begin{lstlisting}[style=Bash]
David Werner's avatar
David Werner committed
120
121
$ mkdir DUMUX
$ cd DUMUX
122
123
124
125
126
127
$ svn co https://svn.dune-project.org/svn/dune-common/releases/2.0 dune-common
$ svn co https://svn.dune-project.org/svn/dune-grid/releases/2.0 dune-grid
$ svn co https://svn.dune-project.org/svn/dune-istl/releases/2.0 dune-istl
$ svn co https://svn.dune-project.org/svn/dune-localfunctions/releases/2.0 dune-localfunctions
$ svn co https://svn.dune-project.org/svn/dune-pdelab/branches/2.0snapshot dune-pdelab
\end{lstlisting}
Bernd Flemisch's avatar
Bernd Flemisch committed
128

129
130
The \texttt{dune-grid-howto} is a tutorial which aims to give an understanding of the \Dune grid interface, which can 
give you an idea how abstractions in \Dune are done. \texttt{Dune-grid-howto} is not required by \Dumux, thus installing is purely optional. It is done by: 
131
132
133
134

\begin{lstlisting}[style=Bash]
$ svn co https://svn.dune-project.org/svn/dune-grid-howto/releases/2.0 dune-grid-howto
\end{lstlisting}
135

David Werner's avatar
David Werner committed
136
137
To obtain the needed \texttt{dumux} module, which is is as mentioned before, just an external module of \Dune. You have to check it out which is as also described on \Dumux website \cite{DUMUX-HP}.
Its file tree should laid out as for any other \Dune module directly into \Dune-Root. This is done if you are in it and execute the following command within \Dune root directory.
138

139
140
141
\begin{lstlisting}[style=Bash]
$ svn co --username=anonymous --password='' svn://svn.iws.uni-stuttgart.de/DUMUX/dumux/trunk dumux
\end{lstlisting}
142

143
144
\paragraph{Hints for \Dumux-Developers}
If you also want to check in your own \Dumux developments to \Dumux software repositories, you can apply for either full developers access or access for developer access on certain parts of \Dumux. Granted developer access means that you are allowed to check in own code to the software repository and that you can access the \texttt{dumux-devel} module which enhances \texttt{dumux} by staging code of developer group, which is unavailable for user not being member of the developer group.
145
If you are member of developer group rights the checkout with developer access for \texttt{dumux} and \texttt{dumux-devel} is non-anonymously done with the commands below, insert your username
146
147
148
149
150
151
152
for accessing \Dumux software repository in place \texttt{joeuser} below.

\begin{lstlisting}[style=Bash]
$ svn co --username=joeuser svn://svn.iws.uni-stuttgart.de/DUMUX/dumux/trunk dumux
$ svn co --username=joeuser svn://svn.iws.uni-stuttgart.de/DUMUX/dune-mux/trunk dumux-devel
\end{lstlisting}

153
This time the name for dumux root directory is just as the name of the module \texttt{dumux}.
154

155
156
\texttt{Dumux-devel} itself makes use of stable part \texttt{dumux} and hence it needs also being checked out. 
You can omit in commands above the username option, if your username for the repository access is identical to the one for your system account.
157
158
Please choose either not to store the password or to store it by subversion in a secure way (check the documentation of subversion for that). 
A leaked out password can be used by evil persons to vandalize a software repository.
159

160
161
\subsection{Build of \Dune and \Dumux}
\label{buildIt}
David Werner's avatar
David Werner committed
162
Building of \Dune is done by \texttt{dunecontrol} as described in \Dune Installation Notes \cite{DUNE-INST} and in much more comprehensive form in \Dune Build System Howto \cite{DUNE-BS}.
163
164
165
If something fails with \texttt{dunecontrol} feel to report it to \Dune or \Dumux developer or mailing list, but also try to report also error details. People will likely help you.


David Werner's avatar
David Werner committed
166
167
It is possible to compile \Dumux with nearly no explicit options to the build system but
experience showed that the code quality through all parts of \Dune is not yet high enough to give the compiler full freedom for allowing certain kind optimizations. As option switches for optimization can switched on in parts build system for code be default, it is safer to pass the option \texttt{-fno-strict-aliasing} to the C++-compiler \cite{WIKIPED-ALIASING} which is done here via a command-line argument to \texttt{dunecontrol}.
168
169
170
171
172
173


\begin{lstlisting}[style=Bash]
$ ./dune-common/bin/dunecontrol --configure-opts="CXXFLAGS=-fno-strict-aliasing"  all
\end{lstlisting}

David Werner's avatar
David Werner committed
174
Too many options can make life hard, that's why one usually uses option-files for dunecontrol and its sub-tools.
175
176
177
178
Larger sets of options are kept in them. 
If you are going to compile with options suited for code debugging with a debugger, the following
can be a starting point:

David Werner's avatar
David Werner committed
179
Insert below for \verb+$DUMUX_ROOT+ in shell-command-line just the name of dumux' (or dumux-devels) root directory, which is in case of installation from tar-files \texttt{dumux-2.0} or in case of installation from svn just \texttt{dumux} (or if one takes a version of option-file from module \texttt{dumux-devel} available only to members of \Dumux developers group, \texttt{dumux-devel}.
180
181
182
183
184
185
186
187
188
189
190
191

\begin{lstlisting}[style=Bash]
$ ./dune-common/bin/dunecontrol --opts=$DUMUX_ROOT/debug.opts all
\end{lstlisting}

More optimized code, but which is typically not as useful for standard tasks in debugger can produced by 

\begin{lstlisting}[style=Bash]
$ ./dune-common/bin/dunecontrol --opts=$DUMUX_ROOT/optim.opts all
\end{lstlisting}

Sometimes it is necessary to have additional options which are specific to tools set of an operating system or just mirror your preferences, feel free to work with your own set of options which may evolve over time. Above option files are more to understand as examples as a starting setting for own customization than as something fixed to \Dumux.
David Werner's avatar
David Werner committed
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
It can be helpful to give your customized option file its own name, so one gets not confused with option files which came out of distribution and get possible updated through \texttt{subversion} later on.

\subsection{Building doxygen documentation} \label{sec:build-doxy-doc}

Doxygen documentation is special formatted comments in source code, which can get extracted by the program 
\texttt{doxygen}. Beside extracting these comments doxygen builds up web-browsable code structure documentation
like class hierarchy of code displayed as graphs, see \cite{DOXYGEN-HP}.\\

Building a modules doxygen documentation is done as follows provided the program \texttt{doxygen} is installed on your computer: Set in building options the \texttt{--enable-doxygen} switch.
This is either accomplished by adding it in \texttt{dunecontrol} options-file to  \texttt{CONFIGURE\_FLAGS}, or by adding
it to  \texttt{dunecontrol}'s command-line-argument \texttt{--configure-opts=}. 
After running \texttt{dunecontrol} enter in module's root directory, the subdirectory \texttt{doc/doxygen}.
You then run within that directory the command \texttt{doxygen}. Point then your web browser to the file 
\texttt{module-root-directory/doc/doxygen/html/index.html} too read the generated documentation.
All here used \Dune-modules except \texttt{dune-grid-howto} so as well \texttt{dumux} contain some doxygen documentation.
The external library UG has also a \texttt{doc/doxygen} directory for building its doxygen documentation.

\subsection{Building documentation of other \Dune modules}

If the \texttt{--enable-documentation} switch is set to configure flags of \texttt{dunecontrol}, this means not necessarily that for any 
\Dune module documentation is being build. But at least Makefiles for building documentation 
are generated. It is then possible to build documentation if available, look into \texttt{module-root-directory/doc/Makefile.am}
to guess the targets you can build.
E.g. \texttt{dune-istl} you can build documentation \texttt{istl.pdf} by typing in if you where before in \Dune-Root:

\begin{lstlisting}[style=Bash]
$ cd dune-istl/doc
$ make istl.pdf
\end{lstlisting}

provided that you had before run \texttt{dunecontrol} with enabled documentation.
At the time writing this to the author no general method of building documentation contained in \Dune's modules is known.
224
225

%Alternatively, the tool CMake can be used to build \Dumux. Please check the file \texttt{INSTALL.cmake} for details.
David Werner's avatar
David Werner committed
226
227

\subsection{External libraries and modules} \label{sec:external-modules-libraries}
228

229
The following libraries provide additional functionality but are not required to run \Dumux. 
David Werner's avatar
David Werner committed
230
231
232
If you are going to use an external library check the information provided on the \Dune website \cite{DUNE-EXT-LIB}. If you are going to use an external \Dune module beside {\Dune}s website a website \cite{DUNE-EXT-MOD} regarding the external modules in question can be helpful too.
%Further information on external modules and libraries seemed to be contained in {\Dune}s Wiki \cite{DUNE-MAIN-WIKI}.
Too make the picture complete we list here complete some of external modules, some of external libraries and some of typical libraries and tools which get used by \Dune.
233

234
\begin{itemize}
David Werner's avatar
David Werner committed
235
236
237
\item \textbf{\Dune-multidomaingrid}: If you going to run on the same grid different domains or subdomains,
this can be the package of choice. 
To be precise, this is an external \Dune module which, like \Dumux, is built by the \Dune build system. The \Dune-multidomaingrid module provides a meta grid that allows the subdivision of arbitrary \Dune grids into subdomains, e.g. for multi-physics approaches (\texttt{\url{http://gitorious.org/dune-multidomaingrid}}).
238

239
\item \textbf{UG}: UG is a toolbox for Unstructured Grids: As \Dumux, it is build by \texttt{autotools} and a C++-compiler. Additionally, the tools \texttt{lex}/\texttt{yacc} or the gnu-versions \texttt{flex}/\texttt{bison} are needed. 
240

241
\item \textbf{Alberta}: Adaptive multi Level finite element toolbox using Bisectioning refinement and Error control by Residual Techniques for scientific Applications: A Fortran compiler like \texttt{gfortran} is required.
242

243
\item \textbf{ALUGrid}: ALUGrid is build by a C++-compiler like \texttt{g++}. If you want to build a parallel version, you will need \texttt{MPI}. It was successfully run with \texttt{openmpi}. The parallel version needs also a graph partitioner, such as \texttt{METIS} or \texttt{PARTY}. It was run successfully in combination with \Dune using \texttt{METIS}.
244

245
\item \textbf{PARDISO}: The package PARDISO is a thread-safe, high-performance, robust, memory efficient and easy to use software for solving large sparse symmetric and asymmetric linear systems of equations on shared memory multiprocessors. The precompiled binary can be downloaded after personal registration from the PARDISO website (\texttt{\url{http://www.pardiso-project.org}}).
246

247
\item \textbf{SuperLU}: SuperLU is a general purpose library for the direct solution of large, sparse, nonsymmetric systems of linear equations (\texttt{\url{http://crd.lbl.gov/~xiaoye/SuperLU}}).
248

249
250
\end{itemize}

251
The following are dependencies of some of the used libraries. You will need them depending on which modules of \Dune and which external libraries you use.
252
\begin{itemize}
253
\item \textbf{MPI}: The parallel version of \Dune and also some of the external dependencies need MPI when they are going to be built for parallel computing. \texttt{Openmpi} and \texttt{MPICH} in a recent version have been reported to work. 
254

255
\item \textbf{lex/yacc} or \textbf{flex/bison}: These are quite common developing tools, code generators for lexical analyzers and parsers. This is a prerequisite for UG.
256

David Werner's avatar
David Werner committed
257
\item \textbf{BLAS}: Alberta makes use of BLAS. Thus install LibGOTO2, ATLAS, non-optimized BLAS or BLAS by chipmanufacturer. Take care that the installation scripts select the intended version of BLAS. 
258

259
\item \textbf{METIS}: This is a dependency of ALUGrid. If you run it parallel this part is being used to partition your grid.
David Werner's avatar
David Werner committed
260

David Werner's avatar
David Werner committed
261
\item \textbf{LibGOTO2}: is an optimized version of BLAS. It is not always available for all architectures and 
262
the license is not open. For research and education it is possible to obtain a copy without additional costs.
David Werner's avatar
David Werner committed
263
A FORTRAN compiler like \texttt{gfortran} is needed to compile it.
264

David Werner's avatar
David Werner committed
265
266
\item \textbf{Compilers}: Beside \texttt{g++} it has been reported that \Dune was successfully build with the Intel C++ compiler. 
C and FORTRAN compiler is needed for a some external libraries. As code of different compilers is linked together they have to be be compatible with each other. A good is the GNU compiler suite \texttt{gcc},\texttt{g++} and \texttt{gfortran}.
267

268
\item \textbf{libgomp}: \Dune can make use of OpenMP. Thus it can be necessary to install the \texttt{libgomp} library.
269
270
% http://openmp.org/

271
\item \textbf{libgmp}: The Gnu Multiple Precision Arithmetic Library (GMP) is also a prerequisite for \Dune. It may be necessary to install it.
272
% http://gmplib.org/
273
\end{itemize}
Klaus Mosthaf's avatar
Klaus Mosthaf committed
274

275
\paragraph{Hint for Users from IWS} Users from the Institute of Hydraulic Engineering, University of Stuttgart,
276
can also checkout a svn repository with several external libraries: 
277

278
279
280
\begin{lstlisting}[style=Bash]
$ svn checkout svn://svn.iws.uni-stuttgart.de/DUMUX/external/trunk external
\end{lstlisting}
281

282
This directory \texttt{external} contains a script to install external libraries, such as 
David Werner's avatar
David Werner committed
283
Alberta, ALUGrid, UG, METIS and an optimized version of BLAS named LibGOTO2: 
284
285
286
\begin{lstlisting}[style=Bash]
$ ./installExternal.sh all
\end{lstlisting}
287
it is also possible to install only certain parts of the external libraries:
288
289
290
\begin{lstlisting}[style=Bash]
$ ./installExternal.sh alberta
\end{lstlisting}
291

292
293
The libraries are then build within the external-directory and are not installed in a different place. 
But a \Dune build still needs to know where they are. You have to refer to them as options for the \Dune build, for example in your options file \texttt{debug.opts}.
294