Thank you for the quick reply. To clarify my setup :
@dataclass
class ParasiteDrag:
FF_EQN: Dict[str,float] = field(default_factory=lambda: { "FF_B_MANUAL": 0,"FF_B_SCHEMENSKY_BODY": 1,"FF_B_SCHEMENSKY_NACELLE": 2,
"FF_B_HOERNER_STREAMBODY": 3,"FF_B_TORENBEEK": 4,"FF_B_SHEVELL": 5,
"FF_B_COVERT": 6,"FF_B_JENKINSON_FUSE": 7,"FF_B_JENKINSON_WING_NACELLE": 8,
"FF_B_JENKINSON_AFT_FUSE_NACELLE": 9,"FF_W_MANUAL": 0,"FF_W_EDET_CONV": 1,
"FF_W_EDET_ADV": 2,"FF_W_HOERNER": 3,"FF_W_COVERT": 4,"FF_W_WILLIAMS": 5,
"FF_W_KROO": 6,"FF_W_TORENBEEK": 7,"FF_W_DATCOM": 8,"FF_W_SCHEMENSKY_6_SERIES_AF": 9,
"FF_W_SCHEMENSKY_4_SERIES_AF": 10,"FF_W_JENKINSON_WING": 11,"FF_W_JENKINSON_TAIL": 12,
"FF_W_SCHEMENSKY_SUPERCRITICAL_AF": 13})
CDp: float = 0
excrescence: Dict[str,float] = field(default_factory=lambda: {"ExcresType":2,"ExcresVal":20})
vsp_obj: VSP = None
def __post_init__(self):
self.set_excrescence_drag(self.excrescence)
def get_parasite_drag(self,sref,speed,alt,first_val,speed_unit=vsp.V_UNIT_MACH,length_unit=vsp.LEN_M):
"""
Parameters
----------
sref : float
wing reference area.
speed : float
freestream air speed, needs to be as the same unit as speed_unit variable.
alt : float
altitude in ft.
first_val : boolean
compute geom flag for OpenVSP, True for the initial parasite drag point, False for the remaining points .
speed_unit : vsp.V_UNIT,optional
speed_unit to be used for OpenVSP PDT. The default is vsp.V_UNIT_MACH.
length_unit : vsp.V_UNIT, optional
length_unit to be used for OpenVSP PDT. The default is vsp.LEN_M.
Returns
-------
None. Calculates cDp (parasite drag)
Uses component drag build up method via OpenVSP's PDT
(
https://vspu.larc.nasa.gov/training-content/chapter-3-model-analysis-in-openvsp/parasite-drag/)
Based on form factor equations
Each parasite drag component object has their own FF_EQN attribute, please check related objects.
"""
# print(f"We are in parasite drag refArea,speed,altitude are: {sref,speed,alt}")
self.set_parasite_drag_properties(self.FF_EQN,self.vsp_obj.parasite_drag_comps)
self.set_vsp_parasite_drag_set(self.vsp_obj.parasite_drag_comps)
# Reset default values to ensure values that have been read from a vsp file are used by default
vsp.SetAnalysisInputDefaults('ParasiteDrag')
cont_id = vsp.FindContainer("ParasiteDragSettings", 0 )
# inputs that don't change during a sweep
vsp.SetIntAnalysisInput("ParasiteDrag", "VelocityUnit", [speed_unit])
if length_unit is not None:
vsp.SetIntAnalysisInput("ParasiteDrag", "LengthUnit", [length_unit])
vsp.SetParmVal(cont_id,"LengthUnit",'ParasiteDrag',length_unit)
vsp.SetStringAnalysisInput("ParasiteDrag", "FileName", ["/dev/null"])
if sref is not None:
vsp.SetIntAnalysisInput("ParasiteDrag", "RefFlag", [0])
vsp.SetDoubleAnalysisInput("ParasiteDrag", "Sref", [float(sref)])
vsp.SetParmVal(cont_id,"Sref",'ParasiteDrag',float(sref))
vsp.SetVSP3FileName('/dev/null')
vsp.SetDoubleAnalysisInput("ParasiteDrag", "Vinf", [float(speed)])
vsp.SetDoubleAnalysisInput("ParasiteDrag", "Altitude", [float(alt)])
if first_val: