Mac Ventura Installation Issues

201 views
Skip to first unread message

Akthem Rehab

unread,
Apr 25, 2023, 6:56:59 PM4/25/23
to ProjectChrono
Hi Project Chrono Team,
I spent the day trying to Cmake project chrono. I followed the Mac OS instructions in Chrono tutorial install. I used the preset "macOS CI Configuration" and generator "Unix Makefiles" in the cmake GUI.

This succeeds in building and generating project chrono after making sure the value for "THRUST_INCLUDE_DIR" is empty. However it was built and generated with Sensor, Distributed, GPU, FSI, and Multicore disabled. Multicore requires Thrust while the other modules require Cuda. Both were not found. 

I failed to install Thrust without Cuda in a Mac Silicon. Question 1: Am I missing something or did I follow the steps correctly and none of these modules can be run on a Mac Silicon?

Moving forward, I attempted to make from the generated build using:


make CXXFLAGS="-Xpreprocessor -fopenmp" LDFLAGS="-lomp"


This was based on the MacOS clang++ issues highlighted in step 8. This results in 8 warnings and 1 error. The error being:


/opt/homebrew/include/eigen3/Eigen/Core:70:10: fatal error: 'omp.h' file not found

#include <omp.h>

         ^~~~~~~

8 warnings and 1 error generated.

make[2]: *** [src/chrono/CMakeFiles/ChronoEngine.dir/core/ChFilePS.cpp.o] Error 1

make[1]: *** [src/chrono/CMakeFiles/ChronoEngine.dir/all] Error 2

make: *** [all] Error 2


Question 2: Again, where did I go wrong here?


I am new to the macOS, shell, and cmake and the learning curve was steep getting to this point. So, I hope you cut me some slack if any/all of my questions are basic/naive and I hope you can help me get over this hurdle and successfully run Chrono. Of course running the additional modules and parallelization would be an amazing bonus after successful installation.


From what I read, Chrono sounds solid in multi-body dynamics. I hope I can make it run on my mac and start benefiting from it.


Thank you,

Akthem

dr.ratz...@gmail.com

unread,
Apr 26, 2023, 2:35:28 AM4/26/23
to ProjectChrono
Hi Akthem,

beginning the work with a complex project is always a challenge and one problem is: macOS does not support all chrono modules!

It helps to begin with a minimal configuration:

rm -rf build
cmake -S /where/your/chrono/source/is -B build

my chrono sources are in ${HOME}/Documents/GitHub/chrono but this is not a law of nature, just take the path of your installation.
'build' is the directory, where the configuration and the build take place. The build directory must be empty! The configuration should work.

cmake --build build 

or

cd build
make 

This should run without errors. What you get is a basic configuration with a couple of demos in build/bin

Try the demos. Unfortunately we have to generate Mac Bundles, so to start an example you must write

cd bin
./demo_CH_EulerAngles.app/Content/MacOS/demo_CH_EulerAngles

or 

run_app.sh demo_CH_EulerAngles.app

if you have installed the convenience script from chronoSRC/contrib/appbundle-macosx

I am a vehicle simulation guy and I want to have the vehicle module enabled. Also necessary is postprocessing and 3d graphics:

rm -rf build
cmake -S /where/your/chrono/source/is -B build \
-DCMAKE_BUILD_TYPE=Release \
-DENABLE_MODULE_POSTPROCESS:BOOL=ON \
-DENABLE_MODULE_VEHICLE:BOOL=ON \
-DENABLE_MODULE_IRRLICHT:BOOL=ON \
-DIRRLICHT_INSTALL_DIR:PATH=/opt/homebrew

cmake generates Unix Makefiles by default, a faster alternative is ninja (cmake -G Ninja ....) or even better with and IDE (cmake -G Xcode ...). 
ninja can be installed with homebrew. You also need gnuplot, can also be installed with homebrew.

Some modules in chrono can only work with Nvidia hardware and require cuda. Cuda is not available for macOS as well as OptiX.
Alternative for Irrlicht is VSG. It also works well, but some functionality is lacking actually. The configuration for OpenGL is messed up for macOS, so don't try it, or better try it and repair it. Generally spoken: activate only the modules that you ar willing to use!

Good Start!

Rainer 

Akthem Rehab

unread,
Apr 26, 2023, 7:02:45 PM4/26/23
to ProjectChrono
Hi Rainer,
Thank you! Following the instructions to the letter successfully builds and installs Chrono as per the two scenarios you provided above. On a side note, Ninja and the default Unix Makefiles worked while Xcode returned errors asking for default compilers. Perhaps this is an error related to my mac setup!

