init
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -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')
|
||||||
Reference in New Issue
Block a user