Flight plan - HALO-20240909a

Contents

Flight plan - HALO-20240909a#

ec_under ec_track c_north c_mid c_south

Crew#

Job

Name

PI

Silke Groß

WALES

Konstantin Krüger

HAMP

Christian Heske

Dropsondes

Theresa Mieslinger

Smart/VELOX

André Ehrlich

SpecMACS

Lea Volkmer

Flight Documentation

Chavez Pope

Ground contact

Julia Windmiller

Flight plan#

Hide code cell source
from datetime import datetime
import orcestra.sat
from orcestra.flightplan import bco, point_on_track, LatLon, IntoCircle, FlightPlan

# Some fixed coordinates

lon_min, lon_max, lat_min, lat_max = -65, -5, -5, 25

airport = bco

radius = 72e3*1.852

# Define dates for flight

flight_time   = datetime(2024, 9, 9, 12, 0, 0)
flight_index = f"HALO-{flight_time.strftime('%Y%m%d')}a"

# Load satellite tracks 

ec_fcst_time  = "2024-09-08"
ec_track = orcestra.sat.SattrackLoader("EARTHCARE", ec_fcst_time, kind="PRE",roi="BARBADOS") \
    .get_track_for_day(f"{flight_time:%Y-%m-%d}")\
    .sel(time=slice(f"{flight_time:%Y-%m-%d} 14:00", None))

# Create elements of track


c_north  = point_on_track(ec_track,lat= 15.00).assign(label = "c_north")
c_south  = point_on_track(ec_track,lat=  8.50).assign(label = "c_south")
c_mid    = point_on_track(ec_track,lat= 0.5*(c_north.lat+c_south.lat)).assign(label = "c_mid")

ec_north = point_on_track(ec_track,lat= 17.50).assign(label = "ec_north") 
ec_south = point_on_track(ec_track,lat=  c_south.lat - 1.2).assign(label = "ec_south")
ec_under = point_on_track(ec_track, lat= 15.50, with_time=True).assign(label = "ec_under", note = "meet EarthCARE")

# Define Flight Paths

waypoints = [
     airport.assign(fl=0),
     ec_south.assign(fl=410),   
     IntoCircle(c_south.assign(fl=410), radius, -360), 
     IntoCircle(c_mid.assign(fl=430), radius, -360), 
     point_on_track(ec_track, lat=c_mid.towards(c_south, distance = radius).lat).assign(fl=450, label="fl_change"),
     c_mid.assign(fl=450),
     ec_under.assign(fl=450),
     ec_north.assign(fl=450),
     IntoCircle(c_north.assign(fl=450), radius, -360),   
     airport.assign(fl=0),
     ]

# Crew

crew = {'Mission PI': 'Silke Groß',
        'DropSondes': 'Theresa Mieslinger',
        'HAMP': 'Christian Heske',
        'SMART/VELOX': 'André Ehrlich',
        'SpecMACS': 'Lea Volkmer',
        'WALES' : 'Konstantin Krüger',
        'Flight Documentation': 'Chavez Pope',
        'Ground Support': 'Julia Windmiller',
        }

# Plan

plan = FlightPlan(waypoints, flight_index, crew=crew, aircraft="HALO")
print(f"Flight index: {plan.flight_id}")
print(f"Take-off: {plan.takeoff_time:%H:%M %Z}\nLanding:  {plan.landing_time:%H:%M %Z}\n")
Flight index: HALO-20240909a
Take-off: 11:43 UTC
Landing:  20:51 UTC
/home/runner/miniconda3/envs/orcestra_book/lib/python3.12/site-packages/orcestra/sat.py:183: UserWarning: You are using an old forecast (issued on 2024-09-08) for EARTHCARE on 2024-09-09! The newest forecast issued so far was issued on 2024-09-09. It's a PRE forecast.
  warnings.warn(
Hide code cell source
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import easygems.healpix as egh
import intake
from orcestra.flightplan import plot_cwv, plot_path

forecast_overlay = True

plt.figure(figsize = (14, 8))
ax = plt.axes(projection=ccrs.PlateCarree())
ax.set_extent([lon_min, lon_max, lat_min, lat_max], crs=ccrs.PlateCarree())
ax.coastlines(alpha=1.0)
ax.gridlines(draw_labels=True, dms=True, x_inline=False, y_inline=False, alpha = 0.25)

if (forecast_overlay):
    ifs_fcst_time = datetime(2024, 9, 8, 0, 0, 0)
    ds = intake.open_catalog("https://tcodata.mpimet.mpg.de/internal.yaml").HIFS(datetime = ifs_fcst_time).to_dask().pipe(egh.attach_coords)
    cwv_flight_time = ds["tcwv"].sel(time=flight_time, method = "nearest")
    plot_cwv(cwv_flight_time, levels = [48.0, 50.0, 52.0, 54.0, 56.0, 58.0, 60.0], ax=ax)
    plt.title(f"{flight_time}\n(CWV forecast issued on {ifs_fcst_time})")

plt.plot(ec_track.lon, ec_track.lat, c='k', ls='dotted')
plot_path(plan, ax, color="C1")
../_images/de08405b414ab6bb50c988b065c5f4755a9afd41f3ec576f1fb0d14fd3c20b3e.png
Hide code cell source
from orcestra.flightplan import vertical_preview

vertical_preview(waypoints)
../_images/0d7ff587d04dd6157eee4fd47de1ad631f8f7d4c139b133cc0c9ab7901123727.png
Hide code cell source
plan.show_details()
plan.export()
Detailed Overview:
              BCO          N13 09.76, W059 25.72, FL000, 11:43:13 UTC, 
to            ec_south     N07 18.00, W045 42.97, FL410, 14:02:11 UTC, 
circle around c_south      N08 30.00, W045 29.40, FL410, 14:02:18 UTC - 15:01:52 UTC, radius: 72 nm, 360° CCW, enter from south
circle around c_mid        N11 45.00, W044 52.32, FL430, 15:27:46 UTC - 16:26:47 UTC, radius: 72 nm, 360° CCW, enter from south
to            fl_change    N10 33.93, W045 05.89, FL450, 16:26:47 UTC, 
to            c_mid        N11 45.00, W044 52.32, FL450, 16:36:06 UTC, 
to            ec_under     N15 30.00, W044 08.77, FL450, 17:05:37 UTC, meet EarthCARE
to            ec_north     N17 30.00, W043 45.13, FL450, 17:21:22 UTC, 
circle around c_north      N15 00.00, W044 14.64, FL450, 17:31:44 UTC - 18:30:16 UTC, radius: 72 nm, 360° CCW, enter from north
to            BCO          N13 09.76, W059 25.72, FL000, 20:51:58 UTC,