def test_pload4_cquad4(self): """tests a PLOAD4 with a CQUAD4""" bdf_filename = os.path.join(test_path, '..', 'models', 'pload4', 'cquad4.bdf') op2_filename = os.path.join(test_path, '..', 'models', 'pload4', 'cquad4.op2') op2 = OP2(debug=False, log=log) op2.read_op2(op2_filename) model = BDF(debug=False) model.read_bdf(bdf_filename) # p0 = (model.nodes[21].xyz + model.nodes[22].xyz + model.nodes[23].xyz) / 3. p0 = model.nodes[21].xyz eids = None nids = None subcase_ids = [1, 2, 3, 4, 5, 6, 7, 8] for isubcase in subcase_ids: subcase = model.subcases[isubcase] loadcase_id = subcase.get_parameter('LOAD')[0] load = model.Load(loadcase_id) loadi = load[0] if loadi.type == 'PLOAD4': elem = loadi.eids_ref[0] #area = 1.0 centroid = elem.Centroid() normal = elem.Normal() # centroid = [0.5, 0.5, 0.] # normal = [0., 0., 1.] #print('centroid=%s normal=%s' % (centroid, normal)) msg = '%s%s%s\n' % (elem.nodes[0], elem.nodes[1], elem.nodes[2]) assert array_equal(centroid, array([0.5, 0.5, 0.])), 'centroid=%s\n%s' % (centroid, msg) assert array_equal(normal, array([0., 0., 1.])), 'normal=%s\n%s' % (normal, msg) f1, m1 = model.sum_forces_moments(p0, loadcase_id, include_grav=False) f2, m2 = model.sum_forces_moments_elements(p0, loadcase_id, eids, nids, include_grav=False) assert allclose(f1, f2), 'f1=%s f2=%s' % (f1, f2) assert allclose(m1, m2), 'm1=%s m2=%s' % (m1, m2) case = op2.spc_forces[isubcase] fm = -case.data[0, :, :].sum(axis=0) assert len(fm) == 6, fm force = fm[:3] if not allclose(f1[0], force[0]): model.log.error('subcase=%-2i Fx f=%s force_expected=%s' % ( isubcase, f1.tolist(), force.tolist())) if not allclose(f1[1], force[1]): model.log.error('subcase=%-2i Fy f=%s force_expected=%s' % ( isubcase, f1.tolist(), force.tolist())) if not allclose(f1[2], force[2]): model.log.error('subcase=%-2i Fz f=%s force_expected=%s' % ( isubcase, f1.tolist(), force.tolist())) save_load_deck(model, punch=False)
def test_pload4_cpenta(self): """tests a PLOAD4 with a CPENTA""" bdf_filename = os.path.join(test_path, '..', 'models', 'pload4', 'cpenta.bdf') op2_filename = os.path.join(test_path, '..', 'models', 'pload4', 'cpenta.op2') op2 = OP2(debug=False, log=log) op2.read_op2(op2_filename) model = BDF(debug=False) model.read_bdf(bdf_filename) # p0 = (model.nodes[21].xyz + model.nodes[22].xyz + model.nodes[23].xyz) / 3. p0 = model.nodes[21].xyz angles = [ (23, 24), (24, 23), (21, 26), (26, 21), ] nx = [ (23, 25), (25, 23), (22, 26), (26, 22), ] msg = '' for isubcase, subcase in sorted(iteritems(model.subcases)): if isubcase == 0: continue #if isubcase != 17: #continue loadcase_id = subcase.get_parameter('LOAD')[0] load = model.Load(loadcase_id, consider_load_combinations=True)[0] elem = load.eids_ref[0] g1 = load.g1_ref.nid if load.g34_ref is None: g34 = None #print(load) face, area, centroid, normal = elem.get_face_area_centroid_normal(g1) assert area == 0.5, area if g1 in [21, 22, 23]: assert face == (2, 1, 0), 'g1=%s face=%s' % (g1, face) assert array_equal(centroid, array([2/3., 1/3., 0.])), 'fore g1=%s g34=%s face=%s centroid=%s\n%s' % (g1, g34, face, centroid, msg) assert array_equal(normal, array([0., 0., 1.])), 'fore g1=%s g34=%s face=%s normal=%s\n%s' % (g1, g34, face, normal, msg) else: assert face == (3, 4, 5), 'g1=%s face=%s' % (g1, face) assert array_equal(centroid, array([2/3., 1/3., 2.])), 'aft g1=%s g34=%s face=%s centroid=%s\n%s' % (g1, g34, face, centroid, msg) assert array_equal(normal, array([0., 0., -1.])), 'aft g1=%s g34=%s face=%s normal=%s\n%s' % (g1, g34, face, normal, msg) else: g34 = load.g34_ref.nid face, area, centroid, normal = elem.get_face_area_centroid_normal(g1, g34) if (g1, g34) in angles: self.assertAlmostEqual(area, 2 * 2**0.5, msg='g1=%s g34=%s face=%s area=%s' % (g1, g34, face, area)) elif (g1, g34) in nx: self.assertEqual(area, 2.0, 'area=%s' % area) msg = '%s%s%s%s\n' % ( elem.nodes[face[0]], elem.nodes[face[1]], elem.nodes[face[2]], elem.nodes[face[3]]) assert array_equal(centroid, array([1., .5, 1.])), 'Nx g1=%s g34=%s face=%s centroid=%g\n%s' % (g1, g34, face, centroid, msg) assert array_equal(normal, array([-1., 0., 0.])), 'Nx g1=%s g34=%s face=%s normal=%g\n%s' % (g1, g34, face, normal, msg) else: msg = '%s%s%s%s\n' % ( elem.nodes[face[0]], elem.nodes[face[1]], elem.nodes[face[2]], elem.nodes[face[3]]) assert array_equal(centroid, array([0.5, .0, 1.])), 'Ny g1=%s g34=%s face=%s centroid=%s\n%s' % (g1, g34, face, centroid, msg) assert array_equal(normal, array([0., 1., 0.])), 'Ny g1=%s g34=%s face=%s normal=%s\n%s' % (g1, g34, face, normal, msg) self.assertEqual(area, 2.0, 'area=%s' % area) forces1, moments1 = model.sum_forces_moments(p0, loadcase_id, include_grav=False) eids = None nids = None forces2, moments2 = model.sum_forces_moments_elements( p0, loadcase_id, eids, nids, include_grav=False) assert allclose(forces1, forces2), 'forces1=%s forces2=%s' % (forces1, forces2) assert allclose(moments1, moments2), 'moments1=%s moments2=%s' % (moments1, moments2) case = op2.spc_forces[isubcase] fm = -case.data[0, :3, :].sum(axis=0) assert len(fm) == 6, fm if not allclose(forces1[0], fm[0]): model.log.errror('subcase=%-2i Fx f=%s fexpected=%s face=%s' % ( isubcase, forces1.tolist(), fm.tolist(), face)) if not allclose(forces1[1], fm[1]): model.log.errror('subcase=%-2i Fy f=%s fexpected=%s face=%s' % ( isubcase, forces1.tolist(), fm.tolist(), face)) if not allclose(forces1[2], fm[2]): model.log.errror('subcase=%-2i Fz f=%s fexpected=%s face=%s' % ( isubcase, forces1.tolist(), fm.tolist(), face))