Source code for openmdao.test_suite.components.expl_comp_simple
"""Define the explicit test component (simple)."""
from openmdao.core.explicitcomponent import ExplicitComponent
[docs]class TestExplCompSimple(ExplicitComponent):
[docs] def setup(self):
self.add_input('length', val=1., desc='length of rectangle')
self.add_input('width', val=1., desc='width of rectangle')
self.add_output('area', val=1., desc='area of rectangle')
[docs] def setup_partials(self):
self.declare_partials('*', '*')
[docs] def compute(self, inputs, outputs):
outputs['area'] = inputs['length'] * inputs['width']
[docs]class TestExplCompSimpleDense(TestExplCompSimple):
[docs] def compute_partials(self, inputs, partials):
partials['area', 'length'] = inputs['width']
partials['area', 'width'] = inputs['length']
[docs]class TestExplCompSimpleJacVec(TestExplCompSimple):
[docs] def setup_partials(self):
pass # prevent declared partials from base class
[docs] def compute_jacvec_product(self, inputs, d_inputs, d_outputs, mode):
length = inputs['length']
width = inputs['width']
d_area = d_outputs['area']
if mode == 'fwd':
# TODO: Assignment back into the results vector doesn't work with
# intermediate variables (see commented out line).
if 'width' in d_inputs:
#d_area += d_inputs['width']*length
d_outputs['area'] += d_inputs['width']*length
if 'length' in d_inputs:
#d_area += d_inputs['length']*width
d_outputs['area'] += d_inputs['length']*width
else:
if 'width' in d_inputs:
d_inputs['width'] += d_area*length
if 'length' in d_inputs:
d_inputs['length'] += d_area*width