# Import the wrap function.
from NL.CommonConcepts.Configurations.Utilities import wrap

# -------------------------------------------------------------
# Bulk configuration
# -------------------------------------------------------------

# Set up lattice and scale with a factor 1.1
vector_a = [14.2806*1.1, 0.0, 0.0]*Angstrom
vector_b = [0.0, 12.9933*1.1, 0.0]*Angstrom
vector_c = [0.0, 0.0, 16.4898165084*1.1]*Angstrom
lattice = UnitCell(vector_a, vector_b, vector_c)

# Define elements
elements = [Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen,
            Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Aluminium,
            Aluminium, Aluminium, Aluminium, Aluminium, Aluminium, Oxygen,
            Oxygen, Oxygen, Aluminium, Aluminium, Aluminium, Aluminium,
            Aluminium, Aluminium, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen,
            Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Aluminium,
            Aluminium, Aluminium, Oxygen, Oxygen, Oxygen, Aluminium, Aluminium,
            Aluminium, Aluminium, Aluminium, Aluminium, Oxygen, Oxygen, Oxygen,
            Aluminium, Aluminium, Aluminium, Oxygen, Oxygen, Oxygen, Oxygen,
            Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen,
            Aluminium, Aluminium, Aluminium, Aluminium, Aluminium, Aluminium,
            Oxygen, Oxygen, Oxygen, Aluminium, Aluminium, Aluminium, Aluminium,
            Aluminium, Aluminium, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen,
            Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen,
            Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Aluminium, Aluminium,
            Aluminium, Aluminium, Aluminium, Aluminium, Oxygen, Oxygen, Oxygen,
            Aluminium, Aluminium, Aluminium, Aluminium, Aluminium, Aluminium,
            Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen,
            Oxygen, Oxygen, Oxygen, Oxygen, Aluminium, Aluminium, Aluminium,
            Oxygen, Oxygen, Oxygen, Aluminium, Aluminium, Aluminium, Aluminium,
            Aluminium, Aluminium, Oxygen, Oxygen, Oxygen, Aluminium, Aluminium,
            Aluminium, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen,
            Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Aluminium, Aluminium,
            Aluminium, Aluminium, Aluminium, Aluminium, Oxygen, Oxygen, Oxygen,
            Aluminium, Aluminium, Aluminium, Aluminium, Aluminium, Aluminium,
            Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen,
            Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen,
            Oxygen, Oxygen, Aluminium, Aluminium, Aluminium, Aluminium,
            Aluminium, Aluminium, Oxygen, Oxygen, Oxygen, Aluminium, Aluminium,
            Aluminium, Aluminium, Aluminium, Aluminium, Oxygen, Oxygen, Oxygen,
            Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen,
            Oxygen, Aluminium, Aluminium, Aluminium, Oxygen, Oxygen, Oxygen,
            Aluminium, Aluminium, Aluminium, Aluminium, Aluminium, Aluminium,
            Oxygen, Oxygen, Oxygen, Aluminium, Aluminium, Aluminium, Oxygen,
            Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen,
            Oxygen, Oxygen, Oxygen, Aluminium, Aluminium, Aluminium, Aluminium,
            Aluminium, Aluminium, Oxygen, Oxygen, Oxygen, Aluminium, Aluminium,
            Aluminium, Aluminium, Aluminium, Aluminium, Oxygen, Oxygen, Oxygen,
            Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen,
            Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Aluminium,
            Aluminium, Aluminium, Aluminium, Aluminium, Aluminium, Oxygen,
            Oxygen, Oxygen, Aluminium, Aluminium, Aluminium, Aluminium,
            Aluminium, Aluminium, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen,
            Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Aluminium,
            Aluminium, Aluminium, Oxygen, Oxygen, Oxygen, Aluminium, Aluminium,
            Aluminium, Aluminium, Aluminium, Aluminium, Oxygen, Oxygen, Oxygen,
            Aluminium, Aluminium, Aluminium, Oxygen, Oxygen, Oxygen, Oxygen,
            Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen,
            Aluminium, Aluminium, Aluminium, Aluminium, Aluminium, Aluminium,
            Oxygen, Oxygen, Oxygen, Aluminium, Aluminium, Aluminium, Aluminium,
            Aluminium, Aluminium, Oxygen, Oxygen, Oxygen]

