title: OpenMDAO: unexpected behaviour of ParallelGroup
body: <p>In the below example where two <code>ParallelGroup</code>s are set up to require different number of procs to compute their serial sub-components, it seems that a group that should not fill up the global comm in fact does, and executes redundant/repeated cases. In previous versions the unassigned procs would not execute their sub-components. It runs without errors though.</p>
  <pre><code>from mpi4py import MPI
  import openmdao.api as om
  
  
  class Exec(om.ExplicitComponent):
  
  
      def __init__(self, val=-10):
          super().__init__()
  
          self.val = val
  
      def setup(self):
  
          self.add_output('y', 0.)
  
      def compute(self, inputs, outputs):
  
          print('HELLO from Exec1, %s, global rank %i, val=%f' % (self.name, MPI.COMM_WORLD.rank, self.val))
          outputs['y'] = self.val
  
  
  class Exec2(om.ExplicitComponent):
  
  
      def __init__(self, val):
          super().__init__()
  
          self.val = val
  
      def setup(self):
  
          self.add_input('x', 0.)
          self.add_output('y', 0.)
  
      def compute(self, inputs, outputs):
  
          print('HELLO from Exec2, %s, global rank %i, val=%f' % (self.name, MPI.COMM_WORLD.rank, self.val))
          outputs['y'] = self.val * inputs['x']
  
  
  class Summer(om.ExplicitComponent):
  
      def __init__(self, ncase):
          super().__init__()
  
          self.ncase = ncase
  
      def setup(self):
  
          for i in range(self.ncase):
              self.add_input('y%i' % i, 0.)
          self.add_output('sum', 0.)
  
      def compute(self, inputs, outputs):
  
          for i in range(self.ncase):
  
              outputs['sum'] += inputs['y%i' % i]
  
  p = om.Problem()
  
  ncase = 3
  
  par1 = p.model.add_subsystem('par1', om.ParallelGroup())
  p.model.add_subsystem('summer1', Summer(ncase))
  
  for i in range(ncase):
  
      par1.add_subsystem('ex_%i' % i, Exec(val=float(i)), min_procs=1)
      p.model.connect('par1.ex_%i.y' % i, 'summer1.y%i' % i)
  
  
  
  
  ncase2 = 4
  
  par2 = p.model.add_subsystem('par2', om.ParallelGroup())
  p.model.add_subsystem('summer2', Summer(ncase2))
  
  
  for i in range(ncase2):
  
      par2.add_subsystem('ex_%i' % i, Exec2(float(i)), min_procs=1)
      p.model.connect('summer1.sum', 'par2.ex_%i.x' % i)
      p.model.connect('par2.ex_%i.y' % i, 'summer2.y%i' % i)
  p.setup()
  p.run_model()
  
  
  </code></pre>