def test_cord2_rcs_03(self): """ all points are located at <30,40,50> """ model = BDF(debug=False) cards = [ [ 'CORD2S* 2 0 0. 0.', '* 0. 0. 0. 1.* ', '* 1. 0. 1.',], [ #'$ Coordinate System 30 : rectangular in spherical', 'CORD2R* 30 2 14. 30.', '* 70. 13.431863852 32.1458443949 75.2107442927* ', '* 14.4583462334 33.4569982885 68.2297989286',], [ #'$ Coordinate System 31 : cylindrical in spherical', 'CORD2C* 31 2 3. 42.', '* -173. 2.86526881213 45.5425615252 159.180363517* ', '* 3.65222385965 29.2536614627 -178.631312271',], [ #'$ Coordinate System 32 : spherical in spherical', 'CORD2S* 32 2 22. 14.', '* 85. 22.1243073983 11.9537753718 77.9978191005* ', '* 21.0997242967 13.1806120497 88.4824763008',], [ 'GRID* 30 30 40.7437952957 -23.6254877994', '* -33.09784854 0',], [ 'GRID* 31 31 62.9378078196 15.9774797923', '* 31.0484428362 0',], [ 'GRID* 32 32 53.8270847449 95.8215692632', '* 159.097767463 0',], ] for lines in cards: card = model._process_card(lines) model.add_card(card, card[0]) unused_xyz_cid0b = model.get_xyz_in_coord_no_xref(cid=0, fdtype='float64') unused_xyz_cid0c = model.get_xyz_in_coord_no_xref(cid=32, fdtype='float64') bdf_file = StringIO() model.write_bdf(bdf_file, close=False) bdf_file.seek(0) #------------------------------------------------- model.cross_reference() model2 = BDFv(debug=False) model2.read_bdf(bdf_file, punch=True, xref=False, save_file_structure=False) bdf_file.seek(0) #------------------------------------------------- xyz_cid0_actual = array([ [30., 40., 50.], [30., 40., 50.], [30., 40., 50.], ], dtype='float64') for nid in model.nodes: node = model.Node(nid) a = array([30., 40., 50.]) b = node.get_position() self.assertTrue(allclose(array([30., 40., 50.]), node.get_position()), str(a - b)) xyz_cid0 = model.get_xyz_in_coord(cid=0, fdtype='float64') assert np.allclose(xyz_cid0_actual, xyz_cid0), '%s' % (xyz_cid0_actual - xyz_cid0) out = model.get_displacement_index_xyz_cp_cd() unused_icd_transform, icp_transform, xyz_cp, nid_cp_cd = out nids = nid_cp_cd[:, 0] xyz_cid0_xform = model.transform_xyzcp_to_xyz_cid( xyz_cp, nids, icp_transform, cid=0) array_equal(xyz_cid0_actual, xyz_cid0_xform) assert array_equal(nids, array([30, 31, 32])) model2.nodes.nids = nid_cp_cd[:, 0] for cid in [30, 31, 32]: unused_xyz_cid_a = model.transform_xyzcp_to_xyz_cid( xyz_cp, nids, icp_transform, cid=cid) unused_xyz_cid_b = model2.transform_xyzcp_to_xyz_cid( xyz_cp, nids, icp_transform, cid=cid, atol=None) #assert np.allclose(xyz_cid_a, xyz_cid_b), '%s' % np.isclose(xyz_cid_a, xyz_cid_b) #print(xyz_cid_a) #print(xyz_cid_b) #print(xyz_cid_a - xyz_cid_b) #print('-------------') #assert array_equal(xyz_cid_a, xyz_cid_b), 'error=%s' % ( #xyz_cid_a - xyz_cid_b) #--------------------------------------------- xyz_cid0 = model.transform_xyzcp_to_xyz_cid( xyz_cp, nids, icp_transform, cid=0, atol=None) array_equal(xyz_cid0_actual, xyz_cid0) model.write_bdf(bdf_file, close=False) model3 = BDF(debug=False) origin = [14., 30., 70.] zaxis = [13.431863852, 32.1458443949, 75.2107442927] xzplane = [14.4583462334, 33.4569982885, 68.2297989286] cord2r = model3.add_cord2r(30, origin, zaxis, xzplane, rid=2, comment='') origin = [3., 42., -173.] zaxis = [2.86526881213, 45.5425615252, 159.180363517] xzplane = [3.65222385965, 29.2536614627, -178.631312271] cord2c = model3.add_cord2c(31, origin, zaxis, xzplane, rid=2, comment='') origin = [22., 14., 85.] zaxis = [22.1243073983, 11.9537753718, 77.9978191005] xzplane = [21.0997242967, 13.1806120497, 88.4824763008] cord2s = model3.add_cord2s(32, origin, zaxis, xzplane, rid=2, comment='') assert cord2r == model.coords[cord2r.cid], 'cord2r:\n%r\ncord2r[cid]:\n%r' % (str(cord2r), str(model.coords[cord2r.cid])) assert cord2c == model.coords[cord2c.cid], 'cord2c:\n%r\ncord2c[cid]:\n%r' % (str(cord2c), str(model.coords[cord2c.cid])) assert cord2s == model.coords[cord2s.cid], 'cord2s:\n%r\ncord2s[cid]:\n%r' % (str(cord2s), str(model.coords[cord2s.cid]))
def run_fem2(bdf_model, out_model, xref, punch, sum_load, size, is_double, mesh_form, encoding=None, debug=False, quiet=False, stop_on_failure=True): """ Reads/writes the BDF to verify nothing has been lost Parameters ---------- bdf_model : str the filename to run out_model xref : bool xrefs punch : bool punches sum_load : bool sums static load size : int ??? is_double : bool ??? mesh_form : str {combined, separate} 'combined' : interspersed=True 'separate' : interspersed=False debug : bool debugs quiet : bool supress prints """ assert os.path.exists(bdf_model), bdf_model assert os.path.exists(out_model), out_model fem2 = BDF(debug=debug, log=None) if not quiet: fem2.log.info('starting fem2') sys.stdout.flush() try: fem2.read_bdf(out_model, xref=False, punch=punch, encoding=encoding) except: print("failed reading %r" % out_model) raise out_model_2 = bdf_model + '_out2' if xref and sum_load: if 'POST' in fem2.params: value = fem2.params['POST'].values[0] if value >= 0: msg = 'PARAM,POST,%i is not supported by the OP2 reader' % value fem2.log.error(msg) else: msg = 'PARAM,POST,0 is not supported by the OP2 reader' fem2.log.error(msg) p0 = np.array([0., 0., 0.]) subcase_keys = fem2.case_control_deck.get_subcase_list() subcases = fem2.subcases sol_200_map = fem2.case_control_deck.sol_200_map sol_base = fem2.sol is_restart = False for line in fem2.system_command_lines: if line.strip().upper().startswith('RESTART'): is_restart = True #if not is_restart: #validate_case_control(fem2, p0, sol_base, subcase_keys, subcases, sol_200_map, #stop_on_failure=stop_on_failure) if mesh_form is not None: fem2.write_bdf(out_model_2, interspersed=False, size=size, is_double=is_double) os.remove(out_model_2) #fem2.write_as_ctria3(out_model_2) return fem2