Coder Social home page Coder Social logo

ipc-sim / ipc Goto Github PK

View Code? Open in Web Editor NEW
552.0 20.0 74.0 166.98 MB

Incremental Potential Contact (IPC) is for robust and accurate time stepping of nonlinear elastodynamics. IPC guarantees intersection- and inversion-free trajectories regardless of materials, time-step sizes, velocities, or deformation severity.

Home Page: https://ipc-sim.github.io/

License: MIT License

CMake 5.73% Python 1.91% Shell 1.08% C++ 91.27%
computer-graphics computer-animation physics-based-animation physical-simulation elastodynamics optimization-time-integrator numerical-optimization constrained-optimization barrier-method interior-point-method

ipc's Introduction

Build License

IPC

This is the opensource reference implementation of the SIGGRAPH 2020 paper Incremental Potential Contact: Intersection- and Inversion-free Large Deformation Dynamics.

Files

  • src/: source code

  • cmake/ and CMakeLists.txt: CMake files

  • Format/: automatic code formatting (requires clang-format)

  • input/: input data and scripts needed to rerun all examples in our paper, together with some tutorial examples

  • output/: output data (will be created)

  • tests/: unit-tests

  • tools/: Python and Bash scripts for generating and processing results

  • wiki/: images used in Github wiki page

  • build.py: a python script to automatically build IPC with default compiler

  • batch.py: a python script to automatically run a batch of examples (in input/n/ by default) with n threads for each linear solver in the program

  • batch_tetgen.py: a python script to automatically tetrahedralize a batch of closed surface meshes using Tetgen

Build

You can either use python build.py or

mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j4

gcc 7 or later is recommended.

Dependencies

Optional Dependencies

  • SuiteSparse: must be installed at a system level
    • Specifically IPC requires CHOLMOD, AMD, CAMD, CCOLAMD, and COLAMD which are all part of SuiteSparse and METIS which is sometimes a separate library
    • Enabled by default, and it can be disabled using the CMake argument -DIPC_WITH_CHOLMOD=OFF
    • Use of the CHOLMOD linear system solver is highly recommended as it is significantly faster than the alternative solvers provided (Eigen and AMGCL).
    • macOS: brew install suite-sparse
      • Alternatively, you can build SuiteSparse and then copy all files under SuiteSparse/include and SuiteSparse/lib to /usr/local/include and /usr/local/lib respectively.
    • Ubuntu: sudo apt-get install libsuitesparse-dev libmetis-dev
      • For program efficiency, we strongly recommend compiling SuiteSparse using Intel MKL LAPACK and BLAS (on an Intel machine): make library BLAS='-lmkl_intel_lp64 -lmkl_core -lmkl_intel_thread -lpthread -lm -lmkl_blas95_lp64 -liomp5' LAPACK='-lmkl_lapack95_lp64' -j 8
    • IPC also supports using Eigen or AMGCL as linear solver, which can be set via IPC_LINSYSSOLVER in CMakeLists.txt. To use custom linear solvers, you can implement a new interface (subclass) to our LinSysSolver class.
  • AMGCL: downloaded and built through CMake
    • Enabled by default, and it can be disabled using the CMake argument -DIPC_WITH_AMGCL=OFF
  • Catch2: downloaded and built through CMake
    • Used for unit-tests.
    • Enabled by default iff IPC is being built as the top-level project.

Without OpenGL

If your system does not have the required OpenGL libraries, you can disable the viewer using the CMake argument -DIPC_WITH_OPENGL=OFF. It is important to then run IPC in offline mode (see below).

2D?

IPC is only implemented for 3D simulation.

HPC

If your system uses Slurm like our cluster does, then you can take advantage of our scripts to build IPC as a batch job.

From the IPC root directory use sbatch build.sh to compile IPC via a batch job. You can check the status of the job using squeue -u $USER -n IPC_build.

It is important to not build on the login node because while it supports AVX2, the compute nodes may not. Building on the login node will enable AVX2 support which may cause an Illegal instruction error when run on a compute node. Alternatively, this can be fixed by using Intel's compilers, icc and icpc, with the flag -axCORE-AVX2. This enables executables to run on compute nodes with or without AVX2 instructions. If the compute nodes support AVX2 instructions, executables will run AVX2 instructions, otherwise it will use other available instructions such as AVX or SSE4.2.

Sub-Projects

IPC contains two optional sub-projects for unit tests, debug, and file processing. To enable them use the CMake flag -DIPC_BUILD_<sub-project-name>_PROJECT=On where sub-project-name is the name of the sub-project (e.g. DIAGNOSTIC or MESH_PROCESSING). You can also set these interactively using ccmake.

Run

Please see our quick start guide for a hello world example with various settings. The output of each script will be saved into a separate folder in output/.

Offline Mode

It is possible to run IPC with and without the viewer. By default, the batch.py script runs IPC with the viewer. If you provide the argument --offline to batch.py then it will run IPC in offline mode (i.e. without the viewer).

If you are running the IPC_bin executable directly then the first argument controls the mode. Mode 10 runs IPC with the viewer and is the default in the batch.py. Mode 100 runs IPC in offline mode (without the viewer). See IPC_bin --help for more detail.

HPC

From the IPC root directory use sbatch run.sh to processes all the input files in input/12/ using 12 CPU cores.

This will process all input scenes in series. I am currently, working on a script to process all scenes in parallel via separate batch jobs.

Sub-Projects

The executables for the sub-projects are placed in their respective directory in src/Projects/.

Output Files

  • <n>.obj: surface mesh of the simulated objects and volumetric/surface kinematic collision objects in n-th time step
  • n.seg: mesh file of the segment kinematic collision objects if any in n-th time step
  • pt<n>.obj: vertex coordinates of the point cloud kinematic collision objects if any in n-th time step
  • status<n>: saved information of n-th time step that can be used to restart simulation from
  • ACO<m>_<n>.obj: mesh file of m-th analytical plane if any in n-th (and the following if unchanged) time steps
  • BC_<n>.txt: node index of Dirichlet nodes if any in n-th (and the following if unchanged) time steps
  • 0.png: snapshot of initial time step
  • finalResult.png: snapshot of last time step
  • finalResult_mesh.msh: rest shape of simulated object
  • anim.gif: animation preview of the simulation
  • config.txt: the config file containing all simulation settings that can be used to rerun the simulation
  • iterStats.txt: simulation/optimization statistics of each iteration
  • info.txt: timing information
  • log.txt: debug information
  • sysE.txt: total energy (kinematic, gravity, and elasticity) of each simulated object
  • sysL.txt: linear momentum of each simulated object
  • sysM.txt: angular momentum of each simulated object

Script Settings

