Ejemplo n.º 1
0
    def __init__(self,
                 directory=None,
                 name=None,
                 delta_strain=None,
                 strain=None,
                 bias=None,
                 supercell_matrix=None,
                 primitive_matrix=None,
                 distance=None,
                 lattice_tolerance=None,
                 force_tolerance=None,
                 pressure_target=None,
                 stress_tolerance=None,
                 max_increase=None,
                 max_iteration=None,
                 min_iteration=None,
                 is_cell_relaxed=False,
                 traverse=False):

        TaskElement.__init__(self)

        self._directory = directory
        if not name:
            self._name = directory
        else:
            self._name = name
        self._task_type = "mode_gruneisen"

        self._bias = bias
        if delta_strain is None:
            self._delta_strain = 0.001
        else:
            self._delta_strain = delta_strain
        (self._delta_strain_minus,
         self._delta_strain_orig,
         self._delta_strain_plus) = self._get_delta_strains()
        if strain is None:
            self._strain = np.eye(3)
        else:
            self._strain = self._get_strain(strain)
        
        self._supercell_matrix = supercell_matrix
        self._primitive_matrix = primitive_matrix
        self._distance = distance
        self._lattice_tolerance = lattice_tolerance
        self._pressure_target = pressure_target
        self._stress_tolerance = stress_tolerance
        self._force_tolerance = force_tolerance
        self._max_increase = max_increase
        self._max_iteration = max_iteration
        self._min_iteration = min_iteration
        self._traverse = traverse
        self._is_cell_relaxed = is_cell_relaxed
        
        self._stage = 0
        self._tasks = None

        self._cell = None
        self._mode_gruneisen = None
        self._all_tasks = None
Ejemplo n.º 2
0
    def __init__(self,
                 directory=None,
                 name=None,
                 lattice_tolerance=None,
                 force_tolerance=None,
                 pressure_target=None,
                 stress_tolerance=None,
                 max_increase=None,
                 max_iteration=None,
                 traverse=False,
                 is_cell_relaxed=False):

        TaskElement.__init__(self)

        self._directory = directory
        if not name:
            self._name = directory
        else:
            self._name = name
        self._task_type = "elastic_constants"
        self._lattice_tolerance = lattice_tolerance
        self._pressure_target = pressure_target
        self._stress_tolerance = stress_tolerance
        self._force_tolerance = force_tolerance
        self._max_increase = max_increase
        self._max_iteration = max_iteration
        self._traverse = traverse
        self._is_cell_relaxed = is_cell_relaxed

        self._stage = 0
        self._tasks = None

        self._cell = None
        self._ec_tasks = None
        self._elastic_constants = None
Ejemplo n.º 3
0
    def __init__(self,
                 directory=None,
                 name=None,
                 lattice_tolerance=None,
                 force_tolerance=None,
                 pressure_target=None,
                 stress_tolerance=None,
                 max_increase=None,
                 max_iteration=None,
                 traverse=False,
                 is_cell_relaxed=False):

        TaskElement.__init__(self)

        self._directory = directory
        if not name:
            self._name = directory
        else:
            self._name = name
        self._task_type = "elastic_constants"
        self._lattice_tolerance = lattice_tolerance
        self._pressure_target = pressure_target
        self._stress_tolerance = stress_tolerance
        self._force_tolerance = force_tolerance
        self._max_increase = max_increase
        self._max_iteration = max_iteration
        self._traverse = traverse
        self._is_cell_relaxed = is_cell_relaxed

        self._stage = 0
        self._tasks = None

        self._cell = None
        self._ec_tasks = None
        self._elastic_constants = None
