Skip to content
Snippets Groups Projects
Commit 2509f6ac authored by BOULANGEOT Nathan's avatar BOULANGEOT Nathan
Browse files

Upload New File

parent 876ec39a
No related branches found
No related tags found
No related merge requests found
import os
import sys
import ase.io
import numpy as np
from ase import Atoms, Atom
from ase.io import Trajectory
from sklearn.metrics import mean_squared_error
from dscribe.descriptors import SOAP
from scipy.interpolate import UnivariateSpline
from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import RBF
from sklearn.model_selection import train_test_split, learning_curve, validation_curve, GridSearchCV
from joblib import Parallel, delayed
from ase import neighborlist
from sklearn.preprocessing import StandardScaler
from create_descriptor import *
from tool import *
if __name__ == '__main__':
#initialisation
atomseul='H' #atome adsorbed
poscar_file='/mnt/beegfs/gzc01/iht74/THESE/Ag/POSCAR' #slab with no adsorbate
data_folder='/mnt/beegfs/gzc01/iht74/THESE/Ag/H/data' #folder where decriptors are saved
train_file='train.traj'
atoms_train=Trajectory(train_file)
#identification of species and adsorbate
species=[]
elem=atoms_train[0].get_chemical_symbols()
#identification de l atome seul dans la structure
for el in range(len(elem)):
if elem[el] not in species:
species.append(elem[el])
if elem[el]== atomseul:
ats=el
#---> we create a 2*2 supercell for adsorbate to be far enough from pbc images, comment line if not necessary
atoms=ase.io.read(poscar_file, format='vasp')
atoms*=(2,2,1)
#create a n*n grid where adsorbtion is predicted
xx,yy,zz=pos_to_relax(poscar_file,n=20)
#create the descritors
params={'species':species,'l_max':3,'n_max':6,'r_cut':6}
desc=create_descriptor(method='soap',params=params,ats=ats)
X_train=desc.create(atoms_train,load=False)#--> True will save the decriptor in the data folder
y_train=[at.get_potential_energy() for at in atoms_train]
y_mean=np.mean(y_train)
y_train=y_train-y_mean
scaler=StandardScaler()
X_train=scaler.fit_transform(X_train)
#fit and prediction
kernel=1**2 * RBF(length_scale=200,length_scale_bounds=(1/np.sqrt(2*1e-0),1/np.sqrt(2*1e-8)))
GP = GaussianProcessRegressor(kernel=kernel)
parameters = {'alpha':[1e-4,]}
g_search = GridSearchCV(GP, parameters)
g_search.fit(X_train, y_train)
Parallel(n_jobs=10)(delayed(run_para)([xx[i],yy[i],zz[i]],i,desc,scaler,g_search,poscar=atoms) for i in range(len(xx)))
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment