mirror of
https://github.com/OpenVSP/OpenVSP.git
synced 2026-03-13 10:13:08 +08:00
195 lines
7.8 KiB
Plaintext
195 lines
7.8 KiB
Plaintext
|
|
void main()
|
|
{
|
|
string wing = AddGeom( "WING", "" ); // Add Wing
|
|
SetGeomName( wing, "Wing" );
|
|
string fuse = AddGeom( "FUSELAGE", "" ); // Add Fuselage
|
|
SetGeomName( fuse, "Fuse" );
|
|
//string pylon = AddGeom( "WING", "" ); // Pylon
|
|
//SetGeomName( pylon, "Pylon" );
|
|
//string duct = AddGeom( "STACK", "" ); // Add Duct
|
|
//SetGeomName( duct, "Duct" );
|
|
string htail = AddGeom( "WING", "" ); // Add H-Tail
|
|
SetGeomName( htail, "H-Tail" );
|
|
string vtail = AddGeom( "WING", "" ); // Add V-Tail
|
|
SetGeomName( vtail, "V-Tail" );
|
|
|
|
// === Fuse ==== //
|
|
// Editing of Fuse Sections
|
|
SetParmVal( fuse, "Ellipse_Height", "XSecCurve_1", 4.5 );
|
|
SetParmVal( fuse, "Ellipse_Width", "XSecCurve_1", 6.0 );
|
|
|
|
InsertXSec( fuse, 1, XS_GENERAL_FUSE );
|
|
SetParmVal( fuse, "Height", "XSecCurve_2", 8.0 );
|
|
SetParmVal( fuse, "Width", "XSecCurve_2", 7.167 );
|
|
SetParmVal( fuse, "TopStr", "XSecCurve_2", 0.05 );
|
|
SetParmVal( fuse, "BotStr", "XSecCurve_2", 1.83 );
|
|
SetParmVal( fuse, "UpStr", "XSecCurve_2", 1.83 );
|
|
SetParmVal( fuse, "LowStr", "XSecCurve_2", 1.5 );
|
|
|
|
CopyXSec( fuse, 2 );
|
|
PasteXSec( fuse, 3 );
|
|
PasteXSec( fuse, 4 );
|
|
|
|
// Placement of Fuse Sections
|
|
SetParmVal( fuse, "ZLocPercent", "XSec_0", -0.05 );
|
|
|
|
SetParmVal( fuse, "XLocPercent", "XSec_1", 0.10 );
|
|
SetParmVal( fuse, "ZLocPercent", "XSec_1", -0.035 );
|
|
|
|
SetParmVal( fuse, "ZLocPercent", "XSec_2", 0.0 );
|
|
SetParmVal( fuse, "XLocPercent", "XSec_2", 0.20 );
|
|
|
|
SetParmVal( fuse, "XLocPercent", "XSec_3", 0.40 );
|
|
|
|
SetParmVal( fuse, "XLocPercent", "XSec_4", 0.55 );
|
|
|
|
SetParmVal( fuse, "ZLocPercent", "XSec_5", 0.03 );
|
|
|
|
SetParmVal( fuse, "Length", "Design", 49.4 );
|
|
|
|
// ==== Wing ==== //
|
|
SetDriverGroup( wing, 1, SPAN_WSECT_DRIVER, ROOTC_WSECT_DRIVER, TIPC_WSECT_DRIVER );
|
|
SetParmVal( wing, "X_Rel_Location", "XForm", 15.0 );
|
|
SetParmVal( wing, "Z_Rel_Location", "XForm", 3.0 );
|
|
SetParmVal( wing, "Y_Rel_Rotation", "XForm", 2.0 );
|
|
SetParmVal( wing, "Span", "XSec_1", 34.016 );
|
|
SetParmVal( wing, "Root_Chord", "XSec_1", 14.08 );
|
|
SetParmVal( wing, "Tip_Chord", "XSec_1", 3.5 );
|
|
SetParmVal( wing, "Sweep", "XSec_1", 15.0 );
|
|
SetParmVal( wing, "Sweep_Location", "XSec_1", 0.25 );
|
|
SetParmVal( wing, "ThickChord", "XSecCurve_0", 0.163 );
|
|
SetParmVal( wing, "ThickChord", "XSecCurve_1", 0.139 );
|
|
|
|
// ==== "Duct" ==== //
|
|
//SetParmVal( duct, "X_Rel_Location", "XForm", 14.0 );
|
|
//SetParmVal( duct, "Y_Rel_Location", "XForm", 7.83 );
|
|
//SetParmVal( duct, "Z_Rel_Location", "XForm", -1.9 );
|
|
//SetParmVal( duct, "Y_Rel_Rotation", "XForm", -2.0 );
|
|
//SetParmVal( duct, "Sym_Planar_Flag", "Sym", SYM_XZ );
|
|
|
|
//string ductXsecsurf = GetXSecSurf( duct, 0 );
|
|
|
|
//InsertXSec( duct, 0, XS_CIRCLE );
|
|
|
|
//SetParmVal( duct, "XDelta", "XSec_1", 0.0 );
|
|
//SetParmVal( duct, "XDelta", "XSec_2", 4.4 );
|
|
//SetParmVal( duct, "XDelta", "XSec_3", 0.0 );
|
|
//SetParmVal( duct, "XDelta", "XSec_4", 7.6 );
|
|
//SetParmVal( duct, "ZDelta", "XSec_4", 0.5 );
|
|
//SetParmVal( duct, "XDelta", "XSec_5", 0.0 );
|
|
|
|
//SetParmVal( duct, "Circle_Diameter", "XSecCurve_1", 4.0 );
|
|
|
|
//CopyXSec( duct, 1 );
|
|
//PasteXSec( duct, 2 );
|
|
//PasteXSec( duct, 3 );
|
|
//PasteXSec( duct, 4 );
|
|
|
|
//SetParmVal( duct, "Circle_Diameter", "XSecCurve_3", 3.0 );
|
|
//SetParmVal( duct, "Circle_Diameter", "XSecCurve_4", 2.5 );
|
|
|
|
// ==== Pylon ==== //
|
|
|
|
//SetParmVal( pylon, "X_Rel_Location", "XForm", 14.0 );
|
|
//SetParmVal( pylon, "Y_Rel_Location", "XForm", 7.83 );
|
|
//SetParmVal( pylon, "Z_Rel_Location", "XForm", -0.2 );
|
|
//SetParmVal( pylon, "X_Rel_Rotation", "XForm", 90.0 );
|
|
|
|
//SetParmVal( pylon, "Span", "XSec_1", 2.8 );
|
|
//SetParmVal( pylon, "Root_Chord", "XSec_1", 10.5 );
|
|
//SetParmVal( pylon, "Tip_Chord", "XSec_1", 6.0 );
|
|
//SetParmVal( pylon, "Sweep", "XSec_1", 60.0 );
|
|
|
|
//SetParmVal( pylon, "ThickChord", "XSecCurve_0", 0.05 );
|
|
//SetParmVal( pylon, "ThickChord", "XSecCurve_1", 0.05 );
|
|
|
|
// ==== H-Tail ==== //
|
|
SetParmVal( htail, "X_Rel_Location", "XForm", 40.0 );
|
|
SetParmVal( htail, "Z_Rel_Location", "XForm", 4.0 );
|
|
SetParmVal( htail, "Sweep", "XSec_1", 20.0 );
|
|
SetParmVal( htail, "Sweep_Location", "XSec_1", 0.25 );
|
|
SetParmVal( htail, "Dihedral", "XSec_1", 5 );
|
|
SetParmVal( htail, "Span", "XSec_1", 13.5 );
|
|
SetParmVal( htail, "Root_Chord", "XSec_1", 9.308 );
|
|
SetParmVal( htail, "Tip_Chord", "XSec_1", 4.025 );
|
|
SetParmVal( htail, "ThickChord", "XSecCurve_0", 0.10 );
|
|
|
|
// ==== V-Tail ==== //
|
|
SetParmVal( vtail, "X_Rel_Location", "XForm", 35.0 );
|
|
SetParmVal( vtail, "Z_Rel_Location", "XForm", 4.0 );
|
|
SetParmVal( vtail, "X_Rel_Rotation", "XForm", 90.0 );
|
|
SetParmVal( vtail, "Sym_Planar_Flag", "Sym", 0 );
|
|
SetParmVal( vtail, "Span", "XSec_1", 13.6 );
|
|
SetParmVal( vtail, "Sweep", "XSec_1", 38.5 );
|
|
SetParmVal( vtail, "Sweep_Location", "XSec_1", 0.25 );
|
|
SetParmVal( vtail, "Root_Chord", "XSec_1", 13.208 );
|
|
SetParmVal( vtail, "Tip_Chord", "XSec_1", 4.917 );
|
|
//SetParmVal( vtail, "ThickChord", "XSecCurve_0", 0.12 );
|
|
|
|
|
|
Update();
|
|
|
|
// ==== Set Parasite Drag Settings ==== //
|
|
string PDcon = FindContainer( "ParasiteDragSettings", 0 );
|
|
string groupname = "ParasiteDrag";
|
|
|
|
array<string> fileNameInput = GetStringAnalysisInput( "ParasiteDrag", "FileName" );
|
|
fileNameInput[0] = "ParasiteDragExample";
|
|
SetStringAnalysisInput( "ParasiteDrag", "FileName", fileNameInput );
|
|
|
|
array<int> vinfUnitInput = GetIntAnalysisInput( "ParasiteDrag", "VelocityUnit" );
|
|
vinfUnitInput[0] = V_UNIT_FT_S;
|
|
SetIntAnalysisInput( "ParasiteDrag", "VelocityUnit", vinfUnitInput );
|
|
|
|
array<double> vinfFCinput = GetDoubleAnalysisInput( "ParasiteDrag", "Vinf" );
|
|
vinfFCinput[0] = 629;
|
|
SetDoubleAnalysisInput( "ParasiteDrag", "Vinf", vinfFCinput );
|
|
|
|
array<double> altInput = GetDoubleAnalysisInput( "ParasiteDrag", "Altitude" );
|
|
altInput[0] = 40000;
|
|
SetDoubleAnalysisInput( "ParasiteDrag", "Altitude", altInput );
|
|
|
|
array<double> srefInput = GetDoubleAnalysisInput( "ParasiteDrag", "Sref" );
|
|
srefInput[0] = 598.0;
|
|
SetDoubleAnalysisInput( "ParasiteDrag", "Sref", srefInput );
|
|
|
|
array<int> turbcfEqnChoiceInput = GetIntAnalysisInput( "ParasiteDrag", "TurbCfEqnChoice" );
|
|
turbcfEqnChoiceInput[0] = CF_TURB_IMPLICIT_KARMAN_SCHOENHERR;
|
|
SetIntAnalysisInput( "ParasiteDrag", "TurbCfEqnChoice", turbcfEqnChoiceInput );
|
|
|
|
string FFEqnChoice;
|
|
SetParmVal( wing, "FFWingEqnType", "ParasiteDragProps", FF_W_DATCOM );
|
|
//SetParmVal( pylon, "FFUser", "ParasiteDragProps", 1.13 );
|
|
//SetParmVal( duct, "FFUser", "ParasiteDragProps", 1.12 );
|
|
SetParmVal( fuse, "FFBodyEqnType", "ParasiteDragProps", FF_B_SCHEMENSKY_BODY );
|
|
SetParmVal( htail, "FFWingEqnType", "ParasiteDragProps", FF_W_JENKINSON_TAIL );
|
|
SetParmVal( vtail, "FFWingEqnType", "ParasiteDragProps", FF_W_JENKINSON_TAIL );
|
|
|
|
string excresVal = FindParm( PDcon, "ExcresVal", groupname );
|
|
string excresType = FindParm( PDcon, "ExcresType", groupname );
|
|
|
|
// AddExcrescence( "Name", TypeOfExcrescence, Value )
|
|
AddExcrescence( "Miscellaneous", EXCRESCENCE_COUNT, 8.5 );
|
|
AddExcrescence( "Cowl Boattail", EXCRESCENCE_CD, 0.0003 );
|
|
|
|
AddExcrescence( "Percentage Example", EXCRESCENCE_PERCENT_GEOM, 5 );
|
|
DeleteExcrescence( 2 ); // Last Index
|
|
|
|
string ridpd = ExecAnalysis( "ParasiteDrag" );
|
|
|
|
array<double>@ dat = GetDoubleResults( ridpd, "Total_CD_Total", 0 );
|
|
double tol = 0.018572 * 0.15;
|
|
if ( abs( dat[0] - 0.018572 ) >= tol ) { Print( "---> Error: S-3 Viking Friction Coefficient Mismatch" ); }
|
|
|
|
|
|
//==== Check For API Errors ====//
|
|
while ( GetNumTotalErrors() > 0 )
|
|
{
|
|
ErrorObj err = PopLastError();
|
|
Print( err.GetErrorString() );
|
|
}
|
|
|
|
|
|
Print( "\n\n\n" );
|
|
} |