This commit is contained in:
2024-07-08 17:23:59 +08:00
commit 7911b9b39d
5 changed files with 2519 additions and 0 deletions
View File
File diff suppressed because it is too large Load Diff
+91
View File
@@ -0,0 +1,91 @@
import copy
import os
import re
from pathlib import Path
def cal_fuel_density(fuel_type):
if fuel_type == 'kerolox':
fuel_density = kerosene['density'] * 0.3487 + lox['density'] * 0.6513
elif fuel_type == 'methalox':
fuel_density = lqdmethane['density'] * 0.4137 + lox['density'] * 0.5863
elif fuel_type == 'hydrolox':
fuel_density = lh2['density'] * 0.7276 + lox['density'] * 0.2724
else:
raise TypeError
return fuel_density
def load_common_resources(file_path):
file = open(file_path, 'r', encoding='utf-8')
content = file.readlines()
file.close()
result_dict = {}
new_content_list = []
for line in content:
if line.startswith('//') or not line or not line.strip():
continue
new_content_list.append(line)
new_content = ''.join(new_content_list)
resource_list = new_content.split('RESOURCE_DEFINITION\n')
for resource in resource_list:
if not resource:
continue
name = re.search(r'name = .+', resource)[0].replace('name = ', '')
density = re.search(r'density = .+', resource)[0].replace('density = ', '')
try:
unit_cost = float(re.search(r'unitCost = .+', resource)[0].replace('unitCost = ', ''))
except ValueError:
unit_cost = re.search(r'unitCost = .+', resource)[0].replace('unitCost = ', '')
unit_cost = float(unit_cost.split(' //')[0].replace(' ', ''))
try:
density = float(density) * 1000
except ValueError:
density = density.split(' //')[0].replace(' ', '')
density = float(density) * 1000
result_dict[name] = {'density': density, 'unitCost': unit_cost}
return result_dict
def cal_tank_volume(fuel_mass, fuel_type):
fuel_density = cal_fuel_density(fuel_type)
return fuel_mass / fuel_density
def cal_fuel_mass(fuel_dict):
fuel_mass = 0
for fuel, volume in fuel_dict.items():
fuel_mass += common_resources_dict[fuel]['density'] * volume
return fuel_mass
def cal_fuel_mass_based_on_tank_volume(fuel_type, tank_volume):
fuel_density = cal_fuel_density(fuel_type)
fuel_mass = tank_volume * fuel_density
return fuel_mass
if __name__ == '__main__':
path = os.path.join('data', 'CommonResources.cfg')
common_resources_dict = load_common_resources(path)
lqdmethane = common_resources_dict['LqdMethane']
kerosene = common_resources_dict['Kerosene']
lox = common_resources_dict['LqdOxygen']
lh2 = common_resources_dict['LqdHydrogen']
# fuel_density = kerosene['density'] * 0.3487 + lox['density'] * 0.6513
# fuel_density = lqdmethane['density'] * 0.4137 + lox['density'] * 0.5863
# required_fuel_mass = 173800
# result_fuel_tank_volume = cal_tank_volume(1666600, 'hydrolox')
# print(cal_tank_volume(60000, 'hydrolox'))
print(cal_tank_volume(339000, 'kerolox'))
print(cal_fuel_mass({'Kerosene': 48345.13, 'LqdOxygen': 90298.77}))
print(cal_fuel_mass_based_on_tank_volume('kerolox', 108000))
print(cal_fuel_mass({'LqdHydrogen':54802.1756419623, 'LqdOxygen':20516.9222581005}))
print('done')
View File