Statistiques
| Branche: | Tag: | Révision :

dockonsurf / global_script.sh @ 86112fec

Historique | Voir | Annoter | Télécharger (6,15 ko)

1 86112fec Marti Aliod Carles
#!/bin/bash
2 86112fec Marti Aliod Carles
3 86112fec Marti Aliod Carles
user="$(pwd | awk -F"/" '{print $3}')"
4 86112fec Marti Aliod Carles
5 86112fec Marti Aliod Carles
file_path="$(find /home/${user} -name "DockOnSurf_path")"
6 86112fec Marti Aliod Carles
7 86112fec Marti Aliod Carles
### Mise en place de l'arborescence
8 86112fec Marti Aliod Carles
9 86112fec Marti Aliod Carles
source ${file_path}
10 86112fec Marti Aliod Carles
11 86112fec Marti Aliod Carles
### Récupération des vecteurs de cellule
12 86112fec Marti Aliod Carles
13 86112fec Marti Aliod Carles
a1="$(grep "A\ " ${CP2K_input_MolOnSurf} | awk '$1 ~/^A/ {print}' | awk '{print $2}')"
14 86112fec Marti Aliod Carles
if [[ $a1 =~ "E+00" ]]; then a1="$(echo $a1 | cut -d "E" -f1)"; fi ; export a1
15 86112fec Marti Aliod Carles
a2="$(grep "A\ " ${CP2K_input_MolOnSurf} | awk '$1 ~/^A/ {print}' | awk '{print $3}')"
16 86112fec Marti Aliod Carles
if [[ $a2 =~ "E+00" ]]; then a2="$(echo $a2 | cut -d "E" -f1)"; fi ; export a2
17 86112fec Marti Aliod Carles
a3="$(grep "A\ " ${CP2K_input_MolOnSurf} | awk '$1 ~/^A/ {print}' | awk '{print $4}')"
18 86112fec Marti Aliod Carles
if [[ $a3 =~ "E+00" ]]; then a3="$(echo $a3 | cut -d "E" -f1)"; fi ; export a3
19 86112fec Marti Aliod Carles
b1="$(grep "B\ " ${CP2K_input_MolOnSurf} | awk '$1 ~/^B/ {print}' | awk '{print $2}')"
20 86112fec Marti Aliod Carles
if [[ $b1 =~ "E+00" ]]; then b1="$(echo $b1 | cut -d "E" -f1)"; fi ; export b1
21 86112fec Marti Aliod Carles
b2="$(grep "B\ " ${CP2K_input_MolOnSurf} | awk '$1 ~/^B/ {print}' | awk '{print $3}')"
22 86112fec Marti Aliod Carles
if [[ $b2 =~ "E+00" ]]; then b2="$(echo $b2 | cut -d "E" -f1)"; fi ; export b2
23 86112fec Marti Aliod Carles
b3="$(grep "B\ " ${CP2K_input_MolOnSurf} | awk '$1 ~/^B/ {print}' | awk '{print $4}')"
24 86112fec Marti Aliod Carles
if [[ $b3 =~ "E+00" ]]; then b3="$(echo $b3 | cut -d "E" -f1)"; fi ; export b3
25 86112fec Marti Aliod Carles
c1="$(grep "C\ " ${CP2K_input_MolOnSurf} | awk '$1 ~/^C/ {print}' | awk '{print $2}')"
26 86112fec Marti Aliod Carles
if [[ $c1 =~ "E+00" ]]; then c1="$(echo $c1 | cut -d "E" -f1)"; fi ; export c1
27 86112fec Marti Aliod Carles
c2="$(grep "C\ " ${CP2K_input_MolOnSurf} | awk '$1 ~/^C/ {print}' | awk '{print $3}')"
28 86112fec Marti Aliod Carles
if [[ $c2 =~ "E+00" ]]; then c2="$(echo $c2 | cut -d "E" -f1)"; fi ; export c2
29 86112fec Marti Aliod Carles
c3="$(grep "C\ " ${CP2K_input_MolOnSurf} | awk '$1 ~/^C/ {print}' | awk '{print $4}')"
30 86112fec Marti Aliod Carles
if [[ $c3 =~ "E+00" ]]; then c3="$(echo $c3 | cut -d "E" -f1)"; fi ; export c3
31 86112fec Marti Aliod Carles
32 86112fec Marti Aliod Carles
### Paramètres initiaux
33 86112fec Marti Aliod Carles
34 86112fec Marti Aliod Carles
echo 'Name of the molecule (without .mol) '
35 86112fec Marti Aliod Carles
read molecule
36 86112fec Marti Aliod Carles
37 86112fec Marti Aliod Carles
echo '' 
38 86112fec Marti Aliod Carles
39 86112fec Marti Aliod Carles
module load rdkit
40 86112fec Marti Aliod Carles
41 86112fec Marti Aliod Carles
### Generation des conformeres
42 86112fec Marti Aliod Carles
43 86112fec Marti Aliod Carles
${DockOnSurf_path}/modules/generation_conformeres.py $molecule 5000
44 86112fec Marti Aliod Carles
echo ' -- CONFORMERS HAVE BEEN GENERATED --'
45 86112fec Marti Aliod Carles
46 86112fec Marti Aliod Carles
### Conversion des fichiers .mol en .xyz
47 86112fec Marti Aliod Carles
48 86112fec Marti Aliod Carles
${DockOnSurf_path}/modules/mol_to_xyz.sh $molecule
49 86112fec Marti Aliod Carles
50 86112fec Marti Aliod Carles
### Lancement des calculs pour les molecules seules
51 86112fec Marti Aliod Carles
52 86112fec Marti Aliod Carles
${DockOnSurf_path}/modules/launch_cp2k_molecule_seule.sh $molecule
53 86112fec Marti Aliod Carles
54 86112fec Marti Aliod Carles
### Attente jusqu'à ce que tous les calculs aient fini
55 86112fec Marti Aliod Carles
56 86112fec Marti Aliod Carles
mol="$(echo $molecule | cut -c1-10)"
57 86112fec Marti Aliod Carles
while [ "$(qstat | grep $mol | wc -l)" != 0 ];
58 86112fec Marti Aliod Carles
do 
59 86112fec Marti Aliod Carles
	sleep 300
60 86112fec Marti Aliod Carles
done
61 86112fec Marti Aliod Carles
62 86112fec Marti Aliod Carles
echo ' -- ALL CALCULATIONS FOR MOLECULE ALONE HAVE BEEN DONE --'
63 86112fec Marti Aliod Carles
64 86112fec Marti Aliod Carles
### Suppression des fichiers inutiles
65 86112fec Marti Aliod Carles
66 86112fec Marti Aliod Carles
rm -r ${Molecule_results_path}/${molecule}/*/*RESTART*
67 86112fec Marti Aliod Carles
rm -r ${Molecule_results_path}/${molecule}/*/*restart*
68 86112fec Marti Aliod Carles
rm -r ${Molecule_results_path}/${molecule}/*/*BFGS*
69 86112fec Marti Aliod Carles
rm -r ${Molecule_results_path}/${molecule}/*/*.p*
70 86112fec Marti Aliod Carles
71 86112fec Marti Aliod Carles
echo ' '
72 86112fec Marti Aliod Carles
echo ' -- RESULTS --'
73 86112fec Marti Aliod Carles
74 86112fec Marti Aliod Carles
min_energy_molecule=0
75 86112fec Marti Aliod Carles
for struct in ${Molecule_results_path}/${molecule}/${molecule}*; do
76 86112fec Marti Aliod Carles
	energy_molecule="$(awk '/ENERGY/{E=$NF} END{print E}' ${struct}/*${molecule}.out)"
77 86112fec Marti Aliod Carles
	if [[ "${energy_molecule}" > "${min_energy_molecule}" ]]
78 86112fec Marti Aliod Carles
	then 
79 86112fec Marti Aliod Carles
		min_energy_molecule=${energy_molecule}
80 86112fec Marti Aliod Carles
		numero_mol_stable="$(echo $struct | awk -F'/' '{print $NF}')"
81 86112fec Marti Aliod Carles
	fi
