New Features in Maple 2018 - Thermophysical Data and Scientific Constants - Maplesoft

What's New in Maple 2018

Thermophysical Data and Scientific Constants



Introduction 

The ThermophysicalData package  

  • Introduces the Chemicals subpackage, which gives the properties of an additional 2000 chemical species
  • Updates the CoolProp fluid properties engine to version 6.1

Additionally, the ScientificConstants has updated the non-derived physical constants to reflect those in the 2014 release of the CODATA Recommended Values of the Fundamental Physical Constants. 


New Thermodynamic Data 

Maple 2018 introduces the Chemicals subpackage. This uses a new data source* to give the thermodynamic properties of over 2000 gases, liquids and crystalline species. 

* Bonnie J. McBride, Michael J. Zehe, and Sanford Gordon. NASA Glenn Coefficients for Calculating Thermodynamic Properties of Individual Species; 2002; https://www.grc.nasa.gov/WWW/CEAWeb/TP-2002-21556.htm


The data can be used to study 

  • Chemical equilibrium composition
  • Reaction constants and spontaneity
  • Rocket performance
  • Flame temperatures
  • Explosion and detonation pressures
  • And many more applications
> restart; -1; with(ThermophysicalData)
[Chemicals, CoolProp, PHTChart, Property, PsychrometricChart, TemperatureEntropyChart]
[Chemicals, CoolProp, PHTChart, Property, PsychrometricChart, TemperatureEntropyChart]

Heat of formation and molar mass of gaseous CO2 

