From 16382b0145d49d05f654d7029a9b6683e3b6baaa Mon Sep 17 00:00:00 2001 From: titusquah <46580668+titusquah@users.noreply.github.com> Date: Fri, 31 Jul 2020 10:05:35 -0600 Subject: [PATCH] Changed iterative fit to only fit to multicomponent data. --- .idea/workspace.xml | 97 ++- ...ormiga_or_5_oa_PC88A_HCL_NdPrCeLaDySmY.csv | 209 +++++ .../xmls/PC88A_HCL_NdPrCeLaDySmY_w_pitzer.xml | 58 +- .../test_PC88A_HCL_NdPrCeLaDySmY_w_pitzer.xml | 734 ++++++++++++++++++ docs/Examples/iterative_fitter.py | 9 +- .../Examples/iterative_fitter_eval_grapher.py | 218 ++++-- docs/Examples/iterative_fitter_monitor.py | 4 +- docs/Examples/outputs/best_obj.png | Bin 0 -> 18967 bytes docs/Examples/outputs/beta0.png | Bin 0 -> 32169 bytes docs/Examples/outputs/beta1.png | Bin 0 -> 27361 bytes docs/Examples/outputs/intercept.png | Bin 0 -> 43910 bytes .../outputs/iterative_fitter_output4.csv | 13 + .../outputs/iterative_fitter_w_mse_output.csv | 10 + .../multi_only_iterative_fitter_output.csv | 27 + docs/Examples/outputs/slope.png | Bin 0 -> 11574 bytes docs/Examples/outputs/temp.xml | 58 +- docs/Examples/outputs/temp1.xml | 716 +++++++++++++++++ docs/Examples/test_eval.py | 330 ++++++++ llepe/llepe.py | 25 +- llepe/optimizers.py | 22 +- 20 files changed, 2347 insertions(+), 183 deletions(-) create mode 100644 data/csvs/no_formiga_or_5_oa_PC88A_HCL_NdPrCeLaDySmY.csv create mode 100644 data/xmls/test_PC88A_HCL_NdPrCeLaDySmY_w_pitzer.xml create mode 100644 docs/Examples/outputs/best_obj.png create mode 100644 docs/Examples/outputs/beta0.png create mode 100644 docs/Examples/outputs/beta1.png create mode 100644 docs/Examples/outputs/intercept.png create mode 100644 docs/Examples/outputs/iterative_fitter_output4.csv create mode 100644 docs/Examples/outputs/iterative_fitter_w_mse_output.csv create mode 100644 docs/Examples/outputs/multi_only_iterative_fitter_output.csv create mode 100644 docs/Examples/outputs/slope.png create mode 100644 docs/Examples/outputs/temp1.xml create mode 100644 docs/Examples/test_eval.py diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 12335f7..79caa72 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -2,10 +2,18 @@ - + + + + - - + + + + + + + - + - + - + - + - - + + - + @@ -442,7 +459,14 @@ @@ -482,7 +506,8 @@ - @@ -506,10 +531,10 @@ - + - + @@ -525,34 +550,34 @@ - + - + - + - + - + - + - + - + @@ -594,11 +619,11 @@ - - + + - - + + diff --git a/data/csvs/no_formiga_or_5_oa_PC88A_HCL_NdPrCeLaDySmY.csv b/data/csvs/no_formiga_or_5_oa_PC88A_HCL_NdPrCeLaDySmY.csv new file mode 100644 index 0000000..aec4ea0 --- /dev/null +++ b/data/csvs/no_formiga_or_5_oa_PC88A_HCL_NdPrCeLaDySmY.csv @@ -0,0 +1,209 @@ +label,Feed H+[M],Feed H+[M].1,PC88A[M],PC88A[M].1,Feed Nd[M],Xaq Nd,D Nd,Feed Pr[M],Xaq Pr,D Pr,Feed Ce[M],Xaq Ce,D Ce,Feed La[M],Xaq La,D La,Feed Dy[M],Xaq Dy,D Dy,Feed Sm[M],Xaq Sm,D Sm,Feed Y[M],Xaq Y,D Y +Lyon (2016),0.02,0.02,1,1,0.048530227,0.029263727,0.658374793,0.04967791,0.035072604,0.416430595,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lyon (2016),0.05,0.05,1,1,0.048530227,0.032127011,0.510574018,0.04967791,0.037506822,0.324503311,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lyon (2016),0.1,0.1,1,1,0.048530227,0.039018303,0.243781095,0.04967791,0.043070748,0.153402537,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lyon (2016),0.3,0.3,1,1,0.048530227,0.046443428,0.044932079,0.04967791,0.048535318,0.023541453,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Banda (2014),1.00E-05,1.00E-05,0.1,0.1,0.022739878,0.017097653,0.33,0.008303308,0.006642646,0.25,0,0,0,0.054425491,0.050393973,0.08,0,0,0,0,0,0,0,0,0 +Banda (2014),1.00E-05,1.00E-05,0.3,0.3,0.022739878,0.013298174,0.71,0.008303308,0.005462702,0.52,0,0,0,0.054425491,0.048594188,0.12,0,0,0,0,0,0,0,0,0 +Banda (2014),1.00E-05,1.00E-05,0.5,0.5,0.022739878,0.010932634,1.08,0.008303308,0.004537327,0.83,0,0,0,0.054425491,0.048164151,0.13,0,0,0,0,0,0,0,0,0 +Banda (2014),1.00E-05,1.00E-05,0.7,0.7,0.022739878,0.009396644,1.42,0.008303308,0.003972875,1.09,0,0,0,0.054425491,0.047326514,0.15,0,0,0,0,0,0,0,0,0 +Banda (2014),1.00E-05,1.00E-05,0.9,0.9,0.022739878,0.008209342,1.77,0.008303308,0.002997584,1.77,0,0,0,0.054425491,0.045735706,0.19,0,0,0,0,0,0,0,0,0 +Liu (2014),1.00E-05,1.00E-05,0.1,0.1,0.022739878,0.018928042,0.201385664,0.008303308,0.007354823,0.128960943,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Liu (2014),1.00E-05,1.00E-05,0.3,0.3,0.022739878,0.014333115,0.586527247,0.008303308,0.005999476,0.384005473,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Liu (2014),1.00E-05,1.00E-05,0.5,0.5,0.022739878,0.010952454,1.076235839,0.008303308,0.004805359,0.727926764,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Liu (2014),1.00E-05,1.00E-05,0.7,0.7,0.022739878,0.008786058,1.588177405,0.008303308,0.003974007,1.089404412,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Liu (2014),1.00E-05,1.00E-05,0.9,0.9,0.022739878,0.00700602,2.245762712,0.008303308,0.00322327,1.576050934,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Kim (2012),0.01023293,0.01023293,0.1,0.1,0.009359401,0.007999488,0.17,0.003371001,0.003064546,0.1,0.038539496,0.037783819,0.02,0.022461314,0.022020896,0.02,0,0,0,0,0,0,0,0,0 +Kim (2012),0.01023293,0.01023293,0.3,0.3,0.009359401,0.006881912,0.36,0.003371001,0.002763116,0.22,0.038539496,0.035357336,0.09,0.022461314,0.021597417,0.04,0,0,0,0,0,0,0,0,0 +Kim (2012),0.01023293,0.01023293,0.5,0.5,0.009359401,0.005813293,0.61,0.003371001,0.002340973,0.44,0.038539496,0.032386131,0.19,0.022461314,0.02060671,0.09,0,0,0,0,0,0,0,0,0 +Kim (2012),0.01023293,0.01023293,0.7,0.7,0.009359401,0.005638193,0.66,0.003371001,0.002147134,0.57,0.038539496,0.03034606,0.27,0.022461314,0.019877269,0.13,0,0,0,0,0,0,0,0,0 +Kim (2012),0.01023293,0.01023293,1,1,0.009359401,0.005005027,0.87,0.003371001,0.001862432,0.81,0.038539496,0.028547775,0.35,0.022461314,0.019702907,0.14,0,0,0,0,0,0,0,0,0 +Kim (2012),0.01023293,0.01023293,2,2,0.009359401,0.003109436,2.01,0.003371001,0.001404584,1.4,0.038539496,0.021059834,0.83,0.022461314,0.018261231,0.23,0,0,0,0,0,0,0,0,0 +Li (1987),0.01,0.01,1,1,0,0,0,0,0,0,0.0508008,0.0305,0.6656,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.01,0.01,1,1,0,0,0,0,0,0,0.09999878,0.0763,0.3106,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.01,0.01,1,1,0,0,0,0,0,0,0.15009456,0.1232,0.2183,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.01,0.01,1,1,0,0,0,0,0,0,0.2000068,0.1708,0.171,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.01,0.01,1,1,0,0,0,0,0,0,0.30001216,0.2672,0.1228,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.03,0.03,1,1,0,0,0,0,0,0,0.0499975,0.035,0.4285,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.03,0.03,1,1,0,0,0,0,0,0,0.10000115,0.0785,0.2739,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.03,0.03,1,1,0,0,0,0,0,0,0.1500032,0.128,0.1719,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.03,0.03,1,1,0,0,0,0,0,0,0.20000832,0.1752,0.1416,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.03,0.03,1,1,0,0,0,0,0,0,0.29999816,0.2728,0.0997,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.05,0.05,1,1,0,0,0,0,0,0,0.05010115,0.0355,0.4113,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.05,0.05,1,1,0,0,0,0,0,0,0.10000382,0.0826,0.2107,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.05,0.05,1,1,0,0,0,0,0,0,0.1499967,0.1305,0.1494,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.05,0.05,1,1,0,0,0,0,0,0,0.2000008,0.178,0.1236,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.07,0.07,1,1,0,0,0,0,0,0,0.05,0.04,0.25,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.07,0.07,1,1,0,0,0,0,0,0,0.10029675,0.0865,0.1595,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.07,0.07,1,1,0,0,0,0,0,0,0.15000153,0.1351,0.1103,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.07,0.07,1,1,0,0,0,0,0,0,0.20054418,0.1838,0.0911,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.07,0.07,1,1,0,0,0,0,0,0,0.29999441,0.2753,0.0897,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.07,0.07,1,1,0,0,0,0,0,0,0.29998992,0.2811,0.0672,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.1,0.1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0.10000029,0.0221,3.5249,0,0,0,0,0,0 +Li (1987),0.1,0.1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0.15000025,0.0575,1.6087,0,0,0,0,0,0 +Li (1987),0.1,0.1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0.19999582,0.1037,0.9286,0,0,0,0,0,0 +Li (1987),0.1,0.1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0.25000596,0.1494,0.6734,0,0,0,0,0,0 +Li (1987),0.1,0.1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0.30000931,0.1997,0.5023,0,0,0,0,0,0 +Li (1987),0.3,0.3,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0.0500002,0.0106,3.717,0,0,0,0,0,0 +Li (1987),0.3,0.3,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0.09999641,0.0409,1.4449,0,0,0,0,0,0 +Li (1987),0.3,0.3,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0.14999806,0.0802,0.8703,0,0,0,0,0,0 +Li (1987),0.3,0.3,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0.19999448,0.1252,0.5974,0,0,0,0,0,0 +Li (1987),0.3,0.3,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0.29999394,0.2206,0.3599,0,0,0,0,0,0 +Li (1987),0.5,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0.04999904,0.0221,1.2624,0,0,0,0,0,0 +Li (1987),0.5,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0.09999996,0.0573,0.7452,0,0,0,0,0,0 +Li (1987),0.5,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0.15000096,0.0984,0.5244,0,0,0,0,0,0 +Li (1987),0.5,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0.19999616,0.1414,0.4144,0,0,0,0,0,0 +Li (1987),0.5,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0.30001016,0.2369,0.2664,0,0,0,0,0,0 +Li (1987),0.7,0.7,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0.04799855,0.0313,0.5335,0,0,0,0,0,0 +Li (1987),0.7,0.7,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0.1000035,0.071,0.4085,0,0,0,0,0,0 +Li (1987),0.7,0.7,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0.15000453,0.1131,0.3263,0,0,0,0,0,0 +Li (1987),0.7,0.7,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0.19980428,0.1586,0.2598,0,0,0,0,0,0 +Li (1987),0.7,0.7,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0.30000123,0.2517,0.1919,0,0,0,0,0,0 +Li (1987),0.0001,0.0001,1,1,0,0,0,0,0,0,0,0,0,0.04999962,0.0363,0.3774,0,0,0,0,0,0,0,0,0 +Li (1987),0.0001,0.0001,1,1,0,0,0,0,0,0,0,0,0,0.09999712,0.0844,0.1848,0,0,0,0,0,0,0,0,0 +Li (1987),0.0001,0.0001,1,1,0,0,0,0,0,0,0,0,0,0.1499944,0.1345,0.1152,0,0,0,0,0,0,0,0,0 +Li (1987),0.0001,0.0001,1,1,0,0,0,0,0,0,0,0,0,0.19999665,0.1835,0.0899,0,0,0,0,0,0,0,0,0 +Li (1987),0.0001,0.0001,1,1,0,0,0,0,0,0,0,0,0,0.24999486,0.2329,0.0734,0,0,0,0,0,0,0,0,0 +Li (1987),0.0001,0.0001,1,1,0,0,0,0,0,0,0,0,0,0.29998637,0.2833,0.0589,0,0,0,0,0,0,0,0,0 +Li (1987),0.01,0.01,1,1,0,0,0,0,0,0,0,0,0,0.0499991,0.0395,0.2658,0,0,0,0,0,0,0,0,0 +Li (1987),0.01,0.01,1,1,0,0,0,0,0,0,0,0,0,0.10000231,0.0881,0.1351,0,0,0,0,0,0,0,0,0 +Li (1987),0.01,0.01,1,1,0,0,0,0,0,0,0,0,0,0.15000091,0.1367,0.0973,0,0,0,0,0,0,0,0,0 +Li (1987),0.01,0.01,1,1,0,0,0,0,0,0,0,0,0,0.20009536,0.1856,0.0781,0,0,0,0,0,0,0,0,0 +Li (1987),0.01,0.01,1,1,0,0,0,0,0,0,0,0,0,0.40540686,0.3846,0.0541,0,0,0,0,0,0,0,0,0 +Li (1987),0.03,0.03,1,1,0,0,0,0,0,0,0,0,0,0.09999756,0.0897,0.1148,0,0,0,0,0,0,0,0,0 +Li (1987),0.03,0.03,1,1,0,0,0,0,0,0,0,0,0,0.15000544,0.1391,0.0784,0,0,0,0,0,0,0,0,0 +Li (1987),0.03,0.03,1,1,0,0,0,0,0,0,0,0,0,0.19999343,0.1883,0.0621,0,0,0,0,0,0,0,0,0 +Li (1987),0.03,0.03,1,1,0,0,0,0,0,0,0,0,0,0.29999853,0.2881,0.0413,0,0,0,0,0,0,0,0,0 +Li (1987),0.04,0.04,1,1,0,0,0,0,0,0,0,0,0,0.05030076,0.0444,0.1329,0,0,0,0,0,0,0,0,0 +Li (1987),0.04,0.04,1,1,0,0,0,0,0,0,0,0,0,0.09999639,0.0919,0.0881,0,0,0,0,0,0,0,0,0 +Li (1987),0.04,0.04,1,1,0,0,0,0,0,0,0,0,0,0.15000408,0.1413,0.0616,0,0,0,0,0,0,0,0,0 +Li (1987),0.04,0.04,1,1,0,0,0,0,0,0,0,0,0,0.20049903,0.1917,0.0459,0,0,0,0,0,0,0,0,0 +Li (1987),0.04,0.04,1,1,0,0,0,0,0,0,0,0,0,0.29948604,0.2883,0.0388,0,0,0,0,0,0,0,0,0 +Lyon (2016),0.01,0.01,1,1,0.08666112,0.05352756,0.619,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lyon (2016),0.05,0.05,1,1,0.08666112,0.060900295,0.423,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lyon (2016),0.1,0.1,1,1,0.08666112,0.067916239,0.276,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lyon (2016),0.3,0.3,1,1,0.08666112,0.084878668,0.021,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lyon (2016),0.5,0.5,1,1,0.08666112,0.08666112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lyon (2016),0.01,0.01,1,1,0.042983916,0.015124531,1.842,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lyon (2016),0.05,0.05,1,1,0.042983916,0.020410216,1.106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lyon (2016),0.1,0.1,1,1,0.042983916,0.026354332,0.631,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lyon (2016),0.3,0.3,1,1,0.042983916,0.039290599,0.094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lyon (2016),0.5,0.5,1,1,0.042983916,0.042983916,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lyon (2016),0.01,0.01,1,1,0.005546312,3.16E-05,174.668,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lyon (2016),0.05,0.05,1,1,0.005546312,0.000451912,11.273,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lyon (2016),0.1,0.1,1,1,0.005546312,0.001558828,2.558,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lyon (2016),0.3,0.3,1,1,0.005546312,0.005400498,0.027,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lyon (2016),0.5,0.5,1,1,0.005546312,0.005546312,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lee (2005),0.251,0.25,1,1,0.1,0.087622932,0.141253754,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lee (2005),0.251,0.25,1.5,1.5,0.1,0.07955199,0.257039578,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lee (2005),0.251,0.25,2,2,0.1,0.074253556,0.34673685,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lee (2005),0.251,0.25,2.5,2.5,0.1,0.071525275,0.398107171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lee (2005),0.251,0.25,3,3,0.1,0.066613942,0.501187234,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lee (2005),0.134,0.13,1,1,0.1,0.075124079,0.331131121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lee (2005),0.0835,0.08,1,1,0.1,0.065582051,0.52480746,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lee (2005),0.0285,0.03,1,1,0.1,0.059662917,0.676082975,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lee (2005),0.262,0.26,2,2,0.1,0.079923999,0.251188643,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lee (2005),0.134,0.13,2,2,0.1,0.061313682,0.630957344,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lee (2005),0.0835,0.08,2,2,0.1,0.051151089,0.954992586,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lee (2005),0.0285,0.03,2,2,0.1,0.044837645,1.230268771,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lee (2005),0.0114,0.01,2,2,0.1,0.041450132,1.412537545,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lee (2005),0.262,0.26,3,3,0.1,0.074253556,0.34673685,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lee (2005),0.134,0.13,3,3,0.1,0.048273748,1.071519305,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lee (2005),0.0835,0.08,3,3,0.1,0.040337083,1.479108388,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lee (2005),0.0285,0.03,3,3,0.1,0.033900091,1.9498446,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lee (2005),0.0114,0.01,3,3,0.1,0.030387123,2.290867653,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.01,0.01,1,1,0.05000119,0.0239,1.0921,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.01,0.01,1,1,0.09999803,0.0683,0.4641,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.01,0.01,1,1,0.1500057,0.117,0.2821,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.01,0.01,1,1,0.200004,0.168,0.1905,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.01,0.01,1,1,0.30001149,0.2637,0.1377,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.05,0.05,1,1,0.03453582,0.0201,0.7182,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.05,0.05,1,1,0.09996185,0.0757,0.3205,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.05,0.05,1,1,0.19999308,0.1722,0.1614,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.1,0.1,1,1,0.04999817,0.0389,0.2853,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.1,0.1,1,1,0.1499974,0.133,0.1278,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.1,0.1,1,1,0.19999876,0.1807,0.1068,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.1,0.1,1,1,0.2500032,0.232,0.0776,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.1,0.1,1,1,0.30001216,0.2807,0.0688,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.3,0.3,1,1,0.01996974,0.0189,0.0566,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.3,0.3,1,1,0.04997968,0.0478,0.0456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.3,0.3,1,1,0.15000144,0.1464,0.0246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.3,0.3,1,1,0.29998765,0.2957,0.0145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.5,0.5,1,1,0.04999786,0.0482,0.0373,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.5,0.5,1,1,0.10000096,0.0976,0.0246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.5,0.5,1,1,0.20000784,0.1968,0.0163,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lyon (2016),0.03,0.03,1,1,0,0,0,0.09296866,0.06556323,0.418,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lyon (2016),0.05,0.05,1,1,0,0,0,0.09296866,0.066835844,0.391,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lyon (2016),0.1,0.1,1,1,0,0,0,0.09296866,0.080076365,0.161,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lyon (2016),0.3,0.3,1,1,0,0,0,0.09296866,0.091957131,0.011,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lyon (2016),0.5,0.5,1,1,0,0,0,0.09296866,0.09296866,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lyon (2016),0.03,0.03,1,1,0,0,0,0.047548856,0.02373882,1.003,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lyon (2016),0.05,0.05,1,1,0,0,0,0.047548856,0.025646632,0.854,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lyon (2016),0.1,0.1,1,1,0,0,0,0.047548856,0.034988121,0.359,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lyon (2016),0.3,0.3,1,1,0,0,0,0.047548856,0.045371046,0.048,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lyon (2016),0.5,0.5,1,1,0,0,0,0.047548856,0.047548856,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lyon (2016),0.01,0.01,1,1,0,0,0,0.00638716,5.54E-05,114.332,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lyon (2016),0.05,0.05,1,1,0,0,0,0.00638716,0.000669233,8.544,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lyon (2016),0.1,0.1,1,1,0,0,0,0.00638716,0.002264147,1.821,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lyon (2016),0.3,0.3,1,1,0,0,0,0.00638716,0.006323921,0.01,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Lyon (2016),0.5,0.5,1,1,0,0,0,0.00638716,0.00638716,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.01,0.01,1,1,0,0,0,0.04999995,0.0259,0.9305,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.01,0.01,1,1,0,0,0,0.09999925,0.0725,0.3793,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.01,0.01,1,1,0,0,0,0.20000715,0.1673,0.1955,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.01,0.01,1,1,0,0,0,0.29999192,0.2648,0.1329,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.03,0.03,1,1,0,0,0,0.05000109,0.0307,0.6287,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.03,0.03,1,1,0,0,0,0.10009624,0.0776,0.2899,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.03,0.03,1,1,0,0,0,0.20000456,0.1736,0.1521,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.03,0.03,1,1,0,0,0,0.2999997,0.273,0.0989,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.05,0.05,1,1,0,0,0,0.05002915,0.0349,0.4335,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.05,0.05,1,1,0,0,0,0.09997622,0.0809,0.2358,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.05,0.05,1,1,0,0,0,0.14999553,0.1299,0.1547,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.05,0.05,1,1,0,0,0,0.25001088,0.2272,0.1004,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.07,0.07,1,1,0,0,0,0.04999995,0.0385,0.2987,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.07,0.07,1,1,0,0,0,0.09999936,0.0864,0.1574,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.07,0.07,1,1,0,0,0,0.14998624,0.1343,0.1168,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.07,0.07,1,1,0,0,0,0.24999474,0.2334,0.0711,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.1,0.1,1,1,0,0,0,0.0499992,0.0415,0.2048,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.1,0.1,1,1,0,0,0,0.10000199,0.0901,0.1099,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.1,0.1,1,1,0,0,0,0.1999998,0.189,0.0582,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.1,0.1,1,1,0,0,0,0.30000544,0.2888,0.0388,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +Li (1987),0.01,0.01,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0500503,0.0115,3.3522,0,0,0 +Li (1987),0.01,0.01,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0999792,0.048,1.0829,0,0,0 +Li (1987),0.01,0.01,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.1500016,0.0944,0.589,0,0,0 +Li (1987),0.01,0.01,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.24999968,0.1864,0.3412,0,0,0 +Li (1987),0.01,0.01,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.30000263,0.2371,0.2653,0,0,0 +Li (1987),0.05,0.05,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.05032248,0.0156,2.2258,0,0,0 +Li (1987),0.05,0.05,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.10000216,0.0556,0.7986,0,0,0 +Li (1987),0.05,0.05,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.15000255,0.1035,0.4493,0,0,0 +Li (1987),0.05,0.05,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.30392343,0.1997,0.5219,0,0,0 +Li (1987),0.05,0.05,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.30000411,0.2471,0.2141,0,0,0 +Li (1987),0.1,0.1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.04999989,0.0219,1.2831,0,0,0 +Li (1987),0.1,0.1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.09999773,0.0623,0.6051,0,0,0 +Li (1987),0.1,0.1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.15000375,0.1105,0.3575,0,0,0 +Li (1987),0.1,0.1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.2500038,0.2073,0.206,0,0,0 +Li (1987),0.1,0.1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.30061536,0.2572,0.1688,0,0,0 +Li (1987),0.3,0.3,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0502452,0.0408,0.2315,0,0,0 +Li (1987),0.3,0.3,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.09999592,0.0842,0.1876,0,0,0 +Li (1987),0.3,0.3,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.14999496,0.1334,0.1244,0,0,0 +Li (1987),0.3,0.3,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.1999935,0.1814,0.1025,0,0,0 +Li (1987),0.3,0.3,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.30001088,0.2782,0.0784,0,0,0 +Li (1987),0.1,0.1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.1500005,0.047,2.1915 +Li (1987),0.1,0.1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.19999809,0.0857,1.3337 +Li (1987),0.1,0.1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.2999996,0.1772,0.693 +Li (1987),0.5,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.05,0.016,2.125 +Li (1987),0.5,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.1000004,0.0445,1.2472 +Li (1987),0.5,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.15000048,0.0828,0.8116 +Li (1987),0.5,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.19999436,0.1214,0.6474 +Li (1987),0.5,0.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.29999366,0.2083,0.4402 +Li (1987),1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.04999995,0.0333,0.5015 +Li (1987),1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.09999846,0.0694,0.4409 +Li (1987),1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.15000104,0.1108,0.3538 +Li (1987),1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.19999756,0.1526,0.3106 +Li (1987),1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.29999472,0.2416,0.2417 +Li (1987),1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.25000384,0.1984,0.2601 +Li (1987),1.5,1.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0500013,0.0405,0.2346 +Li (1987),1.5,1.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.09999854,0.0838,0.1933 +Li (1987),1.5,1.5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.19999977,0.1753,0.1409 +Li (1987),2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.09999804,0.0908,0.1013 +Li (1987),2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.19992651,0.1851,0.0801 +Li (1987),2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.30001335,0.2821,0.0635 diff --git a/data/xmls/PC88A_HCL_NdPrCeLaDySmY_w_pitzer.xml b/data/xmls/PC88A_HCL_NdPrCeLaDySmY_w_pitzer.xml index b218c2a..79377c5 100644 --- a/data/xmls/PC88A_HCL_NdPrCeLaDySmY_w_pitzer.xml +++ b/data/xmls/PC88A_HCL_NdPrCeLaDySmY_w_pitzer.xml @@ -33,7 +33,7 @@ 298.14999999999998 - -1376882.0784583509 + -1377917.5269485628 558.9824 0.0 @@ -50,7 +50,7 @@ 298.14999999999998 - -4924298.0880370205 + -4929625.060282971 1117.965 0.0 @@ -67,7 +67,7 @@ 298.14999999999998 - -4935685.119723228 + -4941397.084772181 1117.965 0.0 @@ -85,7 +85,7 @@ 298.14999999999998 - -4920369.042961768 + -4932551.489263242 1117.965 0.0 @@ -103,7 +103,7 @@ 298.14999999999998 - -4928639.61964031 + -4935194.142426379 1117.965 0.0 @@ -120,7 +120,7 @@ 298.14999999999998 - -4931991.722599618 + -4935179.480883835 1117.965 0.0 @@ -138,7 +138,7 @@ 298.14999999999998 - -4944682.264585918 + -4947210.070800013 1117.965 0.0 @@ -157,7 +157,7 @@ 298.14999999999998 - -4924669.3217661735 + -4929116.779371853 1117.965 0.0 @@ -245,10 +245,10 @@ - 0.058791091500561485, 0.0, 0.0, 0.0, 0.0 - 0.5448322248125199, 0.0, 0.0, 0.0, 0.0 + 0.058791077174068576, 0.0, 0.0, 0.0, 0.0 + 0.5448320238819658, 0.0, 0.0, 0.0, 0.0 0.0, 0.0, 0.0, 0.0, 0.0 - -0.02066999867229882, 0.0, 0.0, 0.0, 0.0 + -0.02066999867229882, 0.0, 0.0, 0.0, 0.0 2 0 @@ -261,10 +261,10 @@ - 1.213717095858249, 0.0, 0.0, 0.0, 0.0 - 7.7481294675488375, 0.0, 0.0, 0.0, 0.0 + 1.0825315776813356, 0.0, 0.0, 0.0, 0.0 + 6.211262701179254, 0.0, 0.0, 0.0, 0.0 0.0, 0.0, 0.0, 0.0, 0.0 - -0.01963615126026457, 0.0, 0.0, 0.0, 0.0 + -0.01963615126026457, 0.0, 0.0, 0.0, 0.0 2 0 @@ -277,10 +277,10 @@ - 1.0223168335791355, 0.0, 0.0, 0.0, 0.0 - 0.5296306654103653, 0.0, 0.0, 0.0, 0.0 + 0.5930048961782302, 0.0, 0.0, 0.0, 0.0 + 5.2771447352927785, 0.0, 0.0, 0.0, 0.0 0.0, 0.0, 0.0, 0.0, 0.0 - -0.024339999997603376, 0.0, 0.0, 0.0, 0.0 + -0.024339999997603376, 0.0, 0.0, 0.0, 0.0 2 0 @@ -293,10 +293,10 @@ - 0.7646372240575223, 0.0, 0.0, 0.0, 0.0 - 7.849276225207628, 0.0, 0.0, 0.0, 0.0 + 0.5532852863195881, 0.0, 0.0, 0.0, 0.0 + 9.206787175138805, 0.0, 0.0, 0.0, 0.0 0.0, 0.0, 0.0, 0.0, 0.0 - -0.019699989216349984, 0.0, 0.0, 0.0, 0.0 + -0.019699989216349984, 0.0, 0.0, 0.0, 0.0 2 0 @@ -309,10 +309,10 @@ - 0.20352350320923904, 0.0, 0.0, 0.0, 0.0 - 21.120419048363047, 0.0, 0.0, 0.0, 0.0 + 0.6005020116531858, 0.0, 0.0, 0.0, 0.0 + 4.91004437191519, 0.0, 0.0, 0.0, 0.0 0.0, 0.0, 0.0, 0.0, 0.0 - -0.02618999999473301, 0.0, 0.0, 0.0, 0.0 + -0.02618999999473301, 0.0, 0.0, 0.0, 0.0 2 0 @@ -325,10 +325,10 @@ - 0.8852797060008407, 0.0, 0.0, 0.0, 0.0 - 9.334636294454038, 0.0, 0.0, 0.0, 0.0 + 0.8866269789489127, 0.0, 0.0, 0.0, 0.0 + 9.867663759220948, 0.0, 0.0, 0.0, 0.0 0.0, 0.0, 0.0, 0.0, 0.0 - -0.015467323909969704, 0.0, 0.0, 0.0, 0.0 + -0.015467323909969704, 0.0, 0.0, 0.0, 0.0 2 0 @@ -341,10 +341,10 @@ - 0.6989083059080712, 0.0, 0.0, 0.0, 0.0 - 6.877881736471866, 0.0, 0.0, 0.0, 0.0 + 0.5978087860273482, 0.0, 0.0, 0.0, 0.0 + 5.279188095059934, 0.0, 0.0, 0.0, 0.0 0.0, 0.0, 0.0, 0.0, 0.0 - -0.019920000110321332, 0.0, 0.0, 0.0, 0.0 + -0.019920000110321332, 0.0, 0.0, 0.0, 0.0 2 0 diff --git a/data/xmls/test_PC88A_HCL_NdPrCeLaDySmY_w_pitzer.xml b/data/xmls/test_PC88A_HCL_NdPrCeLaDySmY_w_pitzer.xml new file mode 100644 index 0000000..7c47769 --- /dev/null +++ b/data/xmls/test_PC88A_HCL_NdPrCeLaDySmY_w_pitzer.xml @@ -0,0 +1,734 @@ + + + + + + + Cl O H C P Nd Pr Ce La Dy Y Sm dummy + + + (HA)2(org) dodecane Nd(H(A)2)3(org) Pr(H(A)2)3(org) Ce(H(A)2)3(org) La(H(A)2)3(org) Dy(H(A)2)3(org) Sm(H(A)2)3(org) Y(H(A)2)3(org) + + + 298.15 + 101325.0 + + (HA)2(org): 0.25 + + + + + + + + + + + + + + + + C:16 H:35 O:3 P:1 + + + 298.14999999999998 + -1375274.5395942358 + 558.9824 + 0.0 + + + + 0.320974226079 + + + + + + C:48 H:102 O:9 P:3 Nd:1 + + + 298.14999999999998 + + -4924702.801342797 + 1117.965 + 0.0 + + + + 0.973500071223 + + + + + + C:48 H:102 O:9 P:3 Pr:1 + + + 298.14999999999998 + + -4933297.85118053 + 1117.965 + 0.0 + + + + 0.979936421078 + + + + + + + C:48 H:102 O:9 P:3 Ce:1 + + + 298.14999999999998 + + -4925793.594958098 + 1117.965 + 0.0 + + + + 1.0060487218 + + + + + + + C:48 H:102 O:9 P:3 La:1 + + + 298.14999999999998 + + -4921414.408105163 + 1117.965 + 0.0 + + + + 0.981485801577 + + + + + + C:48 H:102 O:9 P:3 Dy:1 + + + 298.14999999999998 + + -4927250.91118887 + 1117.965 + 0.0 + + + + 0.961666360676 + + + + + + + C:48 H:102 O:9 P:3 Y:1 + + + 298.14999999999998 + + -4939280.834663128 + 1117.965 + 0.0 + + + + 0.958888814485 + + + + + + + + C:48 H:102 O:9 P:3 Sm:1 + + + 298.14999999999998 + + -4921187.817651384 + 1117.965 + 0.0 + + + + 0.9642 + + + + + + + C:48 H:102 O:9 P:3 Gd:1 + + + 298.14999999999998 + + -4829446.858 + 1117.965 + 0.0 + + + + 0.9642 + + + + + + + dummy:1 + + + + 298.14999999999998 + + 0.0 + 0.0 + 0.0 + + + + 0.227113 + + + + + + + + + + H2O(L) H+ OH- Cl- Nd+++ Pr+++ Ce+++ La+++ Dy+++ Sm+++ Y+++ Na+ + + + + 298.15 + 101325.0 + + Cl-: 1.0E-7 + H+: 1.0E-7 + + + + + + + + + + + + 0.177000779, 0.000125778, 0.0, -33.4777082, -0.262214535 + 0.292922504, -0.027938838, 0.0, 3402.47027, 19.7936248 + 0.0, 0.0, 0.0, 0.0, 0.0 + 0.000362, -0.00003036, 0.0, -2.91038E-11, 0.0 + 2 + 12 + + refit of Holmes, H.F., Busey, J.M., Simonson, J.M., Mesmer, R.E., + Archer, D.G., and Wood, R.H., 1987, The enthalpy of dilution of HCl(aq) + to 648 K and 4p MPa. Thermodynamic properties, Journal of Chemical + Thermodynamics, v. 19, p. 863-890. + + + + + 0.41211840588454257, 0.0, 0.0, 0.0, 0.0 + 0.5446957279361009, 0.0, 0.0, 0.0, 0.0 + 0.0, 0.0, 0.0, 0.0, 0.0 + -0.02066999867229882, 0.0, 0.0, 0.0, 0.0 + 2 + 0 + + Table S1: Pitzer parameters for osmotic and activity coeff Supp Info. + May, P. M.; Rowland, D.; Hefter, G.; Konigsberger, E. + A generic and updatable Pitzer characterization of aqueous binary electrolyte + solutions at 1 bar and 25 C. + Journal of Chemical and Engineering Data 2011,56, 5066–5077. + + + + + 0.35663172954569944, 0.0, 0.0, 0.0, 0.0 + 2.9004659704748335, 0.0, 0.0, 0.0, 0.0 + 0.0, 0.0, 0.0, 0.0, 0.0 + -0.01963615126026457, 0.0, 0.0, 0.0, 0.0 + 2 + 0 + + Table S1: Pitzer parameters for osmotic and activity coeff Supp Info. + May, P. M.; Rowland, D.; Hefter, G.; Konigsberger, E. + A generic and updatable Pitzer characterization of aqueous binary electrolyte + solutions at 1 bar and 25 C. + Journal of Chemical and Engineering Data 2011,56, 5066–5077. + + + + + 0.05797526981415538, 0.0, 0.0, 0.0, 0.0 + 16.763625801929546, 0.0, 0.0, 0.0, 0.0 + 0.0, 0.0, 0.0, 0.0, 0.0 + -0.024339999997603376, 0.0, 0.0, 0.0, 0.0 + 2 + 0 + + Table S1: Pitzer parameters for osmotic and activity coeff Supp Info. + May, P. M.; Rowland, D.; Hefter, G.; Konigsberger, E. + A generic and updatable Pitzer characterization of aqueous binary electrolyte + solutions at 1 bar and 25 C. + Journal of Chemical and Engineering Data 2011,56, 5066–5077. + + + + + 0.5534945060571388, 0.0, 0.0, 0.0, 0.0 + 9.205570263716002, 0.0, 0.0, 0.0, 0.0 + 0.0, 0.0, 0.0, 0.0, 0.0 + -0.019699989216349984, 0.0, 0.0, 0.0, 0.0 + 2 + 0 + + Table S1: Pitzer parameters for osmotic and activity coeff Supp Info. + May, P. M.; Rowland, D.; Hefter, G.; Konigsberger, E. + A generic and updatable Pitzer characterization of aqueous binary electrolyte + solutions at 1 bar and 25 C. + Journal of Chemical and Engineering Data 2011,56, 5066–5077. + + + + + 0.05726405599313575, 0.0, 0.0, 0.0, 0.0 + 2.6992201079308558, 0.0, 0.0, 0.0, 0.0 + 0.0, 0.0, 0.0, 0.0, 0.0 + -0.02618999999473301, 0.0, 0.0, 0.0, 0.0 + 2 + 0 + + Table S1: Pitzer parameters for osmotic and activity coeff Supp Info. + May, P. M.; Rowland, D.; Hefter, G.; Konigsberger, E. + A generic and updatable Pitzer characterization of aqueous binary electrolyte + solutions at 1 bar and 25 C. + Journal of Chemical and Engineering Data 2011,56, 5066–5077. + + + + + 0.8866130626375315, 0.0, 0.0, 0.0, 0.0 + 9.867928019371377, 0.0, 0.0, 0.0, 0.0 + 0.0, 0.0, 0.0, 0.0, 0.0 + -0.015467323909969704, 0.0, 0.0, 0.0, 0.0 + 2 + 0 + + Table S1: Pitzer parameters for osmotic and activity coeff Supp Info. + May, P. M.; Rowland, D.; Hefter, G.; Konigsberger, E. + A generic and updatable Pitzer characterization of aqueous binary electrolyte + solutions at 1 bar and 25 C. + Journal of Chemical and Engineering Data 2011,56, 5066–5077. + + + + + 0.5978087854283536, 0.0, 0.0, 0.0, 0.0 + 5.279188087719687, 0.0, 0.0, 0.0, 0.0 + 0.0, 0.0, 0.0, 0.0, 0.0 + -0.019920000110321332, 0.0, 0.0, 0.0, 0.0 + 2 + 0 + + Table S1: Pitzer parameters for osmotic and activity coeff Supp Info. + May, P. M.; Rowland, D.; Hefter, G.; Konigsberger, E. + A generic and updatable Pitzer characterization of aqueous binary electrolyte + solutions at 1 bar and 25 C. + Journal of Chemical and Engineering Data 2011,56, 5066–5077. + + + + + + + H2O(L) + + + O H Nd Pr Ce La Dy Y Sm C N Cl P E Na + + + + + + + + + H:2 O:1 + + + + 7.255750050E+01, -6.624454020E-01, 2.561987460E-03, -4.365919230E-06, + 2.781789810E-09, -4.188654990E+04, -2.882801370E+02 + + + + + + 0.018068 + + + + + + OH- + O:1 H:1 E:1 + -1 + + + -37595 + -54977 + -2.56 + + + + 0.12527 + 7.38 + 1.8423 + -27821 + 4.15 + -103460 + 172460 + -4.18 + + + ref:G9 + + + + + NO3- + N:1 O:3 + -1 + + + -26507 + -49429 + 35.12 + + + + 0.73161 + 678.24 + -4.6838 + -30594 + 7.7 + -67250 + 109770 + 29.0 + + + ref:G9 + + + + + + + + + + Cl- + Cl:1 E:1 + -1 + + + -31379 + -39933 + 13.56 + + + + 0.4032 + 480.1 + 5.563 + -28470 + -4.4 + -57140 + 145600 + 17.79 + + ref:G9 + + + + H+ + H:1 E:-1 + +1 + + + 0 + 0 + 0 + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + ref:G9 + + + + + Nd+++ + Nd:1 E:-3 + +3 + + + -160600 + -166500 + -49.5 + + + + -0.33707 + -1454.52 + 8.3211 + -21777 + 1.6236 + -118344 + 225500 + -43.1 + + + ref:G9 + + + + + Pr+++ + Pr:1 E:-3 + +3 + + + -162600 + -168800 + -50 + + + + -0.32406 + -1419.98 + 8.1257 + -21920 + -1.1975 + -127511 + 223500 + -42.1 + + + ref:G9 + + + + + + Ce+++ + Ce:1 E:-3 + +3 + + + -161600 + -167400 + -49 + + + + -0.29292 + -1493.38 + 11.6196 + -21616 + 4.0445 + -108974 + 222510 + -39.8 + + + ref:G9 + + + + + + La+++ + La:1 E:-3 + +3 + + + -164000 + -169600 + -52 + + + + -0.2788 + -1438.24 + 10.9602 + -21844 + 4.2394 + -106122 + 215720 + -38.6 + + + ref:G9 + + + + + + + Dy+++ + Dy:1 E:-3 + +3 + + + -158700 + -166500 + -55.2 + + + + -0.30003 + -1510.74 + 11.6879 + -21545 + 9.5076 + -94919 + 237920 + -40.7 + + + ref:G9 + + + + + + Y+++ + Y:1 E:-3 + +3 + + + -163800 + -170900 + -60 + + + + -0.30140 + -1514.08 + 11.7010 + -21531 + 7.1634 + -103067 + 237920 + -40.8 + + + ref:G9 + + + + + + + Sm+++ + Sm:1 E:-3 + +3 + + + -159100 + -165200 + -50.7 + + + + -0.32065 + -1561.08 + 11.8857 + -21337 + 1.9385 + -118548 + 229550 + + + ref:G9 + + + + + + + Gd+++ + Gd:1 E:-3 + +3 + + + -158600 + -164200 + -49.2 + + + + -0.29771 + -1505.06 + 11.6656 + -21568 + 6.5606 + -103474 + 232650 + + + ref:G9 + + + + + Na:1 E:-1 + +1 + + + 0.0 + 2 + + -125.5213, -125.5213 + + + 298.15, 333.15 + + + + + 1.3 + + + + + + + \ No newline at end of file diff --git a/docs/Examples/iterative_fitter.py b/docs/Examples/iterative_fitter.py index f9d97b6..a2e2c03 100644 --- a/docs/Examples/iterative_fitter.py +++ b/docs/Examples/iterative_fitter.py @@ -22,7 +22,7 @@ ext_h0_filename = "../../data/jsons/min_h0_guess_ext_h0.txt" with open(ext_h0_filename) as file: ext_h0_dict = json.load(file) labeled_data = pd.read_csv("../../data/csvs/" - "zeroes_removed_PC88A_HCL_NdPrCeLaDySmY.csv") + "multicomponent_PC88A_HCL_NdPrCeLaDySmY.csv") exp_data = labeled_data.drop(labeled_data.columns[0], axis=1) xml_file = "PC88A_HCL_NdPrCeLaDySmY_w_pitzer.xml" lin_param_df = pd.read_csv("../../data/csvs" @@ -237,8 +237,7 @@ while obj_diff1 > eps or obj_diff2 > eps: del(output_dict['rel_diff'][-1]) output_dict['rel_diff'].append(rel_diff) output_df = pd.DataFrame(output_dict) - output_df.to_csv('outputs/iterative_fitter_output4.csv') - obj_diff1 = np.abs(output_dict['best_obj'][-1]-output_dict['best_obj'][-2]) + output_df.to_csv('outputs/iterative_fitter_output_multicomponent.csv') + obj_diff1 = output_dict['best_obj'][-2]-output_dict['best_obj'][-1] if i > 2: - obj_diff2 = np.abs( - output_dict['best_obj'][-1] - output_dict['best_obj'][-3]) + obj_diff2 = output_dict['best_obj'][-3] - output_dict['best_obj'][-1] diff --git a/docs/Examples/iterative_fitter_eval_grapher.py b/docs/Examples/iterative_fitter_eval_grapher.py index 8d997c4..1fca645 100644 --- a/docs/Examples/iterative_fitter_eval_grapher.py +++ b/docs/Examples/iterative_fitter_eval_grapher.py @@ -2,15 +2,30 @@ import llepe import pandas as pd import numpy as np import json -import matplotlib as plt +import matplotlib.pyplot as plt import matplotlib +import re + + +def set_size(w, h, ax=None): + """ w, h: width, height in inches """ + if not ax: + ax = plt.gca() + left = ax.figure.subplotpars.left + right = ax.figure.subplotpars.right + top = ax.figure.subplotpars.top + bottom = ax.figure.subplotpars.bottom + fig_width = float(w) / (right - left) + fig_height = float(h) / (top - bottom) + ax.figure.set_size_inches(fig_width, fig_height) + font = {'family': 'sans serif', 'size': 24} matplotlib.rc('font', **font) -plt.rc('xtick', labelsize=18) -plt.rc('ytick', labelsize=18) -plt.rcParams['lines.linewidth'] = 4 +matplotlib.rc('xtick', labelsize=18) +matplotlib.rc('ytick', labelsize=18) +matplotlib.rcParams['lines.linewidth'] = 4 matplotlib.rcParams['lines.markersize'] = 10 @@ -27,8 +42,8 @@ def mod_lin_param_df(lp_df, input_val, mini_species, mini_lin_param): return new_lp_df -info_df = pd.read_csv('outputs/iterative_fitter_w_mse_output.csv') -test_row = 3 +info_df = pd.read_csv('outputs/iterative_fitter_output4.csv') +test_row = -1 pitzer_params_filename = "../../data/jsons/min_h0_pitzer_params.txt" with open(pitzer_params_filename) as file: pitzer_params_dict = json.load(file) @@ -112,57 +127,146 @@ estimator.set_custom_objects_dict({'lin_param_df': lin_param_df}) estimator.update_custom_objects_dict(info_dict) estimator.update_xml(info_dict, dependant_params_dict=dependant_params_dict) -exp_data = estimator.get_exp_df() -feed_cols = [] -for col in exp_data.columns: - if 'aq_i' in col: - feed_cols.append(col) -exp_data['total_re'] = exp_data[feed_cols].sum(axis=1) -label_list = [] -for index, row in exp_data[feed_cols].iterrows(): - bool_list = list((row > 0).values) - label = '' - for species, el in zip(species_list, bool_list): - if el: - label = '{0}-{1}'.format(label, species) - label = label[1:] - label_list.append(label) -r2s = "" -for species in species_list: - # if species=='La': - # save_name = 'outputs' \ - # '/parity_iterative_fitter_{0}_org_eq'.format(species) - save_name = None - # fig, ax = estimator.parity_plot('{0}_org_eq'.format(species), - # c_data='z_i', - # c_label='Feed total RE ' - # 'molarity (mol/L)', - # print_r_squared=True, - # save_path=save_name) - r2s += str(estimator.r_squared('{0}_org_eq'.format(species))) + ',' - - fig, ax = estimator.parity_plot('{0}_org_eq'.format(species), - data_labels=label_list, - print_r_squared=True, - save_path=save_name) - ax.legend(loc=4) -pred_df = pd.DataFrame(estimator.get_predicted_dict()) -new_cols = [] -for col in pred_df.columns: - new_cols.append("pred_{0}".format(col)) -pred_df.columns = new_cols -new_cols = ['label', - 'h_i', - 'h_eq', - 'z_i', - 'z_eq' - ] -for species in species_list: - new_cols.append("{0}_aq_i".format(species)) - new_cols.append("{0}_aq_eq".format(species)) - new_cols.append("{0}_d_eq".format(species)) -labeled_data.columns = new_cols -total_df = labeled_data.join(pred_df) +compared_value = 'La_org_eq' +plot_title = None +legend = True +predicted_dict = estimator.get_predicted_dict() +exp_df = estimator.get_exp_df() +pred = pd.DataFrame(predicted_dict)[compared_value].fillna(0).values +meas = exp_df[compared_value].fillna(0).values +name_breakdown = re.findall('[^_\W]+', compared_value) +compared_species = name_breakdown[0] +data_labels = list(labeled_data['label']) +if compared_species == 'h': + feed_molarity = exp_df['h_i'].fillna(0).values +elif compared_species == 'z': + feed_molarity = exp_df['z_i'].fillna(0).values +else: + feed_molarity = exp_df[ + '{0}_aq_i'.format(compared_species)].fillna(0).values +combined_df = pd.DataFrame({'pred': pred, + 'meas': meas, + 'label': data_labels, + 'feed_molarity': feed_molarity}) +combined_df = combined_df[(combined_df['feed_molarity'] != 0)] +meas = combined_df['meas'].values +pred = combined_df['pred'].values + +min_data = np.min([pred, meas]) +max_data = np.max([pred, meas]) +min_max_data = np.array([min_data, max_data]) + +if compared_species == 'h': + default_title = '$H^+$ eq. conc. (mol/L)' +elif compared_species == 'z': + default_title = '{0} eq. conc. (mol/L)'.format(extractant_name) +else: + phase = name_breakdown[1] + if phase == 'aq': + extracted_species_charge = extracted_species_charges[ + extracted_species_list.index( + compared_species)] + default_title = '$%s^{%d+}$ eq. conc. (mol/L)' \ + % (compared_species, extracted_species_charge) + elif phase == 'd': + default_title = '{0} distribution ratio'.format( + compared_species) + else: + default_title = '{0} complex eq. conc. (mol/L)'.format( + compared_species) +fig, ax = plt.subplots(figsize=(8, 6)) + +if isinstance(data_labels, list): + # unique_labels = list(set(data_labels)) + unique_labels = ['Li (1987)', + 'Kim (2012)', + 'Formiga (2016)', + 'Banda (2014)', + ] + color_list = ['r', 'g', 'b', 'm'] + marker_list = ['o', 's', 'P', 'X', ] + for ind, label in enumerate(unique_labels): + filtered_data = combined_df[combined_df['label'] == label] + filtered_meas = filtered_data['meas'] + filtered_pred = filtered_data['pred'] + if len(filtered_pred) != 0: + ax.scatter(filtered_meas, + filtered_pred, + label=label, + color=color_list[ind], + marker=marker_list[ind]) + if legend: + ax.legend(loc=4) +ax.plot(min_max_data, min_max_data, color="b", label="") + +ax.text(min_max_data[0], + min_max_data[1] * 0.9, + '$R^2$={0:.2f}'.format(estimator.r_squared(compared_value))) + +ax.set(xlabel='Measured', ylabel='Predicted') +if plot_title is None: + ax.set_title(default_title) +set_size(8, 6) +plt.tight_layout() +plt.show() +# exp_data = estimator.get_exp_df() +# feed_cols = [] +# for col in exp_data.columns: +# if 'aq_i' in col: +# feed_cols.append(col) +# exp_data['total_re'] = exp_data[feed_cols].sum(axis=1) +# label_list = [] +# for index, row in exp_data[feed_cols].iterrows(): +# bool_list = list((row > 0).values) +# label = '' +# for species, el in zip(species_list, bool_list): +# if el: +# label = '{0}-{1}'.format(label, species) +# label = label[1:] +# label_list.append(label) +# r2s = "" +# for species in species_list: +# # if species=='La': +# # save_name = 'outputs' \ +# # '/parity_iterative_fitter_{0}_org_eq'.format(species) +# save_name = None +# fig, ax = estimator.parity_plot('{0}_org_eq'.format(species), +# c_data= +# exp_data['total_re'].values, +# c_label='Feed total RE ' +# 'molarity (mol/L)', +# print_r_squared=False, +# plot_title='') +# ax.plot([0, 0.05], [0, 0.05], c='b') +# ax.text(0.01, 0.04, +# '$R^2$={0:.2f}'.format(estimator.r_squared( +# '{0}_org_eq'.format(species)))) +# ax.set_xlim((0, 0.05)) +# ax.set_ylim((0, 0.05)) +# r2s += str(estimator.r_squared('{0}_org_eq'.format(species))) + ',' +# +# # fig, ax = estimator.parity_plot('{0}_org_eq'.format(species), +# # data_labels=list(labeled_data['label']), +# # print_r_squared=True, +# # save_path=save_name) +# # ax.legend(loc=4) +# pred_df = pd.DataFrame(estimator.get_predicted_dict()) +# new_cols = [] +# for col in pred_df.columns: +# new_cols.append("pred_{0}".format(col)) +# pred_df.columns = new_cols +# new_cols = ['label', +# 'h_i', +# 'h_eq', +# 'z_i', +# 'z_eq' +# ] +# for species in species_list: +# new_cols.append("{0}_aq_i".format(species)) +# new_cols.append("{0}_aq_eq".format(species)) +# new_cols.append("{0}_d_eq".format(species)) +# labeled_data.columns = new_cols +# total_df = labeled_data.join(pred_df) # total_df.to_csv('if_mse_total_df.csv') # short_info_dict = {} # for key, value in info_dict.items(): diff --git a/docs/Examples/iterative_fitter_monitor.py b/docs/Examples/iterative_fitter_monitor.py index c796242..fe2dbd8 100644 --- a/docs/Examples/iterative_fitter_monitor.py +++ b/docs/Examples/iterative_fitter_monitor.py @@ -8,7 +8,7 @@ parameters = 'slope,intercept,beta0,beta1'.split(',') # if go != 'y': # break # plt.close('all') -df = pd.read_csv('outputs/iterative_fitter_output.csv') +df = pd.read_csv('outputs/iterative_fitter_output4.csv') info_cols = {parameter: [] for parameter in parameters} for col in df.columns: for parameter in parameters: @@ -48,4 +48,4 @@ ax.plot(df['iter'].values[1:], ax.set_xlabel('iteration') ax.set_ylabel('Value') plt.tight_layout() -plt.savefig('outputs/rel_diff.png') +# plt.savefig('outputs/rel_diff.png') diff --git a/docs/Examples/outputs/best_obj.png b/docs/Examples/outputs/best_obj.png new file mode 100644 index 0000000000000000000000000000000000000000..753458eb1f12b309ae7942a77bf3fcaa6f881b7e GIT binary patch literal 18967 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

aDqIXZRwNDv1&VV#eEj}- zHx3|5dRnZ`Gct~6?aYeH!wQfyx|73x>wttIWQkThp-x6{&)b@2=i=nkh)fQ)D~1Qn zs_Z`Qk1PW!WrZ%F6TQtqjR2E}(wl(L#OXUaI&{6gy=%r5l$3IN{O7yVXYEZAA;An> z^Urw+RKgE@M7vMIe+;Y2>$Qtz=3sc$_r80(%^J=JyKr0{{OX zcqpL`@DMEB(Qw^S-0@zMG&|G~sH>~*gLXd+P?F)h zRU>s$q*Z=6t9Xa8Pxa_@>WC2o_>C!N$-wSx3nOE{ZEaLc4upT-i?bYCKUfn{-E|}i z;C}tOFMqJL<=Pf6uIpI)Cu4tWJ{5|bl)SvWXa%farMCV08roNAB0cK8m>-$;`m#J) zRs&hXcd2bKo)oIfawwCAMh!z{_PIba-3HN9zU!=$U?Y!!ZD;!a+PYmY=M}@R)2vZ~ zK4F&Vrdcy%s3cD+zfUjI;a-xX({XK2C$#*-0vLlEKo+t z2C`2l)PuT}9>&?7Nr>Ni57y`gBS)$Kz(w@b%H&=`8Vad{lYQ`wb0|)nY;RY9U{kLB zZfcAP584}~<@VBziC*g;{w}5MDu0tFq}lWCFe_xtxKI`~x_emIOouwvolG^6qq;r* zE%1)(>mYa=fB<->FWR>2^Z?}B_+=aTYk#(*Us_QiSPIci^0w=z2Nr~n#9Ba?+Z~y> zHDR!*?OxJ6nhw6=A+F3s$r`lz!7a*o-<}b$z+6ir#oW6S!)!Nk8noMU*i2668hPHj zxt-_SZ!BFH<25|s$Psv`^5}SV1G)ph{FvTCzr?GM*!}H~W;I@r<$k0rAt|CPaTL|j z&ixTu+w(Zghecsv`x&}TyE*WYneau0Nrt4_N9H`I?;$OC%x!;%lk>eGGPV$*MkXLCm%*VEHFo*p zWTnW?CH*6a3JKID1npR$@YQ??uXVXdW0OCjkh*en(|9}dbYp-7nTXkwKGTT+E+Dhr z{S%SCf7qk}4KKJnzhyI;64fuMk8>)u_X_jJr@6RD5@?lVa7dM3Xu#N6rdi!;A5HAo zKXG#@6v-d;x($jcJIzTddv=Kw8j~e8r=(We5=`3QMeN z%Hlx3;mFk&+dr!>u>4@d?H49N*?#t)>KT3FEDhWX;GLa zDh+WkKa+omg^)G!@h}7-a|bA90#r1V<%Znp(V9%2LK}E&(p=&#A49Gs=Eys6MMMp! z%3Vz#2H_E*zN+$?n3$Oo8(9D;E`Z0Ad;hZV6zjK2kHBq~bb0*iF~ z7@4~cfQ_hBC$4tXpy08I$~L8c&EiLuUcLCCf8>G^7U(6QZ5yp&68wf4ax))nlL`XF znjJfd05G6f+AsgSVYRM`Q|y*DUw~L zKPu0*pB_vwNZ{;tI)QNf1`;IxA+N~RY|^wTD6;LAyq1~Uv7MidmI3-6hdX6z{`3`y z&1N~WT~M_!37;J~aq{Ysyj^?xzTc!&1wlu>qyRZqCuq(liNbXUY#Ub^_5G?s)`n}Q z&yO_iJy;&bUo7<4(os_je2h&BdySZwP-NRK>F7wbX?Yc=!{u}KFro|7Nd8@e8nX8!ztKZ-H^G|U^B@~}ai@(U$ek!Bm#Pi8xY;5z6wqWK) z9+eaC{r4AGkN0j+&tjHQ;O{cB8h}~&);j9jlfqtz{F=^gm!Axb%!&}mPZ85I;uRb z#4pkA2DR)Yh4m7o{P&L{zDC9VnGO%_ce1jzV$o|bFI5oQ?DfbO>RI=Rvq`9WXVYxS zZy~7KXI~mGs^g<`P+Vsx$dcRUzA#c&+~HhhR5KnmH3FNHR^-z7y$rAZogkHy437XN z>9ZfXj-};Pb-qb@;+j;1bT{w&5RO8!fA2XQAH|PB*=dL7HAVGOH+gy3a_$Zg5%Qe* zMg7ZZxvt-F(QKiy&4=5YBA{-OJ%XMcJjw8}CI8_P9ci%^{^{~ywWUy)O ztXU=Wwf}iPFJdWXA-kF9l5m_e^!W{q^yOw{Ik~U^ zV;MbIET`$Q#e!6+K?xpnHo!(q)yCeF=4Qpa*WSqmbnwK{(yNEGS@uAZ=L{9q#YUbH zqwppm7}cQq2SUK!G_t%&+Cw@C9BG1%FC7j1YcAH*Jp$Ty@1pgGY)nb(s#{$+b2p&M z^=}Dw@W8W|FMo5F6HLrb(CmqNlKY=ac$C=qRWNS< zReyquk8g{rm56__;d=b~&*x-Y%ud10fr*%UkNOTupazgb3=fE2bg@GK;kMnU%W>(_ zjiRC=G^Fs~pJ(-mp5BFT0Iz=wr(ayrIP3=5h8tA+qNSri>S;sVPznei?$fokvqLq` z>=2ltdD?P^Q31CFEl|OEM9*yM~5w#HxwQ*_K494Jgpl2-s_6EU|2(1&EwmR;B~=7F40WuU6VLK(%1N@bzY@LZa(e zG&!SGo?Stu+?Ow3_CeoL>b9tJ1Pq-TNGnE-VohQ|5pLNQn;v6arw6|`V1#M`=6f<1 zA=}@n#9fnCcXG6f78;Hi#de6J@mkda`<+Conz0TO?|GIQ$f%>`5B-HEg@ArXeK*^} z?RC2(TCsx-=tP`kV7>OCgxKw9djM3^buL?T>ggF7wm_lpx0oEKz=l|W?4g^-U4IJ@ zd}4}UA5JU6um>EfmxTb@&x5+fiS7Ub#N0CbVKgXnHnTYX%0tR&SfK`d^()t$-9iYT zXvN+0zC|!{E98I{5$Io3Pd9#Yyt{I3fVC5cu>2}FcQiA|6DuoEoot0jA6`d)48Wmk z{tEO}4uzw6K| z>)buq{FkAczpFKdUl8IE$<0=N{c?x+1n&hlP;#IZ)GJ&ajxQlu4Oz@8Sm?9V)K{T~ z4=wRP)hh5tOgPxsUNgfoLBVurXb)%?M%5!bz|;3huK#lytuRH03sdxfG6w;u0pK*M z(gJD#sFp(5eW)}Ml?*XwLtKFV=76Bfj578;4vo-c5uyx-yv_h-W@ac;`8xmeWPGgV>CMt(Q@Vf$8$3hI>|Lb2Sy9P0@(Xf5 z$c?WCojJ>{%GO%Y z&g374PlLnK4h?^%_WkeO^Bu_B-QBch=szeBgzAPW-#?!c#rQIphs%M3FaojgJ7%=3 z!N|x+%yW$it21KBy*e#X7n`0u#N)6hQ&mbAZ+-kD0cC0f4=FIYimn=lG z6YwA%qcLDdHwQgvKw=H$q&sHepCThqv9Pk{e)^<=3UfgXr47;_P*?|)Te3s`Nz7>? z@PkSwB;>dE*3IZ8y|pd~Jy`RwGc$H{EEE$H`yAlm?%urY4%%Z4l}t_8OK6cMoFJ$Q z*8&R+K{aF!_KFsH|3Ty)r3LuLi@JOp&yN{{il&#KlG(2&)2#A8s(StQtvN0M!38K0 zmb-H&4Av%|+oYD-pxi+ax~DpI>b`QEP#eUX{P_6zhoeL9XCGD`ulrmCB>)d;?$ zw**Na(&|wMv=OL(lJoJY4v1rr^&|&-9{2-Z05}_S!ay+YS1|sI=kHI3{J@xNWsJSQ z$A@ugZ!o_i@*cI|{>7l-g`d|rs1Cb`jg8&g+xvS}2zg0$2p0b^BQsMTwjwCvAW5h0 z?7W_Z*HGiLo0FZb;85=KeXl8k@hlZp^2Ef1`aDkkPoc4KGNk?_4$7varDi84lAsFe zc=L~Y^$~?TPW_S|Hh$pvVGZtQ=+Vv1EgOD<0vr}GA>o>TMro-wObN6&v0`pHs4%^@ zR%&$}c$4MvIIiT%8rQF~}-Y}!Tr~rR>Z~T5QBeSnl`O^uRLNtzz*B;K=>x_P{pEnW`8s#r^IQjk6{Gu) z^4eNsFll{|{DdQWMIoo4KnHR`P_v!}l2N5d7@d}p5hsX}z-ghHm2$`N9pf^V3d2)v>I>UFfv5dB3GV0NB{gybeCUzZQ3qfz&3T9}K|#UE-Bl0B zj%gSf#qaO$f4*3po_-6mm_4xJ6W%otU<5jsY$AUKrj<*9Z?tOAxLrY7GzS?*RFAd!S!}aWe!9lk2;e4plw7Yk& z-U=lY;q`$7Rt3G!o0e%*>H>IS)#w;6a1u`MJ!&8Yp*$=;Lp8BL;ms9=$eGrd)R`H} z8m~>c(DU5=kX#4ukSnB-cgYYcz_b(;p2H3mgrAZrEi3b0B|jbpPU|fcCt9?;vw_-8 zv4G>x9THH!Uj+sin8On5u1lyw3sm^95sqC>L;`ukOt1mv@z4~2A_T#hivJhZ<-hqz btI5lfl_cYNQg$$6h{7$En*}%SJ^sG{uMZr( literal 0 HcmV?d00001 diff --git a/docs/Examples/outputs/beta0.png b/docs/Examples/outputs/beta0.png new file mode 100644 index 0000000000000000000000000000000000000000..4ad4ad759707b386755eeea2230ea09e7b4397db GIT binary patch literal 32169 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 E59|4N(f|Me literal 0 HcmV?d00001 diff --git a/docs/Examples/outputs/beta1.png b/docs/Examples/outputs/beta1.png new file mode 100644 index 0000000000000000000000000000000000000000..67222640c516fb6d5708ff916e7c67a7e64e020e GIT binary patch literal 27361 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 r#!v5k0M62*|23ohPl@S2f6Q;GdQil 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 I=WpEmf0t(f6#xJL literal 0 HcmV?d00001 diff --git a/docs/Examples/outputs/temp.xml b/docs/Examples/outputs/temp.xml index b218c2a..79377c5 100644 --- a/docs/Examples/outputs/temp.xml +++ b/docs/Examples/outputs/temp.xml @@ -33,7 +33,7 @@ 298.14999999999998 - -1376882.0784583509 + -1377917.5269485628 558.9824 0.0 @@ -50,7 +50,7 @@ 298.14999999999998 - -4924298.0880370205 + -4929625.060282971 1117.965 0.0 @@ -67,7 +67,7 @@ 298.14999999999998 - -4935685.119723228 + -4941397.084772181 1117.965 0.0 @@ -85,7 +85,7 @@ 298.14999999999998 - -4920369.042961768 + -4932551.489263242 1117.965 0.0 @@ -103,7 +103,7 @@ 298.14999999999998 - -4928639.61964031 + -4935194.142426379 1117.965 0.0 @@ -120,7 +120,7 @@ 298.14999999999998 - -4931991.722599618 + -4935179.480883835 1117.965 0.0 @@ -138,7 +138,7 @@ 298.14999999999998 - -4944682.264585918 + -4947210.070800013 1117.965 0.0 @@ -157,7 +157,7 @@ 298.14999999999998 - -4924669.3217661735 + -4929116.779371853 1117.965 0.0 @@ -245,10 +245,10 @@ - 0.058791091500561485, 0.0, 0.0, 0.0, 0.0 - 0.5448322248125199, 0.0, 0.0, 0.0, 0.0 + 0.058791077174068576, 0.0, 0.0, 0.0, 0.0 + 0.5448320238819658, 0.0, 0.0, 0.0, 0.0 0.0, 0.0, 0.0, 0.0, 0.0 - -0.02066999867229882, 0.0, 0.0, 0.0, 0.0 + -0.02066999867229882, 0.0, 0.0, 0.0, 0.0 2 0 @@ -261,10 +261,10 @@ - 1.213717095858249, 0.0, 0.0, 0.0, 0.0 - 7.7481294675488375, 0.0, 0.0, 0.0, 0.0 + 1.0825315776813356, 0.0, 0.0, 0.0, 0.0 + 6.211262701179254, 0.0, 0.0, 0.0, 0.0 0.0, 0.0, 0.0, 0.0, 0.0 - -0.01963615126026457, 0.0, 0.0, 0.0, 0.0 + -0.01963615126026457, 0.0, 0.0, 0.0, 0.0 2 0 @@ -277,10 +277,10 @@ - 1.0223168335791355, 0.0, 0.0, 0.0, 0.0 - 0.5296306654103653, 0.0, 0.0, 0.0, 0.0 + 0.5930048961782302, 0.0, 0.0, 0.0, 0.0 + 5.2771447352927785, 0.0, 0.0, 0.0, 0.0 0.0, 0.0, 0.0, 0.0, 0.0 - -0.024339999997603376, 0.0, 0.0, 0.0, 0.0 + -0.024339999997603376, 0.0, 0.0, 0.0, 0.0 2 0 @@ -293,10 +293,10 @@ - 0.7646372240575223, 0.0, 0.0, 0.0, 0.0 - 7.849276225207628, 0.0, 0.0, 0.0, 0.0 + 0.5532852863195881, 0.0, 0.0, 0.0, 0.0 + 9.206787175138805, 0.0, 0.0, 0.0, 0.0 0.0, 0.0, 0.0, 0.0, 0.0 - -0.019699989216349984, 0.0, 0.0, 0.0, 0.0 + -0.019699989216349984, 0.0, 0.0, 0.0, 0.0 2 0 @@ -309,10 +309,10 @@ - 0.20352350320923904, 0.0, 0.0, 0.0, 0.0 - 21.120419048363047, 0.0, 0.0, 0.0, 0.0 + 0.6005020116531858, 0.0, 0.0, 0.0, 0.0 + 4.91004437191519, 0.0, 0.0, 0.0, 0.0 0.0, 0.0, 0.0, 0.0, 0.0 - -0.02618999999473301, 0.0, 0.0, 0.0, 0.0 + -0.02618999999473301, 0.0, 0.0, 0.0, 0.0 2 0 @@ -325,10 +325,10 @@ - 0.8852797060008407, 0.0, 0.0, 0.0, 0.0 - 9.334636294454038, 0.0, 0.0, 0.0, 0.0 + 0.8866269789489127, 0.0, 0.0, 0.0, 0.0 + 9.867663759220948, 0.0, 0.0, 0.0, 0.0 0.0, 0.0, 0.0, 0.0, 0.0 - -0.015467323909969704, 0.0, 0.0, 0.0, 0.0 + -0.015467323909969704, 0.0, 0.0, 0.0, 0.0 2 0 @@ -341,10 +341,10 @@ - 0.6989083059080712, 0.0, 0.0, 0.0, 0.0 - 6.877881736471866, 0.0, 0.0, 0.0, 0.0 + 0.5978087860273482, 0.0, 0.0, 0.0, 0.0 + 5.279188095059934, 0.0, 0.0, 0.0, 0.0 0.0, 0.0, 0.0, 0.0, 0.0 - -0.019920000110321332, 0.0, 0.0, 0.0, 0.0 + -0.019920000110321332, 0.0, 0.0, 0.0, 0.0 2 0 diff --git a/docs/Examples/outputs/temp1.xml b/docs/Examples/outputs/temp1.xml new file mode 100644 index 0000000..d2ad522 --- /dev/null +++ b/docs/Examples/outputs/temp1.xml @@ -0,0 +1,716 @@ + + + + + + + Cl O H C P Nd Pr Ce La Dy Y Sm dummy + + + (HA)2(org) dodecane Nd(H(A)2)3(org) Pr(H(A)2)3(org) Ce(H(A)2)3(org) La(H(A)2)3(org) Dy(H(A)2)3(org) Sm(H(A)2)3(org) Y(H(A)2)3(org) + + + 298.15 + 100000.0 + + (HA)2(org): 0.25 + + + + + + + + + + + + + + + + C:16 H:35 O:3 P:1 + + + 298.14999999999998 + -1376882.3191117246 + 558.9824 + 0.0 + + + + 0.320974226079 + + + + + + C:48 H:102 O:9 P:3 Nd:1 + + + 298.14999999999998 + + -4925566.309854757 + 1117.965 + 0.0 + + + + 0.973500071223 + + + + + + C:48 H:102 O:9 P:3 Pr:1 + + + 298.14999999999998 + + -4938249.845712334 + 1117.965 + 0.0 + + + + 0.979936421078 + + + + + + + C:48 H:102 O:9 P:3 Ce:1 + + + 298.14999999999998 + + -4920387.823199008 + 1117.965 + 0.0 + + + + 1.0060487218 + + + + + + + C:48 H:102 O:9 P:3 La:1 + + + 298.14999999999998 + + -4933548.865580005 + 1117.965 + 0.0 + + + + 0.981485801577 + + + + + + C:48 H:102 O:9 P:3 Dy:1 + + + 298.14999999999998 + + -4932560.171447597 + 1117.965 + 0.0 + + + + 0.961666360676 + + + + + + + C:48 H:102 O:9 P:3 Y:1 + + + 298.14999999999998 + + -4944840.781582316 + 1117.965 + 0.0 + + + + 0.958888814485 + + + + + + + + C:48 H:102 O:9 P:3 Sm:1 + + + 298.14999999999998 + + -4924696.189921901 + 1117.965 + 0.0 + + + + 0.9642 + + + + + + + C:48 H:102 O:9 P:3 Gd:1 + + + 298.14999999999998 + + -4829446.858 + 1117.965 + 0.0 + + + + 0.9642 + + + + + + + dummy:1 + + + + 298.14999999999998 + + 0.0 + 0.0 + 0.0 + + + + 0.227113 + + + + + + + + + + H2O(L) H+ OH- Cl- Nd+++ Pr+++ Ce+++ La+++ Dy+++ Sm+++ Y+++ + + + + 298.15 + 100000.0 + + Cl-: 1.0E-7 + H+: 1.0E-7 + + + + + + + + + + + + 0.177000779, 0.000125778, 0.0, -33.4777082, -0.262214535 + 0.292922504, -0.027938838, 0.0, 3402.47027, 19.7936248 + 0.0, 0.0, 0.0, 0.0, 0.0 + 0.000362, -0.00003036, 0.0, -2.91038E-11, 0.0 + 2 + 12 + + refit of Holmes, H.F., Busey, J.M., Simonson, J.M., Mesmer, R.E., + Archer, D.G., and Wood, R.H., 1987, The enthalpy of dilution of HCl(aq) + to 648 K and 4p MPa. Thermodynamic properties, Journal of Chemical + Thermodynamics, v. 19, p. 863-890. + + + + + 0.05879108748614492, 0.0, 0.0, 0.0, 0.0 + 0.5448324180244323, 0.0, 0.0, 0.0, 0.0 + 0.0, 0.0, 0.0, 0.0, 0.0 + -0.02066999867229882, 0.0, 0.0, 0.0, 0.0 + 2 + 0 + + Table S1: Pitzer parameters for osmotic and activity coeff Supp Info. + May, P. M.; Rowland, D.; Hefter, G.; Konigsberger, E. + A generic and updatable Pitzer characterization of aqueous binary electrolyte + solutions at 1 bar and 25 C. + Journal of Chemical and Engineering Data 2011,56, 5066–5077. + + + + + 1.2137222016802447, 0.0, 0.0, 0.0, 0.0 + 7.748226963005033, 0.0, 0.0, 0.0, 0.0 + 0.0, 0.0, 0.0, 0.0, 0.0 + -0.01963615126026457, 0.0, 0.0, 0.0, 0.0 + 2 + 0 + + Table S1: Pitzer parameters for osmotic and activity coeff Supp Info. + May, P. M.; Rowland, D.; Hefter, G.; Konigsberger, E. + A generic and updatable Pitzer characterization of aqueous binary electrolyte + solutions at 1 bar and 25 C. + Journal of Chemical and Engineering Data 2011,56, 5066–5077. + + + + + 1.022316535866388, 0.0, 0.0, 0.0, 0.0 + 0.5296311209773129, 0.0, 0.0, 0.0, 0.0 + 0.0, 0.0, 0.0, 0.0, 0.0 + -0.024339999997603376, 0.0, 0.0, 0.0, 0.0 + 2 + 0 + + Table S1: Pitzer parameters for osmotic and activity coeff Supp Info. + May, P. M.; Rowland, D.; Hefter, G.; Konigsberger, E. + A generic and updatable Pitzer characterization of aqueous binary electrolyte + solutions at 1 bar and 25 C. + Journal of Chemical and Engineering Data 2011,56, 5066–5077. + + + + + 0.7646397332938777, 0.0, 0.0, 0.0, 0.0 + 7.849320590516409, 0.0, 0.0, 0.0, 0.0 + 0.0, 0.0, 0.0, 0.0, 0.0 + -0.019699989216349984, 0.0, 0.0, 0.0, 0.0 + 2 + 0 + + Table S1: Pitzer parameters for osmotic and activity coeff Supp Info. + May, P. M.; Rowland, D.; Hefter, G.; Konigsberger, E. + A generic and updatable Pitzer characterization of aqueous binary electrolyte + solutions at 1 bar and 25 C. + Journal of Chemical and Engineering Data 2011,56, 5066–5077. + + + + + 0.2035235053232368, 0.0, 0.0, 0.0, 0.0 + 21.120426174002823, 0.0, 0.0, 0.0, 0.0 + 0.0, 0.0, 0.0, 0.0, 0.0 + -0.02618999999473301, 0.0, 0.0, 0.0, 0.0 + 2 + 0 + + Table S1: Pitzer parameters for osmotic and activity coeff Supp Info. + May, P. M.; Rowland, D.; Hefter, G.; Konigsberger, E. + A generic and updatable Pitzer characterization of aqueous binary electrolyte + solutions at 1 bar and 25 C. + Journal of Chemical and Engineering Data 2011,56, 5066–5077. + + + + + 0.8852802073165494, 0.0, 0.0, 0.0, 0.0 + 9.334653075341238, 0.0, 0.0, 0.0, 0.0 + 0.0, 0.0, 0.0, 0.0, 0.0 + -0.015467323909969704, 0.0, 0.0, 0.0, 0.0 + 2 + 0 + + Table S1: Pitzer parameters for osmotic and activity coeff Supp Info. + May, P. M.; Rowland, D.; Hefter, G.; Konigsberger, E. + A generic and updatable Pitzer characterization of aqueous binary electrolyte + solutions at 1 bar and 25 C. + Journal of Chemical and Engineering Data 2011,56, 5066–5077. + + + + + 0.6989081585234721, 0.0, 0.0, 0.0, 0.0 + 6.877882600430561, 0.0, 0.0, 0.0, 0.0 + 0.0, 0.0, 0.0, 0.0, 0.0 + -0.019920000110321332, 0.0, 0.0, 0.0, 0.0 + 2 + 0 + + Table S1: Pitzer parameters for osmotic and activity coeff Supp Info. + May, P. M.; Rowland, D.; Hefter, G.; Konigsberger, E. + A generic and updatable Pitzer characterization of aqueous binary electrolyte + solutions at 1 bar and 25 C. + Journal of Chemical and Engineering Data 2011,56, 5066–5077. + + + + + + + H2O(L) + + + O H Nd Pr Ce La Dy Y Sm C N Cl P E + + + + + + + + + H:2 O:1 + + + + 7.255750050E+01, -6.624454020E-01, 2.561987460E-03, -4.365919230E-06, + 2.781789810E-09, -4.188654990E+04, -2.882801370E+02 + + + + + + 0.018068 + + + + + + OH- + O:1 H:1 + -1 + + + -37595 + -54977 + -2.56 + + + + 0.12527 + 7.38 + 1.8423 + -27821 + 4.15 + -103460 + 172460 + -4.18 + + + ref:G9 + + + + + NO3- + N:1 O:3 + -1 + + + -26507 + -49429 + 35.12 + + + + 0.73161 + 678.24 + -4.6838 + -30594 + 7.7 + -67250 + 109770 + 29.0 + + + ref:G9 + + + + + + + + + + Cl- + Cl:1 + -1 + + + -31379 + -39933 + 13.56 + + + + 0.4032 + 480.1 + 5.563 + -28470 + -4.4 + -57140 + 145600 + 17.79 + + ref:G9 + + + + H+ + H:1 + +1 + + + 0 + 0 + 0 + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + ref:G9 + + + + + Nd+++ + Nd:1 + +3 + + + -160600 + -166500 + -49.5 + + + + -0.33707 + -1454.52 + 8.3211 + -21777 + 1.6236 + -118344 + 225500 + -43.1 + + + ref:G9 + + + + + Pr+++ + Pr:1 + +3 + + + -162600 + -168800 + -50 + + + + -0.32406 + -1419.98 + 8.1257 + -21920 + -1.1975 + -127511 + 223500 + -42.1 + + + ref:G9 + + + + + + Ce+++ + Ce:1 + +3 + + + -161600 + -167400 + -49 + + + + -0.29292 + -1493.38 + 11.6196 + -21616 + 4.0445 + -108974 + 222510 + -39.8 + + + ref:G9 + + + + + + La+++ + La:1 + +3 + + + -164000 + -169600 + -52 + + + + -0.2788 + -1438.24 + 10.9602 + -21844 + 4.2394 + -106122 + 215720 + -38.6 + + + ref:G9 + + + + + + + Dy+++ + Dy:1 + +3 + + + -158700 + -166500 + -55.2 + + + + -0.30003 + -1510.74 + 11.6879 + -21545 + 9.5076 + -94919 + 237920 + -40.7 + + + ref:G9 + + + + + + Y+++ + Y:1 + +3 + + + -163800 + -170900 + -60 + + + + -0.30140 + -1514.08 + 11.7010 + -21531 + 7.1634 + -103067 + 237920 + -40.8 + + + ref:G9 + + + + + + + Sm+++ + Sm:1 + +3 + + + -159100 + -165200 + -50.7 + + + + -0.32065 + -1561.08 + 11.8857 + -21337 + 1.9385 + -118548 + 229550 + + + ref:G9 + + + + + + + Gd+++ + Gd:1 + +3 + + + -158600 + -164200 + -49.2 + + + + -0.29771 + -1505.06 + 11.6656 + -21568 + 6.5606 + -103474 + 232650 + + + ref:G9 + + + + + + + + + \ No newline at end of file diff --git a/docs/Examples/test_eval.py b/docs/Examples/test_eval.py new file mode 100644 index 0000000..b5c84b0 --- /dev/null +++ b/docs/Examples/test_eval.py @@ -0,0 +1,330 @@ +# This file tests adding 0.1 M NaCl to the feed. +import llepe +import pandas as pd +import numpy as np +import json +import matplotlib as plt +import matplotlib +import cantera as ct + + +class ModLLEPE(llepe.LLEPE): + def __init__(self, + exp_data, + phases_xml_filename, + phase_names, + aq_solvent_name, + extractant_name, + diluant_name, + complex_names, + extracted_species_ion_names, + extracted_species_list=None, + aq_solvent_rho=None, + extractant_rho=None, + diluant_rho=None, + opt_dict=None, + objective_function='Log-MSE', + optimizer='scipy_minimize', + temp_xml_file_path=None, + dependant_params_dict=None, + custom_objects_dict=None, + nacl_molarity=0): + self.nacl_molarity = nacl_molarity + super().__init__(exp_data, + phases_xml_filename, + phase_names, + aq_solvent_name, + extractant_name, + diluant_name, + complex_names, + extracted_species_ion_names, + extracted_species_list, + aq_solvent_rho, + extractant_rho, + diluant_rho, + opt_dict, + objective_function, + optimizer, + temp_xml_file_path, + dependant_params_dict, + custom_objects_dict) + + + def set_in_moles(self, feed_vol): + """Function that initializes mole fractions to input feed_vol + + This function is called at initialization + + Sets in_moles to a pd.DataFrame containing initial mole fractions + + Columns for species and rows for different experiments + + This function also calls update_predicted_dict + + :param feed_vol: (float) feed volume of mixture (L) + """ + phases_copy = self._phases.copy() + exp_df = self._exp_df.copy() + solvent_name = self._aq_solvent_name + extractant_name = self._extractant_name + diluant_name = self._diluant_name + solvent_rho = self._aq_solvent_rho + extractant_rho = self._extractant_rho + diluant_rho = self._diluant_rho + extracted_species_names = self._extracted_species_ion_names + extracted_species_list = self._extracted_species_list + + mixed = ct.Mixture(phases_copy) + aq_ind = None + solvent_ind = None + for ind, phase in enumerate(phases_copy): + if solvent_name in phase.species_names: + aq_ind = ind + solvent_ind = phase.species_names.index(solvent_name) + if aq_ind is None: + raise Exception('Solvent "{0}" not found \ + in xml file'.format(solvent_name)) + + if aq_ind == 0: + org_ind = 1 + else: + org_ind = 0 + self._aq_ind = aq_ind + self._org_ind = org_ind + extractant_ind = phases_copy[org_ind].species_names.index( + extractant_name) + diluant_ind = phases_copy[org_ind].species_names.index( + diluant_name) + + extracted_species_ind_list = [ + phases_copy[aq_ind].species_names.index( + extracted_species_name) + for extracted_species_name in extracted_species_names] + extracted_species_charges = np.array( + [phases_copy[aq_ind].species( + extracted_species_ind).charge + for extracted_species_ind in extracted_species_ind_list]) + self._extracted_species_charges = extracted_species_charges + + mix_aq = mixed.phase(aq_ind) + mix_org = mixed.phase(org_ind) + solvent_mw = mix_aq.molecular_weights[solvent_ind] # g/mol + extractant_mw = mix_org.molecular_weights[extractant_ind] + diluant_mw = mix_org.molecular_weights[diluant_ind] + if solvent_rho is None: + solvent_rho = mix_aq(aq_ind).partial_molar_volumes[ + solvent_ind] / solvent_mw * 1e6 # g/L + self._aq_solvent_rho = solvent_rho + if extractant_rho is None: + extractant_rho = mix_org(org_ind).partial_molar_volumes[ + extractant_ind] / extractant_mw * 1e6 + self._extractant_rho = extractant_rho + if diluant_rho is None: + diluant_rho = mix_org(org_ind).partial_molar_volumes[ + extractant_ind] / extractant_mw * 1e6 + self._diluant_rho = diluant_rho + + in_moles_data = [] + aq_phase_solvent_moles = feed_vol * solvent_rho / solvent_mw + for index, row in exp_df.iterrows(): + h_plus_moles = feed_vol * row['h_i'] + hydroxide_ions = 0 + extracted_species_moles = np.array( + [feed_vol * row['{0}_aq_i'.format( + extracted_species)] + for extracted_species in extracted_species_list]) + extracted_species_charge_sum = np.sum( + extracted_species_charges * extracted_species_moles) + chlorine_moles = extracted_species_charge_sum + h_plus_moles + extractant_moles = feed_vol * row['z_i'] + extractant_vol = extractant_moles * extractant_mw / extractant_rho + diluant_vol = feed_vol - extractant_vol + diluant_moles = diluant_vol * diluant_rho / diluant_mw + complex_moles = np.zeros(len(extracted_species_list)) + + species_moles_aq = [aq_phase_solvent_moles, + h_plus_moles, + hydroxide_ions, + chlorine_moles] + species_moles_aq.extend(list(extracted_species_moles)) + species_moles_aq.append(self.nacl_molarity * feed_vol) + species_moles_aq[3] += self.nacl_molarity * feed_vol + species_moles_org = [extractant_moles, diluant_moles] + species_moles_org.extend(list(complex_moles)) + if aq_ind == 0: + species_moles = species_moles_aq + species_moles_org + else: + species_moles = species_moles_org + species_moles_aq + in_moles_data.append(species_moles) + + self._in_moles = pd.DataFrame( + in_moles_data, columns=mixed.species_names) + self.update_predicted_dict() + return None + + +font = {'family': 'sans serif', + 'size': 24} +matplotlib.rc('font', **font) +plt.rc('xtick', labelsize=18) +plt.rc('ytick', labelsize=18) +plt.rcParams['lines.linewidth'] = 4 +matplotlib.rcParams['lines.markersize'] = 10 + + +def ext_to_complex(h0, custom_obj_dict, mini_species): + linear_params = custom_obj_dict['lin_param_df'] + row = linear_params[linear_params['species'] == mini_species] + return row['slope'].values[0] * h0[0] + row['intercept'].values[0] + + +def mod_lin_param_df(lp_df, input_val, mini_species, mini_lin_param): + new_lp_df = lp_df.copy() + index = new_lp_df.index[new_lp_df['species'] == mini_species].tolist()[0] + new_lp_df.at[index, mini_lin_param] = input_val + return new_lp_df + + +info_df = pd.read_csv('outputs/multi_only_iterative_fitter_output.csv') +test_row = -1 +pitzer_params_filename = "../../data/jsons/min_h0_pitzer_params.txt" +with open(pitzer_params_filename) as file: + pitzer_params_dict = json.load(file) +pitzer_params_df = pd.DataFrame(pitzer_params_dict) +species_list = 'Nd,Pr,Ce,La,Dy,Sm,Y'.split(',') +pitzer_param_list = ['beta0', 'beta1'] +labeled_data = pd.read_csv("../../data/csvs/" + "no_formiga_or_5_oa_PC88A_HCL_NdPrCeLaDySmY.csv") +labeled_data = labeled_data.sort_values(['Feed Pr[M]', 'Feed Ce[M]'], + ascending=True) +exp_data = labeled_data.drop(labeled_data.columns[0], axis=1) +xml_file = "test_PC88A_HCL_NdPrCeLaDySmY_w_pitzer.xml" +lin_param_df = pd.read_csv("../../data/csvs" + "/zeroes_removed_min_h0_pitzer_lin_params.csv") +estimator_params = {'exp_data': exp_data, + 'phases_xml_filename': xml_file, + 'phase_names': ['HCl_electrolyte', 'PC88A_liquid'], + 'aq_solvent_name': 'H2O(L)', + 'extractant_name': '(HA)2(org)', + 'diluant_name': 'dodecane', + 'complex_names': ['{0}(H(A)2)3(org)'.format(species) + for species in species_list], + 'extracted_species_ion_names': ['{0}+++'.format(species) + for species in + species_list], + 'aq_solvent_rho': 1000.0, + 'extractant_rho': 960.0, + 'diluant_rho': 750.0, + 'temp_xml_file_path': 'outputs/temp.xml', + 'objective_function': llepe.lmse_perturbed_obj, + 'nacl_molarity': 0 + } +dependant_params_dict = {} +for species, complex_name in zip(species_list, + estimator_params['complex_names']): + inner_dict = {'upper_element_name': 'species', + 'upper_attrib_name': 'name', + 'upper_attrib_value': complex_name, + 'lower_element_name': 'h0', + 'lower_attrib_name': None, + 'lower_attrib_value': None, + 'input_format': '{0}', + 'function': ext_to_complex, + 'kwargs': {"mini_species": species}, + 'independent_params': '(HA)2(org)_h0'} + dependant_params_dict['{0}_h0'.format(complex_name)] = inner_dict +info_dict = {'(HA)2(org)_h0': {'upper_element_name': 'species', + 'upper_attrib_name': 'name', + 'upper_attrib_value': '(HA)2(org)', + 'lower_element_name': 'h0', + 'lower_attrib_name': None, + 'lower_attrib_value': None, + 'input_format': '{0}', + 'input_value': + info_df.iloc[test_row, :]['best_ext_h0']}} +for species in species_list: + for pitzer_param in pitzer_param_list: + pitzer_str = "{0}_{1}".format(species, pitzer_param) + value = info_df.iloc[test_row, :][pitzer_str] + pitzer_params_dict[pitzer_str]['input_value'] = value + lin_str = "{0}_slope".format(species) + inner_dict = {'custom_object_name': 'lin_param_df', + 'function': mod_lin_param_df, + 'kwargs': {'mini_species': species, + 'mini_lin_param': 'slope'}, + 'input_value': 3 + } + info_dict[lin_str] = inner_dict + lin_str = "{0}_intercept".format(species) + value = info_df.iloc[test_row, :][lin_str] + inner_dict = {'custom_object_name': 'lin_param_df', + 'function': mod_lin_param_df, + 'kwargs': {'mini_species': species, + 'mini_lin_param': 'intercept'}, + 'input_value': value + } + info_dict[lin_str] = inner_dict + +info_dict.update(pitzer_params_dict) +estimator = ModLLEPE(**estimator_params) +estimator.set_custom_objects_dict({'lin_param_df': lin_param_df}) +estimator.update_custom_objects_dict(info_dict) +estimator.update_xml(info_dict, + dependant_params_dict=dependant_params_dict) +exp_data = estimator.get_exp_df() +feed_cols = [] +for col in exp_data.columns: + if 'aq_i' in col: + feed_cols.append(col) +exp_data['total_re'] = exp_data[feed_cols].sum(axis=1) +label_list = [] +for index, row in exp_data[feed_cols].iterrows(): + bool_list = list((row > 0).values) + label = '' + for species, el in zip(species_list, bool_list): + if el: + label = '{0}-{1}'.format(label, species) + label = label[1:] + label_list.append(label) +r2s = "" +for species in species_list: + # if species=='La': + # save_name = 'outputs' \ + # '/parity_iterative_fitter_{0}_org_eq'.format(species) + save_name = None + # fig, ax = estimator.parity_plot('{0}_org_eq'.format(species), + # c_data='z_i', + # c_label='Feed total RE ' + # 'molarity (mol/L)', + # print_r_squared=True, + # save_path=save_name) + r2s += str(estimator.r_squared('{0}_org_eq'.format(species))) + ',' + + fig, ax = estimator.parity_plot('{0}_org_eq'.format(species), + data_labels=list(labeled_data['label']), + print_r_squared=True, + save_path=save_name) + ax.legend(loc=4) +pred_df = pd.DataFrame(estimator.get_predicted_dict()) +new_cols = [] +for col in pred_df.columns: + new_cols.append("pred_{0}".format(col)) +pred_df.columns = new_cols +new_cols = ['label', + 'h_i', + 'h_eq', + 'z_i', + 'z_eq' + ] +for species in species_list: + new_cols.append("{0}_aq_i".format(species)) + new_cols.append("{0}_aq_eq".format(species)) + new_cols.append("{0}_d_eq".format(species)) +labeled_data.columns = new_cols +total_df = labeled_data.join(pred_df) +# total_df.to_csv('if_mse_total_df.csv') +# short_info_dict = {} +# for key, value in info_dict.items(): +# short_info_dict[key] = value['input_value'] +# with open("outputs/iterative_fitter_short_info_dict.txt", 'w') as file: +# json.dump(short_info_dict, file) diff --git a/llepe/llepe.py b/llepe/llepe.py index 7a12f67..d07dae7 100644 --- a/llepe/llepe.py +++ b/llepe/llepe.py @@ -26,7 +26,7 @@ class LLEPE: must be the same order as they appear in the xml, complex_names and extracted_species_ion_names. - For example, say in exp_csv_filename's csv, ES_1 is Nd ES_2 is Pr, + For example, say in exp_data, ES_1 is Nd ES_2 is Pr, and .. code-block:: python @@ -37,7 +37,7 @@ class LLEPE: Then: - The csvs column ordering must be: + The exp_data column ordering must be (names do not matter): [h_i, h_eq, z_i, z_eq, Nd_aq_i, Nd_aq_eq, Nd_d_eq, Pr_aq_i, Pr_aq_eq, Pr_d_eq] @@ -372,6 +372,7 @@ class LLEPE: self._predicted_dict = None self.update_predicted_dict() + # TODO: move scipy_minimize to optimizers @staticmethod def scipy_minimize(objective, x_guess, optimizer_kwargs=None): """ The default optimizer for LLEPE @@ -406,6 +407,7 @@ class LLEPE: est_parameters = res.x return est_parameters, res.fun + # TODO: move log_mean_squared_error to objectives def log_mean_squared_error(self, predicted_dict, meas_df): """Default objective function for LLEPE @@ -685,6 +687,11 @@ class LLEPE: self._diluant_rho = diluant_rho return None + # TODO: Change input DataFrame structure to contain information about + # other species like NaCl + # TODO: Change DataFrame structure to contain info about O/A ratio + # TODO: Generalize code to more than just org and aq phase (3+ phases) + # TODO: Handle multiple electrolytes ie. NO3- with Cl- def set_in_moles(self, feed_vol): """Function that initializes mole fractions to input feed_vol @@ -768,7 +775,7 @@ class LLEPE: for extracted_species in extracted_species_list]) extracted_species_charge_sum = np.sum( extracted_species_charges * extracted_species_moles) - chlorine_moles = extracted_species_charge_sum + h_plus_moles + anion_moles = extracted_species_charge_sum + h_plus_moles extractant_moles = feed_vol * row['z_i'] extractant_vol = extractant_moles * extractant_mw / extractant_rho diluant_vol = feed_vol - extractant_vol @@ -778,7 +785,7 @@ class LLEPE: species_moles_aq = [aq_phase_solvent_moles, h_plus_moles, hydroxide_ions, - chlorine_moles] + anion_moles] species_moles_aq.extend(list(extracted_species_moles)) species_moles_org = [extractant_moles, diluant_moles] species_moles_org.extend(list(complex_moles)) @@ -927,6 +934,10 @@ class LLEPE: self._custom_objects_dict = custom_objects_dict return None + # TODO: Change DataFrame strucutre to contain info whether to set + # equilibrium pH to measured value. Will be useful for saponification + # TODO: Find way to add saponification to model. + # Maybe use fsolve to match experimental equilibrium pH def update_predicted_dict(self, phases_xml_filename=None, phase_names=None): @@ -1342,7 +1353,9 @@ class LLEPE: filtered_meas = filtered_data['meas'] filtered_pred = filtered_data['pred'] if len(filtered_pred) != 0: - ax.scatter(filtered_meas, filtered_pred, label=label) + ax.scatter(filtered_meas, + filtered_pred, + label=label) if legend: ax.legend(loc='best') @@ -1427,6 +1440,8 @@ class LLEPE: z_label=None, c_label=None): """ + THis is for plotting 3d scatter plots. + We suggest use matplotlib's ax.scatter to make 3d plots. :param x_data: (list) list of data for x axis :param y_data: (list) list of data for y axis diff --git a/llepe/optimizers.py b/llepe/optimizers.py index 49d3646..14db2af 100644 --- a/llepe/optimizers.py +++ b/llepe/optimizers.py @@ -1,12 +1,12 @@ import scipy.optimize as scipy_opt from scipy.optimize import minimize -# import skopt + def dual_anneal_optimizer(objective, x_guess): bounds = [(1e-1, 1e1)] * len(x_guess) bounds[1] = (1e-1, 2) res = scipy_opt.dual_annealing(objective, - [(1e-1, 1e1)]*len(x_guess), + [(1e-1, 1e1)] * len(x_guess), x0=x_guess) est_parameters = res.x return est_parameters, res.fun @@ -19,21 +19,3 @@ def diff_evo_optimizer(objective, x_guess): bounds) est_parameters = res.x return est_parameters, res.fun - - -# def forest_lbfgsb_optimizer(objective, x_guess): -# x_guess = list(x_guess) -# bounds = [(1e-1, 1e1)]*len(x_guess) -# bounds[1] = (1e-1, 2) -# res = skopt.forest_minimize(objective, -# bounds, -# random_state=1, -# acq_func='LCB', -# n_random_starts=30, -# x0=x_guess, -# xi=1e-4) -# x_guess = res.x -# optimizer_kwargs = {"method": 'l-bfgs-b', -# "bounds": bounds} -# res = minimize(objective, x_guess, **optimizer_kwargs) -# return res.x, res.fun