Remove phonon_flow

This commit is contained in:
gmatteo 2019-10-15 01:24:28 +02:00
parent 78ed33ea32
commit c8e1efe8d9
6 changed files with 181 additions and 184 deletions

View File

@ -38,6 +38,8 @@ ab-initio calculations and typical convergence studies.
AbiPy is interfaced with `Pymatgen <http://www.pymatgen.org>`_ allowing users to
benefit from the different tools and python objects available in the pymatgen ecosystem.
The official documentation is hosted on `github pages <http://abinit.github.io/abipy>`_.
AbiPy can be used in conjunction with `matplotlib <http://matplotlib.org>`_, `pandas <http://pandas.pydata.org>`_,
`ipython <https://ipython.org/index.html>`_ and `jupyter <http://jupyter.org/>`_
thus providing a powerful and user-friendly environment for data analysis and visualization.
@ -46,6 +48,9 @@ To learn more about the integration between jupyter and AbiPy, visit our collect
<http://nbviewer.ipython.org/github/abinit/abipy/blob/master/abipy/examples/notebooks/index.ipynb>`_ and the
`AbiPy lessons <http://nbviewer.ipython.org/github/abinit/abipy/blob/master/abipy/examples/notebooks/lessons/index.ipynb>`_.
To learn more about the integration between jupyter and AbiPy, visit `our collection of notebooks
<https://nbviewer.jupyter.org/github/abinit/abitutorials/blob/master/abitutorials/index.ipynb>`_
The latest development version is always available from <https://github.com/abinit/abipy>
"""
@ -67,8 +72,6 @@ download_url = "https://github.com/abinit/abipy"
platforms = ['Linux', 'darwin']
keywords = ["ABINIT", "ab-initio", "density-function-theory", "first-principles", "electronic-structure", "pymatgen"]
classifiers = [
"Programming Language :: Python :: 2",
"Programming Language :: Python :: 2.7",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",

View File

@ -1029,7 +1029,6 @@ def _from_cart_to_red(cartesian_tensor,lattice):
# TODO Remove
#@deprecated(message="abipy.core.Tensor is deprecated and will be replaced by pymatgen tensor in v0.4")
class _Tensor(object):
"""Representation of a 3x3 tensor"""

View File

@ -13,7 +13,7 @@ from .tasks import *
from .tasks import EphTask, ElasticTask
from .works import *
from .flows import (Flow, G0W0WithQptdmFlow, bandstructure_flow, PhononFlow,
g0w0_flow, phonon_flow, phonon_conv_flow, NonLinearCoeffFlow)
g0w0_flow, NonLinearCoeffFlow)
from .abitimer import AbinitTimerParser, AbinitTimerSection
from pymatgen.io.abinit.abiinspect import GroundStateScfCycle, D2DEScfCycle

View File

@ -25,7 +25,6 @@ from monty.io import FileLock
from monty.pprint import draw_tree
from monty.termcolor import cprint, colored, cprint_map, get_terminal_size
from monty.inspect import find_top_pyfile
from monty.dev import deprecated
from monty.json import MSONable
from pymatgen.util.serialization import pmg_pickle_load, pmg_pickle_dump, pmg_serialize
from pymatgen.core.units import Memory
@ -55,7 +54,7 @@ __all__ = [
"G0W0WithQptdmFlow",
"bandstructure_flow",
"g0w0_flow",
"phonon_flow",
#"phonon_flow",
]
@ -2886,175 +2885,175 @@ class NonLinearCoeffFlow(Flow):
return retcode
def phonon_flow(workdir, scf_input, ph_inputs, with_nscf=False, with_ddk=False, with_dde=False,
manager=None, flow_class=PhononFlow, allocate=True):
"""
Build a :class:`PhononFlow` for phonon calculations.
Args:
workdir: Working directory.
scf_input: Input for the GS SCF run.
ph_inputs: List of Inputs for the phonon runs.
with_nscf: add an nscf task in front of al phonon tasks to make sure the q point is covered
with_ddk: add the ddk step
with_dde: add the dde step it the dde is set ddk is switched on automatically
manager: :class:`TaskManager` used to submit the jobs
Initialized from manager.yml if manager is None.
flow_class: Flow class
Returns:
:class:`Flow` object
"""
logger.critical("phonon_flow is deprecated and could give wrong results")
if with_dde:
with_ddk = True
natom = len(scf_input.structure)
# Create the container that will manage the different works.
flow = flow_class(workdir, manager=manager)
# Register the first work (GS calculation)
# register_task creates a work for the task, registers it to the flow and returns the work
# the 0the element of the work is the task
scf_task = flow.register_task(scf_input, task_class=ScfTask)[0]
# Build a temporary work with a shell manager just to run
# ABINIT to get the list of irreducible pertubations for this q-point.
shell_manager = flow.manager.to_shell_manager(mpi_procs=1)
if with_ddk:
logger.info('add ddk')
# TODO
# MG Warning: be careful here because one should use tolde or tolwfr (tolvrs shall not be used!)
ddk_input = ph_inputs[0].deepcopy()
ddk_input.set_vars(qpt=[0, 0, 0], rfddk=1, rfelfd=2, rfdir=[1, 1, 1])
ddk_task = flow.register_task(ddk_input, deps={scf_task: 'WFK'}, task_class=DdkTask)[0]
if with_dde:
logger.info('add dde')
dde_input = ph_inputs[0].deepcopy()
dde_input.set_vars(qpt=[0, 0, 0], rfddk=1, rfelfd=2)
dde_input_idir = dde_input.deepcopy()
dde_input_idir.set_vars(rfdir=[1, 1, 1])
dde_task = flow.register_task(dde_input, deps={scf_task: 'WFK', ddk_task: 'DDK'}, task_class=DdeTask)[0]
if not isinstance(ph_inputs, (list, tuple)):
ph_inputs = [ph_inputs]
for i, ph_input in enumerate(ph_inputs):
fake_input = ph_input.deepcopy()
# Run abinit on the front-end to get the list of irreducible pertubations.
tmp_dir = os.path.join(workdir, "__ph_run" + str(i) + "__")
w = PhononWork(workdir=tmp_dir, manager=shell_manager)
fake_task = w.register(fake_input)
# Use the magic value paral_rf = -1 to get the list of irreducible perturbations for this q-point.
abivars = dict(
paral_rf=-1,
rfatpol=[1, natom], # Set of atoms to displace.
rfdir=[1, 1, 1], # Along this set of reduced coordinate axis.
)
fake_task.set_vars(abivars)
w.allocate()
w.start(wait=True)
# Parse the file to get the perturbations.
try:
irred_perts = yaml_read_irred_perts(fake_task.log_file.path)
except Exception:
print("Error in %s" % fake_task.log_file.path)
raise
logger.info(irred_perts)
w.rmtree()
# Now we can build the final list of works:
# One work per q-point, each work computes all
# the irreducible perturbations for a singe q-point.
work_qpt = PhononWork()
if with_nscf:
# MG: Warning this code assume 0 is Gamma!
nscf_input = copy.deepcopy(scf_input)
nscf_input.set_vars(kptopt=3, iscf=-3, qpt=irred_perts[0]['qpt'], nqpt=1)
nscf_task = work_qpt.register_nscf_task(nscf_input, deps={scf_task: "DEN"})
deps = {nscf_task: "WFQ", scf_task: "WFK"}
else:
deps = {scf_task: "WFK"}
if with_ddk:
deps[ddk_task] = 'DDK'
logger.info(irred_perts[0]['qpt'])
for irred_pert in irred_perts:
#print(irred_pert)
new_input = ph_input.deepcopy()
#rfatpol 1 1 # Only the first atom is displaced
#rfdir 1 0 0 # Along the first reduced coordinate axis
qpt = irred_pert["qpt"]
idir = irred_pert["idir"]
ipert = irred_pert["ipert"]
# TODO this will work for phonons, but not for the other types of perturbations.
rfdir = 3 * [0]
rfdir[idir - 1] = 1
rfatpol = [ipert, ipert]
new_input.set_vars(
#rfpert=1,
qpt=qpt,
rfdir=rfdir,
rfatpol=rfatpol,
)
if with_ddk:
new_input.set_vars(rfelfd=3)
work_qpt.register_phonon_task(new_input, deps=deps)
flow.register_work(work_qpt)
if allocate: flow.allocate()
return flow
def phonon_conv_flow(workdir, scf_input, qpoints, params, manager=None, allocate=True):
"""
Create a :class:`Flow` to perform convergence studies for phonon calculations.
Args:
workdir: Working directory of the flow.
scf_input: :class:`AbinitInput` object defining a GS-SCF calculation.
qpoints: List of list of lists with the reduced coordinates of the q-point(s).
params:
To perform a converge study wrt ecut: params=["ecut", [2, 4, 6]]
manager: :class:`TaskManager` object responsible for the submission of the jobs.
If manager is None, the object is initialized from the yaml file
located either in the working directory or in the user configuration dir.
allocate: True if the flow should be allocated before returning.
Return:
:class:`Flow` object.
"""
qpoints = np.reshape(qpoints, (-1, 3))
flow = Flow(workdir=workdir, manager=manager)
for qpt in qpoints:
for gs_inp in scf_input.product(*params):
# Register the SCF task
work = flow.register_scf_task(gs_inp)
# Add the PhononWork connected to this scf_task.
flow.register_work(PhononWork.from_scf_task(work[0], qpoints=qpt))
if allocate: flow.allocate()
return flow
#def phonon_flow(workdir, scf_input, ph_inputs, with_nscf=False, with_ddk=False, with_dde=False,
# manager=None, flow_class=PhononFlow, allocate=True):
# """
# Build a :class:`PhononFlow` for phonon calculations.
#
# Args:
# workdir: Working directory.
# scf_input: Input for the GS SCF run.
# ph_inputs: List of Inputs for the phonon runs.
# with_nscf: add an nscf task in front of al phonon tasks to make sure the q point is covered
# with_ddk: add the ddk step
# with_dde: add the dde step it the dde is set ddk is switched on automatically
# manager: :class:`TaskManager` used to submit the jobs
# Initialized from manager.yml if manager is None.
# flow_class: Flow class
#
# Returns:
# :class:`Flow` object
# """
# logger.critical("phonon_flow is deprecated and could give wrong results")
# if with_dde:
# with_ddk = True
#
# natom = len(scf_input.structure)
#
# # Create the container that will manage the different works.
# flow = flow_class(workdir, manager=manager)
#
# # Register the first work (GS calculation)
# # register_task creates a work for the task, registers it to the flow and returns the work
# # the 0the element of the work is the task
# scf_task = flow.register_task(scf_input, task_class=ScfTask)[0]
#
# # Build a temporary work with a shell manager just to run
# # ABINIT to get the list of irreducible pertubations for this q-point.
# shell_manager = flow.manager.to_shell_manager(mpi_procs=1)
#
# if with_ddk:
# logger.info('add ddk')
# # TODO
# # MG Warning: be careful here because one should use tolde or tolwfr (tolvrs shall not be used!)
# ddk_input = ph_inputs[0].deepcopy()
# ddk_input.set_vars(qpt=[0, 0, 0], rfddk=1, rfelfd=2, rfdir=[1, 1, 1])
# ddk_task = flow.register_task(ddk_input, deps={scf_task: 'WFK'}, task_class=DdkTask)[0]
#
# if with_dde:
# logger.info('add dde')
# dde_input = ph_inputs[0].deepcopy()
# dde_input.set_vars(qpt=[0, 0, 0], rfddk=1, rfelfd=2)
# dde_input_idir = dde_input.deepcopy()
# dde_input_idir.set_vars(rfdir=[1, 1, 1])
# dde_task = flow.register_task(dde_input, deps={scf_task: 'WFK', ddk_task: 'DDK'}, task_class=DdeTask)[0]
#
# if not isinstance(ph_inputs, (list, tuple)):
# ph_inputs = [ph_inputs]
#
# for i, ph_input in enumerate(ph_inputs):
# fake_input = ph_input.deepcopy()
#
# # Run abinit on the front-end to get the list of irreducible pertubations.
# tmp_dir = os.path.join(workdir, "__ph_run" + str(i) + "__")
# w = PhononWork(workdir=tmp_dir, manager=shell_manager)
# fake_task = w.register(fake_input)
#
# # Use the magic value paral_rf = -1 to get the list of irreducible perturbations for this q-point.
# abivars = dict(
# paral_rf=-1,
# rfatpol=[1, natom], # Set of atoms to displace.
# rfdir=[1, 1, 1], # Along this set of reduced coordinate axis.
# )
#
# fake_task.set_vars(abivars)
# w.allocate()
# w.start(wait=True)
#
# # Parse the file to get the perturbations.
# try:
# irred_perts = yaml_read_irred_perts(fake_task.log_file.path)
# except Exception:
# print("Error in %s" % fake_task.log_file.path)
# raise
#
# logger.info(irred_perts)
#
# w.rmtree()
#
# # Now we can build the final list of works:
# # One work per q-point, each work computes all
# # the irreducible perturbations for a singe q-point.
#
# work_qpt = PhononWork()
#
# if with_nscf:
# # MG: Warning this code assume 0 is Gamma!
# nscf_input = copy.deepcopy(scf_input)
# nscf_input.set_vars(kptopt=3, iscf=-3, qpt=irred_perts[0]['qpt'], nqpt=1)
# nscf_task = work_qpt.register_nscf_task(nscf_input, deps={scf_task: "DEN"})
# deps = {nscf_task: "WFQ", scf_task: "WFK"}
# else:
# deps = {scf_task: "WFK"}
#
# if with_ddk:
# deps[ddk_task] = 'DDK'
#
# logger.info(irred_perts[0]['qpt'])
#
# for irred_pert in irred_perts:
# #print(irred_pert)
# new_input = ph_input.deepcopy()
#
# #rfatpol 1 1 # Only the first atom is displaced
# #rfdir 1 0 0 # Along the first reduced coordinate axis
# qpt = irred_pert["qpt"]
# idir = irred_pert["idir"]
# ipert = irred_pert["ipert"]
#
# # TODO this will work for phonons, but not for the other types of perturbations.
# rfdir = 3 * [0]
# rfdir[idir - 1] = 1
# rfatpol = [ipert, ipert]
#
# new_input.set_vars(
# #rfpert=1,
# qpt=qpt,
# rfdir=rfdir,
# rfatpol=rfatpol,
# )
#
# if with_ddk:
# new_input.set_vars(rfelfd=3)
#
# work_qpt.register_phonon_task(new_input, deps=deps)
#
# flow.register_work(work_qpt)
#
# if allocate: flow.allocate()
#
# return flow
#
#
#def phonon_conv_flow(workdir, scf_input, qpoints, params, manager=None, allocate=True):
# """
# Create a :class:`Flow` to perform convergence studies for phonon calculations.
#
# Args:
# workdir: Working directory of the flow.
# scf_input: :class:`AbinitInput` object defining a GS-SCF calculation.
# qpoints: List of list of lists with the reduced coordinates of the q-point(s).
# params:
# To perform a converge study wrt ecut: params=["ecut", [2, 4, 6]]
# manager: :class:`TaskManager` object responsible for the submission of the jobs.
# If manager is None, the object is initialized from the yaml file
# located either in the working directory or in the user configuration dir.
# allocate: True if the flow should be allocated before returning.
#
# Return:
# :class:`Flow` object.
# """
# qpoints = np.reshape(qpoints, (-1, 3))
#
# flow = Flow(workdir=workdir, manager=manager)
#
# for qpt in qpoints:
# for gs_inp in scf_input.product(*params):
# # Register the SCF task
# work = flow.register_scf_task(gs_inp)
#
# # Add the PhononWork connected to this scf_task.
# flow.register_work(PhononWork.from_scf_task(work[0], qpoints=qpt))
#
# if allocate: flow.allocate()
# return flow

View File

@ -1,3 +1,4 @@
monty
tabulate
apscheduler==2.1.0
pydispatcher>=2.0.5

View File

@ -9,12 +9,6 @@ import shutil
from glob import glob
from setuptools import find_packages, setup, Extension
# This check is also made in abipy/__init__, don't forget to update both when
# changing Python version requirements.
#if sys.version[0:3] < '2.7':
# sys.stderr.write("abipy requires Python version 2.7 or above. Exiting.")
# sys.exit(1)
ext_modules = []
#-------------------------------------------------------------------------------
@ -145,6 +139,7 @@ def cleanup():
# install_requires = [s.strip() for s in fh]
install_requires = [
"monty",
"tabulate",
"apscheduler==2.1.0",
"pydispatcher>=2.0.5",