Section 5.2 - Mars SmallSat Constellation - Approach Trajectories

[1]:
import numpy as np
from astropy.time import Time
from AMAT.arrival import Arrival
[2]:
arrival = Arrival()
arrival.set_vinf_vec_from_lambert_arc(lastFlybyPlanet='EARTH',
                                      arrivalPlanet='MARS',
                                      lastFlybyDate=Time("2020-07-30 00:00:00", scale='tdb'),
                                      arrivalDate=Time("2021-02-18 00:00:00", scale='tdb'),
                                      ephem_file='../../../spice-data/de432s.bsp')
[3]:
print("Arrival v_inf vector, ICRF: "+str(arrival.v_inf_vec)+" km/s")
print("Arrival VINF MAG: "+str(round(arrival.v_inf_mag, 2))+" km/s.")
print("Arrival Declination: "+str(round(arrival.declination, 2))+" deg.")
Arrival v_inf vector, ICRF: [ 2.23930482  1.20086474 -0.73683367] km/s
Arrival VINF MAG: 2.65 km/s.
Arrival Declination: -1.65 deg.
[4]:
import numpy as np
from AMAT.approach import Approach
[5]:
approach1 = Approach("MARS", v_inf_vec_icrf_kms=arrival.v_inf_vec,
                            rp=(3389.5+52)*1e3, psi=1.5*np.pi,
                            is_entrySystem=True, h_EI=120e3)

approach2 = Approach("MARS", v_inf_vec_icrf_kms=arrival.v_inf_vec,
                            rp=(3389.5+52)*1e3, psi=1.375*np.pi,
                            is_entrySystem=True, h_EI=120e3)

approach3 = Approach("MARS", v_inf_vec_icrf_kms=arrival.v_inf_vec,
                            rp=(3389.5+52)*1e3, psi=1.25*np.pi,
                            is_entrySystem=True, h_EI=120e3)

approach4 = Approach("MARS", v_inf_vec_icrf_kms=arrival.v_inf_vec,
                            rp=(3389.5+52)*1e3, psi=1.125*np.pi,
                            is_entrySystem=True, h_EI=120e3)

approach5 = Approach("MARS", v_inf_vec_icrf_kms=arrival.v_inf_vec,
                            rp=(3389.5+52)*1e3, psi=1.0*np.pi,
                            is_entrySystem=True, h_EI=120e3)


space = Approach("MARS",
                    v_inf_vec_icrf_kms=arrival.v_inf_vec,
                    rp=(3389.5+250)*1e3, psi=np.pi)

