from SMW import *

# Define each layer in the multilayer structure.
layers = []
relaxation_calculator = []

material = MaterialSpecificationsDatabase.MRAM_MATERIALS['Magnesium oxide']()
layer_0 = CrystalLayer(
    material,
    length=10.0*Angstrom,
    miller_indices=(1, 0, 0),
    top_atom_index=0,
    bottom_atom_index=0,
    displacement_vector=(0.0, 0.0),
    )
layers.append(layer_0)

material = MaterialSpecificationsDatabase.MRAM_MATERIALS['Iron cobalt (alloy)'](
    substitutional_percentage=30.000,
    substitutional_element=Cobalt,
    )
layer_1 = AlloyLayer(
    material,
    length=15.0*Angstrom,
    miller_indices=(1, 0, 0),
    alloy_method=EvolutionarySQS,
    displacement_vector=(0.5, 0.5),
    random_seed=2100,
    )
layers.append(layer_1)

material = MaterialSpecificationsDatabase.MRAM_MATERIALS['Magnesium oxide']()
layer_2 = CrystalLayer(
    material,
    length=10.0*Angstrom,
    miller_indices=(1, 0, 0),
    top_atom_index=0,
    bottom_atom_index=0,
    displacement_vector=(0.0, 0.0),
    )
layers.append(layer_2)


FeCo_MgO_calculator = TremoloXCalculator(QuantumATK_MTP_FeCo_MgO_2022())
relaxation_calculator.append(FeCo_MgO_calculator)
FeCo_MgO_calculator = TremoloXCalculator(QuantumATK_MTP_FeCo_MgO_2022())
relaxation_calculator.append(FeCo_MgO_calculator)

surface_vectors = [[ 2.977768076933,  0.            ],
                   [ 0.            ,  2.977768076933]]*Angstrom


mram_builder = MultilayerBuilder(
    filename='MRAM_builder.hdf5',
    object_id='multilayer_builder',
    layers=layers,
    surface_vectors=surface_vectors,
    relaxation_calculator=relaxation_calculator,
    annealing_parameters=None,
    max_iteration_annealing_parameters=0,
)
mram_builder.update()
nlsave('MRAM_builder.hdf5', mram_builder.configuration())
