Date started: 01/21/08
Purpose: Encapsulates the buoyant forces
- ------------- Copyright (C) 2008 - 2009 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.14 2010/11/18 12:38:06 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();
- for (unsigned int i=0; i<interface_properties.size(); i++)
- delete interface_properties[i];
- interface_properties.clear();
-
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;
}
- Element *property_element = document->FindElement("property");
- if (property_element)
- cout << endl << " Declared properties" << endl << endl;
- while (property_element) {
- string interface_property_string = property_element->GetDataLine();
-
- if (PropertyManager->HasNode(interface_property_string)) {
- cout << " Property " << interface_property_string <<
- " is already defined." << endl;
- } else {
- double value=0.0;
- if ( ! property_element->GetAttributeValue("value").empty())
- value = property_element->GetAttributeValueAsNumber("value");
- interface_properties.push_back(new double(value));
- interface_property_string = property_element->GetDataLine();
- PropertyManager->Tie(interface_property_string,
- interface_properties.back());
- cout << " " << interface_property_string <<
- " (initial value: " << value << ")" << endl;
- }
- property_element = document->FindNextElement("property");
- }
+ FGModel::Load(element); // Perform base class Load
gas_cell_element = document->FindElement("gas_cell");
while (gas_cell_element) {
gas_cell_element = document->FindNextElement("gas_cell");
}
+ PostLoad(element, PropertyManager);
+
+ if (!NoneDefined) {
+ bind();
+ }
+
return true;
}
gasCellJ = FGMatrix33();
for (unsigned int i=0; i < size; i++) {
- FGColumnVector3 v = MassBalance->StructuralToBody( Cells[i]->GetXYZ() );
+ FGColumnVector3 v = FDMExec->GetMassBalance()->StructuralToBody( Cells[i]->GetXYZ() );
// Body basis is in FT.
const double mass = Cells[i]->GetMass();
void FGBuoyantForces::bind(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);
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%