From 22acce9ad78e994011632749328d7efc25160a99 Mon Sep 17 00:00:00 2001 From: BOULANGEOT Nathan <nathan.boulangeot@univ-lorraine.fr> Date: Mon, 13 May 2024 09:42:10 +0000 Subject: [PATCH] Upload New File --- codes/tool.py | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 codes/tool.py diff --git a/codes/tool.py b/codes/tool.py new file mode 100644 index 0000000..69c1083 --- /dev/null +++ b/codes/tool.py @@ -0,0 +1,61 @@ +import numpy as np +from ase.constraints import FixScaled,FixAtoms +from ase.io import Trajectory +from dscribe.descriptors import SOAP +import os +import ase + +def sign(x): + if x<0: + return -1 + else: + return 1 + +def get_train_data(traj,data_folder,train_pos_indices): + sys=Trajectory(traj) + ind_slab=sys[0].constraints[1].index + ind_free=np.delete(np.arange(len(sys[0])),ind_slab) + species=[] + elem=sys[0].get_chemical_symbols() + #identification des espèces + for el in range(len(elem)): + if elem[el] not in species: + species.append(elem[el]) + y_ini=np.load(data_folder+'/E.npy') + index_pos=np.load(data_folder+'/ind_pos.npy') + ind_train=[] + #select only 3 config per position + for i in range(len(index_pos)): + if i in train_pos_indices: + ind_train.append(index_pos[i,0]) + ind_train.append((index_pos[i,1]-index_pos[i,0]+1)//2) + ind_train.append(index_pos[i,1]) + + y_train=np.array([y_ini[i] for i in ind_train]) + return [sys[i] for i in ind_train],y_train,species + +def pos_to_relax(poscar_file,n=20): + poscar=ase.io.read(poscar_file) + #position à relaxer + a=poscar.get_cell()[0,0] + b=poscar.get_cell()[1,1] + c=poscar.get_cell()[2,2] + #maillage + n=20 + Xpos=[i*a/n for i in range(n)] + Ypos=[i*b/n for i in range(n)] + xx,yy=np.meshgrid(Xpos,Ypos) + xx,yy=np.ravel(xx),np.ravel(yy) + zz=np.empty(len(xx)) + #zpos + atom_top=poscar.get_positions() + for i in range(len(xx)): + dx = atom_top[:,0] - xx[i] + dy = atom_top[:,1] - yy[i] + dz = atom_top[:,2] - 18 + dxy=np.linalg.norm([dx,dy,dz],axis=0) + indice=np.where(dxy==np.min(dxy))[0][0] + zz[i]=atom_top[indice,2]+1.6 + return xx,yy,zz + + -- GitLab