From 98c947191928dd83de2fee54971510d565f33995 Mon Sep 17 00:00:00 2001 From: Atsushi Togo Date: Fri, 31 Jan 2014 18:40:19 +0900 Subject: [PATCH] Separate writing supercell POSCARs and disp_fc3.yaml --- anharmonic/file_IO.py | 83 +++++--------- anharmonic/phonon3/__init__.py | 99 ++++++++++------ anharmonic/settings.py | 43 ------- scripts/phono3py | 200 ++++++++++++--------------------- 4 files changed, 161 insertions(+), 264 deletions(-) diff --git a/anharmonic/file_IO.py b/anharmonic/file_IO.py index 8299bbb9..d0d8e9f5 100644 --- a/anharmonic/file_IO.py +++ b/anharmonic/file_IO.py @@ -12,13 +12,7 @@ from phonopy.file_IO import write_FORCE_SETS_vasp, read_force_constant_vasprun_x # ########### -def write_supercells_with_displacements(supercell, - dataset, - create_POSCARs=True, - filename='disp_fc3.yaml'): - lattice = supercell.get_cell() - - # YAML +def write_disp_fc3_yaml(supercell, dataset, filename='disp_fc3.yaml'): w = open(filename, 'w') w.write("natom: %d\n" % dataset['natom']) @@ -47,17 +41,6 @@ def write_supercells_with_displacements(supercell, count2 = num_first + 1 for disp1 in dataset['first_atoms']: disp_cart1 = disp1['displacement'] - if create_POSCARs: - positions = supercell.get_positions() - positions[disp1['number']] += disp_cart1 - atoms = Atoms(numbers=supercell.get_atomic_numbers(), - masses=supercell.get_masses(), - positions=positions, - cell=lattice, - pbc=True) - vasp.write_vasp('POSCAR-%05d' % count1, atoms, direct=True) - - # YAML w.write("- number: %5d\n" % (disp1['number'] + 1)) w.write(" displacement:\n") w.write(" [%20.16f,%20.16f,%20.16f ] # %05d\n" % @@ -65,45 +48,29 @@ def write_supercells_with_displacements(supercell, w.write(" second_atoms:\n") count1 += 1 - atom_indices = np.unique( - [disp2['number'] for disp2 in disp1['second_atoms']]) - - for atom2 in atom_indices: - included = None - distance = 0.0 - displacements = [] - for disp2 in disp1['second_atoms']: - if disp2['number'] == atom2: - displacements.append(disp2['displacement']) - if 'included' in disp2: - included = disp2['included'] - pair_distance = disp2['pair_distance'] - - w.write(" - number: %5d\n" % (atom2 + 1)) - w.write(" distance: %f\n" % pair_distance) - if included is not None: - if included: - w.write(" included: %s\n" % "true") - else: - w.write(" included: %s\n" % "false") - - w.write(" displacements:\n") - for disp_cart2 in displacements: - if create_POSCARs and (included or included is None): - positions = supercell.get_positions() - positions[disp1['number']] += disp_cart1 - positions[atom2] += disp_cart2 - atoms = Atoms(numbers=supercell.get_atomic_numbers(), - masses=supercell.get_masses(), - positions=positions, - cell=lattice, - pbc=True) - vasp.write_vasp('POSCAR-%05d' % count2, atoms, direct=True) - - # YAML - w.write(" - [%20.16f,%20.16f,%20.16f ] # %05d\n" % - (disp_cart2[0], disp_cart2[1], disp_cart2[2], count2)) - count2 += 1 + included = None + distance = 0.0 + atom2 = -1 + displacements = [] + for disp2 in disp1['second_atoms']: + if atom2 != disp2['number']: + atom2 = disp2['number'] + if 'included' in disp2: + included = disp2['included'] + pair_distance = disp2['pair_distance'] + w.write(" - number: %5d\n" % (atom2 + 1)) + w.write(" distance: %f\n" % pair_distance) + if included is not None: + if included: + w.write(" included: %s\n" % "true") + else: + w.write(" included: %s\n" % "false") + w.write(" displacements:\n") + + disp_cart2 = disp2['displacement'] + w.write(" - [%20.16f,%20.16f,%20.16f ] # %05d\n" % + (disp_cart2[0], disp_cart2[1], disp_cart2[2], count2)) + count2 += 1 w.write("lattice:\n") for axis in supercell.get_cell(): @@ -125,7 +92,7 @@ def write_supercells_with_displacements_from_direction_dataset( cutoff_distance=None, filename='disp_fc3.yaml'): """ - This is the disp_fc3.yaml write previously used (version < 0.8.2). + This is the disp_fc3.yaml writer previously used (version < 0.8.2). """ # YAML w = open(filename, 'w') diff --git a/anharmonic/phonon3/__init__.py b/anharmonic/phonon3/__init__.py index 1fdfc44d..95a9eee1 100644 --- a/anharmonic/phonon3/__init__.py +++ b/anharmonic/phonon3/__init__.py @@ -1,6 +1,8 @@ import numpy as np from phonopy.structure.symmetry import Symmetry from phonopy.structure.cells import get_supercell, get_primitive +from phonopy.structure.atoms import Atoms +from phonopy.units import VaspToTHz from anharmonic.phonon3.imag_self_energy import get_imag_self_energy, \ write_imag_self_energy, get_linewidth, write_linewidth from anharmonic.phonon3.frequency_shift import FrequencyShift @@ -16,7 +18,6 @@ from phonopy.harmonic.force_constants import get_fc2, set_permutation_symmetry, set_translational_invariance from anharmonic.phonon3.fc3 import get_fc3, set_permutation_symmetry_fc3, \ set_translational_invariance_fc3, cutoff_fc3_by_zero -from phonopy.units import VaspToTHz class Phono3py: def __init__(self, @@ -67,6 +68,10 @@ class Phono3py: self._search_primitive_symmetry() self._search_phonon_supercell_symmetry() + # Displacements and supercells + self._supercells_with_displacements = None + self._displacement_dataset = None + # Thermal conductivity self._thermal_conductivity = None # conductivity_RTA object @@ -122,6 +127,22 @@ class Phono3py: frequency_scale_factor=frequency_scale_factor) self._interaction.set_nac_q_direction(nac_q_direction=nac_q_direction) + def generate_displacements(self, + distance=0.01, + cutoff_pair_distance=None, + is_plusminus='auto', + is_diagonal=True): + direction_dataset = get_third_order_displacements( + self._supercell, + self._symmetry, + is_plusminus=is_plusminus, + is_diagonal=is_diagonal) + self._displacement_dataset = direction_to_displacement( + direction_dataset, + distance, + self._supercell, + cutoff_distance=cutoff_pair_distance) + def produce_fc2(self, forces_fc2, disp_dataset, @@ -200,22 +221,6 @@ class Phono3py: if self._fc3 is not None: set_translational_invariance_fc3(self._fc3) - def generate_displacements(self, - distance=0.01, - cutoff_pair_distance=None, - is_plusminus='auto', - is_diagonal=True): - direction_dataset = get_third_order_displacements( - self._supercell, - self._symmetry, - is_plusminus=is_plusminus, - is_diagonal=is_diagonal) - self._displacement_dataset = direction_to_displacement( - direction_dataset, - distance, - self._supercell, - cutoff_distance=cutoff_pair_distance) - def get_interaction_strength(self): return self._interaction @@ -261,6 +266,11 @@ class Phono3py: def get_displacement_dataset(self): return self._displacement_dataset + + def get_supercells_with_displacements(self): + if self._supercells_with_displacements is None: + self._build_supercells_with_displacements() + return self._supercells_with_displacements def run_imag_self_energy(self, grid_points, @@ -408,21 +418,6 @@ class Phono3py: self._supercell_matrix, self._symprec) - def _build_supercells_with_displacements(self): - supercells = [] - for disp in self._displacements: - positions = self._supercell.get_positions() - positions[disp[0]] += disp[1:4] - supercells.append(Atoms( - numbers=self._supercell.get_atomic_numbers(), - masses=self._supercell.get_masses(), - magmoms=self._supercell.get_magnetic_moments(), - positions=positions, - cell=self._supercell.get_cell(), - pbc=True)) - - self._supercells_with_displacements = supercells - def _build_primitive_cell(self): """ primitive_matrix: @@ -458,6 +453,46 @@ class Phono3py: self._phonon_supercell_matrix, self._primitive_matrix) + def _build_supercells_with_displacements(self): + supercells = [] + magmoms = self._supercell.get_magnetic_moments() + masses = self._supercell.get_masses() + numbers = self._supercell.get_atomic_numbers() + lattice = self._supercell.get_cell() + + for disp1 in self._displacement_dataset['first_atoms']: + disp_cart1 = disp1['displacement'] + positions = self._supercell.get_positions() + positions[disp1['number']] += disp_cart1 + supercells.append( + Atoms(numbers=numbers, + masses=masses, + magmoms=magmoms, + positions=positions, + cell=lattice, + pbc=True)) + + for disp1 in self._displacement_dataset['first_atoms']: + for disp2 in disp1['second_atoms']: + if 'included' in disp2: + included = disp2['included'] + else: + included = True + if included: + positions = self._supercell.get_positions() + positions[disp1['number']] += disp_cart1 + positions[disp2['number']] += disp2['displacement'] + supercells.append(Atoms(numbers=numbers, + masses=masses, + magmoms=magmoms, + positions=positions, + cell=lattice, + pbc=True)) + else: + supercells.append(None) + + self._supercells_with_displacements = supercells + def _get_primitive_cell(self, supercell, supercell_matrix, primitive_matrix): inv_supercell_matrix = np.linalg.inv(supercell_matrix) if primitive_matrix is None: diff --git a/anharmonic/settings.py b/anharmonic/settings.py index 6d455622..838d6334 100644 --- a/anharmonic/settings.py +++ b/anharmonic/settings.py @@ -5,7 +5,6 @@ class Phono3pySettings(Settings): def __init__(self): Settings.__init__(self) - self._band_indices = None self._coarse_mesh_shifts = None self._cutoff_fc3_distance = None self._cutoff_pair_distance = None @@ -19,7 +18,6 @@ class Phono3pySettings(Settings): self._mass_variances = None self._max_freepath = None self._mesh_divisors = None - self._multiple_sigmas = None self._no_kappa_stars = False self._read_amplitude = False self._read_gamma = False @@ -28,12 +26,6 @@ class Phono3pySettings(Settings): self._write_amplitude = False self._write_gamma = False - def set_band_indices(self, band_indices): - self._band_indices = band_indices - - def get_band_indices(self): - return self._band_indices - def set_coarse_mesh_shifts(self, coarse_mesh_shifts): self._coarse_mesh_shifts = coarse_mesh_shifts @@ -112,12 +104,6 @@ class Phono3pySettings(Settings): def get_mesh_divisors(self): return self._mesh_divisors - def set_multiple_sigmas(self, multiple_sigmas): - self._multiple_sigmas = multiple_sigmas - - def get_multiple_sigmas(self): - return self._multiple_sigmas - def set_no_kappa_stars(self, no_kappa_stars): self._no_kappa_stars = no_kappa_stars @@ -177,10 +163,6 @@ class Phono3pyConfParser(ConfParser): self._confs['dim_extra'] = \ self._options.supercell_dimension_extra - if opt.dest == 'band_indices': - if self._options.band_indices is not None: - self._confs['band_indices'] = self._options.band_indices - if opt.dest == 'cutoff_fc3_distance': if self._options.cutoff_fc3_distance is not None: self._confs['cutoff_fc3_distance'] = \ @@ -233,10 +215,6 @@ class Phono3pyConfParser(ConfParser): if self._options.mesh_divisors is not None: self._confs['mesh_divisors'] = self._options.mesh_divisors - if opt.dest == 'multiple_sigmas': - if self._options.multiple_sigmas is not None: - self._confs['multiple_sigmas'] = self._options.multiple_sigmas - if opt.dest == 'no_kappa_stars': if self._options.no_kappa_stars: self._confs['no_kappa_stars'] = '.true.' @@ -283,12 +261,6 @@ class Phono3pyConfParser(ConfParser): else: self.set_parameter('dim_extra', matrix) - if conf_key == 'band_indices': - vals = [] - for sum_set in confs['band_indices'].split(','): - vals.append([int(x) - 1 for x in sum_set.split()]) - self.set_parameter('band_indices', vals) - if conf_key == 'cutoff_fc3_distance': self.set_parameter('cutoff_fc3_distance', float(confs['cutoff_fc3_distance'])) @@ -353,13 +325,6 @@ class Phono3pyConfParser(ConfParser): else: self.setting_error("Mesh divisors are incorrectly set.") - if conf_key == 'multiple_sigmas': - vals = [fracval(x) for x in confs['multiple_sigmas'].split()] - if len(vals) < 1: - self.setting_error("Mutiple sigmas are incorrectly set.") - else: - self.set_parameter('multiple_sigmas', vals) - if conf_key == 'no_kappa_stars': if confs['no_kappa_stars'] == '.true.': self.set_parameter('no_kappa_stars', True) @@ -396,10 +361,6 @@ class Phono3pyConfParser(ConfParser): if params.has_key('dim_extra'): self._settings.set_phonon_supercell_matrix(params['dim_extra']) - # Sets of band indices that are summed - if params.has_key('band_indices'): - self._settings.set_band_indices(params['band_indices']) - # Cutoff distance of third-order force constants. Elements where any # pair of atoms has larger distance than cut-off distance are set zero. if params.has_key('cutoff_fc3_distance'): @@ -454,10 +415,6 @@ class Phono3pyConfParser(ConfParser): self._settings.set_coarse_mesh_shifts( params['mesh_divisors'][3:]) - # Multiple sigmas - if params.has_key('multiple_sigmas'): - self._settings.set_multiple_sigmas(params['multiple_sigmas']) - # Read phonon-phonon interaction amplitudes from hdf5 if params.has_key('read_amplitude'): self._settings.set_read_amplitude(params['read_amplitude']) diff --git a/scripts/phono3py b/scripts/phono3py index c0af4ddf..6cde8c8f 100755 --- a/scripts/phono3py +++ b/scripts/phono3py @@ -39,7 +39,7 @@ import sys import numpy as np from optparse import OptionParser -from phonopy.interface.vasp import read_vasp +from phonopy.interface.vasp import read_vasp, write_vasp from phonopy.structure.cells import print_cell from phonopy.harmonic.force_constants import show_drift_force_constants from phonopy.file_IO import parse_BORN @@ -49,7 +49,7 @@ from anharmonic.file_IO import parse_disp_fc2_yaml, parse_disp_fc3_yaml, \ parse_FORCES_FC2, parse_FORCES_FC3, write_FORCES_FC3, \ write_fc3_to_hdf5, write_fc2_to_hdf5, read_fc3_from_hdf5, \ read_fc2_from_hdf5, write_ir_grid_points, write_grid_address, \ - write_supercells_with_displacements + write_disp_fc3_yaml from anharmonic.phonon3.triplets import get_coarse_ir_grid_points from anharmonic.settings import Phono3pyConfParser from anharmonic.phonon3 import Phono3py, Phono3pyJointDos, IsotopeScattering, \ @@ -141,7 +141,6 @@ parser.set_defaults(band_indices=None, mass_variances=None, mesh_numbers=None, mesh_divisors=None, - multiple_sigmas=None, no_kappa_stars=False, q_direction=None, primitive_axis=None, @@ -169,24 +168,18 @@ parser.set_defaults(band_indices=None, write_grid_points=False) parser.add_option("--amplitude", dest="displacement_distance", type="float", help="Distance of displacements") -parser.add_option("--bi", "--band_indices", dest="band_indices", - type="string", +parser.add_option("--bi", "--band_indices", dest="band_indices", type="string", help="Band indices where life time is calculated") -parser.add_option("--band", dest="band_paths", - action="store", type="string", +parser.add_option("--band", dest="band_paths", action="store", type="string", help="Band structure paths calculated for Gruneisen parameter") -parser.add_option("--band_points", dest="band_points", - type="int", +parser.add_option("--band_points", dest="band_points", type="int", help="Number of points calculated on a band segment in the band structure Gruneisen parameter calculation") -parser.add_option("--br", "--bterta", dest="is_bterta", - action="store_true", +parser.add_option("--br", "--bterta", dest="is_bterta", action="store_true", help="Calculate thermal conductivity in BTE-RTA") -parser.add_option("-c", "--cell", dest="cell_poscar", - action="store", type="string", - help="Read unit cell", metavar="FILE") +parser.add_option("-c", "--cell", dest="cell_poscar", action="store", + type="string", help="Read unit cell", metavar="FILE") parser.add_option("--cutfc3", "--cutoff_fc3_distance", - dest="cutoff_fc3_distance", - type="float", + dest="cutoff_fc3_distance", type="float", help="Cutoff distance of third-order force constants. Elements where any pair of atoms has larger distance than cut-off distance are set zero.") parser.add_option("--cutfreq", "--cutoff_frequency", dest="cutoff_frequency", type="float", @@ -195,47 +188,29 @@ parser.add_option("--cutlt", "--cutoff_lifetime", dest="cutoff_lifetime", type="float", help="Cutoff lifetime in second used for thermal conductivity calculation") parser.add_option("--cutpair", "--cutoff_pair_distance", - dest="cutoff_pair_distance", - type="float", + dest="cutoff_pair_distance", type="float", help="Cutoff distance between pairs of displaced atoms used for supercell creation with displacements and making third-order force constants") -parser.add_option("-d", "--disp", dest="is_displacement", - action="store_true", +parser.add_option("-d", "--disp", dest="is_displacement", action="store_true", help="As first stage, get least displacements") parser.add_option("--decay", dest="is_decay_channel", action="store_true", help="Calculate decay channels") -parser.add_option("--dim", - dest="supercell_dimension", - type="string", +parser.add_option("--dim", dest="supercell_dimension", type="string", help="Supercell dimension") -parser.add_option("--dim2", - dest="supercell_dimension_extra", - type="string", - help="Supercell dimension for extra fc2") -parser.add_option("--cf3", "--create_f3", - dest="forces_third_mode", - action="store_true", - help="Create FORCES_THIRD") -parser.add_option("--cdfc2", "--create_delta_fc2", - dest="delta_fc2_sets_mode", - action="store_true", - help="Create DELTA_FC2_SETS") -parser.add_option("--dfc2", "--delta_fc2", - dest="read_delta_fc2", - action="store_true", - help="Read DELTA_FC2_SETS") +parser.add_option("--dim2", dest="supercell_dimension_extra", + type="string", help="Supercell dimension for extra fc2") +parser.add_option("--cf3", "--create_f3", dest="forces_third_mode", + action="store_true", help="Create FORCES_THIRD") +parser.add_option("--cdfc2", "--create_delta_fc2", dest="delta_fc2_sets_mode", + action="store_true", help="Create DELTA_FC2_SETS") +parser.add_option("--dfc2", "--delta_fc2", dest="read_delta_fc2", + action="store_true", help="Read DELTA_FC2_SETS") parser.add_option("--factor", dest="factor", type="float", help="Conversion factor to favorite frequency unit") -parser.add_option("--fc2", - dest="read_fc2", - action="store_true", +parser.add_option("--fc2", dest="read_fc2", action="store_true", help="Read second order force constants") -parser.add_option("--fc2_extra", - dest="read_fc2_extra", - action="store_true", +parser.add_option("--fc2_extra", dest="read_fc2_extra", action="store_true", help="Read extra second order force constants") -parser.add_option("--fc3", - dest="read_fc3", - action="store_true", +parser.add_option("--fc3", dest="read_fc3", action="store_true", help="Read third order force constants") parser.add_option("--freepath", dest="max_freepath", type="float", help="Maximum mean free path of phonon in meter") @@ -245,98 +220,66 @@ parser.add_option("--freq_pitch", dest="frequency_pitch", type="float", help="Pitch in frequency for spectrum") parser.add_option("--gamma_option", dest="gamma_option", type="int", help="Option for the test of imaginary part of self energy") -parser.add_option("--gp", "--grid_points", - dest="grid_points", type="string", +parser.add_option("--gp", "--grid_points", dest="grid_points", type="string", help="Fixed grid points where damping functions are calculated ") -parser.add_option("--gruneisen", dest="is_gruneisen", - action="store_true", +parser.add_option("--gruneisen", dest="is_gruneisen", action="store_true", help="Calculate phonon Gruneisen parameter") parser.add_option("--gv_delta_q", dest="gv_delta_q", type="float", help="Delta-q distance used for group velocity calculation") -parser.add_option("-i", dest="input_filename", - type="string", +parser.add_option("-i", dest="input_filename", type="string", help="Input filename extension") -parser.add_option("--io", dest="input_output_filename", - type="string", +parser.add_option("--io", dest="input_output_filename", type="string", help="Input and output filename extension") -parser.add_option("--ion_clamped", dest="ion_clamped", - action="store_true", +parser.add_option("--ion_clamped", dest="ion_clamped", action="store_true", help="Atoms are clamped under applied strain in Gruneisen parameter calculation") -parser.add_option("--isotope", dest="is_isotope", - action="store_true", +parser.add_option("--isotope", dest="is_isotope", action="store_true", help="Isotope scattering lifetime") -parser.add_option("--jdos", - dest="is_joint_dos", - action="store_true", +parser.add_option("--jdos", dest="is_joint_dos", action="store_true", help="Calculate joint density of states") -parser.add_option("--lw", "--linewidth", - dest="is_linewidth", - action="store_true", - help="Calculate linewidths") -parser.add_option("--fst", "--frequency_shift", - dest="is_frequency_shift", - action="store_true", - help="Calculate frequency shifts") -parser.add_option("--md", "--mesh_divisors", - dest="mesh_divisors", - type="string", +parser.add_option("--lw", "--linewidth", dest="is_linewidth", + action="store_true", help="Calculate linewidths") +parser.add_option("--fst", "--frequency_shift", dest="is_frequency_shift", + action="store_true", help="Calculate frequency shifts") +parser.add_option("--md", "--mesh_divisors", dest="mesh_divisors", type="string", help="Divisors for mesh numbers") -parser.add_option("--mesh", - dest="mesh_numbers", - type="string", +parser.add_option("--mesh", dest="mesh_numbers", type="string", help="Mesh numbers") -parser.add_option("--multiple_sigmas", dest="multiple_sigmas", - type="string", - help="Multiple sigmas for smearing width used for limited functions") +parser.add_option("--sigma", dest="sigma", type="string", + help="A sigma value or multiple sigma values (separated by space) for smearing width used for limited functions") parser.add_option("--mv", "--mass_variances", dest="mass_variances", type="string", help="Mass variance parameters for isotope scattering") -parser.add_option("--nac", dest="is_nac", - action="store_true", +parser.add_option("--nac", dest="is_nac", action="store_true", help="Non-analytical term correction") -parser.add_option("--nodiag", dest="is_nodiag", - action="store_true", +parser.add_option("--nodiag", dest="is_nodiag", action="store_true", help="Set displacements parallel to axes") parser.add_option("--noks", "--no_kappa_stars", dest="no_kappa_stars", action="store_true", help="Deactivate summation of partial kappa at q-stars"), -parser.add_option("--nosym", dest="is_nosym", - action="store_true", +parser.add_option("--nosym", dest="is_nosym", action="store_true", help="No symmetrization of triplets") -parser.add_option("-o", dest="output_filename", - type="string", +parser.add_option("-o", dest="output_filename", type="string", help="Output filename extension") parser.add_option("--pa", "--primitive_axis", dest="primitive_axis", action="store", type="string", help="Same as PRIMITIVE_AXIS tags") -parser.add_option("--pm", dest="is_plusminus_displacements", - action="store_true", +parser.add_option("--pm", dest="is_plusminus_displacements", action="store_true", help="Set plus minus displacements") parser.add_option("--qpoints", dest="qpoints", type="string", help="Calculate at specified q-points") -parser.add_option("--q_direction", - dest="q_direction", - type="string", +parser.add_option("--q_direction", dest="q_direction", type="string", help="q-vector direction at q->0 for non-analytical term correction") -parser.add_option("-q", "--quiet", dest="quiet", - action="store_true", +parser.add_option("-q", "--quiet", dest="quiet", action="store_true", help="Print out smallest information") -parser.add_option("--read_amplitude", dest="read_amplitude", - action="store_true", +parser.add_option("--read_amplitude", dest="read_amplitude", action="store_true", help="Read phonon-phonon interaction amplitudes") -parser.add_option("--read_gamma", dest="read_gamma", - action="store_true", +parser.add_option("--read_gamma", dest="read_gamma", action="store_true", help="Read Gammas from files") -parser.add_option("--sigma", dest="sigma", type="float", - help="Smearing width for DOS") -parser.add_option("--sym_fc2", dest="is_symmetrize_fc2", - action="store_true", +parser.add_option("--sym_fc2", dest="is_symmetrize_fc2", action="store_true", help="Symmetrize fc2 by index exchange") -parser.add_option("--sym_fc3r", dest="is_symmetrize_fc3_r", - action="store_true", +parser.add_option("--sym_fc3r", dest="is_symmetrize_fc3_r", action="store_true", help="Symmetrize fc3 in real space by index exchange") -parser.add_option("--sym_fc3q", dest="is_symmetrize_fc3_q", - action="store_true", +parser.add_option("--sym_fc3q", dest="is_symmetrize_fc3_q", action="store_true", help="Symmetrize fc3 in reciprocal space by index exchange") parser.add_option("--tmax", dest="tmax", type="string", help="Maximum calculated temperature") @@ -349,28 +292,21 @@ parser.add_option("--tsym", dest="is_translational_symmetry", help="Impose translational invariance condition") parser.add_option("--tolerance", dest="symprec", type="float", help="Symmetry tolerance to search") -parser.add_option("-v", "--verbose", dest="verbose", - action="store_true", +parser.add_option("-v", "--verbose", dest="verbose", action="store_true", help="Detailed run-time information is displayed") -parser.add_option("--loglevel", dest="log_level", type="int", - help="Log level") +parser.add_option("--loglevel", dest="log_level", type="int", help="Log level") parser.add_option("--thm", "--tetrahedron_method", dest="is_tetrahedron_method", - action="store_true", - help="Use tetrahedron method") -parser.add_option("--ts", dest="temperatures", - type="string", help="Temperatures for damping functions") -parser.add_option("--uplo", - dest="uplo", - type="string", - help="Lapack zheev UPLO") + action="store_true", help="Use tetrahedron method") +parser.add_option("--ts", dest="temperatures", type="string", + help="Temperatures for damping functions") +parser.add_option("--uplo", dest="uplo", type="string", help="Lapack zheev UPLO") parser.add_option("--wgp", "--write_grid_points", dest="write_grid_points", action="store_true", help="Write grid address of irreducible grid points for specified mesh numbers to ir_grid_address.yaml") parser.add_option("--write_amplitude", dest="write_amplitude", action="store_true", help="Write phonon-phonon interaction amplitudes") -parser.add_option("--write_gamma", dest="write_gamma", - action="store_true", +parser.add_option("--write_gamma", dest="write_gamma", action="store_true", help="Write gamma") (options, args) = parser.parse_args() option_list = parser.option_list @@ -462,10 +398,12 @@ if options.is_displacement: else: filename = 'disp_fc3.' + output_filename + '.yaml' - num_disps, num_disp_files = write_supercells_with_displacements( - supercell, - dds, - filename=filename) + num_disps, num_disp_files = write_disp_fc3_yaml(supercell, + dds, + filename=filename) + for i, dcell in enumerate(phono3py.get_supercells_with_displacements()): + if dcell is not None: + write_vasp('POSCAR-%05d' % (i + 1), dcell, direct=True) if log_level: print "Total number of displacements:", num_disps @@ -485,13 +423,13 @@ mesh_divs = settings.get_mesh_divisors() grid_points = settings.get_grid_points() band_indices = settings.get_band_indices() cutoff_frequency = settings.get_cutoff_frequency() -if settings.get_multiple_sigmas() is None: - if settings.get_sigma(): - sigmas = [settings.get_sigma()] - else: - sigmas = [] +sigma = settings.get_sigma() +if sigma is None: + sigmas = [] +elif isinstance(sigma, float): + sigmas = [sigma] else: - sigmas = settings.get_multiple_sigmas() + sigmas = sigma if settings.get_is_tetrahedron_method(): sigmas = [None] + sigmas if settings.get_temperatures() is None: