materialsvirtuallab / pymatgen-analysis-diffusion

This add-on to pymatgen provides tools for analyzing diffusion in materials.
https://guide.materialsvirtuallab.org/pymatgen-diffusion/
BSD 3-Clause "New" or "Revised" License
97 stars 56 forks source link

Order of atoms in generated path by IDPP solver #72

Closed goodwilling closed 2 years ago

goodwilling commented 4 years ago

Dear Developers,

Thank you for your interesting work on pymatgen-diffusion.

In my testing, I use the following script to generate an initial path of NEB:

the_solver = IDPPSolver.from_endpoints(endpoints=[init_struct, final_struct], nimages=nimages, sort_tol=sort_tol) new_path = the_solver.run(maxiter=5000, tol=1e-5, gtol=1e-3, species=species)

This functionality is very convenient for me, however, it is found that the order of atoms in the generated path can be different from those in the given end points (initial_struct, final_struct). For example, the order in O, H will be changed into H, O using the IDPP solver. Since we need to fix some substrate layers in some NEB calculations and these "fix" flags have already been set for the initial/final_struct, it is desired that the generated path can use the same atomic order as given in the initial/final_struct.

Can I easily achieve this by some minor revisions of scripts? Thank you.

Zhuoying commented 4 years ago

@goodwilling Thanks for your feedback. One simple solution is you add selective_dynamics to Poscar after you generated the NEB inputs. In NEB calculations, we need to ensure the mobile species (vacancy or interstitial) are in the same place for each image. An easy way to do this is by moving the hopping atoms to the beginning of structures(that is what our get_endpoints_from_index code did). However, when writing out the inputs, the same species will be put together in your POSCAR to avoid duplicate pseudopotential in POTCAR. Hope this could solve your issue. If not, pls feel free to send us your structures and we will take a look at it.