diff --git a/applications/solvers/combustion/fireFoam/Make/options b/applications/solvers/combustion/fireFoam/Make/options --- a/applications/solvers/combustion/fireFoam/Make/options +++ b/applications/solvers/combustion/fireFoam/Make/options @@ -36,6 +36,7 @@ -lsampling \ -lcompressibleRASModels \ -lcompressibleLESModels \ + -lcompressibleTurbulenceModel \ -lspecie \ -lfluidThermophysicalModels \ -lsolidProperties \ @@ -52,4 +53,5 @@ -lpyrolysisModels \ -lregionCoupling \ -llagrangianIntermediate \ + -llagrangian \ -lODE diff --git a/applications/solvers/compressible/rhoSimpleFoam/rhoSimplecFoam/Make/options b/applications/solvers/compressible/rhoSimpleFoam/rhoSimplecFoam/Make/options --- a/applications/solvers/compressible/rhoSimpleFoam/rhoSimplecFoam/Make/options +++ b/applications/solvers/compressible/rhoSimpleFoam/rhoSimplecFoam/Make/options @@ -13,6 +13,7 @@ -lfluidThermophysicalModels \ -lspecie \ -lcompressibleRASModels \ + -lcompressibleTurbulenceModel \ -lfiniteVolume \ -lsampling \ -lmeshTools \ diff --git a/applications/solvers/incompressible/adjointShapeOptimizationFoam/Make/options b/applications/solvers/incompressible/adjointShapeOptimizationFoam/Make/options --- a/applications/solvers/incompressible/adjointShapeOptimizationFoam/Make/options +++ b/applications/solvers/incompressible/adjointShapeOptimizationFoam/Make/options @@ -6,6 +6,7 @@ -I$(LIB_SRC)/finiteVolume/lnInclude EXE_LIBS = \ + -lincompressibleTurbulenceModel \ -lincompressibleRASModels \ -lincompressibleTransportModels \ -lfiniteVolume diff --git a/applications/solvers/incompressible/simpleFoam/SRFSimpleFoam/Make/options b/applications/solvers/incompressible/simpleFoam/SRFSimpleFoam/Make/options --- a/applications/solvers/incompressible/simpleFoam/SRFSimpleFoam/Make/options +++ b/applications/solvers/incompressible/simpleFoam/SRFSimpleFoam/Make/options @@ -11,6 +11,7 @@ EXE_LIBS = \ + -lincompressibleTurbulenceModel \ -lincompressibleRASModels \ -lincompressibleTransportModels \ -lfiniteVolume \ diff --git a/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/Make/options b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/Make/options --- a/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/Make/options +++ b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/Make/options @@ -20,6 +20,7 @@ -lfluidThermophysicalModels \ -lspecie \ -lradiationModels \ + -lincompressibleTurbulenceModel \ -lincompressibleRASModels \ -lincompressibleLESModels \ -lincompressibleTransportModels \ diff --git a/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/icoUncoupledKinematicParcelDyMFoam/Make/options b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/icoUncoupledKinematicParcelDyMFoam/Make/options --- a/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/icoUncoupledKinematicParcelDyMFoam/Make/options +++ b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/icoUncoupledKinematicParcelDyMFoam/Make/options @@ -26,6 +26,7 @@ -lradiationModels \ -lincompressibleRASModels \ -lincompressibleLESModels \ + -lincompressibleTurbulenceModel \ -lincompressibleTransportModels \ -lfiniteVolume \ -lmeshTools \ diff --git a/applications/solvers/lagrangian/reactingParcelFilmFoam/Make/options b/applications/solvers/lagrangian/reactingParcelFilmFoam/Make/options --- a/applications/solvers/lagrangian/reactingParcelFilmFoam/Make/options +++ b/applications/solvers/lagrangian/reactingParcelFilmFoam/Make/options @@ -30,6 +30,7 @@ -lfvOptions \ -lsampling \ -lmeshTools \ + -lcompressibleTurbulenceModel \ -lcompressibleRASModels \ -lcompressibleLESModels \ -lspecie \ @@ -43,6 +44,7 @@ -lregionModels \ -lradiationModels \ -lsurfaceFilmModels \ + -llagrangian \ -llagrangianIntermediate \ -lODE \ -lcombustionModels diff --git a/applications/solvers/multiphase/multiphaseEulerFoam/Make/options b/applications/solvers/multiphase/multiphaseEulerFoam/Make/options --- a/applications/solvers/multiphase/multiphaseEulerFoam/Make/options +++ b/applications/solvers/multiphase/multiphaseEulerFoam/Make/options @@ -19,6 +19,7 @@ -linterfaceProperties \ -lincompressibleTransportModels \ -lcompressibleMultiphaseEulerianInterfacialModels \ + -lincompressibleTurbulenceModel \ -lincompressibleLESModels \ -lincompressibleRASModels \ -lfiniteVolume diff --git a/applications/utilities/mesh/generation/blockMesh/Make/options b/applications/utilities/mesh/generation/blockMesh/Make/options --- a/applications/utilities/mesh/generation/blockMesh/Make/options +++ b/applications/utilities/mesh/generation/blockMesh/Make/options @@ -6,4 +6,5 @@ EXE_LIBS = \ -lblockMesh \ -lmeshTools \ + -lfiniteVolume \ -ldynamicMesh diff --git a/applications/utilities/mesh/generation/snappyHexMesh/Make/options b/applications/utilities/mesh/generation/snappyHexMesh/Make/options --- a/applications/utilities/mesh/generation/snappyHexMesh/Make/options +++ b/applications/utilities/mesh/generation/snappyHexMesh/Make/options @@ -1,5 +1,4 @@ EXE_INC = \ - /* -g -DFULLDEBUG -O0 */ \ -I$(LIB_SRC)/parallel/decompose/decompositionMethods/lnInclude \ -I$(LIB_SRC)/mesh/autoMesh/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ diff --git a/applications/utilities/mesh/manipulation/renumberMesh/Make/options b/applications/utilities/mesh/manipulation/renumberMesh/Make/options --- a/applications/utilities/mesh/manipulation/renumberMesh/Make/options +++ b/applications/utilities/mesh/manipulation/renumberMesh/Make/options @@ -1,5 +1,4 @@ EXE_INC = \ - /* -DFULLDEBUG -g -O0 */ \ ${COMPILE_FLAGS} \ -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/dynamicMesh/lnInclude \ diff --git a/applications/utilities/miscellaneous/foamDebugSwitches/Make/options b/applications/utilities/miscellaneous/foamDebugSwitches/Make/options --- a/applications/utilities/miscellaneous/foamDebugSwitches/Make/options +++ b/applications/utilities/miscellaneous/foamDebugSwitches/Make/options @@ -42,10 +42,8 @@ -lmeshTools \ -lmolecularMeasurements \ -lmolecule \ -/* -lmultiphaseInterFoam */ \ -lODE \ -lOpenFOAM \ -/* -lphaseModel */ \ -lpotential \ -lradiationModels \ -lrandomProcesses \ diff --git a/applications/utilities/postProcessing/dataConversion/foamToEnsight/Make/options b/applications/utilities/postProcessing/dataConversion/foamToEnsight/Make/options --- a/applications/utilities/postProcessing/dataConversion/foamToEnsight/Make/options +++ b/applications/utilities/postProcessing/dataConversion/foamToEnsight/Make/options @@ -1,5 +1,4 @@ EXE_INC = \ - /* -DFULLDEBUG -g -O0 */ \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/sampling/lnInclude \ diff --git a/applications/utilities/postProcessing/miscellaneous/execFlowFunctionObjects/Make/options b/applications/utilities/postProcessing/miscellaneous/execFlowFunctionObjects/Make/options --- a/applications/utilities/postProcessing/miscellaneous/execFlowFunctionObjects/Make/options +++ b/applications/utilities/postProcessing/miscellaneous/execFlowFunctionObjects/Make/options @@ -9,9 +9,11 @@ -lincompressibleTransportModels \ -lincompressibleRASModels \ -lincompressibleLESModels \ + -lincompressibleTurbulenceModel \ -lfluidThermophysicalModels \ -lspecie \ -lcompressibleRASModels \ -lcompressibleLESModels \ + -lcompressibleTurbulenceModel \ -lfiniteVolume \ -lgenericPatchFields diff --git a/applications/utilities/postProcessing/turbulence/R/Make/options b/applications/utilities/postProcessing/turbulence/R/Make/options --- a/applications/utilities/postProcessing/turbulence/R/Make/options +++ b/applications/utilities/postProcessing/turbulence/R/Make/options @@ -10,6 +10,8 @@ EXE_LIBS = \ -lincompressibleTransportModels \ -lincompressibleRASModels \ + -lincompressibleTurbulenceModel \ + -lcompressibleTurbulenceModel \ -lfluidThermophysicalModels \ -lspecie \ -lcompressibleRASModels \ diff --git a/applications/utilities/postProcessing/turbulence/createTurbulenceFields/Make/options b/applications/utilities/postProcessing/turbulence/createTurbulenceFields/Make/options --- a/applications/utilities/postProcessing/turbulence/createTurbulenceFields/Make/options +++ b/applications/utilities/postProcessing/turbulence/createTurbulenceFields/Make/options @@ -5,6 +5,7 @@ -I$(LIB_SRC)/finiteVolume/lnInclude EXE_LIBS = \ + -lincompressibleTurbulenceModel \ -lincompressibleRASModels \ -lincompressibleTransportModels \ -lfiniteVolume \ diff --git a/applications/utilities/postProcessing/velocityField/Pe/Make/options b/applications/utilities/postProcessing/velocityField/Pe/Make/options --- a/applications/utilities/postProcessing/velocityField/Pe/Make/options +++ b/applications/utilities/postProcessing/velocityField/Pe/Make/options @@ -12,10 +12,12 @@ -lincompressibleTransportModels \ -lincompressibleRASModels \ -lincompressibleLESModels \ + -lincompressibleTurbulenceModel \ -lfluidThermophysicalModels \ -lspecie \ -lcompressibleRASModels \ -lcompressibleLESModels \ + -lcompressibleTurbulenceModel \ -lfiniteVolume \ -lgenericPatchFields \ -lmeshTools diff --git a/applications/utilities/postProcessing/wall/wallShearStress/Make/options b/applications/utilities/postProcessing/wall/wallShearStress/Make/options --- a/applications/utilities/postProcessing/wall/wallShearStress/Make/options +++ b/applications/utilities/postProcessing/wall/wallShearStress/Make/options @@ -7,8 +7,10 @@ EXE_LIBS = \ -lincompressibleTransportModels \ -lincompressibleRASModels \ + -lincompressibleTurbulenceModel \ -lfluidThermophysicalModels \ -lspecie \ -lcompressibleRASModels \ + -lcompressibleTurbulenceModel \ -lfiniteVolume \ -lgenericPatchFields diff --git a/applications/utilities/postProcessing/wall/yPlusLES/Make/options b/applications/utilities/postProcessing/wall/yPlusLES/Make/options --- a/applications/utilities/postProcessing/wall/yPlusLES/Make/options +++ b/applications/utilities/postProcessing/wall/yPlusLES/Make/options @@ -8,6 +8,7 @@ EXE_LIBS = \ -lincompressibleLESModels \ + -lincompressibleTurbulenceModel \ -lincompressibleTransportModels \ -lfiniteVolume \ -lgenericPatchFields diff --git a/applications/utilities/postProcessing/wall/yPlusRAS/Make/options b/applications/utilities/postProcessing/wall/yPlusRAS/Make/options --- a/applications/utilities/postProcessing/wall/yPlusRAS/Make/options +++ b/applications/utilities/postProcessing/wall/yPlusRAS/Make/options @@ -10,9 +10,11 @@ EXE_LIBS = \ -lincompressibleTransportModels \ -lincompressibleRASModels \ + -lincompressibleTurbulenceModel \ -lfluidThermophysicalModels \ -lspecie \ -lcompressibleRASModels \ + -lcompressibleTurbulenceModel \ -lfiniteVolume \ -lgenericPatchFields \ -lmeshTools \ diff --git a/applications/utilities/preProcessing/applyBoundaryLayer/Make/options b/applications/utilities/preProcessing/applyBoundaryLayer/Make/options --- a/applications/utilities/preProcessing/applyBoundaryLayer/Make/options +++ b/applications/utilities/preProcessing/applyBoundaryLayer/Make/options @@ -8,6 +8,7 @@ EXE_LIBS = \ -lfiniteVolume \ + -lincompressibleTurbulenceModel \ -lincompressibleRASModels \ -lincompressibleLESModels \ -lincompressibleTransportModels \ diff --git a/bin/addr2line4Mac.py b/bin/addr2line4Mac.py new file mode 100755 --- /dev/null +++ b/bin/addr2line4Mac.py @@ -0,0 +1,30 @@ +#! /usr/bin/python + +import sys +filename=sys.argv[1] +address=sys.argv[2] +import re + +import subprocess + +p = subprocess.Popen("gdb -batch -x /dev/stdin", + shell=True, + bufsize=0, + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + close_fds=True) + +(child_stdin, child_stdout) = (p.stdin, p.stdout) +child_stdin.write("set sharedlibrary preload-libraries no\n") +child_stdin.write("file "+filename+"\n") +child_stdin.write("info line *"+address+"\n") +result=child_stdout.readline() + +answer="??:0" + +match=re.compile('Line (.+) of "(.+)" starts at').match(result) +if match: + answer=match.group(2)+":"+match.group(1) +print answer, + +sys.exit(255) diff --git a/bin/paraFoam b/bin/paraFoam --- a/bin/paraFoam +++ b/bin/paraFoam @@ -68,9 +68,9 @@ export LC_ALL=C # reader extension -extension=OpenFOAM +extension=foam -requirePV=1 +requirePV=0 # parse options while [ "$#" -gt 0 ] diff --git a/etc/bashrc b/etc/bashrc --- a/etc/bashrc +++ b/etc/bashrc @@ -63,7 +63,7 @@ #- Compiler: # WM_COMPILER = Gcc | Gcc43 | Gcc44 | Gcc45 | Gcc46 | Clang | Icc (Intel icc) -export WM_COMPILER=Gcc +export WM_COMPILER=Clang unset WM_COMPILER_ARCH WM_COMPILER_LIB_ARCH #- Architecture: @@ -227,6 +227,11 @@ #- Clean MANPATH (trailing ':' to find system pages) cleaned=`$foamClean "$MANPATH"`: && MANPATH="$cleaned" +if [[ `uname -s` == "Darwin" ]] +then + cleaned=`$foamClean "$DYLD_LIBRARY_PATH" "$foamOldDirs"` && DYLD_LIBRARY_PATH="$cleaned" +fi + export PATH LD_LIBRARY_PATH MANPATH #- Clean LD_PRELOAD diff --git a/etc/config/paraview.sh b/etc/config/paraview.sh --- a/etc/config/paraview.sh +++ b/etc/config/paraview.sh @@ -134,6 +134,19 @@ unset PV_PLUGIN_PATH fi +if [ $WM_ARCH_BASE=="darwin" ] +then + : ${PARAVIEW_APP_DIR:="/Applications/paraview.app"}; export PARAVIEW_APP_DIR + if [ -d $PARAVIEW_APP_DIR -a ! -r $ParaView_DIR ] + then + echo "Using paraview in directory $PARAVIEW_APP_DIR" + unset ParaView_VERSION ParaView_MAJOR ParaView_DIR + # needs to be an alias because if it is in the path the Python Shell does not work + alias paraview=$PARAVIEW_APP_DIR/Contents/MacOS/paraview + export PATH=$PARAVIEW_APP_DIR/Contents/bin:$PATH + fi +fi + unset _foamParaviewEval unset cleaned cmake paraviewInstDir paraviewPython diff --git a/etc/config/settings.sh b/etc/config/settings.sh --- a/etc/config/settings.sh +++ b/etc/config/settings.sh @@ -46,6 +46,10 @@ while [ $# -ge 1 ] do export LD_LIBRARY_PATH=$1:$LD_LIBRARY_PATH + if [[ `uname -s` == "Darwin" ]] + then + export DYLD_LIBRARY_PATH=$1:$DYLD_LIBRARY_PATH + fi shift done } @@ -151,6 +155,43 @@ export WM_LDFLAGS='-mabi=64 -G0' ;; +Darwin) + export WM_ARCH_BASE=darwin + + case `uname -p` in + powerpc) + export WM_ARCH=darwinPpc + ;; + i386) + export WM_ARCH=darwinIntel + case $WM_ARCH_OPTION in + 32) + export WM_COMPILER_LIB_ARCH=32 + export WM_CC='clang' + export WM_CXX='clang++' + export WM_CFLAGS='-m32 -fPIC' + export WM_CXXFLAGS='-m32 -fPIC' + export WM_LDFLAGS='-m32' + ;; + 64) + WM_ARCH=darwinIntel64 + export WM_COMPILER_LIB_ARCH=64 + export WM_CC='clang' + export WM_CXX='clang++' + export WM_CFLAGS='-m64 -fPIC' + export WM_CXXFLAGS='-m64 -fPIC' + export WM_LDFLAGS='-m64' + ;; + *) + echo "Unknown WM_ARCH_OPTION $WM_ARCH_OPTION, should be 32 or 64" + ;; + esac + ;; + *) + echo "Unknown architecture "`uname -p` "for Darwin" + esac + ;; + *) # an unsupported operating system /bin/cat <&2 @@ -262,8 +303,7 @@ # using clang - not gcc export WM_CC='clang' export WM_CXX='clang++' - clang_version=llvm-3.1 - #clang_version=llvm-svn + clang_version=llvm-3.3svn ;; *) echo 1>&2 @@ -593,3 +633,4 @@ unset _foamAddPath _foamAddLib _foamAddMan foamCompiler minBufferSize # ----------------------------------------------------------------- end-of-file +# vim:et:sw=4:ts=4:sts=4 diff --git a/src/OSspecific/POSIX/POSIX.C b/src/OSspecific/POSIX/POSIX.C --- a/src/OSspecific/POSIX/POSIX.C +++ b/src/OSspecific/POSIX/POSIX.C @@ -53,7 +53,10 @@ #include #include #include +#ifndef darwin #include +#else +#endif #include @@ -1174,6 +1177,14 @@ } void* handle = ::dlopen(lib.c_str(), RTLD_LAZY|RTLD_GLOBAL); +#ifdef darwin + if(!handle && lib.ext()=="so") { + fileName lName=lib.lessExt()+".dylib"; + handle = + dlopen(lName.c_str(), RTLD_LAZY|RTLD_GLOBAL); + } +#endif + if (!handle && check) { WarningIn("dlOpen(const fileName&, const bool)") @@ -1267,9 +1278,15 @@ void *data ) { +#ifdef darwin + WarningIn("collectLibsCallback") + << "Not yet implemented for Mac OS X" + << Foam::endl; +#else Foam::DynamicList* ptr = reinterpret_cast*>(data); ptr->append(info->dlpi_name); +#endif return 0; } @@ -1277,7 +1294,13 @@ Foam::fileNameList Foam::dlLoaded() { DynamicList libs; +#ifdef darwin + WarningIn("dlLoaded") + << "Not yet implemented for Mac OS X" + << endl; +#else dl_iterate_phdr(collectLibsCallback, &libs); +#endif if (POSIX::debug) { std::cout diff --git a/src/OSspecific/POSIX/clockTime/clockTime.H b/src/OSspecific/POSIX/clockTime/clockTime.H --- a/src/OSspecific/POSIX/clockTime/clockTime.H +++ b/src/OSspecific/POSIX/clockTime/clockTime.H @@ -37,6 +37,9 @@ #define clockTime_H #include +#ifdef darwin +#include +#endif // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/OSspecific/POSIX/fileStat.C b/src/OSspecific/POSIX/fileStat.C --- a/src/OSspecific/POSIX/fileStat.C +++ b/src/OSspecific/POSIX/fileStat.C @@ -29,7 +29,9 @@ #include #include +#ifndef darwin #include +#endif // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // diff --git a/src/OSspecific/POSIX/printStack.C b/src/OSspecific/POSIX/printStack.C --- a/src/OSspecific/POSIX/printStack.C +++ b/src/OSspecific/POSIX/printStack.C @@ -31,8 +31,11 @@ #include "readHexLabel.H" #include +#ifndef darwin #include +#endif #include +#include // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -53,11 +56,22 @@ for (label cnt = 0; cnt <= line; cnt++) { char buffer[MAX]; + char* s = fgets(buffer, MAX-1, cmdPipe); if (s == NULL) { +#ifdef darwin + // workaround for the Python-Script + for(int i=0;i +void *getStackAddress() +{ + const unsigned int stackLevel=level; + return ( + __builtin_frame_address(level) + ? __builtin_return_address(stackLevel) + : (void *)0 + ); +}; + +#define GET_STACK_ADDRESS(lvl) \ + case lvl: {return getStackAddress(); break; } + +// please don't laugh. For some reason this is necessary (the compiler won't accept it otherwise) +void *getStackAddress(int level) +{ + switch(level) { + GET_STACK_ADDRESS(0); + GET_STACK_ADDRESS(1); + GET_STACK_ADDRESS(2); + GET_STACK_ADDRESS(3); + GET_STACK_ADDRESS(4); + GET_STACK_ADDRESS(5); + GET_STACK_ADDRESS(6); + GET_STACK_ADDRESS(7); + GET_STACK_ADDRESS(8); + GET_STACK_ADDRESS(9); + GET_STACK_ADDRESS(10); + GET_STACK_ADDRESS(11); + GET_STACK_ADDRESS(12); + GET_STACK_ADDRESS(13); + GET_STACK_ADDRESS(14); + GET_STACK_ADDRESS(15); + GET_STACK_ADDRESS(16); + GET_STACK_ADDRESS(17); + GET_STACK_ADDRESS(18); + GET_STACK_ADDRESS(19); + GET_STACK_ADDRESS(20); + GET_STACK_ADDRESS(21); + default: + return (void *)0; + break; + } +} + +unsigned backtrace(void **bt, unsigned maxAddrs) +{ + unsigned valid=0; + bool ok=true; + + for(int level=0;level +#elif defined(__APPLE__) + +// # include +#include +#include + #endif #include @@ -91,10 +97,40 @@ return result; } +#elif defined(__APPLE__) + +void *(*Foam::sigFpe::system_malloc_)(malloc_zone_t *zone, size_t size)=NULL; + +void* Foam::sigFpe::nan_malloc_(malloc_zone_t *zone, size_t size) +{ + void *result=system_malloc_(zone,size); + + // initialize to signalling NaN +# ifdef WM_SP + + const uint32_t sNAN = 0x7ff7fffflu; + uint32_t* dPtr = reinterpret_cast(result); + +# else + + const uint64_t sNAN = 0x7ff7ffffffffffffllu; + uint64_t* dPtr = reinterpret_cast(result); + +# endif + + const size_t nScalars = size/sizeof(scalar); + for (size_t i = 0; i < nScalars; ++i) + { + *dPtr++ = sNAN; + } + + return result; +} + #endif -#ifdef LINUX_GNUC +#if defined(LINUX_GNUC) || defined(__APPLE__) void Foam::sigFpe::sigHandler(int) { @@ -159,6 +195,44 @@ __malloc_hook = oldMallocHook_; } + # elif defined(__APPLE__) + + if(system_malloc_!=NULL) { + malloc_zone_t *zone = malloc_default_zone(); + if(zone==NULL) { + FatalErrorIn("Foam__sigFpe::set") + << "Could not get malloc_default_zone()." << endl + << "Seems like this version of Mac OS X doesn't support FOAM_SETNAN" + << endl + << exit(FatalError); + + } + + if(zone->version>=8) + { + vm_protect( + mach_task_self(), + (uintptr_t)zone, + sizeof(malloc_zone_t), + 0, + VM_PROT_READ | VM_PROT_WRITE + );//remove the write protection + } + zone->malloc=system_malloc_; + system_malloc_=NULL; + if(zone->version==8) + { + vm_protect( + mach_task_self(), + (uintptr_t)zone, + sizeof(malloc_zone_t), + 0, + VM_PROT_READ + );//put the write protection back + } + + } + # endif } } @@ -227,6 +301,28 @@ NULL ); +# elif defined(__APPLE__) + + struct sigaction newAction; + newAction.sa_handler = sigHandler; + newAction.sa_flags = SA_NODEFER; + sigemptyset(&newAction.sa_mask); + if (sigaction(SIGFPE, &newAction, &oldAction_) < 0) + { + FatalErrorIn + ( + "Foam::sigFpe::set()" + ) << "Cannot set SIGFPE trapping" + << abort(FatalError); + } + _MM_SET_EXCEPTION_MASK(_MM_GET_EXCEPTION_MASK() & ~_MM_MASK_INVALID); + _MM_SET_EXCEPTION_MASK(_MM_GET_EXCEPTION_MASK() & ~_MM_MASK_DIV_ZERO); + + _mm_setcsr( _MM_MASK_MASK &~ + (_MM_MASK_OVERFLOW|_MM_MASK_INVALID|_MM_MASK_DIV_ZERO) ); + + supported=true; + # endif @@ -251,11 +347,56 @@ bool supported = false; # ifdef LINUX_GNUC + supported = true; // Set our malloc __malloc_hook = Foam::sigFpe::nanMallocHook_; +#elif defined(__APPLE__) + + if(system_malloc_!=NULL) { + FatalErrorIn("Foam__sigFpe::set") + << "system_malloc_ already reset." << endl + << "This should never happen" + << endl + << exit(FatalError); + } + + malloc_zone_t *zone = malloc_default_zone(); + if(zone==NULL) { + FatalErrorIn("Foam__sigFpe::set") + << "Could not get malloc_default_zone()." << endl + << "Seems like this version of Mac OS X doesn't support FOAM_SETNAN" + << endl + << exit(FatalError); + } + // According to http://bkdc.ubiquity.ro/2011/07/how-to-set-malloc-hooks-in-osx-lion-107.html + if(zone->version>=8) + { + vm_protect( + mach_task_self(), + (uintptr_t)zone, + sizeof(malloc_zone_t), + 0, + VM_PROT_READ | VM_PROT_WRITE + );//remove the write protection + } + system_malloc_=zone->malloc; + zone->malloc=Foam::sigFpe::nan_malloc_; + if(zone->version==8) + { + vm_protect( + mach_task_self(), + (uintptr_t)zone, + sizeof(malloc_zone_t), + 0, + VM_PROT_READ + );//put the write protection back + } + + supported=true; + # endif diff --git a/src/OSspecific/POSIX/signals/sigFpe.H b/src/OSspecific/POSIX/signals/sigFpe.H --- a/src/OSspecific/POSIX/signals/sigFpe.H +++ b/src/OSspecific/POSIX/signals/sigFpe.H @@ -53,6 +53,10 @@ # define LINUX_GNUC #endif +#ifdef __APPLE__ +#include +#endif + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam @@ -77,12 +81,20 @@ //- NaN malloc function. From malloc_hook manpage. static void* nanMallocHook_(size_t size, const void *caller); +#elif defined (__APPLE__) + + //- pointer to the original malloc that is overrided + static void *(*system_malloc_)(malloc_zone_t *zone, size_t size); + + //- the overriding handler + static void* nan_malloc_(malloc_zone_t *zone, size_t size); + # endif // Static data members -# ifdef LINUX_GNUC +# if defined(LINUX_GNUC) || defined(__APPLE__) //- Handler for caught signals static void sigHandler(int); diff --git a/src/OpenFOAM/db/dictionary/functionEntries/codeStream/codeStream.C b/src/OpenFOAM/db/dictionary/functionEntries/codeStream/codeStream.C --- a/src/OpenFOAM/db/dictionary/functionEntries/codeStream/codeStream.C +++ b/src/OpenFOAM/db/dictionary/functionEntries/codeStream/codeStream.C @@ -30,6 +30,7 @@ #include "dynamicCode.H" #include "dynamicCodeContext.H" #include "Time.H" +#include "longLong.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // diff --git a/src/OpenFOAM/db/dynamicLibrary/dynamicCode/dynamicCode.C b/src/OpenFOAM/db/dynamicLibrary/dynamicCode/dynamicCode.C --- a/src/OpenFOAM/db/dynamicLibrary/dynamicCode/dynamicCode.C +++ b/src/OpenFOAM/db/dynamicLibrary/dynamicCode/dynamicCode.C @@ -50,6 +50,11 @@ const char* const Foam::dynamicCode::topDirName = "dynamicCode"; +#ifndef darwin +const char* const Foam::dynamicCode::dynamicLibExtension = ".so"; +#else +const char* const Foam::dynamicCode::dynamicLibExtension = ".dylib"; +#endif // * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * // @@ -334,7 +339,7 @@ Foam::fileName Foam::dynamicCode::libRelPath() const { - return codeRelPath()/libSubDir_/"lib" + codeName_ + ".so"; + return codeRelPath()/libSubDir_/"lib" + codeName_ + dynamicLibExtension; } diff --git a/src/OpenFOAM/db/dynamicLibrary/dynamicCode/dynamicCode.H b/src/OpenFOAM/db/dynamicLibrary/dynamicCode/dynamicCode.H --- a/src/OpenFOAM/db/dynamicLibrary/dynamicCode/dynamicCode.H +++ b/src/OpenFOAM/db/dynamicLibrary/dynamicCode/dynamicCode.H @@ -109,7 +109,8 @@ //- Top-level directory name for copy/compiling static const char* const topDirName; - + static const char* const dynamicLibExtension; + // Protected Member Functions //- Copy lines while expanding variables @@ -221,7 +222,7 @@ // Corresponds to codeRoot()/libSubDir()/lib\.so fileName libPath() const { - return codeRoot_/libSubDir_/"lib" + codeName_ + ".so"; + return codeRoot_/libSubDir_/"lib" + codeName_ + dynamicLibExtension; } //- Path for specified code name relative to \$FOAM_CASE diff --git a/src/OpenFOAM/primitives/Scalar/doubleFloat.H b/src/OpenFOAM/primitives/Scalar/doubleFloat.H --- a/src/OpenFOAM/primitives/Scalar/doubleFloat.H +++ b/src/OpenFOAM/primitives/Scalar/doubleFloat.H @@ -31,6 +31,16 @@ #include +#ifndef DUMMY_SCALAR_FUNCTIONS +#define DUMMY_SCALAR_FUNCTIONS +inline float j0f(float x) { return float(j0(double(x)));} +inline float j1f(float x) { return float(j1(double(x)));} +inline float y0f(float x) { return float(y0(double(x)));} +inline float y1f(float x) { return float(y1(double(x)));} +inline float jnf(const int n, const float s) { return float(jn(n, double(s))); } +inline float ynf(const int n, const float s) { return float(yn(n, double(s))); } +#endif + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam diff --git a/src/conversion/ensight/part/ensightPart.C b/src/conversion/ensight/part/ensightPart.C --- a/src/conversion/ensight/part/ensightPart.C +++ b/src/conversion/ensight/part/ensightPart.C @@ -51,7 +51,7 @@ { const label id = idList[i]; - if (id >= field.size() || isnan(field[id])) + if (id >= field.size() || std::isnan(field[id])) { return false; } diff --git a/src/conversion/ensight/part/ensightPartIO.C b/src/conversion/ensight/part/ensightPartIO.C --- a/src/conversion/ensight/part/ensightPartIO.C +++ b/src/conversion/ensight/part/ensightPartIO.C @@ -63,7 +63,7 @@ { forAll(idList, i) { - if (idList[i] >= field.size() || isnan(field[idList[i]])) + if (idList[i] >= field.size() || std::isnan(field[idList[i]])) { os.writeUndef(); } @@ -80,7 +80,7 @@ // no idList => perNode forAll(field, i) { - if (isnan(field[i])) + if (std::isnan(field[i])) { os.writeUndef(); } diff --git a/src/dynamicMesh/fvMeshDistribute/fvMeshDistributeTemplates.C b/src/dynamicMesh/fvMeshDistribute/fvMeshDistributeTemplates.C --- a/src/dynamicMesh/fvMeshDistribute/fvMeshDistributeTemplates.C +++ b/src/dynamicMesh/fvMeshDistribute/fvMeshDistributeTemplates.C @@ -231,7 +231,7 @@ // Send all fieldNames. This has to be exactly the same set as is // being received! const GeoField& fld = - subsetter.baseMesh().lookupObject(fieldNames[i]); + subsetter.baseMesh().objectRegistry::lookupObject(fieldNames[i]); tmp tsubfld = subsetter.interpolate(fld); diff --git a/src/fvOptions/Make/options b/src/fvOptions/Make/options --- a/src/fvOptions/Make/options +++ b/src/fvOptions/Make/options @@ -13,5 +13,4 @@ -lfiniteVolume \ -lsampling \ -lmeshTools \ - /*-lsolidThermo*/ \ -lcompressibleTurbulenceModel diff --git a/src/parallel/decompose/ptscotchDecomp/Make/options b/src/parallel/decompose/ptscotchDecomp/Make/options --- a/src/parallel/decompose/ptscotchDecomp/Make/options +++ b/src/parallel/decompose/ptscotchDecomp/Make/options @@ -8,5 +8,9 @@ -I/usr/include/scotch \ -I../decompositionMethods/lnInclude +ifneq ($(WM_ARCH_BASE),darwin) +RTLIB=-lrt +endif + LIB_LIBS = \ - -L$(SCOTCH_ROOT)/lib -L$(FOAM_EXT_LIBBIN)/$(FOAM_MPI) -lptscotch -lptscotcherrexit ${LINK_FLAGS} -lrt + -L$(SCOTCH_ROOT)/lib -L$(FOAM_EXT_LIBBIN)/$(FOAM_MPI) -lptscotch -lptscotcherrexit ${LINK_FLAGS} $(RTLIB) diff --git a/src/parallel/decompose/scotchDecomp/Make/options b/src/parallel/decompose/scotchDecomp/Make/options --- a/src/parallel/decompose/scotchDecomp/Make/options +++ b/src/parallel/decompose/scotchDecomp/Make/options @@ -12,5 +12,9 @@ -I/usr/include/scotch \ -I../decompositionMethods/lnInclude +ifneq ($(WM_ARCH_BASE),darwin) +RTLIB=-lrt +endif + LIB_LIBS = \ - -L$(SCOTCH_ROOT)/lib -L$(FOAM_EXT_LIBBIN) -lscotch -lscotcherrexit -lrt + -L$(SCOTCH_ROOT)/lib -L$(FOAM_EXT_LIBBIN) -lscotch -lscotcherrexit $(RTLIB) diff --git a/wmake/rules/darwinIntel64Clang/c b/wmake/rules/darwinIntel64Clang/c new file mode 100644 --- /dev/null +++ b/wmake/rules/darwinIntel64Clang/c @@ -0,0 +1,16 @@ +.SUFFIXES: .c .h + +cWARN = -Wall + +cc = clang -m64 + +include $(RULES)/c$(WM_COMPILE_OPTION) + +cFLAGS = $(GFLAGS) $(cWARN) $(cOPT) $(cDBUG) $(LIB_HEADER_DIRS) -fPIC -Ddarwin + +ctoo = $(WM_SCHEDULER) $(cc) $(cFLAGS) -c $$SOURCE -o $@ + +LINK_LIBS = $(cDBUG) + +LINKLIBSO = $(cc) -shared -undefined suppress +LINKEXE = $(cc) -Xlinker -Xlinker -z -Xlinker nodefs diff --git a/wmake/rules/darwinIntel64Clang/c++ b/wmake/rules/darwinIntel64Clang/c++ new file mode 100644 --- /dev/null +++ b/wmake/rules/darwinIntel64Clang/c++ @@ -0,0 +1,22 @@ +.SUFFIXES: .C .cxx .cc .cpp + +# -Woverloaded-virtual may produce spurious warnings, disable for now +c++WARN = -Wall -Wextra -Wno-unused-parameter -Wold-style-cast -Wnon-virtual-dtor -Wno-overloaded-virtual -Wno-unused-comparison + +CC = clang++ -m64 + +include $(RULES)/c++$(WM_COMPILE_OPTION) + +ptFLAGS = -DNoRepository -ftemplate-depth-100 + +c++FLAGS = $(GFLAGS) $(c++WARN) $(c++OPT) $(c++DBUG) $(ptFLAGS) $(LIB_HEADER_DIRS) -fPIC -D$(WM_ARCH_BASE) + +Ctoo = $(WM_SCHEDULER) $(CC) $(c++FLAGS) -c $$SOURCE -o $@ +cxxtoo = $(Ctoo) +cctoo = $(Ctoo) +cpptoo = $(Ctoo) + +LINK_LIBS = $(c++DBUG) + +LINKLIBSO = $(CC) $(c++FLAGS) -shared -lpthread -dynamiclib -undefined dynamic_lookup +LINKEXE = $(CC) $(c++FLAGS) -Xlinker -lpthread -L$(FOAM_LIBBIN)/$(FOAM_MPI) -lPstream diff --git a/wmake/rules/darwinIntel64Clang/c++Debug b/wmake/rules/darwinIntel64Clang/c++Debug new file mode 100644 --- /dev/null +++ b/wmake/rules/darwinIntel64Clang/c++Debug @@ -0,0 +1,2 @@ +c++DBUG = -g -DFULLDEBUG +c++OPT = -O0 diff --git a/wmake/rules/darwinIntel64Clang/c++Opt b/wmake/rules/darwinIntel64Clang/c++Opt new file mode 100644 --- /dev/null +++ b/wmake/rules/darwinIntel64Clang/c++Opt @@ -0,0 +1,3 @@ +#c++DBUG = -O0 -DFULLDEBUG -g +c++DBUG = +c++OPT = -O3 diff --git a/wmake/rules/darwinIntel64Clang/c++Prof b/wmake/rules/darwinIntel64Clang/c++Prof new file mode 100644 --- /dev/null +++ b/wmake/rules/darwinIntel64Clang/c++Prof @@ -0,0 +1,2 @@ +c++DBUG = -pg +c++OPT = -O2 diff --git a/wmake/rules/darwinIntel64Clang/cDebug b/wmake/rules/darwinIntel64Clang/cDebug new file mode 100644 --- /dev/null +++ b/wmake/rules/darwinIntel64Clang/cDebug @@ -0,0 +1,2 @@ +cDBUG = -g -DFULLDEBUG +cOPT = -O0 diff --git a/wmake/rules/darwinIntel64Clang/cOpt b/wmake/rules/darwinIntel64Clang/cOpt new file mode 100644 --- /dev/null +++ b/wmake/rules/darwinIntel64Clang/cOpt @@ -0,0 +1,2 @@ +cDBUG = +cOPT = -O3 diff --git a/wmake/rules/darwinIntel64Clang/cProf b/wmake/rules/darwinIntel64Clang/cProf new file mode 100644 --- /dev/null +++ b/wmake/rules/darwinIntel64Clang/cProf @@ -0,0 +1,2 @@ +cDBUG = -pg +cOPT = -O2 diff --git a/wmake/rules/darwinIntel64Clang/general b/wmake/rules/darwinIntel64Clang/general new file mode 100644 --- /dev/null +++ b/wmake/rules/darwinIntel64Clang/general @@ -0,0 +1,8 @@ +CPP = cpp -traditional-cpp $(GFLAGS) + +PROJECT_LIBS = -l$(WM_PROJECT) -ldl + +include $(GENERAL_RULES)/standard + +include $(RULES)/c +include $(RULES)/c++ diff --git a/wmake/rules/darwinIntel64Clang/mplibOPENMPI b/wmake/rules/darwinIntel64Clang/mplibOPENMPI new file mode 100644 --- /dev/null +++ b/wmake/rules/darwinIntel64Clang/mplibOPENMPI @@ -0,0 +1,3 @@ +PFLAGS = -DOMPI_SKIP_MPICXX +PINC = -I$(MPI_ARCH_PATH)/include +PLIBS = -L$(MPI_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) -L$(MPI_ARCH_PATH)/lib -lmpi