X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FFDM%2FJSBSim%2FFGForce.cpp;h=72256d198a91e605bfadb735412ffcbf1c99cc17;hb=fbee3d10f0aafd4178fc1313edb8593c156b2874;hp=aa762ac9320b07a0b51addc54231983a7b620ae3;hpb=9c0925744d27363955b3f26caf3311bc0a91ea69;p=flightgear.git diff --git a/src/FDM/JSBSim/FGForce.cpp b/src/FDM/JSBSim/FGForce.cpp index aa762ac93..72256d198 100644 --- a/src/FDM/JSBSim/FGForce.cpp +++ b/src/FDM/JSBSim/FGForce.cpp @@ -43,70 +43,62 @@ and the cg. #include "FGFDMExec.h" #include "FGAircraft.h" #include "FGTranslation.h" -#include "FGMatrix.h" -#include "FGDefs.h" +#include "FGMassBalance.h" +#include "FGState.h" #include "FGForce.h" +namespace JSBSim { + static const char *IdSrc = "$Id$"; static const char *IdHdr = ID_FORCE; -extern short debug_lvl; - //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% FGForce::FGForce(FGFDMExec *FDMExec) : - vFn(3), - vMn(3), - fdmex(FDMExec), - vFb(3), - vM(3), - vXYZn(3), - vDXYZ(3), - mT(3,3), - vSense(3), - ttype(tNone) + ttype(tNone), + fdmex(FDMExec) { - mT(1,1)=1; //identity matrix - mT(2,2)=1; - mT(3,3)=1; + mT(1,1) = 1; //identity matrix + mT(2,2) = 1; + mT(3,3) = 1; vSense.InitMatrix(1); - if (debug_lvl & 2) cout << "Instantiated: FGForce" << endl; + Debug(0); } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% FGForce::~FGForce() { - if (debug_lvl & 2) cout << "Destroyed: FGForce" << endl; + Debug(1); } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -FGColumnVector FGForce::GetBodyForces(void) { +FGColumnVector3& FGForce::GetBodyForces(void) +{ + vFb = Transform()*(vFn.multElementWise(vSense)); - vFb=Transform()*(vFn.multElementWise(vSense)); + // Find the distance from this vector's acting location to the cg; this + // needs to be done like this to convert from structural to body coords. + // CG and RP values are in inches - //find the distance from this vector's location to the cg - //needs to be done like this to convert from structural to body coords - vDXYZ(1) = -(vXYZn(1) - fdmex->GetMassBalance()->GetXYZcg(1))*INCHTOFT; - vDXYZ(2) = (vXYZn(2) - fdmex->GetMassBalance()->GetXYZcg(2))*INCHTOFT; //cg and rp values are in inches - vDXYZ(3) = -(vXYZn(3) - fdmex->GetMassBalance()->GetXYZcg(3))*INCHTOFT; + vDXYZ = fdmex->GetMassBalance()->StructuralToBody(vActingXYZn); - vM=vMn +vDXYZ*vFb; + vM = vMn + vDXYZ*vFb; return vFb; } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -FGMatrix FGForce::Transform(void) { +FGMatrix33 FGForce::Transform(void) +{ switch(ttype) { case tWindBody: - return fdmex->GetState()->GetTs2b(fdmex->GetTranslation()->Getalpha(),fdmex->GetTranslation()->Getbeta()); + return fdmex->GetState()->GetTs2b(); case tLocalBody: return fdmex->GetState()->GetTl2b(); case tCustom: - case tNone: return mT; default: @@ -117,10 +109,10 @@ FGMatrix FGForce::Transform(void) { //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -void FGForce::SetAnglesToBody(float broll, float bpitch, float byaw) { - - if(ttype == tCustom) { - float cp,sp,cr,sr,cy,sy; +void FGForce::SetAnglesToBody(double broll, double bpitch, double byaw) +{ + if (ttype == tCustom) { + double cp,sp,cr,sr,cy,sy; cp=cos(bpitch); sp=sin(bpitch); cr=cos(broll); sr=sin(broll); @@ -138,13 +130,51 @@ void FGForce::SetAnglesToBody(float broll, float bpitch, float byaw) { mT(3,2)=cr*sp*sy-sr*cy; mT(3,3)=cr*cp; } - } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -void FGForce::Debug(void) +// The bitmasked value choices are as follows: +// unset: In this case (the default) JSBSim would only print +// out the normally expected messages, essentially echoing +// the config files as they are read. If the environment +// variable is not set, debug_lvl is set to 1 internally +// 0: This requests JSBSim not to output any messages +// whatsoever. +// 1: This value explicity requests the normal JSBSim +// startup messages +// 2: This value asks for a message to be printed out when +// a class is instantiated +// 4: When this value is set, a message is displayed when a +// FGModel object executes its Run() method +// 8: When this value is set, various runtime state variables +// are printed out periodically +// 16: When set various parameters are sanity checked and +// a message is printed out when they go out of bounds + +void FGForce::Debug(int from) { - //TODO: Add your source code here -} + if (debug_lvl <= 0) return; + if (debug_lvl & 1) { // Standard console startup message output + if (from == 0) { // Constructor + + } + } + if (debug_lvl & 2 ) { // Instantiation/Destruction notification + if (from == 0) cout << "Instantiated: FGForce" << endl; + if (from == 1) cout << "Destroyed: FGForce" << endl; + } + if (debug_lvl & 4 ) { // Run() method entry print for FGModel-derived objects + } + if (debug_lvl & 8 ) { // Runtime state variables + } + if (debug_lvl & 16) { // Sanity checking + } + if (debug_lvl & 64) { + if (from == 0) { // Constructor + cout << IdSrc << endl; + cout << IdHdr << endl; + } + } +} +}