Source code for RCAIDE.Framework.External_Interfaces.OpenVSP.get_vsp_measurements
# RCAIDE/Framework/External_Interfaces/OpenVSP/get_vsp_measurements.py
#
# Created: --- 2016, T. MacDonald
# Modified: Aug 2017, T. MacDonald
# Mar 2018, T. MacDonald
# Jan 2020, T. MacDonald
# Feb 2021, T. MacDonald
# ----------------------------------------------------------------------------------------------------------------------
# IMPORT
# ----------------------------------------------------------------------------------------------------------------------
# RCAIDE imports
try:
import vsp as vsp
except ImportError:
try:
import openvsp as vsp
except ImportError:
# This allows RCAIDE to build without OpenVSP
pass
import numpy as np
import os
import sys
# ----------------------------------------------------------------------------------------------------------------------
# Get VSP Measurements
# ----------------------------------------------------------------------------------------------------------------------
[docs]
def get_vsp_measurements(filename = 'Unnamed_CompGeom.csv', measurement_type = 'wetted_area'):
"""This calls OpenVSP to compute the wetted areas or volumes of a previously written vehicle.
Assumptions:
Vehicle must be open in OpenVSP (via recently used vsp_write)
All components have different tags. Repeated tags are added together under the
assumption that this represents multiple engines or similar. Values computed from
repeated tags in this way may need to be divided by the number of entities later
before assignment. This is because some analyses may multiply an assigned area
by number of engines, for example.
Source:
N/A
Inputs:
None
Outputs:
measurement [m^2 or m^3] - Dictionary with values for each component,
with component tags as the keys.
Properties Used:
N/A
"""
if measurement_type == 'wetted_area':
output_ind = 2
elif measurement_type == 'wetted_volume':
output_ind = 4
else:
raise NotImplementedError
half_mesh = False # Note that this does not affect the Gmsh/SU2 meshing process
# it only affects how much area of a component is included in the output
try:
file_type = vsp.COMP_GEOM_CSV_TYPE
except NameError:
print('VSP import failed')
return -1
# Get the last path from sys.path
system_path = sys.path[0]
# Append the system path to the filename
filename = os.path.join(system_path, filename)
vsp.SetComputationFileName(file_type, filename)
vsp.ComputeCompGeom(vsp.SET_ALL, half_mesh, file_type)
f = open(filename)
measurements = dict()
# Extract wetted areas for each component
for ii, line in enumerate(f):
if ii == 0:
pass
elif line == '\n':
break
else:
vals = line.split(',')
item_tag = vals[0][:]
item_w_area = float(vals[output_ind])
if item_tag in measurements:
item_w_area = measurements[item_tag] + item_w_area
measurements[item_tag] = item_w_area
f.close()
return measurements