def test_force(self): log = get_logger(level='warning') for folder, prefix, subcase in CASES: bdf = BDF(debug=False, log=log) op2 = OP2(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')) op2_new = data_in_material_coord(bdf, op2) for vecname in force_vectors: vector = getattr(op2_new, vecname).get(subcase) if vector is None: continue name = os.path.join( basepath, '{0}_subcase_{1:02d}.txt'.format(vecname, subcase)) if not os.path.isfile(name): raise AssertionError( 'Not found reference result {0}\n{1}'.format( name, print_bad_path(name))) ref_result = np.loadtxt(name) data = vector.data eids = get_eids_from_op2_vector(vector) check = eids != 0 if 'cquad8' in vecname: assert np.allclose(data[:, check][:, 0::5, :], ref_result[0::5], rtol=RTOL, atol=ATOL) else: assert np.allclose(data[:, check], ref_result, rtol=RTOL, atol=ATOL)
def test_strain(self): for folder, prefix, subcase in CASES: bdf = BDF(debug=False) op2 = OP2(debug=False) basepath = os.path.join(pkg_path, 'op2', 'test', folder) bdf.read_bdf(os.path.join(basepath, prefix + '.bdf')) op2.read_op2(os.path.join(basepath, prefix + '.op2')) op2_new = data_in_material_coord(bdf, op2) for vecname in strain_vectors: vector = getattr(op2_new, vecname).get(subcase) if vector is None: continue name = os.path.join(basepath, '{0}_subcase_{1:02d}.txt'.format(vecname, subcase)) if not os.path.isfile(name): raise AssertionError('Not found reference result {0}'.format(name)) ref_result = np.loadtxt(name) data = vector.data eids = get_eids_from_op2_vector(vector) check = eids != 0 if 'cquad8' in vecname: assert np.allclose(data[:, check][:, 0::10, :], ref_result[0::10], rtol=RTOL, atol=ATOL) assert np.allclose(data[:, check][:, 1::10, :], ref_result[1::10], rtol=RTOL, atol=ATOL) else: assert np.allclose(data[:, check], ref_result, rtol=RTOL, atol=ATOL) print('OK')
def test_strain(self): log = get_logger(level='warning') is_failed = False 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'], ) try: op2_new = data_in_material_coord(bdf, op2) except ValueError as error: op2.log.error('failed rotating %r' % prefix) is_failed = True #continue raise 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, '%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_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) if is_failed: raise ValueError('see previous message')
def test_stress(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', 'strain'], ) op2_new = data_in_material_coord(bdf, op2) for freq in freqs: for vecname in stress_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_stress = np.loadtxt(name) mag = ref_stress[:, 1::2] phase = ref_stress[:, 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 if 'cquad8' in vecname: assert np.allclose(np.abs(data[check][0::10, :]), mag[0::10], rtol=RTOL) assert np.allclose(calc_phasedeg( data[check][1::10, :]), phase[1::10], rtol=RTOL) else: assert np.allclose(np.abs(data[check]), mag, rtol=RTOL) assert np.allclose(calc_phasedeg(data[check]), phase, rtol=RTOL)
def read_forces_2d(op2, se): """Read forces for a 1D structural element Parameters ---------- op2 : PyNastran's OP2 results OP2 result class from PyNastran. se : :class:`.SE` object The structural element for which the forces should be read. """ se_forces = {} for vecname in ['cquad4_force', 'ctria3_force']: vectors = getattr(op2, vecname) for subcase, vector in vectors.items(): eids = get_eids_from_op2_vector(vector) check = np.in1d(eids, se.eids) se_forces[subcase] = vector.data[:, check] return Forces2D(se_forces)