# -------------------------------------------------------------
# Nudged Elastic Band Configuration
# -------------------------------------------------------------

# Setup the configuration list
configuration_list = []

# -------------------------------------------------------------
# Bulk Configuration
# -------------------------------------------------------------

# Set up lattice
vector_a = [7.680028171823331, 0.0, 0.0]*Angstrom
vector_b = [0.0, 7.680028171823331, 0.0]*Angstrom
vector_c = [0.0, 0.0, 25.1459]*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, Hydrogen, Hydrogen, Hydrogen,
            Hydrogen]

# Define coordinates
fractional_coordinates = [[ 0.739584288592,  0.380207855704,  0.053990909055],
                          [ 0.239584288592,  0.380207855704,  0.053990909055],
                          [ 0.739584288592,  0.880207855704,  0.053990909055],
                          [ 0.239584288592,  0.880207855704,  0.053990909055],
                          [ 0.739584288592,  0.130207855704,  0.10798181811 ],
                          [ 0.239584288592,  0.130207855704,  0.10798181811 ],
                          [ 0.739584288592,  0.630207855704,  0.10798181811 ],
                          [ 0.239584288592,  0.630207855704,  0.10798181811 ],
                          [ 0.989584288592,  0.130207855704,  0.161972727165],
                          [ 0.489584288592,  0.130207855704,  0.161972727165],
                          [ 0.989584288592,  0.630207855704,  0.161972727165],
                          [ 0.489584288592,  0.630207855704,  0.161972727165],
                          [ 0.988472839537,  0.380487954543,  0.219403356388],
                          [ 0.489699842761,  0.380052398128,  0.214466715534],
                          [ 0.988483902113,  0.879986001237,  0.219439062887],
                          [ 0.489484192973,  0.880361864144,  0.214511356832],
                          [ 0.731841640524,  0.396553093461,  0.273542895729],
                          [ 0.247034655423,  0.366341172793,  0.272629406254],
                          [ 0.731783549478,  0.863993844702,  0.273548570205],
                          [ 0.246899360416,  0.894633998844,  0.272764646715],
                          [ 0.612616842921,  0.130322809391,  0.301314064193],
                          [ 0.319288360892,  0.13065109226 ,  0.330803053002],
                          [ 0.661170499768,  0.630281650803,  0.333204201241],
                          [ 0.359318245222,  0.63044940258 ,  0.306351835717],
                          [ 0.194216406433,  0.625283317927,  0.435942868221],
                          [ 0.362215060971,  0.609965908055,  0.465291230121],
                          [ 0.239339409362,  0.629868925844,  0.376131803842],
                          [ 0.079936050243,  0.470692973992,  0.444518200247],
                          [ 0.102396316136,  0.791723303744,  0.448077120962]]

# Set up configuration
configuration = BulkConfiguration(
    bravais_lattice=lattice,
    elements=elements,
    fractional_coordinates=fractional_coordinates
    )

# Add tags
configuration.addTags('H_Si',        [25, 26, 27, 28])
configuration.addTags('Selection 0', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
configuration.addTags('constrained', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])

# Append to the list of configurations
configuration_list.append(configuration)

# -------------------------------------------------------------
# Bulk Configuration
# -------------------------------------------------------------

# Set up lattice
vector_a = [7.680028171823331, 0.0, 0.0]*Angstrom
vector_b = [0.0, 7.680028171823331, 0.0]*Angstrom
vector_c = [0.0, 0.0, 25.1459]*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, Hydrogen, Hydrogen, Hydrogen,
            Hydrogen]

