diff --git a/src/fileFormats/ensight/file/ensightFile.C b/src/fileFormats/ensight/file/ensightFile.C index f9d041c89b..f9262b8187 100644 --- a/src/fileFormats/ensight/file/ensightFile.C +++ b/src/fileFormats/ensight/file/ensightFile.C @@ -225,28 +225,62 @@ Foam::Ostream& Foam::ensightFile::write } -Foam::Ostream& Foam::ensightFile::write(const label value) +Foam::Ostream& Foam::ensightFile::write(const int32_t val) { if (format() == IOstream::BINARY) { - unsigned int ivalue(value); - write ( - reinterpret_cast(&ivalue), - sizeof(ivalue) + reinterpret_cast(&val), + sizeof(int32_t) ); } else { stdStream().width(10); - stdStream() << value; + stdStream() << val; } return *this; } +Foam::Ostream& Foam::ensightFile::write(const int64_t val) +{ + int32_t ivalue(narrowInt32(val)); + + return write(ivalue); +} + + +Foam::Ostream& Foam::ensightFile::write(const floatScalar val) +{ + if (format() == IOstream::BINARY) + { + write + ( + reinterpret_cast(&val), + sizeof(floatScalar) + ); + } + else + { + stdStream().width(12); + stdStream() << val; + } + + return *this; +} + + +Foam::Ostream& Foam::ensightFile::write(const doubleScalar val) +{ + float fvalue(narrowFloat(val)); + + return write(fvalue); +} + + Foam::Ostream& Foam::ensightFile::write ( const label value, @@ -255,13 +289,7 @@ Foam::Ostream& Foam::ensightFile::write { if (format() == IOstream::BINARY) { - unsigned int ivalue(value); - - write - ( - reinterpret_cast(&ivalue), - sizeof(ivalue) - ); + write(value); } else { @@ -273,36 +301,6 @@ Foam::Ostream& Foam::ensightFile::write } -Foam::Ostream& Foam::ensightFile::write(const scalar value) -{ - float fvalue(value); - - // TBD: limit range? - // #if defined(WM_DP) - // if (mag(value) < scalar(floatScalarVSMALL)) - // { - // fvalue = 0; - // } - // #endif - - if (format() == IOstream::BINARY) - { - write - ( - reinterpret_cast(&fvalue), - sizeof(fvalue) - ); - } - else - { - stdStream().width(12); - stdStream() << fvalue; - } - - return *this; -} - - void Foam::ensightFile::newline() { if (format() == IOstream::ASCII) diff --git a/src/fileFormats/ensight/file/ensightFile.H b/src/fileFormats/ensight/file/ensightFile.H index 2ebaa1e981..2378d02a66 100644 --- a/src/fileFormats/ensight/file/ensightFile.H +++ b/src/fileFormats/ensight/file/ensightFile.H @@ -172,6 +172,21 @@ public: //- Write undef value Ostream& writeUndef(); + + //- Writing token does not make sense + virtual bool write(const token&) + { + NotImplemented; + return false; + } + + //- Writing single character does not make sense + virtual Ostream& write(const char) + { + NotImplemented; + return *this; + } + //- Binary write virtual Ostream& write(const char* buf, std::streamsize count); @@ -185,13 +200,19 @@ public: virtual Ostream& write(const string& str); //- Write integer as "%10d" or as binary - Ostream& write(const label value); + virtual Ostream& write(const int32_t val); + + //- Write integer as "%10d" or as binary + virtual Ostream& write(const int64_t val); //- Write integer with specified width or as binary Ostream& write(const label value, const label fieldWidth); - //- Write float as "%12.5e" or as binary - Ostream& write(const scalar value); + //- Write floating-point as "%12.5e" or as binary + virtual Ostream& write(const floatScalar val); + + //- Write floating-point as "%12.5e" or as binary + virtual Ostream& write(const doubleScalar val); //- Add carriage return to ascii stream void newline(); diff --git a/src/fileFormats/ensight/part/faces/ensightFaces.H b/src/fileFormats/ensight/part/faces/ensightFaces.H index 0faa600482..dd77bac66f 100644 --- a/src/fileFormats/ensight/part/faces/ensightFaces.H +++ b/src/fileFormats/ensight/part/faces/ensightFaces.H @@ -241,7 +241,7 @@ public: //- optionally write all element addresses virtual void writeDict(Ostream& os, const bool full=false) const; - //- Write geometry, using a mesh reference (serial only) + //- Write geometry, using a mesh reference virtual void write ( ensightGeoFile& os, diff --git a/src/fileFormats/ensight/part/surface/ensightOutputSurface.H b/src/fileFormats/ensight/part/surface/ensightOutputSurface.H index 33a34f8eb6..fd3fd37d73 100644 --- a/src/fileFormats/ensight/part/surface/ensightOutputSurface.H +++ b/src/fileFormats/ensight/part/surface/ensightOutputSurface.H @@ -117,6 +117,13 @@ public: //- Write a field of point values (serial-only) template void writePointData(ensightFile& os, const Field& fld) const; + + + // Housekeeping + + //- Cannot write geometry with a mesh reference + virtual void write(ensightGeoFile&, const polyMesh&, bool) const + {} };