Parasite Drag Functions

This group of API functions is supplemental to performing a Paraste Drag analysis through the Analysis Manager. They include functions to write out Parasite Drag Tool equations, calculate atmospheric properties, and control excrescences.

AddExcrescence(excresName, excresType, excresVal)

Add an Excresence to the Parasite Drag Tool

GetNumExcrescences()

Delete an Excresence from the Parasite Drag Tool

DeleteAllExcrescences()

Delete all Excresences from the Parasite Drag Tool

DeleteExcrescence(index)

Delete one excrescence from the Parasite Drag tool, by index.

UpdateParasiteDrag()

Update any reference geometry, atmospheric properties, excressences, etc.

ExportParasiteDragToCSV(file_name)

Write the Parasite Drag Tool buildup table out to a CSV file, the way the Export CSV button on the tool does.

WriteAtmosphereCSVFile(file_name, atmos_type)

Calculate the atmospheric properties determined by a specified model for a preset array of altitudes ranging from 0 to 90000 m and write the results to a CSV output file

CalcAtmosphere(alt, delta_temp, atmos_type)

Calculate the atmospheric properties determined by a specified model at input altitude and temperature deviation.

WriteBodyFFCSVFile(file_name)

Calculate the form factor from each body FF equation (i.e. Hoerner Streamlined Body) and write the results to a CSV output file.

WriteWingFFCSVFile(file_name)

Calculate the form factor from each wing FF equation (i.e. Schemensky 4 Series Airfoil) and write the results to a CSV output file.

WriteCfEqnCSVFile(file_name)

Calculate the coefficient of friction from each Cf equation (i.e. Power Law Blasius) and write the results to a CSV output file.

WritePartialCfMethodCSVFile(file_name)

Calculate the partial coefficient of friction and write the results to a CSV output file

Details

openvsp.AddExcrescence(excresName, excresType, excresVal)[source]

Add an Excresence to the Parasite Drag Tool

AddExcrescence( "Miscellaneous", EXCRESCENCE_COUNT, 8.5 )

AddExcrescence( "Cowl Boattail", EXCRESCENCE_CD, 0.0003 )

# Each excrescence gets its own row, so deleting them one at a time has to
# empty the table and then start being rejected.  The error queue is reached
# through the error manager singleton in Python.
err_mgr = ErrorMgrSingleton.getInstance()

DeleteExcrescence( 1 )
DeleteExcrescence( 0 )

assert err_mgr.GetNumTotalErrors() == 0, "the two excrescences were not both added"

DeleteExcrescence( 0 )

assert err_mgr.GetNumTotalErrors() > 0, "more excrescences were added than asked for"

# That error was raised deliberately, so take it back off the queue.
while err_mgr.GetNumTotalErrors() > 0 :
    err = err_mgr.PopLastError()

See also: EXCRES_TYPE :param [in]: excresName string Name of the Excressence :param [in]: excresType int Excressence type enum (i.e. EXCRESCENCE_PERCENT_GEOM) :param [in]: excresVal double Excressence value

openvsp.GetNumExcrescences()[source]

Delete an Excresence from the Parasite Drag Tool

AddExcrescence( "Miscellaneous", EXCRESCENCE_COUNT, 8.5 )

AddExcrescence( "Cowl Boattail", EXCRESCENCE_CD, 0.0003 )

AddExcrescence( "Percentage Example", EXCRESCENCE_PERCENT_GEOM, 5 )

DeleteExcrescence( 2 ) # Last Index

# Three were added and one was deleted, so index 2 no longer exists and
# asking for it again has to be rejected.  The error queue is reached through
# the error manager singleton in Python.
err_mgr = ErrorMgrSingleton.getInstance()

DeleteExcrescence( 2 )

assert err_mgr.GetNumTotalErrors() > 0, "DeleteExcrescence accepted an index past the end"

# That error was raised deliberately, so take it back off the queue.
while err_mgr.GetNumTotalErrors() > 0 :
    err = err_mgr.PopLastError()
Parameters:

[in] – index int Index of the Excressence to delete

Get the number of Excresences in the Parasite Drag Tool

assert GetNumExcrescences() == 0, "a new model starts with excrescences"

AddExcrescence( "Miscellaneous", EXCRESCENCE_COUNT, 8.5 )

