Source code for pyNastran.bdf.test.bdf_unit_tests

from __future__ import (nested_scopes, generators, division, absolute_import,
                        print_function, unicode_literals)
import os
import unittest
from numpy import allclose, array
from numpy.linalg import norm

import pyNastran
from pyNastran.bdf.cards.baseCard import collapse_thru_by
from pyNastran.bdf.bdf import BDF

pkg_path = pyNastran.__path__[0]
test_path = os.path.join(pkg_path, 'bdf', 'test')
#print("testPath = %s" % testPath)
from pyNastran.bdf.test.test_bdf import run_bdf, run_all_files_in_folder


[docs]class Tester(unittest.TestCase):
[docs] def run_bdf(self, folder, bdfFilename, xref=False, cid=None, meshForm='combined', debug=False, dynamic_vars={}): cid = 0 #xref = False return run_bdf(folder, bdfFilename, xref=xref, cid=cid, isFolder=True, meshForm=meshForm, dynamic_vars=dynamic_vars, debug=debug)
[docs] def run_all_files_in_folder(self, folder, xref=False, cid=None, debug=False): run_all_files_in_folder(folder, xref=xref, cid=cid, debug=debug)
[docs]class TestBDF(Tester):
[docs] def test_bdf_01(self): bdfFilename = os.path.join('solid_bending', 'solid_bending.bdf') folder = os.path.abspath(os.path.join(pkg_path, '..', 'models')) self.run_bdf(folder, bdfFilename) (fem1, fem2, diffCards) = self.run_bdf(folder, bdfFilename, xref=True) diffCards2 = list(set(diffCards)) diffCards2.sort() assert len(diffCards2) == 0, diffCards2 for fem in [fem1, fem2]: assert len(fem.params) == 2, 'len(params) = %i' % len(fem.params) assert len(fem.coords) == 1, 'len(coords) = %i' % len(fem.coords) assert len(fem.nodes) == 72, 'len(nodes) = %i' % len(fem.nodes) assert len(fem.materials) == 1, 'len(materials) = %i' % len(fem.materials) assert len(fem.elements) == 186, 'len(elements) = %i' % len(fem.elements) assert len(fem.methods) == 0, 'len(methods) = %i' % len(fem.methods) assert len(fem.properties) == 1, 'len(properties) = %i' % len(fem.properties) mass, cg, I = fem1.mass_properties() assert allclose(mass, 6.0), 'mass = %s' % mass cg_exact = array([0.5, 1., 1.5]) for i, (cgi, cgie) in enumerate(zip(cg, cg_exact)): assert allclose(cgi, cgie), 'i=%s cg=%s' % (i, str(cg)) self._compare_mass_cg_I(fem1) self._compare_mass_cg_I(fem1, reference_point=u'cg') mass, cg, I = fem1.mass_properties(reference_point='cg')
[docs] def _compare_mass_cg_I(self, fem1, reference_point=None, sym_axis=None): num_cpus = 4 mass1, cg1, I1 = fem1.mass_properties(reference_point=reference_point, sym_axis=sym_axis) mass2, cg2, I2 = fem1.mass_properties(reference_point=reference_point, sym_axis=sym_axis, num_cpus=num_cpus) assert allclose(mass1, mass2), 'mass1_sp=%s mass2_mp=%s' % (mass1, mass2) assert allclose(norm((cg1 - cg2)**2), 0.0), 'cg1-cg2=%s' % (cg1 - cg2) assert allclose(norm((I1 - I2)**2), 0.0), 'I1-I2=%s' % (I1 - I2)
[docs] def test_bdf_02(self): bdfFilename = os.path.join('plate_py', 'plate_py.dat') folder = os.path.abspath(os.path.join(pkg_path, '..', 'models')) self.run_bdf(folder, bdfFilename) (fem1, fem2, diffCards) = self.run_bdf(folder, bdfFilename, xref=True) diffCards2 = list(set(diffCards)) diffCards2.sort() assert len(diffCards2) == 0, diffCards2 for fem in [fem1, fem2]: assert len(fem.coords) == 3, 'len(coords) = %i' % len(fem.coords) assert len(fem.params) == 6, 'len(params) = %i' % len(fem.params) assert len(fem.nodes) == 231, 'len(nodes) = %i' % len(fem.nodes) assert len(fem.materials) == 1, 'len(materials) = %i' % len(fem.materials) assert len(fem.elements) == 200, 'len(elements) = %i' % len(fem.elements) assert len(fem.methods) == 1, 'len(methods) = %i' % len(fem.methods) assert len(fem.properties) == 1, 'len(properties) = %i' % len(fem.properties) self._compare_mass_cg_I(fem1) self._compare_mass_cg_I(fem1, reference_point=u'cg')
[docs] def test_bdf_03(self): bdfFilename = os.path.join('cbush', 'cbush.dat') folder = os.path.abspath(os.path.join(pkg_path, '..', 'models')) (fem1, fem2, diffCards) = self.run_bdf(folder, bdfFilename) diffCards2 = list(set(diffCards)) diffCards2.sort() assert len(diffCards2) == 0, diffCards2 for fem in [fem1, fem2]: assert len(fem.params) == 6, 'len(params) = %i' % len(fem.params) assert len(fem.coords) == 1, 'len(coords) = %i' % len(fem.coords) assert len(fem.nodes) == 2, 'len(nodes) = %i' % len(fem.nodes) assert len(fem.materials) == 0, 'len(materials) = %i' % len(fem.materials) assert len(fem.elements) == 1, 'len(elements) = %i' % len(fem.elements) assert len(fem.methods) == 0, 'len(methods) = %i' % len(fem.methods) assert len(fem.properties) == 1, 'len(properties) = %i' % len(fem.properties) # PBEAML issue self._compare_mass_cg_I(fem1) self._compare_mass_cg_I(fem1, reference_point=u'cg') self.run_bdf(folder, bdfFilename, xref=True)
[docs] def test_bdf_04(self): bdfFilename = os.path.join('beam_modes', 'beam_modes.dat') folder = os.path.abspath(os.path.join(pkg_path, '..', 'models')) (fem1, fem2, diffCards) = self.run_bdf(folder, bdfFilename) diffCards2 = list(set(diffCards)) diffCards2.sort() assert len(diffCards2) == 0, diffCards2 for fem in [fem1, fem2]: assert len(fem.params) == 6, 'len(params) = %i' % len(fem.params) assert len(fem.coords) == 1, 'len(coords) = %i' % len(fem.coords) assert len(fem.nodes) == 12, 'len(nodes) = %i' % len(fem.nodes) assert len(fem.materials) == 1, 'len(materials) = %i' % len(fem.materials) assert len(fem.elements) == 10, 'len(elements) = %i' % len(fem.elements) assert len(fem.masses) == 1, 'len(masses) = %i' % len(fem.elements) assert len(fem.methods) == 1, 'len(methods) = %i' % len(fem.methods) assert len(fem.properties) == 3, 'len(properties) = %i' % len(fem.properties) # PBEAML issue assert len(fem.properties_mass) == 0, 'len(properties_mass) = %i' % len(fem.properties_mass) self._compare_mass_cg_I(fem1)
#self._compare_mass_cg_I(fem1, reference_point=u'cg') #self.run_bdf(folder, bdfFilename, xref=True) # PBEAML is not supported
[docs] def test_bdf_05(self): bdfFilename = 'testA.bdf' folder = os.path.abspath(os.path.join(pkg_path, 'bdf', 'test', 'unit')) (fem1, fem2, diffCards) = self.run_bdf(folder, bdfFilename) diffCards2 = list(set(diffCards)) diffCards2.sort() assert len(diffCards2) == 0, diffCards2
#self.run_bdf(folder, bdfFilename, xref=True) # PBEAML is not supported
[docs] def test_bdf_06(self): bdfFilename = os.path.join('bar3truss', 'vared_bar3.bdf') folder = os.path.abspath(os.path.join(pkg_path, '..', 'models')) dynamic_vars = { 'bar1_a': 1.0, 'bar2_a': 1.0, 'bar3_a': 1.0, 'loadx': 1.0, 'loady': 1.0, 'loadmag': 10000., 'youngs' : 1e7, 'rho': 0.01, } (fem1, fem2, diffCards) = self.run_bdf(folder, bdfFilename, dynamic_vars=dynamic_vars) diffCards2 = list(set(diffCards)) diffCards2.sort() assert len(diffCards2) == 0, diffCards2 for fem in [fem1, fem2]: assert len(fem.params) == 4, 'len(params) = %i' % len(fem.params) assert len(fem.coords) == 1, 'len(coords) = %i' % len(fem.coords) assert len(fem.nodes) == 4, 'len(nodes) = %i' % len(fem.nodes) assert len(fem.materials) == 1, 'len(materials) = %i' % len(fem.materials) assert len(fem.elements) == 3, 'len(elements) = %i' % len(fem.elements) assert len(fem.methods) == 0, 'len(methods) = %i' % len(fem.methods) assert len(fem.properties) == 3, 'len(properties) = %i' % len(fem.properties) # PBEAML issue self._compare_mass_cg_I(fem1) self._compare_mass_cg_I(fem1, reference_point=u'cg') self._compare_mass_cg_I(fem1, reference_point='cg')
[docs]class BaseCard_Test(Tester):
[docs] def test_base_card_01_collapse_thru(self): """ tests collapse_thru method used by SETx cards """ data = [1, 2, 3, 4, 5, 10] expected = [1, u'THRU', 5, 10] self.assertEqual(collapse_thru_by(data), expected, collapse_thru_by(data)) data = [1, 3, 4, 5, 6, 17] expected = [1, 3, 4, 5, 6, 17] self.assertEqual(collapse_thru_by(data), expected, collapse_thru_by(data)) data = [1, 3, 4, 5, 6, 7, 17] expected = [1, 3, 4, 'THRU', 7, 17] self.assertEqual(collapse_thru_by(data), expected, collapse_thru_by(data)) data = [1, 3, 4, 6, 8, 10, 12, 14, 17] expected = [1, 3, 4, 'THRU', 14, 'BY', 2, 17] self.assertEqual(collapse_thru_by(data), expected, collapse_thru_by(data)) data = [1, 3, 4, 5, 6, 8, 10, 12, 14, 16, 18, 20, 22, 101] expected = [1, 3, 4, 5, 6, 8, 'THRU', 22, 'BY', 2, 101] self.assertEqual(collapse_thru_by(data), expected, collapse_thru_by(data)) data = [1, 2, 3, 4, 5] expected = [1, 'THRU', 5] self.assertEqual(collapse_thru_by(data), expected, collapse_thru_by(data)) data = [5] expected = [5] self.assertEqual(collapse_thru_by(data), expected, collapse_thru_by(data)) data = [1, 2, 3, 4, 5, 7, 9, 11, 12, 14, 16] expected = [1, 'THRU', 5, 7, 9, 11, 12, 14, 16] self.assertEqual(collapse_thru_by(data), expected, collapse_thru_by(data)) data = [1, 2] expected = [1, 2] self.assertEqual(collapse_thru_by(data), expected, collapse_thru_by(data)) data = [1, 3, 5, 7, 9, 11] expected = [1, 'THRU', 11, 'BY', 2] self.assertEqual(collapse_thru_by(data), expected, collapse_thru_by(data)) data = [1, 2, 3, 4] expected = [1, 'THRU', 4] self.assertEqual(collapse_thru_by(data), expected, collapse_thru_by(data)) data = [1, 2, 3] expected = [1, 2, 3] self.assertEqual(collapse_thru_by(data), expected, collapse_thru_by(data)) data = [1, 2, 3, 4, 5, 6, 7, 8] expected = [1, 'THRU', 8] self.assertEqual(collapse_thru_by(data), expected, collapse_thru_by(data))
if __name__ == '__main__': # pragma: no cover unittest.main()