Having another go on the documentation, it clearly states that the FSI and Sensor modules are not supported in MacOS. However, I think Multicore could be built on MacOS if Thrust could be built on top of openMP. Could you please confirm if this is correct/doable? If correct, could you share updated syntax and dependencies for the cmake and build? From my end I had a failed attempt trying to cmake Thrust with the following command: cmake -DTHRUST_DEVICE_BACKEND=OMP /path/to/thrust/source

Based on  a pump health monitoring simulation use-case I am working on, and given that FSI and Sensor are not within my disposal, I came up with this workflow utilizing open-source Mac friendly tools: 
  1. Create the pump geometry using FreeCAD.
  2. Mesh the pump geometry using GMSH (or perhaps CFMesh) and export it to OpenFOAM format.
  3. Set up the simulation using OpenFOAM and the Elmer-OpenFOAM library. Use OpenFOAM to solve for the fluid flow and ElmerFEM to solve for the structural mechanics. Use the Elmer-OpenFOAM library to couple the two solvers.
  4. In the simulation, introduce random faults (such as misalignment, unbalance, bearing fault, or others) and simulate the vibration acceleration.
  5. Use Chrono to simulate the fault propagation and pump failure. Although Chrono's Sensor and FSI modules are not available, Chrono is still used for rigid body dynamics capabilities to simulate the mechanical behavior of the pump.
  6. Export the vibration (acceleration) data from Chrono to Paraview for visualization and analysis.
  7. Use the FEM workbench in FreeCAD to analyze the vibration data and estimate the remaining useful life of the pump and/or faulty component.
As I am researching and picking my toolset before getting to work, your input on the workflow will be highly valued and appreciated. If any of the above can still be done with Chrono to minimize the number of tools, handovers, and of course the learning curve and time, please let me know. Any other feedback is welcome too!

Thank you!

Sincerely,
Akthem

dr.ratz...@gmail.com

unread,
Apr 27, 2023, 11:24:33 AM4/27/23
to ProjectChrono
Hi Akthem,

I cannot answer all your questions, since I know nearly nothing about the subject of your work, but I can try to find other collegues familiar with chrono and fluid simulation.

I can help you to get over the macOS issues yet.

1) Xcode, I sometimes have the same error you got. That helped on my machine, type on the command line :
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer

2) Using OpenMP on the Mac:
- install libomp with homebrew (that will bring omp.h for and other good things)
- install thrust, well it is header-only, you must tell cmake the correct include path
- install blaze, also header only, same procedure like thrust

Now comes the cumbersome part, give all information to cmake

cmake  -G Ninja -S $REPOSITORY -B build \
-DCMAKE_BUILD_TYPE=Release \
-DOpenMP_CXX_FLAGS:STRING="-Xclang -fopenmp" \
-DOpenMP_C_FLAGS:STRING="-Xclang -fopenmp" \
-DOpenMP_C_INCLUDE_DIR:PATH=-L/opt/homebrew/opt/libomp/lib \
-DOpenMP_CXX_INCLUDE_DIR:PATH=/opt/homebrew/opt/libomp/include \
-DOpenMP_C_LIB_NAMES:STRING=libomp \
-DOpenMP_CXX_LIB_NAMES:STRING=libomp \
-DOpenMP_libomp_LIBRARY:FILEPATH="/opt/homebrew/opt/libomp/lib/libomp.dylib" \
-DTHRUST_INCLUDE_DIR:PATH=${DEPFIX}/include \
-DBLAZE_INSTALL_DIR:PATH=${DEPFIX}/include \
               ... your desired settings ...

Best Regards

Rainer

Akthem Rehab

unread,
May 2, 2023, 4:29:57 PM5/2/23
to ProjectChrono
Hi Rainer,
Thank you for your helpful reply and apologies for the delayed response. Following your lead, I did the following:

1- - Install libomp with homebrew (that will bring omp.h for and other good things). Straight forward!
2- - Install thrust, well it is header-only, you must tell cmake the correct include path. I added this line to chrono's cmakelists.txt: 
set(THRUST_INCLUDE_DIR /Users/Akthem/Downloads/thrust)
include_directories(${THRUST_INCLUDE_DIR})
3- - Install blaze, also header only, same procedure like thrust. I added this line to chrono's cmakelists.txt:
include_directories(/Users/Akthem/Downloads/blaze-3.8.2)

Further, I changed cmake/FindThrust.cmake contents to (with chatgpt help): 
find_path(THRUST_INCLUDE_DIR thrust/version.h PATHS ${THRUST_ROOT_DIR} NO_DEFAULT_PATH)
if (THRUST_INCLUDE_DIR)
    file(READ "${THRUST_INCLUDE_DIR}/thrust/version.h" THRUST_VERSION_FILE)
    string(REGEX MATCH "#define THRUST_VERSION_MAJOR ([0-9]*)" _ "${THRUST_VERSION_FILE}")
    set(THRUST_VERSION_MAJOR ${CMAKE_MATCH_1})
    string(REGEX MATCH "#define THRUST_VERSION_MINOR ([0-9]*)" _ "${THRUST_VERSION_FILE}")
    set(THRUST_VERSION_MINOR ${CMAKE_MATCH_1})
    string(REGEX MATCH "#define THRUST_VERSION_PATCH ([0-9]*)" _ "${THRUST_VERSION_FILE}")
    set(THRUST_VERSION_PATCH ${CMAKE_MATCH_1})
    set(THRUST_VERSION "${THRUST_VERSION_MAJOR}.${THRUST_VERSION_MINOR}.${THRUST_VERSION_PATCH}")
    set(THRUST_FOUND TRUE)
    message(STATUS "Found Thrust: ${THRUST_INCLUDE_DIR} (found version ${THRUST_VERSION})")
else ()
    message(FATAL_ERROR "Could not find Thrust library.")
endif ()


This leads to a successful cmake as per the below command:

cmake -S /Users/Akthem/chrono -B build \

-DCMAKE_BUILD_TYPE=Release \

-DOpenMP_CXX_FLAGS:STRING="-Xclang -fopenmp" \

-DOpenMP_C_FLAGS:STRING="-Xclang -fopenmp" \

-DOpenMP_C_INCLUDE_DIR:PATH=-L/opt/homebrew/opt/libomp/lib \

-DOpenMP_CXX_INCLUDE_DIR:PATH=/opt/homebrew/opt/libomp/include \

-DOpenMP_C_LIB_NAMES:STRING=libomp \

-DOpenMP_CXX_LIB_NAMES:STRING=libomp \

-DOpenMP_libomp_LIBRARY:FILEPATH="/opt/homebrew/opt/libomp/lib/libomp.dylib" \

-DTHRUST_INCLUDE_DIR:PATH=${DEPFIX}/include \

-DBLAZE_INSTALL_DIR:PATH=/usr/local/include \

-DENABLE_MODULE_POSTPROCESS:BOOL=ON \

-DENABLE_MODULE_VEHICLE:BOOL=ON \

-DENABLE_MODULE_IRRLICHT:BOOL=ON \

-DENABLE_MODULE_MULTICORE=ON \

-DIRRLICHT_INSTALL_DIR:PATH=/opt/homebrew


Then, I follow through with cmake --build build and get the below error:


/Users/Akthem/Downloads/thrust/thrust/detail/type_traits.h:27:10: fatal error: 'cuda/std/type_traits' file not found

#include <cuda/std/type_traits>

         ^~~~~~~~~~~~~~~~~~~~~~

10 warnings and 1 error generated.

make[2]: *** [src/chrono/CMakeFiles/ChronoEngine.dir/physics/ChBody.cpp.o] Error 1

make[1]: *** [src/chrono/CMakeFiles/ChronoEngine.dir/all] Error 2

make: *** [all] Error 2


I tried to comment out the line causing the error in the above mentioned file:

#include <cuda/std/type_traits>


This leads to other errors and a fatal error linked to cuda too. Could you please check my workflow/syntax and let me know where did I go wrong. Alternatively, if all went well, then how to overcome this hurdle?


Thank you,


Sincerely,

Akthem


 

Akthem Rehab

unread,
May 2, 2023, 4:39:03 PM5/2/23
to ProjectChrono
As for the CFD coupling with Chrono, yes it would be great have an expert help with that.

dr.ratz...@gmail.com

unread,
May 8, 2023, 3:50:09 AM5/8/23
to ProjectChrono
Hi Akthem,

your mail was a surprise for me, since I had no problems with thrust-1.16.0. No further configuration is necessary when configuring chrono. I tried the actual thrust-2.1.0 yet - and got the same error that you reported. The thrust project has changed its policy of supporting different configurations (serial, OMP, CUDA). It looks to me only cuda is supported now. The last version to work with chrono is 1.7.2. I tested it today and was able to run all unit tests successfully. So I can recommend it to you.

