""" Some models used in unit conversion tests."""
import numpy as np
import openmdao.api as om
[docs] class SrcComp ( om . ExplicitComponent ):
"""Source provides degrees Celsius."""
[docs] def setup ( self ):
self . add_input ( 'x1' , 100.0 )
self . add_output ( 'x2' , 100.0 , units = 'degC' )
[docs] def setup_partials ( self ):
self . declare_partials ( '*' , '*' )
[docs] def compute ( self , inputs , outputs ):
""" Pass through."""
outputs [ 'x2' ] = inputs [ 'x1' ]
[docs] def compute_partials ( self , inputs , partials ):
""" Derivative is 1.0"""
partials [ 'x2' , 'x1' ] = 1.0
[docs] class SrcCompFD ( SrcComp ):
"""Source provides degrees Celsius."""
[docs] def setup ( self ):
self . add_input ( 'x1' , 100.0 )
self . add_output ( 'x2' , 100.0 , units = 'degC' )
[docs] def setup_partials ( self ):
self . declare_partials ( '*' , '*' , method = 'fd' )
[docs] def compute_partials ( self , inputs , partials ):
""" Override"""
pass
[docs] class TgtCompF ( om . ExplicitComponent ):
"""Target expressed in degrees F."""
[docs] def setup ( self ):
self . add_input ( 'x2' , 100.0 , units = 'degF' )
self . add_output ( 'x3' , 100.0 )
[docs] def setup_partials ( self ):
self . declare_partials ( '*' , '*' )
[docs] def compute ( self , inputs , outputs ):
""" Pass through."""
outputs [ 'x3' ] = inputs [ 'x2' ]
[docs] def compute_partials ( self , inputs , partials ):
""" Derivative is 1.0"""
partials [ 'x3' , 'x2' ] = 1.0
[docs] class TgtCompFFD ( TgtCompF ):
"""Source provides degrees Celsius."""
[docs] def setup ( self ):
self . add_input ( 'x2' , 100.0 , units = 'degF' )
self . add_output ( 'x3' , 100.0 )
[docs] def setup_partials ( self ):
self . declare_partials ( '*' , '*' , method = 'fd' )
[docs] def compute_partials ( self , inputs , partials ):
""" Override"""
pass
[docs] class TgtCompC ( om . ExplicitComponent ):
"""Target expressed in degrees Celsius."""
[docs] def setup ( self ):
self . add_input ( 'x2' , 100.0 , units = 'degC' )
self . add_output ( 'x3' , 100.0 )
[docs] def setup_partials ( self ):
self . declare_partials ( '*' , '*' )
[docs] def compute ( self , inputs , outputs ):
""" Pass through."""
outputs [ 'x3' ] = inputs [ 'x2' ]
[docs] def compute_partials ( self , inputs , partials ):
""" Derivative is 1.0"""
partials [ 'x3' , 'x2' ] = 1.0
[docs] class TgtCompCFD ( TgtCompC ):
"""Source provides degrees Celsius."""
[docs] def setup ( self ):
self . add_input ( 'x2' , 100.0 , units = 'degC' )
self . add_output ( 'x3' , 100.0 )
[docs] def setup_partials ( self ):
self . declare_partials ( '*' , '*' , method = 'fd' )
[docs] def compute_partials ( self , inputs , partials ):
""" Override"""
pass
[docs] class TgtCompK ( om . ExplicitComponent ):
"""Target expressed in degrees Kelvin."""
[docs] def setup ( self ):
self . add_input ( 'x2' , 100.0 , units = 'degK' )
self . add_output ( 'x3' , 100.0 )
[docs] def setup_partials ( self ):
self . declare_partials ( '*' , '*' )
[docs] def compute ( self , inputs , outputs ):
""" Pass through."""
outputs [ 'x3' ] = inputs [ 'x2' ]
[docs] def compute_partials ( self , inputs , partials ):
""" Derivative is 1.0"""
partials [ 'x3' , 'x2' ] = 1.0
[docs] class TgtCompKFD ( TgtCompK ):
"""Source provides degrees Celsius."""
[docs] def setup ( self ):
self . add_input ( 'x2' , 100.0 , units = 'degK' )
self . add_output ( 'x3' , 100.0 )
[docs] def setup_partials ( self ):
self . declare_partials ( '*' , '*' , method = 'fd' )
[docs] def compute_partials ( self , inputs , partials ):
""" Override"""
pass
[docs] class TgtCompFMulti ( om . ExplicitComponent ):
"""Contains some extra inputs that might trip things up."""
[docs] def setup ( self ):
self . add_input ( '_x2' , 100.0 , units = 'degF' )
self . add_input ( 'x2' , 100.0 , units = 'degF' )
self . add_input ( 'x2_' , 100.0 , units = 'degF' )
self . add_output ( '_x3' , 100.0 )
self . add_output ( 'x3' , 100.0 )
self . add_output ( 'x3_' , 100.0 )
[docs] def setup_partials ( self ):
self . declare_partials ( '*' , '*' )
[docs] def compute ( self , inputs , outputs ):
""" Pass through."""
outputs [ 'x3' ] = inputs [ 'x2' ]
[docs] def compute_partials ( self , inputs , J ):
""" Derivative is 1.0"""
J [ '_x3' , 'x2' ] = np . array ([ 1.0 ])
J [ '_x3' , '_x2' ] = 0.0
J [ '_x3' , 'x2_' ] = 0.0
J [ 'x3' , 'x2' ] = np . array ([ 1.0 ])
J [ 'x3' , '_x2' ] = 0.0
J [ 'x3' , 'x2_' ] = 0.0
J [ 'x3_' , 'x2' ] = np . array ([ 1.0 ])
J [ 'x3_' , '_x2' ] = 0.0
J [ 'x3_' , 'x2_' ] = 0.0
[docs] class UnitConvGroup ( om . Group ):
"""Group containing a degC source that feeds into three targets with
units degF, degC, and degK respectively. Good for testing unit
conversion."""
[docs] def __init__ ( self , ** kwargs ):
super () . __init__ ( ** kwargs )
self . add_subsystem ( 'px1' , om . IndepVarComp ( 'x1' , 100.0 ))
self . add_subsystem ( 'src' , SrcComp ())
self . add_subsystem ( 'tgtF' , TgtCompF ())
self . add_subsystem ( 'tgtC' , TgtCompC ())
self . add_subsystem ( 'tgtK' , TgtCompK ())
self . connect ( 'px1.x1' , 'src.x1' )
self . connect ( 'src.x2' , 'tgtF.x2' )
self . connect ( 'src.x2' , 'tgtC.x2' )
self . connect ( 'src.x2' , 'tgtK.x2' )
[docs] class UnitConvGroupImplicitConns ( om . Group ):
""" Group containing a defF source that feeds into three targets with
units degF, degC, and degK respectively. Good for testing unit
conversion.
In this version, all connections are Implicit.
"""
[docs] def __init__ ( self ):
super () . __init__ ()
self . add_subsystem ( 'px1' , om . IndepVarComp ( 'x1' , 100.0 ), promotes_outputs = [ 'x1' ])
self . add_subsystem ( 'src' , SrcComp (), promotes_inputs = [ 'x1' ], promotes_outputs = [ 'x2' ])
self . add_subsystem ( 'tgtF' , TgtCompF (), promotes_inputs = [ 'x2' ])
self . add_subsystem ( 'tgtC' , TgtCompC (), promotes_inputs = [ 'x2' ])
self . add_subsystem ( 'tgtK' , TgtCompK (), promotes_inputs = [ 'x2' ])
Copy to clipboard