# Define coordinates
fractional_coordinates = [[ 0.739584288592,  0.380207855704,  0.053990909055],
                          [ 0.239584288592,  0.380207855704,  0.053990909055],
                          [ 0.739584288592,  0.880207855704,  0.053990909055],
                          [ 0.239584288592,  0.880207855704,  0.053990909055],
                          [ 0.739584288592,  0.130207855704,  0.10798181811 ],
                          [ 0.239584288592,  0.130207855704,  0.10798181811 ],
                          [ 0.739584288592,  0.630207855704,  0.10798181811 ],
                          [ 0.239584288592,  0.630207855704,  0.10798181811 ],
                          [ 0.989584288592,  0.130207855704,  0.161972727165],
                          [ 0.489584288592,  0.130207855704,  0.161972727165],
                          [ 0.989584288592,  0.630207855704,  0.161972727165],
                          [ 0.489584288592,  0.630207855704,  0.161972727165],
                          [ 0.989050030769,  0.380409021922,  0.21937777858 ],
                          [ 0.489127015189,  0.379853357616,  0.214401874625],
                          [ 0.989072127383,  0.880058669093,  0.219412223677],
                          [ 0.488951196951,  0.880559941983,  0.21443585603 ],
                          [ 0.731878330384,  0.394678914212,  0.273226875103],
                          [ 0.247323988048,  0.368052856336,  0.272723866337],
                          [ 0.731829537204,  0.865808918801,  0.273233828702],
                          [ 0.247234388092,  0.892894627664,  0.272838195947],
                          [ 0.611457130135,  0.130293215826,  0.301752564457],
                          [ 0.317888992543,  0.13061146385 ,  0.330215109548],
                          [ 0.656856008142,  0.630245528955,  0.331109663077],
                          [ 0.352456360788,  0.630436593487,  0.309117326033],
                          [ 0.304734302934,  0.625966142403,  0.430848402568],
                          [ 0.478161256357,  0.613629901491,  0.454292797478],
                          [ 0.243274754445,  0.629996646672,  0.376225459543],
                          [ 0.20056868228 ,  0.470335643059,  0.443345348157],
                          [ 0.218546721611,  0.790860181745,  0.44630009351 ]]

# Set up configuration
configuration = BulkConfiguration(
    bravais_lattice=lattice,
    elements=elements,
    fractional_coordinates=fractional_coordinates
    )

# Add tags
configuration.addTags('H_Si',        [25, 26, 27, 28])
configuration.addTags('Selection 0', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
configuration.addTags('constrained', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])

# Append to the list of configurations
configuration_list.append(configuration)

# -------------------------------------------------------------
# Bulk Configuration
# -------------------------------------------------------------

# Set up lattice
vector_a = [7.680028171823331, 0.0, 0.0]*Angstrom
vector_b = [0.0, 7.680028171823331, 0.0]*Angstrom
vector_c = [0.0, 0.0, 25.1459]*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, Hydrogen, Hydrogen, Hydrogen,
            Hydrogen]

# Define coordinates
fractional_coordinates = [[ 0.739584288592,  0.380207855704,  0.053990909055],
                          [ 0.239584288592,  0.380207855704,  0.053990909055],
                          [ 0.739584288592,  0.880207855704,  0.053990909055],
                          [ 0.239584288592,  0.880207855704,  0.053990909055],
                          [ 0.739584288592,  0.130207855704,  0.10798181811 ],
                          [ 0.239584288592,  0.130207855704,  0.10798181811 ],
                          [ 0.739584288592,  0.630207855704,  0.10798181811 ],
                          [ 0.239584288592,  0.630207855704,  0.10798181811 ],
                          [ 0.989584288592,  0.130207855704,  0.161972727165],
                          [ 0.489584288592,  0.130207855704,  0.161972727165],
                          [ 0.989584288592,  0.630207855704,  0.161972727165],
                          [ 0.489584288592,  0.630207855704,  0.161972727165],
                          [ 0.989627222001,  0.380330089302,  0.219352200773],
                          [ 0.488554187616,  0.379654317103,  0.214337033715],
                          [ 0.989660352652,  0.880131336948,  0.219385384467],
                          [ 0.48841820093 ,  0.880758019823,  0.214360355228],
                          [ 0.731915020243,  0.392804734964,  0.272910854476],
                          [ 0.247613320673,  0.36976453988 ,  0.27281832642 ],
                          [ 0.73187552493 ,  0.867623992901,  0.272919087198],
                          [ 0.247569415767,  0.891155256483,  0.272911745179],
                          [ 0.610297417348,  0.130263622261,  0.302191064721],
                          [ 0.316489624195,  0.13057183544 ,  0.329627166093],
                          [ 0.652541516516,  0.630209407107,  0.329015124913],
                          [ 0.345594476354,  0.630423784393,  0.31188281635 ],
                          [ 0.415252199435,  0.626648966878,  0.425753936916],
                          [ 0.594107451743,  0.617293894927,  0.443294364836],
                          [ 0.247210099528,  0.6301243675  ,  0.376319115245],
                          [ 0.321201314317,  0.469978312125,  0.442172496067],
                          [ 0.334697127087,  0.789997059745,  0.444523066058]]

