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;
}