Skip to content

Commit

Permalink
Merge branch 'develop' into fix-checkpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
mclarke2 committed Dec 11, 2021
2 parents 4a42c06 + 5bb0c64 commit 11197d5
Show file tree
Hide file tree
Showing 24 changed files with 1,683 additions and 7 deletions.
3 changes: 2 additions & 1 deletion regression/automatic_regression.py
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
@@ -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
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
@@ -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
@@ -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
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

0 comments on commit 11197d5

Please sign in to comment.