Ejemplo n.º 4
0
    def __init__(self,
                 directory=None,
                 name=None,
                 supercell_matrix=None,
                 primitive_matrix=None,
                 distance=None,
                 displace_plusminus='auto',
                 displace_diagonal=False,
                 lattice_tolerance=None,
                 force_tolerance=None,
                 pressure_target=None,
                 stress_tolerance=None,
                 max_increase=None,
                 max_iteration=None,
                 min_iteration=None,
                 is_cell_relaxed=False,
                 max_num_atoms=None,
                 stop_condition=None,
                 traverse=False):

        TaskElement.__init__(self)

        self._directory = directory
        if not name:
            self._name = directory
        else:
            self._name = name
        self._task_type = "phonon"
        self._supercell_matrix = supercell_matrix
        if self._supercell_matrix is None:
            self._primitive_matrix = np.eye(3, dtype='double')
        else:
            self._primitive_matrix = primitive_matrix
        self._distance = distance
        self._displace_plusminus = displace_plusminus
        self._displace_diagonal = displace_diagonal
        self._lattice_tolerance = lattice_tolerance
        self._pressure_target = pressure_target
        self._stress_tolerance = stress_tolerance
        self._force_tolerance = force_tolerance
        self._max_increase = max_increase
        self._max_iteration = max_iteration
        self._min_iteration = min_iteration
        self._is_cell_relaxed = is_cell_relaxed
        self._max_num_atoms = max_num_atoms
        self._stop_condition = stop_condition
        self._traverse = traverse

        self._stage = 0
        self._tasks = []

        self._energy = None
        self._space_group = None
        self._cell = None
        self._phonon = None # Phonopy object
        self._all_tasks = None # Phonopy object

        self._try_collect_forces = True
Ejemplo n.º 5
0
    def __init__(self,
                 directory=None,
                 name=None,
                 ancestral_cells={},
                 tid_parent=None,
                 distance=None,
                 lattice_tolerance=None,
                 force_tolerance=None,
                 pressure_target=None,
                 stress_tolerance=None,
                 max_increase=None,
                 max_iteration=None,
                 min_iteration=None,
                 symmetry_tolerance=None,
                 cutoff_eigenvalue=None,
                 max_displacement=None,
                 num_sampling_points=None,
                 traverse=False):

        TaskElement.__init__(self)

        self._directory = directory
        if not name:
            self._name = directory
        else:
            self._name = name
        self._ancestral_cells = ancestral_cells
        self._tid_parent = tid_parent
        self._task_type = "phonon_relax_element"
        self._distance = distance
        self._lattice_tolerance = lattice_tolerance
        self._pressure_target = pressure_target
        self._stress_tolerance = stress_tolerance
        self._force_tolerance = force_tolerance
        self._max_increase = max_increase
        self._max_iteration = max_iteration
        self._min_iteration = min_iteration
        self._symmetry_tolerance = symmetry_tolerance
        self._cutoff_eigenvalue = cutoff_eigenvalue
        self._max_displacement = max_displacement
        self._num_sampling_points = num_sampling_points
        self._traverse = traverse

        self._tasks = []
        self._phre = []
        self._stage = 0
        self._supercell_dimention = None
        self._space_group_type = None
        self._energy = None
        # self._imaginary_modes:
        # (cell with modulation,
        #  q-point,
        #  Im(frequency),
        #  Index of q-point in the mesh sampling,
        #  Band index,
        #  Number of degeneracy)
        self._imaginary_modes = []
Ejemplo n.º 6
0
    def __init__(self,
                 directory=None,
                 name=None,
                 ancestral_cells={},
                 tid_parent=None,
                 distance=None,
                 lattice_tolerance=None,
                 force_tolerance=None,
                 pressure_target=None,
                 stress_tolerance=None,
                 max_increase=None,
                 max_iteration=None,
                 min_iteration=None,
                 symmetry_tolerance=None,
                 cutoff_eigenvalue=None,
                 max_displacement=None,
                 num_sampling_points=None,
                 traverse=False):

        TaskElement.__init__(self)

        self._directory = directory
        if not name:
            self._name = directory
        else:
            self._name = name
        self._ancestral_cells = ancestral_cells
        self._tid_parent = tid_parent
        self._task_type = "phonon_relax_element"
        self._distance = distance
        self._lattice_tolerance = lattice_tolerance
        self._pressure_target = pressure_target
        self._stress_tolerance = stress_tolerance
        self._force_tolerance = force_tolerance
        self._max_increase = max_increase
        self._max_iteration = max_iteration
        self._min_iteration = min_iteration
        self._symmetry_tolerance = symmetry_tolerance
        self._cutoff_eigenvalue = cutoff_eigenvalue
        self._max_displacement = max_displacement
        self._num_sampling_points = num_sampling_points
        self._traverse = traverse

        self._tasks = []
        self._phre = []
        self._stage = 0
        self._supercell_dimention = None
        self._space_group_type = None
        self._energy = None
        # self._imaginary_modes:
        # (cell with modulation,
        #  q-point,
        #  Im(frequency),
        #  Index of q-point in the mesh sampling,
        #  Band index,
        #  Number of degeneracy)
        self._imaginary_modes = []
Ejemplo n.º 7
0
    def __init__(self,
                 directory=None,
                 name=None,
                 ancestral_cells={},
                 distance=None,
                 lattice_tolerance=None,
                 force_tolerance=None,
                 pressure_target=None,
                 stress_tolerance=None,
                 max_increase=None,
                 max_iteration=None,
                 min_iteration=None,
                 symmetry_tolerance=None,
                 restrict_offspring=False,
                 max_offspring=None,
                 cutoff_eigenvalue=None,
                 max_displacement=None,
                 num_sampling_points=None,
                 stop_condition=None,
                 traverse=False):

        TaskElement.__init__(self)

        self._directory = directory
        if not name:
            self._name = directory
        else:
            self._name = name
        self._ancestral_cells = ancestral_cells
        self._task_type = "phonon_relax"
        self._distance = distance
        self._lattice_tolerance = lattice_tolerance
        self._pressure_target = pressure_target
        self._stress_tolerance = stress_tolerance
        self._force_tolerance = force_tolerance
        self._max_increase = max_increase
        self._max_iteration = max_iteration
        self._min_iteration = min_iteration
        self._symmetry_tolerance = symmetry_tolerance
        self._restrict_offspring = restrict_offspring
        self._max_offspring = max_offspring
        self._cutoff_eigenvalue = cutoff_eigenvalue
        if max_displacement:
            self._max_displacement = max_displacement
        else:
            self._max_displacement = symmetry_tolerance * MAX_DISPLACEMENT_RATIO
        self._num_sampling_points = num_sampling_points
        self._stop_condition = stop_condition
        self._traverse = traverse

        self._phr_tasks = []
        self._tasks = []
        self._stage = 0

        self._energy = None
Ejemplo n.º 8
0
    def __init__(self,
                 directory=None,
                 name=None,
                 ancestral_cells={},
                 distance=None,
                 lattice_tolerance=None,
                 force_tolerance=None,
                 pressure_target=None,
                 stress_tolerance=None,
                 max_increase=None,
                 max_iteration=None,
                 min_iteration=None,
                 symmetry_tolerance=None,
                 restrict_offspring=False,
                 max_offspring=None,
                 cutoff_eigenvalue=None,
                 max_displacement=None,
                 num_sampling_points=None,
                 traverse=False):

        TaskElement.__init__(self)

        self._directory = directory
        if not name:
            self._name = directory
        else:
            self._name = name
        self._ancestral_cells = ancestral_cells
        self._task_type = "phonon_relax"
        self._distance = distance
        self._lattice_tolerance = lattice_tolerance
        self._pressure_target = pressure_target
        self._stress_tolerance = stress_tolerance
        self._force_tolerance = force_tolerance
        self._max_increase = max_increase
        self._max_iteration = max_iteration
        self._min_iteration = min_iteration
        self._symmetry_tolerance = symmetry_tolerance
        self._restrict_offspring = restrict_offspring
        self._max_offspring = max_offspring
        self._cutoff_eigenvalue = cutoff_eigenvalue
        if max_displacement:
            self._max_displacement = max_displacement
        else:
            self._max_displacement = symmetry_tolerance * MAX_DISPLACEMENT_RATIO
        self._num_sampling_points = num_sampling_points
        self._traverse = traverse

        self._phr_tasks = []
        self._tasks = []
        self._stage = 0

        self._energy = None