# Define coordinates
fractional_coordinates = [[ 0.217706668333,  0.06450667    ,  0.0067733325  ],
                          [ 0.551040001667,  0.06450667    ,  0.0067733325  ],
                          [ 0.884373335   ,  0.06450667    ,  0.0067733325  ],
                          [ 0.115626668333,  0.56450667    ,  0.0067733325  ],
                          [ 0.448960001667,  0.56450667    ,  0.0067733325  ],
                          [ 0.782293335   ,  0.56450667    ,  0.0067733325  ],
                          [ 0.05104       ,  0.39784       ,  0.07656       ],
                          [ 0.384373333333,  0.39784       ,  0.07656       ],
                          [ 0.717706666667,  0.39784       ,  0.07656       ],
                          [ 0.282293333333,  0.89784       ,  0.07656       ],
                          [ 0.615626666667,  0.89784       ,  0.07656       ],
                          [ 0.94896       ,  0.89784       ,  0.07656       ],
                          [ 0.064586668333,  0.06450667    ,  0.0833333325  ],
                          [ 0.397920001667,  0.06450667    ,  0.0833333325  ],
                          [ 0.731253335   ,  0.06450667    ,  0.0833333325  ],
                          [ 0.166666668333,  0.16666667    ,  0.0833333325  ],
                          [ 0.500000001667,  0.16666667    ,  0.0833333325  ],
                          [ 0.833333335   ,  0.16666667    ,  0.0833333325  ],
                          [ 0.166666668333,  0.46234667    ,  0.0833333325  ],
                          [ 0.500000001667,  0.46234667    ,  0.0833333325  ],
                          [ 0.833333335   ,  0.46234667    ,  0.0833333325  ],
                          [ 0.268746668333,  0.56450667    ,  0.0833333325  ],
                          [ 0.602080001667,  0.56450667    ,  0.0833333325  ],
                          [ 0.935413335   ,  0.56450667    ,  0.0833333325  ],
                          [ 0.166666668333,  0.66666667    ,  0.0833333325  ],
                          [ 0.500000001667,  0.66666667    ,  0.0833333325  ],
                          [ 0.833333335   ,  0.66666667    ,  0.0833333325  ],
                          [ 0.166666668333,  0.96234667    ,  0.0833333325  ],
                          [ 0.500000001667,  0.96234667    ,  0.0833333325  ],
                          [ 0.833333335   ,  0.96234667    ,  0.0833333325  ],
                          [ 0.282293331667,  0.23117333    ,  0.0901066675  ],
                          [ 0.615626665   ,  0.23117333    ,  0.0901066675  ],
                          [ 0.948959998333,  0.23117333    ,  0.0901066675  ],
                          [ 0.051039998333,  0.73117333    ,  0.0901066675  ],
                          [ 0.384373331667,  0.73117333    ,  0.0901066675  ],
                          [ 0.717706665   ,  0.73117333    ,  0.0901066675  ],
                          [ 0.217706668333,  0.06450667    ,  0.1598933325  ],
                          [ 0.551040001667,  0.06450667    ,  0.1598933325  ],
                          [ 0.884373335   ,  0.06450667    ,  0.1598933325  ],
                          [ 0.115626668333,  0.56450667    ,  0.1598933325  ],
                          [ 0.448960001667,  0.56450667    ,  0.1598933325  ],
                          [ 0.782293335   ,  0.56450667    ,  0.1598933325  ],
                          [-0.000000001667,  0.12901333    ,  0.1666666675  ],
                          [ 0.333333331667,  0.12901333    ,  0.1666666675  ],
                          [ 0.666666665   ,  0.12901333    ,  0.1666666675  ],
                          [ 0.102079998333,  0.23117333    ,  0.1666666675  ],
                          [ 0.435413331667,  0.23117333    ,  0.1666666675  ],
                          [ 0.768746665   ,  0.23117333    ,  0.1666666675  ],
                          [-0.000000001667,  0.33333333    ,  0.1666666675  ],
                          [ 0.333333331667,  0.33333333    ,  0.1666666675  ],
                          [ 0.666666665   ,  0.33333333    ,  0.1666666675  ],
                          [-0.000000001667,  0.62901333    ,  0.1666666675  ],
                          [ 0.333333331667,  0.62901333    ,  0.1666666675  ],
                          [ 0.666666665   ,  0.62901333    ,  0.1666666675  ],
                          [ 0.231253331667,  0.73117333    ,  0.1666666675  ],
                          [ 0.564586665   ,  0.73117333    ,  0.1666666675  ],
                          [ 0.897919998333,  0.73117333    ,  0.1666666675  ],
                          [-0.000000001667,  0.83333333    ,  0.1666666675  ],
                          [ 0.333333331667,  0.83333333    ,  0.1666666675  ],
                          [ 0.666666665   ,  0.83333333    ,  0.1666666675  ],
                          [ 0.217706666667,  0.39784       ,  0.17344       ],
                          [ 0.55104       ,  0.39784       ,  0.17344       ],
                          [ 0.884373333333,  0.39784       ,  0.17344       ],
                          [ 0.115626666667,  0.89784       ,  0.17344       ],
                          [ 0.44896       ,  0.89784       ,  0.17344       ],
                          [ 0.782293333333,  0.89784       ,  0.17344       ],
                          [ 0.282293331667,  0.23117333    ,  0.2432266675  ],
                          [ 0.615626665   ,  0.23117333    ,  0.2432266675  ],
                          [ 0.948959998333,  0.23117333    ,  0.2432266675  ],
                          [ 0.051039998333,  0.73117333    ,  0.2432266675  ],
                          [ 0.384373331667,  0.73117333    ,  0.2432266675  ],
                          [ 0.717706665   ,  0.73117333    ,  0.2432266675  ],
                          [ 0.166666666667,  0.            ,  0.25          ],
                          [ 0.5           ,  0.            ,  0.25          ],
                          [ 0.833333333333,  0.            ,  0.25          ],
                          [ 0.166666666667,  0.29568       ,  0.25          ],
                          [ 0.5           ,  0.29568       ,  0.25          ],
                          [ 0.833333333333,  0.29568       ,  0.25          ],
                          [ 0.064586666667,  0.39784       ,  0.25          ],
                          [ 0.39792       ,  0.39784       ,  0.25          ],
                          [ 0.731253333333,  0.39784       ,  0.25          ],
                          [ 0.166666666667,  0.5           ,  0.25          ],
                          [ 0.5           ,  0.5           ,  0.25          ],
                          [ 0.833333333333,  0.5           ,  0.25          ],
                          [ 0.166666666667,  0.79568       ,  0.25          ],
                          [ 0.5           ,  0.79568       ,  0.25          ],
                          [ 0.833333333333,  0.79568       ,  0.25          ],
                          [ 0.268746666667,  0.89784       ,  0.25          ],
                          [ 0.60208       ,  0.89784       ,  0.25          ],
                          [ 0.935413333333,  0.89784       ,  0.25          ],
                          [ 0.051040001667,  0.06450667    ,  0.2567733325  ],
                          [ 0.384373335   ,  0.06450667    ,  0.2567733325  ],
                          [ 0.717706668333,  0.06450667    ,  0.2567733325  ],
                          [ 0.282293335   ,  0.56450667    ,  0.2567733325  ],
                          [ 0.615626668333,  0.56450667    ,  0.2567733325  ],
                          [ 0.948960001667,  0.56450667    ,  0.2567733325  ],
                          [ 0.217706666667,  0.39784       ,  0.32656       ],
                          [ 0.55104       ,  0.39784       ,  0.32656       ],
                          [ 0.884373333333,  0.39784       ,  0.32656       ],
                          [ 0.115626666667,  0.89784       ,  0.32656       ],
                          [ 0.44896       ,  0.89784       ,  0.32656       ],
                          [ 0.782293333333,  0.89784       ,  0.32656       ],
                          [ 0.231253335   ,  0.06450667    ,  0.3333333325  ],
                          [ 0.564586668333,  0.06450667    ,  0.3333333325  ],
                          [ 0.897920001667,  0.06450667    ,  0.3333333325  ],
                          [ 0.000000001667,  0.16666667    ,  0.3333333325  ],
                          [ 0.333333335   ,  0.16666667    ,  0.3333333325  ],
                          [ 0.666666668333,  0.16666667    ,  0.3333333325  ],
                          [ 0.000000001667,  0.46234667    ,  0.3333333325  ],
                          [ 0.333333335   ,  0.46234667    ,  0.3333333325  ],
                          [ 0.666666668333,  0.46234667    ,  0.3333333325  ],
                          [ 0.102080001667,  0.56450667    ,  0.3333333325  ],
                          [ 0.435413335   ,  0.56450667    ,  0.3333333325  ],
                          [ 0.768746668333,  0.56450667    ,  0.3333333325  ],
                          [ 0.000000001667,  0.66666667    ,  0.3333333325  ],
                          [ 0.333333335   ,  0.66666667    ,  0.3333333325  ],
                          [ 0.666666668333,  0.66666667    ,  0.3333333325  ],
                          [ 0.000000001667,  0.96234667    ,  0.3333333325  ],
                          [ 0.333333335   ,  0.96234667    ,  0.3333333325  ],
                          [ 0.666666668333,  0.96234667    ,  0.3333333325  ],
                          [ 0.115626665   ,  0.23117333    ,  0.3401066675  ],
                          [ 0.448959998333,  0.23117333    ,  0.3401066675  ],
                          [ 0.782293331667,  0.23117333    ,  0.3401066675  ],
                          [ 0.217706665   ,  0.73117333    ,  0.3401066675  ],
                          [ 0.551039998333,  0.73117333    ,  0.3401066675  ],
                          [ 0.884373331667,  0.73117333    ,  0.3401066675  ],
                          [ 0.051040001667,  0.06450667    ,  0.4098933325  ],
                          [ 0.384373335   ,  0.06450667    ,  0.4098933325  ],
                          [ 0.717706668333,  0.06450667    ,  0.4098933325  ],
                          [ 0.282293335   ,  0.56450667    ,  0.4098933325  ],
                          [ 0.615626668333,  0.56450667    ,  0.4098933325  ],
                          [ 0.948960001667,  0.56450667    ,  0.4098933325  ],
                          [ 0.166666665   ,  0.12901333    ,  0.4166666675  ],
                          [ 0.499999998333,  0.12901333    ,  0.4166666675  ],
                          [ 0.833333331667,  0.12901333    ,  0.4166666675  ],
                          [ 0.268746665   ,  0.23117333    ,  0.4166666675  ],
                          [ 0.602079998333,  0.23117333    ,  0.4166666675  ],
                          [ 0.935413331667,  0.23117333    ,  0.4166666675  ],
                          [ 0.166666665   ,  0.33333333    ,  0.4166666675  ],
                          [ 0.499999998333,  0.33333333    ,  0.4166666675  ],
                          [ 0.833333331667,  0.33333333    ,  0.4166666675  ],
                          [ 0.166666665   ,  0.62901333    ,  0.4166666675  ],
                          [ 0.499999998333,  0.62901333    ,  0.4166666675  ],
                          [ 0.833333331667,  0.62901333    ,  0.4166666675  ],
                          [ 0.064586665   ,  0.73117333    ,  0.4166666675  ],
                          [ 0.397919998333,  0.73117333    ,  0.4166666675  ],
                          [ 0.731253331667,  0.73117333    ,  0.4166666675  ],
                          [ 0.166666665   ,  0.83333333    ,  0.4166666675  ],
                          [ 0.499999998333,  0.83333333    ,  0.4166666675  ],
                          [ 0.833333331667,  0.83333333    ,  0.4166666675  ],
                          [ 0.05104       ,  0.39784       ,  0.42344       ],
                          [ 0.384373333333,  0.39784       ,  0.42344       ],
                          [ 0.717706666667,  0.39784       ,  0.42344       ],
                          [ 0.282293333333,  0.89784       ,  0.42344       ],
                          [ 0.615626666667,  0.89784       ,  0.42344       ],
                          [ 0.94896       ,  0.89784       ,  0.42344       ],
                          [ 0.115626665   ,  0.23117333    ,  0.4932266675  ],
                          [ 0.448959998333,  0.23117333    ,  0.4932266675  ],
                          [ 0.782293331667,  0.23117333    ,  0.4932266675  ],
                          [ 0.217706665   ,  0.73117333    ,  0.4932266675  ],
                          [ 0.551039998333,  0.73117333    ,  0.4932266675  ],
                          [ 0.884373331667,  0.73117333    ,  0.4932266675  ],
                          [ 0.            ,  0.            ,  0.5           ],
                          [ 0.333333333333,  0.            ,  0.5           ],
                          [ 0.666666666667,  0.            ,  0.5           ],
                          [ 0.            ,  0.29568       ,  0.5           ],
                          [ 0.333333333333,  0.29568       ,  0.5           ],
                          [ 0.666666666667,  0.29568       ,  0.5           ],
                          [ 0.231253333333,  0.39784       ,  0.5           ],
                          [ 0.564586666667,  0.39784       ,  0.5           ],
                          [ 0.89792       ,  0.39784       ,  0.5           ],
                          [ 0.            ,  0.5           ,  0.5           ],
                          [ 0.333333333333,  0.5           ,  0.5           ],
                          [ 0.666666666667,  0.5           ,  0.5           ],
                          [ 0.            ,  0.79568       ,  0.5           ],
                          [ 0.333333333333,  0.79568       ,  0.5           ],
                          [ 0.666666666667,  0.79568       ,  0.5           ],
                          [ 0.10208       ,  0.89784       ,  0.5           ],
                          [ 0.435413333333,  0.89784       ,  0.5           ],
                          [ 0.768746666667,  0.89784       ,  0.5           ],
                          [ 0.217706668333,  0.06450667    ,  0.5067733325  ],
                          [ 0.551040001667,  0.06450667    ,  0.5067733325  ],
                          [ 0.884373335   ,  0.06450667    ,  0.5067733325  ],
                          [ 0.115626668333,  0.56450667    ,  0.5067733325  ],
                          [ 0.448960001667,  0.56450667    ,  0.5067733325  ],
                          [ 0.782293335   ,  0.56450667    ,  0.5067733325  ],
                          [ 0.05104       ,  0.39784       ,  0.57656       ],
                          [ 0.384373333333,  0.39784       ,  0.57656       ],
                          [ 0.717706666667,  0.39784       ,  0.57656       ],
                          [ 0.282293333333,  0.89784       ,  0.57656       ],
                          [ 0.615626666667,  0.89784       ,  0.57656       ],
                          [ 0.94896       ,  0.89784       ,  0.57656       ],
                          [ 0.064586668333,  0.06450667    ,  0.5833333325  ],
                          [ 0.397920001667,  0.06450667    ,  0.5833333325  ],
                          [ 0.731253335   ,  0.06450667    ,  0.5833333325  ],
                          [ 0.166666668333,  0.16666667    ,  0.5833333325  ],
                          [ 0.500000001667,  0.16666667    ,  0.5833333325  ],
                          [ 0.833333335   ,  0.16666667    ,  0.5833333325  ],
                          [ 0.166666668333,  0.46234667    ,  0.5833333325  ],
                          [ 0.500000001667,  0.46234667    ,  0.5833333325  ],
                          [ 0.833333335   ,  0.46234667    ,  0.5833333325  ],
                          [ 0.268746668333,  0.56450667    ,  0.5833333325  ],
                          [ 0.602080001667,  0.56450667    ,  0.5833333325  ],
                          [ 0.935413335   ,  0.56450667    ,  0.5833333325  ],
                          [ 0.166666668333,  0.66666667    ,  0.5833333325  ],
                          [ 0.500000001667,  0.66666667    ,  0.5833333325  ],
                          [ 0.833333335   ,  0.66666667    ,  0.5833333325  ],
                          [ 0.166666668333,  0.96234667    ,  0.5833333325  ],
                          [ 0.500000001667,  0.96234667    ,  0.5833333325  ],
                          [ 0.833333335   ,  0.96234667    ,  0.5833333325  ],
                          [ 0.282293331667,  0.23117333    ,  0.5901066675  ],
                          [ 0.615626665   ,  0.23117333    ,  0.5901066675  ],
                          [ 0.948959998333,  0.23117333    ,  0.5901066675  ],
                          [ 0.051039998333,  0.73117333    ,  0.5901066675  ],
                          [ 0.384373331667,  0.73117333    ,  0.5901066675  ],
                          [ 0.717706665   ,  0.73117333    ,  0.5901066675  ],
                          [ 0.217706668333,  0.06450667    ,  0.6598933325  ],
                          [ 0.551040001667,  0.06450667    ,  0.6598933325  ],
                          [ 0.884373335   ,  0.06450667    ,  0.6598933325  ],
                          [ 0.115626668333,  0.56450667    ,  0.6598933325  ],
                          [ 0.448960001667,  0.56450667    ,  0.6598933325  ],
                          [ 0.782293335   ,  0.56450667    ,  0.6598933325  ],
                          [-0.000000001667,  0.12901333    ,  0.6666666675  ],
                          [ 0.333333331667,  0.12901333    ,  0.6666666675  ],
                          [ 0.666666665   ,  0.12901333    ,  0.6666666675  ],
                          [ 0.102079998333,  0.23117333    ,  0.6666666675  ],
                          [ 0.435413331667,  0.23117333    ,  0.6666666675  ],
                          [ 0.768746665   ,  0.23117333    ,  0.6666666675  ],
                          [-0.000000001667,  0.33333333    ,  0.6666666675  ],
                          [ 0.333333331667,  0.33333333    ,  0.6666666675  ],
                          [ 0.666666665   ,  0.33333333    ,  0.6666666675  ],
                          [-0.000000001667,  0.62901333    ,  0.6666666675  ],
                          [ 0.333333331667,  0.62901333    ,  0.6666666675  ],
                          [ 0.666666665   ,  0.62901333    ,  0.6666666675  ],
                          [ 0.231253331667,  0.73117333    ,  0.6666666675  ],
                          [ 0.564586665   ,  0.73117333    ,  0.6666666675  ],
                          [ 0.897919998333,  0.73117333    ,  0.6666666675  ],
                          [-0.000000001667,  0.83333333    ,  0.6666666675  ],
                          [ 0.333333331667,  0.83333333    ,  0.6666666675  ],
                          [ 0.666666665   ,  0.83333333    ,  0.6666666675  ],
                          [ 0.217706666667,  0.39784       ,  0.67344       ],
                          [ 0.55104       ,  0.39784       ,  0.67344       ],
                          [ 0.884373333333,  0.39784       ,  0.67344       ],
                          [ 0.115626666667,  0.89784       ,  0.67344       ],
                          [ 0.44896       ,  0.89784       ,  0.67344       ],
                          [ 0.782293333333,  0.89784       ,  0.67344       ],
                          [ 0.282293331667,  0.23117333    ,  0.7432266675  ],
                          [ 0.615626665   ,  0.23117333    ,  0.7432266675  ],
                          [ 0.948959998333,  0.23117333    ,  0.7432266675  ],
                          [ 0.051039998333,  0.73117333    ,  0.7432266675  ],
                          [ 0.384373331667,  0.73117333    ,  0.7432266675  ],
                          [ 0.717706665   ,  0.73117333    ,  0.7432266675  ],
                          [ 0.166666666667,  0.            ,  0.75          ],
                          [ 0.5           ,  0.            ,  0.75          ],
                          [ 0.833333333333,  0.            ,  0.75          ],
                          [ 0.166666666667,  0.29568       ,  0.75          ],
                          [ 0.5           ,  0.29568       ,  0.75          ],
                          [ 0.833333333333,  0.29568       ,  0.75          ],
                          [ 0.064586666667,  0.39784       ,  0.75          ],
                          [ 0.39792       ,  0.39784       ,  0.75          ],
                          [ 0.731253333333,  0.39784       ,  0.75          ],
                          [ 0.166666666667,  0.5           ,  0.75          ],
                          [ 0.5           ,  0.5           ,  0.75          ],
                          [ 0.833333333333,  0.5           ,  0.75          ],
                          [ 0.166666666667,  0.79568       ,  0.75          ],
                          [ 0.5           ,  0.79568       ,  0.75          ],
                          [ 0.833333333333,  0.79568       ,  0.75          ],
                          [ 0.268746666667,  0.89784       ,  0.75          ],
                          [ 0.60208       ,  0.89784       ,  0.75          ],
                          [ 0.935413333333,  0.89784       ,  0.75          ],
                          [ 0.051040001667,  0.06450667    ,  0.7567733325  ],
                          [ 0.384373335   ,  0.06450667    ,  0.7567733325  ],
                          [ 0.717706668333,  0.06450667    ,  0.7567733325  ],
                          [ 0.282293335   ,  0.56450667    ,  0.7567733325  ],
                          [ 0.615626668333,  0.56450667    ,  0.7567733325  ],
                          [ 0.948960001667,  0.56450667    ,  0.7567733325  ],
                          [ 0.217706666667,  0.39784       ,  0.82656       ],
                          [ 0.55104       ,  0.39784       ,  0.82656       ],
                          [ 0.884373333333,  0.39784       ,  0.82656       ],
                          [ 0.115626666667,  0.89784       ,  0.82656       ],
                          [ 0.44896       ,  0.89784       ,  0.82656       ],
                          [ 0.782293333333,  0.89784       ,  0.82656       ],
                          [ 0.231253335   ,  0.06450667    ,  0.8333333325  ],
                          [ 0.564586668333,  0.06450667    ,  0.8333333325  ],
                          [ 0.897920001667,  0.06450667    ,  0.8333333325  ],
                          [ 0.000000001667,  0.16666667    ,  0.8333333325  ],
                          [ 0.333333335   ,  0.16666667    ,  0.8333333325  ],
                          [ 0.666666668333,  0.16666667    ,  0.8333333325  ],
                          [ 0.000000001667,  0.46234667    ,  0.8333333325  ],
                          [ 0.333333335   ,  0.46234667    ,  0.8333333325  ],
                          [ 0.666666668333,  0.46234667    ,  0.8333333325  ],
                          [ 0.102080001667,  0.56450667    ,  0.8333333325  ],
                          [ 0.435413335   ,  0.56450667    ,  0.8333333325  ],
                          [ 0.768746668333,  0.56450667    ,  0.8333333325  ],
                          [ 0.000000001667,  0.66666667    ,  0.8333333325  ],
                          [ 0.333333335   ,  0.66666667    ,  0.8333333325  ],
                          [ 0.666666668333,  0.66666667    ,  0.8333333325  ],
                          [ 0.000000001667,  0.96234667    ,  0.8333333325  ],
                          [ 0.333333335   ,  0.96234667    ,  0.8333333325  ],
                          [ 0.666666668333,  0.96234667    ,  0.8333333325  ],
                          [ 0.115626665   ,  0.23117333    ,  0.8401066675  ],
                          [ 0.448959998333,  0.23117333    ,  0.8401066675  ],
                          [ 0.782293331667,  0.23117333    ,  0.8401066675  ],
                          [ 0.217706665   ,  0.73117333    ,  0.8401066675  ],
                          [ 0.551039998333,  0.73117333    ,  0.8401066675  ],
                          [ 0.884373331667,  0.73117333    ,  0.8401066675  ],
                          [ 0.051040001667,  0.06450667    ,  0.9098933325  ],
                          [ 0.384373335   ,  0.06450667    ,  0.9098933325  ],
                          [ 0.717706668333,  0.06450667    ,  0.9098933325  ],
                          [ 0.282293335   ,  0.56450667    ,  0.9098933325  ],
                          [ 0.615626668333,  0.56450667    ,  0.9098933325  ],
                          [ 0.948960001667,  0.56450667    ,  0.9098933325  ],
                          [ 0.166666665   ,  0.12901333    ,  0.9166666675  ],
                          [ 0.499999998333,  0.12901333    ,  0.9166666675  ],
                          [ 0.833333331667,  0.12901333    ,  0.9166666675  ],
                          [ 0.268746665   ,  0.23117333    ,  0.9166666675  ],
                          [ 0.602079998333,  0.23117333    ,  0.9166666675  ],
                          [ 0.935413331667,  0.23117333    ,  0.9166666675  ],
                          [ 0.166666665   ,  0.33333333    ,  0.9166666675  ],
                          [ 0.499999998333,  0.33333333    ,  0.9166666675  ],
                          [ 0.833333331667,  0.33333333    ,  0.9166666675  ],
                          [ 0.166666665   ,  0.62901333    ,  0.9166666675  ],
                          [ 0.499999998333,  0.62901333    ,  0.9166666675  ],
                          [ 0.833333331667,  0.62901333    ,  0.9166666675  ],
                          [ 0.064586665   ,  0.73117333    ,  0.9166666675  ],
                          [ 0.397919998333,  0.73117333    ,  0.9166666675  ],
                          [ 0.731253331667,  0.73117333    ,  0.9166666675  ],
                          [ 0.166666665   ,  0.83333333    ,  0.9166666675  ],
                          [ 0.499999998333,  0.83333333    ,  0.9166666675  ],
                          [ 0.833333331667,  0.83333333    ,  0.9166666675  ],
                          [ 0.05104       ,  0.39784       ,  0.92344       ],
                          [ 0.384373333333,  0.39784       ,  0.92344       ],
                          [ 0.717706666667,  0.39784       ,  0.92344       ],
                          [ 0.282293333333,  0.89784       ,  0.92344       ],
                          [ 0.615626666667,  0.89784       ,  0.92344       ],
                          [ 0.94896       ,  0.89784       ,  0.92344       ],
                          [ 0.115626665   ,  0.23117333    ,  0.9932266675  ],
                          [ 0.448959998333,  0.23117333    ,  0.9932266675  ],
                          [ 0.782293331667,  0.23117333    ,  0.9932266675  ],
                          [ 0.217706665   ,  0.73117333    ,  0.9932266675  ],
                          [ 0.551039998333,  0.73117333    ,  0.9932266675  ],
                          [ 0.884373331667,  0.73117333    ,  0.9932266675  ],
                          [ 0.            ,  0.            ,  1.            ],
                          [ 0.333333333333,  0.            ,  1.            ],
                          [ 0.666666666667,  0.            ,  1.            ],
                          [ 0.            ,  0.29568       ,  1.            ],
                          [ 0.333333333333,  0.29568       ,  1.            ],
                          [ 0.666666666667,  0.29568       ,  1.            ],
                          [ 0.231253333333,  0.39784       ,  1.            ],
                          [ 0.564586666667,  0.39784       ,  1.            ],
                          [ 0.89792       ,  0.39784       ,  1.            ],
                          [ 0.            ,  0.5           ,  1.            ],
                          [ 0.333333333333,  0.5           ,  1.            ],
                          [ 0.666666666667,  0.5           ,  1.            ],
                          [ 0.            ,  0.79568       ,  1.            ],
                          [ 0.333333333333,  0.79568       ,  1.            ],
                          [ 0.666666666667,  0.79568       ,  1.            ],
                          [ 0.10208       ,  0.89784       ,  1.            ],
                          [ 0.435413333333,  0.89784       ,  1.            ],
                          [ 0.768746666667,  0.89784       ,  1.            ]]