82 86112fec Marti Aliod Carles
done
83 86112fec Marti Aliod Carles
echo "   Most stable structure for molecule alone: ${numero_mol_stable} with energy ${min_energy_molecule} Ha"
84 86112fec Marti Aliod Carles
85 86112fec Marti Aliod Carles
echo ' ' 
86 86112fec Marti Aliod Carles
echo ' -- ARGUMENTS FOR ADSORPTION -- '
87 86112fec Marti Aliod Carles
echo ' '
88 86112fec Marti Aliod Carles
echo 'Name of the file to use for the surface (without .xyz) '
89 86112fec Marti Aliod Carles
read surface
90 86112fec Marti Aliod Carles
echo 'Number of the central atom of the molecule'
91 86112fec Marti Aliod Carles
read center
92 86112fec Marti Aliod Carles
read -a list_atom_1_mol -p 'List of atoms of the molecule to adsorb '
93 86112fec Marti Aliod Carles
read -a list_atom_2_mol -p 'List of neighboring atoms of the molecule (linked to the atoms to adsorb) '
94 86112fec Marti Aliod Carles
nombre_atom_mol=${#list_atom_1_mol[@]}
95 86112fec Marti Aliod Carles
if [ ${#list_atom_2_mol[@]} != ${nombre_atom_mol} ]
96 86112fec Marti Aliod Carles
then
97 86112fec Marti Aliod Carles
	echo "  Problem: number of atoms different in the two lists"
98 86112fec Marti Aliod Carles
	exit
99 86112fec Marti Aliod Carles
fi
100 86112fec Marti Aliod Carles
read -a list_atom_surf -p 'List of the atoms of the surface that can be adsorption sites '
101 86112fec Marti Aliod Carles
echo 'Value of cutoff energy for reoptimisation (eV)'
102 86112fec Marti Aliod Carles
read cutoff
103 86112fec Marti Aliod Carles
echo '' 
104 86112fec Marti Aliod Carles
105 86112fec Marti Aliod Carles
### Adsorption de la molecule sur la surface
106 86112fec Marti Aliod Carles
107 86112fec Marti Aliod Carles
${DockOnSurf_path}/modules/script_add_adsorbate+diss.sh $molecule $surface "${list_atom_1_mol[*]}" "${list_atom_2_mol[*]}" "${list_atom_surf[*]}"
108 86112fec Marti Aliod Carles
109 86112fec Marti Aliod Carles
echo ' -- ADSORPTION SUTRUCTURES HAVE BEEN CALCULATED --'
110 86112fec Marti Aliod Carles
111 86112fec Marti Aliod Carles
# Changes labels of elements to its original definition, thus allowing different kinds of same element (Fe1 Fe2) with different properties (e.g. spin state in compounds with magnetic coupling) 
112 86112fec Marti Aliod Carles
113 86112fec Marti Aliod Carles
${DockOnSurf_path}/modules/fe_change.sh $molecule $surface ${MolOnSurf_results_path}/${molecule}
114 86112fec Marti Aliod Carles
115 86112fec Marti Aliod Carles
### Lancement des calculs pour les molecules adsorbees
116 86112fec Marti Aliod Carles
117 86112fec Marti Aliod Carles
${DockOnSurf_path}/modules/launch_script+diss.sh $molecule
118 86112fec Marti Aliod Carles
119 86112fec Marti Aliod Carles
### Attente jusqu'à ce que tous les calculs aient fini
120 86112fec Marti Aliod Carles
121 86112fec Marti Aliod Carles
mol2="$(echo $molecule | cut -c1-5)"
122 86112fec Marti Aliod Carles
while [ "$(qstat | grep surf_${mol2} | wc -l)" != 0 ];
123 86112fec Marti Aliod Carles
do 
124 86112fec Marti Aliod Carles
	sleep 300
125 86112fec Marti Aliod Carles
done
126 86112fec Marti Aliod Carles
127 86112fec Marti Aliod Carles
echo ' -- ALL CALCULATIONS FOR ADSORPTION STRUCTURES HAVE BEEN DONE --'
128 86112fec Marti Aliod Carles
129 86112fec Marti Aliod Carles
### Suppression des fichiers inutiles
130 86112fec Marti Aliod Carles
131 86112fec Marti Aliod Carles
rm -r ${MolOnSurf_results_path}/${molecule}/*/*RESTART*
132 86112fec Marti Aliod Carles
rm -r ${MolOnSurf_results_path}/${molecule}/*/*BFGS*
133 86112fec Marti Aliod Carles
rm -r ${MolOnSurf_results_path}/${molecule}/*/*.p*
134 86112fec Marti Aliod Carles
135 86112fec Marti Aliod Carles
### Clustering et lancement des structures centres des clusters
136 86112fec Marti Aliod Carles
137 86112fec Marti Aliod Carles
nb_at_surf="$(awk 'NR==1{print}' ${Surface_path}/${surface}.xyz)"
138 86112fec Marti Aliod Carles
num_center="$(expr ${nb_at_surf} + $center )"
139 86112fec Marti Aliod Carles
140 86112fec Marti Aliod Carles
${DockOnSurf_path}/modules/script_grandes_molecules+diss.sh $molecule $num_center ${nb_at_surf} ${cutoff}
141 86112fec Marti Aliod Carles
142 86112fec Marti Aliod Carles
echo ' -- CLUSTERING HAS BEEN DONE AND CLUSTER CENTERS CALCULATIONS HAVE BEEN LAUNCHED --'
143 86112fec Marti Aliod Carles
144 86112fec Marti Aliod Carles
### Attente jusqu'à ce que tous les calculs aient fini
145 86112fec Marti Aliod Carles
146 86112fec Marti Aliod Carles
while [ "$(qstat | grep surf_${mol2} | wc -l)" != 0 ];
147 86112fec Marti Aliod Carles
do
148 86112fec Marti Aliod Carles
        sleep 300
149 86112fec Marti Aliod Carles
done
150 86112fec Marti Aliod Carles
151 86112fec Marti Aliod Carles
echo ' -- ALL CLUSTER CENTERS CALCULATIONS HAVE BEEN DONE --'
152 86112fec Marti Aliod Carles
153 86112fec Marti Aliod Carles
154 86112fec Marti Aliod Carles
echo " "
155 86112fec Marti Aliod Carles
echo ' -- RESULTS --'
156 86112fec Marti Aliod Carles
157 86112fec Marti Aliod Carles
echo ' '
158 86112fec Marti Aliod Carles
echo "Most stable structure for molecule alone: ${numero_mol_stable} with energy ${min_energy_molecule} Ha"
159 86112fec Marti Aliod Carles
160 86112fec Marti Aliod Carles
min_energy_global=0
161 86112fec Marti Aliod Carles
for global_struct in ${MolOnSurf_results_path}/${molecule}/relaunched_calculations/* ; do
162 86112fec Marti Aliod Carles
	if [[ "$global_struct" != *.inp ]]
163 86112fec Marti Aliod Carles
	then
164 86112fec Marti Aliod Carles
		if [[ "$global_struct" != *.j ]]
165 86112fec Marti Aliod Carles
		then 
166 86112fec Marti Aliod Carles
			energy_global="$(awk '/ENERGY/{E=$NF} END{print E}' ${global_struct}/*${molecule}.out)"
167 86112fec Marti Aliod Carles
			if [[ "${energy_global}" > "${min_energy_global}" ]]
168 86112fec Marti Aliod Carles
			then
169 86112fec Marti Aliod Carles
				min_energy_global=${energy_global}
170 86112fec Marti Aliod Carles
				numero_global_stable="$(echo ${global_struct} | awk -F'/' '{print $NF}')"
171 86112fec Marti Aliod Carles
			fi
172 86112fec Marti Aliod Carles
		fi
173 86112fec Marti Aliod Carles
	fi
174 86112fec Marti Aliod Carles
done
175 86112fec Marti Aliod Carles
176 86112fec Marti Aliod Carles
echo "Most stable structure for adsorption: ${numero_global_stable} with energy ${min_energy_global} Ha"
177 86112fec Marti Aliod Carles