39 #ifndef dataExchangeModel_H
40 #define dataExchangeModel_H
43 #include "cfdemCloud.H"
59 const dictionary& dict_;
63 int maxNumberOfParticles_;
65 mutable int couplingStep_;
69 int couplingInterval_;
76 TypeName(
"dataExchangeModel");
80 declareRunTimeSelectionTable
86 const dictionary& dict,
98 const dictionary& dict,
110 static autoPtr<dataExchangeModel> New
112 const dictionary& dict,
118 void setNumberOfParticles(
int)
const;
120 inline const int& maxNumberOfParticles()
const {
return maxNumberOfParticles_;};
122 template <
typename T>
128 )
const { getData(name,type,field,couplingStep_-1); }
134 double **
const& field,
146 virtual void giveData
150 double **
const& field,
151 const char* datatype=
"double"
156 virtual void allocateArray(
double**&,
double,
int,
int)
const;
157 virtual void allocateArray(
double**&,
double,
int,
const char* =
"nparticles")
const;
158 virtual void destroy(
double**,
int)
const;
162 virtual void allocateArray(
int**&,
int,
int,
int)
const;
163 virtual void allocateArray(
int**&,
int,
int,
const char* =
"nparticles")
const;
164 virtual void destroy(
int**,
int)
const;
169 virtual void allocateArray(
int*&,
int,
int)
const;
170 virtual void destroy(
int*)
const;
175 virtual void allocateArray(
double*&,
double,
int)
const;
176 virtual void destroy(
double*)
const;
179 virtual bool couple(
int)
const;
181 virtual scalar timeStepFraction()
const;
183 inline int couplingStep()
const {
return couplingStep_;};
185 inline const scalar& DEMts()
const {
return DEMts_;};
187 inline int couplingInterval()
const {
return couplingInterval_;};
189 inline scalar couplingTime()
const {
return couplingInterval_*DEMts_;};
191 inline scalar TSstart()
const {
return particleCloud_.mesh().time().startTime().value()
192 + (couplingStep_-1) * couplingTime();};
194 inline scalar TSend()
const {
return particleCloud_.mesh().time().startTime().value()
195 + (couplingStep_) * couplingTime();};
197 inline int DEMstepsTillT(scalar t)
const {
return (t - (particleCloud_.mesh().time().value() - couplingTime()) + SMALL) / DEMts_;};
199 inline void checkTSsize()
const
201 if(particleCloud_.mesh().time().deltaT().value() > couplingInterval_ * DEMts_ + SMALL)
203 Info <<
"particleCloud_.mesh().time().deltaT().value() = " << particleCloud_.mesh().time().deltaT().value() << endl;
204 Info <<
"couplingInterval_ = " << couplingInterval_ << endl;
205 Info <<
"DEMts_ = " << DEMts_ << endl;
206 FatalError<<
"\nError - TS bigger than coupling interval!\n"<< abort(FatalError);
217 inline void readDEMtsfromDict(dictionary& propsDict)
219 DEMts_ = readScalar(propsDict.lookup(
"DEMts"));
223 inline bool doCoupleNow()
const
225 if (particleCloud_.mesh().time().value()-particleCloud_.mesh().time().startTime().value()
226 - ((1+couplingStep_)*(DEMts_*couplingInterval_))
238 virtual int getNumberOfParticles()
const;
239 virtual int getNumberOfClumps()
const;
240 virtual int getNumberOfTypes()
const;
241 virtual double* getTypeVol()
const;
243 inline void setPositions(label n,
double* pos)
const
245 for (
int i=0;i<n;i++)
246 for (
int j=0;j<3;j++)
247 particleCloud_.positions_[i][j]=pos[i*3+j];
249 inline void setCellIDs(label n,
int* ID)
const
251 for (
int i=0;i<n;i++)
252 particleCloud_.cellIDs_[i][0]=ID[i];
255 virtual word myType()
const=0;
257 virtual void setCG()
const { Warning <<
"setCG() not executed correctly!" << endl; };
Definition: dataExchangeModel.H:53
Definition: cfdemCloud.H:81