print('Small satellite #1')
print("Entry altitude, km: "+ str(approach1.h_EI/1e3))
print("Entry longitude BI, deg: "+ str(round(approach1.longitude_entry_bi*180/np.pi, 2)))
print("Entry latitude BI, deg: "+ str(round(approach1.latitude_entry_bi*180/np.pi, 2)))
print("Atm. relative entry speed, km/s: "+str(round(approach1.v_entry_atm_mag/1e3, 4)))
print("Atm. relative heading angle, deg: "+str(round(approach1.heading_entry_atm*180/np.pi, 4)))
print("Atm. relative EFPA, deg: "+str(round(approach1.gamma_entry_atm*180/np.pi, 4)))
print("Inclination, deg: "+str(approach1.i*180/np.pi))
print('----------------------------------------------------')
print('Small satellite #2')
print("Entry altitude, km: "+ str(approach2.h_EI/1e3))
print("Entry longitude BI, deg: "+ str(round(approach2.longitude_entry_bi*180/np.pi, 2)))
print("Entry latitude BI, deg: "+ str(round(approach2.latitude_entry_bi*180/np.pi, 2)))
print("Atm. relative entry speed, km/s: "+str(round(approach2.v_entry_atm_mag/1e3, 4)))
print("Atm. relative heading angle, deg: "+str(round(approach2.heading_entry_atm*180/np.pi, 4)))
print("Atm. relative EFPA, deg: "+str(round(approach2.gamma_entry_atm*180/np.pi, 4)))
print("Inclination, deg: "+str(approach2.i*180/np.pi))
print('----------------------------------------------------')
print('Small satellite #3')
print("Entry altitude, km: "+ str(approach3.h_EI/1e3))
print("Entry longitude BI, deg: "+ str(round(approach3.longitude_entry_bi*180/np.pi, 2)))
print("Entry latitude BI, deg: "+ str(round(approach3.latitude_entry_bi*180/np.pi, 2)))
print("Atm. relative entry speed, km/s: "+str(round(approach3.v_entry_atm_mag/1e3, 4)))
print("Atm. relative heading angle, deg: "+str(round(approach3.heading_entry_atm*180/np.pi, 4)))
print("Atm. relative EFPA, deg: "+str(round(approach3.gamma_entry_atm*180/np.pi, 4)))
print("Inclination, deg: "+str(approach3.i*180/np.pi))
print('----------------------------------------------------')
print('Small satellite #4')
print("Entry altitude, km: "+ str(approach4.h_EI/1e3))
print("Entry longitude BI, deg: "+ str(round(approach4.longitude_entry_bi*180/np.pi, 2)))
print("Entry latitude BI, deg: "+ str(round(approach4.latitude_entry_bi*180/np.pi, 2)))
print("Atm. relative entry speed, km/s: "+str(round(approach4.v_entry_atm_mag/1e3, 4)))
print("Atm. relative heading angle, deg: "+str(round(approach4.heading_entry_atm*180/np.pi, 4)))
print("Atm. relative EFPA, deg: "+str(round(approach4.gamma_entry_atm*180/np.pi, 4)))
print("Inclination, deg: "+str(approach4.i*180/np.pi))
print('----------------------------------------------------')
print('Small satellite #5')
print("Entry altitude, km: "+ str(approach5.h_EI/1e3))
print("Entry longitude BI, deg: "+ str(round(approach5.longitude_entry_bi*180/np.pi, 2)))
print("Entry latitude BI, deg: "+ str(round(approach5.latitude_entry_bi*180/np.pi, 2)))
print("Atm. relative entry speed, km/s: "+str(round(approach5.v_entry_atm_mag/1e3, 4)))
print("Atm. relative heading angle, deg: "+str(round(approach5.heading_entry_atm*180/np.pi, 4)))
print("Atm. relative EFPA, deg: "+str(round(approach5.gamma_entry_atm*180/np.pi, 4)))
print("Inclination, deg: "+str(approach5.i*180/np.pi))
print('----------------------------------------------------')
print('Host orbiter')
print("RP, km: "+str(space.rp*1e-3))
print("Inclination, deg: "+str(space.i*180/np.pi))
Small satellite #1
Entry altitude, km: 120.0
Entry longitude BI, deg: -89.76
Entry latitude BI, deg: -0.71
Atm. relative entry speed, km/s: 5.3586
Atm. relative heading angle, deg: 9.3778
Atm. relative EFPA, deg: -9.2475
Inclination, deg: 1.6533397822244609
----------------------------------------------------
Small satellite #2
Entry altitude, km: 120.0
Entry longitude BI, deg: -87.42
Entry latitude BI, deg: 19.48
Atm. relative entry speed, km/s: 5.3775
Atm. relative heading angle, deg: 15.1773
Atm. relative EFPA, deg: -9.2147
Inclination, deg: 22.557516345832322
----------------------------------------------------
Small satellite #3
Entry altitude, km: 120.0
Entry longitude BI, deg: -80.17
Entry latitude BI, deg: 38.8
Atm. relative entry speed, km/s: 5.4311
Atm. relative heading angle, deg: 27.2459
Atm. relative EFPA, deg: -9.1229
Inclination, deg: 45.02384795300673
----------------------------------------------------
Small satellite #4
Entry altitude, km: 120.0
Entry longitude BI, deg: -62.53
Entry latitude BI, deg: 55.34
Atm. relative entry speed, km/s: 5.5111
Atm. relative heading angle, deg: 49.4493
Atm. relative EFPA, deg: -8.9893
Inclination, deg: 67.50987984826553
----------------------------------------------------
Small satellite #5
Entry altitude, km: 120.0
Entry longitude BI, deg: -25.06
Entry latitude BI, deg: 63.04
Atm. relative entry speed, km/s: 5.6053
Atm. relative heading angle, deg: 91.1531
Atm. relative EFPA, deg: -8.8371
Inclination, deg: 90.00000000000001
----------------------------------------------------
Host orbiter
RP, km: 3639.5
Inclination, deg: 90.00000000000001

