C++ Module: fuelTank
Executive Summary
This class is an instantiation of the stateEffector abstract class and implements an effector representing a fuel tank. This fuel tank has one state associated with it and is the mass of the fuel inside the tank. The module is a fuel tank effector attached to a rigid body hub and has the following functions:
Compute tank properties depending on the tank model being used
Provides its contributions to the mass properties of the spacecraft
Provides its contributions to the back-substitution matrices
Computes its derivative for its mass flow rate using the vector of attached thrusters
Provides its contributions to energy and momentum of the spacecraft
The module
PDF Description
contains further information on this module’s computations.
Message Connection Descriptions
The following table lists all the module input and output messages. The module msg variable name is set by the user from python. The msg type contains a link to the message structure definition, while the description provides information on what this message is used for.
Msg Variable Name |
Msg Type |
Description |
|---|---|---|
fuelTankOutMsg |
fuel tank output message name |
|
fuelLeakRateInMsg |
optional fuel leak mass flow rate input message that overrides |
User Guide
The fuel tank effector module must be passed a tank model
fuelTankEffector = fuelTank.FuelTank()
tankModel = fuelTank.FuelTankModelConstantVolume()
fuelTankEffector.setTankModel(tankModel)
Fuel tank configuration values should be set and read with the module setter and getter methods. Direct Python access to
the legacy public variables nameOfMassState, dcm_TB, r_TB_B, updateOnly, and fuelLeakRate is
deprecated and raises a deprecation warning.
The configurable values are:
setNameOfMassState()/getNameOfMassState(): optional state name used when registering the fuel tank mass state. Set this before simulation initialization if a custom state name is required.setDcm_TB()/getDcm_TB(): direction cosine matrix from the body frameBto the tank frameT.setR_TB_B()/getR_TB_B(): position vector from the body-frame origin to the tank point, expressed in body-frame components in meters.setUpdateOnly()/getUpdateOnly(): flag selecting update-only mass depletion. The default value isTrue. Set this toFalseto include the additional mass-depletion back-substitution contributions.setFuelLeakRate()/getFuelLeakRate(): positive fuel mass flow rate leaving the tank in kg/s. This leak rate is added to any attached thruster fuel consumption and reduces the reported fuel mass without applying force or torque to the spacecraft. The leak stops when the available tank propellant reaches zero, and the module logs aBSK_WARNINGthe first time depletion reaches an empty tank.
The leak rate can also be supplied through the optional fuelLeakRateInMsg input message. If this message is
connected, the message massFlowRate value overrides the value configured with setFuelLeakRate().
fuelTankEffector.setNameOfMassState("fuelTankMass1")
fuelTankEffector.setDcm_TB([[1.0, 0.0, 0.0],
[0.0, 1.0, 0.0],
[0.0, 0.0, 1.0]])
fuelTankEffector.setR_TB_B([[0.0], [0.0], [0.1]]) # [m]
fuelTankEffector.setUpdateOnly(True)
fuelTankEffector.setFuelLeakRate(1.0e-5) # [kg/s]
fuelLeakRateMsgData = messaging.MassFlowRateMsgPayload()
fuelLeakRateMsgData.massFlowRate = 2.0e-5 # [kg/s]
fuelLeakRateMsg = messaging.MassFlowRateMsg().write(fuelLeakRateMsgData)
fuelTankEffector.fuelLeakRateInMsg.subscribeTo(fuelLeakRateMsg)
A thruster effector can be attached to a tank effector to simulate fuel mass depletion by thruster operation.
fuelTankEffector.addThrusterSet(thrustersEffector)
-
class FuelTankModel
- #include <fuelTank.h>
Tank model class
Subclassed by FuelTankModelCentrifugalBurn, FuelTankModelConstantDensity, FuelTankModelConstantVolume, FuelTankModelEmptying, FuelTankModelUniformBurn
Public Functions
-
virtual void computeTankProps(double mFuel) = 0
class method
-
virtual void computeTankPropDerivs(double mFuel, double mDotFuel) = 0
class method
-
inline FuelTankModel()
-
virtual ~FuelTankModel() = default
Public Members
-
double propMassInit = {}
[kg] Initial propellant mass in tank
-
double maxFuelMass = 1.0
[kg] maximum tank mass
-
Eigen::Matrix3d IPrimeTankPntT_T
[kg m^2/s] Derivative of inertia of tank about pnt T in B frame comp.
-
virtual void computeTankProps(double mFuel) = 0
-
class FuelTankModelConstantVolume : public FuelTankModel
- #include <fuelTank.h>
Tank constant volume class
Public Functions
-
FuelTankModelConstantVolume() = default
-
~FuelTankModelConstantVolume() override = default
-
inline virtual void computeTankProps(double mFuel) override
class method
-
inline virtual void computeTankPropDerivs(double mFuel, double mDotFuel) override
class method
Public Members
-
double radiusTankInit = {}
[m] Initial radius of the spherical tank
-
FuelTankModelConstantVolume() = default
-
class FuelTankModelConstantDensity : public FuelTankModel
- #include <fuelTank.h>
Tank constant density class
-
class FuelTankModelEmptying : public FuelTankModel
- #include <fuelTank.h>
Tank model emptying class
Public Functions
-
FuelTankModelEmptying() = default
-
~FuelTankModelEmptying() override = default
-
inline virtual void computeTankProps(double mFuel) override
class method
-
inline virtual void computeTankPropDerivs(double mFuel, double mDotFuel) override
class method
Public Members
-
double radiusTankInit = {}
[m] Initial radius of the spherical tank
-
double rhoFuel = {}
[kg/m^3] density of the fuel
-
double thetaStar = {}
[rad] angle from vertical to top of fuel
-
double thetaDotStar = {}
[rad/s] derivative of angle from vertical to top of fuel
-
double thetaDDotStar = {}
[rad/s^2] second derivative of angle from vertical to top of fuel
-
FuelTankModelEmptying() = default
-
class FuelTankModelUniformBurn : public FuelTankModel
- #include <fuelTank.h>
Tank model class for a uniform burn
-
class FuelTankModelCentrifugalBurn : public FuelTankModel
- #include <fuelTank.h>
Tank model class for a centrifugal burn
-
class FuelTank : public StateEffector, public SysModel
- #include <fuelTank.h>
Fuel tank effector model class
Public Functions
-
FuelTank()
-
~FuelTank()
-
void writeOutputMessages(uint64_t currentClock)
Compute fuel tank mass properties and outputs them as a message.
- Parameters:
currentClock – The current simulation time (used for time stamping)
-
void UpdateState(uint64_t currentSimNanos) override
Fuel tank writes out its messages
- Parameters:
currentSimNanos – The current simulation time in nanoseconds
set fuel tank model
- Parameters:
model – fuel tank model type
-
void setDcm_TB(const Eigen::Matrix3d &dcm_TB)
— Setter for the tank frame orientation
set fuel tank orientation relative to the hub frame
-
Eigen::Matrix3d getDcm_TB() const
— Getter for the tank frame orientation
get fuel tank orientation relative to the hub frame
-
void setR_TB_B(const Eigen::Vector3d &r_TB_B)
[m] Setter for the tank location
set fuel tank location relative to the hub frame
-
Eigen::Vector3d getR_TB_B() const
[m] Getter for the tank location
get fuel tank location relative to the hub frame
-
void setUpdateOnly(bool updateOnly)
— Setter for update only mass depletion
set update only mass depletion flag
-
bool getUpdateOnly() const
— Getter for update only mass depletion
get update only mass depletion flag
-
void setFuelLeakRate(double fuelLeakRate)
[kg/s] Setter for the fuel leak rate
set fuel leak rate
-
double getFuelLeakRate() const
[kg/s] Getter for the fuel leak rate
get fuel leak rate
-
void pushFuelSloshParticle(FuelSlosh *particle)
— Attach fuel slosh particle
Attach a fuel slosh particle to the tank
-
void registerStates(DynParamManager &states) override
— Register mass state with state manager
Register states. The fuel tank has one state associated with it: mass, and it also has the responsibility to call register states for the fuel slosh particles
-
void linkInStates(DynParamManager &states) override
— Give the tank access to other states
Link states that the module accesses
-
void updateEffectorMassProps(double integTime) override
— Add contribution mass props from the tank
Fuel tank add its contributions the mass of the vehicle.
-
void setNameOfMassState(const std::string &nameOfMassState)
— Setter for fuel tank mass state name
optionally set the name of the mass state to be used by the state manager
-
std::string getNameOfMassState() const
— Getter for fuel tank mass state name
get the name of the mass state used by the state manager
-
void addThrusterSet(ThrusterDynamicEffector *dynEff)
— Add DynamicEffector thruster
Attach a thruster dynamic effector to the tank
-
void addThrusterSet(ThrusterStateEffector *stateEff)
— Add StateEffector thruster
Attach a thruster state effector to the tank
-
void updateContributions(double integTime, BackSubMatrices &backSubContr, Eigen::Vector3d sigma_BN, Eigen::Vector3d omega_BN_B, Eigen::Vector3d g_N) override
— Back-sub contributions
Fuel tank adds its contributions to the matrices for the back-sub method.
Public Members
-
std::vector<ThrusterDynamicEffector*> thrDynEffectors
— Vector of dynamic effectors for thrusters
-
std::vector<ThrusterStateEffector*> thrStateEffectors
— Vector of state effectors for thrusters
-
ReadFunctor<MassFlowRateMsgPayload> fuelLeakRateInMsg
(optional) fuel leak mass flow rate input message
-
Message<FuelTankMsgPayload> fuelTankOutMsg = {}
— fuel tank output message name
-
FuelTankMsgPayload fuelTankMassPropMsg = {}
instance of messaging system message struct
-
std::string nameOfMassState = {}
— Legacy public mass state name; Python users should use accessors
-
Eigen::Vector3d r_TB_B
[m] Legacy public tank position in B frame; Python users should use accessors
-
bool updateOnly = true
— Legacy public update-only flag; Python users should use accessors
-
double fuelLeakRate = {}
[kg/s] Legacy public leak rate; Python users should use accessors
Private Members
-
double fuelConsumption = {}
[kg/s] rate of fuel being consumed
-
double tankFuelConsumption = {}
[kg/s] rate of fuel being consumed from tank
-
std::shared_ptr<FuelTankModel> fuelTankModel
— style of tank to simulate
-
bool emptyTankWarningPrinted = false
— flag indicating if the empty tank warning has been logged
Private Static Attributes
-
static uint64_t effectorID = 1
[] ID number of this fuel tank effector
-
FuelTank()