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 |