Run the following code to generate the approach trajectory plot. The code is also available in the file section-5-2-mars-smallsat-constellation-approach-viz.py.

from mayavi import mlab
import numpy as np
from tvtk.tools import visual
from AMAT.approach import Approach
from astropy.time import Time
from AMAT.arrival import Arrival
from AMAT.vehicle import Vehicle

def Arrow_From_A_to_B(x1, y1, z1, x2, y2, z2):
    ar1 = visual.arrow(x=x1, y=y1, z=z1)
    ar1.length_cone = 0.4

    arrow_length = np.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2 + (z2 - z1) ** 2)
    ar1.actor.scale = [arrow_length, arrow_length, arrow_length]
    ar1.pos = ar1.pos / arrow_length
    ar1.axis = [x2 - x1, y2 - y1, z2 - z1]
    return ar1

arrival = Arrival()
arrival.set_vinf_vec_from_lambert_arc(lastFlybyPlanet='EARTH',
                                      arrivalPlanet='MARS',
                                      lastFlybyDate=Time("2020-07-30 00:00:00", scale='tdb'),
                                      arrivalDate=Time("2021-02-18 00:00:00", scale='tdb'),
                                      ephem_file='../../../spice-data/de432s.bsp')



probe1 = Approach("MARS", v_inf_vec_icrf_kms=arrival.v_inf_vec,
                            rp=(3389.5+52)*1e3, psi=1.5*np.pi,
                            is_entrySystem=True, h_EI=120e3)

probe2 = Approach("MARS", v_inf_vec_icrf_kms=arrival.v_inf_vec,
                            rp=(3389.5+52)*1e3, psi=1.375*np.pi,
                            is_entrySystem=True, h_EI=120e3)

probe3 = Approach("MARS", v_inf_vec_icrf_kms=arrival.v_inf_vec,
                            rp=(3389.5+52)*1e3, psi=1.25*np.pi,
                            is_entrySystem=True, h_EI=120e3)

probe4 = Approach("MARS", v_inf_vec_icrf_kms=arrival.v_inf_vec,
                            rp=(3389.5+52)*1e3, psi=1.125*np.pi,
                            is_entrySystem=True, h_EI=120e3)

probe5 = Approach("MARS", v_inf_vec_icrf_kms=arrival.v_inf_vec,
                            rp=(3389.5+52)*1e3, psi=1.0*np.pi,
                            is_entrySystem=True, h_EI=120e3)


space = Approach("MARS",
                    v_inf_vec_icrf_kms=arrival.v_inf_vec,
                    rp=(3389.5+250)*1e3, psi=np.pi)



theta_star_arr_space = np.linspace(-2.00, 0.0, 101)
pos_vec_bi_arr_space = space.pos_vec_bi(theta_star_arr_space)/3389.5e3

x_arr_space = pos_vec_bi_arr_space[0][:]
y_arr_space = pos_vec_bi_arr_space[1][:]
z_arr_space = pos_vec_bi_arr_space[2][:]

north_pole_bi_vec = probe1.ICRF_to_BI(arrival.north_pole)

theta_star_arr_probe1 = np.linspace(-2, probe1.theta_star_entry, 101)
pos_vec_bi_arr_probe1 = probe1.pos_vec_bi(theta_star_arr_probe1)/3389.5e3

