Date started: 01/21/08
Purpose: Encapsulates the buoyant forces
- ------------- Copyright (C) 2008 Anders Gidenstam -------------
- ------------- Copyright (C) 2008 Jon S. Berndt (jsb@hal-pc.org) -------------
+ ------------- Copyright (C) 2008 - 2010 Anders Gidenstam -------------
+ ------------- Copyright (C) 2008 Jon S. Berndt (jon@jsbsim.org) -------------
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the Free Software
#include "FGBuoyantForces.h"
#include "FGMassBalance.h"
-#include <input_output/FGPropertyManager.h> // Need?
+#include "input_output/FGPropertyManager.h"
+#include <iostream>
+
+using namespace std;
namespace JSBSim {
-static const char *IdSrc = "$Id$";
+static const char *IdSrc = "$Id: FGBuoyantForces.cpp,v 1.13 2010/09/07 00:40:03 jberndt Exp $";
static const char *IdHdr = ID_BUOYANTFORCES;
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
gasCellJ.InitMatrix();
- bind();
-
Debug(0);
}
for (unsigned int i=0; i<Cells.size(); i++) delete Cells[i];
Cells.clear();
- unbind();
-
Debug(1);
}
if (FDMExec->Holding()) return false; // if paused don't execute
if (NoneDefined) return true;
+ RunPreFunctions();
+
vTotalForces.InitMatrix();
vTotalMoments.InitMatrix();
vTotalMoments += Cells[i]->GetMoments();
}
+ RunPostFunctions();
+
return false;
}
document = element;
}
+ FGModel::Load(element); // Perform base class Load
+
gas_cell_element = document->FindElement("gas_cell");
while (gas_cell_element) {
NoneDefined = false;
gas_cell_element = document->FindNextElement("gas_cell");
}
+ PostLoad(element, PropertyManager);
+
+ if (!NoneDefined) {
+ bind();
+ }
+
return true;
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-FGColumnVector3& FGBuoyantForces::GetGasMassMoment(void)
+const FGColumnVector3& FGBuoyantForces::GetGasMassMoment(void)
{
vXYZgasCell_arm.InitMatrix();
for (unsigned int i = 0; i < Cells.size(); i++) {
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-FGMatrix33& FGBuoyantForces::GetGasMassInertia(void)
+const FGMatrix33& FGBuoyantForces::GetGasMassInertia(void)
{
const unsigned int size = Cells.size();
string FGBuoyantForces::GetBuoyancyStrings(string delimeter)
{
string CoeffStrings = "";
- bool firstime = true;
/*
+ bool firstime = true;
for (sd = 0; sd < variables.size(); sd++) {
if (firstime) {
firstime = false;
string FGBuoyantForces::GetBuoyancyValues(string delimeter)
{
string SDValues = "";
- bool firstime = true;
/*
+ bool firstime = true;
for (sd = 0; sd < variables.size(); sd++) {
if (firstime) {
firstime = false;
void FGBuoyantForces::bind(void)
{
-}
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-void FGBuoyantForces::unbind(void)
-{
+ typedef double (FGBuoyantForces::*PMF)(int) const;
+ PropertyManager->Tie("moments/l-buoyancy-lbsft", this, eL,
+ (PMF)&FGBuoyantForces::GetMoments);
+ PropertyManager->Tie("moments/m-buoyancy-lbsft", this, eM,
+ (PMF)&FGBuoyantForces::GetMoments);
+ PropertyManager->Tie("moments/n-buoyancy-lbsft", this, eN,
+ (PMF)&FGBuoyantForces::GetMoments);
+ PropertyManager->Tie("forces/fbx-buoyancy-lbs", this, eX,
+ (PMF)&FGBuoyantForces::GetForces);
+ PropertyManager->Tie("forces/fby-buoyancy-lbs", this, eY,
+ (PMF)&FGBuoyantForces::GetForces);
+ PropertyManager->Tie("forces/fbz-buoyancy-lbs", this, eZ,
+ (PMF)&FGBuoyantForces::GetForces);
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%