def test_rcm(self): from sfepy import data_dir from sfepy.linalg import rcm, permute_in_place, save_sparse_txt from sfepy.fem import Mesh filename = data_dir + '/meshes/2d/special/square_triquad.mesh' self.report('testing reversed Cuthill-McKee permutation') conf_dir = op.dirname(__file__) mesh = Mesh.from_file(filename, prefix_dir=conf_dir) graph = mesh.create_conn_graph() graph0 = graph.copy() save_sparse_txt(op.join(self.options.out_dir, 'test_rcm_graph_orig'), graph, fmt='%d %d %d\n') perm = rcm(graph) permute_in_place(graph, perm) save_sparse_txt(op.join(self.options.out_dir, 'test_rcm_graph_rcm'), graph, fmt='%d %d %d\n') assert_((graph0.indptr != graph.indptr).any()) assert_((graph0.indices != graph.indices).any()) permute_in_place(graph, perm, inverse=True) save_sparse_txt(op.join(self.options.out_dir, 'test_rcm_graph_rcm_inv'), graph, fmt='%d %d %d\n') assert_((graph0.indptr == graph.indptr).all()) assert_((graph0.indices == graph.indices).all()) return True
def test_struct_i_add(self): from sfepy.base.base import Struct a = Struct(f1=0, f2=[1, 2, 3], f3=Struct(ff="abc")) b = Struct(f1=5, f2=[1], f3=Struct(ff="", gg=123), f4="new one") a += b assert_(a.f1 == 0) assert_(a.f2 == [1, 2, 3]) assert_(a.f3.ff == "abc") assert_(a.f3.gg == 123) assert_(a.f4 == "new one") return True
def test_recursive_dict_hdf5( self ): from sfepy.base.ioutils import write_dict_hdf5, read_dict_hdf5 from sfepy.base.ioutils import pt if pt is None: self.report( 'skipped (no pytables)' ) return True filename = op.join( self.options.out_dir, 'dict.h5' ) test = {'A' : 0, 'B' : {'C' : [0, 1], 'D' : {'E' : {'F' : {'G' : 2.0}}}}} self.report( '%s' % test ) self.report( 'saving into %s...' % filename ) write_dict_hdf5( filename, test ) self.report( 'reading...' ) test2 = read_dict_hdf5( filename ) self.report( '%s' % test2 ) assert_( test == test2 ) return True
def test_material_functions(self): problem = self.problem ts = problem.get_default_ts(step=0) problem.materials.time_update(ts, problem.domain, problem.equations) coors = problem.domain.get_mesh_coors() mat1 = problem.materials['mf1'] assert_(nm.all(coors[:,0] == mat1.get_data(None, None, 'x_0'))) mat2 = problem.materials['mf2'] assert_(nm.all(coors[:,1] == mat2.get_data(None, None, 'x_1'))) mat3 = problem.materials['mf3'] key = mat3.get_keys(region_name='Omega')[0] assert_(nm.all(mat3.get_data(key, 0, 'a') == 10.0)) assert_(nm.all(mat3.get_data(key, 0, 'b') == 2.0)) assert_(mat3.get_data(None, None, 'c') == 'ahoj') return True
def test_units(self): from sfepy.mechanics.units import Unit, Quantity, sm if sm is None: self.report('cannot import sympy, skipping') return True units = ['m', 's', 'kg', 'C'] self.report('units:', units) unit_set = [Unit(key) for key in units] q1 = Quantity('stress', unit_set) self.report(q1.name, ':', q1()) assert_(q1() == '1.0 Pa') assert_(q1('c') == '100.0 cPa') q2 = Quantity('force', unit_set) self.report(q2.name, ':', q2()) assert_(q2() == '1.0 Newton') assert_(q2('d') == '0.1 dNewton') q3 = Quantity('energy', unit_set) self.report(q3.name, ':', q3()) assert_(q3() == '1.0 J') assert_(q3('mu') == '1000000.0 muJ') units = ['mm', 's', 'g', 'C'] self.report('units:', units) unit_set = [Unit(key) for key in units] q1 = Quantity('stress', unit_set) self.report(q1.name, ':', q1()) assert_(q1() == '1.0 Pa') q2 = Quantity('force', unit_set) self.report(q2.name, ':', q2()) assert_(q2() == '1.0 muNewton') q3 = Quantity('energy', unit_set) self.report(q3.name, ':', q3()) assert_(q3() == '1.0 nJ') units = ['cm', 'ms', 'kg', 'kC'] self.report('units:', units) unit_set = [Unit(key) for key in units] q1 = Quantity('stress', unit_set) self.report(q1.name, ':', q1()) assert_(q1() == '0.1 GPa') q2 = Quantity('force', unit_set) self.report(q2.name, ':', q2()) assert_(q2() == '10.0 kNewton') q3 = Quantity('energy', unit_set) self.report(q3.name, ':', q3()) assert_(q3() == '0.1 kJ') q4 = Quantity('thermal_expandability', unit_set) self.report(q4.name, ':', q4()) assert_(q4() == '0.1 MPa / C') assert_(q4('G') == '0.0001 GPa / C') assert_(q4('M') == '0.1 MPa / C') assert_(q4('k') == '100.0 kPa / C') assert_(q4('d') == '10000.0 dPa / C') assert_(q4('') == '100000.0 Pa / C') units = ['m', 's', 'g', 'C'] self.report('units:', units) unit_set = [Unit(key) for key in units] q4 = Quantity('thermal_expandability', unit_set) self.report(q4.name, ':', q4()) assert_(q4() == '1.0 mPa / C') assert_(q4('k') == str(0.000001) + ' kPa / C') assert_(q4('d') == '0.0001 dPa / C') assert_(q4('') == '0.001 Pa / C') assert_(q4('c') == '0.1 cPa / C') assert_(q4('m') == '1.0 mPa / C') assert_(q4('mu') == '1000.0 muPa / C') assert_(q4('n') == '1000000.0 nPa / C') return True
def test_struct_add(self): from sfepy.base.base import Struct from copy import deepcopy a = Struct(f1=0, f2=[1, 2, 3], f3=Struct(ff="abc"), f4=3.14) a0 = deepcopy(a) b = Struct(f1=5, f2=[1], f3=Struct(ff="", gg=123), f5="new one") c = a + b assert_(c.f1 == 0) assert_(c.f2 == [1, 2, 3]) assert_(c.f3.ff == "abc") assert_(c.f3.gg == 123) assert_(c.f4 == 3.14) assert_(c.f5 == "new one") assert_(a.f1 == a0.f1) assert_(a.f2 == a0.f2) assert_(a.f3.ff == a0.f3.ff) assert_(a.f4 == a0.f4) return True
def test_sparse_matrix_hdf5( self ): from sfepy.base.ioutils import write_sparse_matrix_hdf5, read_sparse_matrix_hdf5 from sfepy.base.ioutils import pt if pt is None: self.report( 'skipped (no pytables)' ) return True filename = op.join( self.options.out_dir, 'mtx.h5' ) aux = nm.random.rand( 5, 5 ) aux[1,:] = aux[:,2] = aux[3,:] = 0.0 mtx = sp.csr_matrix( aux, dtype = nm.float64 ) # self.report( 'sparse matrix:\n%s' % mtx ) self.report( 'saving matrix into %s...' % filename ) write_sparse_matrix_hdf5( filename, mtx ) self.report( 'reading...' ) mtx2 = read_sparse_matrix_hdf5( filename ) # self.report( 'read matrix:\n%s' % mtx2 ) self.report( 'difference:\n%s' % (mtx2 - mtx).__repr__() ) assert_( mtx.shape == mtx2.shape ) assert_( mtx.dtype == mtx2.dtype ) assert_( mtx.format == mtx2.format ) assert_( nm.allclose( mtx.data, mtx2.data ) ) assert_( nm.allclose( mtx.indices, mtx2.indices ) ) assert_( nm.allclose( mtx.indptr, mtx2.indptr ) ) return True
def test_read_meshes( self ): """Try to read all listed meshes.""" from sfepy.fem import Mesh conf_dir = op.dirname(__file__) meshes = {} for ii, filename in enumerate( filename_meshes ): self.report( '%d. mesh: %s' % (ii + 1, filename) ) mesh = Mesh.from_file(filename, prefix_dir=conf_dir) assert_(mesh.dim == (mesh.coors.shape[1])) assert_(mesh.n_nod == (mesh.coors.shape[0])) assert_(mesh.n_nod == (mesh.ngroups.shape[0])) assert_(mesh.n_el == sum(mesh.n_els)) for ig, conn in enumerate( mesh.conns ): assert_(conn.shape[0] == len(mesh.mat_ids[ig])) assert_(conn.shape[0] == mesh.n_els[ig]) assert_(conn.shape[1] == mesh.n_e_ps[ig]) self.report( 'read ok' ) meshes[filename] = mesh self.meshes = meshes return True