tadd functions for calculating kinetic grain energy - granular - granular dynamics simulation
 (HTM) git clone git://src.adamsgaard.dk/granular
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 6e12b2e9d44b7138f7e8fe80010783ef2bc6f4d5
 (DIR) parent 100fd75afdf351a48124f5058a23aa1a4ac5999d
 (HTM) Author: Anders Damsgaard <anders@adamsgaard.dk>
       Date:   Thu, 18 Mar 2021 08:04:59 +0100
       
       add functions for calculating kinetic grain energy
       
       Diffstat:
         M grain.c                             |      43 ++++++++++++++++++++++++++++++
         M grain.h                             |       5 +++++
       
       2 files changed, 48 insertions(+), 0 deletions(-)
       ---
 (DIR) diff --git a/grain.c b/grain.c
       t@@ -3,6 +3,7 @@
        #include "granular.h"
        #include "util.h"
        #include "grain.h"
       +#include "arrays.h"
        
        void
        grain_defaults(struct grain *g)
       t@@ -160,3 +161,45 @@ grain_mass(const struct grain *g)
        {
                return grain_volume(g) * g->density;
        }
       +
       +double
       +grain_moment_of_inertia(const struct grain *g)
       +{
       +        return 2.0 / 5.0 * grain_mass(g) * pow(g->radius, 2);
       +}
       +
       +void
       +zero_grain_kinematics(struct grain *g)
       +{
       +        size_t i;
       +
       +        for (i = 0; i < ND; i++) {
       +                g->vel[i] = 0.0;
       +                g->acc[i] = 0.0;
       +                g->force[i] = 0.0;
       +                g->angvel[i] = 0.0;
       +                g->angacc[i] = 0.0;
       +                g->torque[i] = 0.0;
       +                g->disp[i] = 0.0;
       +        }
       +}
       +
       +double
       +grain_translational_kinetic_energy(const struct grain *g)
       +{
       +        return 0.5 * grain_mass(g) * euclidean_norm(g->vel, ND);
       +}
       +
       +double
       +grain_rotational_kinetic_energy(const struct grain *g)
       +{
       +        return 0.5 * grain_moment_of_inertia(g) * euclidean_norm(g->angvel, ND);
       +}
       +
       +double
       +grain_kinetic_energy(const struct grain *g)
       +{
       +        return grain_translational_kinetic_energy(g) +
       +                grain_rotational_kinetic_energy(g);
       +}
       +
 (DIR) diff --git a/grain.h b/grain.h
       t@@ -38,5 +38,10 @@ void print_grain(FILE *stream, const struct grain *g);
        int check_grain_values(const struct grain *g);
        double grain_volume(const struct grain *g);
        double grain_mass(const struct grain *g);
       +double grain_moment_of_inertia(const struct grain *g);
       +void zero_grain_kinematics(struct grain *g);
       +double grain_translational_kinetic_energy(const struct grain *g);
       +double grain_rotational_kinetic_energy(const struct grain *g);
       +double grain_kinetic_energy(const struct grain *g);
        
        #endif