theta_star_arr_probe2 = np.linspace(-2, probe2.theta_star_entry, 101)
pos_vec_bi_arr_probe2 = probe2.pos_vec_bi(theta_star_arr_probe2)/3389.5e3

theta_star_arr_probe3 = np.linspace(-2, probe3.theta_star_entry, 101)
pos_vec_bi_arr_probe3 = probe3.pos_vec_bi(theta_star_arr_probe3)/3389.5e3

theta_star_arr_probe4 = np.linspace(-2, probe4.theta_star_entry, 101)
pos_vec_bi_arr_probe4 = probe4.pos_vec_bi(theta_star_arr_probe4)/3389.5e3

theta_star_arr_probe5 = np.linspace(-2, probe5.theta_star_entry, 101)
pos_vec_bi_arr_probe5 = probe5.pos_vec_bi(theta_star_arr_probe5)/3389.5e3


x_arr_probe1 = pos_vec_bi_arr_probe1[0][:]
y_arr_probe1 = pos_vec_bi_arr_probe1[1][:]
z_arr_probe1 = pos_vec_bi_arr_probe1[2][:]

x_arr_probe2 = pos_vec_bi_arr_probe2[0][:]
y_arr_probe2 = pos_vec_bi_arr_probe2[1][:]
z_arr_probe2 = pos_vec_bi_arr_probe2[2][:]

x_arr_probe3 = pos_vec_bi_arr_probe3[0][:]
y_arr_probe3 = pos_vec_bi_arr_probe3[1][:]
z_arr_probe3 = pos_vec_bi_arr_probe3[2][:]

x_arr_probe4 = pos_vec_bi_arr_probe4[0][:]
y_arr_probe4 = pos_vec_bi_arr_probe4[1][:]
z_arr_probe4 = pos_vec_bi_arr_probe4[2][:]

x_arr_probe5 = pos_vec_bi_arr_probe5[0][:]
y_arr_probe5 = pos_vec_bi_arr_probe5[1][:]
z_arr_probe5 = pos_vec_bi_arr_probe5[2][:]



u = np.linspace(0, 2 * np.pi, 100)
v = np.linspace(0, np.pi, 100)
x = 1*np.outer(np.cos(u), np.sin(v))
y = 1*np.outer(np.sin(u), np.sin(v))
z = 1*np.outer(np.ones(np.size(u)), np.cos(v))

x1 = 1.040381198513972*np.outer(np.cos(u), np.sin(v))
y1 = 1.040381198513972*np.outer(np.sin(u), np.sin(v))
z1 = 1.040381198513972*np.outer(np.ones(np.size(u)), np.cos(v))


x_ring_1 = 1.1*np.cos(u)
y_ring_1 = 1.1*np.sin(u)
z_ring_1 = 0.0*np.cos(u)

x_ring_2 = 1.2*np.cos(u)
y_ring_2 = 1.2*np.sin(u)
z_ring_2 = 0.0*np.cos(u)

mlab.figure(bgcolor=(0,0,0))
s1 = mlab.mesh(x, y, z, color=(0.7,0.3,0.0))
s2 = mlab.mesh(x1, y1, z1, color=(0.7, 0.3,0.0), opacity=0.3)
r1 = mlab.plot3d(x_ring_1, y_ring_1, z_ring_1, color=(1,1,1), line_width=1, tube_radius=None)
#r2 = mlab.plot3d(x_ring_2, y_ring_2, z_ring_2, color=(1,1,1), line_width=1, tube_radius=None)

