14#include "arcane/utils/ValueConvert.h"
15#include "arcane/utils/ITraceMng.h"
16#include "arcane/utils/FatalErrorException.h"
18#include "arcane/CaseTable.h"
19#include "arcane/CaseTableParams.h"
20#include "arcane/MathUtils.h"
21#include "arcane/ISubDomain.h"
33_verboseBuiltInGetValue(
const CaseTable* table,Integer index,T& v,
const String& s)
35 bool is_bad = builtInGetValue(v,s);
37 ARCANE_FATAL(
"Table '{0}' index={1} : can not convert value '{2}' to type '{3}'",
38 table->name(),index,s,typeToName(v));
48, m_param_list(nullptr)
49, m_curve_type(curve_type)
53 m_use_fast_search = v.value() == 0;
69_isValidIndex(Integer index)
const
85 if (_isValidIndex(
id))
86 str = m_value_list[id].asString();
97 m_param_list->toString(
id,str);
104value(Real param,Real& v)
const
105{ _findValueAndApplyTransform(param,v); }
108value(Real param,Integer& v)
const
109{ _findValueAndApplyTransform(param,v); }
112value(Real param,
bool& v)
const
113{ _findValueAndApplyTransform(param,v); }
117{ _findValueAndApplyTransform(param,v); }
121{ _findValueAndApplyTransform(param,v); }
124value(Integer param,Real& v)
const
125{ _findValueAndApplyTransform(param,v); }
128value(Integer param,Integer& v)
const
129{ _findValueAndApplyTransform(param,v); }
132value(Integer param,
bool& v)
const
133{ _findValueAndApplyTransform(param,v); }
137{ _findValueAndApplyTransform(param,v); }
141{ _findValueAndApplyTransform(param,v); }
149 return m_param_list->setValue(
id,str);
158 if (_isValidIndex(
id))
159 return _setValue(
id,str);
167_setValue(Integer index,
const String& value_str)
173 if (builtInGetValue(v,value_str)){
176 variant.setValueAll(v);
180 if (builtInGetValue(v,value_str)){
183 variant.setValueAll(v);
187 if (builtInGetValue(v,value_str)){
190 variant.setValueAll(v);
193 if (index>=m_value_list.
size()){
194 m_value_list.
add(variant);
197 m_value_list[index] = variant;
208 bool type_changed = (new_type!=
paramType());
211 m_param_list->setType(new_type);
222 eError err = m_param_list->appendValue(param);
226 return _setValue(m_value_list.
size(),
value);
244 m_param_list->toString(n-1,param_str);
245 m_param_list->appendValue(param_str);
248 m_value_list.
add(m_value_list[n-1]);
250 for( Integer i=n; i>id; --i ){
251 m_param_list->toString(i-1,param_str);
252 m_param_list->setValue(i,param_str);
253 m_value_list[i] = m_value_list[i-1];
263 if (!_isValidIndex(
id))
267 m_param_list->removeValue(
id);
276 return m_param_list->nbElement();
291template<
class U,
class V>
void CaseTable::
292_findValueAndApplyTransform(U param,V& avalue)
const
294 _findValue(param,avalue);
295 _applyValueTransform(avalue);
301template<
typename U> Real
302_curveLinear(Real current_value,Real next_value,U t)
304 return (Real)(current_value + (next_value-current_value)*t );
306template<
typename U> Real3
307_curveLinear(Real3 current_value,Real3 next_value,U t)
309 return current_value + (next_value-current_value)*t;
312_curveLinear(Integer current_value,Integer next_value,U t)
316template<
typename U>
bool
317_curveLinear(
bool,
bool,U)
321template<
typename U> String
322_curveLinear(
const String&,
const String&,U)
336template<
typename ParamType,
typename ValueType>
void CaseTable::
337_findValue(ParamType param,ValueType& avalue)
const
339 _applyParamTransform(param);
346 Int32 iend = nb_elem;
347 if (m_use_fast_search)
348 m_param_list->getRange(param,i0,iend);
350 for( Integer i=i0; i<iend; ++i ){
351 const String& current_value_str = m_value_list[i].asString();
352 ParamType current_begin_value;
353 m_param_list->value(i,current_begin_value);
357 _verboseBuiltInGetValue(
this,i,avalue,current_value_str);
363 if (
math::isEqual(current_begin_value,param) || param<current_begin_value ){
364 _verboseBuiltInGetValue(
this,i,avalue,current_value_str);
368 const String& next_value_str = m_value_list[i+1].asString();
369 ParamType next_begin_value;
370 m_param_list->value(i+1,next_begin_value);
374 _verboseBuiltInGetValue(
this,i,avalue,next_value_str);
379 if (param>current_begin_value && param<next_begin_value){
380 ValueType current_value = ValueType();
381 ValueType next_value = ValueType();
382 _verboseBuiltInGetValue(
this,i,current_value,current_value_str);
384 avalue = current_value;
388 _verboseBuiltInGetValue(
this,i,next_value,next_value_str);
389 ParamType diff = next_begin_value - current_begin_value;
390 if (math::isZero(diff))
392 ParamType t = (param - current_begin_value) / diff;
393 avalue = _curveLinear<ParamType>(current_value,next_value,t);
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Informations pour construire une instance de CaseFunction.
ICaseFunction::eParamType m_param_type
Type du paramètre (x)
void setParamType(eParamType type) override
Positionne le type de paramètre de la fonction.
String name() const override
nom de la fonction
eValueType valueType() const override
Type des valeurs de la fonction.
eParamType paramType() const override
Type du paramètre de la fonction.
virtual eError setValue(Integer id, const String &value)
Modifie la valeur de l'élément id.
virtual eError appendElement(const String ¶m, const String &value)
Ajoute un élément à la table.
virtual void setParamType(eParamType type)
Positionne le type de paramètre de la fonction.
virtual void insertElement(Integer id)
Insère un couple (paramètre,valeur) dans la fonction.
eCurveType
Type de la courbe de la table.
@ CurveLinear
Courbe linéaire par morceau.
@ CurveConstant
Courbe constante par morceau.
virtual Integer nbElement() const
Nombre d'éléments de la fonction.
CaseTable(const CaseFunctionBuildInfo &info, eCurveType curve_type)
Construit une table de marche du jeu de données.
virtual void removeElement(Integer id)
Supprime un couple (paramètre,valeur) dans la fonction.
eError
Type des erreurs retournées par la classe.
@ ErrCanNotConvertValueToRightType
Indique que la conversion de la valeur vers le type souhaité est impossible.
virtual void value(Real param, Real &v) const
Valeur v de l'option pour le paramètre param.
virtual eError setParam(Integer id, const String &value)
Modifie le paramètre de l'élément id.
virtual bool checkIfValid() const
Vérifie la validité de la fonction.
virtual void paramToString(Integer id, String ¶m) const
\id ième paramètre dans la chaîne str
virtual void valueToString(Integer id, String &str) const
\id ième valeur dans la chaîne str
eParamType
Type d'un paramètre d'une fonction.
eValueType
Type d'une valeur d'une fonction.
@ ValueInteger
Valeur de type entière.
@ ValueReal
Valeur de type réelle.
@ ValueBool
Valeur de type entière.
Classe gérant un vecteur de réel de dimension 3.
Classe gérant un type polymorphe.
Integer size() const
Nombre d'éléments du vecteur.
void remove(Int64 index)
Supprime l'entité ayant l'indice index.
void add(ConstReferenceType val)
Ajoute l'élément val à la fin du tableau.
Chaîne de caractères unicode.
Integer toInteger(Real r)
Converti un Real en Integer.
constexpr __host__ __device__ bool isEqual(const _Type &a, const _Type &b)
Teste l'égalité bit à bit entre deux valeurs.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.