 yes okay perfect well welcome everyone again so today's afternoon we'll start by by running some some examples and going a little bit through the the c2 pack python package which is as i already introduced this yeah so it's it's um python packets to compute the topoleical invariance so when it has some interfaces to other uh tightening codes like for example from banyan 90 the the main advantage of this code is that it can run um you know topolecal invariant calculations directly from from initial simulations so uh we will go on um you know about this a little bit later on but let me remark that uh this code is uh only interface uh totally with quantum espresso and actually the example we will run it only runs with an old version of of of of quantum espresso so it's not been super maintained nowadays but um it will probably work on on on keeping it updated in the in the future so let's let's just start with a a little bit of of an overview of of how this this code works so basically it computes the topolecal invariance through through Wilson oh yes sorry maybe i can i can start by telling you where to look for the for the material so we you just have to go to the github page of the banner school so github you can just search for github banner tutorials on on google yeah then you can just enter in the first result then you go to you know bannier 2022 summer school yeah so yes you have to click here on 2022 maitreste and then you can see here all the all the folders for all the the other you know tutorials so let's go two hours which is day four am to c2 pack and here you have the the tutorial material so have you all been able to to get to this page more or less yeah okay perfect okay let's start just with a bit overview of how this works so basically this this code can be the topolecal invariance through through Wilson looks as already professor bandel did explain and and also maya pointed out uh the the main idea is that um we we compute the um the um you know the the the very face on on a on a path in in momentum space and then we keep track of the of the path that this this very face tracks along along momentum space so as as professor bandel it already explained this can also be done um so this can also be understood in terms of of the the hybrid many extra centers so this is all just just equivalent so basically we need a code that actually computes all all these points so that for each let's say we can define as if you have a a surface in in momentum space that's parametrized by two momenta let's say that this moment are kx and and ky then we can compute the heavy Daniel char centers on one of the directions so let's say we compute the very face integrated on ky while we plot let's say the the dependence of this this very face or this many extra center in the other moment right so then by keeping track of the path that this this loop follows this again that's why the name of of of Wilson look then we can we can compute the topolecal invariance so the the easiest one you can see here in in this example so this this um this very face it winds one when it crosses the cold brilliance on and so this means that the turn number that this this Wilson will be describing is equal to one there's maybe a more pictorial representation of what we are doing here because in this plot the two directions are periodic so we know that the very face is has a period of two pi that momentum also has a period then basically this this calculation is done on a on a two torus and then you can see that the winding it actually represents an actual winding of this of of this of this path so since this winds one around this direction while going on a loop then we can say that we have a char number of one so let's get a little bit into into how this thing is done because I'm I'm talking about integrating very face but we have we will actually not perform any any torus so it it has been shown also in in Professor Vanderbilt's talk that the Wilson the Wilson looks so basically the matrix that tells you at at each point which are the the individual very faces it can be computed as the the product of a series of of matrices right that that uh that are labeled by by two momenta so basically this is what's called the the overlap matrices this is what the banner 90 dot m m n file is is about and basically it just computes the overlaps between neighboring uh wave functions in in momentum space so you take one line in momentum space let's say this line is here and then we compute all these matrices on individual points and then the resulting very face could be just to multiply all the all the all the matrices and just compute the the eigenvalues of of this of this matrix to get the the individual very faces and then just as a final note then even if we have several uh banner functions or several uh Wilson loop windings the relevant winding to taking to let's say to actually compute the culture number will be the trace of this operator so basically the sum of all of all the linear charge centers which is represented in here so basically once we have the by the the Wilson loop and we have all the eigenvalues and the the total very face of for this this particular value of momentum it could be just the the sum for the the trace so basically what we'll see to pack that so what what we'll see that see to pack that is to compute all these matrices uh uh using different methods but the as I said that the most powerful one is that it can compute these matrices directly from a Venetian calculations without having to rely on on any on any organization so again we we can skip a step that as we've seen along this week it can be a little bit tough to to deal with so let's get into into the code so the C to pack codes uh Python packages can be very soon installed just like like Mikael mentioned that Europe can be just have to Python it install it and it's super super super easy to compile it installs all its dependencies and and and everything so let's just go through them you know the the map of what of what the program does so there are two main main inputs so let's say there are too many ingredients around this program first of all we need the an electronic Hamilton so basically we need a Hamiltonian that defines our our present system and this can be done in a in a variety of ways so first of all it can be done by by by giving it an an actual explicit Hamiltonian matrix so let's say that you have a model that depends analytically on momentum then you can just define the a Python function that takes as input the momentum so let's say you have a function that just takes you know three three float numbers as an input and outputs a matrix so just a Hamiltonian matrix so this is very useful for models that are already out there like you know the healthy model game model or all these all these models for which you already have the the analytic matrix but it's even useful for for this kind of continuum models that that we that we usually develop for you know like these k dot b models for for analyzing higher order crossings or all these things you can actually input the directly the the k dependent Hamiltonian and it will run all the all the topological invariance there's also another way of defining a model that's through a tight binding model so in this case instead of giving the explicit matrix it relies on the on the packet tv models and it basically there you can define a model tending model just by giving the on-site energies opens the lattice so it's also it's also very powerful in in case you have a model that's that's defined this way nevertheless all all these things can can also be done with with different codes so what's really special about this code is that the Wilson loops can can be can be run directly from an ab initio calculation so as I said this method reduces to finding these m k k matrices uh on on lines in momentum space and then multiplying them and and i'm getting the the the eigen values also basically the the individual very phases so we can actually uh compute these these matrices from the ab initio calculations and this is this is what this this program uh is basically designed to to do okay so now we have the the system that we want to analyze now we have to define the surface so the the term number is is only defined uh with respect to to a particular surface so again there are um uh plenty of of different ways in which to to define a surface so we can define the plane in momentum space we can define the sphere we can define whatever surface that that we want we just have to give um um uh the the surface in such a way that is continuous in into the direction right so we cannot compute the the Wilson loop on an on an open surface because it makes no sense so um we can do this by defining an explicit function like you say here so this is just a function of of two variables s and t and then it just needs to return a you know an array of of three numbers it doesn't have to be like this because it can be any combination of of s and t that you imagine it can be a sphere it can be whatever you want and actually so for practice the the let's say the function that we're going to use to produce the surfaces would be this one so just with one with one line of code you can define the surface on which to to compute the the Wilson loop so um so we we wrote here some some flags that are going to to take care of convergence of the Wilson loop but but let's let's keep this because it might be a little bit time consuming to go through all the flags without actually having run any any calculation so let's go ahead and let's go to run the the the first example and then we can go back and ask questions about how how it reaches convergence so we're going to analyze team tell right which is the same example as as michael did in in his in his talk and as we know by the you know by the symmetry indicators this system is predicted to be a mirror turn insulator however as as as michael said this mirror turn so let's say there are two topological distinct phases that are characterized by the same symmetry indicators so even though you know the symmetry indicators take us very far into into defining in which topological state our material is it might not be enough to uniquely define it but there's no problem we can run the the Wilson loops on on the on these two two different planes and and actually find out in which state we are so okay so let's let's move into the the hands-on part of the of the session okay so just uh just as before maybe for for the people who who weren't there let's copy the the directory of of the c2 pack tutorial okay so uh don't uh get pull it okay because the we have some extra files that that we need to use uh so to you know to make the calculations faster so let's all please copy this path okay so you have to go to media ctp user neither one of your tutorials yeah so what's on my screen so we copy it here just anyone have any trouble copying the directory okay so let's go inside let's go to c2 pack and now let's move to mirror or tinter right okay so just while while everybody gets there so just a little bit of of an overview because uh some of you might not be familiar with what a mirror turn number is so the idea is that in you know in in time reversal symmetry preserving materials the the total turn number has has to be zero because of of time reversal symmetry how it might happen that some crystalline symmetry is protecting another kind of of topology that that is not directly you know an unzero turn number so what happens with mirror turn insulators is that since the since the Hamiltonian commutes with the mirror symmetry operation then it happens that if you were able to split your your Hamiltonian into two different eigen sectors of the mirrors you know the mirror symmetry has two different eigen values it can be either plus i or minus i then what can happen is that you have a turn insulator in each of the the different mirror eigen sectors okay so then in this sense it would be that the the mirror symmetry is is preserving the the topological invariant so to to actually compute the turn number for each individual subspace of the of the Hamiltonian first we have to specify which is the symmetry that we're going to to split our Hamiltonian by right so this is done by going to input and now let's open the interluri pw2c2 the plus i so even if you're not able to to open the file yet there's the here a screenshot of them of the file so basically many of you are already probably familiar with with pw2 bannier 90 or two two two different codes so basically this this is very similar it just needs some some initial information of the system that you have already done that that you have run the ab initio calculation for so the prefix is team telluride then the same name of all the files is you know team telluride and then the the directory in which the self-consistent calculation has been run is is already there and the past is is already because we don't have to run the ab initio calculation just as in in michael's case because this otherwise this would be two time demanding so the three flags that we're going to to go through now are the relevant ones so basically if you were going to us to split our Hamiltonian into the different eigenstate or at the same eigenspaces or eigenvalue subspaces of the of some symmetry operation then we have to define the symmetry operation so the way in which this is defined is by just a number like this is very similar to to the irrep code so you just have to give the symmetry number of the symmetry operation as it is outputted directly by by quantum expression so for this we can go to the to where the the self-consistent calculation is run which is back in the main directory of mirror team telluride then going to self-consistent and now we can just open the output for the self-consistent calculation so basically after a lot of you know like a summary of the inputs and stuff that condom espresso gives us there's the a list of the of the symmetry operations so now we want to check whether this system is in a mirror turn number two topological phase on this mirror or a mirror turn number four topological phase on this mirror so let's start with this one and then let's let's go find out which is the the number of this symmetry okay so as I said in the in the output file for the self-consistent calculation you you start looking at for example this is a 90 rotation with a decent axis minus one zero zero so this is not the mirror that we are looking for blah blah blah then here okay so this is the mirror so this is a 180 degree rotation times inversion which is just a real way of defining the mirror but I mean this is an an actual definition of a mirror and then the Cartesian axis of the mirror so basically the mirror is orthogonal to the Cartesian axis is the one one zero okay so we know that this is the symmetry that that we have to to look for then if we go back to the input folder in which we were and we open again the pw to to c2 back the pw to c2 plus i dot in then now we understand why the easy visual to to 29 so even if like like Mikkel said in the irrep code you don't have to specify the actual eigenvalue of the symmetry operation in in this code you you need to to do this so basically you have to define which is the actual symmetry eigenvalue that the program will have to look at so basically this what this program does is go through all the wave functions and then compute which is the actual eigenvalue for for the symmetry and then if it is plus i then it will keep it and then if it's not plus i it will just remove it so that later on when we run the the Wilson calculation we only take eigenstates of the Hamiltonian that have actual symmetry and value plus i and they just just just and you know an extra commodity then we we can exclude the the bands that we know that do not contribute to the to the Wilson so in this particular example I know that there are 18 bands until the Fermi level but here Mikkel provided a calculation for the for the detail right so it's it maybe you cannot see super clearly but basically there's a huge gap here between this this last band and the next one so basically we can with the next one we can exclude the first 12 bands of the calculation so that everything will run a lot faster and smoother also it's a lot easier to keep track of a few van der ter centers than than giving track of of you know 10s and 10s of them okay so so we have already defined the symmetry that that we are looking for now let's move on to on to the the main Python program right so let's go to the to the parent folder of mirror team teluride and let's open the run m1.py so do we have any questions so far for going into the actual calculation are you following okay great okay so so let's let's go through this well you will find first are four blocks that are necessary to run the calculation that i'm going to explain but but please do not touch them because it might break the the calculation and then we will have to to spend a lot of time running stuff that is not really necessary so first of all the the first thing is just the some some patch stuff so basically you have to to the program where the your quantum expression installation is your executables also you know if you have some kind of parallelization and you know all these things then the program itself if if it doesn't find a self consistent calculation then it will try to to run it again again and as as this is this is pretty pretty computationally expensive you have already run the self consistent calculation for you and it's it's already stored and and and well you know the the path is is fine then in here is is where where we define the the system so basically we have to define different systems for different eigenvalues of the Hamiltonian because we could compute this just for one of the of the eigenvalues of the of the mirror operation but we are going to to run for for both of them to check that the actual total term number is still equal to zero as time traversals in extreme forces so again you do not have to test the system and then so let's say finally the the the last block that that you shouldn't touch for the moment are the defining settings of the Wilson calculation so instead of running a blind Wilson calculation this program has a lot of checks to actually make sure that the Wilson that the Wilson calculation is actually converged and that you can keep track of all the of all the the the paths that this this Wilson looks like but so far this this settings have been chosen so that everything runs smoothly but maybe later on we can we can if we have time we can try to play it and you know going through what all these these convergence parameters mean okay so here are the the main parts of the program so as I said the the C2PAC program needs two ingredients first the system the Hamiltonian which we have already given it here I don't know it just reads all all the stuff from the from the initial calculation and then the surface so as I said a mirror turn insulator is is is an insulator in which you can split your Hamiltonian into two subspaces and then you have you know the turn number different from zero and in its subspace but then this only works if the Hamiltonian actually commutes with the mirror symmetry so this happens on only on the planes in momentum space that coincides with this mirror right so this this this can only happen in the in the in the planes in in the brilliance on that coincides with this mirror so in surface we have to give a 2D surface that's parameterized by by s and t parameter and this surface has to be in in such a way that all these points so all the points with the form ss and t are left invariant by this by this mirror symmetry so you can trust this because I mean we can we can go through how to to construct these these surfaces which is not a trivial thing when we're going to the to the next example but for the time being we can just we can just leave it here then before actually running the calculation we tell you about other other functionality that that's in the back has that is that you can save quills and calculation results so you can save the results in a very easy way and actually you don't have to to to rerun these points again so as I said we will compute the Wilson loop on you know a distributed set of momenta by integrating on the other direction so by saving the results the points in which we have already computed the the very phase are going to be stored and then if I want to rerun this calculation with a few more points it won't have to run all these points again it will just load the results on plot on the on the you know the the plot that you end with and yeah basically this the last thing there are just few lines to to compute the the the the turn numbers of the of the calculations and unplugging them the Wilson so it's another very fine let's say capability of this program that you don't have to you know manually keep track of the Wilson it actually outputs on a number for the for the term number or the c2 index for example so let's go ahead and and try to run this first of all remember that we have to to activate the the Python environment for for this tutorial so this can be done by writing the in the in the terminal work on c2 path just the same as as we forever okay so now convince yourselves that you are on the on the correct directory and then if if you are we can just Python run the the program yes just enter okay you've been able to to run the program you have it again it's okay okay it it run okay perfect oh no okay so if everybody has run the calculation let's go over the there the final report okay so first it outputs which are the parameters of this of this calculation so as I said this first parameters we can go through we can go through them later on once we have you know run a few more examples but basically they ensure that the Wilson calculation is is well converted then if you see it's rerunning everything because it's loading the results for from this this file that I they already set up there because again this calculation can pick up some time and we just wanted to to give an intuition of of how the the program works but actually you can if you want you can now go on and try to change the the settings in the in the parameter section to to see how how it runs again and and you can add more points on and where so basically what it does is to go first through the through the lines that you have specified and then it adds more lines so let's say a line is it's a it's a value momentum space in which it computes yet another uh van der char center just you know to to be able to to actually keep track of the of the Wilson loop so basically this program keeps adding and adding lines until until convergence is reached and then finally it gives you a a convergence report so I mean this is a flawless run it passed all the line convergence test all the surface convergence test and everything worked perfect then this is the run for the for the other eigenvalue for the minus i eigenvalue of the mirror and then this also run flawlessly and as you can see the result in churn number is that for plus i eigenstates is equal to two and for minus i eigenstates is equal to minus two so one nice thing about the polygon insulator is that we know that they have to be integer so you know if the numeric calculation is closing off an integer then it's an integer okay so um do you have any questions comments doubts so far yeah okay so yeah if you go to the to the input to the to the python file right this is where we defined the surface so basically to run a Wilson loop we need a two dimensional surface that's periodic on the two directions so basically this is defined by two directions that are parameterized by a by a parameter right so basically what this does is for each value of t right so let's let's let's copy this here to to compare to to the notes so we have defined our surface like this like s t is s s t so if we go to this plot basically t are the momenta in one of the directions but with the the Wilson observe labels so in this plot it would be kx and then in the s s zero direction it would compute the very face right so basically it integrates along s and it blocks along t okay so so now that that we've run this we have checked that you know the interior is actually a mirror turn insulator with turn number two on on on this mirror but then what about the other so how can we make sure that that it's this one and not the other or you know any weird combination of the of the two but then now we're going to run the calculation for this other for this order mirror so uh oh sorry yeah I forgot about this so basically uh the the calculation told us explicitly which are the turn numbers of the of the calculation but we don't have to I mean of course trust the calculation but it's also outputs which is the the actual plot for the of the Wilson loops and and they look like this so as I said there are three bands that we're taking into account in this calculation that are the last three bands of the of of tin telluride and then these bands are street by eigenvalue so we will have three bands with plus eigenvalue and three other bands with minus eigenvalue so when we run the Wilson loops for these bands you can see here in black are plotted the the actual eigenvalues of the Wilson loop operator so basically if we were able to distinguish the three bands this would be like how each of the individual three bands winds up you know physically the the only thing that that matters in in this in this moment is how the three of them wind at the same time and so the total winding as you can see here is equal to two for the plus eigenvalue and then for the minus eigenvalue this is again equal to two minus two this is like an extra check of actually looking at the at the Wilson loop to see how the how the calculation has has run okay so I think that so far we have already convinced ourselves that the tin telluride is a mirror turn insulator with turn number two now let's go ahead and try to to uh to check the the Wilson loops for the other mirror to check that they are they are actually zero so we're going to open the uh this file and we're going to to edit it right let's go ahead okay so let's start from the beginning so the way in which we started before was opening the in the input folder we open the pw2c2 plus i file and in this way we define the symmetry operation and the symmetry eigenvalue so then we have to go back to the self-consistent calculation folder and check which is the symmetry for the mirror in the 001 direction let's do this so we go ahead we search for for the symmetry operations and we find that this operation here is in version plus a hundred and eighty degree rotation along the Cartesian axis 001 so then this is the mirror that we that we want to look for okay this mirror has is equal to 26 so we have to modify this file please modify it with me so that now it reads 26 okay we save this file then the symmetry eigenvalue we don't have to change because we know that all mirrors have the same symmetry eigenvalue so we can still leave it like this okay so we change the symmetry operation for the plus i file then let's change it for the minus i file which is the one that will keep care will take care of the of the minus eigenvalues again we have to change the symmetry to 26 so now we have to modify the the python script like this the settings also please a little bit like this and now we have to define the surface okay so this is maybe the part that's a little bit non-trivial so as i said we need to define the surface by two directions that are in plane the thing about this system is that this it's a face center i think or no it's a it's a body center so it's a rock star structure so the brilliance on does not look like a queue it looks like you know this kind of orientation of the of the reciprocal lattice vectors and this program works not on cartesian coordinates but on reciprocal coordinates so now we need to find which two vectors are inside the plane in reciprocal coordinates so when there are many things to do this so one would be to you know stare at the at the brilliance on and convince yourself and try to find some the components of this mirror which is the the case equal equal zero plane but but this this can be a little bit tricky so um a more or less straightforward way to do this is to go again to the to the self-consistent output file because in here you have the matrix representation of this of the symmetry so then we just have to find two directions but that you know not proportion i want to to the other that satisfy that they are left invariant by the symmetry okay so you can you can try to to find this by by yourselves or you can go to to the to the main folder of mirror to tell right going to the head folder and then look at how how we already defined the the surface so basically you can convince yourselves that the the two such vectors that are left invariant by this symmetry are the one minus one zero you know if you plug here one minus one zero and then let me try to to annotate on this i don't take the wrong i'm sorry okay that uh uh do you know how to draw like uh this annotating from zoom okay like sir again okay thank you okay so okay so so as i said we have to convince ourselves that these two directions are actually left invariant by this by this mirror so the two directions are the one minus one zero right this is defined by s minus s t and the other one would be one zero one so you know you can just plug it in in here and then you know you just do matrix multiplication so zero minus one one times this is equal to you know exactly the same thing so minus one minus one this is plus one then minus one zero this is minus one and then zero zero one times this this is okay perfect so we found one of one such directions that are left invariant and then the other one it works just the same way so if you multiply it so let's say let's erase this and then you can not so easy then so then we multiply like this again so zero minus one one times this one this is one then minus one minus one plus one is equal to zero and then zero zero one this is equal to one great we have the the two directions so in in practice this actually works like this so basically you have the representation and then you you try some some directions until you find the the two that are that are in plain there's probably an algorithmic procedure that's probably too long to actually get about on on on a daily basis so oh yeah okay okay so now this is the this is the the surface that defines the kc equals zero plane which is the same plane that is left invariant by the by the mirror symmetry right it's this this plane is here so now instead of going ahead and and running the the calculation by by ourselves what you're going to do is to load the results that I already have for for this calculation and then then we will have some time to to play with the parameters but otherwise this this this takes a a little bit too long so basically something we can do is just to copy these blocks you know the plot and print the run calculation and then if I need surface we can copy them and then paste them on run m1 so basically we just have to to replace these results replace them okay safe and I will go again into the terminal and run the calculation again so we do Python run and one dot by okay so then maybe I went a little fast with with this so have you been able to to run the this new calculation copying the blocks no okay uh maybe maybe you can state your problems or maybe Mikhail can go yeah um okay Yeah. And I go to the drugs. And you have to believe that it's not so physical. Yeah. Yeah. Yeah, so you have to do. Yeah. And then we run. Okay. Yeah, perfect. Great question from some came up based on those invariant vectors. Yeah. Okay, perfect. Great question. So let me try to do this. Why do I think again. Okay, so basically we know that this vector one was one of the two vectors, right? So you can say, okay, but then this vector is also an invariant vector, right? So why cannot I write it like s-halves, minus s-halves, and then zero. So the surface that you have to give the program has to be a surface that's periodic, period one in reduced coordinates. So then you have to give to the program something that's proportional to this direction. And then if it goes, let's say from zero to one, it's periodic on the, on the, on the brilliance zone. So this is why this is the one of the, the directions that that's periodic. Then the other direction is just the same way if you have one zero one, then the other direction would be just, you know, a vector times this. I guess you need to, you need to have a reciprocal lattice vector for, for the system to be, to be periodic. It has to be some kind of combination of, you know, ones and zeros. The answer was satisfactory. So for, for, for those of you who have already run successfully the, the M, so let's say the, the middle term number on the, on the C direction, then what you should have found is that, let me run this again to, sorry. Basically in this case, you see that the turn number is basically zero in both, in both eigensectors. So this means that, you know, as we expected, the turn number is, is actually zero. You can actually check this in the blocks. I see that this, this, this bandage absent that they didn't wind up. They basically just move a little bit from the origin, but then they, they come back without, without winding. Which is, you know, I mean enough of having a turn number zero. So as, as an extra exercise for, for those of you who, who want to, you know, mess a little bit with, with all these things, the prediction of the mirror turn and insulator in, in Tinteluride is not only for this mirror, the 110, but for the one minus 102. So there's, again, if you don't want to, to, to work a lot there, there's in, in the helps folder, there's another blocks that run this calculation for this other mirror. But I mean, I encourage you to, to try and, and modify the, the files for yourselves. And of course, finding the surface, which is invariant by the M11 bar zero mirror. So you want to try it and, and then we will be, you know, going around and seeing if, if, if you have any doubts. So just as a final side, if, if you found this, all this symmetry talk and group theory talk interesting, there are actually very nice lectures, actually the ones that I learned from in, in YouTube posted by, by a professor, which it goes from the very, very basics of, of, of, you know, almost anything to, to having a great understanding of, of the basics of, of group theory. So I will, I can probably serve this, this link with you somehow. But for the moment, so probably for the people on Zoom, I can add this to the chat. Okay, yeah, perfectly, because I'm copying in the virtual machine. So for, for, for me there, but then again, I will add this, this, this link to, to the tutorial materials. But if, if you want to find it, you just have to look on YouTube for group theory by a professor, Juan Luis Máñez. I think we're ready. Yeah, we need to move to the next session. But please let's thank our speakers.