@@ -56,18 +56,46 @@ describe("MassBalanceError", () => {
5656 N2 : 3 ,
5757 } ;
5858
59+ const singlePhase = ( concentrations : Record < string , number > ) => [
60+ { kind : "co2-rich" as const , fraction : 1 , concentrations } ,
61+ ] ;
62+
5963 it ( "error is 0 when the numbers are the same" , ( ) => {
60- expect ( getMassBalanceError ( concs , concs ) . error ) . toBe ( 0 ) ;
64+ expect ( getMassBalanceError ( singlePhase ( concs ) , singlePhase ( concs ) ) . error ) . toBe ( 0 ) ;
6165 } ) ;
6266
6367 it ( "error is small when difference is small" , ( ) => {
6468 const final = Object . fromEntries ( Object . entries ( concs ) . map ( ( [ subst , amount ] ) => [ subst , amount + 1e-3 ] ) ) ;
6569
66- expect ( getMassBalanceError ( concs , final ) . error ) . toBeLessThan ( 0.01 ) ;
70+ expect ( getMassBalanceError ( singlePhase ( concs ) , singlePhase ( final ) ) . error ) . toBeLessThan ( 0.01 ) ;
6771 } ) ;
6872
6973 it ( "error is large when order of magnitude difference is large" , ( ) => {
70- expect ( getMassBalanceError ( concs , { ...concs , NO2 : concs . NO2 * 2 } ) . error ) . toBeGreaterThan ( 100.0 ) ;
71- expect ( getMassBalanceError ( concs , { ...concs , NO2 : concs . NO2 / 2 } ) . error ) . toBeGreaterThan ( 100.0 ) ;
74+ expect (
75+ getMassBalanceError ( singlePhase ( concs ) , singlePhase ( { ...concs , NO2 : concs . NO2 * 2 } ) ) . error
76+ ) . toBeGreaterThan ( 100.0 ) ;
77+ expect (
78+ getMassBalanceError ( singlePhase ( concs ) , singlePhase ( { ...concs , NO2 : concs . NO2 / 2 } ) ) . error
79+ ) . toBeGreaterThan ( 100.0 ) ;
80+ } ) ;
81+
82+ it ( "error is 0 when mass is conserved across multiple phases" , ( ) => {
83+ const phases = [
84+ { kind : "co2-rich" as const , fraction : 0.6 , concentrations : { H2O : 1 , NO2 : 2 , N2 : 3 } } ,
85+ { kind : "aqueous" as const , fraction : 0.4 , concentrations : { H2O : 1 , NO2 : 2 , N2 : 3 } } ,
86+ ] ;
87+ expect ( getMassBalanceError ( singlePhase ( concs ) , phases ) . error ) . toBeCloseTo ( 0 , 5 ) ;
88+ } ) ;
89+
90+ it ( "error is 0 when both init and final have multiple phases" , ( ) => {
91+ const initPhases = [
92+ { kind : "co2-rich" as const , fraction : 0.8 , concentrations : { H2O : 1 , NO2 : 2 } } ,
93+ { kind : "aqueous" as const , fraction : 0.2 , concentrations : { H2O : 1 , NO2 : 2 } } ,
94+ ] ;
95+ const finalPhases = [
96+ { kind : "co2-rich" as const , fraction : 0.5 , concentrations : { H2O : 1 , NO2 : 2 } } ,
97+ { kind : "aqueous" as const , fraction : 0.5 , concentrations : { H2O : 1 , NO2 : 2 } } ,
98+ ] ;
99+ expect ( getMassBalanceError ( initPhases , finalPhases ) . error ) . toBeCloseTo ( 0 , 5 ) ;
72100 } ) ;
73101} ) ;
0 commit comments