In [1]:
from pycalphad.tests.datasets import *
from pycalphad.core.solver import InteriorPointSolver
from pycalphad import equilibrium, Database, variables as v
dbf = Database('alzn_mey.tdb')
class ProblemSaver(InteriorPointSolver):
saved_problem = [None]
def solve(self, prob):
self.saved_problem[0] = prob
self.verbose = True
return super(ProblemSaver, self).solve(prob)
my_phases = ['LIQUID', 'FCC_A1']
comps = ['AL', 'ZN']
conds = dict({v.T: 800, v.P: 101325, v.X('ZN'): 0.2, v.N: 1})
eqx = equilibrium(dbf, comps, my_phases, conds, verbose=False, solver=ProblemSaver())
In [2]:
import numpy as np
soln = np.array(
[1.00000000e+00, 1.01325000e+05, 8.00000000e+02, 8.28635470e-01,
1.71364530e-01, 5.49537239e-01, 4.50462761e-01, 8.97400030e-01,
1.02599970e-01]
)
temps = np.arange(300,1000,1e-1)
obj = np.zeros_like(temps)
grad = np.zeros_like(temps)
error = np.zeros_like(temps)
for idx, temp in enumerate(temps):
copy_of_soln = np.array(soln)
copy_of_soln[2] = temp
obj[idx] = ProblemSaver.saved_problem[0].objective(copy_of_soln)
grad[idx] = ProblemSaver.saved_problem[0].gradient(copy_of_soln)[2]
error = np.abs(np.gradient(obj, 1e-1) - grad)
In [3]:
ProblemSaver.saved_problem[0].jacobian(soln)
Out[3]:
In [ ]:
In [5]:
np.unravel_index(np.arange(9*9), (9, 9))
Out[5]:
In [ ]: