1
1
from vector3 import *
2
2
3
3
def SymplecticEuler (bodies , vessels , surface_points , maneuvers , atmospheric_drags , radiation_pressures , sim_time , delta_t , maneuver_auto_dt ):
4
- vessel_accels = []
5
- body_accels = []
6
-
7
4
# update physics
8
5
for rp in radiation_pressures :
9
6
rp .update_occultation (bodies )
@@ -54,6 +51,15 @@ def SymplecticEuler(bodies, vessels, surface_points, maneuvers, atmospheric_drag
54
51
sp .update_state_vectors (delta_t )
55
52
56
53
def VelocityVerlet (bodies , vessels , surface_points , maneuvers , atmospheric_drags , radiation_pressures , sim_time , delta_t , maneuver_auto_dt ):
54
+
55
+ # update masses and occultation calculations
56
+ for ad in atmospheric_drags :
57
+ ad .update_mass (maneuvers , sim_time , delta_t )
58
+
59
+ for rp in radiation_pressures :
60
+ rp .update_occultation (bodies )
61
+ rp .update_mass (maneuvers , sim_time , delta_t )
62
+
57
63
# - - - FIRST ACCELERATIONS - - -
58
64
vessel_accels_1 = [vec3 (0 , 0 , 0 )] * len (vessels )
59
65
body_accels_1 = [vec3 (0 , 0 , 0 )] * len (bodies )
@@ -73,21 +79,24 @@ def VelocityVerlet(bodies, vessels, surface_points, maneuvers, atmospheric_drags
73
79
74
80
# calculate vessel accelerations due to maneuvers
75
81
for m in maneuvers :
76
- v_idx = vessels .index (m .vessel )
77
- accel_vec = m .get_accel (sim_time , delta_t )
78
- vessel_accels_1 [v_idx ] = vessel_accels_1 [v_idx ] + accel_vec
82
+ if m .vessel in vessels :
83
+ v_idx = vessels .index (m .vessel )
84
+ accel_vec = m .get_accel (sim_time , delta_t )
85
+ vessel_accels_1 [v_idx ] = vessel_accels_1 [v_idx ] + accel_vec
79
86
80
87
# calculate vessel accelerations due to atmospheric drag
81
88
for ad in atmospheric_drags :
82
- v_idx = vessels .index (ad .vessel )
83
- accel_vec = ad .calc_accel ()
84
- vessel_accels_1 [v_idx ] = vessel_accels_1 [v_idx ] + accel_vec
89
+ if ad .vessel in vessels :
90
+ v_idx = vessels .index (ad .vessel )
91
+ accel_vec = ad .calc_accel ()
92
+ vessel_accels_1 [v_idx ] = vessel_accels_1 [v_idx ] + accel_vec
85
93
86
94
# calculate vessel accelerations due to radiation pressure
87
95
for rp in radiation_pressures :
88
- v_idx = vessels .index (rp .vessel )
89
- accel_vec = rp .calc_accel ()
90
- vessel_accels_1 [v_idx ] = vessel_accels_1 [v_idx ] + accel_vec
96
+ if rp .vessel in vessels :
97
+ v_idx = vessels .index (rp .vessel )
98
+ accel_vec = rp .calc_accel ()
99
+ vessel_accels_1 [v_idx ] = vessel_accels_1 [v_idx ] + accel_vec
91
100
92
101
# - - - POSITION UPDATE - - -
93
102
for b in bodies :
@@ -117,21 +126,24 @@ def VelocityVerlet(bodies, vessels, surface_points, maneuvers, atmospheric_drags
117
126
118
127
# calculate vessel accelerations due to maneuvers
119
128
for m in maneuvers :
120
- v_idx = vessels .index (m .vessel )
121
- accel_vec = m .get_accel ((sim_time + delta_t ), delta_t )
122
- vessel_accels_2 [v_idx ] = vessel_accels_2 [v_idx ] + accel_vec
129
+ if m .vessel in vessels :
130
+ v_idx = vessels .index (m .vessel )
131
+ accel_vec = m .get_accel ((sim_time + delta_t ), delta_t )
132
+ vessel_accels_2 [v_idx ] = vessel_accels_2 [v_idx ] + accel_vec
123
133
124
134
# calculate vessel accelerations due to atmospheric drag
125
135
for ad in atmospheric_drags :
126
- v_idx = vessels .index (ad .vessel )
127
- accel_vec = ad .calc_accel ()
128
- vessel_accels_2 [v_idx ] = vessel_accels_2 [v_idx ] + accel_vec
136
+ if ad .vessels in vessels :
137
+ v_idx = vessels .index (ad .vessel )
138
+ accel_vec = ad .calc_accel ()
139
+ vessel_accels_2 [v_idx ] = vessel_accels_2 [v_idx ] + accel_vec
129
140
130
141
# calculate vessel accelerations due to radiation pressure
131
142
for rp in radiation_pressures :
132
- v_idx = vessels .index (rp .vessel )
133
- accel_vec = rp .calc_accel ()
134
- vessel_accels_2 [v_idx ] = vessel_accels_2 [v_idx ] + accel_vec
143
+ if rp .vessel in vessels :
144
+ v_idx = vessels .index (rp .vessel )
145
+ accel_vec = rp .calc_accel ()
146
+ vessel_accels_2 [v_idx ] = vessel_accels_2 [v_idx ] + accel_vec
135
147
136
148
# - - - VELOCITY UPDATE - - -
137
149
for b in bodies :
0 commit comments