def test_convert_sine(self): """converts a sine model""" model_path = os.path.join(pkg_path, '..', 'models', 'freq_sine') bdf_filename = os.path.join(model_path, 'good_sine.dat') bdf_filename_out = os.path.join(model_path, 'sine_modes.bdf') bdf_filename_out2 = os.path.join(model_path, 'sine_converted.bdf') model = read_bdf(bdf_filename, log=log, validate=False) model.sol = 103 lines = [ 'ECHO = NONE', 'SUBCASE 1', ' DISPLACEMENT(PLOT) = ALL', #'$ SPC = 100', ' METHOD = 42', ] card_lines = ['EIGRL', 42, None, None, 20] model.add_card(card_lines, 'EIGRL') model.case_control_deck = CaseControlDeck(lines, log=log) model.params['GRDPNT'] = PARAM('GRDPNT', 0) #del model.params['WTMASS'] model.write_bdf(bdf_filename_out) #units_from = ['in', 'lbm', 's'] units_from = ['mm', 'Mg', 's'] units_to = ['m', 'kg', 's'] convert(model, units_to, units=units_from) model.write_bdf(bdf_filename_out2) os.remove(bdf_filename_out) os.remove(bdf_filename_out2)
def test_convert_sine(self): """converts a sine model""" model_path = os.path.join(pkg_path, '..', 'models', 'freq_sine') bdf_filename = os.path.join(model_path, 'good_sine.dat') bdf_filename_out = os.path.join(model_path, 'sine_modes.bdf') bdf_filename_out2 = os.path.join(model_path, 'sine_converted.bdf') model = read_bdf(bdf_filename, log=log, validate=False) model.sol = 103 lines = [ 'ECHO = NONE', 'SUBCASE 1', ' DISPLACEMENT(PLOT) = ALL', #'$ SPC = 100', ' METHOD = 42', ] card_lines = ['EIGRL', 42, None, None, 20] model.add_card(card_lines, 'EIGRL') model.case_control_deck = CaseControlDeck(lines, log=log) model.params['GRDPNT'] = PARAM('GRDPNT', 0) #del model.params['WTMASS'] model.write_bdf(bdf_filename_out) #units_from = ['in', 'lbm', 's'] units_from = ['mm', 'Mg', 's'] units_to = ['m', 'kg', 's'] convert(model, units_to, units=units_from) model.write_bdf(bdf_filename_out2) os.remove(bdf_filename_out) os.remove(bdf_filename_out2)
def test_convert_bwb(self): """converts a bwb model""" bdf_filename = os.path.join(pkg_path, '..', 'models', 'bwb', 'bwb_saero.bdf') bdf_filename_out = os.path.join(pkg_path, '..', 'models', 'bwb', 'bwb_modes.bdf') bdf_filename_out2 = os.path.join(pkg_path, '..', 'models', 'bwb', 'bwb_modes_converted.bdf') model = read_bdf(bdf_filename, log=log, validate=False) model.sol = 103 lines = [ 'ECHO = NONE', 'SUBCASE 1', ' DISPLACEMENT(PLOT) = ALL', ' MPC = 1', ' SPC = 100', ' SUPORT1 = 1', ' METHOD = 42', ] card_lines = ['EIGRL', 42, None, None, 20] model.add_card(card_lines, 'EIGRL') model.case_control_deck = CaseControlDeck(lines, log=log) model.write_bdf(bdf_filename_out) units_from = ['in', 'lbm', 's'] #units_from = ['mm', 'Mg', 's'] units_to = ['m', 'kg', 's'] convert(model, units_to, units=units_from) model.write_bdf(bdf_filename_out2) os.remove(bdf_filename_out) os.remove(bdf_filename_out2)
def _test_convert_bwb(self): """converts a bwb model""" bdf_filename = os.path.join(pkg_path, '..', 'models', 'bwb', 'bwb_saero.bdf') bdf_filename_out = os.path.join(pkg_path, '..', 'models', 'bwb', 'bwb_modes.bdf') bdf_filename_out2 = os.path.join(pkg_path, '..', 'models', 'bwb', 'bwb_modes_converted.bdf') model = read_bdf(bdf_filename, log=log, validate=False) model.sol = 103 lines = [ 'ECHO = NONE', 'SUBCASE 1', ' DISPLACEMENT(PLOT) = ALL', ' MPC = 1', ' SPC = 100', ' SUPORT1 = 1', ' METHOD = 42', ] card_lines = ['EIGRL', 42, None, None, 20] model.add_card(card_lines, 'EIGRL') model.case_control_deck = CaseControlDeck(lines, log=log) model.write_bdf(bdf_filename_out) units_from = ['in', 'lbm', 's'] #units_from = ['mm', 'Mg', 's'] units_to = ['m', 'kg', 's'] convert(model, units_to, units=units_from) model.write_bdf(bdf_filename_out2) os.remove(bdf_filename_out) os.remove(bdf_filename_out2)
def test_convert_bar(self): """converts a bar model""" log = SimpleLogger(level='warning') model_path = os.path.join(pkg_path, '..', 'models', 'beam_modes') bdf_filename = os.path.join(model_path, 'beam_modes.dat') bdf_filename_out = os.path.join(model_path, 'beam_modes_temp.bdf') bdf_filename_out2 = os.path.join(model_path, 'beam_modes_converted.bdf') model = read_bdf(bdf_filename, log=log, validate=False) #card_lines = ['EIGRL', 42, None, None, 20] #model.add_card(card_lines, 'EIGRL') #model.case_control_deck = CaseControlDeck(lines) model.write_bdf(bdf_filename_out) #units_from = ['in', 'lbm', 's'] units_from = ['mm', 'Mg', 's'] units_to = ['m', 'kg', 's'] convert(model, units_to, units=units_from) model.write_bdf(bdf_filename_out2) os.remove(bdf_filename_out) os.remove(bdf_filename_out2) terms = ['F', 'P', 'V'] scales = [1.1, 0.9, 0.8] scale_by_terms(bdf_filename, terms, scales, bdf_filename_out=bdf_filename_out, log=log) os.remove(bdf_filename_out)
def save_load_deck(model, punch=True, run_remove_unused=True, run_convert=True): """writes, re-reads, saves an obj, loads an obj, and returns the deck""" model.validate() model.pop_parse_errors() model.pop_xref_errors() bdf_file = StringIO() model.write_bdf(bdf_file, size=8, close=False) bdf_file.seek(0) model.write_bdf(bdf_file, size=16, close=False) bdf_file.seek(0) model.write_bdf(bdf_file, size=16, is_double=True, close=False) bdf_file.seek(0) if run_remove_unused: remove_unused(model) if run_convert: units_to = ['m', 'kg', 's'] units = ['ft', 'lbm', 's'] convert(model, units_to, units) model2 = BDF(log=model.log) #print(bdf_file.getvalue()) model2.read_bdf(bdf_file, punch=punch) model2.pop_parse_errors() model2.get_bdf_stats() model2.save(obj_filename='model.obj', unxref=True) model3 = BDF(debug=False, log=None, mode='msc') model3.load(obj_filename='model.obj') os.remove('model.obj') model3.cross_reference() model3.pop_xref_errors() return model3
def test_convert_02(self): """converts a full model units""" bdf_filename = os.path.abspath( os.path.join(pkg_path, '..', 'models', 'bwb', 'BWB_saero.bdf')) bdf_filename_out = os.path.abspath( os.path.join(pkg_path, '..', 'models', 'bwb', 'BWB_saero.out')) model = read_bdf(bdf_filename, log=log) units_to = ['m', 'kg', 's'] units_from = ['in', 'lbm', 's'] #units_to = units_from convert(model, units_to, units_from) model.write_bdf(bdf_filename_out) os.remove(bdf_filename_out)
def test_convert_02(self): """converts a full model units""" bdf_filename = os.path.abspath( os.path.join(pkg_path, '..', 'models', 'bwb', 'BWB_saero.bdf')) bdf_filename_out = os.path.abspath( os.path.join(pkg_path, '..', 'models', 'bwb', 'BWB_saero.out')) model = read_bdf(bdf_filename, log=log) units_to = ['m', 'kg', 's'] units_from = ['in', 'lbm', 's'] #units_to = units_from convert(model, units_to, units_from) model.write_bdf(bdf_filename_out) os.remove(bdf_filename_out)
def save_load_deck(model, punch=True, run_remove_unused=True, run_convert=True, run_renumber=True, run_mirror=True): """writes, re-reads, saves an obj, loads an obj, and returns the deck""" model.validate() model.pop_parse_errors() model.pop_xref_errors() bdf_file = StringIO() model.write_bdf(bdf_file, size=8, close=False) bdf_file.seek(0) model.write_bdf(bdf_file, size=16, close=False) bdf_file.seek(0) model.write_bdf(bdf_file, size=16, is_double=True, close=False) bdf_file.seek(0) if run_remove_unused: remove_unused(model) if run_convert: units_to = ['m', 'kg', 's'] units = ['ft', 'lbm', 's'] convert(model, units_to, units) model2 = BDF(log=model.log) #print(bdf_file.getvalue()) model2.read_bdf(bdf_file, punch=punch) model2.pop_parse_errors() model2.get_bdf_stats() model2.write_bdf('model2.bdf') model2.save(obj_filename='model.obj', unxref=True) model3 = BDF(debug=False, log=model.log, mode='msc') model3.load(obj_filename='model.obj') os.remove('model.obj') cross_reference(model3) if run_renumber: renumber('model2.bdf', model.log) if run_mirror: # we put embed this under renumber to prevent modifying an # existing model to prevent breaking tests # # shouldn't have any effect model2.bdf bdf_mirror('model2.bdf', plane='xz', log=model.log) return model3
def test_convert_01(self): """converts the CONM2s units""" model = BDF(log=log) eid = 1000 nid = 100 cid = 0 mass = 247200. # kg X = [30.16, 0., 3.55] # m I11 = 1.39e7 # kg-m^2 I22 = 3.66e7 I33 = 4.99e7 I13 = I12 = I23 = 0. I = I11, I12, I22, I13, I23, I33 elem = CONM2(eid, nid, mass, cid=cid, X=X, I=I, comment='') model.masses[eid] = elem units_to = ['in', 'lbm', 's'] units_from = ['m', 'kg', 's'] convert(model, units_to, units=units_from)
def test_convert_02(self): """converts a full model units""" log = SimpleLogger(level='error') bdf_filename = os.path.abspath( os.path.join(pkg_path, '..', 'models', 'bwb', 'bwb_saero.bdf')) bdf_filename_out = os.path.abspath( os.path.join(pkg_path, '..', 'models', 'bwb', 'bwb_saero.out')) model = read_bdf(bdf_filename, log=log) units_to = ['m', 'kg', 's'] units_from = ['in', 'lbm', 's'] #units_to = units_from convert(model, units_to, units_from) model.write_bdf(bdf_filename_out) caero_bdf_filename = 'caero.bdf' export_caero_mesh(model, caero_bdf_filename=caero_bdf_filename) os.remove(bdf_filename_out) os.remove(caero_bdf_filename)
def test_convert_isat(self): """converts a isat model""" model_path = os.path.join(pkg_path, '..', 'models', 'iSat') bdf_filename = os.path.join(model_path, 'ISat_Dploy_Sm.dat') bdf_filename_out = os.path.join(model_path, 'isat.bdf') bdf_filename_out2 = os.path.join(model_path, 'isat_converted.bdf') model = read_bdf(bdf_filename, log=log, validate=False) #card_lines = ['EIGRL', 42, None, None, 20] #model.add_card(card_lines, 'EIGRL') #model.case_control_deck = CaseControlDeck(lines) model.write_bdf(bdf_filename_out) #units_from = ['in', 'lbm', 's'] units_from = ['mm', 'Mg', 's'] units_to = ['m', 'kg', 's'] convert(model, units_to, units=units_from) model.write_bdf(bdf_filename_out2) os.remove(bdf_filename_out) os.remove(bdf_filename_out2)
def test_convert_01(self): """converts the CONM2s units""" model = BDF(log=log) eid = 1000 nid = 100 cid = 0 mass = 247200. # kg X = [30.16, 0., 3.55] # m I11 = 1.39e7 # kg-m^2 I22 = 3.66e7 I33 = 4.99e7 I13 = I12 = I23 = 0. I = I11, I12, I22, I13, I23, I33 elem = CONM2(eid, nid, mass, cid=cid, X=X, I=I, comment='') model.masses[eid] = elem units_to = ['in', 'lbm', 's'] units_from = ['m', 'kg', 's'] convert(model, units_to, units=units_from)
def _test_convert_isat(self): """converts a isat model""" model_path = os.path.join(pkg_path, '..', 'models', 'isat') bdf_filename = os.path.join(model_path, 'ISat_Dploy_Sm.dat') bdf_filename_out = os.path.join(model_path, 'isat.bdf') bdf_filename_out2 = os.path.join(model_path, 'isat_converted.bdf') model = read_bdf(bdf_filename, log=log, validate=False) #card_lines = ['EIGRL', 42, None, None, 20] #model.add_card(card_lines, 'EIGRL') #model.case_control_deck = CaseControlDeck(lines) model.write_bdf(bdf_filename_out) #units_from = ['in', 'lbm', 's'] units_from = ['mm', 'Mg', 's'] units_to = ['m', 'kg', 's'] convert(model, units_to, units=units_from) del model.params['WTMASS'] model.write_bdf(bdf_filename_out2) os.remove(bdf_filename_out) os.remove(bdf_filename_out2)
def test_convert_bar(self): """converts a bar model""" model_path = os.path.join(pkg_path, '..', 'models', 'beam_modes') bdf_filename = os.path.join(model_path, 'beam_modes.dat') bdf_filename_out = os.path.join(model_path, 'beam_modes_temp.bdf') bdf_filename_out2 = os.path.join(model_path, 'beam_modes_converted.bdf') model = read_bdf(bdf_filename, log=log, validate=False) #card_lines = ['EIGRL', 42, None, None, 20] #model.add_card(card_lines, 'EIGRL') #model.case_control_deck = CaseControlDeck(lines) model.write_bdf(bdf_filename_out) #units_from = ['in', 'lbm', 's'] units_from = ['mm', 'Mg', 's'] units_to = ['m', 'kg', 's'] convert(model, units_to, units=units_from) del model.params['WTMASS'] model.write_bdf(bdf_filename_out2) os.remove(bdf_filename_out) os.remove(bdf_filename_out2)
def save_load_deck(model, xref='standard', punch=True, run_remove_unused=True, run_convert=True, run_renumber=True, run_mirror=True, run_save_load=True, run_quality=True, write_saves=True, run_save_load_hdf5=True, run_mass_properties=True, run_loads=True, run_test_bdf=True, run_op2_writer=True, run_op2_reader=True, op2_log_level: str = 'warning'): """writes, re-reads, saves an obj, loads an obj, and returns the deck""" if os.path.exists('junk.bdf'): os.remove('junk.bdf') model.set_error_storage(nparse_errors=0, stop_on_parsing_error=True, nxref_errors=0, stop_on_xref_error=True) model.validate() model.pop_parse_errors() model.pop_xref_errors() bdf_file = StringIO() model.write_bdf(bdf_file, size=8, close=False) bdf_file.seek(0) model.write_bdf(bdf_file, size=16, close=False) bdf_file.seek(0) model.write_bdf(bdf_file, size=16, is_double=True, close=False) bdf_file.seek(0) if write_saves and model.save_file_structure: bdf_filenames = { 0: 'junk.bdf', } model.write_bdfs(bdf_filenames) os.remove('junk.bdf') if run_convert: units_to = ['m', 'kg', 's'] units = ['ft', 'lbm', 's'] convert(model, units_to, units) model2 = BDF(log=model.log) #print(bdf_file.getvalue()) model2.read_bdf(bdf_file, punch=punch, xref=False) _cross_reference(model2, xref) model2.pop_parse_errors() model2.get_bdf_stats() model2.write_bdf('model2.bdf') if run_test_bdf: folder = '' log_error = get_logger(log=None, level='error', encoding='utf-8') test_bdf(folder, 'model2.bdf', stop_on_failure=True, punch=punch, quiet=True, log=log_error) os.remove('model2.test_bdf.bdf') nelements = len(model2.elements) + len(model2.masses) nnodes = len(model2.nodes) + len(model2.spoints) + len(model2.epoints) _run_mass_properties(model2, nnodes, nelements, run_mass_properties=run_mass_properties) _run_loads(model2, nelements, run_loads=run_loads) if run_save_load: model2.save(obj_filename='model.obj', unxref=True) model3 = BDF(debug=False, log=model.log, mode='msc') model3.load(obj_filename='model.obj') os.remove('model.obj') else: model2.uncross_reference() model3 = model2 _run_hdf5(model2, model.log, run_save_load_hdf5=run_save_load_hdf5) cross_reference(model3, xref) if run_renumber: renumber('model2.bdf', model.log) if run_mirror: # we put this under renumber to prevent modifying an # existing model to prevent breaking tests # # shouldn't have any effect model2.bdf model_mirrored = bdf_mirror('model2.bdf', plane='xz', log=model.log)[0] model_mirrored.write_bdf('mirrored2.bdf') read_bdf('mirrored2.bdf', log=model.log) os.remove('mirrored2.bdf') os.remove('model2.bdf') if model.elements and run_quality: element_quality(model) if run_op2_writer: op2_geom_model = attach_op2_results_to_bdf(model, op2_model=None) from pyNastran.op2.op2_geom import read_op2_geom table_name = 'OUGV1' node_gridtype = np.zeros((10, 2), dtype='int32') node_gridtype[:, 0] = np.arange(1, 11) data = np.zeros((1, 10, 6), dtype='float32') isubcase = 1 disp = RealDisplacementArray.add_static_case(table_name, node_gridtype, data, isubcase, is_sort1=True) op2_geom_model.displacements[isubcase] = disp op2_filename = 'spike.op2' bkp_log = op2_geom_model.log op2_geom_model.log = get_logger(log=None, level=op2_log_level, encoding='utf-8') op2_geom_model.write_op2(op2_filename, post=-1, endian=b'<', skips=None, nastran_format='nx') if run_op2_reader: unused_op2_geom = read_op2_geom(op2_filename, log=op2_geom_model.log, xref=False) else: frame = inspect.currentframe() call_frame = inspect.getouterframes(frame, 2) op2_geom_model.log.warning('skipping op2 reader for %s' % call_frame[1][3]) op2_geom_model.log = bkp_log os.remove(op2_filename) if run_remove_unused: remove_unused(model) return model3
def cmd_line_convert(): # pragma: no cover """command line interface to bdf_merge""" from docopt import docopt import pyNastran msg = ( "Usage:\n" ' bdf convert IN_BDF_FILENAME [-o OUT_BDF_FILENAME] [--in_units IN_UNITS] [--out_units OUT_UNITS]\n' ' bdf convert -h | --help\n' ' bdf convert -v | --version\n' '\n' 'Options:\n' ' -o OUT, --output OUT_BDF_FILENAME path to output BDF/DAT/NAS file\n\n' ' --in_units IN_UNITS length,mass\n\n' ' --out_units OUT_UNITS length,mass\n\n' 'Info:\n' ' -h, --help show this help message and exit\n' " -v, --version show program's version number and exit\n" ) if len(sys.argv) == 1: sys.exit(msg) ver = str(pyNastran.__version__) #type_defaults = { # '--nerrors' : [int, 100], #} data = docopt(msg, version=ver) print(data) size = 16 bdf_filename = data['IN_BDF_FILENAME'] bdf_filename_out = data['--output'] if bdf_filename_out is None: #bdf_filename_out = 'merged.bdf' bdf_filename_out = bdf_filename + '.convert.bdf' in_units = data['IN_UNITS'] if in_units is None: in_units = 'm,kg' out_units = data['OUT_UNITS'] if out_units is None: out_units = 'm,kg' length_in, mass_in = in_units.split(',') length_out, mass_out = out_units.split(',') units_to = [length_out, mass_out, 's'] units = [length_in, mass_in, 's'] #cards_to_skip = [ #'AEFACT', 'CAERO1', 'CAERO2', 'SPLINE1', 'SPLINE2', #'AERO', 'AEROS', 'PAERO1', 'PAERO2', 'MKAERO1'] from pyNastran.bdf.bdf import read_bdf from pyNastran.bdf.mesh_utils.convert import convert model = read_bdf(bdf_filename, validate=True, xref=True, punch=False, save_file_structure=False, skip_cards=None, read_cards=None, encoding=None, log=None, debug=True, mode='msc') convert(model, units_to, units=units) for prop in model.properties.values(): prop.comment = '' model.write_bdf(bdf_filename_out)
def save_load_deck(model, xref='standard', punch=True, run_remove_unused=True, run_convert=True, run_renumber=True, run_mirror=True, run_save_load=True, run_quality=True, write_saves=True, run_save_load_hdf5=True): """writes, re-reads, saves an obj, loads an obj, and returns the deck""" model.validate() model.pop_parse_errors() model.pop_xref_errors() bdf_file = StringIO() model.write_bdf(bdf_file, size=8, close=False) bdf_file.seek(0) model.write_bdf(bdf_file, size=16, close=False) bdf_file.seek(0) model.write_bdf(bdf_file, size=16, is_double=True, close=False) bdf_file.seek(0) if write_saves and model.save_file_structure: bdf_filenames = { 0: 'junk.bdf', } model.write_bdfs(bdf_filenames) os.remove('junk.bdf') if run_remove_unused: remove_unused(model) if run_convert: units_to = ['m', 'kg', 's'] units = ['ft', 'lbm', 's'] convert(model, units_to, units) model2 = BDF(log=model.log) #print(bdf_file.getvalue()) model2.read_bdf(bdf_file, punch=punch, xref=False) _cross_reference(model2, xref) model2.pop_parse_errors() model2.get_bdf_stats() model2.write_bdf('model2.bdf') if run_save_load: model2.save(obj_filename='model.obj', unxref=True) model3 = BDF(debug=False, log=model.log, mode='msc') model3.load(obj_filename='model.obj') os.remove('model.obj') else: model2.uncross_reference() model3 = model2 if run_save_load_hdf5 and IS_H5PY: model2.export_to_hdf5_filename('test.h5') model4 = BDF(log=model2.log) model4.load_hdf5_filename('test.h5') model4.validate() bdf_stream = StringIO() model4.write_bdf(bdf_stream, encoding=None, size=8, is_double=False, interspersed=False, enddata=None, write_header=True, close=True) for key, value in model2.card_count.items(): if key == 'ENDDATA': continue if key not in model4.card_count: msg = 'key=%r was not loaded to hdf5\nexpected=%s\nactual=%s' % ( key, model2.card_count, model4.card_count) #raise RuntimeError(msg) model.log.error(msg) cross_reference(model3, xref) if run_renumber: renumber('model2.bdf', model.log) if run_mirror: # we put embed this under renumber to prevent modifying an # existing model to prevent breaking tests # # shouldn't have any effect model2.bdf bdf_mirror('model2.bdf', plane='xz', log=model.log) os.remove('model2.bdf') if model.elements and run_quality: element_quality(model) return model3
def save_load_deck(model, xref='standard', punch=True, run_remove_unused=True, run_convert=True, run_renumber=True, run_mirror=True, run_save_load=True, run_quality=True, write_saves=True, run_save_load_hdf5=True, run_mass_properties=True): """writes, re-reads, saves an obj, loads an obj, and returns the deck""" model.validate() model.pop_parse_errors() model.pop_xref_errors() bdf_file = StringIO() model.write_bdf(bdf_file, size=8, close=False) bdf_file.seek(0) model.write_bdf(bdf_file, size=16, close=False) bdf_file.seek(0) model.write_bdf(bdf_file, size=16, is_double=True, close=False) bdf_file.seek(0) if write_saves and model.save_file_structure: bdf_filenames = { 0: 'junk.bdf', } model.write_bdfs(bdf_filenames) os.remove('junk.bdf') if run_remove_unused: remove_unused(model) if run_convert: units_to = ['m', 'kg', 's'] units = ['ft', 'lbm', 's'] convert(model, units_to, units) model2 = BDF(log=model.log) #print(bdf_file.getvalue()) model2.read_bdf(bdf_file, punch=punch, xref=False) _cross_reference(model2, xref) model2.pop_parse_errors() model2.get_bdf_stats() model2.write_bdf('model2.bdf') nelements = len(model2.elements) + len(model2.masses) if run_mass_properties and len(model2.nodes) == 0 and nelements > 0: mass1, cg1, inertia1 = model2.mass_properties(reference_point=None, sym_axis=None) mass2, cg2, inertia2 = model2.mass_properties_nsm(reference_point=None, sym_axis=None) #if not quiet: #if model2.wtmass != 1.0: #print('weight = %s' % (mass1 / model2.wtmass)) #print('mass = %s' % mass1) #print('cg = %s' % cg1) #print('Ixx=%s, Iyy=%s, Izz=%s \nIxy=%s, Ixz=%s, Iyz=%s' % tuple(inertia1)) assert np.allclose(mass1, mass2), 'mass1=%s mass2=%s' % (mass1, mass2) assert np.allclose(cg1, cg2), 'mass=%s\ncg1=%s cg2=%s' % (mass1, cg1, cg2) assert np.allclose( inertia1, inertia2, atol=1e-5 ), 'mass=%s cg=%s\ninertia1=%s\ninertia2=%s\ndinertia=%s' % ( mass1, cg1, inertia1, inertia2, inertia1 - inertia2) mass3, cg3, inertia3 = mass_properties_breakdown(model2)[:3] assert np.allclose(mass1, mass3), 'mass1=%s mass3=%s' % (mass1, mass3) #assert np.allclose(cg1, cg3), 'mass=%s\ncg1=%s cg3=%s' % (mass1, cg1, cg3) if run_save_load: model2.save(obj_filename='model.obj', unxref=True) model3 = BDF(debug=False, log=model.log, mode='msc') model3.load(obj_filename='model.obj') os.remove('model.obj') else: model2.uncross_reference() model3 = model2 if run_save_load_hdf5 and IS_H5PY: model2.export_hdf5_filename('test.h5') model4 = BDF(log=model2.log) model4.load_hdf5_filename('test.h5') model4.validate() bdf_stream = StringIO() model4.write_bdf(bdf_stream, encoding=None, size=8, is_double=False, interspersed=False, enddata=None, write_header=True, close=True) for key, value in model2.card_count.items(): if key == 'ENDDATA': continue if key not in model4.card_count: msg = 'key=%r was not loaded to hdf5\nexpected=%s\nactual=%s' % ( key, model2.card_count, model4.card_count) #raise RuntimeError(msg) model.log.error(msg) cross_reference(model3, xref) if run_renumber: renumber('model2.bdf', model.log) if run_mirror: # we put embed this under renumber to prevent modifying an # existing model to prevent breaking tests # # shouldn't have any effect model2.bdf bdf_mirror('model2.bdf', plane='xz', log=model.log) os.remove('model2.bdf') if model.elements and run_quality: element_quality(model) return model3