Source code for rocketpy.prints.environment_prints
[docs]
class _EnvironmentPrints:
"""Class that holds prints methods for Environment class.
Attributes
----------
_EnvironmentPrints.environment : environment
Environment object that will be used for the prints.
"""
[docs]
def __init__(
self,
environment,
):
"""Initializes _EnvironmentPrints class
Parameters
----------
environment: Environment
Instance of the Environment class.
Returns
-------
None
"""
self.environment = environment
[docs]
def gravity_details(self):
"""Prints gravity details.
Returns
-------
None
"""
elevation = self.environment.elevation
max_expected_height = self.environment.max_expected_height
surface_gravity = self.environment.gravity([elevation])
ceiling_gravity = self.environment.gravity([max_expected_height])
print("\nGravity Details\n")
print(f"Acceleration of gravity at surface level: {surface_gravity:9.4f} m/s²")
print(
f"Acceleration of gravity at {max_expected_height / 1000:7.3f} "
f"km (ASL): {ceiling_gravity:.4f} m/s²\n"
)
[docs]
def launch_site_details(self):
"""Prints launch site details.
Returns
-------
None
"""
print("\nLaunch Site Details\n")
time_format = "%Y-%m-%d %H:%M:%S"
if (
self.environment.datetime_date is not None
and "UTC" not in self.environment.timezone
):
print(
"Launch Date:",
self.environment.datetime_date.strftime(time_format),
"UTC |",
self.environment.local_date.strftime(time_format),
self.environment.timezone,
)
elif self.environment.datetime_date is not None:
print(
"Launch Date:",
self.environment.datetime_date.strftime(time_format),
"UTC",
)
if (
self.environment.latitude is not None
and self.environment.longitude is not None
):
print(f"Launch Site Latitude: {self.environment.latitude:.5f}°")
print(f"Launch Site Longitude: {self.environment.longitude:.5f}°")
print(f"Reference Datum: {self.environment.datum}")
if self.environment.initial_east:
print(
f"Launch Site UTM coordinates: {self.environment.initial_east:.2f} "
f"{self.environment.initial_ew} {self.environment.initial_north:.2f} "
f"{self.environment.initial_hemisphere}"
)
print(
f"Launch Site UTM zone: {self.environment.initial_utm_zone}"
f"{self.environment.initial_utm_letter}"
)
print(f"Launch Site Surface Elevation: {self.environment.elevation:.1f} m\n")
[docs]
def atmospheric_model_details(self):
"""Prints atmospheric model details.
Returns
-------
None
"""
print("\nAtmospheric Model Details\n")
model_type = self.environment.atmospheric_model_type
print("Atmospheric Model Type:", model_type)
print(
f"{model_type} Maximum Height: "
f"{self.environment.max_expected_height / 1000:.3f} km"
)
if model_type in ["Forecast", "Reanalysis", "Ensemble"]:
# Determine time period
init_date = self.environment.atmospheric_model_init_date
end_date = self.environment.atmospheric_model_end_date
interval = self.environment.atmospheric_model_interval
print(f"{model_type} Time Period: from {init_date} to {end_date} utc")
print(f"{model_type} Hour Interval: {interval} hrs")
# Determine latitude and longitude range
init_lat = self.environment.atmospheric_model_init_lat
end_lat = self.environment.atmospheric_model_end_lat
init_lon = self.environment.atmospheric_model_init_lon
end_lon = self.environment.atmospheric_model_end_lon
print(f"{model_type} Latitude Range: From {init_lat}° to {end_lat}°")
print(f"{model_type} Longitude Range: From {init_lon}° to {end_lon}°")
if model_type == "Ensemble":
print(
f"Number of Ensemble Members: {self.environment.num_ensemble_members}"
)
print(
f"Selected Ensemble Member: {self.environment.ensemble_member} "
"(Starts from 0)\n"
)
[docs]
def atmospheric_conditions(self):
"""Prints atmospheric conditions.
Returns
-------
None
"""
print("\nSurface Atmospheric Conditions\n")
wind_speed = self.environment.wind_speed(self.environment.elevation)
wind_direction = self.environment.wind_direction(self.environment.elevation)
wind_heading = self.environment.wind_heading(self.environment.elevation)
pressure = self.environment.pressure(self.environment.elevation) / 100
temperature = self.environment.temperature(self.environment.elevation)
air_density = self.environment.density(self.environment.elevation)
speed_of_sound = self.environment.speed_of_sound(self.environment.elevation)
print(f"Surface Wind Speed: {wind_speed:.2f} m/s")
print(f"Surface Wind Direction: {wind_direction:.2f}°")
print(f"Surface Wind Heading: {wind_heading:.2f}°")
print(f"Surface Pressure: {pressure:.2f} hPa")
print(f"Surface Temperature: {temperature:.2f} K")
print(f"Surface Air Density: {air_density:.3f} kg/m³")
print(f"Surface Speed of Sound: {speed_of_sound:.2f} m/s\n")
[docs]
def print_earth_details(self):
"""
Function to print information about the Earth Model used in the
Environment Class
"""
print("\nEarth Model Details\n")
earth_radius = self.environment.earth_radius
semi_major_axis = self.environment.ellipsoid.semi_major_axis
flattening = self.environment.ellipsoid.flattening
semi_minor_axis = semi_major_axis * (1 - flattening)
print(f"Earth Radius at Launch site: {earth_radius / 1000:.2f} km")
print(f"Semi-major Axis: {semi_major_axis / 1000:.2f} km")
print(f"Semi-minor Axis: {semi_minor_axis / 1000:.2f} km")
print(f"Flattening: {flattening:.4f}\n")
[docs]
def all(self):
"""Prints all print methods about the Environment.
Returns
-------
None
"""
self.gravity_details()
self.launch_site_details()
self.atmospheric_model_details()
self.atmospheric_conditions()
self.print_earth_details()