summaryrefslogtreecommitdiff
path: root/evaluator/inertia.py
diff options
context:
space:
mode:
Diffstat (limited to 'evaluator/inertia.py')
-rw-r--r--evaluator/inertia.py64
1 files changed, 64 insertions, 0 deletions
diff --git a/evaluator/inertia.py b/evaluator/inertia.py
new file mode 100644
index 0000000..fea728c
--- /dev/null
+++ b/evaluator/inertia.py
@@ -0,0 +1,64 @@
+def get_centroid(aircraft):
+ """Return the coordinates of the centroid."""
+ stringer_area = aircraft.stringer.area
+ cap_area = aircraft.spar.cap_area
+
+ caps_x = [value for spar in aircraft.spar.x for value in spar]
+ caps_z = [value for spar in aircraft.spar.z for value in spar]
+ stringers_x = aircraft.stringer.x
+ stringers_z = aircraft.stringer.z
+
+ denominator = float(
+ len(caps_x) * cap_area + len(stringers_x) * stringer_area)
+
+ centroid_x = float(
+ sum([x * cap_area
+ for x in caps_x]) + sum([x * stringer_area for x in stringers_x]))
+ centroid_x = centroid_x / denominator
+
+ centroid_z = float(
+ sum([z * cap_area
+ for z in caps_z]) + sum([z * stringer_area for z in stringers_z]))
+ centroid_z = centroid_z / denominator
+
+ return (centroid_x, centroid_z)
+
+
+def get_inertia_terms(self):
+ """Obtain all inertia terms."""
+ stringer_area = self.stringer.area
+ cap_area = self.spar.cap_area
+
+ # Adds upper and lower components' coordinates to list
+ x_stringers = self.stringer.x
+ z_stringers = self.stringer.z
+ x_spars = self.spar.x[:][0] + self.spar.x[:][1]
+ z_spars = self.spar.z[:][0] + self.spar.z[:][1]
+ stringer_count = range(len(x_stringers))
+ spar_count = range(len(self.spar.x))
+
+ # I_x is the sum of the contributions of the spar caps and stringers
+ # TODO: replace list indices with dictionary value
+ I_x = sum(
+ [cap_area * (z_spars[i] - self.centroid[1])**2 for i in spar_count])
+ I_x += sum([
+ stringer_area * (z_stringers[i] - self.centroid[1])**2
+ for i in stringer_count
+ ])
+
+ I_z = sum(
+ [cap_area * (x_spars[i] - self.centroid[0])**2 for i in spar_count])
+ I_z += sum([
+ stringer_area * (x_stringers[i] - self.centroid[0])**2
+ for i in stringer_count
+ ])
+
+ I_xz = sum([
+ cap_area * (x_spars[i] - self.centroid[0]) *
+ (z_spars[i] - self.centroid[1]) for i in spar_count
+ ])
+ I_xz += sum([
+ stringer_area * (x_stringers[i] - self.centroid[0]) *
+ (z_stringers[i] - self.centroid[1]) for i in stringer_count
+ ])
+ return (I_x, I_z, I_xz)
Copyright 2019--2024 Marius PETER