# -*- coding: utf-8 -*-
# -------------------------------------------------------------
# Bulk Configuration
# -------------------------------------------------------------

# Set up lattice
vector_a = [11.520042257734996, 0.0, 0.0]*Angstrom
vector_b = [0.0, 11.520042257734996, 0.0]*Angstrom
vector_c = [0.0, 0.0, 42.153]*Angstrom
lattice = UnitCell(vector_a, vector_b, vector_c)

# Define elements
elements = [Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon, Silicon, Silicon]

# Define coordinates
fractional_coordinates = [[ 0.166666666667,  0.            ,  0.032207672052],
                          [ 0.5           ,  0.            ,  0.032207672052],
                          [ 0.833333333333,  0.            ,  0.032207672052],
                          [ 0.166666666667,  0.333333333333,  0.032207672052],
                          [ 0.5           ,  0.333333333333,  0.032207672052],
                          [ 0.833333333333,  0.333333333333,  0.032207672052],
                          [ 0.166666666667,  0.666666666667,  0.032207672052],
                          [ 0.5           ,  0.666666666667,  0.032207672052],
                          [ 0.833333333333,  0.666666666667,  0.032207672052],
                          [ 0.166666666667,  0.166666666667,  0.064415344103],
                          [ 0.5           ,  0.166666666667,  0.064415344103],
                          [ 0.833333333333,  0.166666666667,  0.064415344103],
                          [ 0.166666666667,  0.5           ,  0.064415344103],
                          [ 0.5           ,  0.5           ,  0.064415344103],
                          [ 0.833333333333,  0.5           ,  0.064415344103],
                          [ 0.166666666667,  0.833333333333,  0.064415344103],
                          [ 0.5           ,  0.833333333333,  0.064415344103],
                          [ 0.833333333333,  0.833333333333,  0.064415344103],
                          [ 0.            ,  0.166666666667,  0.096623016155],
                          [ 0.333333333333,  0.166666666667,  0.096623016155],
                          [ 0.666666666667,  0.166666666667,  0.096623016155],
                          [ 0.            ,  0.5           ,  0.096623016155],
                          [ 0.333333333333,  0.5           ,  0.096623016155],
                          [ 0.666666666667,  0.5           ,  0.096623016155],
                          [ 0.            ,  0.833333333333,  0.096623016155],
                          [ 0.333333333333,  0.833333333333,  0.096623016155],
                          [ 0.666666666667,  0.833333333333,  0.096623016155],
                          [ 0.            ,  0.            ,  0.128830688207],
                          [ 0.333333333333,  0.            ,  0.128830688207],
                          [ 0.666666666667,  0.            ,  0.128830688207],
                          [ 0.            ,  0.333333333333,  0.128830688207],
                          [ 0.333333333333,  0.333333333333,  0.128830688207],
                          [ 0.666666666667,  0.333333333333,  0.128830688207],
                          [ 0.            ,  0.666666666667,  0.128830688207],
                          [ 0.333333333333,  0.666666666667,  0.128830688207],
                          [ 0.666666666667,  0.666666666667,  0.128830688207],
                          [ 0.166666666667,  0.            ,  0.161038360259],
                          [ 0.5           ,  0.            ,  0.161038360259],
                          [ 0.833333333333,  0.            ,  0.161038360259],
                          [ 0.166666666667,  0.333333333333,  0.161038360259],
                          [ 0.5           ,  0.333333333333,  0.161038360259],
                          [ 0.833333333333,  0.333333333333,  0.161038360259],
                          [ 0.166666666667,  0.666666666667,  0.161038360259],
                          [ 0.5           ,  0.666666666667,  0.161038360259],
                          [ 0.833333333333,  0.666666666667,  0.161038360259],
                          [ 0.166666666667,  0.166666666667,  0.193246032311],
                          [ 0.5           ,  0.166666666667,  0.193246032311],
                          [ 0.833333333333,  0.166666666667,  0.193246032311],
                          [ 0.166666666667,  0.5           ,  0.193246032311],
                          [ 0.5           ,  0.5           ,  0.193246032311],
                          [ 0.833333333333,  0.5           ,  0.193246032311],
                          [ 0.166666666667,  0.833333333333,  0.193246032311],
                          [ 0.5           ,  0.833333333333,  0.193246032311],
                          [ 0.833333333333,  0.833333333333,  0.193246032311],
                          [ 0.            ,  0.166666666667,  0.225453704362],
                          [ 0.333333333333,  0.166666666667,  0.225453704362],
                          [ 0.666666666667,  0.166666666667,  0.225453704362],
                          [ 0.            ,  0.5           ,  0.225453704362],
                          [ 0.333333333333,  0.5           ,  0.225453704362],
                          [ 0.666666666667,  0.5           ,  0.225453704362],
                          [ 0.            ,  0.833333333333,  0.225453704362],
                          [ 0.333333333333,  0.833333333333,  0.225453704362],
                          [ 0.666666666667,  0.833333333333,  0.225453704362],
                          [ 0.            ,  0.            ,  0.257661376414],
                          [ 0.333333333333,  0.            ,  0.257661376414],
                          [ 0.666666666667,  0.            ,  0.257661376414],
                          [ 0.            ,  0.333333333333,  0.257661376414],
                          [ 0.333333333333,  0.333333333333,  0.257661376414],
                          [ 0.666666666667,  0.333333333333,  0.257661376414],
                          [ 0.            ,  0.666666666667,  0.257661376414],
                          [ 0.333333333333,  0.666666666667,  0.257661376414],
                          [ 0.666666666667,  0.666666666667,  0.257661376414],
                          [ 0.166666666667,  0.            ,  0.289869048466],
                          [ 0.5           ,  0.            ,  0.289869048466],
                          [ 0.833333333333,  0.            ,  0.289869048466],
                          [ 0.166666666667,  0.333333333333,  0.289869048466],
                          [ 0.5           ,  0.333333333333,  0.289869048466],
                          [ 0.833333333333,  0.333333333333,  0.289869048466],
                          [ 0.166666666667,  0.666666666667,  0.289869048466],
                          [ 0.5           ,  0.666666666667,  0.289869048466],
                          [ 0.833333333333,  0.666666666667,  0.289869048466],
                          [ 0.166666666667,  0.166666666667,  0.322076720518],
                          [ 0.5           ,  0.166666666667,  0.322076720518],
                          [ 0.833333333333,  0.166666666667,  0.322076720518],
                          [ 0.166666666667,  0.5           ,  0.322076720518],
                          [ 0.5           ,  0.5           ,  0.322076720518],
                          [ 0.833333333333,  0.5           ,  0.322076720518],
                          [ 0.166666666667,  0.833333333333,  0.322076720518],
                          [ 0.5           ,  0.833333333333,  0.322076720518],
                          [ 0.833333333333,  0.833333333333,  0.322076720518],
                          [ 0.            ,  0.166666666667,  0.35428439257 ],
                          [ 0.333333333333,  0.166666666667,  0.35428439257 ],
                          [ 0.666666666667,  0.166666666667,  0.35428439257 ],
                          [ 0.            ,  0.5           ,  0.35428439257 ],
                          [ 0.333333333333,  0.5           ,  0.35428439257 ],
                          [ 0.666666666667,  0.5           ,  0.35428439257 ],
                          [ 0.            ,  0.833333333333,  0.35428439257 ],
                          [ 0.333333333333,  0.833333333333,  0.35428439257 ],
                          [ 0.666666666667,  0.833333333333,  0.35428439257 ],
                          [ 0.            ,  0.            ,  0.386492064622],
                          [ 0.333333333333,  0.            ,  0.386492064622],
                          [ 0.666666666667,  0.            ,  0.386492064622],
                          [ 0.            ,  0.333333333333,  0.386492064622],
                          [ 0.333333333333,  0.333333333333,  0.386492064622],
                          [ 0.666666666667,  0.333333333333,  0.386492064622],
                          [ 0.            ,  0.666666666667,  0.386492064622],
                          [ 0.333333333333,  0.666666666667,  0.386492064622],
                          [ 0.666666666667,  0.666666666667,  0.386492064622],
                          [ 0.166666666667,  0.            ,  0.418699736673],
                          [ 0.5           ,  0.            ,  0.418699736673],
                          [ 0.833333333333,  0.            ,  0.418699736673],
                          [ 0.166666666667,  0.333333333333,  0.418699736673],
                          [ 0.5           ,  0.333333333333,  0.418699736673],
                          [ 0.833333333333,  0.333333333333,  0.418699736673],
                          [ 0.166666666667,  0.666666666667,  0.418699736673],
                          [ 0.5           ,  0.666666666667,  0.418699736673],
                          [ 0.833333333333,  0.666666666667,  0.418699736673],
                          [ 0.166666666667,  0.166666666667,  0.450907408725],
                          [ 0.5           ,  0.166666666667,  0.450907408725],
                          [ 0.833333333333,  0.166666666667,  0.450907408725],
                          [ 0.166666666667,  0.5           ,  0.450907408725],
                          [ 0.5           ,  0.5           ,  0.450907408725],
                          [ 0.833333333333,  0.5           ,  0.450907408725],
                          [ 0.166666666667,  0.833333333333,  0.450907408725],
                          [ 0.5           ,  0.833333333333,  0.450907408725],
                          [ 0.833333333333,  0.833333333333,  0.450907408725],
                          [ 0.            ,  0.166666666667,  0.483115080777],
                          [ 0.333333333333,  0.166666666667,  0.483115080777],
                          [ 0.666666666667,  0.166666666667,  0.483115080777],
                          [ 0.            ,  0.5           ,  0.483115080777],
                          [ 0.333333333333,  0.5           ,  0.483115080777],
                          [ 0.666666666667,  0.5           ,  0.483115080777],
                          [ 0.            ,  0.833333333333,  0.483115080777],
                          [ 0.333333333333,  0.833333333333,  0.483115080777],
                          [ 0.666666666667,  0.833333333333,  0.483115080777],
                          [ 0.            ,  0.            ,  0.515322752829],
                          [ 0.333333333333,  0.            ,  0.515322752829],
                          [ 0.666666666667,  0.            ,  0.515322752829],
                          [ 0.            ,  0.333333333333,  0.515322752829],
                          [ 0.333333333333,  0.333333333333,  0.515322752829],
                          [ 0.666666666667,  0.333333333333,  0.515322752829],
                          [ 0.            ,  0.666666666667,  0.515322752829],
                          [ 0.333333333333,  0.666666666667,  0.515322752829],
                          [ 0.666666666667,  0.666666666667,  0.515322752829],
                          [ 0.166666666667,  0.            ,  0.547530424881],
                          [ 0.5           ,  0.            ,  0.547530424881],
                          [ 0.833333333333,  0.            ,  0.547530424881],
                          [ 0.166666666667,  0.333333333333,  0.547530424881],
                          [ 0.5           ,  0.333333333333,  0.547530424881],
                          [ 0.833333333333,  0.333333333333,  0.547530424881],
                          [ 0.166666666667,  0.666666666667,  0.547530424881],
                          [ 0.5           ,  0.666666666667,  0.547530424881],
                          [ 0.833333333333,  0.666666666667,  0.547530424881],
                          [ 0.166666666667,  0.166666666667,  0.579738096932],
                          [ 0.5           ,  0.166666666667,  0.579738096932],
                          [ 0.833333333333,  0.166666666667,  0.579738096932],
                          [ 0.166666666667,  0.5           ,  0.579738096932],
                          [ 0.5           ,  0.5           ,  0.579738096932],
                          [ 0.833333333333,  0.5           ,  0.579738096932],
                          [ 0.166666666667,  0.833333333333,  0.579738096932],
                          [ 0.5           ,  0.833333333333,  0.579738096932],
                          [ 0.833333333333,  0.833333333333,  0.579738096932],
                          [ 0.            ,  0.166666666667,  0.611945768984],
                          [ 0.333333333333,  0.166666666667,  0.611945768984],
                          [ 0.666666666667,  0.166666666667,  0.611945768984],
                          [ 0.            ,  0.5           ,  0.611945768984],
                          [ 0.333333333333,  0.5           ,  0.611945768984],
                          [ 0.666666666667,  0.5           ,  0.611945768984],
                          [ 0.            ,  0.833333333333,  0.611945768984],
                          [ 0.333333333333,  0.833333333333,  0.611945768984],
                          [ 0.666666666667,  0.833333333333,  0.611945768984],
                          [ 0.            ,  0.            ,  0.644153441036],
                          [ 0.333333333333,  0.            ,  0.644153441036],
                          [ 0.666666666667,  0.            ,  0.644153441036],
                          [ 0.            ,  0.333333333333,  0.644153441036],
                          [ 0.333333333333,  0.333333333333,  0.644153441036],
                          [ 0.666666666667,  0.333333333333,  0.644153441036],
                          [ 0.            ,  0.666666666667,  0.644153441036],
                          [ 0.333333333333,  0.666666666667,  0.644153441036],
                          [ 0.666666666667,  0.666666666667,  0.644153441036]]

