# -*- coding: utf-8 -*-
# -------------------------------------------------------------
# Bulk Configuration
# -------------------------------------------------------------

# Set up lattice
vector_a = [19.4208291666, 0.0, 0.0]*Angstrom
vector_b = [0.0, 19.4208291666, 0.0]*Angstrom
vector_c = [0.0, 0.0, 21.7708]*Angstrom
lattice = UnitCell(vector_a, vector_b, vector_c)

# Define elements
elements = [Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum, Platinum, Platinum, Platinum, Platinum, Platinum,
            Platinum]

# Define coordinates
fractional_coordinates = [[ 0.071476891153,  0.071677939606,  0.095448841337],
                          [ 0.21422958197 ,  0.071767563389,  0.09551863341 ],
                          [ 0.356980476979,  0.071733071169,  0.095431689739],
                          [ 0.49992007245 ,  0.07158378379 ,  0.095165619418],
                          [ 0.642837906088,  0.071473631863,  0.095045925408],
                          [ 0.785797818457,  0.071436255218,  0.095035426227],
                          [ 0.928737109658,  0.071569869326,  0.095311713306],
                          [ 0.071619837528,  0.214433355378,  0.095720726718],
                          [ 0.214331542408,  0.214585088388,  0.095987062411],
                          [ 0.356945462178,  0.214633000271,  0.095938513878],
                          [ 0.499789427236,  0.214569435451,  0.095589891744],
                          [ 0.642684963764,  0.21445303171 ,  0.09534440104 ],
                          [ 0.785777183724,  0.214327566169,  0.095176886243],
                          [ 0.928838266852,  0.214338566184,  0.095471359624],
                          [ 0.071690444146,  0.357031542891,  0.095785874864],
                          [ 0.214433123176,  0.357095222226,  0.096135332309],
                          [ 0.356995448253,  0.35719049206 ,  0.096135332309],
                          [ 0.499738127283,  0.357254171394,  0.095785874864],
                          [ 0.642583703389,  0.357228707917,  0.09549467485 ],
                          [ 0.785714285714,  0.357142857143,  0.095240634258],
                          [ 0.928844868039,  0.357057006369,  0.09549467485 ],
                          [ 0.071639144193,  0.499716278835,  0.095589891744],
                          [ 0.214483109251,  0.499652714015,  0.095938513878],
                          [ 0.357097029021,  0.499700625898,  0.095987062411],
                          [ 0.499808733901,  0.499852358908,  0.095720726718],
                          [ 0.642590304576,  0.499947148102,  0.095471359624],
                          [ 0.785651387705,  0.499958148117,  0.095176886243],
                          [ 0.928743607665,  0.499832682576,  0.09534440104 ],
                          [ 0.071508498979,  0.642701930495,  0.095165619418],
                          [ 0.21444809445 ,  0.642552643117,  0.095431689739],
                          [ 0.357198989459,  0.642518150896,  0.09551863341 ],
                          [ 0.499951680276,  0.642607774679,  0.095448841337],
                          [ 0.642691461771,  0.642715844959,  0.095311713306],
                          [ 0.785630752972,  0.642849459068,  0.095035426227],
                          [ 0.928590665341,  0.642812082423,  0.095045925408],
                          [ 0.071397585934,  0.785731914328,  0.094996964001],
                          [ 0.214315482243,  0.785646265432,  0.095068100242],
                          [ 0.357177382924,  0.785585242293,  0.095104608232],
                          [ 0.500020669229,  0.785586020025,  0.095097447318],
                          [ 0.642839294304,  0.785650480886,  0.095049611824],
                          [ 0.785704376904,  0.785732960379,  0.094963613701],
                          [ 0.928547876908,  0.785743876766,  0.094979809646],
                          [ 0.0714079022  ,  0.928699694261,  0.095097447318],
                          [ 0.214251188505,  0.928700471993,  0.095104608232],
                          [ 0.357113089185,  0.928639448854,  0.095068100242],
                          [ 0.500030985495,  0.928553799958,  0.094996964001],
                          [ 0.64288069452 ,  0.92854183752 ,  0.094979809646],
                          [ 0.785724194524,  0.928552753907,  0.094963613701],
                          [ 0.928589277125,  0.9286352334  ,  0.095049611824],
                          [-0.000012717108, -0.00001672564 ,  0.181124437582],
                          [ 0.142819437905,  0.000001517452,  0.181147232103],
                          [ 0.285676903279, -0.000003682009,  0.181086027432],
                          [ 0.428649866641, -0.00008531149 ,  0.180924489997],
                          [ 0.571483143524, -0.000050169787,  0.180917263641],
                          [ 0.714293287926, -0.000062427867,  0.180921621119],
                          [ 0.857074175205, -0.000100267729,  0.180949570318],
                          [ 0.000143234997,  0.142995680047,  0.181633638761],
                          [ 0.142777168782,  0.142985397039,  0.181738550078],
                          [ 0.285542212126,  0.14304567233 ,  0.181798444111],
                          [ 0.428554874364,  0.142899877123,  0.181331019619],
                          [ 0.571433954371,  0.142835473885,  0.181087280059],
                          [ 0.714343400662,  0.142760548608,  0.180921837814],
                          [ 0.857174963038,  0.142838300413,  0.181105088033],
                          [ 0.000195097537,  0.28568783172 ,  0.181742707791],
                          [ 0.142872288062,  0.285726413306,  0.182116056576],
                          [ 0.285680596071,  0.285896897262,  0.182453658608],
                          [ 0.428528165244,  0.285916495106,  0.181987019307],
                          [ 0.571253972425,  0.285895624673,  0.18164222053 ],
                          [ 0.714261055087,  0.285733041115,  0.181119051752],
                          [ 0.857190685903,  0.285692649147,  0.181164583893],
                          [ 0.000174599004,  0.428390089613,  0.18164222053 ],
                          [ 0.142900406184,  0.428369219179,  0.181987019307],
                          [ 0.285747975357,  0.428388817024,  0.182453658608],
                          [ 0.428556283366,  0.42855930098 ,  0.182116056576],
                          [ 0.571233473891,  0.428597882566,  0.181742707791],
                          [ 0.714237885526,  0.428593065139,  0.181164583893],
                          [ 0.857167516341,  0.428552673171,  0.181119051752],
                          [-0.000005382942,  0.5714502404  ,  0.181087280059],
                          [ 0.142873697064,  0.571385837163,  0.181331019619],
                          [ 0.285886359302,  0.571240041955,  0.181798444111],
                          [ 0.428651402647,  0.571300317246,  0.181738550078],
                          [ 0.571285336432,  0.571290034239,  0.181633638761],
                          [ 0.714253608391,  0.571447413873,  0.181105088033],
                          [ 0.857085170767,  0.571525165677,  0.180921837814],
                          [-0.000054572095,  0.714335884073,  0.180917263641],
                          [ 0.142778704788,  0.714371025776,  0.180924489997],
                          [ 0.285751668149,  0.714289396294,  0.181086027432],
                          [ 0.428609133524,  0.714284196834,  0.181147232103],
                          [ 0.571441288537,  0.714302439925,  0.181124437582],
                          [ 0.714354396223,  0.714385982015,  0.180949570318],
                          [ 0.857135283503,  0.714348142153,  0.180921621119],
                          [-0.000048867931,  0.857141634459,  0.180949858897],
                          [ 0.142819009425,  0.857161056544,  0.180926261853],
                          [ 0.285714285714,  0.857142857143,  0.180908567489],
                          [ 0.428609562004,  0.857124657742,  0.180926261853],
                          [ 0.57147743936 ,  0.857144079827,  0.180949858897],
                          [ 0.71430797318 ,  0.857154417719,  0.180956088687],
                          [ 0.857120598248,  0.857131296567,  0.180956088687],
                          [ 0.071433652552,  0.071229121209,  0.270479482749],
                          [ 0.214131311274,  0.071155568545,  0.270470164741],
                          [ 0.357440394596,  0.070970722986,  0.270104166083],
                          [ 0.500175762874,  0.071214746057,  0.270210099866],
                          [ 0.642938087144,  0.071221799256,  0.270165054873],
                          [ 0.785615032917,  0.071282269905,  0.270208307842],
                          [ 0.928220184302,  0.071044369006,  0.270093906973],
                          [ 0.07165748343 ,  0.214578116471,  0.271567235372],
                          [ 0.213564907097,  0.214330279453,  0.271447345349],
                          [ 0.357290365187,  0.214225448398,  0.270780793152],
                          [ 0.500060803547,  0.214101539502,  0.270473157899],
                          [ 0.643164672788,  0.21394056988 ,  0.270046227352],
                          [ 0.785723423343,  0.214170838699,  0.270217112819],
                          [ 0.928453316576,  0.214297306875,  0.270463308773],
                          [ 0.071698187409,  0.356716310973,  0.27158044433 ],
                          [ 0.213796409502,  0.35683333889 ,  0.271875772856],
                          [ 0.357632161927,  0.357452375396,  0.271875772856],
                          [ 0.499730384019,  0.357569403313,  0.27158044433 ],
                          [ 0.642948307719,  0.357241791472,  0.2704459205  ],
                          [ 0.785714285714,  0.357142857143,  0.270237497122],
                          [ 0.928480263709,  0.357043922814,  0.2704459205  ],
                          [ 0.071367767882,  0.500184174784,  0.270473157899],
                          [ 0.214138206242,  0.500060265888,  0.270780793152],
                          [ 0.357863664331,  0.499955434833,  0.271447345349],
                          [ 0.499771087998,  0.499707597815,  0.271567235372],
                          [ 0.642975254853,  0.499988407411,  0.270463308773],
                          [ 0.785705148085,  0.500114875586,  0.270217112819],
                          [ 0.928263898641,  0.500345144405,  0.270046227352],
                          [ 0.071252808555,  0.643070968229,  0.270210099866],
                          [ 0.213988176833,  0.643314991299,  0.270104166083],
                          [ 0.357297260155,  0.64313014574 ,  0.270470164741],
                          [ 0.499994918877,  0.643056593077,  0.270479482749],
                          [ 0.643208387127,  0.643241345279,  0.270093906973],
                          [ 0.785813538512,  0.643003444381,  0.270208307842],
                          [ 0.928490484285,  0.643063915029,  0.270165054873],
                          [ 0.071339969561,  0.78576824882 ,  0.270141438736],
                          [ 0.214225852162,  0.785856036447,  0.270126800266],
                          [ 0.357178845883,  0.785837391922,  0.270167558266],
                          [ 0.500076398396,  0.785849263811,  0.270217674024],
                          [ 0.642955238054,  0.785870795689,  0.270228525631],
                          [ 0.785736446002,  0.78577320504 ,  0.270228424297],
                          [ 0.928497702356,  0.78574598852 ,  0.27017690571 ],
                          [ 0.071352173032,  0.928436450475,  0.270217674024],
                          [ 0.214249725546,  0.928448322364,  0.270167558266],
                          [ 0.357202719266,  0.928429677839,  0.270126800266],
                          [ 0.500088601867,  0.928517465466,  0.270141438736],
                          [ 0.642930869072,  0.928539725765,  0.27017690571 ],
                          [ 0.785692125427,  0.928512509246,  0.270228424297],
                          [ 0.928473333375,  0.928414918597,  0.270228525631],
                          [-0.000158672329, -0.000551335153,  0.359559690166],
                          [ 0.142772290027, -0.000455881976,  0.359510089248],
                          [ 0.285744010348, -0.000643115537,  0.3595307305  ],
                          [ 0.428728350758, -0.000313000084,  0.359439782983],
                          [ 0.571572000162, -0.000228704153,  0.35950216726 ],
                          [ 0.714302883669, -0.000140424356,  0.359535601826],
                          [ 0.857001619348, -0.000195472029,  0.359530780415],
                          [-0.001214894278,  0.141610906204,  0.358793392157],
                          [ 0.142687648435,  0.142514226501,  0.360382514462],
                          [ 0.286696541246,  0.141247902158,  0.358880604612],
                          [ 0.429046113335,  0.142331603508,  0.359562815992],
                          [ 0.571679234074,  0.142294886679,  0.359540233021],
                          [ 0.714262266065,  0.142621029528,  0.359486534668],
                          [ 0.856685630829,  0.142650928964,  0.359548957615],
                          [-0.000235846804,  0.285646440373,  0.360459004359],
                          [ 0.142308340235,  0.285559047346,  0.36520633436 ],
                          [ 0.28460866694 ,  0.284621840088,  0.359853315812],
                          [ 0.428938390463,  0.285455644606,  0.360307424668],
                          [ 0.572604358026,  0.28461375266 ,  0.358803850796],
                          [ 0.714590983911,  0.285607768683,  0.359490363682],
                          [ 0.856932346129,  0.285634918839,  0.359492280028],
                          [-0.001175786597,  0.429671961626,  0.358803850796],
                          [ 0.142490180965,  0.42883006968 ,  0.360307424668],
                          [ 0.286819904488,  0.429663874198,  0.359853315812],
                          [ 0.429120231193,  0.42872666694 ,  0.36520633436 ],
                          [ 0.571664418232,  0.428639273913,  0.360459004359],
                          [ 0.714496225299,  0.428650795447,  0.359492280028],
                          [ 0.856837587517,  0.428677945603,  0.359490363682],
                          [-0.000250662646,  0.571990827606,  0.359540233021],
                          [ 0.142382458094,  0.571954110778,  0.359562815992],
                          [ 0.284732030182,  0.573037812127,  0.358880604612],
                          [ 0.428740922994,  0.571771487785,  0.360382514462],
                          [ 0.572643465706,  0.572674808082,  0.358793392157],
                          [ 0.7147429406  ,  0.571634785322,  0.359548957615],
                          [ 0.857166305363,  0.571664684758,  0.359486534668],
                          [-0.000143428733,  0.714514418439,  0.35950216726 ],
                          [ 0.14270022067 ,  0.71459871437 ,  0.359439782983],
                          [ 0.285684561081,  0.714928829823,  0.3595307305  ],
                          [ 0.428656281402,  0.714741596262,  0.359510089248],
                          [ 0.571587243757,  0.714837049439,  0.359559690166],
                          [ 0.71442695208 ,  0.714481186315,  0.359530780415],
                          [ 0.857125687759,  0.714426138641,  0.359535601826],
                          [-0.000118163791,  0.856996705446,  0.359506935376],
                          [ 0.142772290193,  0.857053384075,  0.359444287355],
                          [ 0.285714285714,  0.857142857143,  0.35945833579 ],
                          [ 0.428656281235,  0.857232330211,  0.359444287355],
                          [ 0.571546735219,  0.85728900884 ,  0.359506935376],
                          [ 0.714343127611,  0.857180250463,  0.359549064322],
                          [ 0.857085443817,  0.857105463823,  0.359549064322],
                          [ 0.071407580151,  0.070021064407,  0.446256838403],
                          [ 0.214073296263,  0.070013834592,  0.446271784778],
                          [ 0.357449175134,  0.070499508547,  0.445711601263],
                          [ 0.500243867747,  0.070782578525,  0.445699248215],
                          [ 0.64297938693 ,  0.071147122611,  0.445680148407],
                          [ 0.785571106133,  0.071223358891,  0.445653546069],
                          [ 0.928201620286,  0.071001904567,  0.445654739735],
                          [ 0.066199138865,  0.209008203896,  0.446353891489],
                          [ 0.218708266694,  0.209050682643,  0.446472180934],
                          [ 0.358333775661,  0.212962703464,  0.446889811833],
                          [ 0.500402431209,  0.213045403121,  0.446310980677],
                          [ 0.643172572366,  0.213913180699,  0.445680672236],
                          [ 0.785361352689,  0.214120271601,  0.445678021377],
                          [ 0.927277080644,  0.214257448043,  0.446275442333],
                          [ 0.066292666057,  0.36200883283 ,  0.446522096182],
                          [ 0.217538719928,  0.362471126593,  0.446978556975],
                          [ 0.3538898515  ,  0.351814587692,  0.446978556975],
                          [ 0.505135905371,  0.352276881456,  0.446522096182],
                          [ 0.644014463225,  0.357257732494,  0.446281125061],
                          [ 0.785714285714,  0.357142857143,  0.445694018003],
                          [ 0.927414108204,  0.357027981792,  0.446281125061],
                          [ 0.07102614022 ,  0.501240311165,  0.446310980677],
                          [ 0.213094795767,  0.501323010822,  0.446889811833],
                          [ 0.352720304735,  0.505235031643,  0.446472180934],
                          [ 0.505229432563,  0.505277510389,  0.446353891489],
                          [ 0.644151490785,  0.500028266242,  0.446275442333],
                          [ 0.786067218739,  0.500165442684,  0.445678021377],
                          [ 0.928255999062,  0.500372533586,  0.445680672236],
                          [ 0.071184703682,  0.64350313576 ,  0.445699248215],
                          [ 0.213979396295,  0.643786205739,  0.445711601263],
                          [ 0.357355275166,  0.644271879694,  0.446271784778],
                          [ 0.500020991278,  0.644264649879,  0.446256838403],
                          [ 0.643226951143,  0.643283809719,  0.445654739735],
                          [ 0.785857465296,  0.643062355394,  0.445653546069],
                          [ 0.928449184499,  0.643138591675,  0.445680148407],
                          [ 0.071323360742,  0.785779791072,  0.445659876884],
                          [ 0.214184925594,  0.785943464028,  0.445671622751],
                          [ 0.357186864398,  0.786227490853,  0.445694024532],
                          [ 0.500101164093,  0.786277157419,  0.445676874968],
                          [ 0.642993179581,  0.785935275009,  0.445652099244],
                          [ 0.785737431589,  0.785791195979,  0.445648594725],
                          [ 0.928489259161,  0.785761889409,  0.44567115802 ],
                          [ 0.071327407336,  0.928008556866,  0.445676874968],
                          [ 0.21424170703 ,  0.928058223433,  0.445694024532],
                          [ 0.357243645835,  0.928342250257,  0.445671622751],
                          [ 0.500105210687,  0.928505923213,  0.445659876884],
                          [ 0.642939312268,  0.928523824877,  0.44567115802 ],
                          [ 0.785691139839,  0.928494518307,  0.445648594725],
                          [ 0.928435391848,  0.928350439277,  0.445652099244],
                          [ 0.142023940953,  0.284983847074,  0.509401001692],
                          [ 0.429404630476,  0.429301867212,  0.509401001692]]

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

