# Set minimal log verbosity
setVerbosity(MinimalLog)

# %% Equilibrate Substrate

# %% substrate_configuration

# Set up lattice
vector_a = [15.360056343646662, 0.0, 0.0]*Angstrom
vector_b = [0.0, 15.360056343646662, 0.0]*Angstrom
vector_c = [0.0, 0.0, 48.0141]*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, 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.125         ,  0.            ,  0.028276068905],
                          [ 0.375         ,  0.            ,  0.028276068905],
                          [ 0.625         ,  0.            ,  0.028276068905],
                          [ 0.875         ,  0.            ,  0.028276068905],
                          [ 0.125         ,  0.25          ,  0.028276068905],
                          [ 0.375         ,  0.25          ,  0.028276068905],
                          [ 0.625         ,  0.25          ,  0.028276068905],
                          [ 0.875         ,  0.25          ,  0.028276068905],
                          [ 0.125         ,  0.5           ,  0.028276068905],
                          [ 0.375         ,  0.5           ,  0.028276068905],
                          [ 0.625         ,  0.5           ,  0.028276068905],
                          [ 0.875         ,  0.5           ,  0.028276068905],
                          [ 0.125         ,  0.75          ,  0.028276068905],
                          [ 0.375         ,  0.75          ,  0.028276068905],
                          [ 0.625         ,  0.75          ,  0.028276068905],
                          [ 0.875         ,  0.75          ,  0.028276068905],
                          [ 0.125         ,  0.125         ,  0.056552137809],
                          [ 0.375         ,  0.125         ,  0.056552137809],
                          [ 0.625         ,  0.125         ,  0.056552137809],
                          [ 0.875         ,  0.125         ,  0.056552137809],
                          [ 0.125         ,  0.375         ,  0.056552137809],
                          [ 0.375         ,  0.375         ,  0.056552137809],
                          [ 0.625         ,  0.375         ,  0.056552137809],
                          [ 0.875         ,  0.375         ,  0.056552137809],
                          [ 0.125         ,  0.625         ,  0.056552137809],
                          [ 0.375         ,  0.625         ,  0.056552137809],
                          [ 0.625         ,  0.625         ,  0.056552137809],
                          [ 0.875         ,  0.625         ,  0.056552137809],
                          [ 0.125         ,  0.875         ,  0.056552137809],
                          [ 0.375         ,  0.875         ,  0.056552137809],
                          [ 0.625         ,  0.875         ,  0.056552137809],
                          [ 0.875         ,  0.875         ,  0.056552137809],
                          [ 0.            ,  0.125         ,  0.084828206714],
                          [ 0.25          ,  0.125         ,  0.084828206714],
                          [ 0.5           ,  0.125         ,  0.084828206714],
                          [ 0.75          ,  0.125         ,  0.084828206714],
                          [ 0.            ,  0.375         ,  0.084828206714],
                          [ 0.25          ,  0.375         ,  0.084828206714],
                          [ 0.5           ,  0.375         ,  0.084828206714],
                          [ 0.75          ,  0.375         ,  0.084828206714],
                          [ 0.            ,  0.625         ,  0.084828206714],
                          [ 0.25          ,  0.625         ,  0.084828206714],
                          [ 0.5           ,  0.625         ,  0.084828206714],
                          [ 0.75          ,  0.625         ,  0.084828206714],
                          [ 0.            ,  0.875         ,  0.084828206714],
                          [ 0.25          ,  0.875         ,  0.084828206714],
                          [ 0.5           ,  0.875         ,  0.084828206714],
                          [ 0.75          ,  0.875         ,  0.084828206714],
                          [ 0.            ,  0.            ,  0.113104275619],
                          [ 0.25          ,  0.            ,  0.113104275619],
                          [ 0.5           ,  0.            ,  0.113104275619],
                          [ 0.75          ,  0.            ,  0.113104275619],
                          [ 0.            ,  0.25          ,  0.113104275619],
                          [ 0.25          ,  0.25          ,  0.113104275619],
                          [ 0.5           ,  0.25          ,  0.113104275619],
                          [ 0.75          ,  0.25          ,  0.113104275619],
                          [ 0.            ,  0.5           ,  0.113104275619],
                          [ 0.25          ,  0.5           ,  0.113104275619],
                          [ 0.5           ,  0.5           ,  0.113104275619],
                          [ 0.75          ,  0.5           ,  0.113104275619],
                          [ 0.            ,  0.75          ,  0.113104275619],
                          [ 0.25          ,  0.75          ,  0.113104275619],
                          [ 0.5           ,  0.75          ,  0.113104275619],
                          [ 0.75          ,  0.75          ,  0.113104275619],
                          [ 0.125         ,  0.            ,  0.141380344524],
                          [ 0.375         ,  0.            ,  0.141380344524],
                          [ 0.625         ,  0.            ,  0.141380344524],
                          [ 0.875         ,  0.            ,  0.141380344524],
                          [ 0.125         ,  0.25          ,  0.141380344524],
                          [ 0.375         ,  0.25          ,  0.141380344524],
                          [ 0.625         ,  0.25          ,  0.141380344524],
                          [ 0.875         ,  0.25          ,  0.141380344524],
                          [ 0.125         ,  0.5           ,  0.141380344524],
                          [ 0.375         ,  0.5           ,  0.141380344524],
                          [ 0.625         ,  0.5           ,  0.141380344524],
                          [ 0.875         ,  0.5           ,  0.141380344524],
                          [ 0.125         ,  0.75          ,  0.141380344524],
                          [ 0.375         ,  0.75          ,  0.141380344524],
                          [ 0.625         ,  0.75          ,  0.141380344524],
                          [ 0.875         ,  0.75          ,  0.141380344524],
                          [ 0.125         ,  0.125         ,  0.169656413428],
                          [ 0.375         ,  0.125         ,  0.169656413428],
                          [ 0.625         ,  0.125         ,  0.169656413428],
                          [ 0.875         ,  0.125         ,  0.169656413428],
                          [ 0.125         ,  0.375         ,  0.169656413428],
                          [ 0.375         ,  0.375         ,  0.169656413428],
                          [ 0.625         ,  0.375         ,  0.169656413428],
                          [ 0.875         ,  0.375         ,  0.169656413428],
                          [ 0.125         ,  0.625         ,  0.169656413428],
                          [ 0.375         ,  0.625         ,  0.169656413428],
                          [ 0.625         ,  0.625         ,  0.169656413428],
                          [ 0.875         ,  0.625         ,  0.169656413428],
                          [ 0.125         ,  0.875         ,  0.169656413428],
                          [ 0.375         ,  0.875         ,  0.169656413428],
                          [ 0.625         ,  0.875         ,  0.169656413428],
                          [ 0.875         ,  0.875         ,  0.169656413428],
                          [ 0.            ,  0.125         ,  0.197932482333],
                          [ 0.25          ,  0.125         ,  0.197932482333],
                          [ 0.5           ,  0.125         ,  0.197932482333],
                          [ 0.75          ,  0.125         ,  0.197932482333],
                          [ 0.            ,  0.375         ,  0.197932482333],
                          [ 0.25          ,  0.375         ,  0.197932482333],
                          [ 0.5           ,  0.375         ,  0.197932482333],
                          [ 0.75          ,  0.375         ,  0.197932482333],
                          [ 0.            ,  0.625         ,  0.197932482333],
                          [ 0.25          ,  0.625         ,  0.197932482333],
                          [ 0.5           ,  0.625         ,  0.197932482333],
                          [ 0.75          ,  0.625         ,  0.197932482333],
                          [ 0.            ,  0.875         ,  0.197932482333],
                          [ 0.25          ,  0.875         ,  0.197932482333],
                          [ 0.5           ,  0.875         ,  0.197932482333],
                          [ 0.75          ,  0.875         ,  0.197932482333],
                          [ 0.            ,  0.            ,  0.226208551238],
                          [ 0.25          ,  0.            ,  0.226208551238],
                          [ 0.5           ,  0.            ,  0.226208551238],
                          [ 0.75          ,  0.            ,  0.226208551238],
                          [ 0.            ,  0.25          ,  0.226208551238],
                          [ 0.25          ,  0.25          ,  0.226208551238],
                          [ 0.5           ,  0.25          ,  0.226208551238],
                          [ 0.75          ,  0.25          ,  0.226208551238],
                          [ 0.            ,  0.5           ,  0.226208551238],
                          [ 0.25          ,  0.5           ,  0.226208551238],
                          [ 0.5           ,  0.5           ,  0.226208551238],
                          [ 0.75          ,  0.5           ,  0.226208551238],
                          [ 0.            ,  0.75          ,  0.226208551238],
                          [ 0.25          ,  0.75          ,  0.226208551238],
                          [ 0.5           ,  0.75          ,  0.226208551238],
                          [ 0.75          ,  0.75          ,  0.226208551238],
                          [ 0.125         ,  0.            ,  0.254484620143],
                          [ 0.375         ,  0.            ,  0.254484620143],
                          [ 0.625         ,  0.            ,  0.254484620143],
                          [ 0.875         ,  0.            ,  0.254484620143],
                          [ 0.125         ,  0.25          ,  0.254484620143],
                          [ 0.375         ,  0.25          ,  0.254484620143],
                          [ 0.625         ,  0.25          ,  0.254484620143],
                          [ 0.875         ,  0.25          ,  0.254484620143],
                          [ 0.125         ,  0.5           ,  0.254484620143],
                          [ 0.375         ,  0.5           ,  0.254484620143],
                          [ 0.625         ,  0.5           ,  0.254484620143],
                          [ 0.875         ,  0.5           ,  0.254484620143],
                          [ 0.125         ,  0.75          ,  0.254484620143],
                          [ 0.375         ,  0.75          ,  0.254484620143],
                          [ 0.625         ,  0.75          ,  0.254484620143],
                          [ 0.875         ,  0.75          ,  0.254484620143],
                          [ 0.125         ,  0.125         ,  0.282760689047],
                          [ 0.375         ,  0.125         ,  0.282760689047],
                          [ 0.625         ,  0.125         ,  0.282760689047],
                          [ 0.875         ,  0.125         ,  0.282760689047],
                          [ 0.125         ,  0.375         ,  0.282760689047],
                          [ 0.375         ,  0.375         ,  0.282760689047],
                          [ 0.625         ,  0.375         ,  0.282760689047],
                          [ 0.875         ,  0.375         ,  0.282760689047],
                          [ 0.125         ,  0.625         ,  0.282760689047],
                          [ 0.375         ,  0.625         ,  0.282760689047],
                          [ 0.625         ,  0.625         ,  0.282760689047],
                          [ 0.875         ,  0.625         ,  0.282760689047],
                          [ 0.125         ,  0.875         ,  0.282760689047],
                          [ 0.375         ,  0.875         ,  0.282760689047],
                          [ 0.625         ,  0.875         ,  0.282760689047],
                          [ 0.875         ,  0.875         ,  0.282760689047],
                          [ 0.            ,  0.125         ,  0.311036757952],
                          [ 0.25          ,  0.125         ,  0.311036757952],
                          [ 0.5           ,  0.125         ,  0.311036757952],
                          [ 0.75          ,  0.125         ,  0.311036757952],
                          [ 0.            ,  0.375         ,  0.311036757952],
                          [ 0.25          ,  0.375         ,  0.311036757952],
                          [ 0.5           ,  0.375         ,  0.311036757952],
                          [ 0.75          ,  0.375         ,  0.311036757952],
                          [ 0.            ,  0.625         ,  0.311036757952],
                          [ 0.25          ,  0.625         ,  0.311036757952],
                          [ 0.5           ,  0.625         ,  0.311036757952],
                          [ 0.75          ,  0.625         ,  0.311036757952],
                          [ 0.            ,  0.875         ,  0.311036757952],
                          [ 0.25          ,  0.875         ,  0.311036757952],
                          [ 0.5           ,  0.875         ,  0.311036757952],
                          [ 0.75          ,  0.875         ,  0.311036757952],
                          [ 0.            ,  0.            ,  0.339312826857],
                          [ 0.25          ,  0.            ,  0.339312826857],
                          [ 0.5           ,  0.            ,  0.339312826857],
                          [ 0.75          ,  0.            ,  0.339312826857],
                          [ 0.            ,  0.25          ,  0.339312826857],
                          [ 0.25          ,  0.25          ,  0.339312826857],
                          [ 0.5           ,  0.25          ,  0.339312826857],
                          [ 0.75          ,  0.25          ,  0.339312826857],
                          [ 0.            ,  0.5           ,  0.339312826857],
                          [ 0.25          ,  0.5           ,  0.339312826857],
                          [ 0.5           ,  0.5           ,  0.339312826857],
                          [ 0.75          ,  0.5           ,  0.339312826857],
                          [ 0.            ,  0.75          ,  0.339312826857],
                          [ 0.25          ,  0.75          ,  0.339312826857],
                          [ 0.5           ,  0.75          ,  0.339312826857],
                          [ 0.75          ,  0.75          ,  0.339312826857],
                          [ 0.125         ,  0.            ,  0.367588895762],
                          [ 0.375         ,  0.            ,  0.367588895762],
                          [ 0.625         ,  0.            ,  0.367588895762],
                          [ 0.875         ,  0.            ,  0.367588895762],
                          [ 0.125         ,  0.25          ,  0.367588895762],
                          [ 0.375         ,  0.25          ,  0.367588895762],
                          [ 0.625         ,  0.25          ,  0.367588895762],
                          [ 0.875         ,  0.25          ,  0.367588895762],
                          [ 0.125         ,  0.5           ,  0.367588895762],
                          [ 0.375         ,  0.5           ,  0.367588895762],
                          [ 0.625         ,  0.5           ,  0.367588895762],
                          [ 0.875         ,  0.5           ,  0.367588895762],
                          [ 0.125         ,  0.75          ,  0.367588895762],
                          [ 0.375         ,  0.75          ,  0.367588895762],
                          [ 0.625         ,  0.75          ,  0.367588895762],
                          [ 0.875         ,  0.75          ,  0.367588895762],
                          [ 0.125         ,  0.125         ,  0.395864964666],
                          [ 0.375         ,  0.125         ,  0.395864964666],
                          [ 0.625         ,  0.125         ,  0.395864964666],
                          [ 0.875         ,  0.125         ,  0.395864964666],
                          [ 0.125         ,  0.375         ,  0.395864964666],
                          [ 0.375         ,  0.375         ,  0.395864964666],
                          [ 0.625         ,  0.375         ,  0.395864964666],
                          [ 0.875         ,  0.375         ,  0.395864964666],
                          [ 0.125         ,  0.625         ,  0.395864964666],
                          [ 0.375         ,  0.625         ,  0.395864964666],
                          [ 0.625         ,  0.625         ,  0.395864964666],
                          [ 0.875         ,  0.625         ,  0.395864964666],
                          [ 0.125         ,  0.875         ,  0.395864964666],
                          [ 0.375         ,  0.875         ,  0.395864964666],
                          [ 0.625         ,  0.875         ,  0.395864964666],
                          [ 0.875         ,  0.875         ,  0.395864964666],
                          [ 0.            ,  0.125         ,  0.424141033571],
                          [ 0.25          ,  0.125         ,  0.424141033571],
                          [ 0.5           ,  0.125         ,  0.424141033571],
                          [ 0.75          ,  0.125         ,  0.424141033571],
                          [ 0.            ,  0.375         ,  0.424141033571],
                          [ 0.25          ,  0.375         ,  0.424141033571],
                          [ 0.5           ,  0.375         ,  0.424141033571],
                          [ 0.75          ,  0.375         ,  0.424141033571],
                          [ 0.            ,  0.625         ,  0.424141033571],
                          [ 0.25          ,  0.625         ,  0.424141033571],
                          [ 0.5           ,  0.625         ,  0.424141033571],
                          [ 0.75          ,  0.625         ,  0.424141033571],
                          [ 0.            ,  0.875         ,  0.424141033571],
                          [ 0.25          ,  0.875         ,  0.424141033571],
                          [ 0.5           ,  0.875         ,  0.424141033571],
                          [ 0.75          ,  0.875         ,  0.424141033571],
                          [ 0.039062356711,  0.            ,  0.452417102476],
                          [ 0.182634258774,  0.            ,  0.443362646845],
                          [ 0.539062356711,  0.            ,  0.452417102476],
                          [ 0.682634258774,  0.            ,  0.443362646845],
                          [ 0.039062356711,  0.25          ,  0.452417102476],
                          [ 0.182634258774,  0.25          ,  0.443362646845],
                          [ 0.539062356711,  0.25          ,  0.452417102476],
                          [ 0.682634258774,  0.25          ,  0.443362646845],
                          [ 0.039062356711,  0.5           ,  0.452417102476],
                          [ 0.182634258774,  0.5           ,  0.443362646845],
                          [ 0.539062356711,  0.5           ,  0.452417102476],
                          [ 0.682634258774,  0.5           ,  0.443362646845],
                          [ 0.039062356711,  0.75          ,  0.452417102476],
                          [ 0.182634258774,  0.75          ,  0.443362646845],
                          [ 0.539062356711,  0.75          ,  0.452417102476],
                          [ 0.682634258774,  0.75          ,  0.443362646845]]

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

