Acceleration Model Setup

Acceleration models can be created through the factory function create_acceleration_models().

How to select accelerations

In Tudat, an acceleration acting on a body is defined by:

  • the body undergoing acceleration;

  • the body exerting the acceleration;

  • the type and settings of the acceleration.

These settings are defined via factory functions for each acceleration in the simulation.

See also

A comprehensive list of all available acceleration models in Tudat and the manner in which to define them is given in Available Acceleration Models.

These settings are organized in nested key-value containers (std::map<> in C++, dict in Python). In general:

  • key: body undergoing acceleration

  • value: dictionary with:

This container will be supplied to the create_acceleration_models() function to create the acceleration models. This is illustrated in the example below.

Example

In this example, the following accelerations are exerted on the vehicle:

  • by the Earth:

    • spherical harmonic gravitational acceleration (degree and order 5)

    • aerodynamic acceleration

  • by the Sun:

    • point-mass gravity

  • by the Moon:

    • point-mass gravity

The variable accelerations_settings_vehicle denotes the list of bodies exerting accelerations and the types of accelerations, while the variable acceleration_settings associates this list with the body undergoing the acceleration. The function create_acceleration_models() creates the list of models that compute the accelerations during the propagation.

Required Show/Hide

from tudatpy.kernel.numerical_simulation import propagation_setup
# Define bodies that are propagated
bodies_to_propagate = ["Vehicle"]

# Define central bodies
central_bodies = ["Earth"]

# Define accelerations acting on Vehicle
accelerations_settings_vehicle = dict(
    Sun=
    [
        propagation_setup.acceleration.point_mass_gravity()
    ],
    Moon=
    [
        propagation_setup.acceleration.point_mass_gravity()
    ],
    Earth=
    [
        propagation_setup.acceleration.spherical_harmonic_gravity(5, 5),
        propagation_setup.acceleration.aerodynamic()
    ])

# Create global accelerations settings dictionary
acceleration_settings = {"Vehicle": accelerations_settings_vehicle}

# Create acceleration models
acceleration_models = propagation_setup.create_acceleration_models(
    bodies, acceleration_settings,  bodies_to_propagate, central_bodies)

When propagating multiple bodies, the same list of settings may be re-used for multiple bodies. Below, an example is given for the definition of acceleration_settings for multiple bodies (Vehicle1 and Vehicle2) which are undergoing identical accelerations:

Required Show/Hide

from tudatpy.kernel.numerical_simulation import propagation_setup
# Define bodies that are propagated
bodies_to_propagate = ["Vehicle1", "Vehicle2"]

# Define central bodies
central_bodies = ["Earth", "Earth"]

# Define accelerations acting on both vehicles
accelerations_settings_vehicle = dict(
    Sun=
    [
        propagation_setup.acceleration.point_mass_gravity()
    ],
    Moon=
    [
        propagation_setup.acceleration.point_mass_gravity()
    ],
    Earth=
    [
        propagation_setup.acceleration.spherical_harmonic_gravity(5, 5),
        propagation_setup.acceleration.aerodynamic()
    ])

# Create global accelerations settings dictionary
acceleration_settings = {"Vehicle1": accelerations_settings_vehicle,
			             "Vehicle2": accelerations_settings_vehicle}

# Create acceleration models
acceleration_models = propagation_setup.create_acceleration_models(
    bodies, acceleration_settings,  bodies_to_propagate, central_bodies)

Alternatively, separate acceleration settings may be defined for separate bodies and then combined into an acceleration_settings variable. Below, an example for such a case is given when propagating the Earth and Moon:

Required Show/Hide

from tudatpy.kernel.numerical_simulation import propagation_setup
# Define bodies that are propagated
bodies_to_propagate = ["Moon", "Earth"]

# Define central bodies
central_bodies = ["Sun", "Sun"]

# Define accelerations acting on Vehicle
accelerations_settings_moon = dict(
    Sun=
    [
        propagation_setup.acceleration.point_mass_gravity()
    ],
    Earth=
    [
        propagation_setup.acceleration.point_mass_gravity()
    ]
    )

accelerations_settings_earth = dict(
    Sun=
    [
        propagation_setup.acceleration.point_mass_gravity()
    ],
    Moon=
    [
        propagation_setup.acceleration.point_mass_gravity()
    ]
    )


# Create global accelerations settings dictionary.
acceleration_settings = {"Moon": accelerations_settings_moon,
			            "Earth": accelerations_settings_earth}

# Create acceleration models
acceleration_models = propagation_setup.create_acceleration_models(
    bodies, acceleration_settings,  bodies_to_propagate, central_bodies)