See our quick start guide for detailed examples of minimal settings needed for a simulation.

  • energy {FCR | NH}
    • NH: Neo-Hookean elasticity energy (default)
    • FCR: Fixed Co-rotational elasticity energy
  • timeIntegration {BE | NM} <β> <γ>
    • BE: Backward Euler (default)
    • NM: Newmark (optional: add β and γ to change from default of 0.25 and 0.5)
  • dampingStiff <dampingStiff>
    • add lagged Rayleigh damping with stiffness dampingStiff or not if dampingStiff is zero or not specified
    • dampingStiff must be greater than or equal to zero
  • dampingRatio <dampingRatio>
    • set dampingStiff to be 0.75 * dampingRatio * h^3 or 0 if dampingRatio is zero or not specified
    • dampingRatio must be greater than or equal to zero
  • time <num-seconds> <time-step>
    • total time in seconds, 5 by default
    • time-step, h, in seconds, 0.025 by default
  • density <density>
    • density of the mesh in Kg/m³, 1000 by default
  • stiffness <young-modulus> <poisson-ratio>
    • Young's modulus (E) in Pa, 1e5 by default
    • Poisson's ratio (ν), 0.4 by default
  • turnOffGravity
    • no gravity if specified
  • shapes input <num-of-shapes>
    • number of input shapes followed by that number of lines specifying the shape paths and initial configuration in model coordinates:
    • <mesh-file-path> <x> <y> <z> <rot-deg-x> <rot-deg-y> <rot-deg-z> <scale-x> <scale-y> <scale-z> <extra-command> ...
    • <extra-command>: assigning different materials, initial velocities, boundary conditions, or scripted motions for each shape individually if any
      • material <density> <young-modulus> <poisson-ratio>
      • initVel <lvx> <lvy> <lvz> <avx> <avy> <avz>
      • DBC <left-bottom-back-x> <left-bottom-back-y> <left-bottom-back-z> <right-top-front-x> <right-top-front-y> <right-top-front-z> <lvx> <lvy> <lvz> <avx> <avy> <avz> [<t_begin>] [<t_end>]
      • NBC <left-bottom-back-x> <left-bottom-back-y> <left-bottom-back-z> <right-top-front-x> <right-top-front-y> <right-top-front-z> <ax> <ay> <az> [<t_begin>] [<t_end>]
      • linearVelocity <lvx> <lvy> <lvz>
      • angularVelocity <avx> <avy> <avz>
  • DBCTimeRange <t_begin> <t_end>
    • only apply all Dirichlet BC set in shapes command during (t_begin, t_end], by default (0, +inf]
  • NBCTimeRange <t_begin> <t_end>
    • only apply all Neuman BC set in shapes command during (t_begin, t_end], by default (0, +inf]
  • ground <friction-coefficient> <height>
  • halfSpace <x> <y> <z> <nx> <ny> <nz> <stiffness> <friction-coefficient>
    • create a half-space analytical collision object centered at (x, y, z) with normal (nx, ny, nz).
    • stiffness is unused
  • selfCollisionOff
    • self-collision is not handled if specified
  • selfFric <selfFricCoeff>: specify the friction coefficient of self-contact, by default 0 (no friction)
    • selfFricCoeff must be larger or equal to 0, setting it larger than 1 is allowed
  • dHat <dHat>: set the distance that IPC sees objects as attaching and exert contact forces, by default it is 1e-3 that of the diagonal length of the bounding box of the scene
    • dHat must be larger than 0
  • epsv <epsv>: set the relative tangent velocity that IPC sees the attached objects as not sliding and exert static friction forces, by default it is 1e-3 that of the diagonal length of the bounding box of the scene per second
    • epsv must be larger than 0
  • fricIterAmt <fricIterAmt>: set the maximal friction iterations that IPC updates friction tangent and normal forces, by default it is 1
    • if set to 0 or negative, IPC will update friction tangent and normal forces until convergence (not guaranteed so not recommended)
  • tol positiveInteger
    • number of time steps to set for Newton tolerance other than default 1e-2 followed by that number of positiveRealNumber
    • positiveInteger is also a relative value on the bounding box diagonal length
  • constraintSolver {interiorPoint | QP | SQP}
    • collision constraint solver
    • interiorPoint: IPC (default)
    • QP: solve elasticity as a single QP with nonlinear contact constraints
    • SQP: solve elasticity as a sequence of quadratic programs with nonlinear contact constraints
  • restart <status-file-path-str>
    • restart simulation from the time step in the specified status file (other settings must be the same)
  • view {orthographic | perspective}
  • zoom <positive-real-number>
  • cameraTracking
    • automatically place the focus of the camera at the center of the bounding box of the scene at each frame if specified
  • playBackSpeed <playBackSpeed>
    • playback speed of anim.gif, which also controls how many frame data will be output (smaller value results in more output (at most output every frame))
  • appendStr <str>
    • append result folder with the string specified
  • disableCout
    • no command line output if specified
  • section {interiorPoint | QP | penalty}
    • section of settings only used when the specified constraint solver is used
    • note: the constraint solver must be declared before the section
    • a section ends when the line section end is encountered or at the end of a file.
    • example:
      constraintSolver QP
      # ...
      section QP
      constraintType graphics
      section end
      

Legacy Settings

Some of our settings are legacy settings or the ones that are not usually used/recommended. We include them here for completeness as they have been used by our paper examples or tests.

QP/SQP Settings

The following settings only affect the QP and SQP contact constraint solvers we use for comparisons.

  • QPSolver {OSQP | Gurobi}
    • Quadratic programming solver to use when using SQP constraint solver
    • OSQP is downloaded through CMake automatically
    • Gurobi must be installed manually and requires a license
  • constraintType {volume | graphics | gapFunction | nonsmoothNewmark | CMR | Verschoor}
    • which type of collision constraint to use with the SQP solver (default: volume)
    • volume: measure the volume of a tetrahedron comprised of the colliding points
    • graphics: distance constraint from Harmon et al. [2008].
    • nonsmoothNewmark: variation of volume constraints proposed by Kane et al. [1999].
    • gapFunction: signed distance along the normal direction from the point of intersection.
    • CMR: constraint manifold refinement (same as standard graphics approach).
    • Verschoor: Variant of standard graphics approach by Verschoor and Jalba [2019].
  • constraintOffset <offset>
    • surface thickness used for mesh collision objects when using constraintSolver QP/SQP
  • useActiveSetConvergence
    • Optimization can only converge if the active set converged to a fixed set of constraints or no constraints are active.

Comparisons

We conducted a lengthy comparison of our method and several other commercial and open-source software, and "vanilla" implementations of other methods. You can read the full details in Supplement B.

You can find the scenes, meshes, and other files used in these comparisons in input/paperExamples/supplementB.

  • SQPBenchmark: The collection of scene files used to generate the benchmark of QP and SQP methods.
    • The all benchmark scenes can be run with default settings using tools/run-comparison-benchmark-sqp.sh
    • The full benchmark sweep can be run using tools/run-comparison-benchmark-hpc.sh
  • COMSOL: The 2D COMSOL files used in our comparison
  • Houdini: The Houdini files used to generate the chain comparison
  • SOFA: The SOFA scene files used to compare against SOFA
  • Utopia: The mesh and IPC script used to compare against Utopia [Krause and Zulian 2016]

Tests

The tests directory contains a very limited number of unit-tests. These tests use Catch2 which is downloaded through CMake unless the option -DIPC_WITH_TESTS=OFF is provided. Currently, these test contain test the collision constraints used by the SQP solver.

Tools

The tools directory contains several tools for generating meshes, running scenes, and processing results.

  • convert_to_ipc_msh.py: this script uses PyMesh to convert a tetrahedral mesh to the expected .msh format of IPC
    • If the input mesh is a triangle mesh, then Tetgen will be used to tetrahedralize it
  • geo_to_msh.py: this script uses PyMesh to convert a GEO (format exported by Houdini) format mesh to a standard MSH mesh
  • generate_chain_scene.py: generate a IPC script for a variable length chain
  • run-comparison-benchmark-sqp.sh: run the comparison SQP benchmark with default settings
  • run-comparison-benchmark-hpc.sh: run the comparison full sweep of the SQP benchmark
    • dispatches jobs by calling the hpc-job.sh script
  • process_*_results.py: process the benchmark results, generating a CSV of the table

ipc's People

Contributors

asmaloney avatar cheshmi avatar dannykaufman avatar liminchen avatar zfergus avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ipc's Issues

Black gif files

Any thought on why I see black gif and white PNGs in the output directory? I can see the rendering window and it shows the simulation perfectly.
I am running on Ubuntu.
Thanks

Build step for glfw failed: 1

I met this error where glfw failed to download. How can I solve this?

shayito@KingBob MINGW64 /e/_Computer_Graphics/_simulation/IPC-master/build
$ cmake -DCMAKE_BUILD_TYPE=Release -DIPC_WITH_CHOLMOD=OFF ..
-- Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.19044.
-- We are on a Windows system
-- Embedded is OFF
-- Printing is ON
-- Profiling is ON
-- User interrupt is ON
-- Floats are OFF
-- Long integers (64bit) are OFF
-- Code coverage is OFF
-- MKL Pardiso: ON
-- Floats are OFF
-- Long integers (64bit) are OFF
-- MSVC -> forcing use of dynamically-linked runtime.
-- Creating target: igl::core (igl)
-- Creating target: igl::opengl (igl_opengl)
-- Creating target: igl::opengl_glfw (igl_opengl_glfw)
CMake Error at cmake/DownloadProject.cmake:179 (message):
  Build step for glfw failed: 1
