mirror of https://github.com/phonopy/phonopy.git
Minor changes of command options and fixes of ofrce fits
This commit is contained in:
parent
a396f294fe
commit
9ce31451ca
|
@ -163,7 +163,7 @@ class Phono3py:
|
|||
forces_fc2,
|
||||
displacement_dataset=None,
|
||||
is_permutation_symmetry=False,
|
||||
is_translational_symmetry=False):
|
||||
translational_symmetry_type=0):
|
||||
if displacement_dataset is None:
|
||||
disp_dataset = self._displacement_dataset
|
||||
else:
|
||||
|
@ -176,14 +176,16 @@ class Phono3py:
|
|||
disp_dataset)
|
||||
if is_permutation_symmetry:
|
||||
set_permutation_symmetry(self._fc2)
|
||||
if is_translational_symmetry:
|
||||
set_translational_invariance(self._fc2)
|
||||
if translational_symmetry_type:
|
||||
set_translational_invariance(
|
||||
self._fc2,
|
||||
translational_symmetry_type=translational_symmetry_type)
|
||||
|
||||
def produce_fc3(self,
|
||||
forces_fc3,
|
||||
displacement_dataset=None,
|
||||
cutoff_distance=None, # set fc3 zero
|
||||
is_translational_symmetry=False,
|
||||
translational_symmetry_type=0,
|
||||
is_permutation_symmetry=False):
|
||||
if displacement_dataset is None:
|
||||
disp_dataset = self._displacement_dataset
|
||||
|
@ -195,8 +197,10 @@ class Phono3py:
|
|||
fc2 = get_fc2(self._supercell, self._symmetry, disp_dataset)
|
||||
if is_permutation_symmetry:
|
||||
set_permutation_symmetry(fc2)
|
||||
if is_translational_symmetry:
|
||||
set_translational_invariance(fc2)
|
||||
if translational_symmetry_type:
|
||||
set_translational_invariance(
|
||||
fc2,
|
||||
translational_symmetry_type=translational_symmetry_type)
|
||||
|
||||
count = len(disp_dataset['first_atoms'])
|
||||
for disp1 in disp_dataset['first_atoms']:
|
||||
|
@ -208,7 +212,7 @@ class Phono3py:
|
|||
disp_dataset,
|
||||
fc2,
|
||||
self._symmetry,
|
||||
is_translational_symmetry=is_translational_symmetry,
|
||||
translational_symmetry_type=translational_symmetry_type,
|
||||
is_permutation_symmetry=is_permutation_symmetry,
|
||||
verbose=self._log_level)
|
||||
|
||||
|
@ -235,11 +239,16 @@ class Phono3py:
|
|||
if self._fc3 is not None:
|
||||
set_permutation_symmetry_fc3(self._fc3)
|
||||
|
||||
def set_translational_invariance(self):
|
||||
def set_translational_invariance(self,
|
||||
translational_symmetry_type=1):
|
||||
if self._fc2 is not None:
|
||||
set_translational_invariance(self._fc2)
|
||||
set_translational_invariance(
|
||||
self._fc2,
|
||||
translational_symmetry_type=translational_symmetry_type)
|
||||
if self._fc3 is not None:
|
||||
set_translational_invariance_fc3(self._fc3)
|
||||
set_translational_invariance_fc3(
|
||||
self._fc3,
|
||||
translational_symmetry_type=translational_symmetry_type)
|
||||
|
||||
def get_interaction_strength(self):
|
||||
return self._interaction
|
||||
|
|
|
@ -9,7 +9,7 @@ def get_fc3(supercell,
|
|||
disp_dataset,
|
||||
fc2,
|
||||
symmetry,
|
||||
is_translational_symmetry=False,
|
||||
translational_symmetry_type=0,
|
||||
is_permutation_symmetry=False,
|
||||
verbose=False):
|
||||
num_atom = supercell.get_number_of_atoms()
|
||||
|
@ -30,7 +30,7 @@ def get_fc3(supercell,
|
|||
disp_dataset,
|
||||
fc2,
|
||||
symmetry,
|
||||
is_translational_symmetry,
|
||||
translational_symmetry_type,
|
||||
is_permutation_symmetry,
|
||||
verbose)
|
||||
|
||||
|
@ -63,19 +63,21 @@ def get_fc3(supercell,
|
|||
disp_dataset,
|
||||
symmetry,
|
||||
verbose=verbose)
|
||||
if is_translational_symmetry:
|
||||
if translational_symmetry_type:
|
||||
if verbose:
|
||||
print "Imposing translational invariance symmetry to fc3"
|
||||
set_translational_invariance_fc3(fc3)
|
||||
set_translational_invariance_fc3(
|
||||
fc3, translational_symmetry_type=translational_symmetry_type)
|
||||
if is_permutation_symmetry:
|
||||
if verbose:
|
||||
print "Imposing index permulation symmetry to fc3"
|
||||
set_permutation_symmetry_fc3(fc3)
|
||||
else:
|
||||
if is_translational_symmetry:
|
||||
if translational_symmetry_type:
|
||||
if verbose:
|
||||
print "Imposing translational invariance symmetry to fc3"
|
||||
set_translational_invariance_fc3_per_index(fc3)
|
||||
set_translational_invariance_fc3_per_index(
|
||||
fc3, translational_symmetry_type=translational_symmetry_type)
|
||||
if is_permutation_symmetry:
|
||||
if verbose:
|
||||
print "Imposing index permulation symmetry to fc3"
|
||||
|
@ -185,51 +187,49 @@ def set_permutation_symmetry_fc3_elem(fc3, a, b, c, divisor=6):
|
|||
fc3[c, b, a, k, j, i]) / divisor
|
||||
return tensor3
|
||||
|
||||
def set_translational_invariance_fc3(fc3):
|
||||
def set_translational_invariance_fc3(fc3,
|
||||
translational_symmetry_type=1):
|
||||
for i in range(3):
|
||||
set_translational_invariance_fc3_per_index(fc3, index=i)
|
||||
# set_translational_invariance_fc3_per_index_weighted(fc3, index=i)
|
||||
set_translational_invariance_fc3_per_index(
|
||||
fc3,
|
||||
index=i,
|
||||
translational_symmetry_type=translational_symmetry_type)
|
||||
|
||||
def set_translational_invariance_fc3_per_index(fc3, index=0):
|
||||
def set_translational_invariance_fc3_per_index(fc3,
|
||||
index=0,
|
||||
translational_symmetry_type=1):
|
||||
for i in range(fc3.shape[(1 + index) % 3]):
|
||||
for j in range(fc3.shape[(2 + index) % 3]):
|
||||
for k in range(fc3.shape[3]):
|
||||
for l in range(fc3.shape[4]):
|
||||
for m in range(fc3.shape[5]):
|
||||
if index == 0:
|
||||
fc3[:, i, j, k, l, m] -= np.sum(
|
||||
fc3[:, i, j, k, l, m]) / fc3.shape[0]
|
||||
elif index == 1:
|
||||
fc3[j, :, i, k, l, m] -= np.sum(
|
||||
fc3[j, :, i, k, l, m]) / fc3.shape[1]
|
||||
elif index == 2:
|
||||
fc3[i, j, :, k, l, m] -= np.sum(
|
||||
fc3[i, j, :, k, l, m]) / fc3.shape[2]
|
||||
|
||||
def set_translational_invariance_fc3_per_index_weighted(fc3, index=0):
|
||||
for i in range(fc3.shape[(1 + index) % 3]):
|
||||
for j in range(fc3.shape[(2 + index) % 3]):
|
||||
for k in range(fc3.shape[3]):
|
||||
for l in range(fc3.shape[4]):
|
||||
for m in range(fc3.shape[5]):
|
||||
if index == 0:
|
||||
fc_abs = np.abs(fc3[:, i, j, k, l, m])
|
||||
fc_sum = np.sum(fc3[:, i, j, k, l, m])
|
||||
fc_abs_sum = np.sum(fc_abs)
|
||||
fc3[:, i, j, k, l, m] -= (
|
||||
fc_sum / fc_abs_sum * fc_abs)
|
||||
elif index == 1:
|
||||
fc_abs = np.abs(fc3[i, :, j, k, l, m])
|
||||
fc_sum = np.sum(fc3[i, :, j, k, l, m])
|
||||
fc_abs_sum = np.sum(fc_abs)
|
||||
fc3[i, :, j, k, l, m] -= (
|
||||
fc_sum / fc_abs_sum * fc_abs)
|
||||
elif index == 2:
|
||||
fc_abs = np.abs(fc3[i, j, :, k, l, m])
|
||||
fc_sum = np.sum(fc3[i, j, :, k, l, m])
|
||||
fc_abs_sum = np.sum(fc_abs)
|
||||
fc3[i, j, :, k, l, m] -= (
|
||||
fc_sum / fc_abs_sum * fc_abs)
|
||||
for k, l, m in list(np.ndindex(3, 3, 3)):
|
||||
if translational_symmetry_type == 2: # Type 2
|
||||
if index == 0:
|
||||
fc_abs = np.abs(fc3[:, i, j, k, l, m])
|
||||
fc_sum = np.sum(fc3[:, i, j, k, l, m])
|
||||
fc_abs_sum = np.sum(fc_abs)
|
||||
fc3[:, i, j, k, l, m] -= (
|
||||
fc_sum / fc_abs_sum * fc_abs)
|
||||
elif index == 1:
|
||||
fc_abs = np.abs(fc3[i, :, j, k, l, m])
|
||||
fc_sum = np.sum(fc3[i, :, j, k, l, m])
|
||||
fc_abs_sum = np.sum(fc_abs)
|
||||
fc3[i, :, j, k, l, m] -= (
|
||||
fc_sum / fc_abs_sum * fc_abs)
|
||||
elif index == 2:
|
||||
fc_abs = np.abs(fc3[i, j, :, k, l, m])
|
||||
fc_sum = np.sum(fc3[i, j, :, k, l, m])
|
||||
fc_abs_sum = np.sum(fc_abs)
|
||||
fc3[i, j, :, k, l, m] -= (
|
||||
fc_sum / fc_abs_sum * fc_abs)
|
||||
else: # Type 1
|
||||
if index == 0:
|
||||
fc3[:, i, j, k, l, m] -= np.sum(
|
||||
fc3[:, i, j, k, l, m]) / fc3.shape[0]
|
||||
elif index == 1:
|
||||
fc3[j, :, i, k, l, m] -= np.sum(
|
||||
fc3[j, :, i, k, l, m]) / fc3.shape[1]
|
||||
elif index == 2:
|
||||
fc3[i, j, :, k, l, m] -= np.sum(
|
||||
fc3[i, j, :, k, l, m]) / fc3.shape[2]
|
||||
|
||||
def third_rank_tensor_rotation(rot_cart, tensor):
|
||||
rot_tensor = np.zeros((3,3,3), dtype='double')
|
||||
|
@ -278,14 +278,14 @@ def get_delta_fc2(dataset_second_atoms,
|
|||
fc2,
|
||||
supercell,
|
||||
reduced_site_sym,
|
||||
is_translational_symmetry,
|
||||
translational_symmetry_type,
|
||||
is_permutation_symmetry,
|
||||
symprec):
|
||||
disp_fc2 = get_constrained_fc2(supercell,
|
||||
dataset_second_atoms,
|
||||
atom1,
|
||||
reduced_site_sym,
|
||||
is_translational_symmetry,
|
||||
translational_symmetry_type,
|
||||
is_permutation_symmetry,
|
||||
symprec)
|
||||
return disp_fc2 - fc2
|
||||
|
@ -294,7 +294,7 @@ def get_constrained_fc2(supercell,
|
|||
dataset_second_atoms,
|
||||
atom1,
|
||||
reduced_site_sym,
|
||||
is_translational_symmetry,
|
||||
translational_symmetry_type,
|
||||
is_permutation_symmetry,
|
||||
symprec):
|
||||
"""
|
||||
|
@ -346,8 +346,10 @@ def get_constrained_fc2(supercell,
|
|||
dtype='double'),
|
||||
symprec)
|
||||
|
||||
if is_translational_symmetry:
|
||||
set_translational_invariance(fc2)
|
||||
if translational_symmetry_type:
|
||||
set_translational_invariance(
|
||||
fc2,
|
||||
translational_symmetry_type=translational_symmetry_type)
|
||||
|
||||
if is_permutation_symmetry:
|
||||
set_permutation_symmetry(fc2)
|
||||
|
@ -467,7 +469,7 @@ def _get_fc3_least_atoms(fc3,
|
|||
disp_dataset,
|
||||
fc2,
|
||||
symmetry,
|
||||
is_translational_symmetry,
|
||||
translational_symmetry_type,
|
||||
is_permutation_symmetry,
|
||||
verbose):
|
||||
symprec = symmetry.get_symmetry_tolerance()
|
||||
|
@ -480,7 +482,7 @@ def _get_fc3_least_atoms(fc3,
|
|||
fc2,
|
||||
first_atom_num,
|
||||
symmetry.get_site_symmetry(first_atom_num),
|
||||
is_translational_symmetry,
|
||||
translational_symmetry_type,
|
||||
is_permutation_symmetry,
|
||||
symprec,
|
||||
verbose)
|
||||
|
@ -491,7 +493,7 @@ def _get_fc3_one_atom(fc3,
|
|||
fc2,
|
||||
first_atom_num,
|
||||
site_symmetry,
|
||||
is_translational_symmetry,
|
||||
translational_symmetry_type,
|
||||
is_permutation_symmetry,
|
||||
symprec,
|
||||
verbose):
|
||||
|
@ -515,7 +517,7 @@ def _get_fc3_one_atom(fc3,
|
|||
fc2,
|
||||
supercell,
|
||||
reduced_site_sym,
|
||||
is_translational_symmetry,
|
||||
translational_symmetry_type,
|
||||
is_permutation_symmetry,
|
||||
symprec))
|
||||
|
||||
|
|
|
@ -59,7 +59,7 @@ class Settings:
|
|||
self._is_plusminus_displacement = 'auto'
|
||||
self._is_symmetry = True
|
||||
self._is_tetrahedron_method = False
|
||||
self._is_time_symmetry = True
|
||||
self._is_time_reversal_symmetry = True
|
||||
self._is_translational_symmetry = False
|
||||
self._is_trigonal_displacement = False
|
||||
self._fc_decimals = None
|
||||
|
@ -270,12 +270,16 @@ class Settings:
|
|||
def get_temperature_step(self):
|
||||
return self._tstep
|
||||
|
||||
def set_time_symmetry(self, time_symmetry=True):
|
||||
self._is_time_symmetry = time_symmetry
|
||||
def set_time_reversal_symmetry(self, time_reversal_symmetry=True):
|
||||
self._is_time_reversal_symmetry = time_reversal_symmetry
|
||||
|
||||
def get_time_symmetry(self):
|
||||
return self._is_time_symmetry
|
||||
def get_time_reversal_symmetry(self):
|
||||
return self._is_time_reversal_symmetry
|
||||
|
||||
# Translational symmetry type
|
||||
# 0: No imposition
|
||||
# 1: Simple sum, sum(fc) / N
|
||||
# 2: Weighted sum, sum(fc) * abs(fc) / sum(abs(fc))
|
||||
def set_tsym_type(self, tsym_type):
|
||||
self._tsym_type = tsym_type
|
||||
|
||||
|
@ -1003,19 +1007,19 @@ class PhonopySettings(Settings):
|
|||
def set_mesh(self,
|
||||
mesh,
|
||||
mesh_shift=[0.,0.,0.],
|
||||
is_time_symmetry=True,
|
||||
is_time_reversal_symmetry=True,
|
||||
is_mesh_symmetry=True,
|
||||
is_gamma_center=False):
|
||||
self._mesh = mesh
|
||||
self._mesh_shift = mesh_shift
|
||||
self._is_time_symmetry = is_time_symmetry
|
||||
self._is_time_reversal_symmetry = is_time_reversal_symmetry
|
||||
self._is_mesh_symmetry = is_mesh_symmetry
|
||||
self._is_gamma_center = is_gamma_center
|
||||
|
||||
def get_mesh(self):
|
||||
return (self._mesh,
|
||||
self._mesh_shift,
|
||||
self._is_time_symmetry,
|
||||
self._is_time_reversal_symmetry,
|
||||
self._is_mesh_symmetry,
|
||||
self._is_gamma_center)
|
||||
|
||||
|
@ -1232,9 +1236,9 @@ class PhonopyConfParser(ConfParser):
|
|||
self.setting_error("MP_SHIFT is incorrectly set.")
|
||||
self.set_parameter('mp_shift', vals[:3])
|
||||
|
||||
if conf_key == 'time_symmetry':
|
||||
if confs['time_symmetry'] == '.false.':
|
||||
self.set_parameter('is_time_symmetry', False)
|
||||
if conf_key == 'time_reversal_symmetry':
|
||||
if confs['time_reversal_symmetry'] == '.false.':
|
||||
self.set_parameter('is_time_reversal_symmetry', False)
|
||||
|
||||
if conf_key == 'gamma_center':
|
||||
if confs['gamma_center'] == '.true.':
|
||||
|
@ -1419,10 +1423,10 @@ class PhonopyConfParser(ConfParser):
|
|||
else:
|
||||
shift = [0.,0.,0.]
|
||||
|
||||
time_symmetry = True
|
||||
if params.has_key('is_time_symmetry'):
|
||||
if not params['is_time_symmetry']:
|
||||
time_symmetry = False
|
||||
time_reversal_symmetry = True
|
||||
if params.has_key('is_time_reversal_symmetry'):
|
||||
if not params['is_time_reversal_symmetry']:
|
||||
time_reversal_symmetry = False
|
||||
|
||||
mesh_symmetry = True
|
||||
if params.has_key('is_mesh_symmetry'):
|
||||
|
@ -1434,11 +1438,12 @@ class PhonopyConfParser(ConfParser):
|
|||
if params['is_gamma_center']:
|
||||
gamma_center = True
|
||||
|
||||
self._settings.set_mesh(params['mesh_numbers'],
|
||||
mesh_shift=shift,
|
||||
is_time_symmetry=time_symmetry,
|
||||
is_mesh_symmetry=mesh_symmetry,
|
||||
is_gamma_center=gamma_center)
|
||||
self._settings.set_mesh(
|
||||
params['mesh_numbers'],
|
||||
mesh_shift=shift,
|
||||
is_time_reversal_symmetry=time_reversal_symmetry,
|
||||
is_mesh_symmetry=mesh_symmetry,
|
||||
is_gamma_center=gamma_center)
|
||||
|
||||
# band mode
|
||||
if params.has_key('band_paths'):
|
||||
|
|
|
@ -438,50 +438,44 @@ def set_tensor_symmetry(force_constants,
|
|||
# Take average and set to new force cosntants
|
||||
force_constants[i, j] = tmp_fc / len(rotations)
|
||||
|
||||
def set_translational_invariance(force_constants):
|
||||
def set_translational_invariance(force_constants,
|
||||
translational_symmetry_type=1):
|
||||
"""
|
||||
Translational invariance is imposed. This is quite simple
|
||||
Translational invariance is imposed. The type1 is quite simple
|
||||
implementation, which is just taking sum of the force constants in
|
||||
an axis and an atom index. The sum has to be zero due to the
|
||||
translational invariance. If the sum is not zero, this error is
|
||||
uniformly subtracted from force constants.
|
||||
"""
|
||||
set_translational_invariance_per_index(force_constants, index=0)
|
||||
set_translational_invariance_per_index(force_constants, index=1)
|
||||
# set_translational_invariance_per_index_weighted(force_constants, index=0)
|
||||
# set_translational_invariance_per_index_weighted(force_constants, index=1)
|
||||
for i in range(2):
|
||||
set_translational_invariance_per_index(
|
||||
force_constants,
|
||||
index=i,
|
||||
translational_symmetry_type=translational_symmetry_type)
|
||||
|
||||
def set_translational_invariance_per_index(force_constants, index=0):
|
||||
if index == 0:
|
||||
for i in range(force_constants.shape[1]):
|
||||
for j in range(force_constants.shape[2]):
|
||||
for k in range(force_constants.shape[3]):
|
||||
force_constants[:, i, j, k] -= np.sum(
|
||||
force_constants[:, i, j, k]) / force_constants.shape[0]
|
||||
elif index == 1:
|
||||
for i in range(force_constants.shape[0]):
|
||||
for j in range(force_constants.shape[2]):
|
||||
for k in range(force_constants.shape[3]):
|
||||
force_constants[i, :, j, k] -= np.sum(
|
||||
force_constants[i, :, j, k]) / force_constants.shape[1]
|
||||
|
||||
def set_translational_invariance_per_index_weighted(force_constants, index=0):
|
||||
if index == 0:
|
||||
for i in range(force_constants.shape[1]):
|
||||
for j in range(force_constants.shape[2]):
|
||||
for k in range(force_constants.shape[3]):
|
||||
fc_abs = np.abs(force_constants[:, i, j, k])
|
||||
fc_sum = np.sum(force_constants[:, i, j, k])
|
||||
fc_abs_sum = np.sum(fc_abs)
|
||||
force_constants[:, i, j, k] -= fc_sum / fc_abs_sum * fc_abs
|
||||
elif index == 1:
|
||||
for i in range(force_constants.shape[0]):
|
||||
for j in range(force_constants.shape[2]):
|
||||
for k in range(force_constants.shape[3]):
|
||||
fc_abs = np.abs(force_constants[i, :, j, k])
|
||||
fc_sum = np.sum(force_constants[i, :, j, k])
|
||||
fc_abs_sum = np.sum(fc_abs)
|
||||
force_constants[i, :, j, k] -= fc_sum / fc_abs_sum * fc_abs
|
||||
def set_translational_invariance_per_index(fc2,
|
||||
index=0,
|
||||
translational_symmetry_type=1):
|
||||
for i in range(fc2.shape[1 - index]):
|
||||
for j, k in list(np.ndindex(3, 3)):
|
||||
if translational_symmetry_type == 2: # Type 2
|
||||
if index == 0:
|
||||
fc_abs = np.abs(fc2[:, i, j, k])
|
||||
fc_sum = np.sum(fc2[:, i, j, k])
|
||||
fc_abs_sum = np.sum(fc_abs)
|
||||
fc2[:, i, j, k] -= fc_sum / fc_abs_sum * fc_abs
|
||||
else:
|
||||
fc_abs = np.abs(fc2[i, :, j, k])
|
||||
fc_sum = np.sum(fc2[i, :, j, k])
|
||||
fc_abs_sum = np.sum(fc_abs)
|
||||
fc2[i, :, j, k] -= fc_sum / fc_abs_sum * fc_abs
|
||||
else: # Type 1
|
||||
if index == 0:
|
||||
fc2[:, i, j, k] -= np.sum(
|
||||
fc2[:, i, j, k]) / fc2.shape[0]
|
||||
else:
|
||||
fc2[i, :, j, k] -= np.sum(
|
||||
fc2[i, :, j, k]) / fc2.shape[1]
|
||||
|
||||
def set_permutation_symmetry(force_constants):
|
||||
"""
|
||||
|
|
|
@ -46,7 +46,7 @@ from phonopy.file_IO import parse_FORCE_SETS
|
|||
from anharmonic.force_fit.fc2 import FC2Fit
|
||||
from anharmonic.force_fit.fc3 import FC3Fit
|
||||
from anharmonic.force_fit.fc4 import FC4Fit
|
||||
from anharmonic.file_IO import parse_disp_fc4_yaml, parse_FORCES_FOURTH, parse_disp_fc3_yaml, parse_FORCES_THIRD, parse_FORCES_SECOND
|
||||
from anharmonic.file_IO import parse_disp_fc4_yaml, parse_FORCES_FOURTH, parse_disp_fc3_yaml, parse_FORCES_FC3, parse_disp_fc2_yaml, parse_FORCES_FC2
|
||||
from anharmonic.file_IO import write_fc3_dat, write_fc4_dat, write_fc4_to_hdf5, write_fc3_to_hdf5, write_fc2_to_hdf5
|
||||
from anharmonic.phonon3.fc3 import show_drift_fc3
|
||||
from anharmonic.phonon4.fc4 import show_drift_fc4
|
||||
|
@ -136,9 +136,11 @@ if options.fc2:
|
|||
disp_dataset = parse_FORCE_SETS("FORCE_SETS")
|
||||
else:
|
||||
file_exists("disp_fc3.yaml")
|
||||
file_exists("FORCES_SECOND")
|
||||
disp_dataset = parse_disp_fc3_yaml()
|
||||
parse_FORCES_THIRD(disp_dataset)
|
||||
file_exists("FORCES_FC2")
|
||||
disp_dataset = parse_disp_fc2_yaml()
|
||||
forces_fc2 = parse_FORCES_FC2(disp_dataset)
|
||||
for forces, disp1 in zip(forces_fc2, disp_dataset['first_atoms']):
|
||||
disp1['forces'] = forces
|
||||
if options.coef_invariants is not None:
|
||||
print "Adjustment parameter: %e" % options.coef_invariants
|
||||
if options.pinv_cutoff is not None:
|
||||
|
@ -153,21 +155,28 @@ if options.fc2:
|
|||
fc2fit.run()
|
||||
fc2 = fc2fit.get_fc2()
|
||||
print "Writing fc2..."
|
||||
write_fc2_to_hdf5(fc2, 'fc2-fit.hdf5')
|
||||
write_fc2_to_hdf5(fc2, 'fc2.fit.hdf5')
|
||||
|
||||
if options.fc3:
|
||||
file_exists("disp_fc3.yaml")
|
||||
file_exists("FORCES_SECOND")
|
||||
file_exists("FORCES_THIRD")
|
||||
file_exists("FORCES_FC3")
|
||||
disp_dataset = parse_disp_fc3_yaml()
|
||||
parse_FORCES_THIRD(disp_dataset)
|
||||
forces_fc3 = parse_FORCES_FC3(disp_dataset)
|
||||
for forces, disp1 in zip(forces_fc3, disp_dataset['first_atoms']):
|
||||
disp1['forces'] = forces
|
||||
count = len(disp_dataset['first_atoms'])
|
||||
for disp1 in disp_dataset['first_atoms']:
|
||||
for disp2 in disp1['second_atoms']:
|
||||
disp2['forces'] = forces_fc3[count]
|
||||
count += 1
|
||||
|
||||
fc3fit = FC3Fit(supercell, disp_dataset, symmetry)
|
||||
fc3fit.run()
|
||||
fc3 = fc3fit.get_fc3()
|
||||
print "Calculating drift fc3..."
|
||||
show_drift_fc3(fc3)
|
||||
print "Writing fc3..."
|
||||
write_fc3_to_hdf5(fc3, 'fc3-fit.hdf5')
|
||||
write_fc3_to_hdf5(fc3, 'fc3.fit.hdf5')
|
||||
|
||||
if options.fc4:
|
||||
file_exists("disp_fc4.yaml")
|
||||
|
@ -182,15 +191,15 @@ if options.fc4:
|
|||
print "Calculating drift fc4..."
|
||||
show_drift_fc4(fc4)
|
||||
print "Writing fc4..."
|
||||
write_fc4_to_hdf5(fc4, 'fc4-fit.hdf5')
|
||||
write_fc4_to_hdf5(fc4, 'fc4.fit.hdf5')
|
||||
|
||||
fc3 = fc4fit.get_fc3()
|
||||
print "Calculating drift of fc3..."
|
||||
show_drift_fc3(fc3)
|
||||
print "Writing fc3..."
|
||||
write_fc3_to_hdf5(fc3, 'fc3-fit.hdf5')
|
||||
write_fc3_to_hdf5(fc3, 'fc3.fit.hdf5')
|
||||
|
||||
fc2 = fc4fit.get_fc2()
|
||||
show_drift_force_constants(fc2, name="fc2")
|
||||
print "Writing fc2..."
|
||||
write_fc2_to_hdf5(fc2, 'fc2-fit.hdf5')
|
||||
write_fc2_to_hdf5(fc2, 'fc2.fit.hdf5')
|
||||
|
|
|
@ -553,6 +553,12 @@ if settings.get_cutoff_frequency() is None:
|
|||
cutoff_frequency = 1e-2
|
||||
else:
|
||||
cutoff_frequency = settings.get_cutoff_frequency()
|
||||
if settings.get_is_translational_symmetry():
|
||||
tsym_type = 1
|
||||
elif settings.get_tsym_type() > 0:
|
||||
tsym_type = settings.get_tsym_type()
|
||||
else:
|
||||
tsym_type = 0
|
||||
|
||||
phono3py = Phono3py(
|
||||
unitcell,
|
||||
|
@ -601,7 +607,7 @@ if log_level:
|
|||
|
||||
print "----------------------------- General settings ------------------------------"
|
||||
print "Imposing translational symmetry to fc3 and fc2:",
|
||||
print settings.get_is_translational_symmetry()
|
||||
print (tsym_type > 0)
|
||||
print "Imposing symmetry of index exchange to fc2:",
|
||||
print options.is_symmetrize_fc2
|
||||
print "Imposing symmetry of index exchange to fc3 in real space:",
|
||||
|
@ -687,7 +693,7 @@ else:
|
|||
forces_fc3,
|
||||
displacement_dataset=disp_dataset,
|
||||
cutoff_distance=settings.get_cutoff_fc3_distance(),
|
||||
is_translational_symmetry=settings.get_is_translational_symmetry(),
|
||||
translational_symmetry_type=tsym_type,
|
||||
is_permutation_symmetry=options.is_symmetrize_fc3_r)
|
||||
if output_filename is None:
|
||||
filename = 'fc3.hdf5'
|
||||
|
@ -741,7 +747,7 @@ else:
|
|||
phono3py.produce_fc2(
|
||||
forces_fc3,
|
||||
displacement_dataset=disp_dataset,
|
||||
is_translational_symmetry=settings.is_translational_symmetry(),
|
||||
translational_symmetry_type=tsym_type,
|
||||
is_permutation_symmetry=options.is_symmetrize_fc2)
|
||||
else:
|
||||
if input_filename is None:
|
||||
|
@ -759,7 +765,7 @@ else:
|
|||
phono3py.produce_fc2(
|
||||
forces_fc2,
|
||||
displacement_dataset=disp_dataset,
|
||||
is_translational_symmetry=settings.get_is_translational_symmetry(),
|
||||
translational_symmetry_type=tsym_type,
|
||||
is_permutation_symmetry=options.is_symmetrize_fc2)
|
||||
|
||||
if output_filename is None:
|
||||
|
|
Loading…
Reference in New Issue