tresolve twist on bond - slidergrid - grid of elastic sliders on a frictional surface
(HTM) git clone git://src.adamsgaard.dk/slidergrid
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit bbf7010bcf7ceae41f9d8bf35c2f7d1f1e66ae78
(DIR) parent d852181baa63f618bea35aa6d8d6053763688920
(HTM) Author: Anders Damsgaard Christensen <adc@geo.au.dk>
Date: Mon, 18 Apr 2016 16:06:46 -0700
resolve twist on bond
Diffstat:
M slidergrid/slider.c | 63 ++++++++++++++++++++++++++++---
1 file changed, 57 insertions(+), 6 deletions(-)
---
(DIR) diff --git a/slidergrid/slider.c b/slidergrid/slider.c
t@@ -135,7 +135,7 @@ void update_kinematics(slider* s, Float dt, long int iteration)
// determine time step increment bond-parallel deformation (tension or
// compression)
-void bond_parallel_deformation(slider* s1, const slider s2,
+void bond_tensile_deformation(slider* s1, const slider s2,
const int idx_neighbor, const int iteration)
{
// vector pointing from neighbor (s2) position to this slider position (s1)
t@@ -192,9 +192,8 @@ void bond_parallel_deformation(slider* s1, const slider s2,
}
-// determine time step increment bond-oblique deformation (shear, bending,
-// and/or twist)
-void bond_normal_deformation(slider* s1, const slider s2,
+// determine time step increment bond-shear deformation
+void bond_shear_deformation(slider* s1, const slider s2,
const int idx_neighbor, const int iteration, const Float dt)
{
// vector pointing from neighbor (s2) position to this slider position (s1)
t@@ -287,13 +286,65 @@ void bond_normal_deformation(slider* s1, const slider s2,
#endif
}
+// determine time step increment bond twist deformation
+void bond_twist_deformation(slider* s1, const slider s2,
+ const int idx_neighbor, const int iteration, const Float dt)
+{
+ // vector pointing from neighbor (s2) position to this slider position (s1)
+ const Float3 dist = subtract_float3(s1->pos, s2.pos);
+
+ // length of inter-slider vector
+ const Float dist_norm = norm_float3(dist);
+
+ // unit vector pointing from neighbor (s2) to slider s1
+ const Float3 n = divide_float3_scalar(dist, dist_norm);
+
+ // Get the relative angular velocity
+ const Float3 angvel_rel = subtract_float3(s2.angvel, s1->angvel);
+
+ // Isolate the relative angular velocity component parallel to the bond
+ const Float twist_vel = dot_float3(angvel_rel, n);
+
+ // Twist displacement happening in one time step
+ const Float dtwist = twist_vel*dt;
+
+ // total relative displacement in inter-slider distance
+ if (iteration == 0)
+ s1->neighbor_relative_twist[idx_neighbor] = dtwist;
+ else
+ s1->neighbor_relative_twist[idx_neighbor] += dtwist;
+
+ // total relative displacement in inter-slider distance
+ s1->neighbor_relative_twist_velocity[idx_neighbor] = twist_vel;
+
+#ifdef DEBUG_BOND_DEFORMATION
+ printf("\t------\n"
+ "\ttwist = %f %f %f\n"
+ "\tdtwist = %f %f %f\n"
+ "\ttwist_vel = %f %f %f\n"
+ "\t------\n"
+ ,
+ twist.x,
+ twist.y,
+ twist.z,
+ dtwist.x,
+ dtwist.y,
+ dtwist.z,
+ twist_vel.x,
+ twist_vel.y,
+ twist_vel.z);
+#endif
+}
+
+
// Find the bond deformation
void bond_deformation(slider* s1, const slider s2,
const int idx_neighbor, const int iteration, const Float dt)
{
- bond_parallel_deformation(s1, s2, idx_neighbor, iteration);
- bond_normal_deformation(s1, s2, idx_neighbor, iteration, dt);
+ bond_tensile_deformation(s1, s2, idx_neighbor, iteration);
+ bond_shear_deformation(s1, s2, idx_neighbor, iteration, dt);
+ bond_twist_deformation(s1, s2, idx_neighbor, iteration, dt);
}