X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FFDM%2FJSBSim%2FFGAuxiliary.cpp;h=09b2aefc74dc08993f3dc40adb88e43302d18545;hb=fbee3d10f0aafd4178fc1313edb8593c156b2874;hp=0ef2a322193579863976f8d9400d8d6fc956d275;hpb=1ca94a72c008cc422a1464beaf1f20d5f1d6ff96;p=flightgear.git diff --git a/src/FDM/JSBSim/FGAuxiliary.cpp b/src/FDM/JSBSim/FGAuxiliary.cpp index 0ef2a3221..09b2aefc7 100644 --- a/src/FDM/JSBSim/FGAuxiliary.cpp +++ b/src/FDM/JSBSim/FGAuxiliary.cpp @@ -47,16 +47,12 @@ INCLUDES #include "FGAtmosphere.h" #include "FGState.h" #include "FGFDMExec.h" -#include "FGFCS.h" #include "FGAircraft.h" -#include "FGPosition.h" -#include "FGOutput.h" #include "FGInertial.h" -#include "FGMatrix33.h" -#include "FGColumnVector3.h" -#include "FGColumnVector4.h" #include "FGPropertyManager.h" +namespace JSBSim { + static const char *IdSrc = "$Id$"; static const char *IdHdr = ID_AUXILIARY; @@ -68,7 +64,7 @@ CLASS IMPLEMENTATION FGAuxiliary::FGAuxiliary(FGFDMExec* fdmex) : FGModel(fdmex) { Name = "FGAuxiliary"; - vcas = veas = mach = qbar = pt = 0; + vcas = veas = mach = qbar = pt = tat = 0; psl = rhosl = 1; earthPosAngle = 0.0; @@ -83,6 +79,7 @@ FGAuxiliary::FGAuxiliary(FGFDMExec* fdmex) : FGModel(fdmex) FGAuxiliary::~FGAuxiliary() { + unbind(); Debug(1); } @@ -94,25 +91,34 @@ bool FGAuxiliary::Run() if (!FGModel::Run()) { GetState(); + + //calculate total temperature assuming isentropic flow + tat=sat*(1 + 0.2*mach*mach); + tatc=RankineToCelsius(tat); + if (mach < 1) { //calculate total pressure assuming isentropic flow - pt=p*pow((1 + 0.2*mach*mach),3.5); + pt = p*pow((1 + 0.2*machU*machU),3.5); } else { // shock in front of pitot tube, we'll assume its normal and use // the Rayleigh Pitot Tube Formula, i.e. the ratio of total // pressure behind the shock to the static pressure in front - B = 5.76*mach*mach/(5.6*mach*mach - 0.8); + B = 5.76*machU*machU/(5.6*machU*machU - 0.8); // The denominator above is zero for Mach ~ 0.38, for which // we'll never be here, so we're safe - D = (2.8*mach*mach-0.4)*0.4167; + D = (2.8*machU*machU-0.4)*0.4167; pt = p*pow(B,3.5)*D; } A = pow(((pt-p)/psl+1),0.28571); - vcas = sqrt(7*psl/rhosl*(A-1)); - veas = sqrt(2*qbar/rhosl); + if (machU > 0.0) { + vcas = sqrt(7*psl/rhosl*(A-1)); + veas = sqrt(2*qbar/rhosl); + } else { + vcas = veas = 0.0; + } // Pilot sensed accelerations are calculated here. This is used // for the coordinated turn ball instrument. Motion base platforms sometimes @@ -154,17 +160,19 @@ bool FGAuxiliary::Run() vPilotAccel.InitMatrix(); if ( Translation->GetVt() > 1 ) { - vToEyePt = Aircraft->GetXYZep() - MassBalance->GetXYZcg(); - vToEyePt *= inchtoft; - vPilotAccel = Aerodynamics->GetForces() - + Propulsion->GetForces() - + GroundReactions->GetForces(); - vPilotAccel /= MassBalance->GetMass(); - vPilotAccel += Rotation->GetPQRdot() * vToEyePt; - vPilotAccel += Rotation->GetPQR() * (Rotation->GetPQR() * vToEyePt); - //vPilotAccel(2)*=-1; - vPilotAccelN = vPilotAccel/Inertial->gravity(); - } + vPilotAccel = Aerodynamics->GetForces() + + Propulsion->GetForces() + + GroundReactions->GetForces(); + vPilotAccel /= MassBalance->GetMass(); + vToEyePt = MassBalance->StructuralToBody(Aircraft->GetXYZep()); + vPilotAccel += Rotation->GetPQRdot() * vToEyePt; + vPilotAccel += Rotation->GetPQR() * (Rotation->GetPQR() * vToEyePt); + } else { + vPilotAccel = -1*( State->GetTl2b() * Inertial->GetGravity() ); + } + + vPilotAccelN = vPilotAccel/Inertial->gravity(); + earthPosAngle += State->Getdt()*Inertial->omega(); return false; } else { @@ -211,6 +219,15 @@ void FGAuxiliary::bind(void) &FGAuxiliary::GetVequivalentFPS); PropertyManager->Tie("velocities/ve-kts", this, &FGAuxiliary::GetVequivalentKTS); + PropertyManager->Tie("velocities/machU", this, + &FGAuxiliary::GetMachU); + PropertyManager->Tie("velocities/tat-r", this, + &FGAuxiliary::GetTotalTemperature); + PropertyManager->Tie("velocities/tat-c", this, + &FGAuxiliary::GetTAT_C); + PropertyManager->Tie("velocities/pt-lbs_sqft", this, + &FGAuxiliary::GetTotalPressure); + PropertyManager->Tie("accelerations/a-pilot-x-ft_sec2", this,1, (PMF)&FGAuxiliary::GetPilotAccel); PropertyManager->Tie("accelerations/a-pilot-y-ft_sec2", this,2, @@ -241,6 +258,9 @@ void FGAuxiliary::unbind(void) PropertyManager->Untie("velocities/vc-kts"); PropertyManager->Untie("velocities/ve-fps"); PropertyManager->Untie("velocities/ve-kts"); + PropertyManager->Untie("velocities/machU"); + PropertyManager->Untie("velocities/tat-r"); + PropertyManager->Untie("velocities/tat-c"); PropertyManager->Untie("accelerations/a-pilot-x-ft_sec2"); PropertyManager->Untie("accelerations/a-pilot-y-ft_sec2"); PropertyManager->Untie("accelerations/a-pilot-z-ft_sec2"); @@ -259,9 +279,11 @@ void FGAuxiliary::GetState(void) { qbar = Translation->Getqbar(); mach = Translation->GetMach(); + machU= Translation->GetMachU(); p = Atmosphere->GetPressure(); rhosl = Atmosphere->GetDensitySL(); psl = Atmosphere->GetPressureSL(); + sat = Atmosphere->GetTemperature(); } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -310,3 +332,4 @@ void FGAuxiliary::Debug(int from) } } +} // namespace JSBSim