twrite all kinematic values to text file - 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 18aacc6e97a8d8b41b307dbd97051738a3218759
(DIR) parent b315e491a0bfd7a53ef281f41933220f8de8e0c2
(HTM) Author: Anders Damsgaard <anders.damsgaard@geo.au.dk>
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(-)
---
(DIR) 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, const Float safety)
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_folder)
// 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;
(DIR) 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, const Float safety);
// 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);
(DIR) diff --git a/slidergrid/slider.c b/slidergrid/slider.c
t@@ -127,6 +127,9 @@ void update_kinematics(slider* s, Float dt, long int iteration)
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 s2,
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
}