twrite all kinematic values to text file - slidergrid - grid of elastic sliders… | |
git clone git://src.adamsgaard.dk/slidergrid | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 18aacc6e97a8d8b41b307dbd97051738a3218759 | |
parent b315e491a0bfd7a53ef281f41933220f8de8e0c2 | |
Author: Anders Damsgaard <[email protected]> | |
Date: Wed, 30 Mar 2016 13:37:43 -0700 | |
write all kinematic values to text file | |
Diffstat: | |
M slidergrid/simulation.c | 29 +++++++++++++++++++++++++---- | |
M slidergrid/simulation.h | 4 ++-- | |
M slidergrid/slider.c | 21 +++++++++++++++------ | |
3 files changed, 42 insertions(+), 12 deletions(-) | |
--- | |
diff --git a/slidergrid/simulation.c b/slidergrid/simulation.c | |
t@@ -102,7 +102,7 @@ Float find_time_step(const slider* sliders, const int N, c… | |
return safety/sqrt(largest_stiffness/smallest_mass); | |
} | |
-int save_slider_positions_to_file( | |
+int save_slider_data_to_file( | |
const slider* sliders, | |
const int N, | |
const char* filename) | |
t@@ -115,8 +115,29 @@ int save_slider_positions_to_file( | |
int i; | |
for (i=0; i<N; i++) | |
- fprintf(f, "%f\t%f\t%f\n", | |
- sliders[i].pos.x, sliders[i].pos.y, sliders[i].pos.z); | |
+ fprintf(f, | |
+ "%f\t%f\t%f\t" // pos | |
+ "%f\t%f\t%f\t" // vel | |
+ "%f\t%f\t%f\t" // acc | |
+ "%f\t%f\t%f\t" // force | |
+ "%f\t%f\t%f\t" // angpos | |
+ "%f\t%f\t%f\t" // angvel | |
+ "%f\t%f\t%f\t" // angacc | |
+ "%f\t%f\t%f\t" // torque | |
+ "%f\t" // mass | |
+ "%f" // moment of inertia | |
+ "\n", | |
+ sliders[i].pos.x, sliders[i].pos.y, sliders[i].pos.z, | |
+ sliders[i].vel.x, sliders[i].vel.y, sliders[i].vel.z, | |
+ sliders[i].acc.x, sliders[i].acc.y, sliders[i].acc.z, | |
+ sliders[i].force.x, sliders[i].force.y, sliders[i].force.z, | |
+ sliders[i].angpos.x, sliders[i].angpos.y, sliders[i].angpos.z, | |
+ sliders[i].angvel.x, sliders[i].angvel.y, sliders[i].angvel.z, | |
+ sliders[i].angacc.x, sliders[i].angacc.y, sliders[i].angacc.z, | |
+ sliders[i].torque.x, sliders[i].torque.y, sliders[i].torque.z, | |
+ sliders[i].mass, | |
+ sliders[i].moment_of_inertia | |
+ ); | |
fclose(f); | |
return 0; | |
t@@ -307,7 +328,7 @@ int write_simulation_output(simulation* sim, char* output_… | |
// slider parameters | |
sprintf(filename, "%s/%s.sliders.%06d.txt", | |
output_folder, sim->id, sim->file_number); | |
- if (save_slider_positions_to_file(sim->sliders, sim->N, filename)) { | |
+ if (save_slider_data_to_file(sim->sliders, sim->N, filename)) { | |
fprintf(stderr, "\nFatal error: Could not save to output file " | |
"'%s'.\n", filename); | |
return 1; | |
diff --git a/slidergrid/simulation.h b/slidergrid/simulation.h | |
t@@ -26,8 +26,8 @@ Float find_time_step(const slider* sliders, const int N, con… | |
// check if simulation parameters have reasonable values | |
int check_simulation_values(const simulation* sim); | |
-// save slider positions to a file on the disk | |
-int save_slider_positions_to_file( | |
+// save slider information to a file on the disk | |
+int save_slider_data_to_file( | |
const slider* sliders, | |
const int N, | |
const char* filename); | |
diff --git a/slidergrid/slider.c b/slidergrid/slider.c | |
t@@ -127,6 +127,9 @@ void update_kinematics(slider* s, Float dt, long int itera… | |
s->angvel = add_float3(s->angvel, dangvel_dt); | |
} | |
+ | |
+// determine time step increment bond-parallel deformation (tension or | |
+// compression) | |
void bond_parallel_deformation(slider* s1, const slider s2, | |
const int idx_neighbor, const int iteration) | |
{ | |
t@@ -151,8 +154,8 @@ void bond_parallel_deformation(slider* s1, const slider s2, | |
// determine projected future displacement | |
const Float3 dist_future = subtract_float3(s1->pos_future, s2.pos_future); | |
- // increment in inter-slider distance, divide by two to get displacement | |
- // over 1 time step | |
+ // increment in inter-slider distance with central differences, divide by | |
+ // two to get displacement over 1 time step | |
const Float3 ddist = divide_float3_scalar( | |
subtract_float3(dist_future, dist0), 2.0); | |
t@@ -173,8 +176,11 @@ void bond_parallel_deformation(slider* s1, const slider s… | |
multiply_float3_scalar(n, vel_n); | |
} | |
+ | |
+// determine time step increment bond-oblique deformation (shear, bending, | |
+// and/or twist) | |
void bond_normal_deformation(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) | |
const Float3 dist = subtract_float3(s1->pos, s2.pos); | |
t@@ -217,14 +223,17 @@ void bond_normal_deformation(slider* s1, const slider s2, | |
multiply_float3(n, tangential_displacement0_uncor))); | |
// project future tangential displacement | |
- | |
+ const Float3 dtangential_displacement = multiply_float3_scalar(vel_t, dt); | |
+ const Float3 tangential_displacement_future = | |
+ add_float3(tangential_displacement0, dtangential_displacement); | |
// determine dtangential_displacement by central differences | |
- // use dtangential_displacement for elastic response | |
+ // use dtangential_displacement for elastic response on shear motion | |
+ | |
+ // use vel_t for viscous response on shear motion | |
- // use vel_t for viscous response | |
} | |