1#ifndef _Error_ESTIMATION_H_
2#define _Error_ESTIMATION_H_
32 ErrorEstimation(
double velocity,
double temperature,
double numberOfParticle,
double particleMass,
double soundSpeed,
double numberOfSamples,
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) {}
43 std::cout <<
" Error estimation deconstructed" << std::endl;
75 error =
getErrorVelocity(_numberOfSamples, Type ==
Relative ? _velocity : 1, _temperature, _numberOfParticle, _particleMass);
77 }
else if (BaseQuantity ==
Density) {
79 error =
getErrorDensity(_numberOfSamples, _soundSpeed, _temperature, Type ==
Relative ? _numberOfParticle : 1 / _numberOfParticle, _particleMass);
85 }
else if (BaseQuantity ==
Pressure) {
87 error =
getErrorPressure(_numberOfSamples, _numberOfParticle, _temperature, _soundSpeed, _particleMass, _cellVolume, 1);
91 std::cout <<
"ERROR coupling::ErrorEstimation(): Base quantity invalid! " << std::endl;
109 return requiredSamplesV(Type ==
Relative ? _desiredRelErrorVelocity : _desiredAbsErrorVelocity, _temperature, _soundSpeed,
110 Type ==
Relative ? _velocity : 1, _numberOfParticle, _particleMass);
112 }
else if (BaseQuantity ==
Density) {
114 return requiredSamplesD(_desiredRelErrorDensity, _temperature, _soundSpeed, _velocity, _particleMass, _numberOfParticle);
120 }
else if (BaseQuantity ==
Pressure) {
125 std::cout <<
"Error Estimation::getCorrectorNumberOfSamples not a Valid quantity" << std::endl;
126 std::exit(EXIT_FAILURE);
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));
151 double getErrorDensity(
double numberOfSamples,
double soundSpeed,
double temperature,
double numberOfParticle,
double particleMass) {
153 double Ac = acousticNumber(soundSpeed, refSP);
154 double error = 1 / std::sqrt(numberOfParticle * numberOfSamples) / Ac;
170 double error = std::sqrt(
_k / (_C_v * numberOfParticle * numberOfSamples)) * temperature;
184 double getErrorPressure(
double numberOfSamples,
double numberOfParticle,
double temperature,
double soundSpeed,
double particleMass,
double cellVolume,
188 double referenceP =
referencePressure(temperature, numberOfParticle, cellVolume);
190 double error = referenceP / pressure * Ac * std::sqrt(_gamma / (numberOfParticle * numberOfSamples));
205 double requiredSamplesV(
double desiredError,
double temperature,
double soundSpeed,
double velocity,
double numberOfParticle,
double particleMass) {
208 double SNR =
velocitySNR(velocity, temperature, numberOfParticle, particleMass);
209 double desiredNumber = 1 / ((SNR * desiredError) * (SNR * desiredError));
211 return desiredNumber;
225 double requiredSamplesD(
double desiredError,
double temperature,
double soundSpeed,
double velocity,
double particleMass,
double numberOfParticle) {
227 double Ac = acousticNumber(soundSpeed, refSP);
228 double desiredNumber = 1 / numberOfParticle / (desiredError * desiredError) / (Ac * Ac);
230 return desiredNumber;
246 double desiredNumber = (
_k / (_C_v * _numberOfParticle * desiredError)) * (
_k / (_C_v * _numberOfParticle * desiredError));
248 return desiredNumber;
260 double velocitySNR(
double velocity,
double temperature,
double numberOfParticle,
double particleMass) {
274 return std::sqrt(
_k * temperature / particleMass / numberOfParticle);
306 double er =
getErrorVelocity(_numberOfSamples, _velocity, _temperature, _numberOfParticle, _particleMass);
314 double er =
getErrorDensity(_numberOfSamples, _soundSpeed, _temperature, _numberOfParticle, _particleMass);
326 double acousticNumber(
double soundSpeed,
double soundSpeed_ref) {
return (soundSpeed / soundSpeed_ref); }
336 double referenceSoundSpeed(
double temperature,
double particleMass) {
return std::sqrt(_gamma *
_k * temperature / particleMass); }
345 return std::sqrt(numberOfParticle *
_k * temperature / cellVolume);
350 double _numberOfParticle;
351 double _particleMass;
353 double _numberOfSamples;
356 double _desiredAbsErrorVelocity;
357 double _desiredRelErrorVelocity;
359 double _desiredAbsErrorDensity;
360 double _desiredRelErrorDensity;
362 double _desiredAbsErrorTemperature;
363 double _desiredRelErrorTemperature;
365 double _desiredAbsErrorPressure;
366 double _desiredRelErrorPressure;
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