Call Stack (most recent call first):
  external/libigl/cmake/LibiglDownloadExternal.cmake:25 (download_project)
  external/libigl/cmake/LibiglDownloadExternal.cmake:37 (igl_download_project_aux)
  external/libigl/cmake/LibiglDownloadExternal.cmake:95 (igl_download_project)
  external/libigl/cmake/libigl.cmake:375 (igl_download_glfw)
  external/libigl/CMakeLists.txt:59 (include)


-- Configuring incomplete, errors occurred!
See also "E:/_Computer_Graphics/_simulation/IPC-master/build/CMakeFiles/CMakeOutput.log".
See also "E:/_Computer_Graphics/_simulation/IPC-master/build/CMakeFiles/CMakeError.log".

Inconsistency in normal force magnitudes when varying 1) timestep size or 2) material properties

First, I wanted to say that this is an amazing project, and I really appreciate the work you have put into this project. I’m currently trying to see if there is a way to calculate the total force acting on a mesh (i.e., for each mesh inputted in with shapes input configuration), and I was hoping that the friction information export update in 24ab245 would be sufficient to do this task.

For some initial testing, I placed a cube on top of a 20x20 pad as shown below. Here, I expected that normal forces should be approximately aligned with the y-axis, so a sum of the normal force magnitudes (from lambda terms as saved by the last call of save_friction_data within the simulation) should equal the force applied by the cube onto the pad by its weight.

0

shapes input 2
input/tetMeshes/cube.msh -0.5 0.2 -0.5  0 0 0  1 1 1 material 1000 1e10 0.4
input/tetMeshes/mat20x20.msh 0 0 0  0 0 0  2 10 2 material 1000 1e10 0.4 DBC -5 0 -5 5 0 5 0 0 0 0 0 0

selfFric 0.1
time 5 1

fricIterAmt 4

When I run the script above, the normal force applied by the cube is calculated to be 9948.064, which similar to the expected value 9810 (1000 kg cube presses into pad with force of 1000*9.81 newtons).

For a more extensive study, I tried repeating the above test, while:

  • Changing timestep size: However, if I make the timestep smaller, from 1 to 0.1, the sum falls to a value of 100.856, which has at least one order of magnitude difference. I would have expected this sum to stay consistent even if I vary the timestep size.
  • Changing material properties: If I change the density of the pad (1e10 -> 1e5), then the total normal force falls to 8347, which is noticeably smaller than our original value of 9948.
  • Changing mesh resolution: If I vary the mesh resolution (go from mat20x20.msh to mat40x40.msh), I observe a similar trend; the total normal force equals 9852 with timestep=1, and equals 99.37 with timestep 0.1. Mesh resolution does not seem to add inconsistency.

Is there something I’m missing? I would have expected all of these tests to return the same normal force values, but this does not appear to be the case.

Boundary Conditions Degrees of Freedom

Hello, I was wondering if there was a way to control the degrees of freedom when we are applying boundary conditions. For example, if I wanted to design a uniaxial extension boundary condition, I only want to apply zero velocity to the x-component of the nodes I select.
Currently, I have to set the velocity components of all the selected nodes but in a uniaxial displacement experiment example pulling in the x-direction, I want the y & z components to be free to contract due to the poison effect.

Thank you,
Ron F

meshSeq error

Hello,

I'm trying to use the meshSeq script to put a custom motion in some objects but I'm getting the "iteration cap reached for IP subproblem solve!!!", even for the example "2cubesFall_rotateCO_meshSeq.txt" showed in the Wiki.

Is there some specific configuration to run such type of simulations?

template deducing issue on Windows

I'm trying to compile IPC on Windows with MSVC.

image

The issue is mainly caused by the static template function IglUtils::makePD, IglUtils::flipDet_SVD and IglUtils::computeCofactorMtr, where the compiler cannot deduce template argument for the variables these functions trying to apply to.

Any ideas or is this because of the platform?

Maybe directly set LIBIGL_USE_STATIC_LIBRARY to be always OFF

Hi

There're several places requiring compiler to be C++17 compliant in the code.

At the same time, the CMakeLists.txt allows users to set LIBIGL_USE_STATIC_LIBRARY to be ON. If user really does so, it will lead to compilation error from LIBIGL. The reason is that there're STL functions in libigl being removed in C++17.