# Add tags
substrate_configuration.addTags('bulk', [ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12,
                                         13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
                                         26, 27, 28, 29, 30, 31])

substrate_configuration_name = "substrate_configuration"


# %% Set ForceFieldCalculator

# %% ForceFieldCalculator

potentialSet = TremoloXPotentialSet(name='TersoffBrenner_ClFSi_2003+Moliere')
potentialSet.addParticleType(
    ParticleType(
        symbol='Si',
        mass=28.0855 * atomicMassUnit,
        charge=None,
        sigma=3.82640999441 * Angstrom,
        sigma14=3.82640999441 * Angstrom,
        epsilon=0.402 * kiloCaloriePerMole,
        epsilon14=0.402 * kiloCaloriePerMole,
        atomicNumber=14,
        tags=[],
    )
)
potentialSet.addParticleType(
    ParticleType(
        symbol='Cl',
        mass=35.453 * atomicMassUnit,
        charge=None,
        sigma=3.5163772405 * Angstrom,
        sigma14=3.5163772405 * Angstrom,
        epsilon=0.227 * kiloCaloriePerMole,
        epsilon14=0.227 * kiloCaloriePerMole,
        atomicNumber=17,
        tags=[],
    )
)
potentialSet.addParticleType(
    ParticleType(
        symbol='F',
        mass=1.0 * atomicMassUnit,
        charge=None,
        sigma=None,
        sigma14=None,
        epsilon=None,
        epsilon14=None,
        atomicNumber=None,
        tags=[],
    )
)
potentialSet.addParticleType(
    ParticleType(
        symbol='Ar',
        mass=39.948 * atomicMassUnit,
        charge=None,
        sigma=None,
        sigma14=None,
        epsilon=None,
        epsilon14=None,
        atomicNumber=18,
        tags=[],
    )
)


