In [ ]:
    
import numpy as np
import pandas as pd
import pickle
from scipy import optimize
import matplotlib.pyplot as plt
%matplotlib notebook
import xmeos
from xmeos import models
from xmeos import datamod
CONSTS = models.CONSTS
import copy
kboltz = CONSTS['kboltz']
    
In [ ]:
    
analysis_file = 'data/analysis.pkl'
try:
    with open(analysis_file, 'rb') as f:
        analysis = pickle.load(f)
except:
    analysis = {}
    
In [ ]:
    
    
In [ ]:
    
dat = pd.read_csv('data/MgSiO3-electron-entropy-deKoker2009.csv')
    
In [ ]:
    
    
In [ ]:
    
eos_mod = models.ElectronicEos(kind='CvPowLaw')
eos_mod.entropy(50,8000)/xmeos.models.CONSTS['kboltz']
eos_mod.set_param_values(param_names=['V0', 'Tel0', 'TelExp', 'CvelFac0', 'CvelFacExp' ],
                        param_values=[12.97, 3000, -.3, 2.7e-4,+.6])
param0 = eos_mod.get_param_values(param_names=['Tel0', 'TelExp', 'CvelFac0', 'CvelFacExp'])
V0, = eos_mod.get_param_values(param_names=['V0']) 
Vfrac = np.linspace(.35,1.25,1001)
Vmod = V0*Vfrac
    
In [ ]:
    
    
In [ ]:
    
# Initial fit by hand
plt.figure()
T0_ref = 4000
cmap = plt.get_cmap('coolwarm',7)
plt.scatter(dat['Vratio'],dat['S'],c=dat['T'],cmap=cmap)
Tmod = [2000,3000,4000,5000,6000,7000,8000]
for T in Tmod:
    plt.plot(Vfrac, eos_mod.entropy(Vmod,T)/kboltz,':',
             color=cmap((T-2000)/(8000-2000)))
    
# plt.colorbar()
plt.clim(1500,8500)
plt.xlabel('V/V0')
plt.ylabel('S_elec / N kB')
    
In [ ]:
    
    
In [ ]:
    
plt.figure()
for T in Tmod:
    plt.plot(Vfrac, eos_mod.heat_capacity(Vmod,T)/kboltz,'-',
             color=cmap((T-2000)/(8000-2000)))
    
    
plt.xlabel('V/V0')
plt.ylabel('Cv_elec / N kB')
    
In [ ]:
    
def resid_S_elec(param, Vratio=dat['Vratio'], T=dat['T'], S=dat['S'], eos_mod=eos_mod):
    param_names = ['Tel0', 'TelExp', 'CvelFac0', 'CvelFacExp']
    eos_mod.set_param_values(param_names=param_names, param_values=param)
    V0, = eos_mod.get_param_values(param_names=['V0']) 
    V = Vratio*V0
    
    Smodel = eos_mod.entropy(V, T)/kboltz
    resid_S = Smodel-S
    
    return resid_S
    
In [ ]:
    
results = optimize.leastsq(resid_S_elec,param0)
paramf = results[0]
param_names = ['Tel0', 'TelExp', 'CvelFac0', 'CvelFacExp']
eos_mod.set_param_values(param_names=param_names, param_values=paramf)
print(param_names)
print(paramf)
    
In [ ]:
    
# Store data for later use
analysis['eos_electronic'] = eos_mod
analysis['electronic_param_names'] = param_names
analysis['electronic_param_values'] = paramf
 
with open(analysis_file, 'wb') as f:
    pickle.dump(analysis, f)
    
In [ ]:
    
    
In [ ]:
    
plt.figure()
plt.scatter(dat['Vratio'],dat['S'],c=dat['T'],cmap=cmap)
Tmod = [2000,3000,4000,5000,6000,7000,8000]
for T in Tmod:
    plt.plot(Vfrac, eos_mod.entropy(Vmod,T)/kboltz,':',
             color=cmap((T-2000)/(8000-2000)))
plt.colorbar()
plt.clim(1500,8500)
plt.xlabel('V/V0')
plt.ylabel('S_elec / N kB')
    
In [ ]:
    
    
In [ ]:
    
plt.figure()
for T in Tmod:
    plt.plot(Vfrac, eos_mod.energy(Vmod,T),'-',
             color=cmap((T-2000)/(8000-2000)))
plt.xlabel('V/V0')
plt.ylabel('E_elec [eV / atom]')
    
In [ ]:
    
    
In [ ]:
    
V0, = eos_mod.get_param_values(param_names=['V0'])
plt.figure()
for T in Tmod:
    plt.plot(Vfrac, eos_mod.press(Vfrac*V0,T),'-',
             color=cmap((T-2000)/(8000-2000)))
    
plt.xlabel('V/V0')
plt.ylabel('P_elec [GPa]')
    
In [ ]:
    
    
In [ ]: