A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
ns3::LeoCircularOrbitMobilityModel Class Reference

Keep track of the orbital position and velocity of a satellite. More...

#include "leo-circular-orbit-mobility-model.h"

Inheritance diagram for ns3::LeoCircularOrbitMobilityModel:
Collaboration diagram for ns3::LeoCircularOrbitMobilityModel:

Public Member Functions

 LeoCircularOrbitMobilityModel ()
 constructor
 ~LeoCircularOrbitMobilityModel () override
 destructor
Ptr< MobilityModelCopy () const override
 Copy function allows one to copy the underlying MobilityModel from a MobilityModel pointer, by calling each children Copy implementation.
Vector DoGetGeocentricPosition () const override
 Returns the Geocentric Position of the Node in ECEF (cartesian).
double GetAltitude () const
 Gets the altitude in m.
double GetAltitudeKm () const
 Gets the altitude in km (not the usual meters used in ns-3).
double GetAngularVelocity () const
 Get the orbital angular velocity.
double GetInclination () const
 Gets the inclination.
double GetSpeed () const
 Gets the speed of the node.
void SetAltitude (double h)
 Sets the altitude in m.
void SetAltitudeKm (double h)
 Sets the altitude in km (not the usual meters used in ns-3).
void SetInclination (double incl)
 Sets the inclination.
Public Member Functions inherited from ns3::GeocentricConstantPositionMobilityModel
 GeocentricConstantPositionMobilityModel ()=default
 Create a position located at coordinates (0,0,0).
 ~GeocentricConstantPositionMobilityModel () override=default
virtual Vector GetCoordinateTranslationReferencePoint () const
 Get the reference point for coordinate conversion.
double GetDistanceFrom (Ptr< const GeocentricConstantPositionMobilityModel > other) const
virtual double GetElevationAngle (Ptr< const GeocentricConstantPositionMobilityModel > other)
 Computes elevation angle between a ground terminal and a HAPS/Satellite.
virtual Vector GetGeocentricPosition () const
 Get the position using Geocentric Cartesian coordinates.
virtual Vector GetGeographicPosition () const
 Get the position using geographic (geodetic) coordinates.
virtual Vector GetPosition () const
virtual void SetCoordinateTranslationReferencePoint (const Vector &refPoint)
 Set the reference point for coordinate conversion.
virtual void SetGeocentricPosition (const Vector &position)
 Set the position using Geocentric Cartesian coordinates.
virtual void SetGeographicPosition (const Vector &latLonAlt)
 Set the position using geographic coordinates.
virtual void SetPosition (const Vector &position)
Public Member Functions inherited from ns3::MobilityModel
 MobilityModel ()
 ~MobilityModel () override=0
int64_t AssignStreams (int64_t stream)
 Assign a fixed random variable stream number to the random variables used by this model.
double GetDistanceFrom (Ptr< const MobilityModel > position) const
Vector GetPosition () const
Vector GetPositionWithReference (const Vector &referencePosition) const
 This method may be used if the position returned may depend on some reference position provided.
double GetRelativeSpeed (Ptr< const MobilityModel > other) const
Vector GetVelocity () const
void SetPosition (const Vector &position)
Public Member Functions inherited from ns3::Object
 Object ()
 Caller graph was not generated because of its size.
 ~Object () override
 Destructor.
void AggregateObject (Ptr< Object > other)
 Aggregate two Objects together.
void Dispose ()
 Dispose of this Object.
AggregateIterator GetAggregateIterator () const
 Get an iterator to the Objects aggregated to this one.
TypeId GetInstanceTypeId () const final
 Get the most derived TypeId for this Object.
template<>
Ptr< ObjectGetObject () const
 Specialization of () for objects of type ns3::Object.
template<typename T>
Ptr< T > GetObject () const
 Get a pointer to the requested aggregated Object.
template<>
Ptr< ObjectGetObject (TypeId tid) const
 Specialization of (TypeId tid) for objects of type ns3::Object.
template<typename T>
Ptr< T > GetObject (TypeId tid) const
 Get a pointer to the requested aggregated Object by TypeId.
void Initialize ()
 Invoke DoInitialize on all Objects aggregated to this one.
