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
Beispiel #4
0
    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.)