From 91c73098fa04e33f4c659378fc42ddc15573859a Mon Sep 17 00:00:00 2001 From: mattijs Date: Fri, 2 Mar 2012 12:12:36 +0000 Subject: [PATCH 01/45] ENH: streamLines: updated syntax for functionObject --- .../pisoFoam/les/motorBike/motorBike/system/streamLines | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorials/incompressible/pisoFoam/les/motorBike/motorBike/system/streamLines b/tutorials/incompressible/pisoFoam/les/motorBike/motorBike/system/streamLines index aa0b6a1d7b..e5f7497292 100644 --- a/tutorials/incompressible/pisoFoam/les/motorBike/motorBike/system/streamLines +++ b/tutorials/incompressible/pisoFoam/les/motorBike/motorBike/system/streamLines @@ -17,7 +17,7 @@ streamLines setFormat vtk; //gnuplot; //xmgr; //raw; //jplot; //csv; //ensight; // Velocity field to use for tracking. - U U; + UName U; // Tracked forwards (+U) or backwards (-U) trackForward true; From 1d93f171ad1831691962172ae45dd3b0b705805e Mon Sep 17 00:00:00 2001 From: laurence Date: Fri, 2 Mar 2012 12:34:24 +0000 Subject: [PATCH 02/45] COMP: Correct Make/options for SloanRenumber and the CGAL rules --- src/renumber/SloanRenumber/Make/options | 2 +- wmake/rules/General/CGAL | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/renumber/SloanRenumber/Make/options b/src/renumber/SloanRenumber/Make/options index 431c883479..492a3ae10f 100644 --- a/src/renumber/SloanRenumber/Make/options +++ b/src/renumber/SloanRenumber/Make/options @@ -1,6 +1,6 @@ EXE_INC = \ /* -DFULLDEBUG -g -O0 */ \ - -I$BOOST_ARCH_PATH/include \ + -I$(BOOST_ARCH_PATH)/include \ -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/parallel/decompose/decompositionMethods/lnInclude \ -I$(LIB_SRC)/renumber/renumberMethods/lnInclude diff --git a/wmake/rules/General/CGAL b/wmake/rules/General/CGAL index 3586a1de38..126640dc0c 100644 --- a/wmake/rules/General/CGAL +++ b/wmake/rules/General/CGAL @@ -9,5 +9,4 @@ CGAL_LIBS = \ -L$(MPFR_ARCH_PATH)/lib \ -L$(BOOST_ARCH_PATH)/lib \ -lmpfr \ - -I/usr/lib64 \ - -lboost_thread-mt + -lboost_thread From 7e389364583c5e20427d97e2d9f1001f30e00995 Mon Sep 17 00:00:00 2001 From: mattijs Date: Fri, 2 Mar 2012 15:04:08 +0000 Subject: [PATCH 03/45] ENH: VTKEdgeFormat: unstructed vtk reader --- src/OpenFOAM/Make/files | 2 + .../primitives/strings/string/stringIOList.C | 45 + .../primitives/strings/string/stringIOList.H | 50 + .../primitives/strings/word/wordIOList.C | 40 + .../primitives/strings/word/wordIOList.H | 50 + src/conversion/Make/files | 2 + src/conversion/vtk/vtkUnstructuredReader.C | 878 ++++++++++++++++++ src/conversion/vtk/vtkUnstructuredReader.H | 332 +++++++ src/edgeMesh/Make/options | 2 + src/edgeMesh/edgeFormats/vtk/VTKedgeFormat.C | 84 +- src/edgeMesh/edgeFormats/vtk/VTKedgeFormat.H | 36 +- .../edgeFormats/vtk/VTKedgeFormatRunTime.C | 12 +- 12 files changed, 1516 insertions(+), 17 deletions(-) create mode 100644 src/OpenFOAM/primitives/strings/string/stringIOList.C create mode 100644 src/OpenFOAM/primitives/strings/string/stringIOList.H create mode 100644 src/OpenFOAM/primitives/strings/word/wordIOList.C create mode 100644 src/OpenFOAM/primitives/strings/word/wordIOList.H create mode 100644 src/conversion/vtk/vtkUnstructuredReader.C create mode 100644 src/conversion/vtk/vtkUnstructuredReader.H diff --git a/src/OpenFOAM/Make/files b/src/OpenFOAM/Make/files index 2f20fee7e8..4e138824b6 100644 --- a/src/OpenFOAM/Make/files +++ b/src/OpenFOAM/Make/files @@ -74,8 +74,10 @@ primitives/functions/Polynomial/polynomialFunction.C strings = primitives/strings $(strings)/string/string.C $(strings)/string/stringIO.C +$(strings)/string/stringIOList.C $(strings)/word/word.C $(strings)/word/wordIO.C +$(strings)/word/wordIOList.C $(strings)/fileName/fileName.C $(strings)/fileName/fileNameIO.C $(strings)/keyType/keyType.C diff --git a/src/OpenFOAM/primitives/strings/string/stringIOList.C b/src/OpenFOAM/primitives/strings/string/stringIOList.C new file mode 100644 index 0000000000..b69b2d46a3 --- /dev/null +++ b/src/OpenFOAM/primitives/strings/string/stringIOList.C @@ -0,0 +1,45 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\/ 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 "stringIOList.H" +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + defineCompoundTypeName(List, stringList); + addCompoundToRunTimeSelectionTable(List, stringList); + + defineTemplateTypeNameAndDebugWithName(stringIOList, "stringList", 0); + defineTemplateTypeNameAndDebugWithName + ( + stringListIOList, + "stringListList", + 0 + ); +} + +// ************************************************************************* // diff --git a/src/OpenFOAM/primitives/strings/string/stringIOList.H b/src/OpenFOAM/primitives/strings/string/stringIOList.H new file mode 100644 index 0000000000..f0d213a5e3 --- /dev/null +++ b/src/OpenFOAM/primitives/strings/string/stringIOList.H @@ -0,0 +1,50 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\/ 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 . + +Typedef + Foam::stringIOList + +Description + IO of a list of strings + +\*---------------------------------------------------------------------------*/ + +#ifndef stringIOList_H +#define stringIOList_H + +#include "stringList.H" +#include "IOList.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + typedef IOList stringIOList; + typedef IOList stringListIOList; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/OpenFOAM/primitives/strings/word/wordIOList.C b/src/OpenFOAM/primitives/strings/word/wordIOList.C new file mode 100644 index 0000000000..dc85ced879 --- /dev/null +++ b/src/OpenFOAM/primitives/strings/word/wordIOList.C @@ -0,0 +1,40 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\/ 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 "wordIOList.H" +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + defineCompoundTypeName(List, wordList); + addCompoundToRunTimeSelectionTable(List, wordList); + + defineTemplateTypeNameAndDebugWithName(wordIOList, "wordList", 0); + defineTemplateTypeNameAndDebugWithName(wordListIOList, "wordListList", 0); +} + +// ************************************************************************* // diff --git a/src/OpenFOAM/primitives/strings/word/wordIOList.H b/src/OpenFOAM/primitives/strings/word/wordIOList.H new file mode 100644 index 0000000000..08e2e2cff6 --- /dev/null +++ b/src/OpenFOAM/primitives/strings/word/wordIOList.H @@ -0,0 +1,50 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\/ 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 . + +Typedef + Foam::wordIOList + +Description + IO of a list of words + +\*---------------------------------------------------------------------------*/ + +#ifndef wordIOList_H +#define wordIOList_H + +#include "wordList.H" +#include "IOList.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + typedef IOList wordIOList; + typedef IOList wordListIOList; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/conversion/Make/files b/src/conversion/Make/files index 7c5a0aa91c..3616b0e697 100644 --- a/src/conversion/Make/files +++ b/src/conversion/Make/files @@ -19,6 +19,8 @@ meshReader/starcd/STARCDMeshReader.C meshWriter/meshWriter.C meshWriter/starcd/STARCDMeshWriter.C +vtk/vtkUnstructuredReader.C + polyDualMesh/polyDualMesh.C LIB = $(FOAM_LIBBIN)/libconversion diff --git a/src/conversion/vtk/vtkUnstructuredReader.C b/src/conversion/vtk/vtkUnstructuredReader.C new file mode 100644 index 0000000000..aabedc884b --- /dev/null +++ b/src/conversion/vtk/vtkUnstructuredReader.C @@ -0,0 +1,878 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\/ 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 "vtkUnstructuredReader.H" +#include "labelIOField.H" +#include "scalarIOField.H" +#include "stringIOList.H" +#include "cellModeller.H" +#include "vectorIOField.H" + +/* * * * * * * * * * * * * * * Static Member Data * * * * * * * * * * * * * */ + +defineTypeNameAndDebug(Foam::vtkUnstructuredReader, 0); + +template<> +const char* +Foam::NamedEnum::names[] = +{ + "int", + "float", + "string" +}; +const Foam::NamedEnum +Foam::vtkUnstructuredReader::vtkDataTypeNames; + + +template<> +const char* +Foam::NamedEnum::names[] = +{ + "FIELD", + "SCALARS", + "VECTORS" +}; +const Foam::NamedEnum +Foam::vtkUnstructuredReader::vtkDataSetTypeNames; + + +template<> +const char* +Foam::NamedEnum::names[] = +{ + "NOMODE", + "UNSTRUCTURED_GRID", + "POLYDATA", + "CELL_DATA", + "POINT_DATA" +}; +const Foam::NamedEnum +Foam::vtkUnstructuredReader::parseModeNames; + + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +template +void Foam::vtkUnstructuredReader::readBlock +( + Istream& inFile, + const label n, + List& lst +) const +{ + lst.setSize(n); + forAll(lst, i) + { + inFile >> lst[i]; + } +} + + +void Foam::vtkUnstructuredReader::warnUnhandledType +( + Istream& inFile, + const label type, + labelHashSet& warningGiven +) const +{ + if (warningGiven.insert(type)) + { + IOWarningIn("vtkUnstructuredReader::warnUnhandledType(..)", inFile) + << "Skipping unknown cell type " << type << endl; + } +} + + +// Split cellTypes into cells, faces and lines +void Foam::vtkUnstructuredReader::extractCells +( + Istream& inFile, + const labelList& cellTypes, + const labelList& cellVertData +) +{ + const cellModel& hex = *(cellModeller::lookup("hex")); + const cellModel& prism = *(cellModeller::lookup("prism")); + const cellModel& pyr = *(cellModeller::lookup("pyr")); + const cellModel& tet = *(cellModeller::lookup("tet")); + + labelList tetPoints(4); + labelList pyrPoints(5); + labelList prismPoints(6); + labelList hexPoints(8); + + + cells_.setSize(cellTypes.size()); + faces_.setSize(cellTypes.size()); + lines_.setSize(cellTypes.size()); + + label dataIndex = 0; + label cellI = 0; + label faceI = 0; + label lineI = 0; + + + // To mark whether unhandled type has been visited. + labelHashSet warningGiven; + + forAll(cellTypes, i) + { + switch (cellTypes[i]) + { + case VTK_VERTEX: + { + warnUnhandledType(inFile, cellTypes[i], warningGiven); + label nRead = cellVertData[dataIndex++]; + if (nRead != 1) + { + FatalIOErrorIn + ( + "vtkUnstructuredReader::extractCells(..)", + inFile + ) << "Expected size 1 for VTK_VERTEX but found " + << nRead << exit(FatalIOError); + } + dataIndex += nRead; + } + break; + + case VTK_POLY_VERTEX: + { + warnUnhandledType(inFile, cellTypes[i], warningGiven); + label nRead = cellVertData[dataIndex++]; + dataIndex += nRead; + } + break; + + case VTK_LINE: + { + //warnUnhandledType(inFile, cellTypes[i], warningGiven); + label nRead = cellVertData[dataIndex++]; + if (nRead != 2) + { + FatalIOErrorIn + ( + "vtkUnstructuredReader::extractCells(..)", + inFile + ) << "Expected size 2 for VTK_LINE but found " + << nRead << exit(FatalIOError); + } + labelList& segment = lines_[lineI++]; + segment.setSize(2); + segment[0] = cellVertData[dataIndex++]; + segment[1] = cellVertData[dataIndex++]; + } + break; + + case VTK_POLY_LINE: + { + //warnUnhandledType(inFile, cellTypes[i], warningGiven); + label nRead = cellVertData[dataIndex++]; + labelList& segment = lines_[lineI++]; + segment.setSize(nRead); + forAll(segment, i) + { + segment[i] = cellVertData[dataIndex++]; + } + } + break; + + case VTK_TRIANGLE: + { + face& f = faces_[faceI++]; + f.setSize(3); + label nRead = cellVertData[dataIndex++]; + if (nRead != 3) + { + FatalIOErrorIn + ( + "vtkUnstructuredReader::extractCells(..)", + inFile + ) << "Expected size 3 for VTK_TRIANGLE but found " + << nRead << exit(FatalIOError); + } + f[0] = cellVertData[dataIndex++]; + f[1] = cellVertData[dataIndex++]; + f[2] = cellVertData[dataIndex++]; + } + break; + + case VTK_QUAD: + { + face& f = faces_[faceI++]; + f.setSize(4); + label nRead = cellVertData[dataIndex++]; + if (nRead != 4) + { + FatalIOErrorIn + ( + "vtkUnstructuredReader::extractCells(..)", + inFile + ) << "Expected size 4 for VTK_QUAD but found " + << nRead << exit(FatalIOError); + } + f[0] = cellVertData[dataIndex++]; + f[1] = cellVertData[dataIndex++]; + f[2] = cellVertData[dataIndex++]; + f[3] = cellVertData[dataIndex++]; + } + break; + + case VTK_POLYGON: + { + face& f = faces_[faceI++]; + label nRead = cellVertData[dataIndex++]; + f.setSize(nRead); + forAll(f, fp) + { + f[fp] = cellVertData[dataIndex++]; + } + } + break; + + case VTK_TETRA: + { + label nRead = cellVertData[dataIndex++]; + if (nRead != 4) + { + FatalIOErrorIn + ( + "vtkUnstructuredReader::extractCells(..)", + inFile + ) << "Expected size 4 for VTK_TETRA but found " + << nRead << exit(FatalIOError); + } + tetPoints[0] = cellVertData[dataIndex++]; + tetPoints[1] = cellVertData[dataIndex++]; + tetPoints[2] = cellVertData[dataIndex++]; + tetPoints[3] = cellVertData[dataIndex++]; + cells_[cellI++] = cellShape(tet, tetPoints, true); + } + break; + + case VTK_PYRAMID: + { + label nRead = cellVertData[dataIndex++]; + if (nRead != 5) + { + FatalIOErrorIn + ( + "vtkUnstructuredReader::extractCells(..)", + inFile + ) << "Expected size 5 for VTK_PYRAMID but found " + << nRead << exit(FatalIOError); + } + pyrPoints[0] = cellVertData[dataIndex++]; + pyrPoints[1] = cellVertData[dataIndex++]; + pyrPoints[2] = cellVertData[dataIndex++]; + pyrPoints[3] = cellVertData[dataIndex++]; + pyrPoints[4] = cellVertData[dataIndex++]; + cells_[cellI++] = cellShape(pyr, pyrPoints, true); + } + break; + + case VTK_WEDGE: + { + label nRead = cellVertData[dataIndex++]; + if (nRead != 6) + { + FatalIOErrorIn + ( + "vtkUnstructuredReader::extractCells(..)", + inFile + ) << "Expected size 6 for VTK_WEDGE but found " + << nRead << exit(FatalIOError); + } + prismPoints[0] = cellVertData[dataIndex++]; + prismPoints[1] = cellVertData[dataIndex++]; + prismPoints[2] = cellVertData[dataIndex++]; + prismPoints[3] = cellVertData[dataIndex++]; + prismPoints[4] = cellVertData[dataIndex++]; + prismPoints[5] = cellVertData[dataIndex++]; + cells_[cellI++] = cellShape(prism, prismPoints, true); + } + break; + + case VTK_HEXAHEDRON: + { + label nRead = cellVertData[dataIndex++]; + if (nRead != 8) + { + FatalIOErrorIn + ( + "vtkUnstructuredReader::extractCells(..)", + inFile + ) << "Expected size 8 for VTK_HEXAHEDRON but found " + << nRead << exit(FatalIOError); + } + hexPoints[0] = cellVertData[dataIndex++]; + hexPoints[1] = cellVertData[dataIndex++]; + hexPoints[2] = cellVertData[dataIndex++]; + hexPoints[3] = cellVertData[dataIndex++]; + hexPoints[4] = cellVertData[dataIndex++]; + hexPoints[5] = cellVertData[dataIndex++]; + hexPoints[6] = cellVertData[dataIndex++]; + hexPoints[7] = cellVertData[dataIndex++]; + cells_[cellI++] = cellShape(hex, hexPoints, true); + } + break; + + default: + warnUnhandledType(inFile, cellTypes[i], warningGiven); + label nRead = cellVertData[dataIndex++]; + dataIndex += nRead; + } + } + + if (debug) + { + Info<< "Read " << cellI << " cells;" << faceI << " faces." << endl; + } + cells_.setSize(cellI); + faces_.setSize(faceI); + lines_.setSize(lineI); +} + + +// Read single field and stores it on the objectRegistry. +void Foam::vtkUnstructuredReader::readField +( + ISstream& inFile, + objectRegistry& obj, + const word& arrayName, + const word& dataType, + const label size +) const +{ + switch (vtkDataTypeNames[dataType]) + { + case VTK_INT: + { + autoPtr fieldVals + ( + new labelIOField + ( + IOobject + ( + arrayName, + "", + obj + ), + size + ) + ); + readBlock(inFile, fieldVals().size(), fieldVals()); + regIOobject::store(fieldVals); + } + break; + + case VTK_FLOAT: + { + autoPtr fieldVals + ( + new scalarIOField + ( + IOobject + ( + arrayName, + "", + obj + ), + size + ) + ); + readBlock(inFile, fieldVals().size(), fieldVals()); + regIOobject::store(fieldVals); + } + break; + + case VTK_STRING: + { + if (debug) + { + Info<< "Reading strings:" << size << endl; + } + autoPtr fieldVals + ( + new stringIOList + ( + IOobject + ( + arrayName, + "", + obj + ), + size + ) + ); + // Consume current line. + inFile.getLine(fieldVals()[0]); + // Read without parsing + forAll(fieldVals(), i) + { + inFile.getLine(fieldVals()[i]); + } + regIOobject::store(fieldVals); + } + break; + + default: + { + IOWarningIn("vtkUnstructuredReader::extractCells(..)", inFile) + << "Unhandled type " << vtkDataTypeNames[dataType] << endl + << "Skipping " << size + << " words." << endl; + scalarField fieldVals; + readBlock(inFile, size, fieldVals); + } + break; + } +} + + +// Reads fields, stores them on the objectRegistry. Returns a list of +// read fields +Foam::wordList Foam::vtkUnstructuredReader::readFieldArray +( + ISstream& inFile, + objectRegistry& obj, + const label wantedSize +) const +{ + DynamicList fields; + + word dataName(inFile); + if (debug) + { + Info<< "dataName:" << dataName << endl; + } + label numArrays(readLabel(inFile)); + if (debug) + { + Pout<< "numArrays:" << numArrays << endl; + } + for (label i = 0; i < numArrays; i++) + { + word arrayName(inFile); + label numComp(readLabel(inFile)); + label numTuples(readLabel(inFile)); + word dataType(inFile); + + if (debug) + { + Info<< "Reading field " << arrayName + << " of " << numTuples << " tuples of rank " << numComp << endl; + } + + if (wantedSize != -1 && numTuples != wantedSize) + { + FatalIOErrorIn("vtkUnstructuredReader::readFieldArray(..)", inFile) + << "Expected " << wantedSize << " tuples but only have " + << numTuples << exit(FatalIOError); + } + + readField + ( + inFile, + obj, + arrayName, + dataType, + numTuples*numComp + ); + fields.append(arrayName); + } + return fields.shrink(); +} + + +Foam::objectRegistry& Foam::vtkUnstructuredReader::selectRegistry +( + const parseMode readMode +) +{ + if (readMode == CELL_DATA) + { + return cellData_; + } + else if (readMode == POINT_DATA) + { + return pointData_; + } + else + { + return otherData_; + } +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::vtkUnstructuredReader::vtkUnstructuredReader +( + const objectRegistry& obr, + ISstream& inFile +) +: + cellData_(IOobject("cellData", obr)), + pointData_(IOobject("pointData", obr)), + otherData_(IOobject("otherData", obr)) +{ + read(inFile); +} + + +void Foam::vtkUnstructuredReader::read(ISstream& inFile) +{ + inFile.getLine(header_); + if (debug) + { + Info<< "Header : " << header_ << endl; + } + inFile.getLine(title_); + if (debug) + { + Info<< "Title : " << title_ << endl; + } + inFile.getLine(dataType_); + if (debug) + { + Info<< "dataType : " << dataType_ << endl; + } + + parseMode readMode = NOMODE; + label wantedSize = -1; + + + // Temporary storage for vertices of cells. + labelList cellVerts; + + while (inFile.good()) + { + word tag(inFile); + + if (!inFile.good()) + { + break; + } + + if (debug) + { + Info<< "line:" << inFile.lineNumber() + << " tag:" << tag << endl; + } + + if (tag == "DATASET") + { + word geomType(inFile); + if (debug) + { + Info<< "geomType : " << geomType << endl; + } + readMode = parseModeNames[geomType]; + wantedSize = -1; + } + else if (tag == "POINTS") + { + label nPoints(readLabel(inFile)); + points_.setSize(nPoints); ///3); + if (debug) + { + Info<< "Reading " << nPoints << " numbers representing " + << points_.size() << " coordinates." << endl; + } + + word primitiveTag(inFile); + if (primitiveTag != "float") + { + FatalIOErrorIn("vtkUnstructuredReader::read(..)", inFile) + << "Expected 'float' entry but found " + << primitiveTag + << exit(FatalIOError); + } + forAll(points_, i) + { + inFile >> points_[i].x() >> points_[i].y() >> points_[i].z(); + } + } + else if (tag == "CELLS") + { + label nCells(readLabel(inFile)); + label nNumbers(readLabel(inFile)); + if (debug) + { + Info<< "Reading " << nCells << " cells or faces." << endl; + } + readBlock(inFile, nNumbers, cellVerts); + } + else if (tag == "CELL_TYPES") + { + label nCellTypes(readLabel(inFile)); + + labelList cellTypes; + readBlock(inFile, nCellTypes, cellTypes); + + if (cellTypes.size() > 0 && cellVerts.size() == 0) + { + FatalIOErrorIn("vtkUnstructuredReader::read(..)", inFile) + << "Found " << cellTypes.size() + << " cellTypes but no cells." + << exit(FatalIOError); + } + + extractCells(inFile, cellTypes, cellVerts); + cellVerts.clear(); + } + else if (tag == "LINES") + { + label nLines(readLabel(inFile)); + label nNumbers(readLabel(inFile)); + if (debug) + { + Info<< "Reading " << nLines << " lines." << endl; + } + labelList lineVerts; + readBlock(inFile, nNumbers, lineVerts); + lines_.setSize(nLines); + label elemI = 0; + forAll(lines_, lineI) + { + labelList& f = lines_[lineI]; + f.setSize(lineVerts[elemI++]); + forAll(f, fp) + { + f[fp] = lineVerts[elemI++]; + } + } + } + else if (tag == "POLYGONS") + { + // If in polydata mode + + label nFaces(readLabel(inFile)); + label nNumbers(readLabel(inFile)); + if (debug) + { + Info<< "Reading " << nFaces << " faces." << endl; + } + labelList faceVerts; + readBlock(inFile, nNumbers, faceVerts); + faces_.setSize(nFaces); + label elemI = 0; + forAll(faces_, faceI) + { + face& f = faces_[faceI]; + f.setSize(faceVerts[elemI++]); + forAll(f, fp) + { + f[fp] = faceVerts[elemI++]; + } + } + } + else if (tag == "POINT_DATA") + { + readMode = POINT_DATA; + wantedSize = points_.size(); + + label nPoints(readLabel(inFile)); + if (nPoints != wantedSize) + { + FatalIOErrorIn("vtkUnstructuredReader::read(..)", inFile) + << "Reading POINT_DATA : expected " << wantedSize + << " but read " << nPoints << exit(FatalIOError); + } + } + else if (tag == "CELL_DATA") + { + readMode = CELL_DATA; + wantedSize = cells_.size()+faces_.size(); + + label nCells(readLabel(inFile)); + if (nCells != wantedSize) + { + FatalIOErrorIn("vtkUnstructuredReader::read(..)", inFile) + << "Reading CELL_DATA : expected " + << wantedSize + << " but read " << nCells << exit(FatalIOError); + } + } + else if (tag == "FIELD") + { + // wantedSize already set according to type we expected to read. + readFieldArray(inFile, selectRegistry(readMode), wantedSize); + } + else if (tag == "SCALARS") + { + string line; + inFile.getLine(line); + IStringStream is(line); + word dataName(is); + word dataType(is); + //label numComp(readLabel(inFile)); + + if (debug) + { + Info<< "Reading scalar " << dataName + << " of type " << dataType + << " from lookup table" << endl; + } + + word lookupTableTag(inFile); + if (lookupTableTag != "LOOKUP_TABLE") + { + FatalIOErrorIn("vtkUnstructuredReader::read(..)", inFile) + << "Expected tag LOOKUP_TABLE but read " + << lookupTableTag + << exit(FatalIOError); + } + + word lookupTableName(inFile); + + readField + ( + inFile, + selectRegistry(readMode), + dataName, + dataType, + wantedSize//*numComp + ); + } + else if (tag == "VECTORS" || tag == "NORMALS") + { + string line; + inFile.getLine(line); + IStringStream is(line); + word dataName(is); + word dataType(is); + if (debug) + { + Info<< "Reading vector " << dataName + << " of type " << dataType << endl; + } + + objectRegistry& reg = selectRegistry(readMode); + + readField + ( + inFile, + reg, + dataName, + dataType, + 3*wantedSize + ); + + if (vtkDataTypeNames[dataType] == VTK_FLOAT) + { + objectRegistry::iterator iter = reg.find(dataName); + scalarField s(*dynamic_cast(iter())); + reg.erase(iter); + autoPtr fieldVals + ( + new vectorIOField + ( + IOobject + ( + dataName, + "", + reg + ), + s.size()/3 + ) + ); + + label elemI = 0; + forAll(fieldVals(), i) + { + fieldVals()[i].x() = s[elemI++]; + fieldVals()[i].y() = s[elemI++]; + fieldVals()[i].z() = s[elemI++]; + } + regIOobject::store(fieldVals); + } + } + else + { + FatalIOErrorIn("vtkUnstructuredReader::read(..)", inFile) + << "Unsupported tag " + << tag << exit(FatalIOError); + } + } + + if (debug) + { + Info<< "Read points:" << points_.size() + << " cellShapes:" << cells_.size() + << " faces:" << faces_.size() + << " lines:" << lines_.size() + << nl << endl; + + Info<< "Cell fields:" << endl; + printFieldStats(cellData_); + printFieldStats(cellData_); + printFieldStats(cellData_); + printFieldStats(cellData_); + Info<< nl << endl; + + Info<< "Point fields:" << endl; + printFieldStats(pointData_); + printFieldStats(pointData_); + printFieldStats(pointData_); + printFieldStats(pointData_); + Info<< nl << endl; + + Info<< "Other fields:" << endl; + printFieldStats(otherData_); + printFieldStats(otherData_); + printFieldStats(otherData_); + printFieldStats(otherData_); + } +} + + +template +void Foam::vtkUnstructuredReader::printFieldStats +( + const objectRegistry& obj +) const +{ + wordList fieldNames(obj.names(Type::typeName)); + + if (fieldNames.size() > 0) + { + Info<< "Read " << fieldNames.size() << " " << Type::typeName + << " fields:" << endl; + Info<< "Size\tName" << nl + << "----\t----" << endl; + forAll(fieldNames, i) + { + Info<< obj.lookupObject(fieldNames[i]).size() + << "\t" << fieldNames[i] + << endl; + } + Info<< endl; + } +} + + +// ************************************************************************* // diff --git a/src/conversion/vtk/vtkUnstructuredReader.H b/src/conversion/vtk/vtkUnstructuredReader.H new file mode 100644 index 0000000000..70df667741 --- /dev/null +++ b/src/conversion/vtk/vtkUnstructuredReader.H @@ -0,0 +1,332 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\/ 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::vtkUnstructuredReader + +Description + Reader for vtk unstructured legacy files + +SourceFiles + vtkUnstructuredReader.C + +\*---------------------------------------------------------------------------*/ + +#ifndef vtkUnstructuredReader_H +#define vtkUnstructuredReader_H + +#include "objectRegistry.H" +#include "cellShapeList.H" +#include "HashSet.H" +#include "NamedEnum.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// Forward declaration of friend functions and operators + + +/*---------------------------------------------------------------------------*\ + Class vtkUnstructuredReader Declaration +\*---------------------------------------------------------------------------*/ + +class vtkUnstructuredReader +{ +public: + + // Public data types + + //- Enumeration defining the vtk data types + enum vtkDataType + { + VTK_INT, + VTK_FLOAT, + VTK_STRING + }; + + static const NamedEnum vtkDataTypeNames; + + + //- Enumeration defining the vtk dataset types + enum vtkDataSetType + { + VTK_FIELD, + VTK_SCALARS, + VTK_VECTORS + }; + + static const NamedEnum vtkDataSetTypeNames; + + + //- Enumeration defining the parse mode - what type of data is being + // read + enum parseMode + { + NOMODE, + UNSTRUCTURED_GRID, + POLYDATA, + CELL_DATA, + POINT_DATA + }; + + static const NamedEnum parseModeNames; + + + //- Enumeration defining the cell types + enum vtkTypes + { + VTK_EMPTY_CELL = 0, + VTK_VERTEX = 1, + VTK_POLY_VERTEX = 2, + VTK_LINE = 3, + VTK_POLY_LINE = 4, + VTK_TRIANGLE = 5, + VTK_TRIANGLE_STRIP = 6, + VTK_POLYGON = 7, + VTK_PIXEL = 8, + VTK_QUAD = 9, + VTK_TETRA = 10, + VTK_VOXEL = 11, + VTK_HEXAHEDRON = 12, + VTK_WEDGE = 13, + VTK_PYRAMID = 14, + VTK_PENTAGONAL_PRISM = 15, + VTK_HEXAGONAL_PRISM = 16, + }; + + +private: + + //- Header + string header_; + + //- Title + string title_; + + //- DataType + string dataType_; + + + // Geometry + + //- Points + pointField points_; + + //- 3D cells. + cellShapeList cells_; + + //- 2D cells (=faces) + faceList faces_; + + //- 1D cells (=edges) + labelListList lines_; + + + // Data + + //- cell based fields + objectRegistry cellData_; + + //- point based fields + objectRegistry pointData_; + + //- other fields + objectRegistry otherData_; + + + + // Private Member Functions + + template + void readBlock + ( + Istream& inFile, + const label n, + List& lst + ) const; + + void warnUnhandledType + ( + Istream& inFile, + const label type, + labelHashSet& warningGiven + ) const; + + void extractCells + ( + Istream& inFile, + const labelList& cellTypes, + const labelList& cellVertData + ); + + void readField + ( + ISstream& inFile, + objectRegistry& obj, + const word& arrayName, + const word& dataType, + const label size + ) const; + + wordList readFieldArray + ( + ISstream& inFile, + objectRegistry& obj, + const label wantedSize + ) const; + + objectRegistry& selectRegistry(const parseMode readMode); + + void read(ISstream& inFile); + + //- Dissallow assignment + void operator=(const vtkUnstructuredReader&); + + +public: + + //- Runtime type information + ClassName("vtkUnstructuredReader"); + + // Constructors + + //- Construct from Istream, read all + vtkUnstructuredReader(const objectRegistry& obr, ISstream&); + + // Member Functions + + //- Header + const string header() const + { + return header_; + } + + //- Title + const string& title() const + { + return title_; + } + + //- DataType + const string& dataType() const + { + return dataType_; + } + + + //- Points + const pointField& points() const + { + return points_; + } + + pointField& points() + { + return points_; + } + + //- 3D cells. + const cellShapeList& cells() const + { + return cells_; + } + + cellShapeList& cells() + { + return cells_; + } + + //- 2D cells (=faces) + const faceList& faces() const + { + return faces_; + } + + faceList& faces() + { + return faces_; + } + + //- 1D cells (=open lines) + const labelListList& lines() const + { + return lines_; + } + + labelListList& lines() + { + return lines_; + } + + //- cell based fields + const objectRegistry& cellData() const + { + return cellData_; + } + + objectRegistry& cellData() + { + return cellData_; + } + + //- point based fields + const objectRegistry& pointData() const + { + return pointData_; + } + + objectRegistry& pointData() + { + return pointData_; + } + + //- other fields + const objectRegistry& otherData() const + { + return otherData_; + } + + objectRegistry& otherData() + { + return otherData_; + } + + + //- Debug: print contents of objectRegistry + template + void printFieldStats(const objectRegistry&) const; + +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/edgeMesh/Make/options b/src/edgeMesh/Make/options index 3c1b5258d3..47cb2e9d4f 100644 --- a/src/edgeMesh/Make/options +++ b/src/edgeMesh/Make/options @@ -1,9 +1,11 @@ EXE_INC = \ -I$(LIB_SRC)/fileFormats/lnInclude \ -I$(LIB_SRC)/triSurface/lnInclude \ + -I$(LIB_SRC)/conversion/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude LIB_LIBS = \ -ltriSurface \ -lmeshTools \ + -lconversion \ -lfileFormats diff --git a/src/edgeMesh/edgeFormats/vtk/VTKedgeFormat.C b/src/edgeMesh/edgeFormats/vtk/VTKedgeFormat.C index 457de19108..f0eda7aaa4 100644 --- a/src/edgeMesh/edgeFormats/vtk/VTKedgeFormat.C +++ b/src/edgeMesh/edgeFormats/vtk/VTKedgeFormat.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -26,6 +26,9 @@ License #include "VTKedgeFormat.H" #include "OFstream.H" #include "clock.H" +#include "IFstream.H" +#include "vtkUnstructuredReader.H" +#include "Time.H" // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // @@ -72,12 +75,84 @@ void Foam::fileFormats::VTKedgeFormat::writeEdges // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -Foam::fileFormats::VTKedgeFormat::VTKedgeFormat() -{} +Foam::fileFormats::VTKedgeFormat::VTKedgeFormat +( + const fileName& filename +) +{ + read(filename); +} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // +bool Foam::fileFormats::VTKedgeFormat::read +( + const fileName& filename +) +{ + IFstream is(filename); + if (!is.good()) + { + FatalErrorIn + ( + "fileFormats::VTKedgeFormat::read(const fileName&)" + ) << "Cannot read file " << filename + << exit(FatalError); + } + + // Construct dummy time so we have something to create an objectRegistry + // from + Time dummyTime + ( + "dummyRoot", + "dummyCase", + "system", + "constant", + false // enableFunctionObjects + ); + + // Make dummy object registry + objectRegistry obr + ( + IOobject + ( + "dummy", + dummyTime, + IOobject::NO_READ, + IOobject::NO_WRITE, + false + ) + ); + + // Construct reader to read file + vtkUnstructuredReader reader(obr, is); + + + // Extract lines + storedPoints().transfer(reader.points()); + + label nEdges = 0; + forAll(reader.lines(), lineI) + { + nEdges += reader.lines()[lineI].size()-1; + } + storedEdges().setSize(nEdges); + + nEdges = 0; + forAll(reader.lines(), lineI) + { + const labelList& verts = reader.lines()[lineI]; + for (label i = 1; i < verts.size(); i++) + { + storedEdges()[nEdges++] = edge(verts[i-1], verts[i]); + } + } + + return true; +} + + void Foam::fileFormats::VTKedgeFormat::write ( const fileName& filename, @@ -91,8 +166,7 @@ void Foam::fileFormats::VTKedgeFormat::write ( "fileFormats::VTKedgeFormat::write" "(const fileName&, const edgeMesh&)" - ) - << "Cannot open file for writing " << filename + ) << "Cannot open file for writing " << filename << exit(FatalError); } diff --git a/src/edgeMesh/edgeFormats/vtk/VTKedgeFormat.H b/src/edgeMesh/edgeFormats/vtk/VTKedgeFormat.H index c26b66465e..2285cf61a0 100644 --- a/src/edgeMesh/edgeFormats/vtk/VTKedgeFormat.H +++ b/src/edgeMesh/edgeFormats/vtk/VTKedgeFormat.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -78,10 +78,23 @@ protected: public: + // Constructors - //- Construct null - VTKedgeFormat(); + //- Construct from file name + VTKedgeFormat(const fileName&); + + + // Selectors + + //- Read file and return surface + static autoPtr New(const fileName& name) + { + return autoPtr + ( + new VTKedgeFormat(name) + ); + } //- Destructor @@ -91,16 +104,17 @@ public: // Member Functions - // Write + //- Write surface mesh components by proxy + static void write(const fileName&, const edgeMesh&); - //- Write edgeMesh - static void write(const fileName&, const edgeMesh&); + //- Read from file + virtual bool read(const fileName&); -// //- Write object -// virtual void write(Ostream& os) const -// { -// write(os, *this); -// } + //- Write object file + virtual void write(const fileName& name) const + { + write(name, *this); + } }; diff --git a/src/edgeMesh/edgeFormats/vtk/VTKedgeFormatRunTime.C b/src/edgeMesh/edgeFormats/vtk/VTKedgeFormatRunTime.C index ad902cd46d..3572004026 100644 --- a/src/edgeMesh/edgeFormats/vtk/VTKedgeFormatRunTime.C +++ b/src/edgeMesh/edgeFormats/vtk/VTKedgeFormatRunTime.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -35,6 +35,16 @@ namespace Foam namespace fileFormats { +// read edgeMesh +addNamedToRunTimeSelectionTable +( + edgeMesh, + VTKedgeFormat, + fileExtension, + vtk +); + +// write edgeMesh addNamedToMemberFunctionSelectionTable ( edgeMesh, From 14594f2ee123439b1a41fe026086457c0ceca796 Mon Sep 17 00:00:00 2001 From: laurence Date: Fri, 2 Mar 2012 16:19:03 +0000 Subject: [PATCH 04/45] BUG: cvMesh: Change == to = in buildParallelInterface --- .../conformalVoronoiMeshConformToSurface.C | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshConformToSurface.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshConformToSurface.C index 7f4c7abb6e..79a79c3883 100644 --- a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshConformToSurface.C +++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshConformToSurface.C @@ -1465,6 +1465,7 @@ void Foam::conformalVoronoiMesh::buildParallelInterfaceInfluence label cIInner = 0; label cIOuter = 0; +// seedProcessorBoundarySurfaces(true); label cellIndexCount = 0; for @@ -1477,6 +1478,7 @@ void Foam::conformalVoronoiMesh::buildParallelInterfaceInfluence cit->cellIndex() = cellIndexCount++; } + timeCheck("End of cell Indexing"); labelList testCellInfluence(number_of_cells(), 0); @@ -1505,7 +1507,7 @@ void Foam::conformalVoronoiMesh::buildParallelInterfaceInfluence ) { nQuickRejections++; - testCellInfluence[cit->cellIndex()] = -1; + //testCellInfluence[cit->cellIndex()] = -1; } } @@ -1528,7 +1530,7 @@ void Foam::conformalVoronoiMesh::buildParallelInterfaceInfluence if ( (testCellInfluence[cit->cellIndex()] == 0) - && (cit->real() || cit->hasFarPoint()) + //&& (cit->real() || cit->hasFarPoint()) ) { const Foam::point& cc = cit->dual(); From 04033b6968c5931107b131de29e9085c92d3937b Mon Sep 17 00:00:00 2001 From: andy Date: Fri, 2 Mar 2012 17:13:46 +0000 Subject: [PATCH 05/45] ENH: Re-inistated weighted-average fieldAverage usage --- .../field/fieldValues/cellSource/cellSource.C | 5 +++-- .../field/fieldValues/cellSource/cellSource.H | 9 +++++++-- .../fieldValues/cellSource/cellSourceTemplates.C | 10 ++++++++-- .../field/fieldValues/faceSource/faceSource.C | 5 +++-- .../field/fieldValues/faceSource/faceSource.H | 7 +++++-- .../fieldValues/faceSource/faceSourceTemplates.C | 11 +++++++++-- 6 files changed, 35 insertions(+), 12 deletions(-) diff --git a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.C b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.C index b42f15e6b3..9caa7a85b9 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.C +++ b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.C @@ -50,12 +50,13 @@ namespace Foam const char* Foam::NamedEnum < Foam::fieldValues::cellSource::operationType, - 8 + 9 >::names[] = { "none", "sum", "average", + "weightedAverage", "volAverage", "volIntegrate", "min", @@ -68,7 +69,7 @@ namespace Foam const Foam::NamedEnum Foam::fieldValues::cellSource::sourceTypeNames_; -const Foam::NamedEnum +const Foam::NamedEnum Foam::fieldValues::cellSource::operationTypeNames_; diff --git a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.H b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.H index 573b53f522..5e857e02f2 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.H +++ b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSource.H @@ -51,9 +51,12 @@ Description - none - sum - average + - weightedAverage - volAverage - volIntegrate - CoV (Coefficient of variation: standard deviation/mean) + - min + - max SourceFiles cellSource.C @@ -105,6 +108,7 @@ public: opNone, opSum, opAverage, + opWeightedAverage, opVolAverage, opVolIntegrate, opMin, @@ -113,7 +117,7 @@ public: }; //- Operation type names - static const NamedEnum operationTypeNames_; + static const NamedEnum operationTypeNames_; private: @@ -169,7 +173,8 @@ protected: Type processValues ( const Field& values, - const scalarField& V + const scalarField& V, + const scalarField& weightField ) const; //- Output file header information diff --git a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSourceTemplates.C b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSourceTemplates.C index 61d39a43c9..942ae6a0a9 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSourceTemplates.C +++ b/src/postProcessing/functionObjects/field/fieldValues/cellSource/cellSourceTemplates.C @@ -78,7 +78,8 @@ template Type Foam::fieldValues::cellSource::processValues ( const Field& values, - const scalarField& V + const scalarField& V, + const scalarField& weightField ) const { Type result = pTraits::zero; @@ -94,6 +95,11 @@ Type Foam::fieldValues::cellSource::processValues result = sum(values)/values.size(); break; } + case opWeightedAverage: + { + result = sum(values)/sum(weightField); + break; + } case opVolAverage: { result = sum(values*V)/sum(V); @@ -169,7 +175,7 @@ bool Foam::fieldValues::cellSource::writeValues(const word& fieldName) if (Pstream::master()) { - Type result = processValues(values, V); + Type result = processValues(values, V, weightField); if (valueOutput_) { diff --git a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.C b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.C index 68befe8fd9..97f244c60b 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.C +++ b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.C @@ -53,12 +53,13 @@ namespace Foam const char* Foam::NamedEnum < Foam::fieldValues::faceSource::operationType, - 8 + 9 >::names[] = { "none", "sum", "average", + "weightedAverage", "areaAverage", "areaIntegrate", "min", @@ -72,7 +73,7 @@ namespace Foam const Foam::NamedEnum Foam::fieldValues::faceSource::sourceTypeNames_; -const Foam::NamedEnum +const Foam::NamedEnum Foam::fieldValues::faceSource::operationTypeNames_; diff --git a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.H b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.H index 3c5ab78624..b7a2924035 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.H +++ b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.H @@ -59,6 +59,7 @@ Description - none - sum - average + - weightedAverage - areaAverage - areaIntegrate - min @@ -132,6 +133,7 @@ public: opNone, opSum, opAverage, + opWeightedAverage, opAreaAverage, opAreaIntegrate, opMin, @@ -140,7 +142,7 @@ public: }; //- Operation type names - static const NamedEnum operationTypeNames_; + static const NamedEnum operationTypeNames_; private: @@ -215,7 +217,8 @@ protected: Type processValues ( const Field& values, - const scalarField& magSf + const scalarField& magSf, + const scalarField& weightField ) const; //- Output file header information diff --git a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSourceTemplates.C b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSourceTemplates.C index bf83e811bc..79c031818f 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSourceTemplates.C +++ b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSourceTemplates.C @@ -97,7 +97,9 @@ template Type Foam::fieldValues::faceSource::processValues ( const Field& values, - const scalarField& magSf + const scalarField& magSf, + const scalarField& weightField + ) const { Type result = pTraits::zero; @@ -113,6 +115,11 @@ Type Foam::fieldValues::faceSource::processValues result = sum(values)/values.size(); break; } + case opWeightedAverage: + { + result = sum(values)/sum(weightField); + break; + } case opAreaAverage: { result = sum(values*magSf)/sum(magSf); @@ -203,7 +210,7 @@ bool Foam::fieldValues::faceSource::writeValues(const word& fieldName) if (Pstream::master()) { - Type result = processValues(values, magSf); + Type result = processValues(values, magSf, weightField); if (valueOutput_) { From 658f0a0680219999007a772fc5ab067f16ce7478 Mon Sep 17 00:00:00 2001 From: andy Date: Fri, 2 Mar 2012 17:14:30 +0000 Subject: [PATCH 06/45] ENH: Corrected/cleaned smallPoolFire2D tutorial input files --- tutorials/combustion/fireFoam/les/smallPoolFire2D/0/CH4 | 6 +++++- tutorials/combustion/fireFoam/les/smallPoolFire2D/0/G | 5 +++++ .../combustion/fireFoam/les/smallPoolFire2D/0/IDefault | 5 +++++ tutorials/combustion/fireFoam/les/smallPoolFire2D/0/N2 | 6 +++++- tutorials/combustion/fireFoam/les/smallPoolFire2D/0/O2 | 6 +++++- tutorials/combustion/fireFoam/les/smallPoolFire2D/0/T | 6 +++++- tutorials/combustion/fireFoam/les/smallPoolFire2D/0/U | 6 +++++- .../combustion/fireFoam/les/smallPoolFire2D/0/Ydefault | 3 ++- .../combustion/fireFoam/les/smallPoolFire2D/0/alphaSgs | 6 +++++- tutorials/combustion/fireFoam/les/smallPoolFire2D/0/k | 6 +++++- tutorials/combustion/fireFoam/les/smallPoolFire2D/0/muSgs | 6 +++++- tutorials/combustion/fireFoam/les/smallPoolFire2D/0/omega | 7 +++++-- tutorials/combustion/fireFoam/les/smallPoolFire2D/0/p | 5 ++++- tutorials/combustion/fireFoam/les/smallPoolFire2D/0/p_rgh | 6 +++++- 14 files changed, 66 insertions(+), 13 deletions(-) diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/CH4 b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/CH4 index dd13fa9a57..0c17615d4c 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/CH4 +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/CH4 @@ -27,22 +27,26 @@ boundaryField inletValue uniform 0; value uniform 0; } + sides { type inletOutlet; inletValue uniform 0; value uniform 0; } + base { type zeroGradient; } + inlet { type fixedValue; value uniform 1.0; } - frontBack + + frontAndBack { type empty; } diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/G b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/G index fe75242d76..5dfaf2e402 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/G +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/G @@ -28,6 +28,11 @@ boundaryField emissivity uniform 1.0; value uniform 0; } + + frontAndBack + { + type empty; + } } // ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/IDefault b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/IDefault index e70bf3dec0..75186697cd 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/IDefault +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/IDefault @@ -28,6 +28,11 @@ boundaryField emissivity uniform 1.0; value uniform 0; } + + frontAndBack + { + type empty; + } } // ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/N2 b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/N2 index ff1a3b1c42..248e3fa02d 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/N2 +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/N2 @@ -25,19 +25,23 @@ boundaryField { type calculated; } + sides { type calculated; } + base { type calculated; } + inlet { type calculated; } - frontBack + + frontAndBack { type empty; } diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/O2 b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/O2 index a5dab92ad1..ef57804773 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/O2 +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/O2 @@ -27,22 +27,26 @@ boundaryField inletValue $internalField; value $internalField; } + sides { type inletOutlet; inletValue $internalField; value $internalField; } + base { type zeroGradient; } + inlet { type fixedValue; value uniform 0; } - frontBack + + frontAndBack { type empty; } diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/T b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/T index 1997334fc8..8f4990b6ce 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/T +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/T @@ -27,22 +27,26 @@ boundaryField inletValue uniform 300; value uniform 300; } + sides { type inletOutlet; inletValue uniform 300; value uniform 300; } + base { type zeroGradient; } + inlet { type fixedValue; value uniform 300; } - frontBack + + frontAndBack { type empty; } diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/U b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/U index c0dc7624ca..9a1ad04efe 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/U +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/U @@ -29,23 +29,27 @@ boundaryField value uniform (0 0 0); } + sides { type pressureInletOutletVelocity; outletValue uniform (0 0 0); value uniform (0 0 0); } + base { type fixedValue; value uniform (0 0 0); } + inlet { type fixedValue; value uniform (0 0.05 0); } - frontBack + + frontAndBack { type empty; } diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/Ydefault b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/Ydefault index 003100fc05..74003f28f3 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/Ydefault +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/Ydefault @@ -45,7 +45,8 @@ boundaryField inletValue $internalField; value $internalField; } - frontBack + + frontAndBack { type empty; } diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/alphaSgs b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/alphaSgs index 330bea1037..5495f422b4 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/alphaSgs +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/alphaSgs @@ -25,19 +25,23 @@ boundaryField { type zeroGradient; } + sides { type zeroGradient; } + base { type zeroGradient; } + inlet { type zeroGradient; } - frontBack + + frontAndBack { type empty; } diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/k b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/k index 51ff80a123..377a3d0090 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/k +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/k @@ -27,23 +27,27 @@ boundaryField inletValue uniform 1e-4; value uniform 1e-4; } + sides { type inletOutlet; inletValue uniform 1e-4; value uniform 1e-4; } + base { type fixedValue; value uniform 1e-4; } + inlet { type fixedValue; value uniform 1e-4; } - frontBack + + frontAndBack { type empty; } diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/muSgs b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/muSgs index 0c723a78c8..203285a6c2 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/muSgs +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/muSgs @@ -25,19 +25,23 @@ boundaryField { type zeroGradient; } + sides { type zeroGradient; } + base { type zeroGradient; } + inlet { type zeroGradient; } - frontBack + + frontAndBack { type empty; } diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/omega b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/omega index fbe63fbec6..faca2f4dd8 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/omega +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/omega @@ -28,26 +28,29 @@ boundaryField inletValue uniform 0; value uniform 0; } + sides { type inletOutlet; inletValue uniform 0; value uniform 0; } + base { type zeroGradient; } + inlet { type fixedValue; value uniform 0.0; } - frontBack + + frontAndBack { type empty; } - } // ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/p b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/p index 3ae8577524..85a1f09dc4 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/p +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/p @@ -32,17 +32,20 @@ boundaryField type calculated; value $internalField; } + base { type calculated; value $internalField; } + inlet { type calculated; value $internalField; } - frontBack + + frontAndBack { type empty; } diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/p_rgh b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/p_rgh index cdeb5e62da..54e8cbeb29 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/p_rgh +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/p_rgh @@ -26,6 +26,7 @@ boundaryField type buoyantPressure; value $internalField; } + sides { type totalPressure; @@ -37,17 +38,20 @@ boundaryField gamma 1; value $internalField; } + base { type buoyantPressure; value $internalField; } + inlet { type buoyantPressure; value $internalField; } - frontBack + + frontAndBack { type empty; } From 2f529221fb044a47b1b7446b355bf87d3853854c Mon Sep 17 00:00:00 2001 From: mattijs Date: Fri, 2 Mar 2012 17:40:57 +0000 Subject: [PATCH 07/45] ENH: vtkUnstructuredReader: reader for unstructured-ascii-vtk data (edgeMeshes and surfMeshes) --- src/conversion/Make/files | 2 - src/edgeMesh/Make/options | 2 - src/fileFormats/Make/files | 1 + .../vtk/vtkUnstructuredReader.C | 0 .../vtk/vtkUnstructuredReader.H | 0 .../surfaceFormats/vtk/VTKsurfaceFormat.C | 155 +++++++++++++++++- .../surfaceFormats/vtk/VTKsurfaceFormat.H | 45 ++--- .../surfaceFormats/vtk/VTKsurfaceFormatCore.C | 6 +- .../vtk/VTKsurfaceFormatRunTime.C | 20 ++- 9 files changed, 201 insertions(+), 30 deletions(-) rename src/{conversion => fileFormats}/vtk/vtkUnstructuredReader.C (100%) rename src/{conversion => fileFormats}/vtk/vtkUnstructuredReader.H (100%) diff --git a/src/conversion/Make/files b/src/conversion/Make/files index 3616b0e697..7c5a0aa91c 100644 --- a/src/conversion/Make/files +++ b/src/conversion/Make/files @@ -19,8 +19,6 @@ meshReader/starcd/STARCDMeshReader.C meshWriter/meshWriter.C meshWriter/starcd/STARCDMeshWriter.C -vtk/vtkUnstructuredReader.C - polyDualMesh/polyDualMesh.C LIB = $(FOAM_LIBBIN)/libconversion diff --git a/src/edgeMesh/Make/options b/src/edgeMesh/Make/options index 47cb2e9d4f..3c1b5258d3 100644 --- a/src/edgeMesh/Make/options +++ b/src/edgeMesh/Make/options @@ -1,11 +1,9 @@ EXE_INC = \ -I$(LIB_SRC)/fileFormats/lnInclude \ -I$(LIB_SRC)/triSurface/lnInclude \ - -I$(LIB_SRC)/conversion/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude LIB_LIBS = \ -ltriSurface \ -lmeshTools \ - -lconversion \ -lfileFormats diff --git a/src/fileFormats/Make/files b/src/fileFormats/Make/files index a3acab834d..7845ac9312 100644 --- a/src/fileFormats/Make/files +++ b/src/fileFormats/Make/files @@ -1,3 +1,4 @@ +vtk/vtkUnstructuredReader.C nas/NASCore.C starcd/STARCDCore.C diff --git a/src/conversion/vtk/vtkUnstructuredReader.C b/src/fileFormats/vtk/vtkUnstructuredReader.C similarity index 100% rename from src/conversion/vtk/vtkUnstructuredReader.C rename to src/fileFormats/vtk/vtkUnstructuredReader.C diff --git a/src/conversion/vtk/vtkUnstructuredReader.H b/src/fileFormats/vtk/vtkUnstructuredReader.H similarity index 100% rename from src/conversion/vtk/vtkUnstructuredReader.H rename to src/fileFormats/vtk/vtkUnstructuredReader.H diff --git a/src/surfMesh/surfaceFormats/vtk/VTKsurfaceFormat.C b/src/surfMesh/surfaceFormats/vtk/VTKsurfaceFormat.C index 8f0c9cf380..3dad786857 100644 --- a/src/surfMesh/surfaceFormats/vtk/VTKsurfaceFormat.C +++ b/src/surfMesh/surfaceFormats/vtk/VTKsurfaceFormat.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -24,6 +24,8 @@ License \*---------------------------------------------------------------------------*/ #include "VTKsurfaceFormat.H" +#include "vtkUnstructuredReader.H" +#include "scalarIOField.H" // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // @@ -50,12 +52,159 @@ void Foam::fileFormats::VTKsurfaceFormat::writeHeaderPolygons // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template -Foam::fileFormats::VTKsurfaceFormat::VTKsurfaceFormat() -{} +Foam::fileFormats::VTKsurfaceFormat::VTKsurfaceFormat +( + const fileName& filename +) +{ + read(filename); +} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // +template +bool Foam::fileFormats::VTKsurfaceFormat::read +( + const fileName& filename +) +{ + const bool mustTriangulate = this->isTri(); + this->clear(); + + IFstream is(filename); + if (!is.good()) + { + FatalErrorIn + ( + "fileFormats::VTKsurfaceFormat::read(const fileName&)" + ) << "Cannot read file " << filename + << exit(FatalError); + } + + // assume that the groups are not intermixed + bool sorted = true; + + + // Construct dummy time so we have something to create an objectRegistry + // from + Time dummyTime + ( + "dummyRoot", + "dummyCase", + "system", + "constant", + false // enableFunctionObjects + ); + + // Make dummy object registry + objectRegistry obr + ( + IOobject + ( + "dummy", + dummyTime, + IOobject::NO_READ, + IOobject::NO_WRITE, + false + ) + ); + + // Read all + vtkUnstructuredReader reader(obr, is); + const faceList& faces = reader.faces(); + + // Assume all faces in zone0 unless a region field is present + labelList zones(faces.size(), 0); + if (reader.cellData().foundObject("region")) + { + const scalarIOField& region = + reader.cellData().lookupObject + ( + "region" + ); + forAll(region, i) + { + zones[i] = label(region[i]); + } + } + + // Create zone names + const label nZones = max(zones)+1; + wordList zoneNames(nZones); + forAll(zoneNames, i) + { + zoneNames[i] = "zone" + Foam::name(i); + } + + + // See if needs triangulation + label nTri = 0; + if (mustTriangulate) + { + forAll(faces, faceI) + { + nTri += faces[faceI].size()-2; + } + } + + if (nTri > 0) + { + DynamicList dynFaces(nTri); + DynamicList