Introduction
Introduction Statistics Contact Development Disclaimer Help
tfind and save projected future slider position - slidergrid - grid of elastic …
git clone git://src.adamsgaard.dk/slidergrid
Log
Files
Refs
README
LICENSE
---
commit 9361f609b8753a5ee25000d7ff5269592b8f82ec
parent ed285da822b8be868f38c8cc1419a2d5fa783592
Author: Anders Damsgaard <[email protected]>
Date: Tue, 22 Mar 2016 14:31:48 -0700
find and save projected future slider position
Diffstat:
M Makefile | 2 +-
M slidergrid/main.c | 11 +++++++----
M slidergrid/slider.c | 61 +++++++++++++++++++++++++----…
M slidergrid/slider.h | 3 +++
4 files changed, 61 insertions(+), 16 deletions(-)
---
diff --git a/Makefile b/Makefile
t@@ -13,7 +13,7 @@ BIN=test
default: run-test
run-test: test
- ./$<
+ ./$< --verbose
@#python postprocessing.py --plot-sliders $<-output
@#rsync -rav test-output /var/www/html/
diff --git a/slidergrid/main.c b/slidergrid/main.c
t@@ -126,10 +126,13 @@ int main(int argc, char** argv)
sim.time <= sim.time_end;
sim.time += sim.dt) {
- // loop over all sliders
+ for (i=0; i<sim.N; i++)
+ project_slider_position(&sim.sliders[i], sim.dt, sim.iteration);
+
+
+ // resolve slider-to-slider interaction
for (i=0; i<sim.N; i++) {
- // resolve slider-to-slider interaction
slider_neighbor_interaction(
&sim.sliders[i],
sim.sliders,
t@@ -151,10 +154,10 @@ int main(int argc, char** argv)
printf("%d ", sim.sliders[i].neighbors[j]);
puts("\n");
#endif
+ }
- // update slider kinematics
+ for (i=0; i<sim.N; i++) {
update_kinematics(&sim.sliders[i], sim.dt, sim.iteration);
- }
if (time_since_file >= sim.file_interval) {
if (write_simulation_output(&sim, output_folder)) {
diff --git a/slidergrid/slider.c b/slidergrid/slider.c
t@@ -19,8 +19,17 @@ slider create_slider()
void initialize_slider_values(slider* s)
{
+ s->pos_future = zeroes_float3();
+ s->vel = zeroes_float3();
+ s->acc = zeroes_float3();
+ s->angpos_future = zeroes_float3();
+ s->angpos = zeroes_float3();
+ s->angvel = zeroes_float3();
+ s->angacc = zeroes_float3();
+
s->force = zeroes_float3();
s->torque = zeroes_float3();
+
s->mass = 0.0;
s->moment_of_inertia = 0.0;
s->bond_parallel_stiffness = 0.0;
t@@ -37,6 +46,23 @@ void initialize_slider_values(slider* s)
}
+
+// find change in inter-slider distance from old position and projected new
+// position, based on current kinematics and explicit temporal integration usi…
+// TY2 expansion
+void project_slider_position(slider* s, Float dt, long int iteration)
+{
+ s->pos_future = make_float3(
+ s->pos.x + s->vel.x*dt + 0.5*s->acc.x*dt*dt,
+ s->pos.y + s->vel.y*dt + 0.5*s->acc.y*dt*dt,
+ s->pos.z + s->vel.z*dt + 0.5*s->acc.z*dt*dt);
+
+ s->angpos_future = make_float3(
+ s->angpos.x + s->angvel.x*dt + 0.5*s->angacc.x*dt*dt,
+ s->angpos.y + s->angvel.y*dt + 0.5*s->angacc.y*dt*dt,
+ s->angpos.z + s->angvel.z*dt + 0.5*s->angacc.z*dt*dt);
+}
+
/* Explicit temporal integration scheme based on three-term Taylor expansion.
* Truncation error O(dt^4) for positions, O(dt^3) for velocities. Accelerati…
* change is approximated by backwards differences. */
t@@ -92,7 +118,7 @@ void update_kinematics(slider* s, Float dt, long int iterat…
// Find the relative displacement and velocity between two sliders
void slider_displacement(slider* s1, const slider s2,
- const int idx_neighbor, const int iteration)
+ const int idx_neighbor, const int iteration, const Float dt)
{
// vector pointing from neighbor (s2) position to this slider position (s1)
t@@ -124,14 +150,17 @@ void slider_displacement(slider* s1, const slider s2,
//subtract_float3(vel, multiply_float3_scalar(n, dot_float3(n, vel)));
// read previous inter-slider distance vector
- Float3 dist0;
- if (iteration == 0)
- dist0 = zeroes_float3();
- else
- dist0 = s1->neighbor_distance[idx_neighbor];
+ const Float3 dist0 = s1->neighbor_distance[idx_neighbor];
+
+ const Float3 dist_future = subtract_float3(s1_pos_future, s2_pos_future);
- // increment in inter-slider distance
- const Float3 ddist = subtract_float3(dist, dist0);
+ // increment in inter-slider distance, divide by two to get displacement
+ // over 1 time step
+ Float3 ddist = divide_float3_scalar(
+ subtract_float3(dist_future, dist0), 2.0);
+
+ //if (iteration == 0)
+ //ddist = zeroes_float3();
// save current inter-slider distance
s1->neighbor_distance[idx_neighbor] = dist;
t@@ -141,7 +170,8 @@ void slider_displacement(slider* s1, const slider s2,
s1->neighbor_relative_distance_displacement[idx_neighbor] = ddist;
else
s1->neighbor_relative_distance_displacement[idx_neighbor] =
- add_float3(s1->neighbor_relative_distance_displacement[idx_neighbo…
+ add_float3(
+ s1->neighbor_relative_distance_displacement[idx_neighbor],
ddist);
// total relative displacement in inter-slider distance
t@@ -203,7 +233,8 @@ void slider_neighbor_interaction(
slider* s,
const slider* sliders,
const int N,
- const int iteration)
+ const int iteration,
+ const Float dt)
{
int idx_neighbor;
for (idx_neighbor=0; idx_neighbor<MAX_NEIGHBORS; idx_neighbor++) {
t@@ -216,10 +247,18 @@ void slider_neighbor_interaction(
slider_displacement(
s, sliders[s->neighbors[idx_neighbor]],
- idx_neighbor, iteration);
+ idx_neighbor, iteration, dt);
+ printf("- %d: rel_disp = %f %f %f\n",
+ idx_neighbor,
+ s->neighbor_relative_distance_displacement[idx_neighbor].x,
+ s->neighbor_relative_distance_displacement[idx_neighbor].y,
+ s->neighbor_relative_distance_displacement[idx_neighbor].z
+ );
slider_interaction(
s, sliders[s->neighbors[idx_neighbor]], idx_neighbor);
+ printf("s.force = %f %f %f\n",
+ s->force.x, s->force.y, s->force.z);
}
}
}
diff --git a/slidergrid/slider.h b/slidergrid/slider.h
t@@ -8,11 +8,13 @@
typedef struct {
// linear position, velocity, acceleration of this slider
+ Float3 pos_future; // [m]
Float3 pos; // [m]
Float3 vel; // [m/s]
Float3 acc; // [m/(s*s)]
// angular position, velocity, acceleration of this slider
+ Float3 angpos_future; // [rad]
Float3 angpos; // [rad]
Float3 angvel; // [rad/s]
Float3 angacc; // [rad/(s*s)]
t@@ -50,6 +52,7 @@ void print_slider_position(slider s);
void initialize_slider_values(slider* s);
//void check_slider_values(slider s);
+void project_slider_position(slider* s, Float dt, long int iteration);
void update_kinematics(slider* s, Float dt, long int iteration);
void slider_neighbor_interaction(
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.