tadd more helper functions, complete TY3 integration scheme - 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 a270ef4ab316d4b52745938eb25ed87749b5fe0a
 (DIR) parent 129e0df22ec2470c059710b4b60635192552c0db
 (HTM) Author: Anders Damsgaard <anders.damsgaard@geo.au.dk>
       Date:   Tue, 15 Mar 2016 13:43:44 -0700
       
       add more helper functions, complete TY3 integration scheme
       
       Diffstat:
         M slider.c                            |      12 ++++++++----
         M vector_math.c                       |      45 +++++++++++++++++++++++++++++--
         M vector_math.h                       |      12 +++++++++++-
       
       3 files changed, 62 insertions(+), 7 deletions(-)
       ---
 (DIR) diff --git a/slider.c b/slider.c
       t@@ -8,10 +8,10 @@ void print_slider_position(slider s)
            printf("%f\t%f\t%f\n", s.pos.x, s.pos.y, s.pos.z);
        }
        
       +/* Explicit temporal integration scheme based on three-term Taylor expansion */
        void integrate_kinematics(slider s, Float dt, int iteration)
        {
       -
       -
       +    s.acc = divide_float3_scalar(s.force, s.mass);
        
            Float3 acc0;
            if (iteration == 0) {
       t@@ -30,9 +30,13 @@ void integrate_kinematics(slider s, Float dt, int iteration)
                    s.vel.y*dt + 0.5*s.acc.y*dt*dt + 1./6.*dacc_dt.y*dt*dt*dt,
                    s.vel.z*dt + 0.5*s.acc.z*dt*dt + 1./6.*dacc_dt.z*dt*dt*dt);
        
       -    s.pos = add_float3(s.pos, dpos_dt);
       -    
        
       +    const Float3 dvel_dt = make_float3(
       +            s.acc.x*dt + 0.5*dacc_dt.x*dt*dt,
       +            s.acc.y*dt + 0.5*dacc_dt.y*dt*dt,
       +            s.acc.z*dt + 0.5*dacc_dt.z*dt*dt);
        
       +    s.pos = add_float3(s.pos, dpos_dt);
       +    s.vel = add_float3(s.vel, dvel_dt);
        
        }
 (DIR) diff --git a/vector_math.c b/vector_math.c
       t@@ -1,11 +1,20 @@
        #include "typedefs.h"
        
       +
       +// constructor
        inline Float3 make_float3(Float x, Float y, Float z)
        {
            Float3 v = {.x = x, .y = y, .z = z};
            return v;
        }
        
       +inline Float3 copy_float3(Float3 v)
       +{
       +    return make_float3(v.x, v.y, v.z);
       +}
       +
       +
       +// vector-vector operations
        inline Float3 add_float3(Float3 v1, Float3 v2)
        {
            return make_float3(v1.x + v2.x, v1.y + v2.y, v1.z + v2.z);
       t@@ -26,7 +35,39 @@ inline Float3 divide_float3(Float3 v1, Float3 v2)
            return make_float3(v1.x/v2.x, v1.y/v2.y, v1.z/v2.z);
        }
        
       -inline Float3 copy_float3(Float3 v)
       +
       +// vector-scalar operations
       +inline Float3 add_float3_scalar(Float3 v, Float s)
        {
       -    return make_float3(v.x, v.y, v.z);
       +    return make_float3(v.x + s, v.y + s, v.z + s);
       +}
       +
       +inline Float3 add_scalar_float3(Float s, Float3 v)
       +{
       +    return add_float3_scalar(v, s);
       +}
       +
       +inline Float3 subtract_float3_scalar(Float3 v, Float s)
       +{
       +    return make_float3(v.x - s, v.y - s, v.z - s);
       +}
       +
       +inline Float3 subtract_scalar_float3(Float s, Float3 v)
       +{
       +    return make_float3(s - v.x, s - v.y, s - v.z);
       +}
       +
       +inline Float3 multiply_float3_scalar(Float3 v, Float s)
       +{
       +    return make_float3(v.x*s, v.y*s, v.z*s);
       +}
       +
       +inline Float3 divide_float3_scalar(Float3 v, Float s)
       +{
       +    return make_float3(v.x/s, v.y/s, v.z/s);
       +}
       +
       +inline Float3 divide_scalar_float3(Float s, Float3 v)
       +{
       +    return make_float3(s/v.x, s/v.y, s/v.z);
        }
 (DIR) diff --git a/vector_math.h b/vector_math.h
       t@@ -1,8 +1,18 @@
        #include "typedefs.h"
        
       +// constructor
        Float3 make_float3(Float x, Float y, Float z);
       +Float3 copy_float3(Float3 v);
       +
       +// vector-vector operations
        Float3 add_float3(Float3 v1, Float3 v2);
        Float3 subtract_float3(Float3 v1, Float3 v2);
        Float3 multiply_float3(Float3 v1, Float3 v2);
        Float3 divide_float3(Float3 v1, Float3 v2);
       -Float3 copy_float3(Float3 v);
       +
       +// vector-scalar operations
       +Float3 multiply_float3_scalar(Float3 v, Float s);
       +Float3 divide_float3_scalar(Float3 v, Float s);
       +Float3 divide_scalar_float3(Float s, Float3 v);
       +Float3 add_float3_scalar(Float3 v, Float s)
       +Float3 add_scalar_float3(Float s, Float3 v)