# Sellar example ```python ''' Sellar example: ''' import csdl_alpha as csdl import numpy as np recorder = csdl.Recorder(inline=True) recorder.start() # Sellar problem from OpenMDAO: # https://openmdao.org/newdocs/versions/latest/basic_user_guide/multidisciplinary_optimization/sellar.html # Define variables: using openmdao solved optimization values z1 = csdl.Variable(name = 'z1', value = 1.97763888) z2 = csdl.Variable(name = 'z2', value = 8.83056605e-15) x = csdl.Variable(name = 'x', value = 0.0) y2 = csdl.ImplicitVariable(name = 'y2', value = 1.0) # Define each "component" from the example with csdl.namespace('Discipline 1'): y1 = z1**2 + z2 + x - 0.2*y2 y1.add_name('y1') with csdl.namespace('Discipline 2'): residual = csdl.sqrt(y1) + z1 + z2 - y2 residual.add_name('residual') with csdl.namespace('Objective'): f = x**2 + z2 + y1 + csdl.exp(-y2) f.add_name('f') with csdl.namespace('Constraint 1'): g1 = 3.16 - y1 g1.add_name('g1') with csdl.namespace('Constraint 2'): g2 = y2 - 24.0 g2.add_name('g2') # Specifiy coupling with csdl.namespace('Couple'): solver = csdl.nonlinear_solvers.Newton() solver.add_state(y2, residual, tolerance=1e-8) solver.run() # Verify values with OpenMDAO documentation: # https://openmdao.org/newdocs/versions/latest/basic_user_guide/reading_recording/basic_recording_example.html print('y1: ', y1.value) print('y2: ', y2.value) print('f: ', f.value) print('g1: ', g1.value) print('g2: ', g2.value) print('z1: ', z1.value) print('z2: ', z2.value) # Visualize Graph recorder.stop() recorder.visualize_graph('sellar') assert np.isclose(y1.value, 3.15999999) assert np.isclose(y2.value, 3.75527776) assert np.isclose(f.value, 3.18339394) assert np.isclose(g1.value, 1.32573978e-08) assert np.isclose(g2.value, -20.24472224) assert np.isclose(z1.value, 1.97763888) assert np.isclose(z2.value, 8.83056605e-15) ```