def testPlatformTower(self): myobj = frame.PlatformFrame(options=self.opt) myobj.node_mem2glob = {} myobj.node_glob2mem = {} myobj.compute(self.inputs, self.outputs) for k in self.outputs: self.inputs[k] = self.outputs[k] for k in self.discrete_outputs: self.discrete_inputs[k] = self.discrete_outputs[k] myobj = frame.PlatformTowerFrame() myobj.compute(self.inputs, self.outputs) npt.assert_equal( self.outputs["system_nodes"][:6, :], np.array( [ [0.0, 0.0, 0.0], [0.0, 0.0, 1.0], [0.5, 1.0, 0.0], [1.0, 0.0, 0.0], [0.0, 0.0, 51.0], [0.0, 0.0, 101.0], ] ), ) npt.assert_equal( self.outputs["system_Fnode"][:6, :], 1e2 * np.array( [[0.0, 0.0, 2], [0.0, 0.0, 0.0], [0.0, 0.0, 2], [0.0, 0.0, 2.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]] ), ) npt.assert_equal(self.outputs["system_Rnode"][:6], 0.1 * np.r_[3, 5, 5, 4, 0, 0]) npt.assert_equal(self.outputs["system_elem_n1"][:8], np.r_[0, 3, 2, 0, 3, 2, 1, 4]) npt.assert_equal(self.outputs["system_elem_n2"][:8], np.r_[3, 2, 0, 1, 1, 1, 4, 5]) npt.assert_equal(self.outputs["system_elem_D"][:8], 2.0) npt.assert_equal(self.outputs["system_elem_t"][:8], 0.1) npt.assert_equal(self.outputs["system_elem_A"][:8], np.r_[0.5 * np.arange(6) + 1, 4, 4]) npt.assert_equal(self.outputs["system_elem_Asx"][:8], np.r_[0.5 * np.arange(6) + 1, 4.1, 4.1]) npt.assert_equal(self.outputs["system_elem_Asy"][:8], np.r_[0.5 * np.arange(6) + 1, 4.1, 4.1]) npt.assert_equal(self.outputs["system_elem_Ixx"][:8], np.r_[2 * np.arange(6) + 1, 5, 5]) npt.assert_equal(self.outputs["system_elem_Iyy"][:8], np.r_[2 * np.arange(6) + 1, 5, 5]) npt.assert_equal(self.outputs["system_elem_Izz"][:8], np.r_[2 * np.arange(6) + 1, 10, 10]) # npt.assert_equal(self.outputs["system_elem_rho"][:8], np.r_[3 * np.arange(6)+1, 20, 20]) npt.assert_equal(self.outputs["system_elem_E"][:8], np.r_[3 * np.arange(6) + 1, 30, 30]) npt.assert_equal(self.outputs["system_elem_G"][:8], np.r_[4 * np.arange(6) + 1, 40, 40]) self.assertEqual(self.outputs["system_mass"], 6e3 + 5e3 + 1e4 + 1e3) self.assertEqual(self.outputs["variable_ballast_mass"], 6e4 - self.outputs["system_mass"]) npt.assert_equal( self.outputs["system_center_of_mass"], ( 6e3 * np.array([0.375, 0.25, 0.25]) + 5e3 * np.array([0.0, 0.0, 51.0]) + 1e3 * np.array([0.0, 0.0, 1.0]) + 1e4 * np.array([1.0, 1.0, 102.0]) ) / 2.2e4, ) npt.assert_equal(self.outputs["transition_piece_I"], 1e3 * 0.25 * np.r_[0.5, 0.5, 1.0, np.zeros(3)])
def testRunFrame(self): myobj = frame.PlatformFrame(options=self.opt) myobj.node_mem2glob = {} myobj.node_glob2mem = {} myobj.compute(self.inputs, self.outputs) for k in self.outputs: self.inputs[k] = self.outputs[k] for k in self.discrete_outputs: self.discrete_inputs[k] = self.discrete_outputs[k] myobj = frame.PlatformTowerFrame() myobj.compute(self.inputs, self.outputs) for k in self.outputs: self.inputs[k] = self.outputs[k] for k in self.discrete_outputs: self.discrete_inputs[k] = self.discrete_outputs[k] myobj = frame.FrameAnalysis(options=self.opt) myobj.compute(self.inputs, self.outputs) self.assertTrue(True)
def testPlatformTower(self): myobj = frame.PlatformFrame(options=self.opt) myobj.node_mem2glob = {} myobj.node_glob2mem = {} myobj.compute(self.inputs, self.outputs) for k in self.outputs: self.inputs[k] = self.outputs[k] for k in self.discrete_outputs: self.discrete_inputs[k] = self.discrete_outputs[k] myobj = frame.PlatformTowerFrame() myobj.compute(self.inputs, self.outputs) npt.assert_equal( self.outputs["system_nodes"][:6, :], np.array( [ [0.0, 0.0, 0.0], [0.0, 0.0, 1.0], [0.5, 1.0, 0.0], [1.0, 0.0, 0.0], [0.0, 0.0, 51.0], [0.0, 0.0, 101.0], ] ), ) npt.assert_equal( self.outputs["system_Fnode"][:6, :], 1e2 * np.array( [[0.0, 0.0, 2], [0.0, 0.0, 0.0], [0.0, 0.0, 2], [0.0, 0.0, 2.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]] ), ) npt.assert_equal(self.outputs["system_Rnode"][:6], 0.1 * np.r_[3, 5, 5, 4, 0, 0]) npt.assert_equal(self.outputs["system_elem_n1"][:8], np.r_[0, 3, 2, 0, 3, 2, 1, 4]) npt.assert_equal(self.outputs["system_elem_n2"][:8], np.r_[3, 2, 0, 1, 1, 1, 4, 5]) npt.assert_equal(self.outputs["system_elem_D"][:8], 2.0) npt.assert_equal(self.outputs["system_elem_t"][:8], 0.1) npt.assert_equal(self.outputs["system_elem_A"][:8], np.r_[0.5 * np.arange(6) + 1, 4, 4]) npt.assert_equal(self.outputs["system_elem_Asx"][:8], np.r_[0.5 * np.arange(6) + 1, 4.1, 4.1]) npt.assert_equal(self.outputs["system_elem_Asy"][:8], np.r_[0.5 * np.arange(6) + 1, 4.1, 4.1]) npt.assert_equal(self.outputs["system_elem_Ixx"][:8], np.r_[2 * np.arange(6) + 1, 5, 5]) npt.assert_equal(self.outputs["system_elem_Iyy"][:8], np.r_[2 * np.arange(6) + 1, 5, 5]) npt.assert_equal(self.outputs["system_elem_Izz"][:8], np.r_[2 * np.arange(6) + 1, 10, 10]) # npt.assert_equal(self.outputs["system_elem_rho"][:8], np.r_[3 * np.arange(6)+1, 20, 20]) npt.assert_equal(self.outputs["system_elem_E"][:8], np.r_[3 * np.arange(6) + 1, 30, 30]) npt.assert_equal(self.outputs["system_elem_G"][:8], np.r_[4 * np.arange(6) + 1, 40, 40]) self.assertEqual(self.outputs["system_structural_mass"], 6e3 + 5e3 + 1e4 + 1e3) npt.assert_equal(self.outputs["system_elem_Px1"][:8], 1.0) npt.assert_equal(self.outputs["system_elem_Px2"][:8], 1.0) npt.assert_equal(self.outputs["system_elem_Py1"][:8], 2.0) npt.assert_equal(self.outputs["system_elem_Py2"][:8], 2.0) npt.assert_equal(self.outputs["system_elem_Pz1"][:8], 3.0) npt.assert_equal(self.outputs["system_elem_Pz2"][:8], 3.0) npt.assert_equal( self.outputs["system_structural_center_of_mass"], ( 6e3 * np.array([0.375, 0.25, 0.25]) + 5e3 * np.array([0.0, 0.0, 51.0]) + 1e3 * np.array([0.0, 0.0, 1.0]) + 1e4 * np.array([1.0, 1.0, 102.0]) ) / 2.2e4, ) self.assertEqual(self.outputs["variable_ballast_mass"], 6e4 - self.outputs["system_structural_mass"] - 3e3 / g) self.assertAlmostEqual( self.outputs["constr_variable_margin"], self.outputs["variable_ballast_mass"] / 1e3 / (10 + np.arange(6)).sum(), ) frac = (10 + np.arange(6)) / (10 + np.arange(6)).sum() V_frac = self.outputs["variable_ballast_mass"] / 1e3 * frac npt.assert_almost_equal(self.outputs["member_variable_volume"], V_frac) s_cg = np.interp(0.5 * V_frac, np.arange(10), np.linspace(0, 0.5, 10)) s_end = np.interp(V_frac, np.arange(10), np.linspace(0, 0.5, 10)) npt.assert_almost_equal(self.outputs["member_variable_height"], s_end) cg_mem = np.zeros((6, 3)) for k in range(6): cg_mem[k, :] = ( s_cg[k] * np.diff(self.inputs[f"member{k}:nodes_xyz"][:2, :], axis=0) + self.inputs[f"member{k}:nodes_xyz"][0, :] ) cg_var = np.dot(V_frac, cg_mem) / (self.outputs["variable_ballast_mass"] / 1e3) self.assertEqual(self.outputs["system_mass"], 6e3 + 5e3 + 1e4 + 1e3 + self.outputs["variable_ballast_mass"]) npt.assert_almost_equal( self.outputs["system_center_of_mass"], ( (6e3 + 5e3 + 1e4 + 1e3) * self.outputs["system_structural_center_of_mass"] + self.outputs["variable_ballast_mass"] * cg_var ) / self.outputs["system_mass"], ) npt.assert_equal(self.outputs["transition_piece_I"], 1e3 * 0.25 * np.r_[0.5, 0.5, 1.0, np.zeros(3)])