# Set up configuration
configuration = BulkConfiguration(
    bravais_lattice=lattice,
    elements=elements,
    fractional_coordinates=fractional_coordinates
    )

# Add tags
configuration.addTags('H_Si',        [25, 26, 27, 28])
configuration.addTags('Selection 0', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
configuration.addTags('constrained', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])

# Append to the list of configurations
configuration_list.append(configuration)

# -------------------------------------------------------------
# Bulk Configuration
# -------------------------------------------------------------

# Set up lattice
vector_a = [7.680028171823331, 0.0, 0.0]*Angstrom
vector_b = [0.0, 7.680028171823331, 0.0]*Angstrom
vector_c = [0.0, 0.0, 25.1459]*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, Hydrogen, Hydrogen, Hydrogen,
            Hydrogen]

# Define coordinates
fractional_coordinates = [[ 0.739584288592,  0.380207855704,  0.053990909055],
                          [ 0.239584288592,  0.380207855704,  0.053990909055],
                          [ 0.739584288592,  0.880207855704,  0.053990909055],
                          [ 0.239584288592,  0.880207855704,  0.053990909055],
                          [ 0.739584288592,  0.130207855704,  0.10798181811 ],
                          [ 0.239584288592,  0.130207855704,  0.10798181811 ],
                          [ 0.739584288592,  0.630207855704,  0.10798181811 ],
                          [ 0.239584288592,  0.630207855704,  0.10798181811 ],
                          [ 0.989584288592,  0.130207855704,  0.161972727165],
                          [ 0.489584288592,  0.130207855704,  0.161972727165],
                          [ 0.989584288592,  0.630207855704,  0.161972727165],
                          [ 0.489584288592,  0.630207855704,  0.161972727165],
                          [ 0.990204413232,  0.380251156681,  0.219326622965],
                          [ 0.487981360044,  0.37945527659 ,  0.214272192806],
                          [ 0.990248577922,  0.880204004804,  0.219358545257],
                          [ 0.487885204908,  0.880956097662,  0.214284854427],
                          [ 0.731951710103,  0.390930555715,  0.27259483385 ],
                          [ 0.247902653298,  0.371476223423,  0.272912786503],
                          [ 0.731921512656,  0.869439067   ,  0.272604345695],
                          [ 0.247904443443,  0.889415885303,  0.272985294412],
                          [ 0.609137704562,  0.130234028696,  0.302629564986],
                          [ 0.315090255847,  0.13053220703 ,  0.329039222639],
                          [ 0.648227024891,  0.630173285259,  0.326920586748],
                          [ 0.338732591919,  0.6304109753  ,  0.314648306666],
                          [ 0.525770095936,  0.627331791354,  0.420659471263],
                          [ 0.710053647129,  0.620957888364,  0.432295932193],
                          [ 0.251145444611,  0.630252088329,  0.376412770946],
                          [ 0.441833946354,  0.469620981192,  0.440999643976],
                          [ 0.450847532562,  0.789133937745,  0.442746038606]]

# Set up configuration
configuration = BulkConfiguration(
    bravais_lattice=lattice,
    elements=elements,
    fractional_coordinates=fractional_coordinates
    )

