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