def compute_phase_velocity( self ): from sfepy.homogenization.phono import compute_density_volume_info opts = self.app_options dim = self.problem.domain.mesh.dim christoffel = self.compute_cat() self.problem.update_materials() dv_info = compute_density_volume_info( self.problem, opts.volume, opts.region_to_material ) output( 'average density:', dv_info.average_density ) eye = nm.eye( dim, dim, dtype = nm.float64 ) mtx_mass = eye * dv_info.average_density meigs, mvecs = eig( mtx_mass, mtx_b = christoffel, eigenvectors = True, method = opts.eigensolver ) phase_velocity = 1.0 / nm.sqrt( meigs ) return phase_velocity