I’ve now calculated the ground state energies of 48 structures of ZnO slabs with different H termination that I want to use for the CE calculation and all of them are based on the symmetry of the lat.in file. As I’m interested in performing a cluster expansion only for surface sites and not the whole slab, what is the best way to proceed?
Shall I represent the surface as a binary alloy with two species one corresponding to H atoms and another to empty sites (e.g. use names of species for the sites, such as H and N for instance)? If I do this, can I then associate H with the EH=EH2/2 energy and N with the energy from the pristine ZnO slab in my ref_energies.in file, so that the formation energy for each structure is calculated as
Delta Gf=Esystem-(EZnO+EH)
Or would you recommend to treat it as a ternary under the following scheme:
Assign one species to the ZnO substrate (say Zn), one species for H (let’s keep H here) and one for the vacant site (say N) and then write the energies of the ZnO pristine slab, the H atom and zero for the vacant site in the ref_energies.in. so that the formation energy again reads as above.
Is there a more efficient way to think around this? Also, can you please send me pre-calculated files for a ternary alloy? The example of the TiAl binary in the tutorial is fairly easy and there are no new predicted gs structures in that example.
For the sites in the slab, you would list only Zn or only O (so no cluster expansion is done there).
For the potential H sites you would list H,Vac as the species.
This is a binary cluster expansion (you can use maps instead of mmaps).
The DFT value for EH2 is probably not very good, so you will have to add an experimentally fitted shift to that formation energy. Just let the code determine the reference energies and then be ready to add a linear function of # of H if necessary.
so I included the Delta G1 values in the */energy files and then defined ref_energy.in as 0,0 for H and Vac. Wouldn’t this be equivalent to what you suggest?
Moving on, after following the directions in the manual and running maps on what I have, I got that CV score=0.164. As you indicated, touch ready generated several predicted gs, for which I am currently running ab initio calculations to obtain their energy and use them in the training set to decrease the CV score. So far, so good…
Interestingly though, when I attmpted to verify this result with
lsfit -x=allcorr.ou -y=allenergy.out -cv
I got that CV=0.011.
I figured out that this discrepancy is caused by the fact that maps calculates the CV score based on the (energy/number of [H+Vac] sites), whereas allenergy.out is the (energy/total number of atoms). My question is why do we consider the CV score from maps to be the one to trust instead of the one obtained by lsfit? Actually wouldn’t it be right to claim that in this case the CV score should be calcualted as the E_ads/H atom= Delta G1/H atoms?
Actually, both maps and lsfit report the cv score per site. I think the discrepancy comes instead from the fact that when maps cannot reproduce the ground state line, it increases the weights assigned to the GS until the come out correctly. Those increased weights are Also used in the calculation of the cv score in maps but not in lsfit.
I’m having hard time to reduce the CV score below ~0.1, as the code doesn’t predict any more ground states. I’m only using the top two surface layers of ZnO and the H,Vac layer, so my lat.in has only 6 atoms, therefore I don’t think I’m experiencing this issue due to large number of atoms.
I’ve tried different ways to run maps (maps -2d, maps -d, maps -g=30, maps -g=24 etc) but there are no more new gs structures (i.e. structures with the the "bg" flag) generated in predstr.out. The structures that are generated are denoted as "u" or "ug" and there are no new nm/str.out files created anywhere. Even touch ready doesn’t generate anything. The situation is rather frustrating and I’m not sure how to proceed at this point.
I’m attaching here a tarball with the structures I have. You can run maps on it andtell me what you think. Please note that for this project I don’t have maps coupled with any electronic structure code, just using it by itself. However, all the structures used here are perfectly relaxed structures with the FHIaims code.
[Working on it… (sorry busy time) will update post when done…]
Very sorry for the delay - I just now got the time to look at this.
I have untarred your file and did
maps -2d -g=24 &
touch ready
And the code responded quickly. So I can’t reproduce the problem directly.
Here are a few things to try:
make sure your have the latest version (in some old version, there was occasional slowness issues.) Try the "beta version of the latest release" link.
Compile the code after removing the -DSLOWENUMALGO option in src/makefile (then do make clean ; make )
You can generate your own superstructures "manually" with genstr and put them in subdirectories - maps will read them. You can also use cellcvrt for an even more manual process. This is a way to keep you going if we don’t figure the problem out quickly.
If you feel up to it, look up the process id [pid] of maps with ps then attach a debugger to it with