Updated Frequently Asked Questions (markdown)
[dealii.wiki.git] / MacOSX.md
1 # Using deal.II on Mac OS X
2
3 <!-- No auto-Table of Contents support! -->
4
5 ## Installing the prepacked image file
6
7 The easiest way to install dealII on Mac OS X is by downloading the prepackaged `.dmg` file from the download page. Simply download and drag the `deal.II.app` to the `/Applications/` folder.
8
9 The application is only a launcher for the `Terminal.app` application, which sets all required variables for deal.II to work correctly on your system.
10
11 The examples are in the folder
12
13         /Applications/deal.II.app/Contents/Resources/examples/
14
15 This application is always built with the latest version of the MacOS X operating system, and with the latest version of XCode. See instructions below to make sure your system is compatible with the binary application.
16
17 ## Detailed instructions:
18
19 1. Install xcode from the app store. You might need to install the command line tools. Open a terminal and make sure "clang --version" does not report "command not found". You might need to run
20
21         xcode-select --install
22
23     to install the tools.
24
25
26     If you have the error:
27
28     ```
29     xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance
30     ```
31
32     then you might need to run
33
34     ```
35     sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
36     ```
37
38     to fix it. The explanation is available at [StackOverflow](https://stackoverflow.com/questions/17980759/xcode-select-active-developer-directory-error/17980786#17980786).
39
40 2. Download the latest .dmg of deal.II from https://www.dealii.org/download.html and drag it into "applications".
41 3. You should now have a deal.II app in your "Applications" folder in finder. Opening the deal.II app will give you a terminal you can use to compile deal.II applications. The library is installed somewhere in ```/Applications/deal.II.app/Contents/Resources```
42 NOTE: If you can not run the app because it is from an "unidentified developer", go to "Applications" in "Finder", ctrl+click (or right click) on the deal.II app and select "Open".
43 4. Optionally follow the instruction on the terminal, if you want to keep the deal.II library paths in your day to day terminal.
44 5. done.
45
46
47 # Instructions for Mac 10.9 Users, Deal.II ver. 8.0 or later (current trunk)
48
49 From Mac OS 10.9 onwards, Apple changed quite a few things in their developer tools. You should install XCode 5 **and** its command line tools. If you only do this, however, the installer  will not populate /usr/lib and /usr/include as it used to do, since from Mac OS 10.9, they decided that everything should be self contained in specific SDK directories. If you want to have the standard locations populated (to have, among others, zlib.h, etc.) you should also run the following command:
50   
51 ```sh
52 xcode-select --install
53 ```
54
55 which will download and install a lot of useful things for us.
56
57 If you decide to compile everything yourself, you should follow the instructions below. Otherwise we provide a useful package containing all precompiled libraries for the full optional deal.II under the Downloads section of this site.
58
59 # Simple instructions for Mac 10.8 Users, Deal.II ver. 8.1
60
61 Here are instructions for a minimal deal.II installation (without other packages):
62   1. Install XCode
63   1. Install XCode "command line tools" (you can find them under preferences->Downloads->Components).
64   1. Install cmake (download Mac OSX 64/32-bit Universal .dmg file, click to install, hit "install links into /local/bin")
65   1. Test that cmake works by running "cmake --version" in a terminal
66   1. Now proceed as explained in the deal.II readme (download the .tar.gz, extract using "tar xf deal.II-8.1.0.tar.gz", create build directory, cd into it)
67   1. You may need to overwrite the cxx compiler by calling:
68       cmake -D CMAKE_CXX_COMPILER=clang++ ..
69   1. Now proceed with "make install" and "make test"
70
71
72 # Instructions for Mac 10.8 Users, Deal.II ver. 8.0 or later (current trunk)
73
74 Recent Mac Versions come with Apple own version of gcc and clang compilers. They are both based on LLVM backend, but they behave slightly differently. 
75
76 **If you want to use deal.II in conjunction with Trilinos, then you should install the macports compiler gcc47**.
77
78 Step by step instructions (Working on Mac OS 10.8.8 and XCode 4.6.2): 
79
80   1. Install XCode
81   1. Install XCode "command line Tools" (you can find them under preferences->Downloads->Components).
82   1. (**only if you want to use also Trilinos**) Install macports (http://www.macports.org/)
83   1. Install gcc47
84 ```
85 sudo port install gcc47
86 ```
87   1. **Optional**: install all additional packages you might want to use with `deal.II`. For example:
88 ```
89 sudo port install arpack +gcc47 
90 sudo port install tbb +gcc47
91 sudo port install netcdf +gcc47
92 sudo port install boost +gcc47
93 sudo port install suitesparse +gcc47
94 sudo port install metis +gcc47
95 sudo port install qt4-mac +gcc47
96 ```
97
98 The openmpi package that comes with macports will not work properly with Trilinos. You should install it from scratch if you want mpi support.
99
100 I have customised my profile file in order to allow me to switch from one compiler to another in a relatively easy way, maintaining a reasonable structure in the libraries that I install, without the need to recompile everything when I change my mind. I try to use the same compiler for all the libraries I use, and to keep copies around of the compiled libraries in order to have a "backup plan" when things go wrong with my own deal.II experiments...
101
102 I usually keep all source files under the same directory (`$SRC`), build in subdirectories (`$SRC/library-name/$TYPE`) of the source directories, and install in separate "destination" directories (`$DST/library-name-$TYPE`). Of  course this is my personal taste. You can easily change this below....
103
104 At the end of your `~/.profile` file, add the following lines:
105 ```
106 # Available compilers: native, gcc, openmpi
107 . ~/.profile-libs gcc
108 ```
109
110 Create the file `~/.profile-libs`, which will accept a command line argument specifying the compiler to use:
111 ```sh
112 # TYPE is the first argument 
113 TYPE=$1
114
115 # Versions of the external libraries we want to compile/install
116 TRILINOS_VER=11.0.3
117 P4EST_VER=0.3.4
118
119 # Where source directories and install destination should be.
120 SRC=~/libs_src
121 DST=~/libs
122
123 # Change the following to suite your own system
124 case "$TYPE" in
125 native)
126     export CC=/usr/bin/clang
127     export CXX=/usr/bin/clang++
128     export USE_MPI=OFF
129     ;;
130 gcc)
131     export CC=/opt/local/bin/gcc-mp-4.7 
132     export CXX=/opt/local/bin/g++-mp-4.7 
133     export USE_MPI=OFF
134     ;;
135 openmpi)
136     export CC=/usr/local/bin/mpicc
137     export CXX=/usr/local/bin/mpic++
138     export USE_MPI=ON
139     ;;
140 esac
141
142 export DEAL_II_SRC=$SRC/deal.II
143 export P4EST_SRC=$SRC/p4est-$P4EST_VER
144 export TRILINOS_SRC=$SRC/trilinos-$TRILINOS_VER-Source
145
146 export DEAL_II_BUILD=$DEAL_II_SRC/$TYPE
147 export TRILINOS_BUILD=$TRILINOS_SRC/$TYPE
148 export P4EST_BUILD=$P4EST_SRC/$TYPE
149
150 export DEAL_II_DIR=$DST/deal.II-$TYPE
151 export P4EST_DIR=$DST/p4est-$P4EST_VER-$TYPE
152 export TRILINOS_DIR=$DST/trilinos-$TRILINOS_VER-$TYPE
153
154 export DYLD_LIBRARY_PATH=$TRILINOS_DIR/lib
155
156 ```
157
158 This assumes you have downloaded all your packages under `$SRC`, and that you are installing them under `$DST`. Change these to your liking. 
159
160 ## Trilinos 11.0.3
161
162 Once the above environment variables are set, you can install Trilinos using the following script:
163
164 ### trilinos.sh
165
166 ```sh
167 EXTRA_ARGS=$@
168
169 if [ ! -d "$TRILINOS_BUILD" ]; then
170         mkdir $TRILINOS_BUILD
171 fi
172 cd  $TRILINOS_BUILD
173
174 cmake \
175 -D TrilinosFramework_ENABLE_MPI:BOOL=$USE_MPI \
176 -D CMAKE_INSTALL_PREFIX:PATH=$TRILINOS_DIR \
177 -D TPL_ENABLE_MPI:BOOL=$USE_MPI \
178 -D BUILD_SHARED_LIBS:BOOL=ON \
179 -D CMAKE_BUILD_TYPE:STRING=RELEASE \
180 -D Trilinos_ENABLE_Fortran:BOOL=OFF \
181 -D Trilinos_WARNINGS_AS_ERRORS_FLAGS:STRING="" \
182 -D CMAKE_VERBOSE_MAKEFILE:BOOL=TRUE \
183 -D Trilinos_ENABLE_TESTS:BOOL=OFF \
184 -D Trilinos_ENABLE_ALL_PACKAGES:BOOL=OFF \
185 -D Trilinos_ENABLE_ALL_OPTIONAL_PACKAGES:BOOL=ON \
186 -D Trilinos_ENABLE_Epetra:BOOL=ON \
187 -D Trilinos_ENABLE_EpetraExt:BOOL=ON \
188 -D Trilinos_ENABLE_Tpetra:BOOL=ON \
189 -D Trilinos_ENABLE_Jpetra:BOOL=ON \
190 -D Trilinos_ENABLE_Kokkos:BOOL=ON \
191 -D Trilinos_ENABLE_Sacado:BOOL=ON \
192 -D Trilinos_ENABLE_Amesos:BOOL=ON \
193 -D Trilinos_ENABLE_AztecOO:BOOL=ON \
194 -D Trilinos_ENABLE_Ifpack:BOOL=ON \
195 -D Trilinos_ENABLE_Teuchos:BOOL=ON \
196 -D Trilinos_ENABLE_Rythmos:BOOL=ON \
197 -D Trilinos_ENABLE_Piro:BOOL=ON \
198 -D Trilinos_ENABLE_MOOCHO:BOOL=ON \
199 -D Trilinos_ENABLE_ML:BOOL=ON \
200 -D Trilinos_ENABLE_Thyra:BOOL=ON \
201 -D Trilinos_ENABLE_TrilinosCouplings:BOOL=ON \
202 $EXTRA_ARGS \
203 ../
204
205 make -j2 install
206 ```
207
208 ## p4est
209
210 The following script will install p4est. It has been modified from the file `doc/p4est-setup.sh` in the p4est distribution, to use the variables which where set in the environment.
211
212 ### p4est.sh
213
214 ```sh
215 #! /bin/bash
216
217 # This program comes with ABSOLUTELY NO WARRANTY.
218
219 UNPACK=$P4EST_SRC
220
221 # choose names for fast and debug compilation directories
222 BUILD_DIR="$P4EST_BUILD"
223 BUILD_FAST="$BUILD_DIR/FAST"
224 BUILD_DEBUG="$BUILD_DIR/DEBUG"
225
226 function busage() {
227         echo "Usage: `basename $0` <p4est_tar.gz_file> [location>](<install)"
228 }
229 function bdie () {
230         echo "Error: $@"
231         exit 1
232 }
233
234
235 if test -z "$CFLAGS" -a -z "$P4EST_CFLAGS_FAST" ; then
236         export CFLAGS_FAST="-O2"
237 else
238         export CFLAGS_FAST="$CFLAGS $P4EST_CFLAGS_FAST"
239 fi
240 echo "CFLAGS_FAST: $CFLAGS_FAST"
241 if test -z "$CFLAGS" -a -z "$P4EST_CFLAGS_DEBUG" ; then
242         export CFLAGS_DEBUG="-O0 -g"
243 else
244         export CFLAGS_DEBUG="$CFLAGS $P4EST_CFLAGS_DEBUG"
245 fi
246 echo "CFLAGS_DEBUG: $CFLAGS_DEBUG"
247
248 # choose names for fast and debug installation directories
249 INSTALL_DIR="$P4EST_DIR"
250 INSTALL_FAST="$INSTALL_DIR/FAST"
251 INSTALL_DEBUG="$INSTALL_DIR/DEBUG"
252
253 echo
254 echo "This script tries to unpack, configure and build the p4est library."
255 echo "Build FAST: $BUILD_FAST"
256 echo "Build DEBUG: $BUILD_DEBUG"
257 echo "Install FAST: $INSTALL_FAST"
258 echo "Install DEBUG: $INSTALL_DEBUG"
259 echo "Checking environment: CFLAGS P4EST_CFLAGS_FAST P4EST_CFLAGS_DEBUG"
260
261 # remove old versions
262 if test -d "$BUILD_DIR" ; then
263         rm -rf "$BUILD_DIR"
264 fi
265
266 test -f "$UNPACK/src/p4est.h" || bdie "Main header file missing"
267 test -f "$UNPACK/configure" || bdie "Configure script missing"
268
269 echo "See output in files .../config.output and .../make.output"
270 echo
271 echo "Build FAST version in $BUILD_FAST"
272 mkdir -p "$BUILD_FAST"
273 cd "$BUILD_FAST"
274
275 if [ "$USE_MPI" == "ON" ]; then
276     ENABLE_MPI=--enable-mpi
277 else
278     ENABLE_MPI=""
279 fi
280
281 "$UNPACK/configure" $ENABLE_MPI --enable-shared \
282         --disable-vtk-binary --with-blas \
283         --prefix="$INSTALL_FAST" CFLAGS="$CFLAGS_FAST" \
284         CPPFLAGS="-DSC_LOG_PRIORITY=SC_LP_ESSENTIAL" \
285         "$@" > config.output || bdie "Error in configure"
286 make -C sc -j 8 > make.output || bdie "Error in make sc"
287 make -j 8 >> make.output || bdie "Error in make p4est"
288 make install >> make.output || bdie "Error in make install"
289 echo "FAST version installed in $INSTALL_FAST"
290
291 echo
292 echo "Build DEBUG version in $BUILD_DEBUG"
293 mkdir -p "$BUILD_DEBUG"
294 cd "$BUILD_DEBUG"
295 "$UNPACK/configure" --enable-debug $ENABLE_MPI --enable-shared \
296         --disable-vtk-binary --without-blas \
297         --prefix="$INSTALL_DEBUG" CFLAGS="$CFLAGS_DEBUG" \
298         CPPFLAGS="-DSC_LOG_PRIORITY=SC_LP_ESSENTIAL" \
299         "$@" > config.output || bdie "Error in configure"
300 make -C sc -j 8 > make.output || bdie "Error in make sc"
301 make -j 8 >> make.output || bdie "Error in make p4est"
302 make install >> make.output || bdie "Error in make install"
303 echo "DEBUG version installed in $INSTALL_DEBUG"
304 echo
305
306 ```
307
308 ## Deal.II
309
310 And finally, the deal.II library. Please consider using this script, since it will automatically 
311 feed the *build tests* page with the outcome of your compilation.
312
313 ### deal.sh
314
315 ```sh
316 if [ ! -d "$DEAL_II_BUILD" ]; then
317         mkdir $DEAL_II_BUILD
318 fi
319
320 NAME=`basename $DEAL_II_BUILD`
321 cp deal.conf $DEAL_II_BUILD/$NAME
322
323 cd $DEAL_II_SRC
324 svn update
325
326 LOGFILE=/usr/local/src/conf-scripts/deal.log
327
328 umask 0006
329
330 $DEAL_II_SRC/contrib/utilities/build_test -j4 \
331         CONFIGFILE=$DEAL_II_BUILD/$NAME \
332         SOURCE_DIR=$DEAL_II_SRC \
333         builddir=$DEAL_II_BUILD \
334         installdir=$DEAL_II_DIR \
335         LOGFILE=$LOGFILE \
336         MAKEOPTS=-j2 \
337         CLEAN_TMPDIR=false
338
339 grep SUCCESSFUL $LOGFILE && mail  dealii.build.tests@gmail.com < $LOGFILE 
340
341 ```
342
343 ## Using deal.II with Xcode IDE
344
345 Setting up Xcode for use of the deal.II libraries requires lots of project specifications that can automatically be generated by CMake. The following procedure covers the installation of necessary tools, the compilation of the deal.II libraries and the Xcode project generation. It was tested with Mac OS X 10.8.4, Xcode 4.6.3, CMake 2.8.10.2 and deal.II 8.0pre.
346
347 First, install Xcode (via the app store) and MacPorts (available on http://www.macports.org). Then install CMake with the terminal command
348 ```
349 sudo port install cmake
350 ```
351 Create a new folder on your machine somewhere and change to it in terminal. Then download the current deal.II version by typing
352 ```
353 svn checkout https://svn.dealii.org/trunk/deal.II
354 ```
355 Change to the deal.II subdirectory
356 ```
357 cd deal.II
358 ```
359 Create new build directory and change to it
360 ```
361 mkdir build
362 cd build
363 ```
364 Run cmake to prepare compilation
365 ```
366 cmake -DCMAKE_INSTALL_PREFIX=/Users/Username/libs/deal_8.0.pre ..
367 ```
368 where the path is the directory where the deal.II library will be installed, change it as you like.
369 Compile the library
370 ```
371 make -j8
372 make install
373 ```
374 8 is the number of cores your machine has, change this if necessary. The first command might take a while (up to one hour). After compilation, the whole deal.II directory can be deleted, as the library is now installed in the path specified above (INSTALL_PREFIX). Go to the specified directory and change to the step-1 example folder. Run cmake to prepare example to be used with Xcode
375 ```
376 cmake -G Xcode -DDEAL_II_DIR=/Users/Username/libs/deal_8.0.pre .
377 ```
378 The DDEAL_II_DIR is the directory where the library is to be found, like specified before (INSTALL_PREFIX). The file step-1.xcodeproj is now generated and can be opened with Xcode. A click on RUN should compile the code into subdirectory "Debug", but not execute it. For build and run change Product -> Scheme to 'step-1'. Code completion, compiling and debugging should be working now. If you add a new class, activate target membership step-1 so that the class is automatically compiled when clicking on run.
379
380
381 ## Getting rid of pop-ups when running executables compiled with deal.II
382
383 When running an deal.II executable that uses MPI on a mac with the firewall or parental control enabled, a pop-up appears that asks 
384 "Do you want the application xxx to accept incoming network connections?". It pops up as many MPI precesses you asked for which becomes
385 annoying. The way to prevent the pop-up is to code sign your executable. If you have a code signing certificate, configure you project 
386 using the OSX_CERTIFICATE_NAME feature:
387 ```
388 cmake -DOSX_CERTIFICATE_NAME="put your code signing certificate name here" .
389 ```
390 The executable will be signed using the certificate every time it is recompiled.
391
392 If you don't have a certificate or you are not sure, then follow these instructions:
393
394   1. Open Keychain Access.
395   1. Choose Keychain Access->Certificate Assistant->Create a certificate.
396   1. Choose a name for the certificate (Something like "deal.II developer").
397   1. Choose Certificate Type "Code Signing".
398   1. Check "Let me override defaults".
399   1. Press Continue.
400   1. Write any serial number you want (the name and serial number must be unique in the system).
401   1. Select how many days you want the certificate to be valid (2000 is just above 5 years).
402   1. Press Continue then put your personal data (nobody will see that but you so you can have fun with it).
403   1. Press Continue to get Key Pair Information. Keep as is.
404   1. Press Continue to get Key Usage Extension. Keep as is.
405   1. Press Continue to get Extended Key Usage Extension. Keep as is.
406   1. Press Continue to get Basic Constraints Extension. Keep as is.
407   1. Press Continue to get Subject Alternate Name Extension. Keep as is.
408   1. Press Continue and keep the Keychain "login" selected.
409   1. Press Continue then Done.
410   1. Right Click on your newly generated certificate.
411   1. Select "Get Info"
412   1. Select the triangle next to "Trust"
413   1. Scroll down to "Code Signing" and change it "Always Trust"
414   1. The system will ask for the administrator password to allow the changes. Enter it and press OK.
415
416 Now you have a code signing certificate that you can use with deal.II. Configure the project with the new certificate with a command line like this:
417 ```
418 cmake -DOSX_CERTIFICATE_NAME="deal.II developer" .
419 ```
420
421
422
423 ---- 
424 # Older instructions
425
426 ---- 
427
428 ## Installation without PETSc and Trilinos
429
430 The installation of deal.II without support for Petsc and Trilinos is standard.
431 The gcc that comes with the latest version of Xcode works without problems.
432 At the time of writing this was gcc version 4.2.1 (Apple Inc. build 5646) (dot 1).
433 It is suggested that you use the latest version of Xcode available from
434 [## Dynamic libraries not found
435
436 If you get a message of the kind
437
438 ```
439 dyld: Library not loaded: libdeal_II_2d.g.6.2.1.dylib
440   Referenced from: /Users/.../deal.II/examples/step-1/./step-1
441   Reason: image not found
442 make: *** [run](http://developer.apple.com/technologies/tools/xcode.html]) Trace/BPT trap
443 ```
444
445 you have to set the path for dynamical libraries. Using <tt>csh</tt> or <tt>tcsh</tt>, this reads
446 ```
447 setenv DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/Users/.../deal.II/lib
448 ```
449
450 while <tt>bash</tt> users use
451 ```
452 export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/Users/.../deal.II/lib
453 ```
454
455
456
457 ## Compiling Trilinos without Fortran support
458
459 One of the major hassles with using deal.II on a mac was compiling Trilinos which required fortran support.
460 It now seems possible to compile Trilinos 10.4.1  with all the features needed for deal.ii without fortran support. This is very nice as you can then simply use the mac gcc compilers and not worry about all the compatibility issues.
461
462 Here is my configure script:
463
464 ```sh
465 EXTRA_ARGS=$@
466 TRILINOS_HOME=/Users/andrewmcbride/lib/trilinos-10.4.1-Source
467
468  cmake \
469  -D CMAKE_INSTALL_PREFIX:PATH=/Users/andrewmcbride/lib/trilinos-10.4.1-Source/MAC_SL \
470  -D CMAKE_BUILD_TYPE:STRING=RELEASE \
471  -D BUILD_SHARED_LIBS:BOOL=ON \
472  -D TPL_ENABLE_MPI:BOOL=OFF \
473  -DCMAKE_C_FLAGS:STRING="-fPIC" \
474  -DCMAKE_CXX_FLAGS:STRING="-fPIC" \
475  -D Trilinos_ENABLE_ALL_PACKAGES:BOOL=OFF \
476  -D Trilinos_ENABLE_Stratimikos:BOOL=ON \
477  -D Trilinos_ENABLE_Sacado:BOOL=ON \
478  -D Trilinos_ENABLE_NOX-Epetra:BOOL=OFF \
479  -D Trilinos_ENABLE_ALL_OPTIONAL_PACKAGES:BOOL=ON \
480  -D Trilinos_ENABLE_Fortran:BOOL=OFF \
481  -D CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/g++ \
482  -D CMAKE_C_COMPILER:FILEPATH=/usr/bin/gcc \
483  $EXTRA_ARGS \
484  ${TRILINOS_HOME}
485 ```
486
487 ## Fortran support
488
489 Xcode does not provide support for Fortran.
490 This is needed (at present but see comments above) to compile Trilinos and PETSc with reasonable features.
491 To get the Fortan compilers on your mac you can follow one of several routes.
492
493  1. Install the precompiled high performance gcc libraries with Fortan support avaialble from  [A known problem with the latest release of these gcc libraries is said to be fixed (see [http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43648](http://sourceforge.net/projects/hpc/]))
494
495  1. Build gcc with fortran support from source available from [http://gcc.gnu.org/]
496
497  1. Install gcc with fortran support using macports or similar.
498 This has never worked for me.
499
500 You will then need to install deal.II using these libraries: for example on my
501 mac the configure looks like this (no trilinos or petsc)
502 ```
503   $ ./configure --with-umfpack --with-blas --with-lapack
504   CC=/Users/andrewmcbride/lib/gcc_snwleo/usr/local/bin/gcc
505   CXX=/Users/andrewmcbride/lib/gcc_snwleo/usr/local/bin/g++
506   F77=/Users/andrewmcbride/lib/gcc_snwleo/usr/local/bin/gfortran
507   --with-doxygen=/Applications/Doxygen.app/Contents/Resources/doxygen
508 ```
509
510 ## Dynamic_cast bug
511
512 Due to inconsistencies between the Xcode and standard gcc releases a bug arose that caused deal.II to "crash" when performing certain dynamic casts.
513 A work around this problem was implemented in December 2009.
514 It is suggested that you install the svn version of deal.II to ensure this problem does not arise
515
516
517 ## Installation with Trilinos 10.2 and CMake
518
519 The latest versions of Trilinos require one to use the CMake build system, which requires some system configuration up front.  These steps were followed to obtain a working installation of Trilinos with MPI and deal.II.
520
521 On a fully updated 10.6 (Snow Leopard) machine, you should be able to install mac ports, and then install their versions of gcc45 and cmake.  To get a Fortran MPI compiler, you can download the latest version of OpenMPI, and compile it with the MacPorts gcc45, and install it in some directory (NOT the system one!!), making sure that the new /bin directory is in your PATH first.
522
523 Next, download and untar the Trilinos source, then create a directory where you want to build Trilinos.  Inside of that directory, copy the following into a text file:
524
525 ```sh
526  #!/bin/sh
527
528  EXTRA_ARGS=$@
529
530  rm -f CMakeCache.txt
531
532  cmake \
533  -D TrilinosFramework_ENABLE_MPI:BOOL=ON \
534  -D CMAKE_INSTALL_PREFIX=/path_to/trilinos_install_dir \
535  -D TPL_ENABLE_MPI:BOOL=ON \
536  -D MPI_BASE_DIR:PATH=/path_to_custom_MPI_install/mpi \
537  -D BUILD_SHARED_LIBS:BOOL=ON \
538  -D CMAKE_BUILD_TYPE:STRING=DEBUG \
539  -D CMAKE_CXX_COMPILER:FILEPATH=mpicxx \
540  -D CMAKE_C_COMPILER:FILEPATH=mpicc \
541  -D CMAKE_Fortran_COMPILER:FILEPATH=mpif90 \
542  -D Trilinos_WARNINGS_AS_ERRORS_FLAGS:STRING="" \
543  -D CMAKE_VERBOSE_MAKEFILE:BOOL=TRUE \
544  -D Trilinos_ENABLE_TESTS:BOOL=OFF \
545  -D Trilinos_ENABLE_ALL_PACKAGES:BOOL=TRUE \
546  -D Trilinos_ENABLE_ALL_OPTIONAL_PACKAGES:BOOL=ON \
547  -D Trilinos_ENABLE_Epetra:BOOL=ON \
548  -D Trilinos_ENABLE_EpetraExt:BOOL=ON \
549  -D Trilinos_ENABLE_Tpetra:BOOL=ON \
550  -D Trilinos_ENABLE_Jpetra:BOOL=ON \
551  -D Trilinos_ENABLE_Kokkos:BOOL=ON \
552  -D Trilinos_ENABLE_Sacado:BOOL=ON \
553  -D Trilinos_ENABLE_Amesos:BOOL=ON \
554  -D Trilinos_ENABLE_AztecOO:BOOL=ON \
555  -D Trilinos_ENABLE_Ifpack:BOOL=ON \
556  -D Trilinos_ENABLE_Teuchos:BOOL=ON \
557  -D Trilinos_ENABLE_ML:BOOL=ON \
558  -D Trilinos_ENABLE_Thyra:BOOL=ON \
559  -D Trilinos_ENABLE_TrilinosCouplings:BOOL=ON \
560  $EXTRA_ARGS \
561  /path_to/trilinos-10.2.2-Source
562 ```
563
564 Note that you will have to specify the paths for where to install Trilinos, where to find the source, and where to find your newly compiled MPI.  Next, you should give this text file executable permissions, and run it; Trilinos will configure.  You should then be able to compile it using 'make all -jX', where X is the number of cores you have, and then 'make install'.
565
566 To configure deal.II, you should set the environment variable 'TRILINOS_DIR' to your install directory for Trilinos, then export the /lib subdirectory of that location to the DYLD_LIBRARY_PATH.  You should then be able to configure deal.II and have it see the installation.
567
568 Note: additional packages can be added by simply adding another line like {{{-D Trilinos_ENABLE_AztecOO:BOOL=ON}}}  Also, there is no claim that this list of options is complete/optimal, but it seems to work well for the author of this note.
569
570
571
572 ## Teuchos Error (Trilinos 10.4.1) when deal.II is Configured with Mumps, Blacs, Petsc and Trilinos 10.4.1
573
574 When deal.ii was configured to use Mumps and Blacs like so:
575
576 ```
577         ./configure --enable-shared --disable-threads \
578                     --with-cpu=native --with-umfpack  \
579                     --with-mumps=PATH-TO-MUMPS \
580                     --with-scalapack=PATH-TO-SCALAPACK \
581                     --with-blacs=PATH-TO-BLACS  --with-lapack=lapack \
582                     --with-metis-libs=/opt/local/lib \
583                     --with-trilinos=PATH-TO-TRILINOS
584 ```
585
586 the following error occurred during compilation:
587
588 ```
589         ============================ Compiling expand_instantiations
590         ============================ Compiling report_features
591         Undefined symbols:
592         "Teuchos::PrintActiveRCPNodes::PrintActiveRCPNodes()", referenced from:
593          global constructors keyed to report_features.cc in ccnoQB3F.o
594         "Teuchos::PrintActiveRCPNodes::~PrintActiveRCPNodes()", referenced from:
595         global constructors keyed to report_features.cc in ccnoQB3F.o
596         ld: symbol(s) not found
597 ```
598
599 Removing {{{--with-mumps and --with-blacs}}} allowed successful compilation.
600
601 The compilers used above were OpenMPI's MPI wrappers (including the Fortran MPI compiler), which were compiled with Macports' gcc45.

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.