MultilayerBuilder¶

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.

Parameters: 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_"
blocks()
Returns: A list of the block configurations. list of type BulkConfiguration
configuration()
Returns: The multilayer builder configuration BulkConfiguration
filename()
Returns: The filename where the study object is stored. str
interactionLength()
Returns: The interaction length. PhysicalQuantity of type length
kpointDensity()
Returns: The k-point density of the relaxation calculator. PhysicalQuantity of type length
layerIndices()
Returns: A list containing the indices of each layer. list of type list of type int
layers()
Returns: The layers of the multilayer builder. list of type CrystalLayer | AmorphousLayer | VacuumLayer
logFilenamePrefix()
Returns: The filename prefix for the logging output of the study. str | LogToStdOut
maxStrain()
Returns: The max strain. float
maxSurfaceArea()
Returns: The maximum surface area. PhysicalQuantity of type length**2
maxSurfaceVectorLength()
Returns: The maximum surface vector length. PhysicalQuantity of type length
minSurfaceVectorAngle()
Returns: The smallest allowed angle between the two surface vectors. PhysicalQuantity of type angle
minSurfaceVectorLength()
Returns: The minimum surface vector length. PhysicalQuantity of type length
nlprint(stream=None)

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()
numberOfProcessesPerTask()
Returns: The number of processes to be used to execute each task. If None, all available processes should execute each task collaboratively. int | None
objectId()
Returns: The name of the study object in the file. str
optimizeGeometryParameters()
Returns: The optimize geometry parameters. OptimizeGeometryParameters
relaxationCalculator()
Returns: The relaxation calculator. Calculator | None
relaxationLength()
Returns: The relaxation length. PhysicalQuantity of type length
update()

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(
filename='multilayer_builder.hdf5',
object_id='multilayer_builder',
layers=layers,
surface_vectors=surface_vectors,
)
multilayer_builder.update()
nlsave('multilayer_builder.hdf5', multilayer_builder.configuration())


multilayer_builder_example.py

Notes¶

Note

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.