.. sec_vaspio VASP input-output ################# The following VASP files are used by PLOtools: * PROJCAR, LOCPROJ: raw projectors generated by VASP-PLO interface (VASP version >= 5.4.1) * EIGENVAL: Kohn-Sham eigenvalues as well as `k`-points with weights and Fermi weights * IBZKPT: `k`-point data (:math:`\Gamma`) * POSCAR: crystal structure data Starting from version 5.4.1 VASP now supports an official output of various types of projectors that are requested in INCAR by specifying a set of sites, orbitals and types of projectors. The calculated projectors are output into files **PROJCAR** and **LOCPROJ**. The difference between these two files is that **LOCPROJ** contains raw matrices without any reference to sites/orbitals, while **PROJCAR** is more detailed on that. In particular, the information that can be obtained for each projector from **PROJCAR** is the following: * site (and species) index * for each `k`-point and band: a set of complex numbers for labeled orbitals At the same time, **LOCPROJ** contains the total number of projectors (as well as the number of `k`-points, bands, and spin channels) in the first line, which can be used to allocate the arrays before parsing. To enhance the performance of the parser, it is implemented in plain C. The idea is that the python part of the parser first reads the first line of **LOCPROJ** and then calls the C-routine with necessary parameters to parse **PROJCAR**. The projectors are read in and stored in class `Plocar`. Two major data structures are stored: * complex array `plo = nd.array((nproj, nspin, nk, nband))` * list of projector descriptors `proj_params` containing the information on the character of projectors When a ProjectorShell is initialized it copies a subset of projectors corresponding to selected sites/orbitals. This can be done by looping all shell sites/orbitals and searching for the corresponding projector using the descriptor list `proj_params`.