Skip to content
Snippets Groups Projects
multifluid_mutant.cpp 1.99 KiB
Newer Older
  • Learn to ignore specific revisions
  • #include "pybind11_wrapper.hpp"
    
    #include "teqp/models/multifluid.hpp"
    #include "teqp/derivs.hpp"
    
    
    void add_multifluid_mutant(py::module& m) {
    
    
        // A typedef for the base model
    
        using MultiFluid = decltype(build_multifluid_model(std::vector<std::string>{"", ""}, "", ""));
    
        
        // Wrap the function for generating a multifluid mutant
        m.def("build_multifluid_mutant", &build_multifluid_mutant<MultiFluid>);
    
        // The reducing function type and the departure function types are the same
        // as the base model
        using RedType = std::decay_t<decltype(MultiFluid::redfunc)>;
        using DepType = std::decay_t<decltype(MultiFluid::dep)>;
    
        // Typedef for modified mutant type
        using BIPmod = std::decay_t<MultiFluidAdapter<RedType, DepType, MultiFluid>>;
    
        // Define python wrapper of the mutant class
        auto wMFBIP = py::class_<BIPmod>(m, "MultiFluidMutant")
            .def("set_meta", [](BIPmod& c, const std::string &s) { return c.set_meta(s); })
            .def("get_meta", [](const BIPmod& c) { return c.get_meta(); })
            ;
        add_derivatives<BIPmod>(m, wMFBIP);
    
    }
    
    void add_multifluid_mutant_invariant(py::module& m) {
    
        // A typedef for the base model from which we steal the pure fluids
    
        using MultiFluid = std::decay_t<decltype(build_multifluid_model(std::vector<std::string>{"", ""}, "", ""))>;
    
    
        // Wrap the function for generating a multifluid mutant
        m.def("build_multifluid_mutant_invariant", &build_multifluid_mutant_invariant<MultiFluid>);
    
        // Typedef for mutant with the invariant reducing function
    
        using Mutant = std::invoke_result_t<decltype(build_multifluid_mutant_invariant<MultiFluid>), MultiFluid&, nlohmann::json&>;
    
    
        // Define python wrapper of the mutant class
        auto wMutant = py::class_<Mutant>(m, "MultiFluidMutantInvariant")
            .def("set_meta", [](Mutant& c, const std::string& s) { return c.set_meta(s); })
            .def("get_meta", [](const Mutant& c) { return c.get_meta(); })
            ;
        add_derivatives<Mutant>(m, wMutant);