#!/usr/bin/env runaiida
# -*- coding: utf-8 -*-
from __future__ import absolute_import
from __future__ import print_function
import sys
import os
from aiida.plugins import DataFactory, CalculationFactory
from aiida.orm import List, Dict, Str,UpfData
from aiida.engine import submit
from aiida_quantumespresso.utils.pseudopotential import validate_and_prepare_pseudos_inputs
from ase import Atoms
import argparse
from aiida_yambo.calculations.ypp import YppCalculation
[docs]def get_options():
parser = argparse.ArgumentParser(description='YPP calculation.')
parser.add_argument(
'--yppcode',
type=str,
dest='yppcode_id',
required=True,
help='The ypp(main code) codename to use')
parser.add_argument(
'--parent',
type=int,
dest='parent_pk',
required=True,
help='The YamboCalculation parent to use')
parser.add_argument(
'--time',
type=int,
dest='max_wallclock_seconds',
required=False,
default=24*60*60,
help='max wallclock in seconds')
parser.add_argument(
'--nodes',
type=int,
dest='num_machines',
required=False,
default=1,
help='number of machines')
parser.add_argument(
'--mpi',
type=int,
dest='num_mpiprocs_per_machine',
required=False,
default=1,
help='number of mpi processes per machine')
parser.add_argument(
'--threads',
type=int,
dest='num_cores_per_mpiproc',
required=False,
default=1,
help='number of threads per mpi process')
parser.add_argument(
'--queue_name',
type=str,
dest='queue_name',
required=False,
default=None,
help='queue(PBS) or partition(SLURM) name')
parser.add_argument(
'--qos',
type=str,
dest='qos',
required=False,
default=None,
help='qos name')
parser.add_argument(
'--account',
type=str,
dest='account',
required=False,
default=None,
help='account name')
args = parser.parse_args()
###### setting the machine options ######
options = {
'yppcode_id': args.yppcode_id,
'max_wallclock_seconds': args.max_wallclock_seconds,
'resources': {
"num_machines": args.num_machines,
"num_mpiprocs_per_machine": args.num_mpiprocs_per_machine,
"num_cores_per_mpiproc": args.num_cores_per_mpiproc,
},
'prepend_text': u"export OMP_NUM_THREADS="+str(args.num_cores_per_mpiproc),
}
if args.parent_pk:
options['parent_pk']=args.parent_pk
if args.queue_name:
options['queue_name']=args.queue_name
if args.qos:
options['qos']=args.qos
if args.account:
options['account']=args.account
return options
[docs]def main(options):
params_gw = {'arguments':['wannier',],
'variables':{}}
params_gw = Dict(dict=params_gw)
builder = YppCalculation.get_builder()
##################yambo part of the builder
builder.metadata.options.max_wallclock_seconds = \
options['max_wallclock_seconds']
builder.metadata.options.resources = \
dict = options['resources']
if 'queue_name' in options:
builder.metadata.options.queue_name = options['queue_name']
if 'qos' in options:
builder.metadata.options.qos = options['qos']
if 'account' in options:
builder.metadata.options.account = options['account']
builder.parameters = params_gw
builder.code = load_code(options['yppcode_id'])
builder.parent_folder = load_node(options['parent_pk']).outputs.remote_folder
return builder
if __name__ == "__main__":
[docs] options = get_options()
builder = main(options)
running = submit(builder)
print("Submitted YppCalculation; with pk=< {} >".format(running.pk))