h2integrate.simulation.technologies.hydrogen.h2_storage.pressure_vessel.tankinator

Contents

h2integrate.simulation.technologies.hydrogen.h2_storage.pressure_vessel.tankinator#

Author: Cory Frontin Date: 23 Jan 2023 Institution: National Renewable Energy Lab Description: This file computes pressure vessel thickness, replacing Tankinator.xlsx Sources:

  • Tankinator.xlsx

Classes

LinedTank(tanktype, load_bearing_liner[, ...])

a lined tank for Type III or Type III: aluminum-lined carbon fiber-jacketed tank

MetalMaterial(metal_type[, approx_method])

a class for the material properties for metals used in analysis

Tank(tank_type[, yield_factor, ultimate_factor])

a generalized class to size a pressurized gas tank assumed to be cylindrical with hemispherical ends

TypeIIITank([conservative, ...])

TypeITank(material[, yield_factor, ...])

a class I tank: metal shell tank

TypeIVTank([liner_design_load_factor, ...])

class h2integrate.simulation.technologies.hydrogen.h2_storage.pressure_vessel.tankinator.MetalMaterial(metal_type, approx_method='lookup')#

a class for the material properties for metals used in analysis

Parameters:
  • metal_type (str, must be in list of known materials) -- type of metal to use, must be defined in material_properties.json

  • approx_method (str, must be in list of known methods) -- method to approximate inexact table lookups

Raises:

NotImplementedError -- if inputs are not found in known data

_get_approx_fun()#
yield_shear_fun(T)#
ultimate_shear_fun(T)#
class h2integrate.simulation.technologies.hydrogen.h2_storage.pressure_vessel.tankinator.Tank(tank_type, yield_factor=1.5, ultimate_factor=2.25)#

a generalized class to size a pressurized gas tank assumed to be cylindrical with hemispherical ends

Parameters:
  • tank_type (int, must be 1, 3, or 4) -- type of tank to be used, which can take values I, III, IV referring to all-metal, aluminum-lined carbon fiber, and HDPE-lined carbon fiber, respectively, as

  • material (str, must be in valid types) -- material that the pressure vessel is made of

  • yield_factor (float)

  • ultimate_factor (float)

get_length_inner()#
get_radius_inner()#
get_volume_inner()#

computes the inner volume

get_operating_temperature()#
get_operating_pressure()#
set_length_radius(length_in, radius_in)#

set the pressure vessel dimensions by length and radius in cm and compute the volume in ccm

set_length_volume(length_in, volume_in)#

set pressure vessel dimensions by length in cm and volume in ccm

sets the length and volume of the pressure volume, backsolves for the radius of the pressure volume

set_radius_volume(radius_in, volume_in)#

set pressure vessel dimensions by radius in cm and volume in ccm

sets the radius and volume of the pressure volume, backsolves for the length of the pressure volume

set_operating_temperature(temperature_in)#
set_operating_pressure(pressure_in)#
compute_hemicylinder_volume(L)#
Parameters:
  • R (float)

  • L (float)

Return type:

float

compute_hemicylinder_outer_length(t)#
Parameters:
  • L (float)

  • t (float)

Return type:

float

compute_hemicylinder_outer_radius(t)#
Parameters:
  • R (float)

  • t (float)

Return type:

float

check_thinwall(t, thinwallratio_crit=10)#
Parameters:
  • Rinner (float)

  • t (float)

Return type:

bool

class h2integrate.simulation.technologies.hydrogen.h2_storage.pressure_vessel.tankinator.TypeITank(material, yield_factor=1.5, ultimate_factor=2.25, shear_approx='interp')#

a class I tank: metal shell tank

Parameters:
  • material (str)

  • yield_factor (float)

  • ultimate_factor (float)

get_thickness()#
get_length_outer()#

returns the outer length of the pressure vessel in cm

get_radius_outer()#

returns the outer radius of the pressure vessel in cm

get_volume_outer()#

returns the outer volume of the pressure vessel in ccm

get_volume_metal()#

returns the (unsealed) displacement volume of the pressure vessel in ccm

get_mass_metal()#

returns the mass of the pressure vessel in kg

get_cost_metal()#

returns the cost of the metal in the pressure vessel in dollars

get_gravimetric_tank_efficiency()#

returns the gravimetric tank efficiency: $$

rac{m_{metal}}{V_{inner}} $$

in L/kg

get_yield_thickness(pressure=None, temperature=None)#

gets the yield thickness

returns the yield thickness given by: $$ t_y=

rac{p R_0}{S_y} imes SF_{yield}

$$ with yield safety factor $SF_{yield}= 3/2$ by default

temperature and pressure must be set in the class, or specified in this function

param pressure:

operating pressure, in bar

type pressure:

float

param temperature:

operating temperature, in degrees C

type temperature:

float

Parameters:
  • pressure (float | None)

  • temperature (float | None)

get_ultimate_thickness(pressure=None, temperature=None)#

get the ultimate thickness

returns the ultimate thicnkess given by: $$ t_u=

rac{p R_0}{S_u} imes SF_{ultimate}

$$ with ultimate safety factor $SF_{yield}= 2.25$ by default

temperature and pressure must be set in the class, or specified in this function

param pressure:

operating pressure, in bar

type pressure:

float

param temperature:

operating temperature, in degrees C

type temperature:

float

Parameters:
  • pressure (float | None)

  • temperature (float | None)

get_thickness_thinwall(pressure=None, temperature=None)#

get the thickness based on thinwall assumptions

maximum between yield and ultimate thickness

temperature and pressure must be set in the class, or specified in this function

Parameters:
  • pressure (float) -- operating pressure, in bar

  • temperature (float) -- operating temperature, in degrees C

set_thickness_thinwall(pressure=None, temperature=None)#

set the thickness based on thinwall assumptions

maximum between yield and ultimate thickness

temperature and pressure must be set in the class, or specified in this function

Parameters:
  • pressure (float) -- operating pressure, in bar

  • temperature (float) -- operating temperature, in degrees C

get_thickness_vonmises(pressure=None, temperature=None, max_cycle_iter=10, adj_fac_tol=1e-06)#

get the thickness based on a von Mises cycle

temperature and pressure must be set in the class, or specified here

Parameters:
  • pressure (float) -- operating pressure, in bar

  • temperature (float) -- operating temperature, in degrees C

  • max_cycle_iter (int) -- maximum iterations for von Mises cycle

  • adj_fac_tol (float) -- tolerance for close enough wall thickness adjustment factor

set_thickness_vonmises(pressure=None, temperature=None, max_cycle_iter=10, adj_fac_tol=1e-06)#

set the thickness based on a von Mises cycle

temperature and pressure must be set in the class, or specified here

Parameters:
  • pressure (float) -- operating pressure, in bar

  • temperature (float) -- operating temperature, in degrees C

  • max_cycle_iter (int) -- maximum iterations for von Mises cycle

  • adj_fac_tol (float | None) -- tolerance for close enough wall thickness adjustment factor

class h2integrate.simulation.technologies.hydrogen.h2_storage.pressure_vessel.tankinator.LinedTank(tanktype, load_bearing_liner, liner_design_load_factor=0.21, liner_thickness_min=0.3, yield_factor=1.5, ultimate_factor=2.25)#

a lined tank for Type III or Type III: aluminum-lined carbon fiber-jacketed tank

Parameters:
  • tanktype (int)

  • yield_factor (float)

  • ultimate_factor (float)

get_thicknesses_thinwall(pressure=None)#

???

Parameters:

pressure (float | None)

set_thicknesses_thinwall(pressure=None)#

???

Parameters:

pressure (float | None)

get_safetyfactor_real_jacket()#

figure out the integer layer safety factor

get_length_liner()#

returns the outer length of the pressure vessel in cm

get_radius_liner()#

returns the outer radius of the pressure vessel in cm

get_volume_outer_liner()#

returns the outer volume of the pressure vessel in ccm

get_volume_liner()#

returns the (unsealed) displacement volume of the liner in ccm

get_mass_liner()#

returns the mass of the liner in kg

get_cost_liner()#

returns the cost of the liner material in $

get_length_outer()#

returns the outer length of the pressure vessel in cm

get_radius_outer()#

returns the outer radius of the pressure vessel in cm

get_volume_outer()#

returns the outer volume of the pressure vessel in ccm

get_volume_jacket()#

returns the (unsealed) displacement volume of the carbon fiber jacket in ccm

get_mass_jacket()#

returns the mass of the carbon fiber jacket in kg

get_cost_jacket()#

returns the cost of the jacket material in $

get_mass_tank()#

returns the mass of the empty tank in kg

get_cost_tank()#

returns the material cost of the tank in $

get_gravimetric_tank_efficiency()#

returns the gravimetric tank efficiency: $$

rac{m_{tank}}{V_{inner}} $$

in L/kg

class h2integrate.simulation.technologies.hydrogen.h2_storage.pressure_vessel.tankinator.TypeIIITank(conservative=False, liner_design_load_factor=0.21, liner_thickness_min=0.3, yield_factor=1.5, ultimate_factor=2.25)#
Parameters:
  • yield_factor (float)

  • ultimate_factor (float)

class h2integrate.simulation.technologies.hydrogen.h2_storage.pressure_vessel.tankinator.TypeIVTank(liner_design_load_factor=0.21, liner_thickness=0.4, yield_factor=1.5, ultimate_factor=2.25)#
Parameters:
  • yield_factor (float)

  • ultimate_factor (float)