Skip to content

Commit

Permalink
Merge commit '1d9b5c2' into ampm
Browse files Browse the repository at this point in the history
  • Loading branch information
fangy14 committed Apr 19, 2017
2 parents 9443e9d + 1d9b5c2 commit ac00340
Show file tree
Hide file tree
Showing 17 changed files with 89 additions and 218 deletions.
6 changes: 4 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,10 @@ before_script:
- export LD_LIBRARY_PATH=/usr/lib64:$LD_LIBRARY_PATH
- mkdir build
- cd build
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo sh ../build_scripts/linux.sh ; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then sudo sh ../build_scripts/osx.sh ; fi
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then travis_wait 20 sudo sh ../scripts/linux_sudo.sh ; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then sudo sh ../scripts/osx_sudo.sh ; fi
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sh ../scripts/linux_normal.sh ; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then sh ../scripts/osx_normal.sh ; fi

script:
- python -c 'import taichi as tc'
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ file(GLOB TAICHI_SOURCE
"include/taichi/*/*/*/*.h" "include/taichi/*/*/*.h" "include/taichi/*/*.h" "include/taichi/*.h")

set(CORE_LIBRARY_NAME taichi_core)
add_library(${CORE_LIBRARY_NAME} SHARED ${TAICHI_SOURCE} include/taichi/dynamics/mpm2d/scheduler.cpp)
add_library(${CORE_LIBRARY_NAME} SHARED ${TAICHI_SOURCE})

if (NOT WIN32)
target_link_libraries(${CORE_LIBRARY_NAME} pthread)
Expand Down
2 changes: 1 addition & 1 deletion include/taichi/dynamics/mpm2d/mpm.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

#include <memory>
#include <vector>
#include "scheduler.h"
#include "mpm_scheduler.h"
#include "mpm_grid.h"
#include <taichi/math/levelset_2d.h>
#include <taichi/math/dynamic_levelset_2d.h>
Expand Down
3 changes: 1 addition & 2 deletions include/taichi/dynamics/mpm2d/mpm_grid.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,14 @@
#pragma once

#include "mpm_utils.h"
#include <stb_image.h>
#include <algorithm>
#include <atomic>
#include <taichi/math/array_2d.h>
#include <taichi/math/array_1d.h>
#include <taichi/math/levelset_2d.h>
#include <taichi/math/dynamic_levelset_2d.h>
#include "mpm_particle.h"
#include "scheduler.h"
#include "mpm_scheduler.h"

TC_NAMESPACE_BEGIN

Expand Down
1 change: 1 addition & 0 deletions include/taichi/dynamics/mpm2d/mpm_particle.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#include <taichi/math/array_2d.h>
#include "mpm_utils.h"
#include <taichi/common/util.h>
#include <taichi/math/qr_svd.h>
#include <taichi/math/levelset_2d.h>
#include <taichi/math/dynamic_levelset_2d.h>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@
the MIT license as written in the LICENSE file.
*******************************************************************************/

#include "scheduler.h"
#include "mpm_scheduler.h"

TC_NAMESPACE_BEGIN

template <typename T> using Array = Array2D<T>;
template<typename T> using Array = Array2D<T>;

