Example #1
0
    def __init__(self, name="Siesta Job", label="siesta"):
        self.xyz = base_xyz()

        self.name = name
        self.label = label

        self.incharge = [
            "PAO.FixSplitTable",
        ]
        self.params = {}
Example #2
0
 def __init__(self):
     self.params = {}
     
     self.coordinates = coordinates()
     self.species = species()
     self.velocities = velocities()
     
     self.xyz = base_xyz()
     #self.pseudo = qe_pseudo()
     
     self.ifstatic = True # used to determine how to put atomic coordinates to input file
Example #3
0
    def __init__(self):
        self.xyz = base_xyz()
        self.pseudo = qe_pseudo()

        self.cell_params = {
            "cell_dynamics": None,
            "press": None,
            "wmass": None,
            "cell_factor": None,
            "press_conv_thr": None,
            "cell_dofree": None,
        }

        self.kpoints_option = "automatic"
        self.kpoints_mp = [1, 1, 1, 0, 0, 0]

        self.ifstatic = True  # used to determine how to put atomic coordinates to input file
        self.atomic_forces_status = False  # default is no force acting on system
Example #4
0
    def __init__(self):
        #super().__init__()
        self.xyz = base_xyz()
        self.params = {
            "SEED": None,
        }
        self.status = False

        self.cell = cp2k_subsys_cell()

        self.colvar = cp2k_subsys_colvar()

        self.coord = cp2k_subsys_coord()

        self.core_coord = cp2k_subsys_core_coord()

        self.core_velocity = cp2k_subsys_core_velocity()

        self.kind = cp2k_subsys_kind()

        self.multipoles = cp2k_subsys_multipoles()

        self.printout = cp2k_subsys_print()

        self.rng_init = cp2k_subsys_rng_init()

        self.shell_coord = cp2k_subsys_shell_coord()

        self.shell_velocity = cp2k_subsys_shell_velocity()

        self.topology = cp2k_subsys_topology()

        self.velocity = cp2k_subsys_velocity()

        # basic_setting
        self.kind.status = True
        self.cell.status = True
        self.topology.status = True
Example #5
0
 def __init__(self):
     self.xyz = base_xyz()
     self.status = True
     #
     self.coordtype = "cartesian"  # can be cartesian or reduced
Example #6
0
 def get_xyz(self, filepath):
     self.xyz = base_xyz()
     self.xyz.get_xyz(filepath)
Example #7
0
            help="vasp pot databse directory")

    parser.add_argument("--siesta-pot-dir", type=str,
            default=os.path.join(os.path.expanduser("~"), ".pot-siesta"),
            help="vasp pot databse directory")


    args = parser.parse_args()

    print("=================================================================\n")
    print("                 pot-from-xyz-modified.py\n")
    print("-----------------------------------------------------------------\n")
    print("generate PseudoPotential file from information on the xyz file.\n")
    print("\n")

    xyz = base_xyz()
    xyz.get_xyz(args.xyz)

    # --------------------------------------------------------------------------
    # deal with program --------> Quantum ESPRESSO
    # --------------------------------------------------------------------------
    if args.program.lower() == "qe":
        if args.qe_type.lower() == "paw_pbe":
            pass
        elif args.qe_type.lower() == "sssp_efficiency":
            # use SSSP
            # https://www.materialscloud.org/discover/sssp/table/efficiency
            all_pseudos = os.listdir(os.path.join(args.qe_pot_dir, "SSSP_efficiency_pseudos"))
            cmd = "cp "
            for element in xyz.specie_labels:
                for pseudo in all_pseudos:
Example #8
0
    def get_scf_params_and_run_info(self):
        """
        self.run_info[]
            start_time: the task start time
            stop_time: the task stop time
            scf_energies: all the energies during the scf procedure
            #fermi_energy: fermi energy of the system (if output)

        """
        self.run_info["scf_energies"] = []

        for i in range(len(self.lines)):
            # if it is an empty line continue to next line
            if len(self.lines[i].split()) == 0:
                continue
            if self.lines[i].split()[0] == "Program" and self.lines[i].split()[1] == "PWSCF" and self.lines[i].split()[3] == "starts":
                self.run_info["start_time"] = self.lines[i].split("\n")[0]
            elif self.lines[i].split()[0] == "This" and self.lines[i].split()[1] == "run" and self.lines[i].split()[3] == "terminated":
                self.run_info["stop_time"] = self.lines[i].split("\n")[0]
            elif self.lines[i].split()[0] == "Parallel" and self.lines[i].split()[-1] == "processors":
                self.run_info["processors"] = int(self.lines[i].split()[-2])
            elif self.lines[i].split()[0] == "MPI" and self.lines[i].split()[-1] == "nodes":
                self.run_info["nodes"] = int(self.lines[i].split()[-2])
            elif self.lines[i].split()[0] == "bravais-lattice" and self.lines[i].split()[1] == "index":
                self.scf_params["alat_au"] = float(self.lines[i+1].split()[4])
                self.scf_params["nat"] = int(self.lines[i+3].split()[4])
                self.scf_params["nelectron"] = float(self.lines[i+5].split()[4])
                self.scf_params["n_ks_state"] = int(self.lines[i+6].split("=")[1])
                self.scf_params["ecutwfc"] = int(float(self.lines[i+7].split()[3]))
                self.scf_params["ecutrho"] = int(float(self.lines[i+8].split()[4]))
                self.scf_params["conv_thr"] = float(self.lines[i+9].split()[3])
                self.scf_params["mixing_beta"] = float(self.lines[i+10].split()[3])
            elif self.lines[i].split()[0] == "crystal" and self.lines[i].split()[1] == "axes:" and self.lines[i].split()[-1] =="alat)":
                self.scf_params["cell_a_alat"] = []
                self.scf_params["cell_a_alat"].append([float(self.lines[i+1].split()[3]), float(self.lines[i+1].split()[4]), float(self.lines[i+1].split()[5])])
                self.scf_params["cell_a_alat"].append([float(self.lines[i+2].split()[3]), float(self.lines[i+2].split()[4]), float(self.lines[i+2].split()[5])])
                self.scf_params["cell_a_alat"].append([float(self.lines[i+3].split()[3]), float(self.lines[i+3].split()[4]), float(self.lines[i+3].split()[5])])
            elif self.lines[i].split()[0] == "reciprocal" and self.lines[i].split()[1] == "axes:" and self.lines[i].split()[-1] == "pi/alat)": # actually '2 pi/alat'
                self.scf_params["cell_b_2pi_alat"] = []
                self.scf_params["cell_b_2pi_alat"].append([float(self.lines[i+1].split()[3]), float(self.lines[i+1].split()[4]), float(self.lines[i+1].split()[5])])
                self.scf_params["cell_b_2pi_alat"].append([float(self.lines[i+2].split()[3]), float(self.lines[i+2].split()[4]), float(self.lines[i+2].split()[5])])
                self.scf_params["cell_b_2pi_alat"].append([float(self.lines[i+3].split()[3]), float(self.lines[i+3].split()[4]), float(self.lines[i+3].split()[5])])
            elif self.lines[i].split()[0] == "site" and self.lines[i].split()[-1] == "units)" and self.lines[i].split()[-2] == "(alat":
                self.run_info["site_line_number"] = i
            elif self.lines[i].split()[0] == "number" and self.lines[i].split()[2] == 'k':
                if self.lines[i].split()[5] == "(tetrahedron":
                    self.scf_params["degauss"] = "tetrahedron method: degauss not needed"
                else:
                    self.scf_params["degauss"] = float(self.lines[i].split()[9])
                self.run_info["number-of-k-points"] = int(self.lines[i].split()[4])
            elif self.lines[i].split()[0] == "Estimated" and self.lines[i].split()[1] == "max":
                self.run_info["ram_per_process"] = self.lines[i].split()[7] + " " + self.lines[i].split()[8]
                self.run_info["total_ram"] = self.lines[i+2].split()[5] + " " + self.lines[i+2].split()[6]
            elif self.lines[i].split()[0] == "total" and self.lines[i].split()[1] == "energy":
                # the total energy of the last iteration is not print like the previous scf iteration
                # it begin with a ! total energy
                self.run_info["scf_energies"].append(float(self.lines[i].split()[3]))
            elif self.lines[i].split()[0] == "!" and self.lines[i].split()[5] == "Ry":
                self.run_info["scf_final_energy"] = float(self.lines[i].split()[4])
            elif self.lines[i].split()[0] == "convergence" and self.lines[i].split()[3] == "achieved":
                self.run_info["scf_iterations"] = int(self.lines[i].split()[5])
            elif self.lines[i].split()[0] ==  "the" and self.lines[i].split()[1] == "Fermi":
                self.run_info["fermi_energy"] = float(self.lines[i].split()[4])
            elif self.lines[i].split()[0] == "Total" and self.lines[i].split()[1] == "force":
                self.run_info["total_force"] = float(self.lines[i].split()[3])
            elif self.lines[i].split()[0] == "Computing" and self.lines[i].split()[-1] == "pressure":
                self.run_info["total_stress_ry_bohr_3"] = []
                self.run_info["total_stress_kbar"] = []
                self.run_info["pressure"] = float(self.lines[i+2].split()[-1])
                self.run_info["total_stress_ry_bohr_3"].append([float(self.lines[i+3].split()[0]), float(self.lines[i+3].split()[1]), float(self.lines[i+3].split()[2])])
                self.run_info["total_stress_ry_bohr_3"].append([float(self.lines[i+4].split()[0]), float(self.lines[i+4].split()[1]), float(self.lines[i+4].split()[2])])
                self.run_info["total_stress_ry_bohr_3"].append([float(self.lines[i+5].split()[0]), float(self.lines[i+5].split()[1]), float(self.lines[i+5].split()[2])])
                self.run_info["total_stress_kbar"].append([float(self.lines[i+3].split()[3]), float(self.lines[i+3].split()[4]), float(self.lines[i+3].split()[5])])
                self.run_info["total_stress_kbar"].append([float(self.lines[i+4].split()[3]), float(self.lines[i+4].split()[4]), float(self.lines[i+4].split()[5])])
                self.run_info["total_stress_kbar"].append([float(self.lines[i+5].split()[3]), float(self.lines[i+5].split()[4]), float(self.lines[i+5].split()[5])])

        # note: at present len(self.run_info["scf_energies"]) = len(self.run_info["scf_iterations"]) - 1
        # because the total energy of the last step is not printed in format like the previous scf step,
        # and it is printed as the '!    total energy              = ' where there is a "!" in the beginning
        # now we append the final scf step energy to self.run_info["scf_energies"]
        self.run_info["scf_energies"].append(self.run_info["scf_final_energy"])
        # ----------------------------------------------------------------------
        # get the xyz structure from information extracted above:
        self.xyz = base_xyz()
        self.xyz.natom = self.scf_params["nat"]
        begin = self.run_info["site_line_number"] + 1
        # Warning:
        # there are numeric erros when obtaining atom coordinated from qe output
        # in unit of alat and multiplied by alat and bohr. namely the acquired
        # atomic coordinates have numeric errors compared to the input xyz
        # so be cautious when use it.
        bohr = 0.529177208   # 1 Bohr = 0.529177208 Angstrom
        for i in range(self.xyz.natom):
            self.xyz.atoms.append(Atom(
                self.lines[begin+i].split()[1],
                self.scf_params["alat_au"] * bohr * float(self.lines[begin+i].split()[6]),
                self.scf_params["alat_au"] * bohr * float(self.lines[begin+i].split()[7]),
                self.scf_params["alat_au"] * bohr * float(self.lines[begin+i].split()[8])))
        self.xyz.cell = self.scf_params["cell_a_alat"] # now in unit of alat

        for i in range(3):
            for j in range(3):
                self.xyz.cell[i][j] = self.scf_params["cell_a_alat"][i][i] * self.scf_params["alat_au"] * bohr
