Installation for parallel processing using OpenMP (Unix only)
Compiling and installing FFTW3
Version 3.3.3 or later of FFTW3 can be obtained from http://www.fftw.org
For gcc, this requires version 4.2 or later (note that LLVM on Mac OS X 10.7+ does not support OpenMP). FFTW version 3.3.3 or later need to be installed with single precision and OpenMP enabled, preferably in its default location (/usr/local):
./configure --enable-float --enable-openmp --enable-shared --disable-fortran --with-pic
On Mac OS X before 10.8, a universal library should be compiled by explicitly specifying the architectures (note on 10.6+ the ppc versions won't compile):
./configure --enable-float --enable-openmp --enable-shared --disable-fortran CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" CPP="gcc -E" CXXCPP="g++ -E"
See the note on the configure script for Mac OSX at the bottom
The compilation and installation should then be simply:
make
sudo make install
Compiling parallel Bsoft with OpenMP
As for the serial version of Bsoft, the recommended location for Bsoft is in /usr/local. Most of the instructions for the serial version also applies here. For parallel processing, Bsoft uses OpenMP for Linux and Mac OS X prior to 10.7, and Grand Central Dispatch for Mac OS X 10.7+. The compilation requires two additional flags:
bmake omp fftw3
A custom location for FFTW3 can also be specified:
bmake omp fftw3=/somedisk/mydirectory
Fixing the configure script for Mac OSX and OpenMP
Note: On Mac OS X the configure script exit with an error. To have it behave, replace to following section:
char omp_set_num_threads (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return omp_set_num_threads (); ; return 0; }
with the following:
char omp_set_num_threads (); int opm_get_thread_num(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { int tid; omp_set_num_threads(2); tid = omp_get_thread_num(); return 0; }