p1 = mlab.plot3d(x_arr_probe1, y_arr_probe1, z_arr_probe1, color=(0,1,0), line_width=3, tube_radius=None)
p2 = mlab.plot3d(x_arr_probe2, y_arr_probe2, z_arr_probe2, color=(0,1,0), line_width=3, tube_radius=None)
p3 = mlab.plot3d(x_arr_probe3, y_arr_probe3, z_arr_probe3, color=(0,1,0), line_width=3, tube_radius=None)
p4 = mlab.plot3d(x_arr_probe4, y_arr_probe4, z_arr_probe4, color=(0,1,0), line_width=3, tube_radius=None)
p5 = mlab.plot3d(x_arr_probe5, y_arr_probe5, z_arr_probe5, color=(0,1,0), line_width=3, tube_radius=None)
#p2 = mlab.plot3d(x_arr_space, y_arr_space, z_arr_space, color=(0,0,1), line_width=3, tube_radius=None)
o1 = mlab.plot3d(x_arr_space, y_arr_space, z_arr_space, color=(0,0,1), line_width=3, tube_radius=None)


mlab.plot3d([0, 1.2 * north_pole_bi_vec[0]],
                   [0, 1.2 * north_pole_bi_vec[1]],
                   [0, 1.2 * north_pole_bi_vec[2]])

mlab.plot3d([0, 1.5 * probe1.S_vec_bi_unit[0]],
                   [0, 1.5 * probe1.S_vec_bi_unit[1]],
                   [0, 1.5 * probe1.S_vec_bi_unit[2]], color=(0, 1, 0))

mlab.plot3d([0, 1.5 * probe1.R_vec_bi_unit[0]],
                   [0, 1.5 * probe1.R_vec_bi_unit[1]],
                   [0, 1.5 * probe1.R_vec_bi_unit[2]], color=(1, 0, 0))

mlab.plot3d([0, 1.5 * probe1.T_vec_bi_unit[0]],
                   [0, 1.5 * probe1.T_vec_bi_unit[1]],
                   [0, 1.5 * probe1.T_vec_bi_unit[2]], color=(0, 0, 1))


mlab.show()
[6]:
from IPython.display import Image
Image(filename='../../../plots/mars-smallsat-constellation-approach.png', width=1200)
[6]:
../../_images/mdpi-aerospace-notebooks_smallsat-mission-concepts_section-5-2-mars-smallsat-constellation-approach-trajectories_8_0.png
[6]:
print(np.dot(approach1.b_mag*approach1.B_vec_bi_unit, approach1.R_vec_bi_unit))
print(np.dot(approach1.b_mag*approach1.B_vec_bi_unit, approach1.T_vec_bi_unit))
-1.912860725974833e-09
7345715.666240079
[7]:
import matplotlib.pyplot as plt
from matplotlib import rcParams
[8]:
from mpl_toolkits.axes_grid1.inset_locator import zoomed_inset_axes
from mpl_toolkits.axes_grid1.inset_locator import mark_inset
[13]:
fig = plt.figure()
fig.set_size_inches([5, 5])

plt.rc('font',family='Times New Roman')
params = {'mathtext.default': 'regular' }
plt.rcParams.update(params)

theta_arr = np.linspace(0, 2*np.pi, 101)
X_MARS = approach1.planetObj.RP*np.cos(theta_arr)/1e3
Y_MARS = approach1.planetObj.RP*np.sin(theta_arr)/1e3

plt.plot(X_MARS, Y_MARS, color='red', linestyle='dashed', linewidth=2.0, label='Mars surface')

BR1 = np.dot(approach1.b_mag*approach1.B_vec_bi_unit, approach1.R_vec_bi_unit)
BT1 = np.dot(approach1.b_mag*approach1.B_vec_bi_unit, approach1.T_vec_bi_unit)

X_SS = (BT1/1e3)*np.cos(theta_arr)
Y_SS = (BT1/1e3)*np.sin(theta_arr)
plt.plot(X_SS, Y_SS, color='g', linestyle='dashed', linewidth=2.0, label='SmallSat |B| circle')

BR2 = np.dot(approach2.b_mag*approach2.B_vec_bi_unit, approach2.R_vec_bi_unit)
BT2 = np.dot(approach2.b_mag*approach2.B_vec_bi_unit, approach2.T_vec_bi_unit)

BR3 = np.dot(approach3.b_mag*approach3.B_vec_bi_unit, approach3.R_vec_bi_unit)
BT3 = np.dot(approach3.b_mag*approach3.B_vec_bi_unit, approach3.T_vec_bi_unit)

BR4 = np.dot(approach4.b_mag*approach4.B_vec_bi_unit, approach4.R_vec_bi_unit)
BT4 = np.dot(approach4.b_mag*approach4.B_vec_bi_unit, approach4.T_vec_bi_unit)

BR5 = np.dot(approach5.b_mag*approach5.B_vec_bi_unit, approach5.R_vec_bi_unit)
BT5 = np.dot(approach5.b_mag*approach5.B_vec_bi_unit, approach5.T_vec_bi_unit)

BR6 = np.dot(space.b_mag*space.B_vec_bi_unit, space.R_vec_bi_unit)
BT6 = np.dot(space.b_mag*space.B_vec_bi_unit, space.T_vec_bi_unit)

X_HS = (BR6/1e3)*np.cos(theta_arr)
Y_HS = (BR6/1e3)*np.sin(theta_arr)
plt.plot(X_HS, Y_HS, color='m', linestyle='dashed', linewidth=2.0, label='Host |B| circle')



plt.scatter(BT1/1e3, BR1/1e3, marker="o", s=40, color='g', zorder=100,  label='SmallSat aim points')
plt.scatter(BT2/1e3, BR2/1e3, marker="o", s=40, color='g', zorder=100)
plt.scatter(BT3/1e3, BR3/1e3, marker="o", s=40, color='g', zorder=100)
plt.scatter(BT4/1e3, BR4/1e3, marker="o", s=40, color='g', zorder=100)
plt.scatter(BT5/1e3, BR5/1e3, marker="o", s=40, color='g', zorder=100)
plt.scatter(BT6/1e3, BR6/1e3, marker="*", s=100, color='m', zorder=100, label='Host orbiter aim point')

plt.gca().invert_yaxis()
plt.gca().set_aspect('equal')

plt.xlabel('B.T, km' ,fontsize=12)
plt.ylabel('B.R, km' ,fontsize=12)

plt.yticks(fontsize=12)
plt.xticks(fontsize=12)
ax = plt.gca()
ax.tick_params(direction='in')
ax.yaxis.set_ticks_position('both')
ax.xaxis.set_ticks_position('both')

plt.legend(loc='lower right', fontsize=10, framealpha=1)


ax=plt.gca()
ax.xaxis.set_tick_params(direction='in', which='both')
ax.yaxis.set_tick_params(direction='in', which='both')
ax.xaxis.set_tick_params(width=1, length=4)
ax.yaxis.set_tick_params(width=1, length=4)
ax.xaxis.set_tick_params(width=1, length=4, which='minor')
ax.yaxis.set_tick_params(width=1, length=4, which='minor')
ax.xaxis.grid(which='major', color='k', linestyle='dotted', linewidth=0.5)
ax.xaxis.grid(which='minor', color='k', linestyle='dotted', linewidth=0.0)
ax.yaxis.grid(which='major', color='k', linestyle='dotted', linewidth=0.5)
ax.yaxis.grid(which='minor', color='k', linestyle='dotted', linewidth=0.0)

plt.annotate('', xy=(BT2/1e3, BR2/1e3), xytext=(BT1/1e3, BR1/1e3),
               va="center", ha="center",
               arrowprops=dict(arrowstyle='->, head_width=0.2', facecolor='blue'), fontsize=10, color='k',
               bbox=dict(boxstyle='round,pad=0.2', fc='w', ec='k', alpha=1))

plt.annotate('', xy=(BT3/1e3, BR3/1e3), xytext=(BT2/1e3, BR2/1e3),
               va="center", ha="center",
               arrowprops=dict(arrowstyle='->, head_width=0.2', facecolor='blue'), fontsize=10, color='k',
               bbox=dict(boxstyle='round,pad=0.2', fc='w', ec='k', alpha=1))

