class MultilayerBuilder(filename, object_id, layers, relaxation_calculator=None, kpoint_density=None, relaxation_length=None, interaction_length=None, optimize_geometry_parameters=None, surface_vectors=None, max_strain=None, max_surface_area=None, min_surface_vector_length=None, max_surface_vector_length=None, min_surface_vector_angle=None, log_filename_prefix=None)

Constructor for the MultilayerBuilder object. A multilayer builder is a multilayer configuration composed of crystalline, amorphous, or vacuum layers. The lateral dimensions (a and b unit cell vectors) are specially chosen to minimize the strain while meeting certain constraints (e.g. minimum and maximum sizes).

The first crystal layer is taken to be the substrate, which is the layer that is unstrained.

  • filename (str) – The full or relative path to save the results to. See nlsave().
  • object_id (str) – The object id to use when saving. See nlsave().
  • layers (list of type CrystalLayer | AmorphousLayer | VacuumLayer) – The list of layers to create the multilayer builder from. There must be either one or two instances of CrystalLayers in the list.
  • relaxation_calculator (Calculator | None) – The calculator (typically DFT) to use when relaxing the atomic positions at the interfaces. If no additional relaxation is desired, then None can be given.
    Default: None
  • kpoint_density (PhysicalQuantity of type length) – The target k-point sampling density.
    Default: 4.0 * Angstrom
  • relaxation_length (PhysicalQuantity of type length) – The distance around the interfacial plane that is relaxed with the relaxation calculator.
    Default: 4.0 * Angstrom
  • interaction_length (PhysicalQuantity of type length) – The distance around the interfacial plane within which atomic interactions will be included during the interface optimization.
    Default: 8.0 * Angstrom
  • optimize_geometry_parameters (OptimizeGeometryParameters) – The optimize geometry parameters to use when optimizing the atoms at each interface.
    Default: OptimizeGeometryParameters()
  • surface_vectors (PhysicalQuantity of type length) – The pair of vectors the define the lateral dimensions of the multilayer builder. The vectors may be given as 2d or 3d vectors, but the z components must be zero. If no surface vectors are given, then lowest strain surface vectors are selected automatically.
    Default: None
  • max_strain (float) – The largest strain allowed for the crystal layers.
    Default: 0.02
  • max_surface_area (PhysicalQuantity of type length**2) – The largest surface area allowed.
    Default: 200.0 * Angstrom**2
  • min_surface_vector_length (PhysicalQuantity of type length) – The shortest surface vector allowed.
    Default: 10.0 * Angstrom
  • max_surface_vector_length (PhysicalQuantity of type angle) – The longest surface vector allowed.
    Default: 50 * Angstrom
  • min_surface_vector_angle – The smallest allowed angle between the two surface vectors.
    Default: 30 * Degrees
  • log_filename_prefix (str or None) – Prefix for the filenames where the logging output for each calculation is stored. If a value of None is given then all logging output is done to stdout.
    Default: "multilayer_builder_"
Returns:A list of the block configurations.
Return type:list of type BulkConfiguration
Returns:The multilayer builder configuration
Return type:BulkConfiguration
Returns:The filename where the study object is stored.
Return type:str
Returns:The interaction length.
Return type:PhysicalQuantity of type length
Returns:The k-point density of the relaxation calculator.
Return type:PhysicalQuantity of type length
Returns:A list containing the indices of each layer.
Return type:list of type list of type int
Returns:The layers of the multilayer builder.
Return type:list of type CrystalLayer | AmorphousLayer | VacuumLayer
Returns:The filename prefix for the logging output of the study.
Return type:str | LogToStdOut
Returns:The max strain.
Return type:float
Returns:The maximum surface area.
Return type:PhysicalQuantity of type length**2
Returns:The maximum surface vector length.
Return type:PhysicalQuantity of type length
Returns:The smallest allowed angle between the two surface vectors.
Return type:PhysicalQuantity of type angle
Returns:The minimum surface vector length.
Return type:PhysicalQuantity of type length

Print a string containing an ASCII table useful for plotting the Study object.

Parameters:stream (python stream) – The stream the table should be written to.
Default: NLPrintLogger()
Returns:The number of processes to be used to execute each task. If None, all available processes should execute each task collaboratively.
Return type:int | None
Returns:The name of the study object in the file.
Return type:str
Returns:The optimize geometry parameters.
Return type:OptimizeGeometryParameters
Returns:The relaxation calculator.
Return type:Calculator | None
Returns:The relaxation length.
Return type:PhysicalQuantity of type length

Run the calculations for the study object.

Usage Example

Use the MultilayerBuilder object to generate a silicon-silica-hafnia-tungsten gate stack:

    AmorphousLayer(MaterialSpecificationsDatabase.MULTILAYER_MATERIALS['Silica'], length=10.0*Angstrom),
    AmorphousLayer(MaterialSpecificationsDatabase.MULTILAYER_MATERIALS['Hafnia'], length=10.0*Angstrom),
    CrystalLayer(MaterialSpecificationsDatabase.MULTILAYER_MATERIALS['Tungsten (111)'], length=10.0*Angstrom)

surface_vectors = [[-15.360056343647,   5.4306        ],
                   [  3.840014085912,  10.8612        ]]*Angstrom

multilayer_builder = MultilayerBuilder(
nlsave('multilayer_builder.hdf5', multilayer_builder.configuration())



Study objects behave differently from analysis objects. See the Study object overview for more details.

The MultilayerBuilder class is designed to create an optimized multilayered material of low strain. Three types of layers are supported: CrystalLayer, AmorphousLayer, and VacuumLayer.

The configuration is created in three main steps. In the first step, a configuration is created for each layer. For crystal layers, the surface vectors and user given length are used to make a crystal of low strain. For amorphous layers, a random amorphous structure is generated (using the amorphization_calculator specified in the MaterialSpecifications of the layer). Each layer is then optimized using the relaxation calculator. In the second step, the layers are combined to form interfaces. The atoms near the interfaces (layer boundaries) are also optimized using the relaxation_calculator . In the third step the optimized interfaces are combined into the final gate stack configuration, which can be accessed using the configuration() method.