Skip to content
Snippets Groups Projects
Commit 5f0a5722 authored by Mark OLESEN's avatar Mark OLESEN
Browse files

BUG: parse issues for nastran long format (closes #589)

parent 0187cf5a
No related branches found
No related tags found
No related merge requests found
...@@ -34,28 +34,33 @@ Foam::fileFormats::NASCore::NASCore() ...@@ -34,28 +34,33 @@ Foam::fileFormats::NASCore::NASCore()
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
Foam::scalar Foam::fileFormats::NASCore::parseNASCoord Foam::scalar Foam::fileFormats::NASCore::parseNASCoord(const string& s)
(
const string& s
)
{ {
size_t expSign = s.find_last_of("+-"); scalar value = 0;
if (expSign != string::npos && expSign > 0 && !isspace(s[expSign-1])) const size_t expSign = s.find_last_of("+-");
if (expSign != std::string::npos && expSign > 0 && !isspace(s[expSign-1]))
{ {
scalar mantissa = readScalar(IStringStream(s.substr(0, expSign))()); scalar exponent = 0;
scalar exponent = readScalar(IStringStream(s.substr(expSign+1))());
// Parse as per strtod/strtof - allowing trailing space or [Ee]
readScalar(s.substr(0, expSign).c_str(), value); // mantissa
readScalar(s.substr(expSign+1).c_str(), exponent);
if (s[expSign] == '-') if (s[expSign] == '-')
{ {
exponent = -exponent; exponent = -exponent;
} }
return mantissa * pow(10, exponent);
value *= ::pow(10, exponent);
} }
else else
{ {
return readScalar(IStringStream(s)()); readScalar(s.c_str(), value);
} }
return value;
} }
......
...@@ -55,8 +55,8 @@ public: ...@@ -55,8 +55,8 @@ public:
// Public Member Functions // Public Member Functions
//- Do weird things to extract number //- Extract numbers from things like "-2.358-8" (same as "-2.358e-8")
static scalar parseNASCoord(const string&); static scalar parseNASCoord(const string& s);
// Constructors // Constructors
......
...@@ -36,6 +36,7 @@ Description ...@@ -36,6 +36,7 @@ Description
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "triSurface.H" #include "triSurface.H"
#include "NASCore.H"
#include "IFstream.H" #include "IFstream.H"
#include "IStringStream.H" #include "IStringStream.H"
...@@ -47,25 +48,9 @@ namespace Foam ...@@ -47,25 +48,9 @@ namespace Foam
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
// Do weird things to extract number // Do weird things to extract number
static scalar parseNASCoord(const string& s) static inline scalar parseNASCoord(const string& s)
{ {
size_t expSign = s.find_last_of("+-"); return fileFormats::NASCore::parseNASCoord(s);
if (expSign != string::npos && expSign > 0 && !isspace(s[expSign-1]))
{
scalar mantissa = readScalar(IStringStream(s.substr(0, expSign))());
scalar exponent = readScalar(IStringStream(s.substr(expSign+1))());
if (s[expSign] == '-')
{
exponent = -exponent;
}
return mantissa*pow(10, exponent);
}
else
{
return readScalar(IStringStream(s)());
}
} }
...@@ -311,8 +296,8 @@ bool triSurface::readNAS(const fileName& fName) ...@@ -311,8 +296,8 @@ bool triSurface::readNAS(const fileName& fName)
// GRID* 126 0 -5.55999875E+02 -5.68730474E+02 // GRID* 126 0 -5.55999875E+02 -5.68730474E+02
// * 2.14897901E+02 // * 2.14897901E+02
label index = label index =
readLabel(IStringStream(readNASToken(line, 8, linei))()); readLabel(IStringStream(readNASToken(line, 16, linei))());
readNASToken(line, 8, linei); readNASToken(line, 16, linei);
scalar x = parseNASCoord(readNASToken(line, 16, linei)); scalar x = parseNASCoord(readNASToken(line, 16, linei));
scalar y = parseNASCoord(readNASToken(line, 16, linei)); scalar y = parseNASCoord(readNASToken(line, 16, linei));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment