Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Turboelectric HTS Ducted Fan Network #535

Merged
merged 39 commits into from
Dec 10, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
238bfda
testing commit on txt file wow
sofie-0 Nov 10, 2021
a6a3786
Merge branch 'suavecode:develop' into develop
sofie-0 Nov 10, 2021
c521521
removing wow
sofie-0 Nov 10, 2021
247a46a
Merge branch 'develop' of https://github.com/Sof222/SUAVE into develop
sofie-0 Nov 10, 2021
66c0ab3
adding Cryocooler component
sofie-0 Nov 10, 2021
8aacdeb
adding Crocooler methods
sofie-0 Nov 10, 2021
3bb99d9
Cryocooler regression test
sofie-0 Nov 10, 2021
cec4381
Copper attribute
sofie-0 Nov 10, 2021
cc0a116
init modified for Cooling method
sofie-0 Nov 10, 2021
92b2a61
regression test for turboelectric HTS ducted fan network
sofie-0 Nov 14, 2021
c5734f2
remove earlier regression test
sofie-0 Nov 14, 2021
82b6cc6
Merge branch 'suavecode:develop' into develop
sofie-0 Nov 14, 2021
ad2cac3
updates from upstream
sofie-0 Nov 14, 2021
2a7051c
init file modifications
sofie-0 Nov 14, 2021
44ac1a8
copper attribute
sofie-0 Nov 14, 2021
b8feefa
modifying init file
sofie-0 Nov 14, 2021
0e8ede0
modifying cryocooler model
sofie-0 Nov 14, 2021
16866aa
Merge branch 'develop' of https://github.com/Sof222/SUAVE into develop
sofie-0 Nov 14, 2021
f3b1fa9
cryogen attributes
sofie-0 Nov 14, 2021
5aa6dfa
motor hts rotor, energy convertor component
sofie-0 Nov 14, 2021
00e5f9f
new components and methods
sofie-0 Nov 15, 2021
c24e4e1
removing uneeded attributes
sofie-0 Nov 15, 2021
f2e65c0
format modifications
sofie-0 Nov 15, 2021
71372ee
header modifications
sofie-0 Nov 15, 2021
faad5df
adding new regression script
sofie-0 Nov 15, 2021
f574247
forgot comma
sofie-0 Nov 15, 2021
4de87cb
format
sofie-0 Nov 17, 2021
0322217
Merge branch 'develop' into develop
sofie-0 Nov 18, 2021
001ef1c
Modifying Turboelectric
sofie-0 Nov 22, 2021
8efec60
resolving pull request comments
sofie-0 Nov 23, 2021
f6a0b29
Move lead method into class
sofie-0 Nov 24, 2021
d6f1750
Method fixes
sofie-0 Nov 25, 2021
e262b59
resolving pull request comments
sofie-0 Nov 25, 2021
78a25cd
for loop modifications
sofie-0 Nov 29, 2021
d1b2ba9
Formatting
sofie-0 Nov 30, 2021
13842c4
Merge branch 'develop' of https://github.com/Sof222/SUAVE into develop
sofie-0 Dec 1, 2021
3401e72
line spacing
sofie-0 Dec 8, 2021
ab0521a
Formatting
sofie-0 Dec 9, 2021
7fd769d
Merge branch 'develop' into develop
sofie-0 Dec 9, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion regression/automatic_regression.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,8 @@
'scripts/VTOL/test_Multicopter.py',
'scripts/VTOL/test_Tiltwing.py',
'scripts/VTOL/test_Stopped_Rotor.py',
'scripts/weights/weights.py'
'scripts/weights/weights.py',
'scripts/turboelectric_HTS_ducted_fan_network/turboelectric_HTS_ducted_fan_network.py'
]

# ----------------------------------------------------------------------
Expand Down

Large diffs are not rendered by default.

92 changes: 92 additions & 0 deletions trunk/SUAVE/Attributes/Solids/Copper.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
## @ingroup Attributes-Solids
# Copper.py
#
# Created: Feb 2020, K. Hamilton

#-------------------------------------------------------------------------------
# Imports
#-------------------------------------------------------------------------------

from .Solid import Solid
from SUAVE.Core import Units
from scipy import interpolate
from array import *

#-------------------------------------------------------------------------------
# RRR=50 OFHC Copper Class
#-------------------------------------------------------------------------------

## @ingroup Attributes-Solid
class Copper(Solid):

""" Physical Constants Specific to copper RRR=50 OFHC

Assumptions:
None

Source:
"PROPERTIES OF SELECTED MATERIALS AT CRYOGENIC TEMPERATURES" Peter E. Bradley and Ray Radebaugh
"A copper resistance temperature scale" Dauphinee, TM and Preston-Thomas, H

Inputs:
N/A

Outputs:
N/A

Properties Used:
None
"""