bool IsInitialized () const
 Check if the object has been initialized.
void UnidirectionalAggregateObject (Ptr< Object > other)
 Aggregate an Object to another Object.
Public Member Functions inherited from ns3::SimpleRefCount< Object, ObjectBase, ObjectDeleter >
 SimpleRefCount ()
 Default constructor.
uint32_t GetReferenceCount () const
 Get the reference count of the object.
SimpleRefCountoperator= (const SimpleRefCount &o)
 Assignment operator.
void Ref () const
 Increment the reference count.
void Unref () const
 Decrement the reference count.
Public Member Functions inherited from ns3::ObjectBase
virtual ~ObjectBase ()
 Virtual destructor.
void GetAttribute (std::string name, AttributeValue &value, bool permissive=false) const
 Get the value of an attribute, raising fatal errors if unsuccessful.
bool GetAttributeFailSafe (std::string name, AttributeValue &value) const
 Get the value of an attribute without raising errors.
void SetAttribute (std::string name, const AttributeValue &value)
 Set a single attribute, raising fatal errors if unsuccessful.
bool SetAttributeFailSafe (std::string name, const AttributeValue &value)
 Set a single attribute without raising errors.
bool TraceConnect (std::string name, std::string context, const CallbackBase &cb)
 Connect a TraceSource to a Callback with a context.
bool TraceConnectWithoutContext (std::string name, const CallbackBase &cb)
 Connect a TraceSource to a Callback without a context.
bool TraceDisconnect (std::string name, std::string context, const CallbackBase &cb)
 Disconnect from a TraceSource a Callback previously connected with a context.
bool TraceDisconnectWithoutContext (std::string name, const CallbackBase &cb)
 Disconnect from a TraceSource a Callback previously connected without a context.

Static Public Member Functions

static TypeId GetTypeId ()
 Get the type ID.
Static Public Member Functions inherited from ns3::GeocentricConstantPositionMobilityModel
static TypeId GetTypeId ()
 Register this type with the TypeId system.
Static Public Member Functions inherited from ns3::MobilityModel
static TypeId GetTypeId ()
 Register this type with the TypeId system.
Static Public Member Functions inherited from ns3::Object
static TypeId GetTypeId ()
 Register this type.
Static Public Member Functions inherited from ns3::ObjectBase
static TypeId GetTypeId ()
 Get the type ID.

Private Member Functions

double CalcLongitude (Time t) const
 Calculate the ECEF longitude of the ascending node at simulation time t.
Vector CalcPosition (Time t) const
 Calculate the position at time t.
void DoDispose () override
 Destructor implementation.
Vector DoGetPosition () const override
 Returns the node current position.
Vector DoGetVelocity () const override
 Returns the current velocity of the node.
void DoInitialize () override
 Initialize() implementation.
void DoSetPosition (const Vector &position) override
 Sets the node position via argument.
void NotifyCourseChangeAndReschedule ()
 Fire NotifyCourseChange and reschedule at m_resolutionTimeStep.
Vector3D PlaneNorm (Time t) const
 Get the normal vector of the orbital plane.
