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