def thermal_expansivity(self, pressure, temperature, volume , params): """ Returns thermal expansivity at the pressure, temperature, and volume [1/K] Replace -Pth in EQ 13+1 with P-Pth for non-ambient temperature """ a, b, c = mt.tait_constants(params) Pth=self.__relative_thermal_pressure(temperature,params) psubpth=pressure-Pth einstein_T=self.__einstein_temperature(params['S_0'], params['n']) C_V0 = einstein.heat_capacity_v( T_0, einstein_T, params['n'] ) C_V = einstein.heat_capacity_v(temperature, einstein_T,params['n']) alpha = params['a_0'] * (C_V/C_V0) *1./((1.+b*psubpth)*(a + (1.-a)*np.power((1+b*psubpth), c))) return alpha
def __thermal_pressure(self,T,params): """ Returns thermal pressure [Pa] as a function of T [K] EQ 12 - 1 of Holland and Powell, 2011 """ # This is basically the mie-gruneisen equation of state for thermal # pressure using an Einstein model for heat capacity. The additional # assumption that they make is that alpha*K/Cv, (or gamma / V) is # constant over a wide range of compressions. # Note that the xi function in HP2011 is just the Einstein heat capacity # divided by 3nR. I don't know why they don't use that, but anyhow... einstein_T=self.__einstein_temperature(params['S_0'],params['n']) E_th = einstein.thermal_energy( T, einstein_T, params['n'] ) C_V0 = einstein.heat_capacity_v( T_0, einstein_T, params['n'] ) P_th = params['a_0']*params['K_0'] / C_V0 * E_th return P_th
def heat_capacity_p(self, pressure, temperature, volume, params): """ Returns the heat capacity [J/K/mol] as a function of pressure [Pa] and temperature [K]. """ a, b, c = mt.tait_constants(params) Pth=self.__relative_thermal_pressure(temperature,params) ksi_over_ksi_0=einstein.heat_capacity_v( temperature, params['T_einstein'], params['n'] )/einstein.heat_capacity_v( params['T_0'], params['T_einstein'], params['n'] ) dSdT=params['V_0']*params['K_0']*np.power((ksi_over_ksi_0*params['a_0']),2.0)*(np.power((1.+b*(pressure-params['P_0']-Pth)), -1.-c) - np.power((1.+b*(-Pth)), -1.-c)) # Add order-disorder terms if required if params.has_key('landau_Tc'): # For a phase transition described by Landau term Cpdisord=heat_capacity_p_disorder_Landau(pressure, temperature, params) else: Cpdisord=0.0 return self.heat_capacity_p0(temperature,params) + temperature*dSdT + Cpdisord
def __thermal_pressure(self,T,params): """ Returns thermal pressure [Pa] as a function of T [K] EQ 12 - 1 of Holland and Powell, 2011 """ # This is basically the mie-gruneisen equation of state for thermal # pressure using an Einstein model for heat capacity. The additional # assumption that they make is that alpha*K/Cv, (or gamma / V) is # constant over a wide range of compressions. # Note that the xi function in HP2011 is just the Einstein heat capacity # divided by 3nR. This function is *not* used to calculate the # heat capacity - Holland and Powell (2011) prefer the additional # freedom provided by their polynomial expression. E_th = einstein.thermal_energy( T, params['T_einstein'], params['n'] ) C_V0 = einstein.heat_capacity_v( params['T_0'], params['T_einstein'], params['n'] ) P_th = params['a_0']*params['K_0'] / C_V0 * E_th return P_th
def entropy(self,pressure,temperature, volume, params): """ Returns the entropy [J/K/mol] as a function of pressure [Pa] and temperature [K]. """ a, b, c = mt.tait_constants(params) Pth=self.__relative_thermal_pressure(temperature,params) ksi_over_ksi_0=einstein.heat_capacity_v( temperature, params['T_einstein'], params['n'] )/einstein.heat_capacity_v( params['T_0'], params['T_einstein'], params['n'] ) dintVdpdx=(params['V_0']*params['a_0']*params['K_0']*a*ksi_over_ksi_0)*(np.power((1.+b*(pressure-params['P_0']-Pth)), 0.-c) - np.power((1.-b*Pth), 0.-c)) # Add order-disorder terms if required if params.has_key('landau_Tc'): # For a phase transition described by Landau term Sdisord=entropy_disorder_Landau(pressure, temperature, params) else: if params.has_key('BW_deltaH'): # Add Bragg-Williams disordering Sdisord=entropy_disorder_BW(pressure, temperature, params) - entropy_disorder_BW(params['P_0'], params['T_0'], params) else: Sdisord=0.0 return params['S_0'] + self.__intCpoverTdT(temperature, params) + dintVdpdx + Sdisord