Complex workflows made easy

From rapid prototyping to high performance computing in material science

Screenshot

Generic Interface

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 

Up-scaling

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 

Extendability

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 

Latest News


Supercharge your research with reproducibility.