From 7060aa0f189899de2f25c0753793d69f906f61d2 Mon Sep 17 00:00:00 2001
From: Ian Bell <ian.bell@nist.gov>
Date: Thu, 3 Nov 2022 22:24:45 -0400
Subject: [PATCH] Some VLE derivatives

---
 include/teqp/cpp/teqpcpp.hpp |  5 +++++
 interface/CPP/teqpcpp.cpp    | 16 ++++++++++++++++
 2 files changed, 21 insertions(+)

diff --git a/include/teqp/cpp/teqpcpp.hpp b/include/teqp/cpp/teqpcpp.hpp
index 85f8bf9..8f02522 100644
--- a/include/teqp/cpp/teqpcpp.hpp
+++ b/include/teqp/cpp/teqpcpp.hpp
@@ -124,6 +124,11 @@ namespace teqp {
             virtual std::tuple<double, double> extrapolate_from_critical(const double Tc, const double rhoc, const double Tgiven) const = 0;
             virtual EArray2 pure_VLE_T(const double T, const double rhoL, const double rhoV, int maxiter) const = 0;
             
+            virtual std::tuple<EArrayd, EArrayd> get_drhovecdp_Tsat(const double T, const REArrayd& rhovecL, const REArrayd& rhovecV) const = 0;
+            virtual std::tuple<EArrayd, EArrayd> get_drhovecdT_psat(const double T, const REArrayd& rhovecL, const REArrayd& rhovecV) const = 0;
+            virtual double get_dpsat_dTsat_isopleth(const double T, const REArrayd& rhovecL, const REArrayd& rhovecV) const = 0;
+            
+            
         };
         
         // Generic JSON-based interface where the model description is encoded as JSON
diff --git a/interface/CPP/teqpcpp.cpp b/interface/CPP/teqpcpp.cpp
index 7799f66..b2944ad 100644
--- a/interface/CPP/teqpcpp.cpp
+++ b/interface/CPP/teqpcpp.cpp
@@ -161,6 +161,22 @@ namespace teqp {
                     return tdx::template get_neff(model, T, rho, molefracs);
                 }, m_model);
             }
+            
+            std::tuple<EArrayd, EArrayd> get_drhovecdp_Tsat(const double T, const REArrayd& rhovecL, const REArrayd& rhovecV) const override {
+                return std::visit([&](const auto& model) {
+                    return teqp::get_drhovecdp_Tsat(model, T, rhovecL, rhovecV);
+                }, m_model);
+            }
+            std::tuple<EArrayd, EArrayd> get_drhovecdT_psat(const double T, const REArrayd& rhovecL, const REArrayd& rhovecV) const override {
+                return std::visit([&](const auto& model) {
+                    return teqp::get_drhovecdT_psat(model, T, rhovecL, rhovecV);
+                }, m_model);
+            }
+            double get_dpsat_dTsat_isopleth(const double T, const REArrayd& rhovecL, const REArrayd& rhovecV) const override {
+                return std::visit([&](const auto& model) {
+                    return teqp::get_dpsat_dTsat_isopleth(model, T, rhovecL, rhovecV);
+                }, m_model);
+            }
         };
 
         std::shared_ptr<AbstractModel> make_model(const nlohmann::json& j) {
-- 
GitLab