diff --git a/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/createShellMesh.C b/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/createShellMesh.C index 543e5550a2..e57db9f9b3 100644 --- a/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/createShellMesh.C +++ b/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/createShellMesh.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2010-2010 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/createShellMesh.H b/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/createShellMesh.H index 1cb691f38c..9fdca3a0f4 100644 --- a/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/createShellMesh.H +++ b/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/createShellMesh.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2010-2010 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/extrudeToRegionMesh.C b/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/extrudeToRegionMesh.C index 87c936fe21..60d276388f 100644 --- a/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/extrudeToRegionMesh.C +++ b/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/extrudeToRegionMesh.C @@ -952,7 +952,7 @@ int main(int argc, char *argv[]) const word shellRegionName(dict.lookup("region")); const wordList zoneNames(dict.lookup("faceZones")); const Switch oneD(dict.lookup("oneD")); - + const Switch adaptMesh(dict.lookup("adaptMesh")); Info<< "Extruding zones " << zoneNames << " on mesh " << regionName @@ -1096,6 +1096,9 @@ int main(int argc, char *argv[]) // Add interface patches // ~~~~~~~~~~~~~~~~~~~~~ + // Note that these actually get added to the original mesh + // so the shell mesh creation copies them. They then get removed + // from the original mesh. Info<< "Adding coupling patches:" << nl << nl << "patchID\tpatch\ttype" << nl @@ -1707,6 +1710,8 @@ int main(int argc, char *argv[]) // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ autoPtr addBafflesMap; + + if (adaptMesh) { polyTopoChange meshMod(mesh); @@ -1817,6 +1822,7 @@ int main(int argc, char *argv[]) // Change master and slave boundary conditions on originating mesh // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + if (adaptMesh) { const polyBoundaryMesh& patches = mesh.boundaryMesh(); List newPatches(patches.size()); @@ -1878,22 +1884,27 @@ int main(int argc, char *argv[]) } mesh.removeFvBoundary(); mesh.addFvPatches(newPatches, true); + } + + // Remove any unused patches deleteEmptyPatches(mesh); } - Info<< "Writing mesh " << mesh.name() - << " to " << mesh.facesInstance() << nl - << endl; - - if (!mesh.write()) + if (adaptMesh) { - FatalErrorIn(args.executable()) - << "Failed writing mesh " << mesh.name() - << " at location " << mesh.facesInstance() - << exit(FatalError); - } + Info<< "Writing mesh " << mesh.name() + << " to " << mesh.facesInstance() << nl + << endl; + if (!mesh.write()) + { + FatalErrorIn(args.executable()) + << "Failed writing mesh " << mesh.name() + << " at location " << mesh.facesInstance() + << exit(FatalError); + } + } Info << "End\n" << endl; diff --git a/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/extrudeToRegionMeshDict b/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/extrudeToRegionMeshDict index 6f6fc40f17..983a890755 100644 --- a/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/extrudeToRegionMeshDict +++ b/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/extrudeToRegionMeshDict @@ -17,9 +17,18 @@ FoamFile // Name of region to create region liquidFilm; -// faceZones to extrude +// FaceZones to extrude faceZones (f0); +// Adapt the original mesh to have directMapped patches at where the +// faceZones are? +// If true: +// - extruding internal faces: become baffles on directMapped patches +// - extruding boundary faces: repatched to be on directMapped patches +// If false: leave original mesh intact. Extruded mesh will still have +// directMapped patch which might need to be adapted. +adaptMesh true; + // Extrude 1D-columns of cells? oneD false; diff --git a/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/patchPointEdgeCirculator.C b/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/patchPointEdgeCirculator.C index 398ec7f097..6157073a57 100644 --- a/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/patchPointEdgeCirculator.C +++ b/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/patchPointEdgeCirculator.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2010-2010 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/patchPointEdgeCirculator.H b/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/patchPointEdgeCirculator.H index dbd21bdc19..46ccb06fbf 100644 --- a/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/patchPointEdgeCirculator.H +++ b/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/patchPointEdgeCirculator.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2010-2010 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/patchPointEdgeCirculatorI.H b/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/patchPointEdgeCirculatorI.H index 4186e691f6..9c0d3d57d6 100644 --- a/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/patchPointEdgeCirculatorI.H +++ b/applications/utilities/mesh/generation/extrude/extrudeToRegionMesh/patchPointEdgeCirculatorI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2010-2010 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/applications/utilities/parallelProcessing/redistributeMeshPar/redistributeMeshPar.C b/applications/utilities/parallelProcessing/redistributeMeshPar/redistributeMeshPar.C index f51ebafb87..7bddb26d7c 100644 --- a/applications/utilities/parallelProcessing/redistributeMeshPar/redistributeMeshPar.C +++ b/applications/utilities/parallelProcessing/redistributeMeshPar/redistributeMeshPar.C @@ -86,51 +86,11 @@ autoPtr createMesh if (!haveMesh) { // Create dummy mesh. Only used on procs that don't have mesh. - - { - IOdictionary fvSolution - ( - IOobject - ( - "fvSolution", - runTime.system(), - runTime, - IOobject::NO_READ, - IOobject::NO_WRITE - ) - ); - Pout<< "Writing dummy " << fvSolution.objectPath() << endl; - fvSolution.regIOobject::write(); - } - { - IOdictionary fvSchemes - ( - IOobject - ( - "fvSchemes", - runTime.system(), - runTime, - IOobject::NO_READ, - IOobject::NO_WRITE - ) - ); - fvSchemes.add("divSchemes", dictionary()); - fvSchemes.add("gradSchemes", dictionary()); - fvSchemes.add("laplacianSchemes", dictionary()); - Pout<< "Writing dummy " << fvSchemes.objectPath() << endl; - fvSchemes.regIOobject::write(); - } - - Pout<< "Creating dummy mesh from " << io.objectPath() << endl; + IOobject noReadIO(io); + noReadIO.readOpt() = IOobject::NO_READ; fvMesh dummyMesh ( - IOobject - ( - io.name(), - io.instance(), - io.db(), - IOobject::NO_READ - ), + noReadIO, xferCopy(pointField()), xferCopy(faceList()), xferCopy(labelList()), @@ -521,7 +481,7 @@ void compareFields { if (mag(aBoundary[i] - bBoundary[i]) > tolDim) { - FatalErrorIn + WarningIn ( "compareFields" "(const scalar, const volVectorField&" @@ -532,7 +492,9 @@ void compareFields << " cc:" << endl << " real :" << aBoundary[i] << endl << " mapped :" << bBoundary[i] << endl - << abort(FatalError); + << "This might be just a precision entry" + << " on writing the mesh." << endl; + //<< abort(FatalError); } } } @@ -554,16 +516,16 @@ int main(int argc, char *argv[]) ); # include "setRootCase.H" - // Create processor directory if non-existing - if (!Pstream::master() && !isDir(args.path())) - { - Pout<< "Creating case directory " << args.path() << endl; - mkDir(args.path()); - } + //- Not useful anymore. See above. + //// Create processor directory if non-existing + //if (!Pstream::master() && !isDir(args.path())) + //{ + // Pout<< "Creating case directory " << args.path() << endl; + // mkDir(args.path()); + //} # include "createTime.H" - word regionName = polyMesh::defaultRegion; fileName meshSubDir; diff --git a/src/OpenFOAM/meshes/boundBox/boundBox.C b/src/OpenFOAM/meshes/boundBox/boundBox.C index 279412ab4d..977d0add12 100644 --- a/src/OpenFOAM/meshes/boundBox/boundBox.C +++ b/src/OpenFOAM/meshes/boundBox/boundBox.C @@ -156,7 +156,7 @@ Foam::Istream& Foam::operator>>(Istream& is, boundBox& bb) { if (is.format() == IOstream::ASCII) { - return is >> bb.min_ >> bb.max_; + is >> bb.min_ >> bb.max_; } else { diff --git a/src/OpenFOAM/primitives/hashes/SHA1/SHA1Digest.C b/src/OpenFOAM/primitives/hashes/SHA1/SHA1Digest.C index be53153b09..a270dd1d77 100644 --- a/src/OpenFOAM/primitives/hashes/SHA1/SHA1Digest.C +++ b/src/OpenFOAM/primitives/hashes/SHA1/SHA1Digest.C @@ -32,7 +32,37 @@ License //! @cond fileScope const char hexChars[] = "0123456789abcdef"; -//! @endcond +//! @endcond fileScope + + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +unsigned char Foam::SHA1Digest::readHexDigit(Istream& is) +{ + // Takes into account that 'a' (or 'A') is 10 + static const label alphaOffset = toupper('A') - 10; + // Takes into account that '0' is 0 + static const label zeroOffset = int('0'); + + char c = 0; + is.read(c); + + if (!isxdigit(c)) + { + FatalIOErrorIn("SHA1Digest::readHexDigit(Istream&)", is) + << "Illegal hex digit: '" << c << "'" + << exit(FatalIOError); + } + + if (isdigit(c)) + { + return int(c) - zeroOffset; + } + else + { + return toupper(c) - alphaOffset; + } +} // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -43,6 +73,12 @@ Foam::SHA1Digest::SHA1Digest() } +Foam::SHA1Digest::SHA1Digest(Istream& is) +{ + is >> *this; +} + + // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // void Foam::SHA1Digest::clear() @@ -75,6 +111,23 @@ bool Foam::SHA1Digest::operator!=(const SHA1Digest& rhs) const // * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * * // +Foam::Istream& Foam::operator>>(Istream& is, SHA1Digest& dig) +{ + unsigned char *v = dig.v_; + + for (unsigned i = 0; i < dig.length; ++i) + { + unsigned char c1 = SHA1Digest::readHexDigit(is); + unsigned char c2 = SHA1Digest::readHexDigit(is); + + v[i] = (c1 << 4) + c2; + } + + is.check("Istream& operator>>(Istream&, SHA1Digest&)"); + return is; +} + + Foam::Ostream& Foam::operator<<(Ostream& os, const SHA1Digest& dig) { const unsigned char *v = dig.v_; diff --git a/src/OpenFOAM/primitives/hashes/SHA1/SHA1Digest.H b/src/OpenFOAM/primitives/hashes/SHA1/SHA1Digest.H index 06aba6c861..0402dc9884 100644 --- a/src/OpenFOAM/primitives/hashes/SHA1/SHA1Digest.H +++ b/src/OpenFOAM/primitives/hashes/SHA1/SHA1Digest.H @@ -45,11 +45,13 @@ namespace Foam // Forward declaration of classes class Ostream; +class Istream; // Forward declaration of friend functions and operators class SHA1; class SHA1Digest; Ostream& operator<<(Ostream&, const SHA1Digest&); +Istream& operator>>(Istream&, SHA1Digest&); /*---------------------------------------------------------------------------*\ @@ -67,6 +69,9 @@ public: //- Construct a zero digest SHA1Digest(); + //- Construct read a digest + SHA1Digest(Istream&); + //- Reset the digest to zero void clear(); @@ -77,11 +82,14 @@ public: bool operator!=(const SHA1Digest&) const; friend Ostream& operator<<(Ostream&, const SHA1Digest&); + friend Istream& operator>>(Istream&, SHA1Digest&); private: //- The digest contents unsigned char v_[length]; + + static unsigned char readHexDigit(Istream&); }; diff --git a/src/OpenFOAM/primitives/strings/string/string.C b/src/OpenFOAM/primitives/strings/string/string.C index d7237ac160..5b9879c137 100644 --- a/src/OpenFOAM/primitives/strings/string/string.C +++ b/src/OpenFOAM/primitives/strings/string/string.C @@ -94,7 +94,7 @@ Foam::string& Foam::string::replaceAll // Expand all occurences of environment variables and initial tilde sequences -Foam::string& Foam::string::expand() +Foam::string& Foam::string::expand(const bool recurse) { size_type startEnvar = 0; @@ -140,6 +140,10 @@ Foam::string& Foam::string::expand() if (enVarString.size()) { + if (recurse) + { + enVarString.expand(); + } std::string::replace ( startEnvar, diff --git a/src/OpenFOAM/primitives/strings/string/string.H b/src/OpenFOAM/primitives/strings/string/string.H index 254ffbba0f..c808f64d9a 100644 --- a/src/OpenFOAM/primitives/strings/string/string.H +++ b/src/OpenFOAM/primitives/strings/string/string.H @@ -182,7 +182,7 @@ public: // // @sa // Foam::findEtcFile - string& expand(); + string& expand(const bool recurse=false); //- Remove repeated characters returning true if string changed bool removeRepeated(const char); diff --git a/src/dynamicFvMesh/include/createDynamicFvMesh.H b/src/dynamicFvMesh/include/createDynamicFvMesh.H index 9a541a764d..97303ffded 100644 --- a/src/dynamicFvMesh/include/createDynamicFvMesh.H +++ b/src/dynamicFvMesh/include/createDynamicFvMesh.H @@ -9,7 +9,8 @@ ( dynamicFvMesh::defaultRegion, runTime.timeName(), - runTime + runTime, + IOobject::MUST_READ ) ) ); diff --git a/src/dynamicMesh/meshCut/directions/directionInfo/directionInfo.C b/src/dynamicMesh/meshCut/directions/directionInfo/directionInfo.C index 9c904bbc6b..c35bb701bb 100644 --- a/src/dynamicMesh/meshCut/directions/directionInfo/directionInfo.C +++ b/src/dynamicMesh/meshCut/directions/directionInfo/directionInfo.C @@ -25,11 +25,8 @@ License \*---------------------------------------------------------------------------*/ #include "directionInfo.H" -//#include "hexMatcher.H" -//#include "meshTools.H" #include "polyMesh.H" - // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // // Find edge among edgeLabels that uses v0 and v1 @@ -209,13 +206,44 @@ Foam::Ostream& Foam::operator<< const Foam::directionInfo& wDist ) { - return os << wDist.index_ << wDist.n_; + if (os.format() == IOstream::ASCII) + { + os << wDist.index_ << wDist.n_; + } + else + { + os.write + ( + reinterpret_cast(&wDist.index_), + sizeof(directionInfo) + ); + } + + // Check state of Ostream + os.check("Ostream& operator<<(Ostream&, const directionInfo&)"); + return os; + } Foam::Istream& Foam::operator>>(Foam::Istream& is, Foam::directionInfo& wDist) { - return is >> wDist.index_ >> wDist.n_; + if (is.format() == IOstream::ASCII) + { + is >> wDist.index_ >> wDist.n_; + } + else + { + is.read + ( + reinterpret_cast(&wDist.index_), + sizeof(directionInfo) + ); + } + + // Check state of Istream + is.check("Istream& operator>>(Istream&, directionInfo&)"); + return is; } // ************************************************************************* // diff --git a/src/dynamicMesh/meshCut/directions/directionInfo/directionInfo.H b/src/dynamicMesh/meshCut/directions/directionInfo/directionInfo.H index a42c44d41f..bd9608ba01 100644 --- a/src/dynamicMesh/meshCut/directions/directionInfo/directionInfo.H +++ b/src/dynamicMesh/meshCut/directions/directionInfo/directionInfo.H @@ -251,6 +251,14 @@ public: }; +//- Data associated with directionInfo type are contiguous +template<> +inline bool contiguous() +{ + return true; +} + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam diff --git a/src/dynamicMesh/meshCut/wallLayerCells/wallNormalInfo/wallNormalInfo.C b/src/dynamicMesh/meshCut/wallLayerCells/wallNormalInfo/wallNormalInfo.C index ce0add8f25..98bf885362 100644 --- a/src/dynamicMesh/meshCut/wallLayerCells/wallNormalInfo/wallNormalInfo.C +++ b/src/dynamicMesh/meshCut/wallLayerCells/wallNormalInfo/wallNormalInfo.C @@ -33,12 +33,42 @@ Foam::Ostream& Foam::operator<< const Foam::wallNormalInfo& wDist ) { - return os << wDist.normal(); + if (os.format() == IOstream::ASCII) + { + os << wDist.normal(); + } + else + { + os.write + ( + reinterpret_cast(&wDist.normal_), + sizeof(vector) + ); + } + + // Check state of Ostream + os.check("Ostream& operator<<(Ostream&, const wallNormalInfo&)"); + return os; } Foam::Istream& Foam::operator>>(Foam::Istream& is, Foam::wallNormalInfo& wDist) { - return is >> wDist.normal_; + if (is.format() == IOstream::ASCII) + { + is >> wDist.normal_; + } + else + { + is.read + ( + reinterpret_cast(&wDist.normal_), + sizeof(vector) + ); + } + + // Check state of Istream + is.check("Istream& operator>>(Istream&, wallNormalInfo&)"); + return is; } // ************************************************************************* // diff --git a/src/dynamicMesh/meshCut/wallLayerCells/wallNormalInfo/wallNormalInfo.H b/src/dynamicMesh/meshCut/wallLayerCells/wallNormalInfo/wallNormalInfo.H index f4553ec47c..2f0025fc63 100644 --- a/src/dynamicMesh/meshCut/wallLayerCells/wallNormalInfo/wallNormalInfo.H +++ b/src/dynamicMesh/meshCut/wallLayerCells/wallNormalInfo/wallNormalInfo.H @@ -191,6 +191,14 @@ public: }; +//- Data associated with wallNormalInfo type are contiguous +template<> +inline bool contiguous() +{ + return true; +} + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/refinementData.C b/src/dynamicMesh/polyTopoChange/polyTopoChange/refinementData.C index c76042beb9..391c0a079b 100644 --- a/src/dynamicMesh/polyTopoChange/polyTopoChange/refinementData.C +++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/refinementData.C @@ -33,13 +33,43 @@ Foam::Ostream& Foam::operator<< const Foam::refinementData& wDist ) { - return os << wDist.refinementCount_ << token::SPACE << wDist.count_; + if (os.format() == IOstream::ASCII) + { + os << wDist.refinementCount_ << token::SPACE << wDist.count_; + } + else + { + os.write + ( + reinterpret_cast(&wDist.refinementCount_), + sizeof(refinementData) + ); + } + + // Check state of Ostream + os.check("Ostream& operator<<(Ostream&, const refinementData&)"); + return os; } Foam::Istream& Foam::operator>>(Foam::Istream& is, Foam::refinementData& wDist) { - return is >> wDist.refinementCount_ >> wDist.count_; + if (is.format() == IOstream::ASCII) + { + is >> wDist.refinementCount_ >> wDist.count_; + } + else + { + is.read + ( + reinterpret_cast(&wDist.refinementCount_), + sizeof(refinementData) + ); + } + + // Check state of Istream + is.check("Istream& operator>>(Istream&, refinementData&)"); + return is; } diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/refinementData.H b/src/dynamicMesh/polyTopoChange/polyTopoChange/refinementData.H index 171de17109..33349d78e0 100644 --- a/src/dynamicMesh/polyTopoChange/polyTopoChange/refinementData.H +++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/refinementData.H @@ -208,6 +208,14 @@ public: }; +//- Data associated with refinementData type are contiguous +template<> +inline bool contiguous() +{ + return true; +} + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/refinementDistanceData.H b/src/dynamicMesh/polyTopoChange/polyTopoChange/refinementDistanceData.H index d838ef7178..d0f9f2d6eb 100644 --- a/src/dynamicMesh/polyTopoChange/polyTopoChange/refinementDistanceData.H +++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/refinementDistanceData.H @@ -242,6 +242,14 @@ public: }; +//- Data associated with refinementDistanceData type are contiguous +template<> +inline bool contiguous() +{ + return true; +} + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam diff --git a/src/finiteVolume/Make/files b/src/finiteVolume/Make/files index 87438ae313..2e4dd38bb1 100644 --- a/src/finiteVolume/Make/files +++ b/src/finiteVolume/Make/files @@ -227,6 +227,7 @@ $(schemes)/clippedLinear/clippedLinear.C $(schemes)/harmonic/harmonic.C $(schemes)/fixedBlended/fixedBlended.C $(schemes)/localBlended/localBlended.C +$(schemes)/limiterBlended/limiterBlended.C $(schemes)/localMax/localMax.C $(schemes)/localMin/localMin.C diff --git a/src/finiteVolume/finiteVolume/fvc/fvcSmooth/smoothData.H b/src/finiteVolume/finiteVolume/fvc/fvcSmooth/smoothData.H index f51124e920..2a2de73727 100644 --- a/src/finiteVolume/finiteVolume/fvc/fvcSmooth/smoothData.H +++ b/src/finiteVolume/finiteVolume/fvc/fvcSmooth/smoothData.H @@ -219,6 +219,14 @@ public: }; +//- Data associated with smoothData type are contiguous +template<> +inline bool contiguous() +{ + return true; +} + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/finiteVolume/finiteVolume/fvc/fvcSmooth/sweepData.H b/src/finiteVolume/finiteVolume/fvc/fvcSmooth/sweepData.H index ff64713e0b..f7524a2641 100644 --- a/src/finiteVolume/finiteVolume/fvc/fvcSmooth/sweepData.H +++ b/src/finiteVolume/finiteVolume/fvc/fvcSmooth/sweepData.H @@ -210,6 +210,14 @@ public: }; +//- Data associated with sweepData type are contiguous +template<> +inline bool contiguous() +{ + return true; +} + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/finiteVolume/fvMesh/wallDist/wallPointYPlus/wallPointYPlus.H b/src/finiteVolume/fvMesh/wallDist/wallPointYPlus/wallPointYPlus.H index 2ca7e7197c..9d0279fea1 100644 --- a/src/finiteVolume/fvMesh/wallDist/wallPointYPlus/wallPointYPlus.H +++ b/src/finiteVolume/fvMesh/wallDist/wallPointYPlus/wallPointYPlus.H @@ -144,6 +144,14 @@ public: }; +//- Data associated with pointEdgePoint type as contiguous as underlying type +template<> +inline bool contiguous() +{ + return contiguous >(); +} + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/limiterBlended/limiterBlended.C b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/limiterBlended/limiterBlended.C new file mode 100644 index 0000000000..2693088ef7 --- /dev/null +++ b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/limiterBlended/limiterBlended.C @@ -0,0 +1,36 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2010 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 "fvMesh.H" +#include "limiterBlended.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + makeSurfaceInterpolationScheme(limiterBlended) +} + +// ************************************************************************* // diff --git a/src/finiteVolume/interpolation/surfaceInterpolation/schemes/limiterBlended/limiterBlended.H b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/limiterBlended/limiterBlended.H new file mode 100644 index 0000000000..965e65afa9 --- /dev/null +++ b/src/finiteVolume/interpolation/surfaceInterpolation/schemes/limiterBlended/limiterBlended.H @@ -0,0 +1,229 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2010 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::limiterBlended + +Description + Blends two specified schemes using the limiter function provided by a + limitedSurfaceInterpolationScheme. + + The limited scheme is specified first followed by the scheme to be scaled + by the limiter and then the scheme scaled by 1 - limiter. + +SourceFiles + limiterBlended.C + +\*---------------------------------------------------------------------------*/ + +#ifndef limiterBlended_H +#define limiterBlended_H + +#include "limitedSurfaceInterpolationScheme.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class limiterBlended Declaration +\*---------------------------------------------------------------------------*/ + +template +class limiterBlended +: + public surfaceInterpolationScheme +{ + // Private Member Functions + + //- Limited scheme providing the limiter + tmp > tLimitedScheme_; + + //- Scheme 1 + tmp > tScheme1_; + + //- Scheme 2 + tmp > tScheme2_; + + + //- Disallow default bitwise copy construct + limiterBlended(const limiterBlended&); + + //- Disallow default bitwise assignment + void operator=(const limiterBlended&); + + +public: + + //- Runtime type information + TypeName("limiterBlended"); + + + // Constructors + + //- Construct from mesh and Istream. + // The name of the flux field is read from the Istream and looked-up + // from the mesh objectRegistry + limiterBlended + ( + const fvMesh& mesh, + Istream& is + ) + : + surfaceInterpolationScheme(mesh), + tLimitedScheme_ + ( + limitedSurfaceInterpolationScheme::New(mesh, is) + ), + tScheme1_ + ( + surfaceInterpolationScheme::New(mesh, is) + ), + tScheme2_ + ( + surfaceInterpolationScheme::New(mesh, is) + ) + {} + + //- Construct from mesh, faceFlux and Istream + limiterBlended + ( + const fvMesh& mesh, + const surfaceScalarField& faceFlux, + Istream& is + ) + : + surfaceInterpolationScheme(mesh), + tLimitedScheme_ + ( + limitedSurfaceInterpolationScheme::New(mesh, faceFlux, is) + ), + tScheme1_ + ( + surfaceInterpolationScheme::New(mesh, faceFlux, is) + ), + tScheme2_ + ( + surfaceInterpolationScheme::New(mesh, faceFlux, is) + ) + {} + + + // Member Functions + + //- Return the interpolation weighting factors + tmp weights + ( + const GeometricField& vf + ) const + { + surfaceScalarField blendingFactor = + tLimitedScheme_().limiter(vf); + + return + blendingFactor*tScheme1_().weights(vf) + + (scalar(1) - blendingFactor)*tScheme2_().weights(vf); + } + + //- Return the face-interpolate of the given cell field + // with explicit correction + tmp > + interpolate(const GeometricField& vf) const + { + surfaceScalarField blendingFactor = + tLimitedScheme_().limiter(vf); + + return + blendingFactor*tScheme1_().interpolate(vf) + + (scalar(1) - blendingFactor)*tScheme2_().interpolate(vf); + } + + + //- Return true if this scheme uses an explicit correction + virtual bool corrected() const + { + return tScheme1_().corrected() || tScheme2_().corrected(); + } + + + //- Return the explicit correction to the face-interpolate + // for the given field + virtual tmp > + correction + ( + const GeometricField& vf + ) const + { + surfaceScalarField blendingFactor = + tLimitedScheme_().limiter(vf); + + if (tScheme1_().corrected()) + { + if (tScheme2_().corrected()) + { + return + ( + blendingFactor + * tScheme1_().correction(vf) + + (scalar(1.0) - blendingFactor) + * tScheme2_().correction(vf) + ); + } + else + { + return + ( + blendingFactor + * tScheme1_().correction(vf) + ); + } + } + else if (tScheme2_().corrected()) + { + return + ( + (scalar(1.0) - blendingFactor) + * tScheme2_().correction(vf) + ); + } + else + { + return tmp > + ( + NULL + ); + } + } +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/fvMotionSolver/fvMotionSolvers/displacement/layeredSolver/pointEdgeStructuredWalk.H b/src/fvMotionSolver/fvMotionSolvers/displacement/layeredSolver/pointEdgeStructuredWalk.H index e6852dffa2..31d25d6a9f 100644 --- a/src/fvMotionSolver/fvMotionSolvers/displacement/layeredSolver/pointEdgeStructuredWalk.H +++ b/src/fvMotionSolver/fvMotionSolvers/displacement/layeredSolver/pointEdgeStructuredWalk.H @@ -218,6 +218,14 @@ public: }; +//- Data associated with pointEdgeStructuredWalk type are contiguous +template<> +inline bool contiguous() +{ + return true; +} + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam diff --git a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/pointData/pointData.H b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/pointData/pointData.H index 7719079821..f4f29af8be 100644 --- a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/pointData/pointData.H +++ b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/pointData/pointData.H @@ -40,9 +40,6 @@ SourceFiles #define pointData_H #include "pointEdgePoint.H" -//#include "point.H" -//#include "label.H" -//#include "tensor.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -158,6 +155,14 @@ public: }; +//- Data associated with pointData as contiguous as pointEdgePoint +template<> +inline bool contiguous() +{ + return contiguous(); +} + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam diff --git a/src/meshTools/PointEdgeWave/pointEdgePoint.H b/src/meshTools/PointEdgeWave/pointEdgePoint.H index 81f4019bd4..fdf346fc0b 100644 --- a/src/meshTools/PointEdgeWave/pointEdgePoint.H +++ b/src/meshTools/PointEdgeWave/pointEdgePoint.H @@ -226,6 +226,14 @@ public: }; +//- Data associated with pointEdgePoint type are contiguous +template<> +inline bool contiguous() +{ + return true; +} + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam diff --git a/src/meshTools/cellClassification/cellInfo.H b/src/meshTools/cellClassification/cellInfo.H index a51e255f4c..b282b07cbd 100644 --- a/src/meshTools/cellClassification/cellInfo.H +++ b/src/meshTools/cellClassification/cellInfo.H @@ -201,6 +201,14 @@ public: }; +//- Data associated with cellInfo type are contiguous +template<> +inline bool contiguous() +{ + return true; +} + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam diff --git a/src/meshTools/cellDist/wallPoint/wallPoint.H b/src/meshTools/cellDist/wallPoint/wallPoint.H index 8215795896..a7d5082e4e 100644 --- a/src/meshTools/cellDist/wallPoint/wallPoint.H +++ b/src/meshTools/cellDist/wallPoint/wallPoint.H @@ -223,6 +223,14 @@ public: }; +//- Data associated with wallPoint type are contiguous +template<> +inline bool contiguous() +{ + return true; +} + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam diff --git a/src/meshTools/cellDist/wallPoint/wallPointData.H b/src/meshTools/cellDist/wallPoint/wallPointData.H index a826f0003a..6b0d1bdcb2 100644 --- a/src/meshTools/cellDist/wallPoint/wallPointData.H +++ b/src/meshTools/cellDist/wallPoint/wallPointData.H @@ -160,6 +160,46 @@ public: }; +//- Data associated with wallPointData type are contiguous. List the usual +// ones. + +template <> +inline bool contiguous >() +{ + return contiguous(); +} +template <> +inline bool contiguous >() +{ + return contiguous(); +} +template <> +inline bool contiguous >() +{ + return contiguous(); +} +template <> +inline bool contiguous >() +{ + return contiguous(); +} +template <> +inline bool contiguous >() +{ + return contiguous(); +} +template <> +inline bool contiguous >() +{ + return contiguous(); +} +template <> +inline bool contiguous >() +{ + return contiguous(); +} + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/parallel/decompose/decompositionMethods/structuredDecomp/topoDistanceData.H b/src/parallel/decompose/decompositionMethods/structuredDecomp/topoDistanceData.H index a19ed5bdf3..9f4f1ee2cf 100644 --- a/src/parallel/decompose/decompositionMethods/structuredDecomp/topoDistanceData.H +++ b/src/parallel/decompose/decompositionMethods/structuredDecomp/topoDistanceData.H @@ -195,6 +195,14 @@ public: }; +//- Data associated with topoDistanceData type are contiguous +template<> +inline bool contiguous() +{ + return true; +} + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam diff --git a/src/turbulenceModels/LES/LESdeltas/smoothDelta/smoothDelta.H b/src/turbulenceModels/LES/LESdeltas/smoothDelta/smoothDelta.H index 7a302b9379..a9f0e388d3 100644 --- a/src/turbulenceModels/LES/LESdeltas/smoothDelta/smoothDelta.H +++ b/src/turbulenceModels/LES/LESdeltas/smoothDelta/smoothDelta.H @@ -52,6 +52,164 @@ class smoothDelta : public LESdelta { +public: + + //- Public member class used by mesh-wave to propagate the delta-ratio + class deltaData + { + scalar delta_; + + // Private Member Functions + + //- Update. Gets information from neighbouring face/cell and + // uses this to update itself (if nessecary) and return true. + template + inline bool update + ( + const deltaData& w2, + const scalar scale, + const scalar tol, + TrackingData& td + ); + + + public: + + // Constructors + + //- Construct null + inline deltaData(); + + //- Construct from origin, yStar, distance + inline deltaData(const scalar delta); + + + // Member Functions + + // Access + + scalar delta() const + { + return delta_; + } + + + // Needed by FaceCellWave + + //- Check whether origin has been changed at all or + // still contains original (invalid) value. + template + inline bool valid(TrackingData& td) const; + + //- Check for identical geometrical data. + // Used for cyclics checking. + template + inline bool sameGeometry + ( + const polyMesh&, + const deltaData&, + const scalar, + TrackingData& td + ) const; + + //- Convert any absolute coordinates into relative to + // (patch)face centre + template + inline void leaveDomain + ( + const polyMesh&, + const polyPatch&, + const label patchFaceI, + const point& faceCentre, + TrackingData& td + ); + + //- Reverse of leaveDomain + template + inline void enterDomain + ( + const polyMesh&, + const polyPatch&, + const label patchFaceI, + const point& faceCentre, + TrackingData& td + ); + + //- Apply rotation matrix to any coordinates + template + inline void transform + ( + const polyMesh&, + const tensor&, + TrackingData& td + ); + + //- Influence of neighbouring face. + template + inline bool updateCell + ( + const polyMesh&, + const label thisCellI, + const label neighbourFaceI, + const deltaData& neighbourInfo, + const scalar tol, + TrackingData& td + ); + + //- Influence of neighbouring cell. + template + inline bool updateFace + ( + const polyMesh&, + const label thisFaceI, + const label neighbourCellI, + const deltaData& neighbourInfo, + const scalar tol, + TrackingData& td + ); + + //- Influence of different value on same face. + template + inline bool updateFace + ( + const polyMesh&, + const label thisFaceI, + const deltaData& neighbourInfo, + const scalar tol, + TrackingData& td + ); + + //- Same (like operator==) + template + inline bool equal(const deltaData&, TrackingData& td) const; + + // Member Operators + + // Needed for List IO + inline bool operator==(const deltaData&) const; + + inline bool operator!=(const deltaData&) const; + + // IOstream Operators + + friend Ostream& operator<< + ( + Ostream& os, + const deltaData& wDist + ) + { + return os << wDist.delta_; + } + + friend Istream& operator>>(Istream& is, deltaData& wDist) + { + return is >> wDist.delta_; + } + }; + + +private: + // Private data autoPtr geometricDelta_; @@ -67,159 +225,6 @@ class smoothDelta // Calculate the delta values void calcDelta(); - //- Private member class used by mesh-wave to propagate the delta-ratio - class deltaData - { - scalar delta_; - - // Private Member Functions - - //- Update. Gets information from neighbouring face/cell and - // uses this to update itself (if nessecary) and return true. - template - inline bool update - ( - const deltaData& w2, - const scalar scale, - const scalar tol, - TrackingData& td - ); - - - public: - - // Constructors - - //- Construct null - inline deltaData(); - - //- Construct from origin, yStar, distance - inline deltaData(const scalar delta); - - - // Member Functions - - // Access - - scalar delta() const - { - return delta_; - } - - - // Needed by FaceCellWave - - //- Check whether origin has been changed at all or - // still contains original (invalid) value. - template - inline bool valid(TrackingData& td) const; - - //- Check for identical geometrical data. - // Used for cyclics checking. - template - inline bool sameGeometry - ( - const polyMesh&, - const deltaData&, - const scalar, - TrackingData& td - ) const; - - //- Convert any absolute coordinates into relative to - // (patch)face centre - template - inline void leaveDomain - ( - const polyMesh&, - const polyPatch&, - const label patchFaceI, - const point& faceCentre, - TrackingData& td - ); - - //- Reverse of leaveDomain - template - inline void enterDomain - ( - const polyMesh&, - const polyPatch&, - const label patchFaceI, - const point& faceCentre, - TrackingData& td - ); - - //- Apply rotation matrix to any coordinates - template - inline void transform - ( - const polyMesh&, - const tensor&, - TrackingData& td - ); - - //- Influence of neighbouring face. - template - inline bool updateCell - ( - const polyMesh&, - const label thisCellI, - const label neighbourFaceI, - const deltaData& neighbourInfo, - const scalar tol, - TrackingData& td - ); - - //- Influence of neighbouring cell. - template - inline bool updateFace - ( - const polyMesh&, - const label thisFaceI, - const label neighbourCellI, - const deltaData& neighbourInfo, - const scalar tol, - TrackingData& td - ); - - //- Influence of different value on same face. - template - inline bool updateFace - ( - const polyMesh&, - const label thisFaceI, - const deltaData& neighbourInfo, - const scalar tol, - TrackingData& td - ); - - //- Same (like operator==) - template - inline bool equal(const deltaData&, TrackingData& td) const; - - // Member Operators - - // Needed for List IO - inline bool operator==(const deltaData&) const; - - inline bool operator!=(const deltaData&) const; - - // IOstream Operators - - friend Ostream& operator<< - ( - Ostream& os, - const deltaData& wDist - ) - { - return os << wDist.delta_; - } - - friend Istream& operator>>(Istream& is, deltaData& wDist) - { - return is >> wDist.delta_; - } - }; - void setChangedFaces ( @@ -262,6 +267,14 @@ public: }; +//- Data associated with deltaData type are contiguous +template<> +inline bool contiguous() +{ + return true; +} + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam diff --git a/tutorials/incompressible/simpleFoam/motorBike/constant/polyMesh/boundary b/tutorials/incompressible/simpleFoam/motorBike/constant/polyMesh/boundary deleted file mode 100644 index d8580cbd8f..0000000000 --- a/tutorials/incompressible/simpleFoam/motorBike/constant/polyMesh/boundary +++ /dev/null @@ -1,454 +0,0 @@ -/*--------------------------------*- C++ -*----------------------------------*\ -| ========= | | -| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: dev | -| \\ / A nd | Web: www.OpenFOAM.com | -| \\/ M anipulation | | -\*---------------------------------------------------------------------------*/ -FoamFile -{ - version 2.0; - format ascii; - class polyBoundaryMesh; - location "constant/polyMesh"; - object boundary; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -72 -( - frontAndBack - { - type patch; - nFaces 320; - startFace 955219; - } - inlet - { - type patch; - nFaces 64; - startFace 955539; - } - outlet - { - type patch; - nFaces 64; - startFace 955603; - } - lowerWall - { - type wall; - nFaces 5330; - startFace 955667; - } - upperWall - { - type patch; - nFaces 160; - startFace 960997; - } - motorBike_frt-fairing:001%1 - { - type wall; - nFaces 6595; - startFace 961157; - } - motorBike_windshield:002%2 - { - type wall; - nFaces 50; - startFace 967752; - } - motorBike_rr-wh-rim:005%5 - { - type wall; - nFaces 178; - startFace 967802; - } - motorBike_rr-wh-rim:010%10 - { - type wall; - nFaces 340; - startFace 967980; - } - motorBike_fr-wh-rim:011%11 - { - type wall; - nFaces 474; - startFace 968320; - } - motorBike_fr-wh-brake-disk:012%12 - { - type wall; - nFaces 54; - startFace 968794; - } - motorBike_frame:016-shadow%13 - { - type wall; - nFaces 128; - startFace 968848; - } - motorBike_rear-susp:014%14 - { - type wall; - nFaces 1080; - startFace 968976; - } - motorBike_rear-susp:014-shadow%15 - { - type wall; - nFaces 149; - startFace 970056; - } - motorBike_frame:016%16 - { - type wall; - nFaces 30; - startFace 970205; - } - motorBike_rr-wh-rim:005-shadow%17 - { - type wall; - nFaces 27; - startFace 970235; - } - motorBike_rr-wh-chain-hub:022%22 - { - type wall; - nFaces 141; - startFace 970262; - } - motorBike_rearseat%24 - { - type wall; - nFaces 432; - startFace 970403; - } - motorBike_frt-fairing%25 - { - type wall; - nFaces 626; - startFace 970835; - } - motorBike_windshield%26 - { - type wall; - nFaces 432; - startFace 971461; - } - motorBike_headlights%27 - { - type wall; - nFaces 161; - startFace 971893; - } - motorBike_driversseat%28 - { - type wall; - nFaces 367; - startFace 972054; - } - motorBike_rear-body%29 - { - type wall; - nFaces 2076; - startFace 972421; - } - motorBike_fuel-tank%30 - { - type wall; - nFaces 912; - startFace 974497; - } - motorBike_exhaust%31 - { - type wall; - nFaces 2390; - startFace 975409; - } - motorBike_rr-wh-rim%32 - { - type wall; - nFaces 1430; - startFace 977799; - } - motorBike_fr-mud-guard%33 - { - type wall; - nFaces 758; - startFace 979229; - } - motorBike_fr-wh-rim%34 - { - type wall; - nFaces 591; - startFace 979987; - } - motorBike_fr-wh-brake-disk%35 - { - type wall; - nFaces 534; - startFace 980578; - } - motorBike_fr-brake-caliper%36 - { - type wall; - nFaces 164; - startFace 981112; - } - motorBike_fr-wh-tyre%37 - { - type wall; - nFaces 1116; - startFace 981276; - } - motorBike_hbars%38 - { - type wall; - nFaces 535; - startFace 982392; - } - motorBike_fr-forks%39 - { - type wall; - nFaces 1143; - startFace 982927; - } - motorBike_chain%40 - { - type wall; - nFaces 474; - startFace 984070; - } - motorBike_rr-wh-tyre%41 - { - type wall; - nFaces 1786; - startFace 984544; - } - motorBike_square-dial%42 - { - type wall; - nFaces 6; - startFace 986330; - } - motorBike_round-dial%43 - { - type wall; - nFaces 17; - startFace 986336; - } - motorBike_dial-holder%44 - { - type wall; - nFaces 87; - startFace 986353; - } - motorBike_rear-susp%45 - { - type wall; - nFaces 1786; - startFace 986440; - } - motorBike_rear-brake-lights%46 - { - type wall; - nFaces 54; - startFace 988226; - } - motorBike_rear-light-bracket%47 - { - type wall; - nFaces 163; - startFace 988280; - } - motorBike_frame%48 - { - type wall; - nFaces 2040; - startFace 988443; - } - motorBike_rear-mud-guard%49 - { - type wall; - nFaces 798; - startFace 990483; - } - motorBike_rear-susp-spring-damp%50 - { - type wall; - nFaces 124; - startFace 991281; - } - motorBike_fairing-inner-plate%51 - { - type wall; - nFaces 446; - startFace 991405; - } - motorBike_clutch-housing%52 - { - type wall; - nFaces 964; - startFace 991851; - } - motorBike_radiator%53 - { - type wall; - nFaces 58; - startFace 992815; - } - motorBike_water-pipe%54 - { - type wall; - nFaces 103; - startFace 992873; - } - motorBike_water-pump%55 - { - type wall; - nFaces 74; - startFace 992976; - } - motorBike_engine%56 - { - type wall; - nFaces 2389; - startFace 993050; - } - motorBike_rear-shock-link%57 - { - type wall; - nFaces 28; - startFace 995439; - } - motorBike_rear-brake-fluid-pot-bracket%58 - { - type wall; - nFaces 59; - startFace 995467; - } - motorBike_rear-brake-fluid-pot%59 - { - type wall; - nFaces 53; - startFace 995526; - } - motorBike_footpeg%60 - { - type wall; - nFaces 87; - startFace 995579; - } - motorBike_rr-wh-chain-hub%61 - { - type wall; - nFaces 143; - startFace 995666; - } - motorBike_rear-brake-caliper%62 - { - type wall; - nFaces 142; - startFace 995809; - } - motorBike_rider-helmet%65 - { - type wall; - nFaces 583; - startFace 995951; - } - motorBike_rider-visor%66 - { - type wall; - nFaces 95; - startFace 996534; - } - motorBike_rider-boots%67 - { - type wall; - nFaces 1025; - startFace 996629; - } - motorBike_rider-gloves%68 - { - type wall; - nFaces 320; - startFace 997654; - } - motorBike_rider-body%69 - { - type wall; - nFaces 4555; - startFace 997974; - } - motorBike_frame:0%70 - { - type wall; - nFaces 37; - startFace 1002529; - } - motorBike_frt-fairing:001-shadow%74 - { - type wall; - nFaces 1301; - startFace 1002566; - } - motorBike_windshield-shadow%75 - { - type wall; - nFaces 97; - startFace 1003867; - } - motorBike_fr-mud-guard-shadow%81 - { - type wall; - nFaces 140; - startFace 1003964; - } - motorBike_fr-wh-brake-disk-shadow%83 - { - type wall; - nFaces 76; - startFace 1004104; - } - motorBike_rear-mud-guard-shadow%84 - { - type wall; - nFaces 137; - startFace 1004180; - } - motorBike_rear-susp-spring-damp-shadow%85 - { - type wall; - nFaces 15; - startFace 1004317; - } - motorBike_radiator-shadow%86 - { - type wall; - nFaces 4; - startFace 1004332; - } - motorBike_rear-shock-link-shadow%87 - { - type wall; - nFaces 8; - startFace 1004336; - } - motorBike_rear-brake-fluid-pot-bracket-shadow%88 - { - type wall; - nFaces 5; - startFace 1004344; - } - motorBike_rr-wh-chain-hub-shadow%89 - { - type wall; - nFaces 27; - startFace 1004349; - } -) - -// ************************************************************************* //