# Set up configuration
bulk_configuration = BulkConfiguration(
    bravais_lattice=lattice,
    elements=elements,
    fractional_coordinates=fractional_coordinates
    )

# -------------------------------------------------------------
# Calculator
# -------------------------------------------------------------

potentialSet = ReaxFF_CHONSSiPtZrNiCuCoHeNeArKrXe_2010(strict_bondpairs = False)
calculator = TremoloXCalculator(parameters=potentialSet)
calculator.setVerletListsDelta(1.0*Angstrom)

bulk_configuration.setCalculator(calculator)
nlprint(bulk_configuration)
bulk_configuration.update()
nlsave('Silicon_Argon.hdf5', bulk_configuration)

############################################################
#     Surface Process Simulation Iteration (iteration)     #
############################################################

iteration_items = []

energies = [ 300.0,   200.0,   100.0,   50.0] * eV

angles = [ 75.0,  60.0,  45.0,  30.0] * Degrees

repeats = [1, 2, 3, 4, 5]

iteration_count = 0
for energy in energies:
    for angle in angles:
        for repeat in repeats:
            iteration_count += 1
            # -------------------------------------------------------------
            # Surface Process Simulation
            # -------------------------------------------------------------
            # Define elements
            elements = [Argon]

            # Define coordinates
            cartesian_coordinates = [[ 0.,  0.,  0.]]*Angstrom

            # Set up configuration
            molecule_configuration = MoleculeConfiguration(
                elements=elements,
                cartesian_coordinates=cartesian_coordinates
                )

            item = SurfaceProcessSimulation(
                substrate=bulk_configuration,
                filename='Silicon_Argon.hdf5',
                object_id='iteration_' + str(iteration_count),
                random_seed=randomSeed(1761268, energy, angle, repeat),
                temperature=300.0 * Kelvin,
                fixed_thickness=8.59845 * Angstrom,
                thermostat_thickness=6.4488375 * Angstrom,
                distance_above_surface=10.0 * Angstrom,
                log_interval=100,
                trajectory_interval=100,
            )

            item.addSequence(
                molecule=molecule_configuration,
                number_of_events=1,
                mean_kinetic_energy=energy,
                mean_incident_angle=angle,
                std_kinetic_energy=0.0 * eV,
                std_incident_angle=0.0 * Degrees,
                md_time=1.0 * ps,
                time_step=0.1 * fs,
                relaxation_time=5.0 * ps,
                relaxation_time_step=1.0 * fs
            )

            iteration_items.append(item)

iteration = StudyIteration(
    filename='Silicon_Argon.hdf5',
    object_id='iteration',
    studies=iteration_items,
)

iteration.update()

sputtering_yield = [item.sputteringYield() for item in iteration_items]

grid_data = GridData.fromSequence(
    values=(
        ('Sputtering yield', sputtering_yield)
    ),
    axes=(
        ('Energy', energies),
        ('Angle', angles),
        ('Repeat', repeats)
    ),
    display={
        'x': 'Energy',
        'y': 'Angle',
        'averages': ('Repeat',)
    }
)

nlsave(
    nl_object=grid_data,
    filename='Silicon_Argon.hdf5',
    object_id='iteration_measurements'
)
