How to Make Your Own Potential?

This section explains how users can construct their own potentials, and what to pay attention to when configuring the workflow.

  1. Set up the workflow in a new directory:

    make setup-workflow dir=my_potential
    cd my_potential
    
  2. Inspect the bd.yaml files in each task folder in workflow/. Most default parameters should be acceptable, but you may want to change some of them, for example the number of MD time steps in md_select.

    Most probably, you also want to change the ab initio model. For testing purposes, an EAM potential is used, which is also the default option. For using VASP as the ab initio model, change the alias of sp_calc in motoko.yaml to:

    aliases:
      sp_calc: vasp
    

    The INCAR file must be located in the potentials directory; an example INCAR file is provided there. If you use a different INCAR file, change the filename in the bd.yaml of the vasp task.

    VASP is run through ASE, which requires the VASP executable and the path of the pseudopotential directories to be set as environment variables in launch.sh in workflow/vasp/:

    export ASE_VASP_COMMAND=...
    export VASP_PP_PATH=...
    

    More information on setting up VASP with ASE can be found in the ASE VASP calculator documentation.

  3. Start the daemon processes that execute the tasks:

    make -C workflow create launcher
    
  4. Start the workflow from the workflow directory:

    cd workflow
    motoko orchestrator start --help
    motoko --verbose orchestrator start your_arguments
    

    AutoPot is designed so that creating different potentials in the same database should not be a problem if a unique run_name is added. To create more potentials, append a unique run_name to your_arguments:

    --run_name my_potential874
    

    The workflow has finished when the terminal shows:

    terminate: workflow successful
    
  5. Find the final potential and training set.

    The final potential and training set, trained_pot.mtp and ts.cfg, are stored in the last train task. If X is the number of the last train task, they can be found in train/BD-train-runs/run-X.

    Alternatively, access them in Python:

    from motoko.workflow import Workflow
    
    wf = Workflow("motoko.yaml")
    
    last_run = wf.train.connect().runs[wf.train.connect().runs_counter - 1]
    
    mtp_fname = os.path.join(
        last_run.run_path, last_run.train_args["trained_pot_name"]
    )
    
  6. Delete the database and kill all daemons:

    make clean