Example #1
0
    def test_beam3(self):
        solver.solve(self.beams[3])

        #Test the solution
        self.assertEqual(-48.5, self.beams[3].interactions[0].magnitude)
        self.assertEqual(18, self.beams[3].interactions[4].magnitude)

        shear_moment = shearmomentgenerator.generate_numerical(self.beams[3], self.STEP_SIZE)

        #Test shear
        assert abs(shear_moment[0][0] - 0) < self.ALMOST
        assert abs(shear_moment[int(1/self.STEP_SIZE) -1][0] - 0) < self.ALMOST
        assert abs(shear_moment[int(1/self.STEP_SIZE) + 1][0] - 7) < self.ALMOST
        assert abs(shear_moment[int(2/self.STEP_SIZE) -1][0] - 7) < self.ALMOST
        assert abs(shear_moment[int(7/self.STEP_SIZE) +1][0] - (-18)) < self.ALMOST
        assert abs(shear_moment[int(8/self.STEP_SIZE) -1][0] - (-18)) < self.ALMOST
        assert abs(shear_moment[int(8/self.STEP_SIZE) +1][0] - (0)) < self.ALMOST
        assert abs(shear_moment[int(10/self.STEP_SIZE) -1][0] - (0)) < self.ALMOST

        #Test moment
        assert abs(shear_moment[0][1] - 48.5) < self.ALMOST
        assert abs(shear_moment[int(1/self.STEP_SIZE) - 1][1] - 48.5) < self.ALMOST
        
        #Had to decrease criteria due to steep slope
        assert abs(shear_moment[int(8/self.STEP_SIZE) - 1][1] - 10) < 0.02
        assert abs(shear_moment[int(8/self.STEP_SIZE) +1][1] - 0) < self.ALMOST
        assert abs(shear_moment[int(10/self.STEP_SIZE) -1][1] - 0) < self.ALMOST
def generate_numerical(beam, step_size):
    """Numerically generates shear and moment points along the length
    of the beam by solving subbeams of increasing length. Step size must
    be specified. step sizes of 0.01 - 0.0001 for a l=10 beam yield reasonable
    solve times on modern CPUs. Returns the result as a list of 2-tuples in the
    format (shear, moment). One point for each step, from 0 to beam.length.
    """

    #Verify that the beam is solved.
    for interaction in beam.interactions:
        if not interaction.known:
            raise Shear_Moment_Error(
                'Cannot generate shear diagram for an unsolved beam.')

    shear_moment = []

    for curr_size in np.arange(0, beam.length, step_size):
        sub_beam = gen_sub_beam(beam, curr_size)

        #The unknown shear and moment at the end of the cut subbeam.
        internal_shear = Force(curr_size, 0, False)
        internal_moment = Moment(curr_size, 0, False)

        sub_beam.add_interaction(internal_shear)
        sub_beam.add_interaction(internal_moment)

        solver.solve(sub_beam)

        shear_moment.append(
            (-internal_shear.magnitude, internal_moment.magnitude))

    return shear_moment
def solve_clicked():
    """Solve is clicked - solve the beam and update the tree."""

    try:
        solver.solve(beam)
    except SolverError as e:
        QtGui.QMessageBox.warning(window, "Error", str(e))
        return

    update_tree(beam)
Example #4
0
def solve_clicked():
    """Solve is clicked - solve the beam and update the tree."""

    try:
        solver.solve(beam)
    except SolverError as e:
        QtGui.QMessageBox.warning(window, "Error", str(e))
        return

    update_tree(beam)
Example #5
0
    def test_beam1(self):
        solver.solve(self.beams[1])

        #Test solution
        self.assertEqual(-10, self.beams[1].interactions[0].magnitude)
        self.assertEqual(-95, self.beams[1].interactions[1].magnitude)

        shear_moment = shearmomentgenerator.generate_numerical(self.beams[1], self.STEP_SIZE)

        #Test shear
        for item in shear_moment:
            assert abs(item[0] - (-10)) < self.ALMOST

        #Test moment
        assert abs(shear_moment[0][1] - 95) < self.ALMOST
        assert abs(shear_moment[int(4/self.STEP_SIZE - 1)][1] - 55 ) < self.ALMOST
        assert abs(shear_moment[int(5.5/self.STEP_SIZE) - 1][1] - 0) < self.ALMOST
Example #6
0
    def test_beam0(self):

        solver.solve(self.beams[0])

        #Test solution
        self.assertEqual(5, self.beams[0].interactions[0].magnitude)
        self.assertEqual(5, self.beams[0].interactions[2].magnitude)
        
        shear_moment = shearmomentgenerator.generate_numerical(self.beams[0], self.STEP_SIZE)

        #Test moment
        assert abs(shear_moment[0][1] - 0 ) < self.ALMOST
        assert abs(shear_moment[int(10/self.STEP_SIZE/2)][1] - 25) < self.ALMOST
        assert abs(shear_moment[int(10/self.STEP_SIZE/4)][1] - 25/2) < self.ALMOST

        #Test shear
        assert abs(shear_moment[1][0] - 5) < self.ALMOST
        assert abs(shear_moment[int(10/self.STEP_SIZE/2) -1][0] - 5 ) < self.ALMOST
        assert abs(shear_moment[int(10/self.STEP_SIZE/2) +2][0] - (-5)) < self.ALMOST
        assert abs(shear_moment[int(10/self.STEP_SIZE) -1][0] - (-5)) < self.ALMOST
Example #7
0
    def test_beam2(self):
        solver.solve(self.beams[2])

        #Test the solution
        self.assertEqual(7.5, self.beams[2].interactions[0].magnitude)
        self.assertEqual(32.5, self.beams[2].interactions[3].magnitude)

        shear_moment = shearmomentgenerator.generate_numerical(self.beams[2], self.STEP_SIZE)

        #Test shear
        assert abs(shear_moment[0][0] - 7.5) < self.ALMOST
        assert abs(shear_moment[int(10/self.STEP_SIZE)][0] - (-2.5)) < self.ALMOST
        assert abs(shear_moment[int(15/self.STEP_SIZE) - 1][0] - (-2.5)) < self.ALMOST
        assert abs(shear_moment[int(15/self.STEP_SIZE) + 1][0] - (-22.5)) < self.ALMOST
        assert abs(shear_moment[int(20/self.STEP_SIZE) - 1][0] - (-22.5)) < self.ALMOST
        assert abs(shear_moment[int(20/self.STEP_SIZE) + 1][0] - (10)) < self.ALMOST

        #Test moment
        assert abs(shear_moment[0][1] - 0) < self.ALMOST
        assert abs(shear_moment[int(10/self.STEP_SIZE)][1] - 25) < self.ALMOST
        assert abs(shear_moment[int(15/self.STEP_SIZE)][1] - 12.5) < self.ALMOST
        assert abs(shear_moment[int(20/self.STEP_SIZE)][1] - (-100)) < self.ALMOST
        assert abs(shear_moment[int(30/self.STEP_SIZE) -1][1] - 0) < self.ALMOST
    def do_solve(self, arguments):
        """Solve the current beam."""

        solver.solve(self.beam)
        self.do_view(None)
Example #9
0
    def test_solver_error(self):

        self.beams[0].add_interaction(Force(3, 0, False))

        with self.assertRaises(SolverError):
            solver.solve(self.beams[0])
Example #10
0
    def do_solve(self, arguments):
        """Solve the current beam."""

        solver.solve(self.beam)
        self.do_view(None)