Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorover0219 <over0219@umn.edu>2020-06-03 03:53:14 +0300
committerover0219 <over0219@umn.edu>2020-06-03 03:53:14 +0300
commit9ba5c8b90aa6245c569f7e66b0cd472beb59b5a5 (patch)
treedf2c36e90a6f5003b6e02e45b0612cf250575983 /extern/softbody/src/admmpd_energy.h
parent2deb6c51778701135a54c05043a123a715cde938 (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.h61
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
+
+
+
+