AddExcrescence( "Cowl Boattail", EXCRESCENCE_CD, 0.0003 )

assert GetNumExcrescences() == 2, "GetNumExcrescences did not count what was added"

DeleteExcrescence( 1 )

assert GetNumExcrescences() == 1, "GetNumExcrescences did not follow DeleteExcrescence"

See also: AddExcrescence, DeleteExcrescence, DeleteAllExcrescences :rtype: int :return: int Number of excrescences

openvsp.DeleteAllExcrescences()[source]

Delete all Excresences from the Parasite Drag Tool

AddExcrescence( "Miscellaneous", EXCRESCENCE_COUNT, 8.5 )

AddExcrescence( "Cowl Boattail", EXCRESCENCE_CD, 0.0003 )

AddExcrescence( "Percentage Example", EXCRESCENCE_PERCENT_GEOM, 5 )

DeleteAllExcrescences()

assert GetNumExcrescences() == 0, "DeleteAllExcrescences left excrescences behind"

# Clearing an empty table is not an error.
err_mgr = ErrorMgrSingleton.getInstance()

DeleteAllExcrescences()

assert err_mgr.GetNumTotalErrors() == 0, "DeleteAllExcrescences complained about an empty table"

See also: AddExcrescence, DeleteExcrescence, GetNumExcrescences

openvsp.DeleteExcrescence(index)[source]

Delete one excrescence from the Parasite Drag tool, by index.

AddExcrescence( "TestExcrescence", EXCRESCENCE_COUNT, 2.0 )

DeleteExcrescence( 0 )

assert GetNumExcrescences() == 0, "DeleteExcrescence did not delete the excrescence"

See also: AddExcrescence, GetNumExcrescences :param [in]: index int Index of the excrescence to delete

openvsp.UpdateParasiteDrag()[source]

Update any reference geometry, atmospheric properties, excressences, etc. in the Parasite Drag Tool

pid = AddGeom( "POD" )

Update()

UpdateParasiteDrag()
openvsp.ExportParasiteDragToCSV(file_name)[source]

Write the Parasite Drag Tool buildup table out to a CSV file, the way the Export CSV button on the tool does. The same table is also placed in the Results Manager under the name “Parasite_Drag”, so the returned ID gives access to it without going through the file.

pod_id = AddGeom( "POD", "" )

Update()

# The table is filled in by running the buildup, so do that first.
ExecAnalysis( "ParasiteDrag" )

res_id = ExportParasiteDragToCSV( "ParasiteDragExample.csv" )

assert len( res_id ) > 0, "ExportParasiteDragToCSV returned no results"

# The buildup carries one row per Geom, so the Pod has to be in there.
labels = GetStringResults( res_id, "Comp_Label" )

assert len( labels ) > 0, "the buildup table is empty"

See also: UpdateParasiteDrag :param [in]: file_name string Name of the CSV file to write :rtype: string :return: string Results ID for the buildup table

openvsp.WriteAtmosphereCSVFile(file_name, atmos_type)[source]

Calculate the atmospheric properties determined by a specified model for a preset array of altitudes ranging from 0 to 90000 m and write the results to a CSV output file

print( "Starting USAF Atmosphere 1966 Table Creation. \n" )

WriteAtmosphereCSVFile( "USAFAtmosphere1966Data.csv", ATMOS_TYPE_HERRINGTON_1966 )
# The call above should have produced a file with content in it.
import os
assert os.path.getsize( "USAFAtmosphere1966Data.csv" ) > 0, "WriteAtmosphereCSVFile wrote no file"

See also: ATMOS_TYPE :param [in]: file_name string Output CSV file :param [in]: atmos_type int Atmospheric model enum (i.e. ATMOS_TYPE_HERRINGTON_1966)

openvsp.CalcAtmosphere(alt, delta_temp, atmos_type)[source]

Calculate the atmospheric properties determined by a specified model at input altitude and temperature deviation. This function may not be used for any manual atmospheric model types (i.e. ATMOS_TYPE_MANUAL_P_T). This function assumes freestream units are metric, temperature units are Kelvin, and pressure units are kPA.

alt = 4000

delta_temp = 0

temp, pres, pres_ratio, rho_ratio = CalcAtmosphere( alt, delta_temp, ATMOS_TYPE_US_STANDARD_1976)

