Skip to content
Snippets Groups Projects
trace_critical.cpp 1.07 KiB
#include <tuple>
#include <valarray>
#include <iostream>

#include "teqp/core.hpp"

void trace() { 
    // Argon + Xenon
    std::valarray<double> Tc_K = { 150.687, 289.733 };
    std::valarray<double> pc_Pa = { 4863000.0, 5842000.0 };
    vdWEOS<double> vdW(Tc_K, pc_Pa);
    auto Zc = 3.0/8.0;
    auto rhoc0 = pc_Pa[0]/(vdW.R*Tc_K[0]) / Zc; 
    auto T = Tc_K[0];
    const auto dT = 1;
    std::valarray<double> rhovec = { rhoc0, 0.0 };
    auto tic0 = std::chrono::steady_clock::now();
    for (auto iter = 0; iter < 1000; ++iter){
        auto drhovecdT = get_drhovec_dT_crit(vdW, T, rhovec);
        rhovec += drhovecdT*dT;
        T += dT;
        int rr = 0;
        auto z0 = rhovec[0] / rhovec.sum();
        //std::cout << z0 <<  "," << rhovec[0] << "," << T << "," << get_splus(vdW, T, rhovec) << std::endl;
        if (z0 < 0) {
            break;
        }
    }
    auto tic1 = std::chrono::steady_clock::now();
    std::cout << std::chrono::duration<double>(tic1 - tic0).count() << " s to trace" << std::endl;
    int rr = 0;
}
int main() {   
    trace();
    return EXIT_SUCCESS;
}