Ejemplo n.º 9
0
    def __init__(self, directory=None, name=None, traverse=False):

        TaskElement.__init__(self)

        self._directory = directory
        if not name:
            self._name = directory
        else:
            self._name = name
        self._tasks = []  # Means singular task
        self._traverse = traverse

        self._cell = None
Ejemplo n.º 10
0
    def __init__(self,
                 directory=None,
                 name=None,
                 supercell_matrix=None,
                 primitive_matrix=None,
                 distance=None,
                 is_diagonal=True,
                 check_imaginary=True,
                 cutoff_frequency=None,
                 lattice_tolerance=None,
                 force_tolerance=None,
                 pressure_target=None,
                 stress_tolerance=None,
                 max_increase=None,
                 max_iteration=None,
                 min_iteration=None,
                 is_cell_relaxed=False,
                 traverse=False):

        TaskElement.__init__(self)

        self._directory = directory
        if not name:
            self._name = directory
        else:
            self._name = name
        self._task_type = "anharmonic_phonon"
        self._supercell_matrix = supercell_matrix
        self._primitive_matrix = primitive_matrix
        self._distance = distance
        self._is_diagonal = is_diagonal
        self._check_imaginary = check_imaginary
        self._cutoff_frequency = cutoff_frequency # determine imaginary freq.
        self._lattice_tolerance = lattice_tolerance
        self._pressure_target = pressure_target
        self._stress_tolerance = stress_tolerance
        self._force_tolerance = force_tolerance
        self._max_increase = max_increase
        self._max_iteration = max_iteration
        self._min_iteration = min_iteration
        self._traverse = traverse
        self._is_cell_relaxed = is_cell_relaxed

        self._stage = 0
        self._tasks = []

        self._energy = None
        self._cell = None
        self._phonon = None # Phonopy object
        self._phonon_fc3 = None # Phono3py object
        self._phonon_fc3_tasks = None
Ejemplo n.º 11
0
    def __init__(
        self,
        directory="structure_optimization",
        name=None,
        lattice_tolerance=None,
        force_tolerance=None,
        pressure_target=None,
        stress_tolerance=None,
        max_increase=None,
        max_iteration=None,
        min_iteration=None,
        find_symmetry=True,
        impose_symmetry=False,
        symmetry_tolerance=None,
        traverse=False,
    ):

        TaskElement.__init__(self)

        self._directory = directory
        if not name:
            self._name = directory
        else:
            self._name = name
        self._task_type = "structure_optimization"

        self._lattice_tolerance = lattice_tolerance
        self._pressure_target = pressure_target
        self._stress_tolerance = stress_tolerance
        self._force_tolerance = force_tolerance
        self._max_increase = max_increase
        self._max_iteration = max_iteration
        self._min_iteration = min_iteration
        self._find_symmetry = find_symmetry
        self._impose_symmetry = impose_symmetry
        self._symmetry_tolerance = symmetry_tolerance
        self._traverse = traverse

        self._stage = 1
        self._tasks = None

        self._cell = None
        self._next_cell = None
        self._so_tasks = None
        self._stress = None
        self._forces = None
        self._energy = None
        self._space_group = None
Ejemplo n.º 12
0
    def __init__(self,
                 directory=None,
                 name=None,
                 traverse=False):

        TaskElement.__init__(self)

        self._directory = directory
        if not name:
            self._name = directory
        else:
            self._name = name
        self._tasks = [] # Means singular task
        self._traverse = traverse

        self._cell = None
