User Manual 4.0 Properties and models: Mass and Forces

De Wiki
Révision de 20 février 2018 à 13:12 par Admin (discussion | contributions) (RadiativeCrossSectionProperty)

Aller à : navigation, rechercher

Introduction

Scope

The models presented here are useful for forces computations.


Javadoc

The AeroModel and the DirectRadiativeModel are available in the package fr.cnes.sirius.patrius.assembly.models.

The associated properties are available in the package fr.cnes.sirius.patrius.assembly.properties.

Links

None as of now.

Useful Documents

None as of now.

Package Overview

None as of now.

Features Description

Aero model

The aerodynamic model (see AeroModel) is based on an instance of Assembly. It implements the DragSensitive interface which makes it suitable for drag force models. It provides the drag acceleration as well as its partial derivatives.

The model supports two types of shapes to represent an assembly from the aerodynamic point of view: sphere, cylinder or parallelepiped, and facet.

Thus, in order to create an aerodynamic model, the assembly must have :

  • Parts with mass properties (MassProperty) and
  • Parts with either :
    • an AeroFacetProperty  : defining the normal and tangential aerodynamic coefficients (Cn and Ct) on a facet.
    • an AeroSphereProperty : to define a drag coefficient (Cx) on a spherical, cylindral or parallelepipedal shape.

Parts that have aerodynamic properties are not required to have a mass property (eg the solar panels may have aerodynamic properties without mass properties). The acceleration applied on the assembly is the sum over the forces provided by each of those parts divided by the total mass of the assembly.

Given an initial orbit bulletin, initialSpacecraftState, a user sample is given below:

// create an assembly builder
final AssemblyBuilder builder = new AssemblyBuilder();
 
// main part with mass (bus)
builder.addMainPart("bus");
builder.addProperty(new MassProperty(5000.), "bus");
 
// solar panel with aerodynamics properties
builder.addPart("solarPanel", "bus", transform);
 
// the AERO_SPHERE property (simplified representation)
builder.addProperty(new AeroSphereProperty(2., 1.), "solarPanel");
 
// get the generated assembly
final Assembly assembly = builder.returnAssembly();
 
// link the assembly to the frames tree, for forces computation
assembly.initMainPartFrame(initialSpacecraftState);
 
// create an aerodynamic model
final AeroModel aeroModel = new AeroModel(assembly);

Tabulated aero model

The aerodynamic model (see GlobalAeroModel) is a complex aerodynamic model based on a generic user-defined drag coefficient. The drag coefficient is provided using an implementation of DragCoefficientProvider. It returns absorption, specular and diffuse parts of drag coefficients in satellite frame. It is based on an instance of Assembly. The main part of the assembly must have a AeroProperty

An implementation of the interface DragCoefficientProvider with a file reader is available (see GlobalDragCoefficientProvider): the file contains the model parameters (azimut, elevation, velocity factor) and associated output (12 coefficients : 3 for absorption, 3 for specular and 3 for each diffuse front/rear). The value of these coefficients is obtained by interpolation at the considered point (linear/spline interpolation in 3D functions for GlobalAeroModel since we have a 3 parameters model).

Drag Lift model

The DragLift model is based on an instance of Assembly. It implements the DragSensitive interface and provides the drag and lift acceleration (see corresponding JavaDoc).

In order to create an aerodynamic model based on the DragLift model, the assembly must have :

  • Parts with mass properties (MassProperty) and
  • Parts with Aero global properties (see AeroGlobalProperty)

Given an initial orbit bulletin, initialSpacecraftState, a user sample is given below:

// create an assembly builder
final AssemblyBuilder builder = new AssemblyBuilder();
 
// main part with mass (bus)
builder.addMainPart("bus");
builder.addProperty(new MassProperty(5000.), "bus");
 
// Add an AeroGlobal property to the assembly
builder.addProperty(new AeroGlobalProperty(2, 0, new ConstantFunction(1.)), "bus");
 
// get the generated assembly
final Assembly assembly = builder.returnAssembly();
 
// link the assembly to the Orekit frames tree, for forces computation
assembly.initMainPartFrame(initialSpacecraftState);
 
final DragLiftModel dragLift = new DragLiftModel(assembly.returnAssembly());

Properties for aero computation

AeroFacetProperty

An aerodynamic facet property contains an attribute of the [MAT_GEO_Facets Facet] type and two attributes for the two drag coefficients (normal coefficient, tangent coefficient). It is a required property to create aerodynamic models. This class also defines a facet from an orientation and an area. This property is required to create aerodynamic models and allows the part to contribute to the atmospheric pressure applied on an assembly.

Remember that the facet will create drag only when the normal to the facet faces the wind.

The property type associated is AERO_FACET.

AeroCrossSectionProperty

This class is a cross section property providing the cross section of shapes such as sphere, cylinder or parallelepiped. An aerodynamic cross section property contains three attributes:

  • the shape as a CrossSectionProvider
  • the drag coefficient

This cross section is used in aero models for acceleration due to drag force computation.
The property generalizes the AeroSphereProperty only used for the sphere case.
The property type associated is AERO_CROSS_SECTION.

AeroSphereProperty

An aerodynamic sphere property contains three attributes:

  • the sphere radius;
  • the drag coefficient

This property is required to create aerodynamic models and allows the part to contribute to the atmospheric pressure applied on an assembly. The atmospheric height scale factor is used only when computing the partial derivatives with respect to position, using an approximated formula; it is not compulsory for the user to set its value (when not, the derivatives with respect to position will be zero).

The property type associated is AERO_CROSS_SECTION.
This property extends the AeroCrossSectionProperty.

AeroGlobalProperty

This class allows the user to define the aerodynamic properties of the different parts that constitute the assembly.
The attributes of an AeroGlobal property are:

  • C,,x,,: the drag coefficient
  • C,,z,,: the lift coefficient
  • S: the surface used for the computation of aerodynamics' forces.

The user has two possibilities when constructing a new AeroGlobal property:

  • Variable aerodynamics' coefficients (of the ParamDiffFunction type) and a constant surface,
  • Constant aerodynamics' coefficients and a variable surface (of the ParamDiffFunction type).

Direct radiative model

The radiation pressure model (see DirectRadiativeModel) is based on an instance of Assembly. It implements the radiative pressure interface (see RadiationSensitive). This class provides the acceleration applied on the assembly.

The acceleration is computed from all the parts of the assembly and finally a coefficient k0 is multiplied to the acceleration force. Its default value (if not given) is 1.0.

The model supports two types of shapes to represent an assembly from the radiative point of view: sphere, cylinder, parallelepiped, and facet.

Thus, in order to create a radiative model, the assembly must contain parts with the required properties:

  • RadiativeProperty : to define the thermo-optical coefficients.
  • RadiativeSphereProperty or RadiativeFacetProperty : to define a part with a spherical, cylindral or parallelepipedal shape, or with a facet.

The acceleration applied on the assembly is the sum over the accelerations provided by each part. The parts with the properties described above can contribute to the computation.

A user sample is given below:
// we assume that an assembly is defined, as well as input parameters for the computation
// (instance of a SpacecraftState and the incoming radiation flux)
 
// create a radiative model
final double k0 = 0.98;
final DirectRadiativeModel radiativeModel = new DirectRadiativeModel(assembly, k0);
 
// compute the acceleration due to the radiation pressure
final Vector3D computedAcc = radiativeModel.radiationPressureAcceleration(spacecraftState, flux);

Rediffused radiative model

The rediffused solar pressure model (see RediffusedRadiativeModel) is based on an instance of Assembly. It implements the rediffused radiative pressure interface (see RediffusedRadiationSensitive). The class RediffusedRadiationPressure implements the interface (see ForceModel) and provides the acceleration applied on the assembly (method "redistributedRadiationPressureAcceleration"). The acceleration is computed from all the parts of the assembly.

The model supports two types of shapes to represent an assembly from the radiative point of view: sphere, cylinder, parallelepiped, and facet.

Thus, in order to create a rediffused radiative model, the assembly must contain parts with the required properties:

  • RadiativeProperty : to define the albedo thermo-optical coefficients.
  • RadiativeIRProperty : to define the infrared thermo-optical coefficients
  • RadiativeSphereProperty or RadiativeFacetProperty : to define a part with a spherical, cylindral or parallelepipedal shape, or with a facet.

The acceleration applied on the assembly is the sum over the accelerations provided by each part. The parts with the properties described above can contribute to the computation.

A user sample is given below:

// create a rediffused radiative model (k0 albedo = 1; k0 infrared = 1)
final IEmissivityModel model = new KnockeRiesModel();
final FactoryManagedFrame itrfFrame = FramesFactory.getITRF();
final CelestialBody sun = CelestialBodyFactory.getSun();
final RediffusedRadiativeModel rm = new RediffusedRadiativeModel(false, false, 1, 1, assembly);
 
// create a rediffused radiative force instance (with 10 coronas, 10 meridians)
final RediffusedRadiationPressure r = new RediffusedRadiationPressure(sun, itrfFrame, 10, 10, model, rm);
 
// compute the acceleration due to the rediffused radiation pressure
final Vector3D computedAcc = r.computeAcceleration(spacecraftState);

Radiative properties

RadiativeProperty

A radiative property contains three attributes, for the three thermo-optical coefficients of a part. It is a required property to create radiative models or rediffused radiative models (albedo pressure).

The property type associated is RADIATIVE.

RadiativeIRProperty

A infrared radiative property contains three attributes, for the three thermo-optical coefficients of a part. It is a required property to create rediffused radiative models (infrared emissivity pressure).

The property type associated is RADIATIVEIR.

RadiativeFacetProperty

A radiative facet property contains an attribute of the [MAT_GEO_Facets Facet] type. This class defines a facet from an orientation and an area. This property is required to create radiative or rediffused radiative models and allows the part to contribute to the radiation pressure, albedo pressure or infrared emissivity pressure applied on an assembly.


The property type associated is RADIATIVE_FACET.

RadiativeCrossSectionProperty

This class is a cross section property providing the cross section of shapes such as sphere, cylinder or parallelepiped. A radiative cross section property contains the shape as a CrossSectionProvider, as attribute.
This cross section is used in radiative models for radiation pressure acceleration computation.
The property generalizes the RadiaitveSphereProperty only used for the sphere case.

The property type associated is
'''RADIATIVE_CROSS_SECTION'''
.


RadiativeSphereProperty

A radiative sphere property contains an attribute for the sphere radius. This property is required to create radiative or rediffused radiative models and allows the part to contribute to the radiation pressure, albedo pressure or infrared emissivity pressure applied on an assembly.

This property extends RadiativeCrossSectionProperty
The property type associated is RADIATIVE_CROSS_SECTION.

Mass model

The assembly mass model implements the fr/cnes/sirius/patrius/propagation/MassProvider.html interface and is able to interact with a Numerical propagator with regards to changing masses (such as that of the propellant tank). To date, the only implemented class is fr/cnes/sirius/patrius/assembly/models/MassModel.html.

An instance of fr/cnes/sirius/patrius/assembly/models/MassModel.html can be created from an Assembly as long as the Assembly has parts that have a fr/cnes/sirius/patrius/assembly/properties/MassProperty.html. Upon creation, every one of these properties is associated to an additional equation (MassEquation) and an initial additional state (that of the MassProperty at instanciation time). Different parts can be associated to the same mass property (e.g. thrusters using the same tank).

String thruster = "thruster";
 
// create an assembly
AssemblyBuilder builder = new AssemblyBuilder();
 
builder.addMainPart(thruster);
 
MassProperty massProp = new MassProperty(9000.);
 
builder.addProperty(massProp, thruster);
 
Assembly assembly = builder.returnAssembly();
 
// create a mass model
MassModel model = new MassModel(assembly);

The user can call the getTotalMass() method to obtain the total mass of the spacecraft. Additionally, the user cal call the getMass(String) method to see the mass of a specific part. For example, in order to see the mass of the part called "thruster", the user can execute the following instruction:

final double partMass = model.getMass(thruster);

Upon creating a NumericalPropagator and a mass model, the user MUST pass along the additional equations to the propagator, to make sure that the propagation updates the mass properties of the spacecraft (e.g. in case there are any maneuvers involved) :

propagator.setMassProviderEquation(model);

The provided mass model should be the same as provided for force models to ensure propagation consistency.

In order to create force models (such as continuous maneuvers) that modify the mass of a tank, the user must indicate which tank the force model uses. This is done by giving, at instanciation, the MassProvider model as well as the TankProperty containing the name of the tank used for the maneuver :

ContinuousThrustManeuver constant = new ContinuousThrustManeuver(date, dt, propulsiveProperty, direction, massModel, tankProperty);
propagator.addForceModel(constant);

By doing so, when the thrusters fire, the NumericalPropagator can update the mass of the correct part (tank).

The IInertiaProperty implementations all use a MassProperty and all the "Inertia" models implement the MassProvider interface and associate each detected MassProperty to a MassEquation.

Mass property

A mass property simply contains an attribute for the mass of the considered part.

The property type associated is
'''MASS'''
.

Tank property

The TankProperty gathers all properties of a fuel tank, it contains the following attributes :

  • a name : the name of the part whose mass evolves (during a maneuver for instance)
  • a mass : the initial mass of the tank

As this property contains a MassProperty inside, one has to add only the tank property to the Assembly to propagate the mass equation of the tank on a propagation. Note that it is not possible to add a TankProperty to a part and then an additionnal MassProperty to the same part, because the mass property is included in the first property : an exception will be risen in that case.

The implementation of the TankProperty ensures the synchronisation of the tank part with the rest of the Assembly in the propagation process.
This property is used to define ContinuousThrustManeuver which are then added to the propagator as forces in order to make a propagation with maneuvers.

Propulsive property

The PropulsiveProperty) gathers all properties to define a thrust, it has the following attributes :

  • a name : the name of the property
  • ISP value (s) as a function or a Parameter
  • thrust force value (N) as a function or a Parameter

This property is meant to be used in maneuvers as global containers for all thrust information. Thrust force and ISP can be defined by dedicated constructors as a constant (double or PropulsiveProperty)) or as function depending of the SpacecraftState value, using objects of type IDependantVariable<SpacecraftState>.

Dedicated getters are available to retrieved thrust and ISP values with respect to the SpacecraftState value. This property is used to define ContinuousThrustManeuver which are then added to the propagator as forces in order to make a propagation with maneuvers.

Partial derivatives

This section makes a summary of available partial derivatives with respect to the state (position and velocity) for all aerodynamic models implemented in PATRIUS. The following table gives these information :

|=(% colspan="3" %)Partial derivatives|=(% colspan="6" %)AeroModel|=(% colspan="6" %)GlobalAeroModel|=(% colspan="6" %)StelaAeroModel|=(% colspan="6" %)DrafLiftModel |(% colspan="3" %)with respect to position|=(% colspan="6" %)yes|=(% colspan="6" %)yes|=(% colspan="6" %)yes|=(% colspan="6" %)no |(% colspan="3" %)with respect to velocity|=(% colspan="6" %)yes|=(% colspan="6" %)yes|=(% colspan="6" %)yes|=(% colspan="6" %)no

Getting Started

Modèle:SpecialInclusion prefix=$theme sub section="GettingStarted"/

Contents

Interfaces

|=(% colspan="3" %)Classe|=(% colspan="6" %)Summary|=(% colspan="1" %)Javadoc |(% colspan="3" %)WallGasTemperatureProvider|(% colspan="6" %)Interface for wall gas temperature providers.|(% colspan="1" %)... |(% colspan="3" %)DragCoefficientProvider|(% colspan="6" %)Interface for drag coefficients.|(% colspan="1" %)... |(% colspan="3" %)AlphaProvider|(% colspan="6" %)Interface for alpha coefficient (used in Cook model).|(% colspan="1" %)...

Classes

