Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages | Examples

SolarDisturbances.h

Go to the documentation of this file.
00001 //////////////////////////////////////////////////////////////////////////////////////////////////
00002 /*! \file SolarDisturbances.h
00003 *  \brief Solar disturbance function models.
00004 *  \author $Author: jayhawk_hokie $
00005 *  \version $Revision: 1.2 $
00006 *  \date    $Date: 2005/06/10 12:53:28 $
00007 *//////////////////////////////////////////////////////////////////////////////////////////////////
00008 /* 
00009 */
00010 //////////////////////////////////////////////////////////////////////////////////////////////////
00011 
00012 #ifndef __OSESSAME_SOLAR_DISTURBANCES_H__
00013 #define __OSESSAME_SOLAR_DISTURBANCES_H__
00014 #include <matrix/Matrix.h>
00015 #include <utils/Time.h>
00016 #include <orbit/OrbitState.h>
00017 #include <attitude/Attitude.h>
00018 #include <environment/Environment.h>
00019 #include <vector.h>
00020 using namespace std;
00021 using namespace O_SESSAME;
00022 
00023 /*! \brief Solar radiation pressure environmental disturbance force function.
00024 * @ingroup EnvironmentForceFunctions
00025 *
00026 Another non-conservative disturbance force, like atmospheric drag, is due to the fact that light photons can 
00027 impart a force on an absorbing or reflecting body. The force of these photons is usually very low, but can vary 
00028 largely between eclipse, based on the body, and during solar storms. The solar-radiation pressure is even the 
00029 basis for such spacecraft propulsion designs as solar sails, and so should be used for accurate models.
00030 
00031 The solar pressure, \f$p_{SR}\f$, or change in momentum, is the main parameter in determing the force of the 
00032 solar-radiation pressure. For the Earth, this has a nominal value of \f$4.51 \times 10^{-6}\frac{N}{m^{2}}\f$, 
00033 where more precise values can be calculated depending on the time of year, as well as position from the Sun. The 
00034 effect of solar-radiation pressure also varies due to the reflectivity, \f$c_{R}\f$, of the spacecraft, where 0.0 
00035 indicates no effect, 1.0 is a completely absorbing body, and 2.0 is an absorbing and reflecting body. 
00036 
00037 The combined force of the solar radiation pressure is found to be:
00038 \f[
00039     \vec{a}_{radiation} = -\frac{p_{SR}c_{R}A_{S}}{m}\frac{\vec{\bf{r}}_{\odot sat}}{\left|\vec{\bf{r}}_{\odot sat}\right|}
00040 \f]
00041 where \f$\vec{\bf{r}}_{\odot sat}\f$ is the distance from the satellite to the sun (or light-emitting body), and \f$A_{S}\f$ is the spacecraft's exposed area to the sun. This value of area is very important for calculating the disturbance difference as the spacecraft passes from full sunlight, into eclipse, or when being shadowed by another body (moon or another spacecraft). 
00042 
00043 Using basic geometry, it can be shown that simple conditions for determining if a satellite is in sunlight are\cite{Vallado:97}:
00044 \f[
00045     \tau_{min} = \frac{\left|\vec{\bf{r}}_{sat}\right|^{2}-\vec{\bf{r}}_{sat}\cdot\vec{\bf{r}}_{\odot}}{\left|\vec{\bf{r}}_{sat}\right|^{2} + \left|\vec{\bf{r}}_{\oplus}\right|^{2}-2\vec{\bf{r}}_{sat}\cdot\vec{\bf{r}}_{\odot}}
00046 \f] 
00047 \f[
00048     \mbox{Sunlight if }   \tau_{min} < 0\mbox{ or }\tau_{min}>1  
00049 \f] 
00050 \f[
00051     \mbox{ or }   \left|\vec{c}\left(\tau_{min}\right)\right|^{2}  = \left(1-\tau_{min}\right)\left|\vec{\bf{r}}_{sat}\right|^{2}+\left(\vec{\bf{r}}_{sat}\cdot\vec{\bf{r}}_{\oplus}\right)\tau_{min}\geq 1.0  
00052 \f]
00053  
00054 * \todo Add checking for eclipse.
00055 * @param _currentTime current simulation time
00056 * @param _currentOrbitState current orbit state, including representation and reference frame
00057 * @param _currentAttitudeState current attitude state, including rotation and reference frame
00058 * @param _parameterList EnvFuncParamaterType parameter list for external variables
00059     \par 
00060         \f[\begin{bmatrix}
00061         \left[r_{\odot sat_{x}}, r_{\odot sat_{y}}, r_{\odot sat_{z}}\right]^{T} \\
00062          m, mass (kg) \\ p_{SR}, solar pressure (N/m^2) \\ c_{R}, reflectivity \\ A, Area (m^2) 
00063         \end{bmatrix}\f]
00064         \f$r_{\odot sat}\f$ = distance from satellite to the sun (m)
00065 * @return This force functions returns a 3-element vector of forces (x,y,z) due to solar radiation pressure using a 
00066 *        simplified force model.
00067 */
00068 Vector SolarRadiationPressureForceFunction(const ssfTime &_currentTime, const OrbitState  &_currentOrbitState, const AttitudeState &_currentAttitudeState, const EnvFuncParamaterType &_parameterList)
00069 {
00070     static Vector Forces(3);
00071     static Vector SunVector(3);
00072     static double p_SR, c_R, m, A_S;
00073     SunSatVector(_) = *(reinterpret_cast<Vector*>(_parameterList[0]));
00074     m    = *(reinterpret_cast<double*>(_parameterList[1]));
00075     p_SR = *(reinterpret_cast<double*>(_parameterList[2]));
00076     c_R  = *(reinterpret_cast<double*>(_parameterList[3]));
00077     A_R  = *(reinterpret_cast<double*>(_parameterList[4]));
00078     
00079     Forces = -p_SR * c_R * A_S / m * SunSatVector / norm2(SunSatVector);
00080     return Forces;
00081 }
00082 
00083 #endif
00084 // Do not change the comments below - they will be added automatically by CVS
00085 /*****************************************************************************
00086 *       $Log: SolarDisturbances.h,v $
00087 *       Revision 1.2  2005/06/10 12:53:28  jayhawk_hokie
00088 *       Changed header file format to make it easier to link to the spacecraft code by only having to specify dsacss/dep/spacecraft/src (ex. "file.h" changed to <dir/file.h> where dir is a folder in src).
00089 *       
00090 *       Revision 1.1.1.1  2005/04/26 17:40:56  cakinli
00091 *       Adding OpenSESSAME to DSACSS distrib to capture fixed version.
00092 *       
00093 *       Revision 1.3  2003/10/18 21:37:28  rsharo
00094 *       Removed "../utils" from all qmake project paths. Prepended "utils
00095 *       /" to all #include directives for utils. Removed ".h" extensions from STL header
00096 *       s and referenced STL components from "std::" namespace.  Overall, changed to be
00097 *       more portable.
00098 *       
00099 *       Revision 1.2  2003/06/12 21:51:54  nilspace
00100 *       Removed & alignment characters from comments.
00101 *       
00102 *       Revision 1.1  2003/06/12 17:58:42  nilspace
00103 *       Initial Submission.
00104 *       
00105 *
00106 ******************************************************************************/

Generated on Wed Sep 5 12:54:25 2007 for DSACSS Operational Code by  doxygen 1.3.9.1