Ejemplo n.º 13
0
    def __init__(self,
                 directory="structure_optimization",
                 name=None,
                 lattice_tolerance=None,
                 force_tolerance=None,
                 pressure_target=None,
                 stress_tolerance=None,
                 max_increase=None,
                 max_iteration=None,
                 min_iteration=None,
                 find_symmetry=True,
                 impose_symmetry=False,
                 symmetry_tolerance=None,
                 traverse=False):

        TaskElement.__init__(self)

        self._directory = directory
        if not name:
            self._name = directory
        else:
            self._name = name
        self._task_type = "structure_optimization"

        self._lattice_tolerance = lattice_tolerance
        self._pressure_target = pressure_target
        self._stress_tolerance = stress_tolerance
        self._force_tolerance = force_tolerance
        self._max_increase = max_increase
        self._max_iteration = max_iteration
        self._min_iteration = min_iteration
        self._find_symmetry = find_symmetry
        self._impose_symmetry = impose_symmetry
        self._symmetry_tolerance = symmetry_tolerance
        self._traverse = traverse

        self._stage = 1
        self._tasks = None

        self._cell = None
        self._next_cell = None
        self._so_tasks = None
        self._stress = None
        self._forces = None
        self._energy = None
        self._space_group = None
Ejemplo n.º 14
0
    def __init__(self,
                 directory=None,
                 name=None,
                 supercell_matrix=None,
                 primitive_matrix=None,
                 distance=None,
                 lattice_tolerance=None,
                 force_tolerance=None,
                 pressure_target=None,
                 stress_tolerance=None,
                 max_increase=None,
                 max_iteration=None,
                 min_iteration=None,
                 traverse=False,
                 is_cell_relaxed=False):

        TaskElement.__init__(self)

        self._directory = directory
        if not name:
            self._name = directory
        else:
            self._name = name
        self._task_type = "phonon"
        self._supercell_matrix = supercell_matrix
        self._primitive_matrix = primitive_matrix
        self._distance = distance
        self._lattice_tolerance = lattice_tolerance
        self._pressure_target = pressure_target
        self._stress_tolerance = stress_tolerance
        self._force_tolerance = force_tolerance
        self._max_increase = max_increase
        self._max_iteration = max_iteration
        self._min_iteration = min_iteration
        self._traverse = traverse
        self._is_cell_relaxed = is_cell_relaxed

        self._stage = 0
        self._tasks = []

        self._energy = None
        self._cell = None
        self._phonon = None # Phonopy object
Ejemplo n.º 15
0
    def __init__(self,
                 directory=None,
                 name=None,
                 supercell_matrix=None,
                 primitive_matrix=None,
                 distance=None,
                 lattice_tolerance=None,
                 force_tolerance=None,
                 pressure_target=None,
                 stress_tolerance=None,
                 max_increase=None,
                 max_iteration=None,
                 min_iteration=None,
                 traverse=False,
                 is_cell_relaxed=False):

        TaskElement.__init__(self)

        self._directory = directory
        if not name:
            self._name = directory
        else:
            self._name = name
        self._task_type = "phonon"
        self._supercell_matrix = supercell_matrix
        self._primitive_matrix = primitive_matrix
        self._distance = distance
        self._lattice_tolerance = lattice_tolerance
        self._pressure_target = pressure_target
        self._stress_tolerance = stress_tolerance
        self._force_tolerance = force_tolerance
        self._max_increase = max_increase
        self._max_iteration = max_iteration
        self._min_iteration = min_iteration
        self._traverse = traverse
        self._is_cell_relaxed = is_cell_relaxed

        self._stage = 0
        self._tasks = []

        self._energy = None
        self._cell = None
        self._phonon = None  # Phonopy object