# The ratios are against sea level standard day, so asking at sea level with
# no temperature offset has to return the sea level standard itself.
sl_temp, sl_pres, sl_pres_ratio, sl_rho_ratio = CalcAtmosphere( 0.0, 0.0, ATMOS_TYPE_US_STANDARD_1976 )

assert abs( sl_temp - 288.15 ) < 1e-2, "sea level is not the standard day temperature"

# The density ratio carries a little rounding from the model constants.
assert abs( sl_pres_ratio - 1.0 ) < 1e-9, "the sea level ratios are not one"
assert abs( sl_rho_ratio - 1.0 ) < 1e-4, "the sea level ratios are not one"

# The atmosphere thins with altitude.
assert temp < sl_temp, "the atmosphere did not thin with altitude"
assert pres < sl_pres, "the atmosphere did not thin with altitude"
assert pres_ratio < 1.0, "the atmosphere did not thin with altitude"
assert rho_ratio < 1.0, "the atmosphere did not thin with altitude"

# The pressure ratio is the pressure against sea level.
assert abs( pres_ratio - pres / sl_pres ) < 1e-6, "the pressure ratio does not match the pressure"

See also: ATMOS_TYPE :param [in]: alt double Altitude :param [in]: delta_temp double Deviation in temperature from the value specified in the atmospheric model :param [in]: atmos_type int Atmospheric model enum (i.e. ATMOS_TYPE_HERRINGTON_1966) :param [out]: temp double output Temperature :param [out]: pres double output Pressure :param [out]: pres_ratio double Output pressure ratio :param [out]: rho_ratio double Output density ratio

openvsp.WriteBodyFFCSVFile(file_name)[source]

Calculate the form factor from each body FF equation (i.e. Hoerner Streamlined Body) and write the results to a CSV output file

print( "Starting Body Form Factor Data Creation. \n" )
WriteBodyFFCSVFile( "BodyFormFactorData.csv" )
# The call above should have produced a file with content in it.
import os
assert os.path.getsize( "BodyFormFactorData.csv" ) > 0, "WriteBodyFFCSVFile wrote no file"
Parameters:

[in] – file_name string Output CSV file

openvsp.WriteWingFFCSVFile(file_name)[source]

Calculate the form factor from each wing FF equation (i.e. Schemensky 4 Series Airfoil) and write the results to a CSV output file

print( "Starting Wing Form Factor Data Creation. \n" )
WriteWingFFCSVFile( "WingFormFactorData.csv" )
# The call above should have produced a file with content in it.
import os
assert os.path.getsize( "WingFormFactorData.csv" ) > 0, "WriteWingFFCSVFile wrote no file"
Parameters:

[in] – file_name string Output CSV file

openvsp.WriteCfEqnCSVFile(file_name)[source]

Calculate the coefficient of friction from each Cf equation (i.e. Power Law Blasius) and write the results to a CSV output file

print( "Starting Turbulent Friciton Coefficient Data Creation. \n" )
WriteCfEqnCSVFile( "FrictionCoefficientData.csv" )
# The call above should have produced a file with content in it.
import os
assert os.path.getsize( "FrictionCoefficientData.csv" ) > 0, "WriteCfEqnCSVFile wrote no file"
Parameters:

[in] – file_name string Output CSV file

Write a CSV file of the skin friction coefficient equations over a range of Reynolds numbers.

WriteCfEqnCSVFile( "TestCfEqn.csv" )

See also: WritePartialCfMethodCSVFile :param [in]: file_name string Name of the CSV file to write

openvsp.WritePartialCfMethodCSVFile(file_name)[source]

Calculate the partial coefficient of friction and write the results to a CSV output file

print( "Starting Partial Friction Method Data Creation. \n" )
WritePartialCfMethodCSVFile( "PartialFrictionMethodData.csv" )
# The call above should have produced a file with content in it.
import os
assert os.path.getsize( "PartialFrictionMethodData.csv" ) > 0, "WritePartialCfMethodCSVFile wrote no file"
Parameters:

[in] – file_name string Output CSV file

Write a CSV file of the partial turbulence skin friction methods.

WritePartialCfMethodCSVFile( "TestPartialCf.csv" )

See also: WriteCfEqnCSVFile :param [in]: file_name string Name of the CSV file to write