def run_test(): dbf = Database() dbf.elements = frozenset(["A"]) dbf.add_phase("TEST", {}, [1]) dbf.add_phase_constituents("TEST", [["A"]]) # add THETA parameters here dbf.add_parameter("THETA", "TEST", [["A"]], 0, 334.0) conds = {v.T: np.arange(1.0, 800.0, 1), v.P: 101325} res = calculate(dbf, ["A"], "TEST", T=conds[v.T], P=conds[v.P], model=EinsteinModel, output="testprop") # res_TE = calculate(dbf, ['A'], 'TEST', T=conds[v.T], P=conds[v.P], # model=EinsteinModel, output='einstein_temperature') import matplotlib.pyplot as plt plt.scatter(res["T"], res["testprop"]) plt.xlabel("Temperature (K)") plt.ylabel("Molar Heat Capacity (J/mol-K)") plt.savefig("einstein.png")
def run_test(): dbf = Database() dbf.elements = frozenset(['A']) dbf.add_phase('TEST', {}, [1]) dbf.add_phase_constituents('TEST', [['A']]) # add THETA parameters here dbf.add_parameter('THETA', 'TEST', [['A']], 0, 334.) conds = {v.T: np.arange(1.,800.,1), v.P: 101325} res = calculate(dbf, ['A'], 'TEST', T=conds[v.T], P=conds[v.P], model=EinsteinModel, output='testprop') #res_TE = calculate(dbf, ['A'], 'TEST', T=conds[v.T], P=conds[v.P], # model=EinsteinModel, output='einstein_temperature') import matplotlib.pyplot as plt plt.scatter(res['T'], res['testprop']) plt.xlabel('Temperature (K)') plt.ylabel('Molar Heat Capacity (J/mol-K)') plt.savefig('einstein.png') print(dbf.to_string(fmt='tdb'))
def run_test(): dbf = Database() dbf.elements = frozenset(['A']) dbf.add_phase('TEST', {}, [1]) dbf.add_phase_constituents('TEST', [['A']]) # add THETA parameters here dbf.add_parameter('THETA', 'TEST', [['A']], 0, 334.) conds = {v.T: np.arange(1., 800., 1), v.P: 101325} res = calculate(dbf, ['A'], 'TEST', T=conds[v.T], P=conds[v.P], model=EinsteinModel, output='testprop') #res_TE = calculate(dbf, ['A'], 'TEST', T=conds[v.T], P=conds[v.P], # model=EinsteinModel, output='einstein_temperature') import matplotlib.pyplot as plt plt.scatter(res['T'], res['testprop']) plt.xlabel('Temperature (K)') plt.ylabel('Molar Heat Capacity (J/mol-K)') plt.savefig('einstein.png') print(dbf.to_string(fmt='tdb'))
def generate_parameters(phase_models, datasets, ref_state, excess_model): """Generate parameters from given phase models and datasets Parameters ---------- phase_models : dict Dictionary of components and phases to fit. datasets : PickleableTinyDB database of single- and multi-phase to fit. ref_state : str String of the reference data to use, e.g. 'SGTE91' or 'SR2016' excess_model : str String of the type of excess model to fit to, e.g. 'linear' Returns ------- pycalphad.Database """ logging.info('Generating parameters.') dbf = Database() dbf.elements = set(phase_models['components']) for el in dbf.elements: if Species is not None: # TODO: drop this on release of pycalphad 0.7 dbf.species.add(Species(el, {el: 1}, 0)) # Write reference state to Database refdata = getattr(espei.refdata, ref_state) stabledata = getattr(espei.refdata, ref_state + 'Stable') for key, element in refdata.items(): if isinstance(element, sympy.Piecewise): newargs = element.args + ((0, True), ) refdata[key] = sympy.Piecewise(*newargs) for key, element in stabledata.items(): if isinstance(element, sympy.Piecewise): newargs = element.args + ((0, True), ) stabledata[key] = sympy.Piecewise(*newargs) comp_refs = { c.upper(): stabledata[c.upper()] for c in dbf.elements if c.upper() != 'VA' } comp_refs['VA'] = 0 # note that the `c.upper()*2)[:2]` returns 'AL' for c.upper()=='AL' and 'VV' for c.upper()=='V' dbf.symbols.update( {'GHSER' + (c.upper() * 2)[:2]: data for c, data in comp_refs.items()}) for phase_name, phase_obj in sorted(phase_models['phases'].items(), key=operator.itemgetter(0)): # Perform parameter selection and single-phase fitting based on input # TODO: Need to pass particular models to include: magnetic, order-disorder, etc. symmetry = phase_obj.get('equivalent_sublattices', None) aliases = phase_obj.get('aliases', None) # TODO: More advanced phase data searching site_ratios = phase_obj['sublattice_site_ratios'] subl_model = phase_obj['sublattice_model'] dbf.add_phase(phase_name, dict(), site_ratios) dbf.add_phase_constituents(phase_name, subl_model) dbf.add_structure_entry(phase_name, phase_name) phase_fit(dbf, phase_name, symmetry, subl_model, site_ratios, datasets, refdata, aliases=aliases) logging.info('Finished generating parameters.') return dbf