Skip to content
Switch branches/tags
Go to file
Cannot retrieve contributors at this time

EasyVVUQ + FabMD example


This example shows how to create an ensemble of LAMMPS simulations using EasyVVUQ, execute the jobs through FabMD, then analyse them within the EasyVVUQ architecture. All within 3 FabSim commands!!!

Our tutorial uses the following components: Graphical depiction of the VECMAtk components used in the FabMD tutorial

Its a very simple example of a LAMMPS ensemble. 5 replicas are created and given different velocity seeds. The solvation energy is calculated at the end of each simulation and the average and standard deviation are output to screen. The intention for this example is to provide a guide to designing your own workflow that uses these two tools together.

The input files needed for this example are found in plugins/FabMD/config_files/fabmd_easyvvuq. This directory contains three files:

  • lammps.template: is the LAMMPS input script, EasyVVUQ will substitute certain variables in this file to create the ensemble.

  • data.peptide: is the configuration file for a peptide in water for LAMMPS simulation. This remains common to all simulations.

For this example it is assumed you can run the basic FabMD and EasyVVUQ examples.


These are the commands I needed to run this example:

fabsim archer easymd_example:fabmd_easyvvuq
fabsim archer job_stat  # wait until execution has finished
fabsim archer easymd_example_analyse:fabmd_easyvvuq,fabmd_easyvvuq_archer_24

The generalised commands are:

fabsim remote_machine easymd_example:(name of config_dir in config_files)
fabsim remote_machine job_stat # wait until execution has finished
fabsim remote_machine easymd_example_analyse:(name of config_dir in config_files),(name of output_dir)

Command explanation

Each of the three commands is discussed in turn below. They are intended to serve as templates for your own workflows. See the commented code for more information in

The first command easymd_example calls a function in This sets up the ensemble with EasyVVUQ and executes them with FabSim on the remote machine.

EasyVVUQ requires a separate place to store the run information, this is put in a FabMD/tmp/.

An EasyVVUQ campagin is created in the usual way, we use a fixture to copy data.peptide to all directories.

Note that EasyVVUQ by default uses a $ to identify variables to carry out variable substitution, however $ is used by LAMMPS so we escape this clash by defining the delimiter to @.

We vary the random seed that LAMMPS uses to generate atomic velocities with: vary = {"velocity_seed": uq.distributions.uniform_integer(1,1000000)}

We sample 5 different velocity seeds and replicate each only once because given a specific seed the answer is deterministic. If you were varying a separate parameter that had a stochasitc ouput you would add replicas to each sample.

Then we save the campagin state for later, convert the campaign to a FabSim ensemble and execute a lammps_ensemble.

The second command is used to check when the simulatinos have completed. You could also use fabsim remote_machine stat.

The third command easymd_example_analyse calls a function in This fetches the results, transfers it back to an EasyVVUQ campaign and then analyses it. It must be passed two arguments: the config_dir as usual; and the name of the results directory output_dir. output_dir will be the name of the directory containg the results in your local_results directory (set in your machines_user.yml file).

Note that we have made LAMMPS output a file that looks like a pandas dataframse csv file, a more general output could be read by EasyVVUQ by using a custom decoder.

This command does the equivalent of:

  • fetching the results from the remote machine
  • convert FabSim ensemble to EasyVVUQ campaign
  • collate results into a pandas dataframe
  • print all the information of from the campaign
  • prints the BasicStats on the solvation energy, including its mean and confidence intervals