#!/usr/bin/env python
"""Submit strong scaling benchmarks in a loop.

Examples
--------
./submit_strong --help
./submit_strong -n
./submit_strong -n -d 2 32 32

"""
import os
from itertools import product
from util import get_parser, parser_to_params, init_cluster, submit, cluster, cluster_type
import fluidsim


parser = get_parser(
    'submit_strong', 'Generic script to submit strong scaling benchmarks',
    __doc__)
if cluster_type == 'snic':
    parser.set_defaults(n0=1024, n1=1024, nz=240)  # or 1344 1344 672
else:
    parser.set_defaults(n0=64, n1=64, nz=8)

params, params_dim = parser_to_params(parser)
cluster = init_cluster(params, Cluster)
mode = params.mode

if __name__ == '__main__':
    if params.dry_run:
        print(params_dim)

    if 'seq' in mode:
        for type_fft in params_dim.fft_seq:
            submit(params, params_dim, cluster, 1, 1, type_fft)

    if 'intra' in mode:
        nb_nodes = 1
        for nb_cores_per_node, type_fft in product(params_dim.nb_cores, params_dim.fft):
            if nb_cores_per_node > cluster.nb_cores_per_node:
                continue

            submit(params, params_dim, cluster, nb_nodes, nb_cores_per_node, type_fft)

    if 'inter' in mode:
        for nb_nodes, type_fft in product(params_dim.nodes, params_dim.fft):
            submit(params, params_dim, cluster, nb_nodes, fft=type_fft)