Vector3D RotatePlane (double theta, const Vector3D &v, Time t) const
 Rotates a position vector by angle 'a' around the orbital plane normal, using the Rodrigues rotation formula (see https://en.wikipedia.org/wiki/Rodrigues%27_rotation_formula ).

Private Attributes

double m_argumentOfLatitude
 Argument of latitude in rad.
EventId m_courseChangeEvent
 Event for course change notification.
double m_inclination
 Inclination in rad.
double m_longitude
 Longitudinal offset in rad.
double m_orbitalSpeed
 Orbital speed in m/s; negative means compute from gravity.
double m_orbitHeight
 Orbit height in km.
Time m_resolutionTimeStep
 Time interval between CourseChange notifications; zero disables periodic notifications.

Additional Inherited Members

Public Types inherited from ns3::MobilityModel
typedef void(* TracedCallback) (Ptr< const MobilityModel > model)
 TracedCallback signature.
Protected Member Functions inherited from ns3::MobilityModel
void NotifyCourseChange () const
 Must be invoked by subclasses when the course of the position changes to notify course change listeners.
Protected Member Functions inherited from ns3::Object
 Object (const Object &o)
 Copy an Object.
virtual void NotifyNewAggregate ()
 Notify all Objects aggregated to this one of a new Object being aggregated.
Protected Member Functions inherited from ns3::ObjectBase
void ConstructSelf (const AttributeConstructionList &attributes)
 Complete construction of ObjectBase; invoked by derived classes.
virtual void NotifyConstructionCompleted ()
 Notifier called once the ObjectBase is fully constructed.

Detailed Description

Keep track of the orbital position and velocity of a satellite.

This uses simple circular orbits based on the inclination of the orbital plane and the altitude of the satellite. Assumes earth is a perfect sphere.

Note: Position in DoSetPosition() is in degrees, not the usual meters. Note: Altitude is stored in km, not the usual ns-3 m.

This model is distinct from GeocentricEcefMobilityModel in that it implements a dynamic circular orbital model, whereas GeocentricEcefMobilityModel is intended for ECEF coordinates that do not evolve according to orbital dynamics.

Definition at line 42 of file leo-circular-orbit-mobility-model.h.

Constructor & Destructor Documentation

◆ LeoCircularOrbitMobilityModel()

ns3::LeoCircularOrbitMobilityModel::LeoCircularOrbitMobilityModel ( )

constructor

Todo
The current implementation uses a periodic event to trigger NotifyCourseChange(). As suggested by reviewers, a more idiomatic approach would be to rely on the underlying MobilityModel trace source. However, due to the continuous nature of LEO orbit changes, the periodic approximation is currently used.

Definition at line 66 of file leo-circular-orbit-mobility-model.cc.

References ns3::GeocentricConstantPositionMobilityModel::GeocentricConstantPositionMobilityModel(), m_argumentOfLatitude, m_longitude, m_orbitalSpeed, and NS_LOG_FUNCTION.

Referenced by GetTypeId().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ~LeoCircularOrbitMobilityModel()

ns3::LeoCircularOrbitMobilityModel::~LeoCircularOrbitMobilityModel ( )
override

destructor

Definition at line 82 of file leo-circular-orbit-mobility-model.cc.

References m_courseChangeEvent, and NS_LOG_FUNCTION.

Member Function Documentation

◆ CalcLongitude()

double ns3::LeoCircularOrbitMobilityModel::CalcLongitude ( Time t) const
private

Calculate the ECEF longitude of the ascending node at simulation time t.

The orbital plane drifts westward in the ECEF frame because the Earth rotates eastward, so this returns m_longitude minus the Earth-rotation angle accumulated over time t.

Parameters
ttime
Returns
longitude of the ascending node in radians (ECEF)

Definition at line 140 of file leo-circular-orbit-mobility-model.cc.

References ns3::Days(), and m_longitude.

Referenced by CalcPosition(), and PlaneNorm().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ CalcPosition()

Vector ns3::LeoCircularOrbitMobilityModel::CalcPosition ( Time t) const
private

Calculate the position at time t.

The returned Vector contains Cartesian ECEF coordinates in meters. Note that this differs from DoSetPosition(), where the Vector encodes angular orbital parameters (longitude and offset in degrees); that discrepancy is a consequence of the MobilityModel base class interface, which uses a single Vector type for both input and output.

Parameters
tsimulation time
Returns
ECEF position in meters

Definition at line 171 of file leo-circular-orbit-mobility-model.cc.

References CalcLongitude(), GetAngularVelocity(), ns3::Time::GetSeconds(), m_argumentOfLatitude, m_inclination, m_orbitHeight, ns3::M_PER_KM, RotatePlane(), and x.

Referenced by DoGetGeocentricPosition(), DoGetPosition(), and NotifyCourseChangeAndReschedule().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Copy()

Ptr< MobilityModel > ns3::LeoCircularOrbitMobilityModel::Copy ( ) const
inlineoverridevirtual

Copy function allows one to copy the underlying MobilityModel from a MobilityModel pointer, by calling each children Copy implementation.

This is primarily used by wraparound models for the spectrum channel.

Returns
a copy of the current mobility model

Reimplemented from ns3::GeocentricConstantPositionMobilityModel.

Definition at line 119 of file leo-circular-orbit-mobility-model.h.

References ns3::CreateObject().

Here is the call graph for this function:

◆ DoDispose()

void ns3::LeoCircularOrbitMobilityModel::DoDispose ( )
overrideprivatevirtual

Destructor implementation.

This method is called by Dispose() or by the Object's destructor, whichever comes first.

Subclasses are expected to implement their real destruction code in an overridden version of this method and chain up to their parent's implementation once they are done. i.e, for simplicity, the destructor of every subclass should be empty and its content should be moved to the associated DoDispose() method.

It is safe to call GetObject() from within this method.

Caller graph was not generated because of its size.

Reimplemented from ns3::Object.

Definition at line 212 of file leo-circular-orbit-mobility-model.cc.

References ns3::Object::DoDispose(), m_courseChangeEvent, and NS_LOG_FUNCTION.

Here is the call graph for this function:

◆ DoGetGeocentricPosition()

Vector ns3::LeoCircularOrbitMobilityModel::DoGetGeocentricPosition ( ) const
overridevirtual

Returns the Geocentric Position of the Node in ECEF (cartesian).

Returns
ECEF position in meters

Reimplemented from ns3::GeocentricConstantPositionMobilityModel.

Definition at line 227 of file leo-circular-orbit-mobility-model.cc.

References CalcPosition(), and ns3::Simulator::Now().

Here is the call graph for this function:

◆ DoGetPosition()

Vector ns3::LeoCircularOrbitMobilityModel::DoGetPosition ( ) const
overrideprivatevirtual

Returns the node current position.

Returns
ECEF position in meters

Reimplemented from ns3::GeocentricConstantPositionMobilityModel.

Definition at line 234 of file leo-circular-orbit-mobility-model.cc.

References CalcPosition(), and ns3::Simulator::Now().

Referenced by DoGetVelocity().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ DoGetVelocity()

Vector ns3::LeoCircularOrbitMobilityModel::DoGetVelocity ( ) const
overrideprivatevirtual

Returns the current velocity of the node.

Returns
velocity vector in m/s (ECEF)

Reimplemented from ns3::GeocentricConstantPositionMobilityModel.

Definition at line 109 of file leo-circular-orbit-mobility-model.cc.

References ns3::CrossProduct(), DoGetPosition(), ns3::Vector3D::GetLength(), GetSpeed(), ns3::Simulator::Now(), and PlaneNorm().

Here is the call graph for this function:

◆ DoInitialize()

void ns3::LeoCircularOrbitMobilityModel::DoInitialize ( )
overrideprivatevirtual

Initialize() implementation.

This method is called only once by Initialize(). If the user calls Initialize() multiple times, DoInitialize() is called only the first time.

Subclasses are expected to override this method and chain up to their parent's implementation once they are done. It is safe to call GetObject() and AggregateObject() from within this method.

Reimplemented from ns3::Object.

Definition at line 197 of file leo-circular-orbit-mobility-model.cc.

References ns3::Object::DoInitialize(), m_courseChangeEvent, m_resolutionTimeStep, NotifyCourseChangeAndReschedule(), NS_LOG_FUNCTION, NS_LOG_INFO, ns3::Time::S, ns3::Simulator::Schedule(), and ns3::Seconds().

Here is the call graph for this function:

◆ DoSetPosition()

void ns3::LeoCircularOrbitMobilityModel::DoSetPosition ( const Vector & position)
overrideprivatevirtual

Sets the node position via argument.

Note: This method deviates from the MobilityModel interface which typically expects position in meters. For this model, position is interpreted as angular coordinates (degrees) because specifying orbital parameters (longitude of ascending node and offset) is more intuitive in degrees than in meters relative to the earth's center.

Parameters
positionposition.x is the longitude of the ascending node in degrees; position.y is the argument of latitude on the orbital plane in degrees. Both are converted to radians internally.

Reimplemented from ns3::GeocentricConstantPositionMobilityModel.

Definition at line 240 of file leo-circular-orbit-mobility-model.cc.

References ns3::DegreesToRadians(), GetAltitudeKm(), GetAngularVelocity(), GetInclination(), m_argumentOfLatitude, m_longitude, ns3::MobilityModel::NotifyCourseChange(), NS_LOG_FUNCTION, and NS_LOG_INFO.

Here is the call graph for this function:

◆ GetAltitude()

double ns3::LeoCircularOrbitMobilityModel::GetAltitude ( ) const

Gets the altitude in m.

Returns
the altitude in m (above Earth surface)

Definition at line 257 of file leo-circular-orbit-mobility-model.cc.

References GetAltitudeKm(), and ns3::M_PER_KM.

Here is the call graph for this function:

◆ GetAltitudeKm()

double ns3::LeoCircularOrbitMobilityModel::GetAltitudeKm ( ) const

Gets the altitude in km (not the usual meters used in ns-3).

Returns
the altitude in km (above Earth surface)

Definition at line 270 of file leo-circular-orbit-mobility-model.cc.

References ns3::GeographicPositions::EARTH_SPHERE_RADIUS, m_orbitHeight, and ns3::M_PER_KM.

Referenced by DoSetPosition(), GetAltitude(), and GetTypeId().

Here is the caller graph for this function:

◆ GetAngularVelocity()

double ns3::LeoCircularOrbitMobilityModel::GetAngularVelocity ( ) const

Get the orbital angular velocity.

Computed from Keplerian mechanics: omega = sqrt(GM / r^3). Negated for retrograde orbits (inclination > 90 degrees).

If the user set an orbital angular velocity >= 0, it will be used instead.

Returns
angular velocity in rad/s

Definition at line 146 of file leo-circular-orbit-mobility-model.cc.

References ns3::GeographicPositions::LEO_EARTH_GGC, m_inclination, m_orbitalSpeed, m_orbitHeight, and ns3::M_PER_KM.

Referenced by CalcPosition(), and DoSetPosition().

Here is the caller graph for this function:

◆ GetInclination()

double ns3::LeoCircularOrbitMobilityModel::GetInclination ( ) const

Gets the inclination.

Returns
the inclination in degrees

Definition at line 283 of file leo-circular-orbit-mobility-model.cc.

References m_inclination, and ns3::RadiansToDegrees().

Referenced by DoSetPosition(), and GetTypeId().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetSpeed()

double ns3::LeoCircularOrbitMobilityModel::GetSpeed ( ) const

Gets the speed of the node.

Returns
the speed in m/s

Definition at line 95 of file leo-circular-orbit-mobility-model.cc.

References ns3::GeographicPositions::LEO_EARTH_GGC, m_orbitalSpeed, m_orbitHeight, and ns3::M_PER_KM.

Referenced by DoGetVelocity().

Here is the caller graph for this function:

◆ GetTypeId()

TypeId ns3::LeoCircularOrbitMobilityModel::GetTypeId ( )
static

◆ NotifyCourseChangeAndReschedule()

void ns3::LeoCircularOrbitMobilityModel::NotifyCourseChangeAndReschedule ( )
private

Fire NotifyCourseChange and reschedule at m_resolutionTimeStep.

Definition at line 185 of file leo-circular-orbit-mobility-model.cc.

References CalcPosition(), m_courseChangeEvent, m_resolutionTimeStep, ns3::MobilityModel::NotifyCourseChange(), NotifyCourseChangeAndReschedule(), ns3::Simulator::Now(), NS_LOG_DEBUG, NS_LOG_FUNCTION, and ns3::Simulator::Schedule().

Referenced by DoInitialize(), and NotifyCourseChangeAndReschedule().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ PlaneNorm()

Vector3D ns3::LeoCircularOrbitMobilityModel::PlaneNorm ( Time t) const
private

Get the normal vector of the orbital plane.

Parameters
tthe amount of time passed since the start of the simulation
Returns
the normal vector.

Definition at line 119 of file leo-circular-orbit-mobility-model.cc.

References CalcLongitude(), and m_inclination.

Referenced by DoGetVelocity(), and RotatePlane().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ RotatePlane()

Vector3D ns3::LeoCircularOrbitMobilityModel::RotatePlane ( double theta,
const Vector3D & v,
Time t ) const
private

Rotates a position vector by angle 'a' around the orbital plane normal, using the Rodrigues rotation formula (see https://en.wikipedia.org/wiki/Rodrigues%27_rotation_formula ).

Parameters
thetaangle by which to rotate, in radians
vposition vector to rotate, in meters (ECEF)
ttime passed since simulation start (used to compute the current orbital plane normal)
Returns
rotated position vector in meters (ECEF)

Definition at line 128 of file leo-circular-orbit-mobility-model.cc.

References ns3::CrossProduct(), PlaneNorm(), and v.

Referenced by CalcPosition().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetAltitude()

void ns3::LeoCircularOrbitMobilityModel::SetAltitude ( double h)

Sets the altitude in m.

Parameters
hthe altitude in m (above Earth surface)

Definition at line 263 of file leo-circular-orbit-mobility-model.cc.

References ns3::M_PER_KM, NS_LOG_FUNCTION, and SetAltitudeKm().

Here is the call graph for this function:

◆ SetAltitudeKm()

void ns3::LeoCircularOrbitMobilityModel::SetAltitudeKm ( double h)

Sets the altitude in km (not the usual meters used in ns-3).

Parameters
hthe altitude in km (above Earth surface)

Definition at line 276 of file leo-circular-orbit-mobility-model.cc.

References ns3::GeographicPositions::EARTH_SPHERE_RADIUS, m_orbitHeight, ns3::M_PER_KM, and NS_LOG_FUNCTION.

Referenced by GetTypeId(), and SetAltitude().

Here is the caller graph for this function:

◆ SetInclination()

void ns3::LeoCircularOrbitMobilityModel::SetInclination ( double incl)

Sets the inclination.

Parameters
inclthe inclination in degrees

Definition at line 289 of file leo-circular-orbit-mobility-model.cc.

References ns3::DegreesToRadians(), m_inclination, and NS_LOG_FUNCTION.

Referenced by GetTypeId().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ m_argumentOfLatitude

double ns3::LeoCircularOrbitMobilityModel::m_argumentOfLatitude
private

Argument of latitude in rad.

Definition at line 138 of file leo-circular-orbit-mobility-model.h.

Referenced by LeoCircularOrbitMobilityModel(), CalcPosition(), and DoSetPosition().

◆ m_courseChangeEvent

EventId ns3::LeoCircularOrbitMobilityModel::m_courseChangeEvent
private

Event for course change notification.

Definition at line 148 of file leo-circular-orbit-mobility-model.h.

Referenced by ~LeoCircularOrbitMobilityModel(), DoDispose(), DoInitialize(), and NotifyCourseChangeAndReschedule().

◆ m_inclination

double ns3::LeoCircularOrbitMobilityModel::m_inclination
private

Inclination in rad.

Definition at line 132 of file leo-circular-orbit-mobility-model.h.

Referenced by CalcPosition(), GetAngularVelocity(), GetInclination(), PlaneNorm(), and SetInclination().

◆ m_longitude

double ns3::LeoCircularOrbitMobilityModel::m_longitude
private

Longitudinal offset in rad.

Definition at line 135 of file leo-circular-orbit-mobility-model.h.

Referenced by LeoCircularOrbitMobilityModel(), CalcLongitude(), and DoSetPosition().

◆ m_orbitalSpeed

double ns3::LeoCircularOrbitMobilityModel::m_orbitalSpeed
private

Orbital speed in m/s; negative means compute from gravity.

Definition at line 141 of file leo-circular-orbit-mobility-model.h.

Referenced by LeoCircularOrbitMobilityModel(), GetAngularVelocity(), GetSpeed(), and GetTypeId().

◆ m_orbitHeight

double ns3::LeoCircularOrbitMobilityModel::m_orbitHeight
private

Orbit height in km.

Definition at line 129 of file leo-circular-orbit-mobility-model.h.

Referenced by CalcPosition(), GetAltitudeKm(), GetAngularVelocity(), GetSpeed(), and SetAltitudeKm().

◆ m_resolutionTimeStep

Time ns3::LeoCircularOrbitMobilityModel::m_resolutionTimeStep
private

Time interval between CourseChange notifications; zero disables periodic notifications.

Definition at line 145 of file leo-circular-orbit-mobility-model.h.

Referenced by DoInitialize(), GetTypeId(), and NotifyCourseChangeAndReschedule().


The documentation for this class was generated from the following files: