www.cemf.ir
baseTimeControl.cpp
Go to the documentation of this file.
1 /*------------------------------- phasicFlow ---------------------------------
2  O C enter of
3  O O E ngineering and
4  O O M ultiscale modeling of
5  OOOOOOO F luid flow
6 ------------------------------------------------------------------------------
7  Copyright (C): www.cemf.ir
8  email: hamid.r.norouzi AT gmail.com
9 ------------------------------------------------------------------------------
10 Licence:
11  This file is part of phasicFlow code. It is a free software for simulating
12  granular and multiphase flows. You can redistribute it and/or modify it under
13  the terms of GNU General Public License v3 or any other later versions.
14 
15  phasicFlow is distributed to help others in their research in the field of
16  granular and multiphase flows, but WITHOUT ANY WARRANTY; without even the
17  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 
19 -----------------------------------------------------------------------------*/
20 
21 #include "baseTimeControl.hpp"
22 
23 
25 (
26  const dictionary &dict,
27  const word& intervalPrefix,
28  real defStartTime
29 )
30 :
31  intervalPrefix_(intervalPrefix)
32 {
33  auto tControl = dict.getVal<word>("timeControl");
34  if(tControl == "timeStep")
35  isTimeStep_ = true;
36  else if( tControl == "runTime" ||
37  tControl == "simulationTime")
38  isTimeStep_ = false;
39  else
40  {
42  "bad input for intervalControl in dictionary "<< dict.globalName()<<endl<<
43  "valid inputs are "<<
44  wordList({"timeStep", "runTime", "simulationTime"})<<endl;
45  fatalExit;
46  }
47 
48  word intervalWord = intervalPrefix.size()==0? word("interval"): intervalPrefix+"Interval";
49 
50  if(!isTimeStep_)
51  {
52  auto startTime = (dict.getValOrSet<real>("startTime", defStartTime));
53  auto endTime = (dict.getValOrSet<real>("endTime", largeValue));
54  auto interval = dict.getVal<real>(intervalWord);
55  rRange_ = realStridedRange(startTime, endTime, interval);
56 
57  }
58  else
59  {
60  auto startTime = (dict.getValOrSet<int32>("startTime", 0));
61  auto endTime = (dict.getValOrSet<int32>("endTime", largestPosInt32));
62  auto interval = dict.getVal<int32>(intervalWord);
63  iRange_ = int32StridedRagne(startTime, endTime, interval);
64  }
65 
66 }
67 
68 pFlow::baseTimeControl::baseTimeControl(int32 start, int32 end, int32 stride, const word &intervalPrefix)
69 :
70  isTimeStep_(true),
71  iRange_(start, end, std::max(stride,1)),
72  intervalPrefix_(
73  intervalPrefix.size()==0uL? word("interval"): intervalPrefix+"Interval"
74  )
75 {
76 }
77 
79 {
80  if(isTimeStep_)
81  {
82  return iRange_.isMember(iter);
83  }
84  else
85  {
86  return rRange_.isMember(t, 0.55*dt);
87  }
88  return false;
89 }
90 
91 bool
93 {
94  if(isTimeStep_)
95  {
96  return iRange_.isInRange(iter);
97  }
98  else
99  {
100  return rRange_.isInRange(t);
101  }
102 }
103 
106 {
107  if(!isTimeStep_)
108  {
109  return rRange_.begin();
110  }
111 
112  fatalErrorInFunction<<"timeControl is not simulationTime or runTime"<<endl;
113  fatalExit;
114  return 0;
115 }
116 
119 {
120  if(!isTimeStep_)
121  {
122  return rRange_.end();
123  }
124 
125  fatalErrorInFunction<<"timeControl is not simulationTime or runTime"<<endl;
126  fatalExit;
127  return 0;
128 }
129 
132 {
133  if(!isTimeStep_)
134  {
135  return rRange_.stride();
136  }
137  fatalErrorInFunction<<"timeControl is not simulationTime or runTime"<<endl;
138  fatalExit;
139  return 0;
140 }
141 
144 {
145  if(isTimeStep_)
146  {
147  return iRange_.begin();
148  }
149  fatalErrorInFunction<<"timeControl is not timeStep"<<endl;
150  fatalExit;
151  return 0;
152 }
153 
156 {
157  if(isTimeStep_)
158  {
159  return iRange_.end();
160  }
161  fatalErrorInFunction<<"timeControl is not timeStep"<<endl;
162  fatalExit;
163  return 0;
164 }
165 
168 {
169  if(isTimeStep_)
170  {
171  return iRange_.stride();
172  }
173  fatalErrorInFunction<<"timeControl is not timeStep"<<endl;
174  fatalExit;
175  return 0;
176 }
177 
178 bool
180 {
181  if(isTimeStep_)
182  {
183  dict.add("timeControl", "timeStep");
184  }
185  else
186  {
187  dict.add("timeControl", "runTime");
188  }
189 
190  word intervalWord = intervalPrefix_.size()==0? word("interval"): intervalPrefix_+"Interval";
191 
192  if(!isTimeStep_)
193  {
194  dict.add(intervalWord,rRange_.stride());
195  dict.add("startTime",rRange_.begin());
196  dict.add("endTime", rRange_.end());
197  }
198  else
199  {
200  dict.add(intervalWord,iRange_.stride());
201  dict.add("startTime",iRange_.begin());
202  dict.add("endTime", iRange_.end());
203  }
204  return true;
205 }
pFlow::dictionary::getValOrSet
T getValOrSet(const word &keyword, const T &setVal) const
get the value of data entry or if not found, set the value to setVal
Definition: dictionary.hpp:415
pFlow::baseTimeControl::endIter
int32 endIter() const
Definition: baseTimeControl.cpp:155
pFlow::baseTimeControl::startIter
int32 startIter() const
Definition: baseTimeControl.cpp:143
pFlow::real
float real
Definition: builtinTypes.hpp:45
fatalExit
#define fatalExit
Fatal exit.
Definition: error.hpp:98
pFlow::int32StridedRagne
stridedRange< int32 > int32StridedRagne
Definition: ranges.hpp:31
pFlow::algorithms::KOKKOS::max
INLINE_FUNCTION_H Type max(const Type *first, uint32 numElems)
Definition: kokkosAlgorithms.hpp:104
pFlow::uint32
unsigned int uint32
Definition: builtinTypes.hpp:56
pFlow::baseTimeControl::timeEvent
bool timeEvent(uint32 iter, real t, real dt) const
Definition: baseTimeControl.cpp:78
pFlow::word
std::string word
Definition: builtinTypes.hpp:64
pFlow::dictionary::globalName
virtual word globalName() const
global name of entry, separated with dots
Definition: dictionary.cpp:356
pFlow::dictionary::add
bool add(const word &keyword, const float &v)
add a float dataEntry
Definition: dictionary.cpp:435
pFlow::endl
iOstream & endl(iOstream &os)
Add newline and flush stream.
Definition: iOstream.hpp:341
pFlow::baseTimeControl::startTime
real startTime() const
Definition: baseTimeControl.cpp:105
fatalErrorInFunction
#define fatalErrorInFunction
Report a fatal error and function name and exit the application.
Definition: error.hpp:77
pFlow::int32
int int32
Definition: builtinTypes.hpp:50
pFlow::baseTimeControl::iInterval
int32 iInterval() const
Definition: baseTimeControl.cpp:167
pFlow::baseTimeControl::endTime
real endTime() const
Definition: baseTimeControl.cpp:118
pFlow::baseTimeControl::write
bool write(dictionary &dict) const
Definition: baseTimeControl.cpp:179
pFlow::baseTimeControl::isInRange
bool isInRange(uint32 iter, real t, real dt) const
Definition: baseTimeControl.cpp:92
pFlow::realStridedRange
stridedRange< real > realStridedRange
Definition: ranges.hpp:33
pFlow::baseTimeControl::rInterval
real rInterval() const
Definition: baseTimeControl.cpp:131
baseTimeControl.hpp
pFlow::dictionary::getVal
T getVal(const word &keyword) const
get the value of data entry
Definition: dictionary.hpp:379
pFlow::largestPosInt32
const int32 largestPosInt32
Definition: numericConstants.hpp:60
pFlow::largeValue
const real largeValue
Definition: numericConstants.hpp:33
pFlow::baseTimeControl::baseTimeControl
baseTimeControl(const dictionary &dict, const word &intervalPrefix="", real defStartTime=0.0)
Definition: baseTimeControl.cpp:25
pFlow::dictionary
Dictionary holds a set of data entries or sub-dictionaries that are enclosed in a curely braces or ar...
Definition: dictionary.hpp:67
pFlow::wordList
List< word > wordList
Definition: List.hpp:230