def __defaults__(self):
"""Sets material properties at instantiation.

Assumptions:
None

Source:
N/A

Inputs:
N/A

Outputs:
N/A

Properties Used:
None
"""

self.density = 8960.0 # [kg/(m**3)]
self.conductivity_electrical = 58391886.09 # [mhos/m]
self.conductivity_thermal = 392.4 # [W/(m*K)]

def thermal_conductivity(self, temperature):
# Lookup table arrays. Temperature in K, conductivity in W/(m*K)
temperatures = [4.0, 6.0, 8.0, 10.0, 12.0, 14.0, 16.0, 18.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0, 90.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 220.0, 240.0, 260.0, 280.0, 300.0]
conductivities = [3.204, 4.668, 6.223, 7.781, 9.273, 10.64, 11.85, 12.87, 13.68, 14.44, 11.63, 8.636, 6.7, 5.611, 5.003, 4.651, 4.439, 4.218, 4.116, 4.06, 4.026, 4.001, 3.982, 3.965, 3.95, 3.936, 3.924]

# Function that interpolates the lookup table data
c = interpolate.interp1d(temperatures, conductivities, kind = 'cubic', fill_value='extrapolate')

# Create output variable

conductivity = c(temperature)

return conductivity



# lookup table and interpolator for estimating the electrical conductivity of copper at cryogenic temperatures.
def electrical_conductivity(self, temperature):
# Lookup table. Temperature in K, conductivity in mhos/m
temperatures = [4.2, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 29.0, 30.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 38.0, 40.0, 42.0, 44.0, 46.0, 48.0, 50.0, 52.0, 54.0, 56.0, 58.0, 60.0, 64.0, 68.0, 72.0, 76.0, 80.0, 85.0, 90.0, 95.0, 100.0, 110.0, 120.0, 130.0, 140.0, 150.0, 160.0, 170.0, 180.0, 190.0, 200.0, 210.0, 220.0, 230.0, 240.0, 250.0, 260.0, 270.0, 273.16, 280.0, 290.0, 300.0, 310.0, 320.0]
conductivities = [62706513.73, 59649351.1, 58823529.41, 57862233.7, 56756705.27, 55547010.82, 54265718.98, 52838319.53, 51265727.5, 49621943.91, 47879990.68, 46119256.86, 44295117.43, 42462678.59, 40594025.68, 38689780.55, 36839664.93, 34982975.23, 33178363.63, 29768952.17, 26747761.29, 23951445.97, 21412914.59, 19097216.66, 17144994.46, 15418051.98, 13912657.74, 12602171.91, 11436522.41, 10413826.85, 9526550.123, 8071135.431, 6915841.211, 6030094.818, 5295406.175, 4719663.549, 4129948.887, 3661837.678, 3283955.516, 2972855.668, 2494427.41, 2147259.712, 1884972.1, 1680269.452, 1516360.227, 1382622.667, 1270747.745, 1176213.988, 1095370.181, 1025134.636, 963654.7402, 909308.7026, 860944.9011, 817561.3102, 778513.0909, 742977.6209, 710652.6341, 701058.8235, 681102.5197, 653862.9927, 628729.7528, 605483.2867, 583918.8609]

# Function that interpolates the lookup table data
c = interpolate.interp1d(temperatures, conductivities, kind = 'cubic', fill_value='extrapolate')


conductivity = c(temperature)

return conductivity
2 changes: 1 addition & 1 deletion trunk/SUAVE/Attributes/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@
from . import Atmospheres
from . import Propellants
from . import Airports
from . import Solids
from . import Solids
111 changes: 111 additions & 0 deletions trunk/SUAVE/Components/Energy/Converters/Motor_HTS_Rotor.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
## @ingroup Components-Energy-Converters
# Motor_HTS_Rotor.py
#
# Created: Feb 2020, K. Hamilton
# Modified: Nov 2021, S. Claridge

# ----------------------------------------------------------------------
# Imports
# ----------------------------------------------------------------------

# suave imports
import SUAVE

# package imports
from SUAVE.Components.Energy.Energy_Component import Energy_Component

