diff options
author | over0219 <over0219@umn.edu> | 2020-06-03 03:53:14 +0300 |
---|---|---|
committer | over0219 <over0219@umn.edu> | 2020-06-03 03:53:14 +0300 |
commit | 9ba5c8b90aa6245c569f7e66b0cd472beb59b5a5 (patch) | |
tree | df2c36e90a6f5003b6e02e45b0612cf250575983 /extern/softbody/src/admmpd_energy.h | |
parent | 2deb6c51778701135a54c05043a123a715cde938 (diff) |
first commit. interfaced to very basic admmpd solver, but requires restart to begin sim as caching not working for velocity. lattice is simply a packed 5-tet cube around mesh.
Diffstat (limited to 'extern/softbody/src/admmpd_energy.h')
-rw-r--r-- | extern/softbody/src/admmpd_energy.h | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/extern/softbody/src/admmpd_energy.h b/extern/softbody/src/admmpd_energy.h new file mode 100644 index 00000000000..4245c9cff9c --- /dev/null +++ b/extern/softbody/src/admmpd_energy.h @@ -0,0 +1,61 @@ + + + +#ifndef _ADMMPD_ENERGY_H +#define _ADMMPD_ENERGY_H 1 + +#include <Eigen/Sparse> +#include <Eigen/Geometry> +#include <vector> + +namespace admmpd { + +class Lame { +public: + int m_model; + double m_mu; + double m_lambda; + double m_bulk_mod; + void set_from_youngs_poisson(double youngs, double poisson); + Lame(); +}; + +class EnergyTerm { +public: + + void signed_svd( + const Eigen::Matrix<double,3,3> &A, + Eigen::Matrix<double,3,3> &U, + Eigen::Matrix<double,3,1> &S, + Eigen::Matrix<double,3,3> &V); + + // Updates the z and u variables for an element energy. + void update( + int index, + const Lame &lame, + double rest_volume, + double weight, + const Eigen::MatrixXd *x, + const Eigen::MatrixXd *Dx, + Eigen::MatrixXd *z, + Eigen::MatrixXd *u); + + // Initializes tet energy, returns num rows for D + int init_tet( + int index, + const Lame &lame, + const Eigen::RowVector4i &prim, + const Eigen::MatrixXd *x, + double &volume, + double &weight, + std::vector< Eigen::Triplet<double> > &triplets); + +}; + +} // end namespace admmpd + +#endif // _ADMMPD_ENERGY_H + + + + |