def get_string(self, direct=True, vasp4_compatible=False,
                   significant_figures=6):
        """
        Returns a string to be written as a POSCAR file. By default, site
        symbols are written, which means compatibility is for vasp >= 5.

        Args:
            direct (bool): Whether coordinates are output in direct or
                cartesian. Defaults to True.
            vasp4_compatible (bool): Set to True to omit site symbols on 6th
                line to maintain backward vasp 4.x compatibility. Defaults
                to False.
            significant_figures (int): No. of significant figures to
                output all quantities. Defaults to 6. Note that positions are
                output in fixed point, while velocities are output in
                scientific format.

        Returns:
            String representation of POSCAR.
        """

        # This corrects for VASP really annoying bug of crashing on lattices
        # which have triple product < 0. We will just invert the lattice
        # vectors.
        latt = self.structure.lattice
        if np.linalg.det(latt.matrix) < 0:
            latt = Lattice(-latt.matrix)

        format_str = "{{:.{0}f}}".format(significant_figures)
        lines = [self.comment, "1.0"]
        for v in latt.matrix:
            lines.append(" ".join([format_str.format(c) for c in v]))

        if self.true_names and not vasp4_compatible:
            lines.append(" ".join(self.site_symbols))
        lines.append(" ".join([str(x) for x in self.natoms]))
        if self.selective_dynamics:
            lines.append("Selective dynamics")
        lines.append("direct" if direct else "cartesian")

        selective_dynamics = self.selective_dynamics
        for (i, site) in enumerate(self.structure):
            coords = site.frac_coords if direct else site.coords
            line = " ".join([format_str.format(c) for c in coords])
            if selective_dynamics is not None:
                sd = ["T" if j else "F" for j in selective_dynamics[i]]
                line += " %s %s %s" % (sd[0], sd[1], sd[2])
            line += " " + site.species_string
            lines.append(line)

        if self.velocities:
            try:
                lines.append("")
                for v in self.velocities:
                    lines.append(" ".join([format_str.format(i) for i in v]))
            except:
                warnings.warn("Velocities are missing or corrupted.")

        if self.predictor_corrector:
            lines.append("")
            if self.predictor_corrector_preamble:
                lines.append(self.predictor_corrector_preamble)
                pred = np.array(self.predictor_corrector)
                for col in range(3):
                    for z in pred[:,col]:
                        lines.append(" ".join([format_str.format(i) for i in z]))
            else:
                warnings.warn(
                    "Preamble information missing or corrupt. " 
                    "Writing Poscar with no predictor corrector data.")

        return "\n".join(lines) + "\n"
def get_string ( self , direct = True , vasp4_compatible = False , significant_figures = 6 ) : latt = self . structure . lattice if np . linalg . det ( latt . matrix ) < 0 : latt = Lattice ( - latt . matrix ) format_str = "{{:.{0}f}}" . format ( significant_figures ) lines = [ self . comment , "1.0" ] for v in latt . matrix : lines . append ( " " . join ( [ format_str . format ( c ) for c in v ] ) ) if self . true_names and not vasp4_compatible : lines . append ( " " . join ( self . site_symbols ) ) lines . append ( " " . join ( [ str ( x ) for x in self . natoms ] ) ) if self . selective_dynamics : lines . append ( "Selective dynamics" ) lines . append ( "direct" if direct else "cartesian" ) selective_dynamics = self . selective_dynamics for ( i , site ) in enumerate ( self . structure ) : coords = site . frac_coords if direct else site . coords line = " " . join ( [ format_str . format ( c ) for c in coords ] ) if selective_dynamics is not None : sd = [ "T" if j else "F" for j in selective_dynamics [ i ] ] line += " %s %s %s" % ( sd [ 0 ] , sd [ 1 ] , sd [ 2 ] ) line += " " + site . species_string lines . append ( line ) if self . velocities : try : lines . append ( "" ) for v in self . velocities : lines . append ( " " . join ( [ format_str . format ( i ) for i in v ] ) ) except : warnings . warn ( "Velocities are missing or corrupted." ) if self . predictor_corrector : lines . append ( "" ) if self . predictor_corrector_preamble : lines . append ( self . predictor_corrector_preamble ) pred = np . array ( self . predictor_corrector ) for col in range ( 3 ) : for z in pred [ : , col ] : lines . append ( " " . join ( [ format_str . format ( i ) for i in z ] ) ) else : warnings . warn ( "Preamble information missing or corrupt. " "Writing Poscar with no predictor corrector data." ) return "\n" . join ( lines ) + "\n"
Returns a string to be written as a POSCAR file. By default, site
        symbols are written, which means compatibility is for vasp >= 5.

        Args:
            direct (bool): Whether coordinates are output in direct or
                cartesian. Defaults to True.
            vasp4_compatible (bool): Set to True to omit site symbols on 6th
                line to maintain backward vasp 4.x compatibility. Defaults
                to False.
            significant_figures (int): No. of significant figures to
                output all quantities. Defaults to 6. Note that positions are
                output in fixed point, while velocities are output in
                scientific format.

        Returns:
            String representation of POSCAR.