def test_get_grid(): for number in grid_fns: xyz, w = get_grid(number) assert len(xyz.shape) == 2 assert len(w.shape) == 1 assert len(xyz) == len(w) assert xyz.shape[1] == 3 assert abs(numpy.dot(xyz[:, 0], w)) < 1e-10 assert abs(numpy.dot(xyz[:, 1], w)) < 1e-10 assert abs(numpy.dot(xyz[:, 2], w)) < 1e-10
def test_get_grid(): for number in grid_fns: xyz, w = get_grid(number) assert (len(xyz.shape) == 2) assert (len(w.shape) == 1) assert (len(xyz) == len(w)) assert (xyz.shape[1] == 3) assert (abs(numpy.dot(xyz[:, 0], w)) < 1e-10) assert (abs(numpy.dot(xyz[:, 1], w)) < 1e-10) assert (abs(numpy.dot(xyz[:, 2], w)) < 1e-10)
def make_density_profiles(program, num_lebedev, r_low, r_high, steps, atom_numbers, max_ion, do_work, do_random): # generate lebedev grid lebedev_xyz, lebedev_weights = get_grid(num_lebedev) # define radii rgrid = RLogIntGrid(r_low, r_high, steps) agrid = ALebedevIntGrid(num_lebedev, do_random) f_pro = file("densities.txt", "w") print >> f_pro, rgrid.get_description() charges = [] # run over all directories, run cubegen, load cube data pb = log.pb("Density profiles", len(atom_numbers) * (2 * max_ion + 1)) for number in atom_numbers: symbol = periodic[number].symbol for charge in xrange(-max_ion, max_ion + 1): charge_label = charge_to_label(charge) pb() dirname = os.path.join("%03i%s" % (number, symbol), charge_label, "gs") # get the grid if not os.path.isdir(dirname): continue if do_work: work = Work(dirname) else: work = Work() grid = AtomicGrid.from_prefix("grid", work) if grid is None: center = numpy.zeros(3, float) grid = AtomicGrid.from_parameters("grid", work, center, rgrid, agrid) # compute densities program.compute_density(grid, dirname) # this is spherical averaging, i.e. integral/(4*pi) radrhos = agrid.integrate(grid.moldens) / (4 * numpy.pi) print >> f_pro, "%3i %+2i" % (number, charge), # leave out near zeros to save space and time print >> f_pro, " ".join("%22.16e" % rho for rho in radrhos if rho > 1e-100) check = rgrid.integrate(4 * numpy.pi * rgrid.rs * rgrid.rs * radrhos) charges.append((number, symbol, charge, check)) pb() f_pro.close() counter = 0 for number, symbol, charge, real_charge in charges: log("Total charge error: %3i %2s %+2i % 10.5e" % (number, symbol, charge, -real_charge + number - charge)) counter += 1
def make_density_profiles(program, num_lebedev, r_low, r_high, steps, atom_numbers, max_ion, do_work, do_random): # generate lebedev grid lebedev_xyz, lebedev_weights = get_grid(num_lebedev) # define radii rgrid = RLogIntGrid(r_low, r_high, steps) agrid = ALebedevIntGrid(num_lebedev, do_random) f_pro = file("densities.txt", "w") print >> f_pro, rgrid.get_description() charges = [] # run over all directories, run cubegen, load cube data pb = log.pb("Density profiles", len(atom_numbers)*(2*max_ion+1)) for number in atom_numbers: symbol = periodic[number].symbol for charge in xrange(-max_ion, max_ion+1): charge_label = charge_to_label(charge) pb() dirname = os.path.join("%03i%s" % (number, symbol), charge_label, "gs") # get the grid if not os.path.isdir(dirname): continue if do_work: work = Work(dirname) else: work = Work() grid = AtomicGrid.from_prefix("grid", work) if grid is None: center = numpy.zeros(3,float) grid = AtomicGrid.from_parameters("grid", work, center, rgrid, agrid) # compute densities program.compute_density(grid, dirname) # this is spherical averaging, i.e. integral/(4*pi) radrhos = agrid.integrate(grid.moldens)/(4*numpy.pi) print >> f_pro, "%3i %+2i" % (number, charge), # leave out near zeros to save space and time print >> f_pro, " ".join("%22.16e" % rho for rho in radrhos if rho > 1e-100) check = rgrid.integrate(4*numpy.pi*rgrid.rs*rgrid.rs*radrhos) charges.append((number, symbol, charge, check)) pb() f_pro.close() counter = 0 for number, symbol, charge, real_charge in charges: log("Total charge error: %3i %2s %+2i % 10.5e" % (number, symbol, charge, -real_charge+number-charge)) counter += 1