void MPMScheduler::expand(bool expand_vel, bool expand_state) {
Array<int> new_states;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ class MPMScheduler {
public:
typedef MPMParticle Particle;

template <typename T> using Array = Array2D<T>;
template<typename T> using Array = Array2D<T>;

Array<int64> max_dt_int_strength;
Array<int64> max_dt_int_cfl;
Expand Down
126 changes: 0 additions & 126 deletions include/taichi/dynamics/mpm2d/mpm_utils.cpp

This file was deleted.

10 changes: 0 additions & 10 deletions include/taichi/dynamics/mpm2d/mpm_utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,15 +65,5 @@ inline Vector2 dw(const Vector2 &a) {
return Vector2(dw(a.x) * w(a.y), w(a.x) * dw(a.y));
}

inline real det(const Matrix2 &m) {
return m[0][0] * m[1][1] - m[0][1] * m[1][0];
}

void polar_decomp(const Matrix2 &A, Matrix2 &r, Matrix2 &s);

void svd(Matrix2 A, Matrix2 &u, Matrix2 &sig, Matrix2 &v);
void svd(Matrix3 A, Matrix3 &u, Matrix3 &sig, Matrix3 &v);


TC_NAMESPACE_END

8 changes: 8 additions & 0 deletions include/taichi/math/math_util.h
Original file line number Diff line number Diff line change
Expand Up @@ -280,6 +280,14 @@ inline double pow(const double &a, const double &b) {
return ::pow(a, b);
}

inline real det(const Matrix2 &m) {
return glm::determinant(m);
}

inline real det(const Matrix3 &m) {
return glm::determinant(m);
}

//#define rand frand


Expand Down
82 changes: 52 additions & 30 deletions include/taichi/math/qr_svd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,6 @@
TC_NAMESPACE_BEGIN

void imp_svd(Matrix3 m, Matrix3 &u, Matrix3 &s, Matrix3 &v) {
/*
Eigen::Matrix<T, 3, 3> *M;
Eigen::Matrix<T, 3, 1> *S;
Eigen::Matrix<T, 3, 3> *U;
Eigen::Matrix<T, 3, 3> *V;
*/
JIXIE::singularValueDecomposition(
*(Eigen::Matrix<float, 3, 3> *)&m,
*(Eigen::Matrix<float, 3, 3> *)&u,
Expand All @@ -30,40 +24,17 @@ void imp_svd(Matrix3 m, Matrix3 &u, Matrix3 &s, Matrix3 &v) {
memset(&s[0][0] + 1, 0, sizeof(float) * 8);
s[1][1] = s_tmp[0];
s[2][2] = s_tmp[1];
/*
printf("glm\n");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf(" %.4f", m[j][i]);
}
printf("\n");
}
printf("\n");
printf("eigen\n");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf(" %.4f", (*((Eigen::Matrix<float, 3, 3> *) &m))(i, j));
}
printf("\n");
}
*/
}

// m can not be const here, otherwise JIXIE::singularValueDecomposition will cause a error due to const_cast
void imp_svd(Matrix2 m, Matrix2 &u, Matrix2 &s, Matrix2 &v) {
/*
Eigen::Matrix<T, 3, 3> *M;
Eigen::Matrix<T, 3, 1> *S;
Eigen::Matrix<T, 3, 3> *U;
Eigen::Matrix<T, 3, 3> *V;
*/
JIXIE::singularValueDecomposition(
*(Eigen::Matrix<float, 2, 2> *)&m,
*(Eigen::Matrix<float, 2, 2> *)&u,
*(Eigen::Matrix<float, 2, 1> *)&s,
*(Eigen::Matrix<float, 2, 2> *)&v
);
float s_tmp {s[0][1]};
float s_tmp{s[0][1]};
memset(&s[0][0] + 1, 0, sizeof(float) * 3);
if (s_tmp > 0) {
s[1][1] = s_tmp;
Expand All @@ -74,4 +45,55 @@ void imp_svd(Matrix2 m, Matrix2 &u, Matrix2 &s, Matrix2 &v) {
}
}

void svd(Matrix2 m, Matrix2 &u, Matrix2 &sig, Matrix2 &v) {
// TODO: what's going on ???
if (frobenius_norm2(m - Matrix2(m[0][0])) < 1e-7f) {
u = m;
sig = v = Matrix2(1);
} else {
imp_svd(m, u, sig, v);
}
}

void svd(Matrix3 A, Matrix3 &u, Matrix3 &sig, Matrix3 &v) {
if (frobenius_norm2(A - Matrix3(A[0][0])) < 1e-5f) {
u = A;
sig = v = Matrix3(1);
} else {
imp_svd(A, u, sig, v);
}
}

void polar_decomp(Matrix2 A, Matrix2 &r, Matrix2 &s) {
Matrix2 u, sig, v;
svd(A, u, sig, v);
r = u * glm::transpose(v);
s = v * sig * glm::transpose(v);
}

void polar_decomp(Matrix3 A, Matrix3 &r, Matrix3 &s) {
Matrix3 u, sig, v;
svd(A, u, sig, v);
r = u * glm::transpose(v);
s = v * sig * glm::transpose(v);
if (!is_normal(r)) {
Matrix3 m = A;
svd(m, u, sig, v);
P(A);
P(m);
P(u);
P(sig);
P(v);
P(r);
P(s);
P(glm::transpose(v));
P(u * glm::transpose(v));
r = u * glm::transpose(v);
P(r);
printf("Matrix3 m(%.30f,%.30f,%.30f,%.30f,%.30f,%.30f,%.30f,%.30f,%.30f);\n", m[0][0], m[1][0], m[2][0],
m[0][1],
m[1][1], m[2][1], m[0][2], m[1][2], m[2][2]);
}
}

TC_NAMESPACE_END
11 changes: 10 additions & 1 deletion include/taichi/math/qr_svd.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,17 @@

TC_NAMESPACE_BEGIN

void imp_svd(Matrix3 m, Matrix3 &u, Matrix3 &s, Matrix3 &v);

void imp_svd(Matrix2 m, Matrix2 &u, Matrix2 &s, Matrix2 &v);

void imp_svd(Matrix3 m, Matrix3 &u, Matrix3 &s, Matrix3 &v);

void svd(Matrix2 m, Matrix2 &u, Matrix2 &sig, Matrix2 &v);

void svd(Matrix3 m, Matrix3 &u, Matrix3 &sig, Matrix3 &v);

void polar_decomp(Matrix2 A, Matrix2 &r, Matrix2 &s);

void polar_decomp(Matrix3 A, Matrix3 &r, Matrix3 &s);

TC_NAMESPACE_END
3 changes: 3 additions & 0 deletions scripts/linux_normal.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export CXX="g++-6" CC="gcc-6"
cmake .. -DEMBREE_INCLUDE_PATH:PATH=/usr/include -DEMBREE_LIBRARY=/usr/lib64/libembree.so
make -j4
10 changes: 5 additions & 5 deletions build_scripts/linux.sh → scripts/linux_sudo.sh
100644 → 100755
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
apt-get install cmake libtbb-dev alien dpkg-dev debhelper freeglut3-dev python-scipy python-tk python-imaging-tk python-pip
pip install numpy future futures watchdog Pillow scipy pybind11
apt-get install cmake libtbb-dev alien dpkg-dev debhelper freeglut3-dev python-scipy python-tk python-imaging-tk python-pip
pip install numpy future futures watchdog Pillow scipy pybind11 pyglet
wget https://github.com/embree/embree/releases/download/v2.13.0/embree-2.13.0.x86_64.rpm.tar.gz
tar xzf embree-2.13.0.x86_64.rpm.tar.gz
alien embree-lib-2.13.0-1.x86_64.rpm
Expand All @@ -8,6 +8,6 @@ alien embree-examples-2.13.0-1.x86_64.rpm
dpkg -i embree-lib_2.13.0-2_amd64.deb
dpkg -i embree-devel_2.13.0-2_amd64.deb
dpkg -i embree-examples_2.13.0-2_amd64.deb
export CXX="g++-6" CC="gcc-6"
cmake .. -DEMBREE_INCLUDE_PATH:PATH=/usr/include -DEMBREE_LIBRARY=/usr/lib64/libembree.so
make -j4
#add-apt-repository ppa:ubuntu-toolchain-r/test
#apt-get update
#apt-get install gcc-6 g++-6
Empty file added scripts/osx_normal.sh
Empty file.
File renamed without changes.
Loading

0 comments on commit ac00340

Please sign in to comment.