Ejemplo n.º 16
0
    def __init__(self,
                 directory=None,
                 name=None,
                 strains=None,
                 lattice_tolerance=None,
                 force_tolerance=None,
                 pressure_target=None,
                 stress_tolerance=None,
                 max_increase=None,
                 max_iteration=None,
                 min_iteration=None,
                 is_cell_relaxed=False,
                 traverse=False):

        TaskElement.__init__(self)

        self._directory = directory
        if not name:
            self._name = directory
        else:
            self._name = name
        self._task_type = "bulk_modulus"

        self._strains = strains

        self._lattice_tolerance = lattice_tolerance
        self._pressure_target = pressure_target
        self._stress_tolerance = stress_tolerance
        self._force_tolerance = force_tolerance
        self._max_increase = max_increase
        self._max_iteration = max_iteration
        self._min_iteration = min_iteration
        self._traverse = traverse
        self._is_cell_relaxed = is_cell_relaxed
        
        self._stage = 0
        self._tasks = None

        self._cell = None
        self._bulk_modulus = None
        self._all_tasks = None

        self._eos = None # Energy function of V, only for strains mode
Ejemplo n.º 17
0
    def __init__(self,
                 directory=None,
                 name=None,
                 is_partial_dos=False,
                 lattice_tolerance=None,
                 force_tolerance=None,
                 pressure_target=None,
                 stress_tolerance=None,
                 max_increase=None,
                 max_iteration=None,
                 min_iteration=None,
                 is_cell_relaxed=False,
                 traverse=False):

        TaskElement.__init__(self)

        self._directory = directory
        if not name:
            self._name = directory
        else:
            self._name = name
        self._task_type = "density_of_states"
        self._is_partial_dos = is_partial_dos
        self._lattice_tolerance = lattice_tolerance
        self._pressure_target = pressure_target
        self._stress_tolerance = stress_tolerance
        self._force_tolerance = force_tolerance
        self._max_increase = max_increase
        self._max_iteration = max_iteration
        self._min_iteration = min_iteration
        self._traverse = traverse
        self._is_cell_relaxed = is_cell_relaxed

        self._stage = 0
        self._tasks = None

        self._cell = None
        self._density_of_states = None
        self._dos_tasks = None
Ejemplo n.º 18
0
    def __init__(self,
                 directory=None,
                 name=None,
                 strains=None,
                 sampling_mesh=None,
                 is_gamma_center=False,
                 t_step=None,
                 t_max=None,
                 t_min=None,
                 supercell_matrix=None,
                 primitive_matrix=None,
                 nac=False,
                 distance=None,
                 lattice_tolerance=None,
                 force_tolerance=None,
                 pressure_target=None,
                 stress_tolerance=None,
                 max_increase=None,
                 max_iteration=None,
                 min_iteration=None,
                 is_cell_relaxed=False,
                 max_num_atoms=None,
                 first_phonon_index=None,
                 traverse=False):

        TaskElement.__init__(self)

        self._directory = directory
        if not name:
            self._name = directory
        else:
            self._name = name
        self._task_type = "quasiharmonic_phonon"

        self._strains = strains
        if self._strains is None:
            self._estimate_strain = True
        else:
            self._estimate_strain = False
        self._sampling_mesh = sampling_mesh
        self._is_gamma_center = is_gamma_center
        if t_step is None:
            self._t_step = 2
        else:
            self._t_step = t_step
        if t_max is None:
            self._t_max = 1500
        else:
            self._t_max = t_max
        if t_min is None:
            self._t_min = 0
        else:
            self._t_min = t_min
        self._supercell_matrix = supercell_matrix
        self._primitive_matrix = primitive_matrix
        self._nac = nac
        self._distance = distance
        self._lattice_tolerance = lattice_tolerance
        self._pressure_target = pressure_target
        self._stress_tolerance = stress_tolerance
        self._force_tolerance = force_tolerance
        self._max_increase = max_increase
        self._max_iteration = max_iteration
        self._min_iteration = min_iteration
        self._traverse = traverse
        self._is_cell_relaxed = is_cell_relaxed
        self._max_num_atoms = max_num_atoms
        self._first_phonon_index  = first_phonon_index

        self._stage = 0
        self._tasks = None

        self._cell = None
        self._all_tasks = None

        self._imaginary_ratio = None
        self._grid_spacing = 200
