Heisenberg chain

First you need to import some package that need for calcuation:

from aiida.plugins import DataFactory, CalculationFactory
 from aiida.engine import run, workfunction
 from aiida.orm import Code, SinglefileData, Int, Float, Str, Bool, List, Dict, ArrayData, XyData, SinglefileData, FolderData, RemoteData
 import numpy as np
 import aiida
 import os
 from aiida.engine import submit
 from itertools import permutations
 import random
 aiida.load_profile()

Then you need to write your functions for single calculation:

def submit_single_calc(Jij1,Jij2,atom_n,ipm):
    code = Code.get_from_string('your code name')
    aiida_uppasd = CalculationFactory('UppASD_core_calculations')
    builder = aiida_uppasd.get_builder()



    #pre-prepared files folder:
    prepared_file_folder = Str(os.path.join(os.getcwd(),'HeisC_input'))
    except_filenames = List(list = [])




    # inpsd.dat file selection
    inpsd_dict = {
        'simid': Str('HeisWire'),
        'ncell': Str(f'1         1         {atom_n}'),
        'BC': Str('0         0         P '),
        'cell': Str('''1.00000 0.00000 0.00000
                0.00000 1.00000 0.00000
                0.00000 0.00000 1.00000'''),
        'do_prnstruct':      Int(1),
        'Mensemble': Int(1),
        'Initmag': Int(1),
        'ip_mode': Str(f'{ipm}'),
        'ip_nphase':Str('''2
                50 1.0e-3 1e-15 0.5
                50 0.0e-3 1e-15 0.5'''),

        'mode': Str('S'),
        'temp': Float(1.0e-3),
        'damping': Float(0.0001),
        'Nstep': Int(15000),
        'timestep': Str('1.000e-15'),
        'qpoints': Str('F'),
        'plotenergy': Int(1),
        'do_avrg': Str('Y'),
        #new added flags
        'do_tottraj':Str('Y'),
        'tottraj_step': Int(20),
    }

    exchange = {
        '1':Str(f'1 1    0.0    0.0    1.0     {Jij1}'),
        '2':Str(f'1 1    0.0    0.0    2.0     {Jij2}'),
    }





    r_l = List(list=[('*.out','.', 0)])
    #we could use this to retrived all .out file to aiida


    # set up calculation
    inpsd_dict = Dict(dict=inpsd_dict)
    exchange_dict = Dict(dict=exchange)
    builder.code = code
    builder.prepared_file_folder = prepared_file_folder
    builder.except_filenames = except_filenames
    builder.inpsd_dict = inpsd_dict
    builder.exchange = exchange_dict
    builder.retrieve_list_name = r_l
    builder.metadata.options.resources = {'num_machines': your cluster nodes,'num_mpiprocs_per_machine': your cores}
    builder.metadata.options.max_wallclock_seconds = 60*55
    builder.metadata.options.input_filename = 'inpsd.dat'
    builder.metadata.options.parser_name = 'UppASD_core_parsers'
    builder.metadata.label = 'HeisChain'
    builder.metadata.description = 'HeisChain data'
    job_node = submit(builder)
    print('Job submitted, PK: {}'.format(job_node.pk))

then you write one simple workchain here:

@workfunction
def HeisChain_auto(atom_number_list,ip_mode,J_ij_pair_list):
    for atom_n in atom_number_list:
        for ipm in ip_mode:
            for J_ij_pair in J_ij_pair_list:
                Jij1 = J_ij_pair[0]/10
                Jij2 = J_ij_pair[1]/10
                submit_single_calc(Jij1,Jij2,atom_n,ipm)


atom_number_list = List(list=[random.randrange(10, 50, 1) for i in range(10)])
ip_mode = List(list=['Y','N'])
j_seed = list(permutations([random.randrange(-10, 10, 1) for i in range(10)],2))
if (0,0) in j_seed:
    j_seed.remove((0,0))
J_ij_pair_list = List(list =j_seed)

HeisChain_auto(atom_number_list,ip_mode,J_ij_pair_list)

Then you could visualize some of your results like: