Skip to content
Draft
Show file tree
Hide file tree
Changes from 31 commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
f5aeeef
Define the generic format in a separate file
jan-janssen Jan 5, 2024
c4f5197
fix bug
jan-janssen Jan 5, 2024
8f84cbe
make_output_dataclass()
jan-janssen Jan 5, 2024
7a5bc1a
black formating
jan-janssen Jan 5, 2024
51462e2
no more dataclass
jan-janssen Jan 5, 2024
a3919d0
Initialize dataclass only shortly before usage
jan-janssen Jan 5, 2024
f2f6edb
Fix LAMMPS bug
jan-janssen Jan 5, 2024
c70d2ed
define function calls directly
jan-janssen Jan 5, 2024
cc938b4
refactor get call
jan-janssen Jan 5, 2024
919e34d
Format black
pyiron-runner Jan 5, 2024
b6296d6
Merge remote-tracking branch 'origin/condense_vol_two' into generic_f…
jan-janssen Jan 5, 2024
d0fefe3
Merge remote-tracking branch 'origin/main' into generic_format
jan-janssen Jan 5, 2024
ffcd881
Replace dataclass by abstract class
jan-janssen Jan 5, 2024
33a183b
fix phonon jobs
jan-janssen Jan 5, 2024
de46f34
fit energy volume curve
jan-janssen Jan 5, 2024
aeae541
more fixes
jan-janssen Jan 5, 2024
6d2e837
return tuple from get_keys()
jan-janssen Jan 5, 2024
1acb557
Format black
pyiron-runner Jan 5, 2024
bbd6e99
fix thermal expasion
jan-janssen Jan 5, 2024
eea1e4c
Merge remote-tracking branch 'origin/abstract_class' into abstract_class
jan-janssen Jan 5, 2024
9cd9cb9
fix coverage
jan-janssen Jan 5, 2024
ab97e6c
fix function list
jan-janssen Jan 5, 2024
ddcf101
be more explicit
jan-janssen Jan 6, 2024
a6b774f
black formatting
jan-janssen Jan 6, 2024
0665c4d
rename output parameter to output_keys
jan-janssen Jan 6, 2024
fc12349
Update output.py
jan-janssen Jan 6, 2024
f100af0
fix test
jan-janssen Jan 6, 2024
cb2c5c6
fix signature test
jan-janssen Jan 6, 2024
c23292a
use type hints in abstract class
jan-janssen Jan 6, 2024
7650963
Merge remote-tracking branch 'origin/main' into abstract_class
jan-janssen Jan 6, 2024
2b2681c
updates
jan-janssen Jan 6, 2024
c183384
introduce output properties and rename output classes
jan-janssen Jan 7, 2024
d390579
Format black
pyiron-runner Jan 7, 2024
d0f55ed
fix test
jan-janssen Jan 7, 2024
803c889
Add Docstrings to output class
jan-janssen Jan 7, 2024
1a733cb
Merge remote-tracking branch 'origin/main' into abstract_class
jan-janssen Jan 8, 2024
195a983
Merge remote-tracking branch 'origin/main' into abstract_class
jan-janssen Jan 8, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 26 additions & 36 deletions atomistics/calculators/ase.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,12 @@

from atomistics.calculators.interface import get_quantities_from_tasks
from atomistics.calculators.wrapper import as_task_dict_evaluator
from atomistics.shared.output import OutputStatic, OutputMolecularDynamics
from atomistics.shared.thermal_expansion import (
OutputThermalExpansionProperties,
ThermalExpansionProperties,
from atomistics.shared.output import (
OutputStatic,
OutputMolecularDynamics,
OutputThermalExpansion,
)
from atomistics.shared.thermal_expansion import get_thermal_expansion_output
from atomistics.shared.tqdm_iterator import get_tqdm_iterator

if TYPE_CHECKING:
Expand All @@ -24,7 +25,7 @@
from atomistics.calculators.interface import TaskName


class ASEExecutor(object):
class ASEExecutor(OutputStatic, OutputMolecularDynamics):
def __init__(self, ase_structure, ase_calculator):
self.structure = ase_structure
self.structure.calc = ase_calculator
Expand Down Expand Up @@ -65,15 +66,6 @@ def volume(self):
return self.structure.get_volume()


ASEOutputStatic = OutputStatic(
**{k: getattr(ASEExecutor, k) for k in OutputStatic.fields()}
)

ASEOutputMolecularDynamics = OutputMolecularDynamics(
**{k: getattr(ASEExecutor, k) for k in OutputMolecularDynamics.fields()}
)


@as_task_dict_evaluator
def evaluate_with_ase(
structure: Atoms,
Expand Down Expand Up @@ -103,7 +95,7 @@ def evaluate_with_ase(
return calc_static_with_ase(
structure=structure,
ase_calculator=ase_calculator,
output=get_quantities_from_tasks(tasks=tasks),
output_keys=get_quantities_from_tasks(tasks=tasks),
)
else:
raise ValueError("The ASE calculator does not implement:", tasks)
Expand All @@ -113,28 +105,27 @@ def evaluate_with_ase(
def calc_static_with_ase(
structure,
ase_calculator,
output=OutputStatic.fields(),
output_keys=OutputStatic.keys(),
):
return ASEOutputStatic.get(
ASEExecutor(ase_structure=structure, ase_calculator=ase_calculator), *output
)
return ASEExecutor(
ase_structure=structure, ase_calculator=ase_calculator
).get_output(output_keys=output_keys)


def _calc_md_step_with_ase(
dyn, structure, ase_calculator, temperature, run, thermo, output
dyn, structure, ase_calculator, temperature, run, thermo, output_keys
):
structure.calc = ase_calculator
MaxwellBoltzmannDistribution(atoms=structure, temperature_K=temperature)
cache = {q: [] for q in output}
cache = {q: [] for q in output_keys}
for i in range(int(run / thermo)):
dyn.run(thermo)
calc_dict = ASEOutputMolecularDynamics.get(
ASEExecutor(ase_structure=structure, ase_calculator=ase_calculator),
*output,
)
calc_dict = ASEExecutor(
ase_structure=structure, ase_calculator=ase_calculator
).get_output(output_keys=output_keys)
for k, v in calc_dict.items():
cache[k].append(v)
return {q: np.array(cache[q]) for q in output}
return {q: np.array(cache[q]) for q in output_keys}


def calc_molecular_dynamics_npt_with_ase(
Expand All @@ -147,7 +138,7 @@ def calc_molecular_dynamics_npt_with_ase(
pfactor=2e6 * units.GPa * (units.fs**2),
temperature=100,
externalstress=np.array([0.0, 0.0, 0.0, 0.0, 0.0, 0.0]) * units.bar,
output=ASEOutputMolecularDynamics.fields(),
output_keys=OutputMolecularDynamics.keys(),
):
return _calc_md_step_with_ase(
dyn=NPT(
Expand All @@ -169,7 +160,7 @@ def calc_molecular_dynamics_npt_with_ase(
temperature=temperature,
run=run,
thermo=thermo,
output=output,
output_keys=output_keys,
)


Expand All @@ -181,7 +172,7 @@ def calc_molecular_dynamics_langevin_with_ase(
timestep=1 * units.fs,
temperature=100,
friction=0.002,
output=ASEOutputMolecularDynamics.fields(),
output_keys=OutputMolecularDynamics.keys(),
):
return _calc_md_step_with_ase(
dyn=Langevin(
Expand All @@ -195,7 +186,7 @@ def calc_molecular_dynamics_langevin_with_ase(
temperature=temperature,
run=run,
thermo=thermo,
output=output,
output_keys=output_keys,
)


Expand Down Expand Up @@ -231,7 +222,7 @@ def calc_molecular_dynamics_thermal_expansion_with_ase(
ttime=100 * units.fs,
pfactor=2e6 * units.GPa * (units.fs**2),
externalstress=np.array([0.0, 0.0, 0.0, 0.0, 0.0, 0.0]) * units.bar,
output=OutputThermalExpansionProperties.fields(),
output_keys=OutputThermalExpansion.keys(),
):
structure_current = structure.copy()
temperature_lst = np.arange(
Expand All @@ -253,9 +244,8 @@ def calc_molecular_dynamics_thermal_expansion_with_ase(
structure_current.set_cell(cell=result_dict["cell"][-1], scale_atoms=True)
temperature_md_lst.append(result_dict["temperature"][-1])
volume_md_lst.append(result_dict["volume"][-1])
return OutputThermalExpansionProperties.get(
ThermalExpansionProperties(
temperatures_lst=temperature_md_lst, volumes_lst=volume_md_lst
),
*output,
return get_thermal_expansion_output(
temperatures_lst=temperature_md_lst,
volumes_lst=volume_md_lst,
output_keys=output_keys,
)
37 changes: 19 additions & 18 deletions atomistics/calculators/lammps/calculator.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from pylammpsmpi import LammpsASELibrary

from atomistics.calculators.interface import get_quantities_from_tasks
from atomistics.calculators.lammps.output import LammpsOutput
from atomistics.calculators.lammps.helpers import (
lammps_calc_md,
lammps_run,
Expand All @@ -27,12 +28,12 @@
LAMMPS_RUN,
LAMMPS_MINIMIZE_VOLUME,
)
from atomistics.calculators.lammps.output import (
LammpsOutputMolecularDynamics,
LammpsOutputStatic,
)
from atomistics.calculators.wrapper import as_task_dict_evaluator
from atomistics.shared.thermal_expansion import OutputThermalExpansionProperties
from atomistics.shared.output import (
OutputStatic,
OutputMolecularDynamics,
OutputThermalExpansion,
)

if TYPE_CHECKING:
from ase import Atoms
Expand Down Expand Up @@ -120,7 +121,7 @@ def calc_static_with_lammps(
structure,
potential_dataframe,
lmp=None,
output=LammpsOutputStatic.fields(),
output_keys=OutputStatic.keys(),
**kwargs,
):
template_str = LAMMPS_THERMO_STYLE + "\n" + LAMMPS_THERMO + "\n" + LAMMPS_RUN
Expand All @@ -134,7 +135,7 @@ def calc_static_with_lammps(
lmp=lmp,
**kwargs,
)
result_dict = LammpsOutputStatic.get(lmp_instance, *output)
result_dict = LammpsOutput(lmp=lmp_instance).get_output(output_keys=output_keys)
lammps_shutdown(lmp_instance=lmp_instance, close_instance=lmp is None)
return result_dict

Expand All @@ -151,7 +152,7 @@ def calc_molecular_dynamics_nvt_with_lammps(
seed=4928459,
dist="gaussian",
lmp=None,
output=LammpsOutputMolecularDynamics.fields(),
output_keys=OutputMolecularDynamics.keys(),
**kwargs,
):
init_str = (
Expand Down Expand Up @@ -187,7 +188,7 @@ def calc_molecular_dynamics_nvt_with_lammps(
run_str=run_str,
run=run,
thermo=thermo,
output=output,
output_keys=output_keys,
)
lammps_shutdown(lmp_instance=lmp_instance, close_instance=lmp is None)
return result_dict
Expand All @@ -208,7 +209,7 @@ def calc_molecular_dynamics_npt_with_lammps(
seed=4928459,
dist="gaussian",
lmp=None,
output=LammpsOutputMolecularDynamics.fields(),
output_keys=OutputMolecularDynamics.keys(),
**kwargs,
):
init_str = (
Expand Down Expand Up @@ -247,7 +248,7 @@ def calc_molecular_dynamics_npt_with_lammps(
run_str=run_str,
run=run,
thermo=thermo,
output=output,
output_keys=output_keys,
)
lammps_shutdown(lmp_instance=lmp_instance, close_instance=lmp is None)
return result_dict
Expand All @@ -266,7 +267,7 @@ def calc_molecular_dynamics_nph_with_lammps(
seed=4928459,
dist="gaussian",
lmp=None,
output=LammpsOutputMolecularDynamics.fields(),
output_keys=OutputMolecularDynamics.keys(),
**kwargs,
):
init_str = (
Expand Down Expand Up @@ -302,7 +303,7 @@ def calc_molecular_dynamics_nph_with_lammps(
run_str=run_str,
run=run,
thermo=thermo,
output=output,
output_keys=output_keys,
)
lammps_shutdown(lmp_instance=lmp_instance, close_instance=lmp is None)
return result_dict
Expand All @@ -320,7 +321,7 @@ def calc_molecular_dynamics_langevin_with_lammps(
seed=4928459,
dist="gaussian",
lmp=None,
output=LammpsOutputMolecularDynamics.fields(),
output_keys=OutputMolecularDynamics.keys(),
**kwargs,
):
init_str = (
Expand Down Expand Up @@ -358,7 +359,7 @@ def calc_molecular_dynamics_langevin_with_lammps(
run_str=run_str,
run=run,
thermo=thermo,
output=output,
output_keys=output_keys,
)
lammps_shutdown(lmp_instance=lmp_instance, close_instance=lmp is None)
return result_dict
Expand All @@ -380,7 +381,7 @@ def calc_molecular_dynamics_thermal_expansion_with_lammps(
seed=4928459,
dist="gaussian",
lmp=None,
output=OutputThermalExpansionProperties.fields(),
output_keys=OutputThermalExpansion.keys(),
**kwargs,
):
init_str = (
Expand Down Expand Up @@ -411,7 +412,7 @@ def calc_molecular_dynamics_thermal_expansion_with_lammps(
seed=seed,
dist=dist,
lmp=lmp,
output=output,
output_keys=output_keys,
**kwargs,
)

Expand Down Expand Up @@ -457,7 +458,7 @@ def evaluate_with_lammps_library(
structure=structure,
potential_dataframe=potential_dataframe,
lmp=lmp,
output=get_quantities_from_tasks(tasks=tasks),
output_keys=get_quantities_from_tasks(tasks=tasks),
)
else:
raise ValueError("The LAMMPS calculator does not implement:", tasks)
Expand Down
30 changes: 15 additions & 15 deletions atomistics/calculators/lammps/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,12 @@
from pylammpsmpi import LammpsASELibrary

from atomistics.calculators.lammps.potential import validate_potential_dataframe
from atomistics.calculators.lammps.output import LammpsOutputMolecularDynamics
from atomistics.shared.thermal_expansion import (
OutputThermalExpansionProperties,
ThermalExpansionProperties,
from atomistics.calculators.lammps.output import LammpsOutput
from atomistics.shared.output import (
OutputMolecularDynamics,
OutputThermalExpansion,
)
from atomistics.shared.thermal_expansion import get_thermal_expansion_output
from atomistics.shared.tqdm_iterator import get_tqdm_iterator


Expand Down Expand Up @@ -46,30 +47,30 @@ def lammps_calc_md_step(
lmp_instance,
run_str,
run,
output=LammpsOutputMolecularDynamics.fields(),
output_keys=OutputMolecularDynamics.keys(),
):
run_str_rendered = Template(run_str).render(run=run)
lmp_instance.interactive_lib_command(run_str_rendered)
return LammpsOutputMolecularDynamics.get(lmp_instance, *output)
return LammpsOutput(lmp=lmp_instance).get_output(output_keys=output_keys)


def lammps_calc_md(
lmp_instance,
run_str,
run,
thermo,
output=LammpsOutputMolecularDynamics.fields(),
output_keys=OutputMolecularDynamics.keys(),
):
results_lst = [
lammps_calc_md_step(
lmp_instance=lmp_instance,
run_str=run_str,
run=thermo,
output=output,
output_keys=output_keys,
)
for _ in range(run // thermo)
]
return {q: np.array([d[q] for d in results_lst]) for q in output}
return {q: np.array([d[q] for d in results_lst]) for q in output_keys}


def lammps_thermal_expansion_loop(
Expand All @@ -88,7 +89,7 @@ def lammps_thermal_expansion_loop(
seed=4928459,
dist="gaussian",
lmp=None,
output=OutputThermalExpansionProperties.fields(),
output_keys=OutputThermalExpansion.keys(),
**kwargs,
):
lmp_instance = lammps_run(
Expand Down Expand Up @@ -121,11 +122,10 @@ def lammps_thermal_expansion_loop(
volume_md_lst.append(lmp_instance.interactive_volume_getter())
temperature_md_lst.append(lmp_instance.interactive_temperatures_getter())
lammps_shutdown(lmp_instance=lmp_instance, close_instance=lmp is None)
return OutputThermalExpansionProperties.get(
ThermalExpansionProperties(
temperatures_lst=temperature_md_lst, volumes_lst=volume_md_lst
),
*output,
return get_thermal_expansion_output(
temperatures_lst=temperature_md_lst,
volumes_lst=volume_md_lst,
output_keys=output_keys,
)


Expand Down
Loading