summaryrefslogtreecommitdiff
path: root/aircraftstudio/evaluator/inertia.py
blob: f0477665b2e8feff721b69b0c338f2c619cff708 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
def get_centroid(aircraft):
    """Return the coordinates of the centroid."""
    # stringer_area = aircraft.wing.stringers.area
    # cap_area = aircraft.wing.spars.cap_area

    # TODO: Fix this
    # caps_x = [value for spar in aircraft.wing.spars.x for value in spar]
    # caps_z = [value for spar in aircraft.wing.spars.z for value in spar]
    # stringers_x = aircraft.wing.stringers.x
    # stringers_z = aircraft.wing.stringers.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)
    return (200, 420)


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