MaMiCo 1.2
Loading...
Searching...
No Matches
ErrorEstimation.h
1#ifndef _Error_ESTIMATION_H_
2#define _Error_ESTIMATION_H_
3
4namespace coupling {
5namespace error {
6
8
9}
10} // namespace coupling
11
22public:
32 ErrorEstimation(double velocity, double temperature, double numberOfParticle, double particleMass, double soundSpeed, double numberOfSamples,
33 double cellVolume)
34 : _velocity(velocity), _temperature(temperature), _numberOfParticle(numberOfParticle), _particleMass(particleMass), _soundSpeed(soundSpeed),
35 _numberOfSamples(numberOfSamples), _cellVolume(cellVolume), _desiredAbsErrorVelocity(0.08), _desiredRelErrorVelocity(0.1),
36 _desiredAbsErrorDensity(0.05), _desiredRelErrorDensity(0.05), _desiredAbsErrorTemperature(0.05), _desiredRelErrorTemperature(0.05),
37 _desiredAbsErrorPressure(0.05), _desiredRelErrorPressure(0.05), _gamma(1.667), _C_v(1.4973), _k(1) {}
38
42#ifdef DEBUG_Error
43 std::cout << " Error estimation deconstructed" << std::endl;
44#endif
45 }
46
56
59 enum errorType {
62 };
63
69 double getError(errorBaseQuantity BaseQuantity, errorType Type) {
70
71 double error;
72
73 if (BaseQuantity == Velocity) {
74
75 error = getErrorVelocity(_numberOfSamples, Type == Relative ? _velocity : 1, _temperature, _numberOfParticle, _particleMass);
76
77 } else if (BaseQuantity == Density) {
78
79 error = getErrorDensity(_numberOfSamples, _soundSpeed, _temperature, Type == Relative ? _numberOfParticle : 1 / _numberOfParticle, _particleMass);
80
81 } else if (BaseQuantity == Temperature) {
82
83 error = getErrorTemperature(_numberOfSamples, _numberOfParticle, Type == Relative ? 1 : _temperature);
84
85 } else if (BaseQuantity == Pressure) {
86
87 error = getErrorPressure(_numberOfSamples, _numberOfParticle, _temperature, _soundSpeed, _particleMass, _cellVolume, 1);
88
89 } else {
90
91 std::cout << "ERROR coupling::ErrorEstimation(): Base quantity invalid! " << std::endl;
92 exit(EXIT_FAILURE);
93 }
94
95 return error;
96 }
97
106
107 if (BaseQuantity == Velocity) {
108
109 return requiredSamplesV(Type == Relative ? _desiredRelErrorVelocity : _desiredAbsErrorVelocity, _temperature, _soundSpeed,
110 Type == Relative ? _velocity : 1, _numberOfParticle, _particleMass);
111
112 } else if (BaseQuantity == Density) {
113
114 return requiredSamplesD(_desiredRelErrorDensity, _temperature, _soundSpeed, _velocity, _particleMass, _numberOfParticle);
115
116 } else if (BaseQuantity == Temperature) {
117
118 return 3.0;
119
120 } else if (BaseQuantity == Pressure) {
121
122 return 4.0;
123 }
124
125 std::cout << "Error Estimation::getCorrectorNumberOfSamples not a Valid quantity" << std::endl;
126 std::exit(EXIT_FAILURE);
127 return 0.0;
128 }
129
138 double getErrorVelocity(double numberOfSamples, double velocity, double temperature, double numberOfParticle, double particleMass) {
139 double error = 1 / (velocitySNR(velocity, temperature, numberOfParticle, particleMass) * std::sqrt(numberOfSamples));
140 return error;
141 }
142
151 double getErrorDensity(double numberOfSamples, double soundSpeed, double temperature, double numberOfParticle, double particleMass) {
152 double refSP = referenceSoundSpeed(temperature, particleMass);
153 double Ac = acousticNumber(soundSpeed, refSP);
154 double error = 1 / std::sqrt(numberOfParticle * numberOfSamples) / Ac;
155 // std::cout << "numberOfParticle " << numberOfParticle <<
156 //"numberOfSamples " << numberOfSamples << "Ac " << Ac << std::endl;
157 return error;
158 }
159
166 double getErrorTemperature(double numberOfSamples, double numberOfParticle, double temperature) {
167
168 // double deltaT = k*temperature*temperature/_C_v/numberOfParticle;
169
170 double error = std::sqrt(_k / (_C_v * numberOfParticle * numberOfSamples)) * temperature;
171 return error;
172 }
173
184 double getErrorPressure(double numberOfSamples, double numberOfParticle, double temperature, double soundSpeed, double particleMass, double cellVolume,
185 double pressure) {
186
187 double Ac = acousticNumber(soundSpeed, referenceSoundSpeed(temperature, particleMass));
188 double referenceP = referencePressure(temperature, numberOfParticle, cellVolume);
189
190 double error = referenceP / pressure * Ac * std::sqrt(_gamma / (numberOfParticle * numberOfSamples));
191 return error;
192 }
193
205 double requiredSamplesV(double desiredError, double temperature, double soundSpeed, double velocity, double numberOfParticle, double particleMass) {
206 // double refSP= referenceSoundSpeed( temperature, particleMass);
207 // double Ac = acousticNumber(soundSpeed, refSP);
208 double SNR = velocitySNR(velocity, temperature, numberOfParticle, particleMass);
209 double desiredNumber = 1 / ((SNR * desiredError) * (SNR * desiredError));
210
211 return desiredNumber;
212 }
213
225 double requiredSamplesD(double desiredError, double temperature, double soundSpeed, double velocity, double particleMass, double numberOfParticle) {
226 double refSP = referenceSoundSpeed(temperature, particleMass);
227 double Ac = acousticNumber(soundSpeed, refSP);
228 double desiredNumber = 1 / numberOfParticle / (desiredError * desiredError) / (Ac * Ac);
229
230 return desiredNumber;
231 }
232
244 double reqiredSamplesT(double desiredError) {
245
246 double desiredNumber = (_k / (_C_v * _numberOfParticle * desiredError)) * (_k / (_C_v * _numberOfParticle * desiredError));
247
248 return desiredNumber;
249 }
250
260 double velocitySNR(double velocity, double temperature, double numberOfParticle, double particleMass) {
261
262 return velocity / veloyityFluctuation(temperature, numberOfParticle, particleMass);
263 }
264
272 double veloyityFluctuation(double temperature, double numberOfParticle, double particleMass) {
273
274 return std::sqrt(_k * temperature / particleMass / numberOfParticle);
275 }
276
278 void setAbsVelocityError(double error) { _desiredAbsErrorVelocity = error; }
279
281 void setRelVelocityError(double error) { _desiredRelErrorVelocity = error; }
282
284 void setAbsDensityError(double error) { _desiredAbsErrorDensity = error; }
285
287 void setRelDensityError(double error) { _desiredRelErrorDensity = error; }
288
290 void setAbsTemperatureError(double error) { _desiredAbsErrorTemperature = error; }
291
293 void setRelTemperatureError(double error) { _desiredRelErrorTemperature = error; }
294
296 void setAbsPressureError(double error) { _desiredAbsErrorPressure = error; }
297
299 void setRelPressureError(double error) { _desiredRelErrorPressure = error; }
300
301private:
306 double er = getErrorVelocity(_numberOfSamples, _velocity, _temperature, _numberOfParticle, _particleMass);
307 return er;
308 }
309
314 double er = getErrorDensity(_numberOfSamples, _soundSpeed, _temperature, _numberOfParticle, _particleMass);
315 return er;
316 }
317
322 double er = getErrorTemperature(_numberOfSamples, _numberOfParticle, _temperature);
323 return er;
324 }
325
326 double acousticNumber(double soundSpeed, double soundSpeed_ref) { return (soundSpeed / soundSpeed_ref); }
327
328 //------------------------- Reference Properties
329 //---------------------------------------------------
336 double referenceSoundSpeed(double temperature, double particleMass) { return std::sqrt(_gamma * _k * temperature / particleMass); }
337
344 double referencePressure(double temperature, double numberOfParticle, double cellVolume) {
345 return std::sqrt(numberOfParticle * _k * temperature / cellVolume);
346 }
347
348 double _velocity;
349 double _temperature;
350 double _numberOfParticle;
351 double _particleMass;
352 double _soundSpeed;
353 double _numberOfSamples;
354 double _cellVolume;
355
356 double _desiredAbsErrorVelocity; //=0.08;
357 double _desiredRelErrorVelocity; // =0.1;
358
359 double _desiredAbsErrorDensity; //=0.05;
360 double _desiredRelErrorDensity; //=0.05;
361
362 double _desiredAbsErrorTemperature; //=0.05;
363 double _desiredRelErrorTemperature; //=0.05;
364
365 double _desiredAbsErrorPressure; //=0.05;
366 double _desiredRelErrorPressure; //=0.05;
367
368 double _gamma;
369 double _C_v;
371 double _k;
372};
373
374#endif
This class is used to analyse the error and predict the required number of instances.
Definition ErrorEstimation.h:21
double getCorrectorNumberOfSamples(errorBaseQuantity BaseQuantity, errorType Type)
Definition ErrorEstimation.h:105
double getErrorDensity(double numberOfSamples, double soundSpeed, double temperature, double numberOfParticle, double particleMass)
Definition ErrorEstimation.h:151
double _k
Definition ErrorEstimation.h:371
double getErrorDensity()
Definition ErrorEstimation.h:313
void setRelVelocityError(double error)
Definition ErrorEstimation.h:281
void setAbsPressureError(double error)
Definition ErrorEstimation.h:296
double getErrorVelocity()
Definition ErrorEstimation.h:305
errorBaseQuantity
Definition ErrorEstimation.h:50
@ Temperature
Definition ErrorEstimation.h:53
@ Density
Definition ErrorEstimation.h:52
@ Pressure
Definition ErrorEstimation.h:54
@ Velocity
Definition ErrorEstimation.h:51
void setAbsDensityError(double error)
Definition ErrorEstimation.h:284
errorType
Definition ErrorEstimation.h:59
@ Relative
Definition ErrorEstimation.h:60
@ Absolute
Definition ErrorEstimation.h:61
void setAbsVelocityError(double error)
Definition ErrorEstimation.h:278
void setRelTemperatureError(double error)
Definition ErrorEstimation.h:293
void setRelDensityError(double error)
Definition ErrorEstimation.h:287
double veloyityFluctuation(double temperature, double numberOfParticle, double particleMass)
Definition ErrorEstimation.h:272
double getErrorPressure(double numberOfSamples, double numberOfParticle, double temperature, double soundSpeed, double particleMass, double cellVolume, double pressure)
Definition ErrorEstimation.h:184
double referenceSoundSpeed(double temperature, double particleMass)
Definition ErrorEstimation.h:336
double getErrorTemperature()
Definition ErrorEstimation.h:321
double getErrorTemperature(double numberOfSamples, double numberOfParticle, double temperature)
Definition ErrorEstimation.h:166
double reqiredSamplesT(double desiredError)
Definition ErrorEstimation.h:244
double requiredSamplesV(double desiredError, double temperature, double soundSpeed, double velocity, double numberOfParticle, double particleMass)
Definition ErrorEstimation.h:205
double velocitySNR(double velocity, double temperature, double numberOfParticle, double particleMass)
Definition ErrorEstimation.h:260
double getErrorVelocity(double numberOfSamples, double velocity, double temperature, double numberOfParticle, double particleMass)
Definition ErrorEstimation.h:138
double requiredSamplesD(double desiredError, double temperature, double soundSpeed, double velocity, double particleMass, double numberOfParticle)
Definition ErrorEstimation.h:225
~ErrorEstimation()
Definition ErrorEstimation.h:41
void setRelPressureError(double error)
Definition ErrorEstimation.h:299
double getError(errorBaseQuantity BaseQuantity, errorType Type)
Definition ErrorEstimation.h:69
ErrorEstimation(double velocity, double temperature, double numberOfParticle, double particleMass, double soundSpeed, double numberOfSamples, double cellVolume)
Definition ErrorEstimation.h:32
void setAbsTemperatureError(double error)
Definition ErrorEstimation.h:290
double referencePressure(double temperature, double numberOfParticle, double cellVolume)
Definition ErrorEstimation.h:344
everything necessary for coupling operations, is defined in here
Definition AdditiveMomentumInsertion.h:15