Ejemplo n.º 19
0
    def __init__(
        self,
        directory=None,
        name=None,
        strains=None,
        sampling_mesh=None,
        t_step=None,
        t_max=None,
        t_min=None,
        supercell_matrix=None,
        primitive_matrix=None,
        distance=None,
        lattice_tolerance=None,
        force_tolerance=None,
        pressure_target=None,
        stress_tolerance=None,
        max_increase=None,
        max_iteration=None,
        min_iteration=None,
        is_cell_relaxed=False,
        traverse=False,
    ):

        TaskElement.__init__(self)

        self._directory = directory
        if not name:
            self._name = directory
        else:
            self._name = name
        self._task_type = "quasiharmonic_phonon"

        self._lattices = [np.eye(3)]
        for strain in strains:
            if isinstance(strain, int) or isinstance(strain, float):
                self._lattices.append((1 + strain) ** (1.0 / 3) * np.eye(3))
            else:
                self._lattices.append(np.eye(3) + np.array(strain))
        self._sampling_mesh = sampling_mesh
        if t_step is None:
            self._t_step = 10
        else:
            self._t_step = t_step
        if t_max is None:
            self._t_max = 1500
        else:
            self._t_max = t_max
        if t_min is None:
            self._t_min = 0
        else:
            self._t_min = t_min
        self._supercell_matrix = supercell_matrix
        self._primitive_matrix = primitive_matrix
        self._distance = distance
        self._lattice_tolerance = lattice_tolerance
        self._pressure_target = pressure_target
        self._stress_tolerance = stress_tolerance
        self._force_tolerance = force_tolerance
        self._max_increase = max_increase
        self._max_iteration = max_iteration
        self._min_iteration = min_iteration
        self._traverse = traverse
        self._is_cell_relaxed = is_cell_relaxed

        self._stage = 0
        self._tasks = None

        self._cell = None
        self._qh_tasks = None
Ejemplo n.º 20
0
    def __init__(self,
                 directory=None,
                 name=None,
                 strains=None,
                 sampling_mesh=None,
                 t_step=None,
                 t_max=None,
                 t_min=None,
                 supercell_matrix=None,
                 primitive_matrix=None,
                 distance=None,
                 lattice_tolerance=None,
                 force_tolerance=None,
                 pressure_target=None,
                 stress_tolerance=None,
                 max_increase=None,
                 max_iteration=None,
                 min_iteration=None,
                 traverse=False,
                 is_cell_relaxed=False):

        TaskElement.__init__(self)

        self._directory = directory
        if not name:
            self._name = directory
        else:
            self._name = name
        self._task_type = "quasiharmonic_phonon"

        self._lattices = [np.eye(3)]
        for strain in strains:
            if isinstance(strain, int) or isinstance(strain, float):
                self._lattices.append((1 + strain)**(1.0 / 3) * np.eye(3))
            else:
                self._lattices.append(np.eye(3) + np.array(strain))
        self._sampling_mesh = sampling_mesh
        if t_step is None:
            self._t_step = 10
        else:
            self._t_step = t_step
        if t_max is None:
            self._t_max = 1500
        else:
            self._t_max = t_max
        if t_min is None:
            self._t_min = 0
        else:
            self._t_min = t_min
        self._supercell_matrix = supercell_matrix
        self._primitive_matrix = primitive_matrix
        self._distance = distance
        self._lattice_tolerance = lattice_tolerance
        self._pressure_target = pressure_target
        self._stress_tolerance = stress_tolerance
        self._force_tolerance = force_tolerance
        self._max_increase = max_increase
        self._max_iteration = max_iteration
        self._min_iteration = min_iteration
        self._traverse = traverse
        self._is_cell_relaxed = is_cell_relaxed

        self._stage = 0
        self._tasks = None

        self._cell = None
        self._qh_tasks = None