def __init__(self,name,rhs,num_seg,seg_ncn=3,rel_lengths=1): super(CollocationPhase,self).__init__() self._eom_states = rhs.eom_states self.trajectory = None self.name = name self._segments = [] parallel_segment_group = ParallelGroup() for i in range(num_seg): seg_name = '{0}'.format(i) seg = CollocationSegment(index=i, rhs=rhs, num_cardinal_nodes=2, rel_length=1) parallel_segment_group.add(name=seg_name, system=seg) self._segments.append(seg) self.add(name='segments',system=parallel_segment_group) # 3. Add the state and dynamic control param comps and muxing components eom_state_names = ['X_c:{0}'.format(state['name']) for state in rhs.eom_states] for i,state in enumerate(self._eom_states): self.add( name='eom_state_ivar_comp:{0}'.format(state['name']), system=IndepVarComp(name=eom_state_names[i], val=np.zeros((3))), promotes=[eom_state_names[i]]) for i, seg in enumerate(self._segments): idxs_states = range(0, 2) for state in self._eom_states: state_name = state['name'] self.connect( 'X_c:{0}'.format(state_name), 'segments.{0:d}.X_c:{1}'.format(i, state_name), src_indices=idxs_states)
def __init__(self,name,rhs,num_seg,seg_ncn=3,rel_lengths=1): super(CollocationPhase,self).__init__() self._eom_states = rhs.eom_states self.trajectory = None self.name = name self._segments = [] parallel_segment_group = ParallelGroup() for i in range(num_seg): seg_name = 's{0}'.format(i) seg = CollocationSegment(index=i, rhs=rhs, num_cardinal_nodes=2, rel_length=1) parallel_segment_group.add(name=seg_name, system=seg) self._segments.append(seg) self.add(name='segments',system=parallel_segment_group) # 3. Add the state and dynamic control param comps and muxing components eom_state_names = ['X_c:{0}'.format(state['name']) for state in rhs.eom_states] for i,state in enumerate(self._eom_states): self.add( name='eom_state_ivar_comp_{0}'.format(state['name']), system=IndepVarComp(name=eom_state_names[i], val=np.zeros((3))), promotes=[eom_state_names[i]]) for i, seg in enumerate(self._segments): idxs_states = range(0, 2) for state in self._eom_states: state_name = state['name'] self.connect( 'X_c:{0}'.format(state_name), 'segments.s{0:d}.X_c:{1}'.format(i, state_name), src_indices=idxs_states)
def setUp(self): root = ParallelGroup() root.nl_solver = NLGaussSeidel() root.add('C1', IndepVarComp('x', 5.)) root.add('C2', ExecComp('y=x*2.0')) root.add('C3', ExecComp('y=x*2.0')) root.add('C4', ExecComp('y=x*2.0')) root.connect("C1.x", "C2.x") root.connect("C2.y", "C4.x") root.connect("C4.y", "C3.x") self.root = root
def test_run(self): root = ParallelGroup() root.nl_solver = NLGaussSeidel() root.add('C1', IndepVarComp('x', 5.)) root.add('C2', ExecComp('y=x*2.0')) root.add('C3', ExecComp('y=x*2.0')) root.add('C4', ExecComp('y=x*2.0')) root.connect("C1.x", "C2.x") root.connect("C2.y", "C3.x") root.connect("C3.y", "C4.x") prob = Problem(root) prob.setup(check=False) prob.run() self.assertEqual(root.nl_solver.iter_count, 3) self.assertEqual(prob['C4.y'], 40.)