diff --git a/SConstruct b/SConstruct index f0b674d2a..0a3292ecd 100644 --- a/SConstruct +++ b/SConstruct @@ -61,7 +61,6 @@ if 'clean' in COMMAND_LINE_TARGETS: removeFile('.sconsign.dblite') removeFile('include/cantera/base/config.h') removeDirectory('include/cantera/ext') - removeFile('ext/f2c_libs/arith.h') removeFile('interfaces/cython/cantera/_cantera.cpp') removeFile('interfaces/cython/setup2.py') removeFile('interfaces/cython/setup3.py') @@ -385,7 +384,8 @@ config_options = [ PathVariable( 'FORTRAN', """The Fortran (90) compiler. If unspecified, the builder will look for - a compatible compiler (gfortran, ifort, g95) in the $PATH.""", + a compatible compiler (gfortran, ifort, g95) in the $PATH. Used only + for compiling the Fortran 90 interface.""", '', PathVariable.PathAccept), ('FORTRANFLAGS', 'Compilation options for the Fortran (90) compiler.', @@ -433,12 +433,12 @@ config_options = [ e.g. /usr/lib.""", '', PathVariable.PathAccept), ('blas_lapack_libs', - """Cantera comes with Fortran (or C) versions of those parts of BLAS and - LAPACK it requires. But performance may be better if you use a version - of these libraries optimized for your machine hardware. If you want to - use your own libraries, set blas_lapack_libs to the the list of - libraries that should be passed to the linker, separated by commas, - e.g. "lapack,blas" or "lapack,f77blas,cblas,atlas".""", + """Cantera can use BLAS and LAPACK libraries available on your system if + you have optimized versions available (e.g. Intel MKL). Otherwise, + Cantera will use Eigen for linear algebra support. To use BLAS + and LAPACK, set blas_lapack_libs to the the list of libraries + that should be passed to the linker, separated by commas, e.g. + "lapack,blas" or "lapack,f77blas,cblas,atlas".""", ''), PathVariable('blas_lapack_dir', """Directory containing the libraries specified by 'blas_lapack_libs'.""", @@ -516,13 +516,6 @@ config_options = [ 'boost_inc_dir', 'Location of the Boost header files.', defaults.boostIncDir, PathVariable.PathAccept), - BoolVariable( - 'build_with_f2c', - """For external procedures written in Fortran 77, both the - original F77 source code and C source code generated by the - 'f2c' program are included. Set this to "n" if you want to - build Cantera using the F77 sources in the ext directory.""", - True), PathVariable( 'stage_dir', """ Directory relative to the Cantera source directory to be @@ -661,15 +654,14 @@ if env['system_sundials'] in ('y','default'): # BLAS / LAPACK configuration if env['blas_lapack_libs'] != '': env['blas_lapack_libs'] = env['blas_lapack_libs'].split(',') - env['BUILD_BLAS_LAPACK'] = False + env['use_lapack'] = True elif env['OS'] == 'Darwin': env['blas_lapack_libs'] = [] - env['BUILD_BLAS_LAPACK'] = False + env['use_lapack'] = True env.Append(FRAMEWORKS=['Accelerate']) else: - # External BLAS/LAPACK were not given, so we need to compile them - env['BUILD_BLAS_LAPACK'] = True - env['blas_lapack_libs'] = [] # built into libcantera + env['blas_lapack_libs'] = [] + env['use_lapack'] = False # ************************************ # *** Compiler Configuration Tests *** @@ -895,17 +887,16 @@ if env['system_sundials'] == 'y': # In the case where a user is trying to link Cantera to an external BLAS/LAPACK # library, but Sundials was configured without this support, print a Warning. - if not env['has_sundials_lapack'] and not env['BUILD_BLAS_LAPACK']: + if not env['has_sundials_lapack'] and env['use_lapack']: print ('WARNING: External BLAS/LAPACK has been specified for Cantera ' 'but Sundials was built without this support.') else: # env['system_sundials'] == 'n' print """INFO: Using private installation of Sundials version 2.6.""" env['sundials_version'] = '2.6' - env['has_sundials_lapack'] = int(not env['BUILD_BLAS_LAPACK']) + env['has_sundials_lapack'] = int(env['use_lapack']) # Try to find a working Fortran compiler: -env['FORTRANSYSLIBS'] = [] fortran_libs = {'gfortran':'gfortran', 'g95':'f95'} def check_fortran(compiler, expected=False): if which(compiler) is not None: @@ -913,7 +904,6 @@ def check_fortran(compiler, expected=False): if lib: have_lib = conf.CheckLib(lib) if have_lib: - env.Append(FORTRANSYSLIBS=lib) env['FORTRAN'] = compiler return True else: @@ -1241,7 +1231,7 @@ else: configh['SUNDIALS_VERSION'] = env['sundials_version'].replace('.','') -if env.get('has_sundials_lapack') and not env['BUILD_BLAS_LAPACK']: +if env.get('has_sundials_lapack') and env['use_lapack']: configh['SUNDIALS_USE_LAPACK'] = 1 else: configh['SUNDIALS_USE_LAPACK'] = 0 @@ -1250,7 +1240,7 @@ cdefine('LAPACK_FTN_STRING_LEN_AT_END', 'lapack_ftn_string_len_at_end') cdefine('LAPACK_FTN_TRAILING_UNDERSCORE', 'lapack_ftn_trailing_underscore') cdefine('FTN_TRAILING_UNDERSCORE', 'lapack_ftn_trailing_underscore') cdefine('LAPACK_NAMES_LOWERCASE', 'lapack_names', 'lower') -configh['CT_USE_LAPACK'] = 0 if env['BUILD_BLAS_LAPACK'] else 1 +cdefine('CT_USE_LAPACK', 'use_lapack') cdefine('CT_USE_SYSTEM_EIGEN', env['system_eigen']) config_h = env.Command('include/cantera/base/config.h', @@ -1345,10 +1335,6 @@ if env['blas_lapack_libs']: linkLibs.extend(env['blas_lapack_libs']) linkSharedLibs.extend(env['blas_lapack_libs']) -if not env['build_with_f2c']: - linkLibs.extend(env['FORTRANSYSLIBS']) - linkSharedLibs.append(env['FORTRANSYSLIBS']) - # Store the list of needed static link libraries in the environment env['cantera_libs'] = linkLibs env['cantera_shared_libs'] = linkSharedLibs diff --git a/doc/sphinx/compiling.rst b/doc/sphinx/compiling.rst index 5f1fa6ef9..1da11b87f 100644 --- a/doc/sphinx/compiling.rst +++ b/doc/sphinx/compiling.rst @@ -390,24 +390,6 @@ Building Documentation scons build doxygen_docs=y sphinx_docs=y -MinGW Compilation problems --------------------------- - -* If you get a compiler error while compiling some of the "f2c" code, then your - version of MinGW has a problem with the order of its internal include paths, - such that it sees the GCC float.h before its own special version. To fix this - problem edit the GCC float.h located at (roughly):: - - c:\MinGW\lib\gcc\mingw32\4.6.1\include\float.h - - and add the following just before the end (before the final #endif) - - .. code-block:: c++ - - #ifndef _MINGW_FLOAT_H_ - #include_next - #endif - .. _sec-dependencies: Software used by Cantera diff --git a/doc/sphinx/scons-options.txt b/doc/sphinx/scons-options.txt index 2a1c18d7d..76d4fbe7b 100644 --- a/doc/sphinx/scons-options.txt +++ b/doc/sphinx/scons-options.txt @@ -272,13 +272,6 @@ running 'scons build'. The format of this file is: Location of the Boost header files. - default: '' -* build_with_f2c: [ yes | no ] - For external procedures written in Fortran 77, both the original F77 - source code and C source code generated by the 'f2c' program are - included. Set this to "n" if you want to build Cantera using the F77 - sources in the ext directory. - - default: 'yes' - * F77: [ string ] Compiler used to build the external Fortran 77 procedures from the Fortran source code. diff --git a/ext/SConscript b/ext/SConscript index 66ec22ed4..1af49d819 100644 --- a/ext/SConscript +++ b/ext/SConscript @@ -13,27 +13,6 @@ def prep_default(env): return localenv -def prep_fortran(env): - localenv = prep_default(env) - localenv.Prepend(CPPPATH='#include/cantera/base') # for config.h - return localenv - - -def prep_f2c(env): - localenv = prep_default(env) - - localenv.Prepend(CPPPATH=Dir('#ext/f2c_libs')) - if not localenv['HAS_TIMES_H']: - localenv.Append(CPPDEFINES=['USE_CLOCK']) - if not localenv['HAS_UNISTD_H']: - localenv.Append(CPPDEFINES=['MSDOS']) - if env['VERBOSE']: - print "INFO 2: prep_f2c: adding MSDOS to CPPDEFINES" - print "INFO 2: CPPDEFINES ", localenv['CPPDEFINES'] - - return localenv - - def prep_gtest(env): localenv = prep_default(env) localenv.Prepend(CPPPATH=[Dir('#ext/googletest'), @@ -52,33 +31,6 @@ def prep_fmt(env): libs = [('libexecstream', ['cpp'], prep_default), ('fmt/fmt', ['cc'], prep_fmt)] -if env['build_with_f2c']: - libs.append(('f2c_math', ['cpp','c'], prep_f2c)) - - # Create arith.h using the arithchk program - if not os.path.exists('arith.h'): - arithenv = prep_f2c(env) - - # TODO: make link flag more general - arithenv.Append(CPPFLAGS='-DNO_FPINIT') - arithenv.Program('f2c_libs/arithchk/arithchk', source='f2c_libs/arithchk/arithchk.c', - LIBS=env['LIBM']) - arithenv.Command('#ext/f2c_libs/arith.h', 'f2c_libs/arithchk/arithchk$PROGSUFFIX', - '$SOURCE > $TARGET') - - libs.append(('f2c_libs', 'c', prep_f2c)) - - if env['BUILD_BLAS_LAPACK']: - libs.append(('f2c_blas', ['c'], prep_f2c)) - libs.append(('f2c_lapack', ['c'], prep_f2c)) - -else: - libs.append(('math', ['cpp','c','f'], prep_fortran)) - - if env['BUILD_BLAS_LAPACK']: - libs.append(('blas', ['f'], prep_default)) - libs.append(('lapack', ['f'], prep_default)) - for subdir, extensions, prepFunction in libs: localenv = prepFunction(env) objects = localenv.SharedObject(mglob(localenv, subdir, *extensions)) @@ -92,7 +44,7 @@ if env['system_sundials'] == 'n': sundials_configh = {} if env['OS'] != 'Windows': sundials_configh['SUNDIALS_USE_GENERIC_MATH'] = 1 - if not env['BUILD_BLAS_LAPACK']: + if env['use_lapack']: sundials_configh['SUNDIALS_BLAS_LAPACK'] = 1 localenv.AlwaysBuild(env.Command('#include/cantera/ext/sundials/sundials_config.h', 'sundials_config.h.in', @@ -106,10 +58,13 @@ if env['system_sundials'] == 'n': Copy('$TARGET', '$SOURCE'))) # Compile Sundials source files + exclude = ['_klu', '_superlumt'] + if not env['use_lapack']: + exclude.append('_lapack') for subdir in ('sundials', 'nvec_ser', 'cvodes', 'ida'): libraryTargets.extend(localenv.SharedObject( [f for f in mglob(localenv, 'sundials/src/'+subdir, 'c') - if '_klu' not in f.name and '_superlumt' not in f.name])) + if not any(pattern in f.name for pattern in exclude)])) if not env['system_eigen']: build(localenv.Command('#include/cantera/ext/Eigen', '#ext/eigen/Eigen', diff --git a/platform/posix/Cantera.mak.in b/platform/posix/Cantera.mak.in index 8075f0142..ce16e75af 100644 --- a/platform/posix/Cantera.mak.in +++ b/platform/posix/Cantera.mak.in @@ -44,8 +44,6 @@ CANTERA_FORTRAN_MODS=$(CANTERA_INSTALL_ROOT)/include/cantera CANTERA_FORTRAN_SYSLIBS=@mak_fort_threadflags@ -lstdc++ -CANTERA_SYSLIBS=@mak_syslibs@ - ############################################################################### # BOOST ############################################################################### @@ -79,7 +77,7 @@ CANTERA_DEFINES = -DCANTERA_VERSION=@cantera_version@ CANTERA_LIBS=$(CANTERA_CORE_LIBS) \ $(CANTERA_EXTRA_LIBDIRS) $(CANTERA_SUNDIALS_LIBS) \ - $(CANTERA_BLAS_LAPACK_LIBS) $(CANTERA_SYSLIBS) + $(CANTERA_BLAS_LAPACK_LIBS) CANTERA_TOTAL_LIBS=$(CANTERA_LIBS) diff --git a/platform/posix/SConscript b/platform/posix/SConscript index 9d529cc5c..ad796c664 100644 --- a/platform/posix/SConscript +++ b/platform/posix/SConscript @@ -84,12 +84,6 @@ if '-pthread' in localenv['thread_flags']: else: localenv['mak_fort_threadflags'] = '' -if not localenv['build_with_f2c']: - localenv['mak_syslibs'] = ' '.join('-l%s' % s for s in localenv['FORTRANSYSLIBS']) - pc_libs.extend(localenv['FORTRANSYSLIBS']) -else: - localenv['mak_syslibs'] = '' - mak = build(localenv.SubstFile('Cantera.mak', 'Cantera.mak.in')) install('$inst_incdir', mak) diff --git a/src/SConscript b/src/SConscript index 60397dfdd..14a1cef66 100644 --- a/src/SConscript +++ b/src/SConscript @@ -10,15 +10,11 @@ def baseSetup(env, subdir, extensions): env.Append(CPPDEFINES={'CANTERA_DATA': escaped_datadir}) return defaultSetup(env, subdir, extensions) -def equilSetup(env, subdir, extensions): - env.Append(CPPPATH=['#ext/f2c_libs']) - return defaultSetup(env, subdir, extensions) - # (subdir, (file extensions), (extra setup(env))) libs = [('base', ['cpp'], baseSetup), ('thermo', ['cpp'], defaultSetup), ('tpx', ['cpp'], defaultSetup), - ('equil', ['cpp','c'], equilSetup), + ('equil', ['cpp','c'], defaultSetup), ('numerics', ['cpp'], defaultSetup), ('kinetics', ['cpp'], defaultSetup), ('transport', ['cpp'], defaultSetup), @@ -47,7 +43,6 @@ env['cantera_staticlib'] = lib # Windows and OS X require shared libraries at link time if localenv['OS'] in ('Darwin', 'Windows', 'Cygwin'): - localenv.Append(LIBS=localenv['FORTRANSYSLIBS']) if (localenv['system_sundials'] == 'y'): localenv.Append(LIBS=localenv['sundials_libs'], LIBPATH=localenv['sundials_libdir'])