Source code for openmdao.examples.doe_example
#!/usr/bin/env python
""" Running DOE experiments (in parallel)"""
from __future__ import print_function
import numpy as np
from openmdao.api import IndepVarComp
from openmdao.api import Component, Group
from openmdao.api import Problem
from openmdao.api import UniformDriver
from openmdao.api import DumpRecorder
from openmdao.api import NLGaussSeidel
from openmdao.core.mpi_wrap import MPI
[docs]class DUT(Component):
def __init__(self):
super(DUT, self).__init__()
self.add_param('x', val=0.)
self.add_param('c', val=0.)
self.add_output('y', shape=1)
[docs] def solve_nonlinear(self, params, unknowns, resids):
""" Doesn't do much. Just multiply x by c"""
sum([j*j for j in xrange(10000000)]) # dummy delay (busy loop)
unknowns['y'] = params['c']*params['x']
if __name__ == "__main__":
if MPI: # pragma: no cover
# if you called this script with 'mpirun', then use the petsc data passing
from openmdao.core.petsc_impl import PetscImpl as impl
else:
# if you didn't use `mpirun`, then use the numpy data passing
from openmdao.api import BasicImpl as impl
problem = Problem(impl=impl)
root = problem.root = Group()
root.add('indep_var', IndepVarComp('x', val=7.0))
root.add('const', IndepVarComp('c', val=3.0, pass_by_obj=False))
root.add('dut', DUT())
root.connect('indep_var.x', 'dut.x')
root.connect('const.c', 'dut.c')
problem.driver = UniformDriver(num_samples = 10, num_par_doe=5)
problem.driver.add_desvar('indep_var.x', low=4410.0, high=4450.0)
problem.driver.add_objective('dut.y')
recorder = DumpRecorder()
problem.driver.add_recorder(recorder)
problem.setup()
problem.run()
problem['dut.y']
problem.cleanup()