# Set up configuration
bulk_configuration = BulkConfiguration(
    bravais_lattice=lattice,
    elements=elements,
    fractional_coordinates=fractional_coordinates
    )

# -------------------------------------------------------------
# Calculator
# -------------------------------------------------------------

# Define the Matsui-potential for alumina.
potentialSet = TremoloXPotentialSet(name = 'Matsui_AlO_1994')
potentialSet.addParticleType(ParticleType(symbol='O', mass=15.9994 * atomic_mass_unit, charge=-0.945, sigma=None, sigma14=None, epsilon=None, epsilon14=None))
potentialSet.addParticleType(ParticleType(symbol='Al', mass=26.9815 * atomic_mass_unit, charge=1.4175, sigma=None, sigma14=None, epsilon=None, epsilon14=None))

potentialSet.addPotential(TosiFumiPotential(particleType1 = 'O', particleType2 = 'O', A = 0.0119684916*eV, B = 3.6231884058*1/Ang, C = 85.0924321807*Ang**6*eV, D = 0.0*Ang**8*eV, sigma = 3.643*Angstrom, r_i = 4.5*Angstrom, r_cut = 5.5*Angstrom))
potentialSet.addPotential(TosiFumiPotential(particleType1 = 'Al', particleType2 = 'O', A = 0.0074586252*eV, B = 5.81395348837*1/Ang, C = 34.5778981668*Ang**6*eV, D = 0.0*Ang**8*eV, sigma = 2.6067*Angstrom, r_i = 4.5*Angstrom, r_cut = 5.5*Angstrom))
potentialSet.addPotential(TosiFumiPotential(particleType1 = 'Al', particleType2 = 'Al', A = 0.0029487588*eV, B = 14.7058823529*1/Ang, C = 14.0509680002*Ang**6*eV, D = 0.0*Ang**8*eV, sigma = 1.5704*Angstrom, r_i = 4.5*Angstrom, r_cut = 5.5*Angstrom))

