Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
Defaults to a pycalphad.core.solver.InteriorPointSolver.
callables : dict, optional
Pre-computed callable functions for equilibrium calculation.
Returns
-------
Structured equilibrium calculation, or Dask graph if scheduler=None.
Examples
--------
None yet.
"""
if not broadcast:
raise NotImplementedError('Broadcasting cannot yet be disabled')
comps = sorted(unpack_components(dbf, comps))
phases = unpack_phases(phases) or sorted(dbf.phases.keys())
list_of_possible_phases = filter_phases(dbf, comps)
if len(list_of_possible_phases) == 0:
raise ConditionError('There are no phases in the Database that can be active with components {0}'.format(comps))
active_phases = {name: dbf.phases[name] for name in filter_phases(dbf, comps, phases)}
if len(active_phases) == 0:
raise ConditionError('None of the passed phases ({0}) are active. List of possible phases: {1}.'.format(phases, list_of_possible_phases))
if isinstance(comps, (str, v.Species)):
comps = [comps]
if len(set(comps) - set(dbf.species)) > 0:
raise EquilibriumError('Components not found in database: {}'
.format(','.join([c.name for c in (set(comps) - set(dbf.species))])))
calc_opts = calc_opts if calc_opts is not None else dict()
solver = solver if solver is not None else InteriorPointSolver(verbose=verbose)
parameters = parameters if parameters is not None else dict()
if isinstance(parameters, dict):
parameters = OrderedDict(sorted(parameters.items(), key=str))
the results may be meaningless. If None, `equilibrium` will be called.
Specifying this keyword argument can save the user some time if several properties
need to be calculated in succession.
per_phase : bool, optional
If True, compute and return the property for each phase present.
If False, return the total system value, weighted by the phase fractions.
kwargs
Passed to `calculate`.
Returns
-------
Dataset of property as a function of equilibrium conditions
"""
if data is None:
data = equilibrium(dbf, comps, phases, conditions)
active_phases = unpack_phases(phases) or sorted(dbf.phases.keys())
conds = _adjust_conditions(conditions)
indep_vars = ['P', 'T']
# TODO: Rewrite this to use the coord dict from 'data'
str_conds = OrderedDict((str(key), value) for key, value in conds.items())
indep_vals = list([float(x) for x in np.atleast_1d(val)]
for key, val in str_conds.items() if key in indep_vars)
coord_dict = str_conds.copy()
components = [x for x in sorted(comps) if not x.startswith('VA')]
coord_dict['vertex'] = np.arange(len(components))
grid_shape = np.meshgrid(*coord_dict.values(),
indexing='ij', sparse=False)[0].shape
prop_shape = grid_shape
prop_dims = list(str_conds.keys()) + ['vertex']
result = Dataset({output: (prop_dims, np.full(prop_shape, np.nan))}, coords=coord_dict)
# For each phase select all conditions where that phase exists
Print details of calculations. Useful for debugging.
pbar : bool, optional
Show a progress bar.
calc_opts : dict, optional
Keyword arguments to pass to `calculate`, the energy/property calculation routine.
Returns
-------
Structured equilibrium calculation.
Examples
--------
None yet.
"""
from pycalphad import __version__ as pycalphad_version
active_phases = unpack_phases(phases) or sorted(dbf.phases.keys())
comps = sorted(comps)
indep_vars = ['T', 'P']
calc_opts = calc_opts if calc_opts is not None else dict()
model = model if model is not None else Model
phase_records = dict()
callable_dict = kwargs.pop('callables', dict())
grad_callable_dict = kwargs.pop('grad_callables', dict())
hess_callable_dict = kwargs.pop('hess_callables', dict())
points_dict = dict()
maximum_internal_dof = 0
# Modify conditions values to be within numerical limits, e.g., X(AL)=0
# Also wrap single-valued conditions with lists
conds = _adjust_conditions(conditions)
str_conds = OrderedDict((str(key), value) for key, value in conds.items())
indep_vals = list([float(x) for x in np.atleast_1d(val)]
for key, val in str_conds.items() if key in indep_vars)
If True, compute and return the property for each phase present.
If False, return the total system value, weighted by the phase fractions.
parameters : dict, optional
Maps SymPy Symbol to numbers, for overriding the values of parameters in the Database.
callables : dict
Callable functions to compute 'output' for each phase.
kwargs
Passed to `calculate`.
Returns
-------
Dataset of property as a function of equilibrium conditions
"""
if data is None:
data = equilibrium(dbf, comps, phases, conditions, to_xarray=False)
active_phases = unpack_phases(phases) or sorted(dbf.phases.keys())
conds = _adjust_conditions(conditions)
indep_vars = ['N', 'P', 'T']
# TODO: Rewrite this to use the coord dict from 'data'
str_conds = OrderedDict((str(key), value) for key, value in conds.items())
indep_vals = list([float(x) for x in np.atleast_1d(val)]
for key, val in str_conds.items() if key in indep_vars)
coord_dict = str_conds.copy()
components = [x for x in sorted(comps)]
desired_active_pure_elements = [list(x.constituents.keys()) for x in components]
desired_active_pure_elements = [el.upper() for constituents in desired_active_pure_elements for el in constituents]
pure_elements = sorted(set([x for x in desired_active_pure_elements if x != 'VA']))
coord_dict['vertex'] = np.arange(len(pure_elements) + 1) # +1 is to accommodate the degenerate degree of freedom at the invariant reactions
grid_shape = np.meshgrid(*coord_dict.values(),
indexing='ij', sparse=False)[0].shape
prop_shape = grid_shape
prop_dims = list(str_conds.keys()) + ['vertex']