# Add tags
configuration.addTags('H_Si',        [25, 26, 27, 28])
configuration.addTags('Selection 0', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
configuration.addTags('constrained', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])

# Append to the list of configurations
configuration_list.append(configuration)

# -------------------------------------------------------------
# Bulk Configuration
# -------------------------------------------------------------

# Set up lattice
vector_a = [7.680028171823331, 0.0, 0.0]*Angstrom
vector_b = [0.0, 7.680028171823331, 0.0]*Angstrom
vector_c = [0.0, 0.0, 25.1459]*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, Hydrogen, Hydrogen, Hydrogen,
            Hydrogen]

# Define coordinates
fractional_coordinates = [[ 0.739584288592,  0.380207855704,  0.053990909055],
                          [ 0.239584288592,  0.380207855704,  0.053990909055],
                          [ 0.739584288592,  0.880207855704,  0.053990909055],
                          [ 0.239584288592,  0.880207855704,  0.053990909055],
                          [ 0.739584288592,  0.130207855704,  0.10798181811 ],
                          [ 0.239584288592,  0.130207855704,  0.10798181811 ],
                          [ 0.739584288592,  0.630207855704,  0.10798181811 ],
                          [ 0.239584288592,  0.630207855704,  0.10798181811 ],
                          [ 0.989584288592,  0.130207855704,  0.161972727165],
                          [ 0.489584288592,  0.130207855704,  0.161972727165],
                          [ 0.989584288592,  0.630207855704,  0.161972727165],
                          [ 0.489584288592,  0.630207855704,  0.161972727165],
                          [ 0.990781604464,  0.38017222406 ,  0.219301045157],
                          [ 0.487408532472,  0.379256236078,  0.214207351896],
                          [ 0.990836803192,  0.88027667266 ,  0.219331706047],
                          [ 0.487352208887,  0.881154175501,  0.214209353625],
                          [ 0.731988399963,  0.389056376467,  0.272278813223],
                          [ 0.248191985924,  0.373187906966,  0.273007246585],
                          [ 0.731967500381,  0.8712541411  ,  0.272289604191],
                          [ 0.248239471119,  0.887676514123,  0.273058843644],
                          [ 0.607977991776,  0.13020443513 ,  0.30306806525 ],
                          [ 0.313690887498,  0.13049257862 ,  0.328451279185],
                          [ 0.643912533265,  0.630137163411,  0.324826048584],
                          [ 0.331870707485,  0.630398166206,  0.317413796982],
                          [ 0.636287992437,  0.628014615829,  0.41556500561 ],
                          [ 0.825999842516,  0.6246218818  ,  0.421297499551],
                          [ 0.255080789695,  0.630379809157,  0.376506426647],
                          [ 0.562466578391,  0.469263650259,  0.439826791886],
                          [ 0.566997938038,  0.788270815746,  0.440969011154]]

# Set up configuration
configuration = BulkConfiguration(
    bravais_lattice=lattice,
    elements=elements,
    fractional_coordinates=fractional_coordinates
    )

# Add tags
configuration.addTags('H_Si',        [25, 26, 27, 28])
configuration.addTags('Selection 0', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
configuration.addTags('constrained', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])

# Append to the list of configurations
configuration_list.append(configuration)

# -------------------------------------------------------------
# Bulk Configuration
# -------------------------------------------------------------

# Set up lattice
vector_a = [7.680028171823331, 0.0, 0.0]*Angstrom
vector_b = [0.0, 7.680028171823331, 0.0]*Angstrom
vector_c = [0.0, 0.0, 25.1459]*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, Hydrogen, Hydrogen, Hydrogen,
            Hydrogen]

# Define coordinates
fractional_coordinates = [[ 0.739584288592,  0.380207855704,  0.053990909055],
                          [ 0.239584288592,  0.380207855704,  0.053990909055],
                          [ 0.739584288592,  0.880207855704,  0.053990909055],
                          [ 0.239584288592,  0.880207855704,  0.053990909055],
                          [ 0.739584288592,  0.130207855704,  0.10798181811 ],
                          [ 0.239584288592,  0.130207855704,  0.10798181811 ],
                          [ 0.739584288592,  0.630207855704,  0.10798181811 ],
                          [ 0.239584288592,  0.630207855704,  0.10798181811 ],
                          [ 0.989584288592,  0.130207855704,  0.161972727165],
                          [ 0.489584288592,  0.130207855704,  0.161972727165],
                          [ 0.989584288592,  0.630207855704,  0.161972727165],
                          [ 0.489584288592,  0.630207855704,  0.161972727165],
                          [ 0.991358795696,  0.380093291439,  0.21927546735 ],
                          [ 0.4868357049  ,  0.379057195565,  0.214142510987],
                          [ 0.991425028461,  0.880349340515,  0.219304866837],
                          [ 0.486819212865,  0.881352253341,  0.214133852823],
                          [ 0.732025089823,  0.387182197218,  0.271962792597],
                          [ 0.248481318549,  0.374899590509,  0.273101706668],
                          [ 0.732013488107,  0.873069215199,  0.271974862688],
                          [ 0.248574498794,  0.885937142942,  0.273132392876],
                          [ 0.606818278989,  0.130174841565,  0.303506565514],
                          [ 0.31229151915 ,  0.13045295021 ,  0.32786333573 ],
                          [ 0.639598041639,  0.630101041563,  0.32273151042 ],
                          [ 0.325008823051,  0.630385357112,  0.320179287298],
                          [ 0.746805888938,  0.628697440305,  0.410470539957],
                          [ 0.941946037902,  0.628285875236,  0.410299066908],
                          [ 0.259016134778,  0.630507529985,  0.376600082349],
                          [ 0.683099210428,  0.468906319325,  0.438653939796],
                          [ 0.683148343513,  0.787407693746,  0.439191983702]]

# Set up configuration
configuration = BulkConfiguration(
    bravais_lattice=lattice,
    elements=elements,
    fractional_coordinates=fractional_coordinates
    )

# Add tags
configuration.addTags('H_Si',        [25, 26, 27, 28])
configuration.addTags('Selection 0', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
configuration.addTags('constrained', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])

# Append to the list of configurations
configuration_list.append(configuration)

# Construct the Nudged Elastic Band object
neb_configuration = NudgedElasticBand(
    configuration_list,
    generate_images=False)

# Unreference the temporary configuration variable
del configuration



# -------------------------------------------------------------
# Calculator
# -------------------------------------------------------------
#----------------------------------------
# PAW Data Set
#----------------------------------------
basis_set = [
    PAWPBESuggested.Silicon,
    PAWPBESuggested.Hydrogen,
    ]

#----------------------------------------
# Exchange-Correlation
#----------------------------------------
exchange_correlation = GGA.PBE

density_mesh_cutoff = OptimizedFFTGridSampling(
    energy_cutoff=1520.0*eV,
    maximum_average_prime_factor=5.0,
    maximum_grid_enlargement=0.1,
    )

k_point_sampling = MonkhorstPackGrid(
    na=6,
    nb=6,
    nc=1,
    symmetries=[
        ([[ 1., 0., 0.],
          [ 0., 1., 0.],
          [ 0., 0., 1.]], [ 0., 0., 0.]),
        ([[-1., 0., 0.],
          [ 0.,-1., 0.],
          [ 0., 0.,-1.]], [ 0., 0., 0.]),
        ],
    force_timereversal=True,
    shift_to_gamma=[True, True, True],
    )
exx_grid_cutoff = OptimizedFFTGridSampling(
    energy_cutoff=760.0*eV,
    maximum_average_prime_factor=5.0,
    maximum_grid_enlargement=0.1,
    )

exact_exchange_parameters = ExactExchangeParameters(
    aux_basis_tolerance=0.001,
    number_of_waves=1024,
    maximum_wave_vector=50.0,
    integral_tolerance=0.0001,
    relative_screening_tolerance=0.01,
    )
