From 5d81f7e357ed42ca7b668a7168d83e7754724378 Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Mon, 5 Feb 2024 00:25:36 -0300 Subject: [PATCH 001/167] Starting python interface drafts --- ci/ci.sh | 10 +++++++- python/cubic_eos.py | 52 +++++++++++++++++++++++++++++++++++++++++ python/yaeos_python.f90 | 28 ++++++++++++++++++++++ 3 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 python/cubic_eos.py create mode 100644 python/yaeos_python.f90 diff --git a/ci/ci.sh b/ci/ci.sh index df29eab8f..dfb532f21 100644 --- a/ci/ci.sh +++ b/ci/ci.sh @@ -57,6 +57,14 @@ run_coverage() { COVER=$(echo "$COVER" | grep TOTAL | awk '{print $4}' | tr -d '%') } +python_wrappers(){ + fpm install --profile release --prefix build/python + f2py \ + -I ../build/tmp/include \ + -L ../build/tmp/lib/libyaeos.a \ + -m yaeos -c yaeos_python.f90 ../build/tmp/lib/libyaeos.a +} + resumee() { [ $DID_TEST = 1 ] && echo There has been $NAMING_ERRORS test naming errors @@ -77,4 +85,4 @@ case $1 in run_coverage;; esac -resumee \ No newline at end of file +resumee diff --git a/python/cubic_eos.py b/python/cubic_eos.py new file mode 100644 index 000000000..9df9b5320 --- /dev/null +++ b/python/cubic_eos.py @@ -0,0 +1,52 @@ +"""CubicEoS interface +""" +import numpy as np +from yaeos import yaeos_python + + +class CubicEoS: + + def __init__(self, tc, pc, w, kij, lij): + self.tc = tc + self.pc = pc + self.w = w + self.kij = kij + self.lij = lij + self.id = np.array(id(self), np.int64) + + def set_parameters(foo): + from functools import wraps + + @wraps(foo) + def checker(self, *args, **kwargs): + if self.id != yaeos_python.running_model: + yaeos_python.running_model = self.id + yaeos_python.pr76(tc, pc, w, kij, lij) + return foo(self, *args, **kwargs) + + return checker + + @set_parameters + def fugacity(self, n, v, t): + return yaeos_python.fugacity( + n, v, t + ) + + +tc = np.array([190, 310]) +pc = np.array([14, 30]) +w = np.array([0.001, 0.03]) + +kij = np.zeros((2, 2)) +kij[0, 1] = 0.1 +kij[1, 0] = 0.1 +lij = kij/2 + +m1 = CubicEoS(tc, pc, w, kij, lij) +m2 = CubicEoS(tc, pc, w, kij, lij) + +n = [0.3, 0.7] +v = 1 +t = 150 + +m1.fugacity(n, v, t) \ No newline at end of file diff --git a/python/yaeos_python.f90 b/python/yaeos_python.f90 new file mode 100644 index 000000000..68e3c8da9 --- /dev/null +++ b/python/yaeos_python.f90 @@ -0,0 +1,28 @@ +module yaeos_python + use yaeos, only: ArModel, PengRobinson76, fugacity_vt, CubicEoS + implicit none + + class(ArModel), allocatable, private :: model + + integer(8) :: running_model=0 + +contains + + subroutine pr76(tc, pc, w, kij, lij) + real(8), intent(in) :: tc(:), pc(:), w(:), kij(:, :), lij(:, :) + model = PengRobinson76(tc, pc, w, kij, lij) + end subroutine + + subroutine fugacity(n, v, t, lnfug, dlnphidp, dlnphidt, dlnphidn) + real(8), intent(in) :: n(:), v, t + real(8), intent(out) :: lnfug(size(n)) + real(8) :: p + + real(8), optional, intent(in out) :: dlnphidp(size(n)), dlnphidt(size(n)), dlnphidn(size(n), size(n)) + + call fugacity_vt(& + model, & + n, V, T, P, lnfug, dlnPhidP, dlnphidT, dlnPhidn & + ) + end subroutine +end module From 0c685abb8033117757877744e5b585264897ed06 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Mon, 26 Feb 2024 10:13:53 -0300 Subject: [PATCH 002/167] makefile to generate compiled library --- python/Makefile | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 python/Makefile diff --git a/python/Makefile b/python/Makefile new file mode 100644 index 000000000..a8db1c790 --- /dev/null +++ b/python/Makefile @@ -0,0 +1,6 @@ +all: + fpm install --profile release --prefix build/python + f2py -m yaeos \ + -L ../build/python/lib/libyaeos.a \ + -I ../build/python/include \ + -c yaeos_python.f90 From 7c484890334596fd7c9e2677a80d72e4f8a66c01 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Mon, 26 Feb 2024 10:14:49 -0300 Subject: [PATCH 003/167] cubic_eos --- python/cubic_eos.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/python/cubic_eos.py b/python/cubic_eos.py index 9df9b5320..37979ee29 100644 --- a/python/cubic_eos.py +++ b/python/cubic_eos.py @@ -49,4 +49,6 @@ def fugacity(self, n, v, t): v = 1 t = 150 -m1.fugacity(n, v, t) \ No newline at end of file +m1.fugacity(n, v, t) + +print(m1.fugacity(n, v, t)) From a10f57b9b79bce0448f9e629146ad79b93f89d63 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Mon, 26 Feb 2024 10:37:19 -0300 Subject: [PATCH 004/167] simplifying dirs for now --- python/Makefile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/python/Makefile b/python/Makefile index a8db1c790..b415882d9 100644 --- a/python/Makefile +++ b/python/Makefile @@ -1,6 +1,7 @@ -all: +python: fpm install --profile release --prefix build/python f2py -m yaeos \ -L ../build/python/lib/libyaeos.a \ -I ../build/python/include \ - -c yaeos_python.f90 + -c yaeos_c.f90 + mv yaeos.* yaeos/ From cab37e5f0755c75d862b4f13ca68db32aa50f318 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Mon, 26 Feb 2024 10:38:31 -0300 Subject: [PATCH 005/167] going straight to C makes much more sense --- python/{yaeos_python.f90 => yaeos_c.f90} | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) rename python/{yaeos_python.f90 => yaeos_c.f90} (50%) diff --git a/python/yaeos_python.f90 b/python/yaeos_c.f90 similarity index 50% rename from python/yaeos_python.f90 rename to python/yaeos_c.f90 index 68e3c8da9..447c45bce 100644 --- a/python/yaeos_python.f90 +++ b/python/yaeos_c.f90 @@ -1,24 +1,26 @@ -module yaeos_python +module yaeos_c + !! C interface to yaeos subroutines + use iso_c_binding, only: c_double, c_int use yaeos, only: ArModel, PengRobinson76, fugacity_vt, CubicEoS implicit none class(ArModel), allocatable, private :: model - integer(8) :: running_model=0 + integer(c_int) :: running_model=0 contains subroutine pr76(tc, pc, w, kij, lij) - real(8), intent(in) :: tc(:), pc(:), w(:), kij(:, :), lij(:, :) + real(c_double), intent(in) :: tc(:), pc(:), w(:), kij(:, :), lij(:, :) model = PengRobinson76(tc, pc, w, kij, lij) end subroutine subroutine fugacity(n, v, t, lnfug, dlnphidp, dlnphidt, dlnphidn) - real(8), intent(in) :: n(:), v, t - real(8), intent(out) :: lnfug(size(n)) - real(8) :: p + real(c_double), intent(in) :: n(:), v, t + real(c_double), intent(out) :: lnfug(size(n)) + real(c_double) :: p - real(8), optional, intent(in out) :: dlnphidp(size(n)), dlnphidt(size(n)), dlnphidn(size(n), size(n)) + real(c_double), optional, intent(in out) :: dlnphidp(size(n)), dlnphidt(size(n)), dlnphidn(size(n), size(n)) call fugacity_vt(& model, & From 3437e7d0ce492ac7b534717d5e53e0e29c5f317a Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Mon, 26 Feb 2024 10:39:57 -0300 Subject: [PATCH 006/167] giving this a more pythonic structure --- python/yaeos/core.py | 54 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 python/yaeos/core.py diff --git a/python/yaeos/core.py b/python/yaeos/core.py new file mode 100644 index 000000000..44606e9e3 --- /dev/null +++ b/python/yaeos/core.py @@ -0,0 +1,54 @@ +"""CubicEoS interface +""" +import numpy as np +from yaeos import yaeos_c as yaeos + + +class CubicEoS: + + def __init__(self, tc, pc, w, kij, lij): + self.tc = tc + self.pc = pc + self.w = w + self.kij = kij + self.lij = lij + self.id = np.array(id(self), np.int64) + + def set_parameters(foo): + from functools import wraps + + @wraps(foo) + def checker(self, *args, **kwargs): + if self.id != yaeos.running_model: + yaeos.running_model = self.id + yaeos.pr76(tc, pc, w, kij, lij) + return foo(self, *args, **kwargs) + + return checker + + @set_parameters + def fugacity(self, n, v, t): + return yaeos.fugacity( + n, v, t + ) + + +tc = np.array([190, 310]) +pc = np.array([14, 30]) +w = np.array([0.001, 0.03]) + +kij = np.zeros((2, 2)) +kij[0, 1] = 0.1 +kij[1, 0] = 0.1 +lij = kij/2 + +m1 = CubicEoS(tc, pc, w, kij, lij) +m2 = CubicEoS(tc, pc, w, kij, lij) + +n = [0.3, 0.7] +v = 1 +t = 150 + +m1.fugacity(n, v, t) + +print(m1.fugacity(n, v, t)) From 3a31c89102b873bcd51c1168df98db4bf6270d59 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Mon, 26 Feb 2024 10:40:07 -0300 Subject: [PATCH 007/167] moved --- python/cubic_eos.py | 54 --------------------------------------------- 1 file changed, 54 deletions(-) delete mode 100644 python/cubic_eos.py diff --git a/python/cubic_eos.py b/python/cubic_eos.py deleted file mode 100644 index 37979ee29..000000000 --- a/python/cubic_eos.py +++ /dev/null @@ -1,54 +0,0 @@ -"""CubicEoS interface -""" -import numpy as np -from yaeos import yaeos_python - - -class CubicEoS: - - def __init__(self, tc, pc, w, kij, lij): - self.tc = tc - self.pc = pc - self.w = w - self.kij = kij - self.lij = lij - self.id = np.array(id(self), np.int64) - - def set_parameters(foo): - from functools import wraps - - @wraps(foo) - def checker(self, *args, **kwargs): - if self.id != yaeos_python.running_model: - yaeos_python.running_model = self.id - yaeos_python.pr76(tc, pc, w, kij, lij) - return foo(self, *args, **kwargs) - - return checker - - @set_parameters - def fugacity(self, n, v, t): - return yaeos_python.fugacity( - n, v, t - ) - - -tc = np.array([190, 310]) -pc = np.array([14, 30]) -w = np.array([0.001, 0.03]) - -kij = np.zeros((2, 2)) -kij[0, 1] = 0.1 -kij[1, 0] = 0.1 -lij = kij/2 - -m1 = CubicEoS(tc, pc, w, kij, lij) -m2 = CubicEoS(tc, pc, w, kij, lij) - -n = [0.3, 0.7] -v = 1 -t = 150 - -m1.fugacity(n, v, t) - -print(m1.fugacity(n, v, t)) From b8ed6f92479ba42223bbfc9d101fb1fcee592431 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Sun, 3 Mar 2024 11:27:49 -0300 Subject: [PATCH 008/167] tpd procedure --- app/tpd.f90 | 37 ++++++++++++++++++++++++++++++ src/phase_equilibria/stability.f90 | 19 +++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 app/tpd.f90 create mode 100644 src/phase_equilibria/stability.f90 diff --git a/app/tpd.f90 b/app/tpd.f90 new file mode 100644 index 000000000..142dfff7c --- /dev/null +++ b/app/tpd.f90 @@ -0,0 +1,37 @@ +program main + use yaeos_constants, only: pr + use yaeos_substance, only: Substances + use yaeos_models, only: PengRobinson76, ArModel + use yaeos_thermoprops, only: fugacity_tp + use yaeos_phase_equilibria_stability, only: tangent_plane_distance + type(Substances) :: compos + class(ArModel), allocatable :: model + + real(pr) :: tc(2), pc(2), af(2), lnfug_z(2), lnfug_w(2) + real(pr) :: w(2), z(2), t, p + real(pr) :: tpd + + integer :: i + + z = [0.4, 0.6] + tc = [190.564, 425.12] + pc = [45.99, 37.96] + af = [0.0115478, 0.200164] + model = PengRobinson76(tc, pc, af) + + P = 60 + t = 294 + + call fugacity_tp(model, z, t, p, root_type="stable", lnfug=lnfug_z) + + lnfug_z = lnfug_z - log(P) + do i=1,99 + w(1) = real(i, pr)/100 + w(2) = 1 - w(1) + call fugacity_tp(model, w, t, p, lnfug=lnfug_w, root_type="stable") + + call tangent_plane_distance(z, lnfug_z, w, lnfug_w-log(P), tpd) + print *, i, tpd + end do + +end program diff --git a/src/phase_equilibria/stability.f90 b/src/phase_equilibria/stability.f90 new file mode 100644 index 000000000..e99ee3522 --- /dev/null +++ b/src/phase_equilibria/stability.f90 @@ -0,0 +1,19 @@ +module yaeos_phase_equilibria_stability + use yaeos_constants, only: pr + use yaeos_models_ar, only: ArModel + use yaeos_thermoprops, only: fugacity_vt + implicit none + +contains + + subroutine tangent_plane_distance(z, lnphi_z, w, lnphi_w, tpd) + real(pr), intent(in) :: z(:) !! Test phase composition + real(pr), intent(in) :: lnphi_z(:) !! Test phase composition + real(pr), intent(in) :: w(:) !! Trial phase composition + real(pr), intent(in) :: lnphi_w(:) !! Trial phase composition + + real(pr), intent(out) :: tpd !! Tangent plane distance + + tpd = sum(w * (log(w) + lnphi_w - log(z) - lnphi_z)) + end subroutine +end module From c7121d31cc821876587c3ebfacfbb2b9dd73a20b Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Wed, 6 Mar 2024 12:08:06 -0300 Subject: [PATCH 009/167] using bobyqa for tpd --- app/tpd.f90 | 37 +++++++++++++++++++++++++++---------- fpm.toml | 3 ++- 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/app/tpd.f90 b/app/tpd.f90 index 142dfff7c..9b6166ee4 100644 --- a/app/tpd.f90 +++ b/app/tpd.f90 @@ -6,9 +6,10 @@ program main use yaeos_phase_equilibria_stability, only: tangent_plane_distance type(Substances) :: compos class(ArModel), allocatable :: model + integer, parameter :: n = 2 - real(pr) :: tc(2), pc(2), af(2), lnfug_z(2), lnfug_w(2) - real(pr) :: w(2), z(2), t, p + real(pr) :: tc(n), pc(n), af(n), lnfug_z(n), lnfug_w(n) + real(pr) :: w(n), z(n), t, p real(pr) :: tpd integer :: i @@ -23,15 +24,31 @@ program main t = 294 call fugacity_tp(model, z, t, p, root_type="stable", lnfug=lnfug_z) - lnfug_z = lnfug_z - log(P) - do i=1,99 - w(1) = real(i, pr)/100 - w(2) = 1 - w(1) - call fugacity_tp(model, w, t, p, lnfug=lnfug_w, root_type="stable") - call tangent_plane_distance(z, lnfug_z, w, lnfug_w-log(P), tpd) - print *, i, tpd - end do + opt: block + use powellopt, only: bobyqa + real(pr) :: wl(2), wu(2) + integer :: npt + + npt = (n+2 + (n+1)*(n+2)/2) / 2 + wl = 1.e-5_pr + wu = 1 + call bobyqa(n, npt, w, wl, wu, 0.01_pr, 1.e-5_pr, 0, 100, func) + print *, w/sum(w) + end block opt + +contains + subroutine func(n, x, f) + integer, intent(in) :: n + real(pr), intent(in) :: x(:) + real(pr), intent(out) :: f + + real(pr), dimension(size(x)) :: w, lnfug_w + + w = x/sum(x) + call fugacity_tp(model, w, t, p, lnfug=lnfug_w, root_type="stable") + call tangent_plane_distance(z, lnfug_z, w, lnfug_w-log(P), f) + end subroutine end program diff --git a/fpm.toml b/fpm.toml index cae5e0672..693247d94 100644 --- a/fpm.toml +++ b/fpm.toml @@ -23,7 +23,8 @@ source-form = "free" stdlib = "*" test-drive = {git = "https://github.com/fortran-lang/test-drive"} json-fortran = {git="https://github.com/jacobwilliams/json-fortran"} - +nlopt-f = {git="https://github.com/grimme-lab/nlopt-f"} +PowellOpt = { git="https://github.com/jacobwilliams/PowellOpt.git" } [[example]] name = "example" From 3489d23f759499b9b2dda90099c7b0620f1113e8 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Sun, 24 Mar 2024 20:36:05 -0300 Subject: [PATCH 010/167] python extension generator --- ci/ci.sh | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/ci/ci.sh b/ci/ci.sh index c7911f505..b9fce2ead 100644 --- a/ci/ci.sh +++ b/ci/ci.sh @@ -70,11 +70,13 @@ run_coverage() { } python_wrappers(){ - fpm install --profile release --prefix build/python + BUILD_DIR="build/python" + fpm install --profile release --prefix "$BUILD_DIR" + cd python/yaeos f2py \ - -I ../build/tmp/include \ - -L ../build/tmp/lib/libyaeos.a \ - -m yaeos -c yaeos_python.f90 ../build/tmp/lib/libyaeos.a + -I ../../$BUILD_DIR/include \ + -L ../../$BUILD_DIR/lib/libyaeos.a \ + -m yaeos -c ../yaeos_c.f90 ../../$BUILD_DIR/lib/libyaeos.a } resumee() { @@ -92,6 +94,7 @@ case $1 in "install") install_fpm;; "test") run_test;; "coverage") run_coverage;; + "python") python_wrappers;; *) run_test run_coverage From 04b5aefe5fbfad09067acd045872171a8fa823e9 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Sun, 24 Mar 2024 20:36:42 -0300 Subject: [PATCH 011/167] Python API toy code --- python/yaeos/core.py | 69 +++++++++++++++++++++++++------------------- python/yaeos_c.f90 | 20 +++++++++++-- 2 files changed, 58 insertions(+), 31 deletions(-) diff --git a/python/yaeos/core.py b/python/yaeos/core.py index 44606e9e3..59047278a 100644 --- a/python/yaeos/core.py +++ b/python/yaeos/core.py @@ -1,54 +1,65 @@ """CubicEoS interface """ +from abc import ABC, abstractmethod +from functools import partial + import numpy as np from yaeos import yaeos_c as yaeos -class CubicEoS: +class ArModel(ABC): - def __init__(self, tc, pc, w, kij, lij): - self.tc = tc - self.pc = pc - self.w = w - self.kij = kij - self.lij = lij - self.id = np.array(id(self), np.int64) + @abstractmethod + def setup_fun(self): + raise NotImplementedError - def set_parameters(foo): + def assure_model(foo): from functools import wraps @wraps(foo) def checker(self, *args, **kwargs): if self.id != yaeos.running_model: yaeos.running_model = self.id - yaeos.pr76(tc, pc, w, kij, lij) + self.setup_fun() return foo(self, *args, **kwargs) - return checker - @set_parameters + @assure_model def fugacity(self, n, v, t): - return yaeos.fugacity( - n, v, t - ) + return yaeos.fug_vt(n, v, t) + + +class PengRobinson76(ArModel): + def __init__(self, tc, pc, w, kij, lij): + self.tc = tc + self.pc = pc + self.w = w + self.kij = kij + self.lij = lij + self.id = np.array(id(self), np.int64) + def setup_fun(self): + yaeos.pr76(self.tc, self.pc, self.w, self.kij, self.lij) -tc = np.array([190, 310]) -pc = np.array([14, 30]) -w = np.array([0.001, 0.03]) -kij = np.zeros((2, 2)) -kij[0, 1] = 0.1 -kij[1, 0] = 0.1 -lij = kij/2 +def run_models(): + tc = np.array([190, 310]) + pc = np.array([14, 30]) + w = np.array([0.001, 0.03]) -m1 = CubicEoS(tc, pc, w, kij, lij) -m2 = CubicEoS(tc, pc, w, kij, lij) + kij = np.zeros((2, 2)) + kij[0, 1] = 0.1 + kij[1, 0] = 0.1 + + lij = kij/2 -n = [0.3, 0.7] -v = 1 -t = 150 + m1 = PengRobinson76(tc, pc, w, kij, lij) + m2 = PengRobinson76(tc/2, pc, w, kij, lij) -m1.fugacity(n, v, t) + n = [0.3, 0.7] + v = 1 + t = 150 -print(m1.fugacity(n, v, t)) + print(m1.fugacity(n, v, t)) + print(m2.fugacity(n, v, t)) + print(m1.fugacity(n, v, t)) diff --git a/python/yaeos_c.f90 b/python/yaeos_c.f90 index 447c45bce..a815f48a0 100644 --- a/python/yaeos_c.f90 +++ b/python/yaeos_c.f90 @@ -1,10 +1,21 @@ module yaeos_c !! C interface to yaeos subroutines use iso_c_binding, only: c_double, c_int - use yaeos, only: ArModel, PengRobinson76, fugacity_vt, CubicEoS + use yaeos, only: & + & ArModel, & ! Ar Model + ! Cubic Models + & SoaveRedlichKwong, PengRobinson76, PengRobinson78, & + ! Thermodynamic properties + & fugacity_vt implicit none + type :: ModelContainer + integer :: id + class(ArModel), pointer :: model + end type + class(ArModel), allocatable, private :: model + class(ModelContainer), allocatable :: models(:) integer(c_int) :: running_model=0 @@ -14,8 +25,13 @@ subroutine pr76(tc, pc, w, kij, lij) real(c_double), intent(in) :: tc(:), pc(:), w(:), kij(:, :), lij(:, :) model = PengRobinson76(tc, pc, w, kij, lij) end subroutine + + subroutine srk(tc, pc, w, kij, lij) + real(c_double), intent(in) :: tc(:), pc(:), w(:), kij(:, :), lij(:, :) + model = SoaveRedlichKwong(tc, pc, w, kij, lij) + end subroutine - subroutine fugacity(n, v, t, lnfug, dlnphidp, dlnphidt, dlnphidn) + subroutine fug_vt(n, v, t, lnfug, dlnphidp, dlnphidt, dlnphidn) real(c_double), intent(in) :: n(:), v, t real(c_double), intent(out) :: lnfug(size(n)) real(c_double) :: p From 02804a86602b93f1178cdc72e00dd7c47c9aa951 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Sun, 24 Mar 2024 21:25:32 -0300 Subject: [PATCH 012/167] format --- python/yaeos/core.py | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/python/yaeos/core.py b/python/yaeos/core.py index 59047278a..d768dbe7b 100644 --- a/python/yaeos/core.py +++ b/python/yaeos/core.py @@ -8,7 +8,6 @@ class ArModel(ABC): - @abstractmethod def setup_fun(self): raise NotImplementedError @@ -22,6 +21,7 @@ def checker(self, *args, **kwargs): yaeos.running_model = self.id self.setup_fun() return foo(self, *args, **kwargs) + return checker @assure_model @@ -30,13 +30,18 @@ def fugacity(self, n, v, t): class PengRobinson76(ArModel): - def __init__(self, tc, pc, w, kij, lij): + name = "PengRobinson76" + + def __init__(self, tc, pc, w, kij=None, lij=None): + self.id = np.array(id(self), np.int64) + + n = len(tc) self.tc = tc self.pc = pc self.w = w - self.kij = kij - self.lij = lij - self.id = np.array(id(self), np.int64) + + self.kij = kij if kij else np.zeros((n, n)) + self.lij = lij if lij else np.zeros((n, n)) def setup_fun(self): yaeos.pr76(self.tc, self.pc, self.w, self.kij, self.lij) @@ -50,11 +55,11 @@ def run_models(): kij = np.zeros((2, 2)) kij[0, 1] = 0.1 kij[1, 0] = 0.1 - - lij = kij/2 + + lij = kij / 2 m1 = PengRobinson76(tc, pc, w, kij, lij) - m2 = PengRobinson76(tc/2, pc, w, kij, lij) + m2 = PengRobinson76(tc / 2, pc, w, kij, lij) n = [0.3, 0.7] v = 1 From d888c57018a99b11dc8d2c551ba7478f815dfaf3 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Sun, 24 Mar 2024 21:26:17 -0300 Subject: [PATCH 013/167] ignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 7707d9205..989614010 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ tools/uml tools/uml.png tools/uml.svg python/yaeos/script.py +__pycache__ \ No newline at end of file From 601d42759442ba7774668ac8aff4e94445c9ab92 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Thu, 27 Jun 2024 14:05:34 -0300 Subject: [PATCH 014/167] updated C API behaviour --- python/Makefile | 8 ++-- python/yaeos/core.py | 38 ++++++++---------- python/yaeos_c.f90 | 95 +++++++++++++++++++++++++++++++++++++------- 3 files changed, 102 insertions(+), 39 deletions(-) diff --git a/python/Makefile b/python/Makefile index b415882d9..e2c5a3738 100644 --- a/python/Makefile +++ b/python/Makefile @@ -1,7 +1,7 @@ python: - fpm install --profile release --prefix build/python + fpm install --flag "-g" --profile debug --prefix build/python f2py -m yaeos \ - -L ../build/python/lib/libyaeos.a \ - -I ../build/python/include \ - -c yaeos_c.f90 + -L$(PWD)/../build/python/lib/ \ + -I$(PWD)/../build/python/include \ + -c yaeos_c.f90 -lyaeos # --debug-capi mv yaeos.* yaeos/ diff --git a/python/yaeos/core.py b/python/yaeos/core.py index d768dbe7b..47d210fcd 100644 --- a/python/yaeos/core.py +++ b/python/yaeos/core.py @@ -8,25 +8,12 @@ class ArModel(ABC): - @abstractmethod - def setup_fun(self): - raise NotImplementedError + # @abstractmethod + # def setup_fun(self): + # raise NotImplementedError - def assure_model(foo): - from functools import wraps - - @wraps(foo) - def checker(self, *args, **kwargs): - if self.id != yaeos.running_model: - yaeos.running_model = self.id - self.setup_fun() - return foo(self, *args, **kwargs) - - return checker - - @assure_model def fugacity(self, n, v, t): - return yaeos.fug_vt(n, v, t) + return yaeos.fug_vt(self.id, n, v, t) class PengRobinson76(ArModel): @@ -40,11 +27,17 @@ def __init__(self, tc, pc, w, kij=None, lij=None): self.pc = pc self.w = w - self.kij = kij if kij else np.zeros((n, n)) - self.lij = lij if lij else np.zeros((n, n)) + if kij is None: + self.kij = np.zeros((n, n)) + else: + self.kij = kij - def setup_fun(self): - yaeos.pr76(self.tc, self.pc, self.w, self.kij, self.lij) + if lij is None: + self.lij = np.zeros((n, n)) + else: + self.lij = lij + + self.id = yaeos.pr76(self.tc, self.pc, self.w, self.kij, self.lij) def run_models(): @@ -68,3 +61,6 @@ def run_models(): print(m1.fugacity(n, v, t)) print(m2.fugacity(n, v, t)) print(m1.fugacity(n, v, t)) + + +# run_models() diff --git a/python/yaeos_c.f90 b/python/yaeos_c.f90 index a815f48a0..5dd9f2981 100644 --- a/python/yaeos_c.f90 +++ b/python/yaeos_c.f90 @@ -1,45 +1,112 @@ module yaeos_c - !! C interface to yaeos subroutines - use iso_c_binding, only: c_double, c_int + !! # Yaeos C Interface + !! C interface intended to be used on external languanges. With an emphasis + !! on using it on Python. + !! + !! # Description + !! The interface holds two lists of models (one for `ArModels` and another + !! for`GeModels`), and two lists of logicals that represent wich models are + !! in those lists are allocated. + !! + !! When a model is instanciated/allocated, it is stored in the singleton + !! object `x_model` and right after that the `extend_x_models_list` procedure + !! is called. This procedure searches for the first `free_x_models` id and + !! allocates the singleton model there, returning the `id` of the procedure. + use iso_c_binding, only: c_double, c_int, c_int64_t use yaeos, only: & - & ArModel, & ! Ar Model + ! Generic Models + & ArModel, GeModel, & + ! Cubic Models + & CubicEoS, & & SoaveRedlichKwong, PengRobinson76, PengRobinson78, & + & CubicMixRule, QMR, MHV, & + + ! Ge Models + & fNRTL => NRTL, & + ! Thermodynamic properties & fugacity_vt implicit none - type :: ModelContainer - integer :: id - class(ArModel), pointer :: model + private + + public :: pr76, srk, fug_vt + + type :: ArModelContainer + class(ArModel), allocatable :: model end type + + type :: GeModelContainer + class(GeModel), allocatable :: model + end type + + ! Singleton to hold temporal ArModels + class(ArModel), allocatable :: model - class(ArModel), allocatable, private :: model - class(ModelContainer), allocatable :: models(:) + ! Containers of models + integer, parameter :: max_models = 100000 + logical :: free_ar_model(max_models) = .true. + logical :: free_ge_model(max_models) = .true. + + class(ArModelContainer), allocatable :: ar_models(:) + class(GeModelContainer), allocatable :: ge_models(:) - integer(c_int) :: running_model=0 contains - subroutine pr76(tc, pc, w, kij, lij) + subroutine extend_ar_models_list(id) + !! Find the first available model container and allocate the model + !! there. Then return the found id. + integer(c_int), intent(out) :: id + integer :: i + if (.not. allocated(ar_models)) allocate(ar_models(max_models)) + + ! Find the first not allocated model + do i=1,max_models + if (free_ar_model(i)) then + free_ar_model(i) = .false. + id = i + call move_alloc(model, ar_models(i)%model) + exit + end if + end do + if (id == max_models) error stop 1 + end subroutine + + subroutine make_available_ar_models_list(id) + !! Make the ArModel id available for allocation + integer(c_int), intent(out) :: id + integer :: i + free_ar_model(i) = .true. + end subroutine + + subroutine pr76(tc, pc, w, kij, lij, id) bind(C, name="PR76") real(c_double), intent(in) :: tc(:), pc(:), w(:), kij(:, :), lij(:, :) + integer(c_int), intent(out) :: id + model = PengRobinson76(tc, pc, w, kij, lij) + call extend_ar_models_list(id) end subroutine - subroutine srk(tc, pc, w, kij, lij) + subroutine srk(tc, pc, w, kij, lij, id) real(c_double), intent(in) :: tc(:), pc(:), w(:), kij(:, :), lij(:, :) + integer(c_int), intent(out) :: id model = SoaveRedlichKwong(tc, pc, w, kij, lij) + call extend_ar_models_list(id) end subroutine - subroutine fug_vt(n, v, t, lnfug, dlnphidp, dlnphidt, dlnphidn) + subroutine fug_vt(id, n, v, t, lnfug, dlnphidp, dlnphidt, dlnphidn) + integer(c_int), intent(in) :: id real(c_double), intent(in) :: n(:), v, t real(c_double), intent(out) :: lnfug(size(n)) real(c_double) :: p - real(c_double), optional, intent(in out) :: dlnphidp(size(n)), dlnphidt(size(n)), dlnphidn(size(n), size(n)) + real(c_double), optional, intent(in out) :: & + dlnphidp(size(n)), dlnphidt(size(n)), dlnphidn(size(n), size(n)) call fugacity_vt(& - model, & + ar_models(id)%model, & n, V, T, P, lnfug, dlnPhidP, dlnphidT, dlnPhidn & ) end subroutine From 85c252b56668d8ca055951faae3973834be8539e Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Thu, 27 Jun 2024 14:06:32 -0300 Subject: [PATCH 015/167] comment --- python/yaeos/core.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/python/yaeos/core.py b/python/yaeos/core.py index 47d210fcd..acb9fec47 100644 --- a/python/yaeos/core.py +++ b/python/yaeos/core.py @@ -8,9 +8,6 @@ class ArModel(ABC): - # @abstractmethod - # def setup_fun(self): - # raise NotImplementedError def fugacity(self, n, v, t): return yaeos.fug_vt(self.id, n, v, t) From db80f8fb8ac9a88e672989cf46ce64855dde52e0 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Thu, 27 Jun 2024 14:10:13 -0300 Subject: [PATCH 016/167] names --- python/yaeos_c.f90 | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/python/yaeos_c.f90 b/python/yaeos_c.f90 index 5dd9f2981..e3fd453b7 100644 --- a/python/yaeos_c.f90 +++ b/python/yaeos_c.f90 @@ -31,18 +31,20 @@ module yaeos_c private - public :: pr76, srk, fug_vt + public :: pr76, srk, fug_vt, make_available_ar_models_list type :: ArModelContainer + !! Container type for ArModels class(ArModel), allocatable :: model end type type :: GeModelContainer + !! Container type for GeModels class(GeModel), allocatable :: model end type - ! Singleton to hold temporal ArModels - class(ArModel), allocatable :: model + class(ArModel), allocatable :: ar_model !! Singleton to hold temporal ArModels + class(GeModel), allocatable :: ge_model !! Singleton to hold temporal GeModels ! Containers of models integer, parameter :: max_models = 100000 @@ -76,23 +78,22 @@ subroutine extend_ar_models_list(id) subroutine make_available_ar_models_list(id) !! Make the ArModel id available for allocation - integer(c_int), intent(out) :: id - integer :: i - free_ar_model(i) = .true. + integer(c_int), intent(in) :: id + free_ar_model(id) = .true. end subroutine subroutine pr76(tc, pc, w, kij, lij, id) bind(C, name="PR76") real(c_double), intent(in) :: tc(:), pc(:), w(:), kij(:, :), lij(:, :) integer(c_int), intent(out) :: id - model = PengRobinson76(tc, pc, w, kij, lij) + ar_model = PengRobinson76(tc, pc, w, kij, lij) call extend_ar_models_list(id) end subroutine subroutine srk(tc, pc, w, kij, lij, id) real(c_double), intent(in) :: tc(:), pc(:), w(:), kij(:, :), lij(:, :) integer(c_int), intent(out) :: id - model = SoaveRedlichKwong(tc, pc, w, kij, lij) + ar_model = SoaveRedlichKwong(tc, pc, w, kij, lij) call extend_ar_models_list(id) end subroutine From 0cc2b006069bea0885315efb88a0658fac17d662 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Thu, 27 Jun 2024 14:14:00 -0300 Subject: [PATCH 017/167] _del_ --- python/yaeos/core.py | 3 +++ python/yaeos_c.f90 | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/python/yaeos/core.py b/python/yaeos/core.py index acb9fec47..6c6371dd1 100644 --- a/python/yaeos/core.py +++ b/python/yaeos/core.py @@ -12,6 +12,9 @@ class ArModel(ABC): def fugacity(self, n, v, t): return yaeos.fug_vt(self.id, n, v, t) + def __del__(self): + yaeos.make_available_ar_models_list(self.id) + class PengRobinson76(ArModel): name = "PengRobinson76" diff --git a/python/yaeos_c.f90 b/python/yaeos_c.f90 index e3fd453b7..0519de850 100644 --- a/python/yaeos_c.f90 +++ b/python/yaeos_c.f90 @@ -69,7 +69,7 @@ subroutine extend_ar_models_list(id) if (free_ar_model(i)) then free_ar_model(i) = .false. id = i - call move_alloc(model, ar_models(i)%model) + call move_alloc(ar_model, ar_models(i)%model) exit end if end do From 9f564223efa0d45abb16f0e63946cfa90c3d0d8b Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Thu, 27 Jun 2024 16:05:48 -0300 Subject: [PATCH 018/167] modular mixing --- python/Makefile | 4 +- python/yaeos/core.py | 80 ++++++++++++++--------------- python/yaeos_c.f90 | 116 +++++++++++++++++++++++++++++-------------- 3 files changed, 123 insertions(+), 77 deletions(-) diff --git a/python/Makefile b/python/Makefile index e2c5a3738..135927eab 100644 --- a/python/Makefile +++ b/python/Makefile @@ -1,7 +1,7 @@ python: - fpm install --flag "-g" --profile debug --prefix build/python + fpm install --profile release --prefix build/python f2py -m yaeos \ -L$(PWD)/../build/python/lib/ \ -I$(PWD)/../build/python/include \ - -c yaeos_c.f90 -lyaeos # --debug-capi + -c yaeos_c.f90 -lyaeos mv yaeos.* yaeos/ diff --git a/python/yaeos/core.py b/python/yaeos/core.py index 6c6371dd1..d901aaa22 100644 --- a/python/yaeos/core.py +++ b/python/yaeos/core.py @@ -9,58 +9,60 @@ class ArModel(ABC): - def fugacity(self, n, v, t): - return yaeos.fug_vt(self.id, n, v, t) + def fugacity(self, n, v, t, dt=None, dp=None, dn=None): + + nc = len(n) + + if dt: + dt = np.empty(nc, order="F") + if dp: + dp = np.empty(nc, order="F") + if dn: + dn = np.empty((nc, nc), order="F") + + res = yaeos.fug_vt( + self.id, + n, v, t, + dlnphidt=dt, dlnphidp=dp, dlnphidn=dn + ) + res = { + "ln_phi": res, "dt": dt, "dp": dp, "dn": dn + } + return res def __del__(self): yaeos.make_available_ar_models_list(self.id) -class PengRobinson76(ArModel): - name = "PengRobinson76" +class CubicMixRule(ABC): + @abstractmethod + def set_mixrule(ar_model_id): + raise NotImplementedError - def __init__(self, tc, pc, w, kij=None, lij=None): - self.id = np.array(id(self), np.int64) - n = len(tc) +class CubicEoS(ArModel): + def __init__(self, tc, pc, w): + nc = len(tc) + self.nc = nc self.tc = tc self.pc = pc self.w = w - if kij is None: - self.kij = np.zeros((n, n)) - else: - self.kij = kij - - if lij is None: - self.lij = np.zeros((n, n)) - else: - self.lij = lij - - self.id = yaeos.pr76(self.tc, self.pc, self.w, self.kij, self.lij) - -def run_models(): - tc = np.array([190, 310]) - pc = np.array([14, 30]) - w = np.array([0.001, 0.03]) +class QMR(ABC): - kij = np.zeros((2, 2)) - kij[0, 1] = 0.1 - kij[1, 0] = 0.1 + def __init__(self, kij, lij): + self.kij = kij + self.lij = lij - lij = kij / 2 + def set_mixrule(self, ar_model_id): + yaeos.set_qmr(ar_model_id, self.kij, self.lij) - m1 = PengRobinson76(tc, pc, w, kij, lij) - m2 = PengRobinson76(tc / 2, pc, w, kij, lij) - n = [0.3, 0.7] - v = 1 - t = 150 - - print(m1.fugacity(n, v, t)) - print(m2.fugacity(n, v, t)) - print(m1.fugacity(n, v, t)) - - -# run_models() +class PengRobinson76(CubicEoS): + name = "PengRobinson76" + + def __init__(self, tc, pc, w, mixrule: CubicMixRule): + super(PengRobinson76, self).__init__(tc, pc, w) + self.id = yaeos.pr76(self.tc, self.pc, self.w) + mixrule.set_mixrule(self.id) \ No newline at end of file diff --git a/python/yaeos_c.f90 b/python/yaeos_c.f90 index 0519de850..a4b0f4021 100644 --- a/python/yaeos_c.f90 +++ b/python/yaeos_c.f90 @@ -4,50 +4,54 @@ module yaeos_c !! on using it on Python. !! !! # Description - !! The interface holds two lists of models (one for `ArModels` and another + !! The interface holds two lists of models (one for `ArModels` and another !! for`GeModels`), and two lists of logicals that represent wich models are !! in those lists are allocated. !! !! When a model is instanciated/allocated, it is stored in the singleton !! object `x_model` and right after that the `extend_x_models_list` procedure !! is called. This procedure searches for the first `free_x_models` id and - !! allocates the singleton model there, returning the `id` of the procedure. + !! allocates the singleton model there, returning the `id` of the procedure. use iso_c_binding, only: c_double, c_int, c_int64_t use yaeos, only: & - ! Generic Models - & ArModel, GeModel, & - - ! Cubic Models - & CubicEoS, & - & SoaveRedlichKwong, PengRobinson76, PengRobinson78, & - & CubicMixRule, QMR, MHV, & - - ! Ge Models - & fNRTL => NRTL, & - - ! Thermodynamic properties - & fugacity_vt + ! Generic Models + & ArModel, GeModel, & + + ! Cubic Models + & CubicEoS, & + & SoaveRedlichKwong, PengRobinson76, PengRobinson78, & + & CubicMixRule, QMR, MHV, & + + ! Ge Models + & fNRTL => NRTL, & + + ! Thermodynamic properties + & fugacity_vt implicit none private - public :: pr76, srk, fug_vt, make_available_ar_models_list + public :: pr76 + public :: srk + public :: fug_vt + public :: make_available_ar_models_list + public :: set_mhv, set_qmr type :: ArModelContainer - !! Container type for ArModels + !! Container type for ArModels class(ArModel), allocatable :: model - end type - + end type ArModelContainer + type :: GeModelContainer - !! Container type for GeModels + !! Container type for GeModels class(GeModel), allocatable :: model - end type + end type GeModelContainer class(ArModel), allocatable :: ar_model !! Singleton to hold temporal ArModels class(GeModel), allocatable :: ge_model !! Singleton to hold temporal GeModels ! Containers of models - integer, parameter :: max_models = 100000 + integer, parameter :: max_models = 1000000 logical :: free_ar_model(max_models) = .true. logical :: free_ge_model(max_models) = .true. @@ -58,7 +62,7 @@ module yaeos_c contains subroutine extend_ar_models_list(id) - !! Find the first available model container and allocate the model + !! Find the first available model container and allocate the model !! there. Then return the found id. integer(c_int), intent(out) :: id integer :: i @@ -74,28 +78,68 @@ subroutine extend_ar_models_list(id) end if end do if (id == max_models) error stop 1 - end subroutine - + end subroutine extend_ar_models_list + subroutine make_available_ar_models_list(id) !! Make the ArModel id available for allocation integer(c_int), intent(in) :: id free_ar_model(id) = .true. - end subroutine + end subroutine make_available_ar_models_list - subroutine pr76(tc, pc, w, kij, lij, id) bind(C, name="PR76") - real(c_double), intent(in) :: tc(:), pc(:), w(:), kij(:, :), lij(:, :) + subroutine set_mhv(ar_id, ge_id, q) + integer(c_int), intent(in) :: ar_id + integer(c_int), intent(in) :: ge_id + real(c_double), intent(in) :: q + + type(MHV) :: mixrule + + ar_model = ar_models(ar_id)%model + ge_model = ge_models(ge_id)%model + + select type(ar_model) + class is(CubicEoS) + mixrule = MHV(ge=ge_model, b=ar_model%b, q=q) + deallocate(ar_model%mixrule) + ar_model%mixrule = mixrule + end select + + call move_alloc(ar_model, ar_models(ar_id)%model) + end subroutine set_mhv + + subroutine set_qmr(ar_id, kij, lij) + use yaeos, only: QMR + integer(c_int), intent(in) :: ar_id + real(c_double) :: kij(:, :) + real(c_double) :: lij(:, :) + + type(QMR) :: mixrule + + ar_model = ar_models(ar_id)%model + + select type(ar_model) + class is(CubicEoS) + mixrule = QMR(k=kij, l=lij) + deallocate(ar_model%mixrule) + ar_model%mixrule = mixrule + end select + + call move_alloc(ar_model, ar_models(ar_id)%model) + end subroutine set_qmr + + subroutine pr76(tc, pc, w, id) bind(C, name="PR76") + real(c_double), intent(in) :: tc(:), pc(:), w(:) integer(c_int), intent(out) :: id - - ar_model = PengRobinson76(tc, pc, w, kij, lij) + + ar_model = PengRobinson76(tc, pc, w) call extend_ar_models_list(id) - end subroutine - + end subroutine pr76 + subroutine srk(tc, pc, w, kij, lij, id) real(c_double), intent(in) :: tc(:), pc(:), w(:), kij(:, :), lij(:, :) integer(c_int), intent(out) :: id ar_model = SoaveRedlichKwong(tc, pc, w, kij, lij) call extend_ar_models_list(id) - end subroutine + end subroutine srk subroutine fug_vt(id, n, v, t, lnfug, dlnphidp, dlnphidt, dlnphidn) integer(c_int), intent(in) :: id @@ -109,6 +153,6 @@ subroutine fug_vt(id, n, v, t, lnfug, dlnphidp, dlnphidt, dlnphidn) call fugacity_vt(& ar_models(id)%model, & n, V, T, P, lnfug, dlnPhidP, dlnphidT, dlnPhidn & - ) - end subroutine -end module + ) + end subroutine fug_vt +end module yaeos_c From 6cb96e958967942c8ee602fc2380685f9b6577f8 Mon Sep 17 00:00:00 2001 From: salvador Date: Thu, 27 Jun 2024 23:15:09 -0300 Subject: [PATCH 019/167] installable package. practically done with the api (???? --- python/README.md | 31 ++++++++++++ python/pyproject.toml | 3 ++ python/setup.py | 56 +++++++++++++++++++++ python/yaeos/__init__.py | 6 +++ python/yaeos/core.py | 10 ++-- python/yaeos/fortran_wrap/__init__.py | 4 ++ python/{ => yaeos/fortran_wrap}/yaeos_c.f90 | 0 7 files changed, 105 insertions(+), 5 deletions(-) create mode 100644 python/README.md create mode 100644 python/pyproject.toml create mode 100644 python/setup.py create mode 100644 python/yaeos/__init__.py create mode 100644 python/yaeos/fortran_wrap/__init__.py rename python/{ => yaeos/fortran_wrap}/yaeos_c.f90 (100%) diff --git a/python/README.md b/python/README.md new file mode 100644 index 000000000..ca08eb509 --- /dev/null +++ b/python/README.md @@ -0,0 +1,31 @@ +Para instalar como editable + +``` +cd python +pip install -e . +python setup.py build_fortran +``` + +Para instalar como no editable, directamente + +``` +pip install . +``` + +Desde el interprete para checkear que todo este bien: + +```python +from yaeos import PengRobinson76, QMR + +import numpy as np + +mr = QMR(np.zeros((2,2)), np.zeros((2,2))) + +model = PengRobinson76(np.array([320, 375]), np.array([30, 45]), np.array([0.0123, 0.045]), mr) + +model.fugacity(np.array([5.0, 4.0]), 2.0, 303.15) +``` + +``` +{'ln_phi': array([2.61640775, 2.49331419]), 'dt': None, 'dp': None, 'dn': None} +``` \ No newline at end of file diff --git a/python/pyproject.toml b/python/pyproject.toml new file mode 100644 index 000000000..b804ed9a3 --- /dev/null +++ b/python/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +build-backend = "setuptools.build_meta" +requires = ["setuptools", "wheel", "numpy", "fpm"] diff --git a/python/setup.py b/python/setup.py new file mode 100644 index 000000000..03b7f0e44 --- /dev/null +++ b/python/setup.py @@ -0,0 +1,56 @@ +from setuptools import setup, Command +import subprocess +import os +import glob +import shutil +from setuptools.command.install import install + +class BuildFortran(Command): + description = "Compile Fortran library with fpm and f2py" + user_options = [] + + def initialize_options(self): + pass + + def finalize_options(self): + pass + + def run(self): + # Compile with fpm + os.chdir("./../") + + subprocess.check_call([ + "fpm", "install", "--profile", "release", "--prefix", "build/python" + ]) + + # Compile with f2py + os.chdir("./python/") + + subprocess.check_call([ + "f2py", "-m", "yaeos_compiled", + "-L../build/python/lib/", + "-I../build/python/include/", + "-c", "yaeos/fortran_wrap/yaeos_c.f90", "-lyaeos" + ]) + + for file in glob.glob("yaeos_compiled.*"): + shutil.move(file, "yaeos/fortran_wrap") + +class CustomInstall(install): + def run(self): + self.run_command("build_fortran") + install.run(self) + +setup( + name="yaeos", + version="0.1", + packages=["yaeos"], + cmdclass={ + "build_fortran": BuildFortran, + "install": CustomInstall, + }, + install_requires=[ + "numpy", + "fpm" + ], +) diff --git a/python/yaeos/__init__.py b/python/yaeos/__init__.py new file mode 100644 index 000000000..38cd3ced7 --- /dev/null +++ b/python/yaeos/__init__.py @@ -0,0 +1,6 @@ +from .fortran_wrap.yaeos_compiled import yaeos_c + +from yaeos.core import PengRobinson76, QMR + + +__all__ = ["yaeos_c", "PengRobinson76", "QMR"] \ No newline at end of file diff --git a/python/yaeos/core.py b/python/yaeos/core.py index d901aaa22..159d89d53 100644 --- a/python/yaeos/core.py +++ b/python/yaeos/core.py @@ -4,7 +4,7 @@ from functools import partial import numpy as np -from yaeos import yaeos_c as yaeos +from yaeos import yaeos_c class ArModel(ABC): @@ -20,7 +20,7 @@ def fugacity(self, n, v, t, dt=None, dp=None, dn=None): if dn: dn = np.empty((nc, nc), order="F") - res = yaeos.fug_vt( + res = yaeos_c.fug_vt( self.id, n, v, t, dlnphidt=dt, dlnphidp=dp, dlnphidn=dn @@ -31,7 +31,7 @@ def fugacity(self, n, v, t, dt=None, dp=None, dn=None): return res def __del__(self): - yaeos.make_available_ar_models_list(self.id) + yaeos_c.make_available_ar_models_list(self.id) class CubicMixRule(ABC): @@ -56,7 +56,7 @@ def __init__(self, kij, lij): self.lij = lij def set_mixrule(self, ar_model_id): - yaeos.set_qmr(ar_model_id, self.kij, self.lij) + yaeos_c.set_qmr(ar_model_id, self.kij, self.lij) class PengRobinson76(CubicEoS): @@ -64,5 +64,5 @@ class PengRobinson76(CubicEoS): def __init__(self, tc, pc, w, mixrule: CubicMixRule): super(PengRobinson76, self).__init__(tc, pc, w) - self.id = yaeos.pr76(self.tc, self.pc, self.w) + self.id = yaeos_c.pr76(self.tc, self.pc, self.w) mixrule.set_mixrule(self.id) \ No newline at end of file diff --git a/python/yaeos/fortran_wrap/__init__.py b/python/yaeos/fortran_wrap/__init__.py new file mode 100644 index 000000000..19d60c115 --- /dev/null +++ b/python/yaeos/fortran_wrap/__init__.py @@ -0,0 +1,4 @@ +from .yaeos_compiled import yaeos_c + + +__all__ = ["yaeos_c"] \ No newline at end of file diff --git a/python/yaeos_c.f90 b/python/yaeos/fortran_wrap/yaeos_c.f90 similarity index 100% rename from python/yaeos_c.f90 rename to python/yaeos/fortran_wrap/yaeos_c.f90 From 2a92fe85aa4256686c67ee789c2afc329ed248a5 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Fri, 28 Jun 2024 00:16:39 -0300 Subject: [PATCH 020/167] use pathlib for portability (it even gives you glob too) and absolute path for newer meson versions --- python/setup.py | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/python/setup.py b/python/setup.py index 03b7f0e44..fd63abe59 100644 --- a/python/setup.py +++ b/python/setup.py @@ -1,9 +1,8 @@ from setuptools import setup, Command import subprocess -import os -import glob import shutil from setuptools.command.install import install +from pathlib import Path class BuildFortran(Command): description = "Compile Fortran library with fpm and f2py" @@ -16,25 +15,24 @@ def finalize_options(self): pass def run(self): - # Compile with fpm - os.chdir("./../") + build_dir = Path("..") / "build" / "python" + link_dir = build_dir.absolute() / "lib" + incl_dir = build_dir.absolute() / "include" + this_dir = Path(".") subprocess.check_call([ - "fpm", "install", "--profile", "release", "--prefix", "build/python" + "fpm", "install", "--profile", "release", "--prefix", build_dir ]) - - # Compile with f2py - os.chdir("./python/") subprocess.check_call([ "f2py", "-m", "yaeos_compiled", - "-L../build/python/lib/", - "-I../build/python/include/", + f"-L{link_dir}", + f"-I{incl_dir}", "-c", "yaeos/fortran_wrap/yaeos_c.f90", "-lyaeos" ]) - for file in glob.glob("yaeos_compiled.*"): - shutil.move(file, "yaeos/fortran_wrap") + for file in this_dir.glob("yaeos_compiled.*"): + shutil.move(file, this_dir / "yaeos/fortran_wrap") class CustomInstall(install): def run(self): @@ -43,7 +41,7 @@ def run(self): setup( name="yaeos", - version="0.1", + version="0.3.5", packages=["yaeos"], cmdclass={ "build_fortran": BuildFortran, From 95262d1d4f28b14e6cf240f77328d0bcbb2ccc0e Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Fri, 28 Jun 2024 00:33:22 -0300 Subject: [PATCH 021/167] wf? --- .github/workflows/CI.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 42e2a5491..b0d13ec30 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -69,3 +69,13 @@ jobs: with: token: ${{ secrets.CODECOV_TOKEN }} slug: ipqa-research/yaeos + + - name: Python-API + run: cd python + python setup.py build_fortran + pip install -e . + python -c "import yaeos" + - uses: actions/upload-artifact@v2 + with: + name: python-api + path: python-api From 57d95053e5ff22e22b257c96beadcc64f4ea04f4 Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Fri, 28 Jun 2024 00:55:06 -0300 Subject: [PATCH 022/167] force meson --- python/setup.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/python/setup.py b/python/setup.py index fd63abe59..a81982d0b 100644 --- a/python/setup.py +++ b/python/setup.py @@ -25,10 +25,12 @@ def run(self): ]) subprocess.check_call([ - "f2py", "-m", "yaeos_compiled", + "f2py", + "-m", "yaeos_compiled", f"-L{link_dir}", f"-I{incl_dir}", - "-c", "yaeos/fortran_wrap/yaeos_c.f90", "-lyaeos" + "-c", "yaeos/fortran_wrap/yaeos_c.f90", "-lyaeos", + "--backend", "meson", ]) for file in this_dir.glob("yaeos_compiled.*"): From d39a67b9f4c6c4284ca80a8df400d8c17896ca6e Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Fri, 28 Jun 2024 00:55:54 -0300 Subject: [PATCH 023/167] blacked --- python/setup.py | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/python/setup.py b/python/setup.py index a81982d0b..3ab436de8 100644 --- a/python/setup.py +++ b/python/setup.py @@ -4,6 +4,7 @@ from setuptools.command.install import install from pathlib import Path + class BuildFortran(Command): description = "Compile Fortran library with fpm and f2py" user_options = [] @@ -14,33 +15,41 @@ def initialize_options(self): def finalize_options(self): pass - def run(self): + def run(self): build_dir = Path("..") / "build" / "python" link_dir = build_dir.absolute() / "lib" incl_dir = build_dir.absolute() / "include" this_dir = Path(".") - subprocess.check_call([ - "fpm", "install", "--profile", "release", "--prefix", build_dir - ]) - - subprocess.check_call([ - "f2py", - "-m", "yaeos_compiled", - f"-L{link_dir}", - f"-I{incl_dir}", - "-c", "yaeos/fortran_wrap/yaeos_c.f90", "-lyaeos", - "--backend", "meson", - ]) + subprocess.check_call( + ["fpm", "install", "--profile", "release", "--prefix", build_dir] + ) + + subprocess.check_call( + [ + "f2py", + "-m", + "yaeos_compiled", + f"-L{link_dir}", + f"-I{incl_dir}", + "-c", + "yaeos/fortran_wrap/yaeos_c.f90", + "-lyaeos", + "--backend", + "meson", + ] + ) for file in this_dir.glob("yaeos_compiled.*"): shutil.move(file, this_dir / "yaeos/fortran_wrap") + class CustomInstall(install): def run(self): self.run_command("build_fortran") install.run(self) + setup( name="yaeos", version="0.3.5", @@ -49,8 +58,5 @@ def run(self): "build_fortran": BuildFortran, "install": CustomInstall, }, - install_requires=[ - "numpy", - "fpm" - ], + install_requires=["numpy", "fpm"], ) From e63cbe74bfad3c67892158e2ce0c8a0ab4f267bd Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Fri, 28 Jun 2024 00:56:29 -0300 Subject: [PATCH 024/167] blacked --- python/yaeos/__init__.py | 4 ++-- python/yaeos/core.py | 15 +++++---------- python/yaeos/fortran_wrap/__init__.py | 2 +- 3 files changed, 8 insertions(+), 13 deletions(-) diff --git a/python/yaeos/__init__.py b/python/yaeos/__init__.py index 38cd3ced7..b7d79b63f 100644 --- a/python/yaeos/__init__.py +++ b/python/yaeos/__init__.py @@ -1,6 +1,6 @@ -from .fortran_wrap.yaeos_compiled import yaeos_c +from yaeos.fortran_wrap.yaeos_compiled import yaeos_c from yaeos.core import PengRobinson76, QMR -__all__ = ["yaeos_c", "PengRobinson76", "QMR"] \ No newline at end of file +__all__ = ["yaeos_c", "PengRobinson76", "QMR"] diff --git a/python/yaeos/core.py b/python/yaeos/core.py index 159d89d53..fc0303776 100644 --- a/python/yaeos/core.py +++ b/python/yaeos/core.py @@ -1,5 +1,6 @@ """CubicEoS interface """ + from abc import ABC, abstractmethod from functools import partial @@ -20,14 +21,8 @@ def fugacity(self, n, v, t, dt=None, dp=None, dn=None): if dn: dn = np.empty((nc, nc), order="F") - res = yaeos_c.fug_vt( - self.id, - n, v, t, - dlnphidt=dt, dlnphidp=dp, dlnphidn=dn - ) - res = { - "ln_phi": res, "dt": dt, "dp": dp, "dn": dn - } + res = yaeos_c.fug_vt(self.id, n, v, t, dlnphidt=dt, dlnphidp=dp, dlnphidn=dn) + res = {"ln_phi": res, "dt": dt, "dp": dp, "dn": dn} return res def __del__(self): @@ -61,8 +56,8 @@ def set_mixrule(self, ar_model_id): class PengRobinson76(CubicEoS): name = "PengRobinson76" - + def __init__(self, tc, pc, w, mixrule: CubicMixRule): super(PengRobinson76, self).__init__(tc, pc, w) self.id = yaeos_c.pr76(self.tc, self.pc, self.w) - mixrule.set_mixrule(self.id) \ No newline at end of file + mixrule.set_mixrule(self.id) diff --git a/python/yaeos/fortran_wrap/__init__.py b/python/yaeos/fortran_wrap/__init__.py index 19d60c115..00fe9522e 100644 --- a/python/yaeos/fortran_wrap/__init__.py +++ b/python/yaeos/fortran_wrap/__init__.py @@ -1,4 +1,4 @@ from .yaeos_compiled import yaeos_c -__all__ = ["yaeos_c"] \ No newline at end of file +__all__ = ["yaeos_c"] From 74ac795cc990fb1f00c02944aeafc8c0465b7107 Mon Sep 17 00:00:00 2001 From: Salvador Date: Fri, 28 Jun 2024 16:52:30 -0300 Subject: [PATCH 025/167] can now be installed normally and editable. I still don't know if it is excluding and including all the correponding things --- python/MANIFEST.in | 15 ++++ python/README.md | 2 +- python/setup.py | 72 ++++++++++++++++++- python/yaeos/__init__.py | 2 +- .../__init__.py | 0 5 files changed, 87 insertions(+), 4 deletions(-) create mode 100644 python/MANIFEST.in rename python/yaeos/{fortran_wrap => compiled_module}/__init__.py (100%) diff --git a/python/MANIFEST.in b/python/MANIFEST.in new file mode 100644 index 000000000..b60ff28c3 --- /dev/null +++ b/python/MANIFEST.in @@ -0,0 +1,15 @@ +include LICENCE +include README.md +include CONTRIBUTING.md +include requirements.txt +include pyproject.toml + +recursive-include yaeos *.py + +exclude tox.ini +exclude requirements-dev.txt +exclude _build + +recursive-exclude dist * +recursive-exclude tests * +recursive-exclude docs * diff --git a/python/README.md b/python/README.md index ca08eb509..3288afb23 100644 --- a/python/README.md +++ b/python/README.md @@ -3,7 +3,7 @@ Para instalar como editable ``` cd python pip install -e . -python setup.py build_fortran +python setup.py build_fortran_editable ``` Para instalar como no editable, directamente diff --git a/python/setup.py b/python/setup.py index 3ab436de8..4d2e64a47 100644 --- a/python/setup.py +++ b/python/setup.py @@ -3,8 +3,11 @@ import shutil from setuptools.command.install import install from pathlib import Path +import sysconfig - +# ============================================================================= +# Building +# ============================================================================= class BuildFortran(Command): description = "Compile Fortran library with fpm and f2py" user_options = [] @@ -40,8 +43,59 @@ def run(self): ] ) + site_packages_dir = Path(sysconfig.get_path("purelib")) + for file in this_dir.glob("yaeos_compiled.*"): - shutil.move(file, this_dir / "yaeos/fortran_wrap") + target_dir = site_packages_dir / "yaeos" / "compiled_module" + target_dir.mkdir(parents=True, exist_ok=True) + shutil.move(file, target_dir) + +# ============================================================================= +# Building for developers (editable installation) +# install the package on the enviroment (pip install -e .) +# Build fortran to the editable command with: +# +# python3 setup.py build_fortran_editable +# ============================================================================= +class BuildFortranEditable(Command): + description = "Compile Fortran library with fpm and f2py" + user_options = [] + + def initialize_options(self): + pass + + def finalize_options(self): + pass + + def run(self): + build_dir = Path("..") / "build" / "python" + link_dir = build_dir.absolute() / "lib" + incl_dir = build_dir.absolute() / "include" + this_dir = Path(".") + + subprocess.check_call( + ["fpm", "install", "--profile", "release", "--prefix", build_dir] + ) + + subprocess.check_call( + [ + "f2py", + "-m", + "yaeos_compiled", + f"-L{link_dir}", + f"-I{incl_dir}", + "-c", + "yaeos/fortran_wrap/yaeos_c.f90", + "-lyaeos", + "--backend", + "meson", + ] + ) + + for file in this_dir.glob("yaeos_compiled.*"): + target_dir = Path(".") / "yaeos" / "compiled_module" + target_dir.mkdir(parents=True, exist_ok=True) + shutil.move(file, target_dir) class CustomInstall(install): @@ -56,7 +110,21 @@ def run(self): packages=["yaeos"], cmdclass={ "build_fortran": BuildFortran, + "build_fortran_editable": BuildFortranEditable, "install": CustomInstall, }, install_requires=["numpy", "fpm"], + package_data={ + "yaeos": [ + "compiled_module/", + ], + }, + include_package_data=True, + exclude_package_data={ + "yaeos": [ + "__pycache__", + "*.f90", + "*.egg-info" + ], + } ) diff --git a/python/yaeos/__init__.py b/python/yaeos/__init__.py index b7d79b63f..472d2cd92 100644 --- a/python/yaeos/__init__.py +++ b/python/yaeos/__init__.py @@ -1,4 +1,4 @@ -from yaeos.fortran_wrap.yaeos_compiled import yaeos_c +from yaeos.compiled_module.yaeos_compiled import yaeos_c from yaeos.core import PengRobinson76, QMR diff --git a/python/yaeos/fortran_wrap/__init__.py b/python/yaeos/compiled_module/__init__.py similarity index 100% rename from python/yaeos/fortran_wrap/__init__.py rename to python/yaeos/compiled_module/__init__.py From ed75ee785e236cbc3cfe51e2d4562180f3b237e1 Mon Sep 17 00:00:00 2001 From: Salvador Date: Fri, 28 Jun 2024 16:52:55 -0300 Subject: [PATCH 026/167] .gitignore modificado --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index c733a6240..53f33268a 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ doc/ford_site *.smod *mypy* *.so +*.egg-info tools/uml tools/uml.png tools/uml.svg From d3755a1a50661f7980d751d21443801d12078b86 Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Sat, 29 Jun 2024 21:02:11 -0300 Subject: [PATCH 027/167] tapenade needs fPIC --- python/setup.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/python/setup.py b/python/setup.py index 4d2e64a47..a1c96de0e 100644 --- a/python/setup.py +++ b/python/setup.py @@ -25,7 +25,12 @@ def run(self): this_dir = Path(".") subprocess.check_call( - ["fpm", "install", "--profile", "release", "--prefix", build_dir] + [ + "fpm", "install", + "--profile", "release", + "--flags", "-fPIC", + "--c-flags", "-fPIC", + "--prefix", build_dir] ) subprocess.check_call( From aad31c5399697f496c3e8c3e2661b27a3afc2745 Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Sat, 29 Jun 2024 21:02:49 -0300 Subject: [PATCH 028/167] NRTL model and MHV mixrule --- python/yaeos/core.py | 31 +++++++++++++++++ python/yaeos/fortran_wrap/yaeos_c.f90 | 50 ++++++++++++++++++++++++++- 2 files changed, 80 insertions(+), 1 deletion(-) diff --git a/python/yaeos/core.py b/python/yaeos/core.py index fc0303776..35ebabe0e 100644 --- a/python/yaeos/core.py +++ b/python/yaeos/core.py @@ -7,6 +7,11 @@ import numpy as np from yaeos import yaeos_c +class GeModel(ABC): + ... + + def __del__(self): + yaeos_c.make_available_ge_models_list(self.id) class ArModel(ABC): @@ -29,6 +34,15 @@ def __del__(self): yaeos_c.make_available_ar_models_list(self.id) +class NRTL: + + def __init__(self, a, b, c): + self.a = a + self.b = b + self.c = c + self.id = yaeos_c.nrtl(a, b, c) + + class CubicMixRule(ABC): @abstractmethod def set_mixrule(ar_model_id): @@ -54,10 +68,27 @@ def set_mixrule(self, ar_model_id): yaeos_c.set_qmr(ar_model_id, self.kij, self.lij) +class MHV(ABC): + + def __init__(self, ge, q, lij=None): + self.ge = ge + self.q = q + self.lij = lij + + def set_mixrule(self, ar_model_id): + yaeos_c.set_mhv(ar_model_id, self.ge.id, self.q) + + class PengRobinson76(CubicEoS): name = "PengRobinson76" def __init__(self, tc, pc, w, mixrule: CubicMixRule): super(PengRobinson76, self).__init__(tc, pc, w) self.id = yaeos_c.pr76(self.tc, self.pc, self.w) + self.mixrule = mixrule mixrule.set_mixrule(self.id) + + def set_mixrule(self, mixrule: CubicMixRule): + self.mixrule = mixrule + self.mixrule.set_mixrule(self.id) + diff --git a/python/yaeos/fortran_wrap/yaeos_c.f90 b/python/yaeos/fortran_wrap/yaeos_c.f90 index a4b0f4021..23e11d7e7 100644 --- a/python/yaeos/fortran_wrap/yaeos_c.f90 +++ b/python/yaeos/fortran_wrap/yaeos_c.f90 @@ -35,7 +35,9 @@ module yaeos_c public :: srk public :: fug_vt public :: make_available_ar_models_list + public :: make_available_ge_models_list public :: set_mhv, set_qmr + public :: nrtl type :: ArModelContainer !! Container type for ArModels @@ -58,9 +60,46 @@ module yaeos_c class(ArModelContainer), allocatable :: ar_models(:) class(GeModelContainer), allocatable :: ge_models(:) - contains + ! ========================================================================== + ! Ge Models + ! -------------------------------------------------------------------------- + subroutine nrtl(a, b, c, id) + real(c_double), intent(in) :: a(:,:), b(:,:), c(:,:) + integer(c_int), intent(out) :: id + ge_model = fNRTL(a, b, c) + call extend_ge_models_list(id) + end subroutine + + subroutine extend_ge_models_list(id) + !! Find the first available model container and allocate the model + !! there. Then return the found id. + integer(c_int), intent(out) :: id + integer :: i + if (.not. allocated(ge_models)) allocate(ge_models(max_models)) + + ! Find the first not allocated model + do i=1,max_models + if (free_ge_model(i)) then + free_ge_model(i) = .false. + id = i + call move_alloc(ge_model, ge_models(i)%model) + exit + end if + end do + if (id == max_models) error stop 1 + end subroutine extend_ge_models_list + + subroutine make_available_ge_models_list(id) + !! Make the geModel id available for allocation + integer(c_int), intent(in) :: id + free_ge_model(id) = .true. + end subroutine make_available_ge_models_list + + ! ============================================================================= + ! Ar Models + ! ----------------------------------------------------------------------------- subroutine extend_ar_models_list(id) !! Find the first available model container and allocate the model !! there. Then return the found id. @@ -86,6 +125,9 @@ subroutine make_available_ar_models_list(id) free_ar_model(id) = .true. end subroutine make_available_ar_models_list + ! ========================================================================== + ! Cubic Mixing rules + ! -------------------------------------------------------------------------- subroutine set_mhv(ar_id, ge_id, q) integer(c_int), intent(in) :: ar_id integer(c_int), intent(in) :: ge_id @@ -126,6 +168,9 @@ subroutine set_qmr(ar_id, kij, lij) call move_alloc(ar_model, ar_models(ar_id)%model) end subroutine set_qmr + ! ========================================================================== + ! Cubic EoS + ! -------------------------------------------------------------------------- subroutine pr76(tc, pc, w, id) bind(C, name="PR76") real(c_double), intent(in) :: tc(:), pc(:), w(:) integer(c_int), intent(out) :: id @@ -141,6 +186,9 @@ subroutine srk(tc, pc, w, kij, lij, id) call extend_ar_models_list(id) end subroutine srk + ! ========================================================================== + ! Thermodynamic properties + ! -------------------------------------------------------------------------- subroutine fug_vt(id, n, v, t, lnfug, dlnphidp, dlnphidt, dlnphidn) integer(c_int), intent(in) :: id real(c_double), intent(in) :: n(:), v, t From caa71d0a4098330dfa55a2a5cfb91c0851603dfb Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Sat, 29 Jun 2024 21:14:29 -0300 Subject: [PATCH 029/167] ci? --- .github/workflows/CI.yml | 42 ++++++++++++++++++++++++++++++---------- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index b0d13ec30..04b4c52e0 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -2,7 +2,7 @@ name: CI on: [push] jobs: - Build: + Fortran: runs-on: ${{ matrix.os }} strategy: fail-fast: false @@ -70,12 +70,34 @@ jobs: token: ${{ secrets.CODECOV_TOKEN }} slug: ipqa-research/yaeos - - name: Python-API - run: cd python - python setup.py build_fortran - pip install -e . - python -c "import yaeos" - - uses: actions/upload-artifact@v2 - with: - name: python-api - path: python-api + Python-API: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest] + gcc_v: [10] # Version of GFortran we want to use. + python-version: [3.9] + env: + FC: gfortran-${{ matrix.gcc_v }} + GCC_V: ${{ matrix.gcc_v }} + + steps: + - name: Checkout code + uses: actions/checkout@v2 + with: + submodules: false + + - name: Install Python + uses: actions/setup-python@v1 # Use pip to install latest CMake, & FORD/Jin2For, etc. + with: + python-version: ${{ matrix.python-version }} + + - name: Install NLopt + run: + sudo apt-get install libnlopt-dev + + - name: Install yaeos + run: + cd python + pip install . From 4f732b54e4898691030f78ae9ddc14b4015a008a Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Sat, 29 Jun 2024 21:15:39 -0300 Subject: [PATCH 030/167] ci? --- .github/workflows/CI.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 04b4c52e0..f3bad9f88 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -99,5 +99,5 @@ jobs: - name: Install yaeos run: - cd python - pip install . + - cd python + - pip install . From 10a1e85bd14f2245611b7763826a5880e83ced8e Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Sat, 29 Jun 2024 21:16:25 -0300 Subject: [PATCH 031/167] ci --- .github/workflows/CI.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index f3bad9f88..e5b5f021c 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -99,5 +99,4 @@ jobs: - name: Install yaeos run: - - cd python - - pip install . + cd python; pip install . From 1917157ba8c8cf1574f825de6e80f5cddaa3bb47 Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Sat, 29 Jun 2024 21:36:34 -0300 Subject: [PATCH 032/167] cleaning --- python/setup.py | 119 ++++++++++++++++++++---------------------------- 1 file changed, 50 insertions(+), 69 deletions(-) diff --git a/python/setup.py b/python/setup.py index a1c96de0e..7f4740bf5 100644 --- a/python/setup.py +++ b/python/setup.py @@ -5,9 +5,54 @@ from pathlib import Path import sysconfig + # ============================================================================= # Building # ============================================================================= +def build_library(): + build_dir = Path("..") / "build" / "python" + link_dir = build_dir.absolute() / "lib" + incl_dir = build_dir.absolute() / "include" + this_dir = Path(".") + + subprocess.check_call( + [ + "fpm", + "install", + "--profile", + "release", + "--flags", + "-fPIC", + "--c-flags", + "-fPIC", + "--prefix", + build_dir, + ] + ) + + subprocess.check_call( + [ + "f2py", + "-m", + "yaeos_compiled", + f"-L{link_dir}", + f"-I{incl_dir}", + "-c", + "yaeos/fortran_wrap/yaeos_c.f90", + "-lyaeos", + "--backend", + "meson", + ] + ) + + site_packages_dir = Path(sysconfig.get_path("purelib")) + + for file in this_dir.glob("yaeos_compiled.*"): + target_dir = site_packages_dir / "yaeos" / "compiled_module" + target_dir.mkdir(parents=True, exist_ok=True) + shutil.move(file, target_dir) + + class BuildFortran(Command): description = "Compile Fortran library with fpm and f2py" user_options = [] @@ -19,41 +64,8 @@ def finalize_options(self): pass def run(self): - build_dir = Path("..") / "build" / "python" - link_dir = build_dir.absolute() / "lib" - incl_dir = build_dir.absolute() / "include" - this_dir = Path(".") - - subprocess.check_call( - [ - "fpm", "install", - "--profile", "release", - "--flags", "-fPIC", - "--c-flags", "-fPIC", - "--prefix", build_dir] - ) - - subprocess.check_call( - [ - "f2py", - "-m", - "yaeos_compiled", - f"-L{link_dir}", - f"-I{incl_dir}", - "-c", - "yaeos/fortran_wrap/yaeos_c.f90", - "-lyaeos", - "--backend", - "meson", - ] - ) - - site_packages_dir = Path(sysconfig.get_path("purelib")) - - for file in this_dir.glob("yaeos_compiled.*"): - target_dir = site_packages_dir / "yaeos" / "compiled_module" - target_dir.mkdir(parents=True, exist_ok=True) - shutil.move(file, target_dir) + build_library() + # ============================================================================= # Building for developers (editable installation) @@ -73,34 +85,7 @@ def finalize_options(self): pass def run(self): - build_dir = Path("..") / "build" / "python" - link_dir = build_dir.absolute() / "lib" - incl_dir = build_dir.absolute() / "include" - this_dir = Path(".") - - subprocess.check_call( - ["fpm", "install", "--profile", "release", "--prefix", build_dir] - ) - - subprocess.check_call( - [ - "f2py", - "-m", - "yaeos_compiled", - f"-L{link_dir}", - f"-I{incl_dir}", - "-c", - "yaeos/fortran_wrap/yaeos_c.f90", - "-lyaeos", - "--backend", - "meson", - ] - ) - - for file in this_dir.glob("yaeos_compiled.*"): - target_dir = Path(".") / "yaeos" / "compiled_module" - target_dir.mkdir(parents=True, exist_ok=True) - shutil.move(file, target_dir) + build_library() class CustomInstall(install): @@ -126,10 +111,6 @@ def run(self): }, include_package_data=True, exclude_package_data={ - "yaeos": [ - "__pycache__", - "*.f90", - "*.egg-info" - ], - } + "yaeos": ["__pycache__", "*.f90", "*.egg-info"], + }, ) From f5be76a07ee9431a0cf9019f53fb8629b1fd090e Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Sat, 29 Jun 2024 23:10:39 -0300 Subject: [PATCH 033/167] det --- app/phase_diagram.f90 | 53 ++++++++++++++++--------------------------- 1 file changed, 19 insertions(+), 34 deletions(-) diff --git a/app/phase_diagram.f90 b/app/phase_diagram.f90 index 3250b5ff9..5eeb9087c 100644 --- a/app/phase_diagram.f90 +++ b/app/phase_diagram.f90 @@ -4,50 +4,35 @@ program phase_diagram use yaeos__phase_equilibria_auxiliar, only: k_wilson implicit none + integer, parameter :: nc=2 class(ArModel), allocatable :: model type(EquilibriaState) :: init type(PTEnvel2) :: envelope - integer, parameter :: nc=2 - integer :: i - real(pr) :: n(nc), tc(nc), pc(nc), w(nc), kij(nc, nc), lij(nc, nc), T + real(pr) :: n(nc), tc(nc), pc(nc), w(nc), T type(Substance) :: sus(nc) forsus_dir = "build/dependencies/forsus/" // forsus_default_dir + sus(1) = Substance("methane") sus(2) = Substance("n-hexane") + call get_critical_constants(sus, tc, pc, w) - n = [0.9_pr, 0.1_pr] ! Composition - tc = sus%critical%critical_temperature%value - pc = sus%critical%critical_pressure%value/1e5 - w = sus%critical%acentric_factor%value - - kij = 0 - kij(1, 2) = 0.0 - kij(2, 1) = kij(1, 2) - - lij = 0 + model = PengRobinson76(tc, pc, w) - model = PengRobinson76(tc, pc, w, kij, lij) - - ! Calculate a dew point + n = [0.9_pr, 0.1_pr] ! Composition T = 150 - do i=0, 6 - kij(1, 2) = 0._pr + real(i,pr)/10 - kij(2, 1) = kij(1, 2) - lij = kij/10 - - model = PengRobinson78(tc, pc, w, kij, lij) - - init = saturation_temperature(model, n, P=1._pr, kind="dew", t0=150._pr) - init%x = 1/k_wilson(model, init%T, init%P) * init%y - envelope = pt_envelope_2ph(model, n, init, delta_0=0.01_pr, points=1000) - write(1, *) envelope - - init = saturation_pressure(model, n, T=150._pr, kind="bubble", p0=40._pr) - envelope = pt_envelope_2ph(model, n, init, points=1000) - write(1, *) envelope - - end do - + init = saturation_temperature(model, n, P=1._pr, kind="dew", t0=150._pr) + envelope = pt_envelope_2ph(model, n, init, delta_0=0.01_pr, points=1000) + write(*, *) envelope + +contains + + subroutine get_critical_constants(subs, tc, pc, w) + type(Substance) :: subs(:) + real(pr) :: tc(:), pc(:), w(:) + tc = sus%critical%critical_temperature%value + pc = sus%critical%critical_pressure%value/1e5 + w = sus%critical%acentric_factor%value + end subroutine end program phase_diagram From c4de098275d2019dd0767f6dc1c75ee120aff7b7 Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Sun, 30 Jun 2024 12:33:52 -0300 Subject: [PATCH 034/167] ifort --- app/fit.f90 | 9 +++++++- .../boundaries/phase_envelopes_pt.f90 | 21 ++++++++++++------- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/app/fit.f90 b/app/fit.f90 index 148c267e2..0cd0e9034 100644 --- a/app/fit.f90 +++ b/app/fit.f90 @@ -71,7 +71,14 @@ function model_from_X(problem, X) result(model) ge = NRTL(a, b, c) - model = problem%model + associate (pm => problem%model) + select type(pm) + type is (CubicEoS) + model = pm + end select + end associate + + ! model = problem%model select type(model) class is (CubicEoS) diff --git a/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 b/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 index 498baf623..dd0895b66 100644 --- a/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 +++ b/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 @@ -235,13 +235,20 @@ subroutine update_specification(X, ns, S, dS, dXdS, iterations) ! ============================================================== ! Save the point ! -------------------------------------------------------------- - envelopes%points = [& - envelopes%points, & - EquilibriaState(& - kind=kind, & - x=z, Vx=0._pr, y=exp(X(:nc))*z, Vy=0, & - T=exp(X(nc+1)), P=exp(X(nc+2)), beta=0._pr, iters=iterations) & - ] + new_point : block + type(EquilibriaState) :: point + + real(pr) :: y(nc), T, P + + T = exp(X(nc+1)) + P = exp(X(nc+2)) + y = exp(X(:nc))*z + + point = EquilibriaState(kind=kind, x=z, Vx=0._pr, y=y, Vy=0, & + T=T, P=P, beta=0._pr, iters=iterations) + + envelopes%points = [envelopes%points, point] + end block new_point ! ============================================================== From 5e9468ce395496454682a32c6473a741b0662434 Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Sun, 30 Jun 2024 12:42:17 -0300 Subject: [PATCH 035/167] fortran-setup --- .github/workflows/CI.yml | 42 +++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 42e2a5491..c966c990e 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -1,25 +1,33 @@ name: CI on: [push] + jobs: Build: runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - os: [ubuntu-latest] - gcc_v: [10] # Version of GFortran we want to use. - python-version: [3.9] - env: - FC: gfortran-${{ matrix.gcc_v }} - GCC_V: ${{ matrix.gcc_v }} - + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest] + python-version: [3.9] + toolchain: + - {compiler: gcc, version: 13} + - {compiler: intel-classic, version: '2021.10'} + # - {compiler: intel, version: '2023.2'} + # - {compiler: nvidia-hpc, version: '23.11'} steps: - name: Checkout code uses: actions/checkout@v2 with: submodules: false + - name: Setup Fortran Compiler + uses: fortran-lang/setup-fortran@v1 + id: setup-fortran + with: + compiler: ${{ matrix.toolchain.compiler }} + version: ${{ matrix.toolchain.version }} + - name: Install Python uses: actions/setup-python@v1 # Use pip to install latest CMake, & FORD/Jin2For, etc. with: @@ -34,31 +42,21 @@ jobs: github-token: ${{ secrets.GITHUB_TOKEN }} - name: Install Python dependencies - if: contains( matrix.os, 'ubuntu') run: | python -m pip install --upgrade pip pip install ford numpy matplotlib gcovr numpy scipy if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - - name: Install GFortran Linux - if: contains( matrix.os, 'ubuntu') - run: | - sudo apt-get install lcov - sudo update-alternatives \ - --install /usr/bin/gcc gcc /usr/bin/gcc-${{ matrix.gcc_v }} 100 \ - --slave /usr/bin/gfortran gfortran /usr/bin/gfortran-${{ matrix.gcc_v }} \ - --slave /usr/bin/gcov gcov /usr/bin/gcov-${{ matrix.gcc_v }} - - name: Install NLopt run: sudo apt-get install libnlopt-dev - name: Compile - run: fpm build --profile release + run: fpm build --profile release --compiler ${{ env.FC }} - name: Run tests run: | - fpm test --profile debug --flag -coverage + fpm test --profile debug --flag -coverage --compiler ${{ env.FC }} bash ci/ci.sh - name: Coverage From 0f7aefb7d4c8a1aa04005735b4f28a5d8f54fe61 Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Sun, 30 Jun 2024 12:43:46 -0300 Subject: [PATCH 036/167] syntx --- .github/workflows/CI.yml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index c966c990e..5786a9b79 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -5,16 +5,16 @@ on: [push] jobs: Build: runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - os: [ubuntu-latest] - python-version: [3.9] - toolchain: - - {compiler: gcc, version: 13} - - {compiler: intel-classic, version: '2021.10'} - # - {compiler: intel, version: '2023.2'} - # - {compiler: nvidia-hpc, version: '23.11'} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest] + python-version: [3.9] + toolchain: + - {compiler: gcc, version: 13} + - {compiler: intel-classic, version: '2021.10'} + # - {compiler: intel, version: '2023.2'} + # - {compiler: nvidia-hpc, version: '23.11'} steps: - name: Checkout code uses: actions/checkout@v2 From 6e20aa931120d591c9f0ae3743a00c96c0fde236 Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Sun, 30 Jun 2024 12:44:28 -0300 Subject: [PATCH 037/167] syntx --- .github/workflows/CI.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 5786a9b79..1ad815721 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -22,11 +22,11 @@ jobs: submodules: false - name: Setup Fortran Compiler - uses: fortran-lang/setup-fortran@v1 - id: setup-fortran - with: - compiler: ${{ matrix.toolchain.compiler }} - version: ${{ matrix.toolchain.version }} + uses: fortran-lang/setup-fortran@v1 + id: setup-fortran + with: + compiler: ${{ matrix.toolchain.compiler }} + version: ${{ matrix.toolchain.version }} - name: Install Python uses: actions/setup-python@v1 # Use pip to install latest CMake, & FORD/Jin2For, etc. From 17c477ed0e371ee1742cb3f7740f6bf581008876 Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Sun, 30 Jun 2024 12:51:47 -0300 Subject: [PATCH 038/167] ci --- .github/workflows/CI.yml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 1ad815721..0a0b1db06 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -11,10 +11,14 @@ jobs: os: [ubuntu-latest] python-version: [3.9] toolchain: + - {compiler: gcc, version: 10} + - {compiler: gcc, version: 11} + - {compiler: gcc, version: 12} - {compiler: gcc, version: 13} - - {compiler: intel-classic, version: '2021.10'} - # - {compiler: intel, version: '2023.2'} - # - {compiler: nvidia-hpc, version: '23.11'} + - {compiler: intel-classic, version: '2024.1'} + - {compiler: intel-classic, version: '2023.2'} + - {compiler: intel, version: '2024.1'} + - {compiler: intel, version: '2023.2'} steps: - name: Checkout code uses: actions/checkout@v2 From 6ce09037598da985ff03e3ea7b00f2863ae08df7 Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Sun, 30 Jun 2024 12:57:40 -0300 Subject: [PATCH 039/167] intel? --- src/fitting/kij_lij.f90 | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/fitting/kij_lij.f90 b/src/fitting/kij_lij.f90 index d58cc300a..b4679825c 100644 --- a/src/fitting/kij_lij.f90 +++ b/src/fitting/kij_lij.f90 @@ -62,7 +62,13 @@ function model_from_X(problem, X) result(model) lij(1, 2) = X(2) lij(2, 1) = X(2) - model = problem%model + + associate(pm => problem%model) + select type(pm) + type is (CubicEoS) + model = pm + end select + end associate select type (model) class is (CubicEoS) From 19049a9b64df5f68b4115ddc7fe5a90b07c5e68b Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Sun, 30 Jun 2024 13:02:23 -0300 Subject: [PATCH 040/167] ci --- .github/workflows/CI.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 0a0b1db06..f572f7350 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -56,7 +56,7 @@ jobs: sudo apt-get install libnlopt-dev - name: Compile - run: fpm build --profile release --compiler ${{ env.FC }} + run: fpm build --profile release --compiler ${{ env.FC }} --c-compiler gcc - name: Run tests run: | From 1c73591212891c40a018021519bb76206ad0106d Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Sun, 30 Jun 2024 14:36:56 -0300 Subject: [PATCH 041/167] iostat --- .../boundaries/phase_envelopes_pt.f90 | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 b/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 index dd0895b66..b5243027b 100644 --- a/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 +++ b/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 @@ -315,24 +315,24 @@ subroutine write_PTEnvel2(pt2, unit, iotype, v_list, iostat, iomsg) cps = [cps, cp] end do - write(unit, "(A, /, /)") "#PTEnvel2" + write(unit, iostat=iostat, "(A, /, /)") "#PTEnvel2" - write(unit, "(A, /)") "#" // pt2%points(1)%kind + write(unit, iostat=iostat, "(A, /)") "#" // pt2%points(1)%kind do i=1, size(pt2%points)-1 ! Change label if passed a critical point if (any(cps - i == 0) .and. i < size(pt2%points)) then - write(unit, "(/, /)") - write(unit, "(A, /)") "#" // pt2%points(i+1)%kind + write(unit, iostat=iostat, "(/, /)") + write(unit, iostat=iostat, "(A, /)") "#" // pt2%points(i+1)%kind end if write(unit, *) pt2%points(i) write(unit, "(/)") end do - write(unit, "(/, /, A, /)") "#Critical" + write(unit, iostat=iostat, "(/, /, A, /)") "#Critical" do cp = 1, size(cps) - write(unit, *) pt2%cps(cp)%T, pt2%cps(cp)%P + write(unit, iostat=iostat, *) pt2%cps(cp)%T, pt2%cps(cp)%P end do end subroutine write_PTEnvel2 From c1073adc257eb77c983034ac09b02a446b595ab2 Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Sun, 30 Jun 2024 14:40:08 -0300 Subject: [PATCH 042/167] coverage only with gfortran --- .github/workflows/CI.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index f572f7350..1d7eb68d3 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -64,6 +64,7 @@ jobs: bash ci/ci.sh - name: Coverage + if: ${{ env.FC }} == "gfortran" run: bash ci/ci.sh coverage - name: Upload coverage reports to Codecov From 52225db645e3f24b082dbc1eb8e3596f33831ff9 Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Sun, 30 Jun 2024 14:41:32 -0300 Subject: [PATCH 043/167] iostat --- .../boundaries/phase_envelopes_pt.f90 | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 b/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 index b5243027b..24c004c93 100644 --- a/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 +++ b/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 @@ -315,24 +315,24 @@ subroutine write_PTEnvel2(pt2, unit, iotype, v_list, iostat, iomsg) cps = [cps, cp] end do - write(unit, iostat=iostat, "(A, /, /)") "#PTEnvel2" + write(unit, "(A, /, /)", iostat=iostat) "#PTEnvel2" - write(unit, iostat=iostat, "(A, /)") "#" // pt2%points(1)%kind + write(unit, "(A, /)") "#" // pt2%points(1)%kind do i=1, size(pt2%points)-1 ! Change label if passed a critical point if (any(cps - i == 0) .and. i < size(pt2%points)) then - write(unit, iostat=iostat, "(/, /)") - write(unit, iostat=iostat, "(A, /)") "#" // pt2%points(i+1)%kind + write(unit, "(/, /)") + write(unit, "(A, /)") "#" // pt2%points(i+1)%kind end if write(unit, *) pt2%points(i) write(unit, "(/)") end do - write(unit, iostat=iostat, "(/, /, A, /)") "#Critical" + write(unit, "(/, /, A, /)") "#Critical" do cp = 1, size(cps) - write(unit, iostat=iostat, *) pt2%cps(cp)%T, pt2%cps(cp)%P + write(unit, *) pt2%cps(cp)%T, pt2%cps(cp)%P end do end subroutine write_PTEnvel2 From 847ed3d19a338d2e6d476984468aeac842aef593 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Sun, 30 Jun 2024 22:03:01 -0300 Subject: [PATCH 044/167] cov only on gfo --- .github/workflows/CI.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 1d7eb68d3..f2f26f2aa 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -64,8 +64,8 @@ jobs: bash ci/ci.sh - name: Coverage - if: ${{ env.FC }} == "gfortran" run: bash ci/ci.sh coverage + if: ${{ env.FC == "gfortran"}} - name: Upload coverage reports to Codecov uses: codecov/codecov-action@v4.0.1 From 4418b72d453a87b75a2dbd92de27d0edb97f188d Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Sun, 30 Jun 2024 22:03:47 -0300 Subject: [PATCH 045/167] cov only on gfo --- .github/workflows/CI.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index f2f26f2aa..b98feec1a 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -65,7 +65,7 @@ jobs: - name: Coverage run: bash ci/ci.sh coverage - if: ${{ env.FC == "gfortran"}} + if: ${{ env.FC == 'gfortran' }} - name: Upload coverage reports to Codecov uses: codecov/codecov-action@v4.0.1 From 69a1b2e26597b85b303d2778610ceb3d56973c1e Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Sun, 30 Jun 2024 22:07:36 -0300 Subject: [PATCH 046/167] cov only on gfo --- .github/workflows/CI.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index b98feec1a..ed07d33ce 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -68,6 +68,7 @@ jobs: if: ${{ env.FC == 'gfortran' }} - name: Upload coverage reports to Codecov + if: ${{ env.FC == 'gfortran' }} uses: codecov/codecov-action@v4.0.1 with: token: ${{ secrets.CODECOV_TOKEN }} From 682ba91784df040cb8f92617f98ec733eb906dc0 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Sun, 30 Jun 2024 22:11:44 -0300 Subject: [PATCH 047/167] cov only on gfo --- .github/workflows/CI.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index ed07d33ce..08bb42492 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -16,9 +16,9 @@ jobs: - {compiler: gcc, version: 12} - {compiler: gcc, version: 13} - {compiler: intel-classic, version: '2024.1'} - - {compiler: intel-classic, version: '2023.2'} - {compiler: intel, version: '2024.1'} - {compiler: intel, version: '2023.2'} + # - {compiler: intel-classic, version: '2023.2'} steps: - name: Checkout code uses: actions/checkout@v2 @@ -55,12 +55,12 @@ jobs: run: sudo apt-get install libnlopt-dev - - name: Compile - run: fpm build --profile release --compiler ${{ env.FC }} --c-compiler gcc + # - name: Compile + # run: fpm build --profile release --compiler ${{ env.FC }} --c-compiler gcc - name: Run tests run: | - fpm test --profile debug --flag -coverage --compiler ${{ env.FC }} + fpm test --profile debug --flag -coverage --compiler ${{ env.FC }} --c-compiler gcc bash ci/ci.sh - name: Coverage From 23e0c2482302b4ff67cac4f526b5e5a57e12e7a0 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Sun, 30 Jun 2024 22:15:09 -0300 Subject: [PATCH 048/167] shorter name for ifort --- src/phase_equilibria/boundaries/phase_envelopes_pt.f90 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 b/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 index 24c004c93..6687473b1 100644 --- a/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 +++ b/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 @@ -107,7 +107,7 @@ function pt_envelope_2ph(& XS = continuation(& foo, X, ns0=ns, S0=S0, & dS0=dS0, max_points=max_points, solver_tol=1.e-9_pr, & - update_specification=update_specification, & + update_specification=update_spec, & solver=solver, stop=stop_conditions & ) contains @@ -187,7 +187,7 @@ subroutine foo(X, ns, S, F, dF, dFdS) dFdS(nc+2) = -1 end subroutine foo - subroutine update_specification(X, ns, S, dS, dXdS, iterations) + subroutine update_spec(X, ns, S, dS, dXdS, iterations) !! Update the specification during continuation. real(pr), intent(in out) :: X(:) !! Vector of variables \([lnK_i \dots , lnT, lnP]\) @@ -290,7 +290,7 @@ subroutine update_specification(X, ns, S, dS, dXdS, iterations) end block cp - end subroutine update_specification + end subroutine update_spec end function pt_envelope_2ph subroutine write_PTEnvel2(pt2, unit, iotype, v_list, iostat, iomsg) From 7b62df1d954e0090fbdb2f6431bda1025c577086 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Mon, 1 Jul 2024 09:49:18 -0300 Subject: [PATCH 049/167] _pr --- src/phase_equilibria/boundaries/phase_envelopes_pt.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 b/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 index 6687473b1..08adce191 100644 --- a/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 +++ b/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 @@ -244,7 +244,7 @@ subroutine update_spec(X, ns, S, dS, dXdS, iterations) P = exp(X(nc+2)) y = exp(X(:nc))*z - point = EquilibriaState(kind=kind, x=z, Vx=0._pr, y=y, Vy=0, & + point = EquilibriaState(kind=kind, x=z, Vx=0._pr, y=y, Vy=0._pr, & T=T, P=P, beta=0._pr, iters=iterations) envelopes%points = [envelopes%points, point] From 64e5f11c5e787372334765c21ac58f0ae3d2730e Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Mon, 1 Jul 2024 10:27:03 -0300 Subject: [PATCH 050/167] Write beta too --- src/phase_equilibria/equilibria_state.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/phase_equilibria/equilibria_state.f90 b/src/phase_equilibria/equilibria_state.f90 index 9903b673a..c4e2f8aa1 100644 --- a/src/phase_equilibria/equilibria_state.f90 +++ b/src/phase_equilibria/equilibria_state.f90 @@ -43,7 +43,7 @@ subroutine write_EquilibriaState(eq, unit, iotype, v_list, iostat, iomsg) character(*), parameter :: nl = new_line("G") - write(unit, *) eq%kind, eq%T, eq%P, eq%x, eq%y + write(unit, *) eq%kind, eq%T, eq%P, eq%beta, eq%x, eq%y end subroutine write_EquilibriaState end module yaeos__equilibria_equilibria_state From 355538fffc5fb16c6e9bd204abf112c4284a2635 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Mon, 1 Jul 2024 10:28:12 -0300 Subject: [PATCH 051/167] Added kind of Equilibirum --- src/phase_equilibria/flash.f90 | 1 + 1 file changed, 1 insertion(+) diff --git a/src/phase_equilibria/flash.f90 b/src/phase_equilibria/flash.f90 index 3de9618b3..bb0f6a0d5 100644 --- a/src/phase_equilibria/flash.f90 +++ b/src/phase_equilibria/flash.f90 @@ -170,6 +170,7 @@ type(EquilibriaState) function flash(model, z, t, v_spec, p_spec, k0, iters) return end if + flash%kind = "split" flash%iters = iters flash%p = p flash%t = t From fd0dc29b9e48a13b95e0f4daaa906832aa6857a4 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Mon, 1 Jul 2024 10:28:30 -0300 Subject: [PATCH 052/167] typo --- src/phase_equilibria/boundaries/phase_envelopes_pt.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 b/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 index 08adce191..fd8f4540c 100644 --- a/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 +++ b/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 @@ -208,7 +208,7 @@ subroutine update_spec(X, ns, S, dS, dXdS, iterations) ! ============================================================== ! Update specification - ! - Dont select T or P near critical poitns + ! - Dont select T or P near critical points ! - Update dS wrt specification units ! - Set step ! -------------------------------------------------------------- From 0589d6948238b697efd9d860ba98853ad5bce2df Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Mon, 1 Jul 2024 10:28:48 -0300 Subject: [PATCH 053/167] format/names --- .../boundaries/phase_envelopes_pt.f90 | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 b/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 index fd8f4540c..434bdec5b 100644 --- a/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 +++ b/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 @@ -244,8 +244,11 @@ subroutine update_spec(X, ns, S, dS, dXdS, iterations) P = exp(X(nc+2)) y = exp(X(:nc))*z - point = EquilibriaState(kind=kind, x=z, Vx=0._pr, y=y, Vy=0._pr, & - T=T, P=P, beta=0._pr, iters=iterations) + + point = EquilibriaState(& + kind=kind, x=z, Vx=0._pr, y=y, Vy=0._pr, & + T=T, P=P, beta=0._pr, iters=iterations & + ) envelopes%points = [envelopes%points, point] end block new_point @@ -254,7 +257,7 @@ subroutine update_spec(X, ns, S, dS, dXdS, iterations) ! ============================================================== ! Handle critical point ! -------------------------------------------------------------- - cp: block + critical: block !! Critical point detection !! If the values of lnK (X[:nc]) change sign then a critical point !! Has passed @@ -287,9 +290,7 @@ subroutine update_spec(X, ns, S, dS, dXdS, iterations) ] ! X = Xc + dXdS*dS end if - - end block cp - + end block critical end subroutine update_spec end function pt_envelope_2ph From 78edf2d0edc03ed6495d657003765138aaa70a3d Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Mon, 1 Jul 2024 10:29:21 -0300 Subject: [PATCH 054/167] doc --- src/phase_equilibria/boundaries/phase_envelopes_pt.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 b/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 index 434bdec5b..d96d755be 100644 --- a/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 +++ b/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 @@ -70,7 +70,7 @@ function pt_envelope_2ph(& real(pr) :: S0 !! Initial specification value integer :: max_points !! Maximum number of points - integer :: max_iterations + integer :: max_iterations !! Maximum number of iterations real(pr) :: X(size(z) + 2) real(pr), allocatable :: XS(:, :) From c8d16649425272ec0a9db34a7d4a080936526783 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Mon, 1 Jul 2024 10:30:02 -0300 Subject: [PATCH 055/167] We are not compatible with the intel-classic compiler yet --- .github/workflows/CI.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 08bb42492..17c921812 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -15,7 +15,7 @@ jobs: - {compiler: gcc, version: 11} - {compiler: gcc, version: 12} - {compiler: gcc, version: 13} - - {compiler: intel-classic, version: '2024.1'} + # - {compiler: intel-classic, version: '2024.1'} - {compiler: intel, version: '2024.1'} - {compiler: intel, version: '2023.2'} # - {compiler: intel-classic, version: '2023.2'} From 5ad9c6fa1b414a7752feda87c277dc3d273e48bc Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Mon, 1 Jul 2024 11:10:03 -0300 Subject: [PATCH 056/167] ign --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 90b2de1a8..9f1cb83d9 100644 --- a/.gitignore +++ b/.gitignore @@ -44,3 +44,5 @@ log_srk-hv srk srk_hv fort.2 +*.egg-info +*ipynb_checkpoints From 95d3b579faf0b1598c187d8fc1e47495194cbe35 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Mon, 1 Jul 2024 11:12:31 -0300 Subject: [PATCH 057/167] phase stability. Using general optimizer --- app/tpd.f90 | 121 +++++++++++++---------- src/phase_equilibria/stability.f90 | 152 ++++++++++++++++++++++++++--- 2 files changed, 206 insertions(+), 67 deletions(-) diff --git a/app/tpd.f90 b/app/tpd.f90 index 9b6166ee4..4eacafba5 100644 --- a/app/tpd.f90 +++ b/app/tpd.f90 @@ -1,54 +1,67 @@ -program main - use yaeos_constants, only: pr - use yaeos_substance, only: Substances - use yaeos_models, only: PengRobinson76, ArModel - use yaeos_thermoprops, only: fugacity_tp - use yaeos_phase_equilibria_stability, only: tangent_plane_distance - type(Substances) :: compos - class(ArModel), allocatable :: model - integer, parameter :: n = 2 - - real(pr) :: tc(n), pc(n), af(n), lnfug_z(n), lnfug_w(n) - real(pr) :: w(n), z(n), t, p - real(pr) :: tpd - - integer :: i - - z = [0.4, 0.6] - tc = [190.564, 425.12] - pc = [45.99, 37.96] - af = [0.0115478, 0.200164] - model = PengRobinson76(tc, pc, af) - - P = 60 - t = 294 - - call fugacity_tp(model, z, t, p, root_type="stable", lnfug=lnfug_z) - lnfug_z = lnfug_z - log(P) - - opt: block - use powellopt, only: bobyqa - real(pr) :: wl(2), wu(2) - integer :: npt - - npt = (n+2 + (n+1)*(n+2)/2) / 2 - wl = 1.e-5_pr - wu = 1 - call bobyqa(n, npt, w, wl, wu, 0.01_pr, 1.e-5_pr, 0, 100, func) - print *, w/sum(w) - end block opt - -contains - - subroutine func(n, x, f) - integer, intent(in) :: n - real(pr), intent(in) :: x(:) - real(pr), intent(out) :: f - - real(pr), dimension(size(x)) :: w, lnfug_w - - w = x/sum(x) - call fugacity_tp(model, w, t, p, lnfug=lnfug_w, root_type="stable") - call tangent_plane_distance(z, lnfug_z, w, lnfug_w-log(P), f) - end subroutine -end program +program phase_diagram + use forsus, only: Substance, forsus_dir + use yaeos + use yaeos__phase_equilibria_stability, only: tpd, min_tpd + use yaeos, only: flash + implicit none + + integer, parameter :: nc=3 + + class(ArModel), allocatable :: model + type(EquilibriaState) :: bub, fr + type(PTEnvel2) :: env + type(Substance) :: sus(nc) + real(pr) :: tc(nc), pc(nc), ac(nc), kij(nc, nc), lij(nc, nc), T, P + real(pr) :: z(nc), w(nc), mintpd + integer :: i, j, k + + + forsus_dir = "build/dependencies/forsus/data/json" + sus(1) = Substance("methane") + sus(2) = Substance("hydrogen sulfide") + sus(3) = Substance("ethane") + + kij = 0 + lij = 0 + + tc = sus%critical%critical_temperature%value + pc = sus%critical%critical_pressure%value/1e5_pr + ac = sus%critical%acentric_factor%value + + model = SoaveRedlichKwong(tc, pc, ac, kij, lij) + + z = [1., 0.1, 1.] + P = 15.6_pr + T = 200._pr + z = z/sum(z) + + do i=1,200, 10 + w(1) = real(i, pr)/100 + do j=i,200, 10 + w(2) = real(200-j,pr)/100 + w(3) = 2 - w(1) - w(2) + mintpd = tpd(model, z, w, p, t) + write(4, *) w(1), w(2), mintpd + end do + write(4, *) "" + end do + + ! write(3, *) env + + call min_tpd(model, z, P, T, mintpd, w) + print *, z, P, T + print *, mintpd + print *, w + print *, w/sum(w) + + fr = flash(model, z, t, p_spec=p, iters=i) + print *, "FLASH", i + write (*, *) fr%x + write (*, *) fr%y + + bub = saturation_pressure(model, z, t-50, kind="bubble") + env = pt_envelope_2ph(model, z, first_point=bub) + + write (1, *) env + +end program phase_diagram diff --git a/src/phase_equilibria/stability.f90 b/src/phase_equilibria/stability.f90 index e99ee3522..4a7b4b5f3 100644 --- a/src/phase_equilibria/stability.f90 +++ b/src/phase_equilibria/stability.f90 @@ -1,19 +1,145 @@ -module yaeos_phase_equilibria_stability - use yaeos_constants, only: pr - use yaeos_models_ar, only: ArModel - use yaeos_thermoprops, only: fugacity_vt +module yaeos__phase_equilibria_stability + !! # Phase Stability module + !! Phase stability related calculations. + !! + !! # Description + !! Contains the basics rotuines to make phase stability analysis for + !! phase-equilibria detection. + !! + !! - `tpd(model, z, w, P, T)`: reduced Tangent-Plane-Distance + !! - `min_tpd(model, z, P, T, mintpd, w)`: Find minimal tpd for a multicomponent mixture + !! + !! # Examples + !! + !! ```fortran + !! ! Obtain the minimal tpd for a binary mixture at \(z_1 = 0.13\) + !! model = PengRobinson76(tc, pc, ac, kij, lij) + !! + !! z = [0.13, 1-0.13] + !! w = [0.1, 0.9] + !! + !! P = 45.6_pr + !! T = 190._pr + !! + !! z = z/sum(z) + !! ----------------------------------------------- + !! ``` + !! + !! # References + !! 1. Thermodynamic Models: Fundamental and Computational Aspects, Michael L. + !! Michelsen, Jørgen M. Mollerup. Tie-Line Publications, Denmark (2004) + !! [doi](http://dx.doi.org/10.1016/j.fluid.2005.11.032) + use yaeos__constants, only: pr, r + use yaeos__thermoprops, only: fugacity_vt, fugacity_tp + use yaeos__models_ar, only: ArModel implicit none contains - subroutine tangent_plane_distance(z, lnphi_z, w, lnphi_w, tpd) - real(pr), intent(in) :: z(:) !! Test phase composition - real(pr), intent(in) :: lnphi_z(:) !! Test phase composition - real(pr), intent(in) :: w(:) !! Trial phase composition - real(pr), intent(in) :: lnphi_w(:) !! Trial phase composition + real(pr) function tpd(model, z, w, P, T, d, dtpd) + class(ArModel), intent(in) :: model + real(pr), intent(in) :: z(:) + real(pr), intent(in) :: w(:) + real(pr), intent(in) :: P + real(pr), intent(in) :: T + real(pr), optional, intent(in) :: d(:) + real(pr), optional, intent(out) :: dtpd(:) - real(pr), intent(out) :: tpd !! Tangent plane distance + real(pr) :: di(size(z)), vz, vw + real(pr) :: lnphi_z(size(z)), lnphi_w(size(z)) - tpd = sum(w * (log(w) + lnphi_w - log(z) - lnphi_z)) - end subroutine -end module + call fugacity_tp(model, w, T=T, P=P, V=Vw, root_type="stable", lnphip=lnphi_w) + lnphi_w = lnphi_w - log(P) + + if (.not. present(d)) then + call fugacity_tp(& + model, z, T=T, P=P, V=Vz, root_type="stable", lnphip=lnphi_z& + ) + lnphi_z = lnphi_z - log(P) + di = log(z) + lnphi_z + end if + + !tpd = sum(w * (log(w) + lnphi_w - di)) + tpd = 1 + sum(w * (log(w) + lnphi_w - di - 1)) + + if (present(dtpd)) then + dtpd = 1 + end if + end function tpd + + subroutine min_tpd(model, z, P, T, mintpd, w) + use nlopt_wrap, only: create, destroy, nlopt_opt, nlopt_algorithm_enum + use nlopt_callback, only: nlopt_func, create_nlopt_func + + class(ArModel) :: model + + real(pr), intent(in) :: z(:), P, T + real(pr), intent(out) :: w(:) + real(pr), intent(out) :: mintpd + + real(pr) :: dx(size(w)) + real(pr) :: lnphi_z(size(z)), di(size(z)) + + real(pr) :: mins(size(w)), ws(size(w), size(w)) + integer :: i + + type(nlopt_opt) :: opt !! Optimizer + type(nlopt_func) :: f !! Function to optimize + type(nlopt_func) :: sum_one !! + + integer :: stat + + f = create_nlopt_func(foo) + sum_one = create_nlopt_func(to_one) + dx = 0.001_pr + + call fugacity_tp(& + model, z, T=T, P=P, root_type="stable", lnphip=lnphi_z& + ) + di = log(z) + lnphi_z - log(P) + + ! opt = nlopt_opt(nlopt_algorithm_enum%LN_SBPLX, size(w)) + opt = nlopt_opt(nlopt_algorithm_enum%LN_NELDERMEAD, size(w)) + ! opt = nlopt_opt(nlopt_algorithm_enum%LD_LBFGS_NOCEDAL, size(w)) + + call opt%set_ftol_rel(0.001_pr) + call opt%set_ftol_abs(0.00001_pr) + call opt%set_min_objective(f) + ! call opt%add_equality_constraint(sum_one, 1.0e-10_pr) + + call opt%set_initial_step(dx) + do i=1,size(w) + w = 0.001_pr + w(i) = 0.999_pr + call opt%optimize(w, mintpd, stat) + mins(i) = mintpd + ws(i, :) = w + end do + + do i=1, size(mins) + print *, mins(i), ws(i, :) + end do + + i = minloc(mins, dim=1) + mintpd = mins(i) + w = ws(i, :) + + call destroy(opt) + contains + + real(pr) function foo(x, gradient, func_data) + real(pr), intent(in) :: x(:) + real(pr), optional, intent(in out) :: gradient(:) + class(*), optional, intent(in) :: func_data + foo = tpd(model, z, x, P, T) + end function foo + + real(pr) function to_one(x, gradient, func_data) result(f) + real(pr), intent(in) :: x(:) + real(pr), intent(inout), optional :: gradient(:) + class(*), intent(in), optional :: func_data + f = sum(x) - 1 + end function to_one + + end subroutine min_tpd +end module yaeos__phase_equilibria_stability From fc20316eae2521a4cba2956342c6c0fb58f8103c Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Mon, 1 Jul 2024 11:33:43 -0300 Subject: [PATCH 058/167] tpd --- fpm.toml | 1 - src/phase_equilibria/stability.f90 | 98 +++++++++++++++++++----------- 2 files changed, 64 insertions(+), 35 deletions(-) diff --git a/fpm.toml b/fpm.toml index 698a95512..5467979cb 100644 --- a/fpm.toml +++ b/fpm.toml @@ -26,7 +26,6 @@ forbear = {git="https://github.com/szaghi/forbear"} json-fortran = {git="https://github.com/jacobwilliams/json-fortran"} nlopt-f = {git="https://github.com/grimme-lab/nlopt-f"} forsus = {git="https://github.com/ipqa-research/forsus"} -nlopt-f.git = "https://github.com/grimme-lab/nlopt-f" [dev-dependencies] test-drive = {git = "https://github.com/fortran-lang/test-drive"} diff --git a/src/phase_equilibria/stability.f90 b/src/phase_equilibria/stability.f90 index 4a7b4b5f3..6e8987947 100644 --- a/src/phase_equilibria/stability.f90 +++ b/src/phase_equilibria/stability.f90 @@ -37,12 +37,48 @@ module yaeos__phase_equilibria_stability contains real(pr) function tpd(model, z, w, P, T, d, dtpd) - class(ArModel), intent(in) :: model - real(pr), intent(in) :: z(:) - real(pr), intent(in) :: w(:) - real(pr), intent(in) :: P - real(pr), intent(in) :: T - real(pr), optional, intent(in) :: d(:) + !! # Alternative formulation of tangent-plane-distance + !! Michelsen's modified \(tpd\) function, \(tm\). + !! + !! # Description + !! Alternative formulation of the reduced tangent plane \(tpd\) function, + !! where the test phase is defined in moles, which enables for unconstrained + !! minimization. + !! \[ + !! tm(W) = 1 + \sum_i W_i (\ln W_i + \ln \phi_i(W) - d_i - 1) + !! \] + !! + !! # Examples + !! + !! ## Calculation of `tm` + !! ```fortran + !! tm = tpd(model, z, w, P, T) + !! --------------------------- + !! ``` + !! + !! ## Using precalculated trial-phase data + !! It is possible to calculate externaly the `d_i` vector and use it for + !! later calculations. + !! ```fortran + !! call fugacity_tp(& + !! model, z, T=T, P=P, V=Vz, root_type="stable", lnphip=lnphi_z& + !! ) + !! lnphi_z = lnphi_z - log(P) + !! di = log(z) + lnphi_z + !! tm = tpd(model, z, w, P, T, d=di) + !! --------------------------- + !! ``` + !! + !! # References + !! 1. Thermodynamic Models: Fundamental and Computational Aspects, Michael L. + !! Michelsen, Jørgen M. Mollerup. Tie-Line Publications, Denmark (2004) + !! [doi](http://dx.doi.org/10.1016/j.fluid.2005.11.032) + class(ArModel), intent(in) :: model !! Thermodynamic model + real(pr), intent(in) :: z(:) !! Feed composition + real(pr), intent(in) :: w(:) !! Test-phase mole numbers vector + real(pr), intent(in) :: P !! Pressure [bar] + real(pr), intent(in) :: T !! Temperature [K] + real(pr), optional, intent(in) :: d(:) !! \(d_i\) vector real(pr), optional, intent(out) :: dtpd(:) real(pr) :: di(size(z)), vz, vw @@ -59,7 +95,6 @@ real(pr) function tpd(model, z, w, P, T, d, dtpd) di = log(z) + lnphi_z end if - !tpd = sum(w * (log(w) + lnphi_w - di)) tpd = 1 + sum(w * (log(w) + lnphi_w - di - 1)) if (present(dtpd)) then @@ -67,15 +102,17 @@ real(pr) function tpd(model, z, w, P, T, d, dtpd) end if end function tpd - subroutine min_tpd(model, z, P, T, mintpd, w) + subroutine min_tpd(model, z, P, T, mintpd, w, all_minima) use nlopt_wrap, only: create, destroy, nlopt_opt, nlopt_algorithm_enum use nlopt_callback, only: nlopt_func, create_nlopt_func - class(ArModel) :: model - - real(pr), intent(in) :: z(:), P, T - real(pr), intent(out) :: w(:) - real(pr), intent(out) :: mintpd + real(pr), intent(in) :: z(:) !! Feed composition + real(pr), intent(in) :: P !! Pressure [bar] + real(pr), intent(in) :: T !! Temperature [K] + real(pr), intent(out) :: w(:) !! Trial composition + real(pr), intent(out) :: mintpd !! Minimal value of \(tm\) + real(pr), optional, intent(out) :: all_minima(:, :) + !! All the found minima real(pr) :: dx(size(w)) real(pr) :: lnphi_z(size(z)), di(size(z)) @@ -85,29 +122,33 @@ subroutine min_tpd(model, z, P, T, mintpd, w) type(nlopt_opt) :: opt !! Optimizer type(nlopt_func) :: f !! Function to optimize - type(nlopt_func) :: sum_one !! integer :: stat f = create_nlopt_func(foo) - sum_one = create_nlopt_func(to_one) dx = 0.001_pr + + ! Calculate feed di call fugacity_tp(& model, z, T=T, P=P, root_type="stable", lnphip=lnphi_z& ) di = log(z) + lnphi_z - log(P) - ! opt = nlopt_opt(nlopt_algorithm_enum%LN_SBPLX, size(w)) + + ! ============================================================== + ! Setup optimizer + ! -------------------------------------------------------------- opt = nlopt_opt(nlopt_algorithm_enum%LN_NELDERMEAD, size(w)) - ! opt = nlopt_opt(nlopt_algorithm_enum%LD_LBFGS_NOCEDAL, size(w)) - call opt%set_ftol_rel(0.001_pr) call opt%set_ftol_abs(0.00001_pr) call opt%set_min_objective(f) - ! call opt%add_equality_constraint(sum_one, 1.0e-10_pr) - call opt%set_initial_step(dx) + + ! ============================================================== + ! Minimize for each component using each quasi-pure component + ! as initialization. + ! -------------------------------------------------------------- do i=1,size(w) w = 0.001_pr w(i) = 0.999_pr @@ -116,30 +157,19 @@ subroutine min_tpd(model, z, P, T, mintpd, w) ws(i, :) = w end do - do i=1, size(mins) - print *, mins(i), ws(i, :) - end do - i = minloc(mins, dim=1) mintpd = mins(i) w = ws(i, :) + if(present(all_minima)) all_minima = ws + call destroy(opt) contains - real(pr) function foo(x, gradient, func_data) real(pr), intent(in) :: x(:) real(pr), optional, intent(in out) :: gradient(:) class(*), optional, intent(in) :: func_data - foo = tpd(model, z, x, P, T) + foo = tpd(model, z, x, P, T, d=di) end function foo - - real(pr) function to_one(x, gradient, func_data) result(f) - real(pr), intent(in) :: x(:) - real(pr), intent(inout), optional :: gradient(:) - class(*), intent(in), optional :: func_data - f = sum(x) - 1 - end function to_one - end subroutine min_tpd end module yaeos__phase_equilibria_stability From 84b1b8e3211b066fee62795d4fcf896ff3e7eec6 Mon Sep 17 00:00:00 2001 From: Salvador Date: Mon, 1 Jul 2024 15:24:23 -0300 Subject: [PATCH 059/167] consistency module doc to the yaeos standard --- src/consistency/consistency.f90 | 24 +++++++-- .../consistency_tests/consistency_armodel.f90 | 46 +++++++++++----- .../consistency_tests/consistency_gemodel.f90 | 54 +++++++++++++------ 3 files changed, 91 insertions(+), 33 deletions(-) diff --git a/src/consistency/consistency.f90 b/src/consistency/consistency.f90 index f3e2f98fe..d6543bed9 100644 --- a/src/consistency/consistency.f90 +++ b/src/consistency/consistency.f90 @@ -1,7 +1,25 @@ module yaeos__consistency - !! Tools to evalaute the consistency of Ar and Ge models. This module also - !! provides subroutines for numeric evaluations of Ar and Ge derivatives from - !! central finite differences. + !! # yaeos__consistency + !! Subroutine to evaluate the consistency of thermodynamic models. + !! + !! # Description + !! Tools to evaluate the consistency of \(A^r\) and \(G^E\) models. This + !! module also provides subroutines for numerical evaluations of \(A^r\) and + !! \(G^E\) derivatives using central finite differences. The purpose of the + !! module is to assist in the development of new models and ensure the + !! accuracy of the derivatives implementation. + !! + !! # Examples + !! For detailed explanations and examples of each consistency test, please + !! refer to the API documentation of each submodule. + !! + !! - \(A^r\) consistency tests: [[yaeos__consistency_armodel]] + !! - \(G^E\) consistency tests: [[yaeos__consistency_gemodel]] + !! + !! # References + !! 1. Michelsen, M. L., & Mollerup, J. M. (2007). Thermodynamic models: + !! Fundamentals & computational aspects (2. ed). Tie-Line Publications. + !! ! Consistency test for ArModels use yaeos__consistency_armodel use yaeos__consistency_gemodel diff --git a/src/consistency/consistency_tests/consistency_armodel.f90 b/src/consistency/consistency_tests/consistency_armodel.f90 index 39f38ffe1..3fb64710d 100644 --- a/src/consistency/consistency_tests/consistency_armodel.f90 +++ b/src/consistency/consistency_tests/consistency_armodel.f90 @@ -1,21 +1,26 @@ module yaeos__consistency_armodel - !! Consistency checks of Helmholtz free energy models. + !! # yaeos__consistency_armodel + !! Consistency checks of Helmholtz free energy models ([[ArModel]]). !! + !! # Description !! This module contains tools to validate the analityc derivatives of - !! implmented Helmholtz free energy models (ArModel). Also, allows to + !! implmented Helmholtz free energy models ([[ArModel]]). Also, allows to !! evaluate the consistency tests described in Thermodynamic Models: !! Fundamentals & Computational Aspects 2 ed. by Michelsen and Mollerup !! Chapter 2 section 3. !! !! Available tools: !! - !! - numeric_ar_derivatives: From an instantiated ArModel evaluate all the - !! Helmholtz free energy derivatives from the central finite difference - !! method. + !! - [[numeric_ar_derivatives]]: From an instantiated [[ArModel]] evaluate + !! all the Helmholtz free energy derivatives from the central finite + !! difference method. !! - !! - ar_consistency: From an instantiated ArModel evaluate all the Michelsen - !! and Mollerup consistency tests (refer to ar_consistency docs for more - !! explanations) + !! - [[ar_consistency]]: From an instantiated [[ArModel]] evaluate all the + !! Michelsen and Mollerup consistency tests. + !! + !! # References + !! 1. Michelsen, M. L., & Mollerup, J. M. (2007). Thermodynamic models: + !! Fundamentals & computational aspects (2. ed). Tie-Line Publications. !! use yaeos__constants, only: pr, R use yaeos__models_ar, only: ArModel @@ -27,8 +32,10 @@ module yaeos__consistency_armodel subroutine ar_consistency(& eos, n, v, t, eq31, eq33, eq34, eq36, eq37 & ) - !! Evaluates the Michelsen and Mollerup (MM) consistency tests. + !! # ar_consistency + !! \(A^r\) models consistency tests. !! + !! # Description !! The evaluated equations are taken from Fundamentals & Computational !! Aspects 2 ed. by Michelsen and Mollerup Chapter 2 section 3. The !! "eq" are evaluations of the left hand side of the following @@ -68,11 +75,14 @@ subroutine ar_consistency(& !! \right)_{P,n} + \frac{H^r(T,P,n)}{RT^2} = 0 !! \] !! + !! The consistency test could be applied to any instantiated [[ArModel]] + !! as shown in the following example. + !! !! # Examples !! !! ```fortran !! use yaeos, only: pr, SoaveRedlichKwong, ArModel - !! use yaeos__consistency, only: ar_consistency + !! use yaeos__consistency_armodel, only: ar_consistency !! !! class(ArModel), allocatable :: model !! real(pr) :: tc(4), pc(4), w(4) @@ -95,8 +105,13 @@ subroutine ar_consistency(& !! model, n, v, t, eq31=eq31, eq33=eq33, eq34=eq34, eq36=eq36, eq37=eq37 & !! ) !! ``` + !! All `eqXX` variables should be close to zero. !! - class(ArModel), intent(in) :: eos !! Model + !! # References + !! 1. Michelsen, M. L., & Mollerup, J. M. (2007). Thermodynamic models: + !! Fundamentals & computational aspects (2. ed). Tie-Line Publications. + !! + class(ArModel), intent(in) :: eos !! Equation of state real(pr), intent(in) :: n(:) !! Moles number vector real(pr), intent(in) :: t !! Temperature [K] real(pr), intent(in) :: v !! Volume [L] @@ -186,13 +201,18 @@ subroutine numeric_ar_derivatives(& eos, n, v, t, d_n, d_v, d_t, & Ar, ArV, ArT, Arn, ArV2, ArT2, ArTV, ArVn, ArTn, Arn2 & ) + !! # numeric_ar_derivatives !! Evaluate the Helmholtz derivatives with central finite difference. !! + !! # Description + !! Tool to facilitate the development of new [[ArModel]] by testing + !! the implementation of analytic derivatives. + !! !! # Examples !! !! ```fortran !! use yaeos, only: pr, SoaveRedlichKwong, ArModel - !! use yaeos__consistency, only: numeric_ar_derivatives + !! use yaeos__consistency_armodel, only: numeric_ar_derivatives !! !! class(ArModel), allocatable :: model !! real(pr) :: tc(4), pc(4), w(4) @@ -221,7 +241,7 @@ subroutine numeric_ar_derivatives(& !! ) !! ``` !! - class(ArModel), intent(in) :: eos !! Model + class(ArModel), intent(in) :: eos !! Equation of state real(pr), intent(in) :: n(:) !! Moles number vector real(pr), intent(in) :: t !! Temperature [K] real(pr), intent(in) :: v !! Volume [L] diff --git a/src/consistency/consistency_tests/consistency_gemodel.f90 b/src/consistency/consistency_tests/consistency_gemodel.f90 index bc1df08b9..35be22413 100644 --- a/src/consistency/consistency_tests/consistency_gemodel.f90 +++ b/src/consistency/consistency_tests/consistency_gemodel.f90 @@ -1,21 +1,26 @@ module yaeos__consistency_gemodel - !! Consistency checks of excess Gibbs free energy models. + !! # yaeos__consistency_gemodel + !! Consistency checks of Helmholtz free energy models ([[GeModel]]). !! + !! # Description !! This module contains tools to validate the analityc derivatives of - !! implmented excess Gibbs free energy models (GeModel). Also, allows to + !! implmented excess Gibbs free energy models ([[GeModel]]). Also, allows to !! evaluate the consistency tests described in Thermodynamic Models: !! Fundamentals & Computational Aspects 2 ed. by Michelsen and Mollerup !! Chapter 5 section 4. !! !! Available tools: !! - !! - numeric_ge_derivatives: From an instantiated GeModel evaluate all the - !! excess Gibbs free energy derivatives from the central finite difference - !! method. + !! - [[numeric_ge_derivatives]]: From an instantiated [[GeModel]] evaluate + !! all the excess Gibbs free energy derivatives from the central finite + !! difference method. !! - !! - ge_consistency: From an instantiated GeModel evaluate all the Michelsen - !! and Mollerup consistency tests (refer to ge_consistency docs for more - !! explanations) + !! - [[ge_consistency]]: From an instantiated GeModel evaluate all the + !! Michelsen and Mollerup consistency tests + !! + !! # References + !! 1. Michelsen, M. L., & Mollerup, J. M. (2007). Thermodynamic models: + !! Fundamentals & computational aspects (2. ed). Tie-Line Publications. !! use yaeos__constants, only: pr, R use yaeos__models_ge, only: GeModel @@ -23,29 +28,39 @@ module yaeos__consistency_gemodel implicit none contains subroutine ge_consistency(model, n, t, eq58, eq59, eq60, eq61) + !! # ge_consistency !! \(G^E\) models consistency tests !! !! # Description !! Evaluate the \(G^E\) models consistency tests described in !! Thermodynamic Models: Fundamentals & Computational Aspects 2 ed. by - !! Michelsen and Mollerup (MM) Chapter 5 section 4. + !! Michelsen and Mollerup (MM) Chapter 5 section 4. The "eq" are + !! evaluations of the left hand side of the following expressions: + !! + !! Equation 58 !! !! \[ - !! eq58 = \sum_i^{NC} n_i \text{ln} \gamma_i - \frac{G^E}{RT} = 0 + !! \sum_i^{NC} n_i \text{ln} \gamma_i - \frac{G^E}{RT} = 0 !! \] !! + !! Equation 59 + !! !! \[ - !! eq59 = \text{ln} \gamma_i - \frac{1}{RT} + !! \text{ln} \gamma_i - \frac{1}{RT} !! \frac{\partial G^E}{\partial n_i} = 0 !! \] !! + !! Equation 60 + !! !! \[ - !! eq60 = \frac{\partial \text{ln} \gamma_i}{\partial n_j} - + !! \frac{\partial \text{ln} \gamma_i}{\partial n_j} - !! \frac{\partial \text{ln} \gamma_j}{\partial n_i} = 0 !! \] !! + !! Equation 61 + !! !! \[ - !! eq61 = \sum_i^{NC} n_i + !! \sum_i^{NC} n_i !! \frac{\partial \text{ln} \gamma_i}{\partial n_j} = 0 !! \] !! @@ -95,7 +110,8 @@ subroutine ge_consistency(model, n, t, eq58, eq59, eq60, eq61) !! ``` !! !! # References - !! Thermodynamic Models: Fundamentals & Computational Aspects 2 ed. Michelsen and Mollerup + !! 1. Michelsen, M. L., & Mollerup, J. M. (2007). Thermodynamic models: + !! Fundamentals & computational aspects (2. ed). Tie-Line Publications. !! class(GeModel), intent(in) :: model !! \(G^E\) model @@ -160,8 +176,12 @@ end subroutine ge_consistency subroutine numeric_ge_derivatives(& model, n, t, d_n, d_t, Ge, GeT, Gen, GeT2, GeTn, Gen2 & ) - !! # Numeric \(G^E\) model derivatives - !! Evaluate the excess Gibbs derivatives with central finite difference. + !! # numeric_ge_derivatives + !! Numeric \(G^E\) model derivatives + !! + !! # Description + !! Tool to facilitate the development of new [[GeModel]] by testing + !! the implementation of analytic derivatives. !! !! # Examples !! @@ -222,7 +242,7 @@ subroutine numeric_ge_derivatives(& !! ``` !! class(GeModel), intent(in) :: model - !!Ge Model + !! \(G^E\) model real(pr), intent(in) :: n(:) !! Moles number vector real(pr), intent(in) :: t From 2e0c498afe68f95eee7273e495e79d18ca16f976 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Mon, 1 Jul 2024 16:21:44 -0300 Subject: [PATCH 060/167] tmp --- app/tpd.f90 | 44 +++++++++++------------------- src/phase_equilibria/stability.f90 | 13 +++++++-- 2 files changed, 26 insertions(+), 31 deletions(-) diff --git a/app/tpd.f90 b/app/tpd.f90 index 4eacafba5..af6c45142 100644 --- a/app/tpd.f90 +++ b/app/tpd.f90 @@ -12,10 +12,9 @@ program phase_diagram type(PTEnvel2) :: env type(Substance) :: sus(nc) real(pr) :: tc(nc), pc(nc), ac(nc), kij(nc, nc), lij(nc, nc), T, P - real(pr) :: z(nc), w(nc), mintpd + real(pr) :: z(nc), w(nc), mintpd, lnphiw(nc), d(nc), wold(nc) integer :: i, j, k - forsus_dir = "build/dependencies/forsus/data/json" sus(1) = Substance("methane") sus(2) = Substance("hydrogen sulfide") @@ -35,33 +34,22 @@ program phase_diagram T = 200._pr z = z/sum(z) - do i=1,200, 10 - w(1) = real(i, pr)/100 - do j=i,200, 10 - w(2) = real(200-j,pr)/100 - w(3) = 2 - w(1) - w(2) - mintpd = tpd(model, z, w, p, t) - write(4, *) w(1), w(2), mintpd - end do - write(4, *) "" - end do - - ! write(3, *) env + ! do j=1,3 + ! w = 0.01 + ! w(j) = 0.98 + ! do i=1,50 + ! wold = w + ! mintpd = tpd(model, z, w, p, t, lnphiw=lnphiw, outd=d) + ! w = exp(d - lnphiw) + ! if (maxval(abs(w - wold)) < 1e-5) exit + ! end do + ! print *, j, mintpd, w + ! end do call min_tpd(model, z, P, T, mintpd, w) - print *, z, P, T - print *, mintpd - print *, w - print *, w/sum(w) - - fr = flash(model, z, t, p_spec=p, iters=i) - print *, "FLASH", i - write (*, *) fr%x - write (*, *) fr%y - - bub = saturation_pressure(model, z, t-50, kind="bubble") - env = pt_envelope_2ph(model, z, first_point=bub) - - write (1, *) env + print *, z, P, T + print *, mintpd, w + ! print *, w + ! print *, w/sum(w) end program phase_diagram diff --git a/src/phase_equilibria/stability.f90 b/src/phase_equilibria/stability.f90 index 6e8987947..a56d0accf 100644 --- a/src/phase_equilibria/stability.f90 +++ b/src/phase_equilibria/stability.f90 @@ -36,7 +36,7 @@ module yaeos__phase_equilibria_stability contains - real(pr) function tpd(model, z, w, P, T, d, dtpd) + real(pr) function tpd(model, z, w, P, T, d, dtpd, lnphiw, outd) !! # Alternative formulation of tangent-plane-distance !! Michelsen's modified \(tpd\) function, \(tm\). !! @@ -80,6 +80,8 @@ real(pr) function tpd(model, z, w, P, T, d, dtpd) real(pr), intent(in) :: T !! Temperature [K] real(pr), optional, intent(in) :: d(:) !! \(d_i\) vector real(pr), optional, intent(out) :: dtpd(:) + real(pr), optional, intent(out) :: lnphiw(:) + real(pr), optional, intent(out) :: outd(:) real(pr) :: di(size(z)), vz, vw real(pr) :: lnphi_z(size(z)), lnphi_w(size(z)) @@ -98,8 +100,11 @@ real(pr) function tpd(model, z, w, P, T, d, dtpd) tpd = 1 + sum(w * (log(w) + lnphi_w - di - 1)) if (present(dtpd)) then - dtpd = 1 + dtpd = log(w) + lnphi_w - di end if + + if (present(lnphiw)) lnphiw = lnphi_w + if (present(outd)) outd = di end function tpd subroutine min_tpd(model, z, P, T, mintpd, w, all_minima) @@ -139,6 +144,8 @@ subroutine min_tpd(model, z, P, T, mintpd, w, all_minima) ! ============================================================== ! Setup optimizer ! -------------------------------------------------------------- + ! opt = nlopt_opt(nlopt_algorithm_enum%LN_NELDERMEAD, size(w)) + ! opt = nlopt_opt(nlopt_algorithm_enum%LD_TNEWTON, size(w)) opt = nlopt_opt(nlopt_algorithm_enum%LN_NELDERMEAD, size(w)) call opt%set_ftol_rel(0.001_pr) call opt%set_ftol_abs(0.00001_pr) @@ -169,7 +176,7 @@ real(pr) function foo(x, gradient, func_data) real(pr), intent(in) :: x(:) real(pr), optional, intent(in out) :: gradient(:) class(*), optional, intent(in) :: func_data - foo = tpd(model, z, x, P, T, d=di) + foo = tpd(model, z, x, P, T, d=di, dtpd=gradient) end function foo end subroutine min_tpd end module yaeos__phase_equilibria_stability From 3e1556940af394573ad354938541e3cf8b2bec8f Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Mon, 1 Jul 2024 16:23:10 -0300 Subject: [PATCH 061/167] nvdia --- .github/workflows/CI.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 17c921812..39a516d5b 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -18,6 +18,7 @@ jobs: # - {compiler: intel-classic, version: '2024.1'} - {compiler: intel, version: '2024.1'} - {compiler: intel, version: '2023.2'} + - {compiler: nvidia-hpc, version: '23.11'} # - {compiler: intel-classic, version: '2023.2'} steps: - name: Checkout code From fab4e9f3ada3e3ae822dfcd68af81fe2a041c218 Mon Sep 17 00:00:00 2001 From: Salvador Date: Mon, 1 Jul 2024 16:46:48 -0300 Subject: [PATCH 062/167] references of UNIFAC --- .../group_contribution/model_parameters.f90 | 92 +++++++--- .../group_contribution/unifac.f90 | 161 +++++++++++++++++- .../group_contribution/unifac_parameters.f90 | 74 +++++++- 3 files changed, 293 insertions(+), 34 deletions(-) diff --git a/src/models/excess_gibbs/group_contribution/model_parameters.f90 b/src/models/excess_gibbs/group_contribution/model_parameters.f90 index 16ec0fa74..0b029f4d8 100644 --- a/src/models/excess_gibbs/group_contribution/model_parameters.f90 +++ b/src/models/excess_gibbs/group_contribution/model_parameters.f90 @@ -23,10 +23,14 @@ module yaeos__models_ge_group_contribution_model_parameters !! \(c_{ij}\) for the maingroups interaction parameters. In the case of !! the classic UNIFAC model that only requires \(a_{ij}\) parameters, the !! \(b_{ij}\) and \(c_{ij}\) must be set as null matrixes. - !! The documentation and source code of `yaeos` `UNIFACParameters` + !! The documentation and source code of `yaeos` [[UNIFACParameters]] !! function could be consulted to understand how to instantiate a - !! `GeGCModelParameters` object with the classic liquid-vapor UNIFAC - !! parameters defined in: https://www.ddbst.com/published-parameters-unifac.html + !! [[GeGCModelParameters]] object with the classic liquid-vapor UNIFAC + !! parameters defined in DDBST. + !! + !! # References + !! 1. [Dortmund Data Bank Software & Separation Technology](https://www.dd + !! bst.com/published-parameters-unifac.html) !! integer, allocatable :: subgroups_ids(:) !! ID of each model's subgroup @@ -82,6 +86,10 @@ function get_subgroup_index(self, subgroup_id) result(subgroup_idx) !! print *, parameters%get_subgroup_index(178) ! Will print: 112 !! ``` !! + !! # References + !! 1. [Dortmund Data Bank Software & Separation Technology](https://www.dd + !! bst.com/published-parameters-unifac.html) + !! class(GeGCModelParameters) :: self integer, intent(in) :: subgroup_id @@ -114,6 +122,10 @@ function get_maingroup_index(self, maingroup_id) result(maingroup_idx) !! print *, parameters%get_maingroup_index(55) ! Will print: 52 !! ``` !! + !! # References + !! 1. [Dortmund Data Bank Software & Separation Technology](https://www.dd + !! bst.com/published-parameters-unifac.html) + !! class(GeGCModelParameters) :: self integer, intent(in) :: maingroup_id @@ -146,6 +158,10 @@ function get_subgroup_maingroup(self, subgroup_id) result(subgroup_maingroup) !! print *, parameters%get_subgroup_maingroup(16) ! Will print: 7 !! ``` !! + !! # References + !! 1. [Dortmund Data Bank Software & Separation Technology](https://www.dd + !! bst.com/published-parameters-unifac.html) + !! class(GeGCModelParameters) :: self integer, intent(in) :: subgroup_id @@ -182,6 +198,10 @@ function get_subgroup_R(self, subgroup_id) result(subgroup_R) !! print *, parameters%get_subgroup_R(1) ! Will print: 0.9011 !! ``` !! + !! # References + !! 1. [Dortmund Data Bank Software & Separation Technology](https://www.dd + !! bst.com/published-parameters-unifac.html) + !! class(GeGCModelParameters) :: self integer, intent(in) :: subgroup_id @@ -218,6 +238,10 @@ function get_subgroup_Q(self, subgroup_id) result(subgroup_Q) !! print *, parameters%get_subgroup_Q(1) ! Will print: 0.8480 !! ``` !! + !! # References + !! 1. [Dortmund Data Bank Software & Separation Technology](https://www.dd + !! bst.com/published-parameters-unifac.html) + !! class(GeGCModelParameters) :: self integer, intent(in) :: subgroup_id @@ -234,10 +258,10 @@ end function get_subgroup_Q function get_maingroups_aij(self, maingroup_i_id, maingroup_j_id) result(aij) !! # get_maingroups_aij - !! Get the interaction parameter \(a_{ij} \) + !! Get the interaction parameter \(a_{ij}\) !! !! # Description - !! Get the interaction parameter \(a_{ij} \) of the maingroups `i` and `j` + !! Get the interaction parameter \(a_{ij}\) of the maingroups `i` and `j` !! ids. !! !! # Examples @@ -254,6 +278,10 @@ function get_maingroups_aij(self, maingroup_i_id, maingroup_j_id) result(aij) !! print *, parameters%get_maingroups_aij(1, 7) ! prints: 1318.0000 !! ``` !! + !! # References + !! 1. [Dortmund Data Bank Software & Separation Technology](https://www.dd + !! bst.com/published-parameters-unifac.html) + !! class(GeGCModelParameters) :: self integer, intent(in) :: maingroup_i_id @@ -261,7 +289,7 @@ function get_maingroups_aij(self, maingroup_i_id, maingroup_j_id) result(aij) integer, intent(in) :: maingroup_j_id !! ID of the maingroup `j` real(pr) :: aij - !! Interaction parameter \(a_{ij} \) + !! Interaction parameter \(a_{ij}\) integer :: i, j @@ -273,10 +301,10 @@ end function get_maingroups_aij function get_maingroups_bij(self, maingroup_i_id, maingroup_j_id) result(bij) !! # get_maingroups_bij - !! Get the interaction parameter \(b_{ij} \) + !! Get the interaction parameter \(b_{ij}\) !! !! # Description - !! Get the interaction parameter \(b_{ij} \) of the maingroups `i` and `j` + !! Get the interaction parameter \(b_{ij}\) of the maingroups `i` and `j` !! ids. !! !! # Examples @@ -293,9 +321,13 @@ function get_maingroups_bij(self, maingroup_i_id, maingroup_j_id) result(bij) !! print *, parameters%get_maingroups_bij(1, 7) ! prints: 0.0 !! ``` !! - !! In the example we obtain 0.0 because UNIFAC only have \(a_{ij} \) + !! In the example we obtain 0.0 because UNIFAC only have \(a_{ij}\) !! parameters !! + !! # References + !! 1. [Dortmund Data Bank Software & Separation Technology](https://www.dd + !! bst.com/published-parameters-unifac.html) + !! class(GeGCModelParameters) :: self integer, intent(in) :: maingroup_i_id @@ -303,7 +335,7 @@ function get_maingroups_bij(self, maingroup_i_id, maingroup_j_id) result(bij) integer, intent(in) :: maingroup_j_id !! ID of the maingroup `j` real(pr) :: bij - !! Interaction parameter \(b_{ij} \) + !! Interaction parameter \(b_{ij}\) integer :: i, j @@ -315,10 +347,10 @@ end function get_maingroups_bij function get_maingroups_cij(self, maingroup_i_id, maingroup_j_id) result(cij) !! # get_maingroups_cij - !! Get the interaction parameter \(c_{ij} \) + !! Get the interaction parameter \(c_{ij}\) !! !! # Description - !! Get the interaction parameter \(c_{ij} \) of the maingroups `i` and `j` + !! Get the interaction parameter \(c_{ij}\) of the maingroups `i` and `j` !! ids. !! !! # Examples @@ -338,6 +370,10 @@ function get_maingroups_cij(self, maingroup_i_id, maingroup_j_id) result(cij) !! In the example we obtain 0.0 because UNIFAC only have \(a_{ij} \) !! parameters !! + !! # References + !! 1. [Dortmund Data Bank Software & Separation Technology](https://www.dd + !! bst.com/published-parameters-unifac.html) + !! class(GeGCModelParameters) :: self integer, intent(in) :: maingroup_i_id @@ -345,7 +381,7 @@ function get_maingroups_cij(self, maingroup_i_id, maingroup_j_id) result(cij) integer, intent(in) :: maingroup_j_id !! ID of the maingroup `j` real(pr) :: cij - !! Interaction parameter \(c_{ij} \) + !! Interaction parameter \(c_{ij}\) integer :: i, j @@ -357,10 +393,10 @@ end function get_maingroups_cij function get_subgroups_aij(self, subgroup_i_id, subgroup_j_id) result(aij) !! # get_subgroups_aij - !! Get the interaction parameter \(a_{ij} \) + !! Get the interaction parameter \(a_{ij}\) !! !! # Description - !! Get the interaction parameter \(a_{ij} \) of the subgroups `i` and `j` + !! Get the interaction parameter \(a_{ij}\) of the subgroups `i` and `j` !! ids. !! !! # Examples @@ -378,6 +414,10 @@ function get_subgroups_aij(self, subgroup_i_id, subgroup_j_id) result(aij) !! print *, parameters%get_subgroups_aij(1, 16) ! prints: 1318.0000 !! ``` !! + !! # References + !! 1. [Dortmund Data Bank Software & Separation Technology](https://www.dd + !! bst.com/published-parameters-unifac.html) + !! class(GeGCModelParameters) :: self integer, intent(in) :: subgroup_i_id @@ -385,7 +425,7 @@ function get_subgroups_aij(self, subgroup_i_id, subgroup_j_id) result(aij) integer, intent(in) :: subgroup_j_id !! ID of the subgroup `j` real(pr) :: aij - !! Interaction parameter \(a_{ij} \) + !! Interaction parameter \(a_{ij}\) integer :: mi_id, mj_id, i, j @@ -400,10 +440,10 @@ end function get_subgroups_aij function get_subgroups_bij(self, subgroup_i_id, subgroup_j_id) result(bij) !! # get_subgroups_bij - !! Get the interaction parameter \(b_{ij} \) + !! Get the interaction parameter \(b_{ij}\) !! !! # Description - !! Get the interaction parameter \(b_{ij} \) of the subgroups `i` and `j` + !! Get the interaction parameter \(b_{ij}\) of the subgroups `i` and `j` !! ids. !! !! # Examples @@ -424,6 +464,10 @@ function get_subgroups_bij(self, subgroup_i_id, subgroup_j_id) result(bij) !! In the example we obtain 0.0 because UNIFAC only have \(a_{ij} \) !! parameters !! + !! # References + !! 1. [Dortmund Data Bank Software & Separation Technology](https://www.dd + !! bst.com/published-parameters-unifac.html) + !! class(GeGCModelParameters) :: self integer, intent(in) :: subgroup_i_id @@ -431,7 +475,7 @@ function get_subgroups_bij(self, subgroup_i_id, subgroup_j_id) result(bij) integer, intent(in) :: subgroup_j_id !! ID of the subgroup `j` real(pr) :: bij - !! Interaction parameter \(b_{ij} \) + !! Interaction parameter \(b_{ij}\) integer :: mi_id, mj_id, i, j @@ -446,10 +490,10 @@ end function get_subgroups_bij function get_subgroups_cij(self, subgroup_i_id, subgroup_j_id) result(cij) !! # get_subgroups_cij - !! Get the interaction parameter \(c_{ij} \) + !! Get the interaction parameter \(c_{ij}\) !! !! # Description - !! Get the interaction parameter \(c_{ij} \) of the subgroups `i` and `j` + !! Get the interaction parameter \(c_{ij}\) of the subgroups `i` and `j` !! ids. !! !! # Examples @@ -470,6 +514,10 @@ function get_subgroups_cij(self, subgroup_i_id, subgroup_j_id) result(cij) !! In the example we obtain 0.0 because UNIFAC only have \(a_{ij} \) !! parameters !! + !! # References + !! 1. [Dortmund Data Bank Software & Separation Technology](https://www.dd + !! bst.com/published-parameters-unifac.html) + !! class(GeGCModelParameters) :: self integer, intent(in) :: subgroup_i_id @@ -477,7 +525,7 @@ function get_subgroups_cij(self, subgroup_i_id, subgroup_j_id) result(cij) integer, intent(in) :: subgroup_j_id !! ID of the subgroup `j` real(pr) :: cij - !! Interaction parameter \(c_{ij} \) + !! Interaction parameter \(c_{ij}\) integer :: mi_id, mj_id, i, j diff --git a/src/models/excess_gibbs/group_contribution/unifac.f90 b/src/models/excess_gibbs/group_contribution/unifac.f90 index ca852312b..f89c96174 100644 --- a/src/models/excess_gibbs/group_contribution/unifac.f90 +++ b/src/models/excess_gibbs/group_contribution/unifac.f90 @@ -34,6 +34,41 @@ module yaeos__models_ge_group_contribution_unifac !! ``` !! !! # References + !! 1. [Dortmund Data Bank Software & Separation Technology](https://www.ddbst + !! .com/published-parameters-unifac.html) + !! 2. Fredenslund, A., Jones, R. L., & Prausnitz, J. M. (1975). + !! Group‐contribution estimation of activity coefficients in nonideal liquid + !! mixtures. AIChE Journal, 21(6), 1086–1099. + !! [https://doi.org/10.1002/aic.690210607](https://doi.org/10.1002/aic.690210607) + !! 3. Skjold-Jorgensen, S., Kolbe, B., Gmehling, J., & Rasmussen, P. (1979). + !! Vapor-Liquid Equilibria by UNIFAC Group Contribution. Revision and + !! Extension. Industrial & Engineering Chemistry Process Design and + !! Development, 18(4), 714–722. + !! [https://doi.org/10.1021/i260072a024](https://doi.org/10.1021/i260072a024) + !! 4. Gmehling, J., Rasmussen, P., & Fredenslund, A. (1982). Vapor-liquid + !! equilibriums by UNIFAC group contribution. Revision and extension. 2. + !! Industrial & Engineering Chemistry Process Design and Development, 21(1), + !! 118–127. + !! [https://doi.org/10.1021/i200016a021](https://doi.org/10.1021/i200016a021) + !! 5. Macedo, E. A., Weidlich, U., Gmehling, J., & Rasmussen, P. (1983). + !! Vapor-liquid equilibriums by UNIFAC group contribution. Revision and + !! extension. 3. Industrial & Engineering Chemistry Process Design and + !! Development, 22(4), 676–678. + !! [https://doi.org/10.1021/i200023a023](https://doi.org/10.1021/i200023a023) + !! 6. Tiegs, D., Rasmussen, P., Gmehling, J., & Fredenslund, A. (1987). + !! Vapor-liquid equilibria by UNIFAC group contribution. 4. Revision and + !! extension. Industrial & Engineering Chemistry Research, 26(1), 159–161. + !! [https://doi.org/10.1021/ie00061a030](https://doi.org/10.1021/ie00061a030) + !! 7. Hansen, H. K., Rasmussen, P., Fredenslund, A., Schiller, M., & + !! Gmehling, J. (1991). Vapor-liquid equilibria by UNIFAC group + !! contribution. 5. Revision and extension. Industrial & Engineering + !! Chemistry Research, 30 (10), 2352–2355. + !! [https://doi.org/10.1021/ie00058a017](https://doi.org/10.1021/ie00058a017) + !! 8. Wittig, R., Lohmann, J., & Gmehling, J. (2003). Vapor−Liquid Equilibria + !! by UNIFAC Group Contribution. 6. Revision and Extension. Industrial & + !! Engineering Chemistry Research, 42(1), 183–188. + !! [https://doi.org/10.1021/ie020506l](https://doi.org/10.1021/ie020506l) + !! 9. [SINTEF - Thermopack](https://github.com/thermotools/thermopack) !! use yaeos__constants, only: pr, R use yaeos__models_ge, only: GeModel @@ -64,7 +99,8 @@ module yaeos__models_ge_group_contribution_unifac !! ``` !! !! # References - !! https://www.ddbst.com/published-parameters-unifac.html + !! 1. [Dortmund Data Bank Software & Separation Technology](https://www.ddbst + !! .com/published-parameters-unifac.html) integer, allocatable :: groups_ids(:) !! Indexes (ids) of each subgroup in the main group matrix integer, allocatable :: number_of_groups(:) @@ -114,6 +150,44 @@ module yaeos__models_ge_group_contribution_unifac !! !! print *, ln_gammas ! result: 0.10505475697637946 0.28073129552766890 !! ``` + !! + !! # References + !! 1. [Dortmund Data Bank Software & Separation Technology](https://www.ddbst + !! .com/published-parameters-unifac.html) + !! 2. Fredenslund, A., Jones, R. L., & Prausnitz, J. M. (1975). + !! Group‐contribution estimation of activity coefficients in nonideal liquid + !! mixtures. AIChE Journal, 21(6), 1086–1099. + !! [https://doi.org/10.1002/aic.690210607](https://doi.org/10.1002/aic.690210607) + !! 3. Skjold-Jorgensen, S., Kolbe, B., Gmehling, J., & Rasmussen, P. (1979). + !! Vapor-Liquid Equilibria by UNIFAC Group Contribution. Revision and + !! Extension. Industrial & Engineering Chemistry Process Design and + !! Development, 18(4), 714–722. + !! [https://doi.org/10.1021/i260072a024](https://doi.org/10.1021/i260072a024) + !! 4. Gmehling, J., Rasmussen, P., & Fredenslund, A. (1982). Vapor-liquid + !! equilibriums by UNIFAC group contribution. Revision and extension. 2. + !! Industrial & Engineering Chemistry Process Design and Development, 21(1), + !! 118–127. + !! [https://doi.org/10.1021/i200016a021](https://doi.org/10.1021/i200016a021) + !! 5. Macedo, E. A., Weidlich, U., Gmehling, J., & Rasmussen, P. (1983). + !! Vapor-liquid equilibriums by UNIFAC group contribution. Revision and + !! extension. 3. Industrial & Engineering Chemistry Process Design and + !! Development, 22(4), 676–678. + !! [https://doi.org/10.1021/i200023a023](https://doi.org/10.1021/i200023a023) + !! 6. Tiegs, D., Rasmussen, P., Gmehling, J., & Fredenslund, A. (1987). + !! Vapor-liquid equilibria by UNIFAC group contribution. 4. Revision and + !! extension. Industrial & Engineering Chemistry Research, 26(1), 159–161. + !! [https://doi.org/10.1021/ie00061a030](https://doi.org/10.1021/ie00061a030) + !! 7. Hansen, H. K., Rasmussen, P., Fredenslund, A., Schiller, M., & + !! Gmehling, J. (1991). Vapor-liquid equilibria by UNIFAC group + !! contribution. 5. Revision and extension. Industrial & Engineering + !! Chemistry Research, 30 (10), 2352–2355. + !! [https://doi.org/10.1021/ie00058a017](https://doi.org/10.1021/ie00058a017) + !! 8. Wittig, R., Lohmann, J., & Gmehling, J. (2003). Vapor−Liquid Equilibria + !! by UNIFAC Group Contribution. 6. Revision and Extension. Industrial & + !! Engineering Chemistry Research, 42(1), 183–188. + !! [https://doi.org/10.1021/ie020506l](https://doi.org/10.1021/ie020506l) + !! 9. [SINTEF - Thermopack](https://github.com/thermotools/thermopack) + !! integer :: ngroups !! Total number of individual groups in the mixture integer :: nmolecules @@ -193,6 +267,41 @@ end subroutine temperature_dependence !! \] !! !! # References + !! 1. [Dortmund Data Bank Software & Separation Technology](https://www.ddbst + !! .com/published-parameters-unifac.html) + !! 2. Fredenslund, A., Jones, R. L., & Prausnitz, J. M. (1975). + !! Group‐contribution estimation of activity coefficients in nonideal liquid + !! mixtures. AIChE Journal, 21(6), 1086–1099. + !! [https://doi.org/10.1002/aic.690210607](https://doi.org/10.1002/aic.690210607) + !! 3. Skjold-Jorgensen, S., Kolbe, B., Gmehling, J., & Rasmussen, P. (1979). + !! Vapor-Liquid Equilibria by UNIFAC Group Contribution. Revision and + !! Extension. Industrial & Engineering Chemistry Process Design and + !! Development, 18(4), 714–722. + !! [https://doi.org/10.1021/i260072a024](https://doi.org/10.1021/i260072a024) + !! 4. Gmehling, J., Rasmussen, P., & Fredenslund, A. (1982). Vapor-liquid + !! equilibriums by UNIFAC group contribution. Revision and extension. 2. + !! Industrial & Engineering Chemistry Process Design and Development, 21(1), + !! 118–127. + !! [https://doi.org/10.1021/i200016a021](https://doi.org/10.1021/i200016a021) + !! 5. Macedo, E. A., Weidlich, U., Gmehling, J., & Rasmussen, P. (1983). + !! Vapor-liquid equilibriums by UNIFAC group contribution. Revision and + !! extension. 3. Industrial & Engineering Chemistry Process Design and + !! Development, 22(4), 676–678. + !! [https://doi.org/10.1021/i200023a023](https://doi.org/10.1021/i200023a023) + !! 6. Tiegs, D., Rasmussen, P., Gmehling, J., & Fredenslund, A. (1987). + !! Vapor-liquid equilibria by UNIFAC group contribution. 4. Revision and + !! extension. Industrial & Engineering Chemistry Research, 26(1), 159–161. + !! [https://doi.org/10.1021/ie00061a030](https://doi.org/10.1021/ie00061a030) + !! 7. Hansen, H. K., Rasmussen, P., Fredenslund, A., Schiller, M., & + !! Gmehling, J. (1991). Vapor-liquid equilibria by UNIFAC group + !! contribution. 5. Revision and extension. Industrial & Engineering + !! Chemistry Research, 30 (10), 2352–2355. + !! [https://doi.org/10.1021/ie00058a017](https://doi.org/10.1021/ie00058a017) + !! 8. Wittig, R., Lohmann, J., & Gmehling, J. (2003). Vapor−Liquid Equilibria + !! by UNIFAC Group Contribution. 6. Revision and Extension. Industrial & + !! Engineering Chemistry Research, 42(1), 183–188. + !! [https://doi.org/10.1021/ie020506l](https://doi.org/10.1021/ie020506l) + !! 9. [SINTEF - Thermopack](https://github.com/thermotools/thermopack) !! real(pr), allocatable :: Aij(:, :) contains @@ -263,8 +372,6 @@ subroutine excess_gibbs(self, n, T, Ge, GeT, GeT2, Gen, GeTn, Gen2) !! print *, "ln_gammas: ", ln_gammas !! ``` !! - !! # References - !! class(UNIFAC), intent(in) :: self !! UNIFAC model real(pr), intent(in) :: n(:) @@ -384,7 +491,7 @@ subroutine Ge_combinatorial(self, n, T, Ge, dGe_dn, dGe_dn2) !! \] !! !! # References - !! SINTEF (https://github.com/thermotools/thermopack) + !! 1. [SINTEF - Thermopack](https://github.com/thermotools/thermopack) class(UNIFAC) :: self real(pr), intent(in) :: n(self%nmolecules) @@ -598,7 +705,7 @@ subroutine Ge_residual(self, n, T, Ge, dGe_dn, dGe_dn2, dGe_dT, dGe_dT2, dGe_dTn !! \] !! !! # References - !! SINTEF (https://github.com/thermotools/thermopack) + !! 1. [SINTEF - Thermopack](https://github.com/thermotools/thermopack) class(UNIFAC) :: self real(pr), intent(in) :: n(self%nmolecules) @@ -896,6 +1003,41 @@ subroutine UNIFAC_temperature_dependence(& !! \] !! !! # References + !! 1. [Dortmund Data Bank Software & Separation Technology](https://www.ddbst + !! .com/published-parameters-unifac.html) + !! 2. Fredenslund, A., Jones, R. L., & Prausnitz, J. M. (1975). + !! Group‐contribution estimation of activity coefficients in nonideal liquid + !! mixtures. AIChE Journal, 21(6), 1086–1099. + !! [https://doi.org/10.1002/aic.690210607](https://doi.org/10.1002/aic.690210607) + !! 3. Skjold-Jorgensen, S., Kolbe, B., Gmehling, J., & Rasmussen, P. (1979). + !! Vapor-Liquid Equilibria by UNIFAC Group Contribution. Revision and + !! Extension. Industrial & Engineering Chemistry Process Design and + !! Development, 18(4), 714–722. + !! [https://doi.org/10.1021/i260072a024](https://doi.org/10.1021/i260072a024) + !! 4. Gmehling, J., Rasmussen, P., & Fredenslund, A. (1982). Vapor-liquid + !! equilibriums by UNIFAC group contribution. Revision and extension. 2. + !! Industrial & Engineering Chemistry Process Design and Development, 21(1), + !! 118–127. + !! [https://doi.org/10.1021/i200016a021](https://doi.org/10.1021/i200016a021) + !! 5. Macedo, E. A., Weidlich, U., Gmehling, J., & Rasmussen, P. (1983). + !! Vapor-liquid equilibriums by UNIFAC group contribution. Revision and + !! extension. 3. Industrial & Engineering Chemistry Process Design and + !! Development, 22(4), 676–678. + !! [https://doi.org/10.1021/i200023a023](https://doi.org/10.1021/i200023a023) + !! 6. Tiegs, D., Rasmussen, P., Gmehling, J., & Fredenslund, A. (1987). + !! Vapor-liquid equilibria by UNIFAC group contribution. 4. Revision and + !! extension. Industrial & Engineering Chemistry Research, 26(1), 159–161. + !! [https://doi.org/10.1021/ie00061a030](https://doi.org/10.1021/ie00061a030) + !! 7. Hansen, H. K., Rasmussen, P., Fredenslund, A., Schiller, M., & + !! Gmehling, J. (1991). Vapor-liquid equilibria by UNIFAC group + !! contribution. 5. Revision and extension. Industrial & Engineering + !! Chemistry Research, 30 (10), 2352–2355. + !! [https://doi.org/10.1021/ie00058a017](https://doi.org/10.1021/ie00058a017) + !! 8. Wittig, R., Lohmann, J., & Gmehling, J. (2003). Vapor−Liquid Equilibria + !! by UNIFAC Group Contribution. 6. Revision and Extension. Industrial & + !! Engineering Chemistry Research, 42(1), 183–188. + !! [https://doi.org/10.1021/ie020506l](https://doi.org/10.1021/ie020506l) + !! 9. [SINTEF - Thermopack](https://github.com/thermotools/thermopack) !! class(UNIFACPsi) :: self !! \(\psi\) function @@ -906,9 +1048,9 @@ subroutine UNIFAC_temperature_dependence(& real(pr), optional, intent(out) :: psi(:, :) !! \(\psi\) real(pr), optional, intent(out) :: dpsi_dt(:, :) - !! \(\frac{d \psi\}{dT} \) + !! \(\frac{d \psi}{dT}\) real(pr), optional, intent(out) :: dpsi_dt2(:, :) - !! \(\frac{d^2 \psi\}{dT^2} \) + !! \(\frac{d^2 \psi}{dT^2}\) integer :: i, j integer :: ngroups @@ -942,7 +1084,7 @@ function thetas_i(nm, ng, parameters, stew, molecules) result(thetas_ij) !! dependence) !! !! # References - !! + !! 1. [SINTEF - Thermopack](https://github.com/thermotools/thermopack) integer, intent(in) :: nm !! Number of molecules integer, intent(in) :: ng !! Number of groups type(GeGCModelParameters), intent(in) :: parameters !! UNIFAC parameters @@ -1027,7 +1169,8 @@ type(UNIFAC) function setup_unifac(molecules, parameters) !! ``` !! !! # References - !! https://www.ddbst.com/published-parameters-unifac.html + !! 1. [Dortmund Data Bank Software & Separation Technology](https://www.ddbst + !! .com/published-parameters-unifac.html) !! type(Groups), intent(in) :: molecules(:) !! Molecules (Group type) objects diff --git a/src/models/excess_gibbs/group_contribution/unifac_parameters.f90 b/src/models/excess_gibbs/group_contribution/unifac_parameters.f90 index e87be941d..1c9faf958 100644 --- a/src/models/excess_gibbs/group_contribution/unifac_parameters.f90 +++ b/src/models/excess_gibbs/group_contribution/unifac_parameters.f90 @@ -21,7 +21,41 @@ module yaeos__models_ge_group_contribution_unifac_parameters !! ``` !! !! # References - !! https://www.ddbst.com/published-parameters-unifac.html + !! 1. [Dortmund Data Bank Software & Separation Technology](https://www.ddbst + !! .com/published-parameters-unifac.html) + !! 2. Fredenslund, A., Jones, R. L., & Prausnitz, J. M. (1975). + !! Group‐contribution estimation of activity coefficients in nonideal liquid + !! mixtures. AIChE Journal, 21(6), 1086–1099. + !! [https://doi.org/10.1002/aic.690210607](https://doi.org/10.1002/aic.690210607) + !! 3. Skjold-Jorgensen, S., Kolbe, B., Gmehling, J., & Rasmussen, P. (1979). + !! Vapor-Liquid Equilibria by UNIFAC Group Contribution. Revision and + !! Extension. Industrial & Engineering Chemistry Process Design and + !! Development, 18(4), 714–722. + !! [https://doi.org/10.1021/i260072a024](https://doi.org/10.1021/i260072a024) + !! 4. Gmehling, J., Rasmussen, P., & Fredenslund, A. (1982). Vapor-liquid + !! equilibriums by UNIFAC group contribution. Revision and extension. 2. + !! Industrial & Engineering Chemistry Process Design and Development, 21(1), + !! 118–127. + !! [https://doi.org/10.1021/i200016a021](https://doi.org/10.1021/i200016a021) + !! 5. Macedo, E. A., Weidlich, U., Gmehling, J., & Rasmussen, P. (1983). + !! Vapor-liquid equilibriums by UNIFAC group contribution. Revision and + !! extension. 3. Industrial & Engineering Chemistry Process Design and + !! Development, 22(4), 676–678. + !! [https://doi.org/10.1021/i200023a023](https://doi.org/10.1021/i200023a023) + !! 6. Tiegs, D., Rasmussen, P., Gmehling, J., & Fredenslund, A. (1987). + !! Vapor-liquid equilibria by UNIFAC group contribution. 4. Revision and + !! extension. Industrial & Engineering Chemistry Research, 26(1), 159–161. + !! [https://doi.org/10.1021/ie00061a030](https://doi.org/10.1021/ie00061a030) + !! 7. Hansen, H. K., Rasmussen, P., Fredenslund, A., Schiller, M., & + !! Gmehling, J. (1991). Vapor-liquid equilibria by UNIFAC group + !! contribution. 5. Revision and extension. Industrial & Engineering + !! Chemistry Research, 30 (10), 2352–2355. + !! [https://doi.org/10.1021/ie00058a017](https://doi.org/10.1021/ie00058a017) + !! 8. Wittig, R., Lohmann, J., & Gmehling, J. (2003). Vapor−Liquid Equilibria + !! by UNIFAC Group Contribution. 6. Revision and Extension. Industrial & + !! Engineering Chemistry Research, 42(1), 183–188. + !! [https://doi.org/10.1021/ie020506l](https://doi.org/10.1021/ie020506l) + !! use yaeos__constants, only: pr use yaeos__models_ge_group_contribution_model_parameters, only: GeGCModelParameters implicit none @@ -61,7 +95,7 @@ type(GeGCModelParameters) function UNIFACParameters() !! !! ! Model setup !! ! Disclaimer: the default parameters object can be ommited in the - !! ! setup_unifac call, because if the parameters argument is not + !! ! setup_unifac call, because if the parameters argument is not !! ! provided, the return of the constructor UNIFACParameters() will be !! ! used either way. This is just a demostration. !! model = setup_unifac(molecules, parameters) @@ -73,7 +107,41 @@ type(GeGCModelParameters) function UNIFACParameters() !! ``` !! !! # References - !! https://www.ddbst.com/published-parameters-unifac.html + !! 1. [Dortmund Data Bank Software & Separation Technology](https://www.ddbst + !! .com/published-parameters-unifac.html) + !! 2. Fredenslund, A., Jones, R. L., & Prausnitz, J. M. (1975). + !! Group‐contribution estimation of activity coefficients in nonideal liquid + !! mixtures. AIChE Journal, 21(6), 1086–1099. + !! [https://doi.org/10.1002/aic.690210607](https://doi.org/10.1002/aic.690210607) + !! 3. Skjold-Jorgensen, S., Kolbe, B., Gmehling, J., & Rasmussen, P. (1979). + !! Vapor-Liquid Equilibria by UNIFAC Group Contribution. Revision and + !! Extension. Industrial & Engineering Chemistry Process Design and + !! Development, 18(4), 714–722. + !! [https://doi.org/10.1021/i260072a024](https://doi.org/10.1021/i260072a024) + !! 4. Gmehling, J., Rasmussen, P., & Fredenslund, A. (1982). Vapor-liquid + !! equilibriums by UNIFAC group contribution. Revision and extension. 2. + !! Industrial & Engineering Chemistry Process Design and Development, 21(1), + !! 118–127. + !! [https://doi.org/10.1021/i200016a021](https://doi.org/10.1021/i200016a021) + !! 5. Macedo, E. A., Weidlich, U., Gmehling, J., & Rasmussen, P. (1983). + !! Vapor-liquid equilibriums by UNIFAC group contribution. Revision and + !! extension. 3. Industrial & Engineering Chemistry Process Design and + !! Development, 22(4), 676–678. + !! [https://doi.org/10.1021/i200023a023](https://doi.org/10.1021/i200023a023) + !! 6. Tiegs, D., Rasmussen, P., Gmehling, J., & Fredenslund, A. (1987). + !! Vapor-liquid equilibria by UNIFAC group contribution. 4. Revision and + !! extension. Industrial & Engineering Chemistry Research, 26(1), 159–161. + !! [https://doi.org/10.1021/ie00061a030](https://doi.org/10.1021/ie00061a030) + !! 7. Hansen, H. K., Rasmussen, P., Fredenslund, A., Schiller, M., & + !! Gmehling, J. (1991). Vapor-liquid equilibria by UNIFAC group + !! contribution. 5. Revision and extension. Industrial & Engineering + !! Chemistry Research, 30 (10), 2352–2355. + !! [https://doi.org/10.1021/ie00058a017](https://doi.org/10.1021/ie00058a017) + !! 8. Wittig, R., Lohmann, J., & Gmehling, J. (2003). Vapor−Liquid Equilibria + !! by UNIFAC Group Contribution. 6. Revision and Extension. Industrial & + !! Engineering Chemistry Research, 42(1), 183–188. + !! [https://doi.org/10.1021/ie020506l](https://doi.org/10.1021/ie020506l) + !! ! ======================================================================== ! UNIFAC subgroups ids definition ! ------------------------------------------------------------------------ From a678371cc235e7d63eb3150b0e3764a35187d166 Mon Sep 17 00:00:00 2001 From: salvador Date: Mon, 1 Jul 2024 19:37:33 -0300 Subject: [PATCH 063/167] structure to user documentation --- doc/page/examples/index.md | 3 +++ doc/page/index.md | 1 + doc/page/usage/cubics.md | 5 ---- doc/page/usage/eos/cubics/alpha.md | 3 +++ doc/page/usage/eos/cubics/index.md | 3 +++ doc/page/usage/eos/cubics/mixing.md | 3 +++ doc/page/usage/eos/cubics/pr76.md | 5 ++++ doc/page/usage/eos/cubics/pr78.md | 3 +++ doc/page/usage/eos/cubics/rkpr.md | 3 +++ doc/page/usage/eos/cubics/srk.md | 5 ++++ doc/page/usage/eos/index.md | 6 +++++ doc/page/usage/excessmodels/index.md | 5 ++++ doc/page/usage/excessmodels/nrtl.md | 3 +++ doc/page/usage/excessmodels/unifaclv.md | 3 +++ doc/page/usage/index.md | 8 ++++-- doc/page/usage/newmodels/analtical.md | 3 +++ doc/page/usage/newmodels/autodiff.md | 3 +++ .../usage/{newmodel.md => newmodels/index.md} | 27 +++++++++---------- doc/page/usage/newmodels/tapenade.md | 3 +++ doc/page/usage/phase_equilibrium/envelopes.md | 3 +++ doc/page/usage/phase_equilibrium/flash.md | 3 +++ .../index.md} | 4 +-- .../phase_equilibrium/saturation_points.md | 3 +++ 23 files changed, 84 insertions(+), 24 deletions(-) create mode 100644 doc/page/examples/index.md delete mode 100644 doc/page/usage/cubics.md create mode 100644 doc/page/usage/eos/cubics/alpha.md create mode 100644 doc/page/usage/eos/cubics/index.md create mode 100644 doc/page/usage/eos/cubics/mixing.md create mode 100644 doc/page/usage/eos/cubics/pr76.md create mode 100644 doc/page/usage/eos/cubics/pr78.md create mode 100644 doc/page/usage/eos/cubics/rkpr.md create mode 100644 doc/page/usage/eos/cubics/srk.md create mode 100644 doc/page/usage/eos/index.md create mode 100644 doc/page/usage/excessmodels/index.md create mode 100644 doc/page/usage/excessmodels/nrtl.md create mode 100644 doc/page/usage/excessmodels/unifaclv.md create mode 100644 doc/page/usage/newmodels/analtical.md create mode 100644 doc/page/usage/newmodels/autodiff.md rename doc/page/usage/{newmodel.md => newmodels/index.md} (62%) create mode 100644 doc/page/usage/newmodels/tapenade.md create mode 100644 doc/page/usage/phase_equilibrium/envelopes.md create mode 100644 doc/page/usage/phase_equilibrium/flash.md rename doc/page/usage/{phase_equilibria.md => phase_equilibrium/index.md} (96%) create mode 100644 doc/page/usage/phase_equilibrium/saturation_points.md diff --git a/doc/page/examples/index.md b/doc/page/examples/index.md new file mode 100644 index 000000000..09e11dbed --- /dev/null +++ b/doc/page/examples/index.md @@ -0,0 +1,3 @@ +--- +title: Examples +--- \ No newline at end of file diff --git a/doc/page/index.md b/doc/page/index.md index da1b89dfb..918e8f82a 100644 --- a/doc/page/index.md +++ b/doc/page/index.md @@ -1,6 +1,7 @@ --- title: User documentation ordered_subpage: usage + examples theory contributing --- diff --git a/doc/page/usage/cubics.md b/doc/page/usage/cubics.md deleted file mode 100644 index 539f5958e..000000000 --- a/doc/page/usage/cubics.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Cubic Models ---- - - diff --git a/doc/page/usage/eos/cubics/alpha.md b/doc/page/usage/eos/cubics/alpha.md new file mode 100644 index 000000000..b4cbf7cfd --- /dev/null +++ b/doc/page/usage/eos/cubics/alpha.md @@ -0,0 +1,3 @@ +--- +title: alpha functions +--- \ No newline at end of file diff --git a/doc/page/usage/eos/cubics/index.md b/doc/page/usage/eos/cubics/index.md new file mode 100644 index 000000000..c5ae81a43 --- /dev/null +++ b/doc/page/usage/eos/cubics/index.md @@ -0,0 +1,3 @@ +--- +title: Cubics +--- \ No newline at end of file diff --git a/doc/page/usage/eos/cubics/mixing.md b/doc/page/usage/eos/cubics/mixing.md new file mode 100644 index 000000000..e4a42d30b --- /dev/null +++ b/doc/page/usage/eos/cubics/mixing.md @@ -0,0 +1,3 @@ +--- +title: mixing rules +--- \ No newline at end of file diff --git a/doc/page/usage/eos/cubics/pr76.md b/doc/page/usage/eos/cubics/pr76.md new file mode 100644 index 000000000..3d2f301ed --- /dev/null +++ b/doc/page/usage/eos/cubics/pr76.md @@ -0,0 +1,5 @@ +--- +title: PR76 +--- + + diff --git a/doc/page/usage/eos/cubics/pr78.md b/doc/page/usage/eos/cubics/pr78.md new file mode 100644 index 000000000..92bfd0be2 --- /dev/null +++ b/doc/page/usage/eos/cubics/pr78.md @@ -0,0 +1,3 @@ +--- +title: PR78 +--- \ No newline at end of file diff --git a/doc/page/usage/eos/cubics/rkpr.md b/doc/page/usage/eos/cubics/rkpr.md new file mode 100644 index 000000000..4c7911ccc --- /dev/null +++ b/doc/page/usage/eos/cubics/rkpr.md @@ -0,0 +1,3 @@ +--- +title: RKPR +--- \ No newline at end of file diff --git a/doc/page/usage/eos/cubics/srk.md b/doc/page/usage/eos/cubics/srk.md new file mode 100644 index 000000000..614c7d603 --- /dev/null +++ b/doc/page/usage/eos/cubics/srk.md @@ -0,0 +1,5 @@ +--- +title: SRK +--- + + diff --git a/doc/page/usage/eos/index.md b/doc/page/usage/eos/index.md new file mode 100644 index 000000000..c828b5b17 --- /dev/null +++ b/doc/page/usage/eos/index.md @@ -0,0 +1,6 @@ +--- +title: Equations of State +ordered_subpage: cubics +--- + +Explain ArModels thermoprops here \ No newline at end of file diff --git a/doc/page/usage/excessmodels/index.md b/doc/page/usage/excessmodels/index.md new file mode 100644 index 000000000..397e3a111 --- /dev/null +++ b/doc/page/usage/excessmodels/index.md @@ -0,0 +1,5 @@ +--- +title: Gibbs Excess Models +--- + +Explain thermoprops of Ge models here \ No newline at end of file diff --git a/doc/page/usage/excessmodels/nrtl.md b/doc/page/usage/excessmodels/nrtl.md new file mode 100644 index 000000000..59ebcbf4b --- /dev/null +++ b/doc/page/usage/excessmodels/nrtl.md @@ -0,0 +1,3 @@ +--- +title: NRTL +--- \ No newline at end of file diff --git a/doc/page/usage/excessmodels/unifaclv.md b/doc/page/usage/excessmodels/unifaclv.md new file mode 100644 index 000000000..702206c53 --- /dev/null +++ b/doc/page/usage/excessmodels/unifaclv.md @@ -0,0 +1,3 @@ +--- +title: UNIFAC-LV +--- \ No newline at end of file diff --git a/doc/page/usage/index.md b/doc/page/usage/index.md index 190fdc552..4e421e8ac 100644 --- a/doc/page/usage/index.md +++ b/doc/page/usage/index.md @@ -1,5 +1,9 @@ --- title: Using yaeos +ordered_subpage: eos + excessmodels + phase_equilibrium + newmodels --- [TOC] @@ -54,7 +58,7 @@ extening to a broader variety. In this example we'll show how a model in `yaeos` can be used. We'll take the `Peng-Robinson` equation of state as an example, but all the implemented -models can be seen at [[yaeos_models(module)]]. Inside +models can be seen at [[yaeos__models(module)]]. Inside your `app/main.f90` file use ```fortran @@ -119,6 +123,6 @@ call pressure(model, n, v, t, p, dpdv=dpdv) ! Calculate pressure and dPdV ``` The available thermodynamic properties to calculate can be seen at the -[[yaeos_thermoprops(module)]] module. +[[yaeos__thermoprops(module)]] module. # Phase equilibria diff --git a/doc/page/usage/newmodels/analtical.md b/doc/page/usage/newmodels/analtical.md new file mode 100644 index 000000000..cd0960fa6 --- /dev/null +++ b/doc/page/usage/newmodels/analtical.md @@ -0,0 +1,3 @@ +--- +title: Analytical derivatives +--- diff --git a/doc/page/usage/newmodels/autodiff.md b/doc/page/usage/newmodels/autodiff.md new file mode 100644 index 000000000..26a45ddae --- /dev/null +++ b/doc/page/usage/newmodels/autodiff.md @@ -0,0 +1,3 @@ +--- +title: Automatic differentiation +--- \ No newline at end of file diff --git a/doc/page/usage/newmodel.md b/doc/page/usage/newmodels/index.md similarity index 62% rename from doc/page/usage/newmodel.md rename to doc/page/usage/newmodels/index.md index b98547e77..459e2756f 100644 --- a/doc/page/usage/newmodel.md +++ b/doc/page/usage/newmodels/index.md @@ -3,11 +3,11 @@ title: Adding your own models --- Most of thermodynamic properties calculated in `yaeos` heavily depend on -different kind of models and their respective derivatives. -Since obtaining the derivatives of complex models can be a tedious and -error-prone task. We provide two different ways of getting them automatically -(in some cases with some performance-cost), but there is also the possibility -of using anallyitical obtained expressions instead. +different kind of models and their respective derivatives. Since obtaining the +derivatives of complex models can be a tedious and error-prone task. We provide +two different ways of getting them automatically (in some cases with some +performance-cost), but there is also the possibility of using analytical +obtained expressions instead. The calculation of thermodynamic properties heavily depends on @@ -18,7 +18,8 @@ On `yaeos` there are three different ways of adding your own model:W # Residual Helmholtz models Residual Helmholtz models are the basis to obtain the residual properties. -The main basis in `yaeos` to define a new object that extends the `abstract type` called `ArModel`. Which enforces the expected functionality of these +The main basis in `yaeos` to define a new object that extends the `abstract +type `called` [[ArModel]]. Which enforces the expected functionality of this kind of models. ```fortran @@ -30,8 +31,10 @@ end type The definition of an `ArModel` expects that two procedures are defined: -- [[abs_residual_helmholtz(interface)]]: Procedure to calculate residual Helmholtz energy and it's derivatives -- [[abs_volume_initializer(interface)]]: Volume initializer to find a liquid root, given a pressure and temperature. +- [[abs_residual_helmholtz(interface)]]: Procedure to calculate residual + Helmholtz energy and it's derivatives +- [[abs_volume_initializer(interface)]]: Volume initializer to find a liquid + root, given a pressure and temperature. ```fortran use yaeos, only: ArModel @@ -53,10 +56,4 @@ type(MyNewModel) :: model ! Assuming model parameters are set-up call pressure(model, n, V, T, P) -``` - -## Using operator overloading automatic differentiation with hyperdual numbers - -## Using source-to-source automatic differentiation with tapenade - -## Using analytical obtained expressions +``` \ No newline at end of file diff --git a/doc/page/usage/newmodels/tapenade.md b/doc/page/usage/newmodels/tapenade.md new file mode 100644 index 000000000..861df8e0f --- /dev/null +++ b/doc/page/usage/newmodels/tapenade.md @@ -0,0 +1,3 @@ +--- +title: Tapenade differentiation +--- \ No newline at end of file diff --git a/doc/page/usage/phase_equilibrium/envelopes.md b/doc/page/usage/phase_equilibrium/envelopes.md new file mode 100644 index 000000000..d6281e78c --- /dev/null +++ b/doc/page/usage/phase_equilibrium/envelopes.md @@ -0,0 +1,3 @@ +--- +title: Phase envelopes +--- \ No newline at end of file diff --git a/doc/page/usage/phase_equilibrium/flash.md b/doc/page/usage/phase_equilibrium/flash.md new file mode 100644 index 000000000..8bb965438 --- /dev/null +++ b/doc/page/usage/phase_equilibrium/flash.md @@ -0,0 +1,3 @@ +--- +title: Flash calculations +--- \ No newline at end of file diff --git a/doc/page/usage/phase_equilibria.md b/doc/page/usage/phase_equilibrium/index.md similarity index 96% rename from doc/page/usage/phase_equilibria.md rename to doc/page/usage/phase_equilibrium/index.md index 260c1ed19..789045f15 100644 --- a/doc/page/usage/phase_equilibria.md +++ b/doc/page/usage/phase_equilibrium/index.md @@ -1,5 +1,5 @@ --- -title: Phase Equilibria +title: Phase Equilibrium --- Phase Equilibria calculations are fundamental for the majority of EoS based @@ -34,4 +34,4 @@ When the interest is in calculating a whole phase diagram instead of a single point, or the point is hard to converge. It is better to use a robust mathematical algorithm that eases the calcuation providing an easy-to-converge point and using its information to initialize a next one and continue along the -whole phase-boundary. This can be done with the procedure [[pt_envelope_2ph]] +whole phase-boundary. This can be done with the procedure [[pt_envelope_2ph]] \ No newline at end of file diff --git a/doc/page/usage/phase_equilibrium/saturation_points.md b/doc/page/usage/phase_equilibrium/saturation_points.md new file mode 100644 index 000000000..6c99bc5e5 --- /dev/null +++ b/doc/page/usage/phase_equilibrium/saturation_points.md @@ -0,0 +1,3 @@ +--- +title: Saturation Points +--- \ No newline at end of file From c1039eec5ee65d6dfef5cb6e90f5e34268dcce63 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Tue, 2 Jul 2024 16:06:30 -0300 Subject: [PATCH 064/167] ci --- .github/workflows/CI.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 39a516d5b..db0595e55 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -58,12 +58,18 @@ jobs: # - name: Compile # run: fpm build --profile release --compiler ${{ env.FC }} --c-compiler gcc + + - name: Run tests without coverage + if: ${{ env.FC != 'gfortran' }} + run: | + fpm test --profile debug --compiler ${{ env.FC }} --c-compiler gcc - - name: Run tests + - name: Run tests with coverage + if: ${{ env.FC == 'gfortran' }} run: | fpm test --profile debug --flag -coverage --compiler ${{ env.FC }} --c-compiler gcc bash ci/ci.sh - + - name: Coverage run: bash ci/ci.sh coverage if: ${{ env.FC == 'gfortran' }} From 3da21774397d956606411f799539e50beed37b98 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Tue, 2 Jul 2024 16:13:32 -0300 Subject: [PATCH 065/167] not nvidia --- .github/workflows/CI.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index db0595e55..a9ee25a2d 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -18,7 +18,7 @@ jobs: # - {compiler: intel-classic, version: '2024.1'} - {compiler: intel, version: '2024.1'} - {compiler: intel, version: '2023.2'} - - {compiler: nvidia-hpc, version: '23.11'} + # - {compiler: nvidia-hpc, version: '23.11'} # - {compiler: intel-classic, version: '2023.2'} steps: - name: Checkout code From 3364009b48731cf2ae2498f9c60f498cb7ac0bc0 Mon Sep 17 00:00:00 2001 From: Salvador Date: Tue, 2 Jul 2024 16:52:29 -0300 Subject: [PATCH 066/167] UNIFAC user documentation --- doc/page/usage/excessmodels/unifaclv.md | 105 +++++++++++++++++++++++- 1 file changed, 104 insertions(+), 1 deletion(-) diff --git a/doc/page/usage/excessmodels/unifaclv.md b/doc/page/usage/excessmodels/unifaclv.md index 702206c53..384b0293c 100644 --- a/doc/page/usage/excessmodels/unifaclv.md +++ b/doc/page/usage/excessmodels/unifaclv.md @@ -1,3 +1,106 @@ --- title: UNIFAC-LV ---- \ No newline at end of file +--- + +# UNIFAC + +[[UNIFAC]] (UNIQUAC Functional-group Activity Coefficients) is an Excess Gibbs +free energy model used to estimate activity coefficients in non-ideal mixtures. +It is particularly useful for predicting the phase behavior of chemical +mixtures, including liquid-liquid equilibrium (LLE) and vapor-liquid +equilibrium (VLE). In this model the Excess Gibbs free energy is calculated +from the contribution of a combinatorial term and a residual term. + +$$ \frac{G^E}{RT} = \frac{G^{E,r}}{RT} + \frac{G^{E,c}}{RT} $$ + +Being: + +- Combinatorial: Accounts for the size and shape of the molecules. The involved +equations can be checked in the API documentation: +[[yaeos__models_ge_group_contribution_unifac:Ge_combinatorial]] + +- Residual: Accounts for the energy interactions between different functional +groups. The involved equations can be checked in the API documentation: +[[yaeos__models_ge_group_contribution_unifac:Ge_residual]] + +Each substance of a mixture modeled with [[UNIFAC]] must be represented by a +list a functional groups and other list with the ocurrence of each functional +group on the substance. The list of the functional groups culd be accesed on +the DDBST web page: +[https://www.ddbst.com/published-parameters-unifac.html](https://www.ddbst.com/published-parameters-unifac.html) + +# Examples +## Calculating activity coefficients +We can instantiate a [[UNIFAC]] model with a mixture ethanol-water and +evaluate the logarithm of activity coefficients of the model for a 0.5 mole +fraction of each, and a temperature of 298.0 K. + +```fortran +use yaeos__constants, only: pr +use yaeos__models_ge_group_contribution_unifac, only: Groups, UNIFAC, setup_unifac + +! Variables declarations +type(UNIFAC) :: model +type(Groups) :: molecules(2) +real(pr) :: ln_gammas(2) + +! Variables instances +! Ethanol definition [CH3, CH2, OH] +molecules(1)%groups_ids = [1, 2, 14] ! Subgroups ids +molecules(1)%number_of_groups = [1, 1, 1] ! Subgroups occurrences + +! Water definition [H2O] +molecules(2)%groups_ids = [16] +molecules(2)%number_of_groups = [1] + +! Model setup +model = setup_unifac(molecules) + +! Calculate ln_gammas +call model%ln_activity_coefficient([0.5_pr, 0.5_pr], 298.0_pr, ln_gammas) + +print *, ln_gammas +``` + +You will obtain: + +``` +>>> 0.18534142000449058 0.40331395945417559 +``` + +# References +1. [Dortmund Data Bank Software & Separation Technology](https://www.ddbst +.com/published-parameters-unifac.html) +2. Fredenslund, A., Jones, R. L., & Prausnitz, J. M. (1975). Group‐contribution +estimation of activity coefficients in nonideal liquid mixtures. AIChE Journal, +21(6), 1086–1099. +[https://doi.org/10.1002/aic.690210607](https://doi.org/10.1002/aic.690210607) +3. Skjold-Jorgensen, S., Kolbe, B., Gmehling, J., & Rasmussen, P. (1979). +Vapor-Liquid Equilibria by UNIFAC Group Contribution. Revision and Extension. +Industrial & Engineering Chemistry Process Design and Development, 18(4), +714–722. +[https://doi.org/10.1021/i260072a024](https://doi.org/10.1021/i260072a024) +4. Gmehling, J., Rasmussen, P., & Fredenslund, A. (1982). Vapor-liquid +equilibriums by UNIFAC group contribution. Revision and extension. 2. +Industrial & Engineering Chemistry Process Design and Development, 21(1), +118–127. +[https://doi.org/10.1021/i200016a021](https://doi.org/10.1021/i200016a021) +5. Macedo, E. A., Weidlich, U., Gmehling, J., & Rasmussen, P. (1983). +Vapor-liquid equilibriums by UNIFAC group contribution. Revision and extension. +3. Industrial & Engineering Chemistry Process Design and Development, 22(4), +676–678. +[https://doi.org/10.1021/i200023a023](https://doi.org/10.1021/i200023a023) +6. Tiegs, D., Rasmussen, P., Gmehling, J., & Fredenslund, A. (1987). +Vapor-liquid equilibria by UNIFAC group contribution. 4. Revision and +extension. Industrial & Engineering Chemistry Research, 26(1), 159–161. +[https://doi.org/10.1021/ie00061a030](https://doi.org/10.1021/ie00061a030) +7. Hansen, H. K., Rasmussen, P., Fredenslund, A., Schiller, M., & Gmehling, J. +(1991). Vapor-liquid equilibria by UNIFAC group contribution. 5. Revision and +extension. Industrial & Engineering Chemistry Research, 30 (10), 2352–2355. +[https://doi.org/10.1021/ie00058a017](https://doi.org/10.1021/ie00058a017) +8. Wittig, R., Lohmann, J., & Gmehling, J. (2003). Vapor−Liquid Equilibria by +UNIFAC Group Contribution. 6. Revision and Extension. Industrial & Engineering +Chemistry Research, 42(1), 183–188. +[https://doi.org/10.1021/ie020506l](https://doi.org/10.1021/ie020506l) +9. [SINTEF - Thermopack](https://github.com/thermotools/thermopack) + From 7042daa0275bfaa239204eb72e8e72d5930ef9e5 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Wed, 3 Jul 2024 16:41:03 -0300 Subject: [PATCH 067/167] tpd minimzation using michelsens tm --- src/phase_equilibria/stability.f90 | 35 +++++++++++++++--------------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/src/phase_equilibria/stability.f90 b/src/phase_equilibria/stability.f90 index a56d0accf..cb833ff0a 100644 --- a/src/phase_equilibria/stability.f90 +++ b/src/phase_equilibria/stability.f90 @@ -36,7 +36,7 @@ module yaeos__phase_equilibria_stability contains - real(pr) function tpd(model, z, w, P, T, d, dtpd, lnphiw, outd) + real(pr) function tm(model, z, w, P, T, d, dtpd) !! # Alternative formulation of tangent-plane-distance !! Michelsen's modified \(tpd\) function, \(tm\). !! @@ -80,13 +80,13 @@ real(pr) function tpd(model, z, w, P, T, d, dtpd, lnphiw, outd) real(pr), intent(in) :: T !! Temperature [K] real(pr), optional, intent(in) :: d(:) !! \(d_i\) vector real(pr), optional, intent(out) :: dtpd(:) - real(pr), optional, intent(out) :: lnphiw(:) - real(pr), optional, intent(out) :: outd(:) real(pr) :: di(size(z)), vz, vw real(pr) :: lnphi_z(size(z)), lnphi_w(size(z)) - call fugacity_tp(model, w, T=T, P=P, V=Vw, root_type="stable", lnphip=lnphi_w) + call fugacity_tp(& + model, w, T=T, P=P, V=Vw, root_type="stable", lnphip=lnphi_w & + ) lnphi_w = lnphi_w - log(P) if (.not. present(d)) then @@ -95,17 +95,18 @@ real(pr) function tpd(model, z, w, P, T, d, dtpd, lnphiw, outd) ) lnphi_z = lnphi_z - log(P) di = log(z) + lnphi_z + else + di = d end if - tpd = 1 + sum(w * (log(w) + lnphi_w - di - 1)) + + ! tpd = sum(w * (log(w) + lnphi_w - di)) + tm = 1 + sum(w * (log(w) + lnphi_w - di - 1)) if (present(dtpd)) then dtpd = log(w) + lnphi_w - di end if - - if (present(lnphiw)) lnphiw = lnphi_w - if (present(outd)) outd = di - end function tpd + end function tm subroutine min_tpd(model, z, P, T, mintpd, w, all_minima) use nlopt_wrap, only: create, destroy, nlopt_opt, nlopt_algorithm_enum @@ -122,7 +123,7 @@ subroutine min_tpd(model, z, P, T, mintpd, w, all_minima) real(pr) :: dx(size(w)) real(pr) :: lnphi_z(size(z)), di(size(z)) - real(pr) :: mins(size(w)), ws(size(w), size(w)) + real(pr) :: mins(size(w)), ws(size(w), size(w)), V integer :: i type(nlopt_opt) :: opt !! Optimizer @@ -133,19 +134,15 @@ subroutine min_tpd(model, z, P, T, mintpd, w, all_minima) f = create_nlopt_func(foo) dx = 0.001_pr - ! Calculate feed di - call fugacity_tp(& - model, z, T=T, P=P, root_type="stable", lnphip=lnphi_z& - ) - di = log(z) + lnphi_z - log(P) + call fugacity_tp(model, z, T=T, P=P, V=V, root_type="stable", lnphip=lnphi_z) + lnphi_z = lnphi_z - log(P) + di = log(z) + lnphi_z ! ============================================================== ! Setup optimizer ! -------------------------------------------------------------- - ! opt = nlopt_opt(nlopt_algorithm_enum%LN_NELDERMEAD, size(w)) - ! opt = nlopt_opt(nlopt_algorithm_enum%LD_TNEWTON, size(w)) opt = nlopt_opt(nlopt_algorithm_enum%LN_NELDERMEAD, size(w)) call opt%set_ftol_rel(0.001_pr) call opt%set_ftol_abs(0.00001_pr) @@ -156,6 +153,7 @@ subroutine min_tpd(model, z, P, T, mintpd, w, all_minima) ! Minimize for each component using each quasi-pure component ! as initialization. ! -------------------------------------------------------------- + !$OMP PARALLEL DO PRIVATE(i, w, mintpd, stat) SHARED(opt, ws, mins) do i=1,size(w) w = 0.001_pr w(i) = 0.999_pr @@ -163,6 +161,7 @@ subroutine min_tpd(model, z, P, T, mintpd, w, all_minima) mins(i) = mintpd ws(i, :) = w end do + !$OMP END PARALLEL DO i = minloc(mins, dim=1) mintpd = mins(i) @@ -176,7 +175,7 @@ real(pr) function foo(x, gradient, func_data) real(pr), intent(in) :: x(:) real(pr), optional, intent(in out) :: gradient(:) class(*), optional, intent(in) :: func_data - foo = tpd(model, z, x, P, T, d=di, dtpd=gradient) + foo = tm(model, z, x, P, T, d=di) end function foo end subroutine min_tpd end module yaeos__phase_equilibria_stability From ebdd506747dd565a6c48e44314f74523fa8eb495 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Wed, 3 Jul 2024 16:41:17 -0300 Subject: [PATCH 068/167] test --- test/test_flash.f90 | 51 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 47 insertions(+), 4 deletions(-) diff --git a/test/test_flash.f90 b/test/test_flash.f90 index 9aa9151a7..6b46698a1 100644 --- a/test/test_flash.f90 +++ b/test/test_flash.f90 @@ -11,10 +11,53 @@ subroutine collect_suite(testsuite) new_unittest("FlashPT", test_flash_pt), & new_unittest("FlashTV", test_flash_tv), & new_unittest("FlashPT Failed", test_flash_pt_failed), & - new_unittest("FlashPT Bad Specification", test_flash_pt_bad_spec) & + new_unittest("FlashPT Bad Specification", test_flash_pt_bad_spec), & + new_unittest("Stability tm minimization", test_tm) & ] end subroutine collect_suite + subroutine test_tm(error) + use forsus, only: Substance, forsus_dir + use yaeos + use yaeos__phase_equilibria_stability, only: tm, min_tpd + use yaeos, only: flash + implicit none + type(error_type), allocatable, intent(out) :: error + + integer, parameter :: nc=2 + + class(ArModel), allocatable :: model + type(Substance) :: sus(nc) + real(pr) :: tc(nc), pc(nc), ac(nc) + real(pr) :: z(nc), T, P + real(pr) :: w(nc), mintpd + + forsus_dir = "build/dependencies/forsus/data/json" + sus(1) = Substance("methane") + sus(2) = Substance("hydrogen sulfide") + + z = [0.13, 1-0.13] + z = z/sum(z) + + P = 20.0_pr + T = 190._pr + + tc = sus%critical%critical_temperature%value + pc = sus%critical%critical_pressure%value/1e5_pr + ac = sus%critical%acentric_factor%value + + model = SoaveRedlichKwong(tc, pc, ac) + + call min_tpd(model, z, P, T, mintpd, w) + print *, mintpd + call check(error, abs(mintpd - 5.3e-6_pr) < 1e-5) + + P = 15 + call min_tpd(model, z, P, T, mintpd, w) + print *, mintpd + call check(error, abs(mintpd - (-0.1883_pr)) < 1e-4) + end subroutine test_tm + subroutine test_flash_pt(error) use yaeos, only: pr, EquilibriaState, flash, PengRobinson76, ArModel, fugacity_tp type(error_type), allocatable, intent(out) :: error @@ -61,7 +104,7 @@ subroutine test_flash_tv(error) real(pr) :: x(nc) = [6.8598497458814592E-002, 0.93140153234346601] real(pr) :: y(nc) = [0.61055654015073813, 0.38944348965161085] real(pr) :: vx = 9.3682339483042124E-002 - real(pr) :: vy = 2.3935064128338039 + real(pr) :: vy = 2.3935064128338039 real(pr) :: beta = 0.61148923421371815 real(pr) :: P = 6.097517429661468 @@ -78,8 +121,8 @@ subroutine test_flash_tv(error) V = 1.5_pr t = 210 k0 = (model%components%Pc/10._pr) & - * exp(5.373_pr*(1 + model%components%w)& - * (1 - model%components%Tc/T)) + * exp(5.373_pr*(1 + model%components%w)& + * (1 - model%components%Tc/T)) flash_result = flash(model, n, t=t, v_spec=v, k0=k0, iters=iters) From b27c7c0bdc82cea2609e0b2bc7c37730caaa11ee Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Wed, 3 Jul 2024 16:46:05 -0300 Subject: [PATCH 069/167] simple program for tpd calculation --- app/tpd.f90 | 48 ++++++++++++++++-------------------------------- 1 file changed, 16 insertions(+), 32 deletions(-) diff --git a/app/tpd.f90 b/app/tpd.f90 index af6c45142..f41a513a5 100644 --- a/app/tpd.f90 +++ b/app/tpd.f90 @@ -1,55 +1,39 @@ program phase_diagram use forsus, only: Substance, forsus_dir use yaeos - use yaeos__phase_equilibria_stability, only: tpd, min_tpd + use yaeos__phase_equilibria_stability, only: tm, min_tpd use yaeos, only: flash implicit none - integer, parameter :: nc=3 + integer, parameter :: nc=2 class(ArModel), allocatable :: model - type(EquilibriaState) :: bub, fr - type(PTEnvel2) :: env type(Substance) :: sus(nc) - real(pr) :: tc(nc), pc(nc), ac(nc), kij(nc, nc), lij(nc, nc), T, P - real(pr) :: z(nc), w(nc), mintpd, lnphiw(nc), d(nc), wold(nc) - integer :: i, j, k + real(pr) :: tc(nc), pc(nc), ac(nc) + real(pr) :: z(nc), T, P + real(pr) :: w(nc), mintpd, mins(nc, nc) forsus_dir = "build/dependencies/forsus/data/json" sus(1) = Substance("methane") sus(2) = Substance("hydrogen sulfide") - sus(3) = Substance("ethane") - kij = 0 - lij = 0 + z = [0.13, 1-0.13] + z = z/sum(z) + + P = 20.0_pr + T = 190._pr tc = sus%critical%critical_temperature%value pc = sus%critical%critical_pressure%value/1e5_pr ac = sus%critical%acentric_factor%value + + model = SoaveRedlichKwong(tc, pc, ac) - model = SoaveRedlichKwong(tc, pc, ac, kij, lij) - - z = [1., 0.1, 1.] - P = 15.6_pr - T = 200._pr - z = z/sum(z) - - ! do j=1,3 - ! w = 0.01 - ! w(j) = 0.98 - ! do i=1,50 - ! wold = w - ! mintpd = tpd(model, z, w, p, t, lnphiw=lnphiw, outd=d) - ! w = exp(d - lnphiw) - ! if (maxval(abs(w - wold)) < 1e-5) exit - ! end do - ! print *, j, mintpd, w - ! end do + call min_tpd(model, z, P, T, mintpd, w) + print *, mintpd, w/sum(w) + P = 15 call min_tpd(model, z, P, T, mintpd, w) + print *, mintpd, w/sum(w) - print *, z, P, T - print *, mintpd, w - ! print *, w - ! print *, w/sum(w) end program phase_diagram From 44a6ffcdf37e1236e17f6fb4099ea5c903420e0f Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Wed, 3 Jul 2024 16:46:39 -0300 Subject: [PATCH 070/167] using pures --- src/models/residual_helmholtz/cubic/mixing_rules/base.f90 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/models/residual_helmholtz/cubic/mixing_rules/base.f90 b/src/models/residual_helmholtz/cubic/mixing_rules/base.f90 index 64b238953..bdae22d57 100644 --- a/src/models/residual_helmholtz/cubic/mixing_rules/base.f90 +++ b/src/models/residual_helmholtz/cubic/mixing_rules/base.f90 @@ -22,7 +22,7 @@ module yaeos__models_ar_cubic_mixing_base implicit none contains - subroutine bmix_linear(n, bi, b, dbi, dbij) + pure subroutine bmix_linear(n, bi, b, dbi, dbij) real(pr), intent(in) :: n(:) real(pr), intent(in) :: bi(:) real(pr), intent(out) :: b, dbi(:), dbij(:, :) @@ -32,7 +32,7 @@ subroutine bmix_linear(n, bi, b, dbi, dbij) dbij = 0 end subroutine - subroutine bmix_qmr(n, bi, lij, b, dbi, dbij) + pure subroutine bmix_qmr(n, bi, lij, b, dbi, dbij) real(pr), intent(in) :: n(:) real(pr), intent(in) :: bi(:) real(pr), intent(in) :: lij(:, :) @@ -70,7 +70,7 @@ subroutine bmix_qmr(n, bi, lij, b, dbi, dbij) end do end subroutine - subroutine d1mix_rkpr(n, d1i, d1, dd1i, dd1ij) + pure subroutine d1mix_rkpr(n, d1i, d1, dd1i, dd1ij) !! RKPR \(\delta_1\) parameter mixing rule. !! !! The RKPR EoS doesn't have a constant \(\delta_1\) value for each From 6ae4f9f3e9e192625bb2c8cf96bbe7d1ddef89e8 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Wed, 3 Jul 2024 16:54:36 -0300 Subject: [PATCH 071/167] test --- test/flash_tv.f90 | 215 -------------------------------------------- test/test_flash.f90 | 4 +- 2 files changed, 2 insertions(+), 217 deletions(-) delete mode 100644 test/flash_tv.f90 diff --git a/test/flash_tv.f90 b/test/flash_tv.f90 deleted file mode 100644 index 85e45d670..000000000 --- a/test/flash_tv.f90 +++ /dev/null @@ -1,215 +0,0 @@ -program flash_tv - use yaeos, only: pr, EquilibriaState, flash, PengRobinson76, ArModel, fugacity_tp, pressure - use yaeos__math_linalg, only: solve_system - use fixtures_models, only: binary_PR76 - - implicit none - - integer, parameter :: nc = 2 - - real(pr) :: z(nc) = [0.4, 0.6] - real(pr) :: x(nc) = [0.32424471950363210, 0.67575531029866709] - real(pr) :: y(nc) = [0.91683466155334536, 8.3165368249135715E-002] - real(pr) :: vx = 8.4918883298198036E-002 - real(pr) :: vy = 0.32922132295944545 - - real(pr) :: F(nc+3), dF(nc+3, nc+3) - real(pr) :: Fdx(nc+3),dFdx(nc+3, nc+3) - real(pr) :: dxold(nc+3) - - real(pr) :: K(nc), T=200, V, P - real(pr) :: beta=0.12 - - real(pr) :: vars(nc+3), dx(nc+3) - - class(ArModel), allocatable :: model - type(EquilibriaState) :: flash_result - - integer :: its - - model = binary_PR76() - - V = beta*vy + (1-beta) * vx - - K = y/x - dfdX=0 - df = 0 - - flash_result = flash(model, z, T, p_spec=5._pr, iters=its) - - x = flash_result%x - y = flash_result%y - y(1) = y(1) + 0.2 - y = y/sum(y) - beta = flash_result%beta - vx = flash_result%vx - vy = flash_result%vy - - K = (model%components%Pc/5._pr) & - * exp(5.373_pr*(1 + model%components%w)& - * (1 - model%components%Tc/T)) - - V = beta *vy + (1-beta)*vx - - print *, "true Results" - print *, flash_result%vx, flash_result%vy, flash_result%beta, beta * vy + (1-beta)*vx - print *, flash_result%x - print *, flash_result%y - print *, "------------" - - call flash_TV_DF(model, z, T, V, log(K), beta, vx, vy, F, dF) - print *, "numdiff" - do its = 1,nc+3 - print *, df(its, :) - end do - - call flash_TV_F(model, z, T, V, log(K), beta, vx, vy, F, dF) - print *, "anadiff" - do its = 1,nc+3 - print *, df(its, :) - end do - - stop - - print *, "solve?" - do its=1,1000 - call flash_TV_DF(model, z, T, V, K, beta, vx, vy, F, dF) - - dxold = dx - dx = solve_system(dF, -F) - - ! if (any(isnan(dx)) .or. any(isnan(F))) then - ! K = K - dxold(:nc) - ! beta = beta - dxold(nc+1) - ! vx = vx - dxold(nc+2) - ! vy = vy - dxold(nc+3) - - ! dx = dxold/2 - ! end if - - print *, its, F - - do while (beta + dx(nc+1) > 1 .or. beta + dx(nc+1) < 0) - dx = dx/5 - end do - - K = K + dx(:nc) - beta = beta + dx(nc+1) - vx = vx + dx(nc+2) - vy = vy + dx(nc+3) - - if (maxval(abs(F)) < 1e-3) then - print *, "conv" - exit - end if - end do - - x = z / (beta * (K - 1) + 1) - y = K * x - print *, vx, vy, beta, beta*vy + (1-beta)*vx - print *, x - print *, y - -contains - subroutine flash_TV_F(model, z, T, V, lnK, beta, vx, vy, F, dF) - use yaeos, only: fugacity_vt - class(ArModel), intent(in) :: model - real(pr), intent(in) :: z(:) - real(pr), intent(in) :: T - real(pr), intent(in) :: V - real(pr), intent(in) :: lnK(:) - real(pr), intent(in) :: beta - real(pr), intent(in) :: vx - real(pr), intent(in) :: vy - real(pr), intent(out) :: F(:) - real(pr), optional, intent(out) :: dF(:, :) - - real(pr) :: K(nc) - real(pr) :: x(nc), Px, dPxdn(nc), lnphip_x(nc), dlnPhidx(nc, nc), dPxdV - real(pr) :: y(nc), Py, dPydn(nc), lnphip_y(nc), dlnPhidy(nc, nc), dPydV - - real(pr) :: dxdK(nc), dydK(nc), dxdbeta(nc), dydbeta(nc) - real(pr) :: dVxdbeta, dVydbeta - - integer :: i, j - - F = 0 - K = exp(lnK) - - x = z / (beta * (K - 1) + 1) - y = K * x - - dxdbeta = z * (1-k)/ (beta*(K - 1) + 1)**2 - dydbeta = K * dxdbeta - - dxdK = - beta * z / (beta*(K - 1)+1)**2 - dydK = x + K * dxdK - - call fugacity_vt(model, x, vx, T, P=Px, dPdN=dPxdn, lnphip=lnphip_x, dlnphidn=dlnPhidx, dPdV=dPxdV) - call fugacity_vt(model, y, vy, T, P=Py, dPdN=dPydn, lnphip=lnphip_y, dlnphidn=dlnPhidy, dPdV=dPydV) - - F(:nc) = lnK - lnphip_x + lnphip_y - F(nc + 1) = Px !- Py - F(nc + 2) = V - (beta*Vy + (1-beta)*Vx) - F(nc + 3) = sum((z * (1 - K)) /(1 + beta*(K - 1))) - - if (present(df)) then - df = 0 - do i=1,nc - do j=1,nc - end do - end do - - df(nc+1, :nc) = K * (dPxdn * dxdK - dPydn * dydK) - - df(nc+2, :nc) = 0 - df(nc+2, nc+1) = Vx - Vy - - df(nc+3, :nc) = K*(beta * z * (K-1)/(beta*(K-1)+1)**2 - z/(beta*(K-1)+1)) - end if - end subroutine flash_TV_F - - subroutine flash_TV_DF(model, z, T, V, lnK, beta, vx, vy, F, dF) - class(ArModel), intent(in) :: model - real(pr), intent(in) :: z(:) - real(pr), intent(in) :: T - real(pr), intent(in) :: V - real(pr), intent(in) :: lnK(:) - real(pr), intent(in) :: beta - real(pr), intent(in) :: vx - real(pr), intent(in) :: vy - real(pr), intent(out) :: F(:) - real(pr), intent(out) :: dF(:, :) - - real(pr) :: dx - integer :: i, nc - real(pr) :: lnKdx(size(z)), betadx, vxdx, vydx, Fdx(size(F)) - - nc = size(z) - - dx = 1e-5 - - f = 0 - df = 0 - call flash_TV_F(model, z, T, V, lnK, beta, vx, vy, F, dF) - - do i=1, nc - lnKdx = lnK - lnKdx(i) = lnK(i) + dx - call flash_TV_F(model, z, T, V, lnKdx, beta, vx, vy, Fdx) - df(:, i) = (Fdx - F)/dx - end do - - betadx = beta + dx - call flash_TV_F(model, z, T, V, lnK, betadx, vx, vy, Fdx) - df(:, nc+1) = (Fdx - F)/dx - - vxdx = vx + dx - call flash_TV_F(model, z, T, V, lnK, beta, vxdx, vy, Fdx) - df(:, nc+2) = (Fdx - F)/dx - - vydx = vy + dx - call flash_TV_F(model, z, T, V, lnK, beta, vydx, vy, Fdx) - df(:, nc+3) = (Fdx - F)/dx - end subroutine flash_TV_DF -end program flash_tv \ No newline at end of file diff --git a/test/test_flash.f90 b/test/test_flash.f90 index 6b46698a1..cf68dd6bf 100644 --- a/test/test_flash.f90 +++ b/test/test_flash.f90 @@ -49,13 +49,13 @@ subroutine test_tm(error) model = SoaveRedlichKwong(tc, pc, ac) call min_tpd(model, z, P, T, mintpd, w) - print *, mintpd call check(error, abs(mintpd - 5.3e-6_pr) < 1e-5) P = 15 call min_tpd(model, z, P, T, mintpd, w) - print *, mintpd call check(error, abs(mintpd - (-0.1883_pr)) < 1e-4) + + call check(error, abs(tm(model, z, w, p, t) - mintpd) < 1e-10_pr) end subroutine test_tm subroutine test_flash_pt(error) From 2787a37adb7fe4bf8b08aa4f31c874c752e584fd Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Thu, 4 Jul 2024 10:50:10 -0300 Subject: [PATCH 072/167] prettier? --- app/phase_diagram.f90 | 56 +++++++++++++++++++++++++++++-------------- 1 file changed, 38 insertions(+), 18 deletions(-) diff --git a/app/phase_diagram.f90 b/app/phase_diagram.f90 index 5eeb9087c..3b59e559c 100644 --- a/app/phase_diagram.f90 +++ b/app/phase_diagram.f90 @@ -1,38 +1,58 @@ program phase_diagram + !! Program for calculation of phase diagrams. use forsus, only: Substance, forsus_dir, forsus_default_dir - use yaeos + use yaeos, only: pr, & + SoaveRedlichKwong, PengRobinson76, PengRobinson78, RKPR, & + EquilibriaState, ArModel, PTEnvel2, & + pt_envelope_2ph, saturation_pressure, saturation_temperature use yaeos__phase_equilibria_auxiliar, only: k_wilson implicit none - integer, parameter :: nc=2 - class(ArModel), allocatable :: model - type(EquilibriaState) :: init - type(PTEnvel2) :: envelope - - real(pr) :: n(nc), tc(nc), pc(nc), w(nc), T - type(Substance) :: sus(nc) - + ! =========================================================================== + ! Variables definition + ! --------------------------------------------------------------------------- + integer, parameter :: nc=2 + class(ArModel), allocatable :: model ! Thermodynamic model to be used + type(EquilibriaState) :: sat_point ! Init + type(PTEnvel2) :: envelope ! PT Phase envelope + real(pr) :: tc(nc), pc(nc), w(nc) ! Component's critical constants + real(pr) :: n(nc) ! Termodynamic variables + type(Substance) :: sus(nc) ! Substances to use + ! =========================================================================== + + ! forsus database directory forsus_dir = "build/dependencies/forsus/" // forsus_default_dir + ! Find the selected substances on the database and extract their + ! critical constants sus(1) = Substance("methane") sus(2) = Substance("n-hexane") call get_critical_constants(sus, tc, pc, w) + ! Model definition model = PengRobinson76(tc, pc, w) - n = [0.9_pr, 0.1_pr] ! Composition - T = 150 - init = saturation_temperature(model, n, P=1._pr, kind="dew", t0=150._pr) - envelope = pt_envelope_2ph(model, n, init, delta_0=0.01_pr, points=1000) + ! Composition vector + n = [0.9_pr, 0.1_pr] + + ! Calculate a dew point at low pressure to later + ! initialize the phase envelope + sat_point = saturation_temperature(model, n, P=1._pr, kind="dew", t0=150._pr) + + ! Calculate phase envelope + envelope = pt_envelope_2ph(model, n, sat_point) + + ! Write the phase envelope to screen write(*, *) envelope contains - subroutine get_critical_constants(subs, tc, pc, w) + subroutine get_critical_constants(subs, tc_in, pc_in, w_in) type(Substance) :: subs(:) - real(pr) :: tc(:), pc(:), w(:) - tc = sus%critical%critical_temperature%value - pc = sus%critical%critical_pressure%value/1e5 - w = sus%critical%acentric_factor%value + real(pr), intent(out) :: tc_in(:), pc_in(:), w_in(:) + + tc_in = subs%critical%critical_temperature%value + pc_in = subs%critical%critical_pressure%value/1e5 + w_in = subs%critical%acentric_factor%value end subroutine end program phase_diagram From 26d997710cdda0e1a5c27943d810b1962606485e Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Thu, 4 Jul 2024 11:19:46 -0300 Subject: [PATCH 073/167] envelope doc --- doc/page/usage/phase_equilibrium/envelopes.md | 107 +++++++++++++++++- 1 file changed, 106 insertions(+), 1 deletion(-) diff --git a/doc/page/usage/phase_equilibrium/envelopes.md b/doc/page/usage/phase_equilibrium/envelopes.md index d6281e78c..47e8fb8bb 100644 --- a/doc/page/usage/phase_equilibrium/envelopes.md +++ b/doc/page/usage/phase_equilibrium/envelopes.md @@ -1,3 +1,108 @@ --- title: Phase envelopes ---- \ No newline at end of file +copy_subdir: ../figs +--- + +## Two-phase envelopes +Two-phase envelopes show all the saturation points of a mixture, they can +be seen as the boundary line of transition between monophasic regions to +two-phase equilibria regions. + +In `yaeos` it is possible to calculate two-phase of different kinds. + +- Isoplets + +### Isoplets +Isoplets are the phase boundaries at constant composition +(the global composition) of the system. Here is a simple example with +commentaries on how a phase boundary can be calculated: + +```fortran +program phase_diagram + !! Program for calculation of phase diagrams. + use forsus, only: Substance, forsus_dir, forsus_default_dir + use yaeos, only: pr, & + SoaveRedlichKwong, PengRobinson76, PengRobinson78, RKPR, & + EquilibriaState, ArModel, PTEnvel2, & + pt_envelope_2ph, saturation_pressure, saturation_temperature + use yaeos__phase_equilibria_auxiliar, only: k_wilson + implicit none + + ! =========================================================================== + ! Variables definition + ! --------------------------------------------------------------------------- + integer, parameter :: nc=2 + class(ArModel), allocatable :: model ! Thermodynamic model to be used + type(EquilibriaState) :: sat_point ! Init + type(PTEnvel2) :: envelope ! PT Phase envelope + real(pr) :: tc(nc), pc(nc), w(nc) ! Component's critical constants + real(pr) :: n(nc) ! Termodynamic variables + type(Substance) :: sus(nc) ! Substances to use + ! =========================================================================== + + ! forsus database directory + forsus_dir = "build/dependencies/forsus/" // forsus_default_dir + + ! Find the selected substances on the database and extract their + ! critical constants + sus(1) = Substance("methane") + sus(2) = Substance("n-hexane") + call get_critical_constants(sus, tc, pc, w) + + ! Model definition + model = PengRobinson76(tc, pc, w) + + ! Composition vector + n = [0.9_pr, 0.1_pr] + + ! Calculate a dew point at low pressure to later + ! initialize the phase envelope + sat_point = saturation_temperature(model, n, P=1._pr, kind="dew", t0=150._pr) + + ! Calculate phase envelope + envelope = pt_envelope_2ph(model, n, sat_point) + + ! Write the phase envelope to screen + write(*, *) envelope + +contains + + subroutine get_critical_constants(subs, tc_in, pc_in, w_in) + type(Substance) :: subs(:) + real(pr), intent(out) :: tc_in(:), pc_in(:), w_in(:) + + tc_in = subs%critical%critical_temperature%value + pc_in = subs%critical%critical_pressure%value/1e5 + w_in = subs%critical%acentric_factor%value + end subroutine +end program phase_diagram +``` + +The output of the `write` command will be pre-formatted. Showing in tabular +data with this + +``` +# PTEnvel2 + +# kind of sat point +kind T P [liquid-phase composition vector] [gas-phase composition vector] + +# other kind of sat point +kind T P [liquid-phase composition vector] [gas-phase composition vector] + +# Critical +T P +``` + +Which when plotted with `gnuplot` with: + +```gnuplot +plot "outfile" \ + index "dew" u 2:3 w l title "Dew", \ + "" index "bubble" u 2:3 w l t "Bubble", \ + "" index "Critical" u 1:2 w p pt 7 lc rgb "black" t "CP" +``` + +Gives the following plot: + +![PTEnvel2](../figs/PTEnvel2.png) \ No newline at end of file From 0d524cebc9c4b0e07b45e529ddb39bd81c9b2375 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Thu, 4 Jul 2024 11:20:06 -0300 Subject: [PATCH 074/167] envdoc --- doc/page/usage/figs/PTEnvel2.png | Bin 0 -> 16607 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/page/usage/figs/PTEnvel2.png diff --git a/doc/page/usage/figs/PTEnvel2.png b/doc/page/usage/figs/PTEnvel2.png new file mode 100644 index 0000000000000000000000000000000000000000..6ce136c6d3b92f80f3ebd4c25e907e4677d1823b GIT binary patch literal 16607 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 INt5^g2g8EN>;M1& literal 0 HcmV?d00001 From 156c8f3e7972aef23c7b8fb2e7a3adda3485ecd4 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Thu, 4 Jul 2024 11:44:05 -0300 Subject: [PATCH 075/167] docs --- doc/page/examples/index.md | 3 --- doc/page/index.md | 1 - doc/page/usage/eos/cubics/index.md | 13 ++++++++++++- doc/page/usage/eos/cubics/mixing.md | 12 ++++++++++-- doc/page/usage/eos/cubics/pr76.md | 5 ----- doc/page/usage/eos/cubics/pr78.md | 3 --- doc/page/usage/eos/cubics/rkpr.md | 3 --- doc/page/usage/eos/cubics/srk.md | 5 ----- media/PTEnvel2.png | Bin 0 -> 16631 bytes 9 files changed, 22 insertions(+), 23 deletions(-) delete mode 100644 doc/page/examples/index.md delete mode 100644 doc/page/usage/eos/cubics/pr76.md delete mode 100644 doc/page/usage/eos/cubics/pr78.md delete mode 100644 doc/page/usage/eos/cubics/rkpr.md delete mode 100644 doc/page/usage/eos/cubics/srk.md create mode 100644 media/PTEnvel2.png diff --git a/doc/page/examples/index.md b/doc/page/examples/index.md deleted file mode 100644 index 09e11dbed..000000000 --- a/doc/page/examples/index.md +++ /dev/null @@ -1,3 +0,0 @@ ---- -title: Examples ---- \ No newline at end of file diff --git a/doc/page/index.md b/doc/page/index.md index 918e8f82a..da1b89dfb 100644 --- a/doc/page/index.md +++ b/doc/page/index.md @@ -1,7 +1,6 @@ --- title: User documentation ordered_subpage: usage - examples theory contributing --- diff --git a/doc/page/usage/eos/cubics/index.md b/doc/page/usage/eos/cubics/index.md index c5ae81a43..08325e7be 100644 --- a/doc/page/usage/eos/cubics/index.md +++ b/doc/page/usage/eos/cubics/index.md @@ -1,3 +1,14 @@ --- title: Cubics ---- \ No newline at end of file +--- + +** Table of contents** +[TOC] + +## SoaveRedlichKwong + +## PengRobinson76 + +## PengRobinson78 + +## RKPR \ No newline at end of file diff --git a/doc/page/usage/eos/cubics/mixing.md b/doc/page/usage/eos/cubics/mixing.md index e4a42d30b..012da1264 100644 --- a/doc/page/usage/eos/cubics/mixing.md +++ b/doc/page/usage/eos/cubics/mixing.md @@ -1,3 +1,11 @@ --- -title: mixing rules ---- \ No newline at end of file +title: Mixing Rules +--- + +## Quadratic Mixing Rules + +### Constant $k_ij$ + +## $G^E$ Models Mixing Rules + +### Michelsen's Modified Huron-Vidal Mixing Rules \ No newline at end of file diff --git a/doc/page/usage/eos/cubics/pr76.md b/doc/page/usage/eos/cubics/pr76.md deleted file mode 100644 index 3d2f301ed..000000000 --- a/doc/page/usage/eos/cubics/pr76.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: PR76 ---- - - diff --git a/doc/page/usage/eos/cubics/pr78.md b/doc/page/usage/eos/cubics/pr78.md deleted file mode 100644 index 92bfd0be2..000000000 --- a/doc/page/usage/eos/cubics/pr78.md +++ /dev/null @@ -1,3 +0,0 @@ ---- -title: PR78 ---- \ No newline at end of file diff --git a/doc/page/usage/eos/cubics/rkpr.md b/doc/page/usage/eos/cubics/rkpr.md deleted file mode 100644 index 4c7911ccc..000000000 --- a/doc/page/usage/eos/cubics/rkpr.md +++ /dev/null @@ -1,3 +0,0 @@ ---- -title: RKPR ---- \ No newline at end of file diff --git a/doc/page/usage/eos/cubics/srk.md b/doc/page/usage/eos/cubics/srk.md deleted file mode 100644 index 614c7d603..000000000 --- a/doc/page/usage/eos/cubics/srk.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: SRK ---- - - diff --git a/media/PTEnvel2.png b/media/PTEnvel2.png new file mode 100644 index 0000000000000000000000000000000000000000..6c67366cb382a515243a91566d4de617dd9d477c GIT binary patch literal 16631 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 literal 0 HcmV?d00001 From 958a5f7e5b61d42b4bbf313b2c06ccbd02ea0d6d Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Thu, 4 Jul 2024 14:06:38 -0300 Subject: [PATCH 076/167] docs and crit --- doc/page/index.md | 3 +- doc/page/theory/index.md | 3 - doc/page/usage/eos/cubics/mixing.md | 64 +++++++- doc/page/usage/newmodels/autodiff.md | 152 +++++++++++++++++- doc/page/usage/newmodels/tapenade.md | 3 - .../boundaries/phase_envelopes_pt.f90 | 5 +- 6 files changed, 216 insertions(+), 14 deletions(-) delete mode 100644 doc/page/theory/index.md delete mode 100644 doc/page/usage/newmodels/tapenade.md diff --git a/doc/page/index.md b/doc/page/index.md index da1b89dfb..d182fe490 100644 --- a/doc/page/index.md +++ b/doc/page/index.md @@ -1,7 +1,6 @@ --- title: User documentation ordered_subpage: usage - theory contributing --- @@ -31,4 +30,4 @@ model = setup_model() ! Once the model is set up, the user has access to the properties call pressure(model, V, T, P, dPdN=dPdN) -``` +``` \ No newline at end of file diff --git a/doc/page/theory/index.md b/doc/page/theory/index.md deleted file mode 100644 index 6d1f993ef..000000000 --- a/doc/page/theory/index.md +++ /dev/null @@ -1,3 +0,0 @@ ---- -title: Theorical background ---- \ No newline at end of file diff --git a/doc/page/usage/eos/cubics/mixing.md b/doc/page/usage/eos/cubics/mixing.md index 012da1264..e46c64ccf 100644 --- a/doc/page/usage/eos/cubics/mixing.md +++ b/doc/page/usage/eos/cubics/mixing.md @@ -2,10 +2,68 @@ title: Mixing Rules --- -## Quadratic Mixing Rules +# Cubic Mixing Rules +All [[CubicEoS]] in `yaeos` include a [[CubicMixRule]] derived type, which +handles how the \(D\) and \(B\) parameters in the CubicEoS are calculated. -### Constant $k_ij$ +## Quadratic Mixing Rules (QMR) +Quadratic mixing rules are the ussually most used mixing rules for cubic +equations of state. -## $G^E$ Models Mixing Rules +\[ + nB = \sum_i \sum_j n_i n_j \frac{b_i + b_j}{2} (1 - l_{ij}) +\] + +\[ + D = \sum_i \sum_j n_i n_j a_{ij} +\] + +QMR are handled by the [[QMR]] derived type. Which can be used like: + +```fortran +use yaeos, only: pr, QMR + +type(QMR) :: mixrule +real(pr) :: kij(2, 2), lij(2, 2) + +kij(1, :) = [0.0, 0.1] +kij(2, :) = [0.1, 0.0] + +lij(1, :) = [0.0, 0.01] +lij(2, :) = [0.01, 0.0] + +mixrule = QMR(k=kij, l=lij) +``` + +By default the \(a_{ij}\) matrix will be calculated with a constant \(k_{ij}\) +value (as shown below). But this functionality can be modified by replacing +the `get_aij` procedure + +```fortran +use yaeos, only: pr, QMR + +type(QMR) :: mixrule +real(pr) :: kij(2, 2), lij(2, 2) + +kij(1, :) = [0.0, 0.1] +kij(2, :) = [0.1, 0.0] + +lij(1, :) = [0.0, 0.01] +lij(2, :) = [0.01, 0.0] + +mixrule = QMR(k=kij, l=lij) +mixrule%get_aij => my_aij_implementation + +subroutine my_aij_implementation(self, ai, daidt, daidt2, aij, daijdt, daijdt2) + class(QMR) :: self + real(pr), intent(in) :: ai(:), daidt(:), daidt2(:) + real(pr), intent(out) :: aij(:, :), daijdt(:, .), daijdt2(:, :) + ! Implementation here +end subroutine +``` + +### Constant \(k_{ij}\) + +## \(G^E\) Models Mixing Rules ### Michelsen's Modified Huron-Vidal Mixing Rules \ No newline at end of file diff --git a/doc/page/usage/newmodels/autodiff.md b/doc/page/usage/newmodels/autodiff.md index 26a45ddae..e1424ae5e 100644 --- a/doc/page/usage/newmodels/autodiff.md +++ b/doc/page/usage/newmodels/autodiff.md @@ -1,3 +1,153 @@ --- title: Automatic differentiation ---- \ No newline at end of file +--- +# Autodiff +The implementation of new models and all their required derivatives can be +an endeavours and error-prone task. A tool that helps with this, at a small +performance cost, can be automatic differentiation. + +Automatic differentiation can be implemented in two ways: + +- Forward Differentiation +- Backward Differentiation + +With can be combined to obtain higher order derivatives. + +In `yaeos` it is possible to add new models via two different kind of +implementations. Operator overloading with `hyperdual` numbers and +source-to-source automatic differentiation with `tapenade`. + +@warn +Remember to use the `R`constant from `yaeos__constants`, and all models +should have a `type(Substances)` attribute! +@endwarn + +## Hyperdual autodiff + +### ArModel +Automatic differentiation with `hyperdual` numbers can be done with the +[[ArModelAdiff]] derived type. This implementation requires just to extend +that derived type with your own implementation and a volume initializer. + +```fortran +module hyperdual_pr76 + use yaeos__constants, only: pr, R + use yaeos__ar_models_hyperdual + use yaeos__substance, only: Substances + implicit none + + type, extends(ArModelAdiff) :: PR76 + !! PengRobinson 76 EoS + ! Composition + type(Substances) :: composition + + ! Mixing rule Parameters + real(pr), allocatable :: kij(:, :), lij(:, :) + + ! EoS parameters + real(pr), allocatable :: ac(:), b(:), k(:) + real(pr), allocatable :: tc(:), pc(:), w(:) + contains + procedure :: Ar => arfun + procedure :: get_v0 => v0 + end type + + real(pr), parameter :: del1 = 1._pr + sqrt(2._pr) + real(pr), parameter :: del2 = 1._pr - sqrt(2._pr) + +contains + + type(PR76) function setup(tc, pc, w, kij, lij) result(self) + !! Function to obtain a defined PR76 model with setted up parameters + !! as function of Tc, Pc, and w + real(pr) :: tc(:) + real(pr) :: pc(:) + real(pr) :: w(:) + real(pr) :: kij(:, :) + real(pr) :: lij(:, :) + + self%composition%tc = tc + self%composition%pc = pc + self%composition%w = w + + self%ac = 0.45723553_pr * R**2 * tc**2 / pc + self%b = 0.07779607_pr * R * tc_in/pc_in + self%k = 0.37464_pr + 1.54226_pr * w - 0.26993_pr * w**2 + + self%kij = kij + self%lij = lij + end function + + function arfun(self, n, v, t) result(ar) + !! Residual Helmholtz calculation for a generic cubic with + !! quadratic mixing rules. + class(PR76) :: self + type(hyperdual), intent(in) :: n(:), v, t + type(hyperdual) :: ar + + type(hyperdual) :: amix, a(size(n)), ai(size(n)), n2(size(n)) + type(hyperdual) :: bmix + type(hyperdual) :: b_v, nij + + integer :: i, j + + associate(& + pc => self%composition%pc, ac => self%ac, b => self%b, k => self%k,& + kij => self%kij, lij => self%lij, tc => self%compostion%tc & + ) + + ! Soave alpha function + a = 1.0_pr + k * (1.0_pr - sqrt(t/tc)) + a = ac * a ** 2 + ai = sqrt(a) + + ! Quadratic Mixing Rule + amix = 0.0_pr + bmix = 0.0_pr + + do i=1,size(n)-1 + do j=i+1,size(n) + nij = n(i) * n(j) + amix = amix + 2 * nij * (ai(i) * ai(j)) * (1 - kij(i, j)) + bmix = bmix + nij * (b(i) + b(j)) * (1 - lij(i, j)) + end do + end do + + amix = amix + sum(n**2*a) + bmix = bmix + sum(n**2 * b) + + bmix = bmix/sum(n) + + b_v = bmix/v + + ! Generic Cubic Ar function + ar = (& + - sum(n) * log(1.0_pr - b_v) & + - amix / (R*T*bmix)*1.0_pr / (del1 - del2) & + * log((1.0_pr + del1 * b_v) / (1.0_pr + del2 * b_v)) & + ) * (R * T) + + end associate + end function + + function v0(self, n, p, t) + !! Initialization of liquid volume solving with covolume + class(PR76), intent(in) :: self + real(pr), intent(in) :: n(:) + real(pr), intent(in) :: p + real(pr), intent(in) :: t + real(pr) :: v0 + + v0 = sum(n * self%b) / sum(n) + end function +end module +``` + + +## Tapenade Adiff +And alternative to `hyperdual` that takes a bit more work, but can end in a more +performant model, is doing `tapenade` source-to-source differentiation. For +this `tapenade` must be installed and accessible from a terminal +[donwload link](https://tapenade.gitlabpages.inria.fr/userdoc/build/html/download.html). + +{!tools/tapenade_diff/README.md!} \ No newline at end of file diff --git a/doc/page/usage/newmodels/tapenade.md b/doc/page/usage/newmodels/tapenade.md deleted file mode 100644 index 861df8e0f..000000000 --- a/doc/page/usage/newmodels/tapenade.md +++ /dev/null @@ -1,3 +0,0 @@ ---- -title: Tapenade differentiation ---- \ No newline at end of file diff --git a/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 b/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 index d96d755be..01711044f 100644 --- a/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 +++ b/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 @@ -264,7 +264,7 @@ subroutine update_spec(X, ns, S, dS, dXdS, iterations) real(pr) :: Xc(nc+2) !! Value at (near) critical point real(pr) :: a !! Parameter for interpolation - do while (maxval(abs(X(:nc))) < 0.1) + do while (maxval(abs(X(:nc))) < 0.05) ! If near a critical point, jump over it S = S + dS X = X + dXdS*dS @@ -284,9 +284,10 @@ subroutine update_spec(X, ns, S, dS, dXdS, iterations) ! 0 = a*X(ns) + (1-a)*Xnew(ns) < Interpolation equation to get X(ns) = 0 a = -Xnew(ns)/(X(ns) - Xnew(ns)) + print *, a Xc = a * X + (1-a)*Xnew envelopes%cps = [& - envelopes%cps, CriticalPoint(T=exp(Xc(nc+1)), P=exp(X(nc+2))) & + envelopes%cps, CriticalPoint(T=exp(Xc(nc+1)), P=exp(Xc(nc+2))) & ] ! X = Xc + dXdS*dS end if From a1c3fb154fbb299d892f12d5f410803566fc8b69 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Thu, 4 Jul 2024 14:30:12 -0300 Subject: [PATCH 077/167] ign --- .gitignore | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.gitignore b/.gitignore index 9f1cb83d9..1e22afc8e 100644 --- a/.gitignore +++ b/.gitignore @@ -46,3 +46,13 @@ srk_hv fort.2 *.egg-info *ipynb_checkpoints +chulia +flang.rsp +flash +flash_log_para +flash_log_sequ +fort.4 +log2 +para.py +tools/plotting/pt_envel_2ph.gnu +tools/notebooks/other.ipynb From 8a530a45337f9fd15f81d8a622171ab7f2c31e17 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Thu, 4 Jul 2024 17:07:18 -0300 Subject: [PATCH 078/167] working on python --- app/saturation.f90 | 61 +++++++ python/docs/tutorials/tutorial.ipynb | 239 ++++++++++++++++++++++++++ python/setup.py | 56 +++--- python/yaeos/__init__.py | 4 +- python/yaeos/fortran_wrap/yaeos_c.f90 | 80 +++++++++ 5 files changed, 409 insertions(+), 31 deletions(-) create mode 100644 app/saturation.f90 create mode 100644 python/docs/tutorials/tutorial.ipynb diff --git a/app/saturation.f90 b/app/saturation.f90 new file mode 100644 index 000000000..a73863fc7 --- /dev/null +++ b/app/saturation.f90 @@ -0,0 +1,61 @@ +program main + use yaeos + integer, parameter :: nc=2 + type(NRTL) :: ge_model + + real(pr), dimension(nc,nc) :: a, b, c + real(pr), dimension(nc) :: tc, pc, w + type(MHV) :: mixrule + type(CubicEOS) :: eos + type(EquilibriaState) :: eq + real(pr) :: n(nc) + + integer :: i + + tc = [647.13999999999999, 513.91999999999996] + pc = [220.63999999999999, 61.479999999999997] + w = [0.34399999999999997, 0.64900000000000002] + a = 0; b = 0; c = 0 + + ! NRTL model parameters + a(1, 2) = 3.458 + a(2, 1) = -0.801 + + b(1, 2) = -586.1 + b(2, 1) = 246.2 + + c(1, 2) = 0.3 + c(2, 1) = 0.3 + + eos = PengRobinson76(tc, pc, w) + ge_model = NRTL(a, b, c) + mixrule = MHV(ge=ge_model, q=-0.53_pr, b=eos%b) + + deallocate(eos%mixrule) + eos%mixrule = mixrule + + do i=1,99 + n(1) = real(i, pr)/100 + n(2) = 1 - n(1) + eq = saturation_pressure(eos, n, 273._pr + 100._pr, kind="bubble") + print *, eq%x(1), eq%y(1), eq%P + end do +end program main + + +! for i, T in enumerate(np.linspace(50+273, 200+273, 5)): +! i=4 +! xs = np.linspace(0.001, 0.999, 100) +! ys = [] +! ps = [] +! +! for x1 in xs: +! x = [x1, 1-x1] +! p, x, y, vx, vy, beta = yaeos.yaeos_c.saturation_pressure(model.id, x, T, "bubble") +! ps.append(p) +! ys.append(y[0]) +! +! plt.plot(xs, ps, color=colors[i]) +! plt.plot(ys, ps, color=colors[i]) +! end program +! diff --git a/python/docs/tutorials/tutorial.ipynb b/python/docs/tutorials/tutorial.ipynb new file mode 100644 index 000000000..96de57dd6 --- /dev/null +++ b/python/docs/tutorials/tutorial.ipynb @@ -0,0 +1,239 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "3a2bdbde-7f69-4b8f-ad42-4eb89c90167f", + "metadata": {}, + "outputs": [], + "source": [ + "import yaeos\n", + "from yaeos import PengRobinson76, QMR\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "85ff95ba-7a1a-4ca3-bec1-3c5bb50325ea", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'ln_phi': array([2.3118468 , 2.33292475]),\n", + " 'dt': None,\n", + " 'dp': None,\n", + " 'dn': array([[-0.00186921, 0.00934604],\n", + " [ 0.00934604, -0.04673019]])}" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Number of components, for easier definition\n", + "nc = 2\n", + "\n", + "# kij and lij matrices\n", + "k12 = 0.1\n", + "lij = kij = np.zeros((nc,nc))\n", + "kij[0,1] = kij[1,0] = k12\n", + "\n", + "mixrule = QMR(kij, lij)\n", + "\n", + "# Critical constants\n", + "Tc = [320, 375]\n", + "Pc = [30, 45]\n", + "w = [0.0123, 0.045]\n", + "\n", + "model = PengRobinson76(Tc, Pc, w, mixrule)\n", + "n = [1.0, 0.2]\n", + "\n", + "model.fugacity(n, v=2.0, t=303.15, dn=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "cf0a8e95", + "metadata": {}, + "outputs": [], + "source": [ + "n = [0.4, 0.6]\n", + "Tc = [190.564, 425.12]\n", + "Pc = [45.99, 37.96]\n", + "w = [0.0115478, 0.200164]\n", + "\n", + "lij = kij = np.zeros((nc,nc))\n", + "mixrule = QMR(kij, lij)\n", + "model = PengRobinson76(Tc, Pc, w, mixrule)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "5e06f2a9", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 1.23 s, sys: 12.9 ms, total: 1.24 s\n", + "Wall time: 1.24 s\n" + ] + } + ], + "source": [ + "%%time\n", + "P, T = 60.0, 294.0\n", + "\n", + "ts = np.linspace(200, 400, 50)\n", + "ps = np.linspace(30, 100, 50)\n", + "betas = []\n", + "\n", + "t = []\n", + "p = []\n", + "\n", + "for T in ts:\n", + " for P in ps:\n", + " x, y, P, T, Vx, Vy, beta = yaeos.yaeos_c.flash(id=model.id, z=n, p=P, t=T)\n", + " t.append(T)\n", + " p.append(P)\n", + " betas.append(beta)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "7c42b4fe", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAigAAAGdCAYAAAA44ojeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOy9d6AkSXXl/YvIzPJVr5637X33dE+PZ2A8wzgEg5G0rKRduRXSOu1qpdXCSsgjhKTlkxeLJBa0QqwsEkgCGawAMcB4zNie7mnfz9tymRnfH1kmqyozogYeTc9MHXjT71XdijgZFRlxM+LEvUIppeijjz766KOPPvq4hCC/2QT66KOPPvroo48+OtF3UProo48++uijj0sOfQeljz766KOPPvq45NB3UProo48++uijj0sOfQeljz766KOPPvq45NB3UProo48++uijj0sOfQeljz766KOPPvq45NB3UProo48++uijj0sO9jebwNcC3/c5c+YM+XweIcQ3m04fffTRRx999NEDlFKsrq4yNTWFlPo1kuelg3LmzBm2bNnyzabRRx999NFHH318DTh58iQzMzNam+elg5LP54HgAguFwjeZTR999NFHH3300QtWVlbYsmVLcx7X4XnpoDS2dQqFQt9B6aOPPvroo4/nGXqRZ/RFsn300UcfffTRxyWHvoPSRx999NFHH31ccug7KH300UcfffTRxyWHvoPSRx999NFHH31ccug7KH300UcfffTRxyWHvoPSRx999NFHH31ccug7KH300UcfffTRxyWHvoPSRx999NFHH31ccnheBmrr45uH9ZUNHvjHRyivV9h6cIa9V+3sCrhT8z0+N3uM+co6E+kC14xsxxLtvrBSiocWTnFibZ68k+KlY7tI205XfU+vzPLo0lkS0uIlo9sZSma7bM6XVvnC3Ak85XN0aIZtuaEum7Vahc9eOMaGW2VnfoTDg1ORvP/lwjPMV9YZT+e5bjSa94MLpzixtkDeSfKyHnhfN7Kd4VQ37wulVT5f53350DTbc8NfM+/PzT7DXHmdsVSO60Z3YMvo9j5e5/3SsZ1k7ERXfcdW5/jS4hksIbludDsjqVyXzWx5jc/PHsdTPocHp9mR7+a97lb57IWnWXer7MgNc2Rwuou36/vcN/sMs+VVRlP5WN6PLJ7i+No8WTvJ9WM7ydrJrvqe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QsMhDoogCIIgCA2HOCiCIAiCIDQcwRXnGpBi8tvh4eFjrEQQBEEQhMlSvG9PJon9lHRQRkZGAOjv7z/GSgRBEARBeL2MjIzQ0tLiazMla/HYts2ePXtoampCKa86vP93DA8P09/fz65du47LOj/Sv6nP8d5H6d/U53jv4/HeP3jz+qi1ZmRkhOnTp2MY/lEmU3IGxTAM+vr63tRtNDc3H7cHHkj/jgeO9z5K/6Y+x3sfj/f+wZvTx6CZkyISJCsIgiAIQsMhDoogCIIgCA2HOCg1RKNRvvCFLxCNRo+1lDcF6d/U53jvo/Rv6nO89/F47x80Rh+nZJCsIAiCIAjHNzKDIgiCIAhCwyEOiiAIgiAIDYc4KIIgCIIgNBzioAiCIAiC0HCcEA7Krbfeypo1a2hqaqK7u5vLLruM7du3V9lMTEywefNmOjo6SKVSXHnllezfv7/KZufOnVx88cUkEgm6u7v5zGc+Qz6ffyu74kpQ/wYGBrjhhhtYtGgR8XicmTNn8olPfIKhoaGqdpRSdT+33377W92dOiaz/84888w67dddd12VTaPuPwju4yuvvOK6f5RS3HHHHSW7Rt2H3/zmN1mxYkUp6dOGDRu47777Sp9P5fMP/Ps31c+/IkH7cKqfg379m+rnnxt/+7d/i1KKT37yk6X3Gu481CcA559/vr7tttv0s88+q7du3aovuugiPXPmTD06Olqyue6663R/f79+4IEH9OOPP67Xr1+vTzvttNLn+XxeL1u2TJ9zzjn6qaee0vfee6/u7OzUt9xyy7HoUhVB/du2bZu+4oor9D333KNffPFF/cADD+gFCxboK6+8sqodQN9222167969pZ90On0sulTFZPbfGWecoT/ykY9UaR8aGip93sj7T+vgPubz+aq+7d27V3/pS1/SqVRKj4yMlNpp1H14zz336J///Of6+eef19u3b9ef+9zndDgc1s8++6zWemqff1r792+qn39FgvbhVD8H/fo31c+/Wh577DE9e/ZsvWLFCn3jjTeW3m+08/CEcFBqOXDggAb0li1btNZaDw4O6nA4rO+4446SzR/+8AcN6IcfflhrrfW9996rDcPQ+/btK9l885vf1M3NzTqTyby1HQigtn9u/PjHP9aRSETncrnSe4C+66673gKFbwy3/p1xxhlVJ1otU2n/aT25fbhq1Sp97bXXVr03Vfah1lq3tbXpf/3Xfz3uzr8ixf65MZXPv0oq+3i8nYNa++/DqXr+jYyM6AULFuj777+/ap814nl4Qizx1FKcWm1vbwfgiSeeIJfLcc4555RsFi9ezMyZM3n44YcBePjhh1m+fDk9PT0lm/PPP5/h4WGee+65t1B9MLX987Jpbm4mFKoux7R582Y6OztZu3Yt3/72tydVEvutxqt/3//+9+ns7GTZsmXccsstjI+Plz6bSvsPgvfhE088wdatW/nwhz9c91mj70PLsrj99tsZGxtjw4YNx935V9s/N6by+QfefTxezsGgfTiVz7/Nmzdz8cUXV51v0Jj3wSlZLPCNYNs2n/zkJzn99NNZtmwZAPv27SMSidDa2lpl29PTw759+0o2lTul+Hnxs0bBrX+1HDp0iL/+67/mox/9aNX7f/VXf8XZZ59NIpHgl7/8JR//+McZHR3lE5/4xFshfVJ49e+qq65i1qxZTJ8+nWeeeYa/+Iu/YPv27fzkJz8Bps7+g8ntw29961ssWbKE0047rer9Rt6H27ZtY8OGDUxMTJBKpbjrrrs46aST2Lp163Fx/nn1r5apfP759fF4OAcnuw+n4vkHcPvtt/Pkk0/yu9/9ru6zRrwPnnAOyubNm3n22Wf5zW9+c6ylvCkE9W94eJiLL76Yk046iS9+8YtVn/2X//JfSn+ffPLJjI2N8fd///cNc3KBd/8qL/bLly9n2rRpbNq0iZdeeol58+a91TLfEEH7MJ1O84Mf/KBqfxVp5H24aNEitm7dytDQEHfeeSfXXHMNW7ZsOdayjhpe/au8wU3188+vj8fDOTiZfThVz79du3Zx4403cv/99xOLxY61nElxQi3xXH/99fzsZz/jV7/6FX19faX3e3t7yWazDA4OVtnv37+f3t7ekk1tNHPxddHmWOPVvyIjIyNccMEFNDU1cddddxEOh33bW7duHbt37yaTybxZkl8XQf2rZN26dQC8+OKLwNTYfzC5Pt55552Mj4/zwQ9+MLC9RtqHkUiE+fPnc+qpp3LrrbeycuVKvvKVrxw3559X/4pM9fMPgvtYyVQ8ByfTv6l6/j3xxBMcOHCAU045hVAoRCgUYsuWLXz1q18lFArR09PTcOfhCeGgaK25/vrrueuuu3jwwQeZM2dO1eennnoq4XCYBx54oPTe9u3b2blzZ2n9ccOGDWzbto0DBw6UbO6//36am5tdpwDfSoL6B843t/POO49IJMI999wzKQ9669attLW1HfOCWJPpXy1bt24FYNq0aUBj7z94fX381re+xaWXXkpXV1dgu42yD92wbZtMJjPlzz8viv2DqX3++VHZx1qm2jnohlv/pur5t2nTJrZt28bWrVtLP6tXr+b9739/6e+GOw+PethtA/Kxj31Mt7S06Iceeqjq8a/x8fGSzXXXXadnzpypH3zwQf3444/rDRs26A0bNpQ+Lz5edd555+mtW7fqX/ziF7qrq6shHpEL6t/Q0JBet26dXr58uX7xxRerbPL5vNbaecTuX/7lX/S2bdv0Cy+8oL/xjW/oRCKhP//5zx/Lrmmtg/v34osv6r/6q7/Sjz/+uN6xY4e+++679dy5c/XGjRtLbTTy/tN6cseo1lq/8MILWiml77vvvro2Gnkf3nzzzXrLli16x44d+plnntE333yzVkrpX/7yl1rrqX3+ae3fv6l+/hXx6+PxcA4GHaNaT93zz4vaJ68a7Tw8IRwUwPXntttuK9mk02n98Y9/XLe1telEIqEvv/xyvXfv3qp2XnnlFX3hhRfqeDyuOzs79ac//emqxwSPFUH9+9WvfuVps2PHDq211vfdd59etWqVTqVSOplM6pUrV+p/+qd/0pZlHbuOFQjq386dO/XGjRt1e3u7jkajev78+fozn/lMVQ4GrRt3/2k9uWNUa61vueUW3d/f77pfGnkfXnvttXrWrFk6Eonorq4uvWnTpqoL/1Q+/7T2799UP/+K+PXxeDgHg45Rrafu+edFrYPSaOeh0rrBnoESBEEQBOGE54SIQREEQRAEYWohDoogCIIgCA2HOCiCIAiCIDQc4qAIgiAIgtBwiIMiCIIgCELDIQ6KIAiCIAgNhzgogiAIgiA0HOKgCIIgCILQcIiDIgiCIAhCwyEOiiAIgiAIDYc4KIIgCIIgNBzioAiCIAiC0HD8/68LbRGJzGxgAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "plt.scatter(t, p, c=betas)" + ] + }, + { + "cell_type": "markdown", + "id": "73924e0d", + "metadata": {}, + "source": [ + "## Modified Huron-Vidal MixingRule" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "a0a29755", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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xnjxxRfx5ptv8goZUsHwQUTUiKqqKnz//ff49NNPxVFTzc3NsXz5cqxZswbdu3fXcYXtj1wux/79+/HJJ58gMjISACCVSvHcc8/h7bffRu/evXVcIbUHvNqFiKgRxsbGWL58OVJSUrBjxw707dsXZWVl+Pzzz+Hp6Ylly5YhJSVF12W2K3p6epg+fTouXbqE06dPY8yYMairq8MPP/yAgIAAzJw5E7GxsboukzoQhg8i6pL09fUxb948xMbG4vDhwxg2bBhkMhk2bdqEXr16YebMmbh69aquy2xXJBIJRowYgd9//x1XrlzBjBkzAAB79uxB//79MWXKFERFRem4SuoIGD6IqEuTSCSYMGECzp07h4sXL2Lq1KkQBAF79uxBaGgoRo0ahWPHjnGskHoGDhyIPXv2IDExEfPnz4eenh4OHjyIQYMGYezYsbhw4YKuS6R2jOGDiOj/DB48GPv27UNSUhIWLVoEfX19nD59GuPHj0e/fv2wfft21NbW6rrMdiUgIADbt2/HjRs3sHjxYkilUhw/fhzDhg1DREQEzp8/r+sSqR1i+CAiqqd3797YunUrMjMzsWbNGpiZmSE+Ph7PPfccfH198eWXX6K8vFzXZbYrPXv2xJYtW5CWloaXXnoJ+vr6OHnyJJ555hmMGjWKIYRU8GoXIqInePjwIb755hv897//RWFhIQCgW7duWL16NV555RXY29vruML259atW1i7di22bNki3k03IiICf//733nPnU6Kl9oSEWlAZWUltm7dis8//xwZGRkAHl89s3TpUrzxxhvw9vbWcYXtz507d/DRRx9h8+bNYggZP348PvzwQ97ErpPhpbZERBpgYmKClStXIiUlBbt378aAAQNQVVWFb775Bj179sTs2bNx5coVXZfZrri5uWHDhg1ITU3FsmXLIJVKcfToUYSFhWHatGlISEjQdYmkAwwfREQtJJVKMWvWLFy5cgWnT5/GhAkTIJfL8csvv4h3hj148CBvZKfEw8MDGzduREpKChYtWgQ9PT3s378fffv2xbx58zi2ShfD8EFE1EqKcS8OHz6M69evq9wZdsqUKQgICMB3332HqqoqXZfabnh7e2Pr1q1ISkrC3LlzAQC7du1C79698eKLLyI7O1vHFZI2sM8HEVEbUndnWAcHB7zyyitYuXIl7OzsdFxh+xIfH4/3338f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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from yaeos import NRTL, MHV, PengRobinson76\n", + "\n", + "a = b = c = np.zeros((nc,nc))\n", + "\n", + "tc = [647.14, 513.92]\n", + "pc = [220.64, 61.48]\n", + "w = [0.344, 0.649]\n", + "\n", + "a[0, 1] = 3.458\n", + "a[1, 0] = -0.801\n", + "\n", + "b[0, 1] = -586.1\n", + "b[1, 0] = 246.2\n", + "\n", + "c[0, 1] = 0.3\n", + "c[1, 0] = 0.3\n", + "\n", + "ge_model = NRTL(a, b, c)\n", + "mixrule = MHV(ge_model, q=-0.53)\n", + "model = PengRobinson76(tc, pc, w, mixrule)\n", + "\n", + "\n", + "colors = [\"red\", \"green\", \"blue\", \"orange\", \"black\"]\n", + "\n", + "for i, T in enumerate(np.linspace(50+273, 200+273, 5)):\n", + " i=4\n", + " xs = np.linspace(0.001, 0.999, 100)\n", + " ys = []\n", + " ps = []\n", + "\n", + " for x1 in xs:\n", + " x = [x1, 1-x1]\n", + " p, x, y, vx, vy, beta = yaeos.yaeos_c.saturation_pressure(model.id, x, T, \"bubble\")\n", + " ps.append(p)\n", + " ys.append(y[0])\n", + "\n", + " plt.plot(xs, ps, color=colors[i])\n", + " plt.plot(ys, ps, color=colors[i])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "19cdb686", + "metadata": {}, + "outputs": [], + "source": [ + "%" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/python/setup.py b/python/setup.py index 7f4740bf5..bf11deb00 100644 --- a/python/setup.py +++ b/python/setup.py @@ -9,11 +9,13 @@ # ============================================================================= # Building # ============================================================================= -def build_library(): - build_dir = Path("..") / "build" / "python" - link_dir = build_dir.absolute() / "lib" - incl_dir = build_dir.absolute() / "include" - this_dir = Path(".") +THIS_DIR = Path(".") +BUILD_DIR = (Path("..") / "build" / "python").absolute() +LINK_DIR = BUILD_DIR / "lib" +INCL_DIR = BUILD_DIR / "include" + + +def pre_build(): subprocess.check_call( [ @@ -21,12 +23,12 @@ def build_library(): "install", "--profile", "release", - "--flags", - "-fPIC", - "--c-flags", + "--flag", + "-g -fPIC", + "--c-flag", "-fPIC", "--prefix", - build_dir, + BUILD_DIR, ] ) @@ -35,8 +37,8 @@ def build_library(): "f2py", "-m", "yaeos_compiled", - f"-L{link_dir}", - f"-I{incl_dir}", + f"-L{LINK_DIR}", + f"-I{INCL_DIR}", "-c", "yaeos/fortran_wrap/yaeos_c.f90", "-lyaeos", @@ -45,13 +47,6 @@ def build_library(): ] ) - site_packages_dir = Path(sysconfig.get_path("purelib")) - - for file in this_dir.glob("yaeos_compiled.*"): - target_dir = site_packages_dir / "yaeos" / "compiled_module" - target_dir.mkdir(parents=True, exist_ok=True) - shutil.move(file, target_dir) - class BuildFortran(Command): description = "Compile Fortran library with fpm and f2py" @@ -64,7 +59,13 @@ def finalize_options(self): pass def run(self): - build_library() + pre_build() + site_packages_dir = Path(sysconfig.get_path("purelib")) + + for file in THIS_DIR.glob("yaeos_compiled.*"): + target_dir = site_packages_dir / "yaeos" / "compiled_module" + target_dir.mkdir(parents=True, exist_ok=True) + shutil.move(file, target_dir) # ============================================================================= @@ -74,18 +75,15 @@ def run(self): # # python3 setup.py build_fortran_editable # ============================================================================= -class BuildFortranEditable(Command): - description = "Compile Fortran library with fpm and f2py" - user_options = [] - - def initialize_options(self): - pass - - def finalize_options(self): - pass +class BuildFortranEditable(BuildFortran): def run(self): - build_library() + pre_build() + for file in THIS_DIR.glob("yaeos_compiled.*"): + target_dir = Path(".") / "yaeos" / "compiled_module" + target_dir.mkdir(parents=True, exist_ok=True) + + shutil.move(file.absolute(), target_dir.absolute()/file) class CustomInstall(install): diff --git a/python/yaeos/__init__.py b/python/yaeos/__init__.py index 472d2cd92..311e6a0d5 100644 --- a/python/yaeos/__init__.py +++ b/python/yaeos/__init__.py @@ -1,6 +1,6 @@ from yaeos.compiled_module.yaeos_compiled import yaeos_c -from yaeos.core import PengRobinson76, QMR +from yaeos.core import PengRobinson76, QMR, NRTL, MHV -__all__ = ["yaeos_c", "PengRobinson76", "QMR"] +__all__ = ["yaeos_c", "PengRobinson76", "QMR", "NRTL", "MHV"] diff --git a/python/yaeos/fortran_wrap/yaeos_c.f90 b/python/yaeos/fortran_wrap/yaeos_c.f90 index 23e11d7e7..96ebb2b8a 100644 --- a/python/yaeos/fortran_wrap/yaeos_c.f90 +++ b/python/yaeos/fortran_wrap/yaeos_c.f90 @@ -38,6 +38,8 @@ module yaeos_c public :: make_available_ge_models_list public :: set_mhv, set_qmr public :: nrtl + public :: flash + public :: saturation_pressure type :: ArModelContainer !! Container type for ArModels @@ -203,4 +205,82 @@ subroutine fug_vt(id, n, v, t, lnfug, dlnphidp, dlnphidt, dlnphidn) n, V, T, P, lnfug, dlnPhidP, dlnphidT, dlnPhidn & ) end subroutine fug_vt + + + ! ========================================================================== + ! Phase equilibria + ! -------------------------------------------------------------------------- + subroutine equilibria_state_to_arrays(eq_state, x, y, P, T, Vx, Vy, beta) + use yaeos, only: EquilibriaState + type(EquilibriaState) :: eq_state + real(c_double), intent(out) :: x(:) + real(c_double), intent(out) :: y(:) + real(c_double), intent(out) :: P + real(c_double), intent(out) :: T + real(c_double), intent(out) :: Vx + real(c_double), intent(out) :: Vy + real(c_double), intent(out) :: Beta + + x = eq_state%x + y = eq_state%y + P = eq_state%p + T = eq_state%T + Vx = eq_state%Vx + Vy = eq_state%Vy + beta = eq_state%beta + end subroutine + + subroutine flash(id, z, P, T, x, y, k0, Pout, Tout, Vx, Vy, beta) + use yaeos, only: EquilibriaState, fflash => flash + integer(c_int), intent(in) :: id + real(c_double), intent(in) :: z(:) + real(c_double), intent(in) :: P + real(c_double), intent(in) :: T + real(c_double), optional, intent(in out) :: k0(size(z)) + real(c_double), intent(out) :: x(size(z)) + real(c_double), intent(out) :: y(size(z)) + real(c_double), intent(out) :: Pout + real(c_double), intent(out) :: Tout + real(c_double), intent(out) :: Vx + real(c_double), intent(out) :: Vy + real(c_double), intent(out) :: beta + + type(EquilibriaState) :: result + integer :: iters + + result = fflash(ar_models(id)%model, z, t, p_spec=p, iters=iters) + if (.not. allocated(result%x) .or. .not. allocated(result%y)) then + Pout = P + Tout = T + x = z + y = z + beta = -1 + Vx = 1 + Vy = 1 + return + end if + + call equilibria_state_to_arrays(result, x, y, Pout, Tout, Vx, Vy, beta) + end subroutine + + subroutine saturation_pressure(id, z, T, kind, P, x, y, Vx, Vy, beta) + use yaeos, only: EquilibriaState, fsaturation_pressure => saturation_pressure + integer(c_int), intent(in) :: id + real(c_double), intent(in) :: z(:) + real(c_double), intent(in) :: T + character(len=15), intent(in) :: kind + + real(c_double), intent(out) :: P + real(c_double), intent(out) :: x(size(z)) + real(c_double), intent(out) :: y(size(z)) + real(c_double), intent(out) :: Vx, Vy, beta + + real(c_double) :: aux + + type(EquilibriaState) :: sat + + sat = fsaturation_pressure(ar_models(id)%model, z, T, kind) + call equilibria_state_to_arrays(sat, x, y, P, aux, Vx, Vy, beta) + end subroutine + end module yaeos_c From 7491f1c0494795cb1771535cb9741cf22f132886 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Fri, 5 Jul 2024 11:44:46 -0300 Subject: [PATCH 079/167] more exposure from the fortran-side --- app/saturation.f90 | 3 ++ python/docs/tutorials/tutorial.ipynb | 61 +++++++++++++++++++-------- python/setup.py | 2 +- python/yaeos/fortran_wrap/yaeos_c.f90 | 32 +++++++------- 4 files changed, 64 insertions(+), 34 deletions(-) diff --git a/app/saturation.f90 b/app/saturation.f90 index a73863fc7..a186c0dec 100644 --- a/app/saturation.f90 +++ b/app/saturation.f90 @@ -40,6 +40,9 @@ program main eq = saturation_pressure(eos, n, 273._pr + 100._pr, kind="bubble") print *, eq%x(1), eq%y(1), eq%P end do + + call ge_model%ln_activity_coefficient([0.3_pr, 0.7_pr], 250._pr, n) + print *, n end program main diff --git a/python/docs/tutorials/tutorial.ipynb b/python/docs/tutorials/tutorial.ipynb index 96de57dd6..ef4cfe6df 100644 --- a/python/docs/tutorials/tutorial.ipynb +++ b/python/docs/tutorials/tutorial.ipynb @@ -148,13 +148,21 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 2, "id": "a0a29755", "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 2.71 s, sys: 2.37 ms, total: 2.71 s\n", + "Wall time: 2.71 s\n" + ] + }, { "data": { - "image/png": "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xnjxxRfx5ptv8goZUsHwQUTUiKqqKnz//ff49NNPxVFTzc3NsXz5cqxZswbdu3fXcYXtj1wux/79+/HJJ58gMjISACCVSvHcc8/h7bffRu/evXVcIbUHvNqFiKgRxsbGWL58OVJSUrBjxw707dsXZWVl+Pzzz+Hp6Ylly5YhJSVF12W2K3p6epg+fTouXbqE06dPY8yYMairq8MPP/yAgIAAzJw5E7GxsboukzoQhg8i6pL09fUxb948xMbG4vDhwxg2bBhkMhk2bdqEXr16YebMmbh69aquy2xXJBIJRowYgd9//x1XrlzBjBkzAAB79uxB//79MWXKFERFRem4SuoIGD6IqEuTSCSYMGECzp07h4sXL2Lq1KkQBAF79uxBaGgoRo0ahWPHjnGskHoGDhyIPXv2IDExEfPnz4eenh4OHjyIQYMGYezYsbhw4YKuS6R2jOGDiOj/DB48GPv27UNSUhIWLVoEfX19nD59GuPHj0e/fv2wfft21NbW6rrMdiUgIADbt2/HjRs3sHjxYkilUhw/fhzDhg1DREQEzp8/r+sSqR1i+CAiqqd3797YunUrMjMzsWbNGpiZmSE+Ph7PPfccfH198eWXX6K8vFzXZbYrPXv2xJYtW5CWloaXXnoJ+vr6OHnyJJ555hmMGjWKIYRU8GoXIqInePjwIb755hv897//RWFhIQCgW7duWL16NV555RXY29vruML259atW1i7di22bNki3k03IiICf//733nPnU6Kl9oSEWlAZWUltm7dis8//xwZGRkAHl89s3TpUrzxxhvw9vbWcYXtz507d/DRRx9h8+bNYggZP348PvzwQ97ErpPhpbZERBpgYmKClStXIiUlBbt378aAAQNQVVWFb775Bj179sTs2bNx5coVXZfZrri5uWHDhg1ITU3FsmXLIJVKcfToUYSFhWHatGlISEjQdYmkAwwfREQtJJVKMWvWLFy5cgWnT5/GhAkTIJfL8csvv4h3hj148CBvZKfEw8MDGzduREpKChYtWgQ9PT3s378fffv2xbx58zi2ShfD8EFE1EqKcS8OHz6M69evq9wZdsqUKQgICMB3332HqqoqXZfabnh7e2Pr1q1ISkrC3LlzAQC7du1C79698eKLLyI7O1vHFZI2sM8HEVEbUndnWAcHB7zyyitYuXIl7OzsdFxh+xIfH4/3338f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", + "image/png": "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cZlKpQIA6Ovr49atW/Dy8mrZoluhpvw8Ozs7w8DAAHp6euIyPz8/pKWloaKiAoaGhi1ac2vVlM/6o48+wpw5c/DSSy8BAHr27Ini4mLMmzcPH3zwAeRy/v3cHOr6PrS0tGyRXg+gjfR8GBoaol+/fjh27Ji4TKVS4dixYwgMDKz1OYGBgRrbA8CRI0fq3J4eaMpnDQArVqzAZ599hoMHDyIgIEAbpbZqjf2cfX19ERkZiYiICLFNnjwZw4cPR0REBNzd3bVZfqvRlJ/nIUOGIC4uTgx3AHD79m04OzszeNSjKZ91SUlJjYChDn0Cb0vWbCT5PmyxoaxatnnzZsHIyEj4888/hejoaGHevHmCtbW1kJaWJgiCIMyZM0d47733xO3Pnj0r6OvrC998840QExMjLF26lKfaNlBjP+svv/xSMDQ0FLZt2yakpqaKrbCwUKq30Co09nOujme7NExjP+e7d+8KFhYWwoIFC4Rbt24Jf//9t+Dg4CD861//kuottBqN/ayXLl0qWFhYCJs2bRISEhKEw4cPC15eXsKTTz4p1VtoFQoLC4Xw8HAhPDxcACB89913Qnh4uHDnzh1BEAThvffeE+bMmSNurz7V9u233xZiYmKEn376iafaNsaqVasEDw8PwdDQUBgwYIBw4cIFcd2wYcOEuXPnamz/119/Cd7e3oKhoaHQvXt3Yd++fVquuPVqzGft6ekpAKjRli5dqv3CW5nG/kxXxfDRcI39nM+dOycMHDhQMDIyEjp37ix8/vnngkKh0HLVrVNjPuvKykrhk08+Eby8vARjY2PB3d1deO2114Tc3FztF96KnDhxotbfuerPdu7cucKwYcNqPMff318wNDQUOnfuLPzxxx8tWqNMENh3RURERNrTJsZ8EBERUevB8EFERERaxfBBREREWsXwQURERFrF8EFERERaxfBBREREWsXwQURERFrF8EFERERaxfBBREREWsXwQURERFrF8EFERERaxfBBREREWvX/AB+itHeUY8ozAAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -164,23 +172,21 @@ } ], "source": [ - "from yaeos import NRTL, MHV, PengRobinson76\n", - "\n", - "a = b = c = np.zeros((nc,nc))\n", + "%%time\n", + "from yaeos import NRTL, MHV, PengRobinson76, yaeos_c\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", "\n", + "nc = 2\n", "tc = [647.14, 513.92]\n", "pc = [220.64, 61.48]\n", "w = [0.344, 0.649]\n", "\n", - "a[0, 1] = 3.458\n", - "a[1, 0] = -0.801\n", - "\n", - "b[0, 1] = -586.1\n", - "b[1, 0] = 246.2\n", - "\n", - "c[0, 1] = 0.3\n", - "c[1, 0] = 0.3\n", + "a = [[0, 3.458], [-0.801, 0]]\n", + "b = [[0, -586.1], [246.2, 0]]\n", + "c = [[0, 0.3], [0.3, 0]]\n", "\n", + "b = np.array(b)\n", "ge_model = NRTL(a, b, c)\n", "mixrule = MHV(ge_model, q=-0.53)\n", "model = PengRobinson76(tc, pc, w, mixrule)\n", @@ -196,7 +202,7 @@ "\n", " for x1 in xs:\n", " x = [x1, 1-x1]\n", - " p, x, y, vx, vy, beta = yaeos.yaeos_c.saturation_pressure(model.id, x, T, \"bubble\")\n", + " p, x, y, vx, vy, beta = yaeos_c.saturation_pressure(model.id, x, T, \"bubble\")\n", " ps.append(p)\n", " ys.append(y[0])\n", "\n", @@ -206,13 +212,34 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "id": "19cdb686", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "array([0.55393321, 0.07829633])" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "%" + "n = [0.3, 0.7]\n", + "T = 250\n", + "yaeos_c.ln_gamma(ge_model.id, n, T)" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "50747ff2", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/python/setup.py b/python/setup.py index bf11deb00..147b01d90 100644 --- a/python/setup.py +++ b/python/setup.py @@ -24,7 +24,7 @@ def pre_build(): "--profile", "release", "--flag", - "-g -fPIC", + "-g -fPIC -funroll-loops -fstack-arrays -Ofast -frepack-arrays -faggressive-function-elimination -fopenmp", "--c-flag", "-fPIC", "--prefix", diff --git a/python/yaeos/fortran_wrap/yaeos_c.f90 b/python/yaeos/fortran_wrap/yaeos_c.f90 index 96ebb2b8a..dbc08177f 100644 --- a/python/yaeos/fortran_wrap/yaeos_c.f90 +++ b/python/yaeos/fortran_wrap/yaeos_c.f90 @@ -13,20 +13,7 @@ module yaeos_c !! is called. This procedure searches for the first `free_x_models` id and !! allocates the singleton model there, returning the `id` of the procedure. use iso_c_binding, only: c_double, c_int, c_int64_t - use yaeos, only: & - ! Generic Models - & ArModel, GeModel, & - - ! Cubic Models - & CubicEoS, & - & SoaveRedlichKwong, PengRobinson76, PengRobinson78, & - & CubicMixRule, QMR, MHV, & - - ! Ge Models - & fNRTL => NRTL, & - - ! Thermodynamic properties - & fugacity_vt + use yaeos, only: ArModel, GeModel implicit none private @@ -40,6 +27,7 @@ module yaeos_c public :: nrtl public :: flash public :: saturation_pressure + public :: ln_gamma type :: ArModelContainer !! Container type for ArModels @@ -68,6 +56,7 @@ module yaeos_c ! Ge Models ! -------------------------------------------------------------------------- subroutine nrtl(a, b, c, id) + use yaeos, only: fNRTL => NRTL real(c_double), intent(in) :: a(:,:), b(:,:), c(:,:) integer(c_int), intent(out) :: id ge_model = fNRTL(a, b, c) @@ -99,6 +88,14 @@ subroutine make_available_ge_models_list(id) free_ge_model(id) = .true. end subroutine make_available_ge_models_list + subroutine ln_gamma(id, n, T, lngamma) + integer(c_int), intent(in) :: id + real(c_double), intent(in) :: n(:) + real(c_double), intent(in) :: T + real(c_double), intent(out) :: lngamma(size(n)) + call ge_models(id)%model%ln_activity_coefficient(n, T, lngamma) + end subroutine + ! ============================================================================= ! Ar Models ! ----------------------------------------------------------------------------- @@ -131,6 +128,7 @@ end subroutine make_available_ar_models_list ! Cubic Mixing rules ! -------------------------------------------------------------------------- subroutine set_mhv(ar_id, ge_id, q) + use yaeos, only: MHV, CubicEoS integer(c_int), intent(in) :: ar_id integer(c_int), intent(in) :: ge_id real(c_double), intent(in) :: q @@ -151,7 +149,7 @@ subroutine set_mhv(ar_id, ge_id, q) end subroutine set_mhv subroutine set_qmr(ar_id, kij, lij) - use yaeos, only: QMR + use yaeos, only: QMR, CubicEoS integer(c_int), intent(in) :: ar_id real(c_double) :: kij(:, :) real(c_double) :: lij(:, :) @@ -174,6 +172,7 @@ end subroutine set_qmr ! Cubic EoS ! -------------------------------------------------------------------------- subroutine pr76(tc, pc, w, id) bind(C, name="PR76") + use yaeos, only: PengRobinson76 real(c_double), intent(in) :: tc(:), pc(:), w(:) integer(c_int), intent(out) :: id @@ -182,6 +181,7 @@ subroutine pr76(tc, pc, w, id) bind(C, name="PR76") end subroutine pr76 subroutine srk(tc, pc, w, kij, lij, id) + use yaeos, only: SoaveRedlichKwong real(c_double), intent(in) :: tc(:), pc(:), w(:), kij(:, :), lij(:, :) integer(c_int), intent(out) :: id ar_model = SoaveRedlichKwong(tc, pc, w, kij, lij) @@ -192,6 +192,7 @@ end subroutine srk ! Thermodynamic properties ! -------------------------------------------------------------------------- subroutine fug_vt(id, n, v, t, lnfug, dlnphidp, dlnphidt, dlnphidn) + use yaeos, only: fugacity_vt integer(c_int), intent(in) :: id real(c_double), intent(in) :: n(:), v, t real(c_double), intent(out) :: lnfug(size(n)) @@ -282,5 +283,4 @@ subroutine saturation_pressure(id, z, T, kind, P, x, y, Vx, Vy, beta) sat = fsaturation_pressure(ar_models(id)%model, z, T, kind) call equilibria_state_to_arrays(sat, x, y, P, aux, Vx, Vy, beta) end subroutine - end module yaeos_c From 94fb9bec3792280d90312a4fd2c44aaf72b21b97 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Fri, 5 Jul 2024 12:06:27 -0300 Subject: [PATCH 080/167] insall meson --- .github/workflows/CI.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index f2fceb893..b946a3ca6 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -104,9 +104,9 @@ jobs: with: python-version: ${{ matrix.python-version }} - - name: Install NLopt + - name: Install NLopt and meson run: - sudo apt-get install libnlopt-dev + sudo apt-get install libnlopt-dev meson - name: Install yaeos run: From 5e80ac976a7469cb96864700027a254e321fcc59 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Fri, 5 Jul 2024 12:10:09 -0300 Subject: [PATCH 081/167] ci --- .github/workflows/CI.yml | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index b946a3ca6..757f7481f 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -46,19 +46,13 @@ jobs: with: github-token: ${{ secrets.GITHUB_TOKEN }} - - name: Install Python dependencies + - name: Install dependencies run: | python -m pip install --upgrade pip pip install ford numpy matplotlib gcovr numpy scipy if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - - - name: Install NLopt - run: sudo apt-get install libnlopt-dev - # - name: Compile - # run: fpm build --profile release --compiler ${{ env.FC }} --c-compiler gcc - - name: Run tests without coverage if: ${{ env.FC != 'gfortran' }} run: | @@ -106,6 +100,7 @@ jobs: - name: Install NLopt and meson run: + sudo apt-get update && sudo apt-get upgrade sudo apt-get install libnlopt-dev meson - name: Install yaeos From e7d6affa2011604bffd2b657c4c5ebe73abd49dd Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Fri, 5 Jul 2024 12:11:36 -0300 Subject: [PATCH 082/167] ci --- .github/workflows/CI.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 757f7481f..21609d74a 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -99,7 +99,7 @@ jobs: python-version: ${{ matrix.python-version }} - name: Install NLopt and meson - run: + run: | sudo apt-get update && sudo apt-get upgrade sudo apt-get install libnlopt-dev meson From f79c33dba299a969367aff3742eae5e7332fe469 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Fri, 5 Jul 2024 12:21:30 -0300 Subject: [PATCH 083/167] ci --- .github/workflows/CI.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 21609d74a..af10d1fc3 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -100,8 +100,8 @@ jobs: - name: Install NLopt and meson run: | - sudo apt-get update && sudo apt-get upgrade - sudo apt-get install libnlopt-dev meson + sudo apt-get install libnlopt-dev + pip install meson - name: Install yaeos run: From 938cd4211b62f55fd6530c4700cf962e30054a3c Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Fri, 5 Jul 2024 13:36:13 -0300 Subject: [PATCH 084/167] ci --- .github/workflows/CI.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index af10d1fc3..42064c125 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -100,7 +100,7 @@ jobs: - name: Install NLopt and meson run: | - sudo apt-get install libnlopt-dev + sudo apt-get install libnlopt-dev meson pip install meson - name: Install yaeos From 010a861b81ff5b454c030d22faafe45a7abff643 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Fri, 5 Jul 2024 13:38:00 -0300 Subject: [PATCH 085/167] meson --- python/pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/pyproject.toml b/python/pyproject.toml index b804ed9a3..d7828987d 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -1,3 +1,3 @@ [build-system] build-backend = "setuptools.build_meta" -requires = ["setuptools", "wheel", "numpy", "fpm"] +requires = ["setuptools", "wheel", "numpy", "fpm", "meson"] From 861c6e6af669b75e4f1694d81807d692cc5d3b1a Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Fri, 5 Jul 2024 14:21:56 -0300 Subject: [PATCH 086/167] python --- .github/workflows/CI.yml | 5 +---- python/yaeos/fortran_wrap/yaeos_c.f90 | 32 ++++++++++++++++++++------- 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 42064c125..2517a1c18 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -3,7 +3,7 @@ on: [push] jobs: - Fortran: + tests_and_coverage: runs-on: ${{ matrix.os }} strategy: fail-fast: false @@ -15,11 +15,8 @@ jobs: - {compiler: gcc, version: 11} - {compiler: gcc, version: 12} - {compiler: gcc, version: 13} - # - {compiler: intel-classic, version: '2024.1'} - {compiler: intel, version: '2024.1'} - {compiler: intel, version: '2023.2'} - # - {compiler: nvidia-hpc, version: '23.11'} - # - {compiler: intel-classic, version: '2023.2'} steps: - name: Checkout code uses: actions/checkout@v2 diff --git a/python/yaeos/fortran_wrap/yaeos_c.f90 b/python/yaeos/fortran_wrap/yaeos_c.f90 index dbc08177f..cf484cc6d 100644 --- a/python/yaeos/fortran_wrap/yaeos_c.f90 +++ b/python/yaeos/fortran_wrap/yaeos_c.f90 @@ -18,16 +18,23 @@ module yaeos_c private - public :: pr76 - public :: srk - public :: fug_vt + ! CubicEoS + public :: srk, pr76, pr78 + ! Mixing rules + public :: set_mhv, set_qmr + + ! __del__ public :: make_available_ar_models_list public :: make_available_ge_models_list - public :: set_mhv, set_qmr + ! GeMoels public :: nrtl + public :: ln_gamma + + ! Thermoprops + public :: fug_vt + ! Phase equilibria public :: flash public :: saturation_pressure - public :: ln_gamma type :: ArModelContainer !! Container type for ArModels @@ -128,6 +135,7 @@ end subroutine make_available_ar_models_list ! Cubic Mixing rules ! -------------------------------------------------------------------------- subroutine set_mhv(ar_id, ge_id, q) + !! Michelsen's Modified Huron-Vidal 1 with constant `q_1` parameter use yaeos, only: MHV, CubicEoS integer(c_int), intent(in) :: ar_id integer(c_int), intent(in) :: ge_id @@ -169,9 +177,9 @@ subroutine set_qmr(ar_id, kij, lij) end subroutine set_qmr ! ========================================================================== - ! Cubic EoS + ! Cubic EoS implementations ! -------------------------------------------------------------------------- - subroutine pr76(tc, pc, w, id) bind(C, name="PR76") + subroutine pr76(tc, pc, w, id) use yaeos, only: PengRobinson76 real(c_double), intent(in) :: tc(:), pc(:), w(:) integer(c_int), intent(out) :: id @@ -179,6 +187,15 @@ subroutine pr76(tc, pc, w, id) bind(C, name="PR76") ar_model = PengRobinson76(tc, pc, w) call extend_ar_models_list(id) end subroutine pr76 + + subroutine pr78(tc, pc, w, id) + use yaeos, only: PengRobinson78 + real(c_double), intent(in) :: tc(:), pc(:), w(:) + integer(c_int), intent(out) :: id + + ar_model = PengRobinson78(tc, pc, w) + call extend_ar_models_list(id) + end subroutine pr78 subroutine srk(tc, pc, w, kij, lij, id) use yaeos, only: SoaveRedlichKwong @@ -207,7 +224,6 @@ subroutine fug_vt(id, n, v, t, lnfug, dlnphidp, dlnphidt, dlnphidn) ) end subroutine fug_vt - ! ========================================================================== ! Phase equilibria ! -------------------------------------------------------------------------- From 8200ca1605bb0da22ad456e9ea7d68ae2634aa3b Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Fri, 5 Jul 2024 16:32:20 -0300 Subject: [PATCH 087/167] python --- python/docs/tutorials/tutorial.ipynb | 62 +++++++++++----------------- python/yaeos/core.py | 9 +++- 2 files changed, 31 insertions(+), 40 deletions(-) diff --git a/python/docs/tutorials/tutorial.ipynb b/python/docs/tutorials/tutorial.ipynb index ef4cfe6df..26eee8493 100644 --- a/python/docs/tutorials/tutorial.ipynb +++ b/python/docs/tutorials/tutorial.ipynb @@ -148,7 +148,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 9, "id": "a0a29755", "metadata": {}, "outputs": [ @@ -156,13 +156,22 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 2.71 s, sys: 2.37 ms, total: 2.71 s\n", - "Wall time: 2.71 s\n" + "0.3388819694519043\n", + "0.42250776290893555\n", + "0.49509143829345703\n", + "0.5394766330718994\n", + "0.5379073619842529\n", + "0.5779635906219482\n", + "0.6288595199584961\n", + "0.6581037044525146\n", + "0.6781682968139648\n", + "CPU times: user 4.9 s, sys: 5.1 ms, total: 4.9 s\n", + "Wall time: 4.9 s\n" ] }, { "data": { - "image/png": "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cZlKpQIA6Ovr49atW/Dy8mrZoluhpvw8Ozs7w8DAAHp6euIyPz8/pKWloaKiAoaGhi1ac2vVlM/6o48+wpw5c/DSSy8BAHr27Ini4mLMmzcPH3zwAeRy/v3cHOr6PrS0tGyRXg+gjfR8GBoaol+/fjh27Ji4TKVS4dixYwgMDKz1OYGBgRrbA8CRI0fq3J4eaMpnDQArVqzAZ599hoMHDyIgIEAbpbZqjf2cfX19ERkZiYiICLFNnjwZw4cPR0REBNzd3bVZfqvRlJ/nIUOGIC4uTgx3AHD79m04OzszeNSjKZ91SUlJjYChDn0Cb0vWbCT5PmyxoaxatnnzZsHIyEj4888/hejoaGHevHmCtbW1kJaWJgiCIMyZM0d47733xO3Pnj0r6OvrC998840QExMjLF26lKfaNlBjP+svv/xSMDQ0FLZt2yakpqaKrbCwUKq30Co09nOujme7NExjP+e7d+8KFhYWwoIFC4Rbt24Jf//9t+Dg4CD861//kuottBqN/ayXLl0qWFhYCJs2bRISEhKEw4cPC15eXsKTTz4p1VtoFQoLC4Xw8HAhPDxcACB89913Qnh4uHDnzh1BEAThvffeE+bMmSNurz7V9u233xZiYmKEn376iafaNsaqVasEDw8PwdDQUBgwYIBw4cIFcd2wYcOEuXPnamz/119/Cd7e3oKhoaHQvXt3Yd++fVquuPVqzGft6ekpAKjRli5dqv3CW5nG/kxXxfDRcI39nM+dOycMHDhQMDIyEjp37ix8/vnngkKh0HLVrVNjPuvKykrhk08+Eby8vARjY2PB3d1deO2114Tc3FztF96KnDhxotbfuerPdu7cucKwYcNqPMff318wNDQUOnfuLPzxxx8tWqNMENh3RURERNrTJsZ8EBERUevB8EFERERaxfBBREREWsXwQURERFrF8EFERERaxfBBREREWsXwQURERFrF8EFERERaxfBBREREWsXwQURERFrF8EFERERaxfBBREREWvX/AB+itHeUY8ozAAAAAElFTkSuQmCC", + "image/png": "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", "text/plain": [ "
" ] @@ -187,59 +196,36 @@ "c = [[0, 0.3], [0.3, 0]]\n", "\n", "b = np.array(b)\n", + "\n", "ge_model = NRTL(a, b, c)\n", "mixrule = MHV(ge_model, q=-0.53)\n", "model = PengRobinson76(tc, pc, w, mixrule)\n", "\n", "\n", "colors = [\"red\", \"green\", \"blue\", \"orange\", \"black\"]\n", - "\n", - "for i, T in enumerate(np.linspace(50+273, 200+273, 5)):\n", + "ts = np.linspace(50+273, 200+273, 9)\n", + "import time\n", + "for i, T in enumerate(ts):\n", " i=4\n", " xs = np.linspace(0.001, 0.999, 100)\n", " ys = []\n", " ps = []\n", "\n", + " st = time.time()\n", + " \n", " for x1 in xs:\n", " x = [x1, 1-x1]\n", - " p, x, y, vx, vy, beta = yaeos_c.saturation_pressure(model.id, x, T, \"bubble\")\n", + " p, x, y, vx, vy, beta = yaeos_c.saturation_pressure(\n", + " model.id, x, T, \"bubble\"\n", + " )\n", " ps.append(p)\n", " ys.append(y[0])\n", "\n", + " print(time.time() - st)\n", + "\n", " plt.plot(xs, ps, color=colors[i])\n", " plt.plot(ys, ps, color=colors[i])" ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "19cdb686", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([0.55393321, 0.07829633])" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "n = [0.3, 0.7]\n", - "T = 250\n", - "yaeos_c.ln_gamma(ge_model.id, n, T)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "50747ff2", - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { diff --git a/python/yaeos/core.py b/python/yaeos/core.py index 35ebabe0e..aa0cea3f1 100644 --- a/python/yaeos/core.py +++ b/python/yaeos/core.py @@ -8,12 +8,15 @@ from yaeos import yaeos_c class GeModel(ABC): - ... + """Excess Gibbs model. + """ def __del__(self): yaeos_c.make_available_ge_models_list(self.id) class ArModel(ABC): + """Residual Helmholtz (Ar) model + """ def fugacity(self, n, v, t, dt=None, dp=None, dn=None): @@ -26,7 +29,9 @@ def fugacity(self, n, v, t, dt=None, dp=None, dn=None): if dn: dn = np.empty((nc, nc), order="F") - res = yaeos_c.fug_vt(self.id, n, v, t, dlnphidt=dt, dlnphidp=dp, dlnphidn=dn) + res = yaeos_c.fug_vt( + self.id, n, v, t, dlnphidt=dt, dlnphidp=dp, dlnphidn=dn + ) res = {"ln_phi": res, "dt": dt, "dp": dp, "dn": dn} return res From 3101bd6493f32edb28aef96b41d0f4df91a20bf7 Mon Sep 17 00:00:00 2001 From: salvador Date: Sun, 7 Jul 2024 22:41:01 -0300 Subject: [PATCH 088/167] trying to make editable install --- python/.tox/.pkg-cpython312/file.lock | 0 python/.tox/.pkg/file.lock | 0 python/pyproject.toml | 2 +- python/setup.py | 45 +++++++++++++-------------- 4 files changed, 22 insertions(+), 25 deletions(-) create mode 100644 python/.tox/.pkg-cpython312/file.lock create mode 100644 python/.tox/.pkg/file.lock diff --git a/python/.tox/.pkg-cpython312/file.lock b/python/.tox/.pkg-cpython312/file.lock new file mode 100644 index 000000000..e69de29bb diff --git a/python/.tox/.pkg/file.lock b/python/.tox/.pkg/file.lock new file mode 100644 index 000000000..e69de29bb diff --git a/python/pyproject.toml b/python/pyproject.toml index d7828987d..294c5b33b 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -1,3 +1,3 @@ [build-system] build-backend = "setuptools.build_meta" -requires = ["setuptools", "wheel", "numpy", "fpm", "meson"] +requires = ["setuptools", "wheel", "numpy", "fpm", "meson", "ninja"] diff --git a/python/setup.py b/python/setup.py index 147b01d90..d023044f9 100644 --- a/python/setup.py +++ b/python/setup.py @@ -1,7 +1,8 @@ -from setuptools import setup, Command +from setuptools import setup, Command, find_packages import subprocess import shutil from setuptools.command.install import install +from setuptools.command.develop import develop from pathlib import Path import sysconfig @@ -16,7 +17,6 @@ def pre_build(): - subprocess.check_call( [ "fpm", @@ -60,12 +60,6 @@ def finalize_options(self): def run(self): pre_build() - site_packages_dir = Path(sysconfig.get_path("purelib")) - - for file in THIS_DIR.glob("yaeos_compiled.*"): - target_dir = site_packages_dir / "yaeos" / "compiled_module" - target_dir.mkdir(parents=True, exist_ok=True) - shutil.move(file, target_dir) # ============================================================================= @@ -75,40 +69,43 @@ def run(self): # # python3 setup.py build_fortran_editable # ============================================================================= -class BuildFortranEditable(BuildFortran): - +class CustomDevelop(develop): def run(self): - pre_build() + print("this command is editable") + + self.run_command("build_fortran") + for file in THIS_DIR.glob("yaeos_compiled.*"): target_dir = Path(".") / "yaeos" / "compiled_module" target_dir.mkdir(parents=True, exist_ok=True) shutil.move(file.absolute(), target_dir.absolute()/file) + super().run() + class CustomInstall(install): def run(self): + print("this command is no editable") self.run_command("build_fortran") - install.run(self) + + site_packages_dir = Path(sysconfig.get_path("purelib")) + + for file in THIS_DIR.glob("yaeos_compiled.*"): + target_dir = site_packages_dir / "yaeos" / "compiled_module" + target_dir.mkdir(parents=True, exist_ok=True) + shutil.move(file, target_dir) + + super().run() setup( name="yaeos", version="0.3.5", - packages=["yaeos"], + packages= find_packages(), cmdclass={ "build_fortran": BuildFortran, - "build_fortran_editable": BuildFortranEditable, + "develop": CustomDevelop, "install": CustomInstall, }, - install_requires=["numpy", "fpm"], - package_data={ - "yaeos": [ - "compiled_module/", - ], - }, - include_package_data=True, - exclude_package_data={ - "yaeos": ["__pycache__", "*.f90", "*.egg-info"], - }, ) From 24ad12c968138d6b565eb148a6b3ab793f32feca Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Mon, 8 Jul 2024 09:24:18 -0300 Subject: [PATCH 089/167] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index eb8306229..41ddf52e8 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ - +
+ [![Fortran](https://img.shields.io/badge/Fortran-734f96?logo=fortran&style=flat)](https://fortran-lang.org) [![fpm](https://img.shields.io/badge/fpm-Fortran_package_manager-734f96)](https://fpm.fortran-lang.org) [![Documentation](https://img.shields.io/badge/ford-Documentation%20-blueviolet.svg)](https://ipqa-research.github.io/yaeos/) @@ -6,6 +7,7 @@ [![CI](https://github.com/fedebenelli/yaeos/actions/workflows/CI.yml/badge.svg)](https://github.com/ipqa-research/yaeos/actions/workflows/CI.yml) [![codecov](https://codecov.io/gh/ipqa-research/yaeos/graph/badge.svg?token=IDJYKV8XK6)](https://codecov.io/gh/ipqa-research/yaeos) +

From e8aa28b12b694c58bf6b7596a781c5f64c1cbe43 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Mon, 8 Jul 2024 09:27:15 -0300 Subject: [PATCH 090/167] failed spec --- src/phase_equilibria/flash.f90 | 1 + 1 file changed, 1 insertion(+) diff --git a/src/phase_equilibria/flash.f90 b/src/phase_equilibria/flash.f90 index bb0f6a0d5..b50b4d547 100644 --- a/src/phase_equilibria/flash.f90 +++ b/src/phase_equilibria/flash.f90 @@ -161,6 +161,7 @@ type(EquilibriaState) function flash(model, z, t, v_spec, p_spec, k0, iters) if (spec == 'TP') v = beta*Vy + (1 - beta)*Vx if (maxval(K) < 1.001 .and. minval(K) > 0.999) then ! trivial solution + flash%kind = "failed" P = -1.0 flash%x = x/x flash%y = y/y From 77300e18319a2b97cf8aef93f03cee50e1f68afe Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Mon, 8 Jul 2024 12:09:29 -0300 Subject: [PATCH 091/167] migration to always using the ProblemFitting model --- app/fit.f90 | 103 +----------------- src/fitting/{kij_lij.f90 => fit_kij_lij.f90} | 12 +-- src/fitting/fit_nrtl_mhv.f90 | 88 +++++++++++++++ src/fitting/fitting.f90 | 106 +++++++++++-------- 4 files changed, 153 insertions(+), 156 deletions(-) rename src/fitting/{kij_lij.f90 => fit_kij_lij.f90} (92%) create mode 100644 src/fitting/fit_nrtl_mhv.f90 diff --git a/app/fit.f90 b/app/fit.f90 index 0cd0e9034..a3da27853 100644 --- a/app/fit.f90 +++ b/app/fit.f90 @@ -1,107 +1,9 @@ -module yaeos__fitting_fit_nrtl - use yaeos__constants, only: pr - use yaeos__fitting, only: FittingProblem - use yaeos__models, only: ArModel, NRTL, CubicEoS, MHV - use forsus, only: Substance - implicit none - - integer, parameter :: nc = 2 - - type, extends(FittingProblem) :: FitMHVNRTL - contains - procedure :: get_model_from_X => model_from_X - end type - -contains - - subroutine init_model(problem, sus) - use yaeos, only: R, ArModel, CubicEoS, PengRobinson78, RKPR, SoaveRedlichKwong - class(FitMHVNRTL), intent(in out) :: problem - type(Substance), intent(in) :: sus(2) - type(MHV) :: mixrule - type(NRTL) :: ge - real(pr) :: tc(nc), pc(nc), w(nc), vc(nc), zc(nc) - real(pr) :: a(nc, nc), b(nc, nc), c(nc, nc), bi(nc) - - a=0; b=0; c=0 - - tc = sus%critical%critical_temperature%value - pc = sus%critical%critical_pressure%value/1e5 - w = sus%critical%acentric_factor%value - vc = sus%critical%critical_volume%value - zc = pc*vc/(R*tc) - - ge = NRTL(a, b, c) - - ! problem%model = RKPR(tc, pc, w, zc) - allocate(CubicEoS :: problem%model) - problem%model = SoaveRedlichKwong(tc, pc, w) - - associate(m => problem%model) - select type(m) - type is (CubicEoS) - bi = m%b - mixrule = MHV(ge=ge, q=-0.593_pr, b=bi) - deallocate(m%mixrule) - m%mixrule = mixrule - end select - end associate - end subroutine init_model - - function model_from_X(problem, X) result(model) - use yaeos, only: R, RKPR, PengRobinson78, ArModel, QMR, CubicEoS - use yaeos__models_ar_cubic_quadratic_mixing, only: RKPR_D1mix - real(pr), intent(in) :: X(:) - class(FitMHVNRTL), intent(in) :: problem - class(ArModel), allocatable :: model - type(NRTL) :: ge - - real(pr) :: a(nc, nc), b(nc, nc), c(nc, nc) - - a=0; b=0; c=0 - - a(1, 2) = x(1) - a(2, 1) = x(2) - - b(1, 2) = x(3) - b(2, 1) = x(4) - - c(1, 2) = x(5) - c(2, 1) = x(6) - - ge = NRTL(a, b, c) - - associate (pm => problem%model) - select type(pm) - type is (CubicEoS) - model = pm - end select - end associate - - ! model = problem%model - - select type(model) - class is (CubicEoS) - associate(mr => model%mixrule) - select type (mr) - class is (MHV) - mr%l(1, 2) = x(7) - mr%l(2, 1) = x(7) - mr%ge = ge - model%del1 = x(8:) - model%del2 = (1._pr - model%del1)/(1._pr + model%del1) - end select - end associate - end select - end function model_from_X -end module - program main !! Binary system parameter optimization use yaeos, only: EquilibriaState, pr, ArModel, PengRobinson78, CubicEoS, saturation_pressure use forsus, only: Substance, forsus_dir use yaeos__fitting, only: FittingProblem, fobj, optimize - use yaeos__fitting_fit_nrtl, only: FitMHVNRTL, init_model + use yaeos__fitting_fit_nrtl_mhv, only: FitMHVNRTL, init_model integer, parameter :: nc = 2, np=7 + nc integer :: i, infile, iostat @@ -161,7 +63,8 @@ program main print *, "Xf:", X if (allocated(model)) deallocate (model) - model = prob%get_model_from_X(X) + call prob%get_model_from_X(X) + model = prob%model ! =========================================================================== ! Write out results and experimental values diff --git a/src/fitting/kij_lij.f90 b/src/fitting/fit_kij_lij.f90 similarity index 92% rename from src/fitting/kij_lij.f90 rename to src/fitting/fit_kij_lij.f90 index b4679825c..87a94377a 100644 --- a/src/fitting/kij_lij.f90 +++ b/src/fitting/fit_kij_lij.f90 @@ -49,7 +49,7 @@ module yaeos__fitting_fit_kij_lij function model_from_X(problem, X) result(model) use yaeos, only: R, RKPR, PengRobinson78, ArModel, QMR, CubicEoS real(pr), intent(in) :: X(:) - class(FitKijLij), intent(in) :: problem + class(FitKijLij), intent(in out) :: problem class(ArModel), allocatable :: model real(pr) :: kij(nc, nc), lij(nc, nc) @@ -62,14 +62,7 @@ function model_from_X(problem, X) result(model) lij(1, 2) = X(2) lij(2, 1) = X(2) - - associate(pm => problem%model) - select type(pm) - type is (CubicEoS) - model = pm - end select - end associate - + associate(model => problem%model) select type (model) class is (CubicEoS) associate (mr => model%mixrule) @@ -80,6 +73,7 @@ function model_from_X(problem, X) result(model) end select end associate end select + end associate end function model_from_X end module yaeos__fitting_fit_kij_lij diff --git a/src/fitting/fit_nrtl_mhv.f90 b/src/fitting/fit_nrtl_mhv.f90 new file mode 100644 index 000000000..f569fe736 --- /dev/null +++ b/src/fitting/fit_nrtl_mhv.f90 @@ -0,0 +1,88 @@ +module yaeos__fitting_fit_nrtl_mhv + use yaeos__constants, only: pr + use yaeos__fitting, only: FittingProblem + use yaeos__models, only: ArModel, NRTL, CubicEoS, MHV + use forsus, only: Substance + implicit none + + integer, parameter :: nc = 2 + + type, extends(FittingProblem) :: FitMHVNRTL + contains + procedure :: get_model_from_X => model_from_X + end type FitMHVNRTL + +contains + + subroutine init_model(problem, sus) + use yaeos, only: R, ArModel, CubicEoS, PengRobinson78, RKPR, SoaveRedlichKwong + class(FitMHVNRTL), intent(in out) :: problem + type(Substance), intent(in) :: sus(2) + type(MHV) :: mixrule + type(NRTL) :: ge + real(pr) :: tc(nc), pc(nc), w(nc), vc(nc), zc(nc) + real(pr) :: a(nc, nc), b(nc, nc), c(nc, nc), bi(nc) + + a=0; b=0; c=0 + + tc = sus%critical%critical_temperature%value + pc = sus%critical%critical_pressure%value/1e5 + w = sus%critical%acentric_factor%value + vc = sus%critical%critical_volume%value + zc = pc*vc/(R*tc) + + ge = NRTL(a, b, c) + + allocate(CubicEoS :: problem%model) + problem%model = SoaveRedlichKwong(tc, pc, w) + + associate(m => problem%model) + select type(m) + type is (CubicEoS) + bi = m%b + mixrule = MHV(ge=ge, q=-0.593_pr, b=bi) + deallocate(m%mixrule) + m%mixrule = mixrule + end select + end associate + end subroutine init_model + + subroutine model_from_X(problem, X) + use yaeos, only: R, RKPR, PengRobinson78, ArModel, QMR, CubicEoS + use yaeos__models_ar_cubic_quadratic_mixing, only: RKPR_D1mix + class(FitMHVNRTL), intent(in out) :: problem + real(pr), intent(in) :: X(:) + type(NRTL) :: ge + + real(pr) :: a(nc, nc), b(nc, nc), c(nc, nc) + + a=0; b=0; c=0 + + a(1, 2) = x(1) + a(2, 1) = x(2) + + b(1, 2) = x(3) + b(2, 1) = x(4) + + c(1, 2) = x(5) + c(2, 1) = x(6) + + ge = NRTL(a, b, c) + + associate (model => problem%model) + select type(model) + class is (CubicEoS) + associate(mr => model%mixrule) + select type (mr) + class is (MHV) + mr%l(1, 2) = x(7) + mr%l(2, 1) = x(7) + mr%ge = ge + model%del1 = x(8:) + model%del2 = (1._pr - model%del1)/(1._pr + model%del1) + end select + end associate + end select + end associate + end subroutine model_from_X +end module yaeos__fitting_fit_nrtl_mhv diff --git a/src/fitting/fitting.f90 b/src/fitting/fitting.f90 index 8ba3b9611..65cc55e6b 100644 --- a/src/fitting/fitting.f90 +++ b/src/fitting/fitting.f90 @@ -26,21 +26,17 @@ module yaeos__fitting end type FittingProblem abstract interface - function model_from_X(problem, X) + subroutine model_from_X(problem, X) !! Function that returns a setted model from the parameters vector import ArModel, FittingProblem, pr - class(FittingProblem), intent(in) :: problem + class(FittingProblem), intent(in out) :: problem real(pr), intent(in) :: X(:) - - class(ArModel), allocatable :: model_from_X - end function model_from_X + end subroutine model_from_X end interface type(bar_object), private :: bar integer, private :: count - class(ArModel), private, allocatable :: model - contains real(pr) function optimize(X, func_data) result(y) @@ -55,13 +51,13 @@ real(pr) function optimize(X, func_data) result(y) type(nlopt_opt) :: opt !! Optimizer type(nlopt_func) :: f !! Function to optimize integer :: stat - + count = 0 call bar%initialize(& prefix_string='Fitting... ',& width=1, spinner_string='⠋', spinner_color_fg='blue', & min_value=0._pr, max_value=100._pr & - ) + ) call bar%start ! opt = nlopt_opt(nlopt_algorithm_enum%LN_NELDERMEAD, size(X)) @@ -106,60 +102,76 @@ real(pr) function fobj(x, gradient, func_data) class is(FittingProblem) fobj = error_function(X, func_data) if (func_data%verbose) then - call bar%update(current=real(count,pr)/(count + 100)) - write(*, "(E15.4, 2x)", advance="no") fobj + call bar%update(current=real(count,pr)/(count + 100)) + write(*, "(E15.4, 2x)", advance="no") fobj end if end select - write(2, *) X, fobj + write(2, "(*(E15.4,2x))") X, fobj write(1, "(/)") - + count = count + 1 end function fobj real(pr) function error_function(X, func_data) result(fobj) + !! # `error_function` + !! Error function for phase-equilibria optimization. Using two-phase + !! points and an error function of: + !! + !! \[ + !! FO = \sum_i (\frac{P_i^{exp} - P_i^{calc}}{P_i^{exp}})^2 + !! + \sum_i (y_i^{exp} - y_i^{calc})**2 + !! + \sum_i (x_i^{exp} - x_i^{calc})**2 + !! \] use yaeos__math, only: sq_error real(pr), intent(in) :: X(:) - class(FittingProblem), intent(in) :: func_data + class(FittingProblem) :: func_data type(EquilibriaState) :: model_point !! Each solved point type(EquilibriaState) :: exp_point integer :: i - model = func_data%get_model_from_X(X) + ! Update the problem model to the new vector of parameters + call func_data%get_model_from_X(X) + fobj = 0 - do i=1, size(func_data%experimental_points) - exp_point = func_data%experimental_points(i) - - select case(exp_point%kind) - case("bubble") - model_point = saturation_pressure(& - model, exp_point%x, exp_point%t, kind="bubble", & - p0=exp_point%p, y0=exp_point%y & - ) - case("dew") - model_point = saturation_pressure(& - model, exp_point%y, exp_point%t, kind="dew", & - p0=exp_point%p, y0=exp_point%x & - ) - case("liquid-liquid") - model_point = saturation_pressure(& - model, exp_point%x, exp_point%t, kind="liquid-liquid", & - p0=exp_point%p, y0=exp_point%y & - ) - - end select - - fobj = fobj + sq_error(exp_point%p, model_point%p) - fobj = fobj + maxval(sq_error(exp_point%y, model_point%y)) - fobj = fobj + maxval(sq_error(exp_point%x, model_point%x)) - write(1, *) exp_point, model_point - - if(isnan(fobj)) then - fobj = 1e6 - exit - end if - end do + associate( model => func_data%model ) + + ! Calculate each point and calculate its error. + ! if at some point there is a NaN value, assign a big number and + ! exit + do i=1, size(func_data%experimental_points) + exp_point = func_data%experimental_points(i) + + select case(exp_point%kind) + case("bubble") + model_point = saturation_pressure(& + model, exp_point%x, exp_point%t, kind="bubble", & + p0=exp_point%p, y0=exp_point%y & + ) + case("dew") + model_point = saturation_pressure(& + model, exp_point%y, exp_point%t, kind="dew", & + p0=exp_point%p, y0=exp_point%x & + ) + case("liquid-liquid") + model_point = saturation_pressure(& + model, exp_point%x, exp_point%t, kind="liquid-liquid", & + p0=exp_point%p, y0=exp_point%y & + ) + end select + + fobj = fobj + sq_error(exp_point%p, model_point%p) + fobj = fobj + maxval(sq_error(exp_point%y, model_point%y)) + fobj = fobj + maxval(sq_error(exp_point%x, model_point%x)) + write(1, *) exp_point, model_point + + if(isnan(fobj)) then + ! fobj = 1e6 + exit + end if + end do + end associate end function error_function end module yaeos__fitting From 0e4bf874e1b2e6a9c2549de2ed6472e6368e8e74 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Mon, 8 Jul 2024 16:55:07 -0300 Subject: [PATCH 092/167] fixing example adiffPR76 --- example/extra/adiff_pr76.f90 | 40 +++++++++++++++++------------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/example/extra/adiff_pr76.f90 b/example/extra/adiff_pr76.f90 index cea2cab5f..c7646047a 100644 --- a/example/extra/adiff_pr76.f90 +++ b/example/extra/adiff_pr76.f90 @@ -5,10 +5,8 @@ module hyperdual_pr76 implicit none type, extends(ArModelAdiff) :: PR76 - type(Substances) :: composition real(pr), allocatable :: kij(:, :), lij(:, :) real(pr), allocatable :: ac(:), b(:), k(:) - real(pr), allocatable :: tc(:), pc(:), w(:) contains procedure :: Ar => arfun procedure :: get_v0 => v0 @@ -19,24 +17,24 @@ module hyperdual_pr76 contains - type(PR76) function setup(tc_in, pc_in, w_in, kij_in, lij_in) result(self) + type(PR76) function setup(tc, pc, w, kij, lij) result(self) !! Seup an Autodiff_PR76 model - real(pr) :: tc_in(:) - real(pr) :: pc_in(:) - real(pr) :: w_in(:) - real(pr) :: kij_in(:, :) - real(pr) :: lij_in(:, :) - - self%tc = tc_in - self%pc = pc_in - self%w = w_in - - self%ac = 0.45723553_pr * R**2 * self%tc**2 / self%pc - self%b = 0.07779607_pr * R * self%tc/self%pc - self%k = 0.37464_pr + 1.54226_pr * self%w - 0.26993_pr * self%w**2 - - self%kij = kij_in - self%lij = lij_in + real(pr) :: tc(:) + real(pr) :: pc(:) + real(pr) :: w(:) + real(pr) :: kij(:, :) + real(pr) :: lij(:, :) + + self%components%tc = tc + self%components%pc = pc + self%components%w = w + + self%ac = 0.45723553_pr * R**2 * tc**2 / pc + self%b = 0.07779607_pr * R * tc/pc + self%k = 0.37464_pr + 1.54226_pr * w - 0.26993_pr * w**2 + + self%kij = kij + self%lij = lij end function function arfun(self, n, v, t) result(ar) @@ -50,8 +48,8 @@ function arfun(self, n, v, t) result(ar) integer :: i, j - associate(pc => self%pc, ac => self%ac, b => self%b, k => self%k, & - kij => self%kij, lij => self%lij, tc => self%tc & + associate(pc => self%components%pc, ac => self%ac, b => self%b, k => self%k, & + kij => self%kij, lij => self%lij, tc => self%components%tc & ) a = 1.0_pr + k * (1.0_pr - sqrt(t/tc)) a = ac * a ** 2 From 1e6044c1d1a849d3e1dde3c2e055d2436ba81931 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Mon, 8 Jul 2024 16:55:26 -0300 Subject: [PATCH 093/167] Implementation of a hard-spheres mixing rule --- example/extra/hard_spheres_mixing.f90 | 209 ++++++++++++++++++++++++++ 1 file changed, 209 insertions(+) create mode 100644 example/extra/hard_spheres_mixing.f90 diff --git a/example/extra/hard_spheres_mixing.f90 b/example/extra/hard_spheres_mixing.f90 new file mode 100644 index 000000000..14e7adf11 --- /dev/null +++ b/example/extra/hard_spheres_mixing.f90 @@ -0,0 +1,209 @@ +module yaeos__HardSpheresCubicEoS + use yaeos, only: pr, R, Substances + use yaeos__ar_models_hyperdual, only: ArModelAdiff + use yaeos__autodiff + implicit none + + type, extends(ArModelAdiff) :: HardSpheresCubicEoS + real(pr), allocatable :: ac(:), b(:), k(:), kij(:, :), lij(:, :) + contains + procedure :: Ar => arfun + procedure :: get_v0 => v0 + end type HardSpheresCubicEoS + + real(pr), parameter :: del1 = 1._pr + sqrt(2._pr) + real(pr), parameter :: del2 = 1._pr - sqrt(2._pr) + +contains + + function arfun(self, n, v, t) result(Ar) + class(HardSpheresCubicEoS) :: self !! Model + type(hyperdual), intent(in) :: n(:) !! Number of moles vector + type(hyperdual), intent(in) :: v !! Volume [L/mol] + type(hyperdual), intent(in) :: t !! Temperature [K] + type(hyperdual) :: Ar !! Residual Helmholtz energy + + type(hyperdual), dimension(size(n)) :: a + type(hyperdual) :: nij + + ! Cubic Parameters + type(hyperdual) :: Ar_att + type(hyperdual) :: amix, bmix + type(hyperdual) :: b_v + + ! HardMixing parameters + type(hyperdual) :: Ar_rep + type(hyperdual) :: lambda(0:3), eta + type(hyperdual) :: l1l2_l3l0 + type(hyperdual) :: l23_l0l32 + type(hyperdual) :: logContribution + real(pr), parameter :: xi = 4.0_pr + + integer :: i, j + integer :: nc + + nc = size(n) + + ! Alpha function + associate(& + ac => self%ac, b => self%b, k => self%k, & + tc => self%components%tc, & + kij => self%kij, lij => self%lij) + + ! Attractive parameter + a = self%ac*(1.0_pr + self%k*(1.0_pr - sqrt(t/self%components%tc)))**2 + + ! Mixing rule + amix = 0.0_pr + bmix = 0.0_pr + lambda = 0.0_pr + do i = 1, nc + do j = 1, nc + nij = n(i)*n(j) + amix = amix + nij * sqrt(a(i)*a(j)) * (1 - kij(i, j)) + bmix = bmix + nij * 0.5_pr * (b(i) + b(j)) *(1 - lij(i, j)) + end do + lambda(1) = lambda(1) + n(i)*b(i)**(1.0_pr/3.0_pr) + lambda(2) = lambda(2) + n(i)*b(i)**(2.0_pr/3.0_pr) + end do + bmix = bmix/sum(n) + + lambda(0) = sum(n) + lambda(3) = bmix + eta = bmix/v/xi + l1l2_l3l0 = lambda(1)*lambda(2)/lambda(3)/lambda(0) + l23_l0l32 = lambda(2)**3/lambda(0)/lambda(3)**2 + logContribution = log(1._pr - xi*eta)/xi + + Ar_rep = -sum(n)*((1._pr + 3._pr*l1l2_l3l0)*logContribution & + + 3._pr/xi*(l23_l0l32 - 1._pr/2._pr - l1l2_l3l0/2._pr) & + *(eta + logContribution)) + b_v = bmix/v + Ar_att = (- sum(n) * log(1.0_pr - b_v) & + - amix / (R*t*bmix)*1.0_pr / (del1 - del2) & + * log((1.0_pr + del1 * b_v) / (1.0_pr + del2 * b_v)) & + ) * (R * t) + + ar = Ar_rep + Ar_att + end associate + end function arfun + + function v0(self, n, P, T) + class(HardSpheresCubicEoS), intent(in) :: self !! Model + real(pr), intent(in) :: n(:) !! Moles vector + real(pr), intent(in) :: P !! Pressure [bar] + real(pr), intent(in) :: T !! Temperature [K] + real(pr) :: v0 + + v0 = sum(n * self%b) + end function v0 + + + subroutine main + use yaeos + use forsus, only: Substance, forsus_dir, forsus_default_dir + use hyperdual_pr76, only: hPr76 => PR76, set_hpr => setup + + integer, parameter :: nc=2 + + real(pr) :: n(nc), V, P, Phs, T + real(pr) :: tc(nc), pc(nc), w(nc), kij(nc,nc), lij(nc,nc) + type(Substance) :: sus(nc) + + type(CubicEoS) :: pr76 + type(hPR76) :: hdpr76 + type(HardSpheresCubicEoS) :: hspr76 + + type(EquilibriaState) :: eq + type(PTEnvel2) :: env + + real(pr) :: Ar, ArT, ArV, ArTV, ArT2, ArV2, Arn(nc), Artn(nc), ArVn(nc), arn2(nc,nc) + + integer :: i + + forsus_dir = "build/dependencies/forsus/" // forsus_default_dir + + sus(1) = Substance("methane") + sus(2) = Substance("n-decane") + + tc = sus%critical%critical_temperature%value + pc = sus%critical%critical_pressure%value/1e5 + w = sus%critical%acentric_factor%value + + tc(2) = 874.0 + pc(2) = 6.8 + w(2) = 1.52596 + + kij = 0 + lij = 0 + + pr76 = PengRobinson76(tc, pc, w, kij, lij) + hdpr76 = set_hpr(tc, pc, w, kij, lij) + + ! Copy PR76 into HSPR76 + hspr76%components%tc = tc + hspr76%components%pc = pc + hspr76%components%w = w + hspr76%ac = pr76%ac + hspr76%b = pr76%b + + associate(alpha => pr76%alpha) + select type(alpha) + type is (AlphaSoave) + hspr76%k = alpha%k + end select + end associate + + hspr76%kij = kij + hspr76%lij = lij + + n = [0.3, 0.7] + V = 1 + T = 400 + + block + real(pr) :: dPdV, k, khs + do i=1,100 + P = real(i, pr) + call volume(pr76, n, P, T, V, root_type="stable") + call pressure(pr76, n, V, T, P, dPdV) + k = -1/V * 1/dPdV + + call volume(hspr76, n, P, T, V, root_type="stable") + call pressure(hspr76, n, V, T, P, dPdV) + khs = -1/V * 1/dPdV + + print *, P, k, khs + end do + end block + + P = 50 + do i=1,99 + n(1) = real(i)/100 + n(2) = 1 - n(1) + + eq = saturation_pressure(pr76, n, T=T, kind="bubble", P0=P) + P = eq%p + if (eq%iters < 1000) write(1, *) eq%x(1), eq%y(1), eq%p + + eq = saturation_pressure(hspr76, n, T=T, kind="bubble", p0=eq%P) + if (eq%iters < 1000) write(2, *) eq%x(1), eq%y(1), eq%p + end do + call exit + + T = 150 + eq = saturation_pressure(pr76, n, T=T, kind="bubble") + print *, eq%iters, eq + env = pt_envelope_2ph(pr76, n, eq) + + print *, size(env%points) + write(1, *) env + + eq = saturation_pressure(hspr76, n, T=T, kind="bubble", p0=eq%P) + print *, eq%iters, eq + + env = pt_envelope_2ph(hspr76, n, eq) + print *, size(env%points) + write(2, *) env + end subroutine main +end module yaeos__HardSpheresCubicEoS From 6f34fd9ee2b8c0b8eda234d7e46a055824e7b72b Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Mon, 8 Jul 2024 17:00:01 -0300 Subject: [PATCH 094/167] example demo --- fpm.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fpm.toml b/fpm.toml index 5467979cb..936937d91 100644 --- a/fpm.toml +++ b/fpm.toml @@ -31,7 +31,7 @@ forsus = {git="https://github.com/ipqa-research/forsus"} test-drive = {git = "https://github.com/fortran-lang/test-drive"} [[example]] -name = "benchmarks" +name = "demo" source-dir = "example/extra" main = "demo.f90" From 015a1450098cbfc0ace2562e73900c178a063881 Mon Sep 17 00:00:00 2001 From: Salvador Date: Mon, 8 Jul 2024 17:11:53 -0300 Subject: [PATCH 095/167] editable install works, thinking where compile on build --- .gitignore | 2 + python/.tox/.pkg-cpython312/file.lock | 0 python/.tox/.pkg/file.lock | 0 python/MANIFEST.in | 2 +- python/setup.py | 86 ++++++++++++++++++++------- python/yaeos/core.py | 9 ++- 6 files changed, 72 insertions(+), 27 deletions(-) delete mode 100644 python/.tox/.pkg-cpython312/file.lock delete mode 100644 python/.tox/.pkg/file.lock diff --git a/.gitignore b/.gitignore index 3e685e51b..cebdd0462 100644 --- a/.gitignore +++ b/.gitignore @@ -58,3 +58,5 @@ log2 para.py tools/plotting/pt_envel_2ph.gnu tools/notebooks/other.ipynb +dist +.tox diff --git a/python/.tox/.pkg-cpython312/file.lock b/python/.tox/.pkg-cpython312/file.lock deleted file mode 100644 index e69de29bb..000000000 diff --git a/python/.tox/.pkg/file.lock b/python/.tox/.pkg/file.lock deleted file mode 100644 index e69de29bb..000000000 diff --git a/python/MANIFEST.in b/python/MANIFEST.in index b60ff28c3..e5d661f40 100644 --- a/python/MANIFEST.in +++ b/python/MANIFEST.in @@ -4,7 +4,7 @@ include CONTRIBUTING.md include requirements.txt include pyproject.toml -recursive-include yaeos *.py +recursive-include yaeos *.py *.so exclude tox.ini exclude requirements-dev.txt diff --git a/python/setup.py b/python/setup.py index d023044f9..c41f75462 100644 --- a/python/setup.py +++ b/python/setup.py @@ -2,7 +2,9 @@ import subprocess import shutil from setuptools.command.install import install -from setuptools.command.develop import develop +from setuptools.command.sdist import sdist +from setuptools.command.egg_info import egg_info +from setuptools.command.editable_wheel import editable_wheel from pathlib import Path import sysconfig @@ -10,8 +12,8 @@ # ============================================================================= # Building # ============================================================================= -THIS_DIR = Path(".") -BUILD_DIR = (Path("..") / "build" / "python").absolute() +THIS_DIR = Path(__file__).parent +BUILD_DIR = (THIS_DIR.parent / "build" / "python").absolute() LINK_DIR = BUILD_DIR / "lib" INCL_DIR = BUILD_DIR / "include" @@ -63,38 +65,78 @@ def run(self): # ============================================================================= -# Building for developers (editable installation) -# install the package on the enviroment (pip install -e .) -# Build fortran to the editable command with: -# -# python3 setup.py build_fortran_editable +# - Normal build and installation: +# pip install . # ============================================================================= -class CustomDevelop(develop): +class CustomInstall(install): def run(self): - print("this command is editable") - + try: + self.run_command("build_fortran") + except: + ... + + site_packages_dir = Path(sysconfig.get_path("purelib")) + + for file in THIS_DIR.glob("yaeos_compiled.*"): + target_dir = site_packages_dir / "yaeos" / "compiled_module" + target_dir.mkdir(parents=True, exist_ok=True) + shutil.move(file, target_dir) + + super().run() + + +# ============================================================================= +# - Building for developers (editable installation) +# pip install -e . +# ============================================================================= +class CustomEditable(editable_wheel): + def run(self): + # Erase all compiled files just in case before building again + compiled_module_dir = THIS_DIR / "yaeos" / "compiled_module" + + if compiled_module_dir.exists(): + for so_file in compiled_module_dir.glob("*.so"): + so_file.unlink() + + # Build fortran and move the compilation to compiled_module self.run_command("build_fortran") for file in THIS_DIR.glob("yaeos_compiled.*"): - target_dir = Path(".") / "yaeos" / "compiled_module" + target_dir = THIS_DIR / "yaeos" / "compiled_module" target_dir.mkdir(parents=True, exist_ok=True) - shutil.move(file.absolute(), target_dir.absolute()/file) + shutil.move(file.absolute(), (target_dir / file.name).absolute()) + # Run base editable_wheel method super().run() -class CustomInstall(install): +# ============================================================================= +# - Python Build for distribution +# ============================================================================= +class CustomBuild(sdist): def run(self): - print("this command is no editable") - self.run_command("build_fortran") + print("AAAAAAAAAAAAAAAAAAAA") + print(THIS_DIR.absolute()) + print(type(self)) + + pre_build() - site_packages_dir = Path(sysconfig.get_path("purelib")) + # Erase all compiled files just in case before building again + compiled_module_dir = THIS_DIR / "yaeos" / "compiled_module" + + if compiled_module_dir.exists(): + for so_file in compiled_module_dir.glob("*.so"): + so_file.unlink() + + # Build fortran and move the compilation to compiled_module + self.run_command("build_fortran") for file in THIS_DIR.glob("yaeos_compiled.*"): - target_dir = site_packages_dir / "yaeos" / "compiled_module" + target_dir = THIS_DIR / "yaeos" / "compiled_module" target_dir.mkdir(parents=True, exist_ok=True) - shutil.move(file, target_dir) + + shutil.move(file.absolute(), (target_dir / file.name).absolute()) super().run() @@ -102,10 +144,12 @@ def run(self): setup( name="yaeos", version="0.3.5", - packages= find_packages(), + packages=find_packages(), cmdclass={ "build_fortran": BuildFortran, - "develop": CustomDevelop, + "editable_wheel": CustomEditable, "install": CustomInstall, + "sdist": CustomBuild, }, + install_requires=["numpy"], ) diff --git a/python/yaeos/core.py b/python/yaeos/core.py index aa0cea3f1..c180f0fb5 100644 --- a/python/yaeos/core.py +++ b/python/yaeos/core.py @@ -7,16 +7,16 @@ import numpy as np from yaeos import yaeos_c + class GeModel(ABC): - """Excess Gibbs model. - """ + """Excess Gibbs model.""" def __del__(self): yaeos_c.make_available_ge_models_list(self.id) + class ArModel(ABC): - """Residual Helmholtz (Ar) model - """ + """Residual Helmholtz (Ar) model""" def fugacity(self, n, v, t, dt=None, dp=None, dn=None): @@ -96,4 +96,3 @@ def __init__(self, tc, pc, w, mixrule: CubicMixRule): def set_mixrule(self, mixrule: CubicMixRule): self.mixrule = mixrule self.mixrule.set_mixrule(self.id) - From 815f1bc1e776d49223033e65d165142e79aec550 Mon Sep 17 00:00:00 2001 From: salvador Date: Mon, 8 Jul 2024 20:46:39 -0300 Subject: [PATCH 096/167] getting better, a little more work to do --- python/MANIFEST.in | 4 ++- python/setup.py | 78 ++++++++++++++++++++++++---------------------- 2 files changed, 44 insertions(+), 38 deletions(-) diff --git a/python/MANIFEST.in b/python/MANIFEST.in index e5d661f40..28e106e96 100644 --- a/python/MANIFEST.in +++ b/python/MANIFEST.in @@ -4,11 +4,13 @@ include CONTRIBUTING.md include requirements.txt include pyproject.toml -recursive-include yaeos *.py *.so +recursive-include yaeos *.py +include yaeos/compiled_module/*.so exclude tox.ini exclude requirements-dev.txt exclude _build +exclude __pycache__ recursive-exclude dist * recursive-exclude tests * diff --git a/python/setup.py b/python/setup.py index c41f75462..f793bb1e1 100644 --- a/python/setup.py +++ b/python/setup.py @@ -1,16 +1,15 @@ -from setuptools import setup, Command, find_packages +from setuptools import setup, Command import subprocess import shutil from setuptools.command.install import install from setuptools.command.sdist import sdist -from setuptools.command.egg_info import egg_info from setuptools.command.editable_wheel import editable_wheel from pathlib import Path import sysconfig # ============================================================================= -# Building +# Directories # ============================================================================= THIS_DIR = Path(__file__).parent BUILD_DIR = (THIS_DIR.parent / "build" / "python").absolute() @@ -18,6 +17,9 @@ INCL_DIR = BUILD_DIR / "include" +# ============================================================================= +# Usefull functions +# ============================================================================= def pre_build(): subprocess.check_call( [ @@ -26,7 +28,7 @@ def pre_build(): "--profile", "release", "--flag", - "-g -fPIC -funroll-loops -fstack-arrays -Ofast -frepack-arrays -faggressive-function-elimination -fopenmp", + "-g -fPIC -funroll-loops -fstack-arrays -Ofast -frepack-arrays -faggressive-function-elimination -fopenmp", "--c-flag", "-fPIC", "--prefix", @@ -49,7 +51,26 @@ def pre_build(): ] ) +def clean_editable_compiled(): + # Erase all compiled files just in case before building again + compiled_module_dir = THIS_DIR / "yaeos" / "compiled_module" + + if compiled_module_dir.exists(): + for so_file in compiled_module_dir.glob("*.so"): + so_file.unlink() + + +def move_compiled_to_editable_loc(): + for file in THIS_DIR.glob("yaeos_compiled.*"): + target_dir = THIS_DIR / "yaeos" / "compiled_module" + target_dir.mkdir(parents=True, exist_ok=True) + + shutil.move(file.absolute(), (target_dir / file.name).absolute()) + +# ============================================================================= +# Build command +# ============================================================================= class BuildFortran(Command): description = "Compile Fortran library with fpm and f2py" user_options = [] @@ -70,6 +91,8 @@ def run(self): # ============================================================================= class CustomInstall(install): def run(self): + clean_editable_compiled() + try: self.run_command("build_fortran") except: @@ -91,23 +114,13 @@ def run(self): # ============================================================================= class CustomEditable(editable_wheel): def run(self): - # Erase all compiled files just in case before building again - compiled_module_dir = THIS_DIR / "yaeos" / "compiled_module" + clean_editable_compiled() - if compiled_module_dir.exists(): - for so_file in compiled_module_dir.glob("*.so"): - so_file.unlink() - - # Build fortran and move the compilation to compiled_module self.run_command("build_fortran") - for file in THIS_DIR.glob("yaeos_compiled.*"): - target_dir = THIS_DIR / "yaeos" / "compiled_module" - target_dir.mkdir(parents=True, exist_ok=True) + move_compiled_to_editable_loc() - shutil.move(file.absolute(), (target_dir / file.name).absolute()) - - # Run base editable_wheel method + # Run base editable_wheel run method super().run() @@ -115,36 +128,27 @@ def run(self): # - Python Build for distribution # ============================================================================= class CustomBuild(sdist): - def run(self): - print("AAAAAAAAAAAAAAAAAAAA") - print(THIS_DIR.absolute()) - print(type(self)) - - pre_build() - - # Erase all compiled files just in case before building again - compiled_module_dir = THIS_DIR / "yaeos" / "compiled_module" - - if compiled_module_dir.exists(): - for so_file in compiled_module_dir.glob("*.so"): - so_file.unlink() + def run(self): + clean_editable_compiled() - # Build fortran and move the compilation to compiled_module self.run_command("build_fortran") - for file in THIS_DIR.glob("yaeos_compiled.*"): - target_dir = THIS_DIR / "yaeos" / "compiled_module" - target_dir.mkdir(parents=True, exist_ok=True) - - shutil.move(file.absolute(), (target_dir / file.name).absolute()) + move_compiled_to_editable_loc() + # Run base sdist run method super().run() +# ============================================================================= +# Call setup +# ============================================================================= setup( name="yaeos", version="0.3.5", - packages=find_packages(), + package_data={ + 'yaeos': ['compiled_module/*.so'] + }, + include_package_data=True, cmdclass={ "build_fortran": BuildFortran, "editable_wheel": CustomEditable, From 0e214a09a4233a17dcd4d746efd9d12c0ed76f03 Mon Sep 17 00:00:00 2001 From: salvador Date: Tue, 9 Jul 2024 14:23:06 -0300 Subject: [PATCH 097/167] still needs some work. build working. elucidate how to include licence. go into tox --- python/Makefile | 7 ---- python/pyproject.toml | 13 ++++++- python/requirements-dev.txt | 29 ++++++++++++++++ python/setup.py | 67 +++++++++++++++++++++++++++---------- python/yaeos/__init__.py | 3 +- python/yaeos/core.py | 4 +-- 6 files changed, 94 insertions(+), 29 deletions(-) delete mode 100644 python/Makefile create mode 100644 python/requirements-dev.txt diff --git a/python/Makefile b/python/Makefile deleted file mode 100644 index 135927eab..000000000 --- a/python/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -python: - fpm install --profile release --prefix build/python - f2py -m yaeos \ - -L$(PWD)/../build/python/lib/ \ - -I$(PWD)/../build/python/include \ - -c yaeos_c.f90 -lyaeos - mv yaeos.* yaeos/ diff --git a/python/pyproject.toml b/python/pyproject.toml index 294c5b33b..185668349 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -1,3 +1,14 @@ [build-system] build-backend = "setuptools.build_meta" -requires = ["setuptools", "wheel", "numpy", "fpm", "meson", "ninja"] +requires = ["fpm", "meson", "ninja", "numpy", "setuptools", "wheel"] + + +[tool.black] +line-length = 79 +target-version = ["py310"] + + +[tool.pytest.ini_options] +markers = [ + "marker_name: marker_description", +] \ No newline at end of file diff --git a/python/requirements-dev.txt b/python/requirements-dev.txt new file mode 100644 index 000000000..dcd196456 --- /dev/null +++ b/python/requirements-dev.txt @@ -0,0 +1,29 @@ +# Style +flake8-nb +flake8-black +flake8-builtins +flake8-import-order +pep8-naming +pydocstyle + +# documentation (also pandoc must be installed) +nbsphinx +sphinx +sphinx_copybutton +sphinx_rtd_theme +sphinxcontrib.bibtex + +# Testing +check-manifest +pytest +pytest-cov +tox + +# General purpose +ipdb +ipython +jupyter +matplotlib + +# Build +build diff --git a/python/setup.py b/python/setup.py index f793bb1e1..87c9f2ea9 100644 --- a/python/setup.py +++ b/python/setup.py @@ -1,11 +1,12 @@ -from setuptools import setup, Command -import subprocess import shutil +import subprocess +import sysconfig +from pathlib import Path + +from setuptools import Command, setup +from setuptools.command.editable_wheel import editable_wheel from setuptools.command.install import install from setuptools.command.sdist import sdist -from setuptools.command.editable_wheel import editable_wheel -from pathlib import Path -import sysconfig # ============================================================================= @@ -21,6 +22,8 @@ # Usefull functions # ============================================================================= def pre_build(): + """Execute fpm and f2py compilations commands.""" + subprocess.check_call( [ "fpm", @@ -28,7 +31,8 @@ def pre_build(): "--profile", "release", "--flag", - "-g -fPIC -funroll-loops -fstack-arrays -Ofast -frepack-arrays -faggressive-function-elimination -fopenmp", + "-g -fPIC -funroll-loops -fstack-arrays -Ofast -frepack-arrays", + "-faggressive-function-elimination -fopenmp", "--c-flag", "-fPIC", "--prefix", @@ -51,8 +55,10 @@ def pre_build(): ] ) + def clean_editable_compiled(): - # Erase all compiled files just in case before building again + """Erase all compiled files from development directory""" + compiled_module_dir = THIS_DIR / "yaeos" / "compiled_module" if compiled_module_dir.exists(): @@ -61,6 +67,8 @@ def clean_editable_compiled(): def move_compiled_to_editable_loc(): + """Move compiled files to 'compiled_module' directory""" + for file in THIS_DIR.glob("yaeos_compiled.*"): target_dir = THIS_DIR / "yaeos" / "compiled_module" target_dir.mkdir(parents=True, exist_ok=True) @@ -92,10 +100,13 @@ def run(self): class CustomInstall(install): def run(self): clean_editable_compiled() - + try: self.run_command("build_fortran") - except: + except subprocess.CalledProcessError: + # Get this error when building the python project. At this point, + # when building the python project, the fortran code has been + # alredy compiled. ... site_packages_dir = Path(sysconfig.get_path("purelib")) @@ -126,9 +137,11 @@ def run(self): # ============================================================================= # - Python Build for distribution +# pip install build +# python3 -m build # ============================================================================= class CustomBuild(sdist): - def run(self): + def run(self): clean_editable_compiled() self.run_command("build_fortran") @@ -142,18 +155,38 @@ def run(self): # ============================================================================= # Call setup # ============================================================================= +name = "yaeos" +version = "0.3.0" +author = "Federico E. Benelli" +author_email = "federico.benelli@mi.unc.edu.ar" +maintainer = "Federico E. Benelli" +maintainer_email = "federico.benelli@mi.unc.edu.ar" +lic = "MPL" + setup( - name="yaeos", - version="0.3.5", - package_data={ - 'yaeos': ['compiled_module/*.so'] - }, - include_package_data=True, + name=name, + version=version, + author=author, + author_email=author_email, + maintainer=maintainer, + maintainer_email=maintainer_email, + description="", + license=lic, + keywords="thermodynamics equation-of-state", + url="https://github.com/ipqa-research/yaeos", + classifiers=[ + "Development Status :: 3 - Alpha", + "Intended Audience :: Science/Research/Engineering", + "Topic :: Thermodynamics", + "License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)", + ], + install_requires=["numpy"], cmdclass={ "build_fortran": BuildFortran, "editable_wheel": CustomEditable, "install": CustomInstall, "sdist": CustomBuild, }, - install_requires=["numpy"], + package_data={"yaeos": ["compiled_module/*.so"]}, + include_package_data=True, ) diff --git a/python/yaeos/__init__.py b/python/yaeos/__init__.py index 311e6a0d5..7a356bfc8 100644 --- a/python/yaeos/__init__.py +++ b/python/yaeos/__init__.py @@ -1,6 +1,5 @@ from yaeos.compiled_module.yaeos_compiled import yaeos_c - -from yaeos.core import PengRobinson76, QMR, NRTL, MHV +from yaeos.core import MHV, NRTL, PengRobinson76, QMR __all__ = ["yaeos_c", "PengRobinson76", "QMR", "NRTL", "MHV"] diff --git a/python/yaeos/core.py b/python/yaeos/core.py index c180f0fb5..fbe710599 100644 --- a/python/yaeos/core.py +++ b/python/yaeos/core.py @@ -2,9 +2,9 @@ """ from abc import ABC, abstractmethod -from functools import partial import numpy as np + from yaeos import yaeos_c @@ -50,7 +50,7 @@ def __init__(self, a, b, c): class CubicMixRule(ABC): @abstractmethod - def set_mixrule(ar_model_id): + def set_mixrule(self, ar_model_id): raise NotImplementedError From f47b4a0da49a82f628a4b30f9f708f90ddc27337 Mon Sep 17 00:00:00 2001 From: salvador Date: Tue, 9 Jul 2024 20:47:33 -0300 Subject: [PATCH 098/167] dirty signal to skip_compilation, need to think better about it, but works --- python/setup.py | 19 +++++++++++-------- python/tox.ini | 0 2 files changed, 11 insertions(+), 8 deletions(-) create mode 100644 python/tox.ini diff --git a/python/setup.py b/python/setup.py index 87c9f2ea9..4753fbccb 100644 --- a/python/setup.py +++ b/python/setup.py @@ -17,6 +17,9 @@ LINK_DIR = BUILD_DIR / "lib" INCL_DIR = BUILD_DIR / "include" +# Signal to skip compilation when building +compilation_skip_signal = not (THIS_DIR / "tox.ini").exists() + # ============================================================================= # Usefull functions @@ -90,7 +93,12 @@ def finalize_options(self): pass def run(self): - pre_build() + if compilation_skip_signal: + # Do not compile, we are building, the compilation has been already + # done at this point. + ... + else: + pre_build() # ============================================================================= @@ -101,13 +109,7 @@ class CustomInstall(install): def run(self): clean_editable_compiled() - try: - self.run_command("build_fortran") - except subprocess.CalledProcessError: - # Get this error when building the python project. At this point, - # when building the python project, the fortran code has been - # alredy compiled. - ... + self.run_command("build_fortran") site_packages_dir = Path(sysconfig.get_path("purelib")) @@ -142,6 +144,7 @@ def run(self): # ============================================================================= class CustomBuild(sdist): def run(self): + # Clean compiled files and recompile as an editable installation clean_editable_compiled() self.run_command("build_fortran") diff --git a/python/tox.ini b/python/tox.ini new file mode 100644 index 000000000..e69de29bb From 2c856f85d78502ab81f37881eec86c8331f98437 Mon Sep 17 00:00:00 2001 From: salvador Date: Tue, 9 Jul 2024 23:26:03 -0300 Subject: [PATCH 099/167] little mistake fixed --- python/setup.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/python/setup.py b/python/setup.py index 4753fbccb..15850b916 100644 --- a/python/setup.py +++ b/python/setup.py @@ -20,6 +20,8 @@ # Signal to skip compilation when building compilation_skip_signal = not (THIS_DIR / "tox.ini").exists() +print() + # ============================================================================= # Usefull functions @@ -34,8 +36,7 @@ def pre_build(): "--profile", "release", "--flag", - "-g -fPIC -funroll-loops -fstack-arrays -Ofast -frepack-arrays", - "-faggressive-function-elimination -fopenmp", + "-g -fPIC -funroll-loops -fstack-arrays -Ofast -frepack-arrays -faggressive-function-elimination -fopenmp", # noqa "--c-flag", "-fPIC", "--prefix", @@ -61,7 +62,11 @@ def pre_build(): def clean_editable_compiled(): """Erase all compiled files from development directory""" + # Clear fpm build + if BUILD_DIR.exists(): + shutil.rmtree(BUILD_DIR) + # Clear compiled files on compiled_files compiled_module_dir = THIS_DIR / "yaeos" / "compiled_module" if compiled_module_dir.exists(): @@ -116,6 +121,10 @@ def run(self): for file in THIS_DIR.glob("yaeos_compiled.*"): target_dir = site_packages_dir / "yaeos" / "compiled_module" target_dir.mkdir(parents=True, exist_ok=True) + + if (target_dir / file.name).exists(): + (target_dir / file.name).unlink() + shutil.move(file, target_dir) super().run() From b3f6496548274f2909b61419d10807f5924fbce0 Mon Sep 17 00:00:00 2001 From: salvador Date: Tue, 9 Jul 2024 23:26:48 -0300 Subject: [PATCH 100/167] little mistake 2 fixed --- python/setup.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/python/setup.py b/python/setup.py index 15850b916..3d6e0dc02 100644 --- a/python/setup.py +++ b/python/setup.py @@ -20,8 +20,6 @@ # Signal to skip compilation when building compilation_skip_signal = not (THIS_DIR / "tox.ini").exists() -print() - # ============================================================================= # Usefull functions @@ -36,7 +34,7 @@ def pre_build(): "--profile", "release", "--flag", - "-g -fPIC -funroll-loops -fstack-arrays -Ofast -frepack-arrays -faggressive-function-elimination -fopenmp", # noqa + "-g -fPIC -funroll-loops -fstack-arrays -Ofast -frepack-arrays -faggressive-function-elimination -fopenmp", # noqa "--c-flag", "-fPIC", "--prefix", From 5a5b66310f66413345eda8d56f6795c82342b92a Mon Sep 17 00:00:00 2001 From: Salvador Date: Wed, 10 Jul 2024 17:01:25 -0300 Subject: [PATCH 101/167] keep working with tox at home --- .gitignore | 1 + python/setup.py | 7 +--- python/tests/test_dummy.py | 15 ++++++++ python/tox.ini | 77 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 95 insertions(+), 5 deletions(-) create mode 100644 python/tests/test_dummy.py diff --git a/.gitignore b/.gitignore index cebdd0462..00bb7410f 100644 --- a/.gitignore +++ b/.gitignore @@ -60,3 +60,4 @@ tools/plotting/pt_envel_2ph.gnu tools/notebooks/other.ipynb dist .tox +.coverage \ No newline at end of file diff --git a/python/setup.py b/python/setup.py index 3d6e0dc02..500d9d4d3 100644 --- a/python/setup.py +++ b/python/setup.py @@ -10,16 +10,13 @@ # ============================================================================= -# Directories +# Directories and constants # ============================================================================= THIS_DIR = Path(__file__).parent BUILD_DIR = (THIS_DIR.parent / "build" / "python").absolute() LINK_DIR = BUILD_DIR / "lib" INCL_DIR = BUILD_DIR / "include" -# Signal to skip compilation when building -compilation_skip_signal = not (THIS_DIR / "tox.ini").exists() - # ============================================================================= # Usefull functions @@ -96,7 +93,7 @@ def finalize_options(self): pass def run(self): - if compilation_skip_signal: + if "build" in str(THIS_DIR.absolute()): # Do not compile, we are building, the compilation has been already # done at this point. ... diff --git a/python/tests/test_dummy.py b/python/tests/test_dummy.py new file mode 100644 index 000000000..af9f6946d --- /dev/null +++ b/python/tests/test_dummy.py @@ -0,0 +1,15 @@ +import numpy as np + +from yaeos import PengRobinson76, QMR + + +def test_dummy(): + mr = QMR(np.zeros((2, 2)), np.zeros((2, 2))) + + model = PengRobinson76( + np.array([300, 350]), np.array([30, 40]), np.array([0.152, 0.325]), mr + ) + + fug = model.fugacity(np.array([5, 6]), 2.0, 303.15)["ln_phi"] + + assert np.allclose(fug, np.array([2.84731863, 2.49352934])) diff --git a/python/tox.ini b/python/tox.ini index e69de29bb..249d5c86a 100644 --- a/python/tox.ini +++ b/python/tox.ini @@ -0,0 +1,77 @@ +[tox] +isolated_build = True +envlist = + style, + docstyle, + check-manifest, + docs, + py310, + py311, + py312, + coverage, + + +# ============================================================================= +# ENVS +# ============================================================================= +[gh-actions] +python = + 3.10: py310, style, docstyle, check-manifest, coverage, docs + 3.11: py311 + 3.12: py312 + +[testenv] +deps = + ipdb + pytest +skip_install = True +usedevelop = False +commands = + pip install . + pytest tests/ {posargs} + + +[testenv:style] +skip_install = True +usedevelop = False +deps = + flake8 + flake8-black + flake8-builtins + flake8-import-order + pep8-naming +commands = + flake8 tests/ yaeos/ {posargs} + +[testenv:docstyle] +deps = + pydocstyle + tomli +commands = pydocstyle yaeos --convention=numpy + +[testenv:check-manifest] +skip_install = True +usedevelop = False +deps = check-manifest +commands = check-manifest + + +[testenv:docs] +description = "Invoke sphinx-build to build the HTML docs" +whitelist_externals = make +usedevelop = True +skip_install = False +changedir = docs +deps = -r {toxinidir}/docs/requirements.txt +commands = sphinx-build -W -b html -d {envtmpdir}/doctrees source {envtmpdir}/html + + +[testenv:coverage] +deps = + {[testenv]deps} # same dependencies of [testenv] + coverage + pytest-cov +commands = + coverage erase + pytest tests/ --cov=yaeos/ --cov-append --cov-report=term-missing + coverage report --fail-under=100 -m \ No newline at end of file From 7cd3469c332878a3768c3f78120c9745fddfb1e6 Mon Sep 17 00:00:00 2001 From: salvador Date: Wed, 10 Jul 2024 23:06:56 -0300 Subject: [PATCH 102/167] idk how to fix all the install really... keep working tomorrow --- python/setup.py | 8 +++++--- python/tox.ini | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/python/setup.py b/python/setup.py index 500d9d4d3..60239348b 100644 --- a/python/setup.py +++ b/python/setup.py @@ -6,6 +6,7 @@ from setuptools import Command, setup from setuptools.command.editable_wheel import editable_wheel from setuptools.command.install import install +from setuptools.command.install_lib import install_lib from setuptools.command.sdist import sdist @@ -17,7 +18,8 @@ LINK_DIR = BUILD_DIR / "lib" INCL_DIR = BUILD_DIR / "include" - +FFLAGS = "-g -fPIC -funroll-loops -fstack-arrays -Ofast -frepack-arrays -faggressive-function-elimination -fopenmp" # noqa +CFLAGS = "-fPIC" # ============================================================================= # Usefull functions # ============================================================================= @@ -31,9 +33,9 @@ def pre_build(): "--profile", "release", "--flag", - "-g -fPIC -funroll-loops -fstack-arrays -Ofast -frepack-arrays -faggressive-function-elimination -fopenmp", # noqa + f"{FFLAGS}", "--c-flag", - "-fPIC", + f"{CFLAGS}", "--prefix", BUILD_DIR, ] diff --git a/python/tox.ini b/python/tox.ini index 249d5c86a..3ae0e4e27 100644 --- a/python/tox.ini +++ b/python/tox.ini @@ -27,7 +27,7 @@ deps = skip_install = True usedevelop = False commands = - pip install . + python3 setup.py install pytest tests/ {posargs} From 386e5c2e87265ee5639e42aa89f037902b615645 Mon Sep 17 00:00:00 2001 From: Salvador Date: Thu, 11 Jul 2024 16:54:35 -0300 Subject: [PATCH 103/167] keep working with tox at home --- python/setup.py | 22 +++++++++++++++++++--- python/tox.ini | 2 +- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/python/setup.py b/python/setup.py index 60239348b..dbf418a3c 100644 --- a/python/setup.py +++ b/python/setup.py @@ -6,9 +6,10 @@ from setuptools import Command, setup from setuptools.command.editable_wheel import editable_wheel from setuptools.command.install import install -from setuptools.command.install_lib import install_lib from setuptools.command.sdist import sdist +import inspect + # ============================================================================= # Directories and constants @@ -70,6 +71,10 @@ def clean_editable_compiled(): for so_file in compiled_module_dir.glob("*.so"): so_file.unlink() + # Additionally, clear any .so files in the root directory if present + for so_file in THIS_DIR.glob("yaeos_compiled*.so"): + so_file.unlink() + def move_compiled_to_editable_loc(): """Move compiled files to 'compiled_module' directory""" @@ -111,6 +116,17 @@ class CustomInstall(install): def run(self): clean_editable_compiled() + super().run() + + # print("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA") + # print(THIS_DIR) + + # frames = inspect.getouterframes(inspect.currentframe()) + + # for f in frames: + # print(f.filename) + # print("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA") + self.run_command("build_fortran") site_packages_dir = Path(sysconfig.get_path("purelib")) @@ -124,7 +140,7 @@ def run(self): shutil.move(file, target_dir) - super().run() + # super().run() # ============================================================================= @@ -193,7 +209,7 @@ def run(self): cmdclass={ "build_fortran": BuildFortran, "editable_wheel": CustomEditable, - "install": CustomInstall, + #"install": CustomInstall, "sdist": CustomBuild, }, package_data={"yaeos": ["compiled_module/*.so"]}, diff --git a/python/tox.ini b/python/tox.ini index 3ae0e4e27..249d5c86a 100644 --- a/python/tox.ini +++ b/python/tox.ini @@ -27,7 +27,7 @@ deps = skip_install = True usedevelop = False commands = - python3 setup.py install + pip install . pytest tests/ {posargs} From a7d25f9a72f71cb14aafb318ffe961f3293ed73b Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Thu, 11 Jul 2024 20:25:46 -0300 Subject: [PATCH 104/167] fixed fit_kij_lij interface --- src/fitting/fit_kij_lij.f90 | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/fitting/fit_kij_lij.f90 b/src/fitting/fit_kij_lij.f90 index 87a94377a..5ba755727 100644 --- a/src/fitting/fit_kij_lij.f90 +++ b/src/fitting/fit_kij_lij.f90 @@ -46,11 +46,10 @@ module yaeos__fitting_fit_kij_lij contains - function model_from_X(problem, X) result(model) + subroutine model_from_X(problem, X) use yaeos, only: R, RKPR, PengRobinson78, ArModel, QMR, CubicEoS real(pr), intent(in) :: X(:) class(FitKijLij), intent(in out) :: problem - class(ArModel), allocatable :: model real(pr) :: kij(nc, nc), lij(nc, nc) @@ -74,6 +73,6 @@ function model_from_X(problem, X) result(model) end associate end select end associate - end function model_from_X + end subroutine end module yaeos__fitting_fit_kij_lij From ebec53643d7baa0ee42941e2dc2a58a7f96f7808 Mon Sep 17 00:00:00 2001 From: salvador Date: Thu, 11 Jul 2024 22:54:14 -0300 Subject: [PATCH 105/167] it workksss (only on linux) --- .gitignore | 3 +- python/MANIFEST.in | 1 + python/setup.py | 93 +++++++++++++++++++++++++++++++++++----------- 3 files changed, 75 insertions(+), 22 deletions(-) diff --git a/.gitignore b/.gitignore index 00bb7410f..ad6310172 100644 --- a/.gitignore +++ b/.gitignore @@ -60,4 +60,5 @@ tools/plotting/pt_envel_2ph.gnu tools/notebooks/other.ipynb dist .tox -.coverage \ No newline at end of file +.coverage +tmp_editable \ No newline at end of file diff --git a/python/MANIFEST.in b/python/MANIFEST.in index 28e106e96..4edbce398 100644 --- a/python/MANIFEST.in +++ b/python/MANIFEST.in @@ -12,6 +12,7 @@ exclude requirements-dev.txt exclude _build exclude __pycache__ +recursive-exclude tmp_dir * recursive-exclude dist * recursive-exclude tests * recursive-exclude docs * diff --git a/python/setup.py b/python/setup.py index dbf418a3c..23aae2e10 100644 --- a/python/setup.py +++ b/python/setup.py @@ -8,8 +8,6 @@ from setuptools.command.install import install from setuptools.command.sdist import sdist -import inspect - # ============================================================================= # Directories and constants @@ -21,6 +19,8 @@ FFLAGS = "-g -fPIC -funroll-loops -fstack-arrays -Ofast -frepack-arrays -faggressive-function-elimination -fopenmp" # noqa CFLAGS = "-fPIC" + + # ============================================================================= # Usefull functions # ============================================================================= @@ -58,7 +58,7 @@ def pre_build(): ) -def clean_editable_compiled(): +def initial_compiled_clean(): """Erase all compiled files from development directory""" # Clear fpm build if BUILD_DIR.exists(): @@ -76,6 +76,21 @@ def clean_editable_compiled(): so_file.unlink() +def final_build_clean(): + """Clean the build of setuptools.""" + + if (THIS_DIR / "build").exists(): + print((THIS_DIR / "build").absolute()) + shutil.rmtree(THIS_DIR / "build") + + # Clear compiled files on compiled_files + compiled_module_dir = THIS_DIR / "yaeos" / "compiled_module" + + if compiled_module_dir.exists(): + for so_file in compiled_module_dir.glob("*.so"): + so_file.unlink() + + def move_compiled_to_editable_loc(): """Move compiled files to 'compiled_module' directory""" @@ -86,6 +101,37 @@ def move_compiled_to_editable_loc(): shutil.move(file.absolute(), (target_dir / file.name).absolute()) +def save_editable_compiled(): + """Temporaly save the editable compiled from install and sdist commands""" + tmp_dir = THIS_DIR / "tmp_editable" + + if not tmp_dir.exists(): + tmp_dir.mkdir() + + compiled_module_dir = THIS_DIR / "yaeos" / "compiled_module" + + if compiled_module_dir.exists(): + for so_file in compiled_module_dir.glob("*.so"): + shutil.move( + so_file.absolute(), (tmp_dir / so_file.name).absolute() + ) + + +def restore_save_editable_compiled(): + tmp_dir = THIS_DIR / "tmp_editable" + + compiled_module_dir = THIS_DIR / "yaeos" / "compiled_module" + + if tmp_dir.exists(): + for so_file in tmp_dir.glob("*.so"): + shutil.move( + so_file.absolute(), + (compiled_module_dir / so_file.name).absolute(), + ) + + tmp_dir.rmdir() + + # ============================================================================= # Build command # ============================================================================= @@ -114,18 +160,7 @@ def run(self): # ============================================================================= class CustomInstall(install): def run(self): - clean_editable_compiled() - - super().run() - - # print("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA") - # print(THIS_DIR) - - # frames = inspect.getouterframes(inspect.currentframe()) - - # for f in frames: - # print(f.filename) - # print("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA") + initial_compiled_clean() self.run_command("build_fortran") @@ -140,7 +175,7 @@ def run(self): shutil.move(file, target_dir) - # super().run() + super().run() # ============================================================================= @@ -149,11 +184,19 @@ def run(self): # ============================================================================= class CustomEditable(editable_wheel): def run(self): - clean_editable_compiled() + # Clean the saved editable compiled + tmp_dir = THIS_DIR / "tmp_editable" - self.run_command("build_fortran") + if tmp_dir.exists(): + shutil.rmtree(tmp_dir) + # Clean compiled files and recompile as an editable installation + initial_compiled_clean() + + # Build and move + self.run_command("build_fortran") move_compiled_to_editable_loc() + save_editable_compiled() # Run base editable_wheel run method super().run() @@ -167,10 +210,10 @@ def run(self): class CustomBuild(sdist): def run(self): # Clean compiled files and recompile as an editable installation - clean_editable_compiled() + initial_compiled_clean() + # Build and move self.run_command("build_fortran") - move_compiled_to_editable_loc() # Run base sdist run method @@ -188,6 +231,9 @@ def run(self): maintainer_email = "federico.benelli@mi.unc.edu.ar" lic = "MPL" + +save_editable_compiled() + setup( name=name, version=version, @@ -209,9 +255,14 @@ def run(self): cmdclass={ "build_fortran": BuildFortran, "editable_wheel": CustomEditable, - #"install": CustomInstall, + "install": CustomInstall, "sdist": CustomBuild, }, + packages=["yaeos"], package_data={"yaeos": ["compiled_module/*.so"]}, include_package_data=True, ) + +final_build_clean() + +restore_save_editable_compiled() From f14e629222d022071ad2428495d757136f557fd8 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Fri, 12 Jul 2024 14:27:21 -0300 Subject: [PATCH 106/167] fix coverage and check-manifest --- python/tox.ini | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/python/tox.ini b/python/tox.ini index 249d5c86a..68f75042f 100644 --- a/python/tox.ini +++ b/python/tox.ini @@ -53,7 +53,7 @@ commands = pydocstyle yaeos --convention=numpy skip_install = True usedevelop = False deps = check-manifest -commands = check-manifest +commands = check-manifest --no-build-isolation [testenv:docs] @@ -67,11 +67,14 @@ commands = sphinx-build -W -b html -d {envtmpdir}/doctrees source {envtmpdir}/ht [testenv:coverage] +skip_install = True +usedevelop = False deps = {[testenv]deps} # same dependencies of [testenv] coverage pytest-cov commands = + pip install . coverage erase pytest tests/ --cov=yaeos/ --cov-append --cov-report=term-missing - coverage report --fail-under=100 -m \ No newline at end of file + coverage report --fail-under=100 -m From 7d867c962d22d57bf36cab3f9b845368a2cf8265 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Fri, 12 Jul 2024 14:27:46 -0300 Subject: [PATCH 107/167] coverage collect needs an __init__ file --- python/tests/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 python/tests/__init__.py diff --git a/python/tests/__init__.py b/python/tests/__init__.py new file mode 100644 index 000000000..e69de29bb From 03ececa7281236cbe05276c2932dc115f52dd916 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Fri, 12 Jul 2024 15:25:15 -0300 Subject: [PATCH 108/167] wrappers for some phase equilibria procedures --- python/docs/tutorials/tutorial.ipynb | 21 +++++++----- python/yaeos/core.py | 49 +++++++++++++++++++++++++++ python/yaeos/fortran_wrap/yaeos_c.f90 | 4 +-- 3 files changed, 64 insertions(+), 10 deletions(-) diff --git a/python/docs/tutorials/tutorial.ipynb b/python/docs/tutorials/tutorial.ipynb index 26eee8493..01692a5bb 100644 --- a/python/docs/tutorials/tutorial.ipynb +++ b/python/docs/tutorials/tutorial.ipynb @@ -82,8 +82,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 1.23 s, sys: 12.9 ms, total: 1.24 s\n", - "Wall time: 1.24 s\n" + "CPU times: user 706 ms, sys: 0 ns, total: 706 ms\n", + "Wall time: 704 ms\n" ] } ], @@ -100,7 +100,13 @@ "\n", "for T in ts:\n", " for P in ps:\n", - " x, y, P, T, Vx, Vy, beta = yaeos.yaeos_c.flash(id=model.id, z=n, p=P, t=T)\n", + " flash = model.flash_tp(n, T, P)\n", + " x = flash[\"x\"]\n", + " y = flash[\"y\"]\n", + " P = flash[\"P\"]\n", + " T = flash[\"T\"]\n", + " beta = flash[\"beta\"]\n", + " # x, y, P, T, Vx, Vy, beta = yaeos.yaeos_c.flash(id=model.id, z=n, p=P, t=T)\n", " t.append(T)\n", " p.append(P)\n", " betas.append(beta)" @@ -115,7 +121,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 5, @@ -215,9 +221,8 @@ " \n", " for x1 in xs:\n", " x = [x1, 1-x1]\n", - " p, x, y, vx, vy, beta = yaeos_c.saturation_pressure(\n", - " model.id, x, T, \"bubble\"\n", - " )\n", + " sat = model.saturation_pressure(x, T, \"bubble\")\n", + " p, y = sat[\"P\"], sat[\"y\"]\n", " ps.append(p)\n", " ys.append(y[0])\n", "\n", @@ -244,7 +249,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.3" + "version": "3.12.4" } }, "nbformat": 4, diff --git a/python/yaeos/core.py b/python/yaeos/core.py index fbe710599..26c8c4de7 100644 --- a/python/yaeos/core.py +++ b/python/yaeos/core.py @@ -35,6 +35,55 @@ def fugacity(self, n, v, t, dt=None, dp=None, dn=None): res = {"ln_phi": res, "dt": dt, "dp": dp, "dn": dn} return res + def flash_tp(self, z, temperature, pressure): + """Two-phase split with specification of temperature and pressure. + + Calculates the phase split at a given pressure and temperature + """ + + x, y, pressure, temperature, volume_x, volume_y, beta = yaeos_c.flash( + self.id, z, temperature, pressure + ) + + flash_result = { + "x": x, + "y": y, + "T": temperature, + "P": pressure, + "beta": beta, + } + + return flash_result + + def saturation_pressure(self, z, temperature, kind="bubble"): + """Saturation pressure at specified temperature + + Arguments + --------- + z: array + Global molar fractions + temperature: float + Temperature [K] + kind: string + Kind of saturation point, defaults to "bubble". Options are + - "bubble" + - "dew" + - "liquid-liquid" + """ + P, x, y, volume_x, volume_y, beta = yaeos_c.saturation_pressure( + self.id, z, temperature, kind + ) + + return { + "x": x, + "y": y, + "Vx": volume_x, + "Vy": volume_y, + "T": temperature, + "P": P, + "beta": beta, + } + def __del__(self): yaeos_c.make_available_ar_models_list(self.id) diff --git a/python/yaeos/fortran_wrap/yaeos_c.f90 b/python/yaeos/fortran_wrap/yaeos_c.f90 index cf484cc6d..9e88f719e 100644 --- a/python/yaeos/fortran_wrap/yaeos_c.f90 +++ b/python/yaeos/fortran_wrap/yaeos_c.f90 @@ -247,12 +247,12 @@ subroutine equilibria_state_to_arrays(eq_state, x, y, P, T, Vx, Vy, beta) beta = eq_state%beta end subroutine - subroutine flash(id, z, P, T, x, y, k0, Pout, Tout, Vx, Vy, beta) + subroutine flash(id, z, T, P, x, y, k0, Pout, Tout, Vx, Vy, beta) use yaeos, only: EquilibriaState, fflash => flash integer(c_int), intent(in) :: id real(c_double), intent(in) :: z(:) - real(c_double), intent(in) :: P real(c_double), intent(in) :: T + real(c_double), intent(in) :: P real(c_double), optional, intent(in out) :: k0(size(z)) real(c_double), intent(out) :: x(size(z)) real(c_double), intent(out) :: y(size(z)) From 106de13a9df17220b66be6f2b604ba777fdc3266 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Fri, 12 Jul 2024 16:31:30 -0300 Subject: [PATCH 109/167] more implementation and some more examples --- python/docs/tutorials/tutorial.ipynb | 318 ++++++++++++++++++++------ python/setup.py | 2 +- python/yaeos/fortran_wrap/yaeos_c.f90 | 81 ++++++- 3 files changed, 319 insertions(+), 82 deletions(-) diff --git a/python/docs/tutorials/tutorial.ipynb b/python/docs/tutorials/tutorial.ipynb index 01692a5bb..c5b61ce1e 100644 --- a/python/docs/tutorials/tutorial.ipynb +++ b/python/docs/tutorials/tutorial.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "3a2bdbde-7f69-4b8f-ad42-4eb89c90167f", "metadata": {}, "outputs": [], @@ -14,25 +14,10 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "85ff95ba-7a1a-4ca3-bec1-3c5bb50325ea", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'ln_phi': array([2.3118468 , 2.33292475]),\n", - " 'dt': None,\n", - " 'dp': None,\n", - " 'dn': array([[-0.00186921, 0.00934604],\n", - " [ 0.00934604, -0.04673019]])}" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Number of components, for easier definition\n", "nc = 2\n", @@ -57,7 +42,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "cf0a8e95", "metadata": {}, "outputs": [], @@ -74,19 +59,10 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "5e06f2a9", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CPU times: user 706 ms, sys: 0 ns, total: 706 ms\n", - "Wall time: 704 ms\n" - ] - } - ], + "outputs": [], "source": [ "%%time\n", "P, T = 60.0, 294.0\n", @@ -114,31 +90,10 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "7c42b4fe", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAigAAAGdCAYAAAA44ojeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOy9d6AkSXXl/YvIzPJVr5637X33dE+PZ2A8wzgEg5G0rKRduRXSOu1qpdXCSsgjhKTlkxeLJBa0QqwsEkgCGawAMcB4zNie7mnfz9tymRnfH1kmqyozogYeTc9MHXjT71XdijgZFRlxM+LEvUIppeijjz766KOPPvq4hCC/2QT66KOPPvroo48+OtF3UProo48++uijj0sOfQeljz766KOPPvq45NB3UProo48++uijj0sOfQeljz766KOPPvq45NB3UProo48++uijj0sOfQeljz766KOPPvq45NB3UProo48++uijj0sO9jebwNcC3/c5c+YM+XweIcQ3m04fffTRRx999NEDlFKsrq4yNTWFlPo1kuelg3LmzBm2bNnyzabRRx999NFHH318DTh58iQzMzNam+elg5LP54HgAguFwjeZTR999NFHH3300QtWVlbYsmVLcx7X4XnpoDS2dQqFQt9B6aOPPvroo4/nGXqRZ/RFsn300UcfffTRxyWHvoPSRx999NFHH31ccug7KH300UcfffTRxyWHvoPSRx999NFHH31ccug7KH300UcfffTRxyWHvoPSRx999NFHH31ccug7KH300UcfffTRxyWHvoPSRx999NFHH31ccnheBmrr45uH9ZUNHvjHRyivV9h6cIa9V+3sCrhT8z0+N3uM+co6E+kC14xsxxLtvrBSiocWTnFibZ68k+KlY7tI205XfU+vzPLo0lkS0uIlo9sZSma7bM6XVvnC3Ak85XN0aIZtuaEum7Vahc9eOMaGW2VnfoTDg1ORvP/lwjPMV9YZT+e5bjSa94MLpzixtkDeSfKyHnhfN7Kd4VQ37wulVT5f53350DTbc8NfM+/PzT7DXHmdsVSO60Z3YMvo9j5e5/3SsZ1k7ERXfcdW5/jS4hksIbludDsjqVyXzWx5jc/PHsdTPocHp9mR7+a97lb57IWnWXer7MgNc2Rwuou36/vcN/sMs+VVRlP5WN6PLJ7i+No8WTvJ9WM7ydrJrvqe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QsMhDoogCIIgCA2HOCiCIAiCIDQcwRXnGpBi8tvh4eFjrEQQBEEQhMlSvG9PJon9lHRQRkZGAOjv7z/GSgRBEARBeL2MjIzQ0tLiazMla/HYts2ePXtoampCKa86vP93DA8P09/fz65du47LOj/Sv6nP8d5H6d/U53jv4/HeP3jz+qi1ZmRkhOnTp2MY/lEmU3IGxTAM+vr63tRtNDc3H7cHHkj/jgeO9z5K/6Y+x3sfj/f+wZvTx6CZkyISJCsIgiAIQsMhDoogCIIgCA2HOCg1RKNRvvCFLxCNRo+1lDcF6d/U53jvo/Rv6nO89/F47x80Rh+nZJCsIAiCIAjHNzKDIgiCIAhCwyEOiiAIgiAIDYc4KIIgCIIgNBzioAiCIAiC0HCcEA7Krbfeypo1a2hqaqK7u5vLLruM7du3V9lMTEywefNmOjo6SKVSXHnllezfv7/KZufOnVx88cUkEgm6u7v5zGc+Qz6ffyu74kpQ/wYGBrjhhhtYtGgR8XicmTNn8olPfIKhoaGqdpRSdT+33377W92dOiaz/84888w67dddd12VTaPuPwju4yuvvOK6f5RS3HHHHSW7Rt2H3/zmN1mxYkUp6dOGDRu47777Sp9P5fMP/Ps31c+/IkH7cKqfg379m+rnnxt/+7d/i1KKT37yk6X3Gu481CcA559/vr7tttv0s88+q7du3aovuugiPXPmTD06Olqyue6663R/f79+4IEH9OOPP67Xr1+vTzvttNLn+XxeL1u2TJ9zzjn6qaee0vfee6/u7OzUt9xyy7HoUhVB/du2bZu+4oor9D333KNffPFF/cADD+gFCxboK6+8sqodQN9222167969pZ90On0sulTFZPbfGWecoT/ykY9UaR8aGip93sj7T+vgPubz+aq+7d27V3/pS1/SqVRKj4yMlNpp1H14zz336J///Of6+eef19u3b9ef+9zndDgc1s8++6zWemqff1r792+qn39FgvbhVD8H/fo31c+/Wh577DE9e/ZsvWLFCn3jjTeW3m+08/CEcFBqOXDggAb0li1btNZaDw4O6nA4rO+4446SzR/+8AcN6IcfflhrrfW9996rDcPQ+/btK9l885vf1M3NzTqTyby1HQigtn9u/PjHP9aRSETncrnSe4C+66673gKFbwy3/p1xxhlVJ1otU2n/aT25fbhq1Sp97bXXVr03Vfah1lq3tbXpf/3Xfz3uzr8ixf65MZXPv0oq+3i8nYNa++/DqXr+jYyM6AULFuj777+/ap814nl4Qizx1FKcWm1vbwfgiSeeIJfLcc4555RsFi9ezMyZM3n44YcBePjhh1m+fDk9PT0lm/PPP5/h4WGee+65t1B9MLX987Jpbm4mFKoux7R582Y6OztZu3Yt3/72tydVEvutxqt/3//+9+ns7GTZsmXccsstjI+Plz6bSvsPgvfhE088wdatW/nwhz9c91mj70PLsrj99tsZGxtjw4YNx935V9s/N6by+QfefTxezsGgfTiVz7/Nmzdz8cUXV51v0Jj3wSlZLPCNYNs2n/zkJzn99NNZtmwZAPv27SMSidDa2lpl29PTw759+0o2lTul+Hnxs0bBrX+1HDp0iL/+67/mox/9aNX7f/VXf8XZZ59NIpHgl7/8JR//+McZHR3lE5/4xFshfVJ49e+qq65i1qxZTJ8+nWeeeYa/+Iu/YPv27fzkJz8Bps7+g8ntw29961ssWbKE0047rer9Rt6H27ZtY8OGDUxMTJBKpbjrrrs46aST2Lp163Fx/nn1r5apfP759fF4OAcnuw+n4vkHcPvtt/Pkk0/yu9/9ru6zRrwPnnAOyubNm3n22Wf5zW9+c6ylvCkE9W94eJiLL76Yk046iS9+8YtVn/2X//JfSn+ffPLJjI2N8fd///cNc3KBd/8qL/bLly9n2rRpbNq0iZdeeol58+a91TLfEEH7MJ1O84Mf/KBqfxVp5H24aNEitm7dytDQEHfeeSfXXHMNW7ZsOdayjhpe/au8wU3188+vj8fDOTiZfThVz79du3Zx4403cv/99xOLxY61nElxQi3xXH/99fzsZz/jV7/6FX19faX3e3t7yWazDA4OVtnv37+f3t7ekk1tNHPxddHmWOPVvyIjIyNccMEFNDU1cddddxEOh33bW7duHbt37yaTybxZkl8XQf2rZN26dQC8+OKLwNTYfzC5Pt55552Mj4/zwQ9+MLC9RtqHkUiE+fPnc+qpp3LrrbeycuVKvvKVrxw3559X/4pM9fMPgvtYyVQ8ByfTv6l6/j3xxBMcOHCAU045hVAoRCgUYsuWLXz1q18lFArR09PTcOfhCeGgaK25/vrrueuuu3jwwQeZM2dO1eennnoq4XCYBx54oPTe9u3b2blzZ2n9ccOGDWzbto0DBw6UbO6//36am5tdpwDfSoL6B843t/POO49IJMI999wzKQ9669attLW1HfOCWJPpXy1bt24FYNq0aUBj7z94fX381re+xaWXXkpXV1dgu42yD92wbZtMJjPlzz8viv2DqX3++VHZx1qm2jnohlv/pur5t2nTJrZt28bWrVtLP6tXr+b9739/6e+GOw+PethtA/Kxj31Mt7S06Iceeqjq8a/x8fGSzXXXXadnzpypH3zwQf3444/rDRs26A0bNpQ+Lz5edd555+mtW7fqX/ziF7qrq6shHpEL6t/Q0JBet26dXr58uX7xxRerbPL5vNbaecTuX/7lX/S2bdv0Cy+8oL/xjW/oRCKhP//5zx/Lrmmtg/v34osv6r/6q7/Sjz/+uN6xY4e+++679dy5c/XGjRtLbTTy/tN6cseo1lq/8MILWiml77vvvro2Gnkf3nzzzXrLli16x44d+plnntE333yzVkrpX/7yl1rrqX3+ae3fv6l+/hXx6+PxcA4GHaNaT93zz4vaJ68a7Tw8IRwUwPXntttuK9mk02n98Y9/XLe1telEIqEvv/xyvXfv3qp2XnnlFX3hhRfqeDyuOzs79ac//emqxwSPFUH9+9WvfuVps2PHDq211vfdd59etWqVTqVSOplM6pUrV+p/+qd/0pZlHbuOFQjq386dO/XGjRt1e3u7jkajev78+fozn/lMVQ4GrRt3/2k9uWNUa61vueUW3d/f77pfGnkfXnvttXrWrFk6Eonorq4uvWnTpqoL/1Q+/7T2799UP/+K+PXxeDgHg45Rrafu+edFrYPSaOeh0rrBnoESBEEQBOGE54SIQREEQRAEYWohDoogCIIgCA2HOCiCIAiCIDQc4qAIgiAIgtBwiIMiCIIgCELDIQ6KIAiCIAgNhzgogiAIgiA0HOKgCIIgCILQcIiDIgiCIAhCwyEOiiAIgiAIDYc4KIIgCIIgNBzioAiCIAiC0HD8/68LbRGJzGxgAAAAAElFTkSuQmCC", - "text/plain": [ - "

" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "plt.scatter(t, p, c=betas)" @@ -154,7 +109,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "a0a29755", "metadata": {}, "outputs": [ @@ -162,17 +117,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "0.3388819694519043\n", - "0.42250776290893555\n", - "0.49509143829345703\n", - "0.5394766330718994\n", - "0.5379073619842529\n", - "0.5779635906219482\n", - "0.6288595199584961\n", - "0.6581037044525146\n", - "0.6781682968139648\n", - "CPU times: user 4.9 s, sys: 5.1 ms, total: 4.9 s\n", - "Wall time: 4.9 s\n" + "CPU times: user 5.5 s, sys: 1.07 s, total: 6.57 s\n", + "Wall time: 5.45 s\n" ] }, { @@ -188,7 +134,7 @@ ], "source": [ "%%time\n", - "from yaeos import NRTL, MHV, PengRobinson76, yaeos_c\n", + "from yaeos import NRTL, MHV, PengRobinson76, yaeos_c, QMR\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", @@ -205,8 +151,11 @@ "\n", "ge_model = NRTL(a, b, c)\n", "mixrule = MHV(ge_model, q=-0.53)\n", - "model = PengRobinson76(tc, pc, w, mixrule)\n", "\n", + "null_mixing = QMR(np.zeros((nc,nc)), np.zeros((nc,nc)))\n", + "\n", + "model_stock = PengRobinson76(tc, pc, w, null_mixing)\n", + "model_mhv = PengRobinson76(tc, pc, w, mixrule)\n", "\n", "colors = [\"red\", \"green\", \"blue\", \"orange\", \"black\"]\n", "ts = np.linspace(50+273, 200+273, 9)\n", @@ -221,16 +170,245 @@ " \n", " for x1 in xs:\n", " x = [x1, 1-x1]\n", - " sat = model.saturation_pressure(x, T, \"bubble\")\n", + " sat = model_mhv.saturation_pressure(x, T, \"bubble\")\n", " p, y = sat[\"P\"], sat[\"y\"]\n", " ps.append(p)\n", " ys.append(y[0])\n", "\n", - " print(time.time() - st)\n", - "\n", " plt.plot(xs, ps, color=colors[i])\n", " plt.plot(ys, ps, color=colors[i])" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "97239bb8", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(2, 1)" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model_mhv.id, model_stock.id" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "185d975e", + "metadata": {}, + "outputs": [], + "source": [ + "xs = np.linspace(0.001, 0.999, 100)\n", + "ys_mhv = []\n", + "ps_mhv = []\n", + "ys_pr = []\n", + "ps_pr = []\n", + "\n", + "\n", + "T = 600\n", + "for x1 in xs:\n", + " x = [x1, 1-x1]\n", + " sat_mhv = model_mhv.saturation_pressure(x, T, \"bubble\")\n", + " p, y = sat_mhv[\"P\"], sat_mhv[\"y\"]\n", + " ps_mhv.append(p)\n", + " ys_mhv.append(y[0])\n", + " \n", + " sat_pr = model_stock.saturation_pressure(x, T, \"bubble\")\n", + " p, y = sat_pr[\"P\"], sat_pr[\"y\"]\n", + " ps_pr.append(p)\n", + " ys_pr.append(y[0])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a9d0176c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(xs, ps_mhv, color=\"red\")\n", + "plt.plot(ys_mhv, ps_mhv, color=\"red\")\n", + "\n", + "plt.plot(xs, ps_pr, color=\"black\")\n", + "plt.plot(ys_pr, ps_pr, color=\"black\")" + ] + }, + { + "cell_type": "markdown", + "id": "9ba9be74", + "metadata": {}, + "source": [ + "# Phase envelope tracing" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bac65808", + "metadata": {}, + "outputs": [], + "source": [ + "import yaeos\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "21c0ea1a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 1\n", + " 200.00000000000000 0.0000000000000000 \n", + " 3.4532662131729399 \n" + ] + }, + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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s8ZYuXKl0adPH+Pmm2/21Y/Upr6tvaqrq41f/vKXxqpVq4z8/Hzj888/N4YNG2b06dPHsNlsnnt0pvYyDMP46U9/asTExBjLli0zDh8+7HnV1dV5rvmu38WGhgZj0KBBxsSJE42NGzcaixYtMhITE43Zs2f74kdqU9/VXnl5ecYf/vAHY926dUZ+fr7x/vvvGz179jTGjh3ruUdnai/DMIwHH3zQWL58uZGfn29s3rzZePDBBw2TyWR89tlnhmHo/XU639Zmgfwe84vwceONNxqpqamGxWIxunbtatx4441GXl6e5/zx48eNn/3sZ0aXLl2M8PBw47rrrjMOHz7sw4rb3xdffGEAzV7Tp083DMM93fahhx4ykpOTDavValx++eXGrl27vO5x9OhR4+abbzYiIyON6Oho44477jCqq6t98NO0vW9rr7q6OmPixIlGYmKiERISYnTv3t246667vKaiGUbnai/DME7bXoDx8ssve645m9/F/fv3G1OmTDHCwsKMhIQE4xe/+IXhcDja+adpe9/VXgUFBcbYsWONuLg4w2q1Gr179zYeeOABo7Ky0us+naW9DMMwfvzjHxvdu3c3LBaLkZiYaFx++eWe4GEYen+dzre1WSC/x0yGYRjt95xFREREOju/HPMhIiIiHZfCh4iIiLQrhQ8RERFpVwofIiIi0q4UPkRERKRdKXyIiIhIu1L4EBERkXal8CEiIiLtSuFDRERE2pXCh4iIiLQrhQ8RERFpVwofIiIi0q7+P8GffTFjxdiZAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Number of components, for easier definition\n", + "nc = 2\n", + "\n", + "# kij and lij matrices\n", + "k12 = 0.1\n", + "lij = kij = np.zeros((nc,nc))\n", + "kij[0,1] = kij[1,0] = k12\n", + "\n", + "mixrule = yaeos.QMR(kij, lij)\n", + "\n", + "# Critical constants\n", + "Tc = [320, 375]\n", + "Pc = [30, 45]\n", + "w = [0.0123, 0.045]\n", + "\n", + "model = yaeos.PengRobinson76(Tc, Pc, w, mixrule)\n", + "\n", + "z = [0.3, 0.7]\n", + "\n", + "T, P = yaeos.yaeos_c.pt2_phase_envelope(model.id, z, kind=\"bubble\", t0=200.)\n", + "\n", + "plt.plot(T, P)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "aa12d21e", + "metadata": {}, + "outputs": [ + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mThe Kernel crashed while executing code in the current cell or a previous cell. \n", + "\u001b[1;31mPlease review the code in the cell(s) to identify a possible cause of the failure. \n", + "\u001b[1;31mClick here for more info. \n", + "\u001b[1;31mView Jupyter log for further details." + ] + } + ], + "source": [ + "\n", + "z = [0.7, 0.3]\n", + "\n", + "T, P = yaeos.yaeos_c.pt2_phase_envelope(model.id, z, kind=\"dew\", p0=1)\n", + "plt.plot(T, P)\n", + "\n", + "T, P = yaeos.yaeos_c.pt2_phase_envelope(model.id, z, kind=\"dew\", p0=5)\n", + "plt.plot(T, P)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "05e249d2", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c9031f69", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/python/setup.py b/python/setup.py index 23aae2e10..5ba579777 100644 --- a/python/setup.py +++ b/python/setup.py @@ -51,7 +51,7 @@ def pre_build(): f"-I{INCL_DIR}", "-c", "yaeos/fortran_wrap/yaeos_c.f90", - "-lyaeos", + "-lyaeos", "-llapack", "--backend", "meson", ] diff --git a/python/yaeos/fortran_wrap/yaeos_c.f90 b/python/yaeos/fortran_wrap/yaeos_c.f90 index 9e88f719e..8e1a64157 100644 --- a/python/yaeos/fortran_wrap/yaeos_c.f90 +++ b/python/yaeos/fortran_wrap/yaeos_c.f90 @@ -22,19 +22,20 @@ module yaeos_c public :: srk, pr76, pr78 ! Mixing rules public :: set_mhv, set_qmr - + ! __del__ public :: make_available_ar_models_list public :: make_available_ge_models_list ! GeMoels public :: nrtl public :: ln_gamma - + ! Thermoprops public :: fug_vt ! Phase equilibria public :: flash public :: saturation_pressure + public :: pt2_phase_envelope type :: ArModelContainer !! Container type for ArModels @@ -68,7 +69,7 @@ subroutine nrtl(a, b, c, id) integer(c_int), intent(out) :: id ge_model = fNRTL(a, b, c) call extend_ge_models_list(id) - end subroutine + end subroutine nrtl subroutine extend_ge_models_list(id) !! Find the first available model container and allocate the model @@ -101,7 +102,7 @@ subroutine ln_gamma(id, n, T, lngamma) real(c_double), intent(in) :: T real(c_double), intent(out) :: lngamma(size(n)) call ge_models(id)%model%ln_activity_coefficient(n, T, lngamma) - end subroutine + end subroutine ln_gamma ! ============================================================================= ! Ar Models @@ -155,7 +156,7 @@ subroutine set_mhv(ar_id, ge_id, q) call move_alloc(ar_model, ar_models(ar_id)%model) end subroutine set_mhv - + subroutine set_qmr(ar_id, kij, lij) use yaeos, only: QMR, CubicEoS integer(c_int), intent(in) :: ar_id @@ -187,7 +188,7 @@ subroutine pr76(tc, pc, w, id) ar_model = PengRobinson76(tc, pc, w) call extend_ar_models_list(id) end subroutine pr76 - + subroutine pr78(tc, pc, w, id) use yaeos, only: PengRobinson78 real(c_double), intent(in) :: tc(:), pc(:), w(:) @@ -245,7 +246,7 @@ subroutine equilibria_state_to_arrays(eq_state, x, y, P, T, Vx, Vy, beta) Vx = eq_state%Vx Vy = eq_state%Vy beta = eq_state%beta - end subroutine + end subroutine equilibria_state_to_arrays subroutine flash(id, z, T, P, x, y, k0, Pout, Tout, Vx, Vy, beta) use yaeos, only: EquilibriaState, fflash => flash @@ -261,7 +262,7 @@ subroutine flash(id, z, T, P, x, y, k0, Pout, Tout, Vx, Vy, beta) real(c_double), intent(out) :: Vx real(c_double), intent(out) :: Vy real(c_double), intent(out) :: beta - + type(EquilibriaState) :: result integer :: iters @@ -278,7 +279,7 @@ subroutine flash(id, z, T, P, x, y, k0, Pout, Tout, Vx, Vy, beta) end if call equilibria_state_to_arrays(result, x, y, Pout, Tout, Vx, Vy, beta) - end subroutine + end subroutine flash subroutine saturation_pressure(id, z, T, kind, P, x, y, Vx, Vy, beta) use yaeos, only: EquilibriaState, fsaturation_pressure => saturation_pressure @@ -293,10 +294,68 @@ subroutine saturation_pressure(id, z, T, kind, P, x, y, Vx, Vy, beta) real(c_double), intent(out) :: Vx, Vy, beta real(c_double) :: aux - + type(EquilibriaState) :: sat sat = fsaturation_pressure(ar_models(id)%model, z, T, kind) call equilibria_state_to_arrays(sat, x, y, P, aux, Vx, Vy, beta) - end subroutine + end subroutine saturation_pressure + + subroutine pt2_phase_envelope(id, z, kind, Ts, Ps, T0, P0) + use yaeos, only: & + saturation_pressure, saturation_temperature, pt_envelope_2ph, & + EquilibriaState, PTEnvel2 + integer(c_int), intent(in) :: id + real(c_double), intent(in) :: z(:) + character(len=15), intent(in) :: kind + real(c_double), intent(out) :: Ts(1000) + real(c_double), intent(out) :: Ps(1000) + real(c_double), optional, intent(in) :: T0, P0 + + real(8) :: makenan + type(EquilibriaState) :: sat + type(PTEnvel2) :: env + + integer :: i, neval=0 + + real(c_double) :: T, P + + + makenan=0 + + neval = neval + 1 + print *, neval + + + Ts = makenan/makenan + Ps = makenan/makenan + + if (present(T0)) then + T = T0 + else + T = 150 + end if + + if (present(P0)) then + P = P0 + else + P = 1 + end if + + print *, T, P + select case(kind) + case("bubble") + sat = saturation_pressure(ar_models(id)%model, z, T=T, kind=kind) + case("dew") + sat = saturation_temperature(ar_models(id)%model, z, P=P, kind=kind) + case("liquid-liquid") + sat = saturation_temperature(ar_models(id)%model, z, P=P, kind=kind) + end select + + + env = pt_envelope_2ph(ar_models(id)%model, z, sat) + i = size(env%points) + Ts(:i) = env%points%T + Ps(:i) = env%points%P + end subroutine pt2_phase_envelope end module yaeos_c From c5912f081ea7cb55b0890941ad1547a2bea0cc86 Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Sun, 14 Jul 2024 14:08:41 -0300 Subject: [PATCH 110/167] tapenade: added interfaces so now it is possible to disable implicit interfaces in fpm.toml --- example/extra/taperobinson.f90 | 7 +-- fpm.toml | 2 +- .../autodiff_api/tapenade/interfaces.f90 | 59 +++++++++---------- src/models/excess_gibbs/nrtl.f90 | 9 +-- tools/tapenade_diff/ge_models/template.f90 | 1 + tools/tapenade_diff/template.f90 | 1 + 6 files changed, 36 insertions(+), 43 deletions(-) diff --git a/example/extra/taperobinson.f90 b/example/extra/taperobinson.f90 index ed417849c..72dba51ad 100644 --- a/example/extra/taperobinson.f90 +++ b/example/extra/taperobinson.f90 @@ -16,6 +16,7 @@ MODULE TAPENADE_PR USE YAEOS__CONSTANTS, ONLY : pr, r USE YAEOS__TAPENADE_AR_API, ONLY : armodeltapenade + use yaeos__tapenade_interfaces IMPLICIT NONE type, extends(ArModelTapenade) :: TPR76 REAL(pr), ALLOCATABLE :: kij(:, :), lij(:, :) @@ -794,12 +795,6 @@ SUBROUTINE AR_D_B(model, n, nb, nd, ndb, v, vb, vd, vdb, t, tb, td, & INTEGER :: ad_from INTEGER :: ad_to INTEGER :: ad_to0 - EXTERNAL PUSHREAL8ARRAY - EXTERNAL PUSHINTEGER4 - EXTERNAL PUSHREAL8 - EXTERNAL POPREAL8 - EXTERNAL POPINTEGER4 - EXTERNAL POPREAL8ARRAY INTEGER :: arg12 LOGICAL, DIMENSION(SIZE(n)) :: mask1 LOGICAL, DIMENSION(SIZE(n)) :: mask2 diff --git a/fpm.toml b/fpm.toml index 5467979cb..136990201 100644 --- a/fpm.toml +++ b/fpm.toml @@ -17,7 +17,7 @@ library = true [fortran] implicit-typing = false -implicit-external = true +implicit-external = false source-form = "free" [dependencies] diff --git a/src/adiff/autodiff_api/tapenade/interfaces.f90 b/src/adiff/autodiff_api/tapenade/interfaces.f90 index 57dbb1fc9..576911992 100644 --- a/src/adiff/autodiff_api/tapenade/interfaces.f90 +++ b/src/adiff/autodiff_api/tapenade/interfaces.f90 @@ -1,37 +1,36 @@ -module tapenade_interfaces +module yaeos__tapenade_interfaces + use yaeos__constants, only: pr implicit none - interface pushreal8 - subroutine pushreal8(realnum) - real(8) :: realnum - end subroutine - - subroutine pushreal8array(realnum) - real(8) :: realnum(:) - end subroutine - end interface + interface + subroutine pushinteger4(i) + integer :: i + end subroutine + + subroutine popinteger4(i) + integer :: i + end subroutine - interface popreal8 - subroutine popreal8(realnum) - real(8) :: realnum - end subroutine - end interface + subroutine pushreal8array(a, n) + import pr + real(pr), dimension(n) :: a + integer :: n + end subroutine - interface pushinteger4 - subroutine pushinteger4(intnum) - integer :: intnum - end subroutine - end interface + subroutine pushreal8(a) + import pr + real(pr) :: a + end subroutine - interface popinteger4 - subroutine popinteger4(intnum) - integer :: intnum - end subroutine - end interface + subroutine POPREAL8(a) + import pr + real(pr) :: a + end subroutine - interface pushcontrol1b - subroutine pushcontrol1b(intnum) - integer :: intnum - end subroutine - end interface + subroutine POPREAL8ARRAY(a, n) + import pr + real(pr), dimension(n) :: a + integer :: n + end subroutine + end interface end module \ No newline at end of file diff --git a/src/models/excess_gibbs/nrtl.f90 b/src/models/excess_gibbs/nrtl.f90 index c55fcf297..7d6224854 100644 --- a/src/models/excess_gibbs/nrtl.f90 +++ b/src/models/excess_gibbs/nrtl.f90 @@ -1,5 +1,6 @@ module yaeos__models_ge_NRTL use yaeos__tapenade_ge_api, only: gemodeltapenade + use yaeos__tapenade_interfaces use yaeos__constants, only: pr, R implicit none @@ -29,6 +30,8 @@ module yaeos__models_ge_NRTL interface NRTL module procedure :: init end interface + + contains type(NRTL) function init(a, b, c) @@ -376,12 +379,6 @@ subroutine EXCESS_GIBBS_D_B(model, n, nb, nd, ndb, t, tb, td, tdb, ge& real(pr) :: tempb4 real(pr) :: tempb5 integer :: ad_to - external PUSHREAL8ARRAY - external PUSHREAL8 - external PUSHINTEGER4 - external POPINTEGER4 - external POPREAL8 - external POPREAL8ARRAY integer :: arg10 real(pr) :: result1 temp = sum(n) diff --git a/tools/tapenade_diff/ge_models/template.f90 b/tools/tapenade_diff/ge_models/template.f90 index 12e7a552c..bca93d67c 100644 --- a/tools/tapenade_diff/ge_models/template.f90 +++ b/tools/tapenade_diff/ge_models/template.f90 @@ -1,6 +1,7 @@ module tapenade_ge_model_template use yaeos__constants, only: pr, R use yaeos__tapenade_ge_api, only: GeModelTapenade + use yaeos__tapenade_interfaces implicit none diff --git a/tools/tapenade_diff/template.f90 b/tools/tapenade_diff/template.f90 index 780760b94..f93f5b5d3 100644 --- a/tools/tapenade_diff/template.f90 +++ b/tools/tapenade_diff/template.f90 @@ -1,5 +1,6 @@ module tapenade_model_template use yaeos__tapenade_ar_api, only: ArModelTapenade + use yaeos__tapenade_interfaces use yaeos, only: R !! Ideal gas constants used on yaeos implicit none From a774b2af482888ae417afbd366114c94dbe7d93f Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Sun, 14 Jul 2024 14:24:57 -0300 Subject: [PATCH 111/167] test nrtlmhv fit --- test/test_fitting/test_fitting.f90 | 48 ++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/test/test_fitting/test_fitting.f90 b/test/test_fitting/test_fitting.f90 index 7eb9f4e93..da384d8bb 100644 --- a/test/test_fitting/test_fitting.f90 +++ b/test/test_fitting/test_fitting.f90 @@ -54,4 +54,52 @@ subroutine test_fit_kij_lij(error) call check(error, err_kij_lij < err_kij) end subroutine + + subroutine test_fit_nrtl_hv(error) + use yaeos__fitting, only: optimize, error_function + use yaeos__fitting_fit_nrtl_mhv, only: FitMHVNRTL + use yaeos__models, only: CubicEoS, GeModel, NRTL, SoaveRedlichKwong, MHV + use yaeos__equilibria, only: EquilibriaState + type(error_type), allocatable, intent(out) :: error + type(CubicEoS) :: model + type(NRTL) :: ge_model + type(MHV) :: mixrule + type(EquilibriaState) :: exp_point + + real(pr) :: Tc(2) = [126.2, 568.7] + real(pr) :: pc(2) = [33.98, 24.90] + real(pr) :: w(2) = [3.7e-2_pr, 0.397_pr] + real(pr) :: X(2) = [0, 0] + real(pr) :: err0, err_kij, err_kij_lij + + type(FitMHVNRTL) :: fitting_problem + + exp_point = EquilibriaState( & + kind="bubble", T=344.5_pr, P=23.9_pr, & + x=[0.0309_pr, 1 - 0.0309_pr], y=[0.9883_pr, 1 - 0.9883_pr], & + Vx=0._pr, Vy=0._pr, beta=0.0_pr & + ) + + + ! Provide initials for the NRTL model + allocate(ge_model%a(2,2), ge_model%b(2,2), ge_model%c(2,2)) + ge_model%a = reshape([0.0_pr, 0.1_pr, 0.0_pr, 0.1_pr], [2, 2]) + ge_model%b = 0 + ge_model%c = 0 + + model = SoaveRedlichKwong(tc, pc, w) + mixrule = MHV(ge=ge_model, q=-0.593_pr, b=model%b) + deallocate(model%mixrule) + model%mixrule = mixrule + + fitting_problem%model = model + fitting_problem%experimental_points = [exp_point] + + + err0 = error_function(x, func_data=fitting_problem) + err_kij = optimize(X, fitting_problem) + + call check(error, err_kij < err0) + + end subroutine end module test_fitting From e84895bd6fc891f3aa4c31a43672da9703c25277 Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Sun, 14 Jul 2024 14:49:01 -0300 Subject: [PATCH 112/167] added conditionals --- src/fitting/fit_nrtl_mhv.f90 | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/fitting/fit_nrtl_mhv.f90 b/src/fitting/fit_nrtl_mhv.f90 index f569fe736..276496500 100644 --- a/src/fitting/fit_nrtl_mhv.f90 +++ b/src/fitting/fit_nrtl_mhv.f90 @@ -8,6 +8,8 @@ module yaeos__fitting_fit_nrtl_mhv integer, parameter :: nc = 2 type, extends(FittingProblem) :: FitMHVNRTL + logical :: fit_nrtl = .false. + logical :: fit_lij = .false. contains procedure :: get_model_from_X => model_from_X end type FitMHVNRTL @@ -75,11 +77,11 @@ subroutine model_from_X(problem, X) associate(mr => model%mixrule) select type (mr) class is (MHV) - mr%l(1, 2) = x(7) - mr%l(2, 1) = x(7) - mr%ge = ge - model%del1 = x(8:) - model%del2 = (1._pr - model%del1)/(1._pr + model%del1) + if (problem%fit_lij) mr%l(1, 2) = x(7) + if (problem%fit_lij) mr%l(2, 1) = x(7) + if (problem%fit_nrtl) mr%ge = ge + ! model%del1 = x(8:) + ! model%del2 = (1._pr - model%del1)/(1._pr + model%del1) end select end associate end select From 9dd6b34f733195749e037dd6e4de58d347bb9ca4 Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Sun, 14 Jul 2024 14:49:16 -0300 Subject: [PATCH 113/167] possiblity to not initialize step --- src/fitting/fitting.f90 | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/fitting/fitting.f90 b/src/fitting/fitting.f90 index 65cc55e6b..761081e97 100644 --- a/src/fitting/fitting.f90 +++ b/src/fitting/fitting.f90 @@ -51,6 +51,7 @@ real(pr) function optimize(X, func_data) result(y) type(nlopt_opt) :: opt !! Optimizer type(nlopt_func) :: f !! Function to optimize integer :: stat + integer :: i count = 0 call bar%initialize(& @@ -67,7 +68,12 @@ real(pr) function optimize(X, func_data) result(y) f = create_nlopt_func(fobj, f_data=func_data) - dx = func_data%parameter_step + if (.not. allocated(func_data%parameter_step)) then + dx = [(0.05_pr, i=1, size(X))] + else + dx = func_data%parameter_step + end if + call opt%set_ftol_rel(func_data%solver_tolerance) call opt%set_initial_step(dx) From 846e854cca48376e5df94ef4bd1ec51da8a6e063 Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Sun, 14 Jul 2024 14:49:25 -0300 Subject: [PATCH 114/167] test --- test/test_fitting/test_fitting.f90 | 43 +++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 12 deletions(-) diff --git a/test/test_fitting/test_fitting.f90 b/test/test_fitting/test_fitting.f90 index da384d8bb..4e1da3d86 100644 --- a/test/test_fitting/test_fitting.f90 +++ b/test/test_fitting/test_fitting.f90 @@ -9,7 +9,9 @@ subroutine collect_suite(testsuite) !> Collection of tests type(unittest_type), allocatable, intent(out) :: testsuite(:) - testsuite = [new_unittest("FitKijLij", test_fit_kij_lij) & + testsuite = [& + new_unittest("FitKijLij", test_fit_kij_lij), & + new_unittest("FitMHVNRTL", test_fit_MHV_NRTL) & ] end subroutine collect_suite @@ -55,7 +57,7 @@ subroutine test_fit_kij_lij(error) call check(error, err_kij_lij < err_kij) end subroutine - subroutine test_fit_nrtl_hv(error) + subroutine test_fit_mhv_nrtl(error) use yaeos__fitting, only: optimize, error_function use yaeos__fitting_fit_nrtl_mhv, only: FitMHVNRTL use yaeos__models, only: CubicEoS, GeModel, NRTL, SoaveRedlichKwong, MHV @@ -69,8 +71,8 @@ subroutine test_fit_nrtl_hv(error) real(pr) :: Tc(2) = [126.2, 568.7] real(pr) :: pc(2) = [33.98, 24.90] real(pr) :: w(2) = [3.7e-2_pr, 0.397_pr] - real(pr) :: X(2) = [0, 0] - real(pr) :: err0, err_kij, err_kij_lij + real(pr) :: X(7) + real(pr) :: err0, err_lij, err_ge, err_ge_lij type(FitMHVNRTL) :: fitting_problem @@ -82,24 +84,41 @@ subroutine test_fit_nrtl_hv(error) ! Provide initials for the NRTL model - allocate(ge_model%a(2,2), ge_model%b(2,2), ge_model%c(2,2)) - ge_model%a = reshape([0.0_pr, 0.1_pr, 0.0_pr, 0.1_pr], [2, 2]) - ge_model%b = 0 - ge_model%c = 0 + ! reshape (a11 a12 a21 a22) + ge_model%a=reshape([0.0, 3.1, 0.1, 0.0], [2, 2]) + ge_model%b=reshape([0.0, 503.1, 200.1, 0.0], [2, 2]) + ge_model%c=reshape([0.0, 0.1, 0.1, 0.0], [2, 2]) + model = SoaveRedlichKwong(tc, pc, w) mixrule = MHV(ge=ge_model, q=-0.593_pr, b=model%b) deallocate(model%mixrule) model%mixrule = mixrule - fitting_problem%model = model fitting_problem%experimental_points = [exp_point] - + X = [3.1, 0.1, -500.00, 200.00, 0.1, 0.1, 0.0] + fitting_problem%model = model + fitting_problem%fit_lij = .true. err0 = error_function(x, func_data=fitting_problem) - err_kij = optimize(X, fitting_problem) + err_lij = optimize(X, fitting_problem) - call check(error, err_kij < err0) + X = [3.1, 0.1, -500.00, 200.00, 0.1, 0.1, 0.0] + fitting_problem%model = model + fitting_problem%fit_lij = .false. + fitting_problem%fit_nrtl = .true. + err_ge = optimize(X, fitting_problem) + + X = [3.1, 0.1, -500.00, 200.00, 0.1, 0.1, 0.0] + fitting_problem%model = model + fitting_problem%fit_lij = .true. + fitting_problem%fit_nrtl = .true. + err_ge_lij = optimize(X, fitting_problem) + + + call check(error, err_lij < err0) + call check(error, err_ge < err_lij) + call check(error, err_ge_lij < err_lij) end subroutine end module test_fitting From b31ae168f7b7da31dff294a052dd13166694ee8a Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Sun, 14 Jul 2024 14:50:36 -0300 Subject: [PATCH 115/167] scripts --- .../ge_models/gen_ge_tapemodel.sh | 60 +------------------ tools/tapenade_diff/gen_tapemodel.sh | 3 + 2 files changed, 6 insertions(+), 57 deletions(-) diff --git a/tools/tapenade_diff/ge_models/gen_ge_tapemodel.sh b/tools/tapenade_diff/ge_models/gen_ge_tapemodel.sh index 150e54985..bf9885832 100644 --- a/tools/tapenade_diff/ge_models/gen_ge_tapemodel.sh +++ b/tools/tapenade_diff/ge_models/gen_ge_tapemodel.sh @@ -60,63 +60,9 @@ mv tapeout/${name}_d_d_d_b_b.f90 tapeout/${name}_diff.f90 sed -i "s/$modflag//g" tapeout/${name}_diff.f90 sed -i "s/TYPE(UNKNOWNTYPE).*//g" tapeout/${name}_diff.f90 sed -i "s/TYPE(NRTL) :: model/CLASS(NRTL) :: model/" tapeout/${name}_diff.f90 + # sed -i "s/model%\(.*\) \(=\) \(.*\)/model%\1 => \3/g" tapeout/${name}_diff.f90 sed -i 's/REAL\*8/REAL(pr)/' tapeout/${name}_diff.f90 -# cp tapeout/${name}_diff.f90 ../example/taperobinson.f90 -# findent < tapeout/${name}_diff.f90 > tapeout/${name}_diff.f90 - -# lfortran fmt -i tapeout/${infile}_diff.f90 -# ============================================================================= - - -# Tapenade 3.16 (develop) - 13 Sep 2023 12:36 - Java 17.0.9 Linux -# @@ TAPENADE_HOME=/home/ruther/downs/tapenade_3.16/bin/.. -# Builds a differentiated program. -# Usage: tapenade [options]* filenames -# options: -# -head, -root set the differentiation root procedure(s) -# See FAQ for refined invocation syntax, e.g. -# independent and dependent arguments, multiple heads... -# -tangent, -d differentiate in forward/tangent mode (default) -# -reverse, -b differentiate in reverse/adjoint mode -# -vector, -multi turn on "vector" mode (i.e. multi-directional) -# -specializeactivity Allow for several activity patterns per routine -# -primal, -p turn off differentiation. Show pointer destinations -# -output, -o put all generated code into a single -# -splitoutputfiles split generated code, one file per top unit -# -outputdirectory, -O put all generated files in (default: .) -# -I add a new search path for include files -# -tgtvarname set extension for tangent variables (default %d) -# -tgtfuncname set extension for tangent procedures (default %_d) -# -tgtmodulename set extension for tangent modules and types (default %_diff) -# -adjvarname set extension for adjoint variables (default %b) -# -adjfuncname set extension for adjoint procedures (default %_b) -# -adjmodulename set extension for adjoint modules and types (default %_diff) -# -modulename set extension for tangent&adjoint modules and types (default %_diff) -# -inputlanguage language of input files (fortran, fortran90, -# fortran95, or C) -# -outputlanguage language of output files (fortran, fortran90, -# fortran95, or C) -# -ext incorporate external library description -# -nolib don't load standard libraries descriptions -# -i count bytes for an integer (default -i4) -# -r count bytes for a real (default -r4) -# -dr count bytes for a double real (default -dr8) -# -p count bytes for a pointer (default -p8) -# -fixinterface don't use activity to filter user-given (in)dependent vars -# -noinclude inline include files -# -debugTGT insert instructions for debugging tangent mode -# -debugADJ insert instructions for debugging adjoint mode -# -tracelevel set the level of detail of trace milestones -# -msglevel set the level of detail of error messages -# -msginfile insert error messages in output files -# -dump write a dump -# -html display results in a web browser -# -nooptim turn off optimization (in {activity, difftypes, -# diffarguments, stripprimalmodules, spareinit, splitdiff, -# mergediff, saveonlyused, tbr, snapshot, diffliveness, -# deadcontrol, recomputeintermediates, -# everyoptim} -# -version display Tapenade version information -# Report bugs to . +# remove all the external definition of functions. we use interfaces now +sed -i '/EXTERNAL.*/d' tapeout/${name}_diff.f90 \ No newline at end of file diff --git a/tools/tapenade_diff/gen_tapemodel.sh b/tools/tapenade_diff/gen_tapemodel.sh index b0c3d44be..a7c5e02cc 100644 --- a/tools/tapenade_diff/gen_tapemodel.sh +++ b/tools/tapenade_diff/gen_tapemodel.sh @@ -76,6 +76,9 @@ sed -i "s/REAL :: r//g" tapeout/${name}_diff.f90 # make the types into classes for polymorphism sed -i 's/TYPE(\(.*\)),/class(\1),/' tapeout/${name}_diff.f90 +# remove all the external definition of functions. we use interfaces now +sed -i '/EXTERNAL.*/d' tapeout/${name}_diff.f90 + # Options to format document # fprettify -i 3 --case 1 1 1 1 # findent < tapeout/${name}_diff.f90 > tapeout/${name}_diff.f90 From 5cda95f51d516c96d6e62611d5be9bf418c79aec Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Sun, 14 Jul 2024 15:05:18 -0300 Subject: [PATCH 116/167] fit --- app/fit.f90 | 18 ++++++++++++------ src/fitting/fit_nrtl_mhv.f90 | 35 ----------------------------------- 2 files changed, 12 insertions(+), 41 deletions(-) diff --git a/app/fit.f90 b/app/fit.f90 index a3da27853..d12a5309f 100644 --- a/app/fit.f90 +++ b/app/fit.f90 @@ -1,10 +1,11 @@ program main !! Binary system parameter optimization - use yaeos, only: EquilibriaState, pr, ArModel, PengRobinson78, CubicEoS, saturation_pressure + use yaeos, only: EquilibriaState, pr, ArModel, SoaveRedlichKwong, CubicEoS, saturation_pressure + use yaeos, only: MHV use forsus, only: Substance, forsus_dir use yaeos__fitting, only: FittingProblem, fobj, optimize - use yaeos__fitting_fit_nrtl_mhv, only: FitMHVNRTL, init_model - integer, parameter :: nc = 2, np=7 + nc + use yaeos__fitting_fit_nrtl_mhv, only: FitMHVNRTL + integer, parameter :: nc = 2, np=7 integer :: i, infile, iostat type(EquilibriaState), allocatable :: exp_points(:) @@ -44,15 +45,21 @@ program main ! ========================================================================== ! Setup optimization problem and call the optimization function ! -------------------------------------------------------------------------- - call init_model(prob, sus) + model = SoaveRedlichKwong(& + sus%critical%critical_temperature%value, & + sus%critical%critical_pressure%value/1e5, & + sus%critical%acentric_factor%value & + ) + prob%model = model + prob%experimental_points = exp_points X = 0 X(1:2) = [0.1, 0.3] X(5:6) = [0.1, 0.2] - X(8:) = [1, 1] + prob%fit_nrtl = .true. prob%parameter_step = [(0.5_pr, i=1,size(x))] prob%solver_tolerance = 1e-7 prob%verbose = .true. @@ -62,7 +69,6 @@ program main print *, "FO:", error print *, "Xf:", X - if (allocated(model)) deallocate (model) call prob%get_model_from_X(X) model = prob%model diff --git a/src/fitting/fit_nrtl_mhv.f90 b/src/fitting/fit_nrtl_mhv.f90 index 276496500..a3e2ee77e 100644 --- a/src/fitting/fit_nrtl_mhv.f90 +++ b/src/fitting/fit_nrtl_mhv.f90 @@ -16,39 +16,6 @@ module yaeos__fitting_fit_nrtl_mhv contains - subroutine init_model(problem, sus) - use yaeos, only: R, ArModel, CubicEoS, PengRobinson78, RKPR, SoaveRedlichKwong - class(FitMHVNRTL), intent(in out) :: problem - type(Substance), intent(in) :: sus(2) - type(MHV) :: mixrule - type(NRTL) :: ge - real(pr) :: tc(nc), pc(nc), w(nc), vc(nc), zc(nc) - real(pr) :: a(nc, nc), b(nc, nc), c(nc, nc), bi(nc) - - a=0; b=0; c=0 - - tc = sus%critical%critical_temperature%value - pc = sus%critical%critical_pressure%value/1e5 - w = sus%critical%acentric_factor%value - vc = sus%critical%critical_volume%value - zc = pc*vc/(R*tc) - - ge = NRTL(a, b, c) - - allocate(CubicEoS :: problem%model) - problem%model = SoaveRedlichKwong(tc, pc, w) - - associate(m => problem%model) - select type(m) - type is (CubicEoS) - bi = m%b - mixrule = MHV(ge=ge, q=-0.593_pr, b=bi) - deallocate(m%mixrule) - m%mixrule = mixrule - end select - end associate - end subroutine init_model - subroutine model_from_X(problem, X) use yaeos, only: R, RKPR, PengRobinson78, ArModel, QMR, CubicEoS use yaeos__models_ar_cubic_quadratic_mixing, only: RKPR_D1mix @@ -80,8 +47,6 @@ subroutine model_from_X(problem, X) if (problem%fit_lij) mr%l(1, 2) = x(7) if (problem%fit_lij) mr%l(2, 1) = x(7) if (problem%fit_nrtl) mr%ge = ge - ! model%del1 = x(8:) - ! model%del2 = (1._pr - model%del1)/(1._pr + model%del1) end select end associate end select From 52c5d7610a6eceb6e2b47c2c92e86f4c7d4bff06 Mon Sep 17 00:00:00 2001 From: salvador Date: Sun, 14 Jul 2024 15:20:33 -0300 Subject: [PATCH 117/167] better now? --- python/MANIFEST.in | 1 + python/setup.py | 75 +++++++++++++++----------------------------- python/tox.ini | 35 ++++++++++----------- python/yaeos/core.py | 4 +-- 4 files changed, 45 insertions(+), 70 deletions(-) diff --git a/python/MANIFEST.in b/python/MANIFEST.in index 4edbce398..ac5aca89d 100644 --- a/python/MANIFEST.in +++ b/python/MANIFEST.in @@ -11,6 +11,7 @@ exclude tox.ini exclude requirements-dev.txt exclude _build exclude __pycache__ +exclude compiled_flag recursive-exclude tmp_dir * recursive-exclude dist * diff --git a/python/setup.py b/python/setup.py index 5ba579777..3d8d318b5 100644 --- a/python/setup.py +++ b/python/setup.py @@ -1,12 +1,10 @@ import shutil import subprocess -import sysconfig from pathlib import Path from setuptools import Command, setup from setuptools.command.editable_wheel import editable_wheel -from setuptools.command.install import install -from setuptools.command.sdist import sdist +from setuptools.command.egg_info import egg_info # ============================================================================= @@ -16,6 +14,7 @@ BUILD_DIR = (THIS_DIR.parent / "build" / "python").absolute() LINK_DIR = BUILD_DIR / "lib" INCL_DIR = BUILD_DIR / "include" +COMPILED_FLAG = THIS_DIR / "compiled_flag" FFLAGS = "-g -fPIC -funroll-loops -fstack-arrays -Ofast -frepack-arrays -faggressive-function-elimination -fopenmp" # noqa CFLAGS = "-fPIC" @@ -26,6 +25,12 @@ # ============================================================================= def pre_build(): """Execute fpm and f2py compilations commands.""" + print("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA") + print(THIS_DIR) + print("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA") + + if COMPILED_FLAG.exists(): + return subprocess.check_call( [ @@ -57,6 +62,8 @@ def pre_build(): ] ) + COMPILED_FLAG.touch() + def initial_compiled_clean(): """Erase all compiled files from development directory""" @@ -90,6 +97,10 @@ def final_build_clean(): for so_file in compiled_module_dir.glob("*.so"): so_file.unlink() + # Clean COMPILED_FLAG + if COMPILED_FLAG.exists(): + COMPILED_FLAG.unlink() + def move_compiled_to_editable_loc(): """Move compiled files to 'compiled_module' directory""" @@ -112,6 +123,9 @@ def save_editable_compiled(): if compiled_module_dir.exists(): for so_file in compiled_module_dir.glob("*.so"): + if ((tmp_dir / so_file.name).absolute()).exists(): + ((tmp_dir / so_file.name).absolute()).unlink() + shutil.move( so_file.absolute(), (tmp_dir / so_file.name).absolute() ) @@ -146,7 +160,9 @@ def finalize_options(self): pass def run(self): - if "build" in str(THIS_DIR.absolute()): + dir = str(THIS_DIR.absolute()) + + if ("build" in dir) or ("check-manifest" in dir): # Do not compile, we are building, the compilation has been already # done at this point. ... @@ -154,46 +170,12 @@ def run(self): pre_build() -# ============================================================================= -# - Normal build and installation: -# pip install . -# ============================================================================= -class CustomInstall(install): - def run(self): - initial_compiled_clean() - - self.run_command("build_fortran") - - site_packages_dir = Path(sysconfig.get_path("purelib")) - - for file in THIS_DIR.glob("yaeos_compiled.*"): - target_dir = site_packages_dir / "yaeos" / "compiled_module" - target_dir.mkdir(parents=True, exist_ok=True) - - if (target_dir / file.name).exists(): - (target_dir / file.name).unlink() - - shutil.move(file, target_dir) - - super().run() - - # ============================================================================= # - Building for developers (editable installation) # pip install -e . # ============================================================================= class CustomEditable(editable_wheel): def run(self): - # Clean the saved editable compiled - tmp_dir = THIS_DIR / "tmp_editable" - - if tmp_dir.exists(): - shutil.rmtree(tmp_dir) - - # Clean compiled files and recompile as an editable installation - initial_compiled_clean() - - # Build and move self.run_command("build_fortran") move_compiled_to_editable_loc() save_editable_compiled() @@ -203,20 +185,12 @@ def run(self): # ============================================================================= -# - Python Build for distribution -# pip install build -# python3 -m build +# - Custom egg_info command # ============================================================================= -class CustomBuild(sdist): +class CustomEgg(egg_info): def run(self): - # Clean compiled files and recompile as an editable installation - initial_compiled_clean() - - # Build and move self.run_command("build_fortran") move_compiled_to_editable_loc() - - # Run base sdist run method super().run() @@ -234,6 +208,8 @@ def run(self): save_editable_compiled() +initial_compiled_clean() + setup( name=name, version=version, @@ -255,8 +231,7 @@ def run(self): cmdclass={ "build_fortran": BuildFortran, "editable_wheel": CustomEditable, - "install": CustomInstall, - "sdist": CustomBuild, + "egg_info": CustomEgg }, packages=["yaeos"], package_data={"yaeos": ["compiled_module/*.so"]}, diff --git a/python/tox.ini b/python/tox.ini index 68f75042f..8b00d2e6a 100644 --- a/python/tox.ini +++ b/python/tox.ini @@ -4,7 +4,6 @@ envlist = style, docstyle, check-manifest, - docs, py310, py311, py312, @@ -16,7 +15,7 @@ envlist = # ============================================================================= [gh-actions] python = - 3.10: py310, style, docstyle, check-manifest, coverage, docs + 3.10: py310, style, docstyle, coverage, check-manifest 3.11: py311 3.12: py312 @@ -24,10 +23,9 @@ python = deps = ipdb pytest -skip_install = True -usedevelop = False +skip_install = False +usedevelop = True commands = - pip install . pytest tests/ {posargs} @@ -43,38 +41,39 @@ deps = commands = flake8 tests/ yaeos/ {posargs} + [testenv:docstyle] deps = pydocstyle tomli commands = pydocstyle yaeos --convention=numpy + [testenv:check-manifest] skip_install = True usedevelop = False +allowlist_externals = touch, rm deps = check-manifest -commands = check-manifest --no-build-isolation +commands = + check-manifest -[testenv:docs] -description = "Invoke sphinx-build to build the HTML docs" -whitelist_externals = make -usedevelop = True -skip_install = False -changedir = docs -deps = -r {toxinidir}/docs/requirements.txt -commands = sphinx-build -W -b html -d {envtmpdir}/doctrees source {envtmpdir}/html +; [testenv:docs] +; description = "Invoke sphinx-build to build the HTML docs" +; whitelist_externals = make +; usedevelop = True +; skip_install = False +; changedir = docs +; deps = -r {toxinidir}/docs/requirements.txt +; commands = sphinx-build -W -b html -d {envtmpdir}/doctrees source {envtmpdir}/html [testenv:coverage] -skip_install = True -usedevelop = False deps = {[testenv]deps} # same dependencies of [testenv] coverage pytest-cov commands = - pip install . coverage erase pytest tests/ --cov=yaeos/ --cov-append --cov-report=term-missing - coverage report --fail-under=100 -m + coverage report --fail-under=70 -m diff --git a/python/yaeos/core.py b/python/yaeos/core.py index 26c8c4de7..2e45a6722 100644 --- a/python/yaeos/core.py +++ b/python/yaeos/core.py @@ -70,7 +70,7 @@ def saturation_pressure(self, z, temperature, kind="bubble"): - "dew" - "liquid-liquid" """ - P, x, y, volume_x, volume_y, beta = yaeos_c.saturation_pressure( + p, x, y, volume_x, volume_y, beta = yaeos_c.saturation_pressure( self.id, z, temperature, kind ) @@ -80,7 +80,7 @@ def saturation_pressure(self, z, temperature, kind="bubble"): "Vx": volume_x, "Vy": volume_y, "T": temperature, - "P": P, + "P": p, "beta": beta, } From 850d07a2f6e499267135e12a2b1815ba393df80c Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Sun, 14 Jul 2024 15:48:34 -0300 Subject: [PATCH 118/167] verb --- test/test_fitting/test_fitting.f90 | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/test/test_fitting/test_fitting.f90 b/test/test_fitting/test_fitting.f90 index 4e1da3d86..8fa7dd6dc 100644 --- a/test/test_fitting/test_fitting.f90 +++ b/test/test_fitting/test_fitting.f90 @@ -22,7 +22,7 @@ subroutine test_fit_kij_lij(error) use yaeos__equilibria, only: EquilibriaState type(error_type), allocatable, intent(out) :: error class(ArModel), allocatable :: model - type(EquilibriaState) :: exp_point + type(EquilibriaState) :: exp_points real(pr) :: Tc(2) = [126.2, 568.7] real(pr) :: pc(2) = [33.98, 24.90] @@ -32,14 +32,15 @@ subroutine test_fit_kij_lij(error) type(FitKijLij) :: fitting_problem - exp_point = EquilibriaState( & + exp_points = & + EquilibriaState( & kind="bubble", T=344.5_pr, P=23.9_pr, & x=[0.0309_pr, 1 - 0.0309_pr], y=[0.9883_pr, 1 - 0.9883_pr], & Vx=0._pr, Vy=0._pr, beta=0.0_pr & ) fitting_problem%model = SoaveRedlichKwong(tc, pc, w) - fitting_problem%experimental_points = [exp_point] + fitting_problem%experimental_points = [exp_points] fitting_problem%parameter_step = [0.1, 0.1] fitting_problem%fit_kij = .true. @@ -51,6 +52,7 @@ subroutine test_fit_kij_lij(error) call check(error, err_kij < err0) fitting_problem%fit_lij = .true. + fitting_problem%verbose = .true. X = 0 err_kij_lij = optimize(X, fitting_problem) From 18ed7a0fea6cca27d905102d1b6aa6f6648e0d2f Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Sun, 14 Jul 2024 17:19:17 -0300 Subject: [PATCH 119/167] tapenanade_interface --- test/fixtures/taperobinson.f90 | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/test/fixtures/taperobinson.f90 b/test/fixtures/taperobinson.f90 index b2e4b004f..936b3ec35 100644 --- a/test/fixtures/taperobinson.f90 +++ b/test/fixtures/taperobinson.f90 @@ -16,6 +16,7 @@ MODULE autodiff_tapenade_pr76 USE YAEOS__CONSTANTS, ONLY : pr, r USE YAEOS__TAPENADE_AR_API, ONLY : armodeltapenade + use yaeos__tapenade_interfaces IMPLICIT NONE type, extends(ArModelTapenade) :: TPR76 REAL(pr), ALLOCATABLE :: kij(:, :), lij(:, :) @@ -800,12 +801,6 @@ SUBROUTINE AR_D_B(model, n, nb, nd, ndb, v, vb, vd, vdb, t, tb, td, & INTEGER :: ad_from INTEGER :: ad_to INTEGER :: ad_to0 - EXTERNAL PUSHREAL8ARRAY - EXTERNAL PUSHINTEGER4 - EXTERNAL PUSHREAL8 - EXTERNAL POPREAL8 - EXTERNAL POPINTEGER4 - EXTERNAL POPREAL8ARRAY INTEGER :: arg12 LOGICAL, DIMENSION(SIZE(n)) :: mask1 LOGICAL, DIMENSION(SIZE(n)) :: mask2 From 1302ae143cd6c4a90473fb0ab933d99b4aa9877b Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Sun, 14 Jul 2024 18:54:25 -0300 Subject: [PATCH 120/167] added models --- python/docs/tutorials/tutorial.ipynb | 346 +++++++++++++++----------- python/yaeos/__init__.py | 12 +- python/yaeos/core.py | 55 +++- python/yaeos/fortran_wrap/yaeos_c.f90 | 47 +++- 4 files changed, 296 insertions(+), 164 deletions(-) diff --git a/python/docs/tutorials/tutorial.ipynb b/python/docs/tutorials/tutorial.ipynb index c5b61ce1e..1e63c8450 100644 --- a/python/docs/tutorials/tutorial.ipynb +++ b/python/docs/tutorials/tutorial.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "id": "3a2bdbde-7f69-4b8f-ad42-4eb89c90167f", "metadata": {}, "outputs": [], @@ -14,10 +14,25 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "id": "85ff95ba-7a1a-4ca3-bec1-3c5bb50325ea", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "{'ln_phi': array([2.3118468 , 2.33292475]),\n", + " 'dt': None,\n", + " 'dp': None,\n", + " 'dn': array([[-0.00186921, 0.00934604],\n", + " [ 0.00934604, -0.04673019]])}" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Number of components, for easier definition\n", "nc = 2\n", @@ -35,14 +50,15 @@ "w = [0.0123, 0.045]\n", "\n", "model = PengRobinson76(Tc, Pc, w, mixrule)\n", - "n = [1.0, 0.2]\n", "\n", + "\n", + "n = [1.0, 0.2]\n", "model.fugacity(n, v=2.0, t=303.15, dn=True)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "id": "cf0a8e95", "metadata": {}, "outputs": [], @@ -59,10 +75,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "id": "5e06f2a9", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 500 ms, sys: 0 ns, total: 500 ms\n", + "Wall time: 500 ms\n" + ] + } + ], "source": [ "%%time\n", "P, T = 60.0, 294.0\n", @@ -90,10 +115,31 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "id": "7c42b4fe", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAigAAAGdCAYAAAA44ojeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOy9d6AkSXXl/YvIzPJVr5637X33dE+PZ2A8wzgEg5G0rKRduRXSOu1qpdXCSsgjhKTlkxeLJBa0QqwsEkgCGawAMcB4zNie7mnfz9tymRnfH1kmqyozogYeTc9MHXjT71XdijgZFRlxM+LEvUIppeijjz766KOPPvq4hCC/2QT66KOPPvroo48+OtF3UProo48++uijj0sOfQeljz766KOPPvq45NB3UProo48++uijj0sOfQeljz766KOPPvq45NB3UProo48++uijj0sOfQeljz766KOPPvq45NB3UProo48++uijj0sO9jebwNcC3/c5c+YM+XweIcQ3m04fffTRRx999NEDlFKsrq4yNTWFlPo1kuelg3LmzBm2bNnyzabRRx999NFHH318DTh58iQzMzNam+elg5LP54HgAguFwjeZTR999NFHH3300QtWVlbYsmVLcx7X4XnpoDS2dQqFQt9B6aOPPvroo4/nGXqRZ/RFsn300UcfffTRxyWHvoPSRx999NFHH31ccug7KH300UcfffTRxyWHvoPSRx999NFHH31ccug7KH300UcfffTRxyWHvoPSRx999NFHH31ccug7KH300UcfffTRxyWHvoPSRx999NFHH31ccnheBmrr45uH9ZUNHvjHRyivV9h6cIa9V+3sCrhT8z0+N3uM+co6E+kC14xsxxLtvrBSiocWTnFibZ68k+KlY7tI205XfU+vzPLo0lkS0uIlo9sZSma7bM6XVvnC3Ak85XN0aIZtuaEum7Vahc9eOMaGW2VnfoTDg1ORvP/lwjPMV9YZT+e5bjSa94MLpzixtkDeSfKyHnhfN7Kd4VQ37wulVT5f53350DTbc8NfM+/PzT7DXHmdsVSO60Z3YMvo9j5e5/3SsZ1k7ERXfcdW5/jS4hksIbludDsjqVyXzWx5jc/PHsdTPocHp9mR7+a97lb57IWnWXer7MgNc2Rwuou36/vcN/sMs+VVRlP5WN6PLJ7i+No8WTvJ9WM7ydrJrvqe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QsMhDoogCIIgCA2HOCiCIAiCIDQcwRXnGpBi8tvh4eFjrEQQBEEQhMlSvG9PJon9lHRQRkZGAOjv7z/GSgRBEARBeL2MjIzQ0tLiazMla/HYts2ePXtoampCKa86vP93DA8P09/fz65du47LOj/Sv6nP8d5H6d/U53jv4/HeP3jz+qi1ZmRkhOnTp2MY/lEmU3IGxTAM+vr63tRtNDc3H7cHHkj/jgeO9z5K/6Y+x3sfj/f+wZvTx6CZkyISJCsIgiAIQsMhDoogCIIgCA2HOCg1RKNRvvCFLxCNRo+1lDcF6d/U53jvo/Rv6nO89/F47x80Rh+nZJCsIAiCIAjHNzKDIgiCIAhCwyEOiiAIgiAIDYc4KIIgCIIgNBzioAiCIAiC0HCcEA7Krbfeypo1a2hqaqK7u5vLLruM7du3V9lMTEywefNmOjo6SKVSXHnllezfv7/KZufOnVx88cUkEgm6u7v5zGc+Qz6ffyu74kpQ/wYGBrjhhhtYtGgR8XicmTNn8olPfIKhoaGqdpRSdT+33377W92dOiaz/84888w67dddd12VTaPuPwju4yuvvOK6f5RS3HHHHSW7Rt2H3/zmN1mxYkUp6dOGDRu47777Sp9P5fMP/Ps31c+/IkH7cKqfg379m+rnnxt/+7d/i1KKT37yk6X3Gu481CcA559/vr7tttv0s88+q7du3aovuugiPXPmTD06Olqyue6663R/f79+4IEH9OOPP67Xr1+vTzvttNLn+XxeL1u2TJ9zzjn6qaee0vfee6/u7OzUt9xyy7HoUhVB/du2bZu+4oor9D333KNffPFF/cADD+gFCxboK6+8sqodQN9222167969pZ90On0sulTFZPbfGWecoT/ykY9UaR8aGip93sj7T+vgPubz+aq+7d27V3/pS1/SqVRKj4yMlNpp1H14zz336J///Of6+eef19u3b9ef+9zndDgc1s8++6zWemqff1r792+qn39FgvbhVD8H/fo31c+/Wh577DE9e/ZsvWLFCn3jjTeW3m+08/CEcFBqOXDggAb0li1btNZaDw4O6nA4rO+4446SzR/+8AcN6IcfflhrrfW9996rDcPQ+/btK9l885vf1M3NzTqTyby1HQigtn9u/PjHP9aRSETncrnSe4C+66673gKFbwy3/p1xxhlVJ1otU2n/aT25fbhq1Sp97bXX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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "import matplotlib.pyplot as plt\n", "plt.scatter(t, p, c=betas)" @@ -109,7 +155,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "id": "a0a29755", "metadata": {}, "outputs": [ @@ -117,8 +163,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 5.5 s, sys: 1.07 s, total: 6.57 s\n", - "Wall time: 5.45 s\n" + "CPU times: user 3.62 s, sys: 0 ns, total: 3.62 s\n", + "Wall time: 3.63 s\n" ] }, { @@ -179,74 +225,76 @@ " plt.plot(ys, ps, color=colors[i])" ] }, + { + "cell_type": "markdown", + "id": "9ba9be74", + "metadata": {}, + "source": [ + "# Phase envelope tracing" + ] + }, { "cell_type": "code", - "execution_count": null, - "id": "97239bb8", + "execution_count": 1, + "id": "bac65808", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(2, 1)" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "model_mhv.id, model_stock.id" + "import yaeos\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import chemicals" ] }, { "cell_type": "code", - "execution_count": null, - "id": "185d975e", + "execution_count": 9, + "id": "9de1de8b", "metadata": {}, "outputs": [], "source": [ - "xs = np.linspace(0.001, 0.999, 100)\n", - "ys_mhv = []\n", - "ps_mhv = []\n", - "ys_pr = []\n", - "ps_pr = []\n", + "names = [\"methane\", \"n-decane\", \"n-eicosane\"]\n", + "chems = []\n", "\n", - "\n", - "T = 600\n", - "for x1 in xs:\n", - " x = [x1, 1-x1]\n", - " sat_mhv = model_mhv.saturation_pressure(x, T, \"bubble\")\n", - " p, y = sat_mhv[\"P\"], sat_mhv[\"y\"]\n", - " ps_mhv.append(p)\n", - " ys_mhv.append(y[0])\n", - " \n", - " sat_pr = model_stock.saturation_pressure(x, T, \"bubble\")\n", - " p, y = sat_pr[\"P\"], sat_pr[\"y\"]\n", - " ps_pr.append(p)\n", - " ys_pr.append(y[0])" + "Tc = []\n", + "Pc = []\n", + "w = []\n", + "for c in names:\n", + " chem = chemicals.CAS_from_any(c)\n", + " Tc.append(chemicals.Tc(chem))\n", + " Pc.append(chemicals.Pc(chem)/1e5)\n", + " w.append(chemicals.acentric.omega(chem))" ] }, { "cell_type": "code", - "execution_count": null, - "id": "a9d0176c", + "execution_count": 16, + "id": "21c0ea1a", "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 150.00000000000000 1.0000000000000000E-002\n", + " 150.00000000000000 1.0000000000000000E-002\n", + " 150.00000000000000 1.0000000000000000E-002\n", + " 3.2517524980397385 \n" + ] + }, { "data": { "text/plain": [ - "[]" + "" ] }, - "execution_count": 10, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -256,156 +304,164 @@ } ], "source": [ - "plt.plot(xs, ps_mhv, color=\"red\")\n", - "plt.plot(ys_mhv, ps_mhv, color=\"red\")\n", + "z = [0.4, 0.2, 0.4]\n", "\n", - "plt.plot(xs, ps_pr, color=\"black\")\n", - "plt.plot(ys_pr, ps_pr, color=\"black\")" + "models = [\n", + " yaeos.PengRobinson76,\n", + " yaeos.PengRobinson78,\n", + " yaeos.SoaveRedlichKwong,\n", + "]\n", + "\n", + "for m in models:\n", + " model = m(Tc, Pc, w)\n", + " T, P, Tcs, Pcs = yaeos.yaeos_c.pt2_phase_envelope(model.id, z, kind=\"dew\", t0=150, p0=0.01)\n", + " plt.plot(T, P, label=model.name)\n", + " plt.scatter(Tcs, Pcs, label=model.name + \"-CP\")\n", + "plt.legend()" ] }, { - "cell_type": "markdown", - "id": "9ba9be74", + "cell_type": "code", + "execution_count": 17, + "id": "da909167", "metadata": {}, + "outputs": [], "source": [ - "# Phase envelope tracing" + "from ipywidgets import interact, interactive, fixed, interact_manual\n", + "import ipywidgets as widgets" ] }, { "cell_type": "code", - "execution_count": null, - "id": "bac65808", + "execution_count": 42, + "id": "b7c51676", "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "RuntimeError", + "evalue": "'widget is not a recognised GUI loop or backend name", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mRuntimeError\u001b[0m Traceback (most recent call last)", + "File \u001b[0;32m~/docs/programming/python/virtualenvs/thermo/lib/python3.12/site-packages/matplotlib/backends/registry.py:404\u001b[0m, in \u001b[0;36mBackendRegistry.resolve_gui_or_backend\u001b[0;34m(self, gui_or_backend)\u001b[0m\n\u001b[1;32m 403\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 404\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mresolve_backend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mgui_or_backend\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 405\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m: \u001b[38;5;66;03m# KeyError ?\u001b[39;00m\n", + "File \u001b[0;32m~/docs/programming/python/virtualenvs/thermo/lib/python3.12/site-packages/matplotlib/backends/registry.py:367\u001b[0m, in \u001b[0;36mBackendRegistry.resolve_backend\u001b[0;34m(self, backend)\u001b[0m\n\u001b[1;32m 366\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m gui \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m--> 367\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mRuntimeError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mbackend\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m is not a recognised backend name\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 369\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m backend, gui \u001b[38;5;28;01mif\u001b[39;00m gui \u001b[38;5;241m!=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mheadless\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n", + "\u001b[0;31mRuntimeError\u001b[0m: 'widget' is not a recognised backend name", + "\nDuring handling of the above exception, another exception occurred:\n", + "\u001b[0;31mRuntimeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[42], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mget_ipython\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrun_line_magic\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mmatplotlib\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mwidget\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 2\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mrun\u001b[39m(i, x):\n\u001b[1;32m 3\u001b[0m z \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39marray([\u001b[38;5;241m1.0\u001b[39m, \u001b[38;5;241m1.0\u001b[39m, \u001b[38;5;241m1.0\u001b[39m])\n", + "File \u001b[0;32m~/docs/programming/python/virtualenvs/thermo/lib/python3.12/site-packages/IPython/core/interactiveshell.py:2480\u001b[0m, in \u001b[0;36mInteractiveShell.run_line_magic\u001b[0;34m(self, magic_name, line, _stack_depth)\u001b[0m\n\u001b[1;32m 2478\u001b[0m kwargs[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mlocal_ns\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mget_local_scope(stack_depth)\n\u001b[1;32m 2479\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbuiltin_trap:\n\u001b[0;32m-> 2480\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[43mfn\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 2482\u001b[0m \u001b[38;5;66;03m# The code below prevents the output from being displayed\u001b[39;00m\n\u001b[1;32m 2483\u001b[0m \u001b[38;5;66;03m# when using magics with decorator @output_can_be_silenced\u001b[39;00m\n\u001b[1;32m 2484\u001b[0m \u001b[38;5;66;03m# when the last Python token in the expression is a ';'.\u001b[39;00m\n\u001b[1;32m 2485\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mgetattr\u001b[39m(fn, magic\u001b[38;5;241m.\u001b[39mMAGIC_OUTPUT_CAN_BE_SILENCED, \u001b[38;5;28;01mFalse\u001b[39;00m):\n", + "File \u001b[0;32m~/docs/programming/python/virtualenvs/thermo/lib/python3.12/site-packages/IPython/core/magics/pylab.py:103\u001b[0m, in \u001b[0;36mPylabMagics.matplotlib\u001b[0;34m(self, line)\u001b[0m\n\u001b[1;32m 98\u001b[0m \u001b[38;5;28mprint\u001b[39m(\n\u001b[1;32m 99\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mAvailable matplotlib backends: \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 100\u001b[0m \u001b[38;5;241m%\u001b[39m _list_matplotlib_backends_and_gui_loops()\n\u001b[1;32m 101\u001b[0m )\n\u001b[1;32m 102\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 103\u001b[0m gui, backend \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mshell\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43menable_matplotlib\u001b[49m\u001b[43m(\u001b[49m\u001b[43margs\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgui\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mlower\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mif\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43misinstance\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43margs\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgui\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mstr\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01melse\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgui\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 104\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_show_matplotlib_backend(args\u001b[38;5;241m.\u001b[39mgui, backend)\n", + "File \u001b[0;32m~/docs/programming/python/virtualenvs/thermo/lib/python3.12/site-packages/IPython/core/interactiveshell.py:3665\u001b[0m, in \u001b[0;36mInteractiveShell.enable_matplotlib\u001b[0;34m(self, gui)\u001b[0m\n\u001b[1;32m 3662\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mmatplotlib_inline\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mbackend_inline\u001b[39;00m\n\u001b[1;32m 3664\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mIPython\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mcore\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m pylabtools \u001b[38;5;28;01mas\u001b[39;00m pt\n\u001b[0;32m-> 3665\u001b[0m gui, backend \u001b[38;5;241m=\u001b[39m \u001b[43mpt\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfind_gui_and_backend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mgui\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpylab_gui_select\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 3667\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m gui \u001b[38;5;241m!=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 3668\u001b[0m \u001b[38;5;66;03m# If we have our first gui selection, store it\u001b[39;00m\n\u001b[1;32m 3669\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mpylab_gui_select \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", + "File \u001b[0;32m~/docs/programming/python/virtualenvs/thermo/lib/python3.12/site-packages/IPython/core/pylabtools.py:348\u001b[0m, in \u001b[0;36mfind_gui_and_backend\u001b[0;34m(gui, gui_select)\u001b[0m\n\u001b[1;32m 346\u001b[0m backend, gui \u001b[38;5;241m=\u001b[39m backend_registry\u001b[38;5;241m.\u001b[39mresolve_backend(backend)\n\u001b[1;32m 347\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 348\u001b[0m backend, gui \u001b[38;5;241m=\u001b[39m \u001b[43mbackend_registry\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mresolve_gui_or_backend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mgui\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 350\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m gui, backend\n\u001b[1;32m 352\u001b[0m \u001b[38;5;66;03m# Fallback to previous behaviour (Matplotlib < 3.9)\u001b[39;00m\n", + "File \u001b[0;32m~/docs/programming/python/virtualenvs/thermo/lib/python3.12/site-packages/matplotlib/backends/registry.py:406\u001b[0m, in \u001b[0;36mBackendRegistry.resolve_gui_or_backend\u001b[0;34m(self, gui_or_backend)\u001b[0m\n\u001b[1;32m 404\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mresolve_backend(gui_or_backend)\n\u001b[1;32m 405\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m: \u001b[38;5;66;03m# KeyError ?\u001b[39;00m\n\u001b[0;32m--> 406\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mRuntimeError\u001b[39;00m(\n\u001b[1;32m 407\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mgui_or_backend\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m is not a recognised GUI loop or backend name\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", + "\u001b[0;31mRuntimeError\u001b[0m: 'widget is not a recognised GUI loop or backend name" + ] + } + ], "source": [ - "import yaeos\n", - "import matplotlib.pyplot as plt\n", - "import numpy as np" + "def run(i, x):\n", + " z = np.array([1.0, 1.0, 1.0])\n", + " z[i] = x\n", + " exclude = [i]\n", + " mask = np.ones(z.shape, bool)\n", + " mask[exclude] = False\n", + " z[mask] = (1 - x)/2\n", + " \n", + " z = z/sum(z)\n", + " print(z)\n", + "\n", + " models = [\n", + " yaeos.PengRobinson76,\n", + " yaeos.PengRobinson78,\n", + " yaeos.SoaveRedlichKwong,\n", + " ]\n", + "\n", + " for m in models:\n", + " model = m(Tc, Pc, w)\n", + " T, P, Tcs, Pcs = yaeos.yaeos_c.pt2_phase_envelope(model.id, z, kind=\"dew\", t0=150, p0=0.01)\n", + " plt.plot(T, P, label=model.name)\n", + " plt.scatter(Tcs, Pcs, label=model.name + \"-CP\", zorder=0)\n", + " plt.legend()\n", + " # plt.show()" ] }, { "cell_type": "code", - "execution_count": null, - "id": "21c0ea1a", + "execution_count": 41, + "id": "61e58514", "metadata": {}, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 1\n", - " 200.00000000000000 0.0000000000000000 \n", - " 3.4532662131729399 \n" - ] - }, { "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "65769afad4394149ad6241dd455f6922", + "version_major": 2, + "version_minor": 0 + }, "text/plain": [ - "[]" + "interactive(children=(Dropdown(description='i', options=(0, 1, 2), value=0), FloatSlider(value=0.4901, descrip…" ] }, - "execution_count": 2, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAh8AAAGdCAYAAACyzRGfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAABIEklEQVR4nO3deXxU9b3/8dckk5nsCdkTSCCsYQuyExdERBbFutC6tqL1am3BW6W1ld6qbX9tsXpbt+JSr9VqVSoqKi4ogoAoIIR9JxBIICQhhOzMZDJzfn9MMjAElECSmUnez8djHiTnnJx88nXSvHu+m8kwDAMRERGRdhLk6wJERESkc1H4EBERkXal8CEiIiLtSuFDRERE2pXCh4iIiLQrhQ8RERFpVwofIiIi0q4UPkRERKRdmX1dwKlcLhdFRUVERUVhMpl8XY6IiIicBcMwqK6uJi0tjaCgb3+24Xfho6ioiPT0dF+XISIiIuegsLCQbt26fes1fhc+oqKiAHfx0dHRPq5GREREzkZVVRXp6emev+Pfxu/CR1NXS3R0tMKHiIhIgDmbIRMacCoiIiLtSuFDRERE2pXCh4iIiLQrhQ8RERFpVwofIiIi0q4UPkRERKRdKXyIiIhIu1L4EBERkXal8CEiIiLtSuFDRERE2pXCh4iIiLQrhQ8RERFpVwofIiIinYRhGLy2aj+5B475tA6/29VWRERE2saTn+/hqSV7ANj/6FU+q0NPPkRERDqJpuDhawofIiIinYDTZXg+Htcv0YeVKHyIiIh0CusLTozz+K+Le/qwEoUPERGRTuGNNQWej4ekx/iwEoUPERGRDs8wDBZsOOT5PCo0xIfVKHyIiIh0eLtKqj0fTxqY7MNK3M4rfDz66KOYTCbuu+8+zzGbzcaMGTOIj48nMjKSadOmUVJScr51ioiIyDn6bNuJv8Njesb7sBK3cw4fa9eu5YUXXiA7O9vr+P3338/ChQuZP38+y5cvp6ioiOuvv/68CxUREZFz8+m2Ys/H2d18O94DzjF81NTUcOutt/Liiy/SpUsXz/HKykpeeukl/va3vzF+/HiGDx/Oyy+/zNdff83q1atbrWgRERE5O4cqjrOtqMrz+YDUAA0fM2bM4KqrrmLChAlex3Nzc3E4HF7Hs7KyyMjIYNWqVedXqYiIiLTY4pOeemSlRBFmCfZhNW4tXl593rx5rF+/nrVr1zY7V1xcjMViITY21ut4cnIyxcXFza4HsNvt2O12z+dVVVWnvU5ERERa7rPtJ8Z7+EOXC7TwyUdhYSE///nPef311wkNDW2VAubMmUNMTIznlZ6e3ir3FRER6ewq6upZk1/u+Xxwt1jfFXOSFoWP3NxcSktLGTZsGGazGbPZzPLly3n66acxm80kJydTX19PRUWF19eVlJSQkpJy2nvOnj2byspKz6uwsPCcfxgRERE5YcmOUq9l1Yf4yZOPFnW7XH755WzZssXr2B133EFWVha//vWvSU9PJyQkhCVLljBt2jQAdu3aRUFBATk5Oae9p9VqxWq1nmP5IiIiciafbT8x5CEk2ES/lCgfVnNCi8JHVFQUgwYN8joWERFBfHy85/idd97JrFmziIuLIzo6mnvvvZecnBzGjBnTelWLiIjItzpe72T57iOez7NSorGafT/YFM5hwOl3eeKJJwgKCmLatGnY7XYmTZrEs88+29rfRkRERL7FyrwybA6X5/ML0mN9V8wpzjt8LFu2zOvz0NBQ5s6dy9y5c8/31iIiInKOPtvmPcv04j4JPqqkOe3tIiIi0sE0OF0s2Vnq+dwcZOLCXr5fVr2JwoeIiEgHs3b/Mcpr6z2fD+vexec72Z5M4UNERKSD+fSULpdL+yb6qJLTU/gQERHpQFwug0VbFT5ERESknWw6WEFxlc3zeUKkhQGp0T6sqDmFDxERkQ5k0SldLmP7JBIUZPJRNaen8CEiItJBGIbBp6d0uYz1sy4XUPgQERHpMHaVVLP/aJ3nc5MJLvGj9T2aKHyIiIh0EKcONB2UFkN8pP/tn6bwISIi0kH4+yyXJgofIiIiHcD+slp2FldjMkHT+FJ/HO8BCh8iIiIdQtPCYpFWMy4DoqxmhmbE+raoM1D4EBER6QCaptiGW4IBuLB3PCHB/vln3j+rEhERkbNWXGljQ0EFJhNYze7wcWnfJB9XdWYKHyIiIgHus+3upx6ZCREcPOaeantpP/8c7wEKHyIiIgGvaZZLuCUYlwH9kqPoGhvm46rOTOFDREQkgJXX1rMmvxwAS+MYj8uy/LfLBRQ+REREAtrnO0pwugyyUqLYV1YLwHiFDxEREWkrTXu5JEWHUlHnICYshGF+OsW2icKHiIhIgKqxN/DlnjLgRJfLpX0TMfvpFNsm/l2diIiInNEXO0upd7roedIsF3/vcgGFDxERkYDVtLBYdrcYdhZXE2Ty3/1cTqbwISIiEoBsDidf7CwFTiwsNjSjC10iLL4s66wofIiIiASglXvKqKt3khoTSlmNHQiMLhdQ+BAREQlITV0u4/ol8tVe96DTy/opfIiIiEgbcDhdfL6jBICYMAs2h4vUmFD6p0b5uLKzo/AhIiISYL7JL6eizkF8hIVqmwOAcf2SMJlMPq7s7Ch8iIiIBJimvVwm9E9m+e4jQOCM9wCFDxERkYDichl82jjeo3dSJAePHcdiDuKi3vE+ruzsKXyIiIgEkA2FFZRW24mymqmtbwAgp2c84Razjys7ewofIiIiAWTR1sMAjO+fxIrGLpcrBiT7sqQWU/gQEREJEC6XwUeb3eFjRI84NhRWAO6xH4FE4UNERCRAbCg8RlGljQhLMIZhYBjupdVTYkJ9XVqLKHyIiIgEiIWb3E89rhiQzIrd7oXFAu2pByh8iIiIBASny+DjLe7wMWFAMivz3OM9FD5ERESkTazdX+6e5RJqJshkwuZw0TU2LGBWNT2ZwoeIiEgA+HBzEQCTBqawfNeJWS6BsqrpyRQ+RERE/FyD08UnW9wLi101OJUlO937ugRilwsofIiIiPi91fvKOVpbT5fwECKsZspq6omymhmVGefr0s6JwoeIiIifa+pymTwohWW7SgEYl5WExRyYf8YDs2oREZFOwuF0sahxL5ep2Wks3t7U5RI4G8mdSuFDRETEj63MK6OizkFCpIWUmFD2lNZgDjIxrq/Ch4iIiLSBDxsXFrtycCpf7HR3uYzKjCMmPMSXZZ0XhQ8RERE/ZW9w8tn2E10unzZ2vwTaRnKnUvgQERHxUyt2l1FtayAlOpQe8eGsO3AMcK/1EcgUPkRERPxU0yyXKwen8vmOUgwDhnSLIS02zMeVnR+FDxERET90vN7pmdkydUiqp8tlYoA/9QCFDxEREb/0xa5S6uqddI0No1diJF/vde9iO3mQwoeIiIi0gaYul6nZqSzbVYrDadA7KZJeiZE+ruz8KXyIiIj4mVp7A0sbp9VOzU5j0VZ3l8vkDtDlAgofIiIifufzHSXYHC66x4fTOymSZY272Ab6LJcmCh8iIiJ+5sPN7oXFpman8uWeIxx3uMd+DOoa7ePKWofCh4iIiB+psjlY3vik4+ohaZ59XSYNTMFkMvmytFaj8CEiIuJHFm8rod7p8gwuXbLDPfZj0sDAXtX0ZAofIiIifuTkWS5r9pVTedxBfISFET3ifFxZ61H4EBER8RMVdfV8uce9nsepe7kEB3WMLhdQ+BAREfEbn24rpsFlkJUSRWZChNd4j45E4UNERMRPNM1yuXpIGrkHjnGk2k50qJmLeif4uLLWpfAhIiLiB0qrbHyV19TlksrHW9xB5IoBKVjMHevPdcf6aURERALUB5uKcBkwLCOW9C7hfLLVHT6uHNyxulxA4UNERMQvvLv+EADXDetGbsExSqrsRFnNXNynY3W5gMKHiIiIz+0qrmb74SpCgk1MHXxyl0syVnOwj6trfQofIiIiPvbuhoMAXNYviZiwED7Z4p7lMmVwqi/LajMKHyIiIj7kdBm8v8G9sNj1w7qyofAYxVU2Iq1mLumAXS6g8CEiIuJTq/cdpbjKRkxYCJdlJfHRZvdTjwn9kwgN6XhdLqDwISIi4lNNA02vyk4lJCjopFkuHbPLBRQ+REREfKauvoFFjWHj+qFd2XiwgsOVNiIswYztm+jj6tqOwoeIiIiPfLathNp6Jxlx4Qzv3oWPG1c4vbx/coftcgGFDxEREZ95d4O7y+XaoV0B+GSre7xHR+5yAYUPERERnyitsrFyzxEArhvalfUFFRyqOE6EJZhx/TpulwsofIiIiPjEycupZyZEsHCTe7rtFQM6dpcLtDB8PPfcc2RnZxMdHU10dDQ5OTl88sknnvM2m40ZM2YQHx9PZGQk06ZNo6SkpNWLFhERCXQnL6fudBl8tOXEjrYdXYvCR7du3Xj00UfJzc1l3bp1jB8/nmuuuYZt27YBcP/997Nw4ULmz5/P8uXLKSoq4vrrr2+TwkVERALVqcupr8k/ypFqO9GhZi7p07G7XADMLbn46quv9vr8T3/6E8899xyrV6+mW7duvPTSS7zxxhuMHz8egJdffpn+/fuzevVqxowZ03pVi4iIBLCTl1PvEmFh4Sb3U48pg1KxmDv+iIhz/gmdTifz5s2jtraWnJwccnNzcTgcTJgwwXNNVlYWGRkZrFq16oz3sdvtVFVVeb1EREQ6qlOXU3c4XZ6FxTpDlwucQ/jYsmULkZGRWK1W7rnnHhYsWMCAAQMoLi7GYrEQGxvrdX1ycjLFxcVnvN+cOXOIiYnxvNLT01v8Q4iIiASKU5dTX5lXRkWdg4RIC2N6xvm6vHbR4vDRr18/Nm7cyJo1a/jpT3/K9OnT2b59+zkXMHv2bCorKz2vwsLCc76XiIiIvzt5OXWrOdgzy+XKwamYgzt+lwu0cMwHgMVioXfv3gAMHz6ctWvX8tRTT3HjjTdSX19PRUWF19OPkpISUlJSzng/q9WK1WpteeUiIiIB5tTl1G0OJ59tc88K7SxdLtAK63y4XC7sdjvDhw8nJCSEJUuWeM7t2rWLgoICcnJyzvfbiIiIBLxTl1NftusINfYGUmNCGZ7RxdfltZsWPfmYPXs2U6ZMISMjg+rqat544w2WLVvGp59+SkxMDHfeeSezZs0iLi6O6Oho7r33XnJycjTTRUREBO/l1E0mEws3u7tcrh6SRlCQyZeltasWhY/S0lJuu+02Dh8+TExMDNnZ2Xz66adcccUVADzxxBMEBQUxbdo07HY7kyZN4tlnn22TwkVERALJqcup19obWLKjscslu/N0uUALw8dLL730redDQ0OZO3cuc+fOPa+iREREOppTl1N/b8MhbA4XPeLDGdQ12tfltavOMaxWRETEx05eTh1gQWMXzDUXuLtgOhOFDxERkTa29VAl2w9XYQkOYurgVI5U21mZVwa4x390NgofIiIibew/a91rWE0cmEyXCAsfbi7C6TIY0i2GzIQIH1fX/hQ+RERE2pDN4eS9je4ulptGZgDw3kb3LJfO+NQDFD5ERETa1CdbD1Nta6BblzAu7BVPflktmworCA4yMbWTzXJpovAhIiLShuZ94+5yuWFEOkFBJt5rHGh6ce8EEqM65wrfCh8iIiJtJL+sljX55QSZ4PvDu2EYBu9vbFporHM+9QCFDxERkTbz1jr3U49L+yaSFhvGpoOV7D9aR1hIMBMHnHnfs45O4UNERKQNOJwu3s49CMCNTQNNG7tcJg5MJsLa4r1dOwyFDxERkTbwxc5SjlTbSYi0cHn/JBqcLj5s3Mvl2gs65yyXJgofIiIibaCpy2XasG6EBAfxZV4ZZTX1xEdYuLhPgo+r8y2FDxERkVZWXGlj6c5SAG4YmQ7AO41dMFcPSSMkuHP/+e3cP72IiEgbeGf9QVwGjOzRhV6JkVQed/DZdvcOttMa93bpzBQ+REREWpHLZXi6XJoGmn60+TD1DS76Jkd2uh1sT0fhQ0REpBWtzj/KgaN1RFnNXDnYPZ32nfXuLpdpw7p1uh1sT0fhQ0REpBU1bSJ39QVphFvM5JfVknvgGEEmuK6T7uVyKoUPERGRVlJZ5+CTrcUA3NQ40PTdxqcel/RJJCk61Ge1+ROFDxERkVby3sZD1De46J8azeCuMbhcBu+udy8sNm24Bpo2UfgQERFpBYZhMK+xy+XGEe6xHavzj3Ko4jhRoWYmDkj2cYX+Q+FDRESkFWw9VMWOw1VYzEFc2zi2451c91OPqdmphIYE+7I8v6LwISIi0grmrS0AYMqgFGLDLdTaG/hk62FAa3ucSuFDRETkPB2vd/LBRve+LTeOcA80XbS1mLp6J93jwxnevYsvy/M7Ch8iIiLn6eMth6m2N5ARF86YnvGA994uWtvDm8KHiIjIeXp9zQEAbhjRjaAgE/vLalmTX47JBN/XLJdmFD5ERETOw9ZDlawvqCAk2OTZRG5+rvupx9g+iaTFhvmyPL+k8CEiInIe/r3a/dRj8qBUkqJCcboM3m7cwfaGxvEf4k3hQ0RE5BxV1jl4b6N7Ou1tOd0BWLH7CCVVdrqEhzBhQJIvy/NbCh8iIiLnaH5uITaHi6yUKEY0zmhpGmh67dCuWM1a2+N0FD5ERETOgctleLpcbsvpgclk4miNnc93lABw40h1uZyJwoeIiMg5+DKvjP1H64gKNXPt0DQAFmw4hMNpkN0thqyUaB9X6L8UPkRERM7Ba6v2A+6ptOEWM4ZheLpcNND02yl8iIiItFBheR1LdpYC8MMx7oGmmw5WsrukBqs5iKuHpPmyPL+n8CEiItJCr68pwDDg4t4J9EqMBGDeNyf2dokJC/FleX5P4UNERKQFbA4n/2ncRO5HjdNrq20OPtjk3tvl5lEZPqstUCh8iIiItMBHmw9zrM5BWkwol2e51/H4YFMRdfVOeiVGMCozzscV+j+FDxERkRZ4tXF67a1jumMOdv8ZfbOxy+XmURnaRO4sKHyIiIicpc0HK9hUWIElOMizjseWg5VsPVSFJTiIacO0idzZUPgQERE5S6+tcj/1uHJwCgmRVgDeaBpoOjiFLhEWn9UWSBQ+REREzsKx2nrPoNIf5fQAoMbewAeNe7tooOnZU/gQERE5C/NzC7E3uBiYFs2wjFgAPthYRG29k54JEYzWQNOzpvAhIiLyHdz7uLi7V27L6e4ZVKqBpudG4UNEROQ7LN99hILyOqJDzXxvSFcAth6qZMuhSvdA0+EaaNoSCh8iIiLf4dXGfVx+MCKdMEswgGdH20mDUojTQNMWUfgQERH5FvvLalm2+whwYh+XyuMO3mscaPqjxmNy9hQ+REREvsU/v8rHMOCyfolkJkQA8E7uQWwOF/2SoxjZo4uPKww8Ch8iIiJnUFFXz/x1BwG465KeABiG4ely+eFJg0/l7Cl8iIiInMHrawo47nAyIDWanF7xAHy99yj7ymqJsARz3dCuPq4wMCl8iIiInIa9wckrX+8H4L8uyfQ84Wha5fT6Yd2ItJp9VV5AU/gQERE5jYWbDnOk2k5ytJWp2WkAHK48zuIdJcCJwafScgofIiIipzAMg//7ch8At1+YicXctHttIU6XwajMOPqlRPmyxICm8CEiInKKlXll7CyuJtwSzC2Ne7Y4nC7PiqaaXnt+FD5ERERO8X9f5gNww4h0YsJDAPh0WzFHqu0kRFqZNDDFl+UFPIUPERGRk+wuqWb57iMEmeDHF2V6jr/y1X4AbhmV7umGkXOj1hMRETlJ01iPSQNTyIgPB9z7uKw7cAxzkIlb1eVy3hQ+REREGpVW23hvQxHgnl7bpGnK7ZWDU0mODvVFaR2KwoeIiEijf686QL3TxdCMWIZ3jwOgrMbOBxvdgeT2i3r4sLqOQ+FDREQEOF7v5LXGZdObllIHmPdNAfVOF0O6xTA0PdZH1XUsCh8iIiLAO+sPcqzOQXpcmGc2i8Pp8gSS2y/qoX1cWonCh4iIdHoul8E/V7qn195xYSbBQe6QsWhrMSVV7um1Vw5O9WWJHYrCh4iIdHpLd5ayr6yWqFAzN4xM9xxvGmh66+gMrOZgH1XX8Sh8iIhIp/di4/TaW0ZneDaL23ywgtwDxwgJNnHr6AxfltfhKHyIiEintvlgBWvyyzEHmbj9wh6e402rnE7NTiNJ02tblcKHiIh0as9+sReAq4ekkRoTBkBRxXE+2nIYgDsvzjzj18q5UfgQEZFOa09JNYu2FQPw03G9PMf/9fV+nC6DnJ7xDOoa46vyOiyFDxER6bSeXeZ+6jFpYDJ9k6MAqLE38Ebj7rUnr3IqrUfhQ0REOqUDR2t5f+MhAGZe1sdzfP66QqptDfRMiOCyfkm+Kq9DU/gQEZFO6fnle3EZcGnfRAZ3c3etOF0G//zKPdD0xxdnEhSkRcXagsKHiIh0Oocrj/N27kEAZo7v7Tm+eHsxheXHiQ0PYdqwbr4qr8NT+BARkU7nHyv24XAajMqMY2SPOM/xpum1PxzdnTCLFhVrKwofIiLSqZTV2HmzcUDpzMtOPPXIPVDOusZFxW7L6e6r8jqFFoWPOXPmMHLkSKKiokhKSuLaa69l165dXtfYbDZmzJhBfHw8kZGRTJs2jZKSklYtWkRE5Fz9c2U+Nod7l9pL+iR4jr+w3L3K6XVDu2pRsTbWovCxfPlyZsyYwerVq1m8eDEOh4OJEydSW1vrueb+++9n4cKFzJ8/n+XLl1NUVMT111/f6oWLiIi0VGWdg1dXuXepnXFZb88utXmlNSze4f4/yneP7emz+joLc0suXrRokdfnr7zyCklJSeTm5jJ27FgqKyt56aWXeOONNxg/fjwAL7/8Mv3792f16tWMGTOm9SoXERFpoX+t2k+NvYF+yVFM6J/sOf7iin0YBlwxIJneSVE+rLBzOK8xH5WVlQDExbkH6+Tm5uJwOJgwYYLnmqysLDIyMli1atVp72G326mqqvJ6iYiItLZae4NnGu3PLuvlmUZbUmVjwQb3eh/3XKqnHu3hnMOHy+Xivvvu46KLLmLQoEEAFBcXY7FYiI2N9bo2OTmZ4uLi095nzpw5xMTEeF7p6emnvU5EROR8vLGmgIo6Bz3iw5maneY5/vJX+6l3uhjRvQvDu8d9yx2ktZxz+JgxYwZbt25l3rx551XA7Nmzqays9LwKCwvP634iIiKnsjmc/ONL94DSn43rTXDjU48qm4PXV7vHgPzk0l5n/HppXS0a89Fk5syZfPjhh6xYsYJu3U4swpKSkkJ9fT0VFRVeTz9KSkpISUk57b2sVitWq/VcyhARETkr83MPcqTaTlpMKNcO7eo5/uaaAqrtDfROiuTyLC2l3l5a9OTDMAxmzpzJggULWLp0KZmZ3hvuDB8+nJCQEJYsWeI5tmvXLgoKCsjJyWmdikVERFrA4XTxfOMGcj+5tBcWs/tPn83h5KWV7jEgd4/tqaXU21GLnnzMmDGDN954g/fff5+oqCjPOI6YmBjCwsKIiYnhzjvvZNasWcTFxREdHc29995LTk6OZrqIiIhPLFh/iEMVx0mItHLjyBPjCt/OPUhp09OQC7p+yx2ktbUofDz33HMAjBs3zuv4yy+/zO233w7AE088QVBQENOmTcNutzNp0iSeffbZVilWRESkJewNTp5asgeAn4ztSWiIe8l0h9PF88vdT0PuHtvT8zRE2keLwodhGN95TWhoKHPnzmXu3LnnXJSIiEhreGttIYcqjpMcbeVHJy2ZvnBTEQePHSc+wsKNIzN8WGHnpKgnIiId0vF6J88szQNg5vg+nqceLpfBs41jQO68JFMbyPmAwoeIiHRI/159gNJqO11jw7hxxImxHp9tLyavtIaoUDM/GqMN5HxB4UNERDqcGnsDzzWO6fj5hD6eMR2GYfD3L9xPQ26/sAdRoSE+q7EzU/gQEZEO5+WV+ZTX1tMzIYLrT1rXY/nuI2w9VEVYSDB3XJT5LXeQtqTwISIiHUplncOzmul9V/TFHHziqcfTjTNfbh2dQVyExWc1dnYKHyIi0qG8+OU+qm3unWunDk71HF+ZV8b6ggqs5iDu1gZyPqXwISIiHcbRGrtn59pZE/t6Vi01DIOnPnc/9bhldAZJUaE+q1EUPkREpAN5btle6uqdZHeLYeKAZM/xr/ceZd2BY1jMQdyjDeR8TuFDREQ6hOJKG6817lD7i4n9MJlOPPV48vPdANwyKoPkaD318DWFDxER6RDmfpGHvcHFyB5dGNsnwXN81d6jrN2vpx7+ROFDREQCXmF5HfPWFgDeTz0Anmyc4XLzyHRSYvTUwx8ofIiISMB7eskeHE6DS/okMKZnvOf413llfJNfjiU4iHvG6amHv1D4EBGRgJZXWs076w8CMOuKvp7jhmHw18XusR43j0onNSbMJ/VJcwofIiIS0OZ8vBOXARMHJDM0o4vn+LLdR8g9cAyrOYgZl/X2YYVyKoUPEREJWF/nlbFkZynmIBMPTsnyHDcMg79+tguA6Rf2IEkzXPyKwoeIiAQkl8vgTx/vAOCHY7rTMzHSc+7TbSVsPVRFhCWYn4zVaqb+RuFDREQC0nsbD7GtqIooq5n/vryP57jTZfC3xe6nHj++OJP4SKuvSpQzUPgQEZGAY3M4efxTd8CYMb631yZxH24uYndJDVGhZv7rYj318EcKHyIiEnBeWpnP4UobXWPDuP3CHp7jDqeLJxpnuNx9SU9iwkN8VKF8G4UPEREJKGU1dp5btheAX03uR2hIsOfcm98UsP9oHQmRFu64ONNXJcp3UPgQEZGA8tTne6ixN5DdLYars9M8x2vsDZ6da39+eR8irWZflSjfQeFDREQCRl5pDW98415G/TdX9ico6MQy6v9YsY+jtfVkJkRw06gMX5UoZ0HhQ0REAsajn+zE6TK4YkCy1zLqpVU2XlyxD4AHJvUjJFh/3vyZ/uuIiEhAWLX3KJ/vKCH4lAXFwL153HGHkwvSY5kyKMVHFcrZUvgQERG/515QbDsAt47OoNdJC4rtPVLDf9YWAu6umJN3tBX/pPAhIiJ+7/1Nh9h6qIpIq5mfn7SgGMBji9xdMRP6JzEqM85HFUpLKHyIiIhfq7E38OgnOwH46bheXiuWrttfzqfbSggywa8nZ53pFuJnFD5ERMSvPbNkDyVVdrrHh3PnSWt3GIbBnMZQcsOIdPokR/mqRGkhhQ8REfFbeaXVvLQyH4DfXT3Qa0Gxz7aXkHvgGKEhQdx/RV9flSjnQOFDRET8kmEYPPLBNhoax3NclpXkOdfgdPHYIvdTjzsvziQ5OtRXZco5UPgQERG/9MnWYr7KO4rFHMTDUwd6nXtr3UH2HqmlS3gIP7m0l48qlHOl8CEiIn6nrr6BP37onlp7z6W9yIgP95yrtjn4W+PmcfeO70N0qDaPCzQKHyIi4nfmfpFHUaWNbl3C+Nk47ycbzyzNo6zGTmZCBD8c091HFcr5UPgQERG/kl9Wy4sr3INMH546wGuQ6d4jNfxz5YlzFrP+jAUi/VcTERG/YRgGv/tgG/VOF5f2TeSKAcle5/6wcDsNLoPxWd4DUCWwKHyIiIjfWLy9hOW7j2AJDuJ33xvotVT60p2lLN99hJBgEw9NHeDDKuV8KXyIiIhfsDmc/KFxkOl/XZJJZkKE55y94cS5H1/sfU4Cj8KHiIj4heeW7eXgseOkxoQyc3xvr3P/XLmfA0frSIyycu/4Pme4gwQKhQ8REfG5vUdqeG75XgB+e9UAwi1mz7mSKhvPLN0DwIOTs4i0mk97DwkcCh8iIuJTLpfB7He3UN/gYmzfRK4cnOJ1/i+f7KSu3snQjFiuG9rVR1VKa1L4EBERn5q3tpBv8ssJCwnmT9cO8hpkmnugnHc3HMJkcu/tEhRk+pY7SaBQ+BAREZ8pqbIx5+MdAPxyUj/S406sZOpyGfzuA/cg0x8M78aQ9FhflChtQOFDRER85uH3t1Jtb2BItxhuv7CH17n5uYVsOVRJlNXMA5OyfFOgtAmFDxER8YlFWw/z6bYSzEEmHp2WTfBJXSrltfU8+ol719qfT+hDYpTVV2VKG1D4EBGRdld53MFD728D3BvH9U+N9jr/x4+2c6zOQVZKFNNPeSIigU/hQ0RE2t2jn+zgSLWdngkRzdb0+CqvjHfXuweZzrl+MCHB+lPV0ei/qIiItKtVe4/y5jeFgDtcnLxxnM3h5H8WbAHgR2O6MzSji09qlLal8CEiIu3G5nDym8ZwccvoDEb3jPc6//eleew/WkdytJUHJvXzRYnSDhQ+RESk3Ty9ZA/5ZbUkRVl5cIr3DJbdJdU837jK6e+/N5Co0BBflCjtQOFDRETaxeaDFbywYh8A/+/aQUSfFC6aVjltcBlM6J/MpIEpZ7qNdAAKHyIi0uZsDif3/2cjTpfBVdmpzcLFm2sLyD1wjAhLMH+4ZqDXKqfS8Sh8iIhIm3ts0S72HqklMcrKH68Z5HWutMrmWdPjFxP7kRYb5osSpR0pfIiISJv6em8Z//wqH4DHvp9NlwiL1/nff7idalsD2d1itKZHJ6HwISIibabK5uCXb20C3LNbLuuX5HV+6c4SPtp8mOAgE3++brDXKqfScSl8iIhIm/n9B9spqrSRERfO/1zZ3+tcRV09D77jnnb744t6MKhrjC9KFB9Q+BARkTaxaGsx76w/iMkEf7thCBFWs9f5332wjdJqOz0TI/jFRK3p0ZkofIiISKsrq7F7Vir9ydhejOgR53V+0dZi3ttYRJAJ/vqDIV6rnErHp/AhIiKtyjDca3Ycra0nKyWK+6/o43W+vLae377XGEwu7aUl1DshhQ8REWlV83MPsnh7CSHBJp648QKsZu+nGg+9t5Wymnr6JUdx34Q+Z7iLdGQKHyIi0mr2l9Xyh4XbAZh1RT/6p0Z7nV+4qYiPthzGHGTirzcMaRZMpHNQ+BARkVZhb3Ay88311NgbGNUjjrvH9vQ6X1pt46H3twIw47Lemt3SiSl8iIhIq5jz8U62HqqiS3gIT918gdeaHYZh8Jt3t1JR52BgWjQzx/f2YaXiawofIiJy3j7dVswrX+8H4K83DCE1xnuJ9HfXH+LzHe5xIH+9YQghwfrz05npv76IiJyXQxXH+dXbmwH4r4szGZ+V7HW+sLyO3y3cBsB9E/qSlRLd7B7SuSh8iIjIOXM4Xfz3mxuoPO5gSLcYfjU5q/n5eRuotjUwLCOWn5wyDkQ6J4UPERE5Z08s3k3ugWNEWc08c/MwLGbvPytPfb6HDQUVRFnNPHXTUMzqbhEUPkRE5Byt2H2EZ5ftBeDRadlkxId7nf96bxlzl+UB8OfrB5MeF97sHtI5KXyIiEiLlVbZmPXWRgBuHZ3BVdmpXufLa+u5/z8bMQy4cUQ6Vw9J80GV4q8UPkREpEUaGsdxlNW4l09/aOoAr/OGYfCrtzdRUuXeNO6R7w04w52ks1L4EBGRFpnzyU5W7ysnwhLM328Z1mxTuFdXHeDzHaVYgoN45uahhFvMZ7iTdFYtDh8rVqzg6quvJi0tDZPJxHvvved13jAMHn74YVJTUwkLC2PChAns2bOnteoVEREfen/jIV5amQ+41/PonRTpdX57URV/+ngHALOvzGJgmlYxleZaHD5qa2sZMmQIc+fOPe35xx57jKeffprnn3+eNWvWEBERwaRJk7DZbOddrIiI+M62okp+/Y57PY+Zl/Vm8iDvcR519Q3c++Z66htcjM9K4vYLe/igSgkELX4WNmXKFKZMmXLac4Zh8OSTT/Lb3/6Wa665BoBXX32V5ORk3nvvPW666abzq1ZERHziWG09P3ktF5vDxaV9E7n/ir5e5w3D4H8WbGXvkVqSoqw8/v1sTCbTGe4mnV2rjvnIz8+nuLiYCRMmeI7FxMQwevRoVq1addqvsdvtVFVVeb1ERMR/OF0G/z1vAwePHScjLpynbxrqtW8LwGurD7BgwyGCg0w8ffNQ4iOtPqpWAkGrho/i4mIAkpO9l9ZNTk72nDvVnDlziImJ8bzS09NbsyQRETlPj3+6iy/3lBEWEsw/bhtOTHiI1/ncA+X8YeF2AGZPyWJMz3hflCkBxOezXWbPnk1lZaXnVVhY6OuSRESk0UebD/P8cvdCYo//ILvZviyl1TZ+9vp6GlwGVw1O5c6LM31RpgSYVg0fKSkpAJSUlHgdLykp8Zw7ldVqJTo62uslIiK+t+NwFQ+8vQmAn4ztydRs74XCHE4XM9/YQEmVnd5JkfxF4zzkLLVq+MjMzCQlJYUlS5Z4jlVVVbFmzRpycnJa81uJiEgbKq2ycecra6mrd3Jx7wQemNSv2TWPLdrJN/nu9T6e/+FwIq1az0POTovfKTU1NeTl5Xk+z8/PZ+PGjcTFxZGRkcF9993HH//4R/r06UNmZiYPPfQQaWlpXHvtta1Zt4iItJG6+gbu/Nc6iipt9EqMYO4tw5ptCPfR5sO8+KV7vY///UHz9T5Evk2Lw8e6deu47LLLPJ/PmjULgOnTp/PKK6/wq1/9itraWu6++24qKiq4+OKLWbRoEaGhoa1XtYiItAmny+C+eRvZcqiSuAgLL98+qtkA0z0l1V7dMVMGp57uViJnZDIMw/B1ESerqqoiJiaGyspKjf8QEWlnf/poOy9+mY/FHMSbd41mePc4r/PltfVcO/crCsrrGNMzjn/fObrZUxHpnFry91vvGBERAeDfqw94daWcGjzsDU7ueS2XgvI60uPCTtsdI3I29K4RERGW7z7CIx9sA+AXV/Tle0O8Z7Y0rWD6zf5yoqxmXpo+UguJyTlT+BAR6eR2Flcx4/X1OF0G04Z1Y+b43s2ueWHFPt7OPUiQCZ65ZSh9k6N8UKl0FAofIiKdWGF5HdP/+Q019gZGZ8Yx5/rBzdbq+HRbMX9ZtBOAh6cOYFy/JF+UKh2IwoeISCdVVmPntn9+Q0mVnT5Jkbzwo+FYzN5/FrYequS+eRsxDPjRmO5M10610goUPkREOqFqm4PbX/6G/LJausaG8dqdo4kNt3hdU1pl465X13Hc4eSSPgk8cvUArWAqrULhQ0Skk7E5nNz16jq2HqoiPsLCa3eOIiXGey2mKpuD6S+v5XDjQmN/18wWaUV6J4mIdCINThf//eYGVu8rJ9Jq5l8/HkXPRO/VSW0OJ3e/uo4dh6tIiLTyz9tHEhMWcoY7irScwoeISCdhGAa/WbCFz7aXYDEH8eJtIxjUNcbrGqfLYNZbGz3h5JU7RtI9PsJHFUtHpfAhItIJGIbBo5/s5K11jdNlbx5KTq/4Ztf8fuE2Pt5STEiwiX/8aHizcCLSGhQ+REQ6OMMw+N/PdvHCin0APHp9NpMGpjS7bu4Xeby66gAmEzxx4wVc2DuhvUuVTkLhQ0Skg3ti8W7mfrEXgEeuHsANI9ObXTPvmwL+97Pd7mumDmBqdlqza0Rai8KHiEgH9uTnu3l6aR4AD00dwB0XZTa7ZtHWw/xmwRYAfjauF7ef5hqR1qTwISLSQT29ZA9Pfr4HgP+5sj93Xtw8VHy+vYSZb2zAZcANI7rxwKR+7V2mdEIKHyIiHdDcL/L422J3N8rsKVncNbZns2uW7SrlZ6+vp8Fl8L0hacy5PluLiEm7UPgQEelgnl2Wx+Of7gLgV5P78ZNLezW75qu8Mu5+LZd6p4spg1L42w1DCA5S8JD2YfZ1ASIi0jqaZrU0DS795cS+/Gxc8x1q1+w7yp3/Wkt9g4sJ/ZN46qahWr1U2pXCh4hIB+ByGfxu4TZeXXUAcD/xOF3wyD1wjB+/shabw8WlfROZe+uwZpvJibQ1hQ8RkQDX4HTxwNubWbDhECYT/OGaQfxoTPdm163dX84dL6+ltt7JRb3jeeFHw7Gag31QsXR2Ch8iIgHM5nBy75sbWLy9hOAgE3/9wRCuHdq12XUr95R5dqgdnRnHi7eNIDREwUN8Q+FDRCRA1dobuPu1dXyVdxSLOYi5twzjigHJza77fHsJP3tjPfUNLsb2TeSFHw4nzKLgIb6j8CEiEoDKauzc+a91bCqsINwSzP/dNuK0y6F/uLmI++ZtpMFlMHFAMs/cMlRdLeJzCh8iIgFm75Ea7nh5LQXldcSGh/Dy7SMZmtGl2XVv5x7kV29vwmXANRek8b8/GEKIZrWIH1D4EBEJIGv3l3PXq+uoqHOQHhfGK3eMoldiZLPrXvkqn98t3A7ATSPT+dN1g7WOh/gNhQ8RkQDx4eYiZr21ifoGF0PSY3lp+ggSIq1e17hcBn9ZtNOzg+3tF/bgkasHaOVS8SsKHyIifs4wDP6xYh9zPtkJwMQByTx109Bmg0btDU4emL+ZDzYVAfDApH78bFwvBQ/xOwofIiJ+zN7g5JH3tzFvbSHgfpLx0NQBzbpQqmwO7nktl6/3HsUcZOIv07KZNrybL0oW+U4KHyIifqq02sZP/72e3APHMJngt1cNOO3OtMWVNm5/+Rt2FlcTYQnmuR8OZ2zfRB9ULHJ2FD5ERPzQpsIKfvJaLsVVNqJCzTxz81DG9Utqdt3WQ5Xc9eo6DlfaSIyy8vLtIxnUNcYHFYucPYUPERE/807uQWYv2EJ9g4veSZG8eNsIMhMiml330ebD/GL+RmwOF70SI3jljlGkx4X7oGKRllH4EBHxEw6nizkf7+SfX+UDMKF/Ek/ceAFRoSFe17lcBk8u2cPTS/YAcGnfRJ65ZSjRp1wn4q8UPkRE/EBRxXHufXMDuQeOAXDv+N7cP6EvQacMLK2rb+AXb23ik63FANx1SSYPTumvNTwkoCh8iIj42Bc7S5n11kaO1TmIspp5/AfZTB6U2uy6gqN1/OTfuew4XIUlOIg/XTeIH4xI90HFIudH4UNExEcanC7+ung3zy3bC8CgrtHMvWUY3eObj+9YvL2EWW9tpNrWQEKkhRd+NJzh3ePau2SRVqHwISLiA4crj/PzNzfyzf5yAKbndOc3V/Vvtulbg9PF45/t4oXl7hVLh2XE8vdbhpEWG9buNYu0FoUPEZF29sGmIn67YAtVtgYirWb+Mi2bq7Kbd7OUVtmY+eYGvsl3B5QfX5TJg1OysJi1OZwENoUPEZF2UnncwcPvb+X9je7lz4d0i+Gpm4bS4zTTaFfsPsKstzZRVmMn0mrmse9nc+Xg5gFFJBApfIiItIOv95bxy7c2UVRpI8gEM8f34d7xvZttcW9zOHn80128tNI93TYrJYpnbx1Gz9PsXCsSqBQ+RETa0PF6J//72S7++VU+hgHd48N54sYLGJbRpdm1u0uq+e83N7CzuBqA23K6M3tK/2YbyIkEOoUPEZE28vXeMh58ZwsF5XUA3DQynYemDiDC6v0/vYZh8OqqA/z54x3YG1zER1h47PvZXN4/2Rdli7Q5hQ8RkVZWZXMw5+MdvPmNeyfa1JhQ/nTdIMZnNQ8TheV1/PqdzXy99ygA4/ol8vj3h5AYZW3XmkXak8KHiEgr+mxbMQ+9v5WSKjsAPxyTwa8nZ512ifR/rznAo5/spK7eSWhIEA9OzmL6hT0wmbRaqXRsCh8iIq2gsLyO332wjSU7SwHITIjg0esHM7pnfLNrDxyt5Vdvb2ZN4xTaUZlxPDYt+7SzXkQ6IoUPEZHzYHM4eWH5Pp5dloe9wUVIsIn/uqQnP7+8D6Eh3gNF6xtcvPjlPp5Zugebw0W4JZhfT87iR2O6N9vDRaQjU/gQETkHhmGwbNcRfrdwGweOugeUXtgrnj9cM4jeSc2nxa7ae5SH3t9KXmmN59q/TMsmPS68XesW8QcKHyIiLbTjcBV//ngHX+4pAyA52spDUwdw1eDUZuM1ymrs/PmjHby74RAACZEW/ueq/lx7QVeN7ZBOS+FDROQslVbZ+Otnu5mfW4jLAEtwEHdc1IN7L+9D5CnTZ+0NTv719X6eWZJHtb0BkwluHZ3BAxOziAkPOcN3EOkcFD5ERL5Dtc3BSyvz+ceKfdTVOwG4anAqv56cRUa8d7eJYRh8tr2EP3+8w9MdM6hrNH+8djAXpMe2d+kifknhQ0TkDGwOJ6+u2s9zy/ZyrM4BwAXpsTw0tf9pt7PfcrCSP3+8g1X73Gt2JEZZ+dWkfkwb1k0DSkVOovAhInKK+gYX/1lbwDNL8yitdq/X0TMhgvuv6MvU7ObjOvYeqeGvn+3i4y3FAFjMQdx9SU/uGderWXeMiCh8iIh42BxO5n1TwAsr9nG40gZA19gwfj6hD9cP7Yr5lE3giiqO89Tne3h7/UGcLgOTCa69oCu/mNiXbl00i0XkTBQ+RKTTq7Y5+PfqAl5auY+ymnoAkqKs3Du+NzeOzMBi9g4dBUfreG75Xt7OLcThNACY0D+ZX07qS1ZKdLvXLxJoFD5EpNMqqbLxr6/38/qaAiqPu8d0dOsSxj2X9uL7w7s1WyRsT0k1zy7bywebinC63KFjTM84HpiUxfDuzXepFZHTU/gQkU5nW1ElL32Zz8LNRZ4nFz0TI5gxrjffuyCNkFO6V7YequTvS/P4dHsxhvtyLu2byMzxvRnZo/nAUxH5dgofItIpOJwuPttWwmur97N6X7nn+Kgecdx5SSYT+icTfNKMFKfLYMmOEl75er9nx1mASQOTmXlZHwZ3i2nX+kU6EoUPEenQiittvPFNAfO+KfDMXAkOMnHV4FTuvDiTIaesvVFZ5+CtdYX8a9V+Dh47DkCQCb43JI2fXdabvslR7f0jiHQ4Ch8i0uE4nC6W7ixl/rpCvth1xDM+IyHSys2j0rl5VAZpsWFeX7OruJpXV+3n3fWHOO5wLyQWGx7CTSMz+OGYDM1eEWlFCh8i0mHsKq7mnfUHeXf9Qc+sFXBvWX9bTncmDkjxmrlSZXOwcFMRb607yKbCCs/xrJQobr+wB9dc0JUwi/egUxE5fwofIhLQDlUc54ONRby/8RA7i6s9xxMirUwb3pUfDE/32mXW5TJYk1/O/HWFfLz1MDaHCwBzkIkJ/ZOZfmEPxvSM06ZvIm1I4UNEAk5heR2fbivm023FrN1/zHM8JNjEZf2S+MGIdMb1S/TMWjEMg+2Hq1i46TAfbi7yjOUA6J0UyY0j0rluWFcSIq3t/rOIdEYKHyLi9wzDYHdJDZ9uK2bR1mK2H67yOj86M45rh3blykGpXjvG5pVW88Gmw3y4qYh9ZbWe45FWM1cPSeWGEelckB6rpxwi7UzhQ0T8UoPTxaaDlXy2vZjPtpWQf1J4CDK5x3FMGpjCpIEpnsGjLpfB+oJjfL69hMXbS9hTWuP5Gqs5iPFZSUzNTmN8VpLGcoj4kMKHiPiNgqN1fJl3hC93l/HV3jKqbQ2ecxZzEJf0TmDSwBQu759EfGMXSY29gcXbS/h8ewlLdpZSVmP3fE1IsImxfRK5ekgaEwYka5M3ET+h30QR8ZnK4w5W7zvKl3uO8OWeMg4crfM6HxMWwti+iUwemMKl/RKJtJobn4hU8O/VBXyVV8b6gmM0NE6lBYiymhmXlcSE/kmM65dETFjIqd9WRHxM4UNE2oVhGByqOM66/cdYd6CcdfuPsauk2rNcObhnnAzr3oWxfRK4uE8ig7u6VxHdU1rN2+sKWZl3lNX7jlJjb/C6d3pcGJdnJTOhfzKjMuOabQQnIv5F4UNE2kRdfQM7Dlex9VAV6w4cY93+cs829SfrmRDBJX0SuKRPImN6xQOwqbCC5buO8LfFu9lw4BjVp4SN2PAQLuwVz8W9E7m4dwIZ8VoATCSQKHyIyHk7VlvPtqIqthVVsq2oiq1FleSX1Xo91QD3k42BXWMY0b0LI3t0YXC3WI7W2Nl6qIqlu0p54vPd7DhcheuUrwu3BDMsowsX9o7nkt6JDEiL9tqHRUQCi8KHiLRIWY2d9QeONYaNKrYXVVJ0micaAElRVgamRXNBehd6JkYQYQ2msPw424oqeXpJHrtLqr3GazTpGhvG8O5dPK+slCjMwepKEekoFD5EpEXe31jE//twe7Pj3ePDGZAaTUKkldCQIEKCg6g47iCvpIZXvs7nWJ3jtPeLDQ9hcNcYBqbFMKhrNMO7dyE1Juy014pIx6DwISIt0icpkpBgE1GhIURazUSFmomwmimvrWfpzlLsDa7Tfp3JBBlx4fROjGRAWjQD02IY3C2GtJhQLfIl0sm0WfiYO3cujz/+OMXFxQwZMoRnnnmGUaNGtdW3E5Hz1OB0UV5XT3ltPSVVdoorj3O40kZxpY3DlTZKqtz/Vh53P8Eor3Vfe6rgIBMZceH0SYqkT3IkfZKi6J0USe+kSEJDtLCXiLRR+PjPf/7DrFmzeP755xk9ejRPPvkkkyZNYteuXSQlJbXFtxSRRoZhUFvvpOq4gyqbg2pbg+fjquMNHK2tp7zWztGaeo7W1nO0xs7R2noqztAtcjqRVjMZceFkxIXTPT6c9MZ/M+LCSYsN8+ypIiJyOibDOHU8+vkbPXo0I0eO5O9//zsALpeL9PR07r33Xh588MFv/dqqqipiYmKorKwkOjq6tUsT8Rmny8DhdGFvcOFwuqhv/PfEMcNz3OZwctzhpK7eia3x3+P17mPH608+3kBdvZNqWwPVdne4qLY5ms0WOVsmE3QJt5AUZSU1JpSUmFBSosM8Hzf9GxWqhbtExFtL/n63+pOP+vp6cnNzmT17tudYUFAQEyZMYNWqVc2ut9vt2O0nlkOuqqpqdk1rKKux8/eleW1y70DXBvnznBmAYYCBuyb3xzRO2TzpWOM1TaV7fZ3XMeOkr/c+duI6w3NPp2Hgchk4DQOny8Dl+RfP8RPnT3fsxMcNToN654mgca6B4FyFBJuIDg0hOiyEqFAz0aHuf+MiLMRHWomPsBAfaSEuwkJCpJW4CAtdwi2awioiba7Vw0dZWRlOp5Pk5GSv48nJyezcubPZ9XPmzOH3v/99a5fRTNVxB698vb/Nv4/I2QoJNmEJDiLE7J4ZYgkOwmIOwhxkIswSTGhIMOEW96vp47CQYMIs5pM+dh+PCj0RMKJDzUSHhWA1B2kgp4j4JZ/Pdpk9ezazZs3yfF5VVUV6enqrf5/YcAszL+vd6vc9H/70d8GPSgGTCRMn2seECZMJ72ONH7iPn/xx82NN15tO3L7xOtNJ38N9IthkIjgIgkwmgoPcL9NpjgcFNR0znXTtSedNJkKCg9wBw+wOFiGN4aLpuIKBiHRWrR4+EhISCA4OpqSkxOt4SUkJKSkpza63Wq1YrdbWLqOZuAgLv5zUr82/j4iIiHy7Vh+SbrFYGD58OEuWLPEcc7lcLFmyhJycnNb+diIiIhJg2qTbZdasWUyfPp0RI0YwatQonnzySWpra7njjjva4tuJiIhIAGmT8HHjjTdy5MgRHn74YYqLi7ngggtYtGhRs0GoIiIi0vm0yTof50PrfIiIiASelvz91jKEIiIi0q4UPkRERKRdKXyIiIhIu1L4EBERkXal8CEiIiLtSuFDRERE2pXCh4iIiLQrhQ8RERFpVwofIiIi0q7aZHn189G04GpVVZWPKxEREZGz1fR3+2wWTve78FFdXQ1Aenq6jysRERGRlqquriYmJuZbr/G7vV1cLhdFRUVERUVRXV1Neno6hYWF2uflLFVVVanNWkht1nJqs5ZRe7Wc2qzlfN1mhmFQXV1NWloaQUHfPqrD7558BAUF0a1bNwBMJhMA0dHRevO1kNqs5dRmLac2axm1V8upzVrOl232XU88mmjAqYiIiLQrhQ8RERFpV34dPqxWK4888ghWq9XXpQQMtVnLqc1aTm3WMmqvllObtVwgtZnfDTgVERGRjs2vn3yIiIhIx6PwISIiIu1K4UNERETalcKHiIiItCu/CB+/+93vMJlMXq+srCzPeZvNxowZM4iPjycyMpJp06ZRUlLiw4rb34oVK7j66qtJS0vDZDLx3nvveZ03DIOHH36Y1NRUwsLCmDBhAnv27PG6pry8nFtvvZXo6GhiY2O58847qampacefov18V3vdfvvtzd5zkydP9rqmM7UXwJw5cxg5ciRRUVEkJSVx7bXXsmvXLq9rzuZ3saCggKuuuorw8HCSkpJ44IEHaGhoaM8fpV2cTXuNGzeu2fvsnnvu8bqms7QXwHPPPUd2drZnEaycnBw++eQTz3m9v5r7rjYL1PeYX4QPgIEDB3L48GHPa+XKlZ5z999/PwsXLmT+/PksX76coqIirr/+eh9W2/5qa2sZMmQIc+fOPe35xx57jKeffprnn3+eNWvWEBERwaRJk7DZbJ5rbr31VrZt28bixYv58MMPWbFiBXfffXd7/Qjt6rvaC2Dy5Mle77k333zT63xnai+A5cuXM2PGDFavXs3ixYtxOBxMnDiR2tpazzXf9bvodDq56qqrqK+v5+uvv+Zf//oXr7zyCg8//LAvfqQ2dTbtBXDXXXd5vc8ee+wxz7nO1F4A3bp149FHHyU3N5d169Yxfvx4rrnmGrZt2wbo/XU639VmEKDvMcMPPPLII8aQIUNOe66iosIICQkx5s+f7zm2Y8cOAzBWrVrVThX6F8BYsGCB53OXy2WkpKQYjz/+uOdYRUWFYbVajTfffNMwDMPYvn27ARhr1671XPPJJ58YJpPJOHToULvV7guntpdhGMb06dONa6655oxf05nbq0lpaakBGMuXLzcM4+x+Fz/++GMjKCjIKC4u9lzz3HPPGdHR0Ybdbm/fH6CdndpehmEYl156qfHzn//8jF/TmdurSZcuXYz/+7//0/urBZrazDAC9z3mN08+9uzZQ1paGj179uTWW2+loKAAgNzcXBwOBxMmTPBcm5WVRUZGBqtWrfJVuX4lPz+f4uJirzaKiYlh9OjRnjZatWoVsbGxjBgxwnPNhAkTCAoKYs2aNe1esz9YtmwZSUlJ9OvXj5/+9KccPXrUc07tBZWVlQDExcUBZ/e7uGrVKgYPHkxycrLnmkmTJlFVVeX1/9Q6olPbq8nrr79OQkICgwYNYvbs2dTV1XnOdeb2cjqdzJs3j9raWnJycvT+OguntlmTQHyP+cXGcqNHj+aVV16hX79+HD58mN///vdccsklbN26leLiYiwWC7GxsV5fk5ycTHFxsW8K9jNN7XDym6vp86ZzxcXFJCUleZ03m83ExcV1ynacPHky119/PZmZmezdu5ff/OY3TJkyhVWrVhEcHNzp28vlcnHfffdx0UUXMWjQIICz+l0sLi4+7fuw6VxHdbr2Arjlllvo3r07aWlpbN68mV//+tfs2rWLd999F+ic7bVlyxZycnKw2WxERkayYMECBgwYwMaNG/X+OoMztRkE7nvML8LHlClTPB9nZ2czevRounfvzltvvUVYWJgPK5OO6qabbvJ8PHjwYLKzs+nVqxfLli3j8ssv92Fl/mHGjBls3brVa+yVnNmZ2uvkMUKDBw8mNTWVyy+/nL1799KrV6/2LtMv9OvXj40bN1JZWcnbb7/N9OnTWb58ua/L8mtnarMBAwYE7HvMb7pdThYbG0vfvn3Jy8sjJSWF+vp6KioqvK4pKSkhJSXFNwX6maZ2OHVU+MltlJKSQmlpqdf5hoYGysvL1Y5Az549SUhIIC8vD+jc7TVz5kw+/PBDvvjiC7p16+Y5fja/iykpKad9Hzad64jO1F6nM3r0aACv91lnay+LxULv3r0ZPnw4c+bMYciQITz11FN6f32LM7XZ6QTKe8wvw0dNTQ179+4lNTWV4cOHExISwpIlSzznd+3aRUFBgVefV2eWmZlJSkqKVxtVVVWxZs0aTxvl5ORQUVFBbm6u55qlS5ficrk8b9bO7ODBgxw9epTU1FSgc7aXYRjMnDmTBQsWsHTpUjIzM73On83vYk5ODlu2bPEKbosXLyY6OtrzmLij+K72Op2NGzcCeL3POkt7nYnL5cJut+v91QJNbXY6AfMe89lQ15P84he/MJYtW2bk5+cbX331lTFhwgQjISHBKC0tNQzDMO655x4jIyPDWLp0qbFu3TojJyfHyMnJ8XHV7au6utrYsGGDsWHDBgMw/va3vxkbNmwwDhw4YBiGYTz66KNGbGys8f777xubN282rrnmGiMzM9M4fvy45x6TJ082hg4daqxZs8ZYuXKl0adPH+Pmm2/21Y/Upr6tvaqrq41f/vKXxqpVq4z8/Hzj888/N4YNG2b06dPHsNlsnnt0pvYyDMP46U9/asTExBjLli0zDh8+7HnV1dV5rvmu38WGhgZj0KBBxsSJE42NGzcaixYtMhITE43Zs2f74kdqU9/VXnl5ecYf/vAHY926dUZ+fr7x/vvvGz179jTGjh3ruUdnai/DMIwHH3zQWL58uZGfn29s3rzZePDBBw2TyWR89tlnhmHo/XU639Zmgfwe84vwceONNxqpqamGxWIxunbtatx4441GXl6e5/zx48eNn/3sZ0aXLl2M8PBw47rrrjMOHz7sw4rb3xdffGEAzV7Tp083DMM93fahhx4ykpOTDavValx++eXGrl27vO5x9OhR4+abbzYiIyON6Oho44477jCqq6t98NO0vW9rr7q6OmPixIlGYmKiERISYnTv3t246667vKaiGUbnai/DME7bXoDx8ssve645m9/F/fv3G1OmTDHCwsKMhIQE4xe/+IXhcDja+adpe9/VXgUFBcbYsWONuLg4w2q1Gr179zYeeOABo7Ky0us+naW9DMMwfvzjHxvdu3c3LBaLkZiYaFx++eWe4GEYen+dzre1WSC/x0yGYRjt95xFREREOju/HPMhIiIiHZfCh4iIiLQrhQ8RERFpVwofIiIi0q4UPkRERKRdKXyIiIhIu1L4EBERkXal8CEiIiLtSuFDRERE2pXCh4iIiLQrhQ8RERFpVwofIiIi0q7+P8GffTFjxdiZAAAAAElFTkSuQmCC", "text/plain": [ - "
" + "" ] }, + "execution_count": 41, "metadata": {}, - "output_type": "display_data" + "output_type": "execute_result" } ], "source": [ - "# Number of components, for easier definition\n", - "nc = 2\n", - "\n", - "# kij and lij matrices\n", - "k12 = 0.1\n", - "lij = kij = np.zeros((nc,nc))\n", - "kij[0,1] = kij[1,0] = k12\n", - "\n", - "mixrule = yaeos.QMR(kij, lij)\n", - "\n", - "# Critical constants\n", - "Tc = [320, 375]\n", - "Pc = [30, 45]\n", - "w = [0.0123, 0.045]\n", - "\n", - "model = yaeos.PengRobinson76(Tc, Pc, w, mixrule)\n", - "\n", - "z = [0.3, 0.7]\n", - "\n", - "T, P = yaeos.yaeos_c.pt2_phase_envelope(model.id, z, kind=\"bubble\", t0=200.)\n", - "\n", - "plt.plot(T, P)" + "interact(run, i=[0, 1, 2], x=(0.0001, 0.9999, 0.01))" ] }, { "cell_type": "code", - "execution_count": null, - "id": "aa12d21e", + "execution_count": 39, + "id": "33c5ab76", "metadata": {}, "outputs": [ { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mThe Kernel crashed while executing code in the current cell or a previous cell. \n", - "\u001b[1;31mPlease review the code in the cell(s) to identify a possible cause of the failure. \n", - "\u001b[1;31mClick here for more info. \n", - "\u001b[1;31mView Jupyter log for further details." - ] + "data": { + "text/plain": [ + "array([0.45, 0.2 , 0.45])" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ + "x = 0.1\n", "\n", - "z = [0.7, 0.3]\n", - "\n", - "T, P = yaeos.yaeos_c.pt2_phase_envelope(model.id, z, kind=\"dew\", p0=1)\n", - "plt.plot(T, P)\n", + "z = np.array([0.4, 0.2, 0.4])\n", + "exclude = [1]\n", + "mask = np.ones(z.shape, bool)\n", + "mask[exclude] = False\n", "\n", - "T, P = yaeos.yaeos_c.pt2_phase_envelope(model.id, z, kind=\"dew\", p0=5)\n", - "plt.plot(T, P)\n" + "z[mask] = (1 - x)/2\n", + "z" ] }, { "cell_type": "code", "execution_count": null, - "id": "05e249d2", + "id": "ee33ac44", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, - "id": "c9031f69", + "id": "bb46893e", "metadata": {}, "outputs": [], "source": [] diff --git a/python/yaeos/__init__.py b/python/yaeos/__init__.py index 7a356bfc8..81a72ab67 100644 --- a/python/yaeos/__init__.py +++ b/python/yaeos/__init__.py @@ -1,5 +1,13 @@ from yaeos.compiled_module.yaeos_compiled import yaeos_c -from yaeos.core import MHV, NRTL, PengRobinson76, QMR +from yaeos.core import ( + SoaveRedlichKwong, PengRobinson76, PengRobinson78, RKPR, + MHV, QMR +) -__all__ = ["yaeos_c", "PengRobinson76", "QMR", "NRTL", "MHV"] + +__all__ = [ + "yaeos_c", + "SoaveRedlichKwong", "PengRobinson76", "PengRobinson78", "RKPR", + "QMR", "NRTL", "MHV" + ] diff --git a/python/yaeos/core.py b/python/yaeos/core.py index 2e45a6722..8a94dc74e 100644 --- a/python/yaeos/core.py +++ b/python/yaeos/core.py @@ -111,6 +111,10 @@ def __init__(self, tc, pc, w): self.pc = pc self.w = w + def set_mixrule(self, mixrule: CubicMixRule): + self.mixrule = mixrule + self.mixrule.set_mixrule(self.id) + class QMR(ABC): @@ -136,12 +140,55 @@ def set_mixrule(self, ar_model_id): class PengRobinson76(CubicEoS): name = "PengRobinson76" - def __init__(self, tc, pc, w, mixrule: CubicMixRule): + def __init__(self, tc, pc, w, mixrule: CubicMixRule = None): super(PengRobinson76, self).__init__(tc, pc, w) self.id = yaeos_c.pr76(self.tc, self.pc, self.w) self.mixrule = mixrule - mixrule.set_mixrule(self.id) + if mixrule: + mixrule.set_mixrule(self.id) - def set_mixrule(self, mixrule: CubicMixRule): + +class PengRobinson78(CubicEoS): + name = "PengRobinson78" + + def __init__(self, tc, pc, w, mixrule: CubicMixRule = None): + super(PengRobinson78, self).__init__(tc, pc, w) + self.id = yaeos_c.pr78(self.tc, self.pc, self.w) self.mixrule = mixrule - self.mixrule.set_mixrule(self.id) + if mixrule: + mixrule.set_mixrule(self.id) + + +class SoaveRedlichKwong(CubicEoS): + name = "SoaveReldichKwong" + + def __init__(self, tc, pc, w, mixrule: CubicMixRule = None): + super(SoaveRedlichKwong, self).__init__(tc, pc, w) + self.id = yaeos_c.srk(self.tc, self.pc, self.w) + if mixrule: + mixrule.set_mixrule(self.id) + + +class RKPR(CubicEoS): + name = "RKPR" + + def __init__( + self, tc, pc, w, zc, k=None, delta_1=None, mixrule: CubicMixRule = None + ): + super(RKPR, self).__init__(tc, pc, w) + self.zc = zc + match (k is None, delta_1 is None): + case (True, True): + self.id = yaeos_c.rkpr(self.tc, self.pc, self.w, self.zc) + case (False, True): + self.id = yaeos_c.rkpr(self.tc, self.pc, self.w, self.zc, k=k) + case (True, False): + self.id = yaeos_c.rkpr( + self.tc, self.pc, self.w, self.zc, delta_1=delta_1 + ) + case (False, False): + self.id = yaeos_c.rkpr( + self.tc, self.pc, self.w, self.zc, k=k, delta_1=delta_1 + ) + if mixrule: + mixrule.set_mixrule(self.id) diff --git a/python/yaeos/fortran_wrap/yaeos_c.f90 b/python/yaeos/fortran_wrap/yaeos_c.f90 index 8e1a64157..3c5e6af86 100644 --- a/python/yaeos/fortran_wrap/yaeos_c.f90 +++ b/python/yaeos/fortran_wrap/yaeos_c.f90 @@ -19,7 +19,7 @@ module yaeos_c private ! CubicEoS - public :: srk, pr76, pr78 + public :: srk, pr76, pr78, rkpr ! Mixing rules public :: set_mhv, set_qmr @@ -198,14 +198,32 @@ subroutine pr78(tc, pc, w, id) call extend_ar_models_list(id) end subroutine pr78 - subroutine srk(tc, pc, w, kij, lij, id) + subroutine srk(tc, pc, w, id) use yaeos, only: SoaveRedlichKwong - real(c_double), intent(in) :: tc(:), pc(:), w(:), kij(:, :), lij(:, :) + real(c_double), intent(in) :: tc(:), pc(:), w(:) integer(c_int), intent(out) :: id - ar_model = SoaveRedlichKwong(tc, pc, w, kij, lij) + ar_model = SoaveRedlichKwong(tc, pc, w) call extend_ar_models_list(id) end subroutine srk + subroutine rkpr(tc, pc, w, zc, delta_1, k, id) + use yaeos, only: fRKPR => RKPR + real(c_double), intent(in) :: tc(:), pc(:), w(:), zc(:) + real(c_double), optional, intent(in) :: delta_1(:), k(:) + integer(c_int), intent(out) :: id + + if (present(delta_1) .and. present(k)) then + ar_model = fRKPR(tc, pc, w, zc, delta_1=delta_1, k=k) + elseif (present(delta_1)) then + ar_model = fRKPR(tc, pc, w, zc, delta_1=delta_1) + elseif (present(k)) then + ar_model = fRKPR(tc, pc, w, zc, k=k) + else + ar_model = fRKPR(tc, pc, w, zc) + end if + call extend_ar_models_list(id) + end subroutine rkpr + ! ========================================================================== ! Thermodynamic properties ! -------------------------------------------------------------------------- @@ -301,7 +319,7 @@ subroutine saturation_pressure(id, z, T, kind, P, x, y, Vx, Vy, beta) call equilibria_state_to_arrays(sat, x, y, P, aux, Vx, Vy, beta) end subroutine saturation_pressure - subroutine pt2_phase_envelope(id, z, kind, Ts, Ps, T0, P0) + subroutine pt2_phase_envelope(id, z, kind, Ts, Ps, tcs, pcs, T0, P0) use yaeos, only: & saturation_pressure, saturation_temperature, pt_envelope_2ph, & EquilibriaState, PTEnvel2 @@ -310,9 +328,10 @@ subroutine pt2_phase_envelope(id, z, kind, Ts, Ps, T0, P0) character(len=15), intent(in) :: kind real(c_double), intent(out) :: Ts(1000) real(c_double), intent(out) :: Ps(1000) + real(c_double), intent(out) :: Tcs(5), Pcs(5) real(c_double), optional, intent(in) :: T0, P0 - real(8) :: makenan + real(8) :: makenan, nan type(EquilibriaState) :: sat type(PTEnvel2) :: env @@ -320,15 +339,14 @@ subroutine pt2_phase_envelope(id, z, kind, Ts, Ps, T0, P0) real(c_double) :: T, P - makenan=0 neval = neval + 1 - print *, neval - - - Ts = makenan/makenan - Ps = makenan/makenan + nan = makenan/makenan + Ts = nan + Ps = nan + Tcs = nan + Pcs = nan if (present(T0)) then T = T0 @@ -342,7 +360,6 @@ subroutine pt2_phase_envelope(id, z, kind, Ts, Ps, T0, P0) P = 1 end if - print *, T, P select case(kind) case("bubble") sat = saturation_pressure(ar_models(id)%model, z, T=T, kind=kind) @@ -357,5 +374,9 @@ subroutine pt2_phase_envelope(id, z, kind, Ts, Ps, T0, P0) i = size(env%points) Ts(:i) = env%points%T Ps(:i) = env%points%P + + i = size(env%cps) + Tcs(:i) = env%cps%T + Pcs(:i) = env%cps%P end subroutine pt2_phase_envelope end module yaeos_c From 2aded777e86eaaa72663464edcfc4627af36b074 Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Sun, 14 Jul 2024 20:31:47 -0300 Subject: [PATCH 121/167] slider --- python/docs/tutorials/tutorial.ipynb | 220 ++++++++++++--------------- 1 file changed, 98 insertions(+), 122 deletions(-) diff --git a/python/docs/tutorials/tutorial.ipynb b/python/docs/tutorials/tutorial.ipynb index 1e63c8450..685e97ff7 100644 --- a/python/docs/tutorials/tutorial.ipynb +++ b/python/docs/tutorials/tutorial.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "id": "3a2bdbde-7f69-4b8f-ad42-4eb89c90167f", "metadata": {}, "outputs": [], @@ -243,17 +243,17 @@ "import yaeos\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", - "import chemicals" + "import chemicals\n" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 24, "id": "9de1de8b", "metadata": {}, "outputs": [], "source": [ - "names = [\"methane\", \"n-decane\", \"n-eicosane\"]\n", + "names = [\"methane\", \"n-decane\", \"water\", \"hexatriacontane\"]\n", "chems = []\n", "\n", "Tc = []\n", @@ -268,35 +268,30 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 25, "id": "21c0ea1a", "metadata": {}, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " 150.00000000000000 1.0000000000000000E-002\n", - " 150.00000000000000 1.0000000000000000E-002\n", - " 150.00000000000000 1.0000000000000000E-002\n", - " 3.2517524980397385 \n" - ] - }, { "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "49e6c6e5908c42529dfdd26ca2572480", + "version_major": 2, + "version_minor": 0 + }, + "image/png": "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", + "text/html": [ + "\n", + "
\n", + "
\n", + " Figure 11\n", + "
\n", + " \n", + "
\n", + " " + ], "text/plain": [ - "" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" ] }, "metadata": {}, @@ -304,7 +299,8 @@ } ], "source": [ - "z = [0.4, 0.2, 0.4]\n", + "z = np.ones(len(names))\n", + "z = z/z.sum()\n", "\n", "models = [\n", " yaeos.PengRobinson76,\n", @@ -317,90 +313,37 @@ " T, P, Tcs, Pcs = yaeos.yaeos_c.pt2_phase_envelope(model.id, z, kind=\"dew\", t0=150, p0=0.01)\n", " plt.plot(T, P, label=model.name)\n", " plt.scatter(Tcs, Pcs, label=model.name + \"-CP\")\n", - "plt.legend()" + "\n", + "plt.legend()\n", + "plt.show()" ] }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 26, "id": "da909167", "metadata": {}, "outputs": [], "source": [ - "from ipywidgets import interact, interactive, fixed, interact_manual\n", + "from ipywidgets import interact, fixed\n", "import ipywidgets as widgets" ] }, { "cell_type": "code", - "execution_count": 42, - "id": "b7c51676", - "metadata": {}, - "outputs": [ - { - "ename": "RuntimeError", - "evalue": "'widget is not a recognised GUI loop or backend name", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mRuntimeError\u001b[0m Traceback (most recent call last)", - "File \u001b[0;32m~/docs/programming/python/virtualenvs/thermo/lib/python3.12/site-packages/matplotlib/backends/registry.py:404\u001b[0m, in \u001b[0;36mBackendRegistry.resolve_gui_or_backend\u001b[0;34m(self, gui_or_backend)\u001b[0m\n\u001b[1;32m 403\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 404\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mresolve_backend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mgui_or_backend\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 405\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m: \u001b[38;5;66;03m# KeyError ?\u001b[39;00m\n", - "File \u001b[0;32m~/docs/programming/python/virtualenvs/thermo/lib/python3.12/site-packages/matplotlib/backends/registry.py:367\u001b[0m, in \u001b[0;36mBackendRegistry.resolve_backend\u001b[0;34m(self, backend)\u001b[0m\n\u001b[1;32m 366\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m gui \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m--> 367\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mRuntimeError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mbackend\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m is not a recognised backend name\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 369\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m backend, gui \u001b[38;5;28;01mif\u001b[39;00m gui \u001b[38;5;241m!=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mheadless\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n", - "\u001b[0;31mRuntimeError\u001b[0m: 'widget' is not a recognised backend name", - "\nDuring handling of the above exception, another exception occurred:\n", - "\u001b[0;31mRuntimeError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[42], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mget_ipython\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrun_line_magic\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mmatplotlib\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mwidget\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 2\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mrun\u001b[39m(i, x):\n\u001b[1;32m 3\u001b[0m z \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39marray([\u001b[38;5;241m1.0\u001b[39m, \u001b[38;5;241m1.0\u001b[39m, \u001b[38;5;241m1.0\u001b[39m])\n", - "File \u001b[0;32m~/docs/programming/python/virtualenvs/thermo/lib/python3.12/site-packages/IPython/core/interactiveshell.py:2480\u001b[0m, in \u001b[0;36mInteractiveShell.run_line_magic\u001b[0;34m(self, magic_name, line, _stack_depth)\u001b[0m\n\u001b[1;32m 2478\u001b[0m kwargs[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mlocal_ns\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mget_local_scope(stack_depth)\n\u001b[1;32m 2479\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbuiltin_trap:\n\u001b[0;32m-> 2480\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[43mfn\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 2482\u001b[0m \u001b[38;5;66;03m# The code below prevents the output from being displayed\u001b[39;00m\n\u001b[1;32m 2483\u001b[0m \u001b[38;5;66;03m# when using magics with decorator @output_can_be_silenced\u001b[39;00m\n\u001b[1;32m 2484\u001b[0m \u001b[38;5;66;03m# when the last Python token in the expression is a ';'.\u001b[39;00m\n\u001b[1;32m 2485\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mgetattr\u001b[39m(fn, magic\u001b[38;5;241m.\u001b[39mMAGIC_OUTPUT_CAN_BE_SILENCED, \u001b[38;5;28;01mFalse\u001b[39;00m):\n", - "File \u001b[0;32m~/docs/programming/python/virtualenvs/thermo/lib/python3.12/site-packages/IPython/core/magics/pylab.py:103\u001b[0m, in \u001b[0;36mPylabMagics.matplotlib\u001b[0;34m(self, line)\u001b[0m\n\u001b[1;32m 98\u001b[0m \u001b[38;5;28mprint\u001b[39m(\n\u001b[1;32m 99\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mAvailable matplotlib backends: \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 100\u001b[0m \u001b[38;5;241m%\u001b[39m _list_matplotlib_backends_and_gui_loops()\n\u001b[1;32m 101\u001b[0m )\n\u001b[1;32m 102\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 103\u001b[0m gui, backend \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mshell\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43menable_matplotlib\u001b[49m\u001b[43m(\u001b[49m\u001b[43margs\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgui\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mlower\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mif\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43misinstance\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43margs\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgui\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mstr\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01melse\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgui\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 104\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_show_matplotlib_backend(args\u001b[38;5;241m.\u001b[39mgui, backend)\n", - "File \u001b[0;32m~/docs/programming/python/virtualenvs/thermo/lib/python3.12/site-packages/IPython/core/interactiveshell.py:3665\u001b[0m, in \u001b[0;36mInteractiveShell.enable_matplotlib\u001b[0;34m(self, gui)\u001b[0m\n\u001b[1;32m 3662\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mmatplotlib_inline\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mbackend_inline\u001b[39;00m\n\u001b[1;32m 3664\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mIPython\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mcore\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m pylabtools \u001b[38;5;28;01mas\u001b[39;00m pt\n\u001b[0;32m-> 3665\u001b[0m gui, backend \u001b[38;5;241m=\u001b[39m \u001b[43mpt\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfind_gui_and_backend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mgui\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpylab_gui_select\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 3667\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m gui \u001b[38;5;241m!=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 3668\u001b[0m \u001b[38;5;66;03m# If we have our first gui selection, store it\u001b[39;00m\n\u001b[1;32m 3669\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mpylab_gui_select \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", - "File \u001b[0;32m~/docs/programming/python/virtualenvs/thermo/lib/python3.12/site-packages/IPython/core/pylabtools.py:348\u001b[0m, in \u001b[0;36mfind_gui_and_backend\u001b[0;34m(gui, gui_select)\u001b[0m\n\u001b[1;32m 346\u001b[0m backend, gui \u001b[38;5;241m=\u001b[39m backend_registry\u001b[38;5;241m.\u001b[39mresolve_backend(backend)\n\u001b[1;32m 347\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 348\u001b[0m backend, gui \u001b[38;5;241m=\u001b[39m \u001b[43mbackend_registry\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mresolve_gui_or_backend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mgui\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 350\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m gui, backend\n\u001b[1;32m 352\u001b[0m \u001b[38;5;66;03m# Fallback to previous behaviour (Matplotlib < 3.9)\u001b[39;00m\n", - "File \u001b[0;32m~/docs/programming/python/virtualenvs/thermo/lib/python3.12/site-packages/matplotlib/backends/registry.py:406\u001b[0m, in \u001b[0;36mBackendRegistry.resolve_gui_or_backend\u001b[0;34m(self, gui_or_backend)\u001b[0m\n\u001b[1;32m 404\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mresolve_backend(gui_or_backend)\n\u001b[1;32m 405\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m: \u001b[38;5;66;03m# KeyError ?\u001b[39;00m\n\u001b[0;32m--> 406\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mRuntimeError\u001b[39;00m(\n\u001b[1;32m 407\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mgui_or_backend\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m is not a recognised GUI loop or backend name\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", - "\u001b[0;31mRuntimeError\u001b[0m: 'widget is not a recognised GUI loop or backend name" - ] - } - ], - "source": [ - "def run(i, x):\n", - " z = np.array([1.0, 1.0, 1.0])\n", - " z[i] = x\n", - " exclude = [i]\n", - " mask = np.ones(z.shape, bool)\n", - " mask[exclude] = False\n", - " z[mask] = (1 - x)/2\n", - " \n", - " z = z/sum(z)\n", - " print(z)\n", - "\n", - " models = [\n", - " yaeos.PengRobinson76,\n", - " yaeos.PengRobinson78,\n", - " yaeos.SoaveRedlichKwong,\n", - " ]\n", - "\n", - " for m in models:\n", - " model = m(Tc, Pc, w)\n", - " T, P, Tcs, Pcs = yaeos.yaeos_c.pt2_phase_envelope(model.id, z, kind=\"dew\", t0=150, p0=0.01)\n", - " plt.plot(T, P, label=model.name)\n", - " plt.scatter(Tcs, Pcs, label=model.name + \"-CP\", zorder=0)\n", - " plt.legend()\n", - " # plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 41, + "execution_count": 27, "id": "61e58514", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "65769afad4394149ad6241dd455f6922", + "model_id": "3544535a0a484cc29759fd8a07a81145", "version_major": 2, "version_minor": 0 }, "text/plain": [ - "interactive(children=(Dropdown(description='i', options=(0, 1, 2), value=0), FloatSlider(value=0.4901, descrip…" + "interactive(children=(Dropdown(description='i', options=(0, 1, 2, 3), value=0), FloatSlider(value=0.4901, desc…" ] }, "metadata": {}, @@ -409,59 +352,92 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 41, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" - } - ], - "source": [ - "interact(run, i=[0, 1, 2], x=(0.0001, 0.9999, 0.01))" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "33c5ab76", - "metadata": {}, - "outputs": [ + }, { "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "f2291cda697b49cf8c127fff2371992d", + "version_major": 2, + "version_minor": 0 + }, + "image/png": "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iXfcnDlzSElJYfjw4cTHx9OqVSuee+45vXHmPKdLwCIiJlTmcJH8+HyfrHvruHRCAv746ccwDBYvXsz8+fMZNGgQU6ZMITMzk1q1agGey5VfffUVU6ZM4bnnngPA4XDw1ltv0ahRIwBGjBjBuHHjvMt87bXXGDt2LNdddx0Ar7/++knvXZs7dy5hYWE4nU7sdjtWq5XXX38dgJKSEt58802mTp1K3759AXj77bdZuHAh7777LqNHj/Yu54knnqBXr14ATJs2jTp16jBr1ixuuOGGk26z2+1m6tSphIeHA3DLLbewePFinn32WbKysnA6nfTv35969eoB0Lp1a+93X3jhBcaMGcNNN90EeMLukiVLeOWVV5g8ebJ3vlGjRtGvXz8AnnrqKVq2bMnu3btp3rx5pVrKy8uZPn06Dz/8cKXxe/bs4euvv2bw4MHMmzeP3bt3c/fdd+NwOHjiiSdOul3iewqAIiJyXjsevhwOB263m5tvvpmBAwcydepUmjZtWmleu91ObGys93NISIg3/AEkJiaSm5sLQEFBATk5OXTu3Nk73Waz0aFDB9xud6XlXnbZZbz55puUlJTw8ssv4+fnx4ABAwBPK53D4SA1NdU7v7+/P507d2bbtm2VlpOSkuL9e0xMDM2aNTthnl+qX7++N/z9uv62bdvSs2dPWrduTXp6Or1792bgwIFER0dTWFjIoUOHKtUEkJqayoYNGyqNa9OmTaXlA+Tm5p4QAGfNmkVRURFDhgypNN7tdhMXF8e//vUv7+938OBBnn/+eQXA85gCoIiICQX729g6Lt1n6/4jjoevgIAAatWqhZ+fHx999BE2m421a9dis1VeXlhYmPfv/v7+laZZLJY/dQk6NDSUxo0bA5573tq2bcu7775b6V64c+Fk9R8PpzabjYULF7JixQoWLFjAa6+9xiOPPMKqVasqheA/so7jrwj8dQAGz+XfK6+8kvj4+ErjExMT8ff3r7QfWrRoQXZ2NhUVFXoX73lK9wCKiJiQxWIhJMDPJ8MffQ/x8fBVt25d/Pw87Rbt27fH5XKRm5tL48aNKw0JCQmntdzIyEji4+MrPazhcrlYt27db37ParXy97//nUcffZSysjIaNWpEQEAAy5cv987jcDhYs2YNycnJlb77/fffe/+el5fHzp07adGixWnVezIWi4XU1FSeeuopfvzxRwICApg1axYRERHUqlWrUk3geQjl1zWdjoyMDJYsWXLSwJuamsru3bsrhcadO3eSmJio8HceUwAUEZFqp2nTpgwePJhbb72Vzz77jIyMDFavXs348eP573//e9rLueeeexg/fjyff/45O3bsYOTIkeTl5f1uSL3++uux2WxMnjyZ0NBQhg0bxujRo/nqq6/YunUrd9xxB6WlpScEpnHjxrF48WI2b97M0KFDqVGjxglPHJ+uVatW8dxzz/HDDz+QmZnJZ599xuHDh72BcvTo0UycOJGPPvqIHTt28PDDD7N+/XpGjhz5h9f13nvvkZiY6L3H8ZeGDRvG0aNHGTlyJDt37uS///0vzz33HMOHD/9T2yVVQ5eARUSkWpoyZQrPPPMMDz74IAcPHqRGjRp07dqVK6+88rSXMWbMGLKzs7n11lux2WzceeedpKenn3BZ+df8/PwYMWIEkyZNYtiwYUyYMAG3280tt9xCUVERHTt2ZP78+URHR1f63oQJExg5ciS7du2iXbt2fPHFF3+6lSwiIoJvvvmGV155hcLCQurVq8eLL77oDWn33nsvBQUFPPjgg+Tm5pKcnMycOXNo0qTJH1rP8QdRhg4detLfJSkpifnz53P//ffTpk0bateuzciRIxkzZsyf2i6pGhbjTJ/HN7HCwkIiIyMpKCggIiLC1+WIiJxUeXk5GRkZNGjQgKCgIF+Xc15zu920aNGCG264gaefftrX5cgZ+K3jXudvtQCKiIiJ7du3jwULFtC9e3fsdjuvv/46GRkZ3Hzzzb4uTeSc0j2AIiJiWlarlalTp9KpUydSU1PZtGkTixYtOqMHM0SqA7UAioiIaSUlJZ3wpKyIGagFUERERMRkFABFRERETKZaBsAnn3wSi8VSafjlK2vKy8sZPnw4sbGxhIWFMWDAAHJyciotIzMzk379+hESEkJcXByjR48+5cuvRURERC4k1fYewJYtW7Jo0SLv5+O9wwPcf//9/Pe//+Xjjz8mMjKSESNG0L9/f+99Hi6Xi379+pGQkMCKFSvIysri1ltvxd/f3/sCcREREZELVbUNgH5+fid93U9BQQHvvvsuM2bM4PLLLwc8nYW2aNGC77//nq5du7JgwQK2bt3KokWLiI+Pp127djz99NOMGTOGJ598Uq+uERERkQtatbwEDLBr1y5q1apFw4YNGTx4MJmZ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D3qfbn722Wf/1HZJ1bAYap/90woLC4mMjKSgoICIiAhflyMiclLl5eVkZGTQoEEDgoKCfF3Oec3tdtOiRQtuuOEGnn76aV+XI2fgt457nb/VAigiIia2b98+FixYQPfu3bHb7bz++utkZGRw8803+7o0kXNKD4GIiIhpWa1Wpk6dSqdOnUhNTWXTpk0sWrTojB7MEKkO1AIoIiKmlZSUdMKTsiJmoBZAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAERGR88TQoUN/993APXr04L777vN+rl+/Pq+88sppLX/q1KlERUX96frkwqEAKCIi57XDhw8zbNgw6tatS2BgIAkJCaSnp593/fdZLBbvEBERQadOnfj888/P+XrXrFnDnXfeedaW9+STT9KuXbtK47799luioqK477770BtkLwwKgCIicl4bMGAAP/74I9OmTWPnzp3MmTOHHj16cOTIEV+XdoIpU6aQlZXFDz/8QGpqKgMHDmTTpk3ndJ01a9YkJCTknC3/v//9L+np6TzwwAO88sorWCyWc7YuqToKgCIict7Kz8/n22+/ZeLEiVx22WXUq1ePzp07M3bsWK6++moAMjMzueaaawgLCyMiIoIbbriBnJwc7zJ++uknrrnmGuLj4wkLC6NTp04sWrTIO/3vf/87Xbp0OWHdbdu2Zdy4cd7P77zzDi1atCAoKIjmzZvzxhtvnPCdqKgoEhISaNq0KU8//TROp5MlS5Z4p+/fv58bbriBqKgoYmJiuOaaa9i7d+8pt7+kpIRbb72VsLAwEhMTefHFF0+Y59eXgPPz8/nb3/5GfHw8QUFBtGrVirlz51b6zvz582nRogVhYWH06dOHrKysk65/xowZ9O/fn0mTJvH4448DsHnzZqxWK4cPHwbg6NGjWK1WbrrpJu/3nnnmGbp16+b9vGzZMjp37kxgYCCJiYk8/PDDOJ1O7/QePXpw77338tBDDxETE0NCQgJPPvlkpVq2b99Ot27dCAoKIjk5mUWLFmGxWJg9e/Ypfz85NQVAERETMgyDUkepT4Y/cgkxLCyMsLAwZs+ejd1uP2G62+3mmmuu4ejRoyxbtoyFCxeyZ88ebrzxRu88xcXFXHHFFSxevJgff/yRPn36cNVVV5GZmQnA4MGDWb16NT/99JP3O1u2bGHjxo3cfPPNAEyfPp3HH3+cZ599lm3btvHcc8/x2GOPMW3atJPW7XQ6effddwEICAgAwOFwkJ6eTnh4ON9++y3Lly/3BrCKioqTLmf06NEsW7aMzz//nAULFrB06VLWrVt3yt/L7XbTt29fli9fzgcffMDWrVuZMGECNpvNO09paSkvvPAC77//Pt988w2ZmZmMGjXqhGVNnjyZ2267jffee48RI0Z4x7ds2ZLY2FiWLVsGeC4P//IzeAJfjx49ADh48CBXXHEFnTp1YsOGDbz55pu8++67PPPMM5XWN23aNEJDQ1m1ahWTJk1i3LhxLFy4EACXy8W1115LSEgIq1at4l//+hePPPLIKX8H+X16F7CIiAmVOcvoMuPEVq+qsOrmVYT4n94lSz8/P6ZOncodd9zBW2+9xUUXXUT37t256aabaNOmDYsXL2bTpk1kZGSQlJQEwL///W9atmzJmjVr6NSpE23btqVt27beZT799NPMmjWLOXPmMGLECFq2bEnbtm2ZMWMGjz32GOAJfF26dKFx48YAPPHEE7z44ov0798fgAYNGrB161b++c9/MmTIEO+yBw0ahM1mo6ysDLfbTf369bnhhhsA+Oijj3C73bzzzjvey6hTpkwhKiqKpUuX0rt370rbXlxczLvvvssHH3xAz549AU9IqlOnzil/r0WLFrF69Wq2bdtG06ZNAWjYsGGleRwOB2+99RaNGjUCYMSIEZVaOgG2bdvGiBEjePfddxk8eHClaRaLhUsvvZSlS5cycOBAli5dym233cY777zD9u3badSoEStWrOChhx4C4I033iApKYnXX38di8VC8+bNOXToEGPGjOHxxx/HavW0RbVp04YnnngCgCZNmvD666+zePFievXqxcKFC/npp59YunQpCQkJADz77LP06tXrlL+F/Da1AIqIyHltwIABHDp0iDlz5tCnTx+WLl3KRRddxNSpU9m2bRtJSUne8AeQnJxMVFQU27ZtAzxBatSoUbRo0YKoqCjCwsLYtm2btwUQPK2AM2bMADytox9++KE3+JSUlPDTTz9x++23e1skw8LCeOaZZyq1GgK8/PLLrF+/ni+//JLk5GTeeecdYmJiANiwYQO7d+8mPDzcu4yYmBjKy8tPWA54Ll1XVFRUujwdExNDs2bNTvlbrV+/njp16njD38mEhIR4wx9AYmIiubm5leapU6cOF110Ec8///xJLw93796dpUuXAp7Wvssvv9wbCtesWYPD4SA1NRXwhMmUlJRK9w6mpqZSXFzMgQMHvOPatGlTaR2/rGvHjh0kJSV5wx9A586dT7mN8vvUAigiYkLBfsGsunmVz9b9RwUFBdGrVy969erFY489xl//+leeeOIJHnzwwd/97qhRo1i4cCEvvPACjRs3Jjg4mIEDB1a67Dpo0CDGjBnDunXrKCsrY//+/d7LyMXFxQC8/fbbJ9wr+MtLqwAJCQk0btyYxo0bM2XKFK644gq2bt1KXFwcxcXFdOjQgenTp59QY82aNf/wb3IywcG//9v6+/tX+myxWE64LB8eHs6iRYvo1asXl112GUuWLCExMdE7/XhXNLt27WLr1q1069aN7du3s3TpUvLy8ujYseMffjDlZHW53e4/tAw5fQqAIiImZLFYTvsy7PkoOTmZ2bNn06JFC/bv38/+/fu9rYBbt24lPz+f5ORkAJYvX87QoUO57rrrAE+g+/WDF3Xq1KF79+5Mnz6dsrIyevXqRVxcHADx8fHUqlWLPXv2nHA59Ld07tyZDh068Oyzz/Lqq69y0UUX8dFHHxEXF0dERMTvfr9Ro0b4+/uzatUq6tatC0BeXh47d+6ke/fuJ/1OmzZtOHDgADt37vzNVsDTER0dzaJFi+jduzc9evRgyZIl1KpVC4DWrVsTHR3NM888Q7t27QgLC6NHjx5MnDiRvLw87/1/AC1atODTTz/FMAxvK+Dy5csJDw//zcvZv9SsWTP2799PTk4O8fHxgKf7G/nzdAlYRETOW0eOHOHyyy/ngw8+YOPGjWRkZPDxxx8zadIkrrnmGtLS0mjdujWDBw9m3bp1rF69mltvvZXu3bvTsWNHwHM/2Weffcb69evZsGEDN99880lblgYPHszMmTP5+OOPTwh6Tz31FOPHj+cf//gHO3fuZNOmTUyZMoWXXnrpN+u/7777+Oc//8nBgwcZPHgwNWrU4JprruHbb78lIyODpUuXcu+991a6FHpcWFgYt99+O6NHj+brr79m8+bNDB061HvP3Ml0796dSy+9lAEDBrBw4UIyMjL48ssv+eqrr07n5z5BVFQUCxcuJDo6mh49enDo0CHgf/cBTp8+3Rv22rRpg91uZ/HixZUC6t13383+/fu555572L59O59//jlPPPEEDzzwwG9uyy/16tWLRo0aMWTIEDZu3Mjy5ct59NFHvbXIH6cAKCIi562wsDC6dOnCyy+/zKWXXkqrVq147LHHuOOOO7wPFXz++edER0dz6aWXkpaWRsOGDfnoo4+8y3jppZeIjo7m4osv5qqrriI9PZ2LLrrohHUNHDiQI0eOUFpaesLbOP7617/yzjvvMGXKFFq3bk337t2ZOnUqDRo0+M36+/TpQ4MGDXj22WcJCQnhm2++oW7duvTv358WLVpw++23U15efsoWweeff55LLrmEq666irS0NLp160aHDh1+c52ffvopnTp1YtCgQSQnJ/PQQw/hcrl+8zu/JTIykgULFlCjRg26d+/OwYMHAU/YdLlc3gBotVq59NJLsVgs3vv/AGrXrs28efNYvXo1bdu25a677uL222/3BrjTYbPZmD17NsXFxXTq1Im//vWv3qeAg4KC/vS2mZnFUJfef1phYSGRkZEUFBScVnO+iIgvlJeXk5GRQYMGDXSylAvG8uXL6datG7t37670UMtxv3Xc6/ytewBFRESkGpg1axZhYWE0adKE3bt3M3LkSFJTU08a/uT3KQCKiIjIea+oqIgxY8aQmZlJjRo1SEtLO+mbUeT0KACKiIjIee/WW2/l1ltv9XUZFww9BCIiIiJiMgqAIiIiIiajACgiYhLq9EHMRMf7b1MAFBG5wB1/xVZpaamPKxGpOseP91+/Yk489BCIiMgFzmazERUVRW5uLgAhISF6e4JcsAzDoLS0lNzcXKKiok54X7N4KACKiJhAQkICgDcEilzooqKivMe9nEgBUETEBCwWC4mJicTFxeFwOHxdjsg55e/vr5a/36EAKCJiIjabTSdGEdFDICIiIiJmowAoIiIiYjIKgCIiIiImowAoIiIiYjIKgCIiIiImowAoIiIiYjIKgCIiIiImowAoIiIiYjIKgCIiIiImowAoIiIiYjIKgCIiIiImowAoIiIiYjIKgCIiIiImowAoIiIiYjIKgCIiIiImowAoIiIiYjIKgCIiIiImowAoIiIiYjIKgCIiIiImc0EEwAkTJmCxWLjvvvu848rLyxk+fDixsbGEhYUxYMAAcnJyKn0vMzOTfv36ERISQlxcHKNHj8bpdFZx9SIiIiJVq9oHwDVr1vDPf/6TNm3aVBp///3388UXX/Dxxx+zbNkyDh06RP/+/b3TXS4X/fr1o6KighUrVjBt2jSmTp3K448/XtWbICIiIlKlqnUALC4uZvDgwbz99ttER0d7xxcUFPDuu+/y0ksvcfnll9OhQwemTJnCihUr+P777wFYsGABW7du5YMPPqBdu3b07duXp59+msmTJ1NRUeGrTRIRERE556p1ABw+fDj9+vUjLS2t0vi1a9ficDgqjW/evDl169Zl5cqVAKxcuZLWrVsTHx/vnSc9PZ3CwkK2bNly0vXZ7XYKCwsrDSIiIiLVjZ+vC/izZs6cybp161izZs0J07KzswkICCAqKqrS+Pj4eLKzs73z/DL8HZ9+fNrJjB8/nqeeeuosVC8iIiLiO9WyBXD//v2MHDmS6dOnExQUVGXrHTt2LAUFBd5h//79VbZuERERkbOlWgbAtWvXkpuby0UXXYSfnx9+fn4sW7aMf/zjH/j5+REfH09FRQX5+fmVvpeTk0NCQgIACQkJJzwVfPzz8Xl+LTAwkIiIiEqDiIiISHVTLQNgz5492bRpE+vXr/cOHTt2ZPDgwd6/+/v7s3jxYu93duzYQWZmJikpKQCkpKSwadMmcnNzvfMsXLiQiIgIkpOTq3ybRERERKpKtbwHMDw8nFatWlUaFxoaSmxsrHf87bffzgMPPEBMTAwRERHcc889pKSk0LVrVwB69+5NcnIyt9xyC5MmTSI7O5tHH32U4cOHExgYWOXbJCIiIlJVqmUAPB0vv/wyVquVAQMGYLfbSU9P54033vBOt9lszJ07l2HDhpGSkkJoaChDhgxh3LhxPqxaRERE5NyzGIZh+LqI6qqwsJDIyEgKCgp0P6CIiEg1ofN3Nb0HUERERET+PAVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZOplgHwzTffpE2bNkRERBAREUFKSgpffvmld3p5eTnDhw8nNjaWsLAwBgwYQE5OTqVlZGZm0q9fP0JCQoiLi2P06NE4nc6q3hQRERGRKlctA2CdOnWYMGECa9eu5YcffuDyyy/nmmuuYcuWLQDcf//9fPHFF3z88ccsW7aMQ4cO0b9/f+/3XS4X/fr1o6KighUrVjBt2jSmTp3K448/7qtNEhEREakyFsMwDF8XcTbExMTw/PPPM3DgQGrWrMmMGTMYOHAgANu3b6dFixasXLmSrl278uWXX3LllVdy6NAh4uPjAXjrrbcYM2YMhw8fJiAg4LTWWVhYSGRkJAUFBURERJyzbRMREZGzR+fvatoC+Esul4uZM2dSUlJCSkoKa9euxeFwkJaW5p2nefPm1K1bl5UrVwKwcuVKWrdu7Q1/AOnp6RQWFnpbEUVEREQuVH6+LuDP2rRpEykpKZSXlxMWFsasWbNITk5m/fr1BAQEEBUVVWn++Ph4srOzAcjOzq4U/o5PPz7tVOx2O3a73fu5sLDwLG2NiIiISNWpti2AzZo1Y/369axatYphw4YxZMgQtm7dek7XOX78eCIjI71DUlLSOV2fiIiIyLlQbQNgQEAAjRs3pkOHDowfP562bdvy6quvkpCQQEVFBfn5+ZXmz8nJISEhAYCEhIQTngo+/vn4PCczduxYCgoKvMP+/fvP7kaJiIiIVIFqGwB/ze12Y7fb6dChA/7+/ixevNg7bceOHWRmZpKSkgJASkoKmzZtIjc31zvPwoULiYiIIDk5+ZTrCAwM9HY9c3wQERERqW6q5T2AY8eOpW/fvtStW5eioiJmzJjB0qVLmT9/PpGRkdx+++088MADxMTEEBERwT333ENKSgpdu3YFoHfv3iQnJ3PLLbcwadIksrOzefTRRxk+fDiBgYE+3joRERGRc6taBsDc3FxuvfVWsrKyiIyMpE2bNsyfP59evXoB8PLLL2O1WhkwYAB2u5309HTeeOMN7/dtNhtz585l2LBhpKSkEBoaypAhQxg3bpyvNklERESkylww/QD6gvoREhERqX50/r6A7gEUERERkdOjACgiIiJiMgqAIiIiIiajACgiIiJiMgqAIiIiIiajACgiIiJiMgqAIiIiIiajACgiIiJiMgqAIiIiIiajACgiIiJiMgqAIiIiIiajACgiIiJiMgqAIiIiIiajACgiIiJiMgqAIiIiIiajACgiIiJiMgqAIiIiIiajACgiIiJiMgqAIiIiIiajACgiIiJiMgqAIiIiIiajACgiIiJiMgqAIiIiIiajACgiIiJiMgqAIiIiIiajACgiIiJiMgqAIiIiIiajACgiIiJiMgqAIiIiIiajACgiIiJiMgqAIiIiIiajACgiIiJiMgqAIiIiIiajACgiIiJiMgqAIiIiIiajACgiIiJiMgqAIiIiIiajACgiIiJiMgqAIiIiIiajACgiIiJiMgqAIiIiIiajACgiIiJiMgqAIiIiIiajACgiIiJiMgqAIiIiIiajACgiIiJiMgqAIiIiIiajACgiIiJiMgqAIiIiIiajACgiIiJiMgqAIiIiIiajACgiIiJiMgqAIiIiIiajACgiIiJiMgqAIiIiIiajACgiIiJiMtUyAI4fP55OnToRHh5OXFwc1157LTt27Kg0T3l5OcOHDyc2NpawsDAGDBhATk5OpXkyMzPp168fISEhxMXFMXr0aJxOZ1VuioiIiEiVq5YBcNmyZQwfPpzvv/+ehQsX4nA46N27NyUlJd557r//fr744gs+/vhjli1bxqFDh+jfv793usvlol+/flRUVLBixQqmTZvG1KlTefzxx32xSSIiIiJVxmIYhuHrIs7U4cOHiYuLY9myZVx66aUUFBRQs2ZNZsyYwcCBAwHYvn07LVq0YOXKlXTt2pUvv/ySK6+8kkOHDhEfHw/AW2+9xZgxYzh8+DABAQG/u97CwkIiIyMpKCggIiLinG6jiIiInB06f1fTFsBfKygoACAmJgaAtWvX4nA4SEtL887TvHlz6taty8qVKwFYuXIlrVu39oY/gPT0dAoLC9myZUsVVi8iIiJStfx8XcCZcrvd3HfffaSmptKqVSsAsrOzCQgIICoqqtK88fHxZGdne+f5Zfg7Pv34tJOx2+3Y7Xbv58LCwrO1GSIiIiJVptq3AA4fPpzNmzczc+bMc76u8ePHExkZ6R2SkpLO+TpFREREzrZqHQBHjBjB3LlzWbJkCXXq1PGOT0hIoKKigvz8/Erz5+TkkJCQ4J3n108FH/98fJ5fGzt2LAUFBd5h//79Z3FrRERERKpGtQyAhmEwYsQIZs2axddff02DBg0qTe/QoQP+/v4sXrzYO27Hjh1kZmaSkpICQEpKCps2bSI3N9c7z8KFC4mIiCA5Ofmk6w0MDCQiIqLSICIiIlLdVMt7AIcPH86MGTP4/PPPCQ8P996zFxkZSXBwMJGRkdx+++088MADxMTEEBERwT333ENKSgpdu3YFoHfv3iQnJ3PLLbcwadIksrOzefTRRxk+fDiBgYG+3DwRERGRc6padgNjsVhOOn7KlCkMHToU8HQE/eCDD/Lhhx9it9tJT0/njTfeqHR5d9++fQwbNoylS5cSGhrKkCFDmDBhAn5+p5eL9Ri5iIhI9aPzdzUNgOcLHUAiIiLVj87f1fQeQBERERH58xQARURERExGAVBERETEZBQARURERExGAVBERETEZBQARURERExGAVBERETEZBQARURERExGAVBERETEZBQARURERExGAVBERETEZBQARURERExGAVBERETEZBQARURERExGAVBERETEZBQARURERExGAVBERETEZBQARURERExGAVBERETEZBQARURERExGAVBERETEZBQARURERExGAVBERETEZBQARURERExGAVBERETEZBQARURERExGAVBERETEZBQARURERExGAVBERETEZBQARURERExGAVBERETEZBQARURERExGAVBERETEZBQARURERExGAVBERETEZBQARURERExGAVBERETEZBQARURERExGAVBERETEZBQARURERExGAVBERETEZBQARURERExGAVBERETEZBQARUREREzGz9cFiIhUK4YBFSVQchhKfgZ7AdiLoaIY7EXH/n7sT1cFuF3gdoDbeWxweQar7djgB1b/Y3/awD8YAsIgMAwCwiEw/NjfwyA4GkJrQmgN8Av09S8hItWYAqCIyHEuJxRlQcEBKNjvGfL3e8aVHPYMxYfBWebrSiEw0hMEQ2tCWE2IqANRdSEqCSKTPH8PjgaLxdeVish5SAFQRMzF7YbCg3BkF/y8+9ifu+DIT57xhuv0luMX7AlfQZGVW+kCwyAwAgJCPa10Vr+TDLZjLYHOyoPLAc5y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vB9AERERETMy7T2AIiIiImalACgiIiJiMgqAIiIiIiajACgiIiJiMgqAf9LkyZOpX78+QUFBdOnShdWrV/u6pAvO+PHj6dSpE+Hh4cTFxXHttdeyY8eOSvOUl5czfPhwYmNjCQsLY8CAASd07p2ZmUm/fv0ICQkhLi6O0aNH43Q6q3JTLjgTJkzAYrFw3333ecdpX1SdgwcP8n//93/ExsYSHBxM69at+eGHH7zTDcPg8ccfJzExkeDgYNLS0ti1a1elZRw9epTBgwcTERFBVFQUt99+O8XFxVW9KdWey+Xiscceo0GDBgQHB9OoUSOefvrpSu+Y1f44N7755huuuuoqatWqhcViYfbs2ZWmn63ffePGjVxyySUEBQWRlJTEpEmTzvWmVQ1D/rCZM2caAQEBxnvvvWds2bLFuOOOO4yoqCgjJyfH16VdUNLT040pU6YYmzdvNtavX29cccUVRt26dY3i4mLvPHfddZeRlJRkLF682Pjhhx+Mrl27GhdffLF3utPpNFq1amWkpaUZP/74ozFv3jyjRo0axtixY32xSReE1atXG/Xr1zfatGljjBw50jte+6JqHD161KhXr54xdOhQY9WqVcaePXuM+fPnG7t37/bOM2HCBCMyMtKYPXu2sWHDBuPqq682GjRoYJSVlXnn6dOnj9G2bVvj+++/N7799lujcePGxqBBg3yxSdXas88+a8TGxhpz5841MjIyjI8//tgICwszXn31Ve882h/nxrx584xHHnnE+OyzzwzAmDVrVqXpZ+N3LygoMOLj443BgwcbmzdvNj788EMjODjY+Oc//1lVm3nOKAD+CZ07dzaGDx/u/exyuYxatWoZ48eP92FVF77c3FwDMJYtW2YYhmHk5+cb/v7+xscff+ydZ9u2bQZgrFy50jAMz/8grFarkZ2d7Z3nzTffNCIiIgy73V61G3ABKCoqMpo0aWIsXLjQ6N69uzcAal9UnTFjxhjdunU75XS3220kJCQYzz//vHdcfn6+ERgYaHz44YeGYRjG1q1bDcBYs2aNd54vv/zSsFgsxsGDB89d8Regfv36GX/5y18qjevfv78xePBgwzC0P6rKrwPg2frd33jjDSM6OrrS/6PGjBljNGvW7Bxv0bmnS8B/UEVFBWvXriUtLc07zmq1kpaWxsqVK31Y2YWvoKAAwPvy7rVr1+JwOCrti+bNm1O3bl3vvli5ciWtW7eu1Ll3eno6hYWFbNmypQqrvzAMHz6cfv36VfrNQfuiKs2ZM4eOHTty/fXXExcXR/v27Xn77be90zMyMsjOzq60LyIjI+nSpUulfREVFUXHjh2986SlpWG1Wlm1alXVbcwF4OKLL2bx4sXs3LkTgA0bNvDdd9/Rt29fQPvDV87W775y5UouvfRSAgICvPOkp6ezY8cO8vLyqmhrzg1Tvwnkz/j5559xuVwnvC0kPj6e7du3+6iqC5/b7ea+++4jNTWVVq1aAZCdnU1AQABRUVGV5o2Pjyc7O9s7z8n21fFpcvpmzpzJunXrWLNmzQnTtC+qzp49e3jzzTd54IEH+Pvf/86aNWu49957CQgIYMiQId7f8mS/9S/3RVxcXKXpfn5+xMTEaF/8QQ8//DCFhYU0b94cm82Gy+Xi2WefZfDgwQDaHz5ytn737OxsGjRocMIyjk+Ljo4+J/VXBQVAqRaGDx/O5s2b+e6773xdiint37+fkSNHsnDhQoKCgnxdjqm53W46duzIc889B0D79u3ZvHkzb731FkOGDPFxdebzn//8h+nTpzNjxgxatmzJ+vXrue+++6hVq5b2h5zXdAn4D6pRowY2m+2EpxtzcnJISEjwUVUXthEjRjB37lyWLFlCnTp1vOMTEhKoqKggPz+/0vy/3BcJCQkn3VfHp8npWbt2Lbm5uVx00UX4+fnh5+fHsmXL+Mc//oGfnx/x8fHaF1UkMTGR5OTkSuNatGhBZmYm8L/f8rf+H5WQkEBubm6l6U6nk6NHj2pf/EGjR4/m4Ycf5qabbqJ169bccsst3H///YwfPx7Q/vCVs/W7X8j/31IA/IMCAgLo0KEDixcv9o5zu90sXryYlJQUH1Z24TEMgxEjRjBr1iy+/vrrE5rhO3TogL+/f6V9sWPHDjIzM737IiUlhU2bNlX6j3zhwoVERESccBKVU+vZsyebNm1i/fr13qFjx44MHjzY+3fti6qRmpp6QndIO3fupF69egA0aNCAhISESvuisLCQVatWVdoX+fn5rF271jvP119/jdvtpkuXLlWwFReO0tJSrNbKp1KbzYbb7Qa0P3zlbP3uKSkpfPPNNzgcDu88CxcupFmzZtX68i+gbmD+jJkzZxqBgYHG1KlTja1btxp33nmnERUVVenpRjlzw4YNMyIjI42lS5caWVlZ3qG0tNQ7z1133WXUrVvX+Prrr40ffvjBSElJMVJSUrzTj3c90rt3b2P9+vXGV199ZdSsWVNdj5wFv3wK2DC0L6rK6tWrDT8/P+PZZ581du3aZUyfPt0ICQkxPvjgA+88EyZMMKKioozPP//c2Lhxo3HNNdectPuL9u3bG6tWrTK+++47o0mTJup25E8YMmSIUbt2bW83MJ999plRo0YN46GHHvLOo/1xbhQVFRk//vij8eOPPxqA8dJLLxk//vijsW/fPsMwzs7vnp+fb8THxxu33HKLsXnzZmPmzJlGSEiIuoExs9dee82oW7euERAQYHTu3Nn4/vvvfV3SBQc46TBlyhTvPGVlZcbdd99tREdHGyEhIcZ1111nZGVlVVrO3r17jb59+xrBwcFGjRo1jAcffNBwOBxVvDUXnl8HQO2LqvPFF18YrVq1MgIDA43mzZsb//rXvypNd7vdxmOPPWbEx8cbgYGBRs+ePY0dO3ZUmufIkSPGoEGDjLCwMCMiIsK47bbbjKKioqrcjAtCYWGhMXLkSKNu3bpGUFCQ0bBhQ+ORRx6p1G2I9se5sWTJkpOeI4YMGWIYxtn73Tds2GB069bNCAwMNGrXrm1MmDChqjbxnLIYxi+6KxcRERGRC57uARQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExGQVAEREREZNRABQRERExmf8HezbYB5otwKgAAAAASUVORK5CYII=", + "text/html": [ + "\n", + "
\n", + "
\n", + " Figure\n", + "
\n", + " \n", + "
\n", + " " + ], "text/plain": [ - "array([0.45, 0.2 , 0.45])" + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" ] }, - "execution_count": 39, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ - "x = 0.1\n", + "%matplotlib widget\n", + "x = np.linspace(-10, 10,100)\n", + "\n", + "def f(x, A, B, C):\n", + " return A*x**2 + B*x + C\n", "\n", - "z = np.array([0.4, 0.2, 0.4])\n", - "exclude = [1]\n", - "mask = np.ones(z.shape, bool)\n", - "mask[exclude] = False\n", + "fig = plt.figure()\n", + "ax = fig.add_subplot(1, 1, 1)\n", + "line, = ax.plot(x, f(x, A=1, B=1, C=1))\n", "\n", - "z[mask] = (1 - x)/2\n", - "z" + "\n", + "def run(i, x, n):\n", + " z = np.ones(n)\n", + " z[i] = x\n", + " exclude = [i]\n", + " mask = np.ones(z.shape, bool)\n", + " mask[exclude] = False\n", + " z[mask] = (1 - x)/2\n", + " \n", + " z = z/sum(z)\n", + " print(z)\n", + "\n", + " models = [\n", + " yaeos.PengRobinson76,\n", + " yaeos.PengRobinson78,\n", + " yaeos.SoaveRedlichKwong,\n", + " ]\n", + "\n", + " ax.clear()\n", + " for m in models:\n", + " model = m(Tc, Pc, w)\n", + " T, P, Tcs, Pcs = yaeos.yaeos_c.pt2_phase_envelope(model.id, z, kind=\"dew\", t0=150, p0=0.01)\n", + " ax.plot(T, P, label=model.name)\n", + " plt.legend()\n", + " \n", + " ax.set_xlim(0, 1000)\n", + " ax.set_ylim(0, 550)\n", + " return T, P\n", + "\n", + "def update(i, x, n):\n", + " T, P = run(i, x, n)\n", + " #line.set_xdata(T)\n", + " #line.set_ydata(P)\n", + " #fig.canvas.draw_idle()\n", + "\n", + "interact(update, i=[i for i in range(len(Tc))], x=(0.0001, 0.9999, 0.01), n=fixed(len(Tc)))" ] }, { "cell_type": "code", "execution_count": null, - "id": "ee33ac44", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "bb46893e", + "id": "a15f127d-d055-4c96-92bb-baf643afe24b", "metadata": {}, "outputs": [], "source": [] From aa1fe14fef9a93fd27eebb71835a2d84f7148942 Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Mon, 15 Jul 2024 00:14:21 -0300 Subject: [PATCH 122/167] refactored pt envelopes --- .../boundaries/phase_envelopes_pt.f90 | 163 ++++++++++-------- 1 file changed, 93 insertions(+), 70 deletions(-) diff --git a/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 b/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 index 01711044f..69e0c31fb 100644 --- a/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 +++ b/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 @@ -110,7 +110,9 @@ function pt_envelope_2ph(& update_specification=update_spec, & solver=solver, stop=stop_conditions & ) + contains + subroutine foo(X, ns, S, F, dF, dFdS) !! Function that needs to be solved at each envelope point real(pr), intent(in) :: X(:) @@ -143,17 +145,17 @@ subroutine foo(X, ns, S, F, dF, dFdS) y = K*z select case(kind) - case ("bubble") + case ("bubble") kind_z = "liquid" kind_y = "vapor" - case ("dew") + case ("dew") kind_z = "vapor" kind_y = "liquid" - case default + case default kind_z = "stable" kind_y = "stable" end select - + call fugacity_tp(& model, z, T, P, V=Vz, root_type=kind_z, & lnphip=lnphip_z, dlnPhidt=dlnphi_dt_z, & @@ -187,7 +189,7 @@ subroutine foo(X, ns, S, F, dF, dFdS) dFdS(nc+2) = -1 end subroutine foo - subroutine update_spec(X, ns, S, dS, dXdS, iterations) + subroutine update_spec(X, ns, S, dS, dXdS, step_iters) !! Update the specification during continuation. real(pr), intent(in out) :: X(:) !! Vector of variables \([lnK_i \dots , lnT, lnP]\) @@ -199,20 +201,17 @@ subroutine update_spec(X, ns, S, dS, dXdS, iterations) !! Step in specification real(pr), intent(in out) :: dXdS(:) !! Variation of variables with respect to specification - integer, intent(in) :: iterations + integer, intent(in) :: step_iters !! Iterations used in the solver - real(pr) :: Xnew(nc+2), Xold(nc+2), maxdS - - Xold = X + real(pr) :: maxdS - ! ============================================================== + ! ===================================================================== ! Update specification ! - Dont select T or P near critical points ! - Update dS wrt specification units ! - Set step - ! -------------------------------------------------------------- - + ! --------------------------------------------------------------------- if (maxval(abs(X(:nc))) < 0.1_pr) then ns = maxloc(abs(dXdS(:nc)), dim=1) maxdS=0.01_pr @@ -226,73 +225,97 @@ subroutine update_spec(X, ns, S, dS, dXdS, iterations) dS = sign(1.0_pr, dS) * minval([ & max(sqrt(abs(X(ns))/10._pr), 0.1_pr), & - abs(dS)*3/iterations & + abs(dS)*3/step_iters & ] & ) dS = sign(1.0_pr, dS) * maxval([abs(dS), maxdS]) - ! ============================================================== - ! Save the point - ! -------------------------------------------------------------- - new_point : block - type(EquilibriaState) :: point - - real(pr) :: y(nc), T, P + call save_point(X, step_iters) + call detect_critical(X, dXdS, ns, S, dS) + end subroutine update_spec - T = exp(X(nc+1)) - P = exp(X(nc+2)) - y = exp(X(:nc))*z + subroutine save_point(X, iters) + !! Save the converged point + real(pr), intent(in) :: X(:) + integer, intent(in) :: iters + type(EquilibriaState) :: point + real(pr) :: y(nc), T, P - point = EquilibriaState(& - kind=kind, x=z, Vx=0._pr, y=y, Vy=0._pr, & - T=T, P=P, beta=0._pr, iters=iterations & + T = exp(X(nc+1)) + P = exp(X(nc+2)) + y = exp(X(:nc))*z + point = EquilibriaState(& + kind=kind, x=z, Vx=0._pr, y=y, Vy=0._pr, & + T=T, P=P, beta=0._pr, iters=iters & ) - - envelopes%points = [envelopes%points, point] - end block new_point - - - ! ============================================================== - ! Handle critical point - ! -------------------------------------------------------------- - critical: block - !! Critical point detection - !! If the values of lnK (X[:nc]) change sign then a critical point - !! Has passed - real(pr) :: Xc(nc+2) !! Value at (near) critical point - real(pr) :: a !! Parameter for interpolation - - do while (maxval(abs(X(:nc))) < 0.05) - ! If near a critical point, jump over it - S = S + dS - X = X + dXdS*dS - end do - - Xnew = X + dXdS*dS - - if (all(Xold(:nc) * (Xnew(:nc)) < 0)) then - select case(kind) - case("dew") - kind = "bubble" - case("bubble") - kind = "dew" - case default - kind = "liquid-liquid" - end select - - ! 0 = a*X(ns) + (1-a)*Xnew(ns) < Interpolation equation to get X(ns) = 0 - a = -Xnew(ns)/(X(ns) - Xnew(ns)) - print *, a - Xc = a * X + (1-a)*Xnew - envelopes%cps = [& - envelopes%cps, CriticalPoint(T=exp(Xc(nc+1)), P=exp(Xc(nc+2))) & - ] - ! X = Xc + dXdS*dS - end if - end block critical - end subroutine update_spec + + envelopes%points = [envelopes%points, point] + end subroutine save_point + + subroutine detect_critical(X, dXdS, ns, S, dS) + !! # `detect_critical` + !! Critical point detection + !! + !! # Description + !! If the values of lnK (X[:nc]) change sign then a critical point + !! Has passed, since for this to happen all variables should pass + !! through zero. Near critical points (lnK < 0.05) points are harder + !! to converge, so more steps in the extrapolation vector are made to + !! jump over the critical point. + !! If the critical point is detected then the kind of the point is + !! changed and the point is saved using an interpolation knowing that + !! + !! \[ + !! X_c = a * X + (1-a)*X_{new} + !! \] + !! + !! With \(X_c\) is the variables at the critical point, \(X_{new}\) + !! is the new initialization point of the method and \(a\) is the + !! parameter to interpolate the values. This subroutine finds the + !! value of \(a\) to obtain \(X_c\). + real(pr), intent(in out) :: X(:) !! Vector of variables + real(pr), intent(in out) :: dXdS(:) !! Variation of variables wrt S + integer, intent(in out) :: ns !! Number of specified variable + real(pr), intent(in out) :: S !! Specification value + real(pr), intent(in out) :: dS !! Step in specification + real(pr) :: Xc(nc+2) !! Value at (near) critical point + real(pr) :: a !! Parameter for interpolation + + real(pr) :: Xold(size(X)) !! Old value of X + real(pr) :: Xnew(size(X)) !! Value of the next initialization + + Xold = X + + do while (maxval(abs(X(:nc))) < 0.05) + ! If near a critical point, jump over it + S = S + dS + X = X + dXdS*dS + end do + + Xnew = X + dXdS*dS + + if (all(Xold(:nc) * (Xnew(:nc)) < 0)) then + select case(kind) + case("dew") + kind = "bubble" + case("bubble") + kind = "dew" + case default + kind = "liquid-liquid" + end select + + ! 0 = a*X(ns) + (1-a)*Xnew(ns) < Interpolation equation to get X(ns) = 0 + a = -Xnew(ns)/(X(ns) - Xnew(ns)) + Xc = a * X + (1-a)*Xnew + + envelopes%cps = [& + envelopes%cps, CriticalPoint(T=exp(Xc(nc+1)), P=exp(Xc(nc+2))) & + ] + X = Xc + dXdS*dS + end if + end subroutine detect_critical end function pt_envelope_2ph subroutine write_PTEnvel2(pt2, unit, iotype, v_list, iostat, iomsg) From e3c472784ebaef13c8af97aac2105acc4a7bfe21 Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Mon, 15 Jul 2024 01:37:57 -0300 Subject: [PATCH 123/167] some docs --- doc/page/usage/phase_equilibrium/envelopes.md | 4 +- doc/page/usage/phase_equilibrium/index.md | 40 ++++++++++++++++++- 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/doc/page/usage/phase_equilibrium/envelopes.md b/doc/page/usage/phase_equilibrium/envelopes.md index 47e8fb8bb..422fe01cb 100644 --- a/doc/page/usage/phase_equilibrium/envelopes.md +++ b/doc/page/usage/phase_equilibrium/envelopes.md @@ -98,8 +98,8 @@ Which when plotted with `gnuplot` with: ```gnuplot plot "outfile" \ - index "dew" u 2:3 w l title "Dew", \ - "" index "bubble" u 2:3 w l t "Bubble", \ + index "dew" u 2:3 w l title "Dew", \ + "" index "bubble" u 2:3 w l t "Bubble", \ "" index "Critical" u 1:2 w p pt 7 lc rgb "black" t "CP" ``` diff --git a/doc/page/usage/phase_equilibrium/index.md b/doc/page/usage/phase_equilibrium/index.md index 789045f15..7dab1aa41 100644 --- a/doc/page/usage/phase_equilibrium/index.md +++ b/doc/page/usage/phase_equilibrium/index.md @@ -14,7 +14,26 @@ The implemented methods, and their usage are: [TOC] # Flash calculations -Flash calcuations +Flash calcuations are one of the most used phase-equilibria calculations during. + +In `yaeos` it is possible to make Flash calculations either specifying: + +- \(zPT\) +- \(zVT\) + +```fortran +type(EquilibriaState) :: result + +! zPT flash +result = flash(model, z, p_spec=P, T=T) + +! zVT flash +result = flash(model, z, v_spec=P, T=T) + +! It is possible to provide initialization compositions in terms of the +! K-factors. Where k0=y/x +result = flash(model, z, v_spec=P, T=T, k0=k0) +``` # Saturation points Single saturation point calculations are included with the procedures @@ -28,10 +47,27 @@ f(T \lor P) = \sum ln K_i - 1 = 0 With a newton procedure with respect to the desired variable (either \(P\) or \(T\). +```fortran +type(EquilibriaState) :: sat_point + +sat = saturation_pressure(model, z, T=T, kind="bubble") +sat = saturation_pressure(model, z, T=T, kind="dew") + +sat = saturation_temperature(model, z, P=P, kind="bubble") +sat = saturation_temperature(model, z, P=P, kind="dew") +``` + ## Phase envelopes Phase envelopes are the conection of all the saturation points of a system. When the interest is in calculating a whole phase diagram instead of a single point, or the point is hard to converge. It is better to use a robust mathematical algorithm that eases the calcuation providing an easy-to-converge point and using its information to initialize a next one and continue along the -whole phase-boundary. This can be done with the procedure [[pt_envelope_2ph]] \ No newline at end of file +whole phase-boundary. This can be done with the procedure [[pt_envelope_2ph]] + +```fortran +type(PTEnvel2) :: env + +sat = saturation_pressure(model, z, T=150._pr, kind="bubble") +env = pt_envelope_2ph(model, z, sat) +``` \ No newline at end of file From 564b601bd40601b05951ec37fcb89693e6f480f6 Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Mon, 15 Jul 2024 01:49:51 -0300 Subject: [PATCH 124/167] docs --- doc/page/usage/phase_equilibrium/index.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/doc/page/usage/phase_equilibrium/index.md b/doc/page/usage/phase_equilibrium/index.md index 7dab1aa41..ff547e676 100644 --- a/doc/page/usage/phase_equilibrium/index.md +++ b/doc/page/usage/phase_equilibrium/index.md @@ -1,5 +1,6 @@ --- title: Phase Equilibrium +copy_subdir: ../figs --- Phase Equilibria calculations are fundamental for the majority of EoS based @@ -14,7 +15,8 @@ The implemented methods, and their usage are: [TOC] # Flash calculations -Flash calcuations are one of the most used phase-equilibria calculations during. +Flash calcuations are one of the most used phase-equilibria calculations during +modelling of processes. In `yaeos` it is possible to make Flash calculations either specifying: @@ -70,4 +72,6 @@ type(PTEnvel2) :: env sat = saturation_pressure(model, z, T=150._pr, kind="bubble") env = pt_envelope_2ph(model, z, sat) -``` \ No newline at end of file +``` + +![PTEnvel2](../figs/PTEnvel2.png) \ No newline at end of file From 73daaf60ab42c0a92a42a87b3532ef17599ad1e3 Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Mon, 15 Jul 2024 01:50:44 -0300 Subject: [PATCH 125/167] docs --- doc/page/usage/phase_equilibrium/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/page/usage/phase_equilibrium/index.md b/doc/page/usage/phase_equilibrium/index.md index ff547e676..171b03891 100644 --- a/doc/page/usage/phase_equilibrium/index.md +++ b/doc/page/usage/phase_equilibrium/index.md @@ -20,8 +20,8 @@ modelling of processes. In `yaeos` it is possible to make Flash calculations either specifying: -- \(zPT\) -- \(zVT\) +- \( zPT \rightarrow x, y, \beta (V) \) +- \( zVT \rightarrow x, y, \beta (P) \) ```fortran type(EquilibriaState) :: result From d1229cbf8dd8d066b08954e1621e3b96d40cf3d3 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Mon, 15 Jul 2024 13:45:00 -0300 Subject: [PATCH 126/167] generic volume solver for ArModel --- src/models/residual_helmholtz/ar_models.f90 | 70 +++++++++++++++++++-- 1 file changed, 66 insertions(+), 4 deletions(-) diff --git a/src/models/residual_helmholtz/ar_models.f90 b/src/models/residual_helmholtz/ar_models.f90 index 306b3979d..79038a17f 100644 --- a/src/models/residual_helmholtz/ar_models.f90 +++ b/src/models/residual_helmholtz/ar_models.f90 @@ -30,7 +30,7 @@ module yaeos__models_ar !! Method to calculate residual helmholtz energy and derivatives. procedure(abs_volume_initializer), deferred :: get_v0 !! Volume initializer - end type + end type ArModel abstract interface subroutine abs_residual_helmholtz(& @@ -67,7 +67,7 @@ subroutine abs_residual_helmholtz(& real(pr), optional, intent(out) :: ArVn(size(n)) !! \(\frac{d^2Ar}{dVn_i}\) real(pr), optional, intent(out) :: ArTn(size(n)) !! \(\frac{d^2Ar}{dTn_i}\) real(pr), optional, intent(out) :: Arn2(size(n), size(n))!! \(\frac{d^2Ar}{dn_{ij}}\) - end subroutine + end subroutine abs_residual_helmholtz function abs_volume_initializer(self, n, p, t) !! Initialization of volume. @@ -77,6 +77,68 @@ function abs_volume_initializer(self, n, p, t) real(pr), intent(in) :: p !! Pressure [bar] real(pr), intent(in) :: t !! Temperature [K] real(pr) :: abs_volume_initializer !! Initial volume [L] - end function + end function abs_volume_initializer end interface -end module + +contains + + subroutine volume(eos, n, T, P, V, root_type) + !! Generic volume solver + use yaeos__constants, only: pr, R + use yaeos__math, only: newton + class(ArModel), intent(in) :: eos + real(pr), intent(in) :: n(:) + real(pr), intent(in) :: P, T + real(pr), intent(out) :: V + character(len=*), intent(in) :: root_type + + integer :: max_iters=30 + real(pr) :: tol=1e-7 + + real(pr) :: totnRT, GrL, GrV, Gr + real(pr) :: Vliq, Vvap + + GrL = HUGE(GrL) + GrV = HUGE(GrV) + + totnRT = sum(n) * R * T + select case(root_type) + case("liquid") + Vliq = eos%get_v0(n, P, T)! *1.001_pr + call newton(foo, Vliq, tol=tol, max_iters=max_iters) + GrL = Gr + case("vapor") + Vvap = R * T / P + call newton(foo, Vvap, tol=tol, max_iters=max_iters) + GrV = Gr + case("stable") + Vliq = eos%get_v0(n, P, T)*1.00001_pr + call newton(foo, Vliq, tol=tol, max_iters=max_iters) + GrL = Gr + + Vvap = R * T / P + call newton(foo, Vvap, tol=tol, max_iters=max_iters) + GrV = Gr + end select + + if (GrL < GrV) then + V = Vliq + else + V = Vvap + end if + + contains + subroutine foo(x, f, df) + real(pr), intent(in) :: x + real(pr), intent(out) :: f, df + real(pr) :: Ar, ArV, ArV2, Pcalc, dPcalcdV, Vin + Vin = x + call eos%residual_helmholtz(n, Vin, T, Ar=Ar, ArV=ArV, ArV2=ArV2) + Pcalc = totnRT / Vin - ArV + dPcalcdV = -totnRT / Vin**2 - ArV2 + f = Pcalc - p + df = dPcalcdV + Gr = Ar + P * Vin - totnRT - totnRT * log(P*Vin/(R*T)) + end subroutine foo + end subroutine volume +end module yaeos__models_ar From c1b8be258452ded28314aec028cae317f9861eef Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Mon, 15 Jul 2024 14:21:08 -0300 Subject: [PATCH 127/167] moved thermoprops as methods --- src/models/residual_helmholtz/ar_models.f90 | 325 +++++++++++++++++++- 1 file changed, 320 insertions(+), 5 deletions(-) diff --git a/src/models/residual_helmholtz/ar_models.f90 b/src/models/residual_helmholtz/ar_models.f90 index 79038a17f..d757e1329 100644 --- a/src/models/residual_helmholtz/ar_models.f90 +++ b/src/models/residual_helmholtz/ar_models.f90 @@ -1,5 +1,6 @@ module yaeos__models_ar - !! Module that defines the basics of a residual Helmholtz energy. + + !! # Module that defines the basics of a residual Helmholtz energy. !! !! All the residual properties that are calculated in this library are !! based on residual Helmholtz Equations of State. Following the book by @@ -9,9 +10,29 @@ module yaeos__models_ar !! are used. Because they're the fundamentals for phase equilibria !! calculation. !! - !! @note Later on, third derivative with respect to volume will be included + !! @note + !! Later on, third derivative with respect to volume will be included !! since it's importance on calculation of critical points. - use yaeos__constants, only: pr + !! @endnote + !! + !! # Properties + !! + !! ## Available properties: + !! + !! - pressure(n, V, T) + !! - fugacity(n, V, T) + !! - fugacity(n, P, T, root=[vapor, liquid, stable]) + !! - volume + !! + !! Calculate thermodynamic properties using Helmholtz energy as a basis. + !! All the routines in this module work with the logic: + !! + !! ```fortran + !! call foo(x, V, T, [dfoodv, dfoodt, ...]) + !! ``` + !! Where the user can call the routine of the desired property. And include + !! as optional values the desired derivatives of said properties. + use yaeos__constants, only: pr, R use yaeos__models_base, only: BaseModel implicit none @@ -30,6 +51,15 @@ module yaeos__models_ar !! Method to calculate residual helmholtz energy and derivatives. procedure(abs_volume_initializer), deferred :: get_v0 !! Volume initializer + procedure :: lnphi_vt => fugacity_vt + procedure :: lnphi_tp => fugacity_tp + procedure :: pressure + procedure :: volume + procedure :: enthalpy_residual_vt + procedure :: gibbs_residual_vt + procedure :: entropy_residual_vt + procedure :: Cv_residual_vt + procedure :: Cp_residual_vt end type ArModel abstract interface @@ -82,7 +112,7 @@ end function abs_volume_initializer contains - subroutine volume(eos, n, T, P, V, root_type) + subroutine volume(eos, n, P, T, V, root_type) !! Generic volume solver use yaeos__constants, only: pr, R use yaeos__math, only: newton @@ -115,7 +145,7 @@ subroutine volume(eos, n, T, P, V, root_type) Vliq = eos%get_v0(n, P, T)*1.00001_pr call newton(foo, Vliq, tol=tol, max_iters=max_iters) GrL = Gr - + Vvap = R * T / P call newton(foo, Vvap, tol=tol, max_iters=max_iters) GrV = Gr @@ -141,4 +171,289 @@ subroutine foo(x, f, df) Gr = Ar + P * Vin - totnRT - totnRT * log(P*Vin/(R*T)) end subroutine foo end subroutine volume + + subroutine pressure(eos, n, v, t, p, dpdv, dpdt, dpdn) + !! Pressure calculation. + !! + !! Calculate pressure using residual helmholtz models. + !! + class(ArModel), intent(in) :: eos !! Model + real(pr), intent(in) :: n(:) !! Moles number vector + real(pr), intent(in) :: t !! Temperature [K] + real(pr), intent(in) :: v !! Volume [L] + real(pr), intent(out) :: p !! Pressure [bar] + real(pr), optional, intent(out) :: dpdv !! \(\frac{dP}}{dV}\) + real(pr), optional, intent(out) :: dpdt !! \(\frac{dP}}{dT}\) + real(pr), optional, intent(out) :: dpdn(:) !! \(\frac{dP}}{dn_i}\) + + real(pr) :: totn + + real(pr) :: Ar, ArV, ArV2, ArTV, ArVn(size(n)) + integer :: nc + logical :: dn + + TOTN = sum(n) + nc = size(n) + + if (present(dPdN)) then + call eos%residual_helmholtz(& + n, v, t, Ar=Ar, ArV=ArV, ArV2=ArV2, ArTV=ArTV, ArVn=ArVn & + ) + else + call eos%residual_helmholtz(& + n, v, t, Ar=Ar, ArV=ArV, ArV2=ArV2, ArTV=ArTV & + ) + end if + + P = TOTN*R*T/V - ArV + if (present(dPdV)) dPdV = -ArV2 - R*t*TOTN/V**2 + if (present(dPdT)) dPdT = -ArTV + TOTN*R/V + if (present(dPdN)) dPdN(:) = R*T/V - ArVn(:) + end subroutine pressure + + subroutine fugacity_tp(eos, & + n, T, P, V, root_type, lnphip, dlnPhidP, dlnphidT, dlnPhidn & + ) + !! Calculate logarithm of fugacity, given pressure and temperature. + !! + !! This routine will obtain the desired volume root at the specified + !! pressure and calculate fugacity at that point. + !! + !! @note + !! While the natural output variable is \(ln f_i\). The calculated + !! derivatives will be the derivatives of the fugacity coefficient + !! \(ln \phi_i\) + !! @endnote + !! + use iso_fortran_env, only: error_unit + class(ArModel), intent(in) :: eos !! Model + real(pr), intent(in) :: n(:) !! Mixture mole numbers + character(len=*), intent(in) :: root_type !! Type of root desired ["liquid", "vapor", "stable"] + real(pr), intent(in) :: t !! Temperature [K] + real(pr), intent(in) :: p !! Pressure [bar] + + real(pr), optional, intent(out) :: lnphip(size(n)) !! \(\ln(f_i)\) vector + real(pr), optional, intent(out) :: v !! Volume [L] + real(pr), optional, intent(out) :: dlnphidt(size(n)) !! ln(phi) Temp derivative + real(pr), optional, intent(out) :: dlnphidp(size(n)) !! ln(phi) Presssure derivative + real(pr), optional, intent(out) :: dlnphidn(size(n), size(n)) !! ln(phi) compositional derivative + + real(pr) :: v_in, p_in + + call volume(eos, n, P, T, V_in, root_type) + call fugacity_vt(eos, n, v_in, T, P_in, lnphip, dlnphidp, dlnphidt, dlnphidn) + if(present(v)) v = v_in + if(abs(P_in - p) > 1e-2) then + write(error_unit, *) "WARN: possible bad root solving: ", p_in, p + end if + end subroutine fugacity_tp + + subroutine fugacity_vt(eos, & + n, V, T, P, lnphip, dlnPhidP, dlnphidT, dlnPhidn, dPdV, dPdT, dPdN & + ) + !! Calculate fugacity coefficent given volume and temperature. + !! + !!@note + !!While the natural output variable is \(ln \phi_i P\). The calculated + !!derivatives will be the derivatives of the fugacity coefficient + !!\(ln \phi_i\) + !!@endnote + !! + class(ArModel) :: eos !! Model + real(pr), intent(in) :: n(:) !! Mixture mole numbers + real(pr), intent(in) :: v !! Volume [L] + real(pr), intent(in) :: t !! Temperature [K] + + real(pr), optional, intent(out) :: p !! Pressure [bar] + real(pr), optional, intent(out) :: lnphip(size(n)) !! \(\ln(\phi_i*P)\) vector + real(pr), optional, intent(out) :: dlnphidt(size(n)) !! \(ln(phi_i)\) Temp derivative + real(pr), optional, intent(out) :: dlnphidp(size(n)) !! \(ln(phi_i)\) Presssure derivative + real(pr), optional, intent(out) :: dlnphidn(size(n), size(n)) !! \(ln(phi_i)\) compositional derivative + real(pr), optional, intent(out) :: dPdV !! \(\frac{dP}{dV}\) + real(pr), optional, intent(out) :: dPdT !! \(\frac{dP}{dT}\) + real(pr), optional, intent(out) :: dPdN(:) !! \(\frac{dP}{dn_i}\) + + real(pr) :: Ar, ArTV, ArV, ArV2 + real(pr), dimension(size(n)) :: Arn, ArVn, ArTn + real(pr) :: Arn2(size(n), size(n)) + + real(pr) :: dPdV_in, dPdT_in, dPdN_in(size(n)) + real(pr) :: P_in + + real(pr) :: RT, Z + + real(pr) :: totn + integer :: nc, i, j + + + totn = sum(n) + nc = size(n) + + RT = R*T + Z = V/(TOTN*RT) ! this is Z/P + + if (present(lnphip) .and. .not. (& + present(dlnphidn) & + .or. present(dlnphidp) & + .or. present(dlnphidt) & + .or. present(p) & + )) then + call eos%residual_helmholtz(n, v, t, Arn=Arn) + lnphip(:) = Arn(:)/RT - log(Z) + return + else if (present(dlnphidn)) then + call eos%residual_helmholtz(& + n, V, T, Ar=Ar, ArV=ArV, ArV2=ArV2, ArTV=ArTV, & + Arn=Arn, ArVn=ArVn, ArTn=ArTn, Arn2=Arn2 & + ) + else + call eos%residual_helmholtz(& + n, V, T, Ar=Ar, ArV=ArV, ArV2=ArV2, ArTV=ArTV, & + Arn=Arn, ArVn=ArVn, ArTn=ArTn & + ) + end if + + lnphip(:) = Arn(:)/RT - log(Z) + + P_in = TOTN*RT/V - ArV + if (present(P)) P = P_in + + dPdV_in = -ArV2 - RT*TOTN/V**2 + dPdT_in = -ArTV + TOTN*R/V + dPdN_in = RT/V - ArVn + + if (present(dlnphidp)) then + dlnphidp(:) = -dPdN_in(:)/dPdV_in/RT - 1._pr/P_in + end if + if (present(dlnphidt)) then + dlnphidt(:) = (ArTn(:) - Arn(:)/T)/RT + dPdN_in(:)*dPdT_in/dPdV_in/RT + 1._pr/T + end if + + if (present(dlnphidn)) then + do i = 1, nc + do j = i, nc + dlnphidn(i, j) = 1._pr/TOTN + (Arn2(i, j) + dPdN_in(i)*dPdN_in(j)/dPdV_in)/RT + dlnphidn(j, i) = dlnphidn(i, j) + end do + end do + end if + + if (present(dPdV)) dPdV = dPdV_in + if (present(dPdT)) dPdT = dPdT_in + if (present(dPdN)) dPdN = dPdN_in + end subroutine fugacity_vt + + subroutine enthalpy_residual_vt(eos, n, v, t, Hr, HrT, HrV, Hrn) + !! Calculate residual enthalpy given volume and temperature. + class(ArModel), intent(in) :: eos !! Model + real(pr), intent(in) :: n(:) !! Moles number vector + real(pr), intent(in) :: t !! Temperature [K] + real(pr), intent(in) :: v !! Volume [L] + real(pr), intent(out) :: Hr !! Residual enthalpy [bar L / mol] + real(pr), optional, intent(out) :: HrT !! \(\frac{dH^r}}{dT}\) + real(pr), optional, intent(out) :: HrV !! \(\frac{dH^r}}{dV}\) + real(pr), optional, intent(out) :: Hrn(size(n)) !! \(\frac{dH^r}}{dn}\) + + real(pr) :: Ar, ArV, ArT, Arn(size(n)) + real(pr) :: ArV2, ArT2, ArTV, ArVn(size(n)), ArTn(size(n)) + + call eos%residual_helmholtz(& + n, v, t, Ar=Ar, ArV=ArV, ArT=ArT, ArTV=ArTV, ArV2=ArV2, ArT2=ArT2, Arn=Arn, ArVn=ArVn, ArTn=ArTn & + ) + + Hr = Ar - t*ArT - v*ArV + + if (present(HrT)) HrT = - t*ArT2 - v*ArTV + if (present(HrV)) HrV = - t*ArTV - v*ArV2 + if (present(HrN)) HrN(:) = Arn(:) - t*ArTn(:) - v*ArVn(:) + end subroutine enthalpy_residual_vt + + subroutine gibbs_residual_vt(eos, n, v, t, Gr, GrT, GrV, Grn) + !! Calculate residual Gibbs energy given volume and temperature. + use yaeos__constants, only: R + class(ArModel), intent(in) :: eos !! Model + real(pr), intent(in) :: n(:) !! Moles number vector + real(pr), intent(in) :: t !! Temperature [K] + real(pr), intent(in) :: v !! Volume [L] + real(pr), intent(out) :: Gr !! Gibbs energy [bar L / mol] + real(pr), optional, intent(out) :: GrT !! \(\frac{dG^r}}{dT}\) + real(pr), optional, intent(out) :: GrV !! \(\frac{dG^r}}{dV}\) + real(pr), optional, intent(out) :: Grn(size(n)) !! \(\frac{dG^r}}{dn}\) + + real(pr) :: Ar, ArV, ArT, Arn(size(n)) + real(pr) :: p, dpdv, dpdt, dpdn(size(n)), z, ntot + + ntot = sum(n) + call pressure(eos, n, v, t, p, dpdv=dpdv, dpdt=dpdt, dpdn=dpdn) + z = p*v/(ntot*R*t) + + call eos%residual_helmholtz(n, v, t, Ar=Ar, ArV=ArV, ArT=ArT, Arn=Arn) + + Gr = Ar + p*v - ntot*R*t + + if (present(GrT)) GrT = ArT + v*dpdt - ntot*R + if (present(GrV)) GrV = ArV + v*dpdv + p + if (present(GrN)) GrN(:) = Arn(:) + v*dpdn(:) - R*t + end subroutine gibbs_residual_vt + + subroutine entropy_residual_vt(eos, n, v, t, Sr, SrT, SrV, Srn) + !! Calculate residual entropy given volume and temperature. + class(ArModel), intent(in) :: eos !! Model + real(pr), intent(in) :: n(:) !! Moles number vector + real(pr), intent(in) :: t !! Temperature [K] + real(pr), intent(in) :: v !! Volume [L] + real(pr), intent(out) :: Sr !! Entropy [bar L / K / mol] + real(pr), optional, intent(out) :: SrT !! \(\frac{dS^r}}{dT}\) + real(pr), optional, intent(out) :: SrV !! \(\frac{dS^r}}{dV}\) + real(pr), optional, intent(out) :: Srn(size(n)) !! \(\frac{dS^r}}{dn}\) + + real(pr) :: Ar, ArT, ArT2, ArTV, ArTn(size(n)) + + call eos%residual_helmholtz(& + n, v, t, Ar=Ar, ArT=ArT, ArTV=ArTV, ArT2=ArT2, ArTn=ArTn & + ) + + Sr = - ArT + + if (present(SrT)) SrT = - ArT2 + if (present(SrV)) SrV = - ArTV + if (present(SrN)) SrN = - ArTn + end subroutine entropy_residual_vt + + subroutine Cv_residual_vt(eos, n, v, t, Cv) + !! Calculate residual heat capacity volume constant given v and t. + class(ArModel), intent(in) :: eos !! Model + real(pr), intent(in) :: n(:) !! Moles number vector + real(pr), intent(in) :: t !! Temperature [K] + real(pr), intent(in) :: v !! Volume [L] + real(pr), intent(out) :: Cv !! heat capacity v constant [bar L / K / mol] + + real(pr) :: Ar, ArT2 + + call eos%residual_helmholtz(n, v, t, Ar=Ar, ArT2=ArT2) + + Cv = -t*ArT2 + end subroutine Cv_residual_vt + + subroutine Cp_residual_vt(eos, n, v, t, Cp) + !! Calculate residual heat capacity pressure constant given v and t. + use yaeos__constants, only: R + class(ArModel), intent(in) :: eos !! Model + real(pr), intent(in) :: n(:) !! Moles number vector + real(pr), intent(in) :: t !! Temperature [K] + real(pr), intent(in) :: v !! Volume [L] + real(pr), intent(out) :: Cp !! heat capacity p constant [bar L / K / mol] + + real(pr) :: Ar, ArT2, Cv, p, dpdt, dpdv, ntot + + ntot = sum(n) + + call eos%residual_helmholtz(n, v, t, Ar=Ar, ArT2=ArT2) + + call Cv_residual_vt(eos, n, v, t, Cv) + + call pressure(eos, n, v, t, p, dpdv=dpdv, dpdt=dpdt) + + Cp = Cv - t*dpdt**2/dpdv - ntot*R + end subroutine Cp_residual_vt end module yaeos__models_ar From 53bb2363ea3acf3aab80ca152092da0fcf40e1a9 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Mon, 15 Jul 2024 14:21:32 -0300 Subject: [PATCH 128/167] moved thermoprops as ArModel methods --- src/thermoprops.f90 | 425 -------------------------------------------- 1 file changed, 425 deletions(-) delete mode 100644 src/thermoprops.f90 diff --git a/src/thermoprops.f90 b/src/thermoprops.f90 deleted file mode 100644 index 86dbe7115..000000000 --- a/src/thermoprops.f90 +++ /dev/null @@ -1,425 +0,0 @@ -module yaeos__thermoprops - !! Residual thermodyamic properties using residual Helmholtz model. - !! - !! Available properties: - !! - !! - pressure(n, V, T) - !! - fugacity(n, V, T) - !! - fugacity(n, P, T, root=[vapor, liquid, stable]) - !! - volume - !! - !! Calculate thermodynamic properties using Helmholtz energy as a basis. - !! All the routines in this module work with the logic: - !! - !! ```fortran - !! call foo(x, V, T, [dfoodv, dfoodt, ...]) - !! ``` - !! Where the user can call the routine of the desired property. And include - !! as optional values the desired derivatives of said properties. - use yaeos__constants, only: R, pr - use yaeos__models_ar, only: ArModel - implicit none -contains - subroutine pressure(eos, n, v, t, p, dpdv, dpdt, dpdn) - !! Pressure calculation. - !! - !! Calculate pressure using residual helmholtz models. - !! - class(ArModel), intent(in) :: eos !! Model - real(pr), intent(in) :: n(:) !! Moles number vector - real(pr), intent(in) :: t !! Temperature [K] - real(pr), intent(in) :: v !! Volume [L] - real(pr), intent(out) :: p !! Pressure [bar] - real(pr), optional, intent(out) :: dpdv !! \(\frac{dP}}{dV}\) - real(pr), optional, intent(out) :: dpdt !! \(\frac{dP}}{dT}\) - real(pr), optional, intent(out) :: dpdn(:) !! \(\frac{dP}}{dn_i}\) - - real(pr) :: totn - - real(pr) :: Ar, ArV, ArV2, ArTV, ArVn(size(n)) - integer :: nc - - TOTN = sum(n) - nc = size(n) - - call eos%residual_helmholtz(& - n, v, t, Ar=Ar, ArV=ArV, ArV2=ArV2, ArTV=ArTV, ArVn=ArVn & - ) - P = TOTN*R*T/V - ArV - if (present(dPdV)) dPdV = -ArV2 - R*t*TOTN/V**2 - if (present(dPdT)) dPdT = -ArTV + TOTN*R/V - if (present(dPdN)) dPdN(:) = R*T/V - ArVn(:) - end subroutine pressure - - subroutine fugacity_tp(eos, & - n, T, P, V, root_type, lnphip, dlnPhidP, dlnphidT, dlnPhidn & - ) - !! Calculate logarithm of fugacity, given pressure and temperature. - !! - !! This routine will obtain the desired volume root at the specified - !! pressure and calculate fugacity at that point. - !! - !! @note - !! While the natural output variable is \(ln f_i\). The calculated - !! derivatives will be the derivatives of the fugacity coefficient - !! \(ln \phi_i\) - !! @endnote - !! - use iso_fortran_env, only: error_unit - class(ArModel), intent(in) :: eos !! Model - real(pr), intent(in) :: n(:) !! Mixture mole numbers - character(len=*), intent(in) :: root_type !! Type of root desired ["liquid", "vapor", "stable"] - real(pr), intent(in) :: t !! Temperature [K] - real(pr), intent(in) :: p !! Pressure [bar] - - real(pr), optional, intent(out) :: lnphip(size(n)) !! \(\ln(f_i)\) vector - real(pr), optional, intent(out) :: v !! Volume [L] - real(pr), optional, intent(out) :: dlnphidt(size(n)) !! ln(phi) Temp derivative - real(pr), optional, intent(out) :: dlnphidp(size(n)) !! ln(phi) Presssure derivative - real(pr), optional, intent(out) :: dlnphidn(size(n), size(n)) !! ln(phi) compositional derivative - - real(pr) :: v_in, p_in - - call volume(eos, n, P, T, V_in, root_type) - call fugacity_vt(eos, n, v_in, T, P_in, lnphip, dlnphidp, dlnphidt, dlnphidn) - if(present(v)) v = v_in - if(abs(P_in - p) > 1e-2) then - write(error_unit, *) "WARN: possible bad root solving: ", p_in, p - end if - end subroutine fugacity_tp - - subroutine fugacity_vt(eos, & - n, V, T, P, lnphip, dlnPhidP, dlnphidT, dlnPhidn, dPdV, dPdT, dPdN & - ) - !! Calculate fugacity coefficent given volume and temperature. - !! - !!@note - !!While the natural output variable is \(ln \phi_i P\). The calculated - !!derivatives will be the derivatives of the fugacity coefficient - !!\(ln \phi_i\) - !!@endnote - !! - class(ArModel) :: eos !! Model - real(pr), intent(in) :: n(:) !! Mixture mole numbers - real(pr), intent(in) :: v !! Volume [L] - real(pr), intent(in) :: t !! Temperature [K] - - real(pr), optional, intent(out) :: p !! Pressure [bar] - real(pr), optional, intent(out) :: lnphip(size(n)) !! \(\ln(\phi_i*P)\) vector - real(pr), optional, intent(out) :: dlnphidt(size(n)) !! \(ln(phi_i)\) Temp derivative - real(pr), optional, intent(out) :: dlnphidp(size(n)) !! \(ln(phi_i)\) Presssure derivative - real(pr), optional, intent(out) :: dlnphidn(size(n), size(n)) !! \(ln(phi_i)\) compositional derivative - real(pr), optional, intent(out) :: dPdV !! \(\frac{dP}{dV}\) - real(pr), optional, intent(out) :: dPdT !! \(\frac{dP}{dT}\) - real(pr), optional, intent(out) :: dPdN(:) !! \(\frac{dP}{dn_i}\) - - real(pr) :: Ar, ArTV, ArV, ArV2 - real(pr), dimension(size(n)) :: Arn, ArVn, ArTn - real(pr) :: Arn2(size(n), size(n)) - - real(pr) :: dPdV_in, dPdT_in, dPdN_in(size(n)) - real(pr) :: P_in - - real(pr) :: RT, Z - - real(pr) :: totn - integer :: nc, i, j - - - totn = sum(n) - nc = size(n) - - RT = R*T - Z = V/(TOTN*RT) ! this is Z/P - - if (present(lnphip) .and. .not. (& - present(dlnphidn) & - .or. present(dlnphidp) & - .or. present(dlnphidt) & - .or. present(p) & - )) then - call eos%residual_helmholtz(n, v, t, Arn=Arn) - lnphip(:) = Arn(:)/RT - log(Z) - return - else if (present(dlnphidn)) then - call eos%residual_helmholtz(& - n, V, T, Ar=Ar, ArV=ArV, ArV2=ArV2, ArTV=ArTV, & - Arn=Arn, ArVn=ArVn, ArTn=ArTn, Arn2=Arn2 & - ) - else - call eos%residual_helmholtz(& - n, V, T, Ar=Ar, ArV=ArV, ArV2=ArV2, ArTV=ArTV, & - Arn=Arn, ArVn=ArVn, ArTn=ArTn & - ) - end if - - lnphip(:) = Arn(:)/RT - log(Z) - - P_in = TOTN*RT/V - ArV - if (present(P)) P = P_in - - dPdV_in = -ArV2 - RT*TOTN/V**2 - dPdT_in = -ArTV + TOTN*R/V - dPdN_in = RT/V - ArVn - - if (present(dlnphidp)) then - dlnphidp(:) = -dPdN_in(:)/dPdV_in/RT - 1._pr/P_in - end if - if (present(dlnphidt)) then - dlnphidt(:) = (ArTn(:) - Arn(:)/T)/RT + dPdN_in(:)*dPdT_in/dPdV_in/RT + 1._pr/T - end if - - if (present(dlnphidn)) then - do i = 1, nc - do j = i, nc - dlnphidn(i, j) = 1._pr/TOTN + (Arn2(i, j) + dPdN_in(i)*dPdN_in(j)/dPdV_in)/RT - dlnphidn(j, i) = dlnphidn(i, j) - end do - end do - end if - - if (present(dPdV)) dPdV = dPdV_in - if (present(dPdT)) dPdT = dPdT_in - if (present(dPdN)) dPdN = dPdN_in - end subroutine fugacity_vt - - subroutine volume(eos, n, P, T, V, root_type, max_iters) - !! Volume solver at a given pressure. - !! - !! Obtain the volume using the method described by Michelsen and Møllerup. - !! While \(P(V, T)\) can be obtained with a simple Newton method, a better - !! approach is solving \(P(B/V, T)\) where \(B\) is the EoS covolume. - !! This method is easier to solve because: - !! \[ - !! V(P, T) \in [0, \infty) - !! \] - !! and - !! \[ - !! \frac{B}{V}(P, T) \in [0, 1] - !! \] - !! - !! At chapter 3 page 94 of Michelsen and Møllerup's book a more complete - !! explanation can be seen - use iso_fortran_env, only: error_unit - use stdlib_optval, only: optval - class(ArModel), intent(in) :: eos - real(pr), intent(in) :: n(:) !! Mixture moles - real(pr), intent(in) :: T !! Temperature [K] - real(pr), intent(in) :: P !! Pressure [bar] - real(pr), intent(out) :: V !! Volume [L] - character(len=*), optional, intent(in) :: root_type !! Type of root ["vapor" | "liquid" | "stable"] - integer, optional, intent(in) :: max_iters !! Maxiumum number of iterations, defaults to 100 - - character(len=10) :: root - - real(pr) :: Ar, ArV, ArV2 - - real(pr) :: totn - real(pr) :: B !! Covolume - real(pr) :: ZETMIN, ZETA, ZETMAX - real(pr) :: pcalc, AT, AVAP, VVAP - - integer :: iter, maximum_iterations - - maximum_iterations = optval(max_iters, 100) - root = optval(root_type, "stable") - - TOTN = sum(n) - B = eos%get_v0(n, p, t) - ITER = 0 - - ! Limits - ZETMIN = 0._pr - ZETMAX = 1._pr - - select case(root_type) - case("liquid") - ZETA = 0.5_pr - call solve_point(P, V, Pcalc, AT, iter) - case("vapor","stable") - ZETA = min(0.5_pr, B*P/(TOTN*R*T)) - call solve_point(P, V, Pcalc, AT, iter) - - if (root_type == "stable") then - ! Run first for vapor and then for liquid - VVAP = V - AVAP = AT - ZETA = 0.5_pr - ZETMAX = 1._pr - call solve_point(P, V, Pcalc, AT, iter) - if (AT .gt. AVAP) V = VVAP - end if - case default - write(error_unit, *) "ERROR [VCALC]: Wrong specification" - error stop 1 - end select - contains - subroutine solve_point(P, V, Pcalc, AT, iter) - real(pr), intent(in) :: P !! Objective pressure [bar] - real(pr), intent(out) :: V !! Obtained volume [L] - real(pr), intent(out) :: Pcalc !! Calculated pressure at V [bar] - real(pr), intent(out) :: AT !! - integer, intent(out) :: iter - - real(pr) :: del, der - - iter = 0 - DEL = 1 - pcalc = 2*p - do while(abs(DEL) > 1.e-10_pr .and. iter < maximum_iterations) - V = B/ZETA - iter = iter + 1 - call eos%residual_helmholtz(n, V, T, Ar=Ar, ArV=ArV, ArV2=ArV2) - - Pcalc = TOTN*R*T/V - ArV - - if (Pcalc .gt. P) then - ZETMAX = ZETA - else - ZETMIN = ZETA - end if - - ! AT is something close to Gr(P,T) - AT = (Ar + V*P)/(T*R) - TOTN*log(V) - - DER = (ArV2*V**2 + TOTN*R*T)/B ! this is dPdrho/B - DEL = -(Pcalc - P)/DER - ZETA = ZETA + max(min(DEL, 0.1_pr), -.1_pr) - - if (ZETA .gt. ZETMAX .or. ZETA .lt. ZETMIN) then - ZETA = 0.5_pr*(ZETMAX + ZETMIN) - end if - end do - - if (iter >= maximum_iterations) write(error_unit, *) & - "WARN: Volume solver exceeded maximum number of iterations" - end subroutine solve_point - end subroutine volume - - ! ========================================================================== - ! Residual Enthalpy - ! -------------------------------------------------------------------------- - subroutine enthalpy_residual_vt(eos, n, v, t, Hr, HrT, HrV, Hrn) - !! Calculate residual enthalpy given volume and temperature. - class(ArModel), intent(in) :: eos !! Model - real(pr), intent(in) :: n(:) !! Moles number vector - real(pr), intent(in) :: t !! Temperature [K] - real(pr), intent(in) :: v !! Volume [L] - real(pr), intent(out) :: Hr !! Residual enthalpy [bar L / mol] - real(pr), optional, intent(out) :: HrT !! \(\frac{dH^r}}{dT}\) - real(pr), optional, intent(out) :: HrV !! \(\frac{dH^r}}{dV}\) - real(pr), optional, intent(out) :: Hrn(size(n)) !! \(\frac{dH^r}}{dn}\) - - real(pr) :: Ar, ArV, ArT, Arn(size(n)) - real(pr) :: ArV2, ArT2, ArTV, ArVn(size(n)), ArTn(size(n)) - - call eos%residual_helmholtz(& - n, v, t, Ar=Ar, ArV=ArV, ArT=ArT, ArTV=ArTV, ArV2=ArV2, ArT2=ArT2, Arn=Arn, ArVn=ArVn, ArTn=ArTn & - ) - - Hr = Ar - t*ArT - v*ArV - - if (present(HrT)) HrT = - t*ArT2 - v*ArTV - if (present(HrV)) HrV = - t*ArTV - v*ArV2 - if (present(HrN)) HrN(:) = Arn(:) - t*ArTn(:) - v*ArVn(:) - end subroutine enthalpy_residual_vt - - ! ========================================================================== - ! Residual Gibbs energy - ! -------------------------------------------------------------------------- - subroutine gibbs_residual_vt(eos, n, v, t, Gr, GrT, GrV, Grn) - !! Calculate residual Gibbs energy given volume and temperature. - class(ArModel), intent(in) :: eos !! Model - real(pr), intent(in) :: n(:) !! Moles number vector - real(pr), intent(in) :: t !! Temperature [K] - real(pr), intent(in) :: v !! Volume [L] - real(pr), intent(out) :: Gr !! Gibbs energy [bar L / mol] - real(pr), optional, intent(out) :: GrT !! \(\frac{dG^r}}{dT}\) - real(pr), optional, intent(out) :: GrV !! \(\frac{dG^r}}{dV}\) - real(pr), optional, intent(out) :: Grn(size(n)) !! \(\frac{dG^r}}{dn}\) - - real(pr) :: Ar, ArV, ArT, Arn(size(n)) - real(pr) :: p, dpdv, dpdt, dpdn(size(n)), z, ntot - - ntot = sum(n) - call pressure(eos, n, v, t, p, dpdv=dpdv, dpdt=dpdt, dpdn=dpdn) - z = p*v/(ntot*R*t) - - call eos%residual_helmholtz(n, v, t, Ar=Ar, ArV=ArV, ArT=ArT, Arn=Arn) - - Gr = Ar + p*v - ntot*R*t - - if (present(GrT)) GrT = ArT + v*dpdt - ntot*R - if (present(GrV)) GrV = ArV + v*dpdv + p - if (present(GrN)) GrN(:) = Arn(:) + v*dpdn(:) - R*t - end subroutine gibbs_residual_vt - - ! ========================================================================== - ! Residual entropy - ! -------------------------------------------------------------------------- - subroutine entropy_residual_vt(eos, n, v, t, Sr, SrT, SrV, Srn) - !! Calculate residual entropy given volume and temperature. - class(ArModel), intent(in) :: eos !! Model - real(pr), intent(in) :: n(:) !! Moles number vector - real(pr), intent(in) :: t !! Temperature [K] - real(pr), intent(in) :: v !! Volume [L] - real(pr), intent(out) :: Sr !! Entropy [bar L / K / mol] - real(pr), optional, intent(out) :: SrT !! \(\frac{dS^r}}{dT}\) - real(pr), optional, intent(out) :: SrV !! \(\frac{dS^r}}{dV}\) - real(pr), optional, intent(out) :: Srn(size(n)) !! \(\frac{dS^r}}{dn}\) - - real(pr) :: Ar, ArT, ArT2, ArTV, ArTn(size(n)) - - call eos%residual_helmholtz(& - n, v, t, Ar=Ar, ArT=ArT, ArTV=ArTV, ArT2=ArT2, ArTn=ArTn & - ) - - Sr = - ArT - - if (present(SrT)) SrT = - ArT2 - if (present(SrV)) SrV = - ArTV - if (present(SrN)) SrN = - ArTn - end subroutine entropy_residual_vt - - ! ========================================================================== - ! Residual Cv - ! -------------------------------------------------------------------------- - subroutine Cv_residual_vt(eos, n, v, t, Cv) - !! Calculate residual heat capacity volume constant given v and t. - class(ArModel), intent(in) :: eos !! Model - real(pr), intent(in) :: n(:) !! Moles number vector - real(pr), intent(in) :: t !! Temperature [K] - real(pr), intent(in) :: v !! Volume [L] - real(pr), intent(out) :: Cv !! heat capacity v constant [bar L / K / mol] - - real(pr) :: Ar, ArT2 - - call eos%residual_helmholtz(n, v, t, Ar=Ar, ArT2=ArT2) - - Cv = -t*ArT2 - end subroutine Cv_residual_vt - - ! ========================================================================== - ! Residual Cp - ! -------------------------------------------------------------------------- - subroutine Cp_residual_vt(eos, n, v, t, Cp) - !! Calculate residual heat capacity pressure constant given v and t. - class(ArModel), intent(in) :: eos !! Model - real(pr), intent(in) :: n(:) !! Moles number vector - real(pr), intent(in) :: t !! Temperature [K] - real(pr), intent(in) :: v !! Volume [L] - real(pr), intent(out) :: Cp !! heat capacity p constant [bar L / K / mol] - - real(pr) :: Ar, ArT2, Cv, p, dpdt, dpdv, ntot - - ntot = sum(n) - - call eos%residual_helmholtz(n, v, t, Ar=Ar, ArT2=ArT2) - - call Cv_residual_vt(eos, n, v, t, Cv) - - call pressure(eos, n, v, t, p, dpdv=dpdv, dpdt=dpdt) - - Cp = Cv - t*dpdt**2/dpdv - ntot*R - end subroutine Cp_residual_vt -end module yaeos__thermoprops From 57aaa8ea22d074e00769a7e15f2fc0199aa1f536 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Mon, 15 Jul 2024 14:22:03 -0300 Subject: [PATCH 129/167] Adding specialized solvers module, now including Michelsen volume solving. --- src/models/solvers/volume.f90 | 142 ++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 src/models/solvers/volume.f90 diff --git a/src/models/solvers/volume.f90 b/src/models/solvers/volume.f90 new file mode 100644 index 000000000..a3bfac8a8 --- /dev/null +++ b/src/models/solvers/volume.f90 @@ -0,0 +1,142 @@ +module yaeos__models_solvers + !! # `models solvers` + !! Set of different specialized solvers for different models + !! + !! # Description + !! This module holds specialized solvers for different kind of applications + !! and models. + !! + !! ## Volume solving + !! This module holds the routine `volume_michelsen` which is a solver for + !! volume that takes advantage over a simple newton on the function of + !! pressure by solving the function of pressure over the covolume instead, + !! which solution is limited in the range [0, 1]. This solver requires that + !! the EoS uses the method `get_v0` to return the covolume. + !! + !! # Examples + !! + !! ```fortran + !! A basic code example + !! ``` + !! + !! # References + !! + use yaeos__constants, only: pr, R + use yaeos__models_ar, only: ArModel + implicit none + +contains + + subroutine volume_michelsen(eos, n, P, T, V, root_type, max_iters) + !! Volume solver at a given pressure. + !! + !! Obtain the volume using the method described by Michelsen and Møllerup. + !! While \(P(V, T)\) can be obtained with a simple Newton method, a better + !! approach is solving \(P(B/V, T)\) where \(B\) is the EoS covolume. + !! This method is easier to solve because: + !! \[ + !! V(P, T) \in [0, \infty) + !! \] + !! and + !! \[ + !! \frac{B}{V}(P, T) \in [0, 1] + !! \] + !! + !! At chapter 3 page 94 of Michelsen and Møllerup's book a more complete + !! explanation can be seen + use iso_fortran_env, only: error_unit + use stdlib_optval, only: optval + class(ArModel), intent(in) :: eos + real(pr), intent(in) :: n(:) !! Mixture moles + real(pr), intent(in) :: T !! Temperature [K] + real(pr), intent(in) :: P !! Pressure [bar] + real(pr), intent(out) :: V !! Volume [L] + character(len=*), optional, intent(in) :: root_type !! Type of root ["vapor" | "liquid" | "stable"] + integer, optional, intent(in) :: max_iters !! Maxiumum number of iterations, defaults to 100 + + character(len=10) :: root + + real(pr) :: Ar, ArV, ArV2 + + real(pr) :: totn + real(pr) :: B !! Covolume + real(pr) :: ZETMIN, ZETA, ZETMAX + real(pr) :: pcalc, AT, AVAP, VVAP + + integer :: iter, maximum_iterations + + maximum_iterations = optval(max_iters, 100) + root = optval(root_type, "stable") + + TOTN = sum(n) + B = eos%get_v0(n, p, t) + ITER = 0 + + ! Limits + ZETMIN = 0._pr + ZETMAX = 1._pr + + select case(root_type) + case("liquid") + ZETA = 0.5_pr + call solve_point(P, V, Pcalc, AT, iter) + case("vapor","stable") + ZETA = min(0.5_pr, B*P/(TOTN*R*T)) + call solve_point(P, V, Pcalc, AT, iter) + + if (root_type == "stable") then + ! Run first for vapor and then for liquid + VVAP = V + AVAP = AT + ZETA = 0.5_pr + ZETMAX = 1._pr + call solve_point(P, V, Pcalc, AT, iter) + if (AT .gt. AVAP) V = VVAP + end if + case default + write(error_unit, *) "ERROR [VCALC]: Wrong specification" + error stop 1 + end select + contains + subroutine solve_point(P, V, Pcalc, AT, iter) + real(pr), intent(in) :: P !! Objective pressure [bar] + real(pr), intent(out) :: V !! Obtained volume [L] + real(pr), intent(out) :: Pcalc !! Calculated pressure at V [bar] + real(pr), intent(out) :: AT !! + integer, intent(out) :: iter + + real(pr) :: del, der + + iter = 0 + DEL = 1 + pcalc = 2*p + do while(abs(DEL) > 1.e-10_pr .and. iter < maximum_iterations) + V = B/ZETA + iter = iter + 1 + call eos%residual_helmholtz(n, V, T, Ar=Ar, ArV=ArV, ArV2=ArV2) + + Pcalc = TOTN*R*T/V - ArV + + if (Pcalc .gt. P) then + ZETMAX = ZETA + else + ZETMIN = ZETA + end if + + ! AT is something close to Gr(P,T) + AT = (Ar + V*P)/(T*R) - TOTN*log(V) + + DER = (ArV2*V**2 + TOTN*R*T)/B ! this is dPdrho/B + DEL = -(Pcalc - P)/DER + ZETA = ZETA + max(min(DEL, 0.1_pr), -.1_pr) + + if (ZETA .gt. ZETMAX .or. ZETA .lt. ZETMIN) then + ZETA = 0.5_pr*(ZETMAX + ZETMIN) + end if + end do + + if (iter >= maximum_iterations) write(error_unit, *) & + "WARN: Volume solver exceeded maximum number of iterations" + end subroutine solve_point + end subroutine volume_michelsen +end module \ No newline at end of file From dd56df77aa77453a0af57a3c951a2c16259e6dfe Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Mon, 15 Jul 2024 14:22:26 -0300 Subject: [PATCH 130/167] Simple newton solver --- src/math/math.f90 | 45 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/src/math/math.f90 b/src/math/math.f90 index 292b1ac0b..ea9de0d9b 100644 --- a/src/math/math.f90 +++ b/src/math/math.f90 @@ -28,6 +28,22 @@ module yaeos__math use yaeos__math_continuation, only: continuation use yaeos__math_linalg, only: solve_system + use yaeos__constants, only: pr + + implicit none + + abstract interface + subroutine f_1d(x, f, df) + import pr + real(pr), intent(in) :: x + real(pr), intent(out) :: f + real(pr), intent(out) :: df + end subroutine f_1d + end interface + + interface newton + module procedure :: newton_1d + end interface newton contains elemental real(pr) function sq_error(exp, pred) @@ -62,11 +78,38 @@ function dx_to_dn(x, dx) result(dn) real(pr) :: dn(size(x)) real(pr) :: sum_xdx - + dn = 0 sum_xdx = sum(x * dx) dn = dx - sum_xdx end function dx_to_dn + + subroutine newton_1d(f, x, tol, max_iters) + procedure(f_1d) :: f + real(pr), intent(in out) :: x + real(pr), intent(in) :: tol + integer, intent(in) :: max_iters + + integer :: i + real(pr) :: fval, df, step + + + fval = 10 + step = 10 + + do i=1, max_iters + if (abs(fval) < tol .or. abs(step) < tol) exit + call f(x, fval, df) + + step = fval/df + + do while (abs(step) > 0.5 * abs(x)) + step = step/2 + end do + + x = x - step + end do + end subroutine newton_1d end module yaeos__math From 739d8f5e111b67842560866ff20b0bab99402924 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Mon, 15 Jul 2024 17:08:05 -0300 Subject: [PATCH 131/167] Moved thermoprops to methods --- app/flash.f90 | 2 +- app/main.f90 | 16 ++--- example/extra/benchmark.f90 | 10 +-- example/extra/flash.f90 | 2 +- example/tutorials/basics.f90 | 4 +- example/tutorials/new_alpha_function.f90 | 5 +- fpm.toml | 1 + .../consistency_tests/consistency_armodel.f90 | 12 ++-- src/math/linalg.f90 | 54 +++++++++++++- src/models/residual_helmholtz/ar_models.f90 | 6 +- .../boundaries/phase_envelopes_pt.f90 | 9 ++- src/phase_equilibria/flash.f90 | 24 +++---- src/phase_equilibria/saturations_points.f90 | 13 ++-- src/phase_equilibria/stability.f90 | 11 ++- src/yaeos.f90 | 2 - test/test_flash.f90 | 8 +-- .../ar_models/cubics/test_pr76.f90 | 25 +++---- test/test_saturation.f90 | 2 +- test/test_thermoprops.f90 | 71 ++++++++----------- 19 files changed, 148 insertions(+), 129 deletions(-) diff --git a/app/flash.f90 b/app/flash.f90 index 1907c4f86..1f6a83502 100644 --- a/app/flash.f90 +++ b/app/flash.f90 @@ -3,7 +3,7 @@ program flasher !! EoS model. ! Import the relevant - use yaeos, only: pr, EquilibriaState, flash, PengRobinson76, ArModel, fugacity_tp + use yaeos, only: pr, EquilibriaState, flash, PengRobinson76, ArModel implicit none ! Variables definition: diff --git a/app/main.f90 b/app/main.f90 index 49ffcbe57..c225cf06a 100644 --- a/app/main.f90 +++ b/app/main.f90 @@ -1,17 +1,12 @@ program main - use yaeos, only: pr, R, Substances, AlphaSoave, CubicEoS, GenericCubic_Ar, fugacity_vt, fugacity_tp, volume, QMR + use yaeos, only: pr, R, Substances, AlphaSoave, CubicEoS, GenericCubic_Ar use yaeos, only: ArModel, PengRobinson76 implicit none - type(Substances) :: compos - type(CubicEoS), target :: eos, eos2 - type(AlphaSoave) :: alpha - type(QMR) :: mixrule - - class(ArModel), pointer :: this + type(CubicEoS), target :: eos integer, parameter :: n=2 - real(pr) :: z(n), b, dbi(n), dbij(n,n) + real(pr) :: z(n) real(pr) :: v=1.0, t=150.0, p real(pr) :: ar @@ -19,12 +14,9 @@ program main real(pr) :: arn(n), arvn(n), artn(n), arn2(n,n) real(pr) :: lnfug(n), dlnphidp(n), dlnphidt(n), dlnphidn(n, n) - class(ArModel), allocatable :: models(:) real(pr) :: tc(n), pc(n), w(n), kij(n, n), lij(n, n) - integer :: i - z = [0.3_pr, 0.7_pr] tc = [190._pr, 310._pr] pc = [14._pr, 30._pr] @@ -38,7 +30,7 @@ program main v = 1 t = 150 - call fugacity_vt(eos, & + call eos%lnphi_vt(& z, V, T, P, lnfug, dlnPhidP, dlnphidT, dlnPhidn & ) diff --git a/example/extra/benchmark.f90 b/example/extra/benchmark.f90 index 3d4b7ee75..543c2ea3c 100644 --- a/example/extra/benchmark.f90 +++ b/example/extra/benchmark.f90 @@ -1,6 +1,6 @@ module bench use yaeos, only: pr, R, Substances, AlphaSoave, CubicEoS, & - fugacity_vt, QMR, PengRobinson76, ArModel, fugacity_tp + QMR, PengRobinson76, ArModel use hyperdual_pr76, only: PR76, setup_adiff_pr76 => setup use TapeRobinson, only: setup_taperobinson => setup_model implicit none @@ -49,14 +49,14 @@ subroutine yaeos__run(n, dn, f_p, model_name) if (dn) then if (f_p) then - call fugacity_tp(& - model, z, T, P, root_type="stable", & + call model%lnphi_tp(& + z, T, P, root_type="stable", & lnphip=lnfug, dlnphidp=dlnphidp, dlnphidn=dlnphidn) else - call fugacity_vt(model, z, V, T, P, lnfug, dlnPhidP, dlnphidT, dlnphidn) + call model%lnphi_vt(z, V, T, P, lnfug, dlnPhidP, dlnphidT, dlnphidn) end if else - call fugacity_vt(model, z, V, T, lnphip=lnfug) + call model%lnphi_vt(z, V, T, lnphip=lnfug) end if end subroutine diff --git a/example/extra/flash.f90 b/example/extra/flash.f90 index cd1581367..cc1ddbe84 100644 --- a/example/extra/flash.f90 +++ b/example/extra/flash.f90 @@ -1,5 +1,5 @@ module flashing - use yaeos, only: pr, EquilibriaState, flash, PengRobinson76, ArModel, fugacity_tp + use yaeos, only: pr, EquilibriaState, flash, PengRobinson76, ArModel implicit none contains diff --git a/example/tutorials/basics.f90 b/example/tutorials/basics.f90 index b83caa51d..0b6e2b653 100644 --- a/example/tutorials/basics.f90 +++ b/example/tutorials/basics.f90 @@ -32,10 +32,10 @@ program basics n = [0.3, 0.7] ! Pressure calculation - call pressure(model, n, v=2.5_pr, T=150._pr, P=P) + call model%pressure(n, v=2.5_pr, T=150._pr, P=P) print *, "P: ", P ! Derivatives can also be calculated when included as optional arguments! - call pressure(model, n, v=2.5_pr, T=150._pr, P=P, dPdV=dPdV) + call model%pressure(n, v=2.5_pr, T=150._pr, P=P, dPdV=dPdV) print *, "dPdV: ", dPdV end program basics diff --git a/example/tutorials/new_alpha_function.f90 b/example/tutorials/new_alpha_function.f90 index 8ef43e024..c222936c9 100644 --- a/example/tutorials/new_alpha_function.f90 +++ b/example/tutorials/new_alpha_function.f90 @@ -45,7 +45,6 @@ end module alpha_mathias_copeman program new_alpha_example use yaeos__example_tools, only: methane_butane_pr76 - use yaeos, only: fugacity_vt, pressure use yaeos, only: pr, PengRobinson76, CubicEoS, QMR use alpha_mathias_copeman, only: MathiasCopeman type(CubicEoS) :: eos @@ -67,14 +66,14 @@ program new_alpha_example v = 2 t = 150 - call pressure(eos, n, V, T, P=P) + call eos%pressure(n, V, T, P=P) print *, "Peng-Robinson76:", P ! Replace the original alpha deallocate(eos%alpha) ! Remove the already defined alpha eos%alpha = alpha ! assign the new defined alpha - call pressure(eos, n, V, T, P=P) + call eos%pressure(n, V, T, P=P) print *, "Peng-Robinson76-MC:", P diff --git a/fpm.toml b/fpm.toml index c545c1c85..7b08eba0e 100644 --- a/fpm.toml +++ b/fpm.toml @@ -26,6 +26,7 @@ forbear = {git="https://github.com/szaghi/forbear"} json-fortran = {git="https://github.com/jacobwilliams/json-fortran"} nlopt-f = {git="https://github.com/grimme-lab/nlopt-f"} forsus = {git="https://github.com/ipqa-research/forsus"} +fortime = { git = "https://github.com/gha3mi/fortime.git" } [dev-dependencies] test-drive = {git = "https://github.com/fortran-lang/test-drive"} diff --git a/src/consistency/consistency_tests/consistency_armodel.f90 b/src/consistency/consistency_tests/consistency_armodel.f90 index 3fb64710d..ecb4d243b 100644 --- a/src/consistency/consistency_tests/consistency_armodel.f90 +++ b/src/consistency/consistency_tests/consistency_armodel.f90 @@ -24,8 +24,6 @@ module yaeos__consistency_armodel !! use yaeos__constants, only: pr, R use yaeos__models_ar, only: ArModel - use yaeos__thermoprops, only: enthalpy_residual_vt, gibbs_residual_vt - use yaeos__thermoprops, only: fugacity_vt, pressure implicit none contains @@ -131,14 +129,14 @@ subroutine ar_consistency(& real(pr) :: lnphi(size(n)), lnphip(size(n)), dlnPhidP(size(n)) real(pr) :: dlnPhidT(size(n)), dlnPhidn(size(n), size(n)) - call pressure(eos, n, v, t, p, dpdn=dpdn) + call eos%pressure(n, v, t, p, dpdn=dpdn) - call gibbs_residual_vt(eos, n, v, t, Grv) + call eos%gibbs_residual_vt(n, v, t, Grv) - call enthalpy_residual_vt(eos, n, v, t, Hr=Hrv) + call eos%enthalpy_residual_vt(n, v, t, Hr=Hrv) - call fugacity_vt(& - eos, n, v, t, lnphip=lnphip, & + call eos%lnphi_vt(& + n, v, t, lnphip=lnphip, & dlnPhidP=dlnPhidP, dlnPhidT=dlnPhidT, dlnPhidn=dlnPhidn & ) diff --git a/src/math/linalg.f90 b/src/math/linalg.f90 index d293fefde..9fe758959 100644 --- a/src/math/linalg.f90 +++ b/src/math/linalg.f90 @@ -26,7 +26,7 @@ subroutine dgesv(n, nrhs, a, lda, ipiv, b, ldb, info) real(dp) :: b(n) integer :: ldb integer :: info - end subroutine + end subroutine dgesv end interface n = size(a, dim=1) @@ -42,4 +42,54 @@ subroutine dgesv(n, nrhs, a, lda, ipiv, b, ldb, info) x = b_lapack end function solve_system -end module \ No newline at end of file + + subroutine cubic_roots(a, b, c, d, r1, r2, r3, flag) + real(pr), parameter :: pi=atan(1.0_pr)*4 + real(pr), intent(in) :: a, b, c, d + real(pr), intent(out) :: r1, r2, r3 + integer, intent(out) :: flag + + real(pr) :: p, q, u, v + real(pr) :: disc + + real(pr) :: z1, z2, z3, theta + + p = c/a - b**2/(3*a**2) + q = d/a - b*c/(3*a**2) + 2*b**3/(27*a**3) + + disc = q**2 + 4*p**3 / 27 + + z1 = 0 + z2 = 0 + z3 = 0 + r1 = 0 + r2 = 0 + r3 = 0 + + if (abs(disc) < 1e-15) then + flag = 0 + z1 = 3*q/p + z2 = -3*q/(2*p) + z3 = z2 + elseif (disc < 0) then + flag = -1 + theta = acos(0.5_pr * 3 * q / p * sqrt(-3/p)) + z1 = 2 * sqrt(-p/3) * cos(theta/3) + z2 = 2 * sqrt(-p/3) * cos((theta + 2*pi)/3) + z3 = 2 * sqrt(-p/3) * cos((theta + 4*pi)/3) + elseif (disc > 0) then + flag = 1 + u = ((-q + sqrt(disc))/2) + v = ((-q - sqrt(disc))/2) + + u = sign(abs(u)**(1.0_pr/3.0_pr), u) + v = sign(abs(v)**(1.0_pr/3.0_pr), v) + z1 = u + v + endif + + r1 = z1 - b/(3*a) + r2 = z2 - b/(3*a) + r3 = z3 - b/(3*a) + end subroutine + +end module yaeos__math_linalg diff --git a/src/models/residual_helmholtz/ar_models.f90 b/src/models/residual_helmholtz/ar_models.f90 index d757e1329..4c1283c0e 100644 --- a/src/models/residual_helmholtz/ar_models.f90 +++ b/src/models/residual_helmholtz/ar_models.f90 @@ -134,7 +134,7 @@ subroutine volume(eos, n, P, T, V, root_type) totnRT = sum(n) * R * T select case(root_type) case("liquid") - Vliq = eos%get_v0(n, P, T)! *1.001_pr + Vliq = eos%get_v0(n, P, T) * 1.001_pr call newton(foo, Vliq, tol=tol, max_iters=max_iters) GrL = Gr case("vapor") @@ -240,8 +240,8 @@ subroutine fugacity_tp(eos, & real(pr) :: v_in, p_in - call volume(eos, n, P, T, V_in, root_type) - call fugacity_vt(eos, n, v_in, T, P_in, lnphip, dlnphidp, dlnphidt, dlnphidn) + call eos%volume(n, P, T, V_in, root_type) + call eos%lnphi_vt(n, v_in, T, P_in, lnphip, dlnphidp, dlnphidt, dlnphidn) if(present(v)) v = v_in if(abs(P_in - p) > 1e-2) then write(error_unit, *) "WARN: possible bad root solving: ", p_in, p diff --git a/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 b/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 index 69e0c31fb..06ad066e9 100644 --- a/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 +++ b/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 @@ -3,7 +3,6 @@ module yaeos__phase_equilibria_boundaries_phase_envelopes_pt use yaeos__constants, only: pr use yaeos__models, only: ArModel use yaeos__equilibria_equilibria_state, only: EquilibriaState - use yaeos__thermoprops, only: fugacity_tp use yaeos__math_continuation, only: & continuation, continuation_solver, continuation_stopper implicit none @@ -156,13 +155,13 @@ subroutine foo(X, ns, S, F, dF, dFdS) kind_y = "stable" end select - call fugacity_tp(& - model, z, T, P, V=Vz, root_type=kind_z, & + call model%lnphi_tp(& + z, T, P, V=Vz, root_type=kind_z, & lnphip=lnphip_z, dlnPhidt=dlnphi_dt_z, & dlnPhidp=dlnphi_dp_z, dlnphidn=dlnphi_dn_z & ) - call fugacity_tp(& - model, y, T, P, V=Vy, root_type=kind_y, & + call model%lnphi_tp(& + y, T, P, V=Vy, root_type=kind_y, & lnphip=lnphip_y, dlnPhidt=dlnphi_dt_y, & dlnPhidp=dlnphi_dp_y, dlnphidn=dlnphi_dn_y & ) diff --git a/src/phase_equilibria/flash.f90 b/src/phase_equilibria/flash.f90 index b50b4d547..ceaa7b580 100644 --- a/src/phase_equilibria/flash.f90 +++ b/src/phase_equilibria/flash.f90 @@ -2,7 +2,6 @@ module yaeos__equilibria_flash use yaeos__constants, only: pr use yaeos__models, only: ArModel use yaeos__equilibria_equilibria_state, only: EquilibriaState - use yaeos__thermoprops, only: fugacity_vt, fugacity_tp, pressure use yaeos__phase_equilibria_rachford_rice, only: betato01, betalimits, rachford_rice, solve_rr use yaeos__phase_equilibria_auxiliar, only: k_wilson implicit none @@ -72,7 +71,7 @@ type(EquilibriaState) function flash(model, z, t, v_spec, p_spec, k0, iters) Vx = 0.0 if (.not. present(k0)) then ! the EoS one-phase pressure will be used to estimate Wilson K factors - call pressure(model, z, v_spec, t, p=p) + call model%pressure(z, v_spec, t, p=p) if (P < 0) P = 1.0 end if end if @@ -110,11 +109,11 @@ type(EquilibriaState) function flash(model, z, t, v_spec, p_spec, k0, iters) case("TV") ! find Vy,Vx (vV and vL) from V balance and P equality equations call tv_loop_solve_pressures(model, T, V, beta, x, y, Vx, Vy, P) - call fugacity_tp(model, y, T, P, V=Vy, root_type="stable", lnphip=lnfug_y) - call fugacity_tp(model, x, T, P, V=Vx, root_type="liquid", lnphip=lnfug_x) + call model%lnphi_tp(y, T, P, V=Vy, root_type="stable", lnphip=lnfug_y) + call model%lnphi_tp(x, T, P, V=Vx, root_type="liquid", lnphip=lnfug_x) case("TP") - call fugacity_tp(model, y, T, P, V=Vy, root_type="stable", lnphip=lnfug_y) - call fugacity_tp(model, x, T, P, V=Vx, root_type="liquid", lnphip=lnfug_x) + call model%lnphi_tp(y, T, P, V=Vy, root_type="stable", lnphip=lnfug_y) + call model%lnphi_tp(x, T, P, V=Vx, root_type="liquid", lnphip=lnfug_x) end select dKold = dK @@ -186,7 +185,6 @@ end function flash subroutine tv_loop_solve_pressures(model, T, V, beta, x, y, vx, vy, P) !! Solve pressure equality between two phases at a given temperature, !! total volume, vapor molar fractions and compositions. - use yaeos__thermoprops, only: fugacity_vt, pressure use iso_fortran_env, only: error_unit class(ArModel), intent(in) :: model @@ -218,11 +216,11 @@ subroutine tv_loop_solve_pressures(model, T, V, beta, x, y, vx, vy, P) ! First evaluation will be with Vx = 1.5*Bx if (Vx < Bx) Vx = 1.625_pr*Bx - call pressure(model, x, Vx, T, Px, dpdv=dPxdV) + call model%pressure(x, Vx, T, Px, dpdv=dPxdV) do while (Px < 0 .or. dPxdV >= 0) Vx = Vx - 0.2*(Vx - Bx) - call pressure(model, x, Vx, T, Px, dpdv=dPxdV) + call model%pressure(x, Vx, T, Px, dpdv=dPxdV) end do Vy = (V - (1 - beta)*Vx)/beta @@ -233,8 +231,8 @@ subroutine tv_loop_solve_pressures(model, T, V, beta, x, y, vx, vy, P) ! Newton for solving P equality, with Vx as independent variable its = its + 1 - call pressure(model, x, Vx, T, Px, dpdv=dPxdV) - call pressure(model, y, Vy, T, Py, dpdv=dPydV) + call model%pressure(x, Vx, T, Px, dpdv=dPxdV) + call model%pressure(y, Vy, T, Py, dpdv=dPydV) h = Py - Px dh = -dPydV * dVydVx - dPxdV @@ -258,8 +256,8 @@ subroutine tv_loop_solve_pressures(model, T, V, beta, x, y, vx, vy, P) end if end do - call pressure(model, x, Vx, T, Px) - call pressure(model, y, Vy, T, Py) + call model%pressure(x, Vx, T, Px) + call model%pressure(y, Vy, T, Py) P = (Px + Py) * 0.5_pr end subroutine tv_loop_solve_pressures end module yaeos__equilibria_flash diff --git a/src/phase_equilibria/saturations_points.f90 b/src/phase_equilibria/saturations_points.f90 index b30a12ddf..c28d418bd 100644 --- a/src/phase_equilibria/saturations_points.f90 +++ b/src/phase_equilibria/saturations_points.f90 @@ -1,7 +1,6 @@ module yaeos__equilibria_saturation_points use yaeos__constants, only: pr use yaeos__models, only: ArModel - use yaeos__thermoprops, only: fugacity_vt, fugacity_tp use yaeos__equilibria_equilibria_state, only: EquilibriaState use yaeos__phase_equilibria_auxiliar, only: k_wilson @@ -22,7 +21,6 @@ type(EquilibriaState) function saturation_pressure(model, n, t, kind, p0, y0, ma !! - Dew point: `kind="dew"` !! - Liquid-Liquid point: `kind="liquid-liquid"` use stdlib_optval, only: optval - use yaeos__thermoprops, only: pressure class(ArModel), intent(in) :: model real(pr), intent(in) :: n(:) !! Composition vector [moles / molar fraction] real(pr), intent(in) :: t !! Temperature [K] @@ -50,7 +48,7 @@ type(EquilibriaState) function saturation_pressure(model, n, t, kind, p0, y0, ma if (present (p0)) then p = p0 else - call pressure(model, z, T, 10._pr, P=P) + call model%pressure(z, T, 10._pr, P=P) end if if (present(y0)) then @@ -85,8 +83,8 @@ type(EquilibriaState) function saturation_pressure(model, n, t, kind, p0, y0, ma ! ------------------------------------------------------------------------ do its=1, iterations y = k*z - call fugacity_tp(model, y, T, P, vy, incipient, lnphip=lnfug_y, dlnphidp=dlnphi_dp_y) - call fugacity_tp(model, z, T, P, vz, main, lnphip=lnfug_z, dlnphidp=dlnphi_dp_z) + call model%lnphi_tp(y, T, P, vy, incipient, lnphip=lnfug_y, dlnphidp=dlnphi_dp_y) + call model%lnphi_tp(z, T, P, vz, main, lnphip=lnfug_z, dlnphidp=dlnphi_dp_z) k = exp(lnfug_z - lnfug_y) @@ -132,7 +130,6 @@ type(EquilibriaState) function saturation_temperature(model, n, p, kind, t0, y0, !! - Dew point: `kind="dew"` !! - Liquid-Liquid point: `kind="liquid-liquid"` use stdlib_optval, only: optval - use yaeos__thermoprops, only: pressure class(ArModel), intent(in) :: model real(pr), intent(in) :: n(:) !! Composition vector [moles / molar fraction] real(pr), intent(in) :: p !! Pressure [bar] @@ -195,8 +192,8 @@ type(EquilibriaState) function saturation_temperature(model, n, p, kind, t0, y0, ! ------------------------------------------------------------------------ do its=1, iterations y = k*z - call fugacity_tp(model, y, T, P, vy, incipient, lnphip=lnfug_y, dlnphidt=dlnphi_dt_y) - call fugacity_tp(model, z, T, P, vz, main, lnphip=lnfug_z, dlnphidt=dlnphi_dt_z) + call model%lnphi_tp(y, T, P, vy, incipient, lnphip=lnfug_y, dlnphidt=dlnphi_dt_y) + call model%lnphi_tp(z, T, P, vz, main, lnphip=lnfug_z, dlnphidt=dlnphi_dt_z) k = exp(lnfug_z - lnfug_y) f = sum(z*k) - 1 diff --git a/src/phase_equilibria/stability.f90 b/src/phase_equilibria/stability.f90 index cb833ff0a..d4a6766ca 100644 --- a/src/phase_equilibria/stability.f90 +++ b/src/phase_equilibria/stability.f90 @@ -30,7 +30,6 @@ module yaeos__phase_equilibria_stability !! Michelsen, Jørgen M. Mollerup. Tie-Line Publications, Denmark (2004) !! [doi](http://dx.doi.org/10.1016/j.fluid.2005.11.032) use yaeos__constants, only: pr, r - use yaeos__thermoprops, only: fugacity_vt, fugacity_tp use yaeos__models_ar, only: ArModel implicit none @@ -84,14 +83,14 @@ real(pr) function tm(model, z, w, P, T, d, dtpd) real(pr) :: di(size(z)), vz, vw real(pr) :: lnphi_z(size(z)), lnphi_w(size(z)) - call fugacity_tp(& - model, w, T=T, P=P, V=Vw, root_type="stable", lnphip=lnphi_w & + call model%lnphi_tp(& + w, T=T, P=P, V=Vw, root_type="stable", lnphip=lnphi_w & ) lnphi_w = lnphi_w - log(P) if (.not. present(d)) then - call fugacity_tp(& - model, z, T=T, P=P, V=Vz, root_type="stable", lnphip=lnphi_z& + call model%lnphi_tp(& + z, T=T, P=P, V=Vz, root_type="stable", lnphip=lnphi_z& ) lnphi_z = lnphi_z - log(P) di = log(z) + lnphi_z @@ -135,7 +134,7 @@ subroutine min_tpd(model, z, P, T, mintpd, w, all_minima) dx = 0.001_pr ! Calculate feed di - call fugacity_tp(model, z, T=T, P=P, V=V, root_type="stable", lnphip=lnphi_z) + call model%lnphi_tp(z, T=T, P=P, V=V, root_type="stable", lnphip=lnphi_z) lnphi_z = lnphi_z - log(P) di = log(z) + lnphi_z diff --git a/src/yaeos.f90 b/src/yaeos.f90 index 86bf7ffce..1ac5c7fc8 100644 --- a/src/yaeos.f90 +++ b/src/yaeos.f90 @@ -9,13 +9,11 @@ module yaeos !! - [[yaeos__consistency(module)]]: Tools to evalaute the consistency of Ar and Ge models. !! - [[yaeos__substance(module)]]: Derived type that holds the important data (for example, critical constants) from a mixture. !! - [[yaeos__models(module)]]: All the implemented models, also their base types for making extensions. - !! - [[yaeos__thermoprops(module)]]: Available thermodynamic properties to calculate. !! - [[yaeos__equilibria(module)]]: Phase equilibria related procedures. use yaeos__constants use yaeos__consistency use yaeos__substance use yaeos__models - use yaeos__thermoprops use yaeos__equilibria character(len=*), parameter :: version="0.3.0" !! This version. end module diff --git a/test/test_flash.f90 b/test/test_flash.f90 index cf68dd6bf..53dd1a03d 100644 --- a/test/test_flash.f90 +++ b/test/test_flash.f90 @@ -59,7 +59,7 @@ subroutine test_tm(error) end subroutine test_tm subroutine test_flash_pt(error) - use yaeos, only: pr, EquilibriaState, flash, PengRobinson76, ArModel, fugacity_tp + use yaeos, only: pr, EquilibriaState, flash, PengRobinson76, ArModel type(error_type), allocatable, intent(out) :: error integer, parameter :: nc = 2 @@ -95,7 +95,7 @@ subroutine test_flash_pt(error) end subroutine test_flash_pt subroutine test_flash_tv(error) - use yaeos, only: pr, EquilibriaState, flash, PengRobinson76, ArModel, fugacity_tp + use yaeos, only: pr, EquilibriaState, flash, PengRobinson76, ArModel use fixtures_models, only: binary_PR76 type(error_type), allocatable, intent(out) :: error @@ -135,7 +135,7 @@ subroutine test_flash_tv(error) end subroutine test_flash_tv subroutine test_flash_pt_failed(error) - use yaeos, only: pr, EquilibriaState, flash, PengRobinson76, ArModel, fugacity_tp + use yaeos, only: pr, EquilibriaState, flash, PengRobinson76, ArModel type(error_type), allocatable, intent(out) :: error integer, parameter :: nc = 2 @@ -167,7 +167,7 @@ subroutine test_flash_pt_failed(error) end subroutine test_flash_pt_failed subroutine test_flash_pt_bad_spec(error) - use yaeos, only: pr, EquilibriaState, flash, PengRobinson76, ArModel, fugacity_tp + use yaeos, only: pr, EquilibriaState, flash, PengRobinson76, ArModel type(error_type), allocatable, intent(out) :: error integer, parameter :: nc = 2 diff --git a/test/test_implementations/ar_models/cubics/test_pr76.f90 b/test/test_implementations/ar_models/cubics/test_pr76.f90 index 8df8e1eca..aceaf59bd 100644 --- a/test/test_implementations/ar_models/cubics/test_pr76.f90 +++ b/test/test_implementations/ar_models/cubics/test_pr76.f90 @@ -241,7 +241,6 @@ end subroutine test_pr76_cons_pure subroutine test_pr76_compressibility_factor(error) ! From original paper. use yaeos, only: pr, R, PengRobinson76, ArModel - use yaeos__thermoprops, only: volume type(error_type), allocatable, intent(out) :: error integer :: i @@ -272,7 +271,7 @@ subroutine test_pr76_compressibility_factor(error) Z1 = [0.151_pr, 0.248_pr, 0.482_pr, 0.707_pr, 0.926_pr] do i=1,5 - call volume(model, z, P1(i), T, V=v, root_type="stable") + call model%volume(z, P1(i), T, V=v, root_type="stable") Zcomp = P1(i) * v / (R * T) call check(error, abs(Zcomp - Z1(i)) < 1e-3) @@ -284,7 +283,7 @@ subroutine test_pr76_compressibility_factor(error) Z2 = [0.289_pr, 0.482_pr, 0.665_pr, 0.840_pr] do i=1,4 - call volume(model, z, P2(i), T, V=v, root_type="stable") + call model%volume(z, P2(i), T, V=v, root_type="stable") Zcomp = P2(i) * v / (R * T) call check(error, abs(Zcomp - Z2(i)) < 1e-3) @@ -296,7 +295,7 @@ subroutine test_pr76_compressibility_factor(error) Z3 = [0.804_pr, 0.696_pr, 0.643_pr, 0.744_pr, 0.869_pr] do i=1,5 - call volume(model, z, P3(i), T, V=v, root_type="stable") + call model%volume(z, P3(i), T, V=v, root_type="stable") Zcomp = P3(i) * v / (R * T) call check(error, abs(Zcomp - Z3(i)) < 1e-3) @@ -311,7 +310,7 @@ subroutine test_pr76_compressibility_factor(error) Z4 = [0.215_pr, 0.404_pr, 0.580_pr, 0.750_pr] do i=1,4 - call volume(model, z, P4(i), T, V=v, root_type="stable") + call model%volume(z, P4(i), T, V=v, root_type="stable") Zcomp = P4(i) * v / (R * T) call check(error, abs(Zcomp - Z4(i)) < 1e-3) @@ -323,7 +322,7 @@ subroutine test_pr76_compressibility_factor(error) Z5 = [0.782_pr, 0.638_pr, 0.545_pr, 0.645_pr, 0.765_pr] do i=1,5 - call volume(model, z, P5(i), T, V=v, root_type="stable") + call model%volume( z, P5(i), T, V=v, root_type="stable") Zcomp = P5(i) * v / (R * T) call check(error, abs(Zcomp - Z5(i)) < 1e-3) @@ -335,7 +334,7 @@ subroutine test_pr76_compressibility_factor(error) Z6 = [0.920_pr, 0.870_pr, 0.796_pr, 0.806_pr, 0.877_pr] do i=1,5 - call volume(model, z, P6(i), T, V=v, root_type="stable") + call model%volume(z, P6(i), T, V=v, root_type="stable") Zcomp = P6(i) * v / (R * T) call check(error, abs(Zcomp - Z6(i)) < 2e-2) @@ -345,7 +344,6 @@ end subroutine test_pr76_compressibility_factor subroutine test_pr76_co2_volume(error) ! From Elliot's book. use yaeos, only : pr, PengRobinson76, ArModel - use yaeos__thermoprops, only: volume type(error_type), allocatable, intent(out) :: error class(ArModel), allocatable :: model @@ -357,17 +355,16 @@ subroutine test_pr76_co2_volume(error) n = [1.0_pr] mw = 44.01 ! g / mol - call volume(model, n, 8.0_pr, 310.0_pr, V=V, root_type="stable") + call model%volume(n, 8.0_pr, 310.0_pr, V=V, root_type="stable") call check(error, abs(V / mw * 1000 - 70.37) < 0.06) - call volume(model, n, 75.0_pr, 310.0_pr, V=V, root_type="stable") + call model%volume(n, 75.0_pr, 310.0_pr, V=V, root_type="stable") call check(error, abs(V / mw * 1000 - 3.84) < 0.01) end subroutine test_pr76_co2_volume subroutine test_pr76_fugacities(error) ! K values of N2-CH4 (0.5, 0.5) mixture from Elliot's book. use yaeos, only: pr, R, PengRobinson76, ArModel - use yaeos__thermoprops, only: fugacity_tp, volume type(error_type), allocatable, intent(out) :: error class(ArModel), allocatable :: model @@ -385,9 +382,9 @@ subroutine test_pr76_fugacities(error) [0.040_pr, 0.011_pr] & ) - call volume(model, z_v, P, T, root_type="vapor", V=v_v) - call fugacity_tp(model, z_v, T, P, root_type="vapor", lnphip = lnphip_v) - call fugacity_tp(model, z_l, T, P, root_type="liquid", lnphip = lnphip_l) + call model%volume(z_v, P, T, root_type="vapor", V=v_v) + call model%lnphi_tp(z_v, T, P, root_type="vapor", lnphip = lnphip_v) + call model%lnphi_tp(z_l, T, P, root_type="liquid", lnphip = lnphip_l) ! Elliot Z value of vapor call check(error, abs(P * v_v / R / T - 0.9059) < 1e-4) diff --git a/test/test_saturation.f90 b/test/test_saturation.f90 index 9c408dea7..df192c3d3 100644 --- a/test/test_saturation.f90 +++ b/test/test_saturation.f90 @@ -126,7 +126,7 @@ subroutine test_bubble_temperature(error) T = 200 model = binary_PR76() - bubble = saturation_temperature(model, n, P, kind="bubble", t0=300._pr) + bubble = saturation_temperature(model, n, P, kind="bubble", t0=100._pr) call check(error, maxval(abs(bubble%x - x)) < abs_tolerance) call check(error, maxval(abs(bubble%y - y)) < abs_tolerance) call check(error, abs(bubble%p - p) < abs_tolerance) diff --git a/test/test_thermoprops.f90 b/test/test_thermoprops.f90 index fe3a5f1fc..e045a1d56 100644 --- a/test/test_thermoprops.f90 +++ b/test/test_thermoprops.f90 @@ -21,7 +21,7 @@ end subroutine collect_suite subroutine test_fugacity_VT(error) use fixtures_models, only: binary_PR76 - use yaeos, only: pr, CubicEoS, fugacity_vt + use yaeos, only: pr, CubicEoS type(error_type), allocatable, intent(out) :: error type(CubicEoS) :: eos @@ -43,14 +43,10 @@ subroutine test_fugacity_VT(error) v = 8.8780451065729321E-002_pr t = 150 - call fugacity_vt(eos, & + call eos%lnphi_vt(& z, V, T, P, lnfug, dlnPhidP, dlnphidT, dlnPhidn & ) - print * , lnfug - print * , dlnphidP - print * , dlnphidT - call check( & error, maxval(abs(lnfug - lnfug_val)) < 1e-5 & ) @@ -64,7 +60,7 @@ end subroutine test_fugacity_VT subroutine test_fugacity_TP(error) use fixtures_models, only: binary_PR76 - use yaeos, only: pr, CubicEoS, fugacity_tp + use yaeos, only: pr, CubicEoS type(error_type), allocatable, intent(out) :: error type(CubicEoS) :: eos @@ -90,8 +86,9 @@ subroutine test_fugacity_TP(error) t = 150 root_type = "liquid" + print *, "FASF" - call fugacity_tp(eos, & + call eos%lnphi_tp(& z, T, P, V, root_type, lnfug, dlnPhidP, dlnphidT, dlnPhidn& ) @@ -111,7 +108,6 @@ end subroutine test_fugacity_TP ! -------------------------------------------------------------------------- subroutine test_enthalpy_residual_vt(error) use yaeos, only: pr, R, CubicEoS, PengRobinson76 - use yaeos, only: enthalpy_residual_vt, fugacity_vt type(error_type), allocatable, intent(out) :: error @@ -143,11 +139,11 @@ subroutine test_enthalpy_residual_vt(error) eos = PengRobinson76(tc, pc, w, kij, lij) ! yaeos residual enthalpies - call enthalpy_residual_vt(eos, z, v, t, Hr, HrT=HrT, HrV=HrV, Hrn=Hrn) + call eos%enthalpy_residual_vt(z, v, t, Hr, HrT=HrT, HrV=HrV, Hrn=Hrn) ! test against fugacity coefficient derivatives ! (Michelsen and Mollerup chapter 2 eq 37) - call fugacity_vt(eos, z, v, t, lnphip=lnfug, dlnphidt=dlnphidt) + call eos%lnphi_vt(z, v, t, lnphip=lnfug, dlnphidt=dlnphidt) Hr_fromphi = -1_pr * sum(z * dlnphidT) * R * t**2 ! Hr(T,P) = Hr(T,V) @@ -157,7 +153,7 @@ subroutine test_enthalpy_residual_vt(error) ! numeric derivatives residual enthalpies ! HrT_num - call enthalpy_residual_vt(eos, z, v, t + delta_t, Hr_delta_t) + call eos%enthalpy_residual_vt(z, v, t + delta_t, Hr_delta_t) HrT_num = (Hr_delta_t - Hr) / delta_t @@ -166,7 +162,7 @@ subroutine test_enthalpy_residual_vt(error) ) ! HrV_num - call enthalpy_residual_vt(eos, z, v + delta_v, t, Hr_delta_v) + call eos%enthalpy_residual_vt(z, v + delta_v, t, Hr_delta_v) HrV_num = (Hr_delta_v - Hr) / delta_v @@ -176,10 +172,10 @@ subroutine test_enthalpy_residual_vt(error) ! Hrn_num zd1 = [0.3_pr + delta_n, 0.7_pr] - call enthalpy_residual_vt(eos, zd1, v, t, Hr_delta_n1) + call eos%enthalpy_residual_vt(zd1, v, t, Hr_delta_n1) zd2 = [0.3_pr, 0.7_pr + delta_n] - call enthalpy_residual_vt(eos, zd2, v, t, Hr_delta_n2) + call eos%enthalpy_residual_vt(zd2, v, t, Hr_delta_n2) Hrn_num = [(Hr_delta_n1 - Hr) / delta_n, (Hr_delta_n2 - Hr) / delta_n] @@ -194,7 +190,6 @@ end subroutine test_enthalpy_residual_vt ! -------------------------------------------------------------------------- subroutine test_gibss_residual_vt(error) use yaeos, only: pr, R, CubicEoS, SoaveRedlichKwong - use yaeos, only: gibbs_residual_vt, fugacity_vt, pressure type(error_type), allocatable, intent(out) :: error @@ -225,16 +220,16 @@ subroutine test_gibss_residual_vt(error) eos = SoaveRedlichKwong(tc, pc, w, kij, lij) - call pressure(eos, z, v, t, p) + call eos%pressure(z, v, t, p) ntot = sum(z) Zcomp = p*v/(ntot*R*t) ! yaeos residual gibbs - call gibbs_residual_vt(eos, z, v, t, Gr, GrT=GrT, GrV=GrV, Grn=Grn) + call eos%gibbs_residual_vt(z, v, t, Gr, GrT=GrT, GrV=GrV, Grn=Grn) ! test against fugacity coefficient ! (Michelsen and Mollerup chapter 2 eq 31) - call fugacity_vt(eos, z, v, t, lnphip=lnfug) + call eos%lnphi_vt(z, v, t, lnphip=lnfug) lnfugcoeffs = lnfug - log(p) ! lnfug is = ln(phi * p) @@ -248,7 +243,7 @@ subroutine test_gibss_residual_vt(error) ! numeric derivatives residual enthalpies ! GrT_num - call gibbs_residual_vt(eos, z, v, t + delta_t, Gr_delta_t) + call eos%gibbs_residual_vt(z, v, t + delta_t, Gr_delta_t) GrT_num = (Gr_delta_t - Gr) / delta_t @@ -257,7 +252,7 @@ subroutine test_gibss_residual_vt(error) ) ! GrV_num - call gibbs_residual_vt(eos, z, v + delta_v, t, Gr_delta_v) + call eos%gibbs_residual_vt(z, v + delta_v, t, Gr_delta_v) GrV_num = (Gr_delta_v - Gr) / delta_v @@ -267,10 +262,10 @@ subroutine test_gibss_residual_vt(error) ! Grn_num zd1 = [0.3_pr + delta_n, 0.7_pr] - call gibbs_residual_vt(eos, zd1, v, t, Gr_delta_n1) + call eos%gibbs_residual_vt(zd1, v, t, Gr_delta_n1) zd2 = [0.3_pr, 0.7_pr + delta_n] - call gibbs_residual_vt(eos, zd2, v, t, Gr_delta_n2) + call eos%gibbs_residual_vt(zd2, v, t, Gr_delta_n2) Grn_num = [(Gr_delta_n1 - Gr) / delta_n, (Gr_delta_n2 - Gr) / delta_n] @@ -284,10 +279,7 @@ end subroutine test_gibss_residual_vt ! Sr ! -------------------------------------------------------------------------- subroutine test_entropy_residual_vt(error) - use yaeos, only: pr, R, CubicEoS, SoaveRedlichKwong, pressure - use yaeos, only: entropy_residual_vt - use yaeos, only: enthalpy_residual_vt - use yaeos, only: gibbs_residual_vt + use yaeos, only: pr, R, CubicEoS, SoaveRedlichKwong type(error_type), allocatable, intent(out) :: error @@ -321,14 +313,14 @@ subroutine test_entropy_residual_vt(error) eos = SoaveRedlichKwong(tc, pc, w, kij, lij) - call pressure(eos, z, v, t, p) + call eos%pressure(z, v, t, p) Zcomp = p*v/(ntot*R*t) ! yaeos residual gibbs - call entropy_residual_vt(eos, z, v, t, Sr, SrT=SrT, SrV=SrV, Srn=Srn) - call enthalpy_residual_vt(eos, z, v, t, Hr) - call gibbs_residual_vt(eos, z, v, t, Gr) + call eos%entropy_residual_vt(z, v, t, Sr, SrT=SrT, SrV=SrV, Srn=Srn) + call eos%enthalpy_residual_vt(z, v, t, Hr) + call eos%gibbs_residual_vt(z, v, t, Gr) ! test against Hr and Gr ! (Michelsen and Mollerup chapter 2 eq 22) @@ -341,7 +333,7 @@ subroutine test_entropy_residual_vt(error) ) ! SrT_num - call entropy_residual_vt(eos, z, v, t + delta_t, Sr_delta_t) + call eos%entropy_residual_vt(z, v, t + delta_t, Sr_delta_t) SrT_num = (Sr_delta_t - Sr) / delta_t @@ -350,7 +342,7 @@ subroutine test_entropy_residual_vt(error) ) ! SrV_num - call entropy_residual_vt(eos, z, v + delta_v, t, Sr_delta_v) + call eos%entropy_residual_vt(z, v + delta_v, t, Sr_delta_v) SrV_num = (Sr_delta_v - Sr) / delta_v @@ -360,10 +352,10 @@ subroutine test_entropy_residual_vt(error) ! Srn_num zd1 = [0.3_pr + delta_n, 0.7_pr] - call entropy_residual_vt(eos, zd1, v, t, Sr_delta_n1) + call eos%entropy_residual_vt(zd1, v, t, Sr_delta_n1) zd2 = [0.3_pr, 0.7_pr + delta_n] - call entropy_residual_vt(eos, zd2, v, t, Sr_delta_n2) + call eos%entropy_residual_vt(zd2, v, t, Sr_delta_n2) Srn_num = [(Sr_delta_n1 - Sr) / delta_n, (Sr_delta_n2 - Sr) / delta_n] @@ -377,8 +369,7 @@ end subroutine test_entropy_residual_vt ! -------------------------------------------------------------------------- subroutine cp_and_cv(error) ! TODO need derivatives dvdt to complete the test - use yaeos, only: pr, R, CubicEoS, SoaveRedlichKwong, pressure - use yaeos, only: Cp_residual_vt, Cv_residual_vt + use yaeos, only: pr, R, CubicEoS, SoaveRedlichKwong type(error_type), allocatable, intent(out) :: error @@ -406,12 +397,12 @@ subroutine cp_and_cv(error) eos = SoaveRedlichKwong(tc, pc, w, kij, lij) - call pressure(eos, z, v, t, p, dpdv=dpdv, dpdt=dpdt) + call eos%pressure(z, v, t, p, dpdv=dpdv, dpdt=dpdt) ! Dumb test need derivative dvdt to complete the test ! Michelsen and Mollerup chapter 2 eq 19 - call Cp_residual_vt(eos, z, v, t, Cpr) - call Cv_residual_vt(eos, z, v, t, Cvr) + call eos%Cp_residual_vt(z, v, t, Cpr) + call eos%Cv_residual_vt(z, v, t, Cvr) lefths = (Cpr - Cvr)/R righths = -t/R*dpdt**2/dpdv - ntot From e49859c1e668d0aa2a942390fc0887bb6ec9f80c Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Mon, 15 Jul 2024 17:08:20 -0300 Subject: [PATCH 132/167] moved thermoprops to methods --- app/isotherm.f90 | 59 +++++++++++++++++------------------------------- app/tpd.f90 | 2 +- 2 files changed, 22 insertions(+), 39 deletions(-) diff --git a/app/isotherm.f90 b/app/isotherm.f90 index 952cae11c..4ae90526f 100644 --- a/app/isotherm.f90 +++ b/app/isotherm.f90 @@ -1,6 +1,9 @@ program main - use yaeos, only: pr, ArModel, PengRobinson76, volume, pressure, SoaveRedlichKwong + use yaeos, only: pr, ArModel, PengRobinson76, SoaveRedlichKwong + use yaeos__models_ar, only: nvolume => volume + use yaeos__models_solvers, only: volume_michelsen use forsus, only: Substance, forsus_dir + use fortime, only: timer implicit none class(ArModel), allocatable :: eos @@ -10,10 +13,8 @@ program main type(Substance) :: sus(2) - real(pr) :: v - real(pr) :: p0, pf, dp, p - real(pr) :: t0, tf, dt, t - integer :: i, j, n_p_points=500, n_t_points=5 + real(pr) :: v, T, P + real(pr) :: lnphip(nc) forsus_dir = "build/dependencies/forsus/data/json" sus(1) = Substance("propane", only=["critical"]) @@ -23,37 +24,19 @@ program main tc = sus%critical%critical_temperature%value pc = sus%critical%critical_pressure%value/1e5 w = sus%critical%acentric_factor%value - kij = reshape([0., 0.0, 0.0, 0.], [nc,nc]) - lij = kij / 2 - - eos = SoaveRedlichKwong(tc, pc, w, kij, lij) - - p0 = 100 - pf = 0.1 - dp = (pf-p0)/n_p_points - - t0 = 150 - tf = 350 - dt = (tf-t0)/n_t_points - - T = 300 - do i=1,1000 - V = real(i, pr)/1000._pr - call pressure(eos, n, V, T, P=P) - print *, V, P - end do - - - - ! do j=0, n_t_points - 1 - ! t = t0 + dt * j - ! print *, "# ", t - ! do i=0,n_p_points-1 - ! p = p0 + dp * i - ! call volume(eos, n, p, t, v, root_type="stable") - ! print *, v, p - ! end do - ! print *, "" - ! print *, "" - ! end do + + eos = SoaveRedlichKwong(tc, pc, w) + T = 350 + P = 10 + + call eos%volume(n, P=P,T=T, root_type="stable", V=V) + print *, V, P + call volume_michelsen(eos, n, P=P,T=T, root_type="stable", V=V) + print *, V, P + + + call eos%pressure(n, V, T, P) + print *, T, V, P + call eos%lnphi_tp(n, T, P, V=V, root_type="vapor", lnphip=lnphip) + print *, T, P, V, lnphip end program main diff --git a/app/tpd.f90 b/app/tpd.f90 index f41a513a5..efbb8615e 100644 --- a/app/tpd.f90 +++ b/app/tpd.f90 @@ -11,7 +11,7 @@ program phase_diagram type(Substance) :: sus(nc) real(pr) :: tc(nc), pc(nc), ac(nc) real(pr) :: z(nc), T, P - real(pr) :: w(nc), mintpd, mins(nc, nc) + real(pr) :: w(nc), mintpd forsus_dir = "build/dependencies/forsus/data/json" sus(1) = Substance("methane") From 4cad4b519c2d2d9bc667f2f4344cad657e6e6ae7 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Tue, 16 Jul 2024 15:28:16 -0300 Subject: [PATCH 133/167] cardano method --- src/math/linalg.f90 | 103 ++++++++++++++++++++++++-------------------- src/math/math.f90 | 2 +- 2 files changed, 58 insertions(+), 47 deletions(-) diff --git a/src/math/linalg.f90 b/src/math/linalg.f90 index 9fe758959..e2d8c523d 100644 --- a/src/math/linalg.f90 +++ b/src/math/linalg.f90 @@ -43,53 +43,64 @@ end subroutine dgesv x = b_lapack end function solve_system - subroutine cubic_roots(a, b, c, d, r1, r2, r3, flag) + subroutine cubic_roots(parameters, real_roots, complex_roots, flag) + use polyroots_module, only: polyroots + use stdlib_sorting, only: sort real(pr), parameter :: pi=atan(1.0_pr)*4 - real(pr), intent(in) :: a, b, c, d - real(pr), intent(out) :: r1, r2, r3 + real(pr), intent(in) :: parameters(4) + real(pr), intent(out) :: real_roots(3) + complex(pr), intent(out) :: complex_roots(3) integer, intent(out) :: flag - - real(pr) :: p, q, u, v - real(pr) :: disc - - real(pr) :: z1, z2, z3, theta - - p = c/a - b**2/(3*a**2) - q = d/a - b*c/(3*a**2) + 2*b**3/(27*a**3) - - disc = q**2 + 4*p**3 / 27 - - z1 = 0 - z2 = 0 - z3 = 0 - r1 = 0 - r2 = 0 - r3 = 0 - - if (abs(disc) < 1e-15) then - flag = 0 - z1 = 3*q/p - z2 = -3*q/(2*p) - z3 = z2 - elseif (disc < 0) then - flag = -1 - theta = acos(0.5_pr * 3 * q / p * sqrt(-3/p)) - z1 = 2 * sqrt(-p/3) * cos(theta/3) - z2 = 2 * sqrt(-p/3) * cos((theta + 2*pi)/3) - z3 = 2 * sqrt(-p/3) * cos((theta + 4*pi)/3) - elseif (disc > 0) then - flag = 1 - u = ((-q + sqrt(disc))/2) - v = ((-q - sqrt(disc))/2) - - u = sign(abs(u)**(1.0_pr/3.0_pr), u) - v = sign(abs(v)**(1.0_pr/3.0_pr), v) - z1 = u + v - endif - - r1 = z1 - b/(3*a) - r2 = z2 - b/(3*a) - r3 = z3 - b/(3*a) - end subroutine + !! flag that identifies which case the solution is + !! - `0`: 3 real rotos, one of them repeated (use real_roots(1) and real_roots(2)) + !! - `1`: 1 real root, 2 complex roots. + !! Use real_roots(1) and complex_roots(1) and complex_roots(2) + !! - `-1`: 3 real roots, all different + + real(pr) :: p, q, u, v, nan + real(pr) :: disc, theta + real(pr) :: wi(3) + + integer :: istatus + + nan = 0 + nan = nan/nan + + associate(& + a => parameters(1), b => parameters(2), & + c => parameters(3), d => parameters(4)& + ) + + p = c/a - b**2/(3*a**2) + q = d/a - b*c/(3*a**2) + 2*b**3/(27*a**3) + + disc = q**2 + 4 * p**3 / 27 + real_roots = nan + complex_roots = nan + + if (abs(disc) < 1e-15) then + flag = 0 + real_roots(1) = 3*q/p + real_roots(2) = -3*q/(2*p) + real_roots(3) = real_roots(2) + elseif (disc < 0) then + flag = -1 + theta = acos(0.5_pr * 3 * q / p * sqrt(-3/p)) + real_roots(1) = 2 * sqrt(-p/3) * cos(theta/3) + real_roots(2) = 2 * sqrt(-p/3) * cos((theta + 2*pi)/3) + real_roots(3) = 2 * sqrt(-p/3) * cos((theta + 4*pi)/3) + call sort(real_roots) + elseif (disc > 0) then + flag = 1 + u = ((-q + sqrt(disc))/2) + v = ((-q - sqrt(disc))/2) + + u = sign(abs(u)**(1.0_pr/3.0_pr), u) + v = sign(abs(v)**(1.0_pr/3.0_pr), v) + real_roots(1) = u + v + endif + real_roots = real_roots - b/(3*a) + end associate + end subroutine cubic_roots end module yaeos__math_linalg diff --git a/src/math/math.f90 b/src/math/math.f90 index ea9de0d9b..6e42d8610 100644 --- a/src/math/math.f90 +++ b/src/math/math.f90 @@ -27,7 +27,7 @@ module yaeos__math !! ``` use yaeos__math_continuation, only: continuation - use yaeos__math_linalg, only: solve_system + use yaeos__math_linalg, only: solve_system, cubic_roots use yaeos__constants, only: pr implicit none From 0f01166e0272b9a88317001767850319321d26b6 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Tue, 16 Jul 2024 15:29:28 -0300 Subject: [PATCH 134/167] added cardano method test --- test/test_math/test_math.f90 | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/test/test_math/test_math.f90 b/test/test_math/test_math.f90 index b3b6bb5e3..a1ef96ac2 100644 --- a/test/test_math/test_math.f90 +++ b/test/test_math/test_math.f90 @@ -12,7 +12,8 @@ subroutine collect_suite(testsuite) testsuite = [ & new_unittest("Test dx_to_dn", test_dx_to_dn), & - new_unittest("Test sq_error", test_sq_error) & + new_unittest("Test sq_error", test_sq_error), & + new_unittest("Test cardano", test_cardano_method) & ] end subroutine collect_suite @@ -45,6 +46,28 @@ subroutine test_sq_error(error) call check(error, allclose(errors_sq, (sim - exps)**2, 1e10_pr)) end subroutine test_sq_error + + subroutine test_cardano_method(error) + use yaeos__math_linalg, only: pr, cubic_roots + type(error_type), allocatable, intent(out) :: error + real(pr) :: p(4) + real(pr) :: rr(3) + complex(pr) :: cr(3) + real(pr) :: num + integer :: flag + + p = [1, -10, 35, -50] + call cubic_roots(p, rr, cr, flag) + call check(error, flag == 1) + call check(error, abs(rr(1) - 5.0_pr) < 1e-10_pr) + + p = [0.1, -2.6, 1., 1.] + call cubic_roots(p, rr, cr, flag) + call check(error, flag == -1) + call check(error, & + maxval(abs(rr - [-0.454216, 0.8601986, 25.594016])) < 1e-5_pr & + ) + end subroutine test_cardano_method end module test_math From 71f744a76b30282a362aee05c690e15fc11b0f1f Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Tue, 16 Jul 2024 15:29:48 -0300 Subject: [PATCH 135/167] FIXTHIS: Saturation temperatures are hard to converge --- test/test_saturation.f90 | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/test/test_saturation.f90 b/test/test_saturation.f90 index df192c3d3..36e1b807a 100644 --- a/test/test_saturation.f90 +++ b/test/test_saturation.f90 @@ -107,7 +107,7 @@ subroutine test_dew_temperature(error) end subroutine subroutine test_bubble_temperature(error) - use yaeos, only: pr, EquilibriaState, saturation_temperature, ArModel + use yaeos, only: pr, EquilibriaState, saturation_temperature, ArModel, saturation_pressure, PTEnvel2, pt_envelope_2ph use fixtures_models, only: binary_PR76 type(error_type), allocatable, intent(out) :: error @@ -125,8 +125,7 @@ subroutine test_bubble_temperature(error) n = [0.4_pr, 0.6_pr] T = 200 model = binary_PR76() - - bubble = saturation_temperature(model, n, P, kind="bubble", t0=100._pr) + bubble = saturation_temperature(model, n, P, kind="bubble",t0=201._pr) call check(error, maxval(abs(bubble%x - x)) < abs_tolerance) call check(error, maxval(abs(bubble%y - y)) < abs_tolerance) call check(error, abs(bubble%p - p) < abs_tolerance) From 73bb6eb8b1ebba6cd184b21ec2feb1baf1c58b00 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Tue, 16 Jul 2024 15:30:18 -0300 Subject: [PATCH 136/167] Analitical solutions for cubic EoS --- .../cubic/generic_cubic.f90 | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) diff --git a/src/models/residual_helmholtz/cubic/generic_cubic.f90 b/src/models/residual_helmholtz/cubic/generic_cubic.f90 index 9821c746d..70d82135d 100644 --- a/src/models/residual_helmholtz/cubic/generic_cubic.f90 +++ b/src/models/residual_helmholtz/cubic/generic_cubic.f90 @@ -34,6 +34,7 @@ module yaeos__models_ar_genericcubic contains procedure :: residual_helmholtz => GenericCubic_Ar procedure :: get_v0 => v0 + procedure :: volume => volume end type abstract interface @@ -222,4 +223,91 @@ function v0(self, n, p, t) call self%mixrule%Bmix(n, self%b, v0, dbi, dbij) end function + subroutine volume(eos, n, P, T, V, root_type) + use yaeos__constants, only: R + use yaeos__math_linalg, only: cubic_roots + use yaeos__models_solvers, only: volume_michelsen + class(CubicEoS), intent(in) :: eos + real(pr), intent(in) :: n(:), P, T + real(pr), intent(out) :: V + character(len=*), intent(in) :: root_type + + real(pr) :: z(size(n)) + real(pr) :: cp(4), rr(3) + complex(pr) :: cr(3) + integer :: flag + + real(pr) :: V_liq, V_vap + real(pr) :: Ar, AT_Liq, AT_Vap + + real(pr) :: Bmix, dBi(size(n)), dBij(size(n), size(n)) + real(pr) :: D, dDi(size(n)), dDij(size(n), size(n)), dDidT(size(n)), dDdT, dDdT2 + real(pr) :: D1, D2, dD1i(size(n)), dD1ij(size(n), size(n)) + real(pr) :: Tr(size(n)) + real(pr) :: a(size(n)), dadt(size(n)), dadt2(size(n)) + real(pr) :: totn + + ! call volume_michelsen(eos, n, P, T, V, root_type) + ! return + + totn = sum(n) + z = n/totn + Tr = T/eos%components%Tc + ! ======================================================================== + ! Attractive parameter and derivatives + ! ------------------------------------------------------------------------ + call eos%alpha%alpha(Tr, a, dadt, dadt2) + a = eos%ac * a + dadt = eos%ac * dadt / eos%components%Tc + dadt2 = eos%ac * dadt2 / eos%components%Tc**2 + + ! ======================================================================== + ! Mixing rules + ! ------------------------------------------------------------------------ + call eos%mixrule%D1mix(z, eos%del1, D1, dD1i, dD1ij) + call eos%mixrule%Bmix(z, eos%b, Bmix, dBi, dBij) + call eos%mixrule%Dmix(& + z, T, a, dadt, dadt2, D, dDdT, dDdT2, dDi, dDidT, dDij& + ) + D2 = (1._pr - D1)/(1._pr + D1) + + cp(1) = -P + cp(2) = -P*Bmix*(D1 + D2 - 1) + R*T + cp(3) = -P*(D1*D2*Bmix**2 - D1*Bmix**2 - D2*Bmix**2) + R*T*Bmix*(D1+D2) - D + cp(4) = P*D1*D2*Bmix**3 + R*T *D1*D2*Bmix**2 + D*Bmix + + call cubic_roots(cp, rr, cr, flag) + ! print *, root_type, n, rr + select case(flag) + case(-1) + V_liq = rr(1) + V_vap = rr(3) + if (V_liq < 0) V_liq = V_vap + case(1) + V_liq = rr(1) + V_vap = rr(1) + end select + + select case(root_type) + case("liquid") + V = V_liq + case("vapor") + V = V_vap + case("stable") + ! AT is something close to Gr(P,T) + call eos%residual_helmholtz(z, V_liq, T, Ar=Ar) + AT_Liq = (Ar + V_liq*P)/(T*R) - sum(z)*log(V_liq) + + call eos%residual_helmholtz(z, V_vap, T, Ar=Ar) + AT_Vap = (Ar + V_vap*P)/(T*R) - sum(z)*log(V_vap) + + if (AT_liq <= AT_vap) then + V = V_liq + else + V = V_vap + end if + end select + + V = totn * V + end subroutine end module From 1d3c502599ceaaea6666f6f5b1f533273dfbdbf2 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Tue, 16 Jul 2024 15:30:36 -0300 Subject: [PATCH 137/167] mindoc --- src/models/residual_helmholtz/ar_models.f90 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/models/residual_helmholtz/ar_models.f90 b/src/models/residual_helmholtz/ar_models.f90 index 4c1283c0e..daa35c1e3 100644 --- a/src/models/residual_helmholtz/ar_models.f90 +++ b/src/models/residual_helmholtz/ar_models.f90 @@ -232,7 +232,7 @@ subroutine fugacity_tp(eos, & real(pr), intent(in) :: t !! Temperature [K] real(pr), intent(in) :: p !! Pressure [bar] - real(pr), optional, intent(out) :: lnphip(size(n)) !! \(\ln(f_i)\) vector + real(pr), optional, intent(out) :: lnphip(size(n)) !! \(\ln(phi*P)\) vector real(pr), optional, intent(out) :: v !! Volume [L] real(pr), optional, intent(out) :: dlnphidt(size(n)) !! ln(phi) Temp derivative real(pr), optional, intent(out) :: dlnphidp(size(n)) !! ln(phi) Presssure derivative @@ -240,7 +240,7 @@ subroutine fugacity_tp(eos, & real(pr) :: v_in, p_in - call eos%volume(n, P, T, V_in, root_type) + call eos%volume(n, P=P, T=T, V=V_in, root_type=root_type) call eos%lnphi_vt(n, v_in, T, P_in, lnphip, dlnphidp, dlnphidt, dlnphidn) if(present(v)) v = v_in if(abs(P_in - p) > 1e-2) then @@ -313,7 +313,7 @@ subroutine fugacity_vt(eos, & ) end if - lnphip(:) = Arn(:)/RT - log(Z) + if (present(lnphip)) lnphip = Arn(:)/RT - log(Z) P_in = TOTN*RT/V - ArV if (present(P)) P = P_in From f318fd073e614073e42d091e093e775f1c010241 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Tue, 16 Jul 2024 15:30:49 -0300 Subject: [PATCH 138/167] isotherm --- app/isotherm.f90 | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/app/isotherm.f90 b/app/isotherm.f90 index 4ae90526f..7fd13a43d 100644 --- a/app/isotherm.f90 +++ b/app/isotherm.f90 @@ -11,32 +11,39 @@ program main real(pr), dimension(nc) :: n, tc, pc, w real(pr), dimension(nc, nc) :: kij, lij + type(timer) :: tim + type(Substance) :: sus(2) real(pr) :: v, T, P real(pr) :: lnphip(nc) + integer :: i, nevals=100000 + forsus_dir = "build/dependencies/forsus/data/json" sus(1) = Substance("propane", only=["critical"]) sus(2) = Substance("n-butane", only=["critical"]) - n = [0.7, 0.3] + n = [0.99, 0.01] tc = sus%critical%critical_temperature%value pc = sus%critical%critical_pressure%value/1e5 w = sus%critical%acentric_factor%value eos = SoaveRedlichKwong(tc, pc, w) T = 350 - P = 10 + P = 500 - call eos%volume(n, P=P,T=T, root_type="stable", V=V) - print *, V, P - call volume_michelsen(eos, n, P=P,T=T, root_type="stable", V=V) - print *, V, P + do i=1,10000 + P = real(i, pr)/10 + call eos%volume(n, P, T, V, "stable") + print *, V, P + end do + print "(/)" - call eos%pressure(n, V, T, P) - print *, T, V, P - call eos%lnphi_tp(n, T, P, V=V, root_type="vapor", lnphip=lnphip) - print *, T, P, V, lnphip + do i=1,1000 + P = real(i, pr)/10 + call volume_michelsen(eos, n, P, T, V, "stable") + print *, V, P + end do end program main From a449b627afb596523d0230524d129e664649bd58 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Tue, 16 Jul 2024 15:31:57 -0300 Subject: [PATCH 139/167] not using polyroots --- src/math/linalg.f90 | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/math/linalg.f90 b/src/math/linalg.f90 index e2d8c523d..2f4cf10d5 100644 --- a/src/math/linalg.f90 +++ b/src/math/linalg.f90 @@ -44,7 +44,6 @@ end subroutine dgesv end function solve_system subroutine cubic_roots(parameters, real_roots, complex_roots, flag) - use polyroots_module, only: polyroots use stdlib_sorting, only: sort real(pr), parameter :: pi=atan(1.0_pr)*4 real(pr), intent(in) :: parameters(4) @@ -59,9 +58,6 @@ subroutine cubic_roots(parameters, real_roots, complex_roots, flag) real(pr) :: p, q, u, v, nan real(pr) :: disc, theta - real(pr) :: wi(3) - - integer :: istatus nan = 0 nan = nan/nan From 8c5b5b388a4c4623f298f03630968ac92122b81e Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Tue, 16 Jul 2024 15:32:40 -0300 Subject: [PATCH 140/167] jupyter notebook sympy playground --- tools/notebooks/sympy.ipynb | 682 ++++++++++++++++++++++++++++++++++++ 1 file changed, 682 insertions(+) create mode 100644 tools/notebooks/sympy.ipynb diff --git a/tools/notebooks/sympy.ipynb b/tools/notebooks/sympy.ipynb new file mode 100644 index 000000000..d0a93f81a --- /dev/null +++ b/tools/notebooks/sympy.ipynb @@ -0,0 +1,682 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import sympy as sp" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle - \\frac{K \\beta z}{\\left(\\beta \\left(K - 1\\right) + 1\\right)^{2}} + \\frac{z}{\\beta \\left(K - 1\\right) + 1}$" + ], + "text/plain": [ + "-K*\\beta*z/(\\beta*(K - 1) + 1)**2 + z/(\\beta*(K - 1) + 1)" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "z, beta, K = sp.symbols(r\"z \\beta K\")\n", + "\n", + "x = z / (beta * (K - 1) + 1)\n", + "y = K * x\n", + "\n", + "dxdk = sp.diff(x, K)\n", + "sp.diff(y, K)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\frac{v_{x}}{v_{x} - v_{y}}$" + ], + "text/plain": [ + "v_x/(v_x - v_y)" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "vx, vy, v = sp.symbols(r\"v_x, v_y, v\")\n", + "\n", + "v = beta * vy + (1-beta)*vx\n", + "\n", + "sp.solve(v, beta)[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " -\\beta*v_y/(\\beta - 1)**2 + v_y/(\\beta - 1)\n" + ] + } + ], + "source": [ + "sp.print_fcode(sp.diff(sp.solve(v, vx)[0], beta))" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\frac{v_{x}}{\\beta^{2}}$" + ], + "text/plain": [ + "v_x/\\beta**2" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sp.diff(sp.solve(v, vy)[0], beta)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " -\\beta*z*(K - 1)/(\\beta*(K - 1) + 1)**2 + z/(\\beta*(K - 1) + 1)\n" + ] + } + ], + "source": [ + "sp.print_fcode(sp.diff(z * (K - 1)/(1 + beta*(K-1)), K))" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "c1, c2, c3, Tr = sp.symbols(\"c1 c2 c3 Tr\")\n", + "\n", + "# sqrt_Tr = sp.Function(\"(1-\\sqrt{Tr})\")(Tr) # 1 - sp.sqrt(Tr)\n", + "\n", + "sqrt_Tr = 1 - sp.sqrt(Tr)\n", + "\n", + "a = (1 + c1 * (sqrt_Tr) + c2 * (sqrt_Tr) + c3 * (sqrt_Tr))**2\n", + "dadt = sp.diff(a, Tr)\n", + "dadt2 = sp.diff(dadt, Tr)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " -k*(3/(Tr + 2))**k/(Tr + 2)\n", + " k*(3/(Tr + 2))**k*(k + 1)/(Tr + 2)**2\n" + ] + } + ], + "source": [ + "k, Tr = sp.symbols(\"k Tr\")\n", + "a = (3/(2 + Tr))**k\n", + "\n", + "dadtr = sp.diff(a, Tr).simplify()\n", + "dadtr2 = sp.diff(dadtr, Tr).simplify()\n", + "\n", + "sp.print_fcode(dadtr.simplify())\n", + "sp.print_fcode(dadtr2.simplify())" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " (c1 + c2 + c3)*(c1*(sqrt(Tr) - 1) + c2*(sqrt(Tr) - 1) + c3*(sqrt(\n", + " @ Tr) - 1) - 1)/sqrt(Tr)\n", + " (1.0d0/2.0d0)*(c1**2 + 2*c1*c2 + 2*c1*c3 + c1 + c2**2 + 2*c2*c3 +\n", + " @ c2 + c3**2 + c3)/Tr**(3.0d0/2.0d0)\n" + ] + } + ], + "source": [ + "sp.print_fcode(dadt.simplify())\n", + "sp.print_fcode(dadt2.simplify())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Combining rules" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [], + "source": [ + "i, j = sp.symbols(\"i j\",cls=sp.Idx)\n", + "k = sp.IndexedBase(\"k\")\n", + "T = sp.symbols(\"T\")\n", + "ai = sp.Function(\"a_i\")(T)\n", + "aj = sp.Function(\"a_j\")(T)\n", + "\n", + "daijdt = sp.diff(sp.sqrt(ai*aj) * (1 - k[i,j]), T).simplify()\n", + "daijdt2 = sp.diff(daijdt, T)#.simplify()" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle - \\frac{\\sqrt{a_{i}{\\left(T \\right)} a_{j}{\\left(T \\right)}} \\left(\\frac{a_{i}{\\left(T \\right)} \\frac{d}{d T} a_{j}{\\left(T \\right)}}{2} + \\frac{a_{j}{\\left(T \\right)} \\frac{d}{d T} a_{i}{\\left(T \\right)}}{2}\\right) \\left(a_{i}{\\left(T \\right)} \\frac{d}{d T} a_{j}{\\left(T \\right)} + a_{j}{\\left(T \\right)} \\frac{d}{d T} a_{i}{\\left(T \\right)}\\right) \\left({k}_{i,j} - 1\\right)}{2 a_{i}^{2}{\\left(T \\right)} a_{j}^{2}{\\left(T \\right)}} + \\frac{\\sqrt{a_{i}{\\left(T \\right)} a_{j}{\\left(T \\right)}} \\left(a_{i}{\\left(T \\right)} \\frac{d}{d T} a_{j}{\\left(T \\right)} + a_{j}{\\left(T \\right)} \\frac{d}{d T} a_{i}{\\left(T \\right)}\\right) \\left({k}_{i,j} - 1\\right) \\frac{d}{d T} a_{j}{\\left(T \\right)}}{2 a_{i}{\\left(T \\right)} a_{j}^{2}{\\left(T \\right)}} + \\frac{\\sqrt{a_{i}{\\left(T \\right)} a_{j}{\\left(T \\right)}} \\left(a_{i}{\\left(T \\right)} \\frac{d}{d T} a_{j}{\\left(T \\right)} + a_{j}{\\left(T \\right)} \\frac{d}{d T} a_{i}{\\left(T \\right)}\\right) \\left({k}_{i,j} - 1\\right) \\frac{d}{d T} a_{i}{\\left(T \\right)}}{2 a_{i}^{2}{\\left(T \\right)} a_{j}{\\left(T \\right)}} - \\frac{\\sqrt{a_{i}{\\left(T \\right)} a_{j}{\\left(T \\right)}} \\left({k}_{i,j} - 1\\right) \\left(a_{i}{\\left(T \\right)} \\frac{d^{2}}{d T^{2}} a_{j}{\\left(T \\right)} + a_{j}{\\left(T \\right)} \\frac{d^{2}}{d T^{2}} a_{i}{\\left(T \\right)} + 2 \\frac{d}{d T} a_{i}{\\left(T \\right)} \\frac{d}{d T} a_{j}{\\left(T \\right)}\\right)}{2 a_{i}{\\left(T \\right)} a_{j}{\\left(T \\right)}}$" + ], + "text/plain": [ + "-sqrt(a_i(T)*a_j(T))*(a_i(T)*Derivative(a_j(T), T)/2 + a_j(T)*Derivative(a_i(T), T)/2)*(a_i(T)*Derivative(a_j(T), T) + a_j(T)*Derivative(a_i(T), T))*(k[i, j] - 1)/(2*a_i(T)**2*a_j(T)**2) + sqrt(a_i(T)*a_j(T))*(a_i(T)*Derivative(a_j(T), T) + a_j(T)*Derivative(a_i(T), T))*(k[i, j] - 1)*Derivative(a_j(T), T)/(2*a_i(T)*a_j(T)**2) + sqrt(a_i(T)*a_j(T))*(a_i(T)*Derivative(a_j(T), T) + a_j(T)*Derivative(a_i(T), T))*(k[i, j] - 1)*Derivative(a_i(T), T)/(2*a_i(T)**2*a_j(T)) - sqrt(a_i(T)*a_j(T))*(k[i, j] - 1)*(a_i(T)*Derivative(a_j(T), (T, 2)) + a_j(T)*Derivative(a_i(T), (T, 2)) + 2*Derivative(a_i(T), T)*Derivative(a_j(T), T))/(2*a_i(T)*a_j(T))" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "daijdt2" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle - \\frac{{n}_{i} \\sum_{i=1}^{N} 1}{\\left(\\sum_{i=1}^{N} {n}_{i}\\right)^{2}} + \\frac{1}{\\sum_{i=1}^{N} {n}_{i}}$" + ], + "text/plain": [ + "-n[i]*Sum(1, (i, 1, N))/Sum(n[i], (i, 1, N))**2 + 1/Sum(n[i], (i, 1, N))" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "i, N = sp.symbols('i N', integer=True)\n", + "n = sp.IndexedBase(\"n\", shape=(N))\n", + "\n", + "zi = n[i]/sp.Sum(n[i], (i, 1, N))\n", + "\n", + "sp.diff(zi, n[i])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Huron-Vidal -like" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\sum_{i=1}^{N} \\frac{a{\\left(T \\right)} {n}_{i}}{{b}_{i}} + \\frac{G^{E}{\\left(n{\\left({n}_{i} \\right)},T \\right)} + \\sum_{i=1}^{N} R T \\log{\\left(\\frac{B{\\left(n{\\left({n}_{i} \\right)} \\right)}}{n{\\left({n}_{i} \\right)} {b}_{i}} \\right)} {n}_{i}}{q}$" + ], + "text/plain": [ + "Sum(a(T)*n[i]/b[i], (i, 1, N)) + (G^E(n(n[i]), T) + Sum(R*T*log(B(n(n[i]))/(n(n[i])*b[i]))*n[i], (i, 1, N)))/q" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import sympy as sp\n", + "def sum_i(exp):\n", + " N = sp.Idx(\"N\")\n", + " return sp.Sum(exp, (i, 1, N))\n", + "\n", + "q, R, T = sp.symbols(\"q R T\")\n", + "ni, bi = sp.symbols(\"n b\", cls=sp.IndexedBase)\n", + "i = sp.Idx(\"i\")\n", + "j = sp.Idx(\"j\")\n", + "ni = ni[i]\n", + "bi = bi[i]\n", + "\n", + "i = sp.Idx(\"i\")\n", + "a = sp.Function(\"a\")(T)\n", + "n = sp.Function(\"n\")(ni)\n", + "B = sp.Function(\"B\")(n)\n", + "\n", + "ge = sp.Function(r\"G^E\")(n, T)\n", + "\n", + "DB = sum_i(ni * a/bi) + 1/q * (ge + sum_i(ni * R*T*sp.log(B/(n*bi))))\n", + "DB" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\log{\\left(\\frac{B{\\left({n}_{1},{n}_{2},{n}_{3} \\right)}}{\\left({n}_{1} + {n}_{2} + {n}_{3}\\right) {b}_{1}} \\right)} {n}_{1} + \\log{\\left(\\frac{B{\\left({n}_{1},{n}_{2},{n}_{3} \\right)}}{\\left({n}_{1} + {n}_{2} + {n}_{3}\\right) {b}_{2}} \\right)} {n}_{2} + \\log{\\left(\\frac{B{\\left({n}_{1},{n}_{2},{n}_{3} \\right)}}{\\left({n}_{1} + {n}_{2} + {n}_{3}\\right) {b}_{3}} \\right)} {n}_{3}$" + ], + "text/plain": [ + "log(B(n[1], n[2], n[3])/((n[1] + n[2] + n[3])*b[1]))*n[1] + log(B(n[1], n[2], n[3])/((n[1] + n[2] + n[3])*b[2]))*n[2] + log(B(n[1], n[2], n[3])/((n[1] + n[2] + n[3])*b[3]))*n[3]" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\n", + "n = sp.symbols(\"N\")\n", + "ni, bi = sp.symbols(\"n b\", cls=sp.IndexedBase)\n", + "n1, b1 = ni[1], bi[1]\n", + "n2, b2 = ni[2], bi[2]\n", + "n3, b3 = ni[3], bi[3]\n", + "\n", + "B = sp.Function(\"B\")(n1, n2, n3)\n", + "\n", + "lnB = (\n", + " n1 * sp.log(B/((n1 + n2 + n3)*b1)) + \n", + " n2 * sp.log(B/((n1 + n2 + n3)*b2)) +\n", + " n3 * sp.log(B/((n1 + n2 + n3)*b3))\n", + ")\n", + "dD1 = sp.diff(lnB, n1).simplify()\n", + "dD12 = sp.diff(dD1, n2).simplify()\n", + "\n", + "lnB" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\frac{B{\\left({n}_{1},{n}_{2},{n}_{3} \\right)} \\log{\\left(\\frac{B{\\left({n}_{1},{n}_{2},{n}_{3} \\right)}}{\\left({n}_{1} + {n}_{2} + {n}_{3}\\right) {b}_{1}} \\right)} - B{\\left({n}_{1},{n}_{2},{n}_{3} \\right)} + \\frac{\\partial}{\\partial {n}_{1}} B{\\left({n}_{1},{n}_{2},{n}_{3} \\right)} {n}_{1} + \\frac{\\partial}{\\partial {n}_{1}} B{\\left({n}_{1},{n}_{2},{n}_{3} \\right)} {n}_{2} + \\frac{\\partial}{\\partial {n}_{1}} B{\\left({n}_{1},{n}_{2},{n}_{3} \\right)} {n}_{3}}{B{\\left({n}_{1},{n}_{2},{n}_{3} \\right)}}$" + ], + "text/plain": [ + "(B(n[1], n[2], n[3])*log(B(n[1], n[2], n[3])/((n[1] + n[2] + n[3])*b[1])) - B(n[1], n[2], n[3]) + Derivative(B(n[1], n[2], n[3]), n[1])*n[1] + Derivative(B(n[1], n[2], n[3]), n[1])*n[2] + Derivative(B(n[1], n[2], n[3]), n[1])*n[3])/B(n[1], n[2], n[3])" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "lnB.diff(n1).simplify()#.diff(n2).simplify()" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\sum_{i=1}^{N} \\begin{cases} \\frac{\\left(\\log{\\left(\\frac{B{\\left({n}_{j} \\right)}}{{b}_{j} \\sum_{i=1}^{N} {n}_{i}} \\right)} - 1 + \\frac{\\frac{\\partial}{\\partial {n}_{j}} B{\\left({n}_{j} \\right)} {n}_{j}}{B{\\left({n}_{j} \\right)}}\\right) {n}_{j}}{\\sum_{i=1}^{N} {n}_{i}} & \\text{for}\\: N \\geq j \\wedge j \\geq 1 \\\\0 & \\text{otherwise} \\end{cases}$" + ], + "text/plain": [ + "Sum(Piecewise(((log(B(n[j])/(b[j]*Sum(n[i], (i, 1, N)))) - 1 + Derivative(B(n[j]), n[j])*n[j]/B(n[j]))*n[j]/Sum(n[i], (i, 1, N)), (j >= 1) & (N >= j)), (0, True)), (i, 1, N))" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "B=sp.Function(\"B\")(ni[i])\n", + "logB_nbi = sum_i(ni[i] * sp.log(B/(sum_i(ni[i]) * bi[i])))\n", + "\n", + "logB_nbi.diff(ni[j]).simplify()" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\frac{- \\left({n}_{1} + {n}_{2} + {n}_{3}\\right) \\frac{\\partial}{\\partial {n}_{1}} B{\\left({n}_{1},{n}_{2},{n}_{3} \\right)} \\frac{\\partial}{\\partial {n}_{2}} B{\\left({n}_{1},{n}_{2},{n}_{3} \\right)} + \\left(\\frac{\\partial}{\\partial {n}_{1}} B{\\left({n}_{1},{n}_{2},{n}_{3} \\right)} + \\frac{\\partial^{2}}{\\partial {n}_{2}\\partial {n}_{1}} B{\\left({n}_{1},{n}_{2},{n}_{3} \\right)} {n}_{1} + \\frac{\\partial^{2}}{\\partial {n}_{2}\\partial {n}_{1}} B{\\left({n}_{1},{n}_{2},{n}_{3} \\right)} {n}_{2} + \\frac{\\partial^{2}}{\\partial {n}_{2}\\partial {n}_{1}} B{\\left({n}_{1},{n}_{2},{n}_{3} \\right)} {n}_{3}\\right) B{\\left({n}_{1},{n}_{2},{n}_{3} \\right)}}{B^{2}{\\left({n}_{1},{n}_{2},{n}_{3} \\right)}}$" + ], + "text/plain": [ + "(-(n[1] + n[2] + n[3])*Derivative(B(n[1], n[2], n[3]), n[1])*Derivative(B(n[1], n[2], n[3]), n[2]) + (Derivative(B(n[1], n[2], n[3]), n[1]) + Derivative(B(n[1], n[2], n[3]), n[1], n[2])*n[1] + Derivative(B(n[1], n[2], n[3]), n[1], n[2])*n[2] + Derivative(B(n[1], n[2], n[3]), n[1], n[2])*n[3])*B(n[1], n[2], n[3]))/B(n[1], n[2], n[3])**2" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dBi = sp.diff(B, n1)\n", + "\n", + "coso = (\n", + " n1 * dBi + n2 * dBi + n3 * dBi\n", + ")/B\n", + "\n", + "coso.diff(n2).simplify()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ge Models" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\frac{E e^{- \\frac{E}{T}}}{T^{2}}$" + ], + "text/plain": [ + "E*exp(-E/T)/T**2" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "t, e = sp.symbols(\"T E\")\n", + "\n", + "psi = sp.exp(-e / t)\n", + "\n", + "sp.diff(psi, t)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'psi' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[5], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m sp\u001b[38;5;241m.\u001b[39mdiff(sp\u001b[38;5;241m.\u001b[39mdiff(\u001b[43mpsi\u001b[49m, t),t)\u001b[38;5;241m.\u001b[39msimplify()\n", + "\u001b[0;31mNameError\u001b[0m: name 'psi' is not defined" + ] + } + ], + "source": [ + "sp.diff(sp.diff(psi, t),t).simplify()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Cubic roots" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import sympy as sp\n", + "P, R, T, v, b, a, d1, d2 = sp.symbols(r\"P R T v b a \\delta_1 \\delta_2\")\n", + "zero = R*T/(v-b) - a/((v+d1*b)*(v+d2*b)) - P" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle - P - \\frac{R T}{b - v} - \\frac{a}{\\left(\\delta_{1} b + v\\right) \\left(\\delta_{2} b + v\\right)}$" + ], + "text/plain": [ + "-P - R*T/(b - v) - a/((\\delta_1*b + v)*(\\delta_2*b + v))" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "zero.simplify()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle - P \\left(- b + v\\right) \\left(\\delta_{1} b + v\\right) \\left(\\delta_{2} b + v\\right) + R T \\left(\\delta_{1} b + v\\right) \\left(\\delta_{2} b + v\\right) - a \\left(- b + v\\right)$" + ], + "text/plain": [ + "-P*(-b + v)*(\\delta_1*b + v)*(\\delta_2*b + v) + R*T*(\\delta_1*b + v)*(\\delta_2*b + v) - a*(-b + v)" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "exp_2 = (v+d1*b)*(v+d2*b)# v**2 + (d1+d2)*b*v + d1*d2*b**2\n", + "exp_1 = v - b\n", + "\n", + "exp = R*T*exp_2 - a * exp_1 - P * exp_1 * exp_2\n", + "exp" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "poly = sp.Poly(exp, gens=v)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle - P$" + ], + "text/plain": [ + "-P" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "poly.coeffs()[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle - P \\delta_{1} b - P \\delta_{2} b + P b + R T$" + ], + "text/plain": [ + "-P*\\delta_1*b - P*\\delta_2*b + P*b + R*T" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "poly.coeffs()[1]" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle - P \\delta_{1} \\delta_{2} b^{2} + P \\delta_{1} b^{2} + P \\delta_{2} b^{2} + R T \\delta_{1} b + R T \\delta_{2} b - a$" + ], + "text/plain": [ + "-P*\\delta_1*\\delta_2*b**2 + P*\\delta_1*b**2 + P*\\delta_2*b**2 + R*T*\\delta_1*b + R*T*\\delta_2*b - a" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "poly.coeffs()[2]" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle P \\delta_{1} \\delta_{2} b^{3} + R T \\delta_{1} \\delta_{2} b^{2} + a b$" + ], + "text/plain": [ + "P*\\delta_1*\\delta_2*b**3 + R*T*\\delta_1*\\delta_2*b**2 + a*b" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\n", + "poly.coeffs()[3]\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "thermo", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 901871c2fb56d221ad6f423c9277c33d81de8872 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Tue, 16 Jul 2024 16:43:35 -0300 Subject: [PATCH 141/167] ign --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index 1e22afc8e..2edc3919e 100644 --- a/.gitignore +++ b/.gitignore @@ -56,3 +56,7 @@ log2 para.py tools/plotting/pt_envel_2ph.gnu tools/notebooks/other.ipynb +hsprpxy +iters +n2c8data +prpxy From 734541a23d02a775b855546d4f1cb3455324af40 Mon Sep 17 00:00:00 2001 From: salvador Date: Tue, 16 Jul 2024 22:59:58 -0300 Subject: [PATCH 142/167] roots rosendo --- src/math/linalg.f90 | 54 ++++++++++++++++++- .../cubic/generic_cubic.f90 | 7 +-- test/test_saturation.f90 | 6 ++- 3 files changed, 62 insertions(+), 5 deletions(-) diff --git a/src/math/linalg.f90 b/src/math/linalg.f90 index 2f4cf10d5..cd561700c 100644 --- a/src/math/linalg.f90 +++ b/src/math/linalg.f90 @@ -45,7 +45,7 @@ end function solve_system subroutine cubic_roots(parameters, real_roots, complex_roots, flag) use stdlib_sorting, only: sort - real(pr), parameter :: pi=atan(1.0_pr)*4 + real(pr), parameter :: pi=atan(1.0_pr) * 4.0_pr real(pr), intent(in) :: parameters(4) real(pr), intent(out) :: real_roots(3) complex(pr), intent(out) :: complex_roots(3) @@ -75,11 +75,13 @@ subroutine cubic_roots(parameters, real_roots, complex_roots, flag) complex_roots = nan if (abs(disc) < 1e-15) then + !print *, "disc: ", disc flag = 0 real_roots(1) = 3*q/p real_roots(2) = -3*q/(2*p) real_roots(3) = real_roots(2) elseif (disc < 0) then + !print *, "disc: ", disc flag = -1 theta = acos(0.5_pr * 3 * q / p * sqrt(-3/p)) real_roots(1) = 2 * sqrt(-p/3) * cos(theta/3) @@ -87,6 +89,7 @@ subroutine cubic_roots(parameters, real_roots, complex_roots, flag) real_roots(3) = 2 * sqrt(-p/3) * cos((theta + 4*pi)/3) call sort(real_roots) elseif (disc > 0) then + !print *, "disc: ", disc flag = 1 u = ((-q + sqrt(disc))/2) v = ((-q - sqrt(disc))/2) @@ -99,4 +102,53 @@ subroutine cubic_roots(parameters, real_roots, complex_roots, flag) end associate end subroutine cubic_roots + subroutine cubic_roots_rosendo(parameters, real_roots, complex_roots, flag) + use stdlib_sorting, only: sort + real(pr), parameter :: pi=atan(1.0_pr) * 4.0_pr + real(pr), intent(in) :: parameters(4) + real(pr), intent(out) :: real_roots(3) + complex(pr), intent(out) :: complex_roots(3) + integer, intent(out) :: flag + + real(pr) :: d1, d2, d3, Q, R, A, B, theta, alp, bet, gam + integer :: i + + d1 = parameters(2) / parameters(1) + d2 = parameters(3) / parameters(1) + d3 = parameters(4) / parameters(1) + + Q = (d1**2 - 3*d2) / 9.0_pr + R = (2*d1**3 - 9*d1*d2 + 27*d3) / 54.0_pr + + if (R**2 <= Q**3) then + theta = acos(R / sqrt(Q**3)) + + real_roots(1) = -2 * sqrt(Q) * cos(theta / 3.0_pr) - d1 / 3.0_pr + real_roots(2) = -2 * sqrt(Q) * cos((theta + 2 * acos(-1.0_pr)) / 3.0_pr) - d1 / 3.0_pr + real_roots(3) = -2 * sqrt(Q) * cos((theta - 2 * acos(-1.0_pr)) / 3.0_pr) - d1 / 3.0_pr + + ! Correction?? + ! do i=1,100 + ! real_roots(1) = -d1 - (real_roots(2) + real_roots(3)) + ! real_roots(2) = (d2 - real_roots(1) * real_roots(3)) / (real_roots(1) + real_roots(3)) + ! real_roots(3) = -d3 / (real_roots(1) * real_roots(2)) + ! end do + + call sort(real_roots) + flag = -1 + else + A = - sign((abs(R) + sqrt(R**2 - Q**3))**(1.0_pr/3.0_pr), R) + + if (-log10(A) > 15.0_pr) then + A = 0.0_pr + B = 0.0_pr + else + B = Q / A + end if + + real_roots = (A + B) - d1 / 3.0_pr + flag = 1 + end if + end subroutine + end module yaeos__math_linalg diff --git a/src/models/residual_helmholtz/cubic/generic_cubic.f90 b/src/models/residual_helmholtz/cubic/generic_cubic.f90 index 70d82135d..a83812572 100644 --- a/src/models/residual_helmholtz/cubic/generic_cubic.f90 +++ b/src/models/residual_helmholtz/cubic/generic_cubic.f90 @@ -225,7 +225,7 @@ function v0(self, n, p, t) subroutine volume(eos, n, P, T, V, root_type) use yaeos__constants, only: R - use yaeos__math_linalg, only: cubic_roots + use yaeos__math_linalg, only: cubic_roots, cubic_roots_rosendo use yaeos__models_solvers, only: volume_michelsen class(CubicEoS), intent(in) :: eos real(pr), intent(in) :: n(:), P, T @@ -276,8 +276,9 @@ subroutine volume(eos, n, P, T, V, root_type) cp(3) = -P*(D1*D2*Bmix**2 - D1*Bmix**2 - D2*Bmix**2) + R*T*Bmix*(D1+D2) - D cp(4) = P*D1*D2*Bmix**3 + R*T *D1*D2*Bmix**2 + D*Bmix - call cubic_roots(cp, rr, cr, flag) - ! print *, root_type, n, rr + ! call cubic_roots(cp, rr, cr, flag) + call cubic_roots_rosendo(cp, rr, cr, flag) + select case(flag) case(-1) V_liq = rr(1) diff --git a/test/test_saturation.f90 b/test/test_saturation.f90 index 36e1b807a..a770e3741 100644 --- a/test/test_saturation.f90 +++ b/test/test_saturation.f90 @@ -99,7 +99,7 @@ subroutine test_dew_temperature(error) T = 240 model = binary_PR76() - dew = saturation_temperature(model, n, P, kind="dew", t0=250._pr) + dew = saturation_temperature(model, n, P, kind="dew", t0=150._pr) call check(error, abs(dew%P-P) < abs_tolerance) call check(error, abs(dew%T-T) < abs_tolerance) call check(error, maxval(abs(dew%x-x)) < abs_tolerance) @@ -126,6 +126,10 @@ subroutine test_bubble_temperature(error) T = 200 model = binary_PR76() bubble = saturation_temperature(model, n, P, kind="bubble",t0=201._pr) + print *, bubble%P, P + print *, bubble%T, T + print *, bubble%x, x + print *, bubble%y, y call check(error, maxval(abs(bubble%x - x)) < abs_tolerance) call check(error, maxval(abs(bubble%y - y)) < abs_tolerance) call check(error, abs(bubble%p - p) < abs_tolerance) From 4d4ce45fce18214e372d153da5428c46fa41d7f0 Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Wed, 17 Jul 2024 10:58:07 -0300 Subject: [PATCH 143/167] changed init which was too far away. --- test/test_saturation.f90 | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/test_saturation.f90 b/test/test_saturation.f90 index a770e3741..a264d5f77 100644 --- a/test/test_saturation.f90 +++ b/test/test_saturation.f90 @@ -99,7 +99,9 @@ subroutine test_dew_temperature(error) T = 240 model = binary_PR76() - dew = saturation_temperature(model, n, P, kind="dew", t0=150._pr) + dew = saturation_temperature(model, n, P, kind="dew", t0=250._pr) + print *, dew + call check(error, abs(dew%P-P) < abs_tolerance) call check(error, abs(dew%T-T) < abs_tolerance) call check(error, maxval(abs(dew%x-x)) < abs_tolerance) From 0d1a48e2219e142823332777a98808bbce4b0793 Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Wed, 17 Jul 2024 10:58:31 -0300 Subject: [PATCH 144/167] changed init which was too far away. --- test/test_saturation.f90 | 6 ------ 1 file changed, 6 deletions(-) diff --git a/test/test_saturation.f90 b/test/test_saturation.f90 index a264d5f77..36e1b807a 100644 --- a/test/test_saturation.f90 +++ b/test/test_saturation.f90 @@ -100,8 +100,6 @@ subroutine test_dew_temperature(error) model = binary_PR76() dew = saturation_temperature(model, n, P, kind="dew", t0=250._pr) - print *, dew - call check(error, abs(dew%P-P) < abs_tolerance) call check(error, abs(dew%T-T) < abs_tolerance) call check(error, maxval(abs(dew%x-x)) < abs_tolerance) @@ -128,10 +126,6 @@ subroutine test_bubble_temperature(error) T = 200 model = binary_PR76() bubble = saturation_temperature(model, n, P, kind="bubble",t0=201._pr) - print *, bubble%P, P - print *, bubble%T, T - print *, bubble%x, x - print *, bubble%y, y call check(error, maxval(abs(bubble%x - x)) < abs_tolerance) call check(error, maxval(abs(bubble%y - y)) < abs_tolerance) call check(error, abs(bubble%p - p) < abs_tolerance) From 7bd603c22d1dd3d0d78c0e7cebd043571b05b85f Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Wed, 17 Jul 2024 11:13:37 -0300 Subject: [PATCH 145/167] newton test --- test/test_math/test_math.f90 | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/test/test_math/test_math.f90 b/test/test_math/test_math.f90 index a1ef96ac2..b1d1dd119 100644 --- a/test/test_math/test_math.f90 +++ b/test/test_math/test_math.f90 @@ -13,7 +13,8 @@ subroutine collect_suite(testsuite) testsuite = [ & new_unittest("Test dx_to_dn", test_dx_to_dn), & new_unittest("Test sq_error", test_sq_error), & - new_unittest("Test cardano", test_cardano_method) & + new_unittest("Test cardano", test_cardano_method), & + new_unittest("Test newton", test_newton_method) & ] end subroutine collect_suite @@ -66,8 +67,26 @@ subroutine test_cardano_method(error) call check(error, flag == -1) call check(error, & maxval(abs(rr - [-0.454216, 0.8601986, 25.594016])) < 1e-5_pr & - ) + ) end subroutine test_cardano_method -end module test_math - + subroutine test_newton_method(error) + use yaeos__math, only: pr, newton + type(error_type), allocatable, intent(out) :: error + real(pr) :: x + real(pr) :: tol=1e-5 + integer :: max_iters = 100 + + x = 0.5 + call newton(foo, x, tol, max_iters) + call check(error, abs(x - sqrt(2._pr)) < tol) + contains + subroutine foo(xx, f, df) + real(pr), intent(in) :: xx + real(pr), intent(out) :: f + real(pr), intent(out) :: df + f = xx**2 - 2 + df = 2*xx + end subroutine foo + end subroutine test_newton_method +end module test_math From 085211241faced21932ccbff3c8858fd808086e0 Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Wed, 17 Jul 2024 12:33:33 -0300 Subject: [PATCH 146/167] documentation for cubics --- .../cubic/generic_cubic.f90 | 107 ++++++++++++++++-- 1 file changed, 100 insertions(+), 7 deletions(-) diff --git a/src/models/residual_helmholtz/cubic/generic_cubic.f90 b/src/models/residual_helmholtz/cubic/generic_cubic.f90 index a83812572..f825b2ae4 100644 --- a/src/models/residual_helmholtz/cubic/generic_cubic.f90 +++ b/src/models/residual_helmholtz/cubic/generic_cubic.f90 @@ -21,12 +21,67 @@ module yaeos__models_ar_genericcubic end type type, extends(ArModel) :: CubicEoS - !! Cubic Equation of State. + !! # Cubic Equation of State. !! !! Generic Cubic Equation of State as defined by Michelsen and Mollerup - !! with constant \(\delta_1\) and \(\delta_2\) parameters. + !! with a \(\delta_1\) parameter that is not constant, + !! and a \(\delta_2\) parameter that depends on it. In the case of a + !! two parameter EoS like PengRobinson the \(\delta_1\) is the same for + !! all components so it can be considered as a constant instead of a + !! variable. class(CubicMixRule), allocatable :: mixrule - class(AlphaFunction), allocatable :: alpha + !! # CubicMixRule derived type. + !! Uses the abstract derived type `CubicMixRule` to define the + !! mixing rule that the CubicEoS will use. It includes internally + !! three methods to calculate the corresponding parameters for the + !! Cubic EoS: `Dmix`, `Bmix` and `D1mix`. + !! + !! # Examples + !! ## Calculation of the B parameter. + !! ```fortran + !! use yaeos, only: CubicEoS, PengRobinson76 + !! type(CubicEoS) :: eos + !! eos = PengRobinson76(tc, pc, w) + !! call eos%mixrule%Bmix(n, eos%b, B, dBi, dBij) + !! ``` + !! ## Calculation of the D parameter. + !! ```fortran + !! use yaeos, only: CubicEoS, PengRobinson76 + !! type(CubicEoS) :: eos + !! eos = PengRobinson76(tc, pc, w) + !! + !! ! The mixing rule takes the `a` parameters of the components so + !! ! they should be calculated externally + !! call eos%alpha%alpha(Tr, a, dadt, dadt2) + !! a = a * eos%ac + !! dadt = dadt * eos%ac / eos%components%Tc + !! dadt = dadt * eos%ac / eos%components%Tc**2 + !! ! Calculate parameter + !! call eos%mixrule%Dmix(n, T, a, dadt, dadt2, D, dDdT, dDdT2, dDi, dDidT, dDij) + !! ``` + !! ## Calculation of the D1 parameter. + !! ```fortran + !! use yaeos, only: CubicEoS, PengRobinson76 + !! type(CubicEoS) :: eos + !! eos = PengRobinson76(tc, pc, w) + !! call eos%mixrule%D1mix(n, eos%del1, D1, dD1i, dD1ij) + !! ``` + class(AlphaFunction), allocatable :: alpha + !! # AlphaFunction derived type. + !! Uses the abstract derived type `AlphaFunction` to define the + !! Alpha function that the CubicEoS will use. The Alpha function + !! receives the reduced temperature and returns the values of alpha + !! and its derivatives, named `a`, `dadt` and `dadt2` respectively. + !! + !! # Examples + !! ## Callign the AlphaFunction of a setted up model. + !! ```fortran + !! use yaeos, only: CubicEoS, PengRobinson76 + !! + !! type(CubicEoS) :: eos + !! eos = PengRobinson76(tc, pc, w) + !! call eos%alpha%alpha(Tr, a, dadt, dadt2) + !! ``` real(pr), allocatable :: ac(:) !! Attractive critical parameter real(pr), allocatable :: b(:) !! Repulsive parameter real(pr), allocatable :: del1(:) !! \(\delta_1\) paramter @@ -86,7 +141,7 @@ subroutine GenericCubic_Ar(& !! !! \[ !! P = \frac{RT}{V-b} - ! - \frac{a_c\alpha(T_r)}{(V+b\delta_1)(V+b\delta_2)} + !! - \frac{a_c\alpha(T_r)}{(V+b\delta_1)(V+b\delta_2)} !! \] !! !! This routine assumes that the \(\delta_1\) is not a constant parameter @@ -224,6 +279,44 @@ function v0(self, n, p, t) end function subroutine volume(eos, n, P, T, V, root_type) + !! # Cubic EoS volume solver + !! Volume solver optimized for Cubic Equations of State. + !! + !! @warn + !! This routine intends to use the analyitical solution of the cubic + !! equation, but due to errors in the solutions it is not used. And + !! the general volume solver by Michelsen is used instead. + !! @endwarn + !! + !! # Description + !! Cubic equations can be analytically solved. Using an anallytical + !! solution provides the best possible solution in terms of speed and + !! precision. This subroutine uses the modified cardano method proposed + !! by Rosendo. + !! + !! # Examples + !! + !! ```fortran + !! use yaeos, only: CubicEoS, PengRobinson + !! type(CubicEoS) :: eos + !! + !! eos = PengRobinson(tc, pc, w) + !! ! Possible roots to solve + !! call eos%volume(n, P, T, V, "liquid") + !! call eos%volume(n, P, T, V, "vapor") + !! call eos%volume(n, P, T, V, "stable") + !! ``` + !! + !! # References + !! + !! - [1] "Thermodynamic Models: Fundamental and Computational Aspects", + !! Michael L. Michelsen, Jørgen M. Mollerup. + !! Tie-Line Publications, Denmark (2004) + !! [doi](http://dx.doi.org/10.1016/j.fluid.2005.11.032) + !! + !! - [2] "A Note on the Analytical Solution of Cubic Equations of State + !! in Process Simulation", Rosendo Monroy-Loperena + !! [doi](https://dx.doi.org/10.1021/ie2023004) use yaeos__constants, only: R use yaeos__math_linalg, only: cubic_roots, cubic_roots_rosendo use yaeos__models_solvers, only: volume_michelsen @@ -247,8 +340,8 @@ subroutine volume(eos, n, P, T, V, root_type) real(pr) :: a(size(n)), dadt(size(n)), dadt2(size(n)) real(pr) :: totn - ! call volume_michelsen(eos, n, P, T, V, root_type) - ! return + call volume_michelsen(eos, n, P, T, V, root_type) + return totn = sum(n) z = n/totn @@ -277,7 +370,7 @@ subroutine volume(eos, n, P, T, V, root_type) cp(4) = P*D1*D2*Bmix**3 + R*T *D1*D2*Bmix**2 + D*Bmix ! call cubic_roots(cp, rr, cr, flag) - call cubic_roots_rosendo(cp, rr, cr, flag) + ! call cubic_roots_rosendo(cp, rr, cr, flag) select case(flag) case(-1) From 3e2cacf7756c8e655d25d8294134cd95ec51b071 Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Wed, 17 Jul 2024 12:36:31 -0300 Subject: [PATCH 147/167] docs --- src/models/residual_helmholtz/cubic/generic_cubic.f90 | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/models/residual_helmholtz/cubic/generic_cubic.f90 b/src/models/residual_helmholtz/cubic/generic_cubic.f90 index f825b2ae4..ea80156b6 100644 --- a/src/models/residual_helmholtz/cubic/generic_cubic.f90 +++ b/src/models/residual_helmholtz/cubic/generic_cubic.f90 @@ -28,7 +28,12 @@ module yaeos__models_ar_genericcubic !! and a \(\delta_2\) parameter that depends on it. In the case of a !! two parameter EoS like PengRobinson the \(\delta_1\) is the same for !! all components so it can be considered as a constant instead of a - !! variable. + !! variable. The expression of the Equation is: + !! + !! \[ + !! P = \frac{RT}{V-B} + !! - \frac{D(T_r)}{(V+B\Delta_1)(V+B\Delta_2)} + !! \] class(CubicMixRule), allocatable :: mixrule !! # CubicMixRule derived type. !! Uses the abstract derived type `CubicMixRule` to define the From 96133630a844e4647b1acee70d0778ba321ccbf5 Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Wed, 17 Jul 2024 15:10:07 -0300 Subject: [PATCH 148/167] version number --- fpm.toml | 2 +- src/yaeos.f90 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fpm.toml b/fpm.toml index 7b08eba0e..956a3e71c 100644 --- a/fpm.toml +++ b/fpm.toml @@ -1,5 +1,5 @@ name = "yaeos" -version = "0.3.0" +version = "1.0.0" license = "MPL" author = "Federico E. Benelli" maintainer = "federico.benelli@mi.unc.edu.ar" diff --git a/src/yaeos.f90 b/src/yaeos.f90 index 1ac5c7fc8..e2320667d 100644 --- a/src/yaeos.f90 +++ b/src/yaeos.f90 @@ -15,5 +15,5 @@ module yaeos use yaeos__substance use yaeos__models use yaeos__equilibria - character(len=*), parameter :: version="0.3.0" !! This version. + character(len=*), parameter :: version="1.0.0" !! This version. end module From 74c46a3ea059913a275550effd9233403e206fca Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Wed, 17 Jul 2024 15:12:54 -0300 Subject: [PATCH 149/167] thermoprops --- python/yaeos/fortran_wrap/yaeos_c.f90 | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/python/yaeos/fortran_wrap/yaeos_c.f90 b/python/yaeos/fortran_wrap/yaeos_c.f90 index 3c5e6af86..837a95868 100644 --- a/python/yaeos/fortran_wrap/yaeos_c.f90 +++ b/python/yaeos/fortran_wrap/yaeos_c.f90 @@ -32,6 +32,7 @@ module yaeos_c ! Thermoprops public :: fug_vt + ! Phase equilibria public :: flash public :: saturation_pressure @@ -228,7 +229,6 @@ end subroutine rkpr ! Thermodynamic properties ! -------------------------------------------------------------------------- subroutine fug_vt(id, n, v, t, lnfug, dlnphidp, dlnphidt, dlnphidn) - use yaeos, only: fugacity_vt integer(c_int), intent(in) :: id real(c_double), intent(in) :: n(:), v, t real(c_double), intent(out) :: lnfug(size(n)) @@ -237,8 +237,7 @@ subroutine fug_vt(id, n, v, t, lnfug, dlnphidp, dlnphidt, dlnphidn) real(c_double), optional, intent(in out) :: & dlnphidp(size(n)), dlnphidt(size(n)), dlnphidn(size(n), size(n)) - call fugacity_vt(& - ar_models(id)%model, & + call ar_models(id)%model%lnphi_vt(& n, V, T, P, lnfug, dlnPhidP, dlnphidT, dlnPhidn & ) end subroutine fug_vt From 3e97987207b17777129b257eaf2c2f0ce2c9be41 Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Wed, 17 Jul 2024 15:19:28 -0300 Subject: [PATCH 150/167] include NRTL in init --- python/yaeos/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/python/yaeos/__init__.py b/python/yaeos/__init__.py index 81a72ab67..d8a59c001 100644 --- a/python/yaeos/__init__.py +++ b/python/yaeos/__init__.py @@ -2,6 +2,7 @@ from yaeos.core import ( SoaveRedlichKwong, PengRobinson76, PengRobinson78, RKPR, + NRTL, MHV, QMR ) From 75018d84c83571eac62e186b718085a2b353f491 Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Wed, 17 Jul 2024 15:26:01 -0300 Subject: [PATCH 151/167] tox? --- .github/workflows/CI.yml | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 2517a1c18..df77a3a0f 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -95,11 +95,17 @@ jobs: with: python-version: ${{ matrix.python-version }} - - name: Install NLopt and meson + - name: Install dependencies + working-directory: ./python run: | sudo apt-get install libnlopt-dev meson - pip install meson + pip install meson tox - name: Install yaeos + working-directory: ./python run: - cd python; pip install . + pip install . + + - name: tox + working-directory: ./python + run: tox -r . From 13ac976b5d6d7e45bb11ff98c9743182e4a40520 Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Wed, 17 Jul 2024 15:28:38 -0300 Subject: [PATCH 152/167] tox --- .github/workflows/CI.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index df77a3a0f..fee3ea6a3 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -108,4 +108,4 @@ jobs: - name: tox working-directory: ./python - run: tox -r . + run: tox -r From 869f6a31304762e24dde25d697bdc76d7c1ec325 Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Wed, 17 Jul 2024 16:41:02 -0300 Subject: [PATCH 153/167] Going to a standard naming convention --- STYLE_GUIDE.md | 25 +- example/extra/benchmark.f90 | 4 +- src/models/residual_helmholtz/ar_models.f90 | 218 ++++++++++-------- .../boundaries/phase_envelopes_pt.f90 | 8 +- src/phase_equilibria/flash.f90 | 8 +- src/phase_equilibria/saturations_points.f90 | 8 +- src/phase_equilibria/stability.f90 | 8 +- .../ar_models/cubics/test_pr76.f90 | 14 +- test/test_thermoprops.f90 | 4 +- 9 files changed, 167 insertions(+), 130 deletions(-) diff --git a/STYLE_GUIDE.md b/STYLE_GUIDE.md index ef7ed19af..9dbd98bd9 100644 --- a/STYLE_GUIDE.md +++ b/STYLE_GUIDE.md @@ -13,8 +13,22 @@ This style guide is a living document and proposed changes may be adopted after * Do not use vendor extensions in the form of non-standard syntax and vendor supplied intrinsic procedures E.g., `real*8` or `etime()`, use `real(pr)` -## File naming conventions +## Naming of variables and constructs +- Variable and procedure names, as well as Fortran keywords, should be written in lowercase +- All constants (like the `R` gas constant) should be upper case +- All variables should be in lowercase unless they are represented in uppercase in the bibliography. + for example, the molar volume would be `v` and the total volume would be `V`. +- In the case of derivatives, for general properties they should be written as `dXdy` for first derivatives and `dXdyz` or `dXdy2` for second order derivatives. The only exception is with energetic properties, like `Ar`, where derivatives are written like `ArV`, `ArVn`, etc. +- All thermodynamic variables that are input of a subroutine/function should + have the order: + - `n, V, T` + - `n, P, T` +- Variable and procedure names should be made up of one or more full words separated by an underscore, + for example `has_failed` is preferred over `hasfailed` +- Where conventional and appropriate shortening of a word is used then the underscore may be omitted, + for example `linspace` is preferred over `lin_space` +## File naming conventions * Source files should contain at most one `program`, `module`, or `submodule` * The filename should match the program or module name and have the file extension `.f90` or `.F90` if preprocessing is required * `module` names should include it's subdirectory, using `yaeos__` for the parent @@ -34,18 +48,11 @@ than style and formatting. We recommend ~~enforce~~ the use of `findent` to format your files. -* The body of every Fortran construct should be indented by __four (4) spaces__ +* The body of every Fortran construct should be indented by __three (3) spaces__ * Line length *should be limited to 80 characters* and __must not exceed 132__ * **Do not** use Tab characters for indentation * **Remove** trailing white space before committing code -## Variable and procedure naming - -* Variable and procedure names, as well as Fortran keywords, should be written in lowercase -* Variable and procedure names should be made up of one or more full words separated by an underscore, - for example `has_failed` is preferred over `hasfailed` -* Where conventional and appropriate shortening of a word is used then the underscore may be omitted, - for example `linspace` is preferred over `lin_space` ## Attributes diff --git a/example/extra/benchmark.f90 b/example/extra/benchmark.f90 index 543c2ea3c..5b301f521 100644 --- a/example/extra/benchmark.f90 +++ b/example/extra/benchmark.f90 @@ -51,12 +51,12 @@ subroutine yaeos__run(n, dn, f_p, model_name) if (f_p) then call model%lnphi_tp(& z, T, P, root_type="stable", & - lnphip=lnfug, dlnphidp=dlnphidp, dlnphidn=dlnphidn) + lnPhi=lnfug, dlnphidp=dlnphidp, dlnphidn=dlnphidn) else call model%lnphi_vt(z, V, T, P, lnfug, dlnPhidP, dlnphidT, dlnphidn) end if else - call model%lnphi_vt(z, V, T, lnphip=lnfug) + call model%lnphi_vt(z, V, T, lnPhi=lnfug) end if end subroutine diff --git a/src/models/residual_helmholtz/ar_models.f90 b/src/models/residual_helmholtz/ar_models.f90 index daa35c1e3..dea3b85d3 100644 --- a/src/models/residual_helmholtz/ar_models.f90 +++ b/src/models/residual_helmholtz/ar_models.f90 @@ -28,7 +28,7 @@ module yaeos__models_ar !! All the routines in this module work with the logic: !! !! ```fortran - !! call foo(x, V, T, [dfoodv, dfoodt, ...]) + !! call foo(x, V, T, [dfoodv, dfoodT, ...]) !! ``` !! Where the user can call the routine of the desired property. And include !! as optional values the desired derivatives of said properties. @@ -48,9 +48,7 @@ module yaeos__models_ar character(len=:), allocatable :: name !! Name of the model contains procedure(abs_residual_helmholtz), deferred :: residual_helmholtz - !! Method to calculate residual helmholtz energy and derivatives. procedure(abs_volume_initializer), deferred :: get_v0 - !! Volume initializer procedure :: lnphi_vt => fugacity_vt procedure :: lnphi_tp => fugacity_tp procedure :: pressure @@ -100,7 +98,10 @@ subroutine abs_residual_helmholtz(& end subroutine abs_residual_helmholtz function abs_volume_initializer(self, n, p, t) - !! Initialization of volume. + !! Function that provides an initializer value for the liquid-root + !! of newton solver of volume. In the case the model will use the + !! `volume_michelsen` routine this value should provide the co-volume + !! of the model. import ArModel, pr class(ArModel), intent(in) :: self !! Ar Model real(pr), intent(in) :: n(:) !! Moles vector @@ -113,14 +114,31 @@ end function abs_volume_initializer contains subroutine volume(eos, n, P, T, V, root_type) - !! Generic volume solver + !! # Volume solver routine for residual Helmholtz models. + !! Solves volume roots using newton method. Given pressure and temperature. + !! + !! # Description + !! This subroutine solves the volume using a newton method. The variable + !! `root_type` + !! + !! # Examples + !! + !! ```fortran + !! class(ArModel) :: eos + !! call eos%volume(n, P, T, V, root_type="liquid") + !! call eos%volume(n, P, T, V, root_type="vapor") + !! call eos%volume(n, P, T, V, root_type="stable") + !! ``` use yaeos__constants, only: pr, R use yaeos__math, only: newton class(ArModel), intent(in) :: eos - real(pr), intent(in) :: n(:) - real(pr), intent(in) :: P, T - real(pr), intent(out) :: V - character(len=*), intent(in) :: root_type + real(pr), intent(in) :: n(:) !! Moles number vector + real(pr), intent(in) :: P !! Pressure [bar] + real(pr), intent(in) :: T !! Temperature [K] + real(pr), intent(out) :: V !! Volume [L] + character(len=*), intent(in) :: root_type + !! Desired root-type to solve. Options are: + !! `["liquid", "vapor", "stable"]` integer :: max_iters=30 real(pr) :: tol=1e-7 @@ -172,19 +190,29 @@ subroutine foo(x, f, df) end subroutine foo end subroutine volume - subroutine pressure(eos, n, v, t, p, dpdv, dpdt, dpdn) + subroutine pressure(eos, n, V, T, P, dPdV, dPdT, dPdn) !! Pressure calculation. !! !! Calculate pressure using residual helmholtz models. !! + !! # Examples + !! ```fortran + !! class(ArModel), allocatable :: eos + !! real(pr) :: n(2), t, v, p, dPdV, dPdT, dPdn(2) + !! eos = PengRobinson(Tc, Pc, w) + !! n = [1.0_pr, 1.0_pr] + !! t = 300.0_pr + !! v = 1.0_pr + !! call eos%pressure(n, V, T, P, dPdV=dPdV, dPdT=dPdT, dPdn=dPdn) + !! ``` class(ArModel), intent(in) :: eos !! Model real(pr), intent(in) :: n(:) !! Moles number vector real(pr), intent(in) :: t !! Temperature [K] real(pr), intent(in) :: v !! Volume [L] real(pr), intent(out) :: p !! Pressure [bar] - real(pr), optional, intent(out) :: dpdv !! \(\frac{dP}}{dV}\) - real(pr), optional, intent(out) :: dpdt !! \(\frac{dP}}{dT}\) - real(pr), optional, intent(out) :: dpdn(:) !! \(\frac{dP}}{dn_i}\) + real(pr), optional, intent(out) :: dPdV !! \(\frac{dP}}{dV}\) + real(pr), optional, intent(out) :: dPdT !! \(\frac{dP}}{dT}\) + real(pr), optional, intent(out) :: dPdn(:) !! \(\frac{dP}}{dn_i}\) real(pr) :: totn @@ -192,10 +220,10 @@ subroutine pressure(eos, n, v, t, p, dpdv, dpdt, dpdn) integer :: nc logical :: dn - TOTN = sum(n) + totn = sum(n) nc = size(n) - if (present(dPdN)) then + if (present(dPdn)) then call eos%residual_helmholtz(& n, v, t, Ar=Ar, ArV=ArV, ArV2=ArV2, ArTV=ArTV, ArVn=ArVn & ) @@ -205,14 +233,14 @@ subroutine pressure(eos, n, v, t, p, dpdv, dpdt, dpdn) ) end if - P = TOTN*R*T/V - ArV - if (present(dPdV)) dPdV = -ArV2 - R*t*TOTN/V**2 - if (present(dPdT)) dPdT = -ArTV + TOTN*R/V - if (present(dPdN)) dPdN(:) = R*T/V - ArVn(:) + P = totn * R * T/V - ArV + if (present(dPdV)) dPdV = -ArV2 - R*t*totn/V**2 + if (present(dPdT)) dPdT = -ArTV + totn*R/V + if (present(dPdn)) dPdn(:) = R*T/V - ArVn(:) end subroutine pressure subroutine fugacity_tp(eos, & - n, T, P, V, root_type, lnphip, dlnPhidP, dlnphidT, dlnPhidn & + n, T, P, V, root_type, lnPhi, dlnPhidP, dlnPhidT, dlnPhidn & ) !! Calculate logarithm of fugacity, given pressure and temperature. !! @@ -229,27 +257,30 @@ subroutine fugacity_tp(eos, & class(ArModel), intent(in) :: eos !! Model real(pr), intent(in) :: n(:) !! Mixture mole numbers character(len=*), intent(in) :: root_type !! Type of root desired ["liquid", "vapor", "stable"] - real(pr), intent(in) :: t !! Temperature [K] - real(pr), intent(in) :: p !! Pressure [bar] + real(pr), intent(in) :: T !! Temperature [K] + real(pr), intent(in) :: P !! Pressure [bar] - real(pr), optional, intent(out) :: lnphip(size(n)) !! \(\ln(phi*P)\) vector - real(pr), optional, intent(out) :: v !! Volume [L] - real(pr), optional, intent(out) :: dlnphidt(size(n)) !! ln(phi) Temp derivative - real(pr), optional, intent(out) :: dlnphidp(size(n)) !! ln(phi) Presssure derivative - real(pr), optional, intent(out) :: dlnphidn(size(n), size(n)) !! ln(phi) compositional derivative + real(pr), optional, intent(out) :: lnPhi(size(n)) !! \(\ln(phi)\) vector + real(pr), optional, intent(out) :: V !! Volume [L] + real(pr), optional, intent(out) :: dlnPhidT(size(n)) !! ln(phi) Temp derivative + real(pr), optional, intent(out) :: dlnPhidP(size(n)) !! ln(phi) Presssure derivative + real(pr), optional, intent(out) :: dlnPhidn(size(n), size(n)) !! ln(phi) compositional derivative - real(pr) :: v_in, p_in + real(pr) :: V_in, P_in call eos%volume(n, P=P, T=T, V=V_in, root_type=root_type) - call eos%lnphi_vt(n, v_in, T, P_in, lnphip, dlnphidp, dlnphidt, dlnphidn) - if(present(v)) v = v_in - if(abs(P_in - p) > 1e-2) then - write(error_unit, *) "WARN: possible bad root solving: ", p_in, p + call eos%lnphi_vt(n, V_in, T, P_in, lnPhi, dlnPhidP, dlnPhidT, dlnPhidn) + + if(present(V)) V = V_in + + ! Check if the calculated pressure is the same as the input pressure. + if(abs(P_in - P) > 1e-2) then + write(error_unit, *) "WARN: possible bad root solving: ", P_in, P end if end subroutine fugacity_tp subroutine fugacity_vt(eos, & - n, V, T, P, lnphip, dlnPhidP, dlnphidT, dlnPhidn, dPdV, dPdT, dPdN & + n, V, T, P, lnPhi, dlnPhidP, dlnPhidT, dlnPhidn, dPdV, dPdT, dPdn & ) !! Calculate fugacity coefficent given volume and temperature. !! @@ -261,23 +292,23 @@ subroutine fugacity_vt(eos, & !! class(ArModel) :: eos !! Model real(pr), intent(in) :: n(:) !! Mixture mole numbers - real(pr), intent(in) :: v !! Volume [L] - real(pr), intent(in) :: t !! Temperature [K] - - real(pr), optional, intent(out) :: p !! Pressure [bar] - real(pr), optional, intent(out) :: lnphip(size(n)) !! \(\ln(\phi_i*P)\) vector - real(pr), optional, intent(out) :: dlnphidt(size(n)) !! \(ln(phi_i)\) Temp derivative - real(pr), optional, intent(out) :: dlnphidp(size(n)) !! \(ln(phi_i)\) Presssure derivative - real(pr), optional, intent(out) :: dlnphidn(size(n), size(n)) !! \(ln(phi_i)\) compositional derivative + real(pr), intent(in) :: V !! Volume [L] + real(pr), intent(in) :: T !! Temperature [K] + + real(pr), optional, intent(out) :: P !! Pressure [bar] + real(pr), optional, intent(out) :: lnPhi(size(n)) !! \(\ln(\phi_i*P)\) vector + real(pr), optional, intent(out) :: dlnPhidT(size(n)) !! \(ln(phi_i)\) Temp derivative + real(pr), optional, intent(out) :: dlnPhidP(size(n)) !! \(ln(phi_i)\) Presssure derivative + real(pr), optional, intent(out) :: dlnPhidn(size(n), size(n)) !! \(ln(phi_i)\) compositional derivative real(pr), optional, intent(out) :: dPdV !! \(\frac{dP}{dV}\) real(pr), optional, intent(out) :: dPdT !! \(\frac{dP}{dT}\) - real(pr), optional, intent(out) :: dPdN(:) !! \(\frac{dP}{dn_i}\) + real(pr), optional, intent(out) :: dPdn(:) !! \(\frac{dP}{dn_i}\) real(pr) :: Ar, ArTV, ArV, ArV2 real(pr), dimension(size(n)) :: Arn, ArVn, ArTn real(pr) :: Arn2(size(n), size(n)) - real(pr) :: dPdV_in, dPdT_in, dPdN_in(size(n)) + real(pr) :: dPdV_in, dPdT_in, dPdn_in(size(n)) real(pr) :: P_in real(pr) :: RT, Z @@ -285,23 +316,22 @@ subroutine fugacity_vt(eos, & real(pr) :: totn integer :: nc, i, j - totn = sum(n) nc = size(n) RT = R*T - Z = V/(TOTN*RT) ! this is Z/P + Z = V/(totn*RT) ! this is Z/P - if (present(lnphip) .and. .not. (& - present(dlnphidn) & - .or. present(dlnphidp) & - .or. present(dlnphidt) & - .or. present(p) & + if (present(lnPhi) .and. .not. (& + present(dlnPhidn) & + .or. present(dlnPhidP) & + .or. present(dlnPhidT) & + .or. present(P) & )) then call eos%residual_helmholtz(n, v, t, Arn=Arn) - lnphip(:) = Arn(:)/RT - log(Z) + lnPhi(:) = Arn(:)/RT - log(Z) return - else if (present(dlnphidn)) then + else if (present(dlnPhidn)) then call eos%residual_helmholtz(& n, V, T, Ar=Ar, ArV=ArV, ArV2=ArV2, ArTV=ArTV, & Arn=Arn, ArVn=ArVn, ArTn=ArTn, Arn2=Arn2 & @@ -313,37 +343,37 @@ subroutine fugacity_vt(eos, & ) end if - if (present(lnphip)) lnphip = Arn(:)/RT - log(Z) + if (present(lnPhi)) lnPhi = Arn(:)/RT - log(Z) - P_in = TOTN*RT/V - ArV + P_in = totn*RT/V - ArV if (present(P)) P = P_in - dPdV_in = -ArV2 - RT*TOTN/V**2 - dPdT_in = -ArTV + TOTN*R/V - dPdN_in = RT/V - ArVn + dPdV_in = -ArV2 - RT*totn/V**2 + dPdT_in = -ArTV + totn*R/V + dPdn_in = RT/V - ArVn - if (present(dlnphidp)) then - dlnphidp(:) = -dPdN_in(:)/dPdV_in/RT - 1._pr/P_in + if (present(dlnPhidP)) then + dlnPhidP(:) = -dPdn_in(:)/dPdV_in/RT - 1._pr/P_in end if - if (present(dlnphidt)) then - dlnphidt(:) = (ArTn(:) - Arn(:)/T)/RT + dPdN_in(:)*dPdT_in/dPdV_in/RT + 1._pr/T + if (present(dlnPhidT)) then + dlnPhidT(:) = (ArTn(:) - Arn(:)/T)/RT + dPdn_in(:)*dPdT_in/dPdV_in/RT + 1._pr/T end if - if (present(dlnphidn)) then + if (present(dlnPhidn)) then do i = 1, nc do j = i, nc - dlnphidn(i, j) = 1._pr/TOTN + (Arn2(i, j) + dPdN_in(i)*dPdN_in(j)/dPdV_in)/RT - dlnphidn(j, i) = dlnphidn(i, j) + dlnPhidn(i, j) = 1._pr/totn + (Arn2(i, j) + dPdn_in(i)*dPdn_in(j)/dPdV_in)/RT + dlnPhidn(j, i) = dlnPhidn(i, j) end do end do end if if (present(dPdV)) dPdV = dPdV_in if (present(dPdT)) dPdT = dPdT_in - if (present(dPdN)) dPdN = dPdN_in + if (present(dPdn)) dPdn = dPdn_in end subroutine fugacity_vt - subroutine enthalpy_residual_vt(eos, n, v, t, Hr, HrT, HrV, Hrn) + subroutine enthalpy_residual_vt(eos, n, V, T, Hr, HrT, HrV, Hrn) !! Calculate residual enthalpy given volume and temperature. class(ArModel), intent(in) :: eos !! Model real(pr), intent(in) :: n(:) !! Moles number vector @@ -368,40 +398,40 @@ subroutine enthalpy_residual_vt(eos, n, v, t, Hr, HrT, HrV, Hrn) if (present(HrN)) HrN(:) = Arn(:) - t*ArTn(:) - v*ArVn(:) end subroutine enthalpy_residual_vt - subroutine gibbs_residual_vt(eos, n, v, t, Gr, GrT, GrV, Grn) + subroutine gibbs_residual_VT(eos, n, V, T, Gr, GrT, GrV, Grn) !! Calculate residual Gibbs energy given volume and temperature. use yaeos__constants, only: R class(ArModel), intent(in) :: eos !! Model real(pr), intent(in) :: n(:) !! Moles number vector - real(pr), intent(in) :: t !! Temperature [K] - real(pr), intent(in) :: v !! Volume [L] + real(pr), intent(in) :: V !! Volume [L] + real(pr), intent(in) :: T !! Temperature [K] real(pr), intent(out) :: Gr !! Gibbs energy [bar L / mol] real(pr), optional, intent(out) :: GrT !! \(\frac{dG^r}}{dT}\) real(pr), optional, intent(out) :: GrV !! \(\frac{dG^r}}{dV}\) real(pr), optional, intent(out) :: Grn(size(n)) !! \(\frac{dG^r}}{dn}\) real(pr) :: Ar, ArV, ArT, Arn(size(n)) - real(pr) :: p, dpdv, dpdt, dpdn(size(n)), z, ntot + real(pr) :: p, dPdV, dPdT, dPdn(size(n)), z, totn - ntot = sum(n) - call pressure(eos, n, v, t, p, dpdv=dpdv, dpdt=dpdt, dpdn=dpdn) - z = p*v/(ntot*R*t) + totn = sum(n) + call pressure(eos, n, V, T, P, dPdV=dPdV, dPdT=dPdT, dPdn=dPdn) + z = P*V/(totn*R*T) call eos%residual_helmholtz(n, v, t, Ar=Ar, ArV=ArV, ArT=ArT, Arn=Arn) - Gr = Ar + p*v - ntot*R*t + Gr = Ar + P*V - totn*R*T - if (present(GrT)) GrT = ArT + v*dpdt - ntot*R - if (present(GrV)) GrV = ArV + v*dpdv + p - if (present(GrN)) GrN(:) = Arn(:) + v*dpdn(:) - R*t + if (present(GrT)) GrT = ArT + V*dPdT - totn*R + if (present(GrV)) GrV = ArV + V*dPdV + P + if (present(GrN)) GrN(:) = Arn(:) + V*dPdn(:) - R*T end subroutine gibbs_residual_vt - subroutine entropy_residual_vt(eos, n, v, t, Sr, SrT, SrV, Srn) + subroutine entropy_residual_vt(eos, n, V, T, Sr, SrT, SrV, Srn) !! Calculate residual entropy given volume and temperature. class(ArModel), intent(in) :: eos !! Model real(pr), intent(in) :: n(:) !! Moles number vector - real(pr), intent(in) :: t !! Temperature [K] - real(pr), intent(in) :: v !! Volume [L] + real(pr), intent(in) :: V !! Volume [L] + real(pr), intent(in) :: T !! Temperature [K] real(pr), intent(out) :: Sr !! Entropy [bar L / K / mol] real(pr), optional, intent(out) :: SrT !! \(\frac{dS^r}}{dT}\) real(pr), optional, intent(out) :: SrV !! \(\frac{dS^r}}{dV}\) @@ -420,40 +450,40 @@ subroutine entropy_residual_vt(eos, n, v, t, Sr, SrT, SrV, Srn) if (present(SrN)) SrN = - ArTn end subroutine entropy_residual_vt - subroutine Cv_residual_vt(eos, n, v, t, Cv) + subroutine Cv_residual_vt(eos, n, V, T, Cv) !! Calculate residual heat capacity volume constant given v and t. class(ArModel), intent(in) :: eos !! Model real(pr), intent(in) :: n(:) !! Moles number vector - real(pr), intent(in) :: t !! Temperature [K] - real(pr), intent(in) :: v !! Volume [L] + real(pr), intent(in) :: T !! Temperature [K] + real(pr), intent(in) :: V !! Volume [L] real(pr), intent(out) :: Cv !! heat capacity v constant [bar L / K / mol] real(pr) :: Ar, ArT2 - call eos%residual_helmholtz(n, v, t, Ar=Ar, ArT2=ArT2) + call eos%residual_helmholtz(n, V, T, Ar=Ar, ArT2=ArT2) - Cv = -t*ArT2 + Cv = -T*ArT2 end subroutine Cv_residual_vt - subroutine Cp_residual_vt(eos, n, v, t, Cp) + subroutine Cp_residual_vt(eos, n, V, T, Cp) !! Calculate residual heat capacity pressure constant given v and t. use yaeos__constants, only: R class(ArModel), intent(in) :: eos !! Model real(pr), intent(in) :: n(:) !! Moles number vector - real(pr), intent(in) :: t !! Temperature [K] - real(pr), intent(in) :: v !! Volume [L] + real(pr), intent(in) :: V !! Volume [L] + real(pr), intent(in) :: T !! Temperature [K] real(pr), intent(out) :: Cp !! heat capacity p constant [bar L / K / mol] - real(pr) :: Ar, ArT2, Cv, p, dpdt, dpdv, ntot + real(pr) :: Ar, ArT2, Cv, p, dPdT, dPdV, totn - ntot = sum(n) + totn = sum(n) - call eos%residual_helmholtz(n, v, t, Ar=Ar, ArT2=ArT2) + call eos%residual_helmholtz(n, V, T, Ar=Ar, ArT2=ArT2) - call Cv_residual_vt(eos, n, v, t, Cv) + call Cv_residual_vt(eos, n, V, T, Cv) - call pressure(eos, n, v, t, p, dpdv=dpdv, dpdt=dpdt) + call pressure(eos, n, V, T, P, dPdV=dPdV, dPdT=dPdT) - Cp = Cv - t*dpdt**2/dpdv - ntot*R + Cp = Cv - T*dPdT**2/dPdV - totn*R end subroutine Cp_residual_vt end module yaeos__models_ar diff --git a/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 b/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 index 06ad066e9..c8a299499 100644 --- a/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 +++ b/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 @@ -125,7 +125,7 @@ subroutine foo(X, ns, S, F, dF, dFdS) character(len=14) :: kind_z, kind_y real(pr) :: y(nc) - real(pr) :: Vz, Vy, lnphip_z(nc), lnphip_y(nc) + real(pr) :: Vz, Vy, lnPhi_z(nc), lnPhi_y(nc) real(pr) :: dlnphi_dt_z(nc), dlnphi_dt_y(nc) real(pr) :: dlnphi_dp_z(nc), dlnphi_dp_y(nc) real(pr) :: dlnphi_dn_z(nc, nc), dlnphi_dn_y(nc, nc) @@ -157,16 +157,16 @@ subroutine foo(X, ns, S, F, dF, dFdS) call model%lnphi_tp(& z, T, P, V=Vz, root_type=kind_z, & - lnphip=lnphip_z, dlnPhidt=dlnphi_dt_z, & + lnPhi=lnphi_z, dlnPhidt=dlnphi_dt_z, & dlnPhidp=dlnphi_dp_z, dlnphidn=dlnphi_dn_z & ) call model%lnphi_tp(& y, T, P, V=Vy, root_type=kind_y, & - lnphip=lnphip_y, dlnPhidt=dlnphi_dt_y, & + lnPhi=lnphi_y, dlnPhidt=dlnphi_dt_y, & dlnPhidp=dlnphi_dp_y, dlnphidn=dlnphi_dn_y & ) - F(:nc) = X(:nc) + lnphip_y - lnphip_z + F(:nc) = X(:nc) + lnPhi_y - lnPhi_z F(nc + 1) = sum(y - z) F(nc + 2) = X(ns) - S diff --git a/src/phase_equilibria/flash.f90 b/src/phase_equilibria/flash.f90 index ceaa7b580..a227c28b6 100644 --- a/src/phase_equilibria/flash.f90 +++ b/src/phase_equilibria/flash.f90 @@ -109,11 +109,11 @@ type(EquilibriaState) function flash(model, z, t, v_spec, p_spec, k0, iters) case("TV") ! find Vy,Vx (vV and vL) from V balance and P equality equations call tv_loop_solve_pressures(model, T, V, beta, x, y, Vx, Vy, P) - call model%lnphi_tp(y, T, P, V=Vy, root_type="stable", lnphip=lnfug_y) - call model%lnphi_tp(x, T, P, V=Vx, root_type="liquid", lnphip=lnfug_x) + call model%lnphi_tp(y, T, P, V=Vy, root_type="stable", lnPhi=lnfug_y) + call model%lnphi_tp(x, T, P, V=Vx, root_type="liquid", lnPhi=lnfug_x) case("TP") - call model%lnphi_tp(y, T, P, V=Vy, root_type="stable", lnphip=lnfug_y) - call model%lnphi_tp(x, T, P, V=Vx, root_type="liquid", lnphip=lnfug_x) + call model%lnphi_tp(y, T, P, V=Vy, root_type="stable", lnPhi=lnfug_y) + call model%lnphi_tp(x, T, P, V=Vx, root_type="liquid", lnPhi=lnfug_x) end select dKold = dK diff --git a/src/phase_equilibria/saturations_points.f90 b/src/phase_equilibria/saturations_points.f90 index c28d418bd..7a7c8ffe3 100644 --- a/src/phase_equilibria/saturations_points.f90 +++ b/src/phase_equilibria/saturations_points.f90 @@ -83,8 +83,8 @@ type(EquilibriaState) function saturation_pressure(model, n, t, kind, p0, y0, ma ! ------------------------------------------------------------------------ do its=1, iterations y = k*z - call model%lnphi_tp(y, T, P, vy, incipient, lnphip=lnfug_y, dlnphidp=dlnphi_dp_y) - call model%lnphi_tp(z, T, P, vz, main, lnphip=lnfug_z, dlnphidp=dlnphi_dp_z) + call model%lnphi_tp(y, T, P, vy, incipient, lnPhi=lnfug_y, dlnphidp=dlnphi_dp_y) + call model%lnphi_tp(z, T, P, vz, main, lnPhi=lnfug_z, dlnphidp=dlnphi_dp_z) k = exp(lnfug_z - lnfug_y) @@ -192,8 +192,8 @@ type(EquilibriaState) function saturation_temperature(model, n, p, kind, t0, y0, ! ------------------------------------------------------------------------ do its=1, iterations y = k*z - call model%lnphi_tp(y, T, P, vy, incipient, lnphip=lnfug_y, dlnphidt=dlnphi_dt_y) - call model%lnphi_tp(z, T, P, vz, main, lnphip=lnfug_z, dlnphidt=dlnphi_dt_z) + call model%lnphi_tp(y, T, P, vy, incipient, lnPhi=lnfug_y, dlnphidt=dlnphi_dt_y) + call model%lnphi_tp(z, T, P, vz, main, lnPhi=lnfug_z, dlnphidt=dlnphi_dt_z) k = exp(lnfug_z - lnfug_y) f = sum(z*k) - 1 diff --git a/src/phase_equilibria/stability.f90 b/src/phase_equilibria/stability.f90 index d4a6766ca..d2211b3ae 100644 --- a/src/phase_equilibria/stability.f90 +++ b/src/phase_equilibria/stability.f90 @@ -84,13 +84,13 @@ real(pr) function tm(model, z, w, P, T, d, dtpd) real(pr) :: lnphi_z(size(z)), lnphi_w(size(z)) call model%lnphi_tp(& - w, T=T, P=P, V=Vw, root_type="stable", lnphip=lnphi_w & + w, T=T, P=P, V=Vw, root_type="stable", lnPhi=lnPhi_w & ) - lnphi_w = lnphi_w - log(P) + lnPhi_w = lnPhi_w - log(P) if (.not. present(d)) then call model%lnphi_tp(& - z, T=T, P=P, V=Vz, root_type="stable", lnphip=lnphi_z& + z, T=T, P=P, V=Vz, root_type="stable", lnPhi=lnPhi_z& ) lnphi_z = lnphi_z - log(P) di = log(z) + lnphi_z @@ -134,7 +134,7 @@ subroutine min_tpd(model, z, P, T, mintpd, w, all_minima) dx = 0.001_pr ! Calculate feed di - call model%lnphi_tp(z, T=T, P=P, V=V, root_type="stable", lnphip=lnphi_z) + call model%lnphi_tp(z, T=T, P=P, V=V, root_type="stable", lnPhi=lnphi_z) lnphi_z = lnphi_z - log(P) di = log(z) + lnphi_z diff --git a/test/test_implementations/ar_models/cubics/test_pr76.f90 b/test/test_implementations/ar_models/cubics/test_pr76.f90 index aceaf59bd..a6eaa13ff 100644 --- a/test/test_implementations/ar_models/cubics/test_pr76.f90 +++ b/test/test_implementations/ar_models/cubics/test_pr76.f90 @@ -369,7 +369,7 @@ subroutine test_pr76_fugacities(error) class(ArModel), allocatable :: model - real(pr) :: T, P, z_v(2), z_l(2), v_v, lnphip_l(2), lnphip_v(2) + real(pr) :: T, P, z_v(2), z_l(2), v_v, lnphi_l(2), lnphi_v(2) T = 100 ! K P = 4.119 ! bar @@ -383,19 +383,19 @@ subroutine test_pr76_fugacities(error) ) call model%volume(z_v, P, T, root_type="vapor", V=v_v) - call model%lnphi_tp(z_v, T, P, root_type="vapor", lnphip = lnphip_v) - call model%lnphi_tp(z_l, T, P, root_type="liquid", lnphip = lnphip_l) + call model%lnphi_tp(z_v, T, P, root_type="vapor", lnPhi = lnphi_v) + call model%lnphi_tp(z_l, T, P, root_type="liquid", lnPhi = lnphi_l) ! Elliot Z value of vapor call check(error, abs(P * v_v / R / T - 0.9059) < 1e-4) ! Elliot vapor fugacities - call check(error, abs(exp(lnphip_v(1) - log(P)) - 0.9162) < 1e-4) - call check(error, abs(exp(lnphip_v(2) - log(P)) - 0.8473) < 1e-4) + call check(error, abs(exp(lnPhi_v(1) - log(P)) - 0.9162) < 1e-4) + call check(error, abs(exp(lnPhi_v(2) - log(P)) - 0.8473) < 1e-4) ! Elliot liquid fugacities - call check(error, abs(exp(lnphip_l(1) - log(P)) - 1.791) < 1e-3) - call check(error, abs(exp(lnphip_l(2) - log(P)) - 0.0937) < 1e-4) + call check(error, abs(exp(lnPhi_l(1) - log(P)) - 1.791) < 1e-3) + call check(error, abs(exp(lnPhi_l(2) - log(P)) - 0.0937) < 1e-4) end subroutine test_pr76_fugacities subroutine test_pr76_txy_methanol_benzene(error) diff --git a/test/test_thermoprops.f90 b/test/test_thermoprops.f90 index e045a1d56..ee1671006 100644 --- a/test/test_thermoprops.f90 +++ b/test/test_thermoprops.f90 @@ -143,7 +143,7 @@ subroutine test_enthalpy_residual_vt(error) ! test against fugacity coefficient derivatives ! (Michelsen and Mollerup chapter 2 eq 37) - call eos%lnphi_vt(z, v, t, lnphip=lnfug, dlnphidt=dlnphidt) + call eos%lnphi_vt(z, v, t, lnPhi=lnfug, dlnphidt=dlnphidt) Hr_fromphi = -1_pr * sum(z * dlnphidT) * R * t**2 ! Hr(T,P) = Hr(T,V) @@ -229,7 +229,7 @@ subroutine test_gibss_residual_vt(error) ! test against fugacity coefficient ! (Michelsen and Mollerup chapter 2 eq 31) - call eos%lnphi_vt(z, v, t, lnphip=lnfug) + call eos%lnphi_vt(z, v, t, lnPhi=lnfug) lnfugcoeffs = lnfug - log(p) ! lnfug is = ln(phi * p) From ee645f74f83129577979d7d1ff5067fb23ef7967 Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Wed, 17 Jul 2024 16:41:12 -0300 Subject: [PATCH 154/167] naming --- .../consistency_tests/consistency_armodel.f90 | 102 +++++++++--------- 1 file changed, 51 insertions(+), 51 deletions(-) diff --git a/src/consistency/consistency_tests/consistency_armodel.f90 b/src/consistency/consistency_tests/consistency_armodel.f90 index ecb4d243b..f4036d4b3 100644 --- a/src/consistency/consistency_tests/consistency_armodel.f90 +++ b/src/consistency/consistency_tests/consistency_armodel.f90 @@ -28,7 +28,7 @@ module yaeos__consistency_armodel implicit none contains subroutine ar_consistency(& - eos, n, v, t, eq31, eq33, eq34, eq36, eq37 & + eos, n, V, T, eq31, eq33, eq34, eq36, eq37 & ) !! # ar_consistency !! \(A^r\) models consistency tests. @@ -85,7 +85,7 @@ subroutine ar_consistency(& !! class(ArModel), allocatable :: model !! real(pr) :: tc(4), pc(4), w(4) !! - !! real(pr) :: n(4), t, v + !! real(pr) :: n(4), T, V !! !! real(pr) :: eq31, eq33(size(n), size(n)), eq34(size(n)), eq36, eq37 !! @@ -94,13 +94,13 @@ subroutine ar_consistency(& !! pc = [45.99, 37.96, 39.23, 40.21] !! w = [0.0115478, 0.200164, 0.3624, 0.298] !! - !! t = 600_pr - !! v = 0.5_pr + !! T = 600_pr + !! V = 0.5_pr !! !! model = SoaveRedlichKwong(tc, pc, w) !! !! call ar_consistency(& - !! model, n, v, t, eq31=eq31, eq33=eq33, eq34=eq34, eq36=eq36, eq37=eq37 & + !! model, n, V, T, eq31=eq31, eq33=eq33, eq34=eq34, eq36=eq36, eq37=eq37 & !! ) !! ``` !! All `eqXX` variables should be close to zero. @@ -111,8 +111,8 @@ subroutine ar_consistency(& !! class(ArModel), intent(in) :: eos !! Equation of state real(pr), intent(in) :: n(:) !! Moles number vector - real(pr), intent(in) :: t !! Temperature [K] - real(pr), intent(in) :: v !! Volume [L] + real(pr), intent(in) :: T !! Temperature [K] + real(pr), intent(in) :: V !! Volume [L] real(pr), optional, intent(out) :: eq31 !! MM Eq. 31 ! TODO real(pr), optional, intent(out) :: eq32 real(pr), optional, intent(out) :: eq33(size(n), size(n)) !! MM Eq. 33 @@ -125,33 +125,33 @@ subroutine ar_consistency(& ! ======================================================================== ! Previous calculations ! ------------------------------------------------------------------------ - real(pr) :: Grp, Grv, Hrv, p, dpdn(size(n)), ntot, z - real(pr) :: lnphi(size(n)), lnphip(size(n)), dlnPhidP(size(n)) + real(pr) :: Grp, Grv, Hrv, P, dPdn(size(n)), ntot, z + real(pr) :: lnphi(size(n)), dlnPhidP(size(n)) real(pr) :: dlnPhidT(size(n)), dlnPhidn(size(n), size(n)) - call eos%pressure(n, v, t, p, dpdn=dpdn) + call eos%pressure(n, V, T, P, dPdn=dPdn) - call eos%gibbs_residual_vt(n, v, t, Grv) + call eos%gibbs_residual_vt(n, V, T, Grv) - call eos%enthalpy_residual_vt(n, v, t, Hr=Hrv) + call eos%enthalpy_residual_vt(n, V, T, Hr=Hrv) call eos%lnphi_vt(& - n, v, t, lnphip=lnphip, & + n, V, T, lnPhi=lnPhi, & dlnPhidP=dlnPhidP, dlnPhidT=dlnPhidT, dlnPhidn=dlnPhidn & ) ntot = sum(n) - lnphi(:) = lnphip(:) - log(p) + lnPhi(:) = lnPhi(:) - log(P) - z = p * v / ntot / R / t + z = P * V / ntot / R / T - Grp = Grv - ntot * R * t * log(z) + Grp = Grv - ntot * R * T * log(Z) ! ======================================================================== ! Equation 31 ! ------------------------------------------------------------------------ - if (present(eq31)) eq31 = sum(n(:) * lnphi(:)) - Grp / (R * t) + if (present(eq31)) eq31 = sum(n(:) * lnPhi(:)) - Grp / (R * T) ! ======================================================================== ! Equation 32 @@ -185,18 +185,18 @@ subroutine ar_consistency(& ! ======================================================================== ! Equation 36 ! ------------------------------------------------------------------------ - if (present(eq36)) eq36 = sum(n(:) * dlnPhidP(:)) - (z - 1) * ntot / p + if (present(eq36)) eq36 = sum(n(:) * dlnPhidP(:)) - (z - 1) * ntot / P ! ======================================================================== ! Equation 37 ! ------------------------------------------------------------------------ if (present(eq37)) then - eq37 = sum(n(:) * dlnPhidT(:)) + Hrv / (R * t**2) + eq37 = sum(n(:) * dlnPhidT(:)) + Hrv / (R * T**2) end if end subroutine ar_consistency subroutine numeric_ar_derivatives(& - eos, n, v, t, d_n, d_v, d_t, & + eos, n, V, T, d_n, d_v, d_t, & Ar, ArV, ArT, Arn, ArV2, ArT2, ArTV, ArVn, ArTn, Arn2 & ) !! # numeric_ar_derivatives @@ -215,7 +215,7 @@ subroutine numeric_ar_derivatives(& !! class(ArModel), allocatable :: model !! real(pr) :: tc(4), pc(4), w(4) !! - !! real(pr) :: n(4), t, v + !! real(pr) :: n(4), T, V !! !! real(pr) :: Ar_num, ArV_num, ArT_num, Arn_num(size(n)), ArV2_num, ArT2_num !! real(pr) :: ArTV_num, ArVn_num(size(n)), ArTn_num(size(n)) @@ -226,13 +226,13 @@ subroutine numeric_ar_derivatives(& !! pc = [45.99, 37.96, 39.23, 40.21] !! w = [0.0115478, 0.200164, 0.3624, 0.298] !! - !! t = 600_pr - !! v = 0.5_pr + !! T = 600_pr + !! V = 0.5_pr !! !! model = SoaveRedlichKwong(tc, pc, w) !! !! call numeric_ar_derivatives(& - !! model, n, v, t, d_n = 0.0001_pr, d_v = 0.0001_pr, d_t = 0.01_pr, & + !! model, n, V, T, d_n = 0.0001_pr, d_v = 0.0001_pr, d_t = 0.01_pr, & !! Ar=Ar_num, ArV=ArV_num, ArT=ArT_num, ArTV=ArTV_num, ArV2=ArV2_num, & !! ArT2=ArT2_num, Arn=Arn_num, ArVn=ArVn_num, ArTn=ArTn_num, & !! Arn2=Arn2_num & @@ -241,8 +241,8 @@ subroutine numeric_ar_derivatives(& !! class(ArModel), intent(in) :: eos !! Equation of state real(pr), intent(in) :: n(:) !! Moles number vector - real(pr), intent(in) :: t !! Temperature [K] - real(pr), intent(in) :: v !! Volume [L] + real(pr), intent(in) :: T !! Temperature [K] + real(pr), intent(in) :: V !! Volume [L] real(pr), intent(in) :: d_n !! Moles finite difference step real(pr), intent(in) :: d_t !! Temperature finite difference step real(pr), intent(in) :: d_v !! Volume finite difference step @@ -266,15 +266,15 @@ subroutine numeric_ar_derivatives(& ! Ar valuations ! ------------------------------------------------------------------------ ! on point valuation - call eos%residual_helmholtz(n, v, t, Ar=Ar) + call eos%residual_helmholtz(n, V, T, Ar=Ar) ! ======================================================================== ! Central numeric derivatives ! ------------------------------------------------------------------------ ! Volume if (present(ArV) .or. present(ArV2)) then - call eos%residual_helmholtz(n, v + d_v, t, Ar=Ar_aux1) - call eos%residual_helmholtz(n, v - d_v, t, Ar=Ar_aux2) + call eos%residual_helmholtz(n, V + d_v, T, Ar=Ar_aux1) + call eos%residual_helmholtz(n, V - d_v, T, Ar=Ar_aux2) if (present(ArV)) ArV = (Ar_aux1 - Ar_aux2) / (2 * d_v) if (present(ArV2)) ArV2 = (Ar_aux1 - 2 * Ar + Ar_aux2) / d_v**2 @@ -282,8 +282,8 @@ subroutine numeric_ar_derivatives(& ! Temperature if (present(ArT) .or. present(ArT2)) then - call eos%residual_helmholtz(n, v, t + d_t, Ar=Ar_aux1) - call eos%residual_helmholtz(n, v, t - d_t, Ar=Ar_aux2) + call eos%residual_helmholtz(n, V, T + d_t, Ar=Ar_aux1) + call eos%residual_helmholtz(n, V, T - d_t, Ar=Ar_aux2) if (present(ArT)) ArT = (Ar_aux1 - Ar_aux2) / (2 * d_t) if (present(ArT2)) ArT2 = (Ar_aux1 - 2 * Ar + Ar_aux2) / d_t**2 @@ -297,8 +297,8 @@ subroutine numeric_ar_derivatives(& dn_aux1 = 0.0_pr dn_aux1(i) = d_n - call eos%residual_helmholtz(n + dn_aux1, v, t, Ar=Ar_aux1) - call eos%residual_helmholtz(n - dn_aux1, v, t, Ar=Ar_aux2) + call eos%residual_helmholtz(n + dn_aux1, V, T, Ar=Ar_aux1) + call eos%residual_helmholtz(n - dn_aux1, V, T, Ar=Ar_aux2) Arn(i) = (Ar_aux1 - Ar_aux2) / (2 * d_n) end do @@ -309,10 +309,10 @@ subroutine numeric_ar_derivatives(& ! ------------------------------------------------------------------------ ! Temperature - Volume if (present(ArTV)) then - call eos%residual_helmholtz(n, v + d_v, t + d_t, Ar=Ar_aux1) - call eos%residual_helmholtz(n, v + d_v, t - d_t, Ar=Ar_aux2) - call eos%residual_helmholtz(n, v - d_v, t + d_t, Ar=Ar_aux3) - call eos%residual_helmholtz(n, v - d_v, t - d_t, Ar=Ar_aux4) + call eos%residual_helmholtz(n, V + d_v, T + d_t, Ar=Ar_aux1) + call eos%residual_helmholtz(n, V + d_v, T - d_t, Ar=Ar_aux2) + call eos%residual_helmholtz(n, V - d_v, T + d_t, Ar=Ar_aux3) + call eos%residual_helmholtz(n, V - d_v, T - d_t, Ar=Ar_aux4) ArTV = (Ar_aux1 - Ar_aux2 - Ar_aux3 + Ar_aux4) / (4 * d_t * d_v) end if @@ -325,10 +325,10 @@ subroutine numeric_ar_derivatives(& dn_aux1 = 0.0_pr dn_aux1(i) = d_n - call eos%residual_helmholtz(n + dn_aux1, v, t + d_t, Ar=Ar_aux1) - call eos%residual_helmholtz(n + dn_aux1, v, t - d_t, Ar=Ar_aux2) - call eos%residual_helmholtz(n - dn_aux1, v, t + d_t, Ar=Ar_aux3) - call eos%residual_helmholtz(n - dn_aux1, v, t - d_t, Ar=Ar_aux4) + call eos%residual_helmholtz(n + dn_aux1, V, T + d_t, Ar=Ar_aux1) + call eos%residual_helmholtz(n + dn_aux1, V, T - d_t, Ar=Ar_aux2) + call eos%residual_helmholtz(n - dn_aux1, V, T + d_t, Ar=Ar_aux3) + call eos%residual_helmholtz(n - dn_aux1, V, T - d_t, Ar=Ar_aux4) ArTn(i) = & (Ar_aux1 - Ar_aux2 - Ar_aux3 + Ar_aux4) / (4 * d_t * d_n) @@ -343,10 +343,10 @@ subroutine numeric_ar_derivatives(& dn_aux1 = 0.0_pr dn_aux1(i) = d_n - call eos%residual_helmholtz(n + dn_aux1, v + d_v, t, Ar=Ar_aux1) - call eos%residual_helmholtz(n + dn_aux1, v - d_v, t, Ar=Ar_aux2) - call eos%residual_helmholtz(n - dn_aux1, v + d_v, t, Ar=Ar_aux3) - call eos%residual_helmholtz(n - dn_aux1, v - d_v, t, Ar=Ar_aux4) + call eos%residual_helmholtz(n + dn_aux1, V + d_v, T, Ar=Ar_aux1) + call eos%residual_helmholtz(n + dn_aux1, V - d_v, T, Ar=Ar_aux2) + call eos%residual_helmholtz(n - dn_aux1, V + d_v, T, Ar=Ar_aux3) + call eos%residual_helmholtz(n - dn_aux1, V - d_v, T, Ar=Ar_aux4) ArVn(i) = & (Ar_aux1 - Ar_aux2 - Ar_aux3 + Ar_aux4) / (4 * d_v * d_n) @@ -363,8 +363,8 @@ subroutine numeric_ar_derivatives(& dn_aux1 = 0.0_pr dn_aux1(i) = d_n - call eos%residual_helmholtz(n + dn_aux1, v, t, Ar=Ar_aux1) - call eos%residual_helmholtz(n - dn_aux1, v, t, Ar=Ar_aux2) + call eos%residual_helmholtz(n + dn_aux1, V, T, Ar=Ar_aux1) + call eos%residual_helmholtz(n - dn_aux1, V, T, Ar=Ar_aux2) Arn2(i, j) = (Ar_aux1 - 2 * Ar + Ar_aux2) / d_n**2 else @@ -375,16 +375,16 @@ subroutine numeric_ar_derivatives(& dn_aux2(j) = d_n call eos%residual_helmholtz(& - n + dn_aux1 + dn_aux2, v, t, Ar=Ar_aux1 & + n + dn_aux1 + dn_aux2, V, T, Ar=Ar_aux1 & ) call eos%residual_helmholtz(& - n + dn_aux1 - dn_aux2, v, t, Ar=Ar_aux2 & + n + dn_aux1 - dn_aux2, V, T, Ar=Ar_aux2 & ) call eos%residual_helmholtz(& - n - dn_aux1 + dn_aux2, v, t, Ar=Ar_aux3 & + n - dn_aux1 + dn_aux2, V, T, Ar=Ar_aux3 & ) call eos%residual_helmholtz(& - n - dn_aux1 - dn_aux2, v, t, Ar=Ar_aux4 & + n - dn_aux1 - dn_aux2, V, T, Ar=Ar_aux4 & ) Arn2(i, j) = & From 0ef87bf9ebea96ecd84835077f03cf21497f5534 Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Wed, 17 Jul 2024 17:26:35 -0300 Subject: [PATCH 155/167] Now we truly calcualte lnPhi --- .../consistency_tests/consistency_armodel.f90 | 2 -- src/models/residual_helmholtz/ar_models.f90 | 10 ++++--- src/phase_equilibria/stability.f90 | 9 +++---- .../ar_models/cubics/test_pr76.f90 | 26 +++++++++---------- test/test_runner.f90 | 5 ++-- test/test_thermoprops.f90 | 15 +++++------ 6 files changed, 32 insertions(+), 35 deletions(-) diff --git a/src/consistency/consistency_tests/consistency_armodel.f90 b/src/consistency/consistency_tests/consistency_armodel.f90 index f4036d4b3..9775cfc36 100644 --- a/src/consistency/consistency_tests/consistency_armodel.f90 +++ b/src/consistency/consistency_tests/consistency_armodel.f90 @@ -142,8 +142,6 @@ subroutine ar_consistency(& ntot = sum(n) - lnPhi(:) = lnPhi(:) - log(P) - z = P * V / ntot / R / T Grp = Grv - ntot * R * T * log(Z) diff --git a/src/models/residual_helmholtz/ar_models.f90 b/src/models/residual_helmholtz/ar_models.f90 index dea3b85d3..c14de48d2 100644 --- a/src/models/residual_helmholtz/ar_models.f90 +++ b/src/models/residual_helmholtz/ar_models.f90 @@ -320,7 +320,6 @@ subroutine fugacity_vt(eos, & nc = size(n) RT = R*T - Z = V/(totn*RT) ! this is Z/P if (present(lnPhi) .and. .not. (& present(dlnPhidn) & @@ -328,7 +327,9 @@ subroutine fugacity_vt(eos, & .or. present(dlnPhidT) & .or. present(P) & )) then - call eos%residual_helmholtz(n, v, t, Arn=Arn) + call eos%residual_helmholtz(n, v, t, Arn=Arn, ArV=ArV) + P_in = totn*RT/V - ArV + Z = P_in*V/(totn*RT) lnPhi(:) = Arn(:)/RT - log(Z) return else if (present(dlnPhidn)) then @@ -343,15 +344,16 @@ subroutine fugacity_vt(eos, & ) end if - if (present(lnPhi)) lnPhi = Arn(:)/RT - log(Z) - P_in = totn*RT/V - ArV + + Z = P_in*V/(totn*RT) if (present(P)) P = P_in dPdV_in = -ArV2 - RT*totn/V**2 dPdT_in = -ArTV + totn*R/V dPdn_in = RT/V - ArVn + if (present(lnPhi)) lnPhi = Arn(:)/RT - log(Z) if (present(dlnPhidP)) then dlnPhidP(:) = -dPdn_in(:)/dPdV_in/RT - 1._pr/P_in end if diff --git a/src/phase_equilibria/stability.f90 b/src/phase_equilibria/stability.f90 index d2211b3ae..8b3d97e96 100644 --- a/src/phase_equilibria/stability.f90 +++ b/src/phase_equilibria/stability.f90 @@ -86,13 +86,11 @@ real(pr) function tm(model, z, w, P, T, d, dtpd) call model%lnphi_tp(& w, T=T, P=P, V=Vw, root_type="stable", lnPhi=lnPhi_w & ) - lnPhi_w = lnPhi_w - log(P) if (.not. present(d)) then call model%lnphi_tp(& z, T=T, P=P, V=Vz, root_type="stable", lnPhi=lnPhi_z& ) - lnphi_z = lnphi_z - log(P) di = log(z) + lnphi_z else di = d @@ -100,10 +98,10 @@ real(pr) function tm(model, z, w, P, T, d, dtpd) ! tpd = sum(w * (log(w) + lnphi_w - di)) - tm = 1 + sum(w * (log(w) + lnphi_w - di - 1)) + tm = 1 + sum(w * (log(w) + lnPhi_w - di - 1)) if (present(dtpd)) then - dtpd = log(w) + lnphi_w - di + dtpd = log(w) + lnPhi_w - di end if end function tm @@ -134,8 +132,7 @@ subroutine min_tpd(model, z, P, T, mintpd, w, all_minima) dx = 0.001_pr ! Calculate feed di - call model%lnphi_tp(z, T=T, P=P, V=V, root_type="stable", lnPhi=lnphi_z) - lnphi_z = lnphi_z - log(P) + call model%lnphi_tp(z, T=T, P=P, V=V, root_type="stable", lnPhi=lnPhi_z) di = log(z) + lnphi_z diff --git a/test/test_implementations/ar_models/cubics/test_pr76.f90 b/test/test_implementations/ar_models/cubics/test_pr76.f90 index a6eaa13ff..3181edc7f 100644 --- a/test/test_implementations/ar_models/cubics/test_pr76.f90 +++ b/test/test_implementations/ar_models/cubics/test_pr76.f90 @@ -96,11 +96,11 @@ subroutine test_pr76_cons_mixture(error) Ar=Ar_num, Arn2=Arn2_num) ! Calling individually just because coverage - call ar_consistency(model, n, v, t, eq31=eq31) - call ar_consistency(model, n, v, t, eq33=eq33) - call ar_consistency(model, n, v, t, eq34=eq34) - call ar_consistency(model, n, v, t, eq36=eq36) - call ar_consistency(model, n, v, t, eq37=eq37) + call ar_consistency(model, n, V, T, eq31=eq31) + call ar_consistency(model, n, V, T, eq33=eq33) + call ar_consistency(model, n, V, T, eq34=eq34) + call ar_consistency(model, n, V, T, eq36=eq36) + call ar_consistency(model, n, V, T, eq37=eq37) ! Numeric derivatives call check(error, rel_error(Ar, Ar_num) < 1e-6) @@ -115,11 +115,11 @@ subroutine test_pr76_cons_mixture(error) call check(error, maxval(rel_error(Arn2, Arn2_num)) < 1e-5) ! Consistency tests - call check(error, abs(eq31) <= 1e-15) - call check(error, maxval(abs(eq33)) < 1e-15) + call check(error, abs(eq31) <= 1e-14) + call check(error, maxval(abs(eq33)) < 1e-14) call check(error, maxval(abs(eq34)) < 1e-14) - call check(error, abs(eq36) <= 1e-15) - call check(error, abs(eq37) <= 1e-15) + call check(error, abs(eq36) <= 1e-14) + call check(error, abs(eq37) <= 1e-14) ! ======================================================================== ! Model with kij and lij @@ -390,12 +390,12 @@ subroutine test_pr76_fugacities(error) call check(error, abs(P * v_v / R / T - 0.9059) < 1e-4) ! Elliot vapor fugacities - call check(error, abs(exp(lnPhi_v(1) - log(P)) - 0.9162) < 1e-4) - call check(error, abs(exp(lnPhi_v(2) - log(P)) - 0.8473) < 1e-4) + call check(error, abs(exp(lnPhi_v(1)) - 0.9162) < 1e-4) + call check(error, abs(exp(lnPhi_v(2)) - 0.8473) < 1e-4) ! Elliot liquid fugacities - call check(error, abs(exp(lnPhi_l(1) - log(P)) - 1.791) < 1e-3) - call check(error, abs(exp(lnPhi_l(2) - log(P)) - 0.0937) < 1e-4) + call check(error, abs(exp(lnPhi_l(1)) - 1.791) < 1e-3) + call check(error, abs(exp(lnPhi_l(2)) - 0.0937) < 1e-4) end subroutine test_pr76_fugacities subroutine test_pr76_txy_methanol_benzene(error) diff --git a/test/test_runner.f90 b/test/test_runner.f90 index 3d49bc456..50efbda3f 100644 --- a/test/test_runner.f90 +++ b/test/test_runner.f90 @@ -32,7 +32,7 @@ program tester ! ------------------------------------------------------------------------- use test_fitting, only: suite_fitting => collect_suite - use stdlib_ansi, only: fg_color_green, fg_color_red, operator(//), style_reset + use stdlib_ansi, only: style_bold, fg_color_green, fg_color_red, operator(//), style_reset implicit none @@ -74,7 +74,8 @@ program tester do is = 1, size(testsuites) - write (error_unit, fmt) "Testing:", testsuites(is)%name + write (error_unit, fmt) "Testing:", & + style_bold // testsuites(is)%name // style_reset call run_testsuite(testsuites(is)%collect, error_unit, stat) end do diff --git a/test/test_thermoprops.f90 b/test/test_thermoprops.f90 index ee1671006..4c13895b5 100644 --- a/test/test_thermoprops.f90 +++ b/test/test_thermoprops.f90 @@ -33,7 +33,7 @@ subroutine test_fugacity_VT(error) real(pr) :: lnfug_val(2), dlnphidp_val(2), dlnphidt_val(2) - lnfug_val = [2.0758887796938881, -2.2852154042663555] + lnfug_val = [2.0785927055052529, -2.2825114783106386] dlnphidp_val = [-0.99328668293856137, -0.9965756859512391] dlnphidt_val = [3.0263825169536504E-002, 7.6204959316774373E-002] @@ -46,7 +46,6 @@ subroutine test_fugacity_VT(error) call eos%lnphi_vt(& z, V, T, P, lnfug, dlnPhidP, dlnphidT, dlnPhidn & ) - call check( & error, maxval(abs(lnfug - lnfug_val)) < 1e-5 & ) @@ -86,7 +85,7 @@ subroutine test_fugacity_TP(error) t = 150 root_type = "liquid" - print *, "FASF" + call eos%lnphi_tp(& z, T, P, V, root_type, lnfug, dlnPhidP, dlnphidT, dlnPhidn& @@ -225,17 +224,17 @@ subroutine test_gibss_residual_vt(error) Zcomp = p*v/(ntot*R*t) ! yaeos residual gibbs - call eos%gibbs_residual_vt(z, v, t, Gr, GrT=GrT, GrV=GrV, Grn=Grn) + call eos%gibbs_residual_vt(z, V, T, Gr, GrT=GrT, GrV=GrV, Grn=Grn) ! test against fugacity coefficient ! (Michelsen and Mollerup chapter 2 eq 31) - call eos%lnphi_vt(z, v, t, lnPhi=lnfug) + call eos%lnphi_vt(z, V, T, lnPhi=lnfug) - lnfugcoeffs = lnfug - log(p) ! lnfug is = ln(phi * p) + lnfugcoeffs = lnfug - Gr_tp = Gr - ntot*R*t*log(Zcomp) ! M and M chapter 1 Table 6 + Gr_tp = Gr - ntot*R*T*log(Zcomp) ! M and M chapter 1 Table 6 - Gr_fromphi = sum(z * lnfugcoeffs) * R * t + Gr_fromphi = sum(z * lnfugcoeffs) * R * T call check(& error, rel_error(Gr_tp, Gr_fromphi) < 1e-14 & From 6952ff50ab4a679e2e72802ad466d7c381dff80b Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Wed, 17 Jul 2024 17:49:31 -0300 Subject: [PATCH 156/167] starting to test more --- python/docs/tutorials/tutorial.ipynb | 25 +++++++++---------- python/setup.py | 2 -- python/tests/test_dummy.py | 37 ++++++++++++++++++++++++++-- python/yaeos/__init__.py | 19 ++++++++++---- python/yaeos/core.py | 6 ++--- 5 files changed, 64 insertions(+), 25 deletions(-) diff --git a/python/docs/tutorials/tutorial.ipynb b/python/docs/tutorials/tutorial.ipynb index 685e97ff7..f9945f998 100644 --- a/python/docs/tutorials/tutorial.ipynb +++ b/python/docs/tutorials/tutorial.ipynb @@ -14,21 +14,21 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 2, "id": "85ff95ba-7a1a-4ca3-bec1-3c5bb50325ea", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "{'ln_phi': array([2.3118468 , 2.33292475]),\n", + "{'ln_phi': array([-0.18662712, -0.16554916]),\n", " 'dt': None,\n", " 'dp': None,\n", " 'dn': array([[-0.00186921, 0.00934604],\n", " [ 0.00934604, -0.04673019]])}" ] }, - "execution_count": 12, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -58,7 +58,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 9, "id": "cf0a8e95", "metadata": {}, "outputs": [], @@ -75,7 +75,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 7, "id": "5e06f2a9", "metadata": {}, "outputs": [ @@ -83,8 +83,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 500 ms, sys: 0 ns, total: 500 ms\n", - "Wall time: 500 ms\n" + "CPU times: user 530 ms, sys: 0 ns, total: 530 ms\n", + "Wall time: 539 ms\n" ] } ], @@ -101,13 +101,12 @@ "\n", "for T in ts:\n", " for P in ps:\n", - " flash = model.flash_tp(n, T, P)\n", + " flash = model.flash_pt(n, P, T)\n", " x = flash[\"x\"]\n", " y = flash[\"y\"]\n", " P = flash[\"P\"]\n", " T = flash[\"T\"]\n", " beta = flash[\"beta\"]\n", - " # x, y, P, T, Vx, Vy, beta = yaeos.yaeos_c.flash(id=model.id, z=n, p=P, t=T)\n", " t.append(T)\n", " p.append(P)\n", " betas.append(beta)" @@ -115,23 +114,23 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 8, "id": "7c42b4fe", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 19, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAigAAAGdCAYAAAA44ojeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOy9d6AkSXXl/YvIzPJVr5637X33dE+PZ2A8wzgEg5G0rKRduRXSOu1qpdXCSsgjhKTlkxeLJBa0QqwsEkgCGawAMcB4zNie7mnfz9tymRnfH1kmqyozogYeTc9MHXjT71XdijgZFRlxM+LEvUIppeijjz766KOPPvq4hCC/2QT66KOPPvroo48+OtF3UProo48++uijj0sOfQeljz766KOPPvq45NB3UProo48++uijj0sOfQeljz766KOPPvq45NB3UProo48++uijj0sOfQeljz766KOPPvq45NB3UProo48++uijj0sO9jebwNcC3/c5c+YM+XweIcQ3m04fffTRRx999NEDlFKsrq4yNTWFlPo1kuelg3LmzBm2bNnyzabRRx999NFHH318DTh58iQzMzNam+elg5LP54HgAguFwjeZTR999NFHH3300QtWVlbYsmVLcx7X4XnpoDS2dQqFQt9B6aOPPvroo4/nGXqRZ/RFsn300UcfffTRxyWHvoPSRx999NFHH31ccug7KH300UcfffTRxyWHvoPSRx999NFHH31ccug7KH300UcfffTRxyWHvoPSRx999NFHH31ccug7KH300UcfffTRxyWHvoPSRx999NFHH31ccnheBmrr45uH9ZUNHvjHRyivV9h6cIa9V+3sCrhT8z0+N3uM+co6E+kC14xsxxLtvrBSiocWTnFibZ68k+KlY7tI205XfU+vzPLo0lkS0uIlo9sZSma7bM6XVvnC3Ak85XN0aIZtuaEum7Vahc9eOMaGW2VnfoTDg1ORvP/lwjPMV9YZT+e5bjSa94MLpzixtkDeSfKyHnhfN7Kd4VQ37wulVT5f53350DTbc8NfM+/PzT7DXHmdsVSO60Z3YMvo9j5e5/3SsZ1k7ERXfcdW5/jS4hksIbludDsjqVyXzWx5jc/PHsdTPocHp9mR7+a97lb57IWnWXer7MgNc2Rwuou36/vcN/sMs+VVRlP5WN6PLJ7i+No8WTvJ9WM7ydrJrvqe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QsMhDoogCIIgCA2HOCiCIAiCIDQcwRXnGpBi8tvh4eFjrEQQBEEQhMlSvG9PJon9lHRQRkZGAOjv7z/GSgRBEARBeL2MjIzQ0tLiazMla/HYts2ePXtoampCKa86vP93DA8P09/fz65du47LOj/Sv6nP8d5H6d/U53jv4/HeP3jz+qi1ZmRkhOnTp2MY/lEmU3IGxTAM+vr63tRtNDc3H7cHHkj/jgeO9z5K/6Y+x3sfj/f+wZvTx6CZkyISJCsIgiAIQsMhDoogCIIgCA2HOCg1RKNRvvCFLxCNRo+1lDcF6d/U53jvo/Rv6nO89/F47x80Rh+nZJCsIAiCIAjHNzKDIgiCIAhCwyEOiiAIgiAIDYc4KIIgCIIgNBzioAiCIAiC0HCcEA7Krbfeypo1a2hqaqK7u5vLLruM7du3V9lMTEywefNmOjo6SKVSXHnllezfv7/KZufOnVx88cUkEgm6u7v5zGc+Qz6ffyu74kpQ/wYGBrjhhhtYtGgR8XicmTNn8olPfIKhoaGqdpRSdT+33377W92dOiaz/84888w67dddd12VTaPuPwju4yuvvOK6f5RS3HHHHSW7Rt2H3/zmN1mxYkUp6dOGDRu47777Sp9P5fMP/Ps31c+/IkH7cKqfg379m+rnnxt/+7d/i1KKT37yk6X3Gu481CcA559/vr7tttv0s88+q7du3aovuugiPXPmTD06Olqyue6663R/f79+4IEH9OOPP67Xr1+vTzvttNLn+XxeL1u2TJ9zzjn6qaee0vfee6/u7OzUt9xyy7HoUhVB/du2bZu+4oor9D333KNffPFF/cADD+gFCxboK6+8sqodQN9222167969pZ90On0sulTFZPbfGWecoT/ykY9UaR8aGip93sj7T+vgPubz+aq+7d27V3/pS1/SqVRKj4yMlNpp1H14zz336J///Of6+eef19u3b9ef+9zndDgc1s8++6zWemqff1r792+qn39FgvbhVD8H/fo31c+/Wh577DE9e/ZsvWLFCn3jjTeW3m+08/CEcFBqOXDggAb0li1btNZaDw4O6nA4rO+4446SzR/+8AcN6IcfflhrrfW9996rDcPQ+/btK9l885vf1M3NzTqTyby1HQigtn9u/PjHP9aRSETncrnSe4C+66673gKFbwy3/p1xxhlVJ1otU2n/aT25fbhq1Sp97bXX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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAigAAAGdCAYAAAA44ojeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOy9d6AkSXXl/YvIzPJVr5637X33dE+PZ2A8wzgEg5G0rKRduRXSOu1qpdXCSsgjhKTlkxeLJBa0QqwsEkgCGawAMcB4zNie7mnfz9tymRnfH1kmqyozogYeTc9MHXjT71XdijgZFRlxM+LEvUIppeijjz766KOPPvq4hCC/2QT66KOPPvroo48+OtF3UProo48++uijj0sOfQeljz766KOPPvq45NB3UProo48++uijj0sOfQeljz766KOPPvq45NB3UProo48++uijj0sOfQeljz766KOPPvq45NB3UProo48++uijj0sO9jebwNcC3/c5c+YM+XweIcQ3m04fffTRRx999NEDlFKsrq4yNTWFlPo1kuelg3LmzBm2bNnyzabRRx999NFHH318DTh58iQzMzNam+elg5LP54HgAguFwjeZTR999NFHH3300QtWVlbYsmVLcx7X4XnpoDS2dQqFQt9B6aOPPvroo4/nGXqRZ/RFsn300UcfffTRxyWHvoPSRx999NFHH31ccug7KH300UcfffTRxyWHvoPSRx999NFHH31ccug7KH300UcfffTRxyWHvoPSRx999NFHH31ccug7KH300UcfffTRxyWHvoPSRx999NFHH31ccnheBmrr45uH9ZUNHvjHRyivV9h6cIa9V+3sCrhT8z0+N3uM+co6E+kC14xsxxLtvrBSiocWTnFibZ68k+KlY7tI205XfU+vzPLo0lkS0uIlo9sZSma7bM6XVvnC3Ak85XN0aIZtuaEum7Vahc9eOMaGW2VnfoTDg1ORvP/lwjPMV9YZT+e5bjSa94MLpzixtkDeSfKyHnhfN7Kd4VQ37wulVT5f53350DTbc8NfM+/PzT7DXHmdsVSO60Z3YMvo9j5e5/3SsZ1k7ERXfcdW5/jS4hksIbludDsjqVyXzWx5jc/PHsdTPocHp9mR7+a97lb57IWnWXer7MgNc2Rwuou36/vcN/sMs+VVRlP5WN6PLJ7i+No8WTvJ9WM7ydrJrvqeWZ3jS0unsYTk2pEdkbznymt8fu4ZPOVzWXGaHfmRLpsNt8K/zB5j3a2wLTvMkcGZCN4en597htnKKqPJPNeO7MCWVhfvR5dOcWJ9joyV5PrRXWQieJ9Ym+NLy6ewhODq4Z2MJLuja85X1vji/DE85XNgYJodudEum5Jb5b75p1hzy2zNjHC4uCWS9wOLx5gtrzCczHP10K5I3l9dOcmzGxdIW0muGdpDxk511XdqY5avrpzAEpLLi7sZTnYHzFyqrvLo8hPUfI89+a1syUx02VS8Co8sf4UNr8Rkapw9ue7xxFc+X1l5jMXqIgPOAAcL+7Fl+9SllOKZ9eOcKZ0laSW5bOAQaaub9/nyeZ5aO4ZEsr+wj8FEsZv37DIPfexL1Koue6/aybaD/bQq3yw8ZwflU5/6FL/yK7/C/fffz9mzZ/nABz7Aa17zmub7Sil++qd/mt/7vd9jaWmJl73sZfzu7/4ue/bsadosLCzwn//zf+ZDH/oQUkpe//rX8+u//uvkct2DSh+XBjzP4//+zJ/x5+/4EJVStfn6rsu38WP/5z+y++gOAP762Yf4lS//A4vVjabNWCrPTxy+h9unDgBw/9yzvOXBD/LM2nzTJmsn+KF9N/H9e16KEIJT60u86f6/5gtzJ5o2tpC8fvsV/MSRO0laNmu1Cj/70N/xN6e+hK9U0+7G8V287ap7GU3l8JXit776Sf7gyc9S9tymzd7CGL901b0cGpys836Etz/6j8xX1tt4/+Tld3HndMD7gfmT/MT9H+RYF+8b+YG9Ae8zG8v8jy/+FZ/v4P26bUf5icvvJGU5rLtVfvbBv+NDpx5t4/2ysZ287ap7GU/n8ZXidx77FL/3xGcpe7WmzZ7CKG+76l4OD04B8KGTj/K2R/6hjfdoKsdPXn4Xd00fBOChhVP8xP0f5OnVuaZNxkrwg/tv4I17X4YQgrMby7zpi3/NfXPHmzaWkLxm6xHecvRuUpbDhlvl5x/6MH998pE23i8d3cHbrr6X8XQBXyne+fin+P0nPkMpxHt3fpRfvOpeDg9OA/C3p77E2x75SBvvkWSO/3nkLu6eOQTAwwun+MkH/5qnV2ebNmnL4Qf23sgP7r0RIQTnSsv8xAN/xefmnmnj/eotR/iJw/eQthOU3CpvffTDfPDkw3jKb9pdN7KDX7zyNUykB1BK8XtPforff/Kf23jvyo3yc1e8hiODQc6Qvz/zJd7+pb9jrrLWtBlOZvnxQ/dw9/RhAL60dIqfeugDPL12oY339+66kR/YczNSSC6UV/jph/+C++afbtpIBPdMH+XNh15F2k5Q9mr88lc+xN+cfrCN99VDO/nZI69nIl1EKcV7j32S/3PsE5S81n25PTvKWw6/nsPFrQB87NyjvOOxDzJfXW3aDCVy/PC+b+HOyaMAPL5yil/8yp/wzPq5pk1KOrxh2y18z47bkUIyV1nmV776//ji4uNtvF8+fiX/Ze+3kraTVLwqv3fsL/in859r4314YA//de93MZYaQinFh878PR84/beU/UrTZjI1zg/t+h725ncB8IWF+/nD4+9nqbbUtCnYeb5j27fzspHrATi+foJ3Pf1/OFk61bRJSId7Ju/ktdOvRgrJUnWZdx17N48ufznEW/KS4Wv53h3fRcpKUS1X+Z0feQ8f+YOP4blei/dNB/jx9/wnJraP0cfFhVAqNNL0gA9/+MN85jOf4aqrruJ1r3tdl4Py9re/nbe97W28973vZceOHbzlLW/h0Ucf5Stf+QqpVODR3n333Zw9e5b//b//N7Vaje/93u/lmmuu4Y//+I974rCyssLAwADLy8v9UPcXCb/1w3/AX//2R6Cjt0hLkkwn+K3P/xIPZGb5iQf/quuzjeeh37j2DYylCnzHp96N5/v4nYUB/+nALbxh+9W85mPvYr6yhtfRPSWCmyZ281vXfTvf8+n/ywMLJ9smSwBLCKYzRf7yth/gN7/ySd779H1d9UgEScvmz2/9d3x56Sw//sVu3g3uv/WSb2cyPcAbPvlu3Bje/3H/TXzXrmt47cd+j9nyWtvA3KjvhvFd/O71/4rv/fQf8cW5Z7vKsYRgMj3AB257I7/7+Kd495Of6+YtBElp82e3fj+PLZ/nx77wgUjeAL9x3bexNTvIv/rEu3F9L5L3D+27ge/e/RJe+7F3MVtejWzv68d28M6X/mv+3affxxfmTkTwlkyk8/zlbW/k9574NH/w5GcjeSekxZ/c/O94anWWH/3CX8Ty/v+u/VZ25IZ5wyd/n1oM73+35wa+b89L+bZP/G/Ol1cj2/uake286/rv4gc/9z4+P/tMJO+xVJ4/v+UHee/Tn+X3n/znbt4IHGnxvht/gBPr8/zY/X8Sy/vtV34bu/OjfNen30XVdyN5f8/OG/j+PTfxHZ/+bc6XVyJ5Xzm8nd++5rv5kfv/L/fNPR3JeySZ530v+4/8yYnP8u6nPx7J25YWf/CSH+JsaYE3P/xHsbx/5vAb2Juf4Ae/8BuxvL996018z/bb+aEvvoPz5UV8unlfNrCDXzn67/mFr7yLBxa/iqKzL0kGE3l+/Yr/wT+c/zh/efpvuuoRCCxh8bOH/geL1QV+7cnfjuX9gzu/nx25bfz0l95K1a921Qdw5/jtvH7mXt7ypZ9ntjIXwVuyO7eTNx/4MX7mNb/K5//uAZTfwduWFEcHeOeDv8Lg2EAsnz56w3OZv5+zg9L2YSHaHBSlFFNTU/zoj/4oP/ZjPwbA8vIy4+PjvOc97+ENb3gDX/3qVzl48CBf+MIXuPrqqwH4yEc+wj333MOpU6eYmpra1Avs4+vHmafP8d17/3OXc9KAtCQ3vOEl/P131NpWTsIQwExmkMn0IJ+fPR45CEKw2vCvd1zLHx37fNdkGcYPH7iF3/jqJ2LfFwjeuPelvOuJz8TRxhKCV0zt5/OzJ1jQ8J7OFNmWG+JfZp/pcoZaZUn+7a5ree/T98XaAPyXAzfz61/9pJb3D+x9Kb9n4H3bxD4eXDjJXGgFohOT6QJ7C2N85sLTsW0pheB7dr+E9zz5udjvBMztLRF8397refeTet43j+/l0aXTzJbXYqxgPFXgYHGcT114MrYtJYLv3XM973nqX7S8/9O+W/itx/W8v2f39fzh05+NLccSghtGd/P46jnOl1diyxpN5rhscJp/vvB4fHsj+N7dL+MPj31ay/vf730573zyn7S8v3P7S/l/Jz6j5X3t0G5OlM5zvrwUW9ZQIscVQ1v4zNxXuhymBgSC79p+E3/y7McjHYEGvn/nHbz/2b/V8n711C18bPYfupyFlo3kUGEfc9XzzFbmIm0gWEnZl9/L/YsPxpYF8Kqpe/ibMx/W8n7V+Vfye6+Jf0CWluRf/fi9fN9bvyPWpo/e8E1zUI4dO8auXbt48MEHOXr0aNPu5ptv5ujRo/z6r/867373u/nRH/1RFhcXm++7rksqleLP/uzPeO1rX9tVT6VSoVJpLQM2siH2HZSLg//7c3/GH/38n+N78YNA9doCc2/W79UqBUrpE0QJBCkrwbpbjbUJnnxznC+vap2BYiLNaq2sdXQEsX7Xc4JEkLETrLmVWJsG7wsRKxVhFBNpVmpl7bX1ytuUjksiyDlJVmrlWBtLCMZS+R54p1itlbUTb2+8FVLo7SSCfMLMezSVj1wZCmPASbLuVoy8ESbmCimEdiKUCAaSSVZqpXjeCMbSeWYr3StDYRTsJCXPxFshpZl3wlJG3oOJJCtuvEMsEUylcyzVlrQOw4Dj4LOurQ8UtrG9g/FCz1uStTOsuvEOsUQgfiXJuQ/O4rnxvAfHB/jTs79v5NSHHs/FQdnUUzznzgV7l+Pj422vj4+PN987d+4cY2Pte3m2bTM0NNS06cTb3vY2BgYGmj9btvRFSxcTi+eWEFI/1dXym9OVLCHY0DgnAJ7yWa1VtBM4BEJNYZiiN8M5gWAlolfeuskSAmGsvIi81zVOFYCnVO+8DRlKe+Vtsgt4m9q7N97rbrUH3r0xN9kF/cTQ3qi6Yx0/WQKse5vZ3ibekg0v3hkE8FFseCWtcwJQ9stIoR8vzHluA5h4CyEo9cB77fy61jkBWJ6NXz3r4xuD58Ux4ze/+c0sLy83f06ePPnNpvSiwvDUUNe+bCcSy/qbu1d4yicXcdohDEsICk7KODjn7ZTRiTE5Ag2YrDzlk3PMvAeclLHOvHMxeStje0shGEj00N498O514jE5lr5S5Hvh3Us/cVJGJ8bEp1lnD7xzEadiOssoOGljWTn7YvL2ydppYxlZO4M0TCtpmcY3OF+99hRTXb7yyVhm3oXJHNLWlzU4UeyJUx+bh011UCYmgmNk58+fb3v9/PnzzfcmJia4cOFC2/uu67KwsNC06UQymaRQKLT99HHx8PLvulG7vaMkXLlrJynpxD6yKQVDyQz7CuPox1TB7VP7tXw8pXjN1sPGyfCVMwe1y99KwdXDW0lbet4DTpoDAxMG3vCKHni/eusRLSeAe6b1vAGuGJohY3UfEw6j4KQ4VJw0lKSap5Ti4CvFvVsuN7b3XT3wvnxwJvKYcBh5O9U8pRTLCcUdUwf1Nkrx6h54v2LyoPFJ/LLitNGRy9opDtdP+8RyQvGKycuMNq+cPmpsy9vGD2FaI9lfmCZvcCwyVpLLBrZr+7eP4paxo9pyfBS3jV5jXEG5dugK7ftKwdb0FnJW99H8MJIyyd78Hq2NQvGSoWu1Nj6K2//tzfi6FRQJL/tufTl9bD421UHZsWMHExMTfPSjH22+trKywn333cf11wdHwq6//nqWlpa4//77mzYf+9jH8H2f6667bjPp9LFJOFcoUXp9d2wRCJwTlZace12Gqu+CoGuga/y9UauyWq0EOoSYwdBXivlK/H5xA6fWl40258ursfUoFTyjLVVLVD0PFcGp8XfJrbFcLRt4w1x5ve1znWUpBafXF7vf7MCFHq5/uVYK2luDsltjuVrS6j580ApWGzjVA+9eylmplaj6Na1NxXdZruqX5QEu1OvTt/eSsZy5yqrRZqVaNrZ31XdZ6YV3abXJsRNN3htLxnLmq2vGLZyVaomKob2rvstyraTt30rBbF0grON9trSIrzQ2wEJ1lThfoPG51VqFiq/fwnP9GusaTUwDizVz313et0jyNjt64cYCa0yiXqtvxz42H89ZJLu2tsZTTz0FwBVXXME73vEObr31VoaGhti6dStvf/vb+aVf+qW2Y8aPPPJI1zHj8+fP8853vrN5zPjqq6/uHzO+RPH/ffUj/PEzn8H58znSf7qA3GiNLrUDadZ/eJzqVIqa1wr6FF5Vb/SwYBCTNKbLKBspJFJIan4rDkEnBDCYyMSevGkgYyUoeW5zOTmqvtaIFM+pFxshBI6w2iaxhl3TBsFgMh170qmBtOVQ8aKPe349CI+9jZIlkJA2FcPkO5jI9MDbjj2m+tygMOzKIBEkLKsttk13e8Ng0sw7Zdm4fs3w3G/m1CvvpG1T9qrN76OTNwSrjUs1/eSbkhauco0rZFYPItnARiHo7t+K4L7MWpKyX9HyHkmmWfPWEPhtZTXK8RFkLIktqig8pFBd9XlKIlEkrPgxoFdIBAmZaIu1EoW8nWO1vMbK75TY+IsqhHyjxEttBt6UJjOe5veviT/23EdveC7z93MO1PbFL36RW2+9tfn3f/tv/w2A7/7u7+Y973kPP/7jP876+jpvfOMbWVpa4oYbbuAjH/lI0zkBeN/73sd/+k//iZe//OXNQG2/8Ru/8Vyp9HGRUPZqCCEof+sw5VcP4nyphCj7eFsSeFuCZW/VMZaYtnECm04jgUTg+qapAqoaB6aBmu8hm0Ol6uDUOZNE2XTaxfO2kLjKJ+zMdNan6pxMcH0fKYRxa+K5Iqo0KRq8TZx64K2+MbyjIEV3P+laAaO39vZ8DylkD7qIrx8Bb49Gf4jrlz31E+Vj9fj99QZRX0mMui8lrjLzdlV9NZLgQaRxEEeFbHzlIaTEVwpPRdtslgxciAZvPVzfAxsKP5wm9/0pqg+5UAN7n4U9GWw01OorUSsLq3z49z/GR9/3KdYW15nZN8W3/OAreNlrr8WyLF01fTxHfF3HjL9Z6K+gXFz82Yn7eNuXP6S1Scski2X9QKAU2MIxDr4T6QJnS/GKeYlgT2GUJ1dmY5/WBbA1O8zxtQVtXRnbYcM1L90mpGV0iqYyA5zZiN96kgj2Dozy5MoFA+9BThi2VNKW0xbxNA7JHlZHZjJF7ZaCRLBnYIwnl/W8t2SLnNzQ805ZdtuqRzQUKasX3oOc3liMncoavJ8ytPdMpsjpkp53UtpUlam9FWnbaYv8G4Ut2SFObyzoeRfGOLZ2TrsaNZ0ucq5s4m3hYuadc5y2SLRR2J4d5Expzsj75MYZLe+p1AAr7mzs+wCOsLCkebssJZPG1ZGJ1BjnyxdiGQkEM+lpTpVOa7VIW9LT/If0D/GjN/8UixeWmwcHpCXxPZ/rX301P/VnP4rt9DPI6PBNO2bcxwsTt9dFfbr96SPFGbI60aYKQrDvLejDRUsEN0/ohW8+itdsu1wvgAXunNpvPAtwdHDGKH4cTmbZPzCutZEIbu2B9+u2mnnfMXXAyPvI4BQFR38aZCiRYX/RzPu2ib3a59Veed8+qW9vpeBQcdrIu5jIcLA4qX2IFghePrnPyPu1W/RiUwXcOr7PeNrlwMAkRUcvNi04aQ4O6MW9Arht4oCR96tmrjRuld04ul/PW8Ge/BRFJxvflgpydpr9+S3xq551vdZNo4eNvG8fv9YoTL+yeDiIX6IZT7ZmZijY+skrLdPsyu3U2gBcM3i1IeKK4sbRlxqF0vtye/mZ1/4yS7MrbacaGwcIPvc39/P+X/yAkU8fvaPvoPRhxBfmnsHzGtsb7e81/n5iZZ41t9oUy3XaKGC+vMGJtYX6EnCHTf3HQ/HQ/ClM+MTZJ7s4NOuq/33f7AnjQvGTK7Pa4GoAC5V140qMj+JBA28BfOzck7S2ir523k+tzmmDlAEsVDc4vmrmff/8s00hbbje8O8fO/uE0Wn64tyzTYFkXD85tmLmvVQt8czqQqxwWalATH3/3LPacgTwiXNm3g8snDROTifW5ljWBFeDQAD8zFp85FMI2vSBUL6jKAjgU+cfA6XvJw8vPouvlPaeO7E2x1J1I74tgbVamePrs111hW18BQ8uHOvi0PYZJfjc3FeawRijeAvgsdVncBVdNuG/T5fmWHX14uWSX+L0xhmtDcBXVx4z2jy49IjR5kufeowTXzkVe6JR+Yq/+q0PU6v2xbSbhf4WTx9G/NKX/pY/Pf4FXOUhZUtI15osBL4v8fyWAJaQTQNKiboMr4XOEyaWkCiUUceQt1Os1CrNT0cJ9pLSxlNqE/fo42ELGThYhroKTqo+QcfzTkgbhX/ReANtdUWpAApOECVWB0dYKFTbnn9nH2i81hvi+5ItLKSAmkFfUHBSrLom3hIhTP1kc0SytpBIIYy8B5xknXd8P2nwDve57vZWWBJ0bQk0RbJxNrawSEhFLbTN1c1JMJhIsOFv0Cm4bTg6AEkJCcvHUx6SjvGEQEhrCZ+0ZdoKNMMSFhLZxjsKGSvDhqcXU6+/u8rG/6kYA7q965H/xY7Ltj5nri8WfENFsn28GNHU7eP7nS5FlNgU2kV08aN2lBvS8/wVsm73s0Xo34vjfys2j/fFYx3N+2v9TlqTmq4PPJcrM/SlHhqqV94XE6KnL1i0/Rvdv7sR79f38p3E2ygavHu9v6MEt/X+LVSznzQE7PQwVnyz0Ws/ERe7Q72A0d/i6cOIa4a3dzxditBPgMlMpyfcbWPXI3vq4CmfAwPRAfvCODw4FbEW06pPAJcNThpXISZSBeOQKAny4+jgKZ8DxV54T24K7/FU3qibEAQ6FB085XOoOGlgHXAytdPBgU7e3X1gJJnrifdwMtvxSns5rvI5OKDnJIBDxc5+0m1zoGBu7+FEzhhtVSAYTea1Nq7yOdCDTqVby9LdBvsLU8YVu6KT7eDdXY4ARpMFrY2nfPbmZ7Q2Atib70xD0m23I7OlI5hbt03GyhujxAIMJQa173vKY0d2m7GcndntRpvdN+wwrp4URvLM7DXfT330hr6D0ocRVwxuCx5yNE992zMjxsimg8ksM1n9gCIRXFaMH8Ab20o3jO80CN/gqmFzzqbtuUFjZNPBZIatPfA+Yoh+CnDj2C4j7yuGtgRDtcZwW3aInK1v72Iiw5acnrdAcGRwWmsDcOPYbuND/5XDM0YnZntumLwhJcCAkza2tyCISmtqyxsMvBVwZHBGK9oEmMkOkzc41zk7xZZsdEDDRmUCuLxoSKoJvHRUL7gGODQwY3T2ZjLD5HXiXgUZK81MesRY32UDO7TvK+Cqwf2Rmpgwdua2GUWyY8lRsnZOa5OUaSZT5ocCU7RZgMsG9FGJAfZevQtp6afM8a0j/VM8m4i+BqUPI9537D5+8ZG/a8uK2ljOFwJ8HxIk2agfHw2/F/5XARYSzzDVjSULXCivQOjz0Br0pBDsyo3y9Oqc/vhotshJQyTRlLQo9xBzwkZgCok1kS5wznA8eld+xMh7OlPsOj7b2ZZJYVPFvEfvCEnN8JQ92cOx7t098J7KDHBac8waICEsapvEezpT4GxpWXvsdVdhlGOr+uPok+kBzpSW2tcZOtrbERYu+v4NwbHeqnIj32tgJjvI2ZL+ePSu/CjPrMUfjwaYTBW4UFmKfR+CdnTx2nQe3felImsHvHXYkhngfFl/PHpHbpRTpXMo2oMjhusbSw2wXJvHCmUrbhtPFFhYJO0SVl3XE8XbAzLSMR7/HkuOMluZjeUtEEylJzlTOqsVS6c+keX4m/WiXMux+IsLf0B2QB+m/8WM/jHjPjYVx1bnsISF5wv8kEJfKfC84LWSX6O1X07kvyCMzoktJBfKa6jQE1bnE5mv4GxpxXh89FxptSkCjUMvzglgdE5sIZshzOPgo3rifb60iiXaAz51tmXFMJk0YJrkG+2tw3PhbWpv0yTYQC+8z5dXjcdez5WWzbzLq9jCajvF1Ghnv+5YV+tBysLvdffvhl30ewFviwvleKeqybus5w0wW1kxtnetHjxQ1a8lzKlxbSCM34stLOYqZt6zlUX80DQfvneD+gSL1WUsYeOpjvEEmmOMj0swXgg81dCz1G2UaLhcRufEEhYL1XhnEAIHbaGyYDzJNffkApajD8Tm1TzOHdfHeOmjd/QdlD6MSFtOcyBTSuDVT+z4qqnBD1kLzY8ZPgpHNrpldDlB+GrLWGJCWhdNbNrOOxoSQdIy83akbLb319OWvUChjJOcIAgrb9pOcC5ieysUjtRPFhKBI3vlrWi0rQr9dLd3L99JvI2q16eDIFhpMvG2pfUcovb2cm3x6KW9BeBIu867va7wOGEJC9V0nASekniqczwRzVIVAh+Jh8QnaszR8FYKW5i3XBzpmPtJxjZmdQdI5/RbgX30jr6D0ocRr5g6aBTjHRqYNE50WcthJlPU2vhK8bIxffAlH8Wtk3uMk+HN47uNvA8MjOMYeKekbdRE+Epxw/guvQ2KWyZ64D1h5r2vMG6cMFKWw47csNbGU4obx3drbRSKm8f3Gp8wb+yhvffkx0gYeCelza68XhPhKcWNY3rePopbeuB9w9huPMNEvzM3SlLqJ7qEdNid1wci9JTPy0b3am0UcOPYPiPv60f2GldZtmRGgizjGjjCZndOL+z0lM+1Q/qs1wq4buiQkfeVxQNG3mOJMZJSr7GyhM3WjF7P4+NzefGw1gbg8uJhI++rX31Em9UdAVMHJ5jcqQ+O2Efv6DsofRgxmMjEimQbr2WdVD2GSTwcyyajEXY2yhpImJ9ARlI5o00xqT95A5C1k9imCdOyjUJaAQwYTvpAb7wHDSdvALJ2AhupFSM6wjIKlwGKPbT3aCrbtgUSRuO1wR6uP2snsIWt5W3LXnn30N6JXKxoU9UvaMAQIRaCxJMmh9CRkqxBuAxQdPT3k1LBqSETCnXeuu8kYyWM/dsWkpSVNHIaSOj7gAIGkwVje2fsTOvvGCRlEkvEO1ZKgcQmbZm/u7zdw1jhFI02he0F0rc78bOmguE3FvrHjDcRfZFsH0b89mOf5Hce+wS+UpGiP6CeTExfTitGRrdhUwBH4DSsufF5QSQwXhek6qocTGSaUTTjyxKbkjVYADk7yaomKm2D9/nSijZzbjGRZrla0rIKWtHM2zRWCiDfDB4XjU7e4W8w/HvRSbNS2xzeUuhDhQigkEgaeY+lA8G1HxJXQvvvA/Vgbvr6egvUJoXQXl/gyKaaUWmjOElgIlNgtqzX/eTtJOteEMwt6q5qbFrJHnjbElQ9Kkkb3+Z9KRhMpViprTU3WDr7gEAwkS4wX1kKyoq4NgUU7CQ1VQ/mFjGeKEAKRcauITTXr4CkVIb2FuTsLKtuvM5KIBhKFFmoLmnLSskU5Y0yiz+7TuUTLlj1i/cACwo/kiLzuiS/ecWvUkwUY8t5saMfqK2P5wzX9/jEucf53NwxPOVzxdBW7pw6RNJymCuvIZH4eDFPPaK+RN7rk0P3cNpwXiwhWdc4JwA+sFrTTygAa27FmO11M5wT4DnxNsWHXauZebc0Kq2/2hHtCHYi4K0P9R/wrjR5h0sN/95Le/fK28S89/audIlDO39f75F3L73bxLyzvaM4+QTh5019c91r8VaoiFbVO0vdvFv2jbL85n1pseGWmzbh9gj3izW31OTdeOBolROUVfLLJKSFpzyUiuYtmnxa/Vi0XWWjn+jvJikkJU8fSVihWHdLxrYq+2WstMXg27LUnvIo/1MNtaawZiTpuxxkMVhaWa6t9B2UTULfQemDY6uz/PvP/V/OlJabOpI/P3E/v/Llv+c3r/3XjKZydTFe/BBtCWFcQWlHdFme8usrKPGTpiUEBSfNhlszPmEuVfX5UzZrBcVTPjknyWrNxDtl5u2kWH5OvOO/F5Ob4ilF3tGvRLR4Vw28k6xU9ZNBOx8db/3k6itFwUlq8+PIOu+SV9WKSXNOsp42IR6yR4fP1J98pRhwUizV4sOqSwR5Jx3w1pSVs1KsNSff6LUG8Zx510/VdPH2ydoplmvrsTYSQc5OU/GindkG0laKmt+4/mje7a816uvuL8GDk8axVD5ZO8eKJq+PQJC1M1SrVW1ZaZlqZk52dls4u6O3zgacgdgy+nhu6GtQXuRYrZX5/s++h/PlIA6Gq1o5YFaqJd74L3/IdSPb9ZO4gquHt5GynNixUCkYSmbYP6AXEYLgFVP7tBaeUty75TKjY3H3zMEeeG8hreHd0Cgc7CFK7B1TehGhpxT3bj1i5H3PjFlEeMXQtFbPA/XsusYosYo7N4n3XdOG9gYuH5w26jRydorDhqB3Poo7p/XBtXyluHfmcuNJlzsmD2KaxA8NTBmzXmftJIcHZ7Q2Poo7pg4ZbV45pc8eDXDbxCFMvPfnp8jbKW3As7SV5HBxm5HTbeOXG21uH7vKyPulw0e17ytgW3oLWStrCNSWNAZh81FcN3yNoT7Fy4av1zonAFcNXal9H2BreoZiou+gbBb6DsqLHB88+RDzlbXIUww+iqrv8ifHv6gdKACWa2VqngdRe8r1v0u1GqtV/ZOqQrFQ1SftAji7sdxS5nUXAsB8eV3reAS8S1Q9N3qpof532a2yalgZUARZj3vibcBsD+WsuGVqvj52RdmtsWZYGVDA/CbxnjPEUwFYqVWoGmLPVH3XuBIT1Bfw1gk7z/TAe76yblxjWHXLVA3tXfU9Y0JFaPHW4WxpWS82BearvfGu1AMoRt2XQkDN81g1ZGoOeK8ZhbTny0tG3kvVNeJ6QONj616Fiq/nXfE91l3zWLFU66HvVvRZqAFWa6vGbaCSV+Z5KOu8ZNEXyb7I8T2feTcPzJ/Q3nYpkWLddfFVe3RIaA0erUzFKtaml118QXCKo6aZxASBAHahstH+IrQ5GRk7QcWrtZyvcPVxFxxn04PY1JGWdvIVBGHz23hHIGM5lD13E7aezMJOSRC7omKYfIcSGaPjmLYcqheRd8KyKXvx2XUFgsFkhsWq3iFIWQ41v2Z4flY9iU3NvAUp26Lk6QOMDSUy9W2g9vupeb8BKcvGUz3wDv0VfV8qbEv/nUkEGcei5FVaKpAOTg3egSA1nnfashCihl8X5XbecopAJJuyPAQqiHzSwduvbw1lLH07CgRJmWhuzcQhb+dZ1WwDQRC/xVemUJPwq5e/lfFU/6hxHPoi2T56xoZbNd5wrvLqe9R1YVrbB7p0/xE2UXbRsITE9U1DLlQ9r/vFDri+174H38u8+TXOrSaRZaPoWifvCNR8HynEcwjC9bVD9sA74GTm7frexeXtN84UQVS/VGBcZYIGb9l0wL+RkEL01Ja15kQYf8+5ysN6jry/1q9GClnn3dCMxHFyjbw95QVBDZWi+wyOqP+3UYsIVltUt35Jd8InzNtVvfRdcz/xlBdE1DaUV/H14u0+ekd/i+dFjn2FcW2WVkGQq6Q1iYmOnwDtuoJOm5adKSiaq3zG0/qMsBLBVGagB94F4+SbsfRBrBowBRdzlc9EanN4T2XMvFNWb88WPfFO57XuY6+8JzIDZt6GYGcNmIKiBbzDmai7+1vAu2jm3UM/MfFpIGXoTwHvorG9J9Nh3tH30njS3N6JHqKoAqQMQdFc5TGeKhrbezw1aOQ9nCyGJvloG6uNd/BeZ5RZRaBD0cFTHsOJIW17CwTDyWFMkWSHnEGjc2ILm9GEOfFiH72h76C8yHHr+H5jrhKTGFEBR4fM4sfRZI59A+PaVQqJ4NaJPVobH8XrtulFmwq4a/qAcd3myNC0Ufw4nMyyvwfet03u7YG3XvyogDt64H354DQFQ3bdoUSWAwMTWk4Cwcsn92mfRX0Ur9921Mj79sl9Rt6XDU4xYOBdTGQ4ZBD3CuD2yf1G3q/dauZ928Q+4+R0sDhF0RDQreBkODQwpV2lEMDLJw4Yeb965grjVtnN4wf0vBXsK0wx6OgT1+XsNAcHZuJ511cvbhk9bOR958TV+vZWcO3gZQFvja5te2aGATuv1ZClrTS7c/qo0wDXDV+t5a1Q3Dh6vVFfcrR4ROvsAsykp0nb5uBxffSG/hbPixwPLZ7qyhQK4X18+Nzs8Vg5hqr//fTqvDEuxXx5jbJba/9guCCCQe7h+VPt67lhfUn99U+ee8p4bZ+f02trAJ5emdMeaYZA/Oo2luU1vB/sgffHzz1p5P2FXnivzmmPBgMsVDfwV+vDbui7hbAmQPHA/EltOQL42LknOpbYu/HA3LNG3s+szbNs4L1c3eAZg95WAffPP6u1EcAne+D94MJJ4+R0fHWOFVcvJF2plTi2Oh/wi21veGD+hJH3P194QmsD8PDCs23baVH1nVibZ93Ta3DW3BLPrM3peSt4cPGZttc6MxWj4F/mHgclQKjo8UTAYyvH8RrxT2LqO12aQ7Gu7bvrbonTG2e11wbwleXHjTYPLz1qtHl67VgPCRzncH0Xu8cVtz706ItkX+T49k+8iy8tnQ4WTkX7gNKI/JgQCWq+altO7hz0W1FiNYjqaR0FBeHyVbuOITzR11EwRD8FSEoLT6meNBbPGRG8gfZcNHG8XT3vRD0J3Obxbp/Ewk1rCwshzHX10t4JESTd+/p5m8WmtpAIBDXDknvBSbJqaO9Gkkc9715Esi3bBqLa25KqB94pI29bCISgbdshKjKrJUxDvMKSZt6OBVU/XpQMgqKTYN0rNcuKEtImLLClwlNeazMoVJ+qc05aHqBibQSQtfUPRZawkEhqhqzHGSvDhqcXgYv6/0zHkX/x8M+yJTOttXkxoy+S7aNnBHkjWunM20e3+BF507zaiIK6av2aKzM9O38d+Fp59zzJbSZantJzOVF1yaOHr/ebc5X69habxFt0/RZV33Pp/730E5ONaPtXRY4nrSVGFVOW6sHmG3Zvx8C0Ddiy62Oz0NegvMjxktEdHTdUuxBNAIeKU8an4qmMeSXLEsKoP/CUz/4Bc1C0Q4OTBuFbYGPiPW4QtkJwk5gS03nK50DRfLTwsmIPvItm3mPJnHEgFATHPttfaRcjuso3BqET9Mb7YHHCyHskmTUO9ALBcEKvm3CVz8GBiR76wJSxnQ4UzO09nMga9QcAI8lwYrro9j5Q0HMSwIEBM+99hcmO7NHd9RUdM28BjCTzHa90896bmw75BN02AHsLnSsHHXYKdmZnjLyzVhbZfkC6y0YBg86gVvPjKY/t2W3BtlMclGBHdlv8+3WbLZktxtWTnJ1lon/EeNPQd1Be5LisOI2v4o8f+gquGQluXt1AsCM3bBTJDiUzzGSLWhuJ4MigKfop3DS+yyB8g6uG9anYAXbkh8kZeA8mM2zNDmptJILLh8zLuj3xHpoxTk478sPkHL24t5gw8xYILjdEP1XAjRO7jbyvGN5i5L09N0zBwHvASbM1N6StTABHh7YYOd00pucNcHRwRivaBNiaHSZvcK4Ldopt2WGtjQAuH9war/1UwT33stE9Rt6HB7YYnb0t2eFm1uM4ZO00WzOjWhsB7E/sjV0eUAqUD0eSR/B9ET9WCNii9lKrONrgj/nqVtTGqNbG2xgiUd4dux2oFFQqDmP+FbEao0Z7z6jrcD0db8Vg7aCxvUcSI339ySair0F5keNNX/xrPnjyYRpJt7pEbUownR3m2bWFdqGsaInjgnDZDiXPEEtAgY3ANQy9E+k850rxQZMksKswytMrc7GiNQFsyQ7y7Pqitq6UtCn3EAPB7iFeyGS6wNnSSuz7EthdGOWpVT3vmUyRkxtL2rp65e0ISc3AezpT4ExpOfZ9iQh4r8xqeU9nipzq4N3YzWj8mxCWUX9B3a6q3K5+FsZMpsiZ0lJsbwp4j/D0ajxvgKn0QNf1d9brCAsXt6nV6hSWN/RaKWlRNVzfTLbImY3FWCGpFJJd+VGeWbug5T2ZLnC+HP+9QfD9+5j6iSJj2VSU3i4zu4NZdYHCxGo3bwXLp4tsSU5ysnKW4S3zXZo2IWDxfJ5sZYK56hIzOy9gO0FbhdtyZSnN/KlRPOGxa9dZsrlKVx8olRI89eQkSZlkevpZJsaW8VU9C3bdxnUtHn1sG6OJMaqp4+zceg5FK7tzQ2f3xNNbGJLbmK2dZP+eZ5GypYHyfZASjp8cpegMUZzQC24tLH73ql/rn+TR4LnM330H5UWO1370XXx1+RyBMLG9KygVLKk6wq6LTXUDbw87rz30NFtIPKVPoQ6QMyQUhCCyq/pGiWQ7YAuJ3ynujUDO6YH3polNzbCFBKE6lty70Ut7NxJNmnj3vkcf35a2sHrinXcSRt6WCDZBjLxFi1P4GsIsTUJaW8iQKDl+mSHvJFj3TLwFljCLe3sXycbDFhZzTw1TdX3sZI3sYIlEpoYCKmsJNhYzeDWLXCLBaq2KZXvkh9ZJ5yoIoaiUHFYXslTLCSQgZeA4FYbWKRTXkZaiWrFZns+xvpoCRPB/oSgW1xgaXiWRcKnVbBbm8ywuZlGqQVpRLKwzMbZINl3B8ySzCwXOzxXBTyCFoOp5ZNNlJscWKOQ3AMHico6zFwYpVxLknARr1SqJRI3JsUWGiqtIqVhZS3P2/BBr62m2Tc+yfWbRGAvlFy77abZlt+D7Pl/69GPMnZqnOF7k8psPYtn6uEQvBvRFsn30jKyTqD/dirpD0g3HsnBdl4sh//JROFJqQ8ZLBAnLQrh6nychLcqmVZ1NgkLhCElFM3hJBElpsY6etyMllR6ijW4GGrx1E70gaEuTttMU6v+5I76/KRQJaeF5Ot6ChLQRVLUOryOtniLOhjnFbBgYP60I2tL1wlFwu2tISJsNz8zbNax6bBYUCseSVF0ft+KwfK47IJ0AEpaFrAk812LpQoGlC91l2ZaF6/v4SrI0l2dpLl4HppRgcTHP4qJOKyZYWsmxtJLrescSBLw9j/VSiqdOdCehFEDSstgQgmrV4cSpMU6c6k5qKrFRPTw0pKwkn/ub+/nN//wHXDgx23x9cKLID/3qv+W277jRWEYfAfoalBc57pjSB40CuHl8t/FJ9dDARPMJOg5p22EmU9Ta+ErxsjF98CUfxS0T5j36m8Z3GXkfGBg38k5J26jl8JTihvFdWhsfxc0GLQfAzRPm9t5bGMUxRIlNWTbbdVoOAt43Gngr6Km9bxwz896dHzFGt01Km505fTROTyluHDPxVtw0vse4GnfD2O7IZJlh7MiNGKPJJqTN7rxey+Epn5eN6TPwKuDGsb1G3teP7Dau2G3NjJCU+ui2jrDZlZ0wiE19btm+XVuOAm7dtsMYK+SmLdvMvAsDpG19e9tScmDE3N63bNuhtVHALdt2GDkdzOszqCsFI84Yxz96kp+69+3MPjvb9v7iuSXe9l2/wT/90ae09fTRQt9BeZFjwElT30LuQuO19pMg0cg5yWCi19zjScs2CmkF5hMzAOMp/SkPgOEebPJO0jjRJy3bKKQFKCZ74J0uoG1wFUSANSFvp4xpAxLSMkbJhSDxogljhvQDAEMp8/Xn7JSxvR1pkXN6aO8eeI8nzbx76W85K9ET76ytF9JCb/fTaCKvzwqsgnvXhKydwFvuXlkIl+UuZxGrg62yI2wq6w6D9ftJ03UZy+eM40kxkybQJMcPFtmkQ8KJb+/Gik4+lWj+HWUDiqFsuv5XtI1CMV7INn+PLgeSosDcYiHWkRMCZmcn+d3/9t7gczF27/zR9+LWLs7K1/MdfQ3Kixw/+Nn388lzT7YJGQn9LoDBRJbFyob2gJ0klCTOtBdggEnvIBGMp/OcL61oOQ0lMixWN7RUgiSIm3ML5J0kqzU974l0nnPlFfy4BidwGJZqet69NnEvdgOJpDYIW6/tXXTSLNdKRt69wMRbAAOJFMu1+OiuEsFEJs/50rKWd8FJsVorm3kbySssIbQTb2+8g/xA5ysr+Eq1iUPDvxecVD0oWjy8ks3q6RyZkQ1Sxe7vuLycZH02i5SSRL5EYWyt7TqFCJyT1XMFCokMi6VS8xRVZ9eVEsbzec6treL7Md+hgHwywVq1gvKDbbiu9hK0Hp0jvJ3mZyRIS+B7is4vuGEjbMFQOsX8Rgm89vqaNo5gMpvj3Noafk1Fc7Igl0hQqpXZu/MMI8W14B4OiXePnRpn8QsOW371y7HfRwO/8Ddv5rp7rjTavRDR16D00YYNt8rfnXqULy+dxZEWN43v4aVjO5FCcr600rwVw7dk+LXVWsWY7bVtefTrmO9tIVk3iBp9FKu1siEiAay6FWOW4c1yTmwhWa/po1r6KFZq5WBgg+gGB1bdspF3r6xNdr23d8XY3ms9tHfDLzPBxNsS0ih+bba3oaz12mby1jO3empv6v0kKKvt1gr9vu6VjafLPC8Qum/MZSkvpUgWKkjbx3clldUkfi1YpfCVorySorKWIFWoYCc8lC8oryVwyza2tFirVsLhTJpfUkO65gMrlXo/Ee02zcYTsFarYlkSV/hBILdwk4l226aXE24DoZo2vgoclU47JYNfLClYrVabNuH6GuUoVJ23ArvdJhx+Za1WxRY2X316hmy6zOjQCrblUyo7XFgYoObaZFcWYr+LMBbOLvZk92JH30F5gePT55/iv33hz1hzK02txR8du489+TH+90u/k/F0gceX9ccZ806Sxar+SU0KYdzD7QWe8skaVlAsIcg7KTbcmp63nWRJ86QKm7eC4imfnGEFxRKCgpNiw6tp2ypv65+wYfNWUDylKDj6FZSAd5INt6ptq5ytL6fBpxeYePt13tqViHp7l7yqtr2zhu+twacXRD59h9ATb+q8fQNvK8WGp29vy2p93nctSgvR20uN+1f5ktJS99aRrxQDyRSL5VK7A9FRRiGZpOTW8BptENFwOSfBWqO9RbRNGzQ2zXEnxibgnWS+wTvCpot3TF25RIL1SvAQsl5KsX66ezvPK5i3JgGGJvWatj4C9DUoL2A8sXye/3jf+5tPbK7ym09bx9bm+P7P/CF3Th0wTtCvnD6kdz4UXDOylZSl93cHE2n2D3Sr4zvxiul92vc9pbh362Ej77tnDhidpquHt5C29CLCgUTaGG0V4I6p/dr3PaW4d9thI6e7Z8zfyZVDM2QMupiCkzJmBQbFnVMHtBaeUrx6qz57NMBdMweNNpcPmrNe5+wkhwf1Qe98lDHLtq8Ur545Ymzvu6YOGlc+LhuYMup5snaSI73wnrrMaPPK6aNa3krBy8cOoduhVwoODY9TSCZjr04BWcfhqskpo0P4LXv096WvFK/dd8AoOL5rp14kDHBweJRiMkW8m6pI2zbXTE5rbOq8d+nvS18pXrvnoJn3DpO4WbH9yu3ktg7GBq5VgFNMc9UrjmjL6iNA30F5AeP/PPXZ4Kko4j1P+TyzNs99c8dBacR4wFxlTS/sFLBWrVAzHDEtuTXWDNsgClgo67OvApzXBERrYKGiT/4FsOKWjbzLtSqrhpUB1WN95zbiA9A1MF8xX/+KWzEeja24NePKgALm67zj+oBScH6jh/bu4Xtbc839pOp7rBnaG4Is0yacK63oxabAfNn8va26FeMR6lqPvHv5fk/PlnDX7fjvxJWcOeNTWowW5TaEtBfOWVS8gHdnUY1tq6rvsVytaFetFDBbWqv/3m3VEJieXV9FP1gE94ku8jzAqlul0kzwF828hldPvBm/aqWEYray1mQYxRsUZ0srKKEXyc7X1vHt6O00RZDUcJUyJ183pWENZ18/zXrPx9pf3OiLZF/AuPJDb6XsxWfxlAhydiCAbW65dkS1BMhaSUrhbYm4KFWbAAHY0tJOYoFwN8NCVT+xZOwEZcM20GZBEvDWTWKCIGy+yZHJ2A5lz71ovB1pU9FkqRUEaQpM7Z22HCo98N6MaDoSSNq2tn9DWCgdcIrq32nLoerXjFoVU4ZlMGc8lghStkXJwDu9OMr8UgVnuIRTqLbx9ko25dkMCeFQ8z3sQpnUYBkZ2s5xKxYbsxm8it2mz+i6dUVdQ2KwkQJSCZuNWq0pSG2EfW+2rYTBTJrFUhnVFFp1lCYhYQf3d2ysOgmIurbEr/9ElKPC2hOvxafJSQYalFTCZr1aBU908xYgpGIok2ahXEa5QX1tZQkFdnBqyPUVylXgim4bp94OviDz6BJj/+84znzrgcwdcJj91q2sXTPMb778VbzKsLLzQkVfJNsHSikqhiBlPoqq59FKaK46ntiC12u+167V+AbOm5aQuL5+qlDQU0Cwmu9tmjbGBNlDKHwFVL1eePvfBN7xfeBSbW/TSgwEvOvTBtr+bRCBbxakEL3xdj18BJX5DJXFFHbKBQFexUK5gbC1JnyElFSWU1RWkthpFyEUfk3iVTuG9rC4NeL15u+C7lUbAZast7cArKCgttUG0erfSqimTd2wTf/h+h6WlLj47Wr8KG1LwwlplBPi2cY7RtwqpaDm1Xnbqr5arNpsFFDxvOB6bFo2Klw/uL4fjE+2Aku1nLCQkLbhvG0cLnL80OWkjq1hL1bxCg6lPflmqOFSrYZSin8+fZw/+spDPDY/S9ZJ8C279vOG/UcYTpuPor8Y0N/ieYFCCMH2nD5xmUQwlSmEsp2Kjp/gv5OZAWMAroxBx9GAKXaHq3zG0/FxGxq8J9t4d0MQ5CoxOQ0m/UkDphgYrvKNmZGD9h4w8p5I5428TXqfBkxB0YL2zocYdfeB3nmb29sU7KxXO1f5TKQL2tWYoJ8MGPv3eA+8Ez3yTvXAezw9YOQ9NZBHNhPCSNyNBO56oumcAEzkci1nXgncDYfaeqLNOUlYoe+/8/JDJNqCokXY1HyfyVyon0TYSCGYzoV4N94LTfIA49kQ706bul3b/Ra26SgrYzvtdh02Nd9nMtvBu8NGCsF0ttDOWxI4WaG6JjK5Vj9pOGpWe1lOOGeAFJR351m7ZpjSvkJbHoRdxSH+5z//I//27/6cj554mmdXl/nqwiz/6wuf5vY/fTdfnY8IwfsiRN9BeQHj2pHt2uiQPorXbb1cHx2RQLRpeia+YmjGKH4cTebYZxDJSgS3Tuwx896mF20q4O7pA8bthMsHzeLH4WSGAwP6FOoSwW1Te7U2vfK+08RbBWJTU3bdwUTGKO6VCG6f3KsXSKJ43dajRt6vmNpvbO/Dg1MUDLwHnDSHDBmtBXD75P5N4f3yiX1G3geLkxQNgdEKTppDRb1IVgC3DV9m5P2te/ViagXcvmOXcdvp0OgYQ2kD70SCo+OT6JZGBXDPzn1GIe237rvMsIKmePnWnS1nIMbmwMgYI4ZVhLyT4MoeeH9LL7z3mHnftqXBO16ps29ohLFsVmuTTTg8tjDL+x97GKBNnOujWKmW+b6P/GVPK20vdPS3eF7AeHplPljYbqxEhvaxhQDlCz514WljOV+YfdZc1+oc665eADtfWaNiEIf5KB5eONMVnCrMGwWfOnfMzHvuWaNjdWx1wRhPY7GygevrS/JRPDx/2sjpk+fN7X3/3LPtDlqXKACOrc4bhbtL1Q3Umpn3g/OntDYC+OT5J7U2AA/OnzS29zNr86yEgqJFXBrLtRLPrM5ry1HAg/P6fimAT51/Et2UAvDQwmkj72fX5o1Hv1drJY6vmXnf9/R5vJqNzAT3Qmf/ri0l+ehTJ5r6ivDuR7jdHrhwrk03E9WWz6wsslwpt3QinToNYKVW4emV+dAnu0tSEj5/7qT22hDwiVPPhO7daOYPz5/DE63tnShOx1cXWXP1vNe8Ck+ZeAu478LJOqfOXhd8Rkj45NljCKlQviCStxA8vHgWX3p1LUt0fSdLi6x7tbbyO23WKfM7D90X2y89FYiN/+n4U9y9U39y6oWOvkj2BQqlFIf/6q3NDMRCqLaBUKlA5JW108bYFSlp4/r+RcmuawkZCAFDdXULG4Ux+ikE2wSeuni8BeaMuAUnZeSdkBZ+OAtz5xjfgOmxvwf0moG4l/ZOCAuf556FOWqgNl2aLSRSQM2QWbaX9nakhB54b4ZI1haS0skCVdfDKVRxBipIO7h6ryKpLSdx1xMUUkmWK5XQJN6ooQXLkiACbUTYLnSbQCOomaLNIVDhDzS2NFTYLlSjBNuSWFJQcb1uIqFyBlIJlqt13n5HOXUbKQUIgef7bYJbFbJpimSb5XTwrm+rNJ2hGN6OlNi2oOS60Zzq5Qwkk6zUgui2cTaWFAhBkOjRF6H66jayNcbiA66oOzMNGxUIaQVQ1m+92lLyXQeO8jMve7nW7vmIvki2jxCCO6b9qOUmzGzfcLQGiOcX728AvoGPEJ3PeN8MPO+ekDYFgtpKktpKInhyh2DS6/w2upzzbhNCc2DsrdJmo4w2XZ5RXLm6+qwO4rE2Bk4GG1HnrUK8O53Jpo1o2UTa1fUp4ef2aBulrQ8JJFT09b84O/zXhL4G5QUKIQRXDm8JvxL6CaCAQ8UJ7QQlCPbfTU+XEwaBKICFMOoPPOWzv03v0c0beuN9aHDCyHusB94Sc0K5bt4xnHpq715454yOhcCcCNBTPgeKZt4Hi5NG3gd64D2SzLYt18eVNZzUJ0x067x76btG3gPm/j2UyGhFwkFZguFkTjsBucrnsvGxUEkC5UvwW0pLARwa7bi2iNvg4OhoO+8Im8FUpl3vEX07MZbJam1c3+fQcIi36LYTwGXDPfAeHm0X3UfYFJNprB54T2RagnohWj9N3srn0FCLU9hGtPFuvy+jyjowONq1sttpU2gkTTXwnsrpxx3X97l2ckZr82JA30F5AWNnPj5lfWMMvWl8V2uJNMpOwXWjW4117cqPkLES2sF5KJllS3Yw3kAFos0jQ6bop3DzxF78jgeUjqK4enhb648Y7MwPG0Wyg8kMW3W8CXhfPqQXSCrglsnd2gcoBVw9stXofOzID5Nz9LyLiTTbcnreAsEVQ/qBUEEgXDbYXDm8xch7e26YgoH3gJNmW3ZIayOAo0Nb46WICnwFN4+ZeV8xOG3kvS03bHSu806KGTGu5aRcyZVjMxoJZbA7cOu2HcSFCWngyvHJ+pZSvNX2YpFiysA7kWBnUdfeQSCCa6fieQfrG4pbt+7EJzrgWQNHRycNYlPYVigyaMiOnXMS7DLwBrhuwsz7tpntNIK2xfIemag7TfHf3raBIkNpfQTcXNJmz6juvlQIoXjJVN9B6WtQXsC45x9/h2Orc0C0XE0Cu3JjPLU61x2ELfTnttwQx9f0SbAy0gmJw+qfFS3hX6P4RnKzqPcamEgXOFeKj7gqgd2F0Tpvv1kXEBLSCrZmB3l2faFtqOisN2U5bUHK4uAISc3wlD2VLnBGE+FWAnsKYzy5Mht7skQAW7KDPLu+qK0rJW3KyhyNshfe05kBTm8sx74vgb0Do0be05kipzaWtHUlhU2lB95JYVE16EtmMkVObyyBUK3vnVZ/kkKypzDCU0beA5wu6Xk7wsJFz0cpUGeLqIFVnJzb1b+VLyidy7AlM8TJleXmlkzXfSlgz8gITyzM4UfIkET9halCntNrKx1zoQhZBcHFasrXzbsgFKmETbnmdn0+XOy2gSLPrizHCmClFOwZHuaJxTn8uqg8HBRNIEAoJnN5zmysdmQgbq83Ycvg+1fd74U/kknYlKoa3hK2DxQ5sbKk5b13cJgnl2fryRWhs8WF9JnK5ThbWsV329ZaWmUKRdIBFw+vZtX3kzo4CbAcj6ydYHXFR9WsSBs7V+Onr76Tf7Pn6s5v63mP5zJ/9x2UFyiUUhz4wC9on2QAsjLJmuH0TZdoM7I+6BocutA5FHfDFhae0j+BQZCvJTh9E2cncKSFUqopFI5lZXp87gG2kPgoY5CynCERIgSToaIHsekm8VZgjHOTdxJG3r0KbnuB6dLa64rvA73xrosfv06RrO8KymdygMJKuTj5GtLxUErgrjvU1hxsbARBfA4NbXLJBKu1akj82f4+AizZCETWiIXSYROybb4XaaNagtQYG8eS0Agyp+EU8K5obaSsB37z/G67+pq+aGQa1nASgnbenUeaRCA2lbIeaFDDqZB0WHMrgZPpC5qx+IVC1MWvol5ezfdRft2OxjUFfEXdvlGO79XLEiAtv1kWNFbUBH7FAk+CUMiEj0h4OJbk23dewc9ddTcAZ0vLPLJ4CgvJlcNbGTJsgV7K6Itk+0AIQcqytSG1JYKEZSPcqtYdcKRF2RCVNlTz12Xjo+qDQLxTEfC2EG5j8TkajrTq0XR1nDbHP/dR2EJqn/rbecfDkZLKRYqBoFB1pzB+chYETqrJ/XQMof43EwqFI63gREXM9yvqTqopw7AtLdweVnVMaDkwAq/s4JW7gwAqoXAsO3BQYrqlIAiwJmq0wtDH8vbanZFYcl+fja8USctqRZONsGn0E0m03rcBp97fhMamWeZz4R1zMKbZL428Bb5QCCt6q8eWwUOIECAswIrvU4GNaks/EGnjKKQT3fcytsNiZZ2fefhDfPTsY01GtpC8esvlvPnw3caEoc939DUoL2DcPKHPvumjAg2KoZybxncZn7APFSfaxWERSEub6cyAnpNSvGxsh94Gxc0Tei0HwE3jO4289w+MG3mnpK3XzhDwvmF8p96mV94T5vbeWxg1RrdNSovtOb2Ww1OKGw28FXDTuJn3jT30k935EWN026S02WGIguwpxQ1ju7U2CsVN43uMq3E3jO0yZrLdkRs2RpNN2hZ7hsztffO27VobBdy6dYe5n2zZbuS9vVA0Rh12pMW+oXi9GtR5z2zX2ijglpkdxpxGN06ZeW/NFUkbeUsODOoDP7rK5+Yp/XiigFsmdxlzSN0wvsO4QjqTKbZHt42ALSSHDMJ0V/ncNLGL7/7Me/j4ucfbmLnK56+efYj/8Ln34b7Ag7n1HZQXMBriT12W2omMeYtstH4yQZcRNuekzBO97RiFnQIYTOrFcRCEgzdhJGVeBi04qfpWULxN0nLI9/CkYjoxA4G+xgTTCRaAvJ0M0gbEa/FISscoAIYgEaAJE+kBfVZgBUMJfYoCCPqkybFypGWMkgv0tMzdy+my4YS5nJydRK6l40XZCthIkU+YeQ9ngvaOKqrx7D6Rz4f+irKCoYy5rlwyQdJuJsaJLCthWeQTSS0ngJF6hFRdNuPJnLl/DzUjxMbfdLlEg3ccgpXWQiKBvp0UY5mM0WYimzPYwFAqbRQl5xMOGUfPO2ELhjJ63lL6PLDwDMdWZyOdOR/FF+ZP8IlzT2jqev6jr0F5AeP6v/lfkandG8I9KSTjyXyQkl5TzlAiy2J1A1+pSFErgERuWvZdk05DIphIB7x1T2utTLbxCJIgtoS2cXdDLzqVvJMM9t+/Tt6DiUwQBVZj07bdotl7EcK8iWUKZhbwLnCuvNzVB8K/DybSLNdKvfPWICwtiCun4KS10V0lgQN+vrSsbe8BJ8Wqq+etyhbl2TROsYKd7xaD11YdaotJpJRNgWgkbwED6RSLpTKo9vZo/C4lTBbynF1brZcV0WoCBlJJVqqVeOdaEOhL6P54uEYlQNoiqKu7mkDCKWEwnWKhXGpm+w1HeVUopCWYzOU5t76CF9fgAgphnUrMtfXCG6GwbIHnq5ZmpMPGkjCYSbFQ3gj0IBEtbtswmQ3uS8+LaW8ZpATY8Mp4noy0EVJhyUBn4vsC3+/mJISPZfmkEopqTVCtdTozAil90kmPAScXOX63KAluHN/D77zkO2JtLkX0NSgvIsyX1/ngyUd4dm2RvJPknplD7C9OoJRiobJB1I3UGNB8pdrCjsdhrVapOyBezGAoNs05sYVk3SBq9Al4m5aSV91ykH1Us+0Q8A4Gkmhfvbcp1RaS9ZpebNwz75qZt4r9Q2MXgefU3o05I1RoOIjeaq3y3HhrYLKzhDSKX33oqb3XXTNvry6qqC2lcNcS2NkawlIoLxDAKjdYPfSV0nYZW0pWq9WmFkLRsm3MsT6wXCkHfbPxxB6eU+v/rtaqWJZsRZKNsGn+GyWUbUSZDfOm3abByZIycCrqwtTwvaLqzoSPYqVS7grEGuYiBKzVqtiy3t6dGYi/Bt6BE95BWATfpZSStTpvYQVLgKpuI0SgAwr6SSlob1mvKPz91QWy626lLhb2W2La5vuq+TAgBViWQtYdlcZpLin95oOOrxS2rbAsH9eTQVkCLOkjpcIS0pjKwkdxrrSstXm+o++gPI/xR09/nl965B/wlUIKgQLe9cRnuH1qP796zWsZTGRYqDaclG5YIgicVnJrWgcj5yRZrJZiy4HGSsTX76R4yidrJ7QniywhyDspNgy883aSJcNN3s67F4FvNDzlkzOsoDR5ezXtXnbOMYeV73UlwmTnK2WsTwpBwUmy4Va1k31w/RePd95JsmzgnXeSlLyqtr2zdpI119BPZGhCdoOQ9FreMV3JU4p8IslSpRwrSpVCUEgkKbk1vEYrRJSXcxKt/taD4FQngm3eBzE2vlIMOEkWK6XYuqQQFJJJSp6Zd9O5/Hp5C9F0UgKb9u/ZV4oBO8VCdaMpyhUdPUvW70sT74ydoOwHvBsiWC3tuqMShTBvx+6+q3yC/h08ZEZDIhjvYcv4+Yy+BuV5ir879WV+4eGP4Cq/mf+kIVD82JnH+Yn7P2TMruspxau3XmZ0LO6ZOWAUh109stUoxhtMpI3ZjAFun9YnyAp4Hzbz3nLQyPuqkRnSll7UNuCkjdmMIcjmq4OnFPdu1WepBbhnxsz7yqEZo4K/4CQ5VNQHvVMo7jTw9nts77umDxhtLh+cNma9ztlJLhuc0nNCcef0Qb2NUrx6yxFjW75i6qA+47GCI6MT5BN63lknwdGJyUiNRpjTK3cbsl4rxWv3HDQKSe/aoRfBg+Ky4XEKiaRGgQJZx+HK8Sl0LqGvFN+yQ39f+krxmp1m3nduNfM+MDhGMaEPeJa2Elw9OqOxqbf3tgPa2nyluHfrISPvO6b19wko9hXGGEykNZwUKcupB5E08J4+qLdBcc/0IQOn5zf6DsrzEEopfusrn4h98PBR/O2pLzG7sVb/QFQhwc+F0pqxvvmqPosrBMufpvTgZbfGumaFoUFruWKub1YTyK2B+XL800cDqzUz74pXM2ZqVsCS5mmngV54656aGlh1K9Q8Pe+q5xm3QRSwaMjSC3ChB96LPXxvaz30k5rvGfsJwGLV3E498V4vU1uOdj4aAuDFOWE8Ql3zPdZqlYayI7o8FAvNfhl/Y57v4b5crJQ0zlCwdbnuVZtH1jstG5ubNb/RT3TrVs+Ft9LYwHK13NwWirPZcKuhgH7RzF1c1j0d70CnslA1cVLMVleNvFfcjebWUZxNyavgiWrba528lXCp+qUYm+A1W3q4cgFHxsX5USSsGq5YiuHzwkBfJPs8xPG1ee76h9/W2kgEQoWiiEbsLwsBg05jGygeWTtJqRZa/vwGQmCOpxGc9MkYJ/KsnTBuX/UGZRTJSupxVwy8h5IZ5g28M5ZD2XM3R9fTA++EtCn78XFAem3vtGVT9TeHt2nVXwIJy6GsifMDMJzMsFhd1zKy1zOUliQiV8EuVAkfRvOrkupCKoj4adh3UuGAZyoQjzbfq2+fSCFIOTYbtVqorA7BhoDhbJqFUkkrgE05wX3iN3UcHTe5oBVHpcmpzaIlSA1nM44oRwpBOmGxruEtRHBCaaFcQjWFwh1lSUjYQTwVpeEdBEirO4h+tI2QZhtLCrJJi7VataUZ6eAtpWIkk2axUsJt+gPtZUlLkbIlnvLw/IaOpcNGBqdvHNvH9wVuU0zbsrEsH0v6pB0P34eKZ6GUbLNxLJ+kBRNZlzW3wsJGhlLNaeOdSVQZymxwpLiLX7n8h3k+oS+SfYFjw/A0D/Uno7DoL2KgU4qeAmvVPA+hO+KyibBEEKlRB0WwOmBC1feae73faMgeQsoroNID75rvX3K8e2lv92K3dw99t+q7Rnep5vkIYeOuJnHXEsikF5zEqElUrWOSiXNSRPfvXasb9QmzLWiYor3A+merntfuXETUVfM9pBShU0Pd9XVzMvAWdN/ndd41vxVcTXXwbjjwFc8NHLXmyWbVWqqp27i+hyUErW8mnrcQoMLC1ZDYtq1ui5bDE7KR9ei3Dc1IsCKmusqpeB5KKCyLpo2qvy9CvG0pUFLVRcLtKRbCnKRUOMKra4ADV7UhpG3ZQFp6+L6HX482a9VtpJC4ysOSitHcOq4nqXhBsMSk7WLJxkpToJ2aOz3P37zzH/nsX3+BarXGgev28Or/cBcHrjNtp13a2PQtHs/zeMtb3sKOHTtIp9Ps2rWLn//5n29XfSvFT/3UTzE5OUk6neb222/nySef3GwqL1jMZAaNMUc8FGMpfVwKiWAynddmaRUERzVNAbgyBh1HA46Bt6t8xtI98M4UjLwn0wVj+HKTbqYBU+wOV/nGzMhBe5t5T2Tym8bbFBTNVT7jPfSTqR7ae7yH9k4agp31aucqn/F0XrvSErT3gLm987ngJAyAEvhlG2/DqedJCT6bsKz2D3X+1NH8XmJsar7PZDbEO8JGCsFUrtDKQhxT13gmxDumvoSMyazbUVZbULQ43pkW76iswFIIprIRvDt8vPF0qH/HcArfb816ZHt9AW+n3a7DxlU+E+lCO+8Om87+3bCRsr2u0VSLd+PzsqMsW7TzDsL6B6sr7bxbW4pSgm0p7JCNp3yGE8Umb9vyySZqZBK1pnMiEezITvHIp77C9+z7L7z/lz7AM196ltNPnOXj7/80P3z9/+R9b/0Lns/YdAfl7W9/O7/7u7/Lb/3Wb/HVr36Vt7/97fzyL/8yv/mbv9m0+eVf/mV+4zd+g3e+853cd999ZLNZ7rzzTsplvZK+jwCFRIrd+VGtjSUEt/QQSfa12y7XCwQJxKamp9ArhmeM4sfRVJa9BpGsFIKXT5p5v27bESPvu2cOGLcKjg7NGIOZDSez7B8Y1y4gSQS3TxrEjyhev93c3ndO7Tfyvnxomrwh6N1gIsPB4oTWRiK4fcogfkTxuh76yR1T5vY+PDjFgCEIW9FJG8W9AnjF5H5tv/RRvGbLUS1vX8Ertu4x8x4bZ9CQFbiYTHFkTN/eArhrlz7Dsq8U37r3MsNKlOKObbu1zpcCLhsZZ8iQFbiQSHF0bBLd/pUA7t6+18j723aZeb98elfLiYmxOTg4zkhKH0Aw5yS5YkQn7g0SYdwzc8DYT0zjCShundhjyMKs2FsYDwJbamyydpLLi1u1Ngq4dexyI+8rnN385Kt+iWq5ih8KPuO5we/vecv/476/e0BTyqWNTd/i+exnP8u9997LK1/5SgC2b9/O+9//fj7/+c8DwerJr/3ar/GTP/mT3HvvvQD84R/+IePj4/zVX/0Vb3jDGzab0gsOVd/jdGm52XnDt3rjNVcpHl08Yyzrn88fa302tFwZDsT1hQvPGss5tjpnFJLOl9eNWwW+Ujyy8Nx4x+GLc88aHatnVueMQtLFykZT4R9uo8bfEKxYPbxw2sjpU+efNto8MH/KzHtlXnukGWCpugEGraWP4qF5PW9Bb7wfXDhp5r02bzxCvVwrGbNnK+ChhVNGTp94+lm8lQRWoRrZv1XZ4v5js2bey4ssVsuEg5O1uASvLdXKPLO8aOR9/zlDPxHwydPHQkHwQvsWobv+wbmzbbqwqHHg+MoSS7VS2+c6rVZqJY6tLIRe67ZRAr54wdDeAj559plQGdG8H1k82wyOGMfp2fVF1lw973W3zDPrc1reCJ8vzp+os+ksK/iMEPCZC08jhY+vJFG8BfCV5dMI4db3nKLrO1eep8ZGW/mdNhV/gzPlsyFO3TaOdHli9Qkc4VNrBqFr552UHh//v5+gvFaOieEE0pL8+Ts+xHX3XBn5/qWOTRfJ/uIv/iLvete7+Id/+Af27t3Lww8/zB133ME73vEOvvM7v5Njx46xa9cuHnzwQY4ePdr83M0338zRo0f59V//9a4yK5UKlUprMF5ZWWHLli0vWpHs48vnefVH/3fba51+vUQE2TQNT0U5O81K6BRH5wAOkLIcXN/flCy1JlgiuPlNR/5M0U8h2Cbw1Gbybt9zD1O0hIUU5gzEvfDuJXt0zzAsDfSagbg33pKesjD3ANOKhi0kopFdV4P0cpGltRoyXcPO15CJgJtyBe6ag7fmBKkOBPXEg9HoFMAGHENJCMNbFJqua1sSKUXLUY/RlwykEyxXw1mBQ5NT/VfLqn93Ic1WV/URvNusRGDTFJu22bTqc6TEskRLQxXHO1mPTRNVDg3eAik6Mzq3cxKxnNptZF1XopToaichFY6UOJZoJjtVnTb1XwdTCdbcIBih3yaAVQEXIGEFcU1qvo/vyZDropAi2MaxpI9jBYHcXF/U13ACG0FjG0eRTdTqNhJPtfbABD629ElYgslMmapfpepbVH2LRmJUiU/C8nCEj/opl+WPL2tXdy1b8uHK/wt0hJcAvqki2Te96U2srKywf/9+LMvC8zze+ta38p3f+Z0AnDt3DoDx8fa4EuPj4833OvG2t72Nn/3Zn91sqs9bRPXFXl+LtmrdjO0d/ZvToXvnvTkl9Y6odgo/Sb+Q8fy+Or/kUC3ZrUihUel2u+fS7lsg5IS0OSdfSzlRaDwgdNWnumya926ovohu2cWbGN5RAtiuOc3Iu6PsGN6qvnJhqq9XGyGUuZwmVOTrqv63JVTbioTouDYpQNp++6VF1OdY0eW02/jYIYc+nBG78XfS8kjI1lqZCHN6ft+WRmy6BuVP//RPed/73scf//Ef88ADD/De976XX/3VX+W9733v11zmm9/8ZpaXl5s/J0+e3ETGzz/szI8Y9Qc+yhgUTQEHixOhMUd0/AT/PVicMD4VTxiElhCs6hQM+gNP+T0Fc2vn3Q0BHBg08zYJiSG4Sdp1E+1tBC3eJk698D44YOY9mswa3UcBFBN6/YGrfPYbgtD1yvtAD7yHkpmeeJsSL7rKZ3/BzPvQ2Fh7//YF+OEnVjgwOtq2ChHx9TKUSrfzjrABGElntDau73NweLT1UvctF/AeHjfWd3BorL29I2wGk+l2vUeEjQBG062EiZ3iVwja++DQuJn3kJ63AA4Ux9tE91H1DSTaeUfZQPv9G8s71HejxL1B323XPEWVtTc/YeSdtdL1VWA979HkgNbGUz5bM1vaeMv6T5j3npfuND46HHzpvktm9eS5YtMdlP/+3/87b3rTm3jDG97A4cOH+Tf/5t/wIz/yI7ztbW8DYGIiEJGdP3++7XPnz59vvteJZDJJoVBo+3kxIyEtptPFeAMVOANHDNE4AW6e2K3t4Aq4dnSrsZxdhRGjSHY4lWFLtqi1kQiODk0b67ulB97XjWwzlrMzP0zOwHswmWFbblBrIxFcMTRj5HTLpJn31aNbjZP4zvyIMTN0MZFhW25IW5kArhye0ZajgFvG9cJOBVw5vMXMOzdidFIHnDTbc8NaGwEczW2P56MCAeytM7uMvK+amKoP+vGWOwcHKRpEsgPJJDsHNe1NwPuayWlNTUFW4Nu27sQnOnNwA1eOmXlvHxikmNTzzieS7Bow8752XNe/A65Be7fty3RYwRUjkwaxKWzLFxkyZDXPOUn2FEY0FsGmyHVj24y8b5nYDRreAEcGp7AMvLfmhhgyRJLN2kl25ka1NgK4YlA3VgS8r7vtcuPi5rYD+vv7UsamOygbGxtI2V6sZVn49SeUHTt2MDExwUc/+tHm+ysrK9x3331cf/31m03nBYnVWpmnVuZaQr/Qv41QAJ5SfOr8U9pyJPBXzz6i7QQC+Mipx4ycHpw/bRTJzpbXeXz5gtbGR/GJs2beH3j2UTPv02beDy+c1ub9AZivbPDVpfNaGx/Fx8/pj8pL4AMnHjEee/3H048Zn4oeXjhtFMkuVjf4ysLZ1gAW/jfUZz529gmtYyGBD5w08/7o2ceNvB9dOKPNnwOwVCvx5aUzsbQVQVyuf3j8Gbx6BNioBIb+Qoo//8pXkZqLEwL+8fjTdWegMeyren2tfx+dPc9ixSDurVZ4ZPas1kYJ+PsTT4aelsMtVt9CkIK/eOpLyDrxsJMS3kL5p1NPhd4LT66tf7+8cK4eYE9F2AQ/K7UKD833wPvkE3reQvCBYy3eUTZCKD5+9umQSDaa92PL55mrrEe+1/hZc8s8tHhKYxPU9/envxLqA92cLCn44KmHcWS8jRQ+n5l/AoQXer273mNrZ1hyVyI2flv2VbXBE2tPY4l43gm7xv2Lnycl3Y66WvYZy+Vjf/5JhK6DA4986iva9y9lbLoG5VWvehVvfetb2bp1K4cOHeLBBx/kHe94B9/3fd8HgBCC//pf/yu/8Au/wJ49e9ixYwdvectbmJqa4jWvec1m03lB4uT6YjO4VqeT0oCF5JwhzLcPnF7Xp6JXwNmNZWxDttcNQ0TPBkxbALbojfeZTeJd8uIjqIZhCmYW8F7R2rR4656L4ExpxchbF/k1jCbvzrGwDltIzpZWtY5Fr7zP9sC7Fb5cj87w7J0120JyZmUV13fwKhIrFwhglQK/YuGtOeBJTqse+snaKrYlWyJZFXJO6pNIxffaH+fChETr37LnhfQX3TaOJTm7vtoK9a46DEXg7J5aW2kl7wvxaXIScHa9m3ezrHr5Vd8LxKZtvFtODgROWtlzjbxPr6/QvqLT/q34KE6vL6NCvNuvrc67tIIjQwEZI3jX2nirWN4lr9ZcRYrSoNhScra0DHWha1SAOYXibGkpCNQmA5FsQzsiaGUhni2vBNmMqfcz1VpNkdJHAB4+tgjilvhKBNmMUfVy6mJaAWW/imOBpXxcXzbHb0sGIllbShZr8ziWi5QeVc+qi2kJRLTSQwrFua/OhqL2RuPk42dQSj0vt3k23UH5zd/8Td7ylrfwH/7Df+DChQtMTU3xgz/4g/zUT/1U0+bHf/zHWV9f541vfCNLS0vccMMNfOQjHyFlWELtI0AryE98h1NgnCwkAkdarbEkBra08HqcyL9e+ChsqY8S+lx4Vy4ib0dIqurr5+0ISUVTzmZCobCFpQ3E13N7C0ntovEOTsS4voeqWbiL3QHpBLR4a8ZmW9Z5hxyNWHydNr5SJKQVTM4i2kYQnIhq8o6py5YWbo+8xdfJWylIWPX7MqaMRntLBH7dGYnkLSx8vJ44PRebqPlX1eur1uuLsmny9gLerZWNdlhC4qtWOVJzNzTEtpbstlFdNtH3jCUsPBXYpO3occxJ2x3RhLuRSDrPS+cEvgFbPPl8nl/7tV/jxIkTlEolnn76aX7hF36BRCgTqBCCn/u5n+PcuXOUy2X+6Z/+ib179UGu+mhhe26IqfSA1sZHcf3YDqPNzRP6PXqAm8Z3Glc+Dg6MG6Pbpi2b6YyBt1K8rAfeN/XI2xQBd39hzMg7JW2jdibgvVNv0yPvGyZ2GXnvKYwYo9smhMW2rF5b4CnFDeObw/vGcTPvXblhY3TbhLTYkR3WekOe8rl563ZtOQq4ZdsOcz/Zst14rH1ncbA9mmwEEtJid1GvnfGU4ubp7VobBdwyYxY/3jRl5r0tP2iMOuxIyb6iTssRrHzeNKm/LxVwy9ROYy6mGybMvLdki8Ys47aw2F/QC+o95XPj+C6tjQJeNrbbyPu64V1Gm4nkUFuU2ChYwmJXVq+z85TPofwRrQ3Ata++QuucSEvx0tcdNZZzqaKfzfh5CCGEXiBZf3gZTgbK/KixoKFXmTI4DBCEeDahkEiZJ3orYTx9JIAhQwRJgKmMWSg9kjSf0BlIpIwTfcq2yRuEnQBDyWywGq1p78ke2nusB94FJ01CmHg7xvaGVj/RweQQQ6u9dXNP3kmbHStpk63kY5+alQJVthhJ98A7nyesK2krp/7aSNbc3/KJBEnDRJ+wLApJ3eQU1DeazbbV38lJoZjKmfv3cLpxIiq+wQvJBAnb0N6WRSHR6CdRZQWvjWVyBhvFVLbQ/D2unJ54J5KktLxVvb1Tzb/jOI2nswZOiun0gNFmKJWtT5jxvHNOgrTWkVUkhKifCoyvT6AYTuSNnK54ZZqh7WWkFWEjFAjFjW98/kZo72czfh7iQmmVG/7216LfDK3DZ61kZJTURpAxKSQT6TxnN1a0zwUjySzzFX1GWIk+KNxzQd5JagWgEsFEpsC5Db2+YLiegfdi8Q6CmZW6Xg+392Qmb+Q9lMiwWN0c3qZtGQicNJ1wVRI4VmcNvIuJNMvVUrDnLqIdFWE4BQGgfHDPZhHZGtZAu4BZCPDLEn8xTSGRYkmTHkMKmCjkObu2iu8HKduiEvgV0ymWK2WtY9Wm44hnjrTry+1dxsF1CykoppMslEtdNg1+UgqmcnnOrK+gkxcUU0lWqpV6aPmIdm1saZiaXCikFbdNUOctBEPpFPPljdhrs+q8z26s4PnxnAaSSVZrjfaOtpH1LaJomwYnRcIBV9PeUgpG0ykWKut4fmdjBL87Fkxlc1worwRlRXASQlFMJCj7ZdwY3lIobOmTtNxAf9LlYQsEPpbwGUrVqCmF17X3GPSChIA9BZ9VdwlXNXJCdfAWirsGl7DPHuN937ud2afSSDu4Q31XkMj6vP43jnPw5QlesvVznQ30TUM/m/ELHLNlTfzyhtgKUT+d0n0jNU85KMVytWwceFdqZSyDnmWzJnlbSNYMp1N8FCvVknayhG8Wb317r1TLF5W3ycoW0hjq3weWe+C9WqvUeXsxk72oi/UMBXkieD5cd/BLNjJTQ9jBJOSXbFRV4kjJarWinXx9YLlSbopNFap9jK//u1qpBDqUuEiyjYmysUAYN48TfMdt81KzvuAXWwpWGrw7bBrCWR/Fkqm9Rb29LYHv1Z+yO66tTb/RaKfOeb6Td9e1BS9YUrBaK9dFpdHX5qNYrpZa4t4YTmu1env7fqyNohXzQ6n2AJLhrMBevT/FcbKEYNUtB05PMwuxqJdTn8wJwv37+CHBrWjW1eC07pVJWgKUj1KqLpKlGWlWCJr/WkIh6zaNGqXwmzY+PlZdx+IjmtcnhV8X1FqU/XWkAAevbiNCNo2HgEUK02V+6COP8dSnCjz18QJuVTB52QaH710kmfOp+aIvku3j4mE4ZV7a9lFk7CQbTSelG5YQFJwkJbemnfByTpKlavfKQBibtRLhKZ+MndAeWbaEIO+k2DDxtpPGI62bx1uRsxOsug0npRsB7yQbXlWbUC3nJI1h5XtZGekFvlLG+mSDt1s1tHeivvIVPxCKXphbqmXlC/y17m0TTynyyQTLlUpsdVIIColkez+JsM0lEqzWqnoBaftFaN9SYZsO2wbvpUo51qbBu+TW2nLtdCLrJFivVXsTwDbej2urxn0Q876vFAU7yWK1FFufrN+XJS/EO6K8rJNg3a1oeYdfihO3hnnHleWjyNlJFqsboXJUVxk5O0XFrzZ5iwihbMZKUlXlJqcoMW2b/6exCfO2ItpdKZ+kzLDhLYdsOlZ1ECAGgAsI6bHnlhX23NJ9ktCWxeelcwJ9DcrzEhPpAnsK+mzGILjdkBXYU4pXbT1snKDvmT5gyFAK14xsNYrxiok0ew2iNoBXTOuz63pK8eptl5l5zxw08r5qZMYoxhtwUhwo6qOWguKOHni/asthI6deeF8xNEPGwDvvJDlkyGasUNwxvV9r4yvFq7eY2/uu6QNGm8sHp8nKZOx2ilIB7yPjet6+Uty9y5A9Wiles9fcd+/euddoc2R0nFwiQbxzpcg6CWNWYF8pXrndkD1aKV6z66BRSHr3tn3G9r5saIyCk9TyztgJrhzVZQUOON2zzdxP7t1u5n2n4T4Bxf6BcQYSDZ1GtE3aSnDV8BaNTcDpzqlD2tp8FK+cPmLkffPYQT1tFDuzkww4GQ0nRVImOFTYrbEJOF1VvNZQm2Is+2og/uScUjCUud3A+9JF30F5HkIpRckQXEwRBGAyYV63XVTHkuFpHmDdrbSHC49A1XMpeSbesFI11zdXWjfaLBpWfQDW3SquIeFcxXNZr5l5m1ZrABYq5vZerJh5b7jVVhyJGNQ8r76CFg8FLPdQXxA0S4/lHr639VqN0qIVqVFpZBsuL9jG9gZYqtenE5vOlTa63vtaeG+4tXo/iVoBChbxa75XX/mL0LqEeC31UN98qRGkLKocVefdQ//2aqGj73G83dBKa1x9iuVqOEtvtM18ORwULoZ3rRTbPg1OJa+C24yZE83bw2XDK8fYtDit1ExtqVisrhp5r/vrzW2hOJuqX8JT1bbXOnkrUaOm9G1p4VNVKwgNJ4lP1ZvHUyJWmA9Q8c3zwKWKvkj2eYjjq/Pc8fe/o7URgCVsbTwRQRDGPYg0GY+cnTBup2wWBEFMgqqB91Ayw7yBd9ZOGLevNguC4PRJRRNATQDDqbSRd8ZyKHvuReEtgYRtN7O9RqHXfpK2HCoG3n7ZwltIItMu1kAVETp9oDyBu5RAlW3jHpYUkEhYlGouwQp5awm7MfkJKRhKp1kob2gFsOmEHfCOmwsEdGcF7hCRCLoyHndxEsE2SMqx2ajpAxuOZNIslEuhlZ3u+tKOTdXvgXdbW0aIX0SnqLnbxhKCTMJmrek4dtsIYDiTZrGi552yg/gtflNb0m7TSP7XzFTcldixnmFYBnFGWkHTOmwIND/5hMWaW2lqRlp2jWtTjGbSLFfXcf3w1bTKsqQiYwvAxY2prxFkLWUH34kXyvnUtBGB3WAyyJxcC2UpDtskJezIlqj4G1R8qy64bfG2UCSkx8vyS+TlSWxqWLTruzwlcLEQIsPLtz/ApYK+SPYFgIrn8rcnv8xfnniY2fIaU5kBvm3HUe6YOmB8KoZgj9OUil4RrGqYUPU9pBDGZfDNgCWkcWVAQSvtuwYXnbchSFmvvGu+f9F4yx7bu9oT7x7au16VX7LxSxYi6SOkj/IlqtIxoMc5KQKshqi1Pm53PWeJwCmoem7Ln+gsq15VzfOQUjbTcUTV1/17d32dv0edGLKkCJzv9jmy67NV30O1OQ4tw8YkFLS3DIWNN/DuKKfTJqquxusN3q0sut02vfJ2fQ9LhleZostq/i7rHphq8e20kXWvMGRST7AnqCq3qQcJUoG0XJAmb88NIslatGxUu/7FVR5JS6CUj1T1UpSADpEs1AW+0o+0IWSTtDx8RSCArV9HUKeFR8A7VbdpOFhWSCSsqAAKFxuXQJgbvC6ajo9S5eetSLa/xXMJYrGywbd+/A940/0f5Atzz/LM2jz/cuEZ/ut9f8n3/vMfMZzMGWOOeChjpl6JYDJTMOZYmUgXjAG4TDqOBky8XeX3yDvfnqW1AwHvvJG3STfTgNMTb328GIlgIm1u7/F03hgYLyV7420KitZ7exeM7d0L72Qy3I4CVbHwSw6q0jhKWefdiCUhIn4InLjxbK71iQgbKQSTuRDvCBsBjGdzre3JmPoS4faOsQFasVI0vCcyPfAO9e9wttvwVzCWzrXaO6Y+p0fejfugsy4R5p3Ot03+nTYB71b/jufd6idx9YVj5TTfk91lNcadZnTXjnI85TOeLHQ4Le1ZgSWC8fRAG28pQMr2uoYThTbegY3qyDDczjvKRgFJ2YpPJAVYUrU5Hp7yyNvDzS9JCrClwpYqVJfAtqZoTeMCH4kfuDnN8jP2tuelcwJ9B+WSxJu++EGeWpkFWt5+Y9n8C3PP8juP/XMgktU8qFpCcKtBJOujeN22y405Vl65Zb9xs+HK4RljNuPRZJZ9A3qRrERwW0+8j2if1BVw9/RBI++jQ9PkbH0ws+FkxiiSlQhePmXm/frt5va+a/qAxoUJcGRwyhiEbTCR4aBBJCsRvGLKIH5E8fptlxvb+86p/YiY/XAInkyPDE4xkDRkYU6mODw2rv3uBHDXTn2GZV8pvm3/ITPv7bsN7a04PDpuzApcTKa5fFTf3gJ45fZ9Rt7fvscspr5jy27DAK64bGiMYUNW4IKT4uiIXiQrgLu3mnl/63aT6F5x28RurbMLigMD48YAgjk7ydGhGS1vgLumL9PzRvGq6SuMvF82eqDuxMTZKXbnJkMB1qJtMlaS/fmdWhuAK4sv0dgEc8NM9l6IW0Grf3owfV3s+5c6+ls8lxieXVvkE+eejO2WPoo/P/4gKZlsrtiG7/XGmOYqxZcW9RlKAT594ZjR5ouzp402z6zOGbMZL1Q2tNoSCK7v0Z54P2O0eWD+pNHm+OqCMQ7IYmXDOFn4KB5dOGOs75/PH2suVavQd9coXgh4YOGU0bE6sb5gjBezVN1AGDS5PoqHF071wPtpo80DZ8/hLjjIoWrbtUH9+lzBsWfXWKkYeFfKHF9eCj5H+05FeFPgwfPm9v7UqRNGmwfnzgX6EY0G4/jaAkuhmEFRnJaqJY6vLGrrUsD9s6dCf4VLC65WCPjk2Wdig9018ND8uY5JtZvVs6uLLNVKEXW1bNZqZY6vLbRx6LRRAh6c048DQsCnzz8TmsKjyhJ8aelsx7ZUd30nNxbZ8DbQ8d5wy5xYn9PyRsCDCyfqnGLaG/j8/FPNmCRRZQkET66cRAgXlIy0AbhQmaN100XbVP0NLlTOaG0s4XFi7St1Tg2087bwmav8CyCQHdtboRZgrXqc5yv6ItlLDH95/GHedP8HtTZKEYwYHfu74W9S1tdwdU8FAsg7KWPMjZRl4/q+cfl+M2CJ4OY3Hfkr9MA7KW08dfF4C8zZmgecFMuhaLOdDgoEvH0uIm9h5t1Le1urabw1C8+uIQo1ZLKecdsHtWHjrzjNvXYdFLTEpnWEh2YIEgUKGehHYiFgIJVkuVqhLlHoeh/AsYPh3fUbCsmO2gStpH0dnNqKDItkY2BLiWWFtEid9dV/LaaSLNf0vG0Z/NL67jpbKfhdyE5Hp3PsCNl0OWkBJ0dKbEu2xNQxnIqpBCu1coTgtvUBxxIIiba9hWgJYENMmzaizttuCGlV+J2gLFnnnbBp8lYd9TXuv+FkgjWvhB9RTuOrT1k+Cdun5vv4SobsFBLVjCSbsl2UAleJ0KcDVYhVT0Y4mCyhFHhKtglgg0izCkdKtqZXcP0KHhIPGbJRWHhIFFfllsjJ89Alow27djav2P7IJbPN0xfJPo8Rf/wuCq3u2D0giB5LuvT8083jffGuTbfwG0bn4Nc9cVzcb6T3Iav3q1NVCzVnBRltpQIvPHR+DeTiFjdCE3rchBn9uc7XWhNj8EVGeEY9cyKak2j/V7Txa3/Q6J13JzQPI22OsGp7rc1GxNs0UhhE1SQ6rlknklUoZH2lKKiv2yb8d+sriefdWV/ktYWupJtTAKnl3bKRwu+IbttdnyOU8drsHsqx8bE6HiBadi03JHBKujvdpTfC946+BuUSQxB4SA9biA7dhAj9BPBR7BvQB3NTwIHihHbqEMCBgXHjE/a4QWgJwaqOSTfhKd+oU4EeeRcnjLxNAlEIbpIBQ7JAV/nsGxg1cjpYHA/ZCDq/u4C3ub1HekjwJwiC45l47ze0d9AHemjvsdH2WDhKgNd+MmcklTa6KgIYSqXbX+jwcVzf58DwWOul7qZEAId6sDkwNNbe3hH1DaVS7bwjbILry2htXN/nwFCLU5RAVACHhsa1vAH2D44Z+0kxkW4TZUeJVgFGQ9Gpo2xc5XMg1HfjeB8YNNvsL7T376j6Ck66TacSyzuZ19q4ymdvftLIaW9hMrKccFk7c5Ntovsom7SVRoam1SgbBQw6g1obT3mMJ3fSHBciOQmyiUN0e8LtHaWYPHrJrJ48V/QdlEsM23JDxgihw6ksW3JFrY0lBEeH9Cm9AW6b3F0/5hb9vgJeMra99UcMdhdGyRrSjA8nM2zLDsUbqMCJuWLQzPvlk7u1TwYKuG50m7Gc3YVRo0h2MJlhW17Dm4D3lcNbjJxum9zbE2/TcLKrMELB4DQNJjJsz+l5CwRXDW/VElIKbh3db+wnVw9vMfLeOTREIWUQm6ZS7Bwc1FgET/LXTk0Z2/IV23fVnyqjLRVw9cS0mffAUA8i2RS7irr2Dhb8XzI+Y+R9+8xuLW+Aq0anCHZ54m12DgwxaOBdSKTYNTCitQl4b9XUFATGu21Sz1sBVwxP152P+NK254YYTOizTOfsJLsKI5pygtevG91h5H3T6D6i99NauGxgi5H3dGaEwURWYxOIZLdmJrQ2Atib73Q+2m3AZyJ9Y+jvaOQTu2Pfu9TR16BcYnh4/jTf9vF3t7/YuCfq/yoFtrCMT0+T6QJnS925GcLF7i2M8cTKbFMEGl4Kbvy+PTfE8dWF1mJih41SkLUc1r324FNRIj+7ngSv8V6UzXS2wJmNeN4S2DswxhPLs7EaG0Hg7LXEf9HIWA4bnj5oFkBCSKqG9p7ODHB6Yzn2/YD3OE8sXzDwHuTEup53StqUNUHhGkgIKxRJNBoz2SKn1pfa+xk0xzwpYLea4fHFWRgMBK6dfcBfcZiRo5yoi1vD1xPquqRsi5LvtY2nXUO+UCQdi4rrRZTQ+tDW4gAnV5ZjnSYpYd/IKI8vzIYy9YYvLthm2FIocGK1/XvrrDVpWVSU20m0g5MinbCD4HEa3tsHijy7uhTPW8C+wVEeXwr37w7ewEyuwMn1pRhOwb9J26Jq5A3ZhM1GTdOfBOwcKHJ8dbGetK67o0gJBwZHeXz5Qj2bcQRvoZjJFjhTWu64A9p5pyxJTXXy6ewpioGkxbrb2d4tTkIodhWGOLE+X48j0m1jS8GBgRGOrZ2j1rzF23lL4bMlm2e+Oh8K+BbFG1J2GdeXIabtvB3pMZ32WHNr+HQKblXT5kghx0L1dD3jcQRvAdcWMjj+g8QJgAHyzk5eOvM3XCp4LvN330G5xPCnzzzIT96v70zd0Re7YSG0icYayFnJeoK7eCSlhafURRFt2kLi159qdMjbZt4JaeFfZN6m0z698a6LNi8SbwXmODdLBVY3XLB9ZNZFpAKnR1Ul/roNVQtbShDEZwUm2PVpE5J2b5nTJTaNsLGtoC5X+dEPvvVV7nzSCRIBamysOm9Xw7sXTogOQWqETaLOu9YUiEbVBflEI/FiPCwpkI2yYuoTPXBqxBjR2ThSIi1FzfdCIv2wXbCqVUgkWHMrTeFqm0l9e8KSwQpvg3dkUwpVzz4cf/1CKBy7peFQIU6NZH+OlDgW1JQbijjbqquRGXkwYVPyy02bZqZiVDOOiSN9ElYgplYd9clmfR4Zx20rp+EqSKHqPz5DdZGsj8DzAzFtw8YSPrawmE6v4KtqM0hbI7ZJQ5ArBBzNLJIVs7ruDQhu3/7lS2abpy+SfR4j3WPgMBMUrdWKOEgEjmWB4UHclhZeDxFnNwM+qp6KPf6pXyJwpNX95N0BW1pULhJvhcIWUrta8Vx4V3tYHdkMBLwtrYMiECQsC4GLciX+cgIiFopsKdujpOogOv59jjZKKRzLCpwKEW0joNXeMTYQ3Cc1tXm8hcbGV4qEtKjhx5bR4h2f0weCyddVnra+Xjj1YqMIghXWqNcXkaU33N6IUHkdsIWFR4u3tgv08J00y4nJHOxISc2rO0cRNhAEtKv4Ar9+ysaKaHdLSFQ9Km1wjVH1iSanuHII26CwrKhyFBY2PtW6KDd6+0mQoJEbOa6ppEheMs7Jc0Vfg3KJ4YbxXViGzpS1HSbTes/TR3F9QzuisblxYqeR040TO41P8wcHxo1RYlPSZiozoOekFNePbtfboLhxYpdxfejG8R3GlYF9hTEj76S0mMkWtTaeUrx0bIfWptHeJt43jO808t5TGDFGt00Ii23ZQa1NL7wVipu2bze399btxuPhewaHcKShvS2bnQNm3jfObNfaKOCWGZ3+IMCNM2beOwpDJC19VF5H2uwe0Gt+PKW4acrU3nDz1A7jKuINE2be23KDJA1Rhx0p2VPQa1A85XODYaxQwI3j5vvy+tEdxpXGmcygMcqzLSz25PUBFD3l85IRfQBFgGuH9xpzX105aLYZSQyTlHotnhQWW9Ia3Rfg47Mzd6XWBmAwdSO6QG0AI+mbjOVcqug7KJcYck4SS1japc2UlTCehhHQjMQYl+lSKZgxOAwA40l9CHeAgUTaONGn7UQ99Xs8BDCS6oF31szbFHoeoJhItYXVjkLaTjBg4A3tJyHiMJMpGm3G0z20t5NuD2MegZTtkDcIaSEImW7CTH4gchmZ0GtjuUzb31EopJIkbUtjpUjYFgMGIS3AWLYhooxjpZjuhXcm2/FKNwaSybqDEs87aVsUDVFbA94NEWU87y35gsEGRtPm/lZIJEnaJgfFNgiAg/qCfqnnHTjyet4jqWz9aT++vfNO0uCgKBJSUkykmn/H8k6ZeU9nBo02Q4lsfcKM552zk6S0hxwUjpDkbXPfHXSKRk65xKTBBhLSPJ5cquhrUC4xfOLsU/zAp98PdAtI2/82L9llrQRrEdFdG+VIIQIh7cay1gcfSWaZr6xrJ55gkXFzulLeSUbuv7d4w2RmgHMG3sP1DLybwdu0LQPmYGaSgLepvYeTaRarF4e3IDjSGQ4eF1XXaGWEMwvr+Cq+zMF6Jlvlx9iIQEjpo+pvdlrV/xYg6knb4sgLGQRhWypHtXdQjhSCyXyeM+srWt7FdJLlSqUesyLCqqHR6IG3JfXJEoWAwVSKhXJUe7d4T+XznF1fqYtNozkVkymWq/rgeaKRzVgLhWWLkJC4m5MQgpF0koXKBt1mgY0tBVPZAmdLy1reA4kka7VGVN7ob0XWNSi+pr2lUKQSCteP0qrUOQnBSDrNYmWN7s3Xls2WbI656hK1GN5SKAYSCWr+Om5U1L66jS19slYNn4ZmpJ23QCHxGUuVcJWK2JgJPuMAe/MeG+4iNdX5ABXYJITP0awipY7V9YYRnFAkrGFu3PrZrqv/ZqGvQXke43xphcaI0uk79iKObcBCRDonrXKC7ZSlasmwQAgrtTKWQc+yWc6JLWRsCPcWb1i5yLxNVjrerbpguSfelYvG2xKSNVc/yfkolsuVJu/IMgWsVCqBfkg1sri23mv86ytFMyhme5jQYE9fhOoId/WOsmwpWa1WYuY31eS9VC0bea9Wq9iWoObVPaII3koFYtPG7528G7uyPhpPqM57pQfey5Vyq6wITkLAai1ob1eThVkR0nHE+R/UvxcNJ0uI4KFBtJqllZ4h3N4lI+81t95PfD+SlAjZWvX2bn9QC7W3CgSsTV+2g5MlBWu1UuAcd35t9b8UihV3Ax+/eWy7KYANZSEueSWSloXyPUC1hLQhm0Y2YosgSFvYAZH4TZtGXUIpFCLUTH5dLGtR9daQQpHAxUfg10PsS6Ga9fhqGYQfJHxG0UoS2OJU8xf62Yz72ByMtAUOExE/vcFHkbH18VQsEQRO02XXhWDbyTQhmsroFZ7yyRiSDlpCkHNSZt62mfdm3bKeUj3xzjspQ6I0yNqJi8bb75F3IZkMeEd1yTqZXCIRaCIar0lazkgU4bBNezy31q8xZXlKkXMS7TYdP5YQFJxkoOnS8XYSwRO/hneYfuPUS/NHx7vjpxfesn5fWkK0gnOF6mrUl3USLcci5traml0znJh4+yiydd4NDlK2Mv4GE2+PvK2gn3QGHwvbtDkSobo6MwwLRMsmglPQv5PtNqI967FEkLODAGuta1NdWYhTVhK/HiIhOI0UhONvz1Qs2ng3QttbbU6s6ODdsmmUpVA4MtNWjiM9HOk3yxJIpCgAVot386RQi5Mji89L5wT6DsolhxvGdxpFbUPJDLsLI1qdCsDtU/u073tK8eqtlxknw7tn9htFbVePbjGK2oqJNHsL+ui2AK/ogferthwy8r5n5qCR91XDW5op2+Mw4KQ4MKAX44HijukeeG+9zMjp7pkDRpsrhmaMAf3yTpJDhmzGPoo7Jg5ol1o8pbh3n7kP3LNrr8FGccXYJFlHzzvnJDgyqgtkFUw8d+3Yqy3HU4rX7DpgFJLevc0sfjwyPNFyLGKQtRPGrMC+UtyzzZA9Winu3XHQyPvOmX3GDLwHB8frerU4u8BBvXJEnxXYV4q7pg/oeaN41ZbDRt63T+3X1gWKfYXxeiDCeN4pK8HRwa163iheMXHYyPv28aMdCQy78dLhI0beW9NT5G19oLaETLAnt09jE4hkDxRujH0/KMlnPPstELF5FcZI5jbt+5cy+g7KJYaK5+IaAmtVXJeNWq25Sh4FpYIspSbMV9aNNiuGfW6AkluNX2quo+q5lAxB0RQYk9JBkBnZhOVqvK6igQ2vimvIsFz1PUqePlNzz7zL5vZeruq3igA23Gor/kUMar7HhiHDNMDioofyRawo2S9LZlfMnJYrjay5UZ0y2CPvhberfNbdCuj2SlCs1LfU4mpTwHxlAz0nWO7he9vwXONJtpryDLwDHibdCMB82dy/g/4W3z4gKPu1+ngSxSmwcZVHqQfeK4atQICFyjqm9g70J3reFb+G2wzUFs3bUy5lvxJj0+K96pr6gGK5umrkXfI2kCKuDwQ2Nb+CIo5TwBtqeKoUYxO8JvGp+itG3jV33sjb98zj4KWKvkj2EsPfPPtlfuS+D2htogIgdb4nCOJp6OKJCIIw7qbJPmcn2HBrm6Yz0UEQxFKoGngPpcy8s3aC0kXknZA2FU38EkGw+jVv5O1Q9i4ObwmIuQJlr4pVrDYzEENdIlKyUCtJBtNp5jf0A106YVP23NAqSnhZOdQxDRl/u7MCd5cjhSCRsIKorSqyJoSA4Uya+XIppOfqsBSQdmyqnoun4SR6yFTc1NAYeKccm42a3lEfyaRZKOuF0iknuL+9piam+9q6MxVH28i6TbfOLWBgS0E6YbNR0zu8I+k0S5WNUJDI9rIEQTRh1/eCgIwR9TW3PSy/zklE2AQ/ibpNey7fVl22EOQSFutupa4Z6b42SyjG0ilWa2uhkFDtdhJF1hZYoooL9eiu7Ta28HGkR9ap4SuB68suG0v42NJnOBEIzl1ltW0LQRA7xRGwPVOi5q/X8xZ3XpvCAg5nKqQ4G1r96eQNlkhz47aHuVTQF8le4liulvjz4w/x4ZNfYcOtsr84zr/eeTXXjG7t6Ym3E1EupkRonRMIbs9qD4HMar6HFPrTCZsFS0jjE3bAW39tEKx8XFTehpUvBVQuMd5SyKAtfYm3kMKzfYQTRDlVVQv8YMCruqFAZp20RIu3JeunQVSEoej4PeryIm26y7GkCCLW1ueJrqYS9fb2XVSb46DabABqnoeUEt/3I+8lscm8q565LSue1wrWGmPTvC+b6xHthm1aDUFPNlEVBg5DfTwx9QEvaG9J4ztRbeU0eNtShJxGE6fuFYJOG1n3wBprFJ28GzoOpdqDwrc4BbytOu+GVdjGUy6OJbFU4DIENQYncxp2jbplXTOiEM10EALV/DewAafuyoWjxAa6GAtf1RAiyGYccKrrVghllVYVhPBpHIBv413n4qsySikqfoVPz/0L/zJ3H2vuOhOpcW4bv5kjA5ddshqV/hbPRcaTyxe48+9/h19+5KM8sniGp1bn+PCpr/Kdn3wvb33o79mRH+6pHFPMEQ/FqCFTr0QwkSloxaYCGE8XzKHQDXqIBky8XeUb44lIBBPpvJH3RDpv5G3SzTRgCormKt+YGTlobzPv8XTeuJ2QNMRuacAU48VVPuO5UHu7ElWyUWW76Zw0jus2xb2i46fBO5trOZedNnW7tmBnMTYAiYZdjE3N9xnP5OLFnQ3e2YKR91gm19yejBNttsWc0fBO9sB7IpM3887o2xuCOD+NfhLPu9XecTbQug/ibFzlM54y8EYwkW6NJ3F1jfbA2+qVt3TabGSHjad8RpOFDqeFNhGpRDCSLLbx7rQBKCYG8OoPIQ0bq0OQKkLP/M2VINkKTQ/Bak9CJrvKCQtpPXwy9mizccMC2FZdEtuapDGNCyL15qTtbSxUF/mfj/4M7z3+Pp5Ye4oz5bM8tPQIv/r4r/M7T72reV2XGvoOykVEzff4d59+P8vVUtsebGMSfe9Tn+fE2rxR/DiezrHHIDa1hOC2SX0WSx/F67cf0W4lKOBbthwwbjZcOTxD1nAaZDSVZd/AmNZGCsHLp/TiRx/F63rgfc/MQW05AEeHpo3ZjIeTGfYX9SJZSW+8v3XbUSPvu6YOaFyY4AnvyNCMMVjfYCLDgeyUVqcklOCO7fpIm75SfOv+Q9oVHQXcs2OPljfA5eMTDCT1vIvJNIdHJvS7KcBd23eji7bqK8W379GLkhVw1zYTb8WRkYlQULBoDCTSXD48pbURwN1b9RmtfaX41l2HjYLjO6bNvC8bmmDIEDwu76S4fGga3f6VIBBva3mjeJ2hf4Pi1vG9hhN4iv2FiWagyThk7RSHB/URWRXw8snDRt53T15t5H3t4CEj763ZaYpOI8heNFIyxa7sXq0NKA4N3Ki1UfhM5V6DPpKsopi6jl978reZr7QnIG1sC31u4Qv8zZkPa8r45qG/xXMR8bEzTxizC7/zsc8Ys+sulNcpu/qtGU8pvrx43sjpM+ePG22+OHfKaPPM6jzrhu2phfKGNpEcBIPzlxbPGuv7zPnjTc1ZYwkVQhocAQ/MnTI6VsfXFlgzJO9bjAxO1cEbxZcWzLw/feGY0ebBhdNt9XVqjATw7NqCMe7KcqWEP7sBWYGyVFc5AO6iw8OcM3L659MnaGxdKBqpzcJLyoIH5s7STLwag2eWF+vi1nidynKtxIm1peYr3RagBDw0e5YmqS6r4O9/PnM8dlemgYfnzwXbQBrtyIm1BaMIerlW4vjaotZGAQ/Nn+64GhH6O2jZ4L5sXEf09T26dNbI+9n1RVaqJXTtvV4r8+z6fFvZnTZKwEPzJ+ts4nl/dvZpBI14HNG8v7pyBoRHaw+ru76zpQU2/HV0vMtemZPrs5jw5aXjWt4SxYNLjyOF34w10lmfQHC8dNLIe6E6ixQrode6bWr+BnPV01obSyjOrj9aj5nSQDtvC5+V8meQQVSVGN7wzPpxjq/rHwr+/tw/8crJu7ANJ0gvNvoi2YuIn33ww/zJsQe0y/e9BGPr5RtrLPrpngoEwdOTaeBNWTau71+U7LqWCG403VHFKN6dDgoEvD118XgLMNY14KSMp0ZaWZhby8nQ/b2bto2VK/AupEEqZL6GSLs0dqr8isRfdbBrDlj6DMQIKKQSLFfqDpFqTEf1Qb/OI2Fb+ATZXiO7nYA2AWzbxKqav7ZlPG693KgaRBDwTMpOLVKbFRBEmzWdikrY9ezRTd4d5YS3MrTLOspoY0uJZYW0SJ311X8tppKs1MoR4taWjWMF8UZqGt6NoGbtfaedpBAK2RW5t70+R0ocKSjXNWuqw6bx22AywYpbjoh43aovYQWxSlzf7xCuNrQcqi6SVfWswN28Zf3abEPGY0dKUo6i4tWC7tRZXz3I2kjKYcPbaGYODtvIuk3K8klaPp7yO0SywfsN3UnGrjWFu612qjseBNmMR5IbrYzHHe1kiSCB5/bUEp5fxkPihjZuAoGsh4XiYHqDtJjFV+C1be4Ewl6JzwPrO/ji2i7jMepfPPwzbMnMaG02A32R7CWKi+sJih7ru/T8UxMjFWEVeUT2Il9bL7U9N0Z1J6Dt4roHfCN8Uc9A7IClAm1JM1Jm9NzWWV2n39zWtiL0Wtxk3ulMtdkoo03UIkHYOWorp8PO6OB1BjtT0eW0/W26NoNNe0Ay1fV6+O9ebIKVRIMNjUtThnKibRShVbiO9m6/HkJOkd6mIVzV8bY0nLqvLaqchji10W8jONVfkqIxckZzapRj98IbZeRtCdWMAhtnY+NjdTz4dLalFArRoSN5rrrXiyHKf67oa1AuIq4anjE+YU9kzImdbCHIGfQePoq9A+agaPsHxrXrNaJuY+JtEohC0NlMuglP+cZgbgLYX9wc3iNJM28B9aBR8Qh46zPCBrzHeuA91sE7PHsGMO3PAwiLDr2HAE+GlqiDFZ99QyOtkgVd1QngwMio2WZ4tD0WTjdthtKZ9uuPsBHQrpuIsHGVz/5BM6eDQ632jhJaCmD/YEd7R9RXTKaaq0ZxNhDolYy8i2ZOB3qw2dfRT6JEpMVEuo13lA0E+bZ0Nq7y2VcY74HThNYGYE9hvE28HmWTt9Nteo843sOJvNbGVT67clNG3jtzU5HlhMvampky8k7KLDI0rUbZKAQFe0hr4+MxmNhNo/NEcxKknYOR5YTL2pkdM66epK00U2l9UMdvBvoOykVEM619nKOqYG9+zCiSHU5l2Zob1NpYQnDF0LTWRgEvn9qjfRZXwEvHt2vLAdhTGDGKZIeTWbYZeEshuHJYv8wY8NYLDRXwkrHt2nIA9gyMGEWyQ8kM23NDWhuJ4KqRLVobBbyiB97XjW7XOjEAuwqj5FVGK4Atiiw7BvW8hRBcMz2t65Io4M7tu428r52aaaz5xPMuDlHQZs4NnIGdRV0/CZbUr5uYMXK6Y+vurqfmTptrxmfanY8o3gNDRnHvQCLFrqKuvQPeLxnfouGtUAQCWNO1XTUyY8yuuyM/ZBTJFpwUu7TOdZ332HYj75dP7tW2N8DRwS3GNBVbc0MMJjIaC0XOTrIrP6apK+B9zdAuI++XDR8CA+/9+R113vE2k6lRBpycllNapphK6UTJAe/t2cu1NuAzmr6VQCQbz2lPdnub0xSF0eQIjuztJObFRF+DchHxR099kZ978MNtS5xAU+SpFOSsFKsdos3uPeTguK5pdWAqXeCMRpQrgb0DYzy+PBu7HSIIBrljqwuR7zeQtRKsG6KtQnBct2binRngzMZy7PsN3k8sz8ZqbASwPT/E8TU974zlGEXJAAkhqRp4T2cGOG3kPc4Tyxe0vLflBo1iy5SXYH1OYg2XwW4tDzf7SU3gzqdISJuq5zWH1ajhdaY4wKnV5eZWSmPqaC0fw/7RUR5buEBsXjoB24oDHF9ZitYx1GtOOzYlQ+wdhSLlWJS9cATUTlawvVjkxMpSrJMmJewfHuXxxdlQpt52TkLAlkKBZ1fjvzcIjg93B+HrbE1FJmGzUXPjeQvYUShyYm0ptPzfbiOF4MDQKI8tXYgVZwtgS26Akxud/aT9m05ZFlXlGjUo2YTDhluL5w3szA9xYm0htOUUwbs4ypOr53Fj2lsCW3IFzpQXYzgF/yYtC0W1I9tvO2+JTyHhsKbhLYViT36IZzdm8WJsbCHYXxjlxMYZ3K6Afg3eiplMgeVao5xo3mkpSNvruEpG2FCvz2NrymXdr0aIWwM7B5fL8nlWqs/G8rYQHMkVsb2HIgLjtXifdg/zV3P605MWFr971a+RtvXO7Gbguczf/RWUi4jHly9gidb5/lbkxta/nc5J+L0wTM6JhdA6JxD43afWl2OdEwi6+en1ZWP8kl6cE8DonNhCcnbDzPv0+rLxuO6ZHnj34pwARufEFlJ7QgsavJeMvE9vrJh5VzzwBd5cCn/ZgZpAeUAt0Jt4cylQohmRt1FjZ822JTmzttL27Nj5HOkDJ1eXgkXiqAdfEewanVpbwbFkaFsjVFJdQFry3OgyOsorN4MMRrOyLcnptZXIbZYmJ+DU2lIou243JyUUZ9ZXsS19e1f8KN4drRm+PtHBu87TkZLT68sd19N+bQrFqbVl7QoKAs6UlnFkJ+/2b7riuxHL/i2HtvHTSkERzcmRkjOlpfp1xfM+vbGEoh4bpMNGCoWQirPlgHc0p0Av4qqAdxBDtf2aBK1sviW/Wo8PEs5ZHRatSs6VFxBCYTXdnZaNVV+JOF+ZB1FPxNfF20dKxXx1AVtagdC1g5PEDzQn1IOr1ctqsxGq+XpVlbDxsHERTT4BxwQutrDYqJ1FCh8Lj5YuJqjbxkcKD9d7Fil8bFRoNa1xbUFdZ8tr9cMH8fDwOF8xn4i62OiLZC8iUpbdvMW+0VACbPSrLBIRMcB1w5YWXg8RZzcDPgpbCGqahT2JwJamxdbgxIQuZP5mQqH4/9n782BZsuu8D/2tnZk1n6ozT3ce+g49zyMGEt1AAyAgyAKh917QYYaegv7DCtmi4oVt6tmKRzmeRDtMEaIGUgPNkGzZsqRHUaRtUiIlCgJJAQRIYkY3hp7v1H3vPfOpKTP3+2NnVmVWZe5dLVzcbqp7IQ76VtVXe3+5amfmyr2/vZYvioEl4ZEknJy8He2AuZCbB3BBHwZEh5bpWctw01rje4oom9204OuB8gzvsoAAMzs20Jl2bMN8llPAwTvwPMIoHok7/315eyLmPPkeOY0gluPXmF1aI94lXZhxIplAZ9p8UUREM4khR3oLC9b2mU76G1r6M/5WSDLxVYbzRRFn2nFxGgcMdt5ega80aZZnRsLVYk7eyN9F7YDJ7qqTwEkgE6Tk+xvzNjuApjEywniYHTnFx+WD7pukcVOPDSkmABQmm6zJhDtpgZpNAFtV9iX6t8LenUG5jfbMkfPOzKZ3za+Z8vAWq3s+63W7mDbW2qnBiNG8d/2MFQOmwrJrxuZCZ9UZpdeUz2ajY+ekNU+snbJj0Lxv3baubOypGXifb684ZyuqyuOog3ekNU86/K2B9665eb937bRznNyxsuQMLqtKcaIzb8VEWvPUUXeyq/cdO+nmffSks5Lt6c6CM7ttRXmcai9YMZHWvGfzhBWjgfdvnnLz3jzl5H1qbpGKg3egfM607ZmgIx3z3nX7+NbA+9ZPW2c2AZ5adfM+1lxwVkf3xeOOObswPdIxT63arxUaeHLFrlUCeHTptPOGuVFfoOrQRHjicaZlF3ZGOuaRRXuVcYAH5y86/X1357xTbLoQLFNx3OgFj/XaSSsmJuJI4xErBqBVfT/2RG1wX/uc49g0q9V51muuiu23394NUG6jbdbdepn5asN5w2z6VeeuEgFWHSnjAY615p2YDUcwBLBQqTtvmA2/Qtuxi2dm3s15J2a9Nmd0FZZzs1OpO2+Ydb9Cp2JfmxVgpe7eEXR8Bt6z7Iiar9YIfDvvWhDQqZX7O3XLeqs18c4kSnO8bQ/QANabbt4LtRoVP60cUsyq5vss1Nzje220462c9yzje61uO35jnUqVmufg7XksWAXA5rtrTff5dHxununFtmw7mtVmyzmhM1+pU3WUc6h6PvNWIW3Cuz7n5GTOSxsGVqot56xIO6hSc2wWqCiPeet5aZZN1mppZtdy3kcai07MUmXOKUqe8+tJ2Y/ycVJRipbvPufmg2Unp6Z/1Ik5Um3wUP1G4YyPMeET81u8HevxvCuSvY3217/xb/kbX/+31njXE5Xfqvk9WMuvWrOkKoSNRpsrhztWTsvVJjf6B9YY3BPlfOqf1eaCKnuWLKlvivfgICdCnjRP7MnsUnMty4DZDWFLejcr78Vqg62+vZKtDDyGNyqF3NLXGpCpBFx5jAh0GlW2e72CAzQopYTN9hyX93etGXUXGzW2+l1rQKiUqROFBlNmbQwevRbwPMlU6S1oR2C+XmOrV1RhOeEtpobQlYM96xP7Qq3Gdr/HuNRcwVS6YqIicrHHfV+ICp2UcEJYbNS50TssPTZPwWarzZXD3aStAk6iWajW2Bn0rONE5fQwZaap+BDGRc/Zpm8PYale52b/oGAMGIyvhM3mHNe6O8nMTrEv5ytVDqJuJkFZHiOktXBc1xNNo6IZxnGSgK2Ak8BqvcbWYC9JwFaEEY42W9zsbzEsGQMKzWKlQqj3EgFsASZJ1Dbn94i0yghgx/0JMb5EbFS7hKOEb9OcAoHzjYhedIOBnnwQMZiqxFysB1T1i6W8fWJWvXkWJOSvv3GRr/UW8UZXPKNs+eH5l/hY5zVk5bOIZxfT3gp7N1Hb29SudfdQoogtN/JbFZx4iDOFe4xmZ9B1TBDC7rBnAicL71sVnPiinCncZ+W9M+zioQgprlILZqlglgcH1yX+VvLeHczg73SDC9OBlybzWebf4zcYpULxPMXeoF+ISW9sMZrtfs/OW2Cn38dXqjwrrRh/pwkv9UQAMqo6nPQpkvk4GxtgRLK7Ke+pH2fMe6ffswegAruDPr4nDKOSJ9GE63jX3SQmUwhOF2VuHXPylLA76FmPLYZknKS6GD3+wZLfRAT2hom/S64Zpo/J5GrTxwaZ80DnoZLhvTfsGW1J2pxO+xn7e3fQzfi7INwROIh6Gd7TCeglOWYpGd9jjLnuqOQ4NYz8JElw4ynFftgdCW6zGCRO9Ema/fAQLTGeTtuS0fFL0t9hdEjd99CJri0e9ZXgxIhlU5Gs1jFRZjePkmikJ4mJRknhYmScKzDhpMRjGO+hRFMlNDLZpC0l0UgkHMdbiESkczbxiHcqMAbFATVV4/+1+jW+O5jjcwerHMY+q36X97auseQn1634dbgNAcqbsXcDlNtoy9UmrnVOT8S5rjyLxWjnFlpPhFZQ5TAcWi/iraDKzqDoSXVsitlmIlwW6ZiGX7HW9TG8a07eTb/qTON/q2Y1I61p+hVrUDi7vytJvZpyUyqz8vxmxJ0T2FhrWpXK+GZfgPFEmAsqM/HeC/tWPrl4Qsq5Z2d4ijhFWtOqBHneE6ZEmAuqdKNhZhvmtDWD5Hdz8B79e4bjK8PEaNpBlZ0kSJlqPMd7MOZdMAvS8CschgMnn+IXdt6T0BjNnF9lZ9gtFbcqzHnZjQfWcVL3KvTiQWlfMDHvYOUtoyBMYMpPsdY0vCq7YViKUQgNr8Yw7hNLdqdP3qpejVgfWkW52W3RaaBShJEkTBkJdyeOUaPxVZNh3DftoDHq4wnmqg16G0k2Ixct48TU0Iko+Wx1j7PVvSmMac6eaPKtsHc1KLfRPn78bnvwoeGxlRNUHZqIxUqDs46spQBPH7FX14205o8dv9sZWHzk6EVn0PTw8jHnWvd8pe7MEgvwwZl43+Xk/dGjF51ivIeWjo1KzZdZO6hxwVGFGfRMvD8+k7/vtFfg1fDA2gYN375G365UuXvFlsjKXMA/fNpezTjSmk/c4fblR0+dc1bgfWBlk6aDdyuocM/yOi7eHz1hFz/GWvOJ03c6x+5Hjp938r5ncYNWULFw0jT9qrOacaw1Hzl6wYn52LG7nLw/dOS8swLvxc56kr25nHfdq3D/4jELxnB69oi9OniM5qOb9urRAD+4dqe1L9Dc0VqnHdStvGuqwr3zJ+y80bx/9T4n7/evPOwUwD68cL/1c9BsVo/R9OyJ2gKpcKJh94Em5mTrA47+YuYbn4CSXUAjqz5dsLw1tkjDnlxEvHczyb6jbW/Yz+U+yVq6ZHs4HDh3ngyiobOasca05bLtvn1mBHDOQgDmac+xPDWIwky+hWLTwP4t422fhYCUt/2CGup4Jn8f3CrehwPiA698nACHW+IcJ6GO6IWT+S2mWpzJT1v9HnYxHuyG/WR6fBqT6jsOo6GbdxzRi7LJt4r60+w6ljAh9bed997QdWxiZmF0NnHcNCbU0aiYns32RudT+bHtDN3j5CDMVoUu5t3Tbt6RjuhFgxLMmNPeiJOFd+j292Hk4g3DeEiky8aA4R0TMoj6ue9N4gTNYXjo4KQ5iPadvIfRIeU7ZhKM7qP1IPfeJG8hJNJ2XwoxYbzr5K2jLSZrB01yujEI+ec7xVmuY216+4c3jhYsXb719q5I9jbaT335N/mfvvX50RNGrj7DLf4VBJO/ZGjJA6KAhWqDG/1Da1tzfpWD0D5te6tMMLkrbPlLBFhMhLs2a/oVuo5lCbg1yzwCVDyfvuUGZXi7/V3vNjjc1ejmEGmG+XESCtFOBYaq/H6SYkVDuvFEpwxGn4KY5YRqxaM7DEvbEoGlZp0b3e6EUDTfVr3i04vCUdbWbPp4ayHBqQ41ktMXTgtklAjVwKcbDu2863Vu9LpMKx3GbTUC87tFZceG0VkYoSylvpQZjk0lfjocpoFjofiHlUadm70D6zN9PfAZxKG5npRyMknTxnKfPEaSY1O5qsDTnDwRmoHPQTgobAfMUslyvcb24LDUlyLQ8BVRHBKRaj3yGMW4mnGsmahAnLZjMFUvQmuSBY7pYwtEaFcVh2FvogLxGOOJZq1eZ3+4R1jiJ080TV9Q9InRyVLOBAYjkm0HvYLqwmOMJzErlX20JlelOHv8Pooz9QPCeI9opCbJ8jY5T87XYur6SuLLad4+mi8cnONf757hI+1X+UTnZWpqPKpeH9b4hRvneK4/z/943/+Xtduw1fhdkexbaJcPd/jfvvv7fPbaC8Ra8+jKCX7kzEOcmlviYDjIaTW+n6GhQqzBCZhnAdsNNbVBHKJEbku1S0/KRX+paWblHd1m3nZ/G97uxHH9KDYiuf0ADnykEoPS6FBMYJK9CJXdEKXo33oKo5QwSJO0FbUlY3+PRKx6oq2k/UEU4alkfGuYmkmZ5DQL78m+kvc9lYzvWXjnPpzudBBFKCXEcb767Kgpyf9bF7QjMx6bUmrsb5i+CIhp2/g7aWoSknx3GId4YjQYLk5S4supYyvBKDH+lhGnonY0gzhCZ4KibFtj3hGBErROKwKP909NckoFsDaMCHiZdkhwhrciTLLpphWIJzEAg3iIFj2qnJy93Y8FuaHJlKwjRGsmQ4JULJvyFh1nEGOxbYoRAT+HMZ+lPo71INGfxAmnPAYA3UMkxqecd1+b68n/tXuM39zb5J7aFg0V8npY4/l+Z9R3N3LPlN9ue3eJ5xbab135Nh/8tb/F33n+3/H1rat8c/sa/8t3vsCHf/3n+WcvfYVTc0vO3S51x97/1FzJ3CI0y458IkqEtXobZWlLgNX63Ay8Z4t1XTleQh2zMhPvOWvBMcHkbXDxNrkt3DYTb0dlZCXC+gy811vN8W4uLei+h+76MPRILybVLG8p+EtslJumBBPGMauNZnlbKe/m3HicFGAEWGu0xrxL+sslO7PwHuFKMMM4ZrXeHH+ljHdjlvE95p2mX8/+GT+Ox3cZBhjrx0p4R3HMWn3OyXutPvZ3WV8r1bnRclkp70xpDTtv34qJdMxKbcy7CKMQVmvt0fgu62upgLeawHkFvCcxhncwhVE53hGLlU6O9yRGISxW5nO8JzEA7aCTLJdNY8a4/DgxGJ1rK0bwpVqAyewGI6bqr0KOUx4jKJS3SXobL+O9VmmMeA+0x+93l/nswTrP9+dH7XuiWKm+K5L9D9YuH+7wZ373nzKMo9wTe6Q1MZr/+gu/yvnOinOR5NGVY84gZbXW4lzbUfxJhA9s2MWPsdZ88uS9dkEm8LFjF528H1o65qxmvFJrct4hNlUiPL3p5v3Dp+5z1rT5oaN3Onk/sHiUlrMKc4OL8/apT8VsvD95ws37o6fsYluA+9c2mKs4eNca3LXs4g3PnrwD27pErDWfOnePc5x85KSb933L63Qq9mR989V6IpItNwE+fNyeITPWmk+ddfHWfPjYOUvIaOzepXXmK/bkcZ1KLRHJ2kfdh49dcPM+dZ9TuPvM5jnsVZg1dy1ssOBIMjgX1Lhv0V5BHODZI/bzKUbzx44+4BTuvm/lgrOa8bn2BguVJjatStOrcXfnhAVjPvmBlfudvJ9efdzJ+6HOvY5qxpoj9eO0/Y6VU1XVOd64aG0HNKdaH7C2o4lZbH4KeyZZzYPz9zirGR+pHaHpuxNk3m57d4nnFtk/+u4fEOnyIS4i/Pxzv+Ns57t7N5xC0pu9A+cSR6Q139y+5uzv373+khPzB9cvOzEv7t+0bg0GuNk7dC7fxFrz9S0379+99qIT84c3XnNiXtrfYt/Be6t/6BSQxWi+vn3V2d/vvPga+sBHmuEogVxqWoP0FX/w0hvOwOrlnS32wkFmSnfcUPre1vAQ2be3EwNfuX4VRhfe7I1Dj97/7csvTb07+frL16+6ee9vJQUxy/Ueu8Mur+5vW9vRwJevX3Hwht+9+lLh+9nXX7k5C++bTrH47rDLywdp9eyivkALfOXGJStvYXJ8F+O+sXMFnbs5Tff36sHNRNxa7u+DYY9XDm5Yj00DX916NWFdxlvzxRvfJdn4W8hbEL61f8WpC7vavUlXH4y+V8S7F3e53HvdihHRPL/3YoY3GZz5jkLz9Z3nUMQF1YXHvF/pvgwSgi7GAGwPr1HzdnPtT2Iifcju8BWrL30Jud79CpOpDCd5H/Z/G0UaohS39erhq8TYg48bg5uEcYjvKItwu+1dkewtsv/oN3+Br21dsWLqKmAQR85dDLfCkkk/64VAMFtodxwX3rrnM4zj28LbS9SRti2Ws/Kuej7RDLxvhUjWE/Ns5eqrtdth56CP1COkFSJ+cuOKQB/66H2fiu8ToQnLEp6B0YOk18nEVbnMrOmSwWQyywnzlUI8PZFcLXshNNauV9np9y0IqPiKGG1PNjglNk1bG/OeRWzqK4VSTIipp1nNV6tsD3qZtzOY5J8Vz2SPmIW39b5aemzj/gKl8NSkFmma90LN5EqxYSqeoCXLexojOT1Itq0JjJrE5C1QiqqvR7uU8sJVI1oFWKjW2Au7BaLc8auKJyixjxOlYgLPaC/GW2THvM1Sx1gkq7VM9adE4ytF09f0I5NrNS9u1SP56XK1Qjc2WXInMeY00tS8mKoXEo0SsGUxpr+KimgHZrdmlOM0FuQqiVmr7CYYlRPTCjGexASiOF7dJY67xEgSOGV5xyg052shDa4Ta51sNs5izOn/2/t38Jlddx2hv3zP/4djDfdM2vdq74pk3wKbRYh5eyNBcfZnrqNvN97u/mbl/X1VIRd1NxPGPNXoro/ueklWVQ3R+KJYdG9j8r3s6+S6nQtOJjGWdibv2zmgFGOm7ndZzAy80yAkK6ScChSdvCc9Pv0L6Ey7egLzZvubFeM6thynCX9PCVstmPR5eYwrP7aituyY6XZ07nUuCstwyrRdyjvff1l/6WtPtJO3WDApbwFE23kbcWsxJtu2yRRr5+2XcJIcJsbLPNTk2kmy+3po1ER180lOhvf4de7YZrwM3o7NBG/W3tWg3CJ7bOWEdVVVgPPzq84n7LUZCvMpxKn3iNHc4UjmJsD5zpqbd8fNe5YCfwqzZdlmkY5vHe/5NSfv5aqbt5mxuTW8L66sZHgLxAJR9gkKLiwt558uJfOX8q41phufwAB0ssXrCjChjjm/sDx+S6ZxAlxcWHFiLiysOHkv1vJ6iCIRJcBCtnhdGe/5lcnDzbcNXMhgikSbZpys5MdJQX/zlXq+rwKMYLaR244t1DHnO6tuTu01J+ZcO39eFvXXCWpkl//K/L1YaVoxoY65Y87N6Y65dSsG4ExrLSdeL8K0vHpOp1I6ToI5KybSMacam07exzMzB2W8j9SP5mYhijCBaiKZ22oRJkZo+ksOTMRc5Ryj60IhJ8H373LyPtNccc6e1L06G/V3E7X9B2sPLh9N9uwXf66B96yecrZzvr1CwyGSXak1OdFasGI8ER5ctk/XaUy2WVvcrIH3rLl5n+usOYOmpVqTE3OLVowS4aGl4qRCWU7PHLnDyfuJlZPWdgDu6Kw4g6bFaoNTc0tWjEJ4eOW4FaOBD506S0z5bIsGnjh6zHrjBTi7tES76uBdq3N63jZOzPT/o5tHrXw08OzJs2jyT5ZTvDdm4N1ZpuMQm85Xa5zp2MaJmS5/bO2Ycww8e8w9vh9ZSXmXI890lhwVf6FdqXO2bRsnhvcTqycsPZntqx88cs7p74eWjjnFpqfmlp0i2XZQS4Lr8lEgwGPLp52+/MG1C1beAPfNH3eKTY83l5mv2B8eml6N0y3bTdXwfmD+vNPfjy7dy+Ss0KSdbZ1x8Ia16ipz/pwFo6mqGqvVk1YMwJHGIw5MTKf2ISfv881TTpHsSnWZipptB+nttHc1KLfI/uvf+1V+6eUvjyp9ZqfX0unFU60lvrtnF6PN+dVERGi3QBRDx+zARr3Nle5u6ecCXOis8tzOG6VLJgKcnnPzbvkVp9gUZuN9pNHh0uFO6efmyXiN57avlZ6WApyaW+SFvZslCGNNL+AwtouSASriMdD2HCZHm/O8drBd+rkC7lDH+Obl6+NxknyWTtcjcHJ+gRd2tkbfm8RoTJKublyepMx8UVMNPPphNpNotjXz8th8h1d3dvI8xgiUggvLKzx3841RErZJViJwsjPPi7tj3kXW8D26sSuHjabm+4neoYQ3cKIzzyu726UuUAIXF1d5bvtaaRVmAY6353l5f6tkbU0SPh59R54b0DQDj0MH7zOdBV7a20o4TWM8JVxcWOW5nWvl/gaOzXV41TLeAGrKY8jQqUGZC3z2w3LeSjSn55Z4+eC6xd/Cxc4q3967QlTiS0FzrNnhau/mhLYk6wtNzVNoGUz0NcEbzULF5yDql/I2szqLXOq+kXAq8LcI5+dWea37GmEJb4Vms9Fmf3iNMBcUjvsVNHURWsFeoisp5u0RcaI2pBt30VOi3IQTMXc32+wPX0ySuU1jAjQX6htU4i8TUaRDMnM53+k/wP9yfQOb+Xj8rYc+Td23B7O3wt7M/fvdGZRbZF/bupK7CGZT2huhF7x2sOPMpzFLcAI4b/IeYg1OwAzhVw92SoOTFPPawbaT9yzBCbh5+6K4fOjm/dp++Y1phJnB3weOHVOpuYITw7s8qAKjtH91eyc32Zp99kn//dreDr6nSjGA2eklTC0zALn3+6NkZhO9JJ/7nuLS/i5aMSrymnsek4T33o4RXI/6yqBEo0Xz2v4OFc/u724UTvOdNIHeKIiZ9I6xEW9LWzHw6v62fROmwKWDHZMvpuTYUj+6xNQiZIKvYt6BUiaIlbGwNIsRMc/0rx5soS3+RmkuH+wQOMZ3P0lSlp/2H/eV/nXjYZJnI85gEoGoaAKluNzdsv52Gs3lw5vAWHya5a2IUaK51tsmUGokdM0fv8GEelzcTzI9QGZ4C3TjfvK6wJeJv1/v30DEiE+znASjbxGJeWNwHUaYPCclEUrFbA1u4CsPPzm+tD/BBBSm6N8g0Y3EOYw5fm1wohnqQ5NVNsmBm/ZnssjG+OLRC1/Dl4gKYdKW+fPQVAjxJCKOX0ZhErWpyWNLsJf6e8nmg3ILibjWf8OKeSvs+xKgXLp0if/4P/6PWVpaol6vc8899/DFL35x9LnWmr/4F/8iGxsb1Ot1nnnmGb797W9/P6jcNqs7CqCB2Xlwu0yLO7mYQsaJvCzmO4oX3kqL0fiOO4FCzO4TR1uu47+VptHO/gRzY01nSgr/MCXiRw9MZX/ZB2uBkWRfMXlVt2K01uNxOYlJcOmFXiwYMP6OE2Ff2d8UpxIfuDBTvAv+pniX9OWLYlQRV038TfCe5dhsGM34OiBiZqeyfzLi7SFIKScw52U2WbzVlTLdXxlvT+nRn1K6kHfZ8fsZ3kpMivj0L8V4mXGiJvsr4aQyf2W8VQFOM076lh6bn/x5aszJlzFvg4lHfyrBKBQ6Fa4KBKIJRONnErGNsr0mx+9LPPpLk6zpDG8lRigbJH9eBiNi9rAo0VQkoiYhNQkJJBpxggCShScveRVAJmCBisyWTfvtuMRzy6/gW1tbPPXUUwRBwK/92q/xjW98g5/+6Z9mYWFhhPkf/of/gZ/92Z/l53/+5/n85z9Ps9nk2Wefpdd7+6XandU+uGmvrArwnrXTTtHmnZ01Z5bYuhew7hDTxlrz+OpJOwbNe9ZPWzEAT62dcvI+31l1Ruk15bNRt0/pzcr7vev29XCAp9bd/j7XWXEGFlXlcaTRsWIirY3mxUJKA+87btMfGHvfsZNO3mcXlpwBb0V5HJ9z835qw62ded/mKSfv9xw54azAe7qz6AyKA/E4ObdgxURa856Nk1aMBt674eb91PpJJ++TrYV8FtwCC5THaYdWKdIxT63azzkNvGf1tHVmE4zGysX7WGOBiiO3hS8eZ1r2KuORjnl8+YwVA/DY0lkn74cXzzjzoKzXFkZZYsvME4+TTbuwM9Ix98/bq0cD3N2+08n7/NydTrFpO1gmELs2TPBZrrrGQMRy/UkrBqBW/QHsidrg/s4dzmNbrCywUXsHiGT/+//+v+fYsWP84i/+Io8++iinTp3iQx/6EGfOmMGttebTn/40/81/89/wiU98gnvvvZd/8A/+AZcvX+aXf/mXbzWd22arM+y+OdJw62UWqg3nDbPhB7QdQkNhtp01Jx1iW4DNGXgvVurOG08jqNBxCPaE2XYynWjaxbYAmzO0sxA0CJRn1aLV/QrzM/BeYd5MsBa0pTXoCE40FyYm/XNdAbDeak28M22LtVo+3X2B1YOA+Zqb93or9VMZK83Jjj3QAdhspuOknPdCtU7VURahFgROQSrARsPmp4T33MLo38UYo9WyPxIY4W7VTysvFpmm5vn53UelvN3n0/EZxvc4ZX65v+crNUcZCk3V85ivNKwYgPVaG7svNceb9gANYKXWdvJuB/WEd7m/K+IxH9iucYbTWnXeyXuzseLELATzmWWUYmt6TWpexcrbF4+GZxsDpr+Wt+rkVPVPWtoxtlDpYM84DA2vgbjWMN8Cu+Ui2TvvvJNnn32W1157jc985jMcOXKE/+w/+8/4sR/7MQBeeOEFzpw5wx/+4R9y//33j773/ve/n/vvv5+/9tf+mrOPt6NI9sc++7/zmSvftsayK7UWN3r7Vowv6pYlRJsLquwNyzUtCmGj0ebK4Y6V03JSOdg2UDxRzro3s1o7qLJ7m3hnizeKMJXbIH2txHZZMtbcnmdXH6Lm83ocEUyhv+0q680Ol/d2ieP8Sk0Wu9isc7PXRcfpOs8ESkB5s0zbasQrDpiyNt+oslU4e2n6ViIcmZvj8sFuRvw4bUv1Glv9XpKPo4S3olSwmuWtlP34BFho1LjZ6xb8MKZvTwlHmnNcPtxNZhqKPG52O+0MutaxZFbd4kSoM9lO8lo0vidElgNUwGK9zk1LRWslcKTZ4crhDpEt2KvU2B12E39OH5skxe+QbAm5ad6CJvAp4Z2MAYTlRp2b/f2MuDWP8ZVwpN7mWm/bOrMzX6lyGHWT866AN0Yb4qkokzRtmrciphloQh2XcgoE1us1toa75bxFOFKfY3twg2EJJ4VmoVIh0nuZqsgTmGQppu13iRDGAthxf0KMR8yR6r5J+DYVOCS8gXP1iGH0RiKSLcacrbWpxy8zpFgj5wO/372Tf3rzVOHnWfvrD/w08xX3g8j3am9porYXXniBn/u5n+PP//k/z1/4C3+BL3zhC/zn//l/TqVS4Ud/9Ee5etWkA19by9cIWVtbG302af1+n34mi+Xurl1E+f2yfhTyG5ee5+vbVwmU4gc37uD+xSOICJcdN0uA3UEPJYrYciO/VcGJh1iDEzBLJa4LM8DusIfnCJxuVXDii7plvHeGXSfv7FTz5DU1+9p1T/VFsdcfoLVH9HrNZIoNYtAQ9z1034g1tns9wzsNeLJaEsz9b7ffx1fCME0YNYFBMLs70utW2X0l/aj4vmx4e4rdQb8EY96I0Wz3e1Z/i8DuoI/vCcPIwltnXlt4jwS5Dt7ZNf1xfxneg27mN55uTAT2hj08pYhLMpuaQDXJJJtUxM2pcyUeaRlSbUXZ/dlTyqTMtxxbDBO8CzgBe2HPjJPYbFzXOtU/jAPuGBOkCOQq+Zo29Ay8dcJb2Bt2jW4iXTBIfZCITzWaneGhnbfAQdQjUMIw1sm3xseUYlJNkEdagXjsbyHjb4xGJM2hPPaB4eQpj4Po0IpBNAfRPlpiPG36zlUOTjj1okPqvoJkN1c8amfsS0nGgo9GaxNgpUNeJbyN/6JRUrgsRpKQTIlHFO8YgfKonZSTEeCKAPEWIjFBcrpl9/IoQETYHoZ44o0KBpbZ9nD7tgQob8ZueYASxzEPP/wwf/kv/2UAHnjgAb72ta/x8z//8/zoj/7ov1ebf+Wv/BV+8id/8lbSfNP2+Tde5s/+7j9la9BNRHXwc9/8HR5YOsrPPfkpVmotvrXzuvVG1vQr7Ay71n6yT/Tfi8Vo6l5grevjidAMqhyGQ2ufTb/irEMyrgfxvVmkY+p+hUPLriBPhNZMvKvsOXhb7hNvyiKtaQQ++4MhaDFp6ycwngitSiXPu2BWtRkEZgYpc2Of4p29Mc8yM1uCibWmEVRMUFiCMf6ucBjZ/d0IKuyHdt6zcJoFE8Wauarxk5T0p9Jx4uLtVzgIB9ZdOtmPJJmVKMPpFFNgMZq59HwqwSgRWn6VbjSwziI1vArdaHz8UsBpknfZITp5a03Dq7AbdsftTPRnEkjW6MUDq79rqsJAZ3iXMsryLvO3jIKZIk6xjql5VfbDsBQjCHWvThj3iXM7ffJWUTVifZAR+05j9ARvr6CdsaxZWzAapVrEcT+DmcQpUE3Qe4hEo6Bk0lqeZ30oTs3kb3l72S3XoGxsbHDnnXfm3rt48SKvvPIKAOvrRohz7Vq+INy1a9dGn03aT/zET7CzszP6e/XVV281bat9e/cN/p//9n8d1cYIdTyaMfjKzUv8qc/+r3z46AXnje6jRy84RW2PrR4fl2wvsYVKnbOOrKUgPHPEXl020pqPH7vLGRB99NidTt4PLx93agvmK3XOte1iPIAPbs7C+24n748cvejk/eDSMWoO3u2gxoW5NetSiUbzoTP2asaR1nzijovOpZmPnjnvxDywuknDD7Ctdc9Vqty1tGrBmBvPh0/OwPv0nW7eJ9y871/aoOng3Qqq3Lu0bueN5sPH7ML0WGv+2Mm7nJw+fPSCs5Lt3QsbzqrXTb/CvYv2asax1nz4yEVrO7HWfOzY3U7ez2xcdJ4DF9obSSLCcn/XvQr3LRyz80bzzPrddt5onl23V48GeN/qXdhFm5ozzQ1aft3Ku6oq3Nk+5eT9xOKDVj4azROLjzoFsPd1HnLyXq0cp+G1rJx8qbJZv9eK0cRsNJ+18oGYeu2PQ8nyTmqPLd2b2fI8bQrN+eYyS1W37ul22y0PUJ566imef/753Hvf+ta3OHHiBACnTp1ifX2df/Wv/tXo893dXT7/+c/zxBNPFLZZrVZpt9u5v9tpv/D8vyPSuvBikFYN/sqWu+LvLLlCumHovKkOo5BeaE92pdHWWYjUXMspBuPeXdWLhkSOSsWDKBwVGyszDTPx3nXMRAHsz3Bs/Xho1QyACUgPt5LnqrJp+X2fw4Gbtwlyi56GGL03y2/Sj4eEOpuAbbIdIdQR/XjIeHJ7EqVnHiemMKOd9yz+7sXDZMnNwjuO6EfDEkyK00mCLqyYfMG9YjsYVVcua0cyvMst0hH9OJvsrIR36Oa9N+ji8nc3ujXjJNLxaJzY/d3LvC7G7EfucdKP+6UzIilmqAdoynyZLohEDONB7nuTOEHTi7pWDGi60YGDt2aou3ilQUz6vT7CoIS3McUA9OHE9/JtKSJ0vIdYOAka0bvOicgOu3y883LhZ5K086n5550V298Ku+Ui2S984Qs8+eST/ORP/iR/8k/+SX7v936PH/uxH+Pv/J2/w4/8yI8AZqfPT/3UT/H3//7f59SpU/y3/+1/y1e+8hW+8Y1vUKvZd6fA7RfJ3vNLP2W9sXoidII6NyzCNzDiz/2hffrzVplgchIMLdkvFWbXkIv3XFDl4Dbyrih71k4BFhMBrM1afsW5DDSL6UjQb9SgEqE6w1EFYjABi973kYOAwPetgWMqgL1+mN580qMZtQZAs2qW5krjvXSJIVfNeKIdYaricVbJnyYBUyLUAo/DMCx9oFMCS406N7pdphUDY96NSkAvGtpFsEnis3Ff0+0gk3qIaYwnQj3wOAiHpZhU2Hmjd1jOSaAR+PSjMPPkX8zJVfFXpqoZF/BWQt33ORgFhSW8a0ZIG9v8HfgMYru/RUy+D5svRTS+p0cJJScx5loiNH2TtVU7eO8MDgoyshqcEk3D94j0kIhUNzONURJT8WJTXbgUo6kl1YwjpjECBCJ0KorDqGflvVarchDuEOnsEswY50nMnA++9AnRE9WMDSaQmKoa0vF7RFoYam8K40tEIDHrwQ6xFoZ46Mm+iAkQztYOiONdBih0bi7BJHQL0JyutmjoNwgJp0InAXyEumpSR/F/7B7hV3eO09fjGfolr8efXvoWd9W3keXfQPwTfL/tLRXJPvLII/yzf/bP+Imf+An+0l/6S5w6dYpPf/rTo+AE4L/8L/9LDg4O+E//0/+U7e1t3vOe9/Drv/7rMwUnt9tirZ1P/ZHW9B0YMCXW1YxJc75XU4g1OAGjGZmF9yAKbxtvTxQDx0yMZjbe/fgW+TulM/CI31BQiRGjpkP3PdCCpxSDNGtrSjJriWakH4bjNXA9AUy+O4gjI9okLg4apOjf2omZmkURc8McpFlSZfoGnGpd+lFkAh4b7ygai01n4T3ZzgRmHKTkMTLJG6ae/lKhZS8K0cJEwDPGAAzT8xL9JjgVtzXuu4S3CIMku6uNdz8O0WJuXWXVjAdxhCcKTTwbpxJfZv+dbqPNhkWSBLLDOMyoJybaSb43SHh7SX/Z/UMjf+uQQEkiftWj1lIqWa3MWNyqc31N8vb0uJ08bzUT72E8gBHvCZFs0lekQ6qegI7xSHcYJX2hc7w90SjCCZFsikkCI9FUdIhGiCcwCh+tjS6qSkysY+LkEUNlOEHPiGSTJHI5kWwCEj1EVJ2Pd17lg3OX+Gp3kYPYZy3ocr66M076pvd5u9n3JdXmxz72Mb761a/S6/X45je/OdpinJqI8Jf+0l/i6tWr9Ho9fvM3f5Nz5+y6g7fKlAjHmvN2DMJafc5auEuA1XrLudul7igUmJormVuEZtmRB0VJwtvSlgAr9Tknb5eOIzVXjpdQx9OVeifM8G45/b1Wc/vblUsEAC+TtRSBgYfu+uieT7qTIYxjVuoZ3jLxl/Jutsb+LsAIsNpojasCT2KkgHcJBhjnpinBDOOYlXpxJVvJ8m64ea81mk7euaRhFt5pUrRJPpLlXWuNmyrhvV5vjy/UBRiAlXprvHxTwinI6MLKOM3EW8es1OZGh1rIG2G13h6N71Le1THvsv78GXlXk98lfT+bjRWMeH25Os4XU/SzKYSVap73ZDsAi5W5Kd6TGWKV5HlPZogd+ztw8I6SPCB23vOVBSTHW48yv6bW8udHO2FMsGky5GZxOvPMn2L8iUy6MYIntVxf05gI31sdsTQZZ/MYUIhaJ72Niwhe8pe9pmu1BJgHupqKeaR5nR+Yu8rFWiY4wQfvCG83e7cWzwz2xOpJ69RujOZPnLzPupSggY8fv9O52PDI8jFnkLJWa3GuvWrFeCI8vWEXP8Y64W05OA18/OhdTt4PLR1zVjNeqTW50LHzVghPO0Sysdb88Az+/ugxt78fXDzqFD8u1xvcubxqbUuJ8MHTZ62YWGv+bxfs4kcNfOy0K1jX3L+6yVzFVc24wd1La1aMAB8+fgel6zsY3p86axc/auAjx92871tap+PgPV+pc49DJGt4u0Wynzp9r2MGTfPs0fOWUNdg7lncdCbrawd17ls8gpP3kYvTs1lZ3mg+efx+p3D3A+vnsSfg0tzV2WDBmoQNWn6Ne+btIlmAZzbuto9vND+0+ZCT91NLdzqqMGvOto4wH7QsGGh4NS46RLIaeHLpISfv9y6/x/qbgObu9kOJv8twmvXaSVr+vBVTUXXW6/dYMaBZa37EgjHMa/VP4do/KZUfxCTCt5h3B6Lm7Zi3wG75Es9/iPby3tZoijQbUaevtYbPvf6Ss50/vH7JiXlx/6Z1azDAjd5hIsYrNyPefd3Z30y8b77mxLy8fzOzrl5sN3uHhM5lJ81z29esGIDPvfGyE/Olm27h8sv7W07e2/0e0d4OQG4qOn0Nxt9fv/766PI1iUlf/84V9w60L71xdeJiOd3jK7tb7A37I1QRp+1BF2WX6aCBr968lrRQxlzz7665/f3lm9fcvA+2EjFtOfO9YZdXD7YmOOQxWuCrN684Of1ubnwXH9/Xtq44eV86uMn+0K4d2g+7vHpwM/NeAW/g61uXSLfHFvER4PPXX3Dyfm73KvmbUwHvw5vsRYdW3t2ox2vd627e2/brgAB/uP3d5MiKx5MgvHBwCbPzJDuvke/v9d51+voAG+9e1ONq9/XMe0W+1Lyw/wJjmXgx5lt738QslpXzvtp7EUWYVCou9tPe8BoNtWPhBFF8wP7wZQtG8IjY633JyTse/DsqyWJSkQmCip7HtdOH+ApaDxF5e9XjueUi2dtht1Mkq7Xmwj/9y7mdNeP14+Q1MBfUnLlC6l7AMI5uWTI2myWTfs5kT+2gluzQKLe65zOM49vCO126su1kmpV31fOJbgFvHQrxjVqR7GL0lqcEPCGM4lIMQKdRZaffm/4g84Vq4BHpeLxcUtCSFsYC2Awq12RWJFtinlJ4nmYYFd3oxl/s1KvspMkSy3j7ikhrK+9pAew082mx6URbkhQBVMIwsl9452vViZ0805wqnkmdNbTwlkKRrIV3SX+BUvjKaHrG744x6b/mqzV2BtmdatOcqp4CMf6ebCd9JaLxEgFsXiibYIQCIe10W75SVJU49XiL1Sp74WHhsaWvqh54yozvcabY8fELZtkk8OJEx1LAOzm2VCSbx4zb8pWi5ccM4gEamRDcJsszaFaqAf14n1hPCm51UhNT0/Ai6p7ZzRVn6jWbvpIqwyqk4/dGwt1czhOSqscSsxbsGFGySd+W689gFKcrO2h9SIxJzZbnZBicrc7RYodIR4QTYbaH4CMEUiGQAFeQIkv/BxJ8/6UWb6lI9j9Em1TJF9ZasU7FpZjbaeUb+VIz1/+3I297j7PyduZ4f7OWudZO3jdFEjFuESaDS3fP2NrXaTujtgoioxk4FWEm35O0+Rxmur8cpoT36DyZgXc+yNe593IYsWF08bFleef4TACzmByn6YeRN83bgtHZ1xOcshyK2slhkptnKs508Z4Uyr4Z3qN5hYmHsyJOrmPLtp1mirXyLuE0GyYJDgTSLbVlvIFRdtdy3mJ0LhPC5CJO/gzH5hGjCtsZ8/bQqIkssJO+9EShkr7SU1XyP8QM5phleQvsXQ2Kw0SE+xY3nbjzndXS6zeYAXO+s+J8ml+t2dddIc3YaNdNxGjuaNsLdxlOM/Burzp5r8xQmFCBU+8R6Zg7HEnoDO+1Gfy95uS9XJ2BtwdzlQxvyfwlFsYx5xaXijGZi/yFxRVkBkyY3clU0N/yZBHAAowgeb1HEW8dc25+2c1pwc37/PzE+C7ob7KYXpFgUzBF7myYUMec68zAKTu+SzB3TJyXRf3NV+q58VaEAZNE0cm7PeZUJFoV4FxmfJdhzs6tOnm3/RpZnUoZ78VKsVA6y/tMy83pTGvDigE40VzPideLME2vltOplPGeD+asmEhHHK0fcfAWjtSPFbaTbWu1dow4cxMvwvjSQjK31SJMjFDzlq0YTUg1uEg6UIs5CXgXMu0Ikghks4X/tHcGV/ChpQW+u7L97bZ3A5QZ7Py8PfupBj545Lw1TtXAe9fc5covdFZpOESyK7UmJxxViD0RHlw6ZsVo4Jkj55y837N2ytoOmGDAFTQt1VqcnLNnK1QIDy67eX9w0837qfVT1iAG4FxnhRb18ocMDYuqxekFB28RHtk8amWk0Tx7Ki1HX9yhBp44cszJ+47FZdoOselCrc7pjpv3o+vHnL589vg5N+/1lHd5a3d0luk4KnHPVxucmSFIfXz1hKWnxN9H73DyfmzlhLNK7Zn2srMSdyeoc3bOfq0Q4LHlk07ez2xccPJ+aOlEchMvH7yn5pad4t45v87plk28bpYnHls67eT9/lGW2HLkvZ1TDpEsHGus0rFWKjZBzMnmhqUvw/u++YsO3jEPzj8IDt6nGued/l6ubtD0OlZMVdVZrp62YgBW6k84MDHV2oesnAF08DBXh63SQp+xhq8N7kXEfj15K+xdDcoM9uyv/Rzf3btR+rkAFzprPLfzeunSg2Auct/ZvV74eWpzfpW90J0hMhDF0DE7sFFvc6VbXlhxZt5zS3zHcvxgZkZmyZRbEY+Bo2jVkXqbSw7eF+fX+Ob2tdJTU4BTc0u84ODdiKvs3RDUQh+88fTw6KwIhWirSsXzGYTReKo7+Ti7rHJsvs2ru7uZqe08Sinh4soy37jxRmbqN4sRRODkwjwv7GyNGs8jzH8bFZ/DaFiwjpSdL9bUAo9emM0kOsFc4GRnnpf3tkuvc0rBxcVVvnnz9YLEYQlv4GR7nhf3bma+Oc284ft0nTlsNPXAd+odTnXmeWlvOzO1P+3vOxdW+eb2tYIkbBnec/O8fHCzIJlZnnfPIUwHTdMPOIztIvczcwu8tH+T/IR8hrcIF+dX+dbuNcLpdTNIntGPz83z2uGNUfG7Yt4eAz2cXNgg+2MLmjk/4CDOZkDNc0qvAy8fXE90HNMYT4QL86t8d+9KRkM26W/NseY813rXcwwmedeUQmQwUe03z9sjZqFqkt5Ni3JTTpozrSWudK8R5frIYBDOt9e40n25IMFc6m/NRq1DP7qUqS48fWwNgTl/d6ICcZ63T8TJap9u3Eu0JdOcKhJxoT5PP/wuYcmxBcDp2kUa8XO5mZ2sCcJXevfzSzcb/MT6l5lTw9HW4libJa2vdef5G2/cz1976Gepe9//XGRv5v79boDisFhrzv+T/68jRoWWXzWF0ixWUz6hvk1iU8Raqj21WXhXlW9Em7eBty9GaOnSmMwSyFWUR6y1vZpx10PvVkC0qUBcC02gEonJddJNMj1mxaaT1MRU140lNjfCogcxMX9ztYC94cCKCTyPWLQR3BZhgCkBrC7G5ESbBW0FnkKLNjcUG++0oKDFAmVEm0NLor1UV2L9eRPeNkygFCjz2+oS3pLw3g/7pXIkEQiUCQyH8XTCs9EywIy8ldghgSiUise8Szh1KlX2w95I3JqFpnk+fGX+bXjLRBt69F8vMwYKh0mSX8MyTAhEEXiaoY6SjLOS+1wS8XOnEpisrRq0lgneBuOLxldkxL3TnLwkk2x67DHj/lJ5qoim5o9FspOclGh85dH0hoQ6TESpY06StiWwWPEY6oPRsWWzuyoxFZPrakhDxURJdeEsJ3OV0FRVSDsRyU5iTD5Yk5V2s7I1woR6LLj1iPElRonP6WAL6BFrCEdiWtOOn1RxPhl0aHKQzAPlr5sKhUL4lZ1T/J+7Z2hIjx+cu8JTzddpqJBrwzq/tb/B5w5WiFD8d3f/RU42j/P9tndFsrfQhBlSxotkEnmVm6dUbpfH99O0gI+y3pwVMk7kZTFPCY7NErfMNBpfhKElblbM5m9flHO2ZvxQklQgPrScEpMPqhnT2iRzG+hodFMv+rqvPHOfK8FA4u9Yl7YzK6cRZAbekZO3fXIbTDr0YUbcORPvf09MjLlphjoeBw8FXw8S3ra2PFFERIUahzfDaRaIxoyBMIpL+xLM2E15l+E8UcQj3vaAPqsTcfEuwuikv6E2/RVV8gXwxcvwLsZ44qF1prqwg3caSDgxRf1pjSceYdJfUeVgw8kn1AJJsFY00hUeOvG3hy6pQjzmNDNGiq5RGsSHZJajUprrJMBcEWO8Em8GYrL27ukKv7Jzgl/ZOVGIS5PevZ3sXQ2Kw0SE96/btSOx1rxnzS0wemrtlHMW4mJn1ZrZFaCufNbr9tLYsdY8tlo8EEcYNE/NwPs9a6edvM+3V53ZbavKZ6Nuj5gjrXls9aQVY3ifsmIAnpqF9/LiDLw9jsy5eT9xxK2dee8Rm27C2Ps2Tzgz4J6dX3Jm5a0oj+OtjhUTac2T6/ZxooH3bth0E8aeWj/l5H2qveAMigPlOTVWkY55cu2kFaMxY9fF+8nVU84CnSeaC7lsskUWKJ9TLbswPdIxT6zYzzkNPLFyxsn7saXTTt5H6ov57L0F5ovHqaZdOxPpmEcW7YkfAR5euMPJ+/6FM876WCvVJecN0xOPY/UNKyYi5q72nQ5GcGHubues7anmPejSQMFY01/Dd2o5fNqB3ZeaiFb1fY52gOp7cCVqe6Bz1unvxcoCG7V1d3+32d4NUGYwl8gM4FTLXar6WGPeiVmuNQnEfiFsBlU6gX2tUIA1RxADcNohWgU40rDf5ACWqg3nBbwZVHK7M4pMwBl8AZyagffmDO0s1uvOdPfNSsBCzXbRMRO0m60Z/D3v5r0xaqf8orJYdfOuBxUWJnf7TJgAm01bf+Zp8nR7cfTvMsxG070DbbHSoOb7Je2Ytup+wNIsvBtp0FjO6ZQj0AHYaLqXieerdeqenXfN86Z2KU1zgs0ZzqeTrSXs/ob1esc5AzFfSXmXc6ooj4WqLdus6W+j3nFw0hxvrjh5r1XnnaLkTlCnZg1QNIH4jmyzhsdqbcHJe6O25sTMVxedvJtek5pXsWA0gXg0fNsYMMtFDX/Tycn3TlraMbYUjNP4l/Nu5Hb+vF3sXQ3KDPb4P/8Zrlsq5yqEjUabK4c71lh2tdbijd6+c43aJX6d1eaCqlU3oBA2G20uO3iv1Fpcd/D2RDmfnsG9jA8mCZst6Z1C2Gx2uHywbeW9XGtyo3dg7U8NfYY37U9qGo14lGgGxkc036yx3euVHqBSwpH2HJf2d6wVaJeadW70uomQtthjnppFY6RRpbzHtlCvsdXvFnxi+lYIR+bmuHywa5aeCjiJwGK9wVbv0O5vRaYo32Q7yWsxy0W22QEFLNZrJZW4TTueCEeaHS4f7ljbWqrV2RrYK3qbJG3ZrJ7TvAWN7yXLcyWcFMJSvc7Nfvm4NLzbXO1uJ7yLx8BCtc7u0O5vTwDJJqAr8Deaui+FGpwU44skftovOOfGmM1Ghzd6NwkpGSfAQqVKNzowSyoFGFObBjyJnP6eC+IkcdrkzdVgAmCtXmV7uEOsJ5/HU95wtDHH3uANBoX9GW3IYqUCeodopFGZ5l2ViAV/n1ArYrwp3ooYX0KOVfYJdTQhAjYYSXjfUROi6BrDkmOrIByvnqQZv05I8QYFD8VnD8/xP113p8r46w/8NPMVd/D8vdq7GpR/D9sb9Pg/Xv06r+xv067U+Oixi5xoLRJrbQ1OwFxwtwddx0Qb7Ax6eGLXhdyq4MRDnKLG2Xl3nbxnCU7AHZz4othzZIiN0Wz3D28J7zDUk+L4vEnmo8L7hHnD9xS7g35+UX202DzmvdV3+Ftgp983eo6o5OlJzNJMusJjq2RbzpsM7zJ/6xHv7X7PBBaSvD9xbAjsDnp4nkVnJWbpUZKkmHpS/ZkrllaUcTbDWyl2hr0STIb34NCeTVlgd9jDVyqfe6aAt0q0DuNAJf04w1uX8TZveErYHXatv0mMZifHexooAnthF1+pUlGyiGnLS8fCFKlspd54JPDVmS5THYmnhL3Q8M4VtU6OP+W9Ozwwv12CKBgmHIRdKp6HjiM0OifwTYW0acI3m78FiBOxqOh0c7MkGBOyKOVxGB0kv51hpjPHJsmYPgz30BLjJ0MyW6k4FdL2owManoLk0SAVAUuGtxKjUQkkqUCcCGBNdtw4SfKm0YR4AkrrnHB3lFdWfHS8ZYoRak2EjK4bHnpc9VhvIxLja49UKGt4CwqTD+XmcIgn3qjQYZltD7dvS4DyZuzdAAX4xy/8IT/5h/+CQRQmwjPNX/3qb/EnTt7Hf/fQR50zEZ6YxGndcGi9GDb8irk4WUxhT08/q8Vo6l5grevjidAMqhw6eDf9ijONv8K1EjqbRTqm7gcchnberZl4V53BjlKZFEazzHCWYGJtliYOhoNStaHhXZmBd2B2KFn4ZD/6XkSpcaxpVAL2h+VbxFXKOxqMeRe01/ADs9X8zfB2cC87tghNyw/YG/ZLMSahYTJOLCLSulfhMHpz/i6DpnFHGadYa1rJ+eTi3Y0GTt69aDDb72/hZHhLLiiYPMBYa1pehb2wWyq4VQgNr0Y/6mdulNNW86oMdS/Tl/16V+ZvXcR74rzSWlNVNcJoP8HoqcYEoeY1OAx7xBKPgpJJC1QNzb6Vd27XjpgdQNO8TQ8QW4S7GpEmJH7yCzGKWFqgh4hESVAybW3PI57hAXLOdy9R3257x2tQ/uVrz/EXvvh/0o/MpGSozVZRDfzSS1/hJ//g13jGUV030po/dvwuZ2DxQ8fudIraHl05NirZXmYLlTpn5+yJrACe3rQLsSKt+fgxN++PHnXzfnj5+Khke5l1KnXOte1iPIBnNu1VaiOt+dgMvD989KKVt9bw0MYRan7x6Q/mctep1ri45EjWpzXPnjzr5P2JMxcd1XXho6fOO/394OomdT/AttY9F1S5a3HNgjGB7CxVgf/YyTudvD9y/IKzcvB9S5s0fPuSWsuvcM+ivZpxrDXPHrlQ+jmYY/vYDOfls0fOOyvw3jW/kSQiLPd3w69yz4K9mnGM5oObdtFmjOYjR+528v7A2p1O3hfmNmj5VSvvulfh7o5d4B2j+cHVe5yYp9dcVZjhyaV7sAtSNScbmzS9upV3VVU4N2dLeGZmWB5ZfMTKR6N5cP5JYscj1vm5xxxHplkMTlFTc1ZOSqosVR+wYjQR7frHrb1BjFQ/hitL7COL9znagc3aBktVtz7udts7OkDRWvNXv/ZvSp+GNJp//OKX2O7bn8IB53IKkFRxtVs/ipw3gmEU0XcksdJAz1EVGXDOMAAczJA4rheHTt5RHDmrMBve7oRvs/jysDskPvSKaycl73W3TQ6Qohn3dPo21PFMvMezVcVPRKDZHfbNtHYBJn3PNnuUWj8Ok2W1cuYhcTJOytYTDKdZ+tudxd/DwajN4r6EfhQ6n+aikb/tvF1Vv4Ekx4+NU/q72XkP4pBYZxPeTWMiHTGIh27eo/OpHHMwA+9+5Pb3MA7RjnES6zjhbefU0y5Oml7UdWBg4GxHCPUQpMzfYOZCIsJccrliToOom3ldhjlIFlrKeUe6hyoNBnTy/wME2xgAjxDhMPe9ybYUEcJe4axQihE0Ki5PaJnaIO47AkII42HBEuBbb+9okeyLezf44K/9nBUjiNEDWJJPKWCh2igR7I2tHVTZHw5uyRKOywSzXXNgy98CLFSb3HBobOaCKge3kXdF+daAQIClatOpDWr0mhzuxsTNAdKIRtoAEUyF4t0KeqhyCc9GU/RkLguiGendSlwgCqoVj14YJpjplkQJS40617uHo4tBVl2fFhJsVczSXGnKHEm0ASnvov4k4Z0/kClOSoSq79O1BCkCLDcaTsFxsxLQC4cTWUQnfCAUVPyd6G9G3vXAswZXCliqN7jZP5zIJJv3UzMI6Ecu3kkSNgunNFmZDWOWVdPspyUYjJB2q38wkbk3j2sEPsMozIil85hUG+EpTawp7C+LcfGeq3gchP2JisBkMLBSq7Mz2J/IyDpuS4nJbhvroZV3mqgt1mT6y7ejRFPzwiRR2zQm9eVyFbpRN1NdeMxbMDqHtVqNbrRDOCWENv/1RTPnaQLpEaEzFYjHGI+YqgpZ9A+ItBCNKhDnMb5EHA22iLUwTBQlk5gAOFsdQrzDoIC3wmRAWQ+OUmcX2wL7r++e4n/bss+QAfyP9/1l1mq2kge3xt4Vyc5oszyFK7AGJ2CGhmtGA8zsiBJxzjTcClOINTiBlLf7KXQQhbeNtyeKwUyzLG5/D8IIEQ+9X0EfaKRqkpHFocAwW76c0XUkPcLc9bXo3+Tf95Qy/h5dtyZaEhOA9KIhOnMDzj3ZJO334whPKeKJiqkjWCGn6f4mj60I4ykzOzDCT/YnY39rCwbMOaCUEMfpzS7fX5Z3mQB26tjKeIsZ3yMx8ERbkvDuxyE6FziM20q/OxrfvBne/34YJcbfWQHoJEaj6SfjZDyUpnkP4whPmSRcLk4qw8ncCt8sbzXi7YnOCVcl004/Nry9pK3x7X7MO9QhvlLoJCuti7dRmWSOv4B3Pp1wnvdQD0Y6jjLeQz0AifEtvCNCqiJAjNKatDZyKsgVGWtXjLg1ymDGbaUYJZqKDtFJC0IikhUQfNBGX1VFE+txBhaV+MXw6+FS/3XjeCaRbDey6yPfCntHL/Ecbc47k6JFaBatOQLMRWe1PmctgCWYbcau3S72nAVjcyUXi9DOSr2z8l6ZgbcrJ0dqLt6hjllyVEZWIqzVW25/t5pEaXCpBd3z0V0fhh7pXTXHWwr+Ehtlri3BhHHMcq1R3laWd1ZlOIERYLXeGu0oSbObZv/AJI+bhXfg4D2MY5az/i7j3ZiBd6018ncZ72yunDJMDlfGW8e5CtpF7SgRVmtzI95lfS3XWqOdXqW8ZTbeqX6sDBPqmOVqa/QTFfJGWK21R+O7rK+lipu3V8BbFfL2re1EOmKp0s7xVpm2Ut5LlU6O9yQGTAXi9GZZ1p+a4K1K2goksLYT64hOsFDY1ng4C21/gVRiWsa77i2Mat4YjMk6q3L9BRN9pZhsoKNQUsthfInxZJxdWBMhao10wCsBP/lTI06KWK0m8ynFpoH1asMZnCgUy1V7ksG3wt7RAcpCtcEdjqqpnggf2LCLTWOt+eSJ+6xLIBr42HFbVU0TuT+yfJy6o5rxaq3FubZ9Ks4T4ekjdnFvrDU/fNLN+4eO3WXlDfDw0jFnNePlWpMLnTUrRiF80CFKjrXmk8dn8Pdpe4VpgIfWN2kFjirM9QZ3LqUJqIpNifChk/YsmrHWfOr8PdaZKA187KT9+EFz/8omc4GjmnG1kYhky02ADx8/h+3YYq35k6fvdfDWfOSYXWwLcN/iBm0H706lzr0LdpGsAB8+csGKibXmUyfvdwp3P7R5wRLqGrt7YZP5wJ48rh3UudchkhXg2U171tIYzR8/+qBzSfUHVi9iT8CludjeZD6wP2C1/Bp3d45beQP84Oq99vGN5sPrjziFu48v3eOoZqw53TxKJ2hZOGnqXp3zc2esvDXw6OKjlr7M2H1k8f3Ys8RqzrUeTYKYck5LtdM0vEUrJpA6i9UHrRjQtBufsGAAYobVTyEW3lrDseZjNLzysatQPLr4MC3fnWjxdts7OkAZxhFXu3tWTKQ139p5w9nW5994GWBU3Ctr6esv3bg6LtpVgBHgxf0tp/jvZu+Qy90dJ+/ntq85eX/u9ZecmC/fvOTEvLK/zYGjmvFW75DLh3beMZrntl939ve5ly/BoXnKKvR3X/GlV+yVowFe2d3moFRsaN7bHhxy6WAn8940JibmGzdfz6x+5xEj3ldfdXL68s1ruSntotZePdh2FnncGXZ57cDubw18Y+saWJlrPvfGy5lbShFO+NrWNbTjTv/a4bZFuGre2xt2udTdtvSlQTRf377i4A2fv/5i4ftZ3t/cueoMZC8fbrEflglAzXsHYZdL3ZuZ90p477xm5S3AF7dexGXf3r+C2cFRxgmu9m6wHx5aeXfDHpe713Pfm2wHNM/vvpqMgXLeX935LpL5ziROEF4+uOTkfaN/nW64b+U0iA653r9mxShiXjr4DsUC2PEyzksHX8/c6It4w43BCyjKxMTmdTe8ShTbxgCg9xiEL1l8KfhEDAZfst6gFfA7Wy/zz7ZNgb/J/ICxhhf6bf5/Nyv82Ok/hST/y7ehmAvm+L8f/2FLT2+dvaNFst/cvsbH/+XftWJyOsQSE6Dl13M5TkZTdZkv1r0KwzgizExvTmKy738vlkxW2pNUYbK27jh28tQ9n2F8m6owi5nHdy0pze112DnoQyNCGkMkWRnTMegDHw58qoFPqLW1QKNWuuBHztw8BIpFsumPZCJLL5kTzib7yiBGrzv1qnNXWDUweQvGbU22lLzlqPg7LZKdNl8plKcZ5Con548NYKE2yXuaU833iEmqGRf1KTAtgE3byh6bTjK3Zs+NcX8iZulKKRjkqlhOc5qv1dgZdK2YqjJJrmxJEgWNyglJp3lnKwePc9CN+1MJb0/JhGZtmtNCtcaOI2dS1ROUmHEyFm2O2zHJvDKcCnjLiLcuwJi2BDNOap7RmMD0saX/WqhUk4BoGpO+qnngS8xQT/OWhHe2mvE42+qYt5ccWyqSHSc7y/gbTaA8OsGQQTxAIxMC32TpBc1yJWAQm2zZ05xMW00vpK6GRDrOCGDHGA9NTQ1Z9PeTCsRJJfSEt6DxifAl5miwjdamSnGU6c9gYnzxOB0MEH1ABEwq7nzMJekfbn2Arx02eLJ5hY93XmUjMGPmIPb4rb1N/vnOcSIq/OIjP883d5/nly79c57f+7ZpQzweX3qUTx39j1i8jVuM3xXJzmizij5nQaXSs9GrqQtZism8zoEKbkLfk4mzJXMyuvuzpWW/9SYzbXcbpYE/9NGHHtpLvhONT3add3fetZNB4Pg6Mga+CYykwWCmr8khoEnGXNlPPQpYNeSukXoKM/XadWwWTLqzCUm7yt50zX/TDKljOtOYkbAw11YeU8yp2N+pliDbX66dWTjpeHbeWUoTNKfbLeE0A289A+80k+4YU8CBsWDUQ+fOm0JOs/AuwUjKO/eNonAmU83a5m9JxJ4z8PbRTt6eBTNO5JZKVvPfTVGSiJJFF2PMaSlJNti4ZHwnwaFAhWgU9AnFvAPG2WsnMUZUKyYYmRL3GqDZnaX5nYN1fudgjSWvjy8xN8IaYfKYmopy7+xc4M7OBbYHO3SjLvOVeeqevTbaW23v6CWeM3NLzqRRcYJz2fnOSubklYk/8//n26sTsxB5DBh9icsUOPUeMZqzbTtvAc53VqcuwkUY1+zJikOQm7bVcvCOdMxZhy5IgPMry3l/R8r8Zf29uJxPXz7t7rxAtAQjCHOVqhUT6pg75peKMZmL/PnFzDgpwyysOHlPFdMrwAB5vUcZ787Yl0VCQwHOz686MefaK7lxUiTsnCq8WehvcsUwi9oJdczZ9oqbd2fNiTk7yXuaEp2gnntdxAnI6T1Kec+5fXnHnJv36daa098tv0Z2Wr+cd7HgOMv7VHN9zKnATwKcam5YeQMcq2/kZkiLMDWvPhPvtt+2YiIdsVE7Nmqr2JfCWu1EYTvZtpaqx0ci2bL+RNpk87kaEWweEyMEasWK0YSIf4HR9UwElfyNi/oJZzO/CQg3ohrXwsYoODHj5BTZQoDzlQ4b9fW3fXAC7/AApeYHHG8uWDGeCA8ule8hTyPkDx25YJ2L0MB71+1l1gEuzK/RcIhkV2pzznL0nggPWXinnD60aReSauC9a27e5+fXZhDJtjjpCPYUwsPLbt7PnrqDmPL5Jg2859iJzKtiO7+0zFzFIZJtNDg9b/e3EuGxDRtvs1XyoyfOkVYNKeP91OZxa9AIcG5+hXbFLjZdrDU403H4W4THV49bPGR4f+S4e5w8sXYy4V2OvKOzQsdR0Xq+0uDMDEHq46snnZw+tOkQpgOPLZ90+vtMe5mOo6p5J2hwZs6ecViAx1ZOO/399PpF5zh5cOGkQ2wKp1qrzFfsItk5v86Zli3jsJlZeHjJJgI3vN+zfK+VN8DdndNO3kfra4lIttwaXp3jjbTibznvu9p3ZWavi3jH3NN5JGmnnPfR+l0J7/K2FipHqHv2a0VFGrQrNmG6eb9Ve7+VD2jev3wv/kjPU9zShxfffuLXWe0drUHZG/Z59Jd/2lmgb73W5mp3l3TaenLqVRAuzq/xze3XS08E86S2zLd37cLNtl9lN8xrFMbTxeO2AuWuerxZb3O5W55pUGAm3mfmlvnOnp13y686RZsAFfEYOLa8HWl0uGQR0wpwwTvGNy5fHy0/pZe77FTpqcVFvrN9I7OCkN4+0/JdmlY1YD8aWq8DWjTVikc/jEaXp2x/KYET8x1e3tnJfJJHKSXctbzC12+8PpE4bIxXAqfnF/ju7k0rp0bFL0hSNnnx1NR9j26Uzcg5xZxTnXle3ttO3ingLcJdi2t8fevq1HJD1k53Fnlx78YEn2ybmrrvF4jAp3m3Ap/DXBbcAt7tRV7au0mZKTHj+7mdq6X7HAQ42Vrgpf2bE+9O8PZ8+tqVM0gzF/gcRtlMotO8T7eXeHn/RjJ2pzGemOvJt/auEI6IT4wTNCdaC7x2mPX3tNU83+T4mDrqvL87FZ/9sJy3Es2p1jKvHrxROk5EhIvtdV48uERYNr7RHG0s8Eb/jQyDaX/XlIdIf3JBJsdb0CxVFQdhn3yyszEnT2LOtpa41rtC2dnrA2dbm7zeeyGj9ZjmvVHtEMavMNR+IUaIaSpY9G4yzD3753kHRJyuDOjrQ+IS3hUiztdPEYXfYliSvbaCx1zlfr6+d52ffcME4vFoWScmRvHs3Gv8P1YCvJVfLWzjrbA3c/9+RwcoX7t5hT/+m79gxXhIkhXR5iaZ6QZdUz6hnlVsav9Zptb0J8wjSTzl6GXOr5rCdBarKp9oZt7fm/mikqREdubN3Ta7XUtgIRD4ilgSkewkLvWfIi821dMYnRXJTmISnO8ptMQmG2nRg1gyF96uVtgb9vN5pTIYEQg8D+3iPYMAllyCsmILlAKliXRxUjgwnOaCZJzY/K0UiC6vCjwjJ8mIZK28xSw92Di1gwr74eSNLgfBF0HEnpBxFk5ZsamNt1IQJknKivQlkvA+iHoJJq+cSHNq+CJ4M/B2cRLRBIkgVUOuurCknysvEbZG1nGyUAnoxl0jXC3grQQC0fhKCOOodHhnRbJQeFqiRFP3B6NMsnGOtxHA+sqj7Q+I9NBkpc2UAUyFrSKwGPiEen8kuM1XMzZViJtqQNMLiXREpFUilE3aEdNyTQ1Z8A5H7YwFvuMqxL7EHAtujjChkTMnmBifGCU+ZwONok+kNcNMpSAPCFAoERpqCZ9DLg/r/ObuEX6/u0SoFacruzzTvsy9tS1EBFl7LrfM81bauyLZGa0yQ1K0WJsnmshygitknMjLYp6ylKKfMttgcseUWsBDWYOK2XkLkX3S45aZRuOJPWutYAKC0YsS8yezu9pMJv77JjFaazylTEKkkv4k8bekbZT05YswnBTKujjZIBaMRhMk47sMJzDibdtG7CvFMD3+74HTLBiNCWZDHZf2Z3h7TjqeKCLi75nTLBid9BfqqFBTARl/R5IEdMXngicKfYt5m7E53Z85Lz2GOrK25Yk3Gt9eCW8lHjo9/hl5F+F0BpMGJEUgD4+I4UjcWsZJtPG3lwQuU1zw0AyT4NAEEjZOZe1MY6YvruO5nT6eCB4liTDFB63YDLr8J0vf4T/hOwWgytsmOHmz9o7WoJxtLztFqVo0jywft2JiNE+tnXL299TaKecsxMXOqjO7bU0FrNXtpbFjrXl0xc37yVl4r7p5n2uvOrPE1pTPuoN3pDWPrZy0L7kATx23HxvAU0ePO3nfMb+EJ/bToOr5HGm5eT9h1aCYi/x7Nuy6CYD3bJx08j7TWcJ38A7E41irY8VEWvP42kkrRgPvWTvl5P3E2knn9vBTrUU3b+U5tWGRjnli5aQVo4EnV9y8H1895eR9vLmQy4JbZJ4oTjTtmp9Ixzy+bNd0aeCxpbPO+c+HF087eW/UFkdZYsvME4/jDXvix0jHPLhor9YN8MC8Ozni3Z07nJWDlypLVMSuxVN4bNY2rZiIiDvm7nYwgtPN+5z+PtK4D3syN6h6G3hi11hpAuqBvRI3hKjqex0YoPIktlT3kRbCyvvd7bxN7R0doCgR2pbskFqbWYaNhv3mBHBmzr2P/Hhz3olZrjWpiP1C2AqqdBy8BWG97l7+Ot1y71A62ph3YpZr9Vw68CJr+BUWHII9AdbVQjLVPP251qAjOD23VLiSQua9o237zRlguVGn6tuzQzaDgIXJXTMTGAGONN3+Pjvv9vfmqJ3yC+ZStUHN86yYZlBhcRberRnGSSfNjlnmcc3R+txI5VNmi9UGdd+3YDR1P2CxZh8nAEea6e9bzsnswLOPlCONjpP3QrXhKEOhafiBoyyG8fdG3c37VHPZyXu9Nu/mXalTs4ruNTXls1ix7cIz7W9UFxycdBLo2HmvVuaTG08573bQSHiXj5Oq5zEf2K7Nxt8rVZcvNWu1TSemHSw7eTfUHFVVtfIOxKOmbAG42Q5d8U5YMMZeie7jRlgtnOFPNU6/03VneH672jtag/J6d48nf+WvoWFaiJp5bfQl5VlSFcJmo83lwx1rfL1Wa/F6b98apwfiFr8aK24l5S3AXKXKnqUgouHd4fLhtpX3aq3FGw7eo+l2h7lkEwCtnXl29CGqk/e5iAlOZLvGRnOeS3s7xHFxmyKw3GpwvXdAKS0BzxMiUh3DZEvmtRaNeGX6g/F3Fuo1tixJ2DyBI3NtLh3sWHPLLDfq3Oh1GefWmQZ7KpvMrpg3aHxPxrqYAt4isFCvs9UrTwqmRDjaanPpcIcoLuYkAku1Blv9w0Q/VMzbV5IpgljMW5LfJXYk4Fmu1bnRPyycjAeNL+a8vNLdSSoVF3NaqtXZHnSTZcXiYzNF+VJlVAlvNBUfwkLeBqMQlut1bvYPCs65Me8jjQ5Xu1uEJb4UYKHSYG+YtlOM8QQQN++6b/Q8Zb70EJZrdbYGe0RT63xj3kcbbd7o30wqFZfwDur04j3CXJXisZnaNJpAhYmOZfIBwghSlcS0faOLSTUjk5wCYLNeZTfcLuUdiLBZa7M/fJ1hCW+PmMWggscNopFmZII3mpqErPi7DLUiZvIBQlDEVCTkZLBLqKPRduD8sWkqaM5W15H4WqlINiDgH+/9IM8fdvnxla+y4vdHgYpgEtz93Rvn+G54lp+5/2cK23gr7F0Nyox29XCPVJw0GaelLz2UNTgBs1SyPeg6Jv9ge9BL1p/LkbMFJzBelS3mrURZgxNIeR/OwLvr5D2rgNYVnPii2O31AY/4jRpSDyEwN1jdV+i+KfS31Uv8LUmbo4XdpB+B7X7P6H5SbhMYxExdj6uiT9zIUyFq+tXC+5t5I/AUu4O+VQAaA1t9xzgR2On38ZUwjMue6CCKY9KVkulnjHGyrDThV85H6bFhtA67g541cozRbA26mUR0utCXO8MunkoDi4JbXeJvpdJAWk88FGR4p1F2CSdfKXaGPYPX6VGnVPSI9/awmxFcF3PaHfZy/p58UBGBWMdJZV1yFXHT/lLekS4TAZs3PCUm47SMpR6FvAcH5rdLEAXuZi88NLqfOM5h0s9FTFveTLzjwitKyskTxX54ONJNaBiJaUXikXZld3iAdvA+iA6oeB46jtDonCh3XFQvCVRFo3WUE8AqSSv+QkyEJ6C0TtIOGJxKQhZPeXTj/VFV5DjDW2V4d6NdkChJmjZOei+kGXlhEO/R8nzQYRL+jysVqxFfo62pSEysYyJtghkjpDU6GY8YCPEFPB0Rka9mbNryEb2NEqGiTYbmdBwrBIUgork57HItrPL/vvIgD9Rvcm/9Jj6al4ctfudglf04ALaT5ICTAdrb397RAUq+am7xjxejqXk+vWgy2fDYPBEafoXDcGjdfdLwA3YdaeUV9vT001bCW5upcltdH0+EZjAL7wp7Dt6zzIzMYpHW1IOAw+EQtKAPp6enPRFak7wL3NAMAhOkZa+OU7xlfBmVYszEF4p5x5pGJeAgHJSKCHO8SwSEYMaJa0dYtouZRZIFuFjrpL9B6bEpEZp+hcNoYPV3w6twEPWtfCZ5O7mXfB5rzZwfsBeO+5uEKhFafoVulneB1b0K3QzvMuFqjreFbjojW8a75VXYC3vlvBGafpVehndRc3VVoR8PStuZ4jYL75J2Yh1T86qjICW9sefbEBp+jcGgb+VdVVUi3XOIcvO8iwS3mvH5awKnyW+aoKyianSj/TGmgHdFNehFXRCTNL9I++BLnZjdjB+nOcWZb5rqF9OPI/Fo66AJtHyKAnqNliZaDxARPGRKJqtRtL0KCkUEfLG7zBe70/mDml7zj2RwAu9wDcqRZodTTu2I8IFNezXjSGs+fvwuZ2DxQ8fvTKaay+3RlWOjku1ltlCpz5Td9mlHVeBIaz527G4n748cveDk/fDycaoOMV6nUuOOtj2RFWg+ePqMFRFpzcfPnXeWKvjo6fNO3g+tHaFm0RZoNJ1KjQuLdt4azbPH7SLCSGs+fuqi098fPeHmff/yEWfV67mgyp0L9mrGMZpnHVWI43R8Ozg9e/SCE3PvwqYzEWHTr3D3/Aa2kDdG88EjF63txFrz0aN3Ozl9cPOCswLvnZ3NJBFhGU7T8KrcNX/EzgnN0+t3OTEfWr/XOU7ev+q65mjuaG3S9O2aiJqqcGf7hJPTe1futWI0mvetuKswP7qQJnMrb+lY/ShNr2HhDRVV4UzzrBUTE3Nv53En77s678MlgD3Vesr6OWjm/LNUVNvKSaRKs/qIo62IsPpx+/ZwYh5efNwpOH5g4QFHX29fe0cHKFprhrF9/6xG0wvLZ09SO5ghSdnh0L5UBKb4meuCGsaR2T5rMQ30HFWRYTbettmj1AZRSOxY5onimEFsb2tW3ofDIanOorgVOCytUjzG9OOh0aAUIszkbKRjhjPw7o4wZf3ppOKznZOZ9bJjQh2V8k4t0prhDL/dTOMkKqtAPObUn6GdQRwznf0ib5HWDHU2SVtRf5peNMi8LsYczuLv0OVvYajDRPNTxMlgYiLn9QSy/i7n3Y3d1wqTOM7OO9QhlPLGvC8xQ+3mNIj6Tkw/6jk4QYjrNxGiOERjGwOAjomwjwEhJozLqlCPecfxfrKwU46BQzxC67GJ9PAYWHl7DPF0L/e9ybYUMZ/db7MVFQtgIw2vDZp8s5sGzeWcYse16+1s72iR7It7N3nm//o5Jy4YrfMWm0JYqBrBns3aQZX9oX26+VaZABVPWQMZBSxUm9zoH1jbmguqHNxG3t7NFv1hOW8RWGzWud7tZhb7s5PUGgTmahUOwkFGbDmNySVh05kp43TpJ5nzljRJV4kLlDJViHthmGAm+gJECUv1Oje6h+RX5/O4VsUszUUW3qMlG9tPItroVGxPYQJ1PyjISps5NmCpUedm7zAzBgp4BxV60cCaM0hm4DSdzG26L7Os6icBXzFGISzV6tzsu3gHDOLhRPbTMUZS3g5OsyRzM8uqnpW3ICzXGmz3960haMP3GcZD67Ep0fhebIrK5USpybGlugjRTn/PVXwOw96IZZG/V2t19oZ7hJpCnCeahu8R62EmUJ32tycxNS9MkqtN81YY3s0kUVukVUE7Rri7XIVedJipQJzn7aNZr1YZRFsMtEz1J8QEEtH2NDU5ZAiFbQVE1NWAFX+PSCuGeFMYn4hAIk74Rig/zAluEx+h8VH8z9vPEMf7/Mj8tzhT3c2Nq6/3F/jft8+j1TK7g/1ETD3tSwXUvCp/88G/bRlJt9feFcnOaC5dBZiMrLbgBMz0Z3+GJ9V+FKEcSchulSkR5yxLzIxPvVF423h7ohiEmWRfk12KeasXheSzqerxF5Lv9qMQpRJNzyQmaWvUj6Sf6Nx/s4voI7HpJCUxSfgGUSZJm57uSyfjROfUkQW848iITclXaB3fCPP+KCY1G8YXxSAOp8o3TB5zynt8aGNOMuIdokRldulMt/VmeI8Dgunj90To53hPYzSaXuzmPYjN+FYz+NvGaRozffxqyt9F7WgG0RAtE0Mp0w7AUIfJ7iI3byXpmE73hr25Y1OiGMbDkf6ilHc8RIsR5hrNeRqmjP0dxiG+UmidhigTbTEeBkpAtM4E9OMKzqNTV8wum2xAlPanRBHqQaL1SLPl5jEAoe6DxFQS3lHCIg2EAGKGKFEEhPg6xqhVzKNMKpJN89R6EqMcGCVQSXZOxRMYEHpxRDeu8rdu3sO6f8DJyh5aw3cGHW5EJn2AFw2Mvyn3dz/u/5EVyb6jl3iONuedSdEitCO3gQkGVupz1gJYgrBSazoTK9lzLeT7tFmkNUsz8F6tz1nbEkyRPxfvqmfXzaTmSuYW6pjlZoa3TPwlvNcarTHvAowAK/UmURpcTmISXE43U4IBRsnFUmFn9g8gjGOW627eq3U379Vac5Quvqy/nE5pBt5lmKGOcxWdi/pSIqzWxryLMIKpaJ3umCrjHbxJ3mXtDHXMctXBG2GtNmflDbBUbTl5+5kcP2WY7PGVjhMdsVSZK20r5b1ca4+uJ2V9LVZm4a2m+lJFvMW3thPpiIVKOxcUFPFeqHRyvFWmv9TaQdtkXKZ8CGQlodl2sm1pwE+SuY0xOrMTyOxOavnzo5alACMomv4SaRViEfDFpKTPZqeteQvESbUeESPc9SXGy/U31leVYhCgluPtJ7NYYz9FrFRaI39cDZt87nCdz3fXR8GJQpivzCMOfy9XVv5IBifwDg9QFqsN7nBUTfXELZKNteaHT9pFbRojNHTNQTyyfNwpflyttTjfsWd+9ER4evO8dbo51ppPnrzPOjOigY8dc/N+eOm4u5pxtcmF1kY5J21OumdOnsEmoou15ocv2EWbGvj4GXcF3ofWNmkFjmrGtTp3LaUJqIpNIXzomHuc/Mkz9zh5/9AJu/gT4IHlTeYCezXjhWqDuxfXrRhBePbIeWzHFmvNp07f7+T94aMXLCG6Qd27sEk7sGfa7FTq3LNgzxAqmErFVt5o/qPjdt4AT6+7ed/Z2bAmRwRoB3Xu6Ry1chLgmQ17ZtMYzcc3XWJTzfuW7xrdnMow59pH6QT2B5WmV+euzglsvDXw/uX77eclmmfWHnfyfmTh3oR3+YXgROMYbX/Oiql7dc4277BiQHN/5ykLBkw142ewi2Q1RxvvSYKY8v461XNUvWUrxpMmzepjVk6gef/iI1ZEjOaZlcetvwlo7mrbRdlvZ3tHL/EM44hr3T0rJtKab++87mzr99542Yn5ys3LTszL+1vWrcEAW/1D5/JNpDXPb78+mrbNBtDpa61vHe9X9rcSQaKNd5fwRgB10GqaE8BwO+A57zpZLcgIM3qt+b0rrzo5ffnGNZLyGqSrsuO2zOtX9nYyeoBi2x70UPuT38y+NheL57bfcHL6/Btu3l+9edUZEL52sJMRrlLIaTfscvnQdevVfHPnavL9Mi/pmcbJN3aumuUrXdYWXO5ucxD2sPHeG3a5fLjt4A3P7bp4wxdvuHl/e+/axEV+mtPV3jb7URcb74Ooy5Xezcx7xb58fudy8q9y3l/afml0BhS1JQgvHFwGiRgXSJrm9HrvBgehnXcv6vJ6/3rmvWlOSmK+u/8K42350xhB883db1t5g/Ba9zVEokQTUzxObg7fAPZy35vEhPEhW4OrVt4eMZcPv804mUDBsaG5fPjVUQXgMn/vD7+DLwOG2ivEAITRJZAbufYnMZ7eQ6KXrL4MRPOA/1v8fnWHb/bb6IJ2nqxfR/e/iFkMLuMNNwfX+KNq72iR7HPb1/ihf/H3rBgz7ejOTdIJauw4NC0NL2AQR7elKrACEMntrBlNjSaHIpitvy7edS9geAt461CIb9RAaaQ1QGrjQmd6IMQHAd7QR3vaCERHPA0oFa0K0G7U2Emzthb9NALVimeqR8cmU2x66uoMBtFYH4owmGlhZ741TwmixF7JF5ivVdm2ZJsFqAWeqR7tqgo8JdzNPJVmpt9tZ7ivFJ6njX5m6kanSXNGLFRrbA8cvH2PmNhotvREOyNORYnM8k/TIpPvTFsgCt/T9HNVLKd+YeardXYG5VlyAWpJJeqxv6fbyQpgp8Wkqa9Ntd58vr9xW4IR3AfK6HXKMAALlZpJ6DbuIcdJgKovSMI7Hglgx5h0KcOTVH1SwBsQxtWMxxWIx20p0QRKUfeMZs3oKiYwCffFao398MDKu+aZhGahjolH4tb0+NMqxEYkmwpgx98ei2iVaBreYKIC8bgtjxhfPOaDkGHcL8So5G+14hPGu2jG+pNJzJw3pOX1k4r0inG2FPN5IBE1NWTZ2yfWEI7SxckI4xPjS8zJ4ACtYahJF42S/9cEAr74bHgLxLrPv9zf4DP7axwky0fzqs/Trau8v3mNv7f9MF86MGULJ48t1bT4yuNvPPCLb5tlnndFsjOaK9cEmJ/bFZzMgmFGzK0zSYRs4wE7eVPQM3K65eLYWNC7VfSeBpU8ccfpOqqMM5Ym19Hc062kE7eZiGPSRoFYpp3Jm+Lkd6fvSQ6Mzr2X2/Uz2U4GN8qQ6sLMyElyxza+WU5hyB9/Vjuik+ynyKTYcoxLM9JOtpNvX48CI8Npup1iTiW8k/+WHX6sJzlN96d17ObNWHg5Og4Lb5nB32I5Nq11dnjneRccG6XHpkd8zC4cC++C/qaG96gdC29JMsmWjZNZeJOKRU0is6JxmX3tz4Dx0KiC45dMf5OYaU7J71KCGT2MiMaTaCTyzY6dNHRTApWRKHcSM263Immi7PH3xmZS/n907jIfal3helhFiWbZ649w5npiQqUy3n8E5yBG9o7WoJyeW6Lh2/UecYJz2bnOSun9EsygPNdecc5CuKorg/nR3Lw1Z3L6Gpn4SzmtYlvHFsyxuXhnBYulvD2T3XVkWiBSo+AEjEg2V1BvmrbhtLA8Zl2COb+wnJ+FmMCAqR+TswKMIMxldSoFmFDHnO24eZ+fX3HynvJ3QX+Twu0iEaVgtrbbMKGOOdse+7JI/DgeJ3bM2YnxXdTffCWv4yjCgJmRtBy+4T3n5nRHe82JOT3n5t32a7n+y3nXrZhQx5xuZTgVHJ8AZ1p23gAnm6s58XoRpulN8J7oa8y7WHCcWqRjjjfWHb4Ujjc2nLw3axtO3lXVyF2XijAaaPltKyYiYqV6fHTEZbyXqqesGIC54BQ6UxdHZFqQqqVN9rZahIkQRK1MYfLBSUjsnR2l+PdFsx70WPUzwQmK042NwuPPj5PTvF1mT96svaMDlLofcMxR1t0T4aGlo1aMBj58xC3IfN+GPUMqwMX5NWemzZX6HCdb9gy4nggPL7t5f+joeWwiKw28d81eHh7gwvwaTV0rn5fXsOzNcWrB7m8lwqOb9mycGvjwqbQcfXGHGnjf0ZPJJaf8+C4srTBXcYhk642kmm+5KREeXztmZa3RfPTEeSfv926ccPI+N7+SCz6KbKHa4EzbHlwr4PHVk86x++zRC07eT66esgbpYIKYjkMkOx/UOdu2Cw0FeGx5Bt6bbt6PLbl5n55bdYpkO0GDs3M2MbXh/ejSGSfvp9fvsfIGeHDhjHXnIMCJ1lou+Ciyll/nZHPDihHgwYUL1iuFJubJpfucvC/O3ZHwLsds1teZ8+1V5OuqwZH6MUs7xt/nWvdZMZqYc60noTRRm7HV2n0O3ppWcJyat2jFBNKkHriEq8Kr6qO5XUS5VjSgY1ab7xu1W2ZH68cdfb197R29xLM37PPC7nUrJtKa37n2ghUjwC+//LXxNH8J5l++9pyT05euX+LQIZK91t3jZs+eXC3Sms9edfP+lZe/Zj3lBPiNS89b2wH48rUr7L0BsijgjaeHR7OLoXDt9QE3/RuFU/bpexGaz7z6op23gl/+7jcRSZex8ktZIIjAv3jl24lok0IMaL5y/Qp7U9l08x653jtgP7LrL2I0v3X5u5l3JvsDEeGXXvxaJqdMMe/fvPTtzDgq5v21m5c5cIyTm/0DuiMhrVDEKQb+zdXvWMeAEviVV75q5w381tXnJ8b/NO9vbl9xju/t4SHf3Mn+JtO8kZh/+/q3nbx/9bWv4AlJ8rhp3grNZ99w835+9zIDPck73/vu8IDnd7KC64IxQMxn33jOwVv49St/4OT9+RvfJL/zZJr3C3uXGOpJEXi+9/3wkO/svYJtnAB8/uZXkgoyxcemED57/Qv4pLqKYt5f2/kqQlTSl3nv8uHLKDV5zuV59+IDLh1mx24BJ4n51t7n8NCJtmQaIOrstwAAcyhJREFU4wPf3v8NAokZ6kmxaco75nrvt/EZMMAvbEfQDAbPIf51BC/DVDIY8NhCD76MByV1iqGK8CvXv8pxOcIPtS8R6aQyNWZMCPCPd07xiv6C5Tcx/37hwH39frvaO1ok+9WbV/jjv/E/WTGzFu9r+VVngbea8hOB1fdfJOslvF3M54KKk3dV+Ua0aeGtDz30bgVEQyNE6pHRl0SC7vrQ9dBa0NkK5JPkBHxPEUs81mEUYBCTJXZv2KfwYS3BBL4iFk0YxcUYICc2newvnQIW8kLaIt7KCC2jvEJyCteuGt6FWWmTqdmKUmi0NUGgCHnehRg9eU2fMl8pRGkiXZxcLe0rHSc2TKAUyAy87ZQQNEqNNVPZaremDSPaFDFLJjZOnUqF/bA3EoBmLc2F4YsJDO28NV7G30XhjGQyspqfV3IYIeUthDpy8A44jBy8lblpDePpK1QRJ9uxVby48NjStnzlUVUxoQ6nin6Pjk9gPgjoxd2RcDWLM0nPoKJiAmVKdhRhBCOCrXpR4SknGexc0B/xibIVjxM/ecqj4/WJ9DDJSqtGbQkma6sIrASCZpdYG1FuWvTPVCGOE5Fsnzk1JNYhIV6STTZtJ8YjTjLJGgFsiErEtObR1Zc4EclqTvgRWmsiNGESZprgRfARlAT89BtPcRDHnKns8b7G65yp7hFr4bl+m397sMprYRNfmnTjXulvAibg/RsP/IO3zTLPuyLZGa06Q1I0jXZmUVUi+Mq9WuYpZW6Wt8G0YKpcWoIKxay8hchVYmQUuAscBOgDyzKVTPw3Y1prlCfj9PQFGHPBnEhAVmC+SlL9WzCjNi2cZuKNRokyCahK2hAEX5JJeQsnTynCOJrSN1h5W0HlH2nMDTrS5W2l/h7xLjFPhBA9G283ZKwRKKlk64sizIhgi/rwMv4uqohLgokob6eQkwMjI5ZFvIXQ4m8wieHcvJN5AXH783s/No0nasS7rDlPPDOfJjo3h5A1hYfWJptuGWbEaeK/ZbwFipdDNJikb0Oj8yjJdaLEJ9KS7Hwye2KmuXiAqXodEBEUzH+kQanBxAQF1YxHAZKYYKTsLuSJmRv57mCO7w6Kl7s85SGx8Xf5b+K/bYKTN2vvaA3K2fYyKzX7+qwGHl22r+HFWvPU2klnf0+tnXTOnlzorDjXlWvKZ80hpo215tEVmybCLEs8uXrKigGjLXDxPrey6MwSW/M8Npp23pHWPL7p1s48teleV31q44ST9x2dZSfvilJsNuyRfqS1Q4Nigpin1k84Z7VmGSen24u5LKFFFojH0WbHiol0zOMrJ6wYDTy5csrJ+4nVU86MwyeaC07evvI41liwYiId8+iyfexq4PHl007ejy6fdvI+2lgkEHu2ZE8Uxxt2zU+kYx5Zsle9Bnh48ayT9wPzZ5y816sLoyyxZeaJx7G6PfFjpGPunbdXRwe4p5Nqfsrtwtx5ZwXehWCJQOxaPMFjtWq/VsREnGreZ8UAbNYfxD6vB8u1h3FVPFZqEyV2jVWMj/IvOBiF3N12J2y8MHe31d8Kzb2de5ztvF3tHR2gKJGpXQVTGIT1hl2sBUzsmCm24415J2al1sqnMS+wuUqVhaqLN86bKsBZh4gS4ERz3olZqTcJfDvvZqXCQt3G2zx9b7bao9dFGNCcXVxCowtPzlSkd7xlvzkb3g3nTFqzUmWx5uANHJ2B97n5ldG/yzDHHEEFmF1TprxA2cVJ0wwq07uUCnnPO3mfba8UfJa3I3U376VqMynnUH5RbXgBS44HB4GMn8p5n2m5/A2bjXnnDMRC0KTm28dJ3auwWHXvwjN+so+B061VBwY26vOlMzWpzVeayY6/8nFSUz6LFRtvM042a6n40zJ2G+tO3iu1RSfvdqVF3atYMJqK8ulYhbSGx3LV5UvNau24E9MM1pIbpm3sdgikbuXti09VrVl4m/tOp3LEyemRuQ4Lqp9ZuMpjNPBM210Z++1q72gNyuvdPZ74lZ914uaCqtE7lJhC2Gy2uXywY42v12otXu/tW+N0V+XkN2PtoMqug/eRZpvLh9tW3qu1Fm84eHtDn8HNIJlSnV4z1jCuHAyMs41OoAQ6zSo7vV7BeWkwSgmbnTku7e9mKhVPIAVWmk2u9w4ogQDge0JEgUYl15i26D3Gx7FQq7HVL0oKZjCeCEfn2lw62Ely8EyrMQRYaTS5YeMt4CvJPD2Xetwcny7SICS+FFhMKv7aeB9pdrh0uGNd6lyqNdgaHFhdaZaT3LyDhHeZCbBca3CjX9SfaccXM76vdLdL/Q2wVG2wNTi081bCeItpOe+KJ5kq1MW8V+oNbvT3p7QlI95KONLocK1308p7oVJnP0wrNRePJQ9QKkoSsE3zNonRYhqeqW8UT4VqCSdgtd7g5mC3nLcIm40ON3o3iCycFio1BvEuYa668thUUr+mosKE92SWRJM6U0nMQhCahG+lvDVHa1X2wq1EADttVYk5UuvQDS8zzHw3az4xi0FAndcZjJK05Tn5ElFjyLq/x5BUx5LHKGIqxNwRNBjqPoOCZSIF1KjyN3d+kNd6B6UzJB7Cn17pssRL/PXrd7AVV03By1E7mh9deIEHmz5q9bcL23gr7F0Nyox29dCe5h7MILAFJ2CWSrb7Xcfkn0mZ7iXr5mV2q4ITD7EGJ5DwHhzOwLvr5h3q0UKxHv1f8jqrtxhdR/TEuWte+J5it9/LLzrrPCZGs9XvjhO65TDjPrf7XTyliEt0PyJm6jo3jzh538keU+F9wrwReIrdQS+/c2kCY3inN5TJzsZ9bve7iX4mLuQ04j069sl2xn4pS7CW6jp8pdgddt28B127WFxgd9DFF8WwZJwIhveYzzRvmeBdFqP4SrGT8E5pjYfAmLcZ3+X+FoGdofF32bknArGOSWVPVt7axdtjd3hocl+kN5P0hi9xMsQ0O8N9J+/9MPV3RPq0PPocRm2JjBO5ZYMLJePfIiIeVQ7O3uzT3Kue8tgPDwwm6SsVL0vCG9HsDw9M9ejkIjBxWiICh9EBVU+h4yjTThowp77M8o4ymXJTjYjZpRUTTfA2mJS3Eo9etJsIXWMi1MgHSuKRSLYfbSMSEehU3JscG+MKw1G8i/I8KoTEmCy4OsGYzLYmqZyISdIWa9NfGqp5yT4iX0AIqYiHrxVDIjPeEXwUHoKIx9bw0JynU+M7eS2air7BanDIX1z7Cl/uLvD1/jyhFo4HhzzeeIM5LzSJMf+IVjN+Rwcoi9bpb2Mxmqrn04/CUownQsOvcBgOrRfxhh+w60grP94y9r1ZjKbm+fRuCe8Key7eKtkyNxWIlJgUY6JYU68GHIbD0rY8EVp+hcPhkDgVxhW01Qgq7A/7VoHgVAbYWXgXWBRrGoHPQTgs7c8ToRlUjb9LhI9g/L0fZXj/e3LKQaRYKBlrTcMPOAgHpbwVQtOvcBgOnLwPor5d0DjBaRbeRRZrTcsP2A/HfpqEKoSGX6Ub2XnXvQrdqPz4Z+U0G++Ypmd2Fo3EphPcFELDq9Fz8K6pCv24P/vQlXLBbRrnlQlXtdZUVZUwOrTyrnk1BnFvxLuIU0VVifVkO5ZZpxHvPGbcg87wnsRoAlWjH5vz0ieeIiUIvmoQxgeQBC1FfJTU0fRGfXkyPfuRDwCLRbkmnExnr4Rq4W1Y0/QqHMa90vEtCCFzaK4TSMTDjZs83Lg51RLS/iMZnMA7XINytDnPqTl7Ai4QPrBhr1Ibac3Hjt/p3I780WMXnen1H1k57tSgLFTqnJkhu+3Tm3ZRW6Q1Hzt2l5P3R45esPPW8Mj6kUQTUQbRzFfr3LHg4q354Em7iDDSmo+fvuj294nzTn8/tHKEmlWDomlXalwYaUeKLUbzoWMz+PuEe5x8+NgFZ3mB+xePOKpea+aCGnfOr+HkfcQu2IvR/NBRN+8Pbrp53zN/JElEWIbTNP0qd3U2nLyf2bCLCGM0H9m828n76XXXsWkutDdpODQRda/KnW2XaFPzg6vuasZPr9/v5P2eVbtAEuBMc5OmV8Pmy6qqcH7upINTzBNL9zswmieXHnbyfnD+QQdvzWbtGA2vgY13IFVONM5ZMZqYc+33WvloNGfmnsYlgF1tfMD6OWiq/nk86Vg5QZWe93iS46bMIu7tPO7oTRNXfwgpzaZicqZ0K89a23k72zs6QNFaM3RUBdZohpZZiNS6oT35FEB3hnaGUeS8yEdaE2oXb5zHZji5BVTdfkTc9QqnrdP3+rvl+WLSKsQh0Uy801mfotbSZxtXxWeAXjTMfKOoJRjEYa6g4jRGiOKYMM4mlipm1Y/DzOtizCzjZBbeQx1adkIkvHWcjIFZeVs4xbP50okZ8S7iZHjHOk7GiZ33IB5mXhdjZjnnBs5jEyIdoXUZbwBB65hYu8fALLz7owR7ljEww28S6ogYmy8BYqJZeI8SvpVjhnEPOydNqPvJMly5v2Mdgg6tvIUQtN2XQoyO02rO5Zzi+BApzSRrMEof4iXzH8UY8KRPgJ13RSJ+Y3/VFC8suab+fneZ3dB9/f56r8ZzvXZhO5GGnvb5zT33w+zb1d7RItkX927yzP/1c06cS7iqgIVqkxt9e3bXdlBjf9i/LUUDBQiUZ/KAlJjCLHO5eLf6LfZ3IuLWAKlHozV2EUyF4t0AhmqchE2Pl05ySyhmIbb8WgGIgqCi6IcR6dcmoUrBUrPO9e5heQIqMUnRDsJBRkg7mshm1HiazCz7xSwGgEmR7DRGiVALFN0wTN6aZq6UsFxvcL1rF5K2KgHdaJgJVAs4TVUFnsZkK/Baefu+NXASzC6tG70Doinm6Zo/tIIKvWiQmbUq5jQL7zQpmi7B+CLUfZ+DcDDRztgUxt83+/vWZ+OmH9CPhpljy/cnKadcVeACDLPxbgY+B2F/AjPBu9Zge7Bv9XfD9xlG2eXZot93XKm4lLdoKqocA2Z5sl3xOQx7Vt4rtTr7w11Cnbae5+1JTNP30LqfSSSZ709hErXVvSGxlkx14SzGtNX2+ya5GmoKI2gChNVqzCA6IMxhTL9psrb1apUous6QVL1CBhPjEzHvx7Rkj5Di/gIiGjJkwz8k1EK/gHcFjdaKv7f1FMf8fT7VfoElvz+6nkZa+Hx3hX+xfwKlmnSjIvH62BreAoNwh091XuDB+s3xcp/ApWGdv791hu14gf/x/l+wtnM77V2R7Izm0lWAEZu6hKsxpgy5y/pR6Ez6dqtMIdbgBN4E72GEiELvVdD7GqmaZGRxKDA0J6qe0IKkl57RVO7ktarIxCQpG0RRpp1pTEwyy5LoKsqq1I78rdIr7zjgKOcxgZloVxe0Y9bIhUGUBG8F3zfvmxmU0TJ10b0H6McRniQzUg7eNk4z847DcZsFnDRmVkcnVVPz/tYZfw+Nv5msdvvmOGUxRccvYgKrfhyWCm5Tfxveye2hZJwM4hBPGSFhGafRhT9z3DnMZLulvBWDRA8hJbxB04/d/h7GIZ5Spqru9+DLWTCeKIYz8B7EA7RoPDGYsdg0HuFCPaSiFCS8x2FK1t/jAEt0GhjKKHzI/iZGJBtnMCY4MRhFFA9GidPSDLdg9CEjkXDcA4kJEn+ngttsW+gBSikCQvxk59BIS5Jg0mRxvmg8rXN6k1SQux+bpfBXwxY/c/MeTgV7rPpd+trjW/0OBzpA4RHF7mvzIBrQ08L/vH2GX909yoXaLj4xrw6bvDxsYrzU+yMrkv2+L/H81E/9FCLCn/tzf270Xq/X48/8mT/D0tISrVaLT37yk1y7du37TWXKjjbnUY4fLUKz4MqVIsJKvWVtS4DlWtOpiaip2WLGWXhPVrwtamOlNmdNDCfAcqtBNNpRIuieb9LXDz3Sy0SOtxT8JTZKilaCCeN4nLujBKNEWK2N/Z0KQLNCUAGW683xltaStlx6n9TS5GKTfaX9hXrMuwyjRFjNjpMCPoLJcRK+Cd5l/c3MO1uJusTfKw5/AyzXWiN/l/Xny/eHd6G/yY/vsr4Wq62Rv8v687K8i90EMErmVtZOpCMWK+PcHWW8lyptJ+/5oDVaMi3nrUr7yraVJnOz8e4ExZWDs7zng/kcb5OZVedwLb9tMi6PMOOKv2NOfq4vJUYom60MrAEvSeaWx2R3g8XU/cXRryQJxstgBEXNX0ZQE5g415bvLaGTKkMpxpc411akx4VHRcyOnUA0fgZTV0MqCW+N8MKwzee6a/xhb5kDnb4f0w462CvNKzrB/Ij3dlzlc4cr/PbhGi8PW6NjXqqs/JEMTuD7HKB84Qtf4G//7b/Nvffem3v/x3/8x/nVX/1V/sk/+Sd85jOf4fLly/yJP/Envp9UCm2x2uAOR4I1T4QPbNpFsrHWfPLEvdaZEQ38seN34RK1Pbpy3CF+NHlJznfsmR89EZ5xiGRjrfnkyXutS04a+Pgd9krNAI9sHqEZ2HkvNxpcXLKLTZUIHzp51oqJteZTd9zt9PfHTtiqrxrUQ6tHaQWOasa1Jncu2v2tEJ49dt6KibXmU6fd4+Sjx1wZJDUPLB1hzlXNuNLgrgV3ldoPbV7A5e9PnrjfMfOn+dCmm/d9C0doO6oZd4IGd89vWjkJ8MH1O62YGM0njj7oFMB+YO1Oy23AYO5sb9J2VDOe8+vc1bFV1zX2gbV7rZ/HaD6y4RKbat67crf1Bgaac3PHaDuqGTe9OhfaJ7Hx1sBTS/ZsqzGa9y8/4eT9QOeBhHcZTnOscSKpZlyOqak6Jxv2sQuai+33WzGamLPtj2IXyWqWa08nwYCFU+UCvrJfKwLV4JHOqZLkasaEmAfnn7TeLzQxjy+9z8n7YvvdTLJTtr+/z4/8yI/wd//u32VhYWH0/s7ODr/wC7/AX/2rf5UPfOADPPTQQ/ziL/4iv/u7v8vnPve57xedQgvjmGtdey6USGu+s/uGs60vXn/Vifnq1hUn5pX9LacAdKt/yNXurhUTac23d1939vfFN14FbaY1J+8/6euvvu6e3Xp1d8ddpXbQ4/JBynvyxDMTtDExz29fh8IL2Hjq+fdefzX3vSLc17eu5r5ThHl1f5vDaGBpR7MzPMzwLrYYzXPb7nHyhTey46SY03M71zIXpmLMpYNtDkuFlOa9vajL5cMdKx8NPL97DZe/f//GKw7ewrd2rzp5X+5uc+AoTrkfdrnS27a2o9F8a++qgzd8aetlK29B+O7+Fcab+4vber2/xUFoXxI+jHpc6aXbPG28L1kxAF/bebFgOSn7Wnjp4AoiqWizuK03+jc4DA8tGE0v6nJ9cD33vcl2lMS8fPBKSWAxXqL59v53MjfeYn9f7b3GeOdJcVs7wzcYxntWTKwP2AsvJ34qxvgScb33PMWiXPOeIuZm7w/xLGNAgEH4TSqUCYUTH0SvUdH2c65Kj6erX2DeG0wFKenS1ifmXmO/95zl2AynFw+ey3xePE5uDtz3gberfd9Esj/6oz/K4uIiP/MzP8MP/MAPcP/99/PpT3+af/2v/zVPP/00W1tbzM/Pj/AnTpzgz/25P8eP//iPT7XV7/fp98cXtd3dXY4dO/Y9i2Sf277GD/2Lv2fFmClce0VjwQhgdxyaloYXMIij21LNWAGIW+/SqdTYGYyzn46mTzNfq3UbDA7FWuhQK20XwAogRZj0MqxBTGFC7WmTjbMEAzBfr7LTz/o7g0l5B56pHj3SEE1jcllidQEmnVK2PfBhtDNK6UxfxTZfq7I96GW6mO6v7nvJDpxy3lkB7LTgNDNdPgNvT5jQK033t1itsT3oWjE1zyPGxdv8uarreplqxkVtBUqhFEav5OC9M+xm3s1jBKh5Co0ZJ+NkX2NMqi+4Fbx9pagoJnZOTfNeqNTYCw+tvKueoMT4O9Z53sJ4eSXllPkVcu2IaGpeNKqcPNmfSqpH15TZ8TSuQJzBJH0uVqocRibr9KQvJfFlzQNf0gywagJj2gpURMMzFYjTisCjZRri0dJK2zeVfIfay/VnqgdHBKJYDAaEcY9Iq4y41fTnialCvBp4aL1NBETaQ2cxSX/z3oCO6hLqmCEe8ej53mAqRDRVzIYfEmlNX+vcBmAPqIrgi7ComuzHPr++t8Ef9BYTAS+s+10+2LzCPbUD/rvrD7AbhpnLZd6XAlRVi4Owiyn6MT12BY2vPH76vv/5bbPM85aLZP/RP/pH/MEf/AFf+MIXpj67evUqlUolF5wArK2tcfXq1cL2/spf+Sv85E/+5C3n6bqZgPm5Z9l1c6swt86kIOPltMWjVNoAxRfXEaboZjc55otuilaMzmFGwWARJoOLtZ44Fwsw2bZLMKOXSX9Zn02dzwXxzZi3eTouxOR459fQJ2/eo2PLvLZxyt84dSFmFt75wLSYkwujeXO8x23Ngpk+Nj0Dp2wm3ckxkD22VNvgob+vvNPridOXerI6bT68SDFIquFw85YSTlmMydxahBF0Iir1mBQTZ8dAPOpLxlH/FAZklMjM5kslUJHxDiMp4V2RKBeEZXEpJ19iPB0XYiBGxKT09wiLMTrJ9ioanzDZ2psIaTO/LyRJMJMHxJT3WDdo/ttSIT/ceZWPzV1iO65QkZgFlSYM9Efje/J3y/rJXCuTsVLi7/I0Cm9/u+VLPK+++ir/xX/xX/AP/+E/pFazrzXPaj/xEz/Bzs7O6O/VV93LKbPYmfayU+8RwwzJ3OCO9srUfThrkmBcsyeu6spgfjRTAKzcYjSnHcncBDjXXmG8ji0TfwnvpaVxMDcNAUxdlKnGJzAiktepFGBCHXOmvViMyVwEzs0vj79Wgrmjs1wuNk1sUkhcJCAUoOVX8m8U8l4uxmR5d8a8i4SGhnd+nBRxWqi4eQN5nUoJ79Nzbk5nM+O7DHN6zs27M6E/KeOd1akUYUIdc7rl5nSmterEnGqtOnnP+TPy9utWTKhjTjXXHJyEk6310XlZMnQ53ljLVTMu6q/h1XLfKR0nfrHgOLVIRxytbxRisrw360fGvAswAGvVzSQ3S3l/gWqS1deIkBPIgrkVN7zOFCaLi4mYD06NPFeEAWGuctaBgWpwhlQkC+PAMPf70iJ7W1UieCK5TQ0ajZbxtbmmYtb9HoteNptxyMn6htWXgrBRGycGLPP38cYZ3i6zJ2/WbnmA8vu///u8/vrrPPjgg/i+j+/7fOYzn+Fnf/Zn8X2ftbU1BoMB29vbue9du3aN9fX1wjar1Srtdjv3dyus7gccH1VyLTZPFA8vH7NiNPCRo3YhqQbev37ayemuhXVn8LFSa3GyZQ+aPBEeWTluxWjgQxsXTZRfQl4D7z9yOvOq2O5cWXWLZOtNTnXsvJUIj2/Y/G2eSD56cgZ/b562Bo0AFxdXmZtBJHumYw/2lAiPr7p5f+TYRbLZNKZR8J61U07e5+ZXaTtEsovVBmfn7CJwBTyxetLiS8P2w5t3Onk/uez299n2KvMV+4PLQqXBmTl79WQBHls+7RwDz2zcPTVTNYl5ZOkMdrEpnJpbZT6w74prBw3OzBVfw1IT4OHFsw5/x/zgyr3JTEM58oH5s07eJ5rrdAJ7heWWX+dEc9OKEeC+eZsI2vB+dOEhJ+/zrQvJTp9yzHptg5bftmA0NdVgrXbCihHgVPMhKwZijrd+ABy8O5VHcYlkq8EpfGUfu57MIYFLUA7HWg9TLpI1/r5//rHR6zI7Wj/p7Ovtard8iefpp5/mq1/9au69P/Wn/hQXLlzgv/qv/iuOHTtGEAT8q3/1r/jkJz8JwPPPP88rr7zCE088cavpWG1/2OeF3RtWTKRjfufqi1aMAP/8la8zSkpWgvmNy99ycvrS9UumDo3FrvX2S6rmji3Smt+++oIVI8CvPPccsheg54ajZEHA+N8HPv/y+ReMxiQGc9IbUDYR25feuJxJmpXtYeyP17t77ESHOR9l2wKzPfozl7K880tQYBK1/fKLX0ekXBMgAr/x2reci2pfvXGFvSneebve2+cgSjNkZo9tzClG85mr33Xy/uevfDWTC2cSY7zxr69828n7G1tXOIjsYtOb/QO6IyFtGW/4t1e/nfmlpnl7Ar/62lecvD/z+vNO3s/vXKEb9zPfTzmNv7kz3Of5nZS3UMRJA7/9xrettzkl8GuXv2SKyo2myKd5/+715yw3AmPf3r1MfyovRb73veEB39p9zcob4N/d+Kbd3wi/+foX8SSt6DzNW6H5wtY3yFfumu7rxYPXiLXd393wgBf3X3Hy/sPtL2HUOsUYT+D3tn4XXyAs8bdC89zel1FEpe0I8Eb3ZSpqD3IBQZ53GO/xevdbVl8qIl49+Cw+caLzmMYEaK7s/59UJaI/yjaZ5+0T0R38axrSp6f9kr40En6TqmdyJRfNlQtQ1T0YfKXg07y9tPe7mdpsRf0Jv7/1WQvG/Pulg+edfb1d7ZYHKHNzc9x9d77WRLPZZGlpafT+n/7Tf5o//+f/PIuLi7Tbbf7sn/2zPPHEEzz+uL32wK22F/dullZeTU0hXHbsmNHAS3tb1oucBl7e28J3VAXeniF5HMDAkTLeQ7g0ww6Ol7a2iXsehII0QnQl4TZUxIceDD1eGmzje4qQGDS5tW6dZGLdHfYLqgInuPScEZOELHsO5XwmRkR46WCXUSGybDsJRqN5aW/bmvBMC7y8n/C2iHt3h33E9lCUtNebSmaW5xQoZfzt4P3y3s2JcTLxbzE7uVzZi/fDN8E7Z/kvBErx2uE2adXUydkGc/HXvHxww8n71UM378NogFLjSr6mkm1yY5I0syl0p9LBF/G+OXnPmjrSV2fgfenwppN3Lx6iMn1l/TQa3gLdeDARcud9GSjF5e4Nu79Fc6l7HcTIMGOdP8i0CvHV/g185RHGUWE7YEStgQIv0ULEGYeNpKcC3bhn5e0rj9f7b6CUuQbEejz4TNE7s9Txev8aIjE+JitqNrRQYnLCbg3fMHl8YhOkZLV5qTw1whSBTBOiTfJWGN3QQB8kuvs042we44nHfvgavkRIUl04/ZUVGh+T66Qbvowv5tOB9hIxrcEEEuIRE8evoJRPjZAwEdzq5PiDpMhgRWJEfOo6YEhMmp9YgACPAJUst9jvKeDzWu+NzC+WHwPprqTr/auQVI+e/t3Mv6/2X/0jm6jtLckk+zM/8zMopfjkJz9Jv9/n2Wef5W/9rb9123lUrUXijGm0M/urQvCVe7XMU/ab5a00LaBQuTXqScvxDhV6t3ipw1dClJYhcY1xmfjvm8SM/D0Z3Ex83c+KCEr68kQRZwMim82AEQdvTxSSVjgt4e2pcTKoMvNEEerIisk16oJYMBrjy0gzEuQVdeFLkn7LyTt29pdyMu2Vn1du3vb+Un9LWoqmxJQk8wJvwpfW4W3BaPK/b1k7XsbfZRWIPTzA3k6Wk4A994b12DRKFOhUe1F8XVHimXmpJDlZUfQootDaZAH20BSlSsyOE4Ox8053/xR+nvTgiU5q6RS14YMWlGhqUly/yTAdjIS7RXMkY95CBY9K4dHNZiZZYZrov2QMZPxdPpa8P5LBCdymYoH/5t/8Gz796U+PXtdqNf7m3/yb3Lx5k4ODA37pl36pVH/y/bSz7WWnKFUDjzg0KDGaJ1ZPOPt7fPWEUyR7obNizewKJmvras2+rhxrzaMrx6xP2DGaJ47Zjw3giSPHnbzPzS87s9vWPJ/1hp13pDWPrtkrwmrgyXW3v59cd/v7bHtpnN22xCrKY6Nh1z1FWvPoDFqlJ1ZPWjEw2zg52VrKZQktskA8jjQ6VkykYx5ZtnPSwGPLp6yTNQCPLp20BsQAxxuLoyyxZeaJ4kh9wYqJdMzDi6esGA08snjGyfuhhdNO3pv1hVwW3CLzRHG0btcqRTrmgfkzDkbwwPwdTt73dM44ea9WF0ZZYsvME4/Nmj25WKRj7pyzV70GuNBKNVbldrZ1wVLo0ljbX8YXu6ZN8FiquK7NEev1h6wYgMXaY9inI6FReQIslYMBIrVGjF1jpfEIvXOFBf7GFnLn3AXrDVqAsy138s8Lc/dbP3872zu6mrESYd6Vxh5h03GRB7M7w2WnZ9gNtFJrOdOvzwVVdxp7hE0x/ZVVIdaR2TFS/JzD6P1TnXkn79VGk6pn592qVFis23mLwLE5d3/nF9KMtOXMT4wE0OUn8Eq9mcyklWOaQXWcfr/EBDKC63JO5+ftAjqAE8305lzOabXWpOZ5FoymGVTyaewLTIBjzXlLfwlvR+ZigP9/e+8dJkd15vt/TlXn7unJQdLMKCcUCUqARRAZjAkOa4yNF6+92AJjsz97wc9eh939Xe/dcNf243Tvrs3a64ANay4Yg6+5BP3sNcEEgcBYZEtCCWk0uadD1fn9UR2nKwwXgXqk9/M888x09zvnfM+pU1Vvn/PWe/qSreVlAi86YkliATOXyVCUjqi/I6uA3mQrQWNgYVNXgA30xlsCdbdHUsXgde/+jpvhgP52vuX2JtoDdc9LdQfqnhlvD9TdGk4RN/2DwCNGiLaInwPu6O6JBZ9zffFZgTadkc7ijcdbdzrcRMyM+thowkaIppDftdnJq9IaKWUl9tbUGpmHezK3ik0iNBPTb00RCKs2tmb7PWPjbA3bsj08nl3kLBm6YGnYnY9xYqoFrx2WFc5Mz0mp4J2Km0KH56GSI8ExvZvx65lR1t/51UC7pnCUkbx3QKKBYlYyzWtjQ77fC3riTezLjPj6u0Fr4W+E9FAzQ3ocmmuD+5RynBNjMMrMVAu7RobwqlIp6Eon2Z8ZxfPLmoJQSDnxPLo+LKD8WmmU6e4wVdfXkogymJ3wvA4YBvQ2NbNrdMh36a0rmeRAZqwq18skWwVhUzmzFRoXm+Jr5Uxr+x03BbTFowy4Bi875ZhK0Zts5rXxIc89mRTFnYOzAboNo7wPi0+PO8s3ftPjQHssxkDWbdfUiu5ZyRZ2jw/66u6IJRnIjhWX5+p1O7EMquoRUx/dhvKsq1JfnIHcWDFGo153yFD0xpvZkzlUzGxRr8kA2qNJBnPBujVWVUK0et2GsomGnM1FtYcmU0FHNMFAbmTSrrkVQjj9vT9z0FO3AtoiCcYKo6XdYeo0GdiEFChVWjB1163QpMLaSfhWp6nYl0BnLMFgfshzNJkoZsVbGMztJ+9an5P3pC2SIG8PkbdLUTC1mkxlE1EWcTNbjGOZHGxV3HxPWXSEc+S0jaUnf9d2bCLKpjcWYbxwkHydjUNUaXqjTWhrBxncNEEUi/ZQjCb2MzEpJqZUXxib4UKSO0eWc2FqB6vjA1iachCrqWB7tpn/GJ6DUhHWxvZyXqqS+0sXbfYVonxvcB4f7xhmT3aYfx+cTb5qXl0DCWVxdeurPJpbyW9Hcr6zKM3hVr647Fuen7/dHPFEbdOFPeNBgUrOSefnnICzVHIomwmYtIRD2Ux5nd6Lw+WcmBgMTWQBEw4YELMgXAxyzZkwYWCjGJgo6q4e/VWvtYJDExknfqake/I1ThV1G1UfV9nUJLlUVJ6+mVwOEDINhnITtQvhkzTZwEB23D/xnYLBbAbTVNhWsbJJ9SnlJOsrLq272OiauBOFt3MVMhzd7k8W6aJuzaHcFHTnMpiGwrZ9dBdjGCYncCrVV8kD4Xa5rdKtDIbzmcOieyg3TsgwyNtO+vW6YaKcpYJSBtxA3a6airoNg+GCo7s64NaJ2yjdPjSD+bFyH1Rrqh5eQ/lg3XZRt1lMiKaLAaDO55WNBi1tF51Zd5uQYTJcGHN01+zSW2w/oJVmKDeKXQx+dNOtFIwWxgkbBtq2qGQSdSjt1OvEdJXG7uS2Oa+MKt1K6xonpXQrNg2T0cKo32mJRjNWGEYrG1OXXB/HonpX4Iw1SswwwLDQKCzteP9O/hGrqLeUXE2jtVXMcFtKiuZoMpTGpkBIgYnjpJT6wFBWMZA2RM4acjb+oxgkq0s2dnmHYcs+hKks4trCwqBQvLAZ2IRLfakHUUaImM47GWeLraoE28KYDqNR3DU6m8cmOlkVO0iTkWfMDvH0RDuvFRJOj+kCD2U6+H02zUnxQ3SZWXLa4NlsmudzTUCIiD7IougEN3U+xxOZVl7NJzGABZERVscHiSibX46N4x7FUz2+D0mQ7HSkNWCZBJwLZdQITUpNXYupFIlQhLFC3teTTYTCDAc8pVN5ZOzNYWMTC4eYyBfAVjBef6hN5SROGy/kfYNSE6EwI4VsjZNRr7sqA6yHTTVKudtYtiYeCTv7+niUZSpFMhRhPJ/H9gmyTITCztMuPpqqL/hT1u2CrTXxcJjxQs7TxlCKZCjq9HeA7jHrDeoOwMvM1pqkGWGsup8m60aRNCNkCjlf3fFQhPGqctyKe8O6ffo7aVaOr+OYTP62rkiYUUd31RxCnW4jwoTtr7vmxq5wnsIJ0O1mY2u7eK2YqApurdcdN6Nk7Wy5v900Rc0IBdu7HFdNLu9PbptbQKrWmqgRZdwa9zzFFYqoGaNQmMBWlYT4k3WFjSg245XgVpd+qna2lCoFCmsXG8cVdZwZt6BVG9OIU7Cd8zKE7dIJBoYRA3u4+ASS7XFjjAPDxXIgRL2m6gDbvYUEe0e97jGO7iE7wn1j3S6fagoqSYQJEobFqckDnMqBGhuNQcqMFB/99r5rxM3ktHRO4BiPQelLtTA3IOEZwJkzF/h+bmnNhf3H+TonAOf1LvGdtgY4qbMvMAalJRJnfkCWWICz5vonhrO05qIFiwP367lg3uJg3d2zAmJQNM3RGAtbSuvv3nZn9wX390WzlwZuHXBeX3B/n9DRG/g0VzocZXGz/y7MNpqzp7B79IV9xwXqPnfW0kDdK1t7iQVkQU6FoixpLsUyeGhCs2mGf/Cjjeb8WcsDdW/qCT4my5pnBWZvTpgRlqb9d2G20ZzetSzQ5uwZKwI1ndYdfEwWN80qxnJ428XMKEubggPqN3YE72Z8etfxgZrWtwe3bU5iFgkzhp/uqBFhYWpugCabNW0n+NpoNCe1rg8MgF2W9ktA5pTUFZ1NzEjgpzukosyI+e9orbHpT53hqwdsOhMXEPTVMBE/17cugN7YLOJm0tcupMLMTvifcxqbfOQC/+VwbFa3nOLb3wYGa9o2+tbVyBzTDorWOjAPigbyATlHALIBO/kC5HxmYUpYlh24h46l7cCnPDSQ05X0PW6fa2DCyle9crOimKDK36aA5XOxdCa6bW0X4ya8Fh2ciepseeM6b+VT0ZTTU9OtA/rSRmOVU1x7a8rbUxgnU9E9BRtLW4HjxNY2tg7uy4IOHpfO2PXXlNdTsbECHXmNnpruulwp9TZ+M58lCrbXjsCVsi1tUdpDxuvmo7GxpqA7r4PHUkF77bBdpWkK48TpR79zDlA2NkHHTmMFnk8ay87hH2wK6BxewZ8VmzymKvjqNlUBg2zt/00qy8BG2Rlf3QobQ48XM6R4ty1MFn/XGsIqeJxA9XnpzX+ONzFsh7FcirE07MnHGFNzWZhahnK5lRsYxMw4p3deGFhXo3JMB8m+OjLAprv9g4cUzrqx383HANqiSQ5kx3zLSodjjOazgd96DgcKMAeS5AqWs75L/eliGNCainMgM04lEEVXlaDBgHQ8wmg+V4yJmFxLsXClKSdh1NVl1dooPxtAKUU0bDBhFWrrqKlV0ZGIc2BivHiTdtGtIB2JMF7IucxGVOwNBZRjIjz6UmlUaZda1yBJpy9jIZNMwfuGaCgn3f/BCbcA2IrupnCEjOWvuzRd7zeSFBqjtJOth27TgHgo5Ju92KASAGvhrlsBqXCEiUDduioGxUO3cuImKpu/uehGkQqbjFk5X5v2aJKB7Kjvd+NkOEzOyrmcl7W6a3cqdhu7Tu6Pyq3QXVMyHGK8kHWxcf42UHTEkgzlRlwCnCv9nQyFsOycr42hNGHTxtZMCvAt1lXc8ThilDbb8xgnKJojBhkrUwxIrdcdUpruaIKxwhCFOje0aIMmGTJQZHFcVVVnY2ATNixSxSDZgjbrdIeUTUhZtJrj2FqRo9qmpNkmjKInUiBvj5AnRG3AbSnGxGJWNIph7yenKSdpK9kobKKqQKsZpkVlyGkLt5zZMaXYW0jzs+GlLmO3ckyo+csdhSJspIhyiD9p3kF/eLw89pSC7dkmbh3upyexiqvm3MgtO/8HWwcfKv+vRtMT6+OqOdfTE/NP2/B2I0GyUyQoHgSc9eCgb8Y2pZkIf7JWITDp2+HCwHC2oi+eB3U1qpLuYoZUk+o7grOeX/zfbKGAYRRjTGoK0uWyyg8tqEmfVdlU1+1lYypF1qq+ydf3lUYXdZcCKXXNp6Xl1qxdKCd90y66nSDCou+k3G+a1Uu3paDDOodJOTkwcpblW47GGSf6MOgul1unpvJ+bRt8dNuFYN22o9vAR7f1BnRPsb+df3XTrcjahap2ut0OdbG/i6896svbBUzDQGvLU7eqsq8N8HU/Jl6anP7OVxxM177UZK1cVX+7a8rbBUIBuks4gae6ym2oZJGt7ov66HWKwasGeZ0vx3pUnBlnqaFUTs7OQjGTrNaVRRNVVZ+l80QMBdjFwN2SCLtsU4pfMZXGyWFdCZI10DU2htJEdcUGdDn41SCErbMYCqIUsHUp7NcJJC496qt1BqUsosqZdarOJFupL4tSJlGliWhdnnMycC6fSqliqny3sVt1zZnC5V9hkNc5MjrCtw8tYGZo3HFSULyUS3LAcnKtZKxRomaMq+ZczztzV/CH4aco6AJ9ibnMSSyatrEnJY7pJZ5ZiebApGgWOjhXilJ0xFK+icoUzrfQoNiCaED8SbnOQN02bfF4pfLJP0XdnfFkRbfCGRFGxUYB7fEkltduxkW7mFHl63rYAJWkaB42BW3TFpBzxFCKzlhFtxOQWPkpFd8RTZYTWU22KdlV97eXTbVuL5uCtsu5abxsDKXoiKYOi+5wVdIwn+4uJ3PzKsfSNm2R5NR0460bnMd1A3VPsb9DAboL2qYtkvJtv4GiPdrkqbtUVks4WX5k28vGVFPVbfpqsrRFa6TJs6yS7rZIOlB3OpwqLyl5Hzujpi6j6qdWd8i3HFtbpKvyaThlVVLcO7oN0uEWSssNSjmPzZqT6kuYzeVHzavLqdGkQzV1mcqZNTGr6rNRGMVkbtU2oRobi4jZXj4CRtmm4pwoDEJmF6XboaEgrGwnfX31k3xGO5Qe6laKsFJElCKkVNkRaDEqX1T9x4n/YpHGJhVqLo+b3YUED2c6eCTTXnZODBSd0comj22RTk7uOIuNnecxN7l42jsncIw7KO2xJAsDEqyZSrFp5kJfG1trLp+z0ndmRAPv7A/O+reua3ZgEGFXLMXiVLe3J66dwXv23Pm+9dla894lywN1v2v+Ul/VGs2anlkkg3ZhjidZ0lpKnOWOoRTn9i3ytbG15j3zVgTqvqjfXzc4QbKpkF/wo6YtmuS4Fv9MxwaKc3oXB+p+95xVgbovmHVcgGpY3TaLppD/bsatkQTLWvyDTUFx9oylBOm+rD84aPPsniDdmuXNs2gK+WfaTIfjLGsuJfxyRwFn9gQHyb5z1gmBus/sWh7g7muWNM0iHfL/opIKxTku3Yf/whuc3rna93Mbzbk9awN0a05pX4n/bsaaBal+0iG/oE1NwoyzKDXPV7cG1rat8bWxsVnfvhHtu6CmOS69pqjbW1NPfD5Js9nXJmokmBFf4asJNP2ps/ELgNXYdCYv97UBTTR6HkG3zJ7YPFKhFl9NUTPGnGRQcK9mY9s635bZaNa2rPHVM905ph2Ugm2zPzPqa2NpzUsjB3xtAJ48uCvQ5tlDewNtdo4OkglYLhrMTrBnXwZ0/XRhaZWmMBTi+UMHcNthubwdmNI8tm9X+d36E8Z5/czAXmdTwKr/rS5LATvGhoq6vcrRDOYz7C3nnnG3sbXNC8Ovg+sFrDJd+vjBYN3PDe0j4M7DrswQ47ZXoJ3zergwxt6ADSNtNC8MBet+4uCOQN1/GN4X6FjtGR9ivLxTsXtfDhcy7Avc6FLz4sg+X90KzdZDO+ren/z6xVFn4zI/m30TQ4yXd4Z21z1WyLB3YtC3HI3mpZF9fk0DYNtQaZde77JeHtsbaPN6djBQd8bKsC97KFD3y6OvFYel1ziBP4y8UrW3TL2dQrEzs4fKTdW9rIPZASasMV+bnJVhIHfA18bA5rXxHR6OhdN+A80fx55H+WhSwMHcTgy8gomd12OF/Vj2kK+NtkeZKOzytQkpi7Hcs8VHp911m9jkcr8j7KPJAEKF7cR9bpkKoHCIrDXio0mTtzMM5vYSdM4tVg+xIDyK8ijnhNgh5hlPeeo5Gjimg2T/MLiPC//3v/raONOzyvfbjMIJgB0KiGlJmGFythX4BE4QuqDQA1EwNCqVh2hlDVjnFXoshJE3IeTkFSmdm5V0UBqKU47pRJShbFG3LrWm/AIUxKMhctqiYNs4aQSqyoHikpB2Ep5p73KU0rW7p1NvZxoKZTjOY8WuykY5r1piUQZzE57lACTCIQradpLIuR2+oqb6ANhq3bo8Pet3poQMA0PpSYn2astydMcYzGU8bQDiZghL275PmJWSXmm3Piq9M4WA1JBhEFKQs6tDLStllf5qjQbrjoVMbGwKtl2sc1L7i/1dHwBbZVPUXd/ftXYhwyBs4MRZ+dAaiTGUz0yqofZVzDTQqqjbR1MpSNarn5TSxURu/rqjhhNn5NffbZEYo4UxNOXIjBobA03UNEDZWD66TWUTMZ3jYZU/r9g5sRqVINlK9pKKjYEmbJgkTZucncMuuyC1Nk5W3ggT1ggaVRWUW9LtLOXEDU3EKFAo7i482cbE+bzJzGJrKDjP4pTtVDF5mqlsWkNO8Ghem5NsNCFlEVIGPeFxbDtDXpvky8G0jk1YWYSwmBEOEdIDFFDkMaqOhJOELYJNmxGlzTTJ6xzZSU8thjCIEeKVfBM/HZlb7svJ/V1yOm0M37FkKpO/7HiZEGPcP9bFw5l2JorLXikjzzsSr3NK/ABGZBVG+61MJyRIdooUppC1VcGUnro5XDZTolSMrZwdiJVGm9pJyGaXFladx3rL56yucihw3tM40/e1swy1NlTbOFfGunKqUUW7ar+3bim05jqqa95TKHRph9ryTaq+rFKmUfCx0ZUb4+Sen6zJqU/76q6tr/Y9p4unpinQpuoWUafbox2HQ7d6k7q1rjhzxXd8Nak3pLvWrvS/bm2r0V11TPAbS6XXHjb1dVfs3qhuewr9Xdpd2RmW2tXGRheDM6fWlyF0oG5zko2bJhONETQGqOSRrdOkNKCcWBhs13FZwlAQwS7fzJWLjVIQUVbNDb9ip6B4PYkoi7C2ys6Hqh4b2CilCaMJadulHMcGQoSVSRgTWztBxwaVGJSSU+LWl5PHatAYUDjxNOek9nFmcj8HrCgKTYeZxSyP6eDH6Kczx/QSz/x0R2C8hw3MncImfwvTHb6rCQpY0NQROHvSEbC5G4ARhnh1vIdWUDAqzgnODWVeS5VuNemn+GtRa3tFt4fNwpb2ijPnYgPUbabnFhimULVxKi7lFLTNvHRFt1uQmaK2v71sFqQr/e0VrDZ500V33RTjVLxtCtpmbqrD1WayJlV1EXOzmV81Tjy6m5bIVHVHfW1KuoP6cn5TV6DN3FRnYH+nw7VxHG42QE2ciltZBW0zJxmkSTE32R3Y37MTXZ7BvSVSoanqjrvaVOvuT3QH6u5L9PjqBuiNd9fsZuxmEzPjNePGS3cqlHK1KdlZ2qInNtPXRqHojvUG6m6L9GJX7QrsZmOqJNUjXqn6wF6NImq01NlU22kKxMMLymU5NrXBvaCIhBdPsnGpLzQPqDgEhlKYyqA6GHVG2EBN0u3W3058jXdf2lhkjEXltPwhpekJTdAdqjgnGgMiwTs1T2eOaQclHgozO9Xqa2MqxZoO/+yQGji/d4nv/IgGzpgRvM36stae4q6p3nTFk8xtbfG1MZVi3Uz/5981cP7cRb4zOxo4vXde1St3lrV3kQr775raGU8yr9nf2TOVYn1Pv4+FM39z/uzg/j5txrzipcLbcklLF01h/2DTtmiSeWn/YGoDxfqu2b6KNHD+LP+Mwxo4tWu+r7MLsCjdRTrsH2zaGkkyvylY97qOub6KNHDujFKAt7ulBtZ3zAvUvaApWHdzOMG8lP/uyQpY1z4vQLdmU/dytGcCLufdk9oXBOqem+ymOeT/dFk6lGBuyj8oWQFr2hYH6LY5rfN43/4GWJFeWHzSx8tG05eYQVPIf2fopJmgP+EXlOzMOaxIL/cpxdF9fMta3/4GmJdYFqi7M9o7pSDZjtj8QN0zEyf72oBNa/y84t/eus3wOoatKHXpoIrYGg6qpSyNRetmj0ooNHOiipnxuQGa4FDobNdtAMpW2uagMX2zxE6FY9pBGc1neXn4oK+NpTX/ue8VXxsF3LHj2cAZlF/tfj5Q01MHX/NNmgWwd3yUFw4dLJ9O1UO49LqA5te7XvXXbcAdrzyHYZQyJFRKKv2tDPjVrudxD36svPfUwT2MFianL6pl/8RoMZDUW7mFza/3vOxSR+Vvw4Cf//H3ntuVg/NN5P/seaGqTe66tx3aHbgZ5EB2lBeG9vnqtrH5zb4XfXUrBT/fuc33EXEFPLj3+aqbk9vR1Tw3uJuRQoZ6TZXXh/KjvDDsr1tj85v9LwTqvmv3U1WP0bvYAL858IJvXaB5fmg3w3l/3UP5MV4c3hNY1n++vr2qJ+s1mQru3fdk5dF2t7GE5pGDzwX290sjrzFcGPPVPVIY46WRXYG6Hx14purC66Zb8eDrv/O1UcBTQ79HKbfAzkrduzI7GSkM++oet0bZMf5y3f/W9JOy2Db8hEfgbqW/nxz8ddXWde79/er444RUzsPGWRoazL1I3n696gvGZN2g9RAj2aeLGWDd64uoHIOZXxFxDYB1/o4pi9zE/yKh8LSJAH8c28ptI71ktVHjpNgatIZdhQT3D45wfmIb7ebkjLpOu5qMPBcnnmdv5g91ddT2k809B5/hgTHHUa/OJmsV67trdBYPDf2eo5ljOkh228AeLrn3u7425U3wAkiFoowW/G90McMJ2jwcQbL2YBTXawWAwtnF16ha33WxQUEqHnZu0Jr6p+yK8WuxkImFR7BpaXpXURsAq+ttqA5I9dAUNpyAxXK+GBcbpSAdiTJSyLrllSrbREwDW2v/WKMpZjZVyt8mbBhow3aCkv10h4q6veoCIoazP6/fztaTA2Bd40uqAlI9JBE2DFD+faSUk912tNTfHjYRw0AVA4U9hsmU+lIp7TmUyrqVgWFoLG3XxB5U2ygF6XCEMWvCCVosZxN0KE3zh1RFtxdGKQDWRVO5bdRmm3Xvb5OIaVHQVlV218rnJU3pUJRxK+PZNoCo6WQCLtil3X4ntQ1nx95w1XWgZhO+sgOqiZmFcvK1Wk3OckjIMImbBSxdKOo26myUgtZQiLweKwflVuI9KIe6JkyLmGFhaYuCNspJ0RQas7jDcMQokDKzxXIMbF1xjRwbJ0i2PTRatimUA2UhhEVIWZgqxMzQMJCloA1y2izXF8ImogqYSjMjFCXKEJaGCU05CVsIiCrn9xMTs3hqopekMcEJsYMsiwwSNWwOWRGenGhjW7aF+ZEx3pd+jaxt8MREC09MtDBsh0kaBVbHBjkpNoiF4p8HFpaPbe0xKfWDiSZEQeeZFx5lffwgs8PjaODFXIqHM+3sKiSYEZvHJxb+E9MJCZKdIkGb8oHzHTMo+6uBIuT3db6IaRgUrMOxV3ERNel3FVo7a6TlZzNcbAwmJU7z6A7TUFh28cYX1EwfTWUTP92l/vbRrXD6slyWR12mMpw9L4IPTd0a8Ru10WhMDOzSN9og3T71GMqgoK03pMnPtvoQT0bjjAHf/6c2cZoXpeOm1BSGyVTaNul3NY5uA0vbnvWpoo0qvjA9psurdb8ZTWUb3/7WTvI0bRXjHLw0VXR71aWUk0VW+bStXpO3ndOP7rsLo51EbBal+Az365ihTJRWoLTrbr+OBgONk704rJwnclyqK2tydiAOtnHbzRg0SploTTlBmzshQGEqTdLneqLRjNhhtoz3sGW8PjeSVXTcoobNhsQAGxIDdTbjdiXbbGWGqB5DmaDzvJxP8XLefZkuZATtDjS9OaaXeBakO+iM+QelauCkgBgUG82GrjmB9a3vmh04e7KouTMwS2w8EqIr4a/b1pq1Pf4xKDZw8ozZvjYAG3qCdS9sbvfNpAsQNUJ0x/3Xwy2tWdsVHPOzwTfew2HDFPp7flNH1RKAO2Fl0hP39/QtrVnT4a9JA+s65vjaAKzvnFsT/OjGnFR7OUusF2FlMiPe7GtjaZs17f6aNLCm3X9nbICT2oN19yXay86OFyYmM+OtvjaWtjmh1V+TBk5snR84/3l86/xA3T2xtnKWWC9MZTAr5h/zY2mblc3+iR8BVqYXBepell7ou5MtQEekvZwl1gsTg56ofyJCC4tFTcEJBOcnlxOUjLIvsQL/ZG6QMLsxA7KtQoim8BxfC41FU/TkgHIgEj0VL0ehxILkkgDdmmFmYeMfYxU3oDsadE+xmJtc4WsDsKRpbaDNdOaYdlBMw6A1EpBWHcWspP9FHmBxs39QH8C8KTwN1BNLEc5HfLPEpqw4bQm/rJbO1H5vc7r4qr6wUszJknb/CyrAvGb/mwVAVyJF1CztBOhOKhKhI+7X347uvlRLYH2LWzqpXy+vlAOaOeUAaG9NnbEEUTPka5OKROnwTb/vTNL2J1sCVDtBuUG6+5MtgcG9ndEUcdP/xpMMReiI+TmEju6+ZFv5tZemRU3dvnUB9MX9ynFoiySIBXzrS4YidESDdfcmgnUvaOrBv79hVqw1sL/bI0nipn8QeMyI0D4F3bPiHQGaNPOaZgba9MTaA3W3hJuKur0vKFEjQmvEzwF3dPdEuwM1zYz3B9q0RbuKNx6fcy7URMyI+eqOqDBNIb9rqrPxYHM4WFMivCRw1m9WtJu54YzPLJRibQKeys3yvH7bGp7JdpAKtQfUBh2RmYE2LZHOQJvpzDEdg/J6ZpT1d3410C4djjLsE0hpoOhNNrNrbNDTv1ZAd7yJfZkRXz89XAiTHTBQzXlUtD5HgM4Y2CNhZ0ZSg5NcbPKKuHZ2IU5GGZqYqDsvS9llDVPR15xm1+ggXitPSkFPKsm+iVE8v2QqCBuqKrGYhyY0honLDsQVG6WKycyy3knvDKXobUrz2tiQ79JbdyLFgYnRYjzL5PqctoUNVTXL4q3bNErLfN6626JxBmqSmdViFsfJa+ODnnsyKZyntA5mxwJ0G1i6tIDnoQlNyFAe5ZRsoC2WYMBnJ25TKWYlWtid8dfdGUsykBstOsTu9YWUwvbM9FLRHTGNYsI3dxtTKdpiCQ5lRz3Pp5LuvRMDvrrbo0mGcqOlXVbq6jOwCRnFvEI+up0bHeRtuxij4dZ+J5XAYH7Y81oRQjEz0crrEwfJe+g2lKY9kmSsMEyhFFDmpluBqWo30pusycQmFdLktVWVXKzWJgx0xRIM5Q9N2u23QhjoTbQwnNtL1mP37JCyaQ/HsPVB8tqkNtrIqc/EIqos0uY4eUxsFxtnF+ICMyNj5LQmpyfPbjnpNWPKYm40Ss7aR6bOxiGhbPqi/YStnYzpnOt4iiuThNFJwc7w4+FedhfiqJqRrjglfoClkVG+MzSbi1J7WBUbxnIuxdg4QcTbsyn+Y2QmWkWxfHOYKJJmO8OF+iWi6hYuTa/j/bP/0qecxkNiUKbInnLadW9MlK9zAs4Sz0B2PGDyDw5lM5jK8F12yOVtwEQPhdFhjYpZYGiwFPaE6eQ7QVO5JpUjrYrvOaeXaSqGchOVwNUqm1ImWRvNwERRd+m6VF7YrfweKOkurd9OvsYpHOekfD2afIrrqvKqdvKtKcd5ETIMR3f9ta2MjeZQNuMfvKxgMDfuOBa20/jJzp5STl6KStBmve5yPoUp6vaR7ejOjQfqPpTLTEG3E8NQ6u/aQ6LLtqXYivrvIRXdw/lx38BVG82hfLDuwfw4IcMo7v7t3pdW8XZTes9VN2BrZzM3TSV7qwKUqtUdNE4G82OBuoeLurVtOfVV3aSNYnIyO2CcgNPfVlG3wq4NNlXOrT9kmIwUxsrtrC6t9NpGM5wfRSub0pykLpalVCWp3GhhjJBh+uouJVczitHk9iQbcGJKbCxnUz+tq7LJVgJbTcNk3Bpx2qbtGofHiaV3zvHxwhAomwhO0jK7Sndph+EJe4S4EQIK2NjlgFsn/sUuJnBzYmsiWNjaLgfcljLNOoGkGk2BsAITqzZIthhIa6gQtj1ASNmksMljlONEzGL8i1KAfRBTaZoIkUdTKCZrM5UiguEsX+sh4kaUDzf/kZfzSZ7NpslqgzYzx+roEB2hHNuzKTSKn4/O5LGJVlZFh2gyCoxpk20TzewsxB31AQnWDAzGyynz3dFoBnLB26dMZ45pB6U16r+8A87FImqYZG3vlNqmUiRCEcYKefzWXxOhMMMB6fANg9I+n5BX6HzAKlzJUZms29bEwiEmrIKnjakUiXCY8UIeuxQY52KXCIUZKWR9IwSVUmXHZyp4BbdaWhMLhZ19fTzKcvo7zHghV9HtQtwMM2ZlfQNJy016k7ptrYmbIcatvGcXlMZJoO5QmPE3qDtIvlf7HN1hxq2cp42hFAkzQmYK/Z2p0u2qw+O3n2638mxtk5h0fOt0o4ibESasrK/umBkha00EBi2W9EwFr8BVR3eEcSvj2QcGipgZIWdPYBcdElzKihgRCvqN6TZdbPQkO1cbrQkXv/VXbCbN7KGIGHEsKwPFp3Hc+iCkomhGy+WYqv7aWuNsqUqK+HqbopOknEyx9WhQcdDZosPjFnBrgEqCnkApiwiKiEuclFYxNM4XgwWRMRZE6mcdE0ZFw55CnD0Fr6V4v68yjvMRNqIUfPZlcxJftnh+fjRwTMeg9KVamJMKjgs5I2A3Y0trLuzzT8AFcF7vEs+pZgA0rJnRS8T0DsbTaFpjcea3tOE3wAHO6vdPDGdpzUVzlgQ+Rn3+7MX+uoGTOnqJ+j4VpWmOxFkQkPAMNGfNmlp/B+k+p3dpoO7j2/uKMSjeeprCMRal/dd6bTSbZiz2tbG05rxZy4J1z1jqu3QFsKKll5hvFmRNMhRjcUDsiI3mzJ6l/jZac86M5YG6z+wObtvSdG9gLEfCjLI47b/+bqM5rTt4N+NNXSsDNZ3aGax7YaqXuBnF75yLmVEWpYID6k/uWBloc0rHiYGa1rStCrjmaPrjfcRNv1gOiBhR5ib8dzO2sVkVsHOuRrOs+RSCAmDnpzYE6m6JzCNi+O3CDIaK0hpd6WujsWiOX+irB2yM2EWA95dQW0M+crb3NGPRpj3ST8xM+WoKqTCzE/7nnMZmWdo/uFejWd58iq/NdOeYdlC01oHR+xoCbQByVvCeCPmcRmcM1zFees8aVZ6R+bo4yWljY2Hh7YVrJ/t9Wbe7DWhy2ir/7W4DebsQaFPQhfKOx+42Co1dtY7vbVnw3FW0ojuvgzVZU9BtaQvvbdZLunWgowNT6+/CFHQXpnBMbGy0b18W+9s1iVWtpqmMb0t77VRdXU5w22xtB97ANLpqnPjUZ09lnAT3pTWl/rZQ5XPOHedh5WDdtg7WPZWxax823Ra4JnyrlOVsD+g/BhQadC5Ak8Ygj4nbMmClflPnCas8fjMNYQqEcEv4VinLxCJCFuWjyUCzIxtjVz7pmiXW1pDTJv853sajEy2u1+/S/z043lLV3+66FTa2XbpfePeT1vlgGx+n6mjgmA6SfXVkgE13fyvQLmKY5HyWeAycdOgHfAINAdLZFCNDBexUDuK1e2hoCxiKQEFhV8WNlAJaS79RODEp4aJNOYCk6jAqZ8klHFVkC1bxo/oTxjAUHck4r2fGix5StY0qCSAdizKaz7p8q6/YK+U4RcCk+irlqOKOxz5fLlBALGKSKRQ8dZuGoiOe4OCEWyCp87dS0ByJMFbIuTgXFXujuMNyJeGbm+6gCVlnDMRDoaoswPWaDKXonILupnCECStHwUN3KRajNm5kkm5fm2rdinjYWS7za1tnPMlAdpRC3TEptU3TFCrqruupKt0wpURt1QnPvHQnwiHGC6WgxnpNJoqOWIJDudFiPiCX/gaSoTA5K+cyY1E7TkxDVyVXq+3v0v4uoZodj13GLopUOMx4YcJTt4GiM5ZkOD8cqNuyJ1xuUSUbXdzN2Enk5q3bJm5WJ2Cr1e3sDKxoiygmrPFicGutJoVNRGk6o0kyhUPlRGeTNYWwSYcUYcbIw6SAW8cmjEXMyNNiZshrg5wO1emOKIuIKtAdGsbSiiyhSZqc3ChRoD+i0fYQmXJETUW3iSYOPJJdw85snrOTO1gQcWITNU58zoFClLvH+hm209g6x8bE66yNHSqH9xkKRm2Tu0e7eamYr8TZRL6+v0vRPaVFK79xEjaSZKwx7JpyKvYmMDe1gqvm/k3dCGhkJEh2igTFg4AzUPycE3B8hAmftcIS2UIBQxnYIxEY0xB1kojpgoJcMdRMaarHY8l/1G4xIoriHJiuHbvKiWXJWtVJyiZdfJUzlZwp5J31bcWku4Yu/2/WKlSSp9UUU9Gkqaxz6+rPyjfLSbrdblDKySWRtQrFAL963aXAzwkrjy5nSq3VXaprokq3dtFdqkNV/e2n20d2rW49WXfRUSj2t5fuUn0529Ft+Oiu7o/a+qZiU3nfVIqcnfd0Gkr9MmHl0EpjFnVXhlulvmxJt548gV+5DNdrqq9varoNcrbT3/j094Rd7G/8+9s0nKRnQf3tBMBWbwtRtRNydRt8ded9dYMma+cCdeftnBPcOyXduvxVp6K7NqleKbi3+miVbAxlkLedOKVw0W2yUcXLjS5vO5G3J0DZzkOGump339JtVoGlc0QNw5kBKQbAlr6KGWVNjoqwsgmRw3I+cZwu7BobU2niOl+TudYJkAVFCHQGQ0ESG0tTrI9iNlpH94SdI4fBL8Zmk87kmBMewUSzz4qzu5Ao9kcOA5MHxzt5JNPGwsgoUWVzyArzUj5Z1beUz2+3cVId9F19vMrjBFAYFHSuHKcz+ZwrHdtMQCDtdOeYXuKZlWgOTIpmoWmJ+OUccS7yHbGUb8IvA0V7MlGZhbAVZEIwHoKcSWm41sRDlByQ0peamguOqthMtgMsW9MWjdfaqNpyTKXoiCdrs8lOsjFQtEcTlVkIj7KiRkV3KbCx+sdT96RyCtouBy97lWMqg45ospyozM3G0Z0s97dXWdXZhP10l/rIQ3ZZt/Ipx1RGcZy46y7dLNqiSc/ddUtlhdVUdXvXBc7yZWs4Gai7PdpUU1b1bq8l3a2RKt0e/VSdpO3N6bZomYLutkhTYH+3hFPFZTX/sqp1G6q2D0qUkrn59XdzOIVCedeFQUs4jYG/7qZwU3F5yrs+NWmclGZ6qnfz1YBZTOZWaVutja1tUqHmsm5DOTvsmqrinBgYJEOtGFT6wKyyKZUVM1uwSw91F8sJKRuzWpOuxFc5NjZhZRFSdkUTCkWkppywsgkXnwRy2majjA5KtzpTQURpIkVnu9TjLeHmsu5hO8LT2XaezHawu1DZVTlhNlPahTmjTZ7ONvO7iVZezKeqnJPKYPAbJ6UkdF7nicYmWezvyWWpqv5uj8ziaOaYdlDaY0nOmrXI07FwLgJRPrxoja8jY2nNx5as941TsNF8dNUaX3fIVIr3L1vJrKY0ysPSUIrju2dy3pyFvg5RMhzh6mUnepZT0v3x5euCdS9b61uXqRTvW7CSvlSLZz8ZSrGybSbn9y3xLSsRCnP1orW+/WRpm48tOdk3dsJGc/Xi9b7ZbU2luHz2avqTrb66j2vu4fzeZb6ZW+NmmKsWrPdR7ej+yMJTfHVr4Kp5J/tmLTWVwcV9q5mT7PDWjWJRuofzZ67w1R01wlw5zz8Yz9I2V83bGKj7A3NPIWx4T8qayuD8mauZk/TOlmygmJfq5rye4311R4wQ75/tv5OrpW2umH16YIzNe/o2EgnQfWbXCcxJ9vjq7k/0sKlrTdmxcCOkTC7tPRO/IFELm0t7zw7IEqu4YMZZRAzvgGMDgw1ta+mL93leBxSK7mgPG9o2+uo2lMnGznf66raxObXjsvJN3Ev38W2XEVLe2VYVJnObNtEaXYLy1KRIhfvoSV2O5x4dgMKgpekavOPMACxOaHuvr26FYm37xYQNP90GS9OnMiO+0FO3QtEa6eaE1rN92uaUdXLHpYH9fWLbOZ6fHw0c0w4KwI2rN9EUjtXdNEuv/vakC7h60ToWt3R53uyuWXoy7523mov73Z8qMFCc2j2XKxadwOfecXpN+SVMpZjZlObaNev5+zPOxTRUXX2mUkRNk7/ZeBY3rT2N5qibbudS9F9PPYePLDuJZe1dng7Bn69Yy3sXruSyectcL18GilNmzObKxcfzVyed6am7J9HEJ1eeyn9bdwGGoeou4qZSRAyTv117LjeuPpPmSNxT99+uOZ8PL1rL8tYZnv39kUXrePfcVVw+Z5Xr5waKdZ2zuWL+SXxu1TmeurtiTVy37DT+3xPeWVxSqbUylCKsTL50/IXcsGwTLZF43U2zdOH/wuoL+OD8daxoneWp+4Pz13FZ//FcPvsET90ntc/mT+at4cYV53voNuiIprh2yZl8cdW7MJVRrxtFyDD5/MqL+eSSs2mNJDx1f27FRbx/znpWtPR53nzfN3sd7+o9gcv63J/iMFCsbp3Ne/s38P8c905P3W2RJB9fdA5/tfwyTMNb9+eWXcbHFp5DSyTpqfuGJe/isr4NLG+e7an7kt71XDRrLZfM2uCpe1nzbC7rO4XrF11WU3617pZwij9bcCGfXvQ+TMN01W0qk08vfi8fmnMBrZEmTCbrdrhmweVcOOMdLEvP99R9Xs8pbOrawPk9p3nqXpiazYUzzuDqOVe46jYwaAqn+JP+S/nwnA8TUqE6B8TAwFQmV8+9mgtnXkY63FJnUyr3Pb1XcnLHOcxLHufp7KxpO5MT2jaxrv1i188VBjPjC1jbfjGn93xqUs9UbGJmExu6/oyTOm/CUGGXG7mBwmRN118xp/U6omY39U6KU+78ts/RnLqKWOQUvG53ycT76Etfwrr2Sz1198Tms7b9XVwwY3PxvXrdcbOJM7s/zPkzNmOqUJ1u5wpjcOGs69nY9Sekwx0ubXPKPWfGRzip7TzmJVd59vfK5tOZm/R/Imy6c0wHyZbYMXqIv3vqfu59bXt5SWB5aw83rDid02Y4j+qO5LP809MPctsrTzk5OoCZiTQfX3oy759/AkopLNvmX7Y/zHe3P8LB7DjgzMBcueBErlv2jvLyzc+f/wNfffi3vDx4CHCygr5r8VI+e8pGOhLO8sbje17jvz38ax7dswtwhu1p/XO5ccNGlrQ7j7zuHB7kvz66hf/96gsV3e3d/MWaUzmjz9mnZDSf5R8e/zU/ef5pJ/AUmJFsYvPK9Vy5ZHVF9+9/x788+ygHJ0q6I1y5+AQ+tfqUiu5Xn+MrT/2al4YHyrovnnMcN55wBp1xZ2+gJ17fxd9v3cIj+3eUdW+cMY/PHn86x7U6j7y+NjbE3z15P/fs+kNZ93Et3dyw8jTOnLUAgLF8jv++7UF+8vLWcn/PiKf586UbuHLBiSjlZHb9zvMP893tD5cDlFOhKFfMP5FPLttY1n3Prt/ztWe38NLIAcBZZriwbxmfWbGJrngTAE8N7OIfn7mPRw/8saz75K55fGb5WSxtcfYp2T0+xD88cy+/eu0P5W/lS5q7uf64MzhjxiJHdyHH135/P7e++kRZd3cszUcXncIV89YUddt8/6WHufnF33IgOwpAMhTlvXNO5NolZ5QfH7539+/5xh/u56XR18u6z5u1nE8fdzZdMWfcbzu0i68+dy+PHnylPJ43dM7n+iVnc1yL86ju3swQ//zc/+bePc+WdS9s6ubaxZs4vfiIcaaQ4xvP38fPdjzGuOUEzHZF03x4/qm8f876su4fv/oQ33/l1xzIOmvfCTPC5f1ruWbhWWXdD+x9lm+/cC8vj+4HnJv82T0ruG7JeXTFmgH4/dAuvr79lzw28HJZ95r2+Vy76DyWNjvT1vsnhvj683dz/75tZd3zUt18bME5nNblfBmYsHL8y4u/4o7XHiFT1N0RTXPF7I28t/9UlFJorbl152+45Y8PciDnBEDGzQjvnLWeP5t3LrHiY8+/ef0ZvvvyPbwytres+/SuVfz5/IvojLUA8PzITr7z8l08cej5su7VLQv5s3kXsTjdD8CB7CDffeVO/r/Xnyzrnp2YwQfnnM8pHY5TnbVy/PCPd/PLvb8hYzmJIFsjaS6btYmLZ52OoQy01ty990H+12v3MpAbBCBmRDmr+xTe3/9OYmYUgMcGtvLTnXewM/Ma4Dge69pP5AP9l9MeddIovDr2Krftuo1nh58t617StIT39L6HeSnnWjGYO8T/eu0WHjv0cHk2YUZsFhfNuJzjW509X/J2lnv33spDB39F1nayJjeFWtjY+U7e0XlRWffvBn7Bb1//D4YLBwEIqygntJ3LGV0fIGI6S8+vjPyWRw7czIHsS4AzczK/6R2c0vXnNIWda8Wh7HaePvB19mYeoRSr0Rk/kZXtm+mIOXvV5Aqv89Khv+f1sV+gi0tHifB85rR8ks6k4+jbeoLB4X9iZPR7aO2MXcPopLnpGtKpa1BF3Y8P/IKHDtzGcOFAWffq1nM4vetDZd0vjPyOLft/wL6Jkm6DJekNnNl9NS0RR/e+iVe4f+/NvDz2RLm/+xPLOaP7KnqLjxiPFg5x397vsW1wS7m/26O9nN71fpY1vwOAgp3nwf238LuBu8nazrU5aTazoeNdnNxxibOh4DTjjdy/xUGpYiA7zp7xYdLhmOd+MGP5HH8cHSBihpjX5L5BXt62eHn4IBrN3KZ21zwbWmteGTxEJp+nr7mZdNR96nD3yDADExm6kinPDQIHJsbZPTpCcyRKX9pd93g+xyvDhwgbJgtafHQPOWnB5zW3EfPQ/erIIcYKOfpSLTRH3HXvGR/m4MQ4XfEUXR4bBB7KjrN7bJimSJT+8r45k3QXcrw6MkDYMJnX1F7eDbiagm3z8sgBLK2Z29Tmmh9Ea80fRwcYL+ToTbaS9tC9LzPMgYkxOmOpsvPipntPZoimcIy+pLvuTCHPq6MHCRsmc5vcN/Yr2Bavjh6koG3mpNo9de8cG2DMyjEz3kKzRzzUvswwB7OjdMRSZedlMkO5cXZnBkmFYvQmWlEuYyBj5dgxdpCQMpmT6vDU/cexA1japj/Z4al71/gA44UsMxKtpMPuuvdPDDGQHaU92kSnl+78OHszh0iGYsyKt7nqnrBy7Bw/gKkMZie7XHVb2mbH2H4sbdOb6Cg7JpN1784cZNyaoDvWRjrsnszxQHaIQ7lhWiNNdERbXG1G8uPsyw6QMKPMiHW46s5aOXZn9mMok95EF6bLDcfSNrsz+7C0xYxYF1EP3fuzrzNuTdAZbScVcr9WDOYGGcwP0hxupjXidc6NcTD3OlEjRme021V33s7yenYPhjLpjM501W1ri4PZ17B0gbboTCIeyyNDud3k7DFS4S7iZrOrTaZwgEzhALFQG4mQ+75nBWuYTGEXppEgHprtqtvWExTyL4EyCYcWoFw2Upyq7kO5vWStMdLhThIh97E7mj/ESOEgyVAL6bB7DqgJa5RDuX1EjDhtkRke/Z3jYPY1lDLoiM4qxwxNR8RBEQRBEASh4Xgj9+9jPgZFEARBEITGQxwUQRAEQRAaDnFQBEEQBEFoOMRBEQRBEASh4RAHRRAEQRCEhkMcFEEQBEEQGg5xUARBEARBaDjEQREEQRAEoeEQB0UQBEEQhIZDHBRBEARBEBoOcVAEQRAEQWg4xEERBEEQBKHhEAdFEARBEISGQxwUQRAEQRAaDnFQBEEQBEFoOMRBEQRBEASh4RAHRRAEQRCEhkMcFEEQBEEQGg5xUARBEARBaDjEQREEQRAEoeEQB0UQBEEQhIZDHBRBEARBEBqOw+6gfPnLX2bNmjU0NTXR1dXFJZdcwvbt22tsJiYm2Lx5M+3t7aRSKS6//HL27dt3uKUIgiAIgjBNOewOypYtW9i8eTMPP/ww9957L/l8nnPOOYexsbGyzac//Wl+/vOfc+utt7JlyxZ2797NZZdddrilCIIgCIIwTVFaa/1WVvD666/T1dXFli1b2LhxI0NDQ3R2dvKjH/2Id7/73QD84Q9/YOnSpTz00EOsX78+sMzh4WGam5sZGhoinU6/lfIFQRAEQThMvJH791segzI0NARAW1sbAI8//jj5fJ6zzjqrbLNkyRL6+/t56KGH3mo5giAIgiBMA0JvZeG2bfOpT32KU045heXLlwOwd+9eIpEILS0tNbbd3d3s3bvXtZxsNks2my2/Hh4efss0C4IgCIJw5HlLZ1A2b97MM888wy233PKmyvnyl79Mc3Nz+aevr+8wKRQEQRAEoRF5yxyUa6+9lrvuuosHHniA3t7e8vs9PT3kcjkGBwdr7Pft20dPT49rWTfddBNDQ0Pln507d75VsgVBEARBaAAOu4Oitebaa6/l9ttv5/7772fu3Lk1n5944omEw2Huu+++8nvbt29nx44dbNiwwbXMaDRKOp2u+REEQRAE4ejlsMegbN68mR/96EfccccdNDU1leNKmpubicfjNDc385GPfIQbbriBtrY20uk01113HRs2bJjSEzyCIAiCIBz9HPbHjJVSru/ffPPNfPjDHwacRG1/8Rd/wY9//GOy2Sznnnsu3/zmNz2XeCYjjxkLgiAIwvTjjdy/3/I8KG8F4qAIgiAIwvSjofKgCIIgCIIgvFHEQREEQRAEoeEQB0UQBEEQhIZDHBRBEARBEBoOcVAEQRAEQWg4xEERBEEQBKHhEAdFEARBEISGQxwUQRAEQRAaDnFQBEEQBEFoOMRBEQRBEASh4RAHRRAEQRCEhkMcFEEQBEEQGg5xUARBEARBaDjEQREEQRAEoeEQB0UQBEEQhIZDHBRBEARBEBoOcVAEQRAEQWg4xEERBEEQBKHhEAdFEARBEISGQxwUQRAEQRAaDnFQBEEQBEFoOMRBEQRBEASh4RAHRRAEQRCEhkMcFEEQBEEQGg5xUARBEARBaDjEQREEQRAEoeEQB0UQBEEQhIZDHBRBEARBEBoOcVAEQRAEQWg4xEERBEEQBKHhEAdFEARBEISGQxwUQRAEQRAaDnFQBEEQBEFoOMRBEQRBEASh4RAHRRAEQRCEhkMcFEEQBEEQGg5xUARBEARBaDjEQREEQRAEoeEQB0UQBEEQhIZDHBRBEARBEBoOcVAEQRAEQWg4xEERBEEQBKHhEAdFEARBEISGQxwUQRAEQRAaDnFQBEEQBEFoOMRBEQRBEASh4RAHRRAEQRCEhkMcFEEQBEEQGg5xUARBEARBaDjEQREEQRAEoeEQB0UQBEEQhIZDHBRBEARBEBoOcVAEQRAEQWg4xEERBEEQBKHhEAdFEARBEISGQxwUQRAEQRAajiPqoHzjG99gzpw5xGIx1q1bx6OPPnok5QiCIAiC0CAcMQflJz/5CTfccANf+MIXeOKJJ1i1ahXnnnsu+/fvP1KSBEEQBEFoEJTWWh+JitetW8eaNWv4+te/DoBt2/T19XHddddx4403+v7v8PAwzc3NDA0NkU6nD4ueV155hU133l5+ffKMGfzgve+vs5v31f9e/rs5HObJT1xXZ7P0a18hq23A8QBfvP6GOpsP3PoTHtr9Wvn1w++/kq6urhqb27Y9zWfv/z/l17dccilrZ8+tsRkZGeGkf/sOedup78tnbOJ9K1fV1XfhD7/P8wcOoJTiw6uO53OnnV5n870nn+B/Pv44tra5dMlxfPYd76izEQRBONYZGB/nO08+zkAmw7KuLq5YvhLDqP2+v3dwkIt+8iOGs1kSkQi3ved9LGjvqLEZHx/njB98jwOZDIZSfPbkU/noSWvq6jv7377LS0ODAKybMZMfv/dP6mze+YPv8ezBgwCElWL7Jz9dZ3PpD7/PUwcOlF//8vyLWLRoUY3N3295gG9vfbL8em1XN7e8/wMBPTJ13sj9+4g4KLlcjkQiwW233cYll1xSfv+qq65icHCQO+64o8Y+m82SzWbLr4eHh+nr6ztsDkq10zGZ+y6+lLlz5/raXLF4CX973gVc/O/f45mBg642LZEIT3z8Wv6/l17gw3f93LOsl4vOjF99JZtFX/sKhaIjNJmnrv4oTU1NXPWzW/n1zp2uNj+5/D2s6e3j0V27+JP/+Kmrzd+deTbvXbHCU4sgCMKxgm3bfPTnd/DAq6/UvB82DP5q4+l8cNVqAJZ942tkCoW6/w8pxfNFx+GU7/xP9oyOutbz4Ac+RH9HB392x8+4/9VXXW0+vW49160/me8+9ih/+5+/cbVpCod56hPX8fzzz3PePXd5tuuN3HfeLA3voOzevZtZs2bx29/+lg0bNpTf/+xnP8uWLVt45JFHauy/+MUv8qUvfamunMPhoPgdkBJRIBtg8/Elx/GtP/ze1+b4zi6efN1/CcsErEBFEDUMsra7c1LiiuUr+NEz23xttlx5Faf94Hu+Nj+89N1s6O+fgipBEISjlyv+46c8vGuX5+d/f9a5fOnB+xkr5D1tQkoxv7WV7QMDvnVtPnEN33j8d7423zpjEx9/4D5fm76mJnaOjPjaTJXD4aQcdQ7KWzmDMhUH5WhGAUEDIBkOs81lKUsQBOFY4eVDA5z1/X/ztZnKl9npzHEtrdx11Z++qTLeiIMSelM1/V/S0dGBaZrs27ev5v19+/bR09NTZx+NRolGo4ddx7HunECwcwIwlvf+NiAIgnAs8M8P/TbQ5mh2TgB+P3joba3viDzFE4lEOPHEE7nvvsrUlG3b3HfffTUzKoIgCILQCOwfGzvSEo45jsgMCsANN9zAVVddxUknncTatWv5yle+wtjYGH/6p29u+kgQBEEQDjc9qdSRlnDMccTyoLzvfe/jH//xH/n85z/P6tWr2bp1K7/85S/p7u5+2zQcrqjk6cxUBkBTJPKW6xAEQWhkbthwcqBNAvU2KDlynNX39j4scUQzyV577bX88Y9/JJvN8sgjj7Bu3bojKceTpnA40OazK1cH2pw7KYeJG1FjaockFQqe/LrmhJMCbX5z5VWBNv9+6eVT0iQIgnC0MrullTPm+F/D/9v5F9AcEC8ZNUxOcIm1nMwX3nFaoM2Pzzo30GZZe3ugzVT5n5e9+7CVNRWO+b14gmZRXr7+Bp76xHW+a2FfOPkUrjnjTF8HZE5TE9+65FIefv+VnjYm8Nx1n5qSpqc3f5KYafrafPYdG3nXwsWeNndfcSU97e388gMf9PT7v33hO1nZM8NXjyAIwrHAd951KRctWlx3vYyFQvzTOedx4aLFPHnNZk8nJRYK8dx113Pb+65gYWurZz3PfPQarjrhRN5/3DJPm3886xzWLVvGV845z9OmKxbn51deNaV7ylRs3m6OWCbZN8NbkUkWap/q+djKVdx4xiZfmyWtrdz9ofqYmXX/45u8PjEBQMI0eeba6+tsvnjfvXy/mKPEK9vsiwMDnPPv/wY4jwP/7oMfpq2trc5u1be+zkguhwH84LJ3s95lGu5Pb7+Nh3btwlAGN536Dj64+vg6m3ue384/P/wQBW1z1crVXHX8CXU2giAIxzrjuRw/ePopDmYyrOru4YJJ2VgBJiYmOO/HP2D/+Dgt0Rh3X/khWmKxOrtzvn8zrw4OYhoG37zgIs6YN7/O5gO3/YSHX3Myj1++ZCl/f+75dTbX3XUnv3jpRaCSoG0yn//VL/nBc5V8XW5OxxNPPMG7f/1g+fVfveN0rj7h8N0LGj4PypvlrXJQBEEQBEF463gj9+9jfolHEARBEITGQxwUQRAEQRAaDnFQBEEQBEFoOMRBEQRBEASh4RAHRRAEQRCEhkMcFEEQBEEQGg5xUARBEARBaDjEQREEQRAEoeEQB0UQBEEQhIYjeMe5BqSU/HZ4ePgIKxEEQRAEYaqU7ttTSWI/LR2UkZERAPr6+o6wEkEQBEEQ3igjIyM0Nzf72kzLvXhs22b37t00NTWhlNc+vP93DA8P09fXx86dO4/KfX6kfdOfo72N0r7pz9HexqO9ffDWtVFrzcjICDNnzsQw/KNMpuUMimEY9Pb2vqV1pNPpo3bggbTvaOBob6O0b/pztLfxaG8fvDVtDJo5KSFBsoIgCIIgNBzioAiCIAiC0HCIgzKJaDTKF77wBaLR6JGW8pYg7Zv+HO1tlPZNf472Nh7t7YPGaOO0DJIVBEEQBOHoRmZQBEEQBEFoOMRBEQRBEASh4RAHRRAEQRCEhkMcFEEQBEEQGo5jwkH58pe/zJo1a2hqaqKrq4tLLrmE7du319hMTEywefNm2tvbSaVSXH755ezbt6/GZseOHVx44YUkEgm6urr4zGc+Q6FQeDub4kpQ+wYGBrjuuutYvHgx8Xic/v5+PvnJTzI0NFRTjlKq7ueWW255u5tTx1SO3+mnn16n/ZprrqmxadTjB8FtfPXVV12Pj1KKW2+9tWzXqMfwW9/6FitXriwnfdqwYQP33HNP+fPpfP6Bf/um+/lXIugYTvdz0K990/38c+Pv/u7vUErxqU99qvxew52H+hjg3HPP1TfffLN+5pln9NatW/UFF1yg+/v79ejoaNnmmmuu0X19ffq+++7Tjz32mF6/fr0++eSTy58XCgW9fPlyfdZZZ+knn3xS33333bqjo0PfdNNNR6JJNQS1b9u2bfqyyy7Td955p37xxRf1fffdpxcuXKgvv/zymnIAffPNN+s9e/aUfzKZzJFoUg1TOX6nnXaa/uhHP1qjfWhoqPx5Ix8/rYPbWCgUatq2Z88e/aUvfUmnUik9MjJSLqdRj+Gdd96pf/GLX+jnn39eb9++XX/uc5/T4XBYP/PMM1rr6X3+ae3fvul+/pUIOobT/Rz0a990P/8m8+ijj+o5c+bolStX6uuvv778fqOdh8eEgzKZ/fv3a0Bv2bJFa6314OCgDofD+tZbby3bPPfccxrQDz30kNZa67vvvlsbhqH37t1btvnWt76l0+m0zmazb28DApjcPjd++tOf6kgkovP5fPk9QN9+++1vg8I3h1v7TjvttJoTbTLT6fhpPbVjuHr1an311VfXvDddjqHWWre2tup//dd/PerOvxKl9rkxnc+/aqrbeLSdg1r7H8Ppev6NjIzohQsX6nvvvbfmmDXieXhMLPFMpjS12tbWBsDjjz9OPp/nrLPOKtssWbKE/v5+HnroIQAeeughVqxYQXd3d9nm3HPPZXh4mGefffZtVB/M5PZ52aTTaUKh2u2YNm/eTEdHB2vXruW73/3ulLbEfrvxat8Pf/hDOjo6WL58OTfddBPj4+Plz6bT8YPgY/j444+zdetWPvKRj9R91ujH0LIsbrnlFsbGxtiwYcNRd/5Nbp8b0/n8A+82Hi3nYNAxnM7n3+bNm7nwwgtrzjdozPvgtNws8M1g2zaf+tSnOOWUU1i+fDkAe/fuJRKJ0NLSUmPb3d3N3r17yzbVB6X0eemzRsGtfZM5cOAAf/M3f8PHPvaxmvf/+q//mjPPPJNEIsGvfvUrPvGJTzA6OsonP/nJt0P6lPBq3xVXXMHs2bOZOXMmTz/9NH/5l3/J9u3b+dnPfgZMn+MHUzuG3/nOd1i6dCknn3xyzfuNfAy3bdvGhg0bmJiYIJVKcfvtt3PcccexdevWo+L882rfZKbz+efXxqPhHJzqMZyO5x/ALbfcwhNPPMHvfve7us8a8T54zDkomzdv5plnnuE3v/nNkZbylhDUvuHhYS688EKOO+44vvjFL9Z89l/+y38p/3388cczNjbGP/zDPzTMyQXe7au+2K9YsYIZM2awadMmXnrpJebPn/92y3xTBB3DTCbDj370o5rjVaKRj+HixYvZunUrQ0ND3HbbbVx11VVs2bLlSMs6bHi1r/oGN93PP782Hg3n4FSO4XQ9/3bu3Mn111/PvffeSywWO9JypsQxtcRz7bXXctddd/HAAw/Q29tbfr+np4dcLsfg4GCN/b59++jp6SnbTI5mLr0u2RxpvNpXYmRkhPPOO4+mpiZuv/12wuGwb3nr1q1j165dZLPZt0ryGyKofdWsW7cOgBdffBGYHscPptbG2267jfHxcT70oQ8FltdIxzASibBgwQJOPPFEvvzlL7Nq1Sq++tWvHjXnn1f7Skz38w+C21jNdDwHp9K+6Xr+Pf744+zfv58TTjiBUChEKBRiy5YtfO1rXyMUCtHd3d1w5+Ex4aBorbn22mu5/fbbuf/++5k7d27N5yeeeCLhcJj77ruv/N727dvZsWNHef1xw4YNbNu2jf3795dt7r33XtLptOsU4NtJUPvA+eZ2zjnnEIlEuPPOO6fkQW/dupXW1tYjviHWVNo3ma1btwIwY8YMoLGPH7yxNn7nO9/h4osvprOzM7DcRjmGbti2TTabnfbnnxel9sH0Pv/8qG7jZKbbOeiGW/um6/m3adMmtm3bxtatW8s/J510Eh/4wAfKfzfceXjYw24bkI9//OO6ublZP/jggzWPf42Pj5dtrrnmGt3f36/vv/9+/dhjj+kNGzboDRs2lD8vPV51zjnn6K1bt+pf/vKXurOzsyEekQtq39DQkF63bp1esWKFfvHFF2tsCoWC1tp5xO5f/uVf9LZt2/QLL7ygv/nNb+pEIqE///nPH8mmaa2D2/fiiy/qv/7rv9aPPfaYfuWVV/Qdd9yh582bpzdu3Fguo5GPn9ZTG6Naa/3CCy9opZS+55576spo5GN444036i1btuhXXnlFP/300/rGG2/USin9q1/9Sms9vc8/rf3bN93PvxJ+bTwazsGgMar19D3/vJj85FWjnYfHhIMCuP7cfPPNZZtMJqM/8YlP6NbWVp1IJPSll16q9+zZU1POq6++qs8//3wdj8d1R0eH/ou/+IuaxwSPFEHte+CBBzxtXnnlFa211vfcc49evXq1TqVSOplM6lWrVulvf/vb2rKsI9ewIkHt27Fjh964caNua2vT0WhUL1iwQH/mM5+pycGgdeMeP62nNka11vqmm27SfX19rselkY/h1VdfrWfPnq0jkYju7OzUmzZtqrnwT+fzT2v/9k3386+EXxuPhnMwaIxqPX3PPy8mOyiNdh4qrRvsGShBEARBEI55jokYFEEQBEEQphfioAiCIAiC0HCIgyIIgiAIQsMhDoogCIIgCA2HOCiCIAiCIDQc4qAIgiAIgtBwiIMiCIIgCELDIQ6KIAiCIAgNhzgogiAIgiA0HOKgCIIgCILQcIiDIgiCIAhCwyEOiiAIgiAIDcf/D7rpsmHivXENAAAAAElFTkSuQmCC", "text/plain": [ "
" ] diff --git a/python/setup.py b/python/setup.py index 3d8d318b5..fe320a738 100644 --- a/python/setup.py +++ b/python/setup.py @@ -25,9 +25,7 @@ # ============================================================================= def pre_build(): """Execute fpm and f2py compilations commands.""" - print("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA") print(THIS_DIR) - print("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA") if COMPILED_FLAG.exists(): return diff --git a/python/tests/test_dummy.py b/python/tests/test_dummy.py index af9f6946d..1e297f87d 100644 --- a/python/tests/test_dummy.py +++ b/python/tests/test_dummy.py @@ -1,6 +1,7 @@ import numpy as np +import numpy.testing as npt -from yaeos import PengRobinson76, QMR +from yaeos import SoaveRedlichKwong, PengRobinson76, QMR def test_dummy(): @@ -12,4 +13,36 @@ def test_dummy(): fug = model.fugacity(np.array([5, 6]), 2.0, 303.15)["ln_phi"] - assert np.allclose(fug, np.array([2.84731863, 2.49352934])) + assert np.allclose(fug, np.array([0.65960035, 0.30581106])) + + +def test_flash(): + nc = 2 + n = [0.4, 0.6] + Tc = [190.564, 425.12] + Pc = [45.99, 37.96] + w = [0.0115478, 0.200164] + + lij = kij = np.zeros((nc, nc)) + mixrule = QMR(kij, lij) + model = PengRobinson76(Tc, Pc, w, mixrule) + + P, T = 60.0, 294.0 + flash = model.flash_pt(n, pressure=T, temperature=P) + + npt.assert_allclose(flash["x"], [0.32424472, 0.67575528], rtol=1e-5) + + +def test_saturation(): + nc = 2 + n = [0.4, 0.6] + tc = [190.564, 425.12] + pc = [45.99, 37.96] + w = [0.0115478, 0.200164] + + lij = kij = np.zeros((nc, nc)) + mixrule = QMR(kij, lij) + model = SoaveRedlichKwong(tc, pc, w, mixrule) + + bub = model.saturation_pressure(n, temperature=303.15, kind="bubble") + npt.assert_allclose(bub["y"], [0.899642, 0.100358], rtol=1e-5) diff --git a/python/yaeos/__init__.py b/python/yaeos/__init__.py index d8a59c001..9787061ac 100644 --- a/python/yaeos/__init__.py +++ b/python/yaeos/__init__.py @@ -1,14 +1,23 @@ from yaeos.compiled_module.yaeos_compiled import yaeos_c from yaeos.core import ( - SoaveRedlichKwong, PengRobinson76, PengRobinson78, RKPR, + SoaveRedlichKwong, + PengRobinson76, + PengRobinson78, + RKPR, NRTL, - MHV, QMR + MHV, + QMR, ) __all__ = [ "yaeos_c", - "SoaveRedlichKwong", "PengRobinson76", "PengRobinson78", "RKPR", - "QMR", "NRTL", "MHV" - ] + "SoaveRedlichKwong", + "PengRobinson76", + "PengRobinson78", + "RKPR", + "QMR", + "NRTL", + "MHV", +] diff --git a/python/yaeos/core.py b/python/yaeos/core.py index 8a94dc74e..dd54940b1 100644 --- a/python/yaeos/core.py +++ b/python/yaeos/core.py @@ -35,21 +35,21 @@ def fugacity(self, n, v, t, dt=None, dp=None, dn=None): res = {"ln_phi": res, "dt": dt, "dp": dp, "dn": dn} return res - def flash_tp(self, z, temperature, pressure): + def flash_pt(self, z, pressure, temperature): """Two-phase split with specification of temperature and pressure. Calculates the phase split at a given pressure and temperature """ x, y, pressure, temperature, volume_x, volume_y, beta = yaeos_c.flash( - self.id, z, temperature, pressure + self.id, z, pressure, temperature ) flash_result = { "x": x, "y": y, - "T": temperature, "P": pressure, + "T": temperature, "beta": beta, } From e642bb058c69438a08dc585808be051546ade202 Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Wed, 17 Jul 2024 17:49:41 -0300 Subject: [PATCH 157/167] styleguide --- STYLE_GUIDE.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/STYLE_GUIDE.md b/STYLE_GUIDE.md index 9dbd98bd9..c0f180ff0 100644 --- a/STYLE_GUIDE.md +++ b/STYLE_GUIDE.md @@ -8,9 +8,9 @@ This style guide is a living document and proposed changes may be adopted after ## Use (modern) standard Fortran -* Do not use obsolescent or deleted language features +* Do **not** use obsolescent or deleted language features E.g., `common`, `pause`, `entry`, arithmetic `if` and computed `goto` -* Do not use vendor extensions in the form of non-standard syntax and vendor supplied intrinsic procedures +* Do **not** use vendor extensions in the form of non-standard syntax and vendor supplied intrinsic procedures E.g., `real*8` or `etime()`, use `real(pr)` ## Naming of variables and constructs @@ -27,6 +27,7 @@ This style guide is a living document and proposed changes may be adopted after for example `has_failed` is preferred over `hasfailed` - Where conventional and appropriate shortening of a word is used then the underscore may be omitted, for example `linspace` is preferred over `lin_space` +- For derived types use CamelCase, like `ArModel` ## File naming conventions * Source files should contain at most one `program`, `module`, or `submodule` From 78a9be3e9388ac0d6d05a3a7517b41fe47c9c646 Mon Sep 17 00:00:00 2001 From: salvador Date: Wed, 17 Jul 2024 20:16:58 -0300 Subject: [PATCH 158/167] test for exact root solvers --- src/math/linalg.f90 | 9 +-- test/test_math/test_math.f90 | 105 +++++++++++++++++++++++++++++++++-- 2 files changed, 102 insertions(+), 12 deletions(-) diff --git a/src/math/linalg.f90 b/src/math/linalg.f90 index cd561700c..82523eb85 100644 --- a/src/math/linalg.f90 +++ b/src/math/linalg.f90 @@ -75,13 +75,11 @@ subroutine cubic_roots(parameters, real_roots, complex_roots, flag) complex_roots = nan if (abs(disc) < 1e-15) then - !print *, "disc: ", disc flag = 0 real_roots(1) = 3*q/p real_roots(2) = -3*q/(2*p) real_roots(3) = real_roots(2) elseif (disc < 0) then - !print *, "disc: ", disc flag = -1 theta = acos(0.5_pr * 3 * q / p * sqrt(-3/p)) real_roots(1) = 2 * sqrt(-p/3) * cos(theta/3) @@ -89,7 +87,6 @@ subroutine cubic_roots(parameters, real_roots, complex_roots, flag) real_roots(3) = 2 * sqrt(-p/3) * cos((theta + 4*pi)/3) call sort(real_roots) elseif (disc > 0) then - !print *, "disc: ", disc flag = 1 u = ((-q + sqrt(disc))/2) v = ((-q - sqrt(disc))/2) @@ -124,8 +121,8 @@ subroutine cubic_roots_rosendo(parameters, real_roots, complex_roots, flag) theta = acos(R / sqrt(Q**3)) real_roots(1) = -2 * sqrt(Q) * cos(theta / 3.0_pr) - d1 / 3.0_pr - real_roots(2) = -2 * sqrt(Q) * cos((theta + 2 * acos(-1.0_pr)) / 3.0_pr) - d1 / 3.0_pr - real_roots(3) = -2 * sqrt(Q) * cos((theta - 2 * acos(-1.0_pr)) / 3.0_pr) - d1 / 3.0_pr + real_roots(2) = -2 * sqrt(Q) * cos((theta + 2 * pi) / 3.0_pr) - d1 / 3.0_pr + real_roots(3) = -2 * sqrt(Q) * cos((theta - 2 * pi) / 3.0_pr) - d1 / 3.0_pr ! Correction?? ! do i=1,100 @@ -139,7 +136,7 @@ subroutine cubic_roots_rosendo(parameters, real_roots, complex_roots, flag) else A = - sign((abs(R) + sqrt(R**2 - Q**3))**(1.0_pr/3.0_pr), R) - if (-log10(A) > 15.0_pr) then + if (abs(A) < 1e-6) then A = 0.0_pr B = 0.0_pr else diff --git a/test/test_math/test_math.f90 b/test/test_math/test_math.f90 index b1d1dd119..9b94146c6 100644 --- a/test/test_math/test_math.f90 +++ b/test/test_math/test_math.f90 @@ -14,6 +14,7 @@ subroutine collect_suite(testsuite) new_unittest("Test dx_to_dn", test_dx_to_dn), & new_unittest("Test sq_error", test_sq_error), & new_unittest("Test cardano", test_cardano_method), & + new_unittest("Test rosendo", test_rosendo_method), & new_unittest("Test newton", test_newton_method) & ] end subroutine collect_suite @@ -68,8 +69,100 @@ subroutine test_cardano_method(error) call check(error, & maxval(abs(rr - [-0.454216, 0.8601986, 25.594016])) < 1e-5_pr & ) + + ! ======================================================================= + ! 3 Real roots + ! x1 = 1, x2 = 3, x3 = 4 + ! ----------------------------------------------------------------------- + p = [1._pr, -8._pr, 19._pr, -12._pr] + + call cubic_roots(p, rr, cr, flag) + + call check(error, maxval(rr - [1.0_pr, 3.0_pr, 4.0_pr]) < 1e-7) + call check(error, flag == -1) + + ! ======================================================================= + ! 1 real root different, 2 equal real roots + ! x1 = 1, x2 = x3 = 4 + ! ----------------------------------------------------------------------- + p = [1._pr, -9._pr, 24._pr, -16._pr] + + call cubic_roots(p, rr, cr, flag) + + call check(error, maxval(rr - [1.0_pr, 4.0_pr, 4.0_pr]) < 1e-7) + call check(error, flag == 0) + + ! ======================================================================= + ! 1 real root, 2 complex + ! x1 = 1, x2 = i, x3 = -i + ! ----------------------------------------------------------------------- + p = [1._pr, -1._pr, 1._pr, -1._pr] + + call cubic_roots(p, rr, cr, flag) + + call check(error, (rr(1) - 1.0_pr) < 1e-7) + call check(error, flag == 1) end subroutine test_cardano_method + subroutine test_rosendo_method(error) + use yaeos__math_linalg, only: pr, cubic_roots_rosendo + + type(error_type), allocatable, intent(out) :: error + + real(pr) :: p(4) + real(pr) :: a, b + real(pr) :: roots(3) + complex(pr) :: c_roots(3) + integer :: flag + + ! ======================================================================= + ! 3 Real roots + ! x1 = 1, x2 = 3, x3 = 4 + ! ----------------------------------------------------------------------- + p = [1._pr, -8._pr, 19._pr, -12._pr] + + call cubic_roots_rosendo(p, roots, c_roots, flag) + + call check(error, maxval(roots - [1.0_pr, 3.0_pr, 4.0_pr]) < 1e-7) + call check(error, flag == -1) + + ! ======================================================================= + ! 1 real root different, 2 equal real roots + ! x1 = 1, x2 = x3 = 4 + ! ----------------------------------------------------------------------- + p = [1._pr, -9._pr, 24._pr, -16._pr] + + call cubic_roots_rosendo(p, roots, c_roots, flag) + + call check(error, maxval(roots - [1.0_pr, 4.0_pr, 4.0_pr]) < 1e-7) + call check(error, flag == -1) + + ! ======================================================================= + ! 1 real root, 2 complex + ! x1 = 1, x2 = i, x3 = -i + ! ----------------------------------------------------------------------- + p = [1._pr, -1._pr, 1._pr, -1._pr] + + call cubic_roots_rosendo(p, roots, c_roots, flag) + + call check(error, maxval(roots - [1.0_pr, 1.0_pr, 1.0_pr]) < 1e-7) + call check(error, flag == 1) + + ! ======================================================================= + ! 1 real root and two small complex roots + ! x1 = 1, x2 = a+bi, x3 = a-bi + ! ----------------------------------------------------------------------- + a = 1._pr + b = 1e-6_pr + + p = [1._pr, -(2*a + 1), (a**2 + b**2 + 2 * a), -(a**2 + b**2)] + + call cubic_roots_rosendo(p, roots, c_roots, flag) + + call check(error, maxval(roots - [1.0_pr, 1.0_pr, 1.0_pr]) < 1e-7) + call check(error, flag == 1) + end subroutine test_rosendo_method + subroutine test_newton_method(error) use yaeos__math, only: pr, newton type(error_type), allocatable, intent(out) :: error @@ -82,11 +175,11 @@ subroutine test_newton_method(error) call check(error, abs(x - sqrt(2._pr)) < tol) contains subroutine foo(xx, f, df) - real(pr), intent(in) :: xx - real(pr), intent(out) :: f - real(pr), intent(out) :: df - f = xx**2 - 2 - df = 2*xx - end subroutine foo + real(pr), intent(in) :: xx + real(pr), intent(out) :: f + real(pr), intent(out) :: df + f = xx**2 - 2 + df = 2*xx + end subroutine foo end subroutine test_newton_method end module test_math From fb7227a2be879e6c0b74e5abd2cd09662cfbaadd Mon Sep 17 00:00:00 2001 From: fedebenelli Date: Thu, 18 Jul 2024 01:07:03 -0300 Subject: [PATCH 159/167] PT spec --- example/extra/benchmark.f90 | 4 +- example/extra/pure_psat.f90 | 54 +++++++++++++++++++ example/tutorials/huron_vidal.f90 | 31 ++++------- fpm.toml | 4 ++ src/models/residual_helmholtz/ar_models.f90 | 37 ++++++------- .../boundaries/phase_envelopes_pt.f90 | 9 ++-- src/phase_equilibria/flash.f90 | 8 +-- src/phase_equilibria/saturations_points.f90 | 8 +-- src/phase_equilibria/stability.f90 | 6 +-- .../ar_models/cubics/test_pr76.f90 | 4 +- test/test_thermoprops.f90 | 6 +-- 11 files changed, 105 insertions(+), 66 deletions(-) create mode 100644 example/extra/pure_psat.f90 diff --git a/example/extra/benchmark.f90 b/example/extra/benchmark.f90 index 5b301f521..6cd8661f0 100644 --- a/example/extra/benchmark.f90 +++ b/example/extra/benchmark.f90 @@ -49,8 +49,8 @@ subroutine yaeos__run(n, dn, f_p, model_name) if (dn) then if (f_p) then - call model%lnphi_tp(& - z, T, P, root_type="stable", & + call model%lnphi_pt(& + z, P, T, root_type="stable", & lnPhi=lnfug, dlnphidp=dlnphidp, dlnphidn=dlnphidn) else call model%lnphi_vt(z, V, T, P, lnfug, dlnPhidP, dlnphidT, dlnphidn) diff --git a/example/extra/pure_psat.f90 b/example/extra/pure_psat.f90 new file mode 100644 index 000000000..34e77ab25 --- /dev/null +++ b/example/extra/pure_psat.f90 @@ -0,0 +1,54 @@ +!! Program to calculate the vapor pressure of pure components +!! +program main + use yaeos + use forsus, only: Substance, forsus_default_dir, forsus_dir + implicit none + integer, parameter :: nc=2 + type(CubicEoS) :: eos + type(Substance) :: sus(nc) + real(pr) :: n(nc), T, x, f, df + integer :: i + + forsus_dir = "build/dependencies/forsus/" // forsus_default_dir + sus(1) = Substance("water") + sus(2) = Substance("ethanol") + + eos = SoaveRedlichKwong(& + sus%critical%critical_temperature%value, & + sus%critical%critical_pressure%value/1e5,& + sus%critical%acentric_factor%value & + ) + + n = [1, 0] + + T = 273.15_pr + 50 + + do i=273+90, nint(sus(1)%critical%critical_temperature%value) + T = real(i,pr) + call foo(T, f) + print *, T, F + end do + +contains + + subroutine foo(x, f) + real(pr), intent(in) :: x + real(pr), intent(out) :: f + real(pr) :: phi_v(nc), phi_l(nc), dphidV_v, dphidV_l, Ar, P + real(pr) :: dlnphi_dt_v(nc), dlnphi_dt_l(nc) + real(pr) :: V_l, V_v + real(pr) :: diff + + P = 1 + diff = 1 + do while(abs(diff) > 1e-8_pr .and. .not. isnan(diff)) + call eos%lnphi_pt(n, P, x, V=V_v, lnPhi=phi_v, dlnPhidt=dlnphi_dt_v, root_type="vapor") + call eos%lnphi_pt(n, P, x, V=V_l, lnPhi=phi_l, dlnPhidt=dlnphi_dt_l, root_type="liquid") + diff = exp(phi_v(1)) - exp(phi_l(1)) + P = P + sign(diff, 0.1_pr) + end do + + f = P + end subroutine +end program main diff --git a/example/tutorials/huron_vidal.f90 b/example/tutorials/huron_vidal.f90 index 34639455a..ab6e44811 100644 --- a/example/tutorials/huron_vidal.f90 +++ b/example/tutorials/huron_vidal.f90 @@ -10,7 +10,6 @@ program main implicit none integer, parameter :: nc = 2 - real(pr) :: n(nc) real(pr) :: a(nc, nc), b(nc, nc), c(nc, nc) ! NRTL parameters @@ -33,7 +32,6 @@ program main molecules(2)%groups_ids = [1, 2, 14] molecules(2)%number_of_groups = [1, 1, 1] - forsus_dir = "./build/dependencies/forsus/data/json" sus(1) = Substance("water") @@ -57,32 +55,23 @@ program main ge_model = NRTL(a, b, c) - n = [0.2, 0.8] n = [0.9, 0.1] ! n = [0.8, 0.2] ! Define the model to be SRK model = SoaveRedlichKwong(tc, pc, w) call phase_envel(1) - ! mixrule = MHV(ge_model, model%b) - ! mixrule%q = -0.593_pr - ! deallocate (model%mixrule) - ! model%mixrule = mixrule - ! call phase_envel(2) - - ! mixrule = MHV(ge_model, model%b) - ! mixrule%q = -0.593_pr - ! deallocate (model%mixrule) - ! model%mixrule = mixrule - ! call phase_envel(2) - - ! ge_model_unifac = setup_unifac(molecules) + mixrule = MHV(ge=ge_model, q=-0.593_pr, b=model%b) + deallocate (model%mixrule) + model%mixrule = mixrule + call phase_envel(2) + + ge_model_unifac = setup_unifac(molecules) - ! mixrule = MHV(ge_model_unifac, model%b) - ! mixrule%q = -0.593_pr - ! deallocate (model%mixrule) - ! model%mixrule = mixrule - ! call phase_envel(3) + mixrule = MHV(ge=ge_model_unifac, q=-0.593_pr, b=model%b) + deallocate (model%mixrule) + model%mixrule = mixrule + call phase_envel(3) do i=1,99 n(2) = real(i,pr)/100 diff --git a/fpm.toml b/fpm.toml index 956a3e71c..7da6ab015 100644 --- a/fpm.toml +++ b/fpm.toml @@ -61,4 +61,8 @@ name = "huron_vidal" source-dir = "example/tutorials" main = "huron_vidal.f90" +[[example]] +name = "pure_psat" +source-dir = "example/extra" +main = "pure_psat.f90" diff --git a/src/models/residual_helmholtz/ar_models.f90 b/src/models/residual_helmholtz/ar_models.f90 index c14de48d2..08f1397ba 100644 --- a/src/models/residual_helmholtz/ar_models.f90 +++ b/src/models/residual_helmholtz/ar_models.f90 @@ -1,5 +1,5 @@ module yaeos__models_ar - + !! # Module that defines the basics of a residual Helmholtz energy. !! !! All the residual properties that are calculated in this library are @@ -10,7 +10,7 @@ module yaeos__models_ar !! are used. Because they're the fundamentals for phase equilibria !! calculation. !! - !! @note + !! @note !! Later on, third derivative with respect to volume will be included !! since it's importance on calculation of critical points. !! @endnote @@ -50,7 +50,7 @@ module yaeos__models_ar procedure(abs_residual_helmholtz), deferred :: residual_helmholtz procedure(abs_volume_initializer), deferred :: get_v0 procedure :: lnphi_vt => fugacity_vt - procedure :: lnphi_tp => fugacity_tp + procedure :: lnphi_pt => fugacity_pt procedure :: pressure procedure :: volume procedure :: enthalpy_residual_vt @@ -119,7 +119,7 @@ subroutine volume(eos, n, P, T, V, root_type) !! !! # Description !! This subroutine solves the volume using a newton method. The variable - !! `root_type` + !! `root_type` !! !! # Examples !! @@ -136,9 +136,9 @@ subroutine volume(eos, n, P, T, V, root_type) real(pr), intent(in) :: P !! Pressure [bar] real(pr), intent(in) :: T !! Temperature [K] real(pr), intent(out) :: V !! Volume [L] - character(len=*), intent(in) :: root_type - !! Desired root-type to solve. Options are: - !! `["liquid", "vapor", "stable"]` + character(len=*), intent(in) :: root_type + !! Desired root-type to solve. Options are: + !! `["liquid", "vapor", "stable"]` integer :: max_iters=30 real(pr) :: tol=1e-7 @@ -239,26 +239,19 @@ subroutine pressure(eos, n, V, T, P, dPdV, dPdT, dPdn) if (present(dPdn)) dPdn(:) = R*T/V - ArVn(:) end subroutine pressure - subroutine fugacity_tp(eos, & - n, T, P, V, root_type, lnPhi, dlnPhidP, dlnPhidT, dlnPhidn & + subroutine fugacity_pt(eos, & + n, P, T, V, root_type, lnPhi, dlnPhidP, dlnPhidT, dlnPhidn & ) !! Calculate logarithm of fugacity, given pressure and temperature. !! !! This routine will obtain the desired volume root at the specified !! pressure and calculate fugacity at that point. - !! - !! @note - !! While the natural output variable is \(ln f_i\). The calculated - !! derivatives will be the derivatives of the fugacity coefficient - !! \(ln \phi_i\) - !! @endnote - !! use iso_fortran_env, only: error_unit class(ArModel), intent(in) :: eos !! Model real(pr), intent(in) :: n(:) !! Mixture mole numbers character(len=*), intent(in) :: root_type !! Type of root desired ["liquid", "vapor", "stable"] - real(pr), intent(in) :: T !! Temperature [K] real(pr), intent(in) :: P !! Pressure [bar] + real(pr), intent(in) :: T !! Temperature [K] real(pr), optional, intent(out) :: lnPhi(size(n)) !! \(\ln(phi)\) vector real(pr), optional, intent(out) :: V !! Volume [L] @@ -270,14 +263,14 @@ subroutine fugacity_tp(eos, & call eos%volume(n, P=P, T=T, V=V_in, root_type=root_type) call eos%lnphi_vt(n, V_in, T, P_in, lnPhi, dlnPhidP, dlnPhidT, dlnPhidn) - + if(present(V)) V = V_in - + ! Check if the calculated pressure is the same as the input pressure. if(abs(P_in - P) > 1e-2) then write(error_unit, *) "WARN: possible bad root solving: ", P_in, P end if - end subroutine fugacity_tp + end subroutine fugacity_pt subroutine fugacity_vt(eos, & n, V, T, P, lnPhi, dlnPhidP, dlnPhidT, dlnPhidn, dPdV, dPdT, dPdn & @@ -345,7 +338,7 @@ subroutine fugacity_vt(eos, & end if P_in = totn*RT/V - ArV - + Z = P_in*V/(totn*RT) if (present(P)) P = P_in @@ -426,7 +419,7 @@ subroutine gibbs_residual_VT(eos, n, V, T, Gr, GrT, GrV, Grn) if (present(GrT)) GrT = ArT + V*dPdT - totn*R if (present(GrV)) GrV = ArV + V*dPdV + P if (present(GrN)) GrN(:) = Arn(:) + V*dPdn(:) - R*T - end subroutine gibbs_residual_vt + end subroutine gibbs_residual_VT subroutine entropy_residual_vt(eos, n, V, T, Sr, SrT, SrV, Srn) !! Calculate residual entropy given volume and temperature. diff --git a/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 b/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 index c8a299499..c31423a02 100644 --- a/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 +++ b/src/phase_equilibria/boundaries/phase_envelopes_pt.f90 @@ -155,13 +155,13 @@ subroutine foo(X, ns, S, F, dF, dFdS) kind_y = "stable" end select - call model%lnphi_tp(& - z, T, P, V=Vz, root_type=kind_z, & + call model%lnphi_pt(& + z, P, T, V=Vz, root_type=kind_z, & lnPhi=lnphi_z, dlnPhidt=dlnphi_dt_z, & dlnPhidp=dlnphi_dp_z, dlnphidn=dlnphi_dn_z & ) - call model%lnphi_tp(& - y, T, P, V=Vy, root_type=kind_y, & + call model%lnphi_pt(& + y, P, T, V=Vy, root_type=kind_y, & lnPhi=lnphi_y, dlnPhidt=dlnphi_dt_y, & dlnPhidp=dlnphi_dp_y, dlnphidn=dlnphi_dn_y & ) @@ -330,6 +330,7 @@ subroutine write_PTEnvel2(pt2, unit, iotype, v_list, iostat, iomsg) integer :: i, nc + if (size(pt2%points) == 0) return allocate(cps(0)) do i=1,size(pt2%cps) cp = minloc(& diff --git a/src/phase_equilibria/flash.f90 b/src/phase_equilibria/flash.f90 index a227c28b6..b658181b4 100644 --- a/src/phase_equilibria/flash.f90 +++ b/src/phase_equilibria/flash.f90 @@ -109,11 +109,11 @@ type(EquilibriaState) function flash(model, z, t, v_spec, p_spec, k0, iters) case("TV") ! find Vy,Vx (vV and vL) from V balance and P equality equations call tv_loop_solve_pressures(model, T, V, beta, x, y, Vx, Vy, P) - call model%lnphi_tp(y, T, P, V=Vy, root_type="stable", lnPhi=lnfug_y) - call model%lnphi_tp(x, T, P, V=Vx, root_type="liquid", lnPhi=lnfug_x) + call model%lnphi_pt(y, P, T, V=Vy, root_type="stable", lnPhi=lnfug_y) + call model%lnphi_pt(x, P, T, V=Vx, root_type="liquid", lnPhi=lnfug_x) case("TP") - call model%lnphi_tp(y, T, P, V=Vy, root_type="stable", lnPhi=lnfug_y) - call model%lnphi_tp(x, T, P, V=Vx, root_type="liquid", lnPhi=lnfug_x) + call model%lnphi_pt(y, P, T, V=Vy, root_type="stable", lnPhi=lnfug_y) + call model%lnphi_pt(x, P, T, V=Vx, root_type="liquid", lnPhi=lnfug_x) end select dKold = dK diff --git a/src/phase_equilibria/saturations_points.f90 b/src/phase_equilibria/saturations_points.f90 index 7a7c8ffe3..4dc1a8e22 100644 --- a/src/phase_equilibria/saturations_points.f90 +++ b/src/phase_equilibria/saturations_points.f90 @@ -83,8 +83,8 @@ type(EquilibriaState) function saturation_pressure(model, n, t, kind, p0, y0, ma ! ------------------------------------------------------------------------ do its=1, iterations y = k*z - call model%lnphi_tp(y, T, P, vy, incipient, lnPhi=lnfug_y, dlnphidp=dlnphi_dp_y) - call model%lnphi_tp(z, T, P, vz, main, lnPhi=lnfug_z, dlnphidp=dlnphi_dp_z) + call model%lnphi_pt(y, P, T, vy, incipient, lnPhi=lnfug_y, dlnphidp=dlnphi_dp_y) + call model%lnphi_pt(z, P, T, vz, main, lnPhi=lnfug_z, dlnphidp=dlnphi_dp_z) k = exp(lnfug_z - lnfug_y) @@ -192,8 +192,8 @@ type(EquilibriaState) function saturation_temperature(model, n, p, kind, t0, y0, ! ------------------------------------------------------------------------ do its=1, iterations y = k*z - call model%lnphi_tp(y, T, P, vy, incipient, lnPhi=lnfug_y, dlnphidt=dlnphi_dt_y) - call model%lnphi_tp(z, T, P, vz, main, lnPhi=lnfug_z, dlnphidt=dlnphi_dt_z) + call model%lnphi_pt(y, P, T, vy, incipient, lnPhi=lnfug_y, dlnphidt=dlnphi_dt_y) + call model%lnphi_pt(z, P, T, vz, main, lnPhi=lnfug_z, dlnphidt=dlnphi_dt_z) k = exp(lnfug_z - lnfug_y) f = sum(z*k) - 1 diff --git a/src/phase_equilibria/stability.f90 b/src/phase_equilibria/stability.f90 index 8b3d97e96..c351cd906 100644 --- a/src/phase_equilibria/stability.f90 +++ b/src/phase_equilibria/stability.f90 @@ -83,12 +83,12 @@ real(pr) function tm(model, z, w, P, T, d, dtpd) real(pr) :: di(size(z)), vz, vw real(pr) :: lnphi_z(size(z)), lnphi_w(size(z)) - call model%lnphi_tp(& + call model%lnphi_pt(& w, T=T, P=P, V=Vw, root_type="stable", lnPhi=lnPhi_w & ) if (.not. present(d)) then - call model%lnphi_tp(& + call model%lnphi_pt(& z, T=T, P=P, V=Vz, root_type="stable", lnPhi=lnPhi_z& ) di = log(z) + lnphi_z @@ -132,7 +132,7 @@ subroutine min_tpd(model, z, P, T, mintpd, w, all_minima) dx = 0.001_pr ! Calculate feed di - call model%lnphi_tp(z, T=T, P=P, V=V, root_type="stable", lnPhi=lnPhi_z) + call model%lnphi_pt(z, T=T, P=P, V=V, root_type="stable", lnPhi=lnPhi_z) di = log(z) + lnphi_z diff --git a/test/test_implementations/ar_models/cubics/test_pr76.f90 b/test/test_implementations/ar_models/cubics/test_pr76.f90 index 3181edc7f..3f223dbae 100644 --- a/test/test_implementations/ar_models/cubics/test_pr76.f90 +++ b/test/test_implementations/ar_models/cubics/test_pr76.f90 @@ -383,8 +383,8 @@ subroutine test_pr76_fugacities(error) ) call model%volume(z_v, P, T, root_type="vapor", V=v_v) - call model%lnphi_tp(z_v, T, P, root_type="vapor", lnPhi = lnphi_v) - call model%lnphi_tp(z_l, T, P, root_type="liquid", lnPhi = lnphi_l) + call model%lnphi_pt(z_v, P, T, root_type="vapor", lnPhi = lnphi_v) + call model%lnphi_pt(z_l, P, T, root_type="liquid", lnPhi = lnphi_l) ! Elliot Z value of vapor call check(error, abs(P * v_v / R / T - 0.9059) < 1e-4) diff --git a/test/test_thermoprops.f90 b/test/test_thermoprops.f90 index 4c13895b5..9a7e495c8 100644 --- a/test/test_thermoprops.f90 +++ b/test/test_thermoprops.f90 @@ -85,10 +85,8 @@ subroutine test_fugacity_TP(error) t = 150 root_type = "liquid" - - - call eos%lnphi_tp(& - z, T, P, V, root_type, lnfug, dlnPhidP, dlnphidT, dlnPhidn& + call eos%lnphi_pt(& + z, P, T, V, root_type, lnfug, dlnPhidP, dlnphidT, dlnPhidn& ) call check(& From bf4d3dd04d4bdf8c7e0f1269010cc3bf924c32db Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Thu, 18 Jul 2024 11:34:31 -0300 Subject: [PATCH 160/167] example of calculating saturation points of pure components --- example/extra/pure_psat.f90 | 80 ++++++++++++++++++++++--------------- 1 file changed, 48 insertions(+), 32 deletions(-) diff --git a/example/extra/pure_psat.f90 b/example/extra/pure_psat.f90 index 34e77ab25..90ed05307 100644 --- a/example/extra/pure_psat.f90 +++ b/example/extra/pure_psat.f90 @@ -1,54 +1,70 @@ !! Program to calculate the vapor pressure of pure components !! + +module pure_psat + !! Module used to calculate the saturation pressure of pure components at + !! a given temperature. + use yaeos +contains + real(pr) function Psat(eos, ncomp, T) + use yaeos__math, only: solve_system + class(ArModel), intent(in) :: eos + integer, intent(in) :: ncomp + real(pr), intent(in) :: T + + real(pr) :: P1, P2 + real(pr) :: f1, f2 + + real(pr) :: n(size(eos)) + + n = 0 + n(ncomp) = 1 + + P1 = 0.5 + P2 = 1 + + do while(abs(diff(P2)) > 1e-10) + f1 = diff(P1) + f2 = diff(P2) + Psat = (P1 * f2 - P2 * f1)/(f2 - f1) + P1 = P2 + P2 = Psat + end do + + contains + real(pr) function diff(P) + real(pr), intent(in) :: P + real(pr) :: V_l, V_v + real(pr) :: phi_v(size(eos)), phi_l(size(eos)) + call eos%lnphi_pt(n, P, T, V=V_v, lnPhi=phi_v, root_type="vapor") + call eos%lnphi_pt(n, P, T, V=V_l, lnPhi=phi_l, root_type="liquid") + diff = phi_v(1) - phi_l(1) + end function + end function Psat +end module + program main use yaeos use forsus, only: Substance, forsus_default_dir, forsus_dir + use pure_psat, only: Psat implicit none integer, parameter :: nc=2 type(CubicEoS) :: eos type(Substance) :: sus(nc) - real(pr) :: n(nc), T, x, f, df - integer :: i + real(pr) :: n(nc), T, f + integer :: i, j forsus_dir = "build/dependencies/forsus/" // forsus_default_dir sus(1) = Substance("water") sus(2) = Substance("ethanol") - eos = SoaveRedlichKwong(& sus%critical%critical_temperature%value, & sus%critical%critical_pressure%value/1e5,& sus%critical%acentric_factor%value & ) - - n = [1, 0] - T = 273.15_pr + 50 - - do i=273+90, nint(sus(1)%critical%critical_temperature%value) + do i=273+90, nint(maxval(sus%critical%critical_temperature%value)) T = real(i,pr) - call foo(T, f) - print *, T, F + print *, T, (Psat(eos, j, T), j=1,nc) end do - -contains - - subroutine foo(x, f) - real(pr), intent(in) :: x - real(pr), intent(out) :: f - real(pr) :: phi_v(nc), phi_l(nc), dphidV_v, dphidV_l, Ar, P - real(pr) :: dlnphi_dt_v(nc), dlnphi_dt_l(nc) - real(pr) :: V_l, V_v - real(pr) :: diff - - P = 1 - diff = 1 - do while(abs(diff) > 1e-8_pr .and. .not. isnan(diff)) - call eos%lnphi_pt(n, P, x, V=V_v, lnPhi=phi_v, dlnPhidt=dlnphi_dt_v, root_type="vapor") - call eos%lnphi_pt(n, P, x, V=V_l, lnPhi=phi_l, dlnPhidt=dlnphi_dt_l, root_type="liquid") - diff = exp(phi_v(1)) - exp(phi_l(1)) - P = P + sign(diff, 0.1_pr) - end do - - f = P - end subroutine end program main From 7e6dfe1228a27d0564dfc48bc8ae9e95776215e9 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Thu, 18 Jul 2024 11:34:54 -0300 Subject: [PATCH 161/167] added size function to ArModel --- src/models/models.f90 | 2 +- src/models/residual_helmholtz/ar_models.f90 | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/models/models.f90 b/src/models/models.f90 index 74ad6e164..336a8f3a6 100644 --- a/src/models/models.f90 +++ b/src/models/models.f90 @@ -24,7 +24,7 @@ module yaeos__models use yaeos__models_base, only: BaseModel ! Residual Helmholtz Models - use yaeos__models_ar, only: ArModel + use yaeos__models_ar, only: ArModel, size ! Cubic EoS models use yaeos__models_ar_genericcubic, only: & diff --git a/src/models/residual_helmholtz/ar_models.f90 b/src/models/residual_helmholtz/ar_models.f90 index 08f1397ba..583ad108f 100644 --- a/src/models/residual_helmholtz/ar_models.f90 +++ b/src/models/residual_helmholtz/ar_models.f90 @@ -60,6 +60,10 @@ module yaeos__models_ar procedure :: Cp_residual_vt end type ArModel + interface size + module procedure :: size_ar_model + end interface size + abstract interface subroutine abs_residual_helmholtz(& self, n, v, t, Ar, ArV, ArT, ArTV, ArV2, ArT2, Arn, ArVn, ArTn, Arn2 & @@ -113,6 +117,12 @@ end function abs_volume_initializer contains + integer pure function size_ar_model(eos) + !! Get the size of the model. + class(ArModel), intent(in) :: eos + size_ar_model = size(eos%components%pc) + end function size_ar_model + subroutine volume(eos, n, P, T, V, root_type) !! # Volume solver routine for residual Helmholtz models. !! Solves volume roots using newton method. Given pressure and temperature. @@ -216,7 +226,7 @@ subroutine pressure(eos, n, V, T, P, dPdV, dPdT, dPdn) real(pr) :: totn - real(pr) :: Ar, ArV, ArV2, ArTV, ArVn(size(n)) + real(pr) :: Ar, ArV, ArV2, ArTV, ArVn(size(eos)) integer :: nc logical :: dn From ee8c2ed74b97ee7c260d9b97d5c9f5d15bac0a58 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Thu, 18 Jul 2024 11:35:06 -0300 Subject: [PATCH 162/167] touched a bit MHV example --- example/tutorials/huron_vidal.f90 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/example/tutorials/huron_vidal.f90 b/example/tutorials/huron_vidal.f90 index ab6e44811..7f3ef928d 100644 --- a/example/tutorials/huron_vidal.f90 +++ b/example/tutorials/huron_vidal.f90 @@ -34,6 +34,7 @@ program main forsus_dir = "./build/dependencies/forsus/data/json" + sus(1) = Substance("water") sus(2) = Substance("ethanol") @@ -77,7 +78,7 @@ program main n(2) = real(i,pr)/100 n(1) = 1 - n(2) sat = saturation_pressure(model, n, T=473._pr, kind="bubble") - write (*, *) sat + ! write (*, *) sat end do contains @@ -88,7 +89,7 @@ subroutine phase_envel(fu) type(EquilibriaState) :: sat type(PTEnvel2) :: env - sat = saturation_pressure(model, n, T=250._pr, kind="bubble", y0=[0.1_pr, 0.9_pr]) + sat = saturation_pressure(model, n, T=300._pr, kind="bubble") write (*, *) sat, sat%iters env = pt_envelope_2ph(model, n, sat, specified_variable_0=nc + 1, delta_0=0.001_pr) From bbbed79fc218a2b3dcf4175caafdce6dedfb38c5 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Thu, 18 Jul 2024 11:37:32 -0300 Subject: [PATCH 163/167] do test python --- .github/workflows/CI.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index fee3ea6a3..395bd50ca 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -106,6 +106,6 @@ jobs: run: pip install . - - name: tox - working-directory: ./python - run: tox -r +# - name: tox +# working-directory: ./python +# run: tox -r From a8c727c353a4acc54e7e4bf464d9ef6b0aaec783 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Thu, 18 Jul 2024 14:16:23 -0300 Subject: [PATCH 164/167] ensable cubic eos tutorail --- example/tutorials/cubic_eos.f90 | 66 +++++++++++++++++++++++++++++++ example/tutorials/huron_vidal.f90 | 31 ++++++--------- fpm.toml | 5 +++ 3 files changed, 82 insertions(+), 20 deletions(-) create mode 100644 example/tutorials/cubic_eos.f90 diff --git a/example/tutorials/cubic_eos.f90 b/example/tutorials/cubic_eos.f90 new file mode 100644 index 000000000..7b86c88c4 --- /dev/null +++ b/example/tutorials/cubic_eos.f90 @@ -0,0 +1,66 @@ +!> We have seen that some cubic models are available in yaeos. But will show +!> here how it is possible to make your own CubicEoS by choosing which piece +!> of the model you want to use. +!> +!> This is just an example model and it is not intended to be used in real +!> applications. It is just to show how to create a CubicEoS model. +program main + use yaeos + integer, parameter :: nc = 2 !! Number of components + type(CubicEoS) :: eos !! The CubicEoS model + + real(pr) :: tc(nc), pc(nc), w(nc) !! Critical constants + real(pr) :: kij(nc, nc), lij(nc, nc) !! Binary interaction parameters + character(len=50) :: name(nc) !! Name of the components + + type(Substances) :: composition + !! All models should have their own composition + type(AlphaRKPR) :: alpha_function + !! The RKPR Alpha Function + type(QMR) :: mixrule + !! A Quadratic mixing rule (ClassicVdW) + + integer :: i + real(pr) :: n(nc), V, P, T + + ! First we define the components critical constants + Tc = [190._pr, 310._pr] + Pc = [14._pr, 30._pr ] + w = [0.001_pr, 0.03_pr] + name = ["Component 1", "Component 2"] + composition = Substances(name, Tc, Pc, w) + + + ! RKPR Alpha function uses a set of k parameters + alpha_function%k = [0.48_pr, 0.58_pr] + + ! The mixrule + kij = 0 + lij = 0 + kij(1,2) = 0.1_pr + kij(2,1) = kij(1, 2) + mixrule = QMR(k=kij, l=lij) + + ! We need to set up the model parameters + eos%ac = [0.042748_pr, 0.052748_pr] + eos%b = [0.005, 0.001] + eos%del1 = [0.1, 0.2] + eos%del2 = [0.4, 0.5] + + ! We now add the before defined components and mixrule + eos%alpha = alpha_function + eos%components = composition + eos%mixrule = mixrule + + + T = 50 + n = [0.5, 0.5] + do i=1,100 + V = real(i, pr)/100 + call eos%pressure(n, V, T, P) + print *, V, P + + end do + + +end program \ No newline at end of file diff --git a/example/tutorials/huron_vidal.f90 b/example/tutorials/huron_vidal.f90 index 7f3ef928d..a3acc00b1 100644 --- a/example/tutorials/huron_vidal.f90 +++ b/example/tutorials/huron_vidal.f90 @@ -25,8 +25,6 @@ program main type(Substance) :: sus(nc) - integer :: i, j - molecules(1)%groups_ids = [16] molecules(1)%number_of_groups = [1] molecules(2)%groups_ids = [1, 2, 14] @@ -45,25 +43,25 @@ program main a = 0; b = 0; c = 0 ! NRTL model parameters - a(1, 2) = 3.458 - a(2, 1) = -0.801 - - b(1, 2) = -586.1 - b(2, 1) = 246.2 - - c(1, 2) = 0.3 - c(2, 1) = 0.3 - + a(1, 2) = 3.458; a(2, 1) = -0.801 + b(1, 2) = -586.1; b(2, 1) = 246.2 + c(1, 2) = 0.3; c(2, 1) = 0.3 + ge_model = NRTL(a, b, c) + + ! Moles vector n = [0.9, 0.1] - ! n = [0.8, 0.2] + ! Define the model to be SRK model = SoaveRedlichKwong(tc, pc, w) call phase_envel(1) mixrule = MHV(ge=ge_model, q=-0.593_pr, b=model%b) - deallocate (model%mixrule) + + ! SoaveRedlichKwong uses by default QMR mixing rules. + ! We will change it to Huron-Vidal + deallocate(model%mixrule) model%mixrule = mixrule call phase_envel(2) @@ -74,13 +72,6 @@ program main model%mixrule = mixrule call phase_envel(3) - do i=1,99 - n(2) = real(i,pr)/100 - n(1) = 1 - n(2) - sat = saturation_pressure(model, n, T=473._pr, kind="bubble") - ! write (*, *) sat - end do - contains subroutine phase_envel(fu) diff --git a/fpm.toml b/fpm.toml index 7da6ab015..d1906b24b 100644 --- a/fpm.toml +++ b/fpm.toml @@ -66,3 +66,8 @@ name = "pure_psat" source-dir = "example/extra" main = "pure_psat.f90" +[[example]] +name = "cubic_eos" +source-dir = "example/tutorials" +main = "cubic_eos.f90" + From 6de06c330ea628a7b096288893a04b9ccc4a0187 Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Thu, 18 Jul 2024 14:26:02 -0300 Subject: [PATCH 165/167] test newton volume --- test/test_implementations/ar_models/cubics/test_pr76.f90 | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/test_implementations/ar_models/cubics/test_pr76.f90 b/test/test_implementations/ar_models/cubics/test_pr76.f90 index 3f223dbae..61459b8ab 100644 --- a/test/test_implementations/ar_models/cubics/test_pr76.f90 +++ b/test/test_implementations/ar_models/cubics/test_pr76.f90 @@ -344,12 +344,12 @@ end subroutine test_pr76_compressibility_factor subroutine test_pr76_co2_volume(error) ! From Elliot's book. use yaeos, only : pr, PengRobinson76, ArModel + use yaeos__models_ar, only: volume type(error_type), allocatable, intent(out) :: error class(ArModel), allocatable :: model real(pr) :: mw, V, n(1) - integer :: i model = PengRobinson76([304.2_pr], [73.82_pr], [0.228_pr]) n = [1.0_pr] @@ -360,6 +360,9 @@ subroutine test_pr76_co2_volume(error) call model%volume(n, 75.0_pr, 310.0_pr, V=V, root_type="stable") call check(error, abs(V / mw * 1000 - 3.84) < 0.01) + + call volume(model, n, 75.0_pr, 310.0_pr, V=V, root_type="stable") + call check(error, abs(V / mw * 1000 - 3.84) < 0.01) end subroutine test_pr76_co2_volume subroutine test_pr76_fugacities(error) From e0541a7b24f79487270ef5a793bb8dafab0c878c Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Thu, 18 Jul 2024 14:54:21 -0300 Subject: [PATCH 166/167] read --- python/README.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/python/README.md b/python/README.md index 3288afb23..fb9682a6a 100644 --- a/python/README.md +++ b/python/README.md @@ -1,4 +1,9 @@ -Para instalar como editable +# yaeos Python bindings +THIS IS A WIP SO THE API WILL DRASTRICALLY CHANGE WITH TIME + +Set of Python bindings to call `yaeos` functions and models. + +Editable instalation ``` cd python @@ -6,13 +11,13 @@ pip install -e . python setup.py build_fortran_editable ``` -Para instalar como no editable, directamente +If you want to install on your environment instead ``` pip install . ``` -Desde el interprete para checkear que todo este bien: +To check if the instalation worked correctly: ```python from yaeos import PengRobinson76, QMR From e59f1ed89e64cd1bd2be9809ade993fd74cae77a Mon Sep 17 00:00:00 2001 From: "Federico E. Benelli" Date: Thu, 18 Jul 2024 14:54:38 -0300 Subject: [PATCH 167/167] read --- README.md | 131 ++++++++++++++++++++++++++---------------------------- 1 file changed, 62 insertions(+), 69 deletions(-) diff --git a/README.md b/README.md index 41ddf52e8..467026fed 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,3 @@ -
- [![Fortran](https://img.shields.io/badge/Fortran-734f96?logo=fortran&style=flat)](https://fortran-lang.org) [![fpm](https://img.shields.io/badge/fpm-Fortran_package_manager-734f96)](https://fpm.fortran-lang.org) [![Documentation](https://img.shields.io/badge/ford-Documentation%20-blueviolet.svg)](https://ipqa-research.github.io/yaeos/) @@ -7,8 +5,6 @@ [![CI](https://github.com/fedebenelli/yaeos/actions/workflows/CI.yml/badge.svg)](https://github.com/ipqa-research/yaeos/actions/workflows/CI.yml) [![codecov](https://codecov.io/gh/ipqa-research/yaeos/graph/badge.svg?token=IDJYKV8XK6)](https://codecov.io/gh/ipqa-research/yaeos) -
-

@@ -38,15 +34,39 @@ derivatives so both options are easily available. We focus mainly on that the addition of a new thermodynamic model as easily as possible. Also providing our models too! -For now, we only include residual Helmholtz model (like Cubic or Saft Equations -of State). But we'll be adding other models like $G^E$ (UNIFAC for example). +For now, we only include residual Helmholtz model (like Cubic or SAFT Equations +of State). + +## Available models +- CubicEoS + - SoaveRedlichKwong + - PengRobinson76 + - PengRobinson78 +- ExcessGibbs models + - NRTL + - UNIFAC VLE + +## Available properties +- Bulk Properties + - Volume(n, P, T) + - Pressure(n, V, T) +- Residual Properties + - H^R(n, V, T) + - S^R(n, V, T) + - G^R(n, V, T) + - Cv^R(n, V, T) + - Cp^R(n, V, T) +- Phase-Equilibria + - FlashPT, FlashVT + - Saturation points (bubble, dew and liquid-liquid) + - Phase Envelope PT (isopleths) # A little taste of `yaeos` A lot of users get the bad picture of Fortran being old and archaic since most of the codes they've seen are written in ancient `F77`. ```fortran -use yaeos, only: PengRobinson76, pressure, ArModel +use yaeos, only: PengRobinson76, ArModel integer, parameter :: n=2 ! Number of components real(8) :: V, T, P, dPdN(n) ! variables to calculate @@ -66,7 +86,7 @@ model = PengRobinson76(tc, pc, w, kij, lij) V = 1 T = 150 -call pressure(model, z, V, T, P) +call model%pressure(z, V, T, P) print *, P ! Obtain derivatives adding them as optional arguments! @@ -85,30 +105,42 @@ with: Not providing any example will show all the possible examples that can be run. # How to install/run it -`yaeos` is intended to use as a [`fpm`](fpm.fortran-lang.org) - -You can either: -- Generate a new project that uses `yaeos` as a dependency +## Dependencies +`yaeos` needs to have both `lapack` and `nlopt` libraries on your system. +### Debian/Ubuntu-like ```bash -fpm new my_project +sudo apt install libnlopt-dev libblas-dev liblapack-dev ``` -In the `fpm.toml` file add: +## Installing `yaeos` +`yaeos` is intended to use as a [`fpm`](fpm.fortran-lang.org) package. `fpm` +is the Fortran Package Manager, which automates the compilation and running +process of Fortran libraries/programs. -```toml -[dependencies] -yaeos = {git="https://github.com/ipqa-research/yaeos"} -``` +You can either: + +- Generate a new project that uses `yaeos` as a dependency with: + +> ```bash +> fpm new my_project +> ``` +> +> In the `fpm.toml` file add: +> +> ```toml +> [dependencies] +> yaeos = {git="https://github.com/ipqa-research/yaeos"} +> ``` - Clone this repository and just modify the executables in the `app` directory -```bash -git clone https://github.com/ipqa-research/yaeos -cd yaeos -fpm run -``` +> ```bash +> git clone https://github.com/ipqa-research/yaeos +> cd yaeos +> fpm run +> ``` ## Developing with vscode If your intention is either to develop for `yaeos` or to explore in more detail @@ -133,6 +165,8 @@ fpm run --example ``` # Including new models with Automatic Differentiation. + +## Hyperdual Numbers autodiff We are using the `hyperdual` module developed by [Philipp Rehner](https://github.com/prehner) and [Gernot Bauer](https://github.com/g-bauer) @@ -140,56 +174,15 @@ and [Gernot Bauer](https://github.com/g-bauer) > The automatic differentiation API isn't fully optimized yet so performance is > much slower than it should be. -```fortran -type, extends(ArModelAdiff) :: YourNewModel - type(Substances) :: composition - real(8), allocatable :: parameters(:) ! A vector of parameters -contains - procedure :: Ar => arfun - procedure :: get_v0 => v0 -end type -``` - -```fortran -subroutine arfun(self, n, v, t, Ar) - class(YourNewModel), intent(in) :: self - type(hyperdual), intent(in) :: n(:) ! Number of moles - type(hyperdual), intent(in) :: v ! Volume [L] - type(hyperdual), intent(in) :: t ! Temperature [K] - type(hyperdual), intent(out) :: ar_value ! Residual Helmholtz Energy - - ! A very complicated residual helmholtz function of a mixture - Ar = sum(n) * v * t / self%parameters(1) -end subroutine - -function v0(self, n, p, t) - class(YourNewModel), intent(in) :: self - real(pr), intent(in) :: n(:) ! Number of moles - real(pr), intent(in) :: p ! Pressure [bar] - real(pr), intent(in) :: t ! Temperature [K] - real(pr) :: v0 - - v0 = self%parameters(3) -end function -``` - A complete implementation of the PR76 Equation of State can me found in -`example/adiff/adiff_pr76.f90`. - -All the thermodynamic properties can be found in `yaeos_thermoprops` and called -like: +`example/adiff/adiff_pr76.f90`. Or in the documentation pages. -```fortran -use yaeos_thermoprops, only: fugacity_vt -use my_new_model, only: YourNewModel -... -type(YourNewModel) :: eos -eos%parameters = [1, 2, 3] -call fugacity_vt(eos, n, v, t, lnfug=lnfug, dlnphidn=dlnphidn) -``` +## Tapenade-based autodiff +It is also possible to differentiate with `tapenade`. Examples can be seen +in the documentation pages or in [The tools directory](tools/tapenade_diff/) # Documentation The latest API documentation for the `main` branch can be found [here](https://ipqa-research.github.io/yaeos). This was generated from the source code using [FORD](https://github.com/Fortran-FOSS-Programmers/ford). We're -working in extending it more. +working in extending it more. \ No newline at end of file