diff --git a/test/data/copt_covdepsurf_example.yaml b/test/data/copt_covdepsurf_example.yaml new file mode 100755 index 00000000000..c3e6f080f0e --- /dev/null +++ b/test/data/copt_covdepsurf_example.yaml @@ -0,0 +1,439 @@ +generator: cti2yaml +cantera-version: 2.6.0a2 +date: Wed, 04 Aug 2021 14:46:21 -0400 +input-files: [blondal_mech.cti] + +units: {length: cm, quantity: mol, activation-energy: kcal/mol} + +phases: +- name: gas + thermo: ideal-gas + elements: [C, O, N] + species: [O2, CO2, CO, N2] + transport: mixture-averaged + state: + T: 300.0 + P: 1.01325e+05 +- name: coverages_0 + thermo: coverage-dependent-surface + elements: [C, O, Pt] + species: [Pt, OC_Pt, CO2_Pt, C_Pt, O_Pt] + kinetics: surface + reactions: [reactions] + state: + T: 500.0 + P: 1.01325e+05 + coverages: {Pt: 0.5, OC_Pt: 0.5, CO2_Pt: 0.0, C_Pt: 0.0, O_Pt: 0.0} + site-density: 2.72e-09 +- name: coverages_1 + thermo: coverage-dependent-surface + elements: [C, O, Pt] + species: [Pt, OC_Pt, CO2_Pt, C_Pt, O_Pt] + kinetics: surface + reactions: [reactions] + state: + T: 625.0 + P: 1.01325e+05 + coverages: {Pt: 0.20, OC_Pt: 0.13, CO2_Pt: 0.21, C_Pt: 0.44, O_Pt: 0.02} + site-density: 2.72e-09 + reference-state-coverage: 0.22 +- name: coverages_2 + thermo: coverage-dependent-surface + elements: [C, O, Pt] + species: [Pt, OC_Pt, CO2_Pt, C_Pt, O_Pt] + kinetics: surface + reactions: [reactions] + state: + T: 427.0 + P: 1.01325e+05 + coverages: {Pt: 0.00, OC_Pt: 0.66, CO2_Pt: 0.12, C_Pt: 0.13, O_Pt: 0.09} + site-density: 2.72e-09 + reference-state-coverage: 0.5 +- name: coverages_3 + thermo: coverage-dependent-surface + elements: [C, O, Pt] + species: [Pt, OC_Pt, CO2_Pt, C_Pt, O_Pt] + kinetics: surface + reactions: [reactions] + state: + T: 711.0 + P: 1.01325e+05 + coverages: {Pt: 0.07, OC_Pt: 0.13, CO2_Pt: 0.55, C_Pt: 0.15, O_Pt: 0.10} + site-density: 2.72e-09 +- name: coverages_4 + thermo: coverage-dependent-surface + elements: [C, O, Pt] + species: [Pt, OC_Pt, CO2_Pt, C_Pt, O_Pt] + kinetics: surface + reactions: [reactions] + state: + T: 260.0 + P: 1.01325e+05 + coverages: {Pt: 0.11, OC_Pt: 0.07, CO2_Pt: 0.02, C_Pt: 0.68, O_Pt: 0.12} + site-density: 2.72e-09 + reference-state-coverage: 0.99 +- name: coverages_5 + thermo: coverage-dependent-surface + elements: [C, O, Pt] + species: [Pt, OC_Pt, CO2_Pt, C_Pt, O_Pt] + kinetics: surface + reactions: [reactions] + state: + T: 903.0 + P: 1.01325e+05 + coverages: {Pt: 0.02, OC_Pt: 0.05, CO2_Pt: 0.10, C_Pt: 0.11, O_Pt: 0.72} + site-density: 2.72e-09 + reference-state-coverage: 0.8 +- name: coverages_6 + thermo: coverage-dependent-surface + elements: [C, O, Pt] + species: [Pt, OC_Pt, CO2_Pt, C_Pt, O_Pt] + kinetics: surface + reactions: [reactions] + state: + T: 475.3 + P: 1.01325e+05 + coverages: {Pt: 0.19, OC_Pt: 0.25, CO2_Pt: 0.21, C_Pt: 0.19, O_Pt: 0.16} + site-density: 2.72e-09 + reference-state-coverage: 0.67 +- name: coverages_7 + thermo: coverage-dependent-surface + elements: [C, O, Pt] + species: [Pt, OC_Pt, CO2_Pt, C_Pt, O_Pt] + kinetics: surface + reactions: [reactions] + state: + T: 748.3 + P: 1.01325e+05 + coverages: {Pt: 0.19, OC_Pt: 0.13, CO2_Pt: 0.27, C_Pt: 0.29, O_Pt: 0.12} + site-density: 2.72e-09 + reference-state-coverage: 0.0625 +- name: coverages_8 + thermo: coverage-dependent-surface + elements: [C, O, Pt] + species: [Pt, OC_Pt, CO2_Pt, C_Pt, O_Pt] + kinetics: surface + reactions: [reactions] + state: + T: 100.1 + P: 1.01325e+05 + coverages: {Pt: 0.27, OC_Pt: 0.18, CO2_Pt: 0.20, C_Pt: 0.32, O_Pt: 0.03} + site-density: 2.72e-09 + reference-state-coverage: 0.1 +- name: coverages_9 + thermo: coverage-dependent-surface + elements: [C, O, Pt] + species: [Pt, OC_Pt, CO2_Pt, C_Pt, O_Pt] + kinetics: surface + reactions: [reactions] + state: + T: 372.1 + P: 1.01325e+05 + coverages: {Pt: 0.03, OC_Pt: 0.01, CO2_Pt: 0.32, C_Pt: 0.30, O_Pt: 0.34} + site-density: 2.72e-09 + reference-state-coverage: 0.4 +- name: ideal_0 + thermo: ideal-surface + elements: [C, O, Pt] + species: [Pt, OC_Pt, CO2_Pt, C_Pt, O_Pt] + kinetics: surface + reactions: [reactions] + state: + T: 500.0 + P: 1.01325e+05 + coverages: {Pt: 0.5, OC_Pt: 0.5, CO2_Pt: 0.0, C_Pt: 0.0, O_Pt: 0.0} + site-density: 2.72e-09 +- name: ideal_1 + thermo: ideal-surface + elements: [C, O, Pt] + species: [Pt, OC_Pt, CO2_Pt, C_Pt, O_Pt] + kinetics: surface + reactions: [reactions] + state: + T: 625.0 + P: 1.01325e+05 + coverages: {Pt: 0.20, OC_Pt: 0.13, CO2_Pt: 0.21, C_Pt: 0.44, O_Pt: 0.02} + site-density: 2.72e-09 + reference-state-coverage: 0.22 +- name: ideal_2 + thermo: ideal-surface + elements: [C, O, Pt] + species: [Pt, OC_Pt, CO2_Pt, C_Pt, O_Pt] + kinetics: surface + reactions: [reactions] + state: + T: 427.0 + P: 1.01325e+05 + coverages: {Pt: 0.00, OC_Pt: 0.66, CO2_Pt: 0.12, C_Pt: 0.13, O_Pt: 0.09} + site-density: 2.72e-09 + reference-state-coverage: 0.5 +- name: ideal_3 + thermo: ideal-surface + elements: [C, O, Pt] + species: [Pt, OC_Pt, CO2_Pt, C_Pt, O_Pt] + kinetics: surface + reactions: [reactions] + state: + T: 711.0 + P: 1.01325e+05 + coverages: {Pt: 0.07, OC_Pt: 0.13, CO2_Pt: 0.55, C_Pt: 0.15, O_Pt: 0.10} + site-density: 2.72e-09 +- name: ideal_4 + thermo: ideal-surface + elements: [C, O, Pt] + species: [Pt, OC_Pt, CO2_Pt, C_Pt, O_Pt] + kinetics: surface + reactions: [reactions] + state: + T: 260.0 + P: 1.01325e+05 + coverages: {Pt: 0.11, OC_Pt: 0.07, CO2_Pt: 0.02, C_Pt: 0.68, O_Pt: 0.12} + site-density: 2.72e-09 + reference-state-coverage: 0.99 +- name: ideal_5 + thermo: ideal-surface + elements: [C, O, Pt] + species: [Pt, OC_Pt, CO2_Pt, C_Pt, O_Pt] + kinetics: surface + reactions: [reactions] + state: + T: 903.0 + P: 1.01325e+05 + coverages: {Pt: 0.02, OC_Pt: 0.05, CO2_Pt: 0.10, C_Pt: 0.11, O_Pt: 0.72} + site-density: 2.72e-09 + reference-state-coverage: 0.8 +- name: ideal_6 + thermo: ideal-surface + elements: [C, O, Pt] + species: [Pt, OC_Pt, CO2_Pt, C_Pt, O_Pt] + kinetics: surface + reactions: [reactions] + state: + T: 475.3 + P: 1.01325e+05 + coverages: {Pt: 0.19, OC_Pt: 0.25, CO2_Pt: 0.21, C_Pt: 0.19, O_Pt: 0.16} + site-density: 2.72e-09 + reference-state-coverage: 0.67 +- name: ideal_7 + thermo: ideal-surface + elements: [C, O, Pt] + species: [Pt, OC_Pt, CO2_Pt, C_Pt, O_Pt] + kinetics: surface + reactions: [reactions] + state: + T: 748.3 + P: 1.01325e+05 + coverages: {Pt: 0.19, OC_Pt: 0.13, CO2_Pt: 0.27, C_Pt: 0.29, O_Pt: 0.12} + site-density: 2.72e-09 + reference-state-coverage: 0.0625 +- name: ideal_8 + thermo: ideal-surface + elements: [C, O, Pt] + species: [Pt, OC_Pt, CO2_Pt, C_Pt, O_Pt] + kinetics: surface + reactions: [reactions] + state: + T: 100.1 + P: 1.01325e+05 + coverages: {Pt: 0.27, OC_Pt: 0.18, CO2_Pt: 0.20, C_Pt: 0.32, O_Pt: 0.03} + site-density: 2.72e-09 + reference-state-coverage: 0.1 +- name: ideal_9 + thermo: ideal-surface + elements: [C, O, Pt] + species: [Pt, OC_Pt, CO2_Pt, C_Pt, O_Pt] + kinetics: surface + reactions: [reactions] + state: + T: 372.1 + P: 1.01325e+05 + coverages: {Pt: 0.03, OC_Pt: 0.01, CO2_Pt: 0.32, C_Pt: 0.30, O_Pt: 0.34} + site-density: 2.72e-09 + reference-state-coverage: 0.4 + +species: +- name: N2 + composition: {N: 2} + thermo: + model: NASA7 + temperature-ranges: [200.0, 1000.0, 6000.0] + data: + - [3.53101, -1.23661e-04, -5.02999e-07, 2.43531e-09, -1.40881e-12, -1046.98, + 2.96747] + - [2.95258, 1.3969e-03, -4.92632e-07, 7.8601e-11, -4.60755e-15, -923.949, + 5.87189] + transport: + model: gas + geometry: linear + diameter: 3.621 + well-depth: 97.53 + polarizability: 1.76 + rotational-relaxation: 4.0 +- name: O2 + composition: {O: 2} + thermo: + model: NASA7 + temperature-ranges: [100.0, 1074.55, 5000.0] + data: + - [3.53732243, -1.21571647e-03, 5.31620254e-06, -4.89446434e-09, 1.45846258e-12, + -1038.58849, 4.68368183] + - [3.15382081, 1.67804371e-03, -7.69974236e-07, 1.51275462e-10, -1.08782414e-14, + -1040.81728, 6.16755832] + transport: + model: gas + geometry: linear + diameter: 3.467 + well-depth: 106.7 +- name: CO2 + composition: {C: 1, O: 2} + thermo: + model: NASA7 + temperature-ranges: [100.0, 978.22, 5000.0] + data: + - [3.28084453, 2.5018564e-03, 8.08192142e-06, -1.20510369e-08, 4.66542684e-12, + -4.84008303e+04, 6.00081438] + - [4.67427416, 2.60962879e-03, -9.85683184e-07, 1.95712276e-10, -1.49834931e-14, + -4.89512168e+04, -2.11077406] + transport: + model: gas + geometry: linear + diameter: 3.941 + well-depth: 195.201 +- name: CO + composition: {C: 1, O: 1} + thermo: + model: NASA7 + temperature-ranges: [100.0, 1571.65, 5000.0] + data: + - [3.5683795, -8.52120978e-04, 2.4891658e-06, -1.5632992e-09, 3.13591992e-13, + -1.42842549e+04, 3.57912359] + - [2.91308, 1.64655944e-03, -6.88605521e-07, 1.21035372e-10, -7.840028e-15, + -1.41808916e+04, 6.71038] + transport: + model: gas + geometry: linear + diameter: 3.69 + well-depth: 91.7 + polarizability: 1.76 + rotational-relaxation: 4.0 +- name: Pt + composition: {Pt: 1} + thermo: + model: NASA7 + temperature-ranges: [100.0, 1554.81, 5000.0] + data: + - [7.10129478e-03, -4.25609798e-05, 8.98507278e-08, -7.80169595e-11, + 2.32458299e-14, -0.876096726, -0.0311207473] + - [0.16030291, -2.52239722e-04, 1.14183461e-07, -1.21476333e-11, 3.85825979e-16, + -70.8116648, -0.909545048] +- name: OC_Pt + composition: {Pt: 1, C: 1, O: 1} + thermo: + model: NASA7 + temperature-ranges: [100.0, 891.33, 5000.0] + data: + - [-1.38214121, 0.0375305409, -8.29758476e-05, 8.09701555e-08, -2.85470829e-11, + -3.45176032e+04, 4.3544767] + - [1.3809066, 8.0571901e-03, -4.6430896e-06, 8.91170699e-10, -5.90048361e-14, + -3.43319289e+04, -4.85318015] + coverage-dependencies: + OC_Pt: {model: Piecewise-Linear, + enthalpy-low: 0.5, enthalpy-high: 1.0, + enthalpy-change: 0.4, enthalpy-unit: eV, + entropy-low: 0.1, entropy-high: -0.2, + entropy-change: 0.4, entropy-unit: meV/K, + heat-capacity-a: 0.020, heat-capacity-b: -0.156, + heat-capacity-unit: meV/K} + CO2_Pt: {model: Linear, + enthalpy: 0.48, enthalpy-unit: eV, + entropy: -0.031, entropy-unit: eV/K} + C_Pt: {model: Polynomial, + enthalpy-2nd-order: 3.86e4, enthalpy-unit: J/mol, + entropy-3rd-order: -1.26e4, entropy-unit: J/mol/K} + O_Pt: {model: Interpolative, + enthalpy-coverages: [0.0, 0.2, 0.5, 0.7, 0.9, 1.0], + enthalpies: [0.0, 0.5, 1.2, 2.7, 3.5, 4.0], + enthalpy-unit: kcal/mol, + entropy-coverages: [0.0, 0.5, 1.0], + entropies: [0.0, -0.7, -2.0], + entropy-unit: kcal/mol/K} +- name: CO2_Pt + composition: {Pt: 1, C: 1, O: 2} + thermo: + model: NASA7 + temperature-ranges: [100.0, 953.59, 5000.0] + data: + - [3.09268931, 5.2927875e-03, 8.99447254e-06, -1.67129326e-08, 7.04909721e-12, + -4.52128353e+04, -5.10056355] + - [5.99803259, 2.27485222e-03, -6.81092723e-07, 1.34432446e-10, -1.11509701e-14, + -4.61838262e+04, -21.1649844] + coverage-dependencies: + OC_Pt: {model: Piecewise-Linear, + enthalpy-low: 0.1, enthalpy-high: 0.3, + enthalpy-change: 0.5, enthalpy-unit: eV, + entropy-low: -0.05, entropy-high: -0.1, + entropy-change: 0.5, entropy-unit: eV/K} + CO2_Pt: {model: Linear, + enthalpy: 0.73, enthalpy-unit: eV, + entropy: -0.44, entropy-unit: eV/K} +- name: C_Pt + composition: {Pt: 1, C: 1} + thermo: + model: NASA7 + temperature-ranges: [100.0, 1401.13, 5000.0] + data: + - [-0.604856973, 0.0110908327, -1.34369594e-05, 7.18238215e-09, -1.40685044e-12, + 6244.79345, 1.48480241] + - [3.08076078, -6.87465602e-04, 5.17589597e-07, -9.73022048e-11, 6.24243898e-15, + 5335.31839, -17.0991414] + coverage-dependencies: + C_Pt: {model: Interpolative, + enthalpy-coverages: [0.0, 0.18, 0.67, 1.0], + enthalpies: [0.0, 0.12, 0.70, 0.82], + enthalpy-unit: eV, + entropy-coverages: [0.0, 0.11, 0.33, 0.77, 1.0], + entropies: [0.0, 0.05, -0.12, -0.40, -0.55], + entropy-unit: eV/K, + heat-capacity-a: 0.07, heat-capacity-b: -0.21, + heat-capacity-unit: meV/K} + O_Pt: {model: Linear, + enthalpy: 0.12, enthalpy-unit: eV, + entropy: 0.09, entropy-unit: eV/K} +- name: O_Pt + composition: {Pt: 1, O: 1} + thermo: + model: NASA7 + temperature-ranges: [100.0, 888.26, 5000.0] + data: + - [-0.759013067, 0.0189868498, -3.82473745e-05, 3.43558395e-08, -1.13974372e-11, + -1.72389494e+04, 1.76017396] + - [1.89893619, 2.03295425e-03, -1.19976574e-06, 2.32680659e-10, -1.53508282e-14, + -1.75144954e+04, -9.6410408] + coverage-dependencies: + O_Pt: {model: Polynomial, + enthalpy-1st-order: 0.14, + enthalpy-2nd-order: -1.74, + enthalpy-4th-order: 2.11, + enthalpy-unit: eV, + entropy-1st-order: 0.07, + entropy-3rd-order: -0.0145, + entropy-4th-order: 0.023, + entropy-unit: eV/K} + +reactions: +- equation: Pt + Pt + O2 <=> O_Pt + O_Pt # Reaction 202 + id: surface1-1 + rate-constant: {A: 1.89e+21, b: -0.5, Ea: 0.0} +- equation: C_Pt + O_Pt <=> OC_Pt + Pt # Reaction 216 + id: surface1-15 + rate-constant: {A: 3.7e+19, b: 0.0, Ea: 0.0} +- equation: CO + Pt <=> OC_Pt # Reaction 217 + sticking-coefficient: {A: 0.84, b: 0.0, Ea: 0.0} + id: surface1-16 +- equation: OC_Pt + O_Pt <=> CO2_Pt + Pt # Reaction 223 + id: surface1-22 + rate-constant: {A: 3.7e+21, b: 0.0, Ea: 28.107} +- equation: CO2 + Pt <=> CO2_Pt # Reaction 225 + sticking-coefficient: {A: 5.0e-03, b: 0.0, Ea: 0.0} + id: surface1-24 + diff --git a/test/thermo/CoverageDependentSurfPhase_Test.cpp b/test/thermo/CoverageDependentSurfPhase_Test.cpp new file mode 100644 index 00000000000..c75e3bf7fc0 --- /dev/null +++ b/test/thermo/CoverageDependentSurfPhase_Test.cpp @@ -0,0 +1,512 @@ +#include "gtest/gtest.h" +#include "cantera/thermo/CoverageDependentSurfPhase.h" +#include "cantera/thermo/ThermoFactory.h" + + +namespace Cantera +{ + +class CoverageDependentSurfPhase_Test: public testing::Test +{ +public: + CoverageDependentSurfPhase_Test() { + test_phase.reset(newPhase("copt_covdepsurf_example.yaml", "coverages_0")); + } + std::unique_ptr test_phase; + CoverageDependentSurfPhase* covdepsurf; +}; + +TEST_F(CoverageDependentSurfPhase_Test, construct_from_file) +{ + CoverageDependentSurfPhase* coveragedependentsurf_phase = dynamic_cast(test_phase.get()); + EXPECT_TRUE(coveragedependentsurf_phase != NULL); +} + +TEST_F(CoverageDependentSurfPhase_Test, reference_enthalpies_RT) +{ + const double expected_result[10] = { + 4.895991737500073e-05, + 4.617646334628971e-05, + 5.963833377856196e-05, + 5.692092800682202e-05, + -9.815993386192746e-05, + 6.644423752958034e-05, + 5.2492790438840376e-05, + 6.225436283744746e-05, + -0.0035000916056617164, + 5.94838246127799e-05 + }; + + std::vector names = {"coverages_0", "coverages_1", + "coverages_2", "coverages_3", + "coverages_4", "coverages_5", + "coverages_6", "coverages_7", + "coverages_8", "coverages_9"}; + vector_fp enthalpies_RT_ref(5); + + for (size_t i = 0; i < 10; i++) { + test_phase.reset(newPhase("copt_covdepsurf_example.yaml", names[i])); + test_phase->getEnthalpy_RT_ref(&enthalpies_RT_ref[0]); + EXPECT_NEAR(enthalpies_RT_ref[0], expected_result[i], 1.e-6); + } +} + +TEST_F(CoverageDependentSurfPhase_Test, reference_entropies_R) +{ + const double expected_result[10] = { + 17.30376125156932, + 18.782927044715542, + 16.336043707069322, + 19.692734172570507, + 13.687172677897806, + 21.46362710555691, + 16.985994108560934, + 20.063327006288937, + 9.714347806292915, + 15.544459107650459 + }; + + std::vector names = {"coverages_0", "coverages_1", + "coverages_2", "coverages_3", + "coverages_4", "coverages_5", + "coverages_6", "coverages_7", + "coverages_8", "coverages_9"}; + vector_fp entropies_R_ref(5); + + for (size_t i = 0; i < 10; i++) { + test_phase.reset(newPhase("copt_covdepsurf_example.yaml", names[i])); + test_phase->getEntropy_R_ref(&entropies_R_ref[0]); + EXPECT_NEAR(entropies_R_ref[2], expected_result[i], 1.e-6); + } +} + +TEST_F(CoverageDependentSurfPhase_Test, reference_cp_R) +{ + const double expected_result[10] = { + 2.3911891432499996, + 2.6169441249003906, + 2.193392723419327, + 2.710068009615135, + 1.4902296533617059, + 2.80663483290828, + 2.3304807267205296, + 2.7387444952834965, + 0.37775961493433574, + 2.0046505063190665 + }; + + std::vector names = {"coverages_0", "coverages_1", + "coverages_2", "coverages_3", + "coverages_4", "coverages_5", + "coverages_6", "coverages_7", + "coverages_8", "coverages_9"}; + vector_fp cps_R_ref(5); + + for (size_t i = 0; i < 10; i++) { + test_phase.reset(newPhase("copt_covdepsurf_example.yaml", names[i])); + test_phase->getCp_R_ref(&cps_R_ref[0]); + EXPECT_NEAR(cps_R_ref[3], expected_result[i], 1.e-6); + } +} + +TEST_F(CoverageDependentSurfPhase_Test, reference_gibbs_RT) +{ + const double expected_result[10] = { + -35.75544525672188, + -29.27051136018905, + -41.389632097578534, + -26.191806426905902, + -66.68729427601727, + -21.54814904209595, + -37.46076589723343, + -25.089092853962732, + -172.1295537915689, + -47.14174199946188 + }; + + std::vector names = {"coverages_0", "coverages_1", + "coverages_2", "coverages_3", + "coverages_4", "coverages_5", + "coverages_6", "coverages_7", + "coverages_8", "coverages_9"}; + vector_fp gibbs_RT_ref(5); + + for (size_t i = 0; i < 10; i++) { + test_phase.reset(newPhase("copt_covdepsurf_example.yaml", names[i])); + test_phase->getGibbs_RT_ref(&gibbs_RT_ref[0]); + EXPECT_NEAR(gibbs_RT_ref[4], expected_result[i], 1.e-6); + } +} + +TEST_F(CoverageDependentSurfPhase_Test, standard_enthalpies_RT) +{ + const double expected_result[10] = { + 4.895991737500073e-05, + 4.617646334628971e-05, + 5.963833377856196e-05, + 5.692092800682202e-05, + -9.815993386192746e-05, + 6.644423752958034e-05, + 5.2492790438840376e-05, + 6.225436283744746e-05, + -0.0035000916056617164, + 5.94838246127799e-05 + }; + + std::vector names = {"coverages_0", "coverages_1", + "coverages_2", "coverages_3", + "coverages_4", "coverages_5", + "coverages_6", "coverages_7", + "coverages_8", "coverages_9"}; + vector_fp enthalpies_RT(5); + + for (size_t i = 0; i < 10; i++) { + test_phase.reset(newPhase("copt_covdepsurf_example.yaml", names[i])); + test_phase->getEnthalpy_RT(&enthalpies_RT[0]); + EXPECT_NEAR(enthalpies_RT[0], expected_result[i], 1.e-6); + } +} + +TEST_F(CoverageDependentSurfPhase_Test, standard_entropies_R) +{ + const double expected_result[10] = { + 7.262785047892177, + -211.88704374580803, + -104.49781910237925, + -264.41047258705385, + -564.1004252619438, + -668.1159683605337, + -191.9493546909492, + -212.12619995755966, + -143.45731583540848, + -390.8228284931619 + }; + + std::vector names = {"coverages_0", "coverages_1", + "coverages_2", "coverages_3", + "coverages_4", "coverages_5", + "coverages_6", "coverages_7", + "coverages_8", "coverages_9"}; + vector_fp entropies_R(5); + + for (size_t i = 0; i < 10; i++) { + test_phase.reset(newPhase("copt_covdepsurf_example.yaml", names[i])); + test_phase->getEntropy_R(&entropies_R[0]); + EXPECT_NEAR(entropies_R[1], expected_result[i], 1.e-6); + } +} + +TEST_F(CoverageDependentSurfPhase_Test, standard_cp_R) +{ + const double expected_result[10] = { + 2.3911891432499996, + 3.1575801771450513, + 2.2353566973964605, + 2.7752564954964587, + 2.452060193173945, + 2.8440413820654813, + 2.42326223769133, + 2.9858976609594317, + 0.5113627141915665, + 2.218066003239782 + }; + + std::vector names = {"coverages_0", "coverages_1", + "coverages_2", "coverages_3", + "coverages_4", "coverages_5", + "coverages_6", "coverages_7", + "coverages_8", "coverages_9"}; + vector_fp cps_R(5); + + for (size_t i = 0; i < 10; i++) { + test_phase.reset(newPhase("copt_covdepsurf_example.yaml", names[i])); + test_phase->getCp_R(&cps_R[0]); + EXPECT_NEAR(cps_R[3], expected_result[i], 1.e-6); + } +} + +TEST_F(CoverageDependentSurfPhase_Test, standard_gibbs_RT) +{ + const double expected_result[10] = { + 11.8756216200221, + 2202.4396179996957, + -477.3453796516724, + -316.51179756543485, + 3907.895845540286, + -1324.569049068033, + -13.293752588541661, + 922.4725337308008, + 1369.7551786229228, + 795.2766107464173 + }; + + std::vector names = {"coverages_0", "coverages_1", + "coverages_2", "coverages_3", + "coverages_4", "coverages_5", + "coverages_6", "coverages_7", + "coverages_8", "coverages_9"}; + vector_fp gibbs_RT(5); + + for (size_t i = 0; i < 10; i++) { + test_phase.reset(newPhase("copt_covdepsurf_example.yaml", names[i])); + test_phase->getGibbs_RT(&gibbs_RT[0]); + EXPECT_NEAR(gibbs_RT[3], expected_result[i], 1.e-6); + } +} + +TEST_F(CoverageDependentSurfPhase_Test, standard_gibbs) +{ + const double expected_result[10] = { + -148643656.49121934, + -228451988.4293846, + -403796393.1146004, + -634513292.1906644, + -355109634.2098712, + -4640855820.12355, + -660054096.9197942, + -744616318.8616358, + -161367473.42965755, + -1000153036.6544077 + }; + + std::vector names = {"coverages_0", "coverages_1", + "coverages_2", "coverages_3", + "coverages_4", "coverages_5", + "coverages_6", "coverages_7", + "coverages_8", "coverages_9"}; + vector_fp gibbs(5); + + for (size_t i = 0; i < 10; i++) { + test_phase.reset(newPhase("copt_covdepsurf_example.yaml", names[i])); + test_phase->getPureGibbs(&gibbs[0]); + EXPECT_NEAR(gibbs[4], expected_result[i], 1.e-6); + } +} + +TEST_F(CoverageDependentSurfPhase_Test, standard_chempotentials) +{ + const double expected_result[10] = { + -274870452.00677145, + 856519725.4301237, + 145886101.04112163, + 1332157691.3398027, + 960092570.6206956, + 4779252095.107842, + 508906879.58705205, + 1080088611.4436927, + -145155906.70495453, + 952738760.7658446 + }; + + std::vector names = {"coverages_0", "coverages_1", + "coverages_2", "coverages_3", + "coverages_4", "coverages_5", + "coverages_6", "coverages_7", + "coverages_8", "coverages_9"}; + vector_fp chempotentials_st(5); + + for (size_t i = 0; i < 10; i++) { + test_phase.reset(newPhase("copt_covdepsurf_example.yaml", names[i])); + test_phase->getStandardChemPotentials(&chempotentials_st[0]); + EXPECT_NEAR(chempotentials_st[1], expected_result[i], 1.e-6); + } +} + +TEST_F(CoverageDependentSurfPhase_Test, partial_molar_enthalpies) +{ + const double expected_result[10] = { + -244677374.6145806, + -244559589.87957713, + -225109949.88732946, + -230926742.67340738, + -259357323.04774666, + -236935699.79515216, + -249650880.85754883, + -239699592.35303646, + -264552232.7353466, + -256393416.2056975 + }; + + std::vector names = {"coverages_0", "coverages_1", + "coverages_2", "coverages_3", + "coverages_4", "coverages_5", + "coverages_6", "coverages_7", + "coverages_8", "coverages_9"}; + vector_fp partialmolar_enthalpies(5); + + for (size_t i = 0; i < 10; i++) { + test_phase.reset(newPhase("copt_covdepsurf_example.yaml", names[i])); + test_phase->getPartialMolarEnthalpies(&partialmolar_enthalpies[0]); + EXPECT_NEAR(partialmolar_enthalpies[1], expected_result[i], 1.e-6); + } +} + +TEST_F(CoverageDependentSurfPhase_Test, partial_molar_entropies) +{ + const double expected_result[10] = { + 66149.30110602578, + -1744763.5646839596, + -865388.4229791872, + -2181467.65036173, + -4668081.580555751, + -5530117.33952245, + -1584429.4415132466, + -1746752.0200664676, + -1178512.8623860686, + -3211192.2824656786 + }; + + std::vector names = {"coverages_0", "coverages_1", + "coverages_2", "coverages_3", + "coverages_4", "coverages_5", + "coverages_6", "coverages_7", + "coverages_8", "coverages_9"}; + vector_fp partialmolar_entropies(5); + + for (size_t i = 0; i < 10; i++) { + test_phase.reset(newPhase("copt_covdepsurf_example.yaml", names[i])); + test_phase->getPartialMolarEntropies(&partialmolar_entropies[0]); + EXPECT_NEAR(partialmolar_entropies[1], expected_result[i], 1.e-6); + } +} + +TEST_F(CoverageDependentSurfPhase_Test, partial_molar_cp) +{ + const double expected_result[10] = { + 52706.65227577072, + 57448.35040870828, + 49270.05260539342, + 59840.103776506076, + 40036.68657757771, + 63083.2060679071, + 51595.35078424445, + 60671.1013954003, + 30734.96527336805, + 46407.802588887964 + }; + + std::vector names = {"coverages_0", "coverages_1", + "coverages_2", "coverages_3", + "coverages_4", "coverages_5", + "coverages_6", "coverages_7", + "coverages_8", "coverages_9"}; + vector_fp partialmolar_cps(5); + + for (size_t i = 0; i < 10; i++) { + test_phase.reset(newPhase("copt_covdepsurf_example.yaml", names[i])); + test_phase->getPartialMolarCp(&partialmolar_cps[0]); + EXPECT_NEAR(partialmolar_cps[2], expected_result[i], 1.e-6); + } +} + +TEST_F(CoverageDependentSurfPhase_Test, chemical_potentials) +{ + const double expected_result[10] = { + -2822343946.108881, + 11440797412.804848, + -1701950970.6310093, + -1882300719.0459917, + 8447100310.246291, + -9961383229.998562, + -59098087.381852254, + 5731657082.504713, + 1139068374.937362, + 2456711091.0340676 + }; + + std::vector names = {"coverages_0", "coverages_1", + "coverages_2", "coverages_3", + "coverages_4", "coverages_5", + "coverages_6", "coverages_7", + "coverages_8", "coverages_9"}; + vector_fp chempotentials(5); + + for (size_t i = 0; i < 10; i++) { + test_phase.reset(newPhase("copt_covdepsurf_example.yaml", names[i])); + test_phase->getChemPotentials(&chempotentials[0]); + EXPECT_NEAR(chempotentials[3], expected_result[i], 1.e-6); + } +} + +TEST_F(CoverageDependentSurfPhase_Test, enthalpy_mole) +{ + const double expected_result[10] = { + -122338585.53843959, + -59309366.65989761, + -193558162.68747127, + -199642681.1436115, + 40537434.57875116, + -142791039.41545668, + -142518074.5167915, + -108002792.86461554, + -97942472.24175003, + -137479276.4811465 + }; + + std::vector names = {"coverages_0", "coverages_1", + "coverages_2", "coverages_3", + "coverages_4", "coverages_5", + "coverages_6", "coverages_7", + "coverages_8", "coverages_9"}; + + for (size_t i = 0; i < 10; i++) { + test_phase.reset(newPhase("copt_covdepsurf_example.yaml", names[i])); + EXPECT_NEAR(test_phase->enthalpy_mole(), expected_result[i], 1.e-6); + } +} + +TEST_F(CoverageDependentSurfPhase_Test, entropy_mole) +{ + const double expected_result[10] = { + 35956.532917352175, + -10176083.957783429, + -1043623.7221215261, + -12891288.513604177, + -22018125.06619569, + 4101773.9070109557, + -2257818.910081016, + -5537608.314706989, + -5452194.621248438, + -5486169.579651305 + }; + + std::vector names = {"coverages_0", "coverages_1", + "coverages_2", "coverages_3", + "coverages_4", "coverages_5", + "coverages_6", "coverages_7", + "coverages_8", "coverages_9"}; + + for (size_t i = 0; i < 10; i++) { + test_phase.reset(newPhase("copt_covdepsurf_example.yaml", names[i])); + EXPECT_NEAR(test_phase->entropy_mole(), expected_result[i], 1.e-6); + } +} + +TEST_F(CoverageDependentSurfPhase_Test, cp_mole) +{ + const double expected_result[10] = { + 20304.914543820392, + 29562.94897980166, + 36080.77976856744, + 44311.85551592095, + 19165.080781805933, + 28655.920516293252, + 28534.196335297413, + 32061.519786347304, + 10104.170506513487, + 28017.603867332116 + }; + + std::vector names = {"coverages_0", "coverages_1", + "coverages_2", "coverages_3", + "coverages_4", "coverages_5", + "coverages_6", "coverages_7", + "coverages_8", "coverages_9"}; + + for (size_t i = 0; i < 10; i++) { + test_phase.reset(newPhase("copt_covdepsurf_example.yaml", names[i])); + EXPECT_NEAR(test_phase->cp_mole(), expected_result[i], 1.e-6); + } +} + +} \ No newline at end of file