# ----------------------------------------------------------------------
# HTS Rotor Class
# ----------------------------------------------------------------------
## @ingroup Components-Energy-Converters
class Motor_HTS_Rotor(Energy_Component):
"""This represents just the rotor of a HTS motor, i.e. the superconducting components.
This is used to estimate the power and cooling required for the HTS components.
The power used here could be considered the same as that used by the motor as inefficiency, however many publications consider the overall motor efficiency, i.e. including cryocooler and/or motor drive electronics.

Assumptions:
No ACLoss in the HTS,
HTS is operated within the Ic and Tc limits.
i.e the power used by the coil is only due to solder resistances only, and is not affected by the motor output power or speed.

Source:
None
"""
def __defaults__(self):
"""This sets the default values for the component to function.

Assumptions:
None

Source:
N/A

Inputs:
None

Outputs:
None

Properties Used:
None
"""
self.temperature = 0.0 # Temperature inside of the rotor [K]
self.skin_temp = 300.0 # Temperature of the outside of the rotor [K]
self.current = 0.0 # HTS coil current. [A]
self.resistance = 0.0 # Resistance of the HTS oils. [ohm]
self.length = 0.0 # Physical size of rotor exterior [m]
self.diameter = 0.0 # Physical size of rotor exterior [m]
self.surface_area = 0.0 # Surface area of the rotor. [m2]
self.R_value = 125.0 # R_Value of the cryostat wall. [K.m2/W]
self.number_of_engines = 2.0 # Number of rotors on the vehicle

def power(self, current, ambient_temp):
""" Calculates the electrical power draw from the HTS coils, and the total heating load on the HTS rotor cryostat.

Assumptions:
No ACLoss in the HTS,
HTS is operated within the Ic and Tc limits.
i.e the power used by the coil is only due to solder resistances only.

Source:
N/A

Inputs:
current [A]
ambient_temp [K]

Outputs:
input_power [W]
cryogenic_load [W]

Properties Used:
self.
temperature [K]
resistance [ohm]
surface_area [m2]
R_value [K.m2/W]
"""
# unpack
cryo_temp = self.temperature
coil_R = self.resistance
surface_area = self.surface_area
r_value = self.R_value

# Calculate HTS coil power
# This is both the electrical power required to operate the coil, and the thermal load imparted by the coil into the cryostat.
coil_power = coil_R * current**2
coil_voltage = current*coil_R

# Estimate heating from external heat conducting through the cryostat wall.
# Given the non-cryogenic armature coils are usually very close to this external wall it is likely the temperature at the wall is above ambient.
Q = (ambient_temp - cryo_temp)/(r_value/surface_area)

# Sum the heat loads to give total rotor heat load.
cryo_load = coil_power + Q

# Store the outputs.
self.outputs.coil_power = coil_power
self.outputs.coil_voltage = coil_voltage
self.outputs.cryo_load = cryo_load

return coil_power
84 changes: 84 additions & 0 deletions trunk/SUAVE/Components/Energy/Converters/Turboelectric.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
## @ingroup Components-Energy-Converters
# Turboelectric.py
#
# Created: Nov 2019, K. Hamilton
# Modified: Nov 2021, S. Claridge
# ----------------------------------------------------------------------
# Imports
# ----------------------------------------------------------------------

# suave imports
import SUAVE

# package imports
from SUAVE.Core import Units
from SUAVE.Components.Energy.Energy_Component import Energy_Component
from SUAVE.Methods.Power.Turboelectric.Discharge import zero_fidelity

# ----------------------------------------------------------------------
# Turboelectric Class
# ----------------------------------------------------------------------
## @ingroup Components-Energy-Converters
class Turboelectric(Energy_Component):
"""This is a turboelectic component.

Assumptions:
None

Source:
None
"""
def __defaults__(self):
"""This sets the default values for the component to function.

Assumptions:
None

Source:
https://new.siemens.com/global/en/products/energy/power-generation/gas-turbines/sgt-a30-a35-rb.html

Inputs:
None

Outputs:
None

Properties Used:
None
"""
self.propellant = None
self.oxidizer = None
self.number_of_engines = 0.0 # number of turboelectric machines, not propulsors
self.efficiency = .37 # Approximate average gross efficiency across the product range.
self.volume = 0.0
self.rated_power = 0.0
self.mass_properties.mass = 0.0
self.specific_power = 0.0
self.mass_density = 0.0
self.discharge_model = zero_fidelity # Simply takes the fuel specific power and applies an efficiency.



def energy_calc(self,conditions,numerics):
"""This calls the assigned discharge method.

Assumptions:
None

Source:
N/A

Inputs:
see properties used

Outputs:
mdot [kg/s] (units may change depending on selected model)

Properties Used:
self.discharge_model(self, conditions, numerics)
"""

mdot = self.discharge_model(self, conditions, numerics)
return mdot


2 changes: 2 additions & 0 deletions trunk/SUAVE/Components/Energy/Converters/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,5 @@
from .Rotor import Rotor
from .Lift_Rotor import Lift_Rotor
from .Propeller import Propeller
from .Motor_HTS_Rotor import Motor_HTS_Rotor
from .Turboelectric import Turboelectric
Loading