Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
CaseFunction.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2022 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* CaseFunction.cc (C) 2000-2022 */
9/* */
10/* Classe gérant une fonction du jeu de données. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/CaseFunction.h"
15
16#include "arcane/utils/ITraceMng.h"
17#include "arcane/utils/FatalErrorException.h"
18#include "arcane/utils/NotImplementedException.h"
19#include "arcane/utils/ValueConvert.h"
20#include "arcane/utils/TraceInfo.h"
21
22#include "arcane/MathUtils.h"
23
24#include "arcane/ISubDomain.h"
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
29namespace Arcane
30{
31
32/*---------------------------------------------------------------------------*/
33/*---------------------------------------------------------------------------*/
34
35//! \deprecated Utiliser CaseFunctionBuildInfo(ITraceMng* tm,const String& name)
38: CaseFunctionBuildInfo(sd->traceMng(),name)
39{
40}
41
42/*---------------------------------------------------------------------------*/
43/*---------------------------------------------------------------------------*/
44
47: m_trace(info.m_trace_mng)
48, m_name(info.m_name)
49, m_param_type(info.m_param_type)
50, m_value_type(info.m_value_type)
51, m_transform_param_func(info.m_transform_param_func)
52, m_transform_value_func(info.m_transform_value_func)
53, m_deltat_coef(info.m_deltat_coef)
54{
55}
56
57/*---------------------------------------------------------------------------*/
58/*---------------------------------------------------------------------------*/
59
60CaseFunction::
61~CaseFunction()
62{
63}
64
65/*---------------------------------------------------------------------------*/
66/*---------------------------------------------------------------------------*/
67
69setName(const String& new_name)
70{
71 if (new_name.null())
72 return;
73 m_name = new_name;
74}
75
76/*---------------------------------------------------------------------------*/
77/*---------------------------------------------------------------------------*/
78
79/*---------------------------------------------------------------------------*/
80/*---------------------------------------------------------------------------*/
81
84{
85 if (new_type==m_param_type)
86 return;
87 m_param_type = new_type;
88}
89
90/*---------------------------------------------------------------------------*/
91/*---------------------------------------------------------------------------*/
92
95{
96 if (new_type==m_value_type)
97 return;
98 m_value_type = new_type;
99}
100
101/*---------------------------------------------------------------------------*/
102/*---------------------------------------------------------------------------*/
103
104
105/*---------------------------------------------------------------------------*/
106/*---------------------------------------------------------------------------*/
107
110{
111 m_transform_value_func = str;
112}
113
114/*---------------------------------------------------------------------------*/
115/*---------------------------------------------------------------------------*/
116
119{
120 m_transform_param_func = str;
121}
122
123/*---------------------------------------------------------------------------*/
124/*---------------------------------------------------------------------------*/
125
127checkIfValid() const
128{
129 throw NotImplementedException(A_FUNCINFO);
130}
131
132/*---------------------------------------------------------------------------*/
133/*---------------------------------------------------------------------------*/
134
135Real CaseFunction::
136_applyValueComulTransform(Real v,Real comul) const
137{
138 return v * comul;
139}
140Integer CaseFunction::
141_applyValueComulTransform(Integer v,Integer comul) const
142{
143 return v * comul;
144}
145Real3 CaseFunction::
146_applyValueComulTransform(Real3 v,Real3 comul) const
147{
148 return v * comul;
149}
150String CaseFunction::
151_applyValueComulTransform(const String& v,const String& comul) const
152{
153 ARCANE_UNUSED(v);
154 ARCANE_UNUSED(comul);
155 ARCANE_FATAL("Invalid for type 'String'");
156}
157bool CaseFunction::
158_applyValueComulTransform(bool v,bool comul) const
159{
160 ARCANE_UNUSED(v);
161 ARCANE_UNUSED(comul);
162 ARCANE_FATAL("Invalid for type 'bool'");
163}
164
165/*---------------------------------------------------------------------------*/
166/*---------------------------------------------------------------------------*/
167
168template<typename ValueType> void CaseFunction::
169_applyValueTransform2(ValueType& value) const
170{
171 // Applique la transformation...
172 // Pour l'instant, uniquement un coefficient multiplicateur.
173 if (m_transform_value_func.null())
174 return;
175 ValueType comul = ValueType();
176 bool is_bad = builtInGetValue(comul,m_transform_value_func);
177 if (is_bad)
178 ARCANE_FATAL("Can not convert 'comul' value '{0}'",m_transform_value_func);
179 value = _applyValueComulTransform(value,comul);
180}
181
182/*---------------------------------------------------------------------------*/
183/*---------------------------------------------------------------------------*/
184
185void CaseFunction::
186_applyValueTransform(Real& value) const
187{
188 _applyValueTransform2(value);
189}
190void CaseFunction::
191_applyValueTransform(Real3& value) const
192{
193 _applyValueTransform2(value);
194}
195void CaseFunction::
196_applyValueTransform(Integer& value) const
197{
198 _applyValueTransform2(value);
199}
200void CaseFunction::
201_applyValueTransform(String& value) const
202{
203 _applyValueTransform2(value);
204}
205void CaseFunction::
206_applyValueTransform(bool& value) const
207{
208 _applyValueTransform2(value);
209}
210
211/*---------------------------------------------------------------------------*/
212/*---------------------------------------------------------------------------*/
213
214template<typename ParamType> void CaseFunction::
215_applyParamTransform2(ParamType& param) const
216{
217 // Applique la transformation...
218 // Pour l'instant, uniquement un coefficient multiplicateur.
219 if (m_transform_param_func.null())
220 return;
221
222 ParamType comul = ParamType();
223 bool is_bad = builtInGetValue(comul,m_transform_param_func);
224 if (is_bad)
225 ARCANE_FATAL("Can not convert 'comul-x' value '{0}'",m_transform_param_func);
226 if (math::isZero(comul))
227 ARCANE_FATAL("The parameter 'comul-x' can not be zero");
228 param = param / comul;
229}
230
231/*---------------------------------------------------------------------------*/
232/*---------------------------------------------------------------------------*/
233
234void CaseFunction::
235_applyParamTransform(Real& value) const
236{
237 _applyParamTransform2(value);
238}
239
240/*---------------------------------------------------------------------------*/
241/*---------------------------------------------------------------------------*/
242
243void CaseFunction::
244_applyParamTransform(Integer& value) const
245{
246 _applyParamTransform2(value);
247}
248
249/*---------------------------------------------------------------------------*/
250/*---------------------------------------------------------------------------*/
251
252Ref<ICaseFunction> CaseFunction::
253toReference()
254{
255 return Arccore::makeRefFromInstance<ICaseFunction>(this);
256}
257
258/*---------------------------------------------------------------------------*/
259/*---------------------------------------------------------------------------*/
260
261} // End namespace Arcane
262
263/*---------------------------------------------------------------------------*/
264/*---------------------------------------------------------------------------*/
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Informations pour construire une instance de CaseFunction.
ARCANE_DEPRECATED_260 CaseFunctionBuildInfo(ISubDomain *sd, const String &name)
void setTransformParamFunction(const String &str) override
Affecte une fonction de transformation du paramètre. Pour l'instant, il s'agit juste d'un coefficient...
bool checkIfValid() const override
Vérifie la validité de la fonction.
void setParamType(eParamType type) override
Positionne le type de paramètre de la fonction.
void setName(const String &new_name) override
Positionne le nom de la fonction en new_name.
CaseFunction(const CaseFunctionBuildInfo &info)
Construit une fonction du jeu de données.
void setValueType(eValueType type) override
Positionne le type des valeurs de la fonction.
void setTransformValueFunction(const String &str) override
Affecte une fonction de transformation de la valeur. Pour l'instant, il s'agit juste d'un coefficient...
eParamType
Type d'un paramètre d'une fonction.
eValueType
Type d'une valeur d'une fonction.
virtual void value(Real param, Real &v) const =0
Valeur v de l'option pour le paramètre param.
Interface du gestionnaire d'un sous-domaine.
Definition ISubDomain.h:74
Chaîne de caractères unicode.
bool null() const
Retourne true si la chaîne est nulle.
Definition String.cc:304
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-