Example #9
0
 def __init__(self):
     self.xyz = base_xyz()
Example #10
0
    def get_opt_params_and_run_info(self):
        """
        self.run_info[]
            start_time: the task start time
            stop_time: the task stop time
            #scf_energies: all the energies during the scf procedure
            #fermi_energy: fermi energy of the system (if output)

        """
        #self.run_info["scf_energies"] = []

        for i in range(len(self.lines)):
            # if it is an empty line continue to next line
            if len(self.lines[i].split()) == 0:
                continue
            if self.lines[i].split()[0] == "Program" and self.lines[i].split(
            )[1] == "PWSCF" and self.lines[i].split()[3] == "starts":
                self.run_info["start_time"] = self.lines[i].split("\n")[0]
            elif self.lines[i].split()[0] == "This" and self.lines[i].split(
            )[1] == "run" and self.lines[i].split()[3] == "terminated":
                self.run_info["stop_time"] = self.lines[i].split("\n")[0]
            elif self.lines[i].split(
            )[0] == "Parallel" and self.lines[i].split()[-1] == "processors":
                self.run_info["processors"] = int(self.lines[i].split()[-2])
            elif self.lines[i].split()[0] == "MPI" and self.lines[i].split(
            )[-1] == "nodes":
                self.run_info["nodes"] = int(self.lines[i].split()[-2])
            elif self.lines[i].split(
            )[0] == "bravais-lattice" and self.lines[i].split()[1] == "index":
                self.opt_params["alat_au"] = float(self.lines[i +
                                                              1].split()[4])
                self.opt_params["nat"] = int(self.lines[i + 3].split()[4])
                self.opt_params["nelectron"] = float(self.lines[i +
                                                                5].split()[4])
                self.opt_params["n_ks_state"] = int(
                    self.lines[i + 6].split("=")[1])
                self.opt_params["ecutwfc"] = int(
                    float(self.lines[i + 7].split()[3]))
                self.opt_params["ecutrho"] = int(
                    float(self.lines[i + 8].split()[4]))
                self.opt_params["conv_thr"] = float(self.lines[i +
                                                               9].split()[3])
                self.opt_params["mixing_beta"] = float(
                    self.lines[i + 10].split()[3])
                if "nstep" in self.opt_params and self.opt_params[
                        "nstep"] != None:
                    pass
                else:
                    self.opt_params["nstep"] = int(self.lines[i +
                                                              13].split()[2])
            elif self.lines[i].split()[0] == "crystal" and self.lines[i].split(
            )[1] == "axes:" and self.lines[i].split()[-1] == "alat)":
                self.opt_params["cell_a_alat"] = []
                self.opt_params["cell_a_alat"].append([
                    float(self.lines[i + 1].split()[3]),
                    float(self.lines[i + 1].split()[4]),
                    float(self.lines[i + 1].split()[5])
                ])
                self.opt_params["cell_a_alat"].append([
                    float(self.lines[i + 2].split()[3]),
                    float(self.lines[i + 2].split()[4]),
                    float(self.lines[i + 2].split()[5])
                ])
                self.opt_params["cell_a_alat"].append([
                    float(self.lines[i + 3].split()[3]),
                    float(self.lines[i + 3].split()[4]),
                    float(self.lines[i + 3].split()[5])
                ])
            elif self.lines[i].split()[0] == "reciprocal" and self.lines[
                    i].split()[1] == "axes:" and self.lines[i].split(
                    )[-1] == "pi/alat)":  # actually '2 pi/alat'
                self.opt_params["cell_b_2pi_alat"] = []
                self.opt_params["cell_b_2pi_alat"].append([
                    float(self.lines[i + 1].split()[3]),
                    float(self.lines[i + 1].split()[4]),
                    float(self.lines[i + 1].split()[5])
                ])
                self.opt_params["cell_b_2pi_alat"].append([
                    float(self.lines[i + 2].split()[3]),
                    float(self.lines[i + 2].split()[4]),
                    float(self.lines[i + 2].split()[5])
                ])
                self.opt_params["cell_b_2pi_alat"].append([
                    float(self.lines[i + 3].split()[3]),
                    float(self.lines[i + 3].split()[4]),
                    float(self.lines[i + 3].split()[5])
                ])
            elif self.lines[i].split()[0] == "site" and self.lines[i].split(
            )[-1] == "units)" and self.lines[i].split()[-2] == "(alat":
                self.run_info["site_line_number"] = i
            elif self.lines[i].split()[0] == "number" and self.lines[i].split(
            )[2] == 'k':
                if self.lines[i].split()[5] == "(tetrahedron":
                    self.opt_params[
                        "degauss"] = "tetrahedron method: degauss not needed"
                else:
                    self.opt_params["degauss"] = float(
                        self.lines[i].split()[9])
                self.run_info["number-of-k-points"] = int(
                    self.lines[i].split()[4])
            elif self.lines[i].split(
            )[0] == "Estimated" and self.lines[i].split()[1] == "max":
                self.run_info["ram_per_process"] = self.lines[i].split(
                )[7] + " " + self.lines[i].split()[8]
                self.run_info["total_ram"] = self.lines[
                    i + 2].split()[5] + " " + self.lines[i + 2].split()[6]

        # ----------------------------------------------------------------------
        # get the input xyz structure from information extracted above:
        self.xyz = base_xyz()
        self.xyz.natom = self.opt_params["nat"]
        begin = self.run_info["site_line_number"] + 1
        # Warning:
        # there are numeric erros when obtaining atom coordinated from qe output
        # in unit of alat and multiplied by alat and bohr. namely the acquired
        # atomic coordinates have numeric errors compared to the input xyz
        # so be cautious when use it.
        bohr = 0.529177208  # 1 Bohr = 0.529177208 Angstrom
        for i in range(self.xyz.natom):
            self.xyz.atoms.append(
                Atom(
                    self.lines[begin + i].split()[1],
                    self.opt_params["alat_au"] * bohr *
                    float(self.lines[begin + i].split()[6]),
                    self.opt_params["alat_au"] * bohr *
                    float(self.lines[begin + i].split()[7]),
                    self.opt_params["alat_au"] * bohr *
                    float(self.lines[begin + i].split()[8])))
        self.xyz.cell = self.opt_params["cell_a_alat"]  # now in unit of alat

        for i in range(3):
            for j in range(3):
                self.xyz.cell[i][j] = self.opt_params["cell_a_alat"][i][
                    j] * self.opt_params["alat_au"] * bohr
        # now self.xyz.cell are in unit of Angstrom
        # ----------------------------------------------------------------------

        # get information output each ion step
        self._get_info_for_each_ions_step()