correction of levels and Istream for underflow doubles

This commit is contained in:
hamidrezanorouzi 2022-10-31 21:24:06 +03:30
parent 39534d7a6a
commit e0ad5883a0
3 changed files with 26 additions and 6 deletions

View File

@ -267,6 +267,7 @@ public:
nbsLevels_[lvl].findPairsCountCross(pairs, nbsLevels_[crsLvl]);
}
}
return notInsertedCount;
}
@ -401,8 +402,9 @@ public:
}
auto diameter = nbsLevels_[0].diameter();
auto maxSizes = maxSizeLevels_;
auto const maxSizes = maxSizeLevels_;
auto particleLevel = particleLevel_;
auto const sizeRatio = 0.999*nbsLevels_[0].sizeRatio();
int8 maxLvl = sizeRangeLevels_.size();
@ -415,7 +417,7 @@ public:
{
for(int8 lvl = 0; lvl<maxLvl; lvl++)
{
if( diameter[i]<= maxSizes[lvl] )
if( sizeRatio*diameter[i]<= maxSizes[lvl] )
{
particleLevel[i] = lvl;
return;

View File

@ -310,13 +310,17 @@ bool pFlow::readInt8( const char* buf, int8 & val)
word w(buf);
return readInt8(w, val);
}
#include <iostream>
bool pFlow::readReal( const word& w, real & val)
{
try{
val = std::stod(w);
}
catch (std:: out_of_range& e)
{
val = static_cast<real>( std::stold(w) );
}
catch (...){
return false;
}
@ -325,8 +329,22 @@ bool pFlow::readReal( const word& w, real & val)
bool pFlow::readReal( const char* buf, real & val )
{
word w(buf);
return readReal(w, val);
char* c;
val = std::strtod(buf, &c);
if(val == HUGE_VAL)
{
val = static_cast<real>( std::strtold(buf, &c) );
if(val == HUGE_VAL || c==buf)
return false;
}
else if(c == buf)
{
return false;
}
return true;
}