plt.annotate('', xy=(BT4/1e3, BR4/1e3), xytext=(BT3/1e3, BR3/1e3),
               va="center", ha="center",
               arrowprops=dict(arrowstyle='->, head_width=0.2', facecolor='blue'), fontsize=10, color='k',
               bbox=dict(boxstyle='round,pad=0.2', fc='w', ec='k', alpha=1))

plt.annotate('', xy=(BT5/1e3, BR5/1e3), xytext=(BT4/1e3, BR4/1e3),
               va="center", ha="center",
               arrowprops=dict(arrowstyle='->, head_width=0.2', facecolor='blue'), fontsize=10, color='k',
               bbox=dict(boxstyle='round,pad=0.2', fc='w', ec='k', alpha=1))


plt.text(5800, -1000, r'$\Delta V_1$', fontsize=12)
plt.text(4700, -3500, r'$\Delta V_2$', fontsize=12)
plt.text(3000, -5500, r'$\Delta V_3$', fontsize=12)
plt.text(1000, -6200, r'$\Delta V_4$', fontsize=12)


for axis in ['top', 'bottom', 'left', 'right']:
    ax.spines[axis].set_linewidth(2)

plt.xlim([-8000, 8000])


axins = zoomed_inset_axes(ax, 8, loc=2, axes_kwargs={'zorder':2})
axins.set_xlim(-300,300)
axins.set_ylim(-7800, -7200)
axins.plot(X_SS, Y_SS, color='g', linestyle='dashed', linewidth=2.0)
axins.plot(X_HS, Y_HS, color='m', linestyle='dashed', linewidth=2.0)
axins.scatter(BT5/1e3, BR5/1e3, marker="o", s=100, color='g')
axins.scatter(BT6/1e3, BR6/1e3, marker="*", s=200, color='m')
axins.annotate('', xy=(BT6/1e3, 0.999*BR6/1e3), xytext=(BT5/1e3, BR5/1e3),
               va="center", ha="center",
               arrowprops=dict(arrowstyle='->, head_width=0.3', facecolor='blue'), fontsize=10, color='k',
               bbox=dict(boxstyle='round,pad=0.2', fc='w', ec='k', alpha=1))
axins.text(50, -7450, r'$\Delta V_5$', rotation=0, fontsize=12)

axins.invert_yaxis()
patch, pp1, pp2 = mark_inset(ax, axins,loc1=1,loc2=1, fc="none", ec="k", linestyle='solid', linewidth = 1, zorder=0.0)
pp1.loc1 = 1
pp1.loc2 = 4
pp2.loc1 = 4
pp2.loc2 = 1
plt.draw()

axins.yaxis.get_major_locator().set_params(nbins=1)
axins.xaxis.get_major_locator().set_params(nbins=1)

plt.setp(axins.get_xticklabels(), visible=True)
plt.setp(axins.get_yticklabels(), visible=False)

axins.xaxis.set_tick_params(direction='in', which='both')
axins.yaxis.set_tick_params(direction='in', which='both')



for axis in ['top', 'bottom', 'left', 'right']:
    axins.spines[axis].set_linewidth(1.5)

axins.tick_params(axis='both', which='major', labelsize=10)

plt.draw()

plt.savefig('../../../data/mdpi-aerospace/smallsat-mission-concepts/mars/mars-smallsat-const-b-plane.png', dpi= 300,bbox_inches='tight')
plt.savefig('../../../data/mdpi-aerospace/smallsat-mission-concepts/mars/mars-smallsat-const-b-plane.pdf', dpi=300,bbox_inches='tight')
plt.savefig('../../../data/mdpi-aerospace/smallsat-mission-concepts/mars/mars-smallsat-const-b-plane.eps', dpi=300,bbox_inches='tight')


plt.show()
../../_images/mdpi-aerospace-notebooks_smallsat-mission-concepts_section-5-2-mars-smallsat-constellation-approach-trajectories_12_0.png