# Read the device configuration with an attached calculator.
device_configuration = nlread('setup_cnt_device.py', DeviceConfiguration)[0]

# Set up parameters for the device configuration optimization.
optimize_geometry_parameters = OptimizeGeometryParameters(
     max_forces=0.2 * eV / Angstrom,
     max_stress=0.8 * GPa,
     max_steps=200,
     max_step_length=0.2 * Angstrom,
     optimizer_method=LBFGS(),
)

# Set up the object and perform the relaxation.
optimize_device_configuration = OptimizeDeviceConfiguration(
    device_configuration=device_configuration,
    filename=u'optimize_cnt_device.hdf5',
    object_id='optimizedeviceconfiguration',
    optimization_region_length=10.0 * Angstrom,
    passivate_electrode_surfaces=(True, True),
    optimize_geometry_parameters=optimize_geometry_parameters,
    log_filename_prefix='optimize_cnt_device',
)
optimize_device_configuration.update()

# Fetch the resulting device configuration after optimization.
optimized_device = optimize_device_configuration.result()

# Print a report.
nlprint(optimize_device_configuration)
