-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgetDataFromAFLOWLIB
executable file
·322 lines (213 loc) · 8.55 KB
/
getDataFromAFLOWLIB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
#!/bin/bash
## This code is written based on the reference paper mentioned below.
## Taylor, Richard H., et al. "A RESTful API for exchanging Materials Data in the AFLOWLIB. org consortium." Computational Materials Science 93 (2014): 178-192.
## There is an example code mentioned in the paper. It is better to read the paper first and then this code. It helps you understand the code easier, faster and better.
SERVER='http://aflowlib.duke.edu'
PROJECT3='AFLOWDATA/LIB3_RAW/'
PROJECT2='AFLOWDATA/LIB2_RAW/'
FILE=getDataFromAflowlib.txt
while read line;do
alloy_name=$line
URL=$SERVER'/'$PROJECT3$alloy_name'/'
IFS=','
AURL=$(wget -q -O - ${URL}?aurl); # AURL gets you to the alloy
for key in $(wget -q -O - ${URL}?aflowlib_entries); # keys are the different prototypes
do
getStoichiometry='http://'${AURL}'/'${key}'/?stoichiometry'
var=0
for i in $(wget -q -O - ${getStoichiometry})
do
((var++))
if [ $var -eq 1 ]; then
conc_ele1=$i
fi
if [ $var -eq 2 ]; then
conc_ele2=$i
fi
if [ $var -eq 3 ]; then
conc_ele3=$i
var=0
fi
done
getEnthalpyFormationAtom='http://'${AURL}'/'${key}'/?enthalpy_formation_atom'
enthalpyFormationAtom=$(wget -q -O - ${getEnthalpyFormationAtom})
getEntropicTemperature='http://'${AURL}'/'${key}'/?entropic_temperature'
entropicTemperature=$(wget -q -O - ${getEntropicTemperature})
getCompoundName='http://'${AURL}'/'${key}'/?compound'
compoundName=$(wget -q -O - ${getCompoundName})
limit=-1.0
# These limits are to make sure there is no wierd input from AFLOWLIB for any structure like Be2Zn. (Max set now in 1 eV)
# Refer this paper to know more about the error:
# Richard H. Taylor, Stefano Curtarolo, and Gus L. W. Hart Phys. Rev. B 84, 084101 – Published 19 August 2011
badinp=$(echo "$enthalpyFormationAtom>$limit" | bc)
if [ $badinp -eq 1 ] ; then
echo Proto: $key, Name: $compoundName, Stoichiometry: $conc_ele1,$conc_ele2,$conc_ele3, FormEnthalpyAtom: $enthalpyFormationAtom, EntropicTemp: $entropicTemperature >> output
fi
# we have to write this to reset values, otherwise the previous values are written
conc_ele1=0
conc_ele2=0
conc_ele3=0
enthalpyFormationAtom=Null
entropicTemperature=Null
compoundName=Null
done
echo Data Extracted from LIB3....
#rm species_tmp1
getSpecies='http://'${AURL}'/'${key}'/?species_pp'
echo $(wget -q -O - ${getSpecies}) >> species_tmp1
# The code I'm writing here works only for terenary alloy.
unset IFS # This is super important. Read the RESTAPI paper. You will understand it.
var=0 # 'var' is a local variable.
for i in $(cat species_tmp1)
do
((var++))
if [ $var -eq 1 ]; then
ele1=$i
fi
if [ $var -eq 2 ]; then
ele2=$i
fi
if [ $var -eq 3 ]; then
ele3=$i
var=0
fi
done # until here I got all the elements details.
echo Species Info: $ele1, $ele2, $ele3 :: $ele1$ele2$ele3
# Now I need to get data from LIB2 for all binary alloys.
# Note: All elements given in alphabetical order as per aflow.
# Similar procedure as above is followed.
## Binary combination 1
URL=$SERVER'/'$PROJECT2$ele1$ele2'/'
IFS=',' # Remember I have to reset IFS here again.
AURL=$(wget -q -O - ${URL}?aurl); # AURL gets you to the alloy
for key in $(wget -q -O - ${URL}?aflowlib_entries); # keys are the different prototypes
do
getNSpecies='http://'${AURL}'/'${key}'/?nspecies'
if [ $(wget -q -O - ${getNSpecies}) -eq 2 ]; then
getStoichiometry='http://'${AURL}'/'${key}'/?stoichiometry'
# stoichiometry=$(#wget -q -O - ${getStoichiometry})
var=0
for i in $(wget -q -O - ${getStoichiometry})
do
((var++))
if [ $var -eq 1 ]; then
conc_ele1=$i
fi
if [ $var -eq 2 ]; then
conc_ele2=$i
var=0
fi
done
getEnthalpyFormationAtom='http://'${AURL}'/'${key}'/?enthalpy_formation_atom'
enthalpyFormationAtom=$(wget -q -O - ${getEnthalpyFormationAtom})
getEntropicTemperature='http://'${AURL}'/'${key}'/?entropic_temperature'
entropicTemperature=$(wget -q -O - ${getEntropicTemperature})
getCompoundName='http://'${AURL}'/'${key}'/?compound'
compoundName=$(wget -q -O - ${getCompoundName})
limit=-1.0
badinp=$(echo "$enthalpyFormationAtom>$limit" | bc)
if [ $badinp -eq 1 ] ; then
echo Proto: $key, Name: $compoundName, Stoichiometry: $conc_ele1,$conc_ele2,$conc_ele3, FormEnthalpyAtom: $enthalpyFormationAtom, EntropicTemp: $entropicTemperature >> output
fi
# echo Proto: $key, Name: $compoundName, Stoichiometry: $conc_ele1,$conc_ele2,0, FormEnthalpyAtom: $enthalpyFormationAtom, EntropicTemp: $entropicTemperature >> output
conc_ele1=0
conc_ele2=0
conc_ele3=0
enthalpyFormationAtom=Null
entropicTemperature=Null
compoundName=Null
else
echo error at proto $key >> ErrorLog
fi # This fi is for nspecies
done
echo Data Extracted for First Binary combination....
## Binary combination 2
URL=$SERVER'/'$PROJECT2$ele1$ele3'/'
AURL=$(wget -q -O - ${URL}?aurl); # AURL gets you to the alloy
for key in $(wget -q -O - ${URL}?aflowlib_entries); # keys are the different prototypes
do
getNSpecies='http://'${AURL}'/'${key}'/?nspecies'
if [ $(wget -q -O - ${getNSpecies}) -eq 2 ]; then
getStoichiometry='http://'${AURL}'/'${key}'/?stoichiometry'
# stoichiometry=$(#wget -q -O - ${getStoichiometry})
var=0
for i in $(wget -q -O - ${getStoichiometry})
do
((var++))
if [ $var -eq 1 ]; then
conc_ele1=$i
fi
if [ $var -eq 2 ]; then
conc_ele3=$i
var=0
fi
done
getEnthalpyFormationAtom='http://'${AURL}'/'${key}'/?enthalpy_formation_atom'
enthalpyFormationAtom=$(wget -q -O - ${getEnthalpyFormationAtom})
getEntropicTemperature='http://'${AURL}'/'${key}'/?entropic_temperature'
entropicTemperature=$(wget -q -O - ${getEntropicTemperature})
getCompoundName='http://'${AURL}'/'${key}'/?compound'
compoundName=$(wget -q -O - ${getCompoundName})
limit=-1.0
badinp=$(echo "$enthalpyFormationAtom>$limit" | bc)
if [ $badinp -eq 1 ] ; then
echo Proto: $key, Name: $compoundName, Stoichiometry: $conc_ele1,$conc_ele2,$conc_ele3, FormEnthalpyAtom: $enthalpyFormationAtom, EntropicTemp: $entropicTemperature >> output
fi
# echo Proto: $key, Name: $compoundName, Stoichiometry: $conc_ele1,0,$conc_ele3, FormEnthalpyAtom: $enthalpyFormationAtom, EntropicTemp: $entropicTemperature >> output
conc_ele1=0
conc_ele2=0
conc_ele3=0
enthalpyFormationAtom=Null
entropicTemperature=Null
compoundName=Null
else
echo error at proto $key >> ErrorLog
fi
done
echo Data Extracted for Second Binary combination....
## Binary combination 3
URL=$SERVER'/'$PROJECT2$ele2$ele3'/'
AURL=$(wget -q -O - ${URL}?aurl); # AURL gets you to the alloy
for key in $(wget -q -O - ${URL}?aflowlib_entries); # keys are the different prototypes
do
getNSpecies='http://'${AURL}'/'${key}'/?nspecies'
if [ $(wget -q -O - ${getNSpecies}) -eq 2 ]; then
getStoichiometry='http://'${AURL}'/'${key}'/?stoichiometry'
# stoichiometry=$(wget -q -O - ${getStoichiometry})
var=0
for i in $(wget -q -O - ${getStoichiometry})
do
((var++))
if [ $var -eq 1 ]; then
conc_ele2=$i
fi
if [ $var -eq 2 ]; then
conc_ele3=$i
var=0
fi
done
getEnthalpyFormationAtom='http://'${AURL}'/'${key}'/?enthalpy_formation_atom'
enthalpyFormationAtom=$(wget -q -O - ${getEnthalpyFormationAtom})
getEntropicTemperature='http://'${AURL}'/'${key}'/?entropic_temperature'
entropicTemperature=$(wget -q -O - ${getEntropicTemperature})
getCompoundName='http://'${AURL}'/'${key}'/?compound'
compoundName=$(wget -q -O - ${getCompoundName})
limit=-1.0
badinp=$(echo "$enthalpyFormationAtom>$limit" | bc)
if [ $badinp -eq 1 ] ; then
echo Proto: $key, Name: $compoundName, Stoichiometry: $conc_ele1,$conc_ele2,$conc_ele3, FormEnthalpyAtom: $enthalpyFormationAtom, EntropicTemp: $entropicTemperature >> output
fi
# echo Proto: $key, Name: $compoundName, Stoichiometry: 0,$conc_ele2,$conc_ele3, FormEnthalpyAtom: $enthalpyFormationAtom, EntropicTemp: $entropicTemperature >> output
conc_ele1=0
conc_ele2=0
conc_ele3=0
enthalpyFormationAtom=Null
entropicTemperature=Null
compoundName=Null
else
echo error at proto $key >> ErrorLog
fi
done
echo Data Extracted for Third Binary combination....
mv output $ele1$ele2$ele3.in
done < $FILE