def isothermal_bulk_modulus(self, pressure, temperature, volume, params): """ Returns isothermal bulk modulus at the pressure, temperature, and volume [Pa] """ debye_T = self.__debye_temperature(params['V_0'] / volume, params) gr = self.grueneisen_parameter(pressure, temperature, volume, params) E_th = debye.thermal_energy( temperature, debye_T, params['n']) #thermal energy at temperature T E_th_ref = debye.thermal_energy( 300., debye_T, params['n']) #thermal energy at reference temperature C_v = debye.heat_capacity_v( temperature, debye_T, params['n']) #heat capacity at temperature T C_v_ref = debye.heat_capacity_v( 300., debye_T, params['n']) #heat capacity at reference temperature q = self.volume_dependent_q(params['V_0'] / volume, params) K = bm.bulk_modulus(volume, params) \ + (gr + 1.-q)* ( gr / volume ) * (E_th - E_th_ref) \ - ( pow(gr , 2.) / volume )*(C_v*temperature - C_v_ref*300.) return K
def isothermal_bulk_modulus(self, pressure,temperature,volume, params): """ Returns isothermal bulk modulus [Pa] as a function of pressure [Pa], temperature [K], and volume [m^3]. EQ B8 """ K_T = bm.bulk_modulus(volume, params) + \ self.__thermal_bulk_modulus(temperature,volume, params) - \ self.__thermal_bulk_modulus(300.,volume, params) #EQB13 return K_T
def isothermal_bulk_modulus(self, pressure,temperature, volume, params): """ Returns isothermal bulk modulus at the pressure, temperature, and volume [Pa] """ debye_T = self.__debye_temperature(params['V_0']/volume, params) gr = self.grueneisen_parameter(pressure, temperature, volume, params) E_th = debye.thermal_energy(temperature, debye_T, params['n']) #thermal energy at temperature T E_th_ref = debye.thermal_energy(300.,debye_T, params['n']) #thermal energy at reference temperature C_v = debye.heat_capacity_v(temperature, debye_T, params['n']) #heat capacity at temperature T C_v_ref = debye.heat_capacity_v(300.,debye_T, params['n']) #heat capacity at reference temperature q = self.volume_dependent_q(params['V_0']/volume, params) K = bm.bulk_modulus(volume, params) \ + (gr + 1.-q)* ( gr / volume ) * (E_th - E_th_ref) \ - ( pow(gr , 2.) / volume )*(C_v*temperature - C_v_ref*300.) return K
def check_birch_murnaghan(): plt.close() #make a test mineral test_mineral = material() test_mineral.params ={'name':'test', 'ref_V': 6.844e-6, 'ref_K': 259.0e9, 'K_prime': 4.0, 'ref_mu': 175.0e9, 'mu_prime': 1.7, 'molar_mass': .0, 'n': 0., 'ref_Debye': 0., 'ref_grueneisen': 0., 'q0': 0.} pressure = np.linspace(0., 140.e9, 100) volume = np.empty_like(pressure) bulk_modulus = np.empty_like(pressure) shear_modulus = np.empty_like(pressure) #calculate its static properties for i in range(len(pressure)): volume[i] = bm.volume(pressure[i], test_mineral.params) bulk_modulus[i] = bm.bulk_modulus(volume[i], test_mineral.params) shear_modulus[i] = bm.shear_modulus_third_order(volume[i], test_mineral.params) #third order is used for the plot we are comparing against #compare with figure 1 plt.plot(pressure/1.e9, bulk_modulus/1.e9, pressure/1.e9, shear_modulus/1.e9) fig1 = mpimg.imread('data/slb_fig1.png') plt.imshow(fig1, extent=[0,140,0,800], aspect='auto') plt.plot(pressure/1.e9, bulk_modulus/1.e9, 'g+', pressure/1.e9, shear_modulus/1.e9, 'g+') plt.ylim(0,800) plt.xlim(0,140) plt.xlabel("Pressure (GPa)") plt.ylabel("Modulus (GPa)") plt.title("Comparing with Figure 1 of Stixrude and Lithgow-Bertelloni (2005)") plt.show()
def isothermal_bulk_modulus(self, pressure, temperature, volume, params): """ Returns isothermal bulk modulus :math:`[Pa]` """ T_0 = params["T_0"] debye_T = self.__debye_temperature(params["V_0"] / volume, params) gr = self.grueneisen_parameter(pressure, temperature, volume, params) E_th = debye.thermal_energy(temperature, debye_T, params["n"]) # thermal energy at temperature T E_th_ref = debye.thermal_energy(T_0, debye_T, params["n"]) # thermal energy at reference temperature C_v = debye.heat_capacity_v(temperature, debye_T, params["n"]) # heat capacity at temperature T C_v_ref = debye.heat_capacity_v(T_0, debye_T, params["n"]) # heat capacity at reference temperature q = self.volume_dependent_q(params["V_0"] / volume, params) K = ( bm.bulk_modulus(volume, params) + (gr + 1.0 - q) * (gr / volume) * (E_th - E_th_ref) - (pow(gr, 2.0) / volume) * (C_v * temperature - C_v_ref * T_0) ) return K
def bulk_modulus(T,V, params): K_T = bm.bulk_modulus(V, params) + \ thermal_bulk_modulus(T,V, params) - \ thermal_bulk_modulus(300.,V, params) #EQB13 return K_T