Suggestions: either

  1. Remove the option(LIBIGL_USE_STATIC_LIBRARY ... in CMakeLists.txt
  2. OR update README.md to tell users they cannot build with LIBIGL_USE_STATIC_LIBRARY=ON

Additional info: the error I got with ON:

/home/wzheng/cipc/external/libigl/include/igl/blue_noise.cpp:212:10: error: no
      member named 'random_shuffle' in namespace 'std'
    std::random_shuffle(std::begin(N), std::end(N));

Thanks

Error for calculating point edge distance?

In MeshCollisionUtils.cpp, the point edge distance was calculated as following.

inline void d_PE(const Eigen::RowVector3d& v0,
    const Eigen::RowVector3d& v1,
    const Eigen::RowVector3d& v2,
    double& d)
{
    d = (v1 - v0).cross(v2 - v0).squaredNorm() / (v2 - v1).squaredNorm();
}

I think this is actually calculating the squared distance between a point and edge.

Can IPC be used to simulate voxel-based object

Hi, Thanks for your great work!!

I'd like to know if IPC is able to be used to simulate contact between voxel-based objects with inner voxels, like:
image

instead of the mesh-based representation which can only represent the surface of an object:
image

However, in the example, it seems all objects are represented as surface mesh without inner structures.

Thanks!

[error] constraintVal = 0 when evaluating constraints

I get this error when trying to run IPC on a custom rope mesh.

       0  8.90364 0.155414
      0 8.83411  0.1542
       0  8.80866 0.153756
       0  8.99863 0.157072

A friend is able to run the same .txt file with the same mesh on a different computer. Do you have any suggestions on what the root cause may be? The tutorials run fine for me.

Export only the mesh of select bodies

Creating a feature request from an email I received:

We are simulating the bouncing sphere inside of a closed boundary, so we input multiple mesh files (including the mesh of the surrounding boxes, and the mesh of the sphere). Is there a way to only output the mesh file we are interested in? (we only want the output mesh to contain the sphere, not the surrounding constraints).

My reply:

Unfortunately, exporting each input shape individually is not implemented. The reason being that all shapes are concatenated together and simulated as one large shape with disconnected components.

Probably the easiest way for you to implement this feature is as a post-process of the exported OBJ files. I would for each OBJ: load the OBJ, separate the mesh into disconnected components, save the component you want. The order of components should be consistent with the input order of shapes and is consistent throughout the simulation. The "complicated" part is splitting by disconnected components, but luckily libigl has some functions for this or PyMesh has a single function that does exactly this.

Alternatively, I think it would be easy to keep track of which vertices/faces belong to which input shape and modify IPC to export the components individually. If you are comfortable with C++ and want to try adding this feature to IPC it would be welcomed. Otherwise, I think it is worth my time to add this, but I don't know when I will have time to get to it.

This should help me keep track of the feature request.

Running very slow

When I run this example 1_squeezeOut.txt,it's very slow.Hoping for help.Thank you very much

meshprocessing linking error

Hi, to use my own mesh, I tried to build MeshProcessing.cpp in root/src/Projects/MeshProcessing, but met with linking errors as follow:

[  3%] Built target predicates
[  3%] Built target tbb_def_files
[  5%] Built target triangle
[  5%] Built target tetgen
[  7%] Built target igl_stb_image
[  9%] Built target linsys_pardiso
[ 10%] Built target qdldlobject
[ 10%] Built target glad
[ 25%] Built target glfw
[ 39%] Built target mshio
[ 42%] Built target linsys_qdldl
[ 45%] Built target tight_inclusion
[ 48%] Built target imgui
[ 50%] Built target imguizmo
[ 58%] Built target osqpstatic
[ 59%] Built target ccd_wrapper_floating_point_root_finder
[ 84%] Built target tbb
[ 85%] Built target ccd_wrapper
[ 97%] Built target IPC_dev
[ 98%] Linking CXX executable ../../../../src/Projects/MeshProcessing/meshprocessing
/usr/bin/ld: ../../../libIPC_dev.so: undefined reference to `timer_mt'
/usr/bin/ld: ../../../libIPC_dev.so: undefined reference to `timer'
/usr/bin/ld: ../../../libIPC_dev.so: undefined reference to `timer_temp3'
/usr/bin/ld: ../../../libIPC_dev.so: undefined reference to `V_CE'
/usr/bin/ld: ../../../libIPC_dev.so: undefined reference to `surfIndToTet'
/usr/bin/ld: ../../../libIPC_dev.so: undefined reference to `compVAccSize'
/usr/bin/ld: ../../../libIPC_dev.so: undefined reference to `F_surf'
/usr/bin/ld: ../../../libIPC_dev.so: undefined reference to `V_surf'
/usr/bin/ld: ../../../libIPC_dev.so: undefined reference to `F_CE'
/usr/bin/ld: ../../../libIPC_dev.so: undefined reference to `timer_step'
/usr/bin/ld: ../../../libIPC_dev.so: undefined reference to `compFAccSize'
/usr/bin/ld: ../../../libIPC_dev.so: undefined reference to `logFile'
/usr/bin/ld: ../../../libIPC_dev.so: undefined reference to `CEIndToTet'
collect2: error: ld returned 1 exit status
make[3]: *** [src/Projects/MeshProcessing/CMakeFiles/meshprocessing.dir/build.make:117: ../src/Projects/MeshProcessing/meshprocessing] Error 1
make[2]: *** [CMakeFiles/Makefile2:2275: src/Projects/MeshProcessing/CMakeFiles/meshprocessing.dir/all] Error 2
make[1]: *** [CMakeFiles/Makefile2:2282: src/Projects/MeshProcessing/CMakeFiles/meshprocessing.dir/rule] Error 2
make: *** [Makefile:926: meshprocessing] Error 2

Thanks for any guidance!

Issue will running 2fallingcubes example.

Hello,
When running the 2cubesFall.txt example. I get the following error : X11: The DISPLAY environment variable is missingThe GLFW library is not initializedThe GLFW library is not initializedThe GLFW library is not initializedSegmentation fault (core dumped). I think the problem may be that I'm running on a remote machine using a non-x11 terminal. Is there a way to disable the viz and have IPC dump files I can read in later?

compile issues in Ubuntu

I tried to install IPC on Ubuntu 16.04 and I got couple of compile errors. I fixed them and sent a PR. I changed some lines in src/CollisionObject/CollisionObject.h and src/CollisionObject/HalfSpace.cpp.
Here is what I did to install the modified code:
Pre-requisites (in addition to what the repo says):

  • GMP LIB: sudo apt install libgmp-dev
  • Also, you will need gcc 7 or later. I installed it like (sudo add-apt-repository ppa:jonathonf/gcc-7.1
    sudo apt-get update
    sudo apt-get install gcc-7 g++-7)

Then you can use the following:
mkdir build
cd build
cmake -DCMAKE_CXX_COMPILER=g++-7 -DCMAKE_CC_COMPILER=gcc-7 -DCMAKE_PREFIX_PATH=/home/kazem/programs/SuiteSparse/ -DCMAKE_BUILD_TYPE=Release ..
make -j4

I could run the first tutorial.

Docs for integration into existing project

Hi, I just got to know this paper the found it is amazingly open-sourced!

By briefly reading the doc, it seems (correct me if I'm wrong) the current code is meant to be used as independent software.

Is it possible / Is there any doc for integrating it into an existing project in a library mode?
Say, I'd like to run the simulation in my own OpenGL environment on my mesh; and instead of exporting all the output into files, I would like to store the obj output internally, and use a slider control at which stage the simulation is, etc...

how to link SuitSparse to IPC-master on Windows

I am using Windows and am new to SuitSparse. I wonder how to link SuitSparse to IPC-master.

I clone SuitSparse and build it as below.

图片

When I build IPC-master, the output is as below

图片

What else should I do to use SuitSparse in IPC?

Output interval control

I'm having trouble getting IPC to output and .obj file every timestep. I looked over the documentation and there is an input called playBackSpeed. I've tried setting this value to 1 and to a speed that that equals number of time steps/simulation end time. Neither of these setting has produced a 1.obj or a 2.obj file after Timestep 1 and 2 are completed.

Any help would be appreciated.

Thanks,
Nick

Performance questions in Windows

Hi,

Thanks for sharing this project! I complied it in Windows by Visual Studio 2019, but I found its performance is much lower than in Ubuntu. I checked that I used MKL intel blas and lapack to build sparsesuit package from https://github.com/jlblancoc/suitesparse-metis-for-windows.
I used the hello world example and get both output files of "info1.txt" in Windows and Ubuntu as follows. I used the same threads (=12) in both Windows and Ubuntu for the simulation. The left one is the output from Windows, and the right one is from Ubuntu. when outputting this first output file, those two cubes and the ground are not get contacted with each other. From the output, basic every step is lower even for matrix manipulation, so I don't know if I missed something else that would make the performance lower so much.

Thanks!

image

element hessian matrix / stress differentials computation of Neo-Hookean material

Hi, when I read IPC's code about how to compute tetrahedron element hessian matrix of Neo-Hookean material, I found it difficult to figure out, mainly confused of this function Energy<dim>::compute_dP_div_dF.
I have read Sifakis's SIGGRAPH Course note (FEM simulation of 3D deformable solids: A practitioner's guide to theory, discretization and model reduction), but still can't correspond to the formula of stress differentials and IPC's code, having no idea about the meaning of BLeftCoef, rightCoef.

I want to know whether a detailed formulas derivation of stress differentials in IPC's code or any related reference documents could be provided. I really appreciate your help!

Camera to world transformation

Was wondering if there's an easy or recommended way to get a pixel -> world coordinates transform for an image taken in IPC?

error about compile

hello,thanks for your project.It's amazing that project can search dependence and clone and make it automatically.
when I run the command:"python build.py",it met error in the step of "make"

pf@pf-N95TP6:~/IPC$ python build.py
-- The C compiler identification is GNU 5.5.0
-- The CXX compiler identification is Clang 3.8.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc - works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ - works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE
-- Found BLAS: /usr/lib/libopenblas.so
-- Found AMD headers in: /usr/include/suitesparse
-- Found AMD library: /usr/lib/x86_64-linux-gnu/libamd.so
-- Found CAMD headers in: /usr/include/suitesparse
-- Found CAMD library: /usr/lib/x86_64-linux-gnu/libcamd.so
-- Found COLAMD headers in: /usr/include/suitesparse
-- Found COLAMD library: /usr/lib/x86_64-linux-gnu/libcolamd.so
-- Found CCOLAMD headers in: /usr/include/suitesparse
-- Found CCOLAMD library: /usr/lib/x86_64-linux-gnu/libccolamd.so
-- Found CHOLMOD headers in: /usr/include/suitesparse
-- Found CHOLMOD library: /usr/lib/x86_64-linux-gnu/libcholmod.so
-- Found SUITESPARSEQR headers in: /usr/include/suitesparse
-- Found SUITESPARSEQR library: /usr/lib/x86_64-linux-gnu/libspqr.so
-- Found SUITESPARSE_CONFIG headers in: /usr/include/suitesparse
-- Found SUITESPARSE_CONFIG library: /usr/lib/x86_64-linux-gnu/libsuitesparseconfig.so
-- Found LIBRT library: /usr/lib/x86_64-linux-gnu/librt.so
-- Adding librt: /usr/lib/x86_64-linux-gnu/librt.so to SuiteSparse_config libraries (required on Linux & Unix [not OSX] if SuiteSparse is compiled with timing).
-- Found METIS headers in: /usr/include
-- Found METIS library: /usr/lib/x86_64-linux-gnu/libmetis.so
-- Found SuiteSparse: TRUE (found version "4.4.6")
Cloning into 'osqp'...
HEAD is now at e2b6fdb... Added bintray override to package deployment
Cloning into 'lin_sys/direct/qdldl/qdldl_sources'...
-- We are on a Linux system
-- Embedded is OFF
-- Printing is ON
-- Profiling is ON
-- User interrupt is ON
-- Floats are OFF
-- Long integers (64bit) are OFF
-- Code coverage is OFF
-- MKL Pardiso: ON
-- Floats are OFF
-- Long integers (64bit) are OFF
Cloning into 'libigl'...
HEAD is now at b0d7740... Use edge length from mesh in igl::dijkstra. (#1170)
Cloning into 'eigen'...
HEAD is now at cf794d3... bump to 3.3.7
-- Creating target: igl::core (igl)
-- Creating target: igl::opengl (igl_opengl)
-- Found OpenGL: /usr/lib/x86_64-linux-gnu/libGL.so
Cloning into 'glad'...
HEAD is now at 09b4969... Update CMakeLists.txt
-- Creating target: igl::opengl_glfw (igl_opengl_glfw)
Cloning into 'glfw'...
HEAD is now at b079610... Documentation work
-- Using X11 for window creation
-- Found X11: /usr/include
-- Looking for XOpenDisplay in /usr/lib/x86_64-linux-gnu/libX11.so;/usr/lib/x86_64-linux-gnu/libXext.so
-- Looking for XOpenDisplay in /usr/lib/x86_64-linux-gnu/libX11.so;/usr/lib/x86_64-linux-gnu/libXext.so - found
-- Looking for gethostbyname
-- Looking for gethostbyname - found
-- Looking for connect
-- Looking for connect - found
-- Looking for remove
-- Looking for remove - found
-- Looking for shmat
-- Looking for shmat - found
-- Looking for IceConnectionNumber in ICE
-- Looking for IceConnectionNumber in ICE - found
-- Creating target: igl::opengl_glfw_imgui (igl_opengl_glfw_imgui)
Cloning into 'imgui'...
HEAD is now at ebe79bb... Demo: Custom rendering: Minor sizing issue fix.
Cloning into 'libigl-imgui'...
HEAD is now at 07ecd38... Update to imgui 1.66b.
Cloning into 'stb'...
HEAD is now at cd0fa3f... Merge pull request #2 from w-m/master
-- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY
-- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY - Success
-- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY
-- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY - Success
-- Performing Test COMPILER_HAS_DEPRECATED_ATTR
-- Performing Test COMPILER_HAS_DEPRECATED_ATTR - Success
-- Creating target: igl::png (igl_png)
Cloning into 'tetgen'...
HEAD is now at c63e7a6... Fix a stack-buffer overflow in predicates.cxx
-- Creating target: igl::tetgen (igl_tetgen)
Cloning into 'triangle'...
HEAD is now at d284c4a... Avoid symbol collision with predicates (libigl/libigl#1168).
-- Creating target: igl::triangle (igl_triangle)
Cloning into 'predicates'...
HEAD is now at 4c57c1d... Revert "Avoid symbol collision with triangle."
-- Creating target: igl::predicates (igl_predicates)
Cloning into 'tbb'...
HEAD is now at 344fa84... Build system / CI fixes
-- TBB: NOT using libc++.
Cloning into 'exact-ccd'...
HEAD is now at 305bb6f... Merge pull request #2 from zfergus/master
Cloning into 'spdlog'...
HEAD is now at 1549ff1... Replace STRING(PREPEND ..) in CMakeLists.txt to support older CMake versions
Cloning into 'amgcl'...
HEAD is now at 461a66c... Suppress uninitialized variable warning
Cloning into 'pyamgcl/pybind11'...
Cloning into 'tools/clang'...
-- Found Boost: /usr/include (found version "1.58.0") found components: program_options serialization unit_test_framework
-- Found OpenMP_C: -fopenmp (found version "4.0")
-- Found OpenMP_CXX: -fopenmp=libomp (found version "4.0")
-- Found OpenMP: TRUE (found version "4.0")
-- Found MPI_C: /usr/lib/openmpi/lib/libmpi.so (found version "3.0")
-- Found MPI_CXX: /usr/lib/openmpi/lib/libmpi_cxx.so (found version "3.0")
-- Found MPI: TRUE (found version "3.0")
CMake Warning (dev) at /usr/local/share/cmake-3.17/Modules/FindPackageHandleStandardArgs.cmake:272 (message):
The package name passed to find_package_handle_standard_args (METIS) does
not match the name of the calling package (Metis). This can lead to
problems in calling code that expects find_package result variables
(e.g., _FOUND) to follow a certain pattern.
Call Stack (most recent call first):
external/amgcl/cmake/FindMetis.cmake:24 (find_package_handle_standard_args)
external/amgcl/CMakeLists.txt:195 (find_package)
This warning is for project developers. Use -Wno-dev to suppress it.

-- Found METIS: /usr/include
CMake Warning (dev) at /usr/local/share/cmake-3.17/Modules/FindPackageHandleStandardArgs.cmake:272 (message):
The package name passed to find_package_handle_standard_args (SCOTCH)
does not match the name of the calling package (Scotch). This can lead to
problems in calling code that expects find_package result variables
(e.g., _FOUND) to follow a certain pattern.
Call Stack (most recent call first):
external/amgcl/cmake/FindScotch.cmake:22 (find_package_handle_standard_args)
external/amgcl/CMakeLists.txt:196 (find_package)
This warning is for project developers. Use -Wno-dev to suppress it.

-- Could NOT find SCOTCH (missing: SCOTCH_INCLUDES SCOTCH_LIBRARIES)
CMake Warning (dev) at /usr/local/share/cmake-3.17/Modules/FindPackageHandleStandardArgs.cmake:272 (message):
The package name passed to find_package_handle_standard_args (PASTIX)
does not match the name of the calling package (Pastix). This can lead to
problems in calling code that expects find_package result variables
(e.g., _FOUND) to follow a certain pattern.
Call Stack (most recent call first):
external/amgcl/cmake/FindPastix.cmake:11 (find_package_handle_standard_args)
external/amgcl/CMakeLists.txt:197 (find_package)
This warning is for project developers. Use -Wno-dev to suppress it.

-- Could NOT find PASTIX (missing: PASTIX_INCLUDES PASTIX_LIBRARIES)
Cloning into 'Catch2'...
HEAD is now at 87b745d... v2.10.2
Cloning into 'finite-diff'...
HEAD is now at a1b8b56... Fixed name collision in custom_download_project
-- Performing Test IS_SUPPORTED_-Wall
-- Performing Test IS_SUPPORTED_-Wall - Success
-- Performing Test IS_SUPPORTED_-Wextra
-- Performing Test IS_SUPPORTED_-Wextra - Success
-- Performing Test IS_SUPPORTED_-pedantic
-- Performing Test IS_SUPPORTED_-pedantic - Success
-- Performing Test IS_SUPPORTED_-Wunused
-- Performing Test IS_SUPPORTED_-Wunused - Success
-- Performing Test IS_SUPPORTED_-Wno-long-long
-- Performing Test IS_SUPPORTED_-Wno-long-long - Success
-- Performing Test IS_SUPPORTED_-Wpointer-arith
-- Performing Test IS_SUPPORTED_-Wpointer-arith - Success
-- Performing Test IS_SUPPORTED_-Wformat-2
-- Performing Test IS_SUPPORTED_-Wformat-2 - Success
-- Performing Test IS_SUPPORTED_-Wuninitialized
-- Performing Test IS_SUPPORTED_-Wuninitialized - Success
-- Performing Test IS_SUPPORTED_-Wcast-qual
-- Performing Test IS_SUPPORTED_-Wcast-qual - Success
-- Performing Test IS_SUPPORTED_-Wmissing-noreturn
-- Performing Test IS_SUPPORTED_-Wmissing-noreturn - Success
-- Performing Test IS_SUPPORTED_-Wmissing-format-attribute
-- Performing Test IS_SUPPORTED_-Wmissing-format-attribute - Success
-- Performing Test IS_SUPPORTED_-Wredundant-decls
-- Performing Test IS_SUPPORTED_-Wredundant-decls - Success
-- Performing Test IS_SUPPORTED_-Werror-implicit
-- Performing Test IS_SUPPORTED_-Werror-implicit - Success
-- Performing Test IS_SUPPORTED_-Werror-nonnull
-- Performing Test IS_SUPPORTED_-Werror-nonnull - Success
-- Performing Test IS_SUPPORTED_-Werror-init-self
-- Performing Test IS_SUPPORTED_-Werror-init-self - Success
-- Performing Test IS_SUPPORTED_-Werror-main
-- Performing Test IS_SUPPORTED_-Werror-main - Success
-- Performing Test IS_SUPPORTED_-Werror-missing-braces
-- Performing Test IS_SUPPORTED_-Werror-missing-braces - Success
-- Performing Test IS_SUPPORTED_-Werror-sequence-point
-- Performing Test IS_SUPPORTED_-Werror-sequence-point - Success
-- Performing Test IS_SUPPORTED_-Werror-return-type
-- Performing Test IS_SUPPORTED_-Werror-return-type - Success
-- Performing Test IS_SUPPORTED_-Werror-trigraphs
-- Performing Test IS_SUPPORTED_-Werror-trigraphs - Success
-- Performing Test IS_SUPPORTED_-Werror-array-bounds
-- Performing Test IS_SUPPORTED_-Werror-array-bounds - Success
-- Performing Test IS_SUPPORTED_-Werror-write-strings
-- Performing Test IS_SUPPORTED_-Werror-write-strings - Success
-- Performing Test IS_SUPPORTED_-Werror-address
-- Performing Test IS_SUPPORTED_-Werror-address - Success
-- Performing Test IS_SUPPORTED_-Werror-int-to-pointer-cast
-- Performing Test IS_SUPPORTED_-Werror-int-to-pointer-cast - Success
-- Performing Test IS_SUPPORTED_-Werror-pointer-to-int-cast
-- Performing Test IS_SUPPORTED_-Werror-pointer-to-int-cast - Success
-- Performing Test IS_SUPPORTED_-Wno-unused-variable
-- Performing Test IS_SUPPORTED_-Wno-unused-variable - Success
-- Performing Test IS_SUPPORTED_-Wunused-but-set-variable
-- Performing Test IS_SUPPORTED_-Wunused-but-set-variable - Failed
-- Performing Test IS_SUPPORTED_-Wno-unused-parameter
-- Performing Test IS_SUPPORTED_-Wno-unused-parameter - Success
-- Performing Test IS_SUPPORTED_-Wno-old-style-cast
-- Performing Test IS_SUPPORTED_-Wno-old-style-cast - Success
-- Performing Test IS_SUPPORTED_-Wshadow
-- Performing Test IS_SUPPORTED_-Wshadow - Success
-- Performing Test IS_SUPPORTED_-Wstrict-null-sentinel
-- Performing Test IS_SUPPORTED_-Wstrict-null-sentinel - Failed
-- Performing Test IS_SUPPORTED_-Woverloaded-virtual
-- Performing Test IS_SUPPORTED_-Woverloaded-virtual - Success
-- Performing Test IS_SUPPORTED_-Wsign-promo
-- Performing Test IS_SUPPORTED_-Wsign-promo - Success
-- Performing Test IS_SUPPORTED_-Wstack-protector
-- Performing Test IS_SUPPORTED_-Wstack-protector - Success
-- Performing Test IS_SUPPORTED_-Wstrict-aliasing
-- Performing Test IS_SUPPORTED_-Wstrict-aliasing - Success
-- Performing Test IS_SUPPORTED_-Wstrict-aliasing-2
-- Performing Test IS_SUPPORTED_-Wstrict-aliasing-2 - Success
-- Performing Test IS_SUPPORTED_-Wswitch
-- Performing Test IS_SUPPORTED_-Wswitch - Success
-- Performing Test IS_SUPPORTED_-Wswitch-unreachable
-- Performing Test IS_SUPPORTED_-Wswitch-unreachable - Failed
-- Performing Test IS_SUPPORTED_-Wcast-align
-- Performing Test IS_SUPPORTED_-Wcast-align - Success
-- Performing Test IS_SUPPORTED_-Wdisabled-optimization
-- Performing Test IS_SUPPORTED_-Wdisabled-optimization - Success
-- Performing Test IS_SUPPORTED_-Winvalid-pch
-- Performing Test IS_SUPPORTED_-Winvalid-pch - Success
-- Performing Test IS_SUPPORTED_-Wpacked
-- Performing Test IS_SUPPORTED_-Wpacked - Success
-- Performing Test IS_SUPPORTED_-Wno-padded
-- Performing Test IS_SUPPORTED_-Wno-padded - Success
-- Performing Test IS_SUPPORTED_-Wstrict-overflow
-- Performing Test IS_SUPPORTED_-Wstrict-overflow - Success
-- Performing Test IS_SUPPORTED_-Wstrict-overflow-2
-- Performing Test IS_SUPPORTED_-Wstrict-overflow-2 - Success
-- Performing Test IS_SUPPORTED_-Wctor-dtor-privacy
-- Performing Test IS_SUPPORTED_-Wctor-dtor-privacy - Success
-- Performing Test IS_SUPPORTED_-Wlogical-op
-- Performing Test IS_SUPPORTED_-Wlogical-op - Failed
-- Performing Test IS_SUPPORTED_-Wnoexcept
-- Performing Test IS_SUPPORTED_-Wnoexcept - Failed
-- Performing Test IS_SUPPORTED_-Wnon-virtual-dtor
-- Performing Test IS_SUPPORTED_-Wnon-virtual-dtor - Success
-- Performing Test IS_SUPPORTED_-Wdelete-non-virtual-dtor
-- Performing Test IS_SUPPORTED_-Wdelete-non-virtual-dtor - Success
-- Performing Test IS_SUPPORTED_-Werror-non-virtual-dtor
-- Performing Test IS_SUPPORTED_-Werror-non-virtual-dtor - Success
-- Performing Test IS_SUPPORTED_-Werror-delete-non-virtual-dtor
-- Performing Test IS_SUPPORTED_-Werror-delete-non-virtual-dtor - Success
-- Performing Test IS_SUPPORTED_-Wno-sign-compare
-- Performing Test IS_SUPPORTED_-Wno-sign-compare - Success
-- Performing Test IS_SUPPORTED_-Wnull-dereference
-- Performing Test IS_SUPPORTED_-Wnull-dereference - Success
-- Performing Test IS_SUPPORTED_-fdelete-null-pointer-checks
-- Performing Test IS_SUPPORTED_-fdelete-null-pointer-checks - Failed
-- Performing Test IS_SUPPORTED_-Wduplicated-cond
-- Performing Test IS_SUPPORTED_-Wduplicated-cond - Failed
-- Performing Test IS_SUPPORTED_-Wmisleading-indentation
-- Performing Test IS_SUPPORTED_-Wmisleading-indentation - Failed
-- Performing Test IS_SUPPORTED_-fno-omit-frame-pointer
-- Performing Test IS_SUPPORTED_-fno-omit-frame-pointer - Success
-- Performing Test IS_SUPPORTED_-fno-optimize-sibling-calls
-- Performing Test IS_SUPPORTED_-fno-optimize-sibling-calls - Success
Cloning into 'eigen'...
HEAD is now at cf794d3... bump to 3.3.7
Cloning into 'cli11'...
HEAD is now at b979d3a... Bug fix for issue 369. (#370)
Cloning into 'extern/googletest'...
Cloning into 'extern/json'...
Cloning into 'extern/sanitizers'...
Cloning into 'rational_ccd'...
HEAD is now at 01277f5... fixed tri edge inter
CMake Warning (dev) at /usr/local/share/cmake-3.17/Modules/FindPackageHandleStandardArgs.cmake:272 (message):
The package name passed to find_package_handle_standard_args (GMP) does
not match the name of the calling package (GMPECCD). This can lead to
problems in calling code that expects find_package result variables
(e.g., _FOUND) to follow a certain pattern.
Call Stack (most recent call first):
external/rational_ccd/cmake/FindGMPECCD.cmake:33 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
external/rational_ccd/CMakeLists.txt:57 (find_package)
This warning is for project developers. Use -Wno-dev to suppress it.

-- Found GMP: /usr/include/x86_64-linux-gnu
-- GMP libs: /usr/lib/x86_64-linux-gnu/libgmp.so /usr/include/x86_64-linux-gnu
-- clang-format not found: skipping Format subdirectory
-- Using scalar implmentation of SVD
-- Seaching for SSE...
-- Using CPU native flags for SSE optimization: -march=native
-- Performing Test DETECTED_SSE_42
-- Performing Test DETECTED_SSE_42 - Success
-- Performing Test DETECTED_SSE_41
-- Performing Test DETECTED_SSE_41 - Success
-- Performing Test DETECTED_SSE_30
-- Performing Test DETECTED_SSE_30 - Success
-- Performing Test DETECTED_SSE_20
-- Performing Test DETECTED_SSE_20 - Success
-- Performing Test DETECTED_SSE_10
-- Performing Test DETECTED_SSE_10 - Success
-- Found SSE 4.2 extensions, using flags: -march=native -msse4.2 -mfpmath=sse
-- Searching for AVX...
-- Using CPU native flags for AVX optimization: -march=native
-- Performing Test DETECTED_AVX_20
-- Performing Test DETECTED_AVX_20 - Success
-- Performing Test DETECTED_AVX_10
-- Performing Test DETECTED_AVX_10 - Success
-- Found AVX 2.0 extensions, using flags: -march=native -mavx2 -mno-avx512f -mno-avx512pf -mno-avx512er -mno-avx512cd
-- Searching for FMA...
-- Using CPU native flags for FMA optimization: -march=native
-- Performing Test DETECTED_FMA
-- Performing Test DETECTED_FMA - Success
-- Found FMA extensions, using flags: -march=native -mfma
-- Building for three dimensions
CMake Warning at CMakeLists.txt:274 (message):
MKL not found: disabling OSQP MKL Pardiso linear system solver

-- Configuring done
-- Generating done
-- Build files have been written to: /home/pf/IPC/build
Scanning dependencies of target EVCTCD
Scanning dependencies of target qdldlobject
Scanning dependencies of target RationalCCD
Scanning dependencies of target linsys_pardiso
Scanning dependencies of target linsys_qdldl
Scanning dependencies of target glad
Scanning dependencies of target glfw
Scanning dependencies of target tetgen
Scanning dependencies of target igl_stb_image
Scanning dependencies of target triangle
Scanning dependencies of target predicates
Scanning dependencies of target tbb_static
[ 0%] Building C object external/osqp/lin_sys/direct/qdldl/qdldl_sources/CMakeFiles/qdldlobject.dir/src/qdldl.c.o
[ 1%] Building C object external/libigl/glad/CMakeFiles/glad.dir/src/glad.c.o
[ 2%] Building C object external/libigl/predicates/CMakeFiles/predicates.dir/predicates.c.o
[ 3%] Building C object external/osqp/lin_sys/direct/CMakeFiles/linsys_pardiso.dir/pardiso/pardiso_interface.c.o
[ 3%] Building CXX object external/libigl/stb_image/CMakeFiles/igl_stb_image.dir/igl_stb_image.cpp.o
[ 4%] Building C object external/libigl/triangle/CMakeFiles/triangle.dir/triangle.c.o
[ 5%] Building C object external/osqp/lin_sys/direct/qdldl/CMakeFiles/linsys_qdldl.dir/amd/src/amd_1.c.o
[ 5%] Building CXX object external/libigl/tetgen/CMakeFiles/tetgen.dir/tetgen.cxx.o
[ 5%] Building CXX object external/rational_ccd/CMakeFiles/RationalCCD.dir/src/ECCD.cpp.o
[ 5%] Building C object external/libigl/glfw/src/CMakeFiles/glfw.dir/context.c.o
[ 5%] Building CXX object CMakeFiles/EVCTCD.dir/src/CCD/EVCTCD/CTCD.cpp.o
[ 5%] Building CXX object external/tbb/CMakeFiles/tbb_static.dir/src/old/concurrent_queue_v2.cpp.o
[ 5%] Built target qdldlobject
[ 7%] Building CXX object external/rational_ccd/CMakeFiles/RationalCCD.dir/src/Utils.cpp.o
[ 7%] Building C object external/osqp/lin_sys/direct/CMakeFiles/linsys_pardiso.dir/pardiso/pardiso_loader.c.o
[ 8%] Linking C static library ../../../libglad.a
[ 8%] Linking C static library ../../../libpredicates.a
[ 9%] Building C object external/osqp/lin_sys/direct/qdldl/CMakeFiles/linsys_qdldl.dir/amd/src/amd_2.c.o
[ 9%] Built target linsys_pardiso
[ 10%] Building CXX object external/rational_ccd/CMakeFiles/RationalCCD.dir/src/Plots.cpp.o
[ 11%] Building CXX object external/tbb/CMakeFiles/tbb_static.dir/src/old/concurrent_vector_v2.cpp.o
[ 11%] Built target predicates
[ 11%] Built target glad
[ 12%] Building C object external/libigl/glfw/src/CMakeFiles/glfw.dir/init.c.o
[ 14%] Building C object external/osqp/lin_sys/direct/qdldl/CMakeFiles/linsys_qdldl.dir/amd/src/amd_aat.c.o
[ 14%] Building CXX object external/tbb/CMakeFiles/tbb_static.dir/src/old/spin_rw_mutex_v2.cpp.o
[ 14%] Building C object external/libigl/glfw/src/CMakeFiles/glfw.dir/input.c.o
[ 15%] Building CXX object external/libigl/tetgen/CMakeFiles/tetgen.dir/predicates.cxx.o
[ 16%] Building C object external/osqp/lin_sys/direct/qdldl/CMakeFiles/linsys_qdldl.dir/amd/src/amd_control.c.o
[ 16%] Building C object external/osqp/lin_sys/direct/qdldl/CMakeFiles/linsys_qdldl.dir/amd/src/amd_defaults.c.o
[ 17%] Building C object external/osqp/lin_sys/direct/qdldl/CMakeFiles/linsys_qdldl.dir/amd/src/amd_info.c.o
[ 18%] Linking C static library ../../../libtriangle.a
[ 18%] Built target triangle
[ 18%] Building CXX object external/tbb/CMakeFiles/tbb_static.dir/src/old/task_v2.cpp.o
[ 20%] Building C object external/libigl/glfw/src/CMakeFiles/glfw.dir/monitor.c.o
[ 21%] Building C object external/osqp/lin_sys/direct/qdldl/CMakeFiles/linsys_qdldl.dir/amd/src/amd_order.c.o
[ 21%] Building C object external/osqp/lin_sys/direct/qdldl/CMakeFiles/linsys_qdldl.dir/amd/src/amd_post_tree.c.o
[ 22%] Building C object external/libigl/glfw/src/CMakeFiles/glfw.dir/vulkan.c.o
[ 23%] Building C object external/libigl/glfw/src/CMakeFiles/glfw.dir/window.c.o
[ 23%] Building C object external/osqp/lin_sys/direct/qdldl/CMakeFiles/linsys_qdldl.dir/amd/src/amd_preprocess.c.o
[ 24%] Building C object external/libigl/glfw/src/CMakeFiles/glfw.dir/x11_init.c.o
[ 24%] Building C object external/osqp/lin_sys/direct/qdldl/CMakeFiles/linsys_qdldl.dir/amd/src/amd_postorder.c.o
[ 25%] Building CXX object external/tbb/CMakeFiles/tbb_static.dir/src/tbb/arena.cpp.o
[ 27%] Building C object external/osqp/lin_sys/direct/qdldl/CMakeFiles/linsys_qdldl.dir/amd/src/amd_valid.c.o
[ 28%] Building C object external/osqp/lin_sys/direct/qdldl/CMakeFiles/linsys_qdldl.dir/amd/src/SuiteSparse_config.c.o
[ 28%] Building CXX object external/tbb/CMakeFiles/tbb_static.dir/src/tbb/cache_aligned_allocator.cpp.o
[ 28%] Building C object external/osqp/lin_sys/direct/qdldl/CMakeFiles/linsys_qdldl.dir/qdldl_interface.c.o
[ 29%] Building CXX object external/tbb/CMakeFiles/tbb_static.dir/src/tbb/concurrent_hash_map.cpp.o
[ 29%] Built target linsys_qdldl
Scanning dependencies of target exact-ccd
[ 30%] Building CXX object external/exact-ccd/CMakeFiles/exact-ccd.dir/expansion.cpp.o
[ 30%] Building C object external/libigl/glfw/src/CMakeFiles/glfw.dir/x11_monitor.c.o
[ 31%] Building C object external/libigl/glfw/src/CMakeFiles/glfw.dir/x11_window.c.o
In file included from /home/pf/IPC/external/exact-ccd/expansion.cpp:4:
/home/pf/IPC/external/exact-ccd/expansion.h:195:24: error: unknown type name
'size_t'; did you mean '__gnu_cxx::size_t'?
inline void resize( size_t new_size )

^~~~~~
__gnu_cxx::size_t
/usr/bin/../lib/gcc/x86_64-linux-gnu/6.5.0/../../../../include/c++/6.5.0/ext/new_allocator.h:44:14: note:
'__gnu_cxx::size_t' declared here
using std::size_t;
^
[ 32%] Building C object external/libigl/glfw/src/CMakeFiles/glfw.dir/xkb_unicode.c.o
[ 32%] Building C object external/libigl/glfw/src/CMakeFiles/glfw.dir/posix_time.c.o
[ 34%] Building CXX object external/tbb/CMakeFiles/tbb_static.dir/src/tbb/concurrent_monitor.cpp.o
1 error generated.
external/exact-ccd/CMakeFiles/exact-ccd.dir/build.make:82: recipe for target 'external/exact-ccd/CMakeFiles/exact-ccd.dir/expansion.cpp.o' failed
make[2]: *** [external/exact-ccd/CMakeFiles/exact-ccd.dir/expansion.cpp.o] Error 1
CMakeFiles/Makefile2:1278: recipe for target 'external/exact-ccd/CMakeFiles/exact-ccd.dir/all' failed
make[1]: *** [external/exact-ccd/CMakeFiles/exact-ccd.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 34%] Building CXX object external/tbb/CMakeFiles/tbb_static.dir/src/tbb/concurrent_queue.cpp.o
[ 35%] Building CXX object external/tbb/CMakeFiles/tbb_static.dir/src/tbb/concurrent_vector.cpp.o
[ 35%] Building CXX object external/tbb/CMakeFiles/tbb_static.dir/src/tbb/condition_variable.cpp.o
[ 36%] Building CXX object external/tbb/CMakeFiles/tbb_static.dir/src/tbb/critical_section.cpp.o
[ 37%] Building C object external/libigl/glfw/src/CMakeFiles/glfw.dir/posix_thread.c.o
[ 37%] Building C object external/libigl/glfw/src/CMakeFiles/glfw.dir/glx_context.c.o
[ 38%] Building CXX object external/tbb/CMakeFiles/tbb_static.dir/src/tbb/dynamic_link.cpp.o
[ 38%] Building CXX object external/tbb/CMakeFiles/tbb_static.dir/src/tbb/governor.cpp.o
[ 40%] Building CXX object external/tbb/CMakeFiles/tbb_static.dir/src/tbb/itt_notify.cpp.o
[ 40%] Building CXX object external/tbb/CMakeFiles/tbb_static.dir/src/tbb/market.cpp.o
[ 41%] Linking CXX static library libEVCTCD.a
[ 41%] Built target EVCTCD
[ 42%] Building CXX object external/tbb/CMakeFiles/tbb_static.dir/src/tbb/mutex.cpp.o
[ 43%] Building C object external/libigl/glfw/src/CMakeFiles/glfw.dir/egl_context.c.o
[ 44%] Building C object external/libigl/glfw/src/CMakeFiles/glfw.dir/osmesa_context.c.o
[ 45%] Building CXX object external/tbb/CMakeFiles/tbb_static.dir/src/tbb/observer_proxy.cpp.o
[ 45%] Building CXX object external/tbb/CMakeFiles/tbb_static.dir/src/tbb/pipeline.cpp.o
[ 45%] Building C object external/libigl/glfw/src/CMakeFiles/glfw.dir/linux_joystick.c.o
[ 47%] Building CXX object external/tbb/CMakeFiles/tbb_static.dir/src/tbb/private_server.cpp.o
[ 47%] Building CXX object external/tbb/CMakeFiles/tbb_static.dir/src/tbb/queuing_mutex.cpp.o
[ 48%] Building CXX object external/tbb/CMakeFiles/tbb_static.dir/src/tbb/queuing_rw_mutex.cpp.o
[ 49%] Building CXX object external/tbb/CMakeFiles/tbb_static.dir/src/tbb/reader_writer_lock.cpp.o
[ 50%] Linking C static library ../../../../libglfw3.a
[ 50%] Built target glfw
[ 50%] Building CXX object external/tbb/CMakeFiles/tbb_static.dir/src/tbb/recursive_mutex.cpp.o
[ 51%] Building CXX object external/tbb/CMakeFiles/tbb_static.dir/src/tbb/scheduler.cpp.o
[ 51%] Building CXX object external/tbb/CMakeFiles/tbb_static.dir/src/tbb/semaphore.cpp.o
[ 52%] Building CXX object external/tbb/CMakeFiles/tbb_static.dir/src/tbb/spin_mutex.cpp.o
[ 54%] Building CXX object external/tbb/CMakeFiles/tbb_static.dir/src/tbb/task.cpp.o
[ 54%] Building CXX object external/tbb/CMakeFiles/tbb_static.dir/src/tbb/spin_rw_mutex.cpp.o
[ 55%] Building CXX object external/tbb/CMakeFiles/tbb_static.dir/src/tbb/task_group_context.cpp.o
[ 55%] Building CXX object external/tbb/CMakeFiles/tbb_static.dir/src/tbb/tbb_main.cpp.o
[ 56%] Building CXX object external/tbb/CMakeFiles/tbb_static.dir/src/tbb/tbb_misc.cpp.o
[ 57%] Building CXX object external/tbb/CMakeFiles/tbb_static.dir/src/tbb/tbb_misc_ex.cpp.o
[ 57%] Building CXX object external/tbb/CMakeFiles/tbb_static.dir/src/tbb/tbb_statistics.cpp.o
[ 58%] Building CXX object external/tbb/CMakeFiles/tbb_static.dir/src/tbb/tbb_thread.cpp.o
[ 58%] Building CXX object external/tbb/CMakeFiles/tbb_static.dir/src/tbb/x86_rtm_rw_mutex.cpp.o
[ 60%] Building CXX object external/tbb/CMakeFiles/tbb_static.dir/src/rml/client/rml_tbb.cpp.o
[ 60%] Linking CXX static library libRationalCCD.a
[ 60%] Built target RationalCCD
[ 61%] Linking CXX static library libtbb_static.a
[ 61%] Built target tbb_static
[ 62%] Linking CXX static library ../../../libigl_stb_image.a
[ 62%] Built target igl_stb_image
[ 62%] Linking CXX static library ../../../libtetgen.a
[ 62%] Built target tetgen
Makefile:182: recipe for target 'all' failed
make: *** [all] Error 2

Is there environment preparation or other error, expect your reply and thank you.

Attached configuration

This is really amazing work- thank you! I'm wondering if there is a way to maintain an attachment between 2 objects throughout the simulation. For example, in your initialize attached configuration example on the wiki, the objects fall together, but then separate after colliding with the ground. Is there a way for them to maintain the attachment (i.e. minimal distance between nodes) throughout the simulation?

New Animation Request

Hello,

I was wondering if you could help me write a new Animation case that applies a normal force to the surface nodes of the mesh.
The algorithm would go something like this:

  1. Calculate normals at either nodes or elements (then average them in 1 ring to get at nodes)
  2. Apply a prescribed magnitude force at each node on the external surface in the normal direction
    The use case is that I want to apply both an internal/external pressure to a cylinder

Obviously, this is an enhancement and just looking for some help

The meaning of matrix B

// compute B

Dear authors, thank you for your amazing work. I am new to continuum mechanics, and I cannot understand the meaning of matrix B, left, and right coefficient here, and how B is composed of by the two coefficients. And why should we compute some values on Cdim2 (i.e. xy, yz, zx)?
Thanks a lot!

Ask for reference

I've been looking for details about how to constructing the stiffness matrix, though I know the general steps according to the siggraph course.

I'm stuck here, how to compute the derivatives of the First Piola-Kirchhoff stress tensor with respect to deformation gradient?

void Energy<dim>::compute_dP_div_dF(const AutoFlipSVD<Eigen::Matrix<double, dim, dim>>& svd,

it there any resource that I can follow so that I can finally understand this.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.