@@ -188,7 +188,7 @@ def plot_energies(self, tstart=0, tstop=800, num=10, ax=None, **kwargs) -> Figur
188
188
189
189
return fig
190
190
191
- def get_thermal_expansion_coeff (self , tstart = 0 , tstop = 800 , num = 100 , tref = None ) -> Function1D :
191
+ def get_thermal_expansion_coeff (self , tstart = 0 , tstop = 800 , num = 100 , tref = None , method = None ) -> Function1D :
192
192
"""
193
193
Calculates the thermal expansion coefficient as a function of temperature, using
194
194
finite difference on the fitted values of the volume as a function of temperature.
@@ -209,33 +209,35 @@ def get_thermal_expansion_coeff(self, tstart=0, tstop=800, num=100, tref=None) -
209
209
eos_list = [ 'taylor' , 'murnaghan' , 'birch' , 'birch_murnaghan' ,'pourier_tarantola' , 'vinet' , 'antonschmidt' ]
210
210
211
211
dt = f .temp [1 ] - f .temp [0 ]
212
- if (self .eos_name in eos_list ) :
213
- thermo = self .get_thermodynamic_properties (tstart = tstart , tstop = tstop , num = num )
214
- entropy = thermo .entropy .T #* abu.e_Cb * abu.Avogadro
215
- df_t = np .zeros ((num ,self .nvols ))
216
- df_t = - entropy
217
- param = np .zeros ((num ,4 ))
218
- param2 = np .zeros ((num ,3 ))
219
- d2f_t_v = np .zeros (num )
220
- gamma = np .zeros (num )
221
-
222
- for j in range (1 ,num - 1 ):
223
- param [j ]= np .polyfit (self .volumes ,df_t [j ] , 3 )
224
- param2 [j ] = np .array ([3 * param [j ][0 ],2 * param [j ][1 ],param [j ][2 ]])
225
-
226
- p = np .poly1d (param2 [j ])
227
- d2f_t_v [j ]= p (f .min_vol [j ])
228
-
229
- if tref is None :
230
- alpha = - 1 / f .min_vol [1 :- 1 ] * d2f_t_v [1 :- 1 ] / f .F2D [1 :- 1 ]
231
- else :
232
- alpha = - 1 / f0 .min_vol * d2f_t_v [1 :- 1 ] / f .F2D [1 :- 1 ]
212
+ if (method == "finite_difference" ):
213
+ alpha = (f .min_vol [2 :] - f .min_vol [:- 2 ]) / (2 * dt ) / f .min_vol [1 :- 1 ]
233
214
else :
234
- if tref is None :
235
- alpha = (f .min_vol [2 :] - f .min_vol [:- 2 ]) / (2 * dt ) / f .min_vol [1 :- 1 ]
215
+ if (self .eos_name in eos_list ) :
216
+ thermo = self .get_thermodynamic_properties (tstart = tstart , tstop = tstop , num = num )
217
+ entropy = thermo .entropy .T #* abu.e_Cb * abu.Avogadro
218
+ df_t = np .zeros ((num ,self .nvols ))
219
+ df_t = - entropy
220
+ param = np .zeros ((num ,4 ))
221
+ param2 = np .zeros ((num ,3 ))
222
+ d2f_t_v = np .zeros (num )
223
+ gamma = np .zeros (num )
224
+
225
+ for j in range (1 ,num - 1 ):
226
+ param [j ]= np .polyfit (self .volumes ,df_t [j ] , 3 )
227
+ param2 [j ] = np .array ([3 * param [j ][0 ],2 * param [j ][1 ],param [j ][2 ]])
228
+
229
+ p = np .poly1d (param2 [j ])
230
+ d2f_t_v [j ]= p (f .min_vol [j ])
231
+
232
+ if tref is None :
233
+ alpha = - 1 / f .min_vol [1 :- 1 ] * d2f_t_v [1 :- 1 ] / f .F2D [1 :- 1 ]
234
+ else :
235
+ alpha = - 1 / f0 .min_vol * d2f_t_v [1 :- 1 ] / f .F2D [1 :- 1 ]
236
236
else :
237
- alpha = (f .min_vol [2 :] - f .min_vol [:- 2 ]) / (2 * dt ) / f0 .min_vol
238
-
237
+ if tref is None :
238
+ alpha = (f .min_vol [2 :] - f .min_vol [:- 2 ]) / (2 * dt ) / f .min_vol [1 :- 1 ]
239
+ else :
240
+ alpha = (f .min_vol [2 :] - f .min_vol [:- 2 ]) / (2 * dt ) / f0 .min_vol
239
241
return Function1D (f .temp [1 :- 1 ], alpha )
240
242
241
243
@add_fig_kwargs
0 commit comments