diff --git a/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReader.C b/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReader.C
new file mode 100644
index 0000000000..1caabd5ad9
--- /dev/null
+++ b/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReader.C
@@ -0,0 +1,416 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2015-2016 OpenCFD Ltd.
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+License
+ This file is part of OpenFOAM.
+
+ OpenFOAM is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenFOAM. If not, see .
+
+\*---------------------------------------------------------------------------*/
+
+#include "ensightSurfaceReader.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+ defineTypeNameAndDebug(ensightSurfaceReader, 0);
+ addToRunTimeSelectionTable(surfaceReader, ensightSurfaceReader, fileName);
+}
+
+
+void Foam::ensightSurfaceReader::skip(const label n, IFstream& is) const
+{
+ label i = 0;
+ token t;
+ while (is.good() && (i < n))
+ {
+ is >> t;
+ i++;
+
+ if (debug)
+ {
+ Info<< "Skipping token " << t << endl;
+ }
+ }
+
+ if (i != n)
+ {
+ WarningInFunction
+ << "Requested to skip " << n << "tokens, but stream exited after "
+ << i << " tokens. Last token read: " << t
+ << endl;
+ }
+}
+
+
+void Foam::ensightSurfaceReader::debugSection
+(
+ const word& expected,
+ IFstream& is
+) const
+{
+ word actual(is);
+
+ if (expected != actual)
+ {
+ FatalIOErrorInFunction(is)
+ << "Expected section header '" << expected
+ << "' but read the word '" << actual << "'"
+ << exit(FatalIOError);
+ }
+}
+
+
+void Foam::ensightSurfaceReader::readCase(IFstream& is)
+{
+ if (debug)
+ {
+ InfoInFunction<< endl;
+ }
+
+ if (!is.good())
+ {
+ FatalErrorInFile
+ << "Cannot read file " << is.name()
+ << exit(FatalError);
+ }
+
+ // Read the file
+ debugSection("FORMAT", is);
+ skip(3, is); // type: ensight gold
+
+ debugSection("GEOMETRY", is);
+ readSkip(is, 2, meshFileName_);
+
+ debugSection("VARIABLE", is);
+
+ DynamicList fieldNames(10);
+ DynamicList fieldFileNames(10);
+ word fieldName;
+ word fieldFileName;
+ while (is.good())
+ {
+ word primitiveType(is); // scalar, vector
+
+ if (primitiveType == "TIME")
+ {
+ break;
+ }
+
+ readSkip(is, 3, fieldName); // p, U etc
+ fieldNames.append(fieldName);
+
+ is >> fieldFileName; // surfaceName.****.fieldName
+ fieldFileNames.append(fieldFileName);
+ }
+ fieldNames_.transfer(fieldNames);
+ fieldFileNames_.transfer(fieldFileNames);
+
+ if (debug)
+ {
+ Info<< "fieldNames: " << fieldNames << nl
+ << "fieldFileNames: " << fieldFileNames << endl;
+ }
+
+ // Start reading time information
+ skip(3, is); // time set: 1
+ readSkip(is, 3, nTimeSteps_);
+ readSkip(is, 3, timeStartIndex_);
+ readSkip(is, 2, timeIncrement_);
+
+ if (debug)
+ {
+ Info<< "nTimeSteps: " << nTimeSteps_ << nl
+ << "timeStartIndex: " << timeStartIndex_ << nl
+ << "timeIncrement: " << timeIncrement_ << endl;
+ }
+
+ // Read the time values
+ skip(2, is); // time values:
+ timeValues_.setSize(nTimeSteps_);
+ for (label i = 0; i < nTimeSteps_; i++)
+ {
+ scalar t(readScalar(is));
+
+ timeValues_[i].value() = t;
+ // TODO: use character representation of t directly instead of
+ // regenerating from scalar value
+ timeValues_[i].name() = Foam::name(t);
+ }
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+Foam::ensightSurfaceReader::ensightSurfaceReader(const fileName& fName)
+:
+ surfaceReader(fName),
+ baseDir_(fName.path()),
+ meshFileName_(),
+ fieldNames_(),
+ fieldFileNames_(),
+ nTimeSteps_(0),
+ timeStartIndex_(0),
+ timeIncrement_(1),
+ timeValues_(),
+ surfPtr_(NULL)
+{
+ IFstream is(fName);
+ readCase(is);
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
+
+Foam::ensightSurfaceReader::~ensightSurfaceReader()
+{}
+
+
+// * * * * * * * * * * * * * Public Member Functions * * * * * * * * * * * //
+
+const Foam::meshedSurface& Foam::ensightSurfaceReader::geometry()
+{
+ if (debug)
+ {
+ InfoInFunction<< endl;
+ }
+
+ if (!surfPtr_.valid())
+ {
+ IFstream is(baseDir_/meshFileName_);
+
+ if (!is.good())
+ {
+ FatalErrorInFile
+ << "Cannot read file " << is.name()
+ << exit(FatalError);
+ }
+
+ token t;
+ while (is.good())
+ {
+ is >> t;
+
+ if (t.isWord())
+ {
+ word wordToken = t.wordToken();
+ if (wordToken == "coordinates")
+ {
+ break;
+ }
+ }
+ }
+
+ label nPoints(readLabel(is));
+
+ if (debug)
+ {
+ Info<< "nPoints: " << nPoints << endl;
+ }
+
+ pointField points(nPoints);
+ {
+ scalarField x(nPoints);
+ for (label dir = 0; dir < 3; dir++)
+ {
+ forAll(points, pointI)
+ {
+ x[pointI] = readScalar(is);
+ }
+
+ points.replace(dir, x);
+ }
+ }
+
+
+ // Read faces - may be a mix of tris, quads and polys
+ DynamicList faces(ceil(nPoints/3));
+
+ while (is.good())
+ {
+ token t(is);
+
+ if (is.eof())
+ {
+ break;
+ }
+
+ word faceType(t.wordToken());
+
+ if (debug)
+ {
+ Info<< "faceType: " << faceType << endl;
+ }
+
+ label nFace(readLabel(is));
+
+ if (debug)
+ {
+ Info<< "nFace: " << nFace << endl;
+ }
+
+ if (faceType == "tria3")
+ {
+ label np = 3;
+ for (label faceI = 0; faceI < nFace; faceI++)
+ {
+ face f(np);
+ for (label fpI = 0; fpI < np; fpI++)
+ {
+ f[fpI] = readLabel(is);
+ }
+
+ faces.append(f);
+ }
+ }
+ else if (faceType == "quad4")
+ {
+ label np = 4;
+ for (label faceI = 0; faceI < nFace; faceI++)
+ {
+ face f(np);
+ for (label fpI = 0; fpI < np; fpI++)
+ {
+ f[fpI] = readLabel(is);
+ }
+
+ faces.append(f);
+ }
+ }
+ else if (faceType == "nsided")
+ {
+ labelList np(nFace);
+ for (label faceI = 0; faceI < nFace; faceI++)
+ {
+ np[faceI] = readLabel(is);
+ }
+ for (label faceI = 0; faceI < nFace; faceI++)
+ {
+ face f(np[faceI]);
+ for (label fpI = 0; fpI < f.size(); fpI++)
+ {
+ f[fpI] = readLabel(is);
+ }
+
+ faces.append(f);
+ }
+ }
+ else if (faceType != "")
+ {
+ WarningInFunction
+ << "Unknown face type: " << faceType
+ << ". Aborting read and continuing with current elements "
+ << "only" << endl;
+ }
+ }
+
+ if (debug)
+ {
+ Info<< "read nFaces: " << faces.size() << endl;
+ }
+
+ forAll(faces, faceI)
+ {
+ face& f = faces[faceI];
+
+ forAll(f, fpI)
+ {
+ f[fpI]--;
+ }
+ }
+
+ surfPtr_.reset(new meshedSurface(xferMove(points), faces.xfer()));
+ }
+
+ return surfPtr_();
+}
+
+
+Foam::instantList Foam::ensightSurfaceReader::times() const
+{
+ return timeValues_;
+}
+
+
+Foam::wordList Foam::ensightSurfaceReader::fieldNames
+(
+ const label timeIndex
+) const
+{
+ return fieldNames_;
+}
+
+
+Foam::tmp > Foam::ensightSurfaceReader::field
+(
+ const label timeIndex,
+ const label fieldIndex,
+ const scalar& refValue
+) const
+{
+ return readField(timeIndex, fieldIndex);
+}
+
+
+Foam::tmp > Foam::ensightSurfaceReader::field
+(
+ const label timeIndex,
+ const label fieldIndex,
+ const vector& refValue
+) const
+{
+ return readField(timeIndex, fieldIndex);
+}
+
+
+Foam::tmp >
+Foam::ensightSurfaceReader::field
+(
+ const label timeIndex,
+ const label fieldIndex,
+ const sphericalTensor& refValue
+) const
+{
+ return readField(timeIndex, fieldIndex);
+}
+
+
+Foam::tmp > Foam::ensightSurfaceReader::field
+(
+ const label timeIndex,
+ const label fieldIndex,
+ const symmTensor& refValue
+) const
+{
+ return readField(timeIndex, fieldIndex);
+}
+
+
+Foam::tmp > Foam::ensightSurfaceReader::field
+(
+ const label timeIndex,
+ const label fieldIndex,
+ const tensor& refValue
+) const
+{
+ return readField(timeIndex, fieldIndex);
+}
+
+
+// ************************************************************************* //
diff --git a/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReader.H b/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReader.H
new file mode 100644
index 0000000000..e0b9afd453
--- /dev/null
+++ b/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReader.H
@@ -0,0 +1,191 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2015 OpenCFD Ltd.
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+License
+ This file is part of OpenFOAM.
+
+ OpenFOAM is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenFOAM. If not, see .
+
+Class
+ Foam::ensightensightSurfaceReader
+
+Description
+ Ensight format surface reader
+
+SourceFiles
+ ensightSurfaceReader.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef ensightSurfaceReader_H
+#define ensightSurfaceReader_H
+
+#include "surfaceReader.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+ Class ensightSurfaceReader Declaration
+\*---------------------------------------------------------------------------*/
+
+class ensightSurfaceReader
+:
+ public surfaceReader
+{
+protected:
+
+ // Protected Data
+
+ //- Base directory
+ fileName baseDir_;
+
+ //- Name of mesh file
+ word meshFileName_;
+
+ //- Field names
+ List fieldNames_;
+
+ //- Field file names
+ List fieldFileNames_;
+
+ //- Number of time steps
+ label nTimeSteps_;
+
+ //- Start time index
+ label timeStartIndex_;
+
+ //- Time increment
+ label timeIncrement_;
+
+ //- Times
+ instantList timeValues_;
+
+ //- Pointer to the surface
+ autoPtr surfPtr_;
+
+
+ // Protected Member Functions
+
+ //- Read and check a section header
+ void debugSection(const word& expected, IFstream& is) const;
+
+ //- Read the case file
+ void readCase(IFstream& is);
+
+ //- Helper function to skip forward n steps in stream
+ void skip(const label n, IFstream& is) const;
+
+ //- Helper function to return Type after skipping n tokens
+ template
+ void readSkip(IFstream& is, const label nSkip, Type& value) const;
+
+ //- Helper function to return a field
+ template
+ tmp > readField
+ (
+ const label timeIndex,
+ const label fieldIndex
+ ) const;
+
+
+public:
+
+ //- Runtime type information
+ TypeName("ensight");
+
+ // Constructors
+
+ //- Construct from fileName
+ ensightSurfaceReader(const fileName& fName);
+
+
+ //- Destructor
+ virtual ~ensightSurfaceReader();
+
+
+ // Member Functions
+
+ //- Return a reference to the surface geometry
+ virtual const meshedSurface& geometry();
+
+ //- Return a list of the available times
+ virtual instantList times() const;
+
+ //- Return a list of the available fields at a given time
+ virtual wordList fieldNames(const label timeIndex) const;
+
+ //- Return a scalar field at a given time
+ virtual tmp > field
+ (
+ const label timeIndex,
+ const label fieldIndex,
+ const scalar& refValue = pTraits::zero
+ ) const;
+
+ //- Return a scalar field at a given time
+ virtual tmp > field
+ (
+ const label timeIndex,
+ const label fieldIndex,
+ const vector& refValue = pTraits::zero
+ ) const;
+
+ //- Return a sphericalTensor field at a given time
+ virtual tmp > field
+ (
+ const label timeIndex,
+ const label fieldIndex,
+ const sphericalTensor& reValue = pTraits::zero
+ ) const;
+
+ //- Return a symmTensor field at a given time
+ virtual tmp > field
+ (
+ const label timeIndex,
+ const label fieldIndex,
+ const symmTensor& reValue = pTraits::zero
+ ) const;
+
+ //- Return a tensor field at a given time
+ virtual tmp > field
+ (
+ const label timeIndex,
+ const label fieldIndex,
+ const tensor& reValue = pTraits::zero
+ ) const;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#ifdef NoRepository
+ #include "ensightSurfaceReaderTemplates.C"
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReaderTemplates.C b/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReaderTemplates.C
new file mode 100644
index 0000000000..edb89955a5
--- /dev/null
+++ b/src/sampling/sampledSurface/readers/ensight/ensightSurfaceReaderTemplates.C
@@ -0,0 +1,144 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2015-2016 OpenCFD Ltd.
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+License
+ This file is part of OpenFOAM.
+
+ OpenFOAM is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenFOAM. If not, see .
+
+\*---------------------------------------------------------------------------*/
+
+#include
+#include
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+template
+void Foam::ensightSurfaceReader::readSkip
+(
+ IFstream& is,
+ const label nSkip,
+ Type& value
+) const
+{
+ skip(nSkip, is);
+
+ is >> value;
+}
+
+
+template
+Foam::tmp > Foam::ensightSurfaceReader::readField
+(
+ const label timeIndex,
+ const label fieldIndex
+) const
+{
+ if (debug)
+ {
+ InfoInFunction<< endl;
+ }
+
+ const word& fieldName(fieldNames_[fieldIndex]);
+ const label fileIndex = timeStartIndex_ + timeIndex*timeIncrement_;
+
+ fileName fieldFileName(fieldFileNames_[fieldIndex]);
+
+ std::ostringstream oss;
+ oss << std::setfill('0') << std::setw(4) << fileIndex;
+ const word indexStr = oss.str();
+ fieldFileName.replace("****", indexStr);
+
+ IFstream is(baseDir_/fieldFileName);
+
+ if (!is.good())
+ {
+ FatalErrorInFunction
+ << "Cannot read file " << is.name()
+ << " for field " << fieldName
+ << exit(FatalError);
+ }
+
+ // Check that data type is as expected
+ word primitiveType(is);
+
+ if (debug)
+ {
+ Info<< "primitiveType: " << primitiveType << endl;
+ }
+
+ if (primitiveType != pTraits::typeName)
+ {
+ FatalIOErrorInFunction(is)
+ << "Expected " << pTraits::typeName << "values "
+ << "but found type " << primitiveType
+ << exit(FatalIOError);
+ }
+
+ tmp > tField(new Field());
+
+ label n;
+ if (surfPtr_.valid())
+ {
+ n = surfPtr_->size();
+ }
+ else
+ {
+ n = 1000;
+ }
+
+ Type value;
+ word wValue;
+ label iValue;
+
+ // Read header info: part index, e.g. part 1
+ is >> wValue >> iValue;
+
+ // Read data file
+ // - Assume that file contains a mix of words and numbers, and that all
+ // numbers relate to face values, e.g. header comprises of words and
+ // element types are also words, e.g. tria3, quad4, nsided
+ DynamicList values(n);
+ while (is.good())
+ {
+ token t(is);
+
+ if (is.eof())
+ {
+ break;
+ }
+
+ if (t.isWord())
+ {
+ wValue = t.wordToken();
+ }
+ else
+ {
+ is.putBack(t);
+ is >> value;
+ values.append(value);
+ }
+ }
+
+ tField().transfer(values);
+
+ return tField;
+}
+
+
+// ************************************************************************* //
diff --git a/src/sampling/sampledSurface/readers/surfaceReader.C b/src/sampling/sampledSurface/readers/surfaceReader.C
new file mode 100644
index 0000000000..fb90c1d80f
--- /dev/null
+++ b/src/sampling/sampledSurface/readers/surfaceReader.C
@@ -0,0 +1,51 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2015 OpenCFD Ltd.
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+License
+ This file is part of OpenFOAM.
+
+ OpenFOAM is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenFOAM. If not, see .
+
+\*---------------------------------------------------------------------------*/
+
+#include "surfaceReader.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+ defineTypeNameAndDebug(surfaceReader, 0);
+ defineRunTimeSelectionTable(surfaceReader, fileName);
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+Foam::surfaceReader::surfaceReader(const fileName& fName)
+:
+ fileName_(fName)
+{}
+
+
+// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
+
+Foam::surfaceReader::~surfaceReader()
+{}
+
+
+// ************************************************************************* //
diff --git a/src/sampling/sampledSurface/readers/surfaceReader.H b/src/sampling/sampledSurface/readers/surfaceReader.H
new file mode 100644
index 0000000000..2ccdc470de
--- /dev/null
+++ b/src/sampling/sampledSurface/readers/surfaceReader.H
@@ -0,0 +1,161 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2015 OpenCFD Ltd.
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+License
+ This file is part of OpenFOAM.
+
+ OpenFOAM is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenFOAM. If not, see .
+
+Class
+ Foam::surfaceReader
+
+Description
+ Base class for surface readers
+
+SourceFiles
+ surfaceReader.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef surfaceReader_H
+#define surfaceReader_H
+
+#include "typeInfo.H"
+#include "autoPtr.H"
+#include "MeshedSurfaces.H"
+#include "runTimeSelectionTables.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+ Class surfaceReader Declaration
+\*---------------------------------------------------------------------------*/
+
+class surfaceReader
+{
+protected:
+
+ //- File name
+ fileName fileName_;
+
+
+public:
+
+ //- Runtime type information
+ TypeName("surfaceReader");
+
+ // Declare run-time constructor selection table
+
+ declareRunTimeSelectionTable
+ (
+ autoPtr,
+ surfaceReader,
+ fileName,
+ (
+ const fileName& fName
+ ),
+ (fName)
+ );
+
+
+ // Selectors
+
+ //- Return a reference to the selected surfaceReader
+ static autoPtr New
+ (
+ const word& readType,
+ const fileName& fName
+ );
+
+
+ // Constructors
+
+ //- Construct from fileName
+ surfaceReader(const fileName& fName);
+
+
+ //- Destructor
+ virtual ~surfaceReader();
+
+
+ // Member Functions
+
+ //- Return a reference to the surface geometry
+ virtual const meshedSurface& geometry() = 0;
+
+ //- Return a list of the available times
+ virtual instantList times() const = 0;
+
+ //- Return a list of the available fields at a given time
+ virtual wordList fieldNames(const label timeIndex) const = 0;
+
+ //- Return a scalar field at a given time
+ virtual tmp > field
+ (
+ const label timeIndex,
+ const label fieldIndex,
+ const scalar& refValue = pTraits::zero
+ ) const = 0;
+
+ //- Return a vector field at a given time
+ virtual tmp > field
+ (
+ const label timeIndex,
+ const label fieldIndex,
+ const vector& refValue = pTraits::zero
+ ) const = 0;
+
+ //- Return a sphericalTensor field at a given time
+ virtual tmp > field
+ (
+ const label timeIndex,
+ const label fieldIndex,
+ const sphericalTensor& reValue = pTraits::zero
+ ) const = 0;
+
+ //- Return a symmTensor field at a given time
+ virtual tmp > field
+ (
+ const label timeIndex,
+ const label fieldIndex,
+ const symmTensor& reValue = pTraits::zero
+ ) const = 0;
+
+ //- Return a tensor field at a given time
+ virtual tmp > field
+ (
+ const label timeIndex,
+ const label fieldIndex,
+ const tensor& reValue = pTraits::zero
+ ) const = 0;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/sampling/sampledSurface/readers/surfaceReaderNew.C b/src/sampling/sampledSurface/readers/surfaceReaderNew.C
new file mode 100644
index 0000000000..415179e273
--- /dev/null
+++ b/src/sampling/sampledSurface/readers/surfaceReaderNew.C
@@ -0,0 +1,52 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2015-2016 OpenCFD Ltd.
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+License
+ This file is part of OpenFOAM.
+
+ OpenFOAM is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenFOAM. If not, see .
+
+\*---------------------------------------------------------------------------*/
+
+#include "surfaceReader.H"
+
+// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
+
+Foam::autoPtr Foam::surfaceReader::New
+(
+ const word& readerType,
+ const fileName& fName
+)
+{
+ fileNameConstructorTable::iterator cstrIter =
+ fileNameConstructorTablePtr_->find(readerType);
+
+ if (cstrIter == fileNameConstructorTablePtr_->end())
+ {
+ FatalErrorInFunction
+ << "Unknown reader type \"" << readerType << "\"\n\n"
+ << "Valid reader types: "
+ << fileNameConstructorTablePtr_->sortedToc() << nl
+ << exit(FatalError);
+ }
+
+ return autoPtr(cstrIter()(fName));
+}
+
+
+// ************************************************************************* //