# -*- 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
from aiida.engine import submit
from aiida_yambo.workflows.yamborestart import YamboRestart
import argparse
[docs]def get_options():
parser = argparse.ArgumentParser(description='YAMBO calculation.')
parser.add_argument(
'--yambocode',
type=str,
dest='yambocode_id',
required=True,
help='The yambo(main code) codename to use')
parser.add_argument(
'--parent',
type=int,
dest='parent_pk',
required=True,
help='The parent to use')
parser.add_argument(
'--yamboprecode',
type=str,
dest='yamboprecode_id',
required=True,
help='The precode to use')
parser.add_argument(
'--restarts',
type=int,
dest='max_iterations',
required=False,
default=2,
help='maximum number of restarts')
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 = {
'yambocode_id': args.yambocode_id,
'yamboprecode_id': args.yamboprecode_id,
'max_iterations': args.max_iterations,
'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),
}
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):
###### setting the gw parameters ######
Dict = DataFactory('dict')
params_gw = {
'arguments': [
'dipoles',
'HF_and_locXC',
'dipoles',
'gw0',
'ppa',],
'variables': {
'Chimod': 'hartree',
'DysSolver': 'n',
'GTermKind': 'BG',
'NGsBlkXp': [2, 'Ry'],
'BndsRnXp': [[1, 50], ''],
'GbndRnge': [[1, 50], ''],
'QPkrange': [[[1, 1, 8, 9]], ''],}}
params_gw = Dict(dict=params_gw)
###### creation of the YamboRestart ######
builder = YamboRestart.get_builder()
builder.yambo.metadata.options.max_wallclock_seconds = \
options['max_wallclock_seconds']
builder.yambo.metadata.options.resources = \
dict = options['resources']
if 'queue_name' in options:
builder.yambo.metadata.options.queue_name = options['queue_name']
if 'qos' in options:
builder.yambo.metadata.options.qos = options['qos']
if 'account' in options:
builder.metadata.options.account = options['account']
builder.yambo.metadata.options.prepend_text = options['prepend_text']
builder.yambo.parameters = params_gw
builder.yambo.settings = Dict(dict={'INITIALISE': False, 'COPY_DBS': False})
builder.yambo.code = load_code(options['yambocode_id'])
builder.yambo.preprocessing_code = load_code(options['yamboprecode_id'])
builder.parent_folder = load_node(options['parent_pk']).outputs.remote_folder
builder.max_iterations = Int(options['max_iterations'])
return builder
if __name__ == "__main__":
[docs] options = get_options()
builder = main(options)
running = submit(builder)
print("Submitted YamboRestart workchain; with pk=< {} >".format(running.pk))