|=(% colspan="3" %)Classe|=(% colspan="6" %)Summary|=(% colspan="1" %)Javadoc |(% colspan="3" %)RadiativeProperty|(% colspan="6" %)This class is a part property for the PATRIUS assembly. It is the radiative characterization of a part.|(% colspan="1" %)... |(% colspan="3" %)RadiativeIRProperty|(% colspan="6" %)This class is a part property for the PATRIUS assembly. It is the infrared radiative characterization of a part.|(% colspan="1" %)... |(% colspan="3" %)RadiativeCrossSectionProperty|(% colspan="6" %)This class is a part property for the PATRIUS assembly. It allows to define a CrossSectionProvider, that is a shape used for the radiative models.|(% colspan="1" %)... |(% colspan="3" %)RadiativeSphereProperty|(% colspan="6" %)This class is a part property for the PATRIUS assembly. It allows to define a sphere, that is a shape used for the radiative models.|(% colspan="1" %)... |(% colspan="3" %)RadiativeFacetProperty|(% colspan="6" %)This class is a part property for the PATRIUS assembly. It allows to define a facet, that is a shape used for the radiative models.|(% colspan="1" %)... |(% colspan="3" %)AeroCrossSectionProperty|(% colspan="6" %)This class is a part property for the PATRIUS assembly. It allows to define a CrossSectionProvider, that is a shape used for the aerodynamic models.|(% colspan="1" %)... |(% colspan="3" %)AeroSphereProperty|(% colspan="6" %)This class is a part property for the PATRIUS assembly. It allows to define a sphere, that is a shape used for the aerodynamic models.|(% colspan="1" %)... |(% colspan="3" %)AeroFacetProperty|(% colspan="6" %)This class is a part property for the PATRIUS assembly. It allows to define a facet, that is a shape used for the aerodynamic models.|(% colspan="1" %)... |(% colspan="3" %)MassProvider|(% colspan="6" %)Interface that represents a spacecraft that has parts that can change masses.|(% colspan="1" %)... |(% colspan="3" %)MassProperty|(% colspan="6" %)This class is a part property for the PATRIUS assembly. It allows to define a mass for a part.|(% colspan="1" %)... |(% colspan="3" %)TankProperty|(% colspan="6" %)This class is a part property for the PATRIUS assembly. It gathers all properties of a fuel tank.|(% colspan="1" %)... |(% colspan="3" %)PropulsiveProperty|(% colspan="6" %)This class is a part property for the PATRIUS assembly. It gathers all thrust properties.|(% colspan="1" %)... |(% colspan="3" %)AeroModel|(% colspan="6" %)This class is an aerodynamic model for the PATRIUS assembly.|(% colspan="1" %)... |(% colspan="3" %)DirectRadiativeModel|(% colspan="6" %)This class is an direct solar radiative model for the PATRIUS assembly.|(% colspan="1" %)... |(% colspan="3" %)RediffusedRadiativeModel|(% colspan="6" %)This class is an rediffused radiative model for the PATRIUS assembly.|(% colspan="1" %)... |(% colspan="3" %)CnCookModel|(% colspan="6" %)Cook model for drag normal coefficient.|(% colspan="1" %)... |(% colspan="3" %)CtCookModel|(% colspan="6" %)Cook model for drag tangential coefficient.|(% colspan="1" %)... |(% colspan="3" %)ConstantWallGasTemperature|(% colspan="6" %)Class for constant wall gas temperature.|(% colspan="1" %)... |(% colspan="3" %)CookWallGasTemperature|(% colspan="6" %)Class for wall gas temperature following Cook model.|(% colspan="1" %)... |(% colspan="3" %)GinsWallGasTemperature|(% colspan="6" %)Class for wall gas temperature following Cook model adapted to Gins.|(% colspan="1" %)... |(% colspan="3" %)GlobalAeroModel|(% colspan="6" %)Aerodynamic model with generic user defined drag coefficient.|(% colspan="1" %)... |(% colspan="3" %)GlobalDragCoefficientProvider|(% colspan="6" %)Implementation of the DragCoefficientProvider computing aero coefficients as 3D functions being interpolated.|(% colspan="1" %)... |(% colspan="3" %)AeroProperty|(% colspan="6" %)Aerodynamic properties for generic user defined drag coefficient.|(% colspan="1" %)... |(% colspan="3" %)DragCoefficient|(% colspan="6" %)Drag coefficient container (absorption, specular and diffuse parts).|(% colspan="1" %)... |(% colspan="3" %)AlphaConstant|(% colspan="6" %)Constant alpha coefficient.|(% colspan="1" %)... |(% colspan="3" %)AlphaCookModel|(% colspan="6" %)Alpha coefficient following Cook law.|(% colspan="1" %)...