Skip to content

Commit

Permalink
Merge pull request #1451 from DKilkenny/parallel_comp_dymos
Browse files Browse the repository at this point in the history
Errant out-of-order warning fix
  • Loading branch information
swryan committed Jun 6, 2020
2 parents e7d4b3c + 971e308 commit 8f9558c
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 2 deletions.
7 changes: 5 additions & 2 deletions openmdao/error_checking/check_config.py
Expand Up @@ -159,7 +159,7 @@ def _get_used_before_calc_subs(group, input_srcs):
parallel_solver = {}
for i, sub in enumerate(group._subsystems_allprocs):
if hasattr(sub, '_mpi_proc_allocator') and sub._mpi_proc_allocator.parallel:
parallel_solver.update({sub.name: sub.nonlinear_solver.SOLVER})
parallel_solver[sub.name] = sub.nonlinear_solver.SOLVER

sub2i[sub.name] = i

Expand All @@ -172,9 +172,12 @@ def _get_used_before_calc_subs(group, input_srcs):
oparts = src_abs.split('.')
src_sys = oparts[glen]
tgt_sys = iparts[glen]
hierarchy_check = True if oparts[glen + 1] == iparts[glen + 1] else False

if (src_sys in parallel_solver and tgt_sys in parallel_solver and
(parallel_solver[src_sys] not in ["NL: NLBJ", "NL: Newton", "BROYDEN"]) and
src_sys == tgt_sys):
src_sys == tgt_sys and
not hierarchy_check):
simple_warning("Need to attach NonlinearBlockJac, NewtonSolver, or BroydenSolver "
"to '%s' when connecting components inside parallel "
"groups" % (src_sys))
Expand Down
25 changes: 25 additions & 0 deletions openmdao/error_checking/tests/test_check_config.py
Expand Up @@ -195,6 +195,31 @@ def test_single_parallel_group_order(self):

testlogger.find_in('warning', expected_warning)

def test_no_connect_parallel_group(self):
prob = Problem()
model = prob.model

traj = model.add_subsystem('traj', ParallelGroup())

burn1 = traj.add_subsystem('burn1', Group())
burn1.add_subsystem('p1', IndepVarComp('x', 1.0))
burn1.add_subsystem('burn_eq1', ExecComp(['y=-2.0*x']))
burn1.connect('p1.x', 'burn_eq1.x')

burn2 = traj.add_subsystem('burn2', Group())
burn2.add_subsystem('p2', IndepVarComp('x', 1.0))
burn2.add_subsystem('burn_eq2', ExecComp(['y=5.0*x']))
burn2.connect('p2.x', 'burn_eq2.x')

testlogger = TestLogger()
prob.setup(check=True, mode='fwd', logger=testlogger)

msg = "Need to attach NonlinearBlockJac, NewtonSolver, or BroydenSolver to 'parallel' when " \
"connecting components inside parallel groups"

with assert_no_warning(UserWarning, msg):
prob.run_model()

def test_dataflow_multi_level(self):
p = Problem()
root = p.model
Expand Down

0 comments on commit 8f9558c

Please sign in to comment.