tadd functions for calculating kinetic grain energy - granular - granular dynam… | |
git clone git://src.adamsgaard.dk/granular | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 6e12b2e9d44b7138f7e8fe80010783ef2bc6f4d5 | |
parent 100fd75afdf351a48124f5058a23aa1a4ac5999d | |
Author: Anders Damsgaard <[email protected]> | |
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(-) | |
--- | |
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); | |
+} | |
+ | |
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 |