Best,
Rainer

Akthem Rehab

unread,
May 8, 2023, 9:00:25 AM5/8/23
to ProjectChrono
Hi Rainer,
I downloaded a fresh version of chrono, thrust 1.17.2, and referenced thrust 1.17.2 in the cmake as below:

cmake -S /Users/Akthem/chrono -B build \

-DCMAKE_BUILD_TYPE=Release \

-DOpenMP_CXX_FLAGS:STRING="-Xclang -fopenmp" \

-DOpenMP_C_FLAGS:STRING="-Xclang -fopenmp" \

-DOpenMP_C_INCLUDE_DIR:PATH=-L/opt/homebrew/opt/libomp/lib \

-DOpenMP_CXX_INCLUDE_DIR:PATH=/opt/homebrew/opt/libomp/include \

-DOpenMP_C_LIB_NAMES:STRING=libomp \

-DOpenMP_CXX_LIB_NAMES:STRING=libomp \

-DOpenMP_libomp_LIBRARY:FILEPATH="/opt/homebrew/opt/libomp/lib/libomp.dylib" \

-DTHRUST_INCLUDE_DIR:PATH=/Users/Akthem/Downloads/thrust-1.17.2 \

-DBLAZE_INSTALL_DIR:PATH=/usr/local/include \

-DBLAZE_VERSION_FILENAME=/usr/local/include/blaze/system/Version.h \

-DENABLE_MODULE_POSTPROCESS:BOOL=ON \

-DENABLE_MODULE_VEHICLE:BOOL=ON \

-DENABLE_MODULE_IRRLICHT:BOOL=ON \

-DENABLE_MODULE_MULTICORE=ON \

-DIRRLICHT_INSTALL_DIR:PATH=/opt/homebrew



The cmake --build build progresses further but returns the following error:


/usr/local/include/blaze/system/BLAS.h:58:10: fatal error: 'cblas.h' file not found

#include BLAZE_BLAS_INCLUDE_FILE

         ^~~~~~~~~~~~~~~~~~~~~~~

/usr/local/include/blaze/config/BLAS.h:208:33: note: expanded from macro 'BLAZE_BLAS_INCLUDE_FILE'

#define BLAZE_BLAS_INCLUDE_FILE <cblas.h>

                                ^~~~~~~~~

<scratch space>:440:1: note: expanded from here

<cblas.h>

^~~~~~~~~

10 warnings and 1 error generated.

make[2]: *** [src/chrono_multicore/CMakeFiles/ChronoEngine_multicore.dir/ChDataManager.cpp.o] Error 1

make[1]: *** [src/chrono_multicore/CMakeFiles/ChronoEngine_multicore.dir/all] Error 2

make: *** [all] Error 2


Looks like the error has to do with Blaze and/or Blas this round. The version I downloaded is the latest 3.8.2. Do I have to go back to older versions like thrust? Which version?


Further, the cmake I tried above is a skimmed version of what I was originally trying to run:

cmake -S /Users/Akthem/chrono -B build \

-DCMAKE_BUILD_TYPE=Release \

-DOpenMP_CXX_FLAGS:STRING="-Xclang -fopenmp" \

-DOpenMP_C_FLAGS:STRING="-Xclang -fopenmp" \

-DOpenMP_C_INCLUDE_DIR:PATH=-L/opt/homebrew/opt/libomp/lib \

-DOpenMP_CXX_INCLUDE_DIR:PATH=/opt/homebrew/opt/libomp/include \

-DOpenMP_C_LIB_NAMES:STRING=libomp \

-DOpenMP_CXX_LIB_NAMES:STRING=libomp \

-DOpenMP_libomp_LIBRARY:FILEPATH="/opt/homebrew/opt/libomp/lib/libomp.dylib" \

-DTHRUST_INCLUDE_DIR:PATH=/Users/Akthem/Downloads/thrust-1.17.2 \

-DBLAZE_INSTALL_DIR:PATH=/usr/local/include \

-DBLAZE_VERSION_FILENAME=/usr/local/include/blaze/system/Version.h \

-DIRRLICHT_INSTALL_DIR=/opt/homebrew/Cellar/irrlicht/1.8.5_1 \

-DENABLE_MODULE_POSTPROCESS:BOOL=ON \

-DENABLE_MODULE_VEHICLE:BOOL=ON \

-DENABLE_MODULE_IRRLICHT:BOOL=ON \

-DENABLE_MODULE_MULTICORE=ON \

-DENABLE_MODULE_MODAL=ON \