_potential = TersoffBrennerPairPotential(
    particleType1=ParticleIdentifier('Si', []),
    particleType2=ParticleIdentifier('Si', []),
    A=1830.8 * eV,
    B=471.18 * eV,
    l=2.4799 * 1 / Angstrom,
    mu=1.7322 * 1 / Angstrom,
    Re=2.35 * Angstrom,
    R1=2.7 * Angstrom,
    R2=3.0 * Angstrom,
    fType='HumbridGraves',
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerPairPotential(
    particleType1=ParticleIdentifier('Si', []),
    particleType2=ParticleIdentifier('F', []),
    A=1046.953 * eV,
    B=155.9846 * eV,
    l=3.2447 * 1 / Angstrom,
    mu=1.6223 * 1 / Angstrom,
    Re=1.6008 * Angstrom,
    R1=1.83922 * Angstrom,
    R2=2.13922 * Angstrom,
    fType='HumbridGraves',
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerPairPotential(
    particleType1=ParticleIdentifier('F', []),
    particleType2=ParticleIdentifier('F', []),
    A=6379.15 * eV,
    B=2813.8185 * eV,
    l=4.6407 * 1 / Angstrom,
    mu=3.9462 * 1 / Angstrom,
    Re=1.4119 * Angstrom,
    R1=1.7 * Angstrom,
    R2=2.0 * Angstrom,
    fType='HumbridGraves',
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerPairPotential(
    particleType1=ParticleIdentifier('Si', []),
    particleType2=ParticleIdentifier('Cl', []),
    A=1234.01 * eV,
    B=142.6061 * eV,
    l=2.8229 * 1 / Angstrom,
    mu=1.4114 * 1 / Angstrom,
    Re=2.019 * Angstrom,
    R1=2.32 * Angstrom,
    R2=2.62 * Angstrom,
    fType='HumbridGraves',
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerPairPotential(
    particleType1=ParticleIdentifier('Cl', []),
    particleType2=ParticleIdentifier('Cl', []),
    A=7248.247 * eV,
    B=269.7098 * eV,
    l=4.0088 * 1 / Angstrom,
    mu=2.0044 * 1 / Angstrom,
    Re=1.9878 * Angstrom,
    R1=2.284 * Angstrom,
    R2=2.584 * Angstrom,
    fType='HumbridGraves',
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerBOPairPotential(
    particleType1=ParticleIdentifier('Si', []),
    particleType2=ParticleIdentifier('Si', []),
    delta=0.63505,
    eta=0.78734,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerBOPairPotential(
    particleType1=ParticleIdentifier('Si', []),
    particleType2=ParticleIdentifier('F', []),
    delta=0.80469,
    eta=1.0,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerBOPairPotential(
    particleType1=ParticleIdentifier('Si', []),
    particleType2=ParticleIdentifier('Cl', []),
    delta=0.80469,
    eta=1.0,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerBOPairPotential(
    particleType1=ParticleIdentifier('F', []),
    particleType2=ParticleIdentifier('Si', []),
    delta=0.5,
    eta=1.0,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerBOPairPotential(
    particleType1=ParticleIdentifier('F', []),
    particleType2=ParticleIdentifier('F', []),
    delta=0.5,
    eta=1.0,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerBOPairPotential(
    particleType1=ParticleIdentifier('F', []),
    particleType2=ParticleIdentifier('Cl', []),
    delta=0.5,
    eta=1.0,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerBOPairPotential(
    particleType1=ParticleIdentifier('Cl', []),
    particleType2=ParticleIdentifier('Si', []),
    delta=0.5,
    eta=1.0,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerBOPairPotential(
    particleType1=ParticleIdentifier('Cl', []),
    particleType2=ParticleIdentifier('Cl', []),
    delta=0.5,
    eta=1.0,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerBOPairPotential(
    particleType1=ParticleIdentifier('Cl', []),
    particleType2=ParticleIdentifier('F', []),
    delta=0.5,
    eta=1.0,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerTriplePotential(
    particleType1=ParticleIdentifier('Si', []),
    particleType2=ParticleIdentifier('Si', []),
    particleType3=ParticleIdentifier('Si', []),
    beta=3,
    alpha=5.197495 * 1 / Angstrom**3,
    g_c=0.0,
    g_d=0.16,
    g_h=-0.59826,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerTriplePotential(
    particleType1=ParticleIdentifier('Si', []),
    particleType2=ParticleIdentifier('Si', []),
    particleType3=ParticleIdentifier('F', []),
    beta=3,
    alpha=5.197495 * 1 / Angstrom**3,
    g_c=0.0,
    g_d=0.16,
    g_h=-0.59826,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerTriplePotential(
    particleType1=ParticleIdentifier('Si', []),
    particleType2=ParticleIdentifier('Si', []),
    particleType3=ParticleIdentifier('Cl', []),
    beta=3,
    alpha=5.197495 * 1 / Angstrom**3,
    g_c=0.0,
    g_d=0.16,
    g_h=-0.59826,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerTriplePotential(
    particleType1=ParticleIdentifier('Si', []),
    particleType2=ParticleIdentifier('F', []),
    particleType3=ParticleIdentifier('Si', []),
    beta=3,
    alpha=4.0 * 1 / Angstrom**3,
    g_c=0.0216,
    g_d=0.27,
    g_h=-0.47,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerTriplePotential(
    particleType1=ParticleIdentifier('Si', []),
    particleType2=ParticleIdentifier('F', []),
    particleType3=ParticleIdentifier('F', []),
    beta=3,
    alpha=4.0 * 1 / Angstrom**3,
    g_c=0.0216,
    g_d=0.27,
    g_h=-0.47,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerTriplePotential(
    particleType1=ParticleIdentifier('Si', []),
    particleType2=ParticleIdentifier('F', []),
    particleType3=ParticleIdentifier('Cl', []),
    beta=3,
    alpha=4.0 * 1 / Angstrom**3,
    g_c=0.0216,
    g_d=0.27,
    g_h=-0.47,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerTriplePotential(
    particleType1=ParticleIdentifier('Si', []),
    particleType2=ParticleIdentifier('Cl', []),
    particleType3=ParticleIdentifier('Si', []),
    beta=3,
    alpha=4.0 * 1 / Angstrom**3,
    g_c=0.0216,
    g_d=0.27,
    g_h=-0.47,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerTriplePotential(
    particleType1=ParticleIdentifier('Si', []),
    particleType2=ParticleIdentifier('Cl', []),
    particleType3=ParticleIdentifier('F', []),
    beta=3,
    alpha=4.0 * 1 / Angstrom**3,
    g_c=0.0216,
    g_d=0.27,
    g_h=-0.47,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerTriplePotential(
    particleType1=ParticleIdentifier('Si', []),
    particleType2=ParticleIdentifier('Cl', []),
    particleType3=ParticleIdentifier('Cl', []),
    beta=3,
    alpha=4.0 * 1 / Angstrom**3,
    g_c=0.0216,
    g_d=0.27,
    g_h=-0.47,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerTriplePotential(
    particleType1=ParticleIdentifier('F', []),
    particleType2=ParticleIdentifier('Si', []),
    particleType3=ParticleIdentifier('Si', []),
    beta=1,
    alpha=6.0 * 1 / Angstrom,
    g_c=14.0,
    g_d=0.0,
    g_h=0.0,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerTriplePotential(
    particleType1=ParticleIdentifier('F', []),
    particleType2=ParticleIdentifier('Si', []),
    particleType3=ParticleIdentifier('F', []),
    beta=1,
    alpha=6.0 * 1 / Angstrom,
    g_c=14.0,
    g_d=0.0,
    g_h=0.0,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerTriplePotential(
    particleType1=ParticleIdentifier('F', []),
    particleType2=ParticleIdentifier('Si', []),
    particleType3=ParticleIdentifier('Cl', []),
    beta=1,
    alpha=6.0 * 1 / Angstrom,
    g_c=14.0,
    g_d=0.0,
    g_h=0.0,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerTriplePotential(
    particleType1=ParticleIdentifier('F', []),
    particleType2=ParticleIdentifier('F', []),
    particleType3=ParticleIdentifier('Si', []),
    beta=1,
    alpha=6.0 * 1 / Angstrom,
    g_c=14.0,
    g_d=0.0,
    g_h=0.0,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerTriplePotential(
    particleType1=ParticleIdentifier('F', []),
    particleType2=ParticleIdentifier('F', []),
    particleType3=ParticleIdentifier('F', []),
    beta=1,
    alpha=6.0 * 1 / Angstrom,
    g_c=14.0,
    g_d=0.0,
    g_h=0.0,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerTriplePotential(
    particleType1=ParticleIdentifier('F', []),
    particleType2=ParticleIdentifier('F', []),
    particleType3=ParticleIdentifier('Cl', []),
    beta=1,
    alpha=6.0 * 1 / Angstrom,
    g_c=14.0,
    g_d=0.0,
    g_h=0.0,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerTriplePotential(
    particleType1=ParticleIdentifier('F', []),
    particleType2=ParticleIdentifier('Cl', []),
    particleType3=ParticleIdentifier('Si', []),
    beta=1,
    alpha=6.0 * 1 / Angstrom,
    g_c=14.0,
    g_d=0.0,
    g_h=0.0,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerTriplePotential(
    particleType1=ParticleIdentifier('F', []),
    particleType2=ParticleIdentifier('Cl', []),
    particleType3=ParticleIdentifier('F', []),
    beta=1,
    alpha=6.0 * 1 / Angstrom,
    g_c=14.0,
    g_d=0.0,
    g_h=0.0,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerTriplePotential(
    particleType1=ParticleIdentifier('F', []),
    particleType2=ParticleIdentifier('Cl', []),
    particleType3=ParticleIdentifier('Cl', []),
    beta=1,
    alpha=6.0 * 1 / Angstrom,
    g_c=14.0,
    g_d=0.0,
    g_h=0.0,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerTriplePotential(
    particleType1=ParticleIdentifier('Cl', []),
    particleType2=ParticleIdentifier('Si', []),
    particleType3=ParticleIdentifier('Si', []),
    beta=1,
    alpha=6.0 * 1 / Angstrom,
    g_c=14.0,
    g_d=0.0,
    g_h=0.0,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerTriplePotential(
    particleType1=ParticleIdentifier('Cl', []),
    particleType2=ParticleIdentifier('Si', []),
    particleType3=ParticleIdentifier('F', []),
    beta=1,
    alpha=6.0 * 1 / Angstrom,
    g_c=14.0,
    g_d=0.0,
    g_h=0.0,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerTriplePotential(
    particleType1=ParticleIdentifier('Cl', []),
    particleType2=ParticleIdentifier('Si', []),
    particleType3=ParticleIdentifier('Cl', []),
    beta=1,
    alpha=6.0 * 1 / Angstrom,
    g_c=14.0,
    g_d=0.0,
    g_h=0.0,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerTriplePotential(
    particleType1=ParticleIdentifier('Cl', []),
    particleType2=ParticleIdentifier('F', []),
    particleType3=ParticleIdentifier('Si', []),
    beta=1,
    alpha=6.0 * 1 / Angstrom,
    g_c=14.0,
    g_d=0.0,
    g_h=0.0,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerTriplePotential(
    particleType1=ParticleIdentifier('Cl', []),
    particleType2=ParticleIdentifier('F', []),
    particleType3=ParticleIdentifier('F', []),
    beta=1,
    alpha=6.0 * 1 / Angstrom,
    g_c=14.0,
    g_d=0.0,
    g_h=0.0,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerTriplePotential(
    particleType1=ParticleIdentifier('Cl', []),
    particleType2=ParticleIdentifier('F', []),
    particleType3=ParticleIdentifier('Cl', []),
    beta=1,
    alpha=6.0 * 1 / Angstrom,
    g_c=14.0,
    g_d=0.0,
    g_h=0.0,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerTriplePotential(
    particleType1=ParticleIdentifier('Cl', []),
    particleType2=ParticleIdentifier('Cl', []),
    particleType3=ParticleIdentifier('Si', []),
    beta=1,
    alpha=6.0 * 1 / Angstrom,
    g_c=14.0,
    g_d=0.0,
    g_h=0.0,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerTriplePotential(
    particleType1=ParticleIdentifier('Cl', []),
    particleType2=ParticleIdentifier('Cl', []),
    particleType3=ParticleIdentifier('F', []),
    beta=1,
    alpha=6.0 * 1 / Angstrom,
    g_c=14.0,
    g_d=0.0,
    g_h=0.0,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerTriplePotential(
    particleType1=ParticleIdentifier('Cl', []),
    particleType2=ParticleIdentifier('Cl', []),
    particleType3=ParticleIdentifier('Cl', []),
    beta=1,
    alpha=6.0 * 1 / Angstrom,
    g_c=14.0,
    g_d=0.0,
    g_h=0.0,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerMolierePotential(
    particleType1=ParticleIdentifier('Si', []),
    particleType2=ParticleIdentifier('Si', []),
    a=-7.155376 * 1 / Angstrom,
    b=9.502208,
    c=237.361562 * eV,
    d=1.0 * eV,
    f=0.122464808658 * Angstrom,
    c1=0.35,
    c2=0.55,
    c3=0.1,
    c4=0.0,
    d1=0.1,
    d2=1.2,
    d3=6.0,
    d4=0.0,
    Zi=14.0 * elementaryCharge,
    Zj=14.0 * elementaryCharge,
    s=296.792932 * eV,
    ra=0.286968 * Angstrom,
    rb=0.65522 * Angstrom,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerMolierePotential(
    particleType1=ParticleIdentifier('F', []),
    particleType2=ParticleIdentifier('F', []),
    a=-3.811346 * 1 / Angstrom,
    b=8.416768,
    c=-67.291591 * eV,
    d=1.0 * eV,
    f=0.141896979319 * Angstrom,
    c1=0.35,
    c2=0.55,
    c3=0.1,
    c4=0.0,
    d1=0.1,
    d2=1.2,
    d3=6.0,
    d4=0.0,
    Zi=9.0 * elementaryCharge,
    Zj=9.0 * elementaryCharge,
    s=642.521743 * eV,
    ra=0.286968 * Angstrom,
    rb=0.65522 * Angstrom,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerMolierePotential(
    particleType1=ParticleIdentifier('Si', []),
    particleType2=ParticleIdentifier('F', []),
    a=-6.966201045 * 1 / Angstrom,
    b=9.057239273,
    c=42.67175229 * eV,
    d=1.0 * eV,
    f=0.131289360256 * Angstrom,
    c1=0.35,
    c2=0.55,
    c3=0.1,
    c4=0.0,
    d1=0.1,
    d2=1.2,
    d3=6.0,
    d4=0.0,
    Zi=14.0 * elementaryCharge,
    Zj=9.0 * elementaryCharge,
    s=55.11209444 * eV,
    ra=0.3 * Angstrom,
    rb=0.8 * Angstrom,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerMolierePotential(
    particleType1=ParticleIdentifier('Si', []),
    particleType2=ParticleIdentifier('Cl', []),
    a=-7.108443546 * 1 / Angstrom,
    b=9.622960686,
    c=77.76670812 * eV,
    d=1.0 * eV,
    f=0.118472319189 * Angstrom,
    c1=0.35,
    c2=0.55,
    c3=0.1,
    c4=0.0,
    d1=0.1,
    d2=1.2,
    d3=6.0,
    d4=0.0,
    Zi=14.0 * elementaryCharge,
    Zj=17.0 * elementaryCharge,
    s=106.164425 * eV,
    ra=0.3 * Angstrom,
    rb=0.8 * Angstrom,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerMolierePotential(
    particleType1=ParticleIdentifier('Cl', []),
    particleType2=ParticleIdentifier('Cl', []),
    a=-5.093518 * 1 / Angstrom,
    b=9.51683,
    c=62.482094 * eV,
    d=1.0 * eV,
    f=0.114790076782 * Angstrom,
    c1=0.35,
    c2=0.55,
    c3=0.1,
    c4=0.0,
    d1=0.1,
    d2=1.2,
    d3=6.0,
    d4=0.0,
    Zi=17.0 * elementaryCharge,
    Zj=17.0 * elementaryCharge,
    s=948.058599 * eV,
    ra=0.3 * Angstrom,
    rb=0.8 * Angstrom,
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerSplinePotential(
    particleType1=ParticleIdentifier('Si', []),
    particleType2=ParticleIdentifier('F', []),
    activeTypes1=[
        ParticleIdentifier('F', []),
    ],
    activeTypes2=[
        ParticleIdentifier('Si', []),
    ],
    x=numpy.array([0, 1, 2, 3, 4, 5]),
    y=numpy.array([0, 1, 2, 3, 4, 5]),
    f=numpy.array(
        [
            [0.0, 0.0, 0.085, -0.12, 0.0, 0.0],
            [-0.1755, 0.0, -0.09, 0.0, 0.0, 0.0],
            [0.496, -0.07, 0.0, 0.0, 0.0, 0.0],
            [-0.181, 0.0, 0.0, 0.0, 0.0, 0.0],
            [0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
            [0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
        ]
    ),
)
potentialSet.addPotential(_potential)
_potential = TersoffBrennerSplinePotential(
    particleType1=ParticleIdentifier('Si', []),
    particleType2=ParticleIdentifier('Cl', []),
    activeTypes1=[
        ParticleIdentifier('Cl', []),
    ],
    activeTypes2=[
        ParticleIdentifier('Si', []),
    ],
    x=numpy.array([0, 1, 2, 3, 4, 5]),
    y=numpy.array([0, 1, 2, 3, 4, 5]),
    f=numpy.array(
        [
            [0.0, 0.0, -0.05, -0.11, 0.0, 0.0],
            [-0.088, 0.0, -0.06, 0.0, 0.0, 0.0],
            [1.09, 0.015, 0.0, 0.0, 0.0, 0.0],
            [-0.068, 0.0, 0.0, 0.0, 0.0, 0.0],
            [0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
            [0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
        ]
    ),
)
potentialSet.addPotential(_potential)
_potential = MolierePotential(
    particleType1=ParticleIdentifier('Ar', []),
    particleType2=ParticleIdentifier('Si', []),
    f=0.117286895064 * Angstrom,
    c1=0.35,
    c2=0.55,
    c3=0.1,
    c4=0.0,
    d1=0.1,
    d2=1.2,
    d3=6.0,
    d4=0.0,
    Zi=18.0 * elementaryCharge,
    Zj=14.0 * elementaryCharge,
    s=0.0 * eV,
    r_i=5.0 * Angstrom,
    r_cut=7.5 * Angstrom,
)
potentialSet.addPotential(_potential)
_potential = MolierePotential(
    particleType1=ParticleIdentifier('Ar', []),
    particleType2=ParticleIdentifier('Cl', []),
    f=0.113693994066 * Angstrom,
    c1=0.35,
    c2=0.55,
    c3=0.1,
    c4=0.0,
    d1=0.1,
    d2=1.2,
    d3=6.0,
    d4=0.0,
    Zi=18.0 * elementaryCharge,
    Zj=17.0 * elementaryCharge,
    s=0.0 * eV,
    r_i=5.0 * Angstrom,
    r_cut=7.5 * Angstrom,
)
potentialSet.addPotential(_potential)
_potential = MolierePotential(
    particleType1=ParticleIdentifier('Ar', []),
    particleType2=ParticleIdentifier('Ar', []),
    f=0.112623707121 * Angstrom,
    c1=0.35,
    c2=0.55,
    c3=0.1,
    c4=0.0,
    d1=0.1,
    d2=1.2,
    d3=6.0,
    d4=0.0,
    Zi=18.0 * elementaryCharge,
    Zj=18.0 * elementaryCharge,
    s=0.0 * eV,
    r_i=5.0 * Angstrom,
    r_cut=7.5 * Angstrom,
)
potentialSet.addPotential(_potential)
calculator = TremoloXCalculator(parameters=potentialSet)


# %% Set Calculator

substrate_configuration.setCalculator(calculator)

nlsave('SPS_Si100_Cl2_300K_Ar_100eV_ALE_results.hdf5', substrate_configuration)


# %% OptimizeGeometry

constraints = [FixStrain(True, True, True), FixAtomConstraints('bulk')]

optimized_configuration = OptimizeGeometry(
    configuration=substrate_configuration,
    max_forces=0.01 * eV / Angstrom,
    constraints=constraints,
    trajectory_filename='SPS_Si100_Cl2_300K_Ar_100eV_ALE_results.hdf5',
    trajectory_object_id='optimize_trajectory',
    optimize_cell=False,
    trajectory_interval=10,
    restart_strategy=NoRestart,
    enable_optimization_stop_file=False,
)

nlsave('SPS_Si100_Cl2_300K_Ar_100eV_ALE_results.hdf5', optimized_configuration)


# %% MD 10K - 300K

method = NVTBussiDonadioParrinello(
    initial_velocity=MaxwellBoltzmannDistribution(
        temperature=10.0 * Kelvin, remove_center_of_mass_momentum=True
    ),
    time_step=0.5 * femtoSecond,
    reservoir_temperature=10.0 * Kelvin,
    heating_rate=2.9 * Kelvin / picoSecond,
)

constraints = [FixStrain(True, True, True), FixAtomConstraints('bulk')]

md_trajectory = MolecularDynamics(
    configuration=optimized_configuration,
    constraints=constraints,
    trajectory_filename='SPS_Si100_Cl2_300K_Ar_100eV_ALE_results.hdf5',
    steps=200000,
    log_interval=1000,
    method=method,
)
last_image = md_trajectory.lastImage()

nlsave('SPS_Si100_Cl2_300K_Ar_100eV_ALE_results.hdf5', last_image)


# %% MD 300K

method = NVTNoseHoover(
    initial_velocity=ConfigurationVelocities(),
    time_step=0.5 * femtoSecond,
    reservoir_temperature=300.0 * Kelvin,
    heating_rate=0.0 * Kelvin / femtoSecond,
)

constraints = [FixStrain(True, True, True), FixAtomConstraints('bulk')]

md_trajectory_1 = MolecularDynamics(
    configuration=last_image,
    constraints=constraints,
    trajectory_filename='SPS_Si100_Cl2_300K_Ar_100eV_ALE_results.hdf5',
    steps=200000,
    log_interval=100,
    method=method,
)
last_image_1 = md_trajectory_1.lastImage()

nlsave('SPS_Si100_Cl2_300K_Ar_100eV_ALE_results.hdf5', last_image_1)


# %% Load Substrate Candidate(s)


def load_substrate_candidates(md_trajectory, substrate_configuration):
    # Defined variables.
    list_bulk = False

    # Script.
    bulk_configuration_list = []
    if list_bulk:
        for i in range(0, md_trajectory.length()):
            bulk_configuration_list.append(md_trajectory.image(i))
    else:
        bulk_configuration_list.append(md_trajectory.lastImage())

    substrate_configuration = md_trajectory.lastImage()
    return bulk_configuration_list, substrate_configuration


bulk_configuration_list, substrate_configuration = load_substrate_candidates(
    md_trajectory_1, substrate_configuration
)

nlsave('SPS_Si100_Cl2_300K_Ar_100eV_ALE_results.hdf5', bulk_configuration_list)

nlsave('SPS_Si100_Cl2_300K_Ar_100eV_ALE_results.hdf5', substrate_configuration)


# %% Cycle Cl2 and Ar

# Cycle Cl2 and Ar(preparation)
############################################################
#                    Iteration (cycle)                     #
############################################################


# Create iterator.
cycles = range(1, 5)

for cycle in cycles:

    # %% Cl2 pulse MultiSpecies SPS

    # %% Cl2

    # Define elements
    elements = [Chlorine, Chlorine]

    # Define coordinates
    cartesian_coordinates = [[-3.408379825326, -0.085312376112,  0.            ],
                             [-1.340005230658,  0.200293184294,  0.            ]]*Angstrom

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

    # Add tags
    cl2.addTags('H_Cl', [1])

    cl2_name = "Cl2"

    # %% SurfaceProcessSimulation

    # -------------------------------------------------------------
    # Surface Process Simulation
    # -------------------------------------------------------------
    clean_vacuum_region_hook = CleanVacuumRegion()

    sps_hooks = [clean_vacuum_region_hook]

    surface_process_simulation = SurfaceProcessSimulation(
        substrate=substrate_configuration,
        filename='SPS_Si100_Cl2_300K_Ar_100eV_ALE_results.hdf5',
        object_id=f'surface_process_simulation_sps_cycle_{cycle}',
        random_seed=randomSeed(520782836, cl2),
        temperature=300.0 * Kelvin,
        fixed_thickness=1.0 * Angstrom,
        thermostat_thickness=5.0 * Angstrom,
        log_interval=1000,
        trajectory_interval=1000,
        fixed_directions=(2,),
    )

    surface_process_simulation.addSequence(
        molecule=cl2,
        number_of_events=250,
        md_time=10.0 * picoSecond,
        time_step=1.0 * femtoSecond,
        mean_kinetic_energy=300.0 * kBK,
        mean_incident_angle=0.0 * Degrees,
        internal_energy=300.0 * Kelvin,
        post_md_hooks=sps_hooks,
        log_interval=1000,
        trajectory_interval=1000,
        stability_checks=False,
    )

    surface_process_simulation.update()
    last_image_2 = surface_process_simulation.lastImage()
    nlsave(
        'SPS_Si100_Cl2_300K_Ar_100eV_ALE_results.hdf5',
        last_image_2,
        object_id=f'last_image_2_sps_cycle_{cycle}',
    )

    # %% Custom

    def custom(configuration, substrate_configuration, sps_cl):
        substrate_configuration = configuration
        nlsave(f'Cl_pulse_{cycle}.hdf5', sps_cl)
        return substrate_configuration

    substrate_configuration = custom(
        last_image_2, substrate_configuration, surface_process_simulation
    )

    nlsave(
        'SPS_Si100_Cl2_300K_Ar_100eV_ALE_results.hdf5',
        substrate_configuration,
        object_id=f'substrate_configuration_Custom_cycle_{cycle}_1',
    )

    # %% Ar pulse MultiSpecies SPS

    # %% Ar

    # Define elements
    elements = [Argon]

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

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

    ar_name = "Ar"

    # %% SurfaceProcessSimulation

    # -------------------------------------------------------------
    # Surface Process Simulation
    # -------------------------------------------------------------
    clean_vacuum_region_hook = CleanVacuumRegion()

    remove_element_hook_0 = RemoveElementFromSubstrate(element=Argon)

    sps_hooks = [clean_vacuum_region_hook, remove_element_hook_0]

    surface_process_simulation_1 = SurfaceProcessSimulation(
        substrate=substrate_configuration,
        filename='SPS_Si100_Cl2_300K_Ar_100eV_ALE_results.hdf5',
        object_id=f'surface_process_simulation_1_sps_cycle_{cycle}',
        random_seed=randomSeed(520782836, ar),
        temperature=300.0 * Kelvin,
        fixed_thickness=1.0 * Angstrom,
        thermostat_thickness=5.0 * Angstrom,
        log_interval=1000,
        trajectory_interval=1000,
        fixed_directions=(2,),
    )

    surface_process_simulation_1.addSequence(
        molecule=ar,
        number_of_events=250,
        md_time=10.0 * picoSecond,
        time_step=1.0 * femtoSecond,
        mean_kinetic_energy=100.0 * eV,
        mean_incident_angle=0.0 * Degrees,
        internal_energy=300.0 * Kelvin,
        post_md_hooks=sps_hooks,
        log_interval=1000,
        trajectory_interval=1000,
        stability_checks=False,
    )

    surface_process_simulation_1.update()
    last_image_3 = surface_process_simulation_1.lastImage()
    nlsave(
        'SPS_Si100_Cl2_300K_Ar_100eV_ALE_results.hdf5',
        last_image_3,
        object_id=f'last_image_3_sps_cycle_{cycle}',
    )

    # %% Custom

    def custom_1(configuration, substrate_configuration, sps_ar):
        substrate_configuration = configuration
        nlsave(f'Ar_pulse_{cycle}.hdf5', sps_ar)
        return substrate_configuration

    substrate_configuration = custom_1(
        last_image_3, substrate_configuration, surface_process_simulation_1
    )

    nlsave(
        'SPS_Si100_Cl2_300K_Ar_100eV_ALE_results.hdf5',
        substrate_configuration,
        object_id=f'substrate_configuration_Custom_cycle_{cycle}_3',
    )