potentialSet.setCoulombSolver(CoulombSPME(r_cut=9.0*Angstrom, accuracy=1.0e-4))

calculator = TremoloXCalculator(parameters=potentialSet)

bulk_configuration.setCalculator(calculator)
bulk_configuration.update()

# -------------------------------------------------------------
# Molecular Dynamics
# -------------------------------------------------------------

initial_velocity = MaxwellBoltzmannDistribution(
    temperature=5000.0*Kelvin,
    remove_center_of_mass_momentum=True
)

method = NVTNoseHoover(
    time_step=1*femtoSecond,
    reservoir_temperature=5000*Kelvin,
    thermostat_timescale=100*femtoSecond,
    heating_rate=-13.3333*Kelvin/picoSecond,
    chain_length=3,
    initial_velocity=initial_velocity
)

md_trajectory = MolecularDynamics(
    bulk_configuration,
    constraints=[],
    trajectory_filename='AlOx_low_density_cool_traj.hdf5',
    steps=150000,
    log_interval=5000,
    method=method
)

bulk_configuration = md_trajectory.lastImage()

# Wrap the coordinates back inside the cell.
wrap(bulk_configuration)

# Now adjust the density to the target density of 3.175 g/cm**3

# Get the volume and the lattice vectors of the cell.
V = bulk_configuration.bravaisLattice().unitCellVolume()
lattice_vectors = bulk_configuration.bravaisLattice().primitiveVectors()