> Chemicals:-Property(Chemicals:-Property(
Typesetting:-mprintslash([`+`(`-`(`*`(393510.000, `*`(Unit(`/`(`*`(J), `*`(mol)))))))], [`+`(`-`(`*`(393510.000, `*`(Units:-Unit(`/`(`*`(J), `*`(mol)))))))])
Typesetting:-mprintslash([`+`(`*`(44.0095000, `*`(Unit(`/`(`*`(g), `*`(mol))))))], [`+`(`*`(44.0095000, `*`(Units:-Unit(`/`(`*`(g), `*`(mol))))))])

Enthalpy and entropy of gaseous CO2 at 300 K 

> Chemicals:-Property(
Typesetting:-mprintslash([`+`(`-`(`*`(393441.2212, `*`(Unit(`/`(`*`(J), `*`(mol)))))))], [`+`(`-`(`*`(393441.2212, `*`(Units:-Unit(`/`(`*`(J), `*`(mol)))))))])
Typesetting:-mprintslash([`+`(`*`(214.0173732, `*`(Unit(`/`(`*`(J), `*`(mol, `*`(K)))))))], [`+`(`*`(214.0173732, `*`(Units:-Unit(`/`(`*`(J), `*`(mol, `*`(K)))))))])

Application: Adiabatic Flame Temperature of Butane 

Liquid butane is burnt with 100% theoretical air at an initial temperature of 298.15 K. The combustion reaction is 


C4H10 (l) + 6.5 O2 (g)+ 24.44 N2 (g) → 4 CO2 (g) + 5 H2O (g) + 24.44 N2 (g) 

Here, we will calculate the adiabatic flame temperature of the combustion products. 


Heat of formation of butane 

> h_f_C4H10 := Chemicals:-Property(
Typesetting:-mprintslash([h_f_C4H10 := `+`(`-`(`*`(150664.000, `*`(Unit(`/`(`*`(J), `*`(mol)))))))], [`+`(`-`(`*`(150664.000, `*`(Units:-Unit(`/`(`*`(J), `*`(mol)))))))])

Enthalpies of the combustion products at a temperature T 

> h_N2 := Chemicals:-Property(h_O2 := Chemicals:-Property(h_H2O := Chemicals:-Property(h_CO2 := Chemicals:-Property(

Enthalpy of the reactants 

> H_reactants := `*`(Unit('mol'), `*`(h_f_C4H10))
Typesetting:-mprintslash([H_reactants := `+`(`-`(`*`(150664.000, `*`(Unit(mol), `*`(Unit(`/`(`*`(J), `*`(mol))))))))], [`+`(`-`(`*`(150664.000, `*`(Units:-Unit(mol), `*`(Units:-Unit(`/`(`*`(J), `*`(mo...

Total enthalpy of the combustion products 

> H_products := `+`(`*`(4, `*`(Unit('mol'), `*`(h_CO2))), `*`(5, `*`(Unit('mol'), `*`(h_H2O))), `*`(24.44, `*`(Unit('mol'), `*`(h_N2))))
Typesetting:-mprintslash([H_products := `+`(`*`(4, `*`(Unit(mol), `*`(ThermophysicalData:-Chemicals:-Property(
Typesetting:-mprintslash([H_products := `+`(`*`(4, `*`(Unit(mol), `*`(ThermophysicalData:-Chemicals:-Property(

Equating the enthalpy of the reactants and the enthalpy of the combustion products gives the adiabatic flame temperature 

> fsolve(H_reactants = H_products, T = `+`(`*`(2000, `*`(Unit('K')))))
Typesetting:-mprintslash([`+`(`*`(2379.853026, `*`(Unit(K))))], [`+`(`*`(2379.853026, `*`(Units:-Unit(K))))])

Application: Equilibrium Composition of the Combustion of Carbon Monoxide and Oxygen 

One mole of CO and 0.5 moles of O2 are burned at 3000 K

CO (g) + 0.5 O2 (g) → CO2 (g)

The combustion products undergo dissociation and contain CO2, CO, O and O2. Here, we will calculate the equilibrium composition of the combustion products 


Physical Properties

Enthalpies as a function of temperature 

> h_CO := Chemicals:-Property(h_C := Chemicals:-Property(h_O2 := Chemicals:-Property(h_O := Chemicals:-Property(h_CO2 := Chemicals:-Property(

Entropy as a function of temperature 

> s_CO := Chemicals:-Property(s_C := Chemicals:-Property(s_O2 := Chemicals:-Property(s_O := Chemicals:-Property(s_CO2 := Chemicals:-Property(

Gibbs Free Energy as a function of temperature 

> G_CO := proc (T) options operator, arrow; `+`(h_CO, `-`(h_C), `-`(`*`(.5, `*`(h_O2))), `-`(`*`(T, `*`(`+`(s_CO, `-`(s_C), `-`(`*`(.5, `*`(s_O2)))))))) end proc; -1; G_CO2 := proc (T) options operator,...
G_CO := proc (T) options operator, arrow; `+`(h_CO, `-`(h_C), `-`(`*`(.5, `*`(h_O2))), `-`(`*`(T, `*`(`+`(s_CO, `-`(s_C), `-`(`*`(.5, `*`(s_O2)))))))) end proc; -1; G_CO2 := proc (T) options operator,...
G_CO := proc (T) options operator, arrow; `+`(h_CO, `-`(h_C), `-`(`*`(.5, `*`(h_O2))), `-`(`*`(T, `*`(`+`(s_CO, `-`(s_C), `-`(`*`(.5, `*`(s_O2)))))))) end proc; -1; G_CO2 := proc (T) options operator,...
G_CO := proc (T) options operator, arrow; `+`(h_CO, `-`(h_C), `-`(`*`(.5, `*`(h_O2))), `-`(`*`(T, `*`(`+`(s_CO, `-`(s_C), `-`(`*`(.5, `*`(s_O2)))))))) end proc; -1; G_CO2 := proc (T) options operator,...

Universal gas constant 

> R := `+`(`*`(8.314, `*`(Unit(`/`(`*`('J'), `*`('mol', `*`('K'))))))); -1

Constraints 

Balancing the reactants and products gives 


CO + 0.5 O2 = n1 CO2+ n2 CO + n3 O + n4 O2 


This results in the following constraint on the oxygen atoms... 

> con1 := `+`(`*`(2, `*`(n1)), n2, n3, `*`(2, `*`(n4))) = `+`(`*`(2, `*`(Unit('mol')))); -1

...and this constraint on the carbon atoms 

> con2 := `+`(n1, n2) = Unit('mol'); -1

Total number of moles in products 

> nt := `+`(n1, n2, n3, n4); -1

Equilibrium Composition 

For a given temperature, minimizing the Gibbs Free Energy of the combustion products will give the equilibrium molar composition 

> gibbs := `+`(`*`(n1, `*`(`+`(G_CO2(T), `*`(R, `*`(T, `*`(ln(`/`(`*`(n1), `*`(nt))))))))), `*`(n2, `*`(`+`(G_CO(T), `*`(R, `*`(T, `*`(ln(`/`(`*`(n2), `*`(nt))))))))), `*`(n3, `*`(`+`(G_O(T), `*`(R, `*`...

> res := Optimization:-Minimize(eval(gibbs, T = `+`(`*`(3000, `*`(Unit('K'))))), {con1, con2, `>=`(n1, `+`(`*`(0.1e-3, `*`(Unit('mol'))))), `>=`(n2, `+`(`*`(0.1e-3, `*`(Unit('mol'))))), `>=`(n3, `+`(`*`...

Typesetting:-mprintslash([res := [`+`(`-`(`*`(416167.796100690844, `*`(Unit(J))))), [n1 = `+`(`*`(.545813996336248, `*`(Unit(mol)))), n2 = `+`(`*`(.454186003663752, `*`(Unit(mol)))), n3 = `+`(`*`(0.56...

Updated CoolProp Library

Maple 2018 updates the CoolProp library to version 6.1. This includes new fluids and updated routines used to calculate fluid properties.


New fluids include Dichloroethane, DiethylEther, EthyleneOxide, HydrogenChloride, Novec 649TM and several others 


> Property(
Typesetting:-mprintslash([`+`(`*`(233862.9511, `*`(Unit(`/`(`*`(J), `*`(kg))))))], [`+`(`*`(233862.9511, `*`(Units:-Unit(`/`(`*`(J), `*`(kg))))))])
> Property(
Typesetting:-mprintslash([`+`(`*`(3649016.897, `*`(Unit(Pa))))], [`+`(`*`(3649016.897, `*`(Units:-Unit(Pa))))])

Updated ScientificConstants Package 

The non-derived physical constants in the ScientificConstants package now uses the most recent values of the scientific constants published by CODATA. 

> with(ScientificConstants)
[AddConstant, AddElement, AddProperty, Constant, Element, GetConstant, GetConstants, GetElement, GetElements, GetError, GetIsotopes, GetProperties, GetProperty, GetUnit, GetValue, HasConstant, HasElem...
[AddConstant, AddElement, AddProperty, Constant, Element, GetConstant, GetConstants, GetElement, GetElements, GetError, GetIsotopes, GetProperties, GetProperty, GetUnit, GetValue, HasConstant, HasElem...
> GetConstant(G)
Newtonian_constant_of_gravitation, symbol = G, value = 0.667408e-10, uncertainty = 0.31e-14, units = `/`(`*`(`^`(m, 3)), `*`(kg, `*`(`^`(s, 2))))