Source code for RCAIDE.Library.Methods.Aerodynamics.Athena_Vortex_Lattice.write_mass_file

# RCAIDE/Library/Methods/Aerodynamics/Athena_Vortex_Lattice/write_mass_file.py
#
# Created: Oct 2024, M. Clarke

# ----------------------------------------------------------------------------------------------------------------------
#  IMPORT
# ----------------------------------------------------------------------------------------------------------------------

# RCAIDE imports 
from RCAIDE.Library.Methods.Aerodynamics.Athena_Vortex_Lattice.purge_files              import purge_files  

# ----------------------------------------------------------------------------------------------------------------------
#  write_mass_file
# ---------------------------------------------------------------------------------------------------------------------- 
[docs] def write_mass_file(avl_object,run_conditions): """This function writes the translated aircraft mass into text file read by AVL when it is called """ # unpack inputs mass_file = avl_object.settings.filenames.mass_file aircraft = avl_object.vehicle # Open the mass file after purging if it already exists purge_files([mass_file]) mass_file_script = open(mass_file,'w') with open(mass_file,'w') as mass_file_script: """This function writes the header using the template required for the AVL executable to read """ # mass file template base_text = \ ''' #------------------------------------------------- # {0} # # Dimensional unit and parameter data. # Mass & Inertia breakdown. #------------------------------------------------- # Names and scalings for units to be used for trim and eigenmode calculations. # The Lunit and Munit values scale the mass, xyz, and inertia table data below. # Lunit value will also scale all lengths and areas in the AVL input file. Lunit = 1.0 m Munit = 1.0 kg Tunit = 1.0 s #------------------------- # Gravity and density to be used as default values in trim setup. # Must be in the units given above. g = {1} rho = {2} #------------------------- # Mass & Inertia breakdown. # x y z is location of item's own CG. # Ixx... are item's inertias about item's own CG. # # x,y,z system here must be exactly the same one used in the AVL input file # (same orientation, same origin location, same length units) # # mass x y z Ixx Iyy Izz Component Name # {3} {4} {5} {6} {7} {8} {9} ! {0} ''' # Unpack inputs name = avl_object.vehicle.tag density = run_conditions.freestream.density[0][0] gravity = run_conditions.freestream.gravity[0][0] if aircraft.mass_properties.mass == 0: mass = aircraft.mass_properties.max_takeoff elif aircraft.mass_properties.max_takeoff == 0: mass = aircraft.mass_properties.mass else: raise AttributeError("Specify Vehicle Mass") x = aircraft.mass_properties.center_of_gravity[0][0] y = aircraft.mass_properties.center_of_gravity[0][1] z = aircraft.mass_properties.center_of_gravity[0][2] Ixx = aircraft.mass_properties.moments_of_inertia.tensor[0][0] Iyy = aircraft.mass_properties.moments_of_inertia.tensor[1][1] Izz = aircraft.mass_properties.moments_of_inertia.tensor[2][2] # Insert inputs into the template text = base_text.format(name, gravity , density,mass, x,y,z,Ixx,Iyy,Izz) mass_file_script.write(text) return