C++ main module for emicrom Package  1.0
EMM_IterativeTimeStep.h
Go to the documentation of this file.
1 #ifndef EMM_IterativeTimeStep_H
2 #define EMM_IterativeTimeStep_H
3 
4 #include "EMM_RegularTimeStep.h"
5 
6 #include "EMM_RealField.h"
7 #include "MATH_P4.h"
21 
23  // ATTRIBUTES
24 
25 public:
26 
27 
28 
29 
30 
34 
35 private:
42 
46 
47 
48  SP::EMM_RealField mGradH_GradF_F;
49  SP::EMM_RealField mGradF_F;
50  tReal mT[4];
52 
53 
54 protected:
55  // METHODS
56 
57  // CONSTRUCTORS
58 
62 
63 
64 
65  // DESTRUCTORS
66 
67 
70  virtual ~EMM_IterativeTimeStep(void);
71 
72 
73 private:
74 
75 public:
76 
77 
78  // SET methods
79 
83  inline void setMinTimeStep(const tReal& dt) {
84  mMinTimeStep=dt;
85  }
86 
90  inline void setInitialTimeType(const tFlag& t) {
91  mInitialTimeType=t;
92  }
96  inline void setInitialTimeType(const tString& t) {
97  if (t.compare("regular")==0) mInitialTimeType=INITIAL_TIME_AS_REGULAR;
98  else if (t.compare("optimal-linear")==0) mInitialTimeType=INITIAL_TIME_AS_OPTIMAL_AFFINE_H;
99  else mInitialTimeType=INITIAL_TIME_AS_MAX_LINEAR_CONSTANT_H;
100  }
104  inline void resetInitialTimeStepToOptimalOne(const tBoolean& isReset) {
105  mIsInitialTimeStepReset=isReset;
106  }
107 
111  inline void setIntegrationOrder(const tFlag& order) {
112  mOrder=order;
113  }
114 
118  inline void setMaximumEvaluationsNumber(const tUInteger& n) {
119  mMaxEvaluationsNumber=n;
120  }
124  inline void setZoomOutFactor(const tReal& z) {
125  mZoomOutFactor=(z>1)?z:1.1;
126  }
130  inline void setZoomInFactor(const tReal& z) {
131  mZoomInFactor=(z<1)?z:0.1;
132  }
136  inline void setMaxTimeStepGap(const tReal& dt) {
137  mMaxTimeStepGap=dt;
138  }
142  inline void setTimeStepBound(const tReal& dt) {
143  mTimeStepBound=dt;
144  }
145 
146 
147 
148 
149 
150  // GET methods
151 
155  inline const tReal& getMinTimeStep() const {
156  return mMinTimeStep;
157  }
158 
162  inline const tFlag& getInitialTimeType() const {
163  return mInitialTimeType;
164  }
165 
166 
170  inline const tUInteger& getMaximumEvaluationsNumber() const {
171  return mMaxEvaluationsNumber;
172  }
176  inline const tReal& getZoomOutFactor() const {
177  return mZoomOutFactor;
178  }
182  inline const tReal& getZoomInFactor() const {
183  return mZoomInFactor;
184  }
188  inline const tFlag& getIntegrationOrder() const {
189  return mOrder;
190  }
194  inline const tReal& getMaximumTimeStepGap() const {
195  return mMaxTimeStepGap;
196  }
200  inline const tReal& getTimeStepBound() const {
201  return mTimeStepBound;
202  }
203 public:
210 protected:
217  void computeOptimalTimeSteps(tReal& dt_c,tReal& dt_l);
218 
219 public:
235  virtual tBoolean computeNewTimeStep(tReal& dt,tUInteger& nEvaluations);
236 
240  tReal computeTimeFunction(const tReal& t);
241 
244  const tReal& computeTimeFunction() const;
245 
251 
255  const tReal& computeTimeFunctionDerivative(tReal& dF_dt_0) const;
256 
257 
258 
259 
260 protected:
269  virtual tBoolean optimizeTimeFunction(tReal& dt,const tReal& dt_bound,tUInteger& evaluationsNumber)=0;
270 
271 
272 public:
273  // OTHERS methods
274 
278  virtual tString toString() const;
279 
280 };
281 
282 #endif
tReal computeInitialTimeStep()
compute initial time steps
Definition: EMM_IterativeTimeStep.cpp:44
const tUInteger & getMaximumEvaluationsNumber() const
get the max evalution of Energy for finding the best dt for which the variation of energy is <0 ...
Definition: EMM_IterativeTimeStep.h:170
void computeOptimalTimeSteps(tReal &dt_c, tReal &dt_l)
compute optimal time steps
Definition: EMM_IterativeTimeStep.cpp:64
void setTimeStepBound(const tReal &dt)
set the max time step
Definition: EMM_IterativeTimeStep.h:142
void setMaximumEvaluationsNumber(const tUInteger &n)
set the max evalution of Energy for finding the best dt for which the variation of energy is <0 ...
Definition: EMM_IterativeTimeStep.h:118
tFlag mInitialTimeType
Definition: EMM_IterativeTimeStep.h:44
void setZoomOutFactor(const tReal &z)
set the zoom out factor >1
Definition: EMM_IterativeTimeStep.h:124
EMM_IterativeTimeStep(void)
create
Definition: EMM_IterativeTimeStep.cpp:12
tReal mMinTimeStep
Definition: EMM_IterativeTimeStep.h:40
const tFlag & getIntegrationOrder() const
get integration order
Definition: EMM_IterativeTimeStep.h:188
#define tUInteger
Definition: types.h:91
virtual tBoolean optimizeTimeFunction(tReal &dt, const tReal &dt_bound, tUInteger &evaluationsNumber)=0
optimize the time step function
static const tFlag INITIAL_TIME_AS_REGULAR
Definition: EMM_IterativeTimeStep.h:31
void setIntegrationOrder(const tFlag &order)
set the order of evaluation the time function
Definition: EMM_IterativeTimeStep.h:111
const tFlag & getInitialTimeType() const
get the initial type type
Definition: EMM_IterativeTimeStep.h:162
#define tBoolean
Definition: types.h:139
This class describes the iterative optimal time.
Definition: EMM_IterativeTimeStep.h:20
void setInitialTimeType(const tString &t)
set the initial time type
Definition: EMM_IterativeTimeStep.h:96
tReal mMaxTimeStepGap
Definition: EMM_IterativeTimeStep.h:38
void setInitialTimeType(const tFlag &t)
set the initial time type
Definition: EMM_IterativeTimeStep.h:90
const tReal & getMaximumTimeStepGap() const
get the maximum time step gap
Definition: EMM_IterativeTimeStep.h:194
void resetInitialTimeStepToOptimalOne(const tBoolean &isReset)
set if the initial time step is set to optimal time step
Definition: EMM_IterativeTimeStep.h:104
virtual tString toString() const
turn the regular time into a string
Definition: EMM_IterativeTimeStep.cpp:205
virtual ~EMM_IterativeTimeStep(void)
destroy
Definition: EMM_IterativeTimeStep.cpp:41
const tReal & getMinTimeStep() const
get the min time step of iterative time step computing
Definition: EMM_IterativeTimeStep.h:155
virtual tBoolean computeNewTimeStep(tReal &dt, tUInteger &nEvaluations)
compute the new time step
Definition: EMM_IterativeTimeStep.cpp:137
void setZoomInFactor(const tReal &z)
set the zoom in factor <1
Definition: EMM_IterativeTimeStep.h:130
SP_OBJECT(EMM_IterativeTimeStep)
tReal mT[4]
Definition: EMM_IterativeTimeStep.h:50
SP::EMM_RealField mGradH_GradF_F
Definition: EMM_IterativeTimeStep.h:48
static const tFlag INITIAL_TIME_AS_OPTIMAL_AFFINE_H
Definition: EMM_IterativeTimeStep.h:32
tFlag mOrder
Definition: EMM_IterativeTimeStep.h:43
tBoolean mIsInitialTimeStepReset
Definition: EMM_IterativeTimeStep.h:45
const tReal & getZoomOutFactor() const
set the zoom out factor >1
Definition: EMM_IterativeTimeStep.h:176
void setMaxTimeStepGap(const tReal &dt)
set the max gap betewen 2 time step
Definition: EMM_IterativeTimeStep.h:136
#define tString
Definition: types.h:135
static const tFlag INITIAL_TIME_AS_MAX_LINEAR_CONSTANT_H
Definition: EMM_IterativeTimeStep.h:33
SP::EMM_RealField mGradF_F
Definition: EMM_IterativeTimeStep.h:49
tReal mZoomInFactor
Definition: EMM_IterativeTimeStep.h:37
void setMinTimeStep(const tReal &dt)
set the min time step of iterative time step computing
Definition: EMM_IterativeTimeStep.h:83
DEFINE_SPTR(EMM_IterativeTimeStep)
tUInteger mMaxEvaluationsNumber
Definition: EMM_IterativeTimeStep.h:41
const tReal & getZoomInFactor() const
set the zoom in factor <1
Definition: EMM_IterativeTimeStep.h:182
const tReal & getTimeStepBound() const
get the max time step
Definition: EMM_IterativeTimeStep.h:200
#define tReal
Definition: types.h:118
tReal computeTimeFunctionDerivative(const tReal &t, tReal &dF_dt)
compute the time function at t and its first derivative
Definition: EMM_IterativeTimeStep.cpp:192
const tReal & computeTimeFunction() const
compute the time function at 0
Definition: EMM_IterativeTimeStep.cpp:183
This class describes a regular time.
Definition: EMM_RegularTimeStep.h:15
MATH_P4 mP4
Definition: EMM_IterativeTimeStep.h:51
tReal mTimeStepBound
Definition: EMM_IterativeTimeStep.h:39
tReal mZoomOutFactor
Definition: EMM_IterativeTimeStep.h:36
This class describes a polynom of degre 4 .
Definition: MATH_P4.h:15
#define tFlag
Definition: types.h:74