compensation_charge_mesh_cutoff = OptimizedFFTGridSampling(
    energy_cutoff=1520.0*eV,
    maximum_average_prime_factor=5.0,
    maximum_grid_enlargement=0.1,
    )

numerical_accuracy_parameters = NumericalAccuracyParameters(
    density_mesh_cutoff=density_mesh_cutoff,
    k_point_sampling=k_point_sampling,
    radial_step_size=0.001*Bohr,
    density_cutoff=1e-06,
    interaction_max_range=20.0*Angstrom,
    number_of_reciprocal_points=1024,
    reciprocal_energy_cutoff=1250.0*Hartree,
    bands_per_electron=1.2,
    occupation_method=GaussianSmearing(1000.0*Kelvin*boltzmann_constant),
    exx_grid_cutoff=exx_grid_cutoff,
    exact_exchange_parameters=exact_exchange_parameters,
    compensation_charge_mesh_cutoff=compensation_charge_mesh_cutoff,
    )

iteration_control_parameters = IterationControlParameters(
    tolerance=0.0001,
    max_steps=100,
    algorithm=PulayMixer(),
    damping_factor=0.2,
    number_of_history_steps=5,
    start_mixing_after_step=0,
    mixing_variable=HamiltonianVariable,
    preconditioner=Preconditioner.Off,
    linear_dependence_threshold=0.0,
    max_exx_updates=50,
    non_convergence_behavior=ContinueCalculation(),
    enable_scf_stop_file=True,
    )

poisson_solver = FastFourierSolver()

initialization_method = BasisSetInitialization()
density_matrix_method = PPCGSolver(
    absolute_tolerance=1e-08,
    relative_tolerance=1e-99,
    maximum_number_of_iterations=2,
    block_size=5,
    rr_period=3,
    buffer_states=0.05,
    initialization_method=initialization_method,
    )

algorithm_parameters = AlgorithmParameters(
    density_matrix_method=density_matrix_method,
    store_grids=True,
    store_basis_on_grid=Automatic,
    store_energy_density_matrix=Automatic,
    scf_restart_step_length=0.1*Angstrom,
    use_symmetries=Automatic,
    )

parallel_parameters = ParallelParameters(
    processes_per_neb_image=None,
    processes_per_individual=None,
    processes_per_bias_point=None,
    processes_per_saddle_search=1,
    )

checkpoint_handler = CheckpointHandler(
    time_interval=0.5*Hour,
    )

calculator = PlaneWaveCalculator(
    wave_function_cutoff=380.0*eV,
    basis_set=basis_set,
    exchange_correlation=exchange_correlation,
    numerical_accuracy_parameters=numerical_accuracy_parameters,
    iteration_control_parameters=iteration_control_parameters,
    poisson_solver=poisson_solver,
    algorithm_parameters=algorithm_parameters,
    parallel_parameters=parallel_parameters,
    checkpoint_handler=checkpoint_handler,
    charge=0.0,
    correction_extension=None,
    fixed_spin_moment=False,
    store_wave_functions=False,
    processes_per_kpoint=Automatic,
    )

neb_configuration.setCalculator(calculator)
neb_configuration.update()
nlsave('NEB-a-b.hdf5', neb_configuration)

# -------------------------------------------------------------
# Optimize Geometry
# -------------------------------------------------------------
constraints = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

neb_configuration = OptimizeNudgedElasticBand(
    neb_configuration,
    max_forces=0.02*eV/Ang,
    max_steps=200,
    max_step_length=0.2*Ang,
    constraints=constraints,
    trajectory_filename='NEB-a-b.hdf5',
    trajectory_interval=5,
    restart_strategy=NoRestart,
    optimizer_method=LBFGS(),
    preoptimization=False,
    climbing_image=True,
)
nlsave('NEB-a-b.hdf5', neb_configuration)
nlprint(neb_configuration)
