def test_stl_io_02(self): lines = ('solid testsphere\n' ' facet normal -0.13 -0.13 -0.98\n' ' outer loop\n' ' vertex 1.50000 1.50000 0.00000\n' ' vertex 1.50000 1.11177 0.05111\n' ' vertex 1.11177 1.50000 0.05111\n' ' endloop\n' ' endfacet\n' ' facet normal 0.13 0.13 -0.98\n' ' outer loop\n' ' vertex 1.50000 1.50000 0.00000\n' ' vertex 1.50000 1.88823 0.05111\n' ' vertex 1.88823 1.50000 0.05111\n' ' endloop\n' ' endfacet\n' 'endsolid\n') log = get_logger(level='warning') stl_filename = os.path.join(TEST_PATH, 'tris.stl') stl_out_filename = os.path.join(TEST_PATH, 'tris_out.stl') stl_bin_filename = os.path.join(TEST_PATH, 'tris_bin.stl') with open(stl_filename, 'w') as stl_file: stl_file.write(lines) stl = read_stl(stl_filename, log=log, debug=False) stl._get_normals_data(stl.elements) stl.write_stl(stl_out_filename, is_binary=False) stl_out = read_stl(stl_out_filename, log=log, debug=False) stl.write_stl(stl_bin_filename, is_binary=True) stl.write_stl(stl_bin_filename, is_binary=True, normalize_normal_vectors=True) stl_bin = read_stl(stl_bin_filename, log=log, debug=False) assert len(stl.nodes) == 6, 'nodes=%s' % len(stl.nodes) assert len(stl.elements) == 2, 'nelements=%s' % len(stl.elements) assert len( stl_out.elements) == 2, 'nelements=%s' % len(stl_out.elements) assert len( stl_bin.elements) == 2, 'nelements=%s' % len(stl_bin.elements) os.remove(stl_filename) os.remove(stl_out_filename)
def test_mat8_01(self): # should fail... """tests MAT8""" #lines = [ # fails??? # 'MAT8* 4700007 1675.47 1675.47 .33 * LHIG', # '* LHIG28.2 210000. 78000. * LHIH', # '* LHIH1.32-5 1.32-5 75. 1.943 * LHII', # '* LHII1.943 1.943 1.943 3.35', #] lines = [ # fails 'MAT8* 4700010 2.83+6 1.14+6 .55 * LHIJ', '* LHIJ717000. 285194. 285194. * LHIK', '* LHIK9.17-6 2.606-5 70. * LHIL', '* LHIL', ] lines_expected = [ 'MAT8* 4700010 2830000. 1140000. .55', '* 717000. 285194. 285194.', '* .00000917 .00002606 70.', '*', ] log = get_logger(level='warning') model = BDF(log=log) card = model._process_card(lines) #print(print_card_8(card)) cardi = BDFCard(card) card2 = MAT8.add_card(cardi) fields = card2.raw_fields() msg = print_card_8(fields) size = 16 msg = card2.write_card(size, 'dummy') lines_actual = msg.rstrip().split('\n') msg = '\n%s\n\n%s' % ('\n'.join(lines_expected), msg) msg += 'nlines_actual=%i nlines_expected=%i' % (len(lines_actual), len(lines_expected)) #print(msg) self.assertEqual(len(lines_actual), len(lines_expected), msg) for actual, expected in zip(lines_actual, lines_expected): msg = 'actual = %r\n' % actual msg += 'expected = %r' % expected self.assertEqual(actual, expected, msg)
def test_strain(self): log = get_logger(level='warning') for folder, prefix, freqs in CASES: bdf = BDF(debug=False, log=log) basepath = os.path.join(pkg_path, 'op2', 'test', 'examples', folder) bdf.read_bdf(os.path.join(basepath, prefix + '.bdf')) op2 = read_op2( os.path.join(basepath, prefix + '.op2'), debug=False, log=log, exclude_results=['element_forces', 'stress'], ) op2_new = data_in_material_coord(bdf, op2) for freq in freqs: for vecname in strain_vectors: vector = getattr(op2_new, vecname).get(1) if vector is None: continue if 'center' in prefix: name = os.path.join( basepath, f'{vecname}_center_freq_{freq:1.1f}.txt') else: name = os.path.join( basepath, f'{vecname}_corner_freq_{freq:1.1f}.txt') if not os.path.isfile(name): raise AssertionError( f'Not found reference result {name}') ref_strain = np.loadtxt(name) mag = ref_strain[:, 1::2] phase = ref_strain[:, 2::2] if freq == 1.0: data = vector.data[0] elif freq == 9.5: data = vector.data[17] eids = get_eids_from_op2_vector(vector) check = eids != 0 assert np.allclose(np.abs(data[check]), mag, rtol=RTOL) phase[np.isclose(mag, 0)] = 0 assert np.allclose(calc_phasedeg(data[check]), phase, rtol=RTOL)
def test_opt_1(self): """tests SOL 200""" log = get_logger(level='warning') bdf_filename = os.path.join(MODEL_PATH, 'sol200', 'model_200.bdf') unused_model = read_bdf(bdf_filename, xref=True, debug=False) op2_filename = os.path.join(MODEL_PATH, 'sol200', 'model_200.op2') #bdf, op2 = run_model(bdf_filename, op2_filename, #f06_has_weight=False, vectorized=True, #encoding='utf-8') op2 = OP2(log=log, debug=True, debug_file='temp.debug') op2.read_op2(op2_filename) unused_subcase_ids = op2.subcase_key.keys() #for subcase_id in subcase_ids: #assert isinstance(subcase_id, integer_types), subcase_id #for key, dresp in sorted(model.dresps.items()): #print(dresp) #dresp.calculate(op2, subcase_id) os.remove('temp.debug')
def test_ctrishell68(self): """tests a CPLSTN6, CPLSTN8/PSHELL/MAT8""" log = get_logger(level='warning') model = BDF(log=log) model.add_grid(1, [0., 0., 0.]) model.add_grid(5, [.5, 0., 0.]) model.add_grid(2, [1., 0., 0.]) model.add_grid(6, [1., .5, 0.]) model.add_grid(3, [1., 1., 0.]) model.add_grid(7, [.5, 1., 0.]) model.add_grid(4, [0., 1., 0.]) model.add_grid(8, [0., .5, 0.]) pid = 4 eid = 3 nids = [1, 2, 3, 4, 5, 6, 7, 8] cquad8 = model.add_cquad8(eid, pid, nids, comment='cquad8') eid = 5 nids = [1, 2, 3, 4, 5, 6] mid = 10 ctria6 = model.add_ctria6(eid, pid, nids, comment='ctria6') pplane = model.add_pplane(pid, mid, t=0.1, nsm=0., formulation_option=0, comment='pplane') E = 1e7 G = None nu = 0.3 mat1 = model.add_mat1(mid, E, G, nu) ctria6.raw_fields() cquad8.raw_fields() pplane.raw_fields() model.validate() model._verify_bdf(xref=False) ctria6.write_card(size=8) cquad8.write_card(size=8) pplane.write_card(size=8) model.cross_reference() model.pop_xref_errors() model.uncross_reference() model.safe_cross_reference() save_load_deck(model, run_test_bdf=False)
def test_nsm1(self): """tests the NSM1 card""" log = get_logger(level='warning', encoding='utf-8') model = BDF(debug=False, log=log) sid = 1 #Type = 'PSHELL' nsmi = 0.1 pid = 10 mid = 100 model.add_nsm1(sid, 'PSHELL', nsmi, [pid]) model.add_grid(1, [0., 0., 0.]) model.add_grid(2, [1., 0., 0.]) model.add_grid(3, [1., 1., 0.]) model.add_grid(4, [0., 1., 0.]) model.add_ctria3(1, pid, [1, 2, 3]) # A=0.5 model.add_cquad4(2, pid, [1, 2, 3, 4]) # A=1.0 model.add_pshell(pid, mid, t=0.1) model.add_mat1(mid, 3.0e7, None, 0.3) save_load_deck(model, run_convert=False)
def test_pdamp(self): """PDAMP""" log = get_logger(level='warning') model = BDF(log=log) eid1 = 10 eid2 = 20 eid3 = 30 eid4 = 40 b1 = 1.0 b2 = 2.0 b3 = 3.0 b4 = 4.0 #nodes1 = [10, 20] #nodes2 = [20, 30] card_lines = ['PDAMP', eid1, b1, eid2, b2, eid3, b3, eid4, b4] model.add_card(card_lines, 'PDAMP', comment='', is_list=True, has_none=True) model.validate() model._verify_bdf() save_load_deck(model)
def test_encoding_write(self): """tests encodings in BDF header""" log = get_logger(log=None, level='info', encoding='utf-8') mesh = BDF(log=log, debug=False) mesh.add_card(['GRID', 100000, 0, 43.91715, -29., .8712984], 'GRID') mesh.write_bdf('out.bdf') lines_expected = [ '$pyNastran: version=msc', '$pyNastran: punch=True', '$pyNastran: encoding=utf-8\n', '$pyNastran: nnodes=1', '$pyNastran: nelements=0', '$NODES', 'GRID 100000 43.91715 -29..8712984', ] bdf_filename = 'out.bdf' with open(bdf_filename, 'r', encoding='ascii') as bdf_file: lines = bdf_file.readlines() compare_lines(self, lines, lines_expected, has_endline=False)
def test_pconeax(self): """PCONEAX""" log = get_logger(level='warning') model = BDF(log=log) model.add_grid(1, [0., 0., 0.]) pid = 100 mid1 = 1000 nsm = 0.0 z1 = 0. z2 = 0. pconeax = model.add_pconeax(pid, mid1, t1=None, mid2=0, i=None, mid3=None, t2=None, nsm=nsm, z1=z1, z2=z2, phi=None, comment='pconeax') model.add_mat1(mid=mid1, E=3.0e7, G=None, nu=0.3) eid = 10 rings = [2, 3] cconeax = model.add_cconeax(eid, pid, rings, comment='ccone') sid = 42 ring = 6 phi = 37. temperature = 420. tempax = model.add_tempax(sid, ring, phi, temperature, comment='tempax') R = 1.2 z = 3.2 ringax = model.add_ringax(ring, R, z, ps=None, comment='ringax') nid = 7 pointax = model.add_pointax(nid, ring, phi, comment='pointax') nharmonics = 12 axic = model.add_axic(nharmonics, comment='axic') tempax.raw_fields() ringax.raw_fields() pointax.raw_fields() cconeax.raw_fields() pconeax.raw_fields() axic.raw_fields() save_load_deck(model, run_mass_properties=False, run_test_bdf=False)
def test_cquadx8(self): """tests a CQUADX, CTRIAX, CTRIAX6""" log = get_logger(level='warning') model = BDF(log=log) eid = 1 pid = 10 mid = 100 model.add_grid(1, [0., 0., 0.]) model.add_grid(5, [.5, 0., 0.]) model.add_grid(2, [1., 0., 0.]) model.add_grid(6, [1., .5, 0.]) model.add_grid(3, [1., 1., 0.]) model.add_grid(7, [.5, 1., 0.]) model.add_grid(4, [0., 1., 0.]) model.add_grid(8, [0., .5, 0.]) model.add_grid(9, [.5, .5, 0.]) nids = [1, 2, 3, 4, 5, 6, 7, 8] model.add_cquadx8(eid, pid, nids, theta=0., comment='cquadx8') eid = 2 # 4---7---3 # | / | # 8 9 6 # |/ | # 1---5---2 nids = [1, 2, 3, 5, 6, 9] model.add_ctriax(eid, pid, nids, theta_mcid=0., comment='ctriax') eid = 3 nids = [1, 5, 2, 6, 3, 9] model.add_ctriax6(eid, mid, nids, theta=0., comment='ctriax6') model.add_psolid(pid, mid) E = 3.0e7 G = None nu = 0.3 model.add_mat1(mid, E, G, nu) model.cross_reference() model.pop_xref_errors() save_load_deck(model, run_test_bdf=False)
def test_force(self): log = get_logger(level='warning') for folder, prefix, freqs in CASES: bdf = BDF(debug=False, log=log) basepath = os.path.join(pkg_path, 'op2', 'test', 'examples', folder) bdf.read_bdf(os.path.join(basepath, prefix + '.bdf')) op2 = read_op2( os.path.join(basepath, prefix + '.op2'), debug=False, log=log, exclude_results=['stress', 'strain'], ) op2_new = data_in_material_coord(bdf, op2) for freq in freqs: for vecname in force_vectors: vector = getattr(op2_new, vecname).get(1) if vector is None: continue if 'center' in prefix: name = os.path.join( basepath, '%s_center_freq_%1.1f.txt' % (vecname, freq)) else: name = os.path.join( basepath, '%s_corner_freq_%1.1f.txt' % (vecname, freq)) if not os.path.isfile(name): raise AssertionError( 'Not found reference result {0}'.format(name)) ref_force = np.loadtxt(name) mag = ref_force[0::2] phase = ref_force[1::2] if freq == 1.0: data = vector.data[0] elif freq == 9.5: data = vector.data[17] #eids = get_eids_from_op2_vector(vector) #check = eids != 0 assert np.allclose(np.abs(data[:, :]), mag, rtol=RTOL) assert np.allclose(calc_phasedeg(data), phase, rtol=RTOL)
def test_cart3d_io_01(self): """geometry""" lines = ("7 6\n" "0.000000 0.000000 0.000000\n" "1.000000 0.000000 0.000000\n" "2.000000 0.000000 0.000000\n" "1.000000 1.000000 0.000000\n" "2.000000 1.000000 0.000000\n" "1.000000 -1.000000 0.000000\n" "2.000000 -1.000000 0.000000\n" "1 4 2\n" "2 4 5\n" "2 5 3\n" "2 6 1\n" "5 6 2\n" "5 5 2\n" "1\n" "2\n" "3\n" "2\n" "4\n" "6\n") log = get_logger(level='warning', encoding='utf-8') infile_name = os.path.join(TEST_PATH, 'flat_full.tri') out_name = os.path.join(TEST_PATH, 'combined.tri') with open(infile_name, 'w') as f: f.write(lines) model = comp2tri([infile_name, infile_name], out_name, is_binary=False, float_fmt='%6.7f', log=log) read_cart3d(out_name, log=log, debug=False) cart3d = read_cart3d(infile_name, log=log, debug=False) assert len(cart3d.points) == 7, 'npoints=%s' % len(cart3d.points) assert len(cart3d.elements) == 6, 'nelements=%s' % len(cart3d.elements) assert len(cart3d.regions) == 6, 'nregions=%s' % len(cart3d.regions) assert len(cart3d.loads) == 0, 'nloads=%s' % len(cart3d.loads) os.remove(infile_name) os.remove(out_name)
def test_panair_io_01(self): """test the M100 model""" log = get_logger(level='warning') in_filename = os.path.join(TEST_PATH, 'M100', 'M100.inp') out_filename = os.path.join(TEST_PATH, 'M100', 'M100_out.inp') #with open(infile_name, 'w') as f: #f.write(lines) model = PanairGrid(log=log, debug=False) model.read_panair(in_filename) model.write_panair(out_filename) (points, elements, regions, kt, cp_nrom) = model.get_points_elements_regions() model.write_panair('junk_m100.inp') os.remove('junk_m100.inp') model.print_options() model.print_abutments() model.print_grid_summary() model.print_out_header() os.remove(out_filename)
def test_write_2(self): """tests basic op2 writing""" log = get_logger(log=None, level='warning', encoding='utf-8') folder = os.path.join(MODEL_PATH, 'solid_bending') op2_filename = os.path.join(folder, 'solid_bending.op2') op2_filename_debug = os.path.join(folder, 'solid_bending.debug.out') op2_filename_out = os.path.join(folder, 'solid_bending_out.op2') op2_filename_debug_out = os.path.join(folder, 'solid_bending_out.debug.out') #debug_file = 'solid_bending.debug.out' #model = os.path.splitext(op2_filename)[0] #debug_file = model + '.debug.out' op2 = read_op2(op2_filename, debug_file=op2_filename_debug, log=log) op2.write_op2(op2_filename_out) #, is_mag_phase=False) op2b = read_op2_geom(op2_filename_out, debug_file=op2_filename_debug_out, log=log) assert op2 == op2b
def test_nxstrat(self): params = { #'AUTO' : 1, #'MAXITE' : 30, 'RTOL' : 0.005, #'ATSNEXT' : 3, 'A' : 1, 'B' : 2, 'C' : 3, 'D' : 4, 'E' : 5, 'F' : 6, 'G' : 7, 'H' : 8, } log = get_logger(level='warning') model = BDF(log=log) nxstrat = model.add_nxstrat(42, params) nxstrat.raw_fields() save_load_deck(model) # , run_remove_unused=False
def test_mats1(self): """tests MATS1""" log = get_logger(level='warning') model = BDF(log=log) mid = 10 E = 3.0e7 G = None nu = 0.3 model.add_mat1(mid, E, G, nu) tid = None Type = 'NLELAST' h = None hr = None yf = None limit1 = None limit2 = None unused_mats1 = model.add_mats1(mid, tid, Type, h, hr, yf, limit1, limit2, comment='mats1') save_load_deck(model, xref='standard', punch=True, run_remove_unused=False)
def test_add_card_skip(self): """tests that a fake card 'JUNK' is skipped""" log = get_logger(log=None, level='info', encoding='utf-8') model = BDF(log=log, debug=False) card_name = 'JUNK' card_lines1 = ['JUNK', 1, 2, 3] card_lines2 = ['JUNK,a,b,c'] model.add_card(card_lines1, card_name) model.add_card(card_lines2, card_name, comment='', is_list=False, has_none=True) bdf_file = StringIO() model.write_bdf(bdf_file, close=False) msg = bdf_file.getvalue() bdf_file.close() assert 'JUNK 1 2 3' in msg, msg assert 'JUNK a b c' in msg, msg
def test_ugrid2d(self): """simple UGRID2D model""" log = get_logger(level='warning') ugrid_filename = os.path.join(TEST_PATH, 'quad_tri.ugrid') #if not os.path.exists(ugrid_filename): msg = ( #(nnodes, ntrias, nquads), ntets, npyram5, npenta6, nhexas8s '5 1 1 0 0 0 0\n' '0. 0. 0.\n' '1. 0. 0.\n' '1. 1. 0.\n' '0. 1. 0.\n' '0. 2. 0.\n' '3 4 5\n' '1 2 3 4\n') with open(ugrid_filename, 'w') as ugrid_file: ugrid_file.write(msg) model = UGRID2D_Reader(log=log, debug=True) model.read_ugrid(ugrid_filename)
def test_tecplot_02(self): log = get_logger(level='warning') nastran_filename1 = os.path.join(NASTRAN_MODEL_PATH, 'solid_bending', 'solid_bending.bdf') nastran_filename2 = os.path.join(NASTRAN_MODEL_PATH, 'solid_bending', 'solid_bending2.bdf') tecplot_filename = os.path.join(NASTRAN_MODEL_PATH, 'solid_bending', 'solid_bending.plt') tecplot = nastran_to_tecplot_filename(nastran_filename1, tecplot_filename, log=log) #tecplot.write_tecplot(tecplot_filename) tecplot_to_nastran_filename(tecplot_filename, nastran_filename2, log=log) #os.remove(nastran_filename2) #os.remove(tecplot_filename) bdf_model = read_bdf(nastran_filename1, log=log) unused_tecplot = nastran_to_tecplot(bdf_model)
def test_nastran_to_tecplot(self): """tests a large number of elements and results in SOL 101""" bdf_filename = os.path.join(MODEL_PATH, 'elements', 'static_elements.bdf') tecplot_filename = os.path.join(MODEL_PATH, 'elements', 'static_elements.plt') tecplot_filename2 = os.path.join(MODEL_PATH, 'elements', 'static_elements2.plt') log = get_logger(log=None, level='warning', encoding='utf-8') model = read_bdf(bdf_filename, log=log) with self.assertRaises(RuntimeError): nastran_to_tecplot(model) nastran_to_tecplot_filename(bdf_filename, tecplot_filename, log=log) argv = [ 'format_converter', 'nastran', bdf_filename, 'tecplot', tecplot_filename2 ] with self.assertRaises(RuntimeError): cmd_line_format_converter(argv=argv, quiet=True)
def test_avus_io_02(self): """geometry + results""" ndm = -1 nzones = 1 npatches = -1 npoints, nfaces, ncells, mxppfs, mxfpcs = 5, 3, 3, -1, -1 line0 = '%s %s %s\n' % (ndm, nzones, npatches) line1 = "%s %s %s %s %s\n" % (npoints, nfaces, ncells, mxppfs, mxfpcs) lines = ( line0 + line1 + # nodes "0. 0. 0.\n" "1. 0. 0.\n" "2. 0. 0.\n" "1. 1. 0.\n" "2. 1. 0.\n" # faces? "3 1 4 2 11 -12\n" "3 2 4 5 11 -12\n" "3 2 5 3 11 -12\n") avus_filename = os.path.join(test_path, 'flat.tri') with open(avus_filename, 'w') as avus_file: avus_file.write(lines) log = get_logger(level='warning', encoding='utf-8') model = read_avus(avus_filename, log=log, debug=False) assert len(model.nodes) == 5, 'nnodes=%s' % len(model.nodes) assert len( model.tri_elements) == 3, 'nelements=%s' % len(model.tri_elements) #assert len(model.regions) == 3, 'nregions=%s' % len(model.regions) #assert len(model.loads) == 14, 'nloads=%s' % len(model.loads) # was 10 #assert len(model.loads['Cp']) == 5, 'nCp=%s' % len(model.loads['Cp']) outfile_name = os.path.join(test_path, 'flat.bin.tri') model.loads = None model.write_avus(outfile_name) os.remove(avus_filename) os.remove(outfile_name)
def test_cdamp1_01(self): """tests a CDAMP1""" log = get_logger(level='warning') model = BDF(log=log) lines = ['CDAMP1, 2001, 20, 1001, 1'] card = model._process_card(lines) card = BDFCard(card) size = 8 elem = CDAMP1.add_card(card) self.assertEqual(elem.eid, 2001) self.assertEqual(elem.Pid(), 20) node_ids = elem.node_ids assert node_ids == [1001, None], node_ids elem.write_card(size, 'dummy') elem.raw_fields() pid = 1 tbid = 2 model.add_pdampt(pid, tbid, comment='pdampt') save_load_deck(model)
def test_damper_01(self): """tests PDAMP""" lines = ['pdamp, 201, 1.e+5'] log = get_logger(level='warning') model = BDF(log=log) card = model._process_card(lines) card = BDFCard(card) size = 8 elem = PDAMP.add_card(card) elem.write_card(size, 'dummy') elem.raw_fields() self.assertEqual(elem.Pid(), 201) self.assertEqual(elem.B(), 1e5) fields = ['pelas', 201, 1.e+5, None, None, 202, 2.e+5] card_name = fields[0] model.add_card(fields, card_name, comment='', is_list=True, has_none=True) assert len(model.properties) == 2, model.properties save_load_deck(model)
def test_bdf_superelement_3(self): """checks cqrsee101b2.bdf""" bdf_filename = os.path.join(MODEL_PATH, 'superelements', 'cqrsee101b2.bdf') log = get_logger(log=None, level='error', encoding='utf-8') (fem1, unused_fem2, diff_cards) = self.run_bdf( '', bdf_filename, xref=True, run_extract_bodies=False, save_file_structure=True, log=log, ) diff_cards2 = list(set(diff_cards)) diff_cards2.sort() assert len(diff_cards2) == 0, diff_cards2 bdf_filenames = { bdf_filename: 'cat.bdf', } fem1.write_bdfs(bdf_filenames) os.remove('cat.bdf')
def test_damper_02(self): """tests CDAMP1, CDAMP2, PDAMP, PDAMPT, GRID""" log = get_logger(level='warning') model = BDF(log=log) eid = 1 pid = 2 nids = [3, 4] c1 = 1 c2 = 1 celas1 = model.add_cdamp1(eid, pid, nids, c1, c2, comment='cdamp1') celas1.raw_fields() celas1.write_card(size=8, is_double=False) b = 1.0e7 pdamp = model.add_pdamp(pid, b, comment='pdamp') pdamp.raw_fields() pdamp.write_card(size=8, is_double=False) tbid = 10 pdampt = model.add_pdampt(pid, tbid, comment='pdampt') pdampt.raw_fields() pdampt.write_card(size=8, is_double=False) eid = 5 cdamp2 = model.add_cdamp2(eid, b, nids, comment='cdamp2') cdamp2.raw_fields() cdamp2.write_card(size=8, is_double=False) model.add_grid(3, [0., 0., 0.]) model.add_grid(4, [0., 0., 0.]) model.validate() model._verify_bdf(xref=False) model.cross_reference() model._verify_bdf(xref=True) bdf_file = StringIO() model.write_bdf(bdf_file, close=False) bdf_file.seek(0) unused_model2 = read_bdf(bdf_file, punch=True, debug=False) save_load_deck(model)
def test_mass_3_4(self): """tests a CMASS3, PMASS, CMASS4""" log = get_logger(level='warning', encoding='utf-8') model = BDF(debug=False, log=log) eid = 1 pid = 2 s1 = 1 s2 = 2 cmass3 = model.add_cmass3(eid, pid, [s1, s2], comment='cmass3') cmass3.write_card(size=8) cmass3.write_card(size=16) cmass3.write_card(size=16, is_double=True) cmass3.raw_fields() mass = 142. pmass = model.add_pmass(pid, mass, comment='pmass') pmass.write_card(size=8) pmass.write_card(size=16) pmass.write_card(size=16, is_double=True) pmass.raw_fields() eid = 10 cmass4 = model.add_cmass4(eid, mass, [s1, s2], comment='cmass4') cmass4.write_card(size=8) cmass4.write_card(size=16) cmass4.write_card(size=16, is_double=True) cmass4.raw_fields() model.add_spoint([1, 2]) model.validate() model.pop_parse_errors() cmass3.write_card(size=8) cmass4.write_card(size=8) pmass.write_card(size=8) model.cross_reference() model.uncross_reference() save_load_deck(model)
def __init__(self, log=None, debug=False, read_shells=True, read_solids=True): self.log = get_logger(log, 'debug' if debug else 'info') self.debug = debug self.n = 0 self.nodes = array([], dtype='float32') self.tris = array([], dtype='int32') self.quads = array([], dtype='int32') self.pids = array([], dtype='int32') self.tets = array([], dtype='int32') self.penta5s = array([], dtype='int32') self.penta6s = array([], dtype='int32') self.hexas = array([], dtype='int32') self.read_shells = read_shells self.read_solids = read_solids self.isort = None
def _test_write_3(self): """tests basic op2 writing""" log = get_logger(log=None, level='warning', encoding='utf-8') folder = os.path.join(MODEL_PATH, 'sol_101_elements') op2_filename = os.path.join(folder, 'static_solid_shell_bar.op2') op2_filename_debug = os.path.join(folder, 'static_solid_shell_bar.debug.out') op2_filename_out = os.path.join(folder, 'static_solid_shell_bar_out.op2') op2_filename_debug_out = os.path.join( folder, 'static_solid_shell_bar_out.debug.out') #debug_file = 'solid_bending.debug.out' #model = os.path.splitext(op2_filename)[0] #debug_file = model + '.debug.out' op2 = read_op2_geom(op2_filename, debug_file=op2_filename_debug, log=log) op2.write_op2(op2_filename_out) #, is_mag_phase=False) unused_op2b = read_op2_geom(op2_filename_out, debug_file=op2_filename_debug_out)
def test_write_elements_5(self): """tests basic op2 writing""" log = get_logger(log=None, level='info', encoding='utf-8') folder = os.path.join(MODEL_PATH, 'elements') op2_filename = os.path.join(folder, 'time_elements.op2') op2_filename_debug = os.path.join(folder, 'time_elements.debug.out') op2_filename_out = os.path.join(folder, 'time_elements_out.op2') op2_filename_debug_out = os.path.join(folder, 'time_elements_out.debug.out') #model = os.path.splitext(op2_filename)[0] exclude_results = [ 'cshear_force', 'cvisc_force', 'cshear_stress', 'grid_point_forces', '*strain_energy', ] op2 = read_op2_geom(op2_filename, debug_file=op2_filename_debug, exclude_results=exclude_results, log=log) op2.write_op2(op2_filename_out) #, is_mag_phase=False) op2b = read_op2_geom(op2_filename_out, debug_file=op2_filename_debug_out, log=log) op2.assert_op2_equal(op2b, skip_results=['params', ], stop_on_failure=True, debug=False)
def test_dtable(self): """ tests: - DTABLE - DRESP2 """ log = get_logger(level='warning') model = BDF(log=log) model.add_grid(1, [0., 0., 0.]) model.add_grid(2, [1., 0., 0.]) model.add_grid(3, [1., 1., 0.]) model.add_grid(4, [0., 1., 0.]) default_values = { 'A': 1.0, 'B1': 2.0, 'C': -3., } dtable = model.add_dtable(default_values, comment='table') str(dtable) #print(dtable) dresp_id = 42 label = 'cat' dequation = 1000 region = None params = { (0, 'DTABLE'): ['B1', 'C', 'A'], } dresp2 = model.add_dresp2(dresp_id, label, dequation, region, params, method='MIN', c1=1., c2=0.005, c3=10., validate=True, comment='') str(dresp2)