TRUST 1.9.8
HPC thermohydraulic platform
Loading...
Searching...
No Matches
Saturation_base.h
1/****************************************************************************
2* Copyright (c) 2026, CEA
3* All rights reserved.
4*
5* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
6* 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7* 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
8* 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
9*
10* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
11* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
12* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
13*
14*****************************************************************************/
15
16#ifndef Saturation_base_included
17#define Saturation_base_included
18
19#include <Interface_base.h>
20#include <vector>
21#include <map>
22
23enum class SAT;
24
25using MSpanD = std::map<std::string, tcb::span<double>>;
26using MSatSpanD = std::map<SAT, tcb::span<double>>;
27
29{
30 Declare_base(Saturation_base);
31public:
32 void set_param(Param& param) const override;
33 inline double get_Pref() const { return P_ref_; }
34
35 void mettre_a_jour(double ) override;
36
37 void discretiser_Tsat(const Nom& Tsat_nom, double temps);
38
39 Champ_Don_base& get_Tsat_champ() { return ch_Tsat_; }
40 const Champ_Don_base& get_Tsat_champ() const { return ch_Tsat_; }
41
42 DoubleTab& get_Tsat_tab() { return ch_Tsat_->valeurs(); }
43 const DoubleTab& get_Tsat_tab() const { return ch_Tsat_->valeurs(); }
44
45 void Tsat(const SpanD P, SpanD res, int ncomp = 1, int ind = 0) const;
46 void dP_Tsat(const SpanD P, SpanD res, int ncomp = 1, int ind = 0) const;
47 void Psat(const SpanD T, SpanD res, int ncomp = 1, int ind = 0) const;
48 void dT_Psat(const SpanD T, SpanD res, int ncomp = 1, int ind = 0) const;
49 void Lvap(const SpanD P, SpanD res, int ncomp = 1, int ind = 0) const;
50 void dP_Lvap(const SpanD P, SpanD res, int ncomp = 1, int ind = 0) const;
51 void Hls(const SpanD P, SpanD res, int ncomp = 1, int ind = 0) const;
52 void dP_Hls(const SpanD P, SpanD res, int ncomp = 1, int ind = 0) const;
53 void Hvs(const SpanD P, SpanD res, int ncomp = 1, int ind = 0) const;
54 void dP_Hvs(const SpanD P, SpanD res, int ncomp = 1, int ind = 0) const;
55
56 virtual void get_sigma(const SpanD T, const SpanD P, SpanD sig , int ncomp = 1, int ind = 0) const final;
57 virtual void get_sigma_h(const SpanD H, const SpanD P, SpanD sig , int ncomp = 1, int ind = 0) const final;
58
59 // methodes particulieres par application pour gagner en performance : utilisees dans Pb_Multiphase (pour le moment !)
60 virtual void compute_all_flux_interfacial_pb_multiphase(const SpanD P, MSatSpanD , int ncomp = 1, int ind = 0) const;
61
62 // Methods that can be called if point-to-point calculation is required
63 double Tsat(const double P) const { return double_to_span<&Saturation_base::Tsat_>(P); }
64 double dP_Tsat(const double P) const { return double_to_span<&Saturation_base::dP_Tsat_>(P); }
65 double Psat(const double T) const { return double_to_span<&Saturation_base::Psat_>(T); }
66 double dT_Psat(const double T) const { return double_to_span<&Saturation_base::dT_Psat_>(T); }
67 double Lvap(const double P) const { return double_to_span<&Saturation_base::Lvap_>(P); }
68 double dP_Lvap(const double P) const { return double_to_span<&Saturation_base::dP_Lvap_>(P); }
69 double Hls(const double P) const { return double_to_span<&Saturation_base::Hls_>(P); }
70 double dP_Hls(const double P) const { return double_to_span<&Saturation_base::dP_Hls_>(P); }
71 double Hvs(const double P) const { return double_to_span<&Saturation_base::Hvs_>(P); }
72 double dP_Hvs(const double P) const { return double_to_span<&Saturation_base::dP_Hvs_>(P); }
73
74protected:
75 double P_ref_ = -1, T_ref_ = -1;
77
78private:
79 typedef void(Saturation_base::*function_span_generic)(const SpanD , SpanD , int , int ) const;
80
81 template <function_span_generic FUNC>
82 void double_to_span(const double T_ou_P, SpanD res, int ncomp, int ind) const
83 {
84 ArrayD Pp = {T_ou_P}, res_ = {0.};
85 (this->*FUNC)(SpanD(Pp), SpanD(res_),1,0); // fill res_
86 for (int i =0; i < (int)res.size()/ncomp; i++) res[i * ncomp + ind] = res_[0]; // fill res
87 }
88
89 template <function_span_generic FUNC>
90 double double_to_span(const double T_ou_P) const
91 {
92 ArrayD Pp = {T_ou_P}, res_ = {0.};
93 (this->*FUNC)(SpanD(Pp), SpanD(res_),1,0); // fill res_
94 return res_[0];
95 }
96
97 virtual void Tsat_(const SpanD P, SpanD res, int ncomp = 1, int ind = 0) const = 0;
98 virtual void dP_Tsat_(const SpanD P, SpanD res, int ncomp = 1, int ind = 0) const = 0;
99 virtual void Psat_(const SpanD T, SpanD res, int ncomp = 1, int ind = 0) const = 0;
100 virtual void dT_Psat_(const SpanD T, SpanD res, int ncomp = 1, int ind = 0) const = 0;
101 virtual void Lvap_(const SpanD P, SpanD res, int ncomp = 1, int ind = 0) const = 0;
102 virtual void dP_Lvap_(const SpanD P, SpanD res, int ncomp = 1, int ind = 0) const = 0;
103 virtual void Hls_(const SpanD P, SpanD res, int ncomp = 1, int ind = 0) const = 0;
104 virtual void dP_Hls_(const SpanD P, SpanD res, int ncomp = 1, int ind = 0) const = 0;
105 virtual void Hvs_(const SpanD P, SpanD res, int ncomp = 1, int ind = 0) const = 0;
106 virtual void dP_Hvs_(const SpanD P, SpanD res, int ncomp = 1, int ind = 0) const = 0;
107
108 void _Tsat_(const double P, SpanD res, int ncomp = 1, int ind = 0) const { double_to_span<&Saturation_base::Tsat_>(P,res,ncomp,ind); }
109 void _dP_Tsat_(const double P, SpanD res, int ncomp = 1, int ind = 0) const { double_to_span<&Saturation_base::dP_Tsat_>(P,res,ncomp,ind); }
110 void _Psat_(const double T, SpanD res, int ncomp = 1, int ind = 0) const { double_to_span<&Saturation_base::Psat_>(T,res,ncomp,ind); }
111 void _dT_Psat_(const double T, SpanD res, int ncomp = 1, int ind = 0) const { double_to_span<&Saturation_base::dT_Psat_>(T,res,ncomp,ind); }
112 void _Lvap_(const double P, SpanD res, int ncomp = 1, int ind = 0) const { double_to_span<&Saturation_base::Lvap_>(P,res,ncomp,ind); }
113 void _dP_Lvap_(const double P, SpanD res, int ncomp = 1, int ind = 0) const { double_to_span<&Saturation_base::dP_Lvap_>(P,res,ncomp,ind); }
114 void _Hls_(const double P, SpanD res, int ncomp = 1, int ind = 0) const { double_to_span<&Saturation_base::Hls_>(P,res,ncomp,ind); }
115 void _dP_Hls_(const double P, SpanD res, int ncomp = 1, int ind = 0) const { double_to_span<&Saturation_base::dP_Hls_>(P,res,ncomp,ind); }
116 void _Hvs_(const double P, SpanD res, int ncomp = 1, int ind = 0) const { double_to_span<&Saturation_base::Hvs_>(P,res,ncomp,ind); }
117 void _dP_Hvs_(const double P, SpanD res, int ncomp = 1, int ind = 0) const { double_to_span<&Saturation_base::dP_Hvs_>(P,res,ncomp,ind); }
118};
119
120#endif /* Saturation_base_included */
classe Champ_Don_base classe de base des Champs donnes (non calcules)
class Nom Une chaine de caractere pour nommer les objets de TRUST
Definition Nom.h:31
Helper class to factorize the readOn method of Objet_U classes.
Definition Param.h:112
double Hls(const double P) const
virtual void get_sigma(const SpanD T, const SpanD P, SpanD sig, int ncomp=1, int ind=0) const final
void discretiser_Tsat(const Nom &Tsat_nom, double temps)
const DoubleTab & get_Tsat_tab() const
double dP_Tsat(const double P) const
void mettre_a_jour(double) override
double get_Pref() const
virtual void get_sigma_h(const SpanD H, const SpanD P, SpanD sig, int ncomp=1, int ind=0) const final
void Psat(const SpanD T, SpanD res, int ncomp=1, int ind=0) const
double dT_Psat(const double T) const
void Tsat(const SpanD P, SpanD res, int ncomp=1, int ind=0) const
void Hls(const SpanD P, SpanD res, int ncomp=1, int ind=0) const
void dP_Hls(const SpanD P, SpanD res, int ncomp=1, int ind=0) const
void dP_Hvs(const SpanD P, SpanD res, int ncomp=1, int ind=0) const
void dT_Psat(const SpanD T, SpanD res, int ncomp=1, int ind=0) const
void set_param(Param &param) const override
void dP_Tsat(const SpanD P, SpanD res, int ncomp=1, int ind=0) const
double dP_Hls(const double P) const
double Lvap(const double P) const
OWN_PTR(Champ_Don_base) ch_Tsat_
void dP_Lvap(const SpanD P, SpanD res, int ncomp=1, int ind=0) const
Champ_Don_base & get_Tsat_champ()
DoubleTab & get_Tsat_tab()
double dP_Hvs(const double P) const
double Psat(const double T) const
const Champ_Don_base & get_Tsat_champ() const
virtual void compute_all_flux_interfacial_pb_multiphase(const SpanD P, MSatSpanD, int ncomp=1, int ind=0) const
void Lvap(const SpanD P, SpanD res, int ncomp=1, int ind=0) const
double dP_Lvap(const double P) const
void Hvs(const SpanD P, SpanD res, int ncomp=1, int ind=0) const
double Hvs(const double P) const