# Add tags
bulk_configuration.addTags('Selection 0', [ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12,
                                           13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
                                           26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
                                           39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
                                           52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
                                           65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
                                           78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
                                           91, 92, 93, 94, 95, 96, 97])

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

potentialSet = EAM_Pt_2004()
calculator = TremoloXCalculator(parameters=potentialSet)
calculator.setVerletListsDelta(0.25*Angstrom)

bulk_configuration.setCalculator(calculator)
bulk_configuration.update()

# -------------------------------------------------------------
# Adaptive Kinetic Monte Carlo
# -------------------------------------------------------------

htst_parameters = HTSTParameters(
    assumed_prefactor=1e14/Second,
    )

# If the the markov chain already exists, read it from file,
# otherwise create a new object.
if os.path.isfile('akmc_markov_chain.nc'):
    markov_chain = nlread('akmc_markov_chain.nc')[0]
else:
    markov_chain = MarkovChain(
        configuration=bulk_configuration,
        configuration_energy=TotalEnergy(bulk_configuration).evaluate(),
        )

# If the the kinetic Monte Carlo already exists, read it from file to resume it,
# otherwise create a new kinetic Monte Carlo object.
if os.path.isfile('akmc_kmc.nc'):
    kmc = nlread('akmc_kmc.nc')[0]
else:
    kmc = None

constraints = [ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12,
               13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
               26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
               39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
               52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
               65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
               78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
               91, 92, 93, 94, 95, 96, 97]

saddle_search = MDSaddleSearch(
    temperature=1000.0*Kelvin,
    constraints=constraints,
)

akmc = AdaptiveKineticMonteCarlo(
    markov_chain=markov_chain,
    kmc_temperature=300.0*Kelvin,
    calculator=bulk_configuration.calculator(),
    kmc=kmc,
    confidence=0.99,
    htst_parameters=htst_parameters,
    filename_prefix='akmc',
    saddle_search_method=saddle_search
)

akmc.run(max_searches=50, max_kmc_steps=10000)
