The pyiron IDE is built on top of an abstract class of Python objects, which can be combined like building blocks.
So switching from density functional theory (VASP, SPHInX) to interatomic potentials (LAMMPS) is as easy as changing a variable.
from pyiron import Project # Import Project object pr = Project("demonstration") # Create a project/folder structure = pr.create.structure.bulk("Al") # Create an aluminium bulk structure for job_type in ["Gpaw", "Lammps", "Sphinx"]: # Iterate over simulation codes job = pr.create_job( # Create a job object job_type=job_type, job_name=job_type ) job.structure = structure # assign the structure # job.server.queue = "my_queue" # uncomment to up-scale to HPC # job.server.cores = 4 # Set number of cores job.run() # Execute the calculation
To up-scale the interactive calculation to HPC pyiron implements the server object. This enables studying trends e.g. in the periodic table.
The resulting large datasets can be quickly analyzed using the map-reduce pattern: The pyironTable object aggregates the results in a single pandas Dataframe.
table = pr.create_table() # Create analysis object table.add.get_energy_tot # Define analysis functions table.add.get_volume # get the volume and total energy table.add["job_type"] = lambda job: job.__name__ # Add custom analysis function table.run() # Execute the analysis print(table.get_dataframe()) # Results are summarized in DataFrame
New simulation codes can be added easily to the pyiron IDE either by using the Python bindings (see example below) or by defining a
write_input and a
collect_output function to parse the input and output files of the executable.
from pyiron_base import PythonTemplateJob class ToyJob(PythonTemplateJob): # Create a custom job class def __init__(self, project, job_name): super().__init__(project, job_name) self.input.energy = 100 # Define default input def run_static(self): # Call a python function and store stuff in the output self.output.double = self.input.energy * 2 self.status.finished = True self.to_hdf() job = pr.create_job(job_type=ToyJob, job_name="toy") # Create job instance job.run() # Execute Custom job class
Feb 16, 2023
Aug 02, 2022
Nov 02, 2021
Supercharge your research with reproducibility.