1
0
Fork 0

YASim: bugfix for wing section (wrong surface positions).

Reformated and extended output of CLI tool.
This commit is contained in:
Henning Stahlke 2017-12-27 22:26:48 +01:00
parent ccfb0d78ae
commit 21aef4da70
4 changed files with 59 additions and 31 deletions

View file

@ -63,7 +63,8 @@ void Surface::setOrientation(const float* o)
{
for(int i=0; i<9; i++) _orient[i] = o[i];
if (_surfN) {
float xaxis[3] {-1,0,0};
// export the chord line (transformed into aircraft coordiantes)
float xaxis[3] {1,0,0};
Math::tmul33(_orient,xaxis, xaxis);
_surfN->getNode("axis-x", true)->setFloatValue(xaxis[0]);
_surfN->getNode("axis-y", true)->setFloatValue(xaxis[1]);

View file

@ -332,10 +332,15 @@ void Wing::compile()
nSegs = 8;
float segWid = ws->_length * (end - start)/nSegs;
float base[3];
_chord2float(ws->_rootChord, base);
float tip[3];
_chord2float(ws->_tipChord, tip);
for(int j=0; j<nSegs; j++) {
float frac = start + (j+0.5f) * (end-start)/nSegs;
float pos[3];
interp(_base, _tip, frac, pos);
interp(base, tip, frac, pos);
float chord = ws->_rootChord.length * (1 - (1-ws->_taper)*frac);
float weight = chord * segWid;
@ -518,15 +523,23 @@ void Wing::writeInfoToProptree()
for (int section=0; section < _sections.size(); section++) {
ws = (WingSection*)_sections.get(section);
float mass {0};
for (int surf=0; surf < ws->numSurfaces(); surf++) {
Surface* s = ws->getSurface(surf);
float drag = s->getTotalForceCoefficient();
dragSum += drag;
float mass = ws->getSurfaceWeight(surf);
mass = ws->getSurfaceWeight(surf);
mass = mass * Math::sqrt(mass);
wgt += mass;
}
SGPropertyNode_ptr sectN = _wingN->getChild("section",section,1);
sectN->getNode("surface-count", true)->setFloatValue(ws->numSurfaces());
sectN->getNode("weight", true)->setFloatValue(mass);
sectN->getNode("base-x", true)->setFloatValue(ws->_rootChord.x);
sectN->getNode("base-y", true)->setFloatValue(ws->_rootChord.y);
sectN->getNode("base-z", true)->setFloatValue(ws->_rootChord.z);
sectN->getNode("chord", true)->setFloatValue(ws->_rootChord.length);
}
_wingN->getNode("weight", true)->setFloatValue(wgt);
_wingN->getNode("drag", true)->setFloatValue(dragSum);
@ -574,4 +587,15 @@ float Wing::updateModel(Model* model)
return _weight;
}
void Wing::printSectionInfo()
{
WingSection* ws;
printf("#wing sections: %d\n", _sections.size());
for (int section=0; section < _sections.size(); section++) {
ws = (WingSection*)_sections.get(section);
printf("Section %d base point (%.3f, %.3f, %.3f), chord %.3f\n", section,
ws->_rootChord.x, ws->_rootChord.y, ws->_rootChord.z, ws->_rootChord.length);
}
}
}; // namespace yasim

View file

@ -189,6 +189,7 @@ public:
void setPropertyNode(SGPropertyNode_ptr n) { _wingN = n; };
float updateModel(Model* model);
void printSectionInfo();
};
}; // namespace yasim

View file

@ -253,48 +253,50 @@ int main(int argc, char** argv)
wing = a->getWing();
tail = a->getTail();
}
printf(" Iterations: %d\n", a->getSolutionIterations());
printf(" Drag Coefficient: %.3f\n", drag);
printf(" Lift Ratio: %.3f\n", a->getLiftRatio());
printf(" Cruise AoA: %.2f deg\n", aoa);
printf(" Tail Incidence: %.2f deg\n", tailIncidence);
printf("Approach Elevator: %.3f\n\n", a->getApproachElevator());
printf(" CG: x:%.3f, y:%.3f, z:%.3f\n", cg[0], cg[1], cg[2]);
printf("Iterations : %d\n", a->getSolutionIterations());
printf("Drag Coefficient : %.3f\n", drag);
printf("Lift Ratio : %.3f\n", a->getLiftRatio());
printf("Cruise AoA : %.2f deg\n", aoa);
printf("Tail Incidence : %.2f deg\n", tailIncidence);
printf("Approach Elevator : %.3f\n\n", a->getApproachElevator());
printf("CG : x:%.3f, y:%.3f, z:%.3f\n", cg[0], cg[1], cg[2]);
if (wing) {
MAC = wing->getMACLength();
MACx = wing->getMACx();
MACy = wing->getMACy();
sweepMin = wing->getSweepLEMin() * RAD2DEG;
sweepMax = wing->getSweepLEMax() * RAD2DEG;
printf(" Wing MAC: (x:%.2f, y:%.2f), length:%.1f \n", MACx, MACy, MAC);
printf(" hard limit CG-x: %.3f m\n", a->getCGHardLimitXMax());
printf(" soft limit CG-x: %.3f m\n", a->getCGSoftLimitXMax());
printf(" CG-x: %.3f m\n", cg[0]);
printf(" CG-x rel. MAC: %3.0f%%\n", a->getCGMAC()*100);
printf(" soft limit CG-x: %.3f m\n", a->getCGSoftLimitXMin());
printf(" hard limit CG-x: %.3f m\n", a->getCGHardLimitXMin());
printf("Wing MAC : (x:%.2f, y:%.2f), length:%.1f \n", MACx, MACy, MAC);
printf("hard limit CG-x : %.3f m\n", a->getCGHardLimitXMax());
printf("soft limit CG-x : %.3f m\n", a->getCGSoftLimitXMax());
printf("CG-x : %.3f m\n", cg[0]);
printf("CG-x rel. MAC : %3.0f%%\n", a->getCGMAC()*100);
printf("soft limit CG-x : %.3f m\n", a->getCGSoftLimitXMin());
printf("hard limit CG-x : %.3f m\n", a->getCGHardLimitXMin());
printf("\n");
printf(" wing span: %.2f m\n", a->getWingSpan());
printf(" sweep lead. edge: %.1f .. %.1f deg\n", sweepMin, sweepMax);
printf(" wing area: %.2f m²\n", a->getWingArea());
printf(" wing load empty: %.2f kg/m² (Empty %.0f kg)\n", a->getWingLoadEmpty(), a->getEmptyWeight());
printf(" wing load MTOW: %.2f kg/m² (MTOW %.0f kg)\n", a->getWingLoadMTOW(), a->getMTOW());
printf("wing lever : %.3f m\n", a->getWingLever());
printf("tail lever : %.3f m\n", a->getTailLever());
printf("\n");
printf(" tail span: %.3f m\n", tail->getSpan());
printf(" tail area: %.3f m²\n", tail->getArea());
printf("max thrust : %.2f kN\n", a->getMaxThrust()/1000);
printf("thrust/empty : %.2f\n", a->getThrust2WeightEmpty());
printf("thrust/mtow : %.2f\n", a->getThrust2WeightMTOW());
printf("\n");
printf(" wing lever: %.3f m\n", a->getWingLever());
printf(" tail lever: %.3f m\n", a->getTailLever());
printf("wing span : %.2f m\n", a->getWingSpan());
printf("sweep lead. edge : %.1f .. %.1f deg\n", sweepMin, sweepMax);
printf("wing area : %.2f m^2\n", a->getWingArea());
printf("wing load empty : %.2f kg/m^2 (Empty %.0f kg)\n", a->getWingLoadEmpty(), a->getEmptyWeight());
printf("wing load MTOW : %.2f kg/m^2 (MTOW %.0f kg)\n", a->getWingLoadMTOW(), a->getMTOW());
printf("\n");
printf(" max thrust: %.2f kN\n", a->getMaxThrust()/1000);
printf(" thrust/empty: %.2f\n", a->getThrust2WeightEmpty());
printf(" thrust/mtow: %.2f\n", a->getThrust2WeightMTOW());
printf("tail span : %.3f m\n", tail->getSpan());
printf("tail area : %.3f m^2\n", tail->getArea());
printf("\n");
wing->printSectionInfo();
}
printf("\nInertia tensor [kg*m^2], origo at CG:\n\n");
printf(" %7.0f, %7.0f, %7.0f\n", SI_inertia[0], SI_inertia[1], SI_inertia[2]);
printf(" %7.0f, %7.0f, %7.0f\n", SI_inertia[3], SI_inertia[4], SI_inertia[5]);
printf(" %7.0f, %7.0f, %7.0f\n", SI_inertia[6], SI_inertia[7], SI_inertia[8]);
}
delete fdm;
return 0;
delete fdm;
return 0;
}