-DENABLE_MODULE_POSTPROCESS=ON \

-DENABLE_MODULE_PYTHON=ON \

-DBUILD_DEMOS=ON


This returns the modal module related error, as per my understanding, below:

/Users/Akthem/chrono/src/chrono_modal/ChEigenvalueSolver.cpp:28:10: fatal error: 'Spectra/KrylovSchurGEigsSolver.h' file not found

#include <Spectra/KrylovSchurGEigsSolver.h>

         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

10 warnings and 1 error generated.

make[2]: *** [src/chrono_modal/CMakeFiles/ChronoEngine_modal.dir/ChEigenvalueSolver.cpp.o] Error 1

make[1]: *** [src/chrono_modal/CMakeFiles/ChronoEngine_modal.dir/all] Error 2

make: *** [all] Error 2



It seems my Chrono installation is refusing to go through smoothy =) Thank you for your continued patience and support.

Best
Akthem

Radu Serban

unread,
May 8, 2023, 9:32:13 AM5/8/23
to ProjectChrono

Hi Rainer,

 

This is not quite correct. Thrust still supports the OpenMP backend. It’s just that in recent versions they introduced these dependencies on CUDA headers and so it cannot be used anymore without a CUDA installation (thrust is distributed as part of it) even though one may never use CUDA (as is the case in our case here).

 

I’m not sure what the best solution is here. For now, I suggest simply not enabling the Chrono::Multicore module. Akthem, looking at the problem you describe, I don’t see why you would need that module anyway.  Note that FEA in Chrono does use OpenMP parallelization, but it does not rely on Thrust.

 

--Radu

--
You received this message because you are subscribed to the Google Groups "ProjectChrono" group.
To unsubscribe from this group and stop receiving emails from it, send an email to projectchron...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/projectchrono/08214a60-0e0e-4bbf-8ff8-538e4b581465n%40googlegroups.com.

dr.ratz...@gmail.com

unread,
May 9, 2023, 1:45:43 AM5/9/23
to ProjectChrono
Hi Akthem,

for chrono_modal you need to install the Spectre library. Available via homebrew.

Best
Rainer

Akthem Rehab

unread,
May 10, 2023, 6:00:38 AM5/10/23
to ProjectChrono
Hi Rainer,
I installed Spectra as per the installation guide. The below cmake worked with a warning as Blaze is not used anymore:

cmake -S /Users/Akthem/chrono -B build \

-DCMAKE_BUILD_TYPE=Release \

-DOpenMP_CXX_FLAGS:STRING="-Xclang -fopenmp" \

-DOpenMP_C_FLAGS:STRING="-Xclang -fopenmp" \

-DOpenMP_C_INCLUDE_DIR:PATH=-L/opt/homebrew/opt/libomp/lib \

-DOpenMP_CXX_INCLUDE_DIR:PATH=/opt/homebrew/opt/libomp/include \

-DOpenMP_C_LIB_NAMES:STRING=libomp \

-DOpenMP_CXX_LIB_NAMES:STRING=libomp \

-DOpenMP_libomp_LIBRARY:FILEPATH="/opt/homebrew/opt/libomp/lib/libomp.dylib" \

-DTHRUST_INCLUDE_DIR:PATH=/Users/Akthem/Downloads/thrust-1.17.2 \

-DBLAZE_INSTALL_DIR:PATH=/usr/local/include \

-DBLAZE_VERSION_FILENAME=/usr/local/include/blaze/system/Version.h \

-DIRRLICHT_INSTALL_DIR=/opt/homebrew/Cellar/irrlicht/1.8.5_1 \

-DSPECTRA_INCLUDE_DIR:PATH=/Users/Akthem/Downloads/spectra/include \

-DENABLE_MODULE_COSIMULATION:BOOL=ON \

-DENABLE_MODULE_POSTPROCESS:BOOL=ON \

-DENABLE_MODULE_VEHICLE:BOOL=ON \

-DENABLE_MODULE_IRRLICHT:BOOL=ON \

-DENABLE_HDF5=ON \

-DENABLE_MODULE_MODAL=ON \

-DENABLE_MODULE_POSTPROCESS=ON \

-DENABLE_MODULE_PYTHON=ON \

-DBUILD_DEMOS=ON   


I will move to try to make some work, now that the installation is done and after Radu's tip that fea parallelizes without thrust/multicore. I will also investigate if the co-simulation module suffices for my coupling needs.

Thank you for the patience and support!

Sincerely,
Akthem
Reply all
Reply to author
Forward
0 new messages