# Get the coordinates and the elements.
fractional_coordinates = bulk_configuration.fractionalCoordinates()
elements = bulk_configuration.elements()

# The total and species-resolved number of atoms.
N = len(elements)
N_Al = len(numpy.where(numpy.array(elements)==Aluminum)[0])
N_O  = len(numpy.where(numpy.array(elements)==Oxygen)[0])

# Calculate the current density
density = (N_Al*Aluminium.atomicMass() + N_O*Oxygen.atomicMass())/V

# Get the density in g/cm**3
density = density.inUnitsOf(kiloGram/Meter**3)/1000.0
target_density = 3.175

# Calculate the scaling factor for the lattice vectors.
scale_factor = (density/target_density)**(1.0/3)

# Scale the lattice vectors.
lattice_vectors = lattice_vectors*scale_factor

# Define a new cell.
new_lattice = UnitCell(lattice_vectors[0], lattice_vectors[1], lattice_vectors[2])

# Set up configuration
bulk_configuration = BulkConfiguration(
    bravais_lattice=new_lattice,
    elements=elements,
    fractional_coordinates=fractional_coordinates
    )

# The calculator is still defined and can readily be attached.
bulk_configuration.setCalculator(calculator)

# -------------------------------------------------------------
# Molecular Dynamics
# -------------------------------------------------------------

initial_velocity = MaxwellBoltzmannDistribution(
    temperature=3000.0*Kelvin,
    remove_center_of_mass_momentum=True
)

method = NVTNoseHoover(
    time_step=1*femtoSecond,
    reservoir_temperature=3000*Kelvin,
    thermostat_timescale=100*femtoSecond,
    heating_rate=-9*Kelvin/picoSecond,
    chain_length=3,
    initial_velocity=initial_velocity
)

md_trajectory = MolecularDynamics(
    bulk_configuration,
    constraints=[],
    trajectory_filename='AlOx_cool_to300K_traj.hdf5',
    steps=300000,
    log_interval=5000,
    method=method
)

bulk_configuration = md_trajectory.lastImage()
