@@ -361,6 +361,7 @@ def __init__( # pylint: disable=too-many-statements
361361
362362 # calculate dynamic inertial quantities
363363 self .evaluate_dry_mass ()
364+ self .evaluate_structural_mass_ratio ()
364365 self .evaluate_total_mass ()
365366 self .evaluate_center_of_dry_mass ()
366367 self .evaluate_center_of_mass ()
@@ -433,6 +434,26 @@ def evaluate_dry_mass(self):
433434
434435 return self .dry_mass
435436
437+ def evaluate_structural_mass_ratio (self ):
438+ """Calculates and returns the rocket's structural mass ratio.
439+ It is defined as the ratio between of the dry mass
440+ (Motor + Rocket) and the initial total mass
441+ (Motor + Propellant + Rocket).
442+
443+ Returns
444+ -------
445+ self.structural_mass_ratio: float
446+ Initial structural mass ratio dry mass (Rocket + Motor) (kg)
447+ divided by total mass (Rocket + Motor + Propellant) (kg).
448+ """
449+ # Make sure there is a motor associated with the rocket
450+
451+ self .structural_mass_ratio = self .dry_mass / (
452+ self .dry_mass + self .motor .propellant_initial_mass
453+ )
454+
455+ return self .structural_mass_ratio
456+
436457 def evaluate_center_of_mass (self ):
437458 """Evaluates rocket center of mass position relative to user defined
438459 rocket reference system.
@@ -951,6 +972,7 @@ def add_motor(self, motor, position): # pylint: disable=too-many-statements
951972 self .nozzle_position = self .motor .nozzle_position * _ + self .motor_position
952973 self .total_mass_flow_rate = self .motor .total_mass_flow_rate
953974 self .evaluate_dry_mass ()
975+ self .evaluate_structural_mass_ratio ()
954976 self .evaluate_total_mass ()
955977 self .evaluate_center_of_dry_mass ()
956978 self .evaluate_nozzle_to_cdm ()
0 commit comments