Exemple #1
0
    
    # Which axes should be integrated out?
    assert len(axes_str) == 2
    ax2index = {"x": 0, "y": 1, "z": 2}
    axes_integrate = [ax2index[s] for s in axes_str]
    # Which axis remains?
    axis_remains = None
    for i in range(0,3):
        if not (i in axes_integrate):
            axis_remains = i
            break
    print "axes %s are integrated out" % str(axes_integrate)
    print "remaining axis: %s" % axis_remains

    # load the cube file
    atomlist, origin, axes, data = Cube.readCube(cube_file)
    axes = [np.array(ax) for ax in axes]

    x0 = np.array(origin)
    nx,ny,nz = data.shape
    ns = [nx,ny,nz]

    # remaining coordinate is called u
    du = la.norm(axes[axis_remains])
    print "du = %s" % du
    nu = ns[axis_remains]
    u = np.linspace(origin[axis_remains], nu*du, nu)
    # shift axis so that the center is located at u=0
    u = u-u[len(u)/2]
    # rho(u), 1D curve after integrating
    rho_u = np.zeros(ns[axis_remains])
    (opts, args) = parser.parse_args()
    if len(args) < 6:
        print usage
        exit(-1)

    # input cube files
    Mx_cube_file = args[0]
    My_cube_file = args[1]
    Mz_cube_file = args[2]
    # output cube files
    Ax_cube_file = args[3]
    Ay_cube_file = args[4]
    Az_cube_file = args[5]


    # load cube files with magnetic dipole density
    print "load magnetic dipole density from cube files..."
    atomlist, origin, axes, Mx = Cube.readCube(Mx_cube_file)
    atomlist, origin, axes, My = Cube.readCube(My_cube_file)
    atomlist, origin, axes, Mz = Cube.readCube(Mz_cube_file)
    print "compute vector potential..."
    Ax,Ay,Az = vector_potential_Poisson(atomlist, origin, axes, Mx, My, Mz,
                                        poisson_solver=opts.solver,
                                        conv_eps=opts.conv_eps, maxiter=opts.maxiter)
    # save vector potential
    Cube.writeCube(Ax_cube_file, atomlist, origin, axes, Ax)
    Cube.writeCube(Ay_cube_file, atomlist, origin, axes, Ay)
    Cube.writeCube(Az_cube_file, atomlist, origin, axes, Az)
    print "x-,y- and z-components of vector potential saved to '%s', '%s' and '%s'" % (Ax_cube_file, Ay_cube_file, Az_cube_file)

    # input cube files
    # ... for magnetic dipole density
    Mx_cube_file = args[0]
    My_cube_file = args[1]
    Mz_cube_file = args[2]
    # ... vector potential
    Ax_cube_file = args[3]
    Ay_cube_file = args[4]
    Az_cube_file = args[5]
    # output file
    dat_file = args[6]

    # load cube files components of magnetic dipole density
    print "load magnetic dipole densities from cube files..."
    atomlist, origin, axes, Mx = Cube.readCube(Mx_cube_file)
    atomlist, origin, axes, My = Cube.readCube(My_cube_file)
    atomlist, origin, axes, Mz = Cube.readCube(Mz_cube_file)

    dx = la.norm(axes[0])
    dy = la.norm(axes[1])
    dz = la.norm(axes[2])
    # volume element, assuming the axes are orthogonal
    dV = dx * dy * dz
    # find total magnetic dipole moment
    mtot = np.array([np.sum(Mx * dV), np.sum(My * dV), np.sum(Mz * dV)])

    # load cube files for components of vector potential
    print "load magnetic vector potential from cube files..."
    atomlist, origin, axes, Ax_data = Cube.readCube(Ax_cube_file)
    atomlist, origin, axes, Ay_data = Cube.readCube(Ay_cube_file)
        dest="nuclear_potential",
        type=int,
        help=
        "Should the nuclear potential be added to the electrostatic potential (0: no, 1: yes) [default: %default]",
        default=1)

    (opts, args) = parser.parse_args()
    if len(args) < 2:
        print usage
        exit(-1)

    rho_cube_file = args[0]
    pot_cube_file = args[1]

    # load cube file with electronic density
    print "load density from cube file..."
    atomlist, origin, axes, rho = Cube.readCube(rho_cube_file)
    print "compute electrostatic potential..."
    pot = electrostatic_potential_Poisson(
        atomlist,
        origin,
        axes,
        rho,
        poisson_solver=opts.solver,
        conv_eps=opts.conv_eps,
        maxiter=opts.maxiter,
        nuclear_potential=opts.nuclear_potential)
    # save potential
    Cube.writeCube(pot_cube_file, atomlist, origin, axes, pot)
    print "electrostatic potential saved to '%s'" % pot_cube_file