/
radiation_pressure.yaml
252 lines (208 loc) · 13.4 KB
/
radiation_pressure.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
#########################################################################
# ███ ███ ██████ ██████ ██ ██ ██ ███████
# ████ ████ ██ ██ ██ ██ ██ ██ ██ ██
# ██ ████ ██ ██ ██ ██ ██ ██ ██ ██ █████
# ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
# ██ ██ ██████ ██████ ██████ ███████ ███████
#########################################################################
# Radiation Pressure Setup ( createBodyShapeModel.h )
extended_summary: |
This module contains a set of factory functions for setting up the
radiation pressure models of celestial bodies in an environment.
#########################################################################
# ███████ ███ ██ ██ ██ ███ ███ ██████
# ██ ████ ██ ██ ██ ████ ████ █
# █████ ██ ██ ██ ██ ██ ██ ████ ██ █████
# ██ ██ ████ ██ ██ ██ ██ ██ █
# ███████ ██ ██ ██████ ██ ██ ██████
#########################################################################
enums:
# py::enum_<tss::RadiationPressureType>
# enum tudat::simulation_setup::RadiationPressureType
- name: RadiationPressureType
short_summary: "Enumeration of available radiation pressure types."
#extended_summary: |
#Enumeration of radiation pressure types supported by tudat.
members:
- name: cannonball_radiation_pressure_interface
- name: panelled_radiation_pressure_interface
- name: solar_sailing_radiation_pressure_interface
######
#########################################################################
# ██████ ██ ██ ██████ ██████ ███████ ██████
# ██ ██ ████ █ █ ██ █
# ██ ██ ██ ██ █████ █████ █████ █████
# ██ ██ ████████ █ █ ██ █
# ██████ ███████ ██ ██ ██████ ██████ ███████ ██████
#########################################################################
classes:
# base class:
#######################################################################
- name: RadiationPressureInterfaceSettings
short_summary: "Base class for providing settings for radiation pressure interface models."
extended_summary: |
Functional (base) class for settings of radiation pressure interface models that require no information in addition to their type.
Radiation pressure interface model settings requiring additional information must be defined using an object derived from this class.
# attributes: none exposed
methods:
- name: ctor # [cpp]
# - name: __init__ # [py]
short_summary: "Constructor." # [cpp]
extended_summary: "Instances of this class are typically not generated by the user. Settings objects for ephemerides should be instantiated through the factory functions of a derived class." # [cpp]
# derived classes:
#######################################################################
- name: CannonBallRadiationPressureInterfaceSettings
short_summary: "Class for defining model settings of a cannonball radiation pressure interface."
extended_summary: "`RadiationPressureInterfaceSettings` derived class for cannonball radiation pressure interface model settings."
methods:
- name: ctor # [cpp]
# - name: __init__ # [py]
short_summary: "Constructor." # [cpp]
extended_summary: "Instances of the `CannonBallRadiationPressureInterfaceSettings` class should be created through the `cannonBallRadiationPressureSettings` factory function." # [cpp]
##############################################################################
# ███████ ██ ██ ███ ██ ██████ ████████ ██ ██████ ███ ██ ██████
# ██ ██ ██ ████ ██ ██ ██ ██ ██ ██ ████ ██ █
# █████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ █████
# ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ █
# ██ ██████ ██ ████ ██████ ██ ██ ██████ ██ ████ ██████
##############################################################################
functions:
# factory functions:
#######################################################################
- name: cannonball # [py]
- name: cannonBallRadiationPressureSettings # [cpp]
short_summary: "Factory function for creating cannonball radiation pressure interface model settings."
extended_summary: |
Factory function for settings object, defining a cannonball radiation pressure interface model,
In this model the effective force is co-linear with the vector from radiation source to the body experiencing the force.
parameters:
- name: source_body # [py]
type: str # [py]
- name: sourceBody # [cpp]
type: std::string # [cpp]
description: "Name of body emitting the radiation."
- name: reference_area # [py]
type: float # [py]
- name: area # [cpp]
type: double # [cpp]
description: "Surface area that undergoes radiation pressure."
- name: radiation_pressure_coefficient # [py]
type: float # [py]
- name: radiationPressureCoefficient # [cpp]
type: double # [cpp]
description: "Radiation pressure coefficient."
- name: occulting_bodies # [py]
type: list[str], default = [""] # [py]
- name: occultingBodies # [cpp]
type: std::vector< std::string > # [cpp]
description: "List of bodies causing (partial) occultation."
returns:
type: CannonBallRadiationPressureInterfaceSettings
description: Instance of the :class:`~tudatpy.numerical_simulation.environment_setup.radiation_pressure.RadiationPressureInterfaceSettings` derived :class:`~tudatpy.numerical_simulation.environment_setup.radiation_pressure.CannonBallRadiationPressureInterfaceSettings` class
examples: |
In this example, we create :class:`~tudatpy.numerical_simulation.environment_setup.radiation_pressure.RadiationPressureInterfaceSettings` using a cannonball radiation pressure model.
The radiating body is the Sun, the body experiencing the radiation pressure force is the "Spacecraft" body; occultations due to the Earth are taken into account:
# [cpp] (%!) Note about multi-body occultation...
.. code-block:: python # [py]
# [py]
# define parameters of the cannonball model # [py]
reference_area_radiation = 4.0 # [py]
radiation_pressure_coefficient = 1.2 # [py]
# define parameter for occulting body # [py]
occulting_bodies = [ "Earth" ] # [py]
# create radiation pressure interface settings # [py]
radiation_pressure_settings = environment_setup.radiation_pressure.cannonball( # [py]
"Sun", # [py]
reference_area_radiation, # [py]
radiation_pressure_coefficient, # [py]
occulting_bodies ) # [py]
# add radiation pressure interface to "Spacecraft" body # [py]
environment_setup.add_radiation_pressure_interface( bodies, "Spacecraft", radiation_pressure_settings ) # [py]
.. code-block:: cpp # [cpp]
# [cpp]
// define parameters of the cannonball model # [cpp]
std::string sourceBody = "Sun"; # [cpp]
double area = 20.0; # [cpp]
const double radiationPressureCoefficient = 1.2; # [cpp]
// define parameter for occulting body and add to list of occulting bodies # [cpp]
std::vector< std::string > occultingBodies; # [cpp]
occultingBodies.push_back( "Earth" ); # [cpp]
// create radiation pressure interface and add to "Spacecraft" body # [cpp]
bodySettings[ "Spacecraft" ]->radiationPressureSettings[ sourceBody ] = std::make_shared< CannonBallRadiationPressureInterfaceSettings >( # [cpp]
sourceBody, area, radiationPressureCoefficient, occultingBodies ); # [cpp]
#######################################################################
- name: panelled # [py]
- name: panelledRadiationPressureInterfaceSettings # [cpp]
short_summary: "Factory function for creating panelled radiation pressure interface model settings."
extended_summary: |
Factory function for settings object, defining panelled radiation pressure interface model.
In this model the solar radiation pressure force is derived from a so-called boxes-and-wings model.
parameters:
- name: source_body # [py]
type: str # [py]
- name: sourceBody # [cpp]
type: std::string # [cpp]
description: "Name of body emitting the radiation."
- name: emissivities # [py]
type: list[float] # [py]
description: List containing the panels' emissivities. # [py]
- name: emissivities # [cpp]
type: std::vector< double > # [cpp]
description: Vector containing the panels' emissivities. # [cpp]
- name: areas # [py]
type: list[float] # [py]
description: List containing the panels' areas. # [py]
- name: areas # [cpp]
type: std::vector< double > # [cpp]
description: Vector containing the panels' areas. # [cpp]
- name: diffusion_coefficients # [py]
type: list[float] # [py]
description: List containing diffuse reflection coefficients of the panels. # [py]
- name: diffusionCoefficients # [cpp]
type: std::vector< double > # [cpp]
description: Vector containing diffuse reflection coefficients of the panels. # [cpp]
- name: surface_normals_in_body_fixed_frame # [py]
type: list[numpy.ndarray[numpy.float64[3, 1]]] # [py]
description: List containing the (constant) surface normals of the panels, expressed in the body-fixed frame. # [py]
- name: surfaceNormalsInBodyFixedFrame # [cpp]
type: std::vector< Eigen::Vector3d > # [cpp]
description: Vector containing the (constant) surface normals of the panels, expressed in the body-fixed frame. # [cpp]
- name: occulting_bodies # [py]
type: list[str], default = [""] # [py]
- name: occultingBodies # [cpp]
type: std::vector< std::string > # [cpp]
description: "List of bodies causing (partial) occultation."
returns:
type: PanelledRadiationPressureInterfaceSettings
description: Instance of the :class:`~tudatpy.numerical_simulation.environment_setup.radiation_pressure.RadiationPressureInterfaceSettings` derived :class:`~tudatpy.numerical_simulation.environment_setup.radiation_pressure.PanelledRadiationPressureInterfaceSettings` class
examples: |
In this example, we create :class:`~tudatpy.numerical_simulation.environment_setup.radiation_pressure.RadiationPressureInterfaceSettings` using a panelled radiation pressure model.
The radiating body is the Sun, the body experiencing the radiation pressure force is the boxes-and-wings - modelled "Spacecraft" body; occultations due to the Earth are taken into account:
.. code-block:: python # [py]
# [py]
# define parameters of the panelled model # [py]
emissivities = [0.1, 0.0, 0.1, 0.1] # emissivity of each panel # [py]
areas = [4.0, 6.0, 2.3, 2,3] # area of each panel # [py]
diffusion_coefficients = [0.46, 0.06, 0.46, 0.46] # diffusion coefficient of each panel # [py]
panel_surface_normals = [ # normals of each panel surfaces in body-fixed reference frame # [py]
[0.0, 0.0, 1.0], # [py]
[0.0, 0.0, -1.0], # [py]
[1.0, 0.0, 0.0], # [py]
[-1.0, 0.0, 0.0] # [py]
] # [py]
# define parameter for occulting body # [py]
occulting_bodies = [ "Earth" ] # [py]
# create radiation pressure interface settings # [py]
radiation_pressure_settings = environment_setup.radiation_pressure.panelled( # [py]
"Sun", # [py]
emissivities, # [py]
areas, # [py]
diffusion_coefficients, # [py]
panel_surface_normals, # [py]
occulting_bodies) # [py]
# add radiation pressure interface to "Spacecraft" body # [py]
environment_setup.add_radiation_pressure_interface( bodies, "Vehicle", radiation_pressure_settings ) # [py]
# [cpp] cpp code snippet unavailable (outdated on tudat-space)
#######################################################################
# missing (w.r.t) tudat-space:
# - Solar Sail Radiation Interface