mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
Merge branch 'master' of /home/dm4/OpenFOAM/OpenFOAM-dev
This commit is contained in:
@ -26,21 +26,18 @@ Application
|
||||
|
||||
Description
|
||||
Combination of heatConductionFoam and buoyantFoam for conjugate heat
|
||||
transfer between a solid region and fluid region. It includes
|
||||
porous media in the primary fluid region treated explicitly.
|
||||
transfer between solid regions and fluid regions. Both regions include
|
||||
the fvOptions framework.
|
||||
|
||||
It handles secondary fluid or solid circuits which can be coupled
|
||||
thermally with the main fluid region. i.e radiators, etc.
|
||||
|
||||
The secondary fluid region is
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "fvCFD.H"
|
||||
#include "rhoThermo.H"
|
||||
#include "turbulenceModel.H"
|
||||
#include "fixedGradientFvPatchFields.H"
|
||||
#include "zeroGradientFvPatchFields.H"
|
||||
#include "regionProperties.H"
|
||||
#include "compressibleCourantNo.H"
|
||||
#include "solidRegionDiffNo.H"
|
||||
|
||||
@ -30,7 +30,7 @@ Description
|
||||
|
||||
Sub-models include:
|
||||
- turbulence modelling, i.e. laminar, RAS or LES
|
||||
- run-time selectable finitie volume options, e.g. MRF, explicit porosity
|
||||
- run-time selectable finite volume options, e.g. MRF, explicit porosity
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
@ -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-2013 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -117,6 +117,30 @@ int main(int argc, char *argv[])
|
||||
<< " agglomerated size : "
|
||||
<< returnReduce(coarseSize, sumOp<label>()) << endl;
|
||||
|
||||
labelList newAddr;
|
||||
label newCoarseSize = 0;
|
||||
bool ok = GAMGAgglomeration::checkRestriction
|
||||
(
|
||||
newAddr,
|
||||
newCoarseSize,
|
||||
|
||||
agglom.meshLevel(level).lduAddr(),
|
||||
addr,
|
||||
coarseSize
|
||||
);
|
||||
if (!ok)
|
||||
{
|
||||
WarningIn(args.executable())
|
||||
<< "At level " << level
|
||||
<< " there are " << coarseSize
|
||||
<< " agglomerated cells but " << newCoarseSize
|
||||
<< " disconnected regions" << endl
|
||||
<< " This means that some agglomerations (coarse cells)"
|
||||
<< " consist of multiple disconnected regions."
|
||||
<< endl;
|
||||
}
|
||||
|
||||
|
||||
forAll(addr, fineI)
|
||||
{
|
||||
const labelList& cellLabels = coarseToCell[fineI];
|
||||
|
||||
@ -116,17 +116,19 @@ int main(int argc, char *argv[])
|
||||
squareMatrix[2][1] = -43;
|
||||
squareMatrix[2][2] = 98;
|
||||
|
||||
const scalarSquareMatrix squareMatrixCopy = squareMatrix;
|
||||
Info<< nl << "Square Matrix = " << squareMatrix << endl;
|
||||
|
||||
scalarDiagonalMatrix rhs(3, 0);
|
||||
rhs[0] = 1;
|
||||
rhs[1] = 2;
|
||||
rhs[2] = 3;
|
||||
Info<< "det = " << det(squareMatrixCopy) << endl;
|
||||
|
||||
LUsolve(squareMatrix, rhs);
|
||||
labelList rhs(3, 0);
|
||||
label sign;
|
||||
LUDecompose(squareMatrix, rhs, sign);
|
||||
|
||||
Info<< "Decomposition = " << squareMatrix << endl;
|
||||
Info<< "Solution = " << rhs << endl;
|
||||
Info<< "Pivots = " << rhs << endl;
|
||||
Info<< "Sign = " << sign << endl;
|
||||
Info<< "det = " << detDecomposed(squareMatrix, sign) << endl;
|
||||
}
|
||||
|
||||
Info<< "\nEnd\n" << endl;
|
||||
|
||||
@ -12,7 +12,7 @@ wmake snappyHexMesh
|
||||
if [ -d "$CGAL_ARCH_PATH" ]
|
||||
then
|
||||
foamyHexMesh/Allwmake
|
||||
foamyHex2DMesh/Allwmake
|
||||
foamyQuadMesh/Allwmake
|
||||
fi
|
||||
|
||||
# ----------------------------------------------------------------- end-of-file
|
||||
|
||||
@ -194,12 +194,24 @@ void Foam::conformalVoronoiMesh::insertPoints
|
||||
}
|
||||
}
|
||||
|
||||
label preReinsertionSize(number_of_vertices());
|
||||
|
||||
rangeInsertWithInfo
|
||||
(
|
||||
vertices.begin(),
|
||||
vertices.end(),
|
||||
true
|
||||
false
|
||||
);
|
||||
|
||||
const label nReinserted = returnReduce
|
||||
(
|
||||
label(number_of_vertices()) - preReinsertionSize,
|
||||
sumOp<label>()
|
||||
);
|
||||
|
||||
Info<< " Reinserted " << nReinserted << " vertices out of "
|
||||
<< returnReduce(vertices.size(), sumOp<label>())
|
||||
<< endl;
|
||||
}
|
||||
|
||||
|
||||
@ -787,8 +799,8 @@ Foam::face Foam::conformalVoronoiMesh::buildDualFace
|
||||
<< "Dual face uses circumcenter defined by a "
|
||||
<< "Delaunay tetrahedron with no internal "
|
||||
<< "or boundary points. Defining Delaunay edge ends: "
|
||||
<< topoint(vA->point()) << " "
|
||||
<< topoint(vB->point()) << nl
|
||||
<< vA->info() << " "
|
||||
<< vB->info() << nl
|
||||
<< exit(FatalError);
|
||||
}
|
||||
|
||||
@ -1630,6 +1642,8 @@ void Foam::conformalVoronoiMesh::move()
|
||||
);
|
||||
}
|
||||
|
||||
DynamicList<Vertex_handle> pointsToRemove;
|
||||
|
||||
for
|
||||
(
|
||||
Delaunay::Finite_vertices_iterator vit = finite_vertices_begin();
|
||||
@ -1640,15 +1654,18 @@ void Foam::conformalVoronoiMesh::move()
|
||||
if
|
||||
(
|
||||
(vit->internalPoint() || vit->internalBoundaryPoint())
|
||||
&& !vit->referred()
|
||||
//&& !vit->referred()
|
||||
)
|
||||
{
|
||||
bool inside = geometryToConformTo_.inside
|
||||
(
|
||||
topoint(vit->point())
|
||||
);
|
||||
const Foam::point& pt = topoint(vit->point());
|
||||
|
||||
if (!inside)
|
||||
bool inside = geometryToConformTo_.inside(pt);
|
||||
|
||||
if
|
||||
(
|
||||
!inside
|
||||
|| !geometryToConformTo_.globalBounds().contains(pt)
|
||||
)
|
||||
{
|
||||
if
|
||||
(
|
||||
@ -1658,13 +1675,16 @@ void Foam::conformalVoronoiMesh::move()
|
||||
{
|
||||
str().write(topoint(vit->point()));
|
||||
}
|
||||
remove(vit);
|
||||
|
||||
pointsToRemove.append(vit);
|
||||
internalPtIsOutside++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Info<< " " << internalPtIsOutside
|
||||
remove(pointsToRemove.begin(), pointsToRemove.end());
|
||||
|
||||
Info<< " " << returnReduce(internalPtIsOutside, sumOp<label>())
|
||||
<< " internal points were inserted outside the domain. "
|
||||
<< "They have been removed." << endl;
|
||||
}
|
||||
|
||||
@ -317,7 +317,7 @@ private:
|
||||
void insertPoints
|
||||
(
|
||||
List<Vb>& vertices,
|
||||
bool distribute = true
|
||||
bool distribute
|
||||
);
|
||||
|
||||
//- Create a point-pair at a ppDist distance either side of
|
||||
@ -764,6 +764,7 @@ private:
|
||||
pointIndexHitAndFeatureDynList& featureEdgeHits,
|
||||
DynamicList<label>& surfaceToTreeShape,
|
||||
DynamicList<label>& edgeToTreeShape,
|
||||
Map<scalar>& surfacePtToEdgePtDist,
|
||||
bool firstPass
|
||||
) const;
|
||||
|
||||
|
||||
@ -2458,6 +2458,54 @@ void Foam::conformalVoronoiMesh::createFacesOwnerNeighbourAndPatches
|
||||
|| (vB->internalOrBoundaryPoint() && !vB->referred())
|
||||
)
|
||||
{
|
||||
if
|
||||
(
|
||||
(vA->internalPoint() && vB->externalBoundaryPoint())
|
||||
|| (vB->internalPoint() && vA->externalBoundaryPoint())
|
||||
)
|
||||
{
|
||||
Cell_circulator ccStart = incident_cells(*eit);
|
||||
Cell_circulator cc1 = ccStart;
|
||||
Cell_circulator cc2 = cc1;
|
||||
|
||||
cc2++;
|
||||
|
||||
bool skipEdge = false;
|
||||
|
||||
do
|
||||
{
|
||||
if
|
||||
(
|
||||
cc1->hasFarPoint() || cc2->hasFarPoint()
|
||||
|| is_infinite(cc1) || is_infinite(cc2)
|
||||
)
|
||||
{
|
||||
Pout<< "Ignoring edge between internal and external: "
|
||||
<< vA->info()
|
||||
<< vB->info();
|
||||
|
||||
skipEdge = true;
|
||||
break;
|
||||
}
|
||||
|
||||
cc1++;
|
||||
cc2++;
|
||||
|
||||
} while (cc1 != ccStart);
|
||||
|
||||
|
||||
// Do not create faces if the internal point is outside!
|
||||
// This occurs because the internal point is not determined to
|
||||
// be outside in the inside/outside test. This is most likely
|
||||
// due to the triangle.nearestPointClassify test not returning
|
||||
// edge/point as the nearest type.
|
||||
|
||||
if (skipEdge)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
face newDualFace = buildDualFace(eit);
|
||||
|
||||
if (newDualFace.size() >= 3)
|
||||
|
||||
@ -298,6 +298,8 @@ void Foam::conformalVoronoiMesh::buildSurfaceConformation()
|
||||
DynamicList<label> edgeToTreeShape(AtoV/4);
|
||||
DynamicList<label> surfaceToTreeShape(AtoV);
|
||||
|
||||
Map<scalar> surfacePtToEdgePtDist(AtoV/4);
|
||||
|
||||
for
|
||||
(
|
||||
Delaunay::Finite_vertices_iterator vit = finite_vertices_begin();
|
||||
@ -332,6 +334,7 @@ void Foam::conformalVoronoiMesh::buildSurfaceConformation()
|
||||
featureEdgeHits,
|
||||
surfaceToTreeShape,
|
||||
edgeToTreeShape,
|
||||
surfacePtToEdgePtDist,
|
||||
true
|
||||
);
|
||||
}
|
||||
@ -463,6 +466,8 @@ void Foam::conformalVoronoiMesh::buildSurfaceConformation()
|
||||
DynamicList<label> surfaceToTreeShape(AtoV/2);
|
||||
DynamicList<label> edgeToTreeShape(AtoV/4);
|
||||
|
||||
Map<scalar> surfacePtToEdgePtDist;
|
||||
|
||||
for
|
||||
(
|
||||
Delaunay::Finite_vertices_iterator vit = finite_vertices_begin();
|
||||
@ -507,6 +512,7 @@ void Foam::conformalVoronoiMesh::buildSurfaceConformation()
|
||||
featureEdgeHits,
|
||||
surfaceToTreeShape,
|
||||
edgeToTreeShape,
|
||||
surfacePtToEdgePtDist,
|
||||
false
|
||||
);
|
||||
}
|
||||
@ -552,6 +558,7 @@ void Foam::conformalVoronoiMesh::buildSurfaceConformation()
|
||||
featureEdgeHits,
|
||||
surfaceToTreeShape,
|
||||
edgeToTreeShape,
|
||||
surfacePtToEdgePtDist,
|
||||
false
|
||||
);
|
||||
}
|
||||
@ -569,7 +576,20 @@ void Foam::conformalVoronoiMesh::buildSurfaceConformation()
|
||||
Vertex_handle vA = c->vertex(eit->second);
|
||||
Vertex_handle vB = c->vertex(eit->third);
|
||||
|
||||
if (vA->referred() || vB->referred())
|
||||
if
|
||||
(
|
||||
vA->referred()
|
||||
|| vB->referred()
|
||||
)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if
|
||||
(
|
||||
(vA->internalPoint() && vA->referred())
|
||||
|| (vB->internalPoint() && vB->referred())
|
||||
)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@ -617,6 +637,7 @@ void Foam::conformalVoronoiMesh::buildSurfaceConformation()
|
||||
featureEdgeHits,
|
||||
surfaceToTreeShape,
|
||||
edgeToTreeShape,
|
||||
surfacePtToEdgePtDist,
|
||||
false
|
||||
);
|
||||
}
|
||||
@ -2076,6 +2097,7 @@ void Foam::conformalVoronoiMesh::addSurfaceAndEdgeHits
|
||||
pointIndexHitAndFeatureDynList& featureEdgeHits,
|
||||
DynamicList<label>& surfaceToTreeShape,
|
||||
DynamicList<label>& edgeToTreeShape,
|
||||
Map<scalar>& surfacePtToEdgePtDist,
|
||||
bool firstPass
|
||||
) const
|
||||
{
|
||||
@ -2182,55 +2204,47 @@ void Foam::conformalVoronoiMesh::addSurfaceAndEdgeHits
|
||||
(
|
||||
pointIndexHitAndFeature(edHit, featureHit)
|
||||
);
|
||||
|
||||
// Info<< "Add " << existingEdgeLocations_.size() - 1
|
||||
// << " " << magSqr(edPt - surfPt) << endl;
|
||||
|
||||
surfacePtToEdgePtDist.insert
|
||||
(
|
||||
existingEdgeLocations_.size() - 1,
|
||||
magSqr(edPt - surfPt)
|
||||
);
|
||||
}
|
||||
else if (firstPass)
|
||||
{
|
||||
label hitIndex = nearestEdgeHit.index();
|
||||
|
||||
// Info<< "Close to " << nearestEdgeHit << endl;
|
||||
|
||||
if
|
||||
(
|
||||
magSqr(edPt - surfPt)
|
||||
< surfacePtToEdgePtDist[hitIndex]
|
||||
)
|
||||
{
|
||||
featureEdgeHits[hitIndex] =
|
||||
pointIndexHitAndFeature(edHit, featureHit);
|
||||
|
||||
existingEdgeLocations_[hitIndex] =
|
||||
edHit.hitPoint();
|
||||
surfacePtToEdgePtDist[hitIndex] =
|
||||
magSqr(edPt - surfPt);
|
||||
|
||||
// Change edge location in featureEdgeHits
|
||||
// remove index from edge tree
|
||||
// reinsert new point into tree
|
||||
edgeLocationTreePtr_().remove(hitIndex);
|
||||
edgeLocationTreePtr_().insert
|
||||
(
|
||||
hitIndex,
|
||||
hitIndex + 1
|
||||
);
|
||||
}
|
||||
}
|
||||
// else if (firstPass)
|
||||
// {
|
||||
// label hitIndex = nearestEdgeHit.index();
|
||||
//
|
||||
// // Calc new edge location
|
||||
//// Foam::point newPt =
|
||||
//// 0.5
|
||||
//// *(
|
||||
//// nearestEdgeHit.hitPoint()
|
||||
//// + edHit.hitPoint()
|
||||
//// );
|
||||
//
|
||||
// pointIndexHit pHitOld =
|
||||
// edgeLocationTreePtr_().findNearest
|
||||
// (
|
||||
// nearestEdgeHit.hitPoint(), GREAT
|
||||
// );
|
||||
//
|
||||
// pointIndexHit pHitNew =
|
||||
// edgeLocationTreePtr_().findNearest
|
||||
// (
|
||||
// edHit.hitPoint(), GREAT
|
||||
// );
|
||||
//
|
||||
// if
|
||||
// (
|
||||
// pHitNew.hitPoint() - pHitOld.hitPoint()
|
||||
// )
|
||||
// {
|
||||
// edHit.setPoint(pHit.hitPoint());
|
||||
//
|
||||
// featureEdgeHits[hitIndex] =
|
||||
// pointIndexHitAndFeature(edHit, featureHit);
|
||||
//
|
||||
// existingEdgeLocations_[hitIndex] =
|
||||
// edHit.hitPoint();
|
||||
//
|
||||
// // Change edge location in featureEdgeHits
|
||||
// // remove index from edge tree
|
||||
// // reinsert new point into tree
|
||||
// edgeLocationTreePtr_().remove(hitIndex);
|
||||
// edgeLocationTreePtr_().insert
|
||||
// (
|
||||
// hitIndex,
|
||||
// hitIndex + 1
|
||||
// );
|
||||
// }
|
||||
// }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -873,17 +873,7 @@ void Foam::conformalVoronoiMesh::reinsertFeaturePoints(bool distribute)
|
||||
{
|
||||
Info<< nl << "Reinserting stored feature points" << endl;
|
||||
|
||||
label preReinsertionSize(number_of_vertices());
|
||||
|
||||
insertPoints(featureVertices_, distribute);
|
||||
|
||||
const label nReinserted = returnReduce
|
||||
(
|
||||
label(number_of_vertices()) - preReinsertionSize,
|
||||
sumOp<label>()
|
||||
);
|
||||
|
||||
Info<< " Reinserted " << nReinserted << " vertices" << endl;
|
||||
}
|
||||
|
||||
|
||||
@ -1458,8 +1448,6 @@ void Foam::conformalVoronoiMesh::createFeaturePoints(DynamicList<Vb>& pts)
|
||||
|
||||
forAll(feMeshes, i)
|
||||
{
|
||||
Info<< indent << "Edge mesh = " << feMeshes[i].name() << nl << endl;
|
||||
|
||||
const extendedFeatureEdgeMesh& feMesh(feMeshes[i]);
|
||||
|
||||
for
|
||||
|
||||
@ -101,7 +101,9 @@ void Foam::conformalVoronoiMesh::drawDelaunayCell
|
||||
// Supply offset as tet number
|
||||
offset *= 4;
|
||||
|
||||
os << "# cell index: " << label(c->cellIndex()) << endl;
|
||||
os << "# cell index: " << label(c->cellIndex())
|
||||
<< " INT_MIN = " << INT_MIN
|
||||
<< endl;
|
||||
|
||||
os << "# circumradius "
|
||||
<< mag(c->dual() - topoint(c->vertex(0)->point()))
|
||||
@ -112,7 +114,15 @@ void Foam::conformalVoronoiMesh::drawDelaunayCell
|
||||
os << "# index / type / procIndex: "
|
||||
<< label(c->vertex(i)->index()) << " "
|
||||
<< label(c->vertex(i)->type()) << " "
|
||||
<< label(c->vertex(i)->procIndex()) << endl;
|
||||
<< label(c->vertex(i)->procIndex())
|
||||
<< (is_infinite(c->vertex(i)) ? " # This vertex is infinite!" : "")
|
||||
<<
|
||||
(
|
||||
c->vertex(i)->uninitialised()
|
||||
? " # This vertex is uninitialised!"
|
||||
: ""
|
||||
)
|
||||
<< endl;
|
||||
|
||||
meshTools::writeOBJ(os, topoint(c->vertex(i)->point()));
|
||||
}
|
||||
|
||||
@ -113,13 +113,12 @@ Foam::Ostream& Foam::operator<<
|
||||
const CGAL::indexedVertex<Gt, Vb>& p
|
||||
)
|
||||
{
|
||||
os << p.point()
|
||||
<< p.index()
|
||||
<< static_cast<int>(p.type())
|
||||
<< p.procIndex()
|
||||
<< p.alignment()
|
||||
<< p.targetCellSize()
|
||||
<< token::SPACE
|
||||
os << p.point() << ' '
|
||||
<< p.index() << ' '
|
||||
<< static_cast<int>(p.type()) << ' '
|
||||
<< p.procIndex() << ' '
|
||||
<< p.alignment() << ' '
|
||||
<< p.targetCellSize() << ' '
|
||||
<< static_cast<int>(p.fixed());
|
||||
|
||||
return os;
|
||||
|
||||
@ -706,8 +706,8 @@ Foam::Field<bool> Foam::conformationSurfaces::wellInside
|
||||
// Info<< surface.name() << " = "
|
||||
// << volumeType::names[surfaceVolumeTests[s][i]] << endl;
|
||||
|
||||
//if (surfaceVolumeTests[s][i] == volumeType::OUTSIDE)
|
||||
if (surfaceVolumeTests[s][i] != volumeType::INSIDE)
|
||||
if (surfaceVolumeTests[s][i] == volumeType::OUTSIDE)
|
||||
// if (surfaceVolumeTests[s][i] != volumeType::INSIDE)
|
||||
{
|
||||
insidePoint[i] = false;
|
||||
|
||||
|
||||
@ -56,7 +56,7 @@ int main(int argc, char *argv[])
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"foamyHexMeshDict",
|
||||
args.executable() + "Dict",
|
||||
runTime.system(),
|
||||
runTime,
|
||||
IOobject::MUST_READ_IF_MODIFIED,
|
||||
|
||||
@ -7,6 +7,6 @@ insertSurfaceNearPointPairs.C
|
||||
insertBoundaryConformPointPairs.C
|
||||
CV2DIO.C
|
||||
shortEdgeFilter2D.C
|
||||
foamyHex2DMesh.C
|
||||
foamyQuadMesh.C
|
||||
|
||||
EXE = $(FOAM_APPBIN)/foamyHex2DMesh
|
||||
EXE = $(FOAM_APPBIN)/foamyQuadMesh
|
||||
@ -22,7 +22,7 @@ License
|
||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Application
|
||||
foamyHex2DMesh
|
||||
foamyQuadMesh
|
||||
|
||||
Description
|
||||
Conformal-Voronoi 2D extruding automatic mesher with grid or read
|
||||
@ -11,31 +11,18 @@ FoamFile
|
||||
format ascii;
|
||||
class dictionary;
|
||||
location "system";
|
||||
object foamyHex2DMeshDict;
|
||||
object foamyQuadMeshDict;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
|
||||
geometry
|
||||
{
|
||||
laurence_clean_preciser.stl
|
||||
surfaceFile.stl
|
||||
{
|
||||
name laurence_clean_preciser;
|
||||
type closedTriSurfaceMesh;
|
||||
//type triSurfaceMesh;
|
||||
name surfaceFile;
|
||||
type triSurfaceMesh;
|
||||
}
|
||||
// refinementBox
|
||||
// {
|
||||
// type searchableBox;
|
||||
// min (-0.5 0.35 -1000);
|
||||
// max (-0.5 0.35 1000);
|
||||
// }
|
||||
// refinementSphere
|
||||
// {
|
||||
// type searchableSphere;
|
||||
// centre (0.85 0.4 0.0);
|
||||
// radius 0.01;
|
||||
// }
|
||||
}
|
||||
|
||||
surfaceConformation
|
||||
@ -66,10 +53,10 @@ surfaceConformation
|
||||
|
||||
geometryToConformTo
|
||||
{
|
||||
laurence_clean_preciser
|
||||
surfaceFile
|
||||
{
|
||||
featureMethod extendedFeatureEdgeMesh;
|
||||
extendedFeatureEdgeMesh "laurence_clean_preciser.extendedFeatureEdgeMesh";
|
||||
extendedFeatureEdgeMesh "surfaceFile.extendedFeatureEdgeMesh";
|
||||
}
|
||||
}
|
||||
|
||||
@ -94,7 +81,7 @@ motionControl
|
||||
|
||||
cellSizeControlGeometry
|
||||
{
|
||||
laurence_clean_preciser
|
||||
surfaceFile
|
||||
{
|
||||
priority 1;
|
||||
mode bothSides;
|
||||
@ -653,6 +653,36 @@ int main(int argc, char *argv[])
|
||||
Info<< "Checking self-intersection." << endl;
|
||||
|
||||
triSurfaceSearch querySurf(surf);
|
||||
|
||||
//{
|
||||
// OBJstream intStream("selfInter2.obj");
|
||||
// const indexedOctree<treeDataTriSurface>& tree = querySurf.tree();
|
||||
// forAll(surf.edges(), edgeI)
|
||||
// {
|
||||
// const edge& e = surf.edges()[edgeI];
|
||||
//
|
||||
// pointIndexHit hitInfo
|
||||
// (
|
||||
// tree.findLine
|
||||
// (
|
||||
// surf.points()[surf.meshPoints()[e[0]]],
|
||||
// surf.points()[surf.meshPoints()[e[1]]],
|
||||
// treeDataTriSurface::findSelfIntersectOp
|
||||
// (
|
||||
// tree,
|
||||
// edgeI
|
||||
// )
|
||||
// )
|
||||
// );
|
||||
//
|
||||
// if (hitInfo.hit())
|
||||
// {
|
||||
// Pout<< "Found hit:" << hitInfo.hitPoint() << endl;
|
||||
// intStream.write(hitInfo.hitPoint());
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
||||
surfaceIntersection inter(querySurf);
|
||||
|
||||
if (inter.cutEdges().empty() && inter.cutPoints().empty())
|
||||
|
||||
@ -222,14 +222,6 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
|
||||
Info<< "Writing surface to " << outFileName << " ..." << endl;
|
||||
|
||||
// meshedSurface
|
||||
// (
|
||||
// xferMove(newPoints),
|
||||
// xferCopy(surf1.localFaces()),
|
||||
// xferCopy(surf1.surfZones())
|
||||
// ).write(outFileName);
|
||||
|
||||
surf1.write(outFileName);
|
||||
|
||||
Info<< "End\n" << endl;
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -123,6 +123,19 @@ void ${typeName}FunctionObject::end()
|
||||
}
|
||||
|
||||
|
||||
void ${typeName}FunctionObject::timeSet()
|
||||
{
|
||||
if (${verbose:-false})
|
||||
{
|
||||
Info<<"timeSet ${typeName} sha1: ${SHA1sum}\n";
|
||||
}
|
||||
|
||||
//{{{ begin codeTime
|
||||
${codeTimeSet}
|
||||
//}}} end code
|
||||
}
|
||||
|
||||
|
||||
void ${typeName}FunctionObject::write()
|
||||
{
|
||||
if (${verbose:-false})
|
||||
|
||||
@ -127,6 +127,9 @@ public:
|
||||
//- Write, execute the "writeCalls"
|
||||
virtual void write();
|
||||
|
||||
//- Called when time was set at the end of the Time::operator++
|
||||
virtual void timeSet();
|
||||
|
||||
//- Update for changes of mesh
|
||||
virtual void updateMesh(const mapPolyMesh&)
|
||||
{}
|
||||
|
||||
@ -1220,6 +1220,7 @@ Foam::Time& Foam::Time::operator++()
|
||||
writeOnce_ = false;
|
||||
}
|
||||
|
||||
functionObjects_.timeSet();
|
||||
}
|
||||
|
||||
return *this;
|
||||
|
||||
@ -618,11 +618,11 @@ bool Foam::Time::writeObject
|
||||
)
|
||||
);
|
||||
|
||||
timeDict.add("value", value());
|
||||
timeDict.add("value", timeToUserTime(value()));
|
||||
timeDict.add("name", string(tmName));
|
||||
timeDict.add("index", timeIndex_);
|
||||
timeDict.add("deltaT", deltaT_);
|
||||
timeDict.add("deltaT0", deltaT0_);
|
||||
timeDict.add("deltaT", timeToUserTime(deltaT_));
|
||||
timeDict.add("deltaT0", timeToUserTime(deltaT0_));
|
||||
|
||||
timeDict.regIOobject::writeObject(fmt, ver, cmp);
|
||||
bool writeOK = objectRegistry::writeObject(fmt, ver, cmp);
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -202,6 +202,18 @@ bool Foam::OutputFilterFunctionObject<OutputFilter>::end()
|
||||
}
|
||||
|
||||
|
||||
template<class OutputFilter>
|
||||
bool Foam::OutputFilterFunctionObject<OutputFilter>::timeSet()
|
||||
{
|
||||
if (active())
|
||||
{
|
||||
ptr_->timeSet();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
template<class OutputFilter>
|
||||
bool Foam::OutputFilterFunctionObject<OutputFilter>::read
|
||||
(
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -201,6 +201,8 @@ public:
|
||||
//- Called when Time::run() determines that the time-loop exits
|
||||
virtual bool end();
|
||||
|
||||
//- Called when time was set at the end of the Time::operator++
|
||||
virtual bool timeSet();
|
||||
|
||||
//- Read and set the function object if its data have changed
|
||||
virtual bool read(const dictionary&);
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -120,6 +120,12 @@ bool Foam::functionObject::end()
|
||||
}
|
||||
|
||||
|
||||
bool Foam::functionObject::timeSet()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
Foam::autoPtr<Foam::functionObject> Foam::functionObject::iNew::operator()
|
||||
(
|
||||
const word& name,
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -157,6 +157,9 @@ public:
|
||||
// By default it simply calls execute().
|
||||
virtual bool end();
|
||||
|
||||
//- Called when time was set at the end of the Time::operator++
|
||||
virtual bool timeSet();
|
||||
|
||||
//- Read and set the function object if its data have changed
|
||||
virtual bool read(const dictionary&) = 0;
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -190,6 +190,27 @@ bool Foam::functionObjectList::end()
|
||||
}
|
||||
|
||||
|
||||
bool Foam::functionObjectList::timeSet()
|
||||
{
|
||||
bool ok = true;
|
||||
|
||||
if (execution_)
|
||||
{
|
||||
if (!updated_)
|
||||
{
|
||||
read();
|
||||
}
|
||||
|
||||
forAll(*this, objectI)
|
||||
{
|
||||
ok = operator[](objectI).timeSet() && ok;
|
||||
}
|
||||
}
|
||||
|
||||
return ok;
|
||||
}
|
||||
|
||||
|
||||
bool Foam::functionObjectList::read()
|
||||
{
|
||||
bool ok = true;
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -163,6 +163,9 @@ public:
|
||||
//- Called when Time::run() determines that the time-loop exits
|
||||
virtual bool end();
|
||||
|
||||
//- Called when time was set at the end of the Time::operator++
|
||||
virtual bool timeSet();
|
||||
|
||||
//- Read and set the function objects if their data have changed
|
||||
virtual bool read();
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -27,6 +27,7 @@ Description
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "scalarField.H"
|
||||
#include "unitConversion.H"
|
||||
|
||||
#define TEMPLATE
|
||||
#include "FieldFunctionsM.C"
|
||||
@ -155,6 +156,11 @@ UNARY_FUNCTION(scalar, scalar, j1)
|
||||
UNARY_FUNCTION(scalar, scalar, y0)
|
||||
UNARY_FUNCTION(scalar, scalar, y1)
|
||||
|
||||
UNARY_FUNCTION(scalar, scalar, degToRad)
|
||||
UNARY_FUNCTION(scalar, scalar, radToDeg)
|
||||
UNARY_FUNCTION(scalar, scalar, atmToPa)
|
||||
UNARY_FUNCTION(scalar, scalar, paToAtm)
|
||||
|
||||
|
||||
#define BesselFunc(func) \
|
||||
void func(scalarField& res, const int n, const UList<scalar>& sf) \
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -130,6 +130,10 @@ UNARY_FUNCTION(scalar, scalar, j1)
|
||||
UNARY_FUNCTION(scalar, scalar, y0)
|
||||
UNARY_FUNCTION(scalar, scalar, y1)
|
||||
|
||||
UNARY_FUNCTION(scalar, scalar, degToRad)
|
||||
UNARY_FUNCTION(scalar, scalar, radToDeg)
|
||||
UNARY_FUNCTION(scalar, scalar, atmToPa)
|
||||
UNARY_FUNCTION(scalar, scalar, paToAtm)
|
||||
|
||||
#define BesselFunc(func) \
|
||||
void func(scalarField& Res, const int n, const UList<scalar>& sf); \
|
||||
|
||||
73
src/OpenFOAM/matrices/SquareMatrix/SquareMatrix.C
Normal file
73
src/OpenFOAM/matrices/SquareMatrix/SquareMatrix.C
Normal file
@ -0,0 +1,73 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2013 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "SquareMatrix.H"
|
||||
#include "labelList.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
template<class Type>
|
||||
Foam::scalar Foam::detDecomposed
|
||||
(
|
||||
const SquareMatrix<Type>& matrix,
|
||||
const label sign
|
||||
)
|
||||
{
|
||||
scalar diagProduct = 1.0;
|
||||
|
||||
for (label i = 0; i < matrix.n(); ++i)
|
||||
{
|
||||
diagProduct *= matrix[i][i];
|
||||
}
|
||||
|
||||
return sign*diagProduct;
|
||||
}
|
||||
|
||||
|
||||
template<class Type>
|
||||
Foam::scalar Foam::det(const SquareMatrix<Type>& matrix)
|
||||
{
|
||||
SquareMatrix<Type> matrixTmp = matrix;
|
||||
|
||||
labelList pivotIndices(matrix.n());
|
||||
label sign;
|
||||
LUDecompose(matrixTmp, pivotIndices, sign);
|
||||
|
||||
return detDecomposed(matrixTmp, sign);
|
||||
}
|
||||
|
||||
|
||||
template<class Type>
|
||||
Foam::scalar Foam::det(SquareMatrix<Type>& matrix)
|
||||
{
|
||||
labelList pivotIndices(matrix.n());
|
||||
label sign;
|
||||
LUDecompose(matrix, pivotIndices, sign);
|
||||
|
||||
return detDecomposed(matrix, sign);
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
@ -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-2013 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -81,6 +81,21 @@ public:
|
||||
};
|
||||
|
||||
|
||||
// Global functions
|
||||
|
||||
//- Return the LU decomposed SquareMatrix det
|
||||
template<class Type>
|
||||
scalar detDecomposed(const SquareMatrix<Type>&, const label sign);
|
||||
|
||||
//- Return the SquareMatrix det
|
||||
template<class Type>
|
||||
scalar det(const SquareMatrix<Type>&);
|
||||
|
||||
//- Return the SquareMatrix det and the LU decomposition in the original matrix
|
||||
template<class Type>
|
||||
scalar det(SquareMatrix<Type>&);
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
@ -91,6 +106,12 @@ public:
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#ifdef NoRepository
|
||||
# include "SquareMatrix.C"
|
||||
#endif
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -535,4 +535,123 @@ const Foam::labelListListList& Foam::GAMGAgglomeration::boundaryFaceMap
|
||||
}
|
||||
|
||||
|
||||
bool Foam::GAMGAgglomeration::checkRestriction
|
||||
(
|
||||
labelList& newRestrict,
|
||||
label& nNewCoarse,
|
||||
const lduAddressing& fineAddressing,
|
||||
const labelUList& restrict,
|
||||
const label nCoarse
|
||||
)
|
||||
{
|
||||
if (fineAddressing.size() != restrict.size())
|
||||
{
|
||||
FatalErrorIn
|
||||
(
|
||||
"checkRestriction(..)"
|
||||
) << "nCells:" << fineAddressing.size()
|
||||
<< " agglom:" << restrict.size()
|
||||
<< abort(FatalError);
|
||||
}
|
||||
|
||||
// Seed (master) for every region
|
||||
labelList master(identity(fineAddressing.size()));
|
||||
|
||||
// Now loop and transport master through region
|
||||
const labelUList& lower = fineAddressing.lowerAddr();
|
||||
const labelUList& upper = fineAddressing.upperAddr();
|
||||
|
||||
while (true)
|
||||
{
|
||||
label nChanged = 0;
|
||||
|
||||
forAll(lower, faceI)
|
||||
{
|
||||
label own = lower[faceI];
|
||||
label nei = upper[faceI];
|
||||
|
||||
if (restrict[own] == restrict[nei])
|
||||
{
|
||||
// coarse-mesh-internal face
|
||||
|
||||
if (master[own] < master[nei])
|
||||
{
|
||||
master[nei] = master[own];
|
||||
nChanged++;
|
||||
}
|
||||
else if (master[own] > master[nei])
|
||||
{
|
||||
master[own] = master[nei];
|
||||
nChanged++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
reduce(nChanged, sumOp<label>());
|
||||
|
||||
if (nChanged == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Count number of regions/masters per coarse cell
|
||||
labelListList coarseToMasters(nCoarse);
|
||||
nNewCoarse = 0;
|
||||
forAll(restrict, cellI)
|
||||
{
|
||||
labelList& masters = coarseToMasters[restrict[cellI]];
|
||||
|
||||
if (findIndex(masters, master[cellI]) == -1)
|
||||
{
|
||||
masters.append(master[cellI]);
|
||||
nNewCoarse++;
|
||||
}
|
||||
}
|
||||
|
||||
if (nNewCoarse > nCoarse)
|
||||
{
|
||||
//WarningIn("GAMGAgglomeration::checkRestriction(..)")
|
||||
// << "Have " << nCoarse
|
||||
// << " agglomerated cells but " << nNewCoarse
|
||||
// << " disconnected regions" << endl;
|
||||
|
||||
// Keep coarseToMasters[0] the original coarse, allocate new ones
|
||||
// for the others
|
||||
labelListList coarseToNewCoarse(coarseToMasters.size());
|
||||
|
||||
nNewCoarse = nCoarse;
|
||||
|
||||
forAll(coarseToMasters, coarseI)
|
||||
{
|
||||
const labelList& masters = coarseToMasters[coarseI];
|
||||
|
||||
labelList& newCoarse = coarseToNewCoarse[coarseI];
|
||||
newCoarse.setSize(masters.size());
|
||||
newCoarse[0] = coarseI;
|
||||
for (label i = 1; i < newCoarse.size(); i++)
|
||||
{
|
||||
newCoarse[i] = nNewCoarse++;
|
||||
}
|
||||
}
|
||||
|
||||
newRestrict.setSize(fineAddressing.size());
|
||||
forAll(restrict, cellI)
|
||||
{
|
||||
label coarseI = restrict[cellI];
|
||||
|
||||
label index = findIndex(coarseToMasters[coarseI], master[cellI]);
|
||||
newRestrict[cellI] = coarseToNewCoarse[coarseI][index];
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -474,6 +474,16 @@ public:
|
||||
const labelListListList& boundaryFaceMap(const label fineLeveli)
|
||||
const;
|
||||
|
||||
//- Given restriction determines if coarse cells are connected.
|
||||
// Return ok is so, otherwise creates new restriction that is
|
||||
static bool checkRestriction
|
||||
(
|
||||
labelList& newRestrict,
|
||||
label& nNewCoarse,
|
||||
const lduAddressing& fineAddressing,
|
||||
const labelUList& restrict,
|
||||
const label nCoarse
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
|
||||
@ -33,9 +33,22 @@ void Foam::LUDecompose
|
||||
scalarSquareMatrix& matrix,
|
||||
labelList& pivotIndices
|
||||
)
|
||||
{
|
||||
label sign;
|
||||
LUDecompose(matrix, pivotIndices, sign);
|
||||
}
|
||||
|
||||
|
||||
void Foam::LUDecompose
|
||||
(
|
||||
scalarSquareMatrix& matrix,
|
||||
labelList& pivotIndices,
|
||||
label& sign
|
||||
)
|
||||
{
|
||||
label n = matrix.n();
|
||||
scalar vv[n];
|
||||
sign = 1;
|
||||
|
||||
for (register label i=0; i<n; i++)
|
||||
{
|
||||
@ -113,6 +126,7 @@ void Foam::LUDecompose
|
||||
Swap(matrixj[k], matrixiMax[k]);
|
||||
}
|
||||
|
||||
sign *= -1;
|
||||
vv[iMax] = vv[j];
|
||||
}
|
||||
|
||||
|
||||
@ -79,6 +79,15 @@ void LUDecompose
|
||||
labelList& pivotIndices
|
||||
);
|
||||
|
||||
//- LU decompose the matrix with pivoting.
|
||||
// sign is -1 for odd number of row interchanges and 1 for even number.
|
||||
void LUDecompose
|
||||
(
|
||||
scalarSquareMatrix& matrix,
|
||||
labelList& pivotIndices,
|
||||
label& sign
|
||||
);
|
||||
|
||||
//- LU decompose the matrix into a lower (L) and upper (U) part. U = L.T()
|
||||
void LUDecompose(scalarSymmetricSquareMatrix& matrix);
|
||||
|
||||
|
||||
@ -63,16 +63,6 @@ public:
|
||||
const vectorField& cellCtrs
|
||||
);
|
||||
|
||||
// static tmp<scalarField> faceOrthogonality(const polyMesh& mesh)
|
||||
// {
|
||||
// return faceOrthogonality
|
||||
// (
|
||||
// mesh,
|
||||
// mesh.faceAreas(),
|
||||
// mesh.cellCentres()
|
||||
// );
|
||||
// }
|
||||
|
||||
//- Generate skewness field
|
||||
static tmp<scalarField> faceSkewness
|
||||
(
|
||||
@ -83,18 +73,6 @@ public:
|
||||
const vectorField& cellCtrs
|
||||
);
|
||||
|
||||
// static tmp<scalarField> faceSkewness(const polyMesh& mesh)
|
||||
// {
|
||||
// return faceSkewness
|
||||
// (
|
||||
// mesh,
|
||||
// mesh.points(),
|
||||
// mesh.faceCentres(),
|
||||
// mesh.faceAreas(),
|
||||
// mesh.cellCentres()
|
||||
// );
|
||||
// }
|
||||
|
||||
//- Generate interpolation factors field
|
||||
static tmp<scalarField> faceWeights
|
||||
(
|
||||
|
||||
@ -550,6 +550,16 @@ Foam::label Foam::polyMeshFilter::filter(const label nOriginalBadFaces)
|
||||
// Maintain the number of times a point has been part of a bad face
|
||||
labelList pointErrorCount(mesh_.nPoints(), 0);
|
||||
|
||||
PackedBoolList newErrorPoint(mesh_.nPoints());
|
||||
edgeCollapser::checkMeshQuality
|
||||
(
|
||||
mesh_,
|
||||
meshQualityCoeffDict_,
|
||||
newErrorPoint
|
||||
);
|
||||
|
||||
bool newBadFaces = true;
|
||||
|
||||
// Main loop
|
||||
// ~~~~~~~~~
|
||||
// It tries and do some collapses, checks the resulting mesh and
|
||||
@ -559,7 +569,8 @@ Foam::label Foam::polyMeshFilter::filter(const label nOriginalBadFaces)
|
||||
while
|
||||
(
|
||||
nOuterIterations < maxIterations_
|
||||
&& nBadFaces > nOriginalBadFaces
|
||||
//&& nBadFaces > nOriginalBadFaces
|
||||
&& newBadFaces
|
||||
)
|
||||
{
|
||||
Info<< nl << "Outer Iteration = " << nOuterIterations++ << nl
|
||||
@ -902,6 +913,21 @@ Foam::label Foam::polyMeshFilter::filter(const label nOriginalBadFaces)
|
||||
isErrorPoint,
|
||||
pointErrorCount
|
||||
);
|
||||
|
||||
newBadFaces = false;
|
||||
forAll(mesh_.points(), pI)
|
||||
{
|
||||
if (isErrorPoint[origToCurrentPointMap[pI]])
|
||||
{
|
||||
if (!newErrorPoint[pI])
|
||||
{
|
||||
newBadFaces = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
reduce(newBadFaces, orOp<bool>());
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@ -45,7 +45,7 @@ void Foam::extendedFeatureEdgeMesh::sortPointsAndEdges
|
||||
const edgeList& sFeatEds(surf.edges());
|
||||
const labelListList edgeFaces = PatchTools::sortedEdgeFaces(surf);
|
||||
const vectorField& faceNormals = surf.faceNormals();
|
||||
const labelListList& pointEdges = PatchTools::sortedPointEdges(surf);
|
||||
const labelListList pointEdges = PatchTools::sortedPointEdges(surf);
|
||||
|
||||
// Extract and reorder the data from surfaceFeatures
|
||||
|
||||
|
||||
@ -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-2013 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -156,6 +156,26 @@ Foam::tmp<Foam::labelField> Foam::MGridGenGAMGAgglomeration::agglomerate
|
||||
finalAgglom.begin()
|
||||
);
|
||||
|
||||
{
|
||||
label nNewCoarseCells = 0;
|
||||
labelList newRestrictAddr;
|
||||
bool ok = checkRestriction
|
||||
(
|
||||
newRestrictAddr,
|
||||
nNewCoarseCells
|
||||
,
|
||||
fineAddressing,
|
||||
finalAgglom,
|
||||
nCoarseCells
|
||||
);
|
||||
|
||||
if (!ok)
|
||||
{
|
||||
nCoarseCells = nNewCoarseCells;
|
||||
finalAgglom.transfer(newRestrictAddr);
|
||||
}
|
||||
}
|
||||
|
||||
return tmp<labelField>(new labelField(finalAgglom));
|
||||
}
|
||||
|
||||
|
||||
@ -415,46 +415,10 @@ void Foam::PointEdgeWave<Type, TrackingData>::handleProcPatches()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
//
|
||||
// 3. Handle all shared points
|
||||
// (Note:irrespective if changed or not for now)
|
||||
//
|
||||
|
||||
const globalMeshData& pd = mesh_.globalData();
|
||||
|
||||
List<Type> sharedData(pd.nGlobalPoints());
|
||||
|
||||
forAll(pd.sharedPointLabels(), i)
|
||||
{
|
||||
label meshPointI = pd.sharedPointLabels()[i];
|
||||
|
||||
// Fill my entries in the shared points
|
||||
sharedData[pd.sharedPointAddr()[i]] = allPointInfo_[meshPointI];
|
||||
}
|
||||
|
||||
// Combine on master. Reduce operator has to handle a list and call
|
||||
// Type.updatePoint for all elements
|
||||
combineReduce(sharedData, listUpdateOp<Type>(propagationTol_, td_));
|
||||
|
||||
forAll(pd.sharedPointLabels(), i)
|
||||
{
|
||||
label meshPointI = pd.sharedPointLabels()[i];
|
||||
|
||||
// Retrieve my entries from the shared points.
|
||||
const Type& nbrInfo = sharedData[pd.sharedPointAddr()[i]];
|
||||
|
||||
if (!allPointInfo_[meshPointI].equal(nbrInfo, td_))
|
||||
{
|
||||
updatePoint
|
||||
(
|
||||
meshPointI,
|
||||
nbrInfo,
|
||||
allPointInfo_[meshPointI]
|
||||
);
|
||||
}
|
||||
}
|
||||
// Collocated points should be handled by face based transfer
|
||||
// (since that is how connectivity is worked out)
|
||||
// They are also explicitly equalised in handleCollocatedPoints to
|
||||
// guarantee identical values.
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -109,8 +109,6 @@ Foam::treeDataEdge::findIntersectOp::findIntersectOp
|
||||
(
|
||||
const indexedOctree<treeDataEdge>& tree
|
||||
)
|
||||
:
|
||||
tree_(tree)
|
||||
{}
|
||||
|
||||
|
||||
|
||||
@ -121,8 +121,6 @@ public:
|
||||
|
||||
class findIntersectOp
|
||||
{
|
||||
const indexedOctree<treeDataEdge>& tree_;
|
||||
|
||||
public:
|
||||
|
||||
findIntersectOp(const indexedOctree<treeDataEdge>& tree);
|
||||
|
||||
@ -70,8 +70,6 @@ Foam::treeDataPoint::findIntersectOp::findIntersectOp
|
||||
(
|
||||
const indexedOctree<treeDataPoint>& tree
|
||||
)
|
||||
:
|
||||
tree_(tree)
|
||||
{}
|
||||
|
||||
|
||||
|
||||
@ -104,8 +104,6 @@ public:
|
||||
|
||||
class findIntersectOp
|
||||
{
|
||||
const indexedOctree<treeDataPoint>& tree_;
|
||||
|
||||
public:
|
||||
|
||||
findIntersectOp(const indexedOctree<treeDataPoint>& tree);
|
||||
|
||||
@ -66,76 +66,6 @@ void Foam::treeDataPrimitivePatch<PatchType>::update()
|
||||
}
|
||||
|
||||
|
||||
template<class PatchType>
|
||||
bool Foam::treeDataPrimitivePatch<PatchType>::findIntersection
|
||||
(
|
||||
const indexedOctree<treeDataPrimitivePatch<PatchType> >& tree,
|
||||
const label index,
|
||||
const point& start,
|
||||
const point& end,
|
||||
point& intersectionPoint
|
||||
)
|
||||
{
|
||||
const treeDataPrimitivePatch<PatchType>& shape = tree.shapes();
|
||||
const PatchType& patch = shape.patch();
|
||||
|
||||
const pointField& points = patch.points();
|
||||
const typename PatchType::FaceType& f = patch[index];
|
||||
|
||||
// Do quick rejection test
|
||||
if (shape.cacheBb_)
|
||||
{
|
||||
const treeBoundBox& faceBb = shape.bbs_[index];
|
||||
|
||||
if ((faceBb.posBits(start) & faceBb.posBits(end)) != 0)
|
||||
{
|
||||
// start and end in same block outside of faceBb.
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
const vector dir(end - start);
|
||||
pointHit inter;
|
||||
|
||||
if (f.size() == 3)
|
||||
{
|
||||
inter = triPointRef
|
||||
(
|
||||
points[f[0]],
|
||||
points[f[1]],
|
||||
points[f[2]]
|
||||
).intersection(start, dir, intersection::HALF_RAY, shape.planarTol_);
|
||||
}
|
||||
else
|
||||
{
|
||||
const pointField& faceCentres = patch.faceCentres();
|
||||
|
||||
inter = f.intersection
|
||||
(
|
||||
start,
|
||||
dir,
|
||||
faceCentres[index],
|
||||
points,
|
||||
intersection::HALF_RAY,
|
||||
shape.planarTol_
|
||||
);
|
||||
}
|
||||
|
||||
if (inter.hit() && inter.distance() <= 1)
|
||||
{
|
||||
// Note: no extra test on whether intersection is in front of us
|
||||
// since using half_ray
|
||||
intersectionPoint = inter.hitPoint();
|
||||
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
// Construct from components
|
||||
@ -187,6 +117,19 @@ Foam::treeDataPrimitivePatch<PatchType>::findAllIntersectOp::findAllIntersectOp
|
||||
{}
|
||||
|
||||
|
||||
template<class PatchType>
|
||||
Foam::treeDataPrimitivePatch<PatchType>::
|
||||
findSelfIntersectOp::findSelfIntersectOp
|
||||
(
|
||||
const indexedOctree<treeDataPrimitivePatch<PatchType> >& tree,
|
||||
const label edgeID
|
||||
)
|
||||
:
|
||||
tree_(tree),
|
||||
edgeID_(edgeID)
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
template<class PatchType>
|
||||
@ -645,4 +588,116 @@ bool Foam::treeDataPrimitivePatch<PatchType>::findAllIntersectOp::operator()
|
||||
}
|
||||
|
||||
|
||||
template<class PatchType>
|
||||
bool Foam::treeDataPrimitivePatch<PatchType>::findSelfIntersectOp::operator()
|
||||
(
|
||||
const label index,
|
||||
const point& start,
|
||||
const point& end,
|
||||
point& intersectionPoint
|
||||
) const
|
||||
{
|
||||
if (edgeID_ == -1)
|
||||
{
|
||||
FatalErrorIn
|
||||
(
|
||||
"findSelfIntersectOp::operator()\n"
|
||||
"(\n"
|
||||
" const label index,\n"
|
||||
" const point& start,\n"
|
||||
" const point& end,\n"
|
||||
" point& intersectionPoint\n"
|
||||
") const"
|
||||
) << "EdgeID not set. Please set edgeID to the index of"
|
||||
<< " the edge you are testing"
|
||||
<< exit(FatalError);
|
||||
}
|
||||
|
||||
const treeDataPrimitivePatch<PatchType>& shape = tree_.shapes();
|
||||
const PatchType& patch = shape.patch();
|
||||
|
||||
const typename PatchType::FaceType& f = patch.localFaces()[index];
|
||||
const edge& e = patch.edges()[edgeID_];
|
||||
|
||||
if (findIndex(f, e[0]) == -1 && findIndex(f, e[1]) == -1)
|
||||
{
|
||||
return findIntersection(tree_, index, start, end, intersectionPoint);
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template<class PatchType>
|
||||
bool Foam::treeDataPrimitivePatch<PatchType>::findIntersection
|
||||
(
|
||||
const indexedOctree<treeDataPrimitivePatch<PatchType> >& tree,
|
||||
const label index,
|
||||
const point& start,
|
||||
const point& end,
|
||||
point& intersectionPoint
|
||||
)
|
||||
{
|
||||
const treeDataPrimitivePatch<PatchType>& shape = tree.shapes();
|
||||
const PatchType& patch = shape.patch();
|
||||
|
||||
const pointField& points = patch.points();
|
||||
const typename PatchType::FaceType& f = patch[index];
|
||||
|
||||
// Do quick rejection test
|
||||
if (shape.cacheBb_)
|
||||
{
|
||||
const treeBoundBox& faceBb = shape.bbs_[index];
|
||||
|
||||
if ((faceBb.posBits(start) & faceBb.posBits(end)) != 0)
|
||||
{
|
||||
// start and end in same block outside of faceBb.
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
const vector dir(end - start);
|
||||
pointHit inter;
|
||||
|
||||
if (f.size() == 3)
|
||||
{
|
||||
inter = triPointRef
|
||||
(
|
||||
points[f[0]],
|
||||
points[f[1]],
|
||||
points[f[2]]
|
||||
).intersection(start, dir, intersection::HALF_RAY, shape.planarTol_);
|
||||
}
|
||||
else
|
||||
{
|
||||
const pointField& faceCentres = patch.faceCentres();
|
||||
|
||||
inter = f.intersection
|
||||
(
|
||||
start,
|
||||
dir,
|
||||
faceCentres[index],
|
||||
points,
|
||||
intersection::HALF_RAY,
|
||||
shape.planarTol_
|
||||
);
|
||||
}
|
||||
|
||||
if (inter.hit() && inter.distance() <= 1)
|
||||
{
|
||||
// Note: no extra test on whether intersection is in front of us
|
||||
// since using half_ray
|
||||
intersectionPoint = inter.hitPoint();
|
||||
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -86,16 +86,6 @@ class treeDataPrimitivePatch
|
||||
//- Initialise all member data
|
||||
void update();
|
||||
|
||||
//- Find intersection of line with shapes
|
||||
static bool findIntersection
|
||||
(
|
||||
const indexedOctree<treeDataPrimitivePatch<PatchType> >& tree,
|
||||
const label index,
|
||||
const point& start,
|
||||
const point& end,
|
||||
point& intersectionPoint
|
||||
);
|
||||
|
||||
|
||||
public:
|
||||
|
||||
@ -141,8 +131,8 @@ public:
|
||||
|
||||
findIntersectOp(const indexedOctree<treeDataPrimitivePatch>& tree);
|
||||
|
||||
//- Calculate intersection of triangle with ray. Sets result
|
||||
// accordingly
|
||||
//- Calculate intersection of any face with ray. Sets result
|
||||
// accordingly. Used to find first intersection.
|
||||
bool operator()
|
||||
(
|
||||
const label index,
|
||||
@ -167,8 +157,34 @@ public:
|
||||
DynamicList<label>& shapeMask
|
||||
);
|
||||
|
||||
//- Calculate intersection of triangle with ray. Sets result
|
||||
// accordingly
|
||||
//- Calculate intersection of unique face with ray. Sets result
|
||||
// accordingly. Used to find all faces.
|
||||
bool operator()
|
||||
(
|
||||
const label index,
|
||||
const point& start,
|
||||
const point& end,
|
||||
point& intersectionPoint
|
||||
) const;
|
||||
};
|
||||
|
||||
|
||||
class findSelfIntersectOp
|
||||
{
|
||||
const indexedOctree<treeDataPrimitivePatch>& tree_;
|
||||
|
||||
const label edgeID_;
|
||||
|
||||
public:
|
||||
|
||||
findSelfIntersectOp
|
||||
(
|
||||
const indexedOctree<treeDataPrimitivePatch>& tree,
|
||||
const label edgeID
|
||||
);
|
||||
|
||||
//- Calculate intersection of face with edge of patch. Excludes
|
||||
// faces that use edgeID. Used to find self intersection.
|
||||
bool operator()
|
||||
(
|
||||
const label index,
|
||||
@ -234,6 +250,16 @@ public:
|
||||
const point& centre,
|
||||
const scalar radiusSqr
|
||||
) const;
|
||||
|
||||
//- Helper: find intersection of line with shapes
|
||||
static bool findIntersection
|
||||
(
|
||||
const indexedOctree<treeDataPrimitivePatch<PatchType> >& tree,
|
||||
const label index,
|
||||
const point& start,
|
||||
const point& end,
|
||||
point& intersectionPoint
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
|
||||
@ -74,6 +74,26 @@ const Foam::NamedEnum<Foam::distributedTriSurfaceMesh::distributionType, 3>
|
||||
// Read my additional data from the dictionary
|
||||
bool Foam::distributedTriSurfaceMesh::read()
|
||||
{
|
||||
|
||||
if
|
||||
(
|
||||
Pstream::parRun()
|
||||
&&
|
||||
(
|
||||
regIOobject::fileModificationChecking == timeStampMaster
|
||||
|| regIOobject::fileModificationChecking == inotifyMaster
|
||||
)
|
||||
)
|
||||
{
|
||||
FatalErrorIn("Foam::distributedTriSurfaceMesh::read()")
|
||||
<< " distributedTriSurfaceMesh is being constructed\n"
|
||||
<< " using 'timeStampMaster' or 'inotifyMaster.'\n"
|
||||
<< " Modify the entry fileModificationChecking\n"
|
||||
<< " in the etc/controlDict.\n"
|
||||
<< " Use 'timeStamp' instead."
|
||||
<< exit(FatalError);
|
||||
}
|
||||
|
||||
// Get bb of all domains.
|
||||
procBb_.setSize(Pstream::nProcs());
|
||||
|
||||
@ -183,10 +203,6 @@ void Foam::distributedTriSurfaceMesh::distributeSegment
|
||||
List<DynamicList<label> >& sendMap
|
||||
) const
|
||||
{
|
||||
// Work points
|
||||
point clipPt;
|
||||
|
||||
|
||||
// 1. Fully local already handled outside. Note: retest is cheap.
|
||||
if (isLocal(procBb_[Pstream::myProcNo()], start, end))
|
||||
{
|
||||
@ -227,6 +243,9 @@ void Foam::distributedTriSurfaceMesh::distributeSegment
|
||||
// Scheme a: any processor that intersects the segment gets
|
||||
// the segment.
|
||||
|
||||
// Intersection point
|
||||
point clipPt;
|
||||
|
||||
if (bb.intersects(start, end, clipPt))
|
||||
{
|
||||
sendMap[procI].append(allSegments.size());
|
||||
|
||||
@ -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) 2013 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -87,13 +87,33 @@ void Foam::partialWrite::read(const dictionary& dict)
|
||||
<< ". It should be >= 1."
|
||||
<< exit(FatalIOError);
|
||||
}
|
||||
|
||||
// Clear out any previously loaded fields
|
||||
vsf_.clear();
|
||||
vvf_.clear();
|
||||
vSpheretf_.clear();
|
||||
vSymmtf_.clear();
|
||||
vtf_.clear();
|
||||
|
||||
ssf_.clear();
|
||||
svf_.clear();
|
||||
sSpheretf_.clear();
|
||||
sSymmtf_.clear();
|
||||
stf_.clear();
|
||||
|
||||
forAllConstIter(HashSet<word>, objectNames_, iter)
|
||||
{
|
||||
loadField<scalar>(iter.key(), vsf_, ssf_);
|
||||
loadField<vector>(iter.key(), vvf_, svf_);
|
||||
loadField<sphericalTensor>(iter.key(), vSpheretf_, sSpheretf_);
|
||||
loadField<symmTensor>(iter.key(), vSymmtf_, sSymmtf_);
|
||||
loadField<tensor>(iter.key(), vtf_, stf_);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Foam::partialWrite::execute()
|
||||
{
|
||||
//Pout<< "execute at time " << obr_.time().timeName()
|
||||
// << " index:" << obr_.time().timeIndex() << endl;
|
||||
}
|
||||
|
||||
|
||||
@ -104,99 +124,61 @@ void Foam::partialWrite::end()
|
||||
}
|
||||
|
||||
|
||||
void Foam::partialWrite::write()
|
||||
void Foam::partialWrite::timeSet()
|
||||
{
|
||||
//Pout<< "write at time " << obr_.time().timeName() << endl;
|
||||
if (obr_.time().outputTime())
|
||||
{
|
||||
// Above check so it can be used both with
|
||||
// outputControl timeStep;
|
||||
// outputInterval 1;
|
||||
// or with
|
||||
// outputControl outputTime;
|
||||
|
||||
writeInstance_++;
|
||||
|
||||
if (writeInstance_ == writeInterval_)
|
||||
{
|
||||
// Normal dump
|
||||
// Next overall dump corresponf to partial write. Change
|
||||
// write options to AUTO_WRITE
|
||||
writeInstance_ = 0;
|
||||
|
||||
changeWriteOptions<scalar>(vsf_, ssf_, IOobject::AUTO_WRITE);
|
||||
changeWriteOptions<vector>(vvf_, svf_, IOobject::AUTO_WRITE);
|
||||
changeWriteOptions<sphericalTensor>
|
||||
(
|
||||
vSpheretf_,
|
||||
sSpheretf_,
|
||||
IOobject::AUTO_WRITE
|
||||
);
|
||||
changeWriteOptions<symmTensor>
|
||||
(
|
||||
vSymmtf_,
|
||||
sSymmtf_,
|
||||
IOobject::AUTO_WRITE
|
||||
);
|
||||
changeWriteOptions<tensor>(vtf_, stf_, IOobject::AUTO_WRITE);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Delete all but marked objects
|
||||
fileName dbDir;
|
||||
if (isA<polyMesh>(obr_))
|
||||
{
|
||||
dbDir = dynamic_cast<const polyMesh&>(obr_).dbDir();
|
||||
}
|
||||
|
||||
IOobjectList objects(obr_, obr_.time().timeName());
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Pout<< "For region:" << obr_.name() << endl;
|
||||
}
|
||||
|
||||
forAllConstIter(IOobjectList, objects, iter)
|
||||
{
|
||||
if (!objectNames_.found(iter()->name()))
|
||||
{
|
||||
const fileName f =
|
||||
obr_.time().timePath()
|
||||
/dbDir
|
||||
/iter()->name();
|
||||
if (debug)
|
||||
{
|
||||
Pout<< " rm " << f << endl;
|
||||
}
|
||||
rm(f);
|
||||
}
|
||||
}
|
||||
|
||||
// Do the lagrangian files as well.
|
||||
fileNameList cloudDirs
|
||||
changeWriteOptions<scalar>(vsf_, ssf_, IOobject::NO_WRITE);
|
||||
changeWriteOptions<vector>(vvf_, svf_, IOobject::NO_WRITE);
|
||||
changeWriteOptions<sphericalTensor>
|
||||
(
|
||||
readDir
|
||||
(
|
||||
obr_.time().timePath()/dbDir/cloud::prefix,
|
||||
fileName::DIRECTORY
|
||||
)
|
||||
vSpheretf_,
|
||||
sSpheretf_,
|
||||
IOobject::NO_WRITE
|
||||
);
|
||||
forAll(cloudDirs, i)
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
Pout<< "For cloud:" << cloudDirs[i] << endl;
|
||||
}
|
||||
|
||||
IOobjectList sprayObjs
|
||||
(
|
||||
obr_,
|
||||
obr_.time().timeName(),
|
||||
cloud::prefix/cloudDirs[i]
|
||||
);
|
||||
forAllConstIter(IOobjectList, sprayObjs, iter)
|
||||
{
|
||||
if (!objectNames_.found(iter()->name()))
|
||||
{
|
||||
const fileName f =
|
||||
obr_.time().timePath()
|
||||
/dbDir
|
||||
/cloud::prefix
|
||||
/cloudDirs[i]
|
||||
/iter()->name();
|
||||
if (debug)
|
||||
{
|
||||
Pout<< " rm " << f << endl;
|
||||
}
|
||||
rm(f);
|
||||
}
|
||||
}
|
||||
}
|
||||
changeWriteOptions<symmTensor>
|
||||
(
|
||||
vSymmtf_,
|
||||
sSymmtf_,
|
||||
IOobject::NO_WRITE
|
||||
);
|
||||
changeWriteOptions<tensor>(vtf_, stf_, IOobject::NO_WRITE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Foam::partialWrite::write()
|
||||
{
|
||||
// Do nothing. The fields get written through the
|
||||
// standard dump
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -29,8 +29,8 @@ Group
|
||||
|
||||
Description
|
||||
This function object allows user-selected fields/registered objects to be
|
||||
written at a custom write interval. It operates by deleting all entries
|
||||
except those selected after writing.
|
||||
written at a custom write interval. The interval is given in terms of
|
||||
number of overall dumps
|
||||
|
||||
Example of function object specification:
|
||||
\verbatim
|
||||
@ -66,8 +66,9 @@ SourceFiles
|
||||
#define partialWrite_H
|
||||
|
||||
#include "HashSet.H"
|
||||
#include "DynamicList.H"
|
||||
#include "runTimeSelectionTables.H"
|
||||
#include "volFields.H"
|
||||
#include "surfaceFields.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
@ -95,6 +96,18 @@ protected:
|
||||
|
||||
const objectRegistry& obr_;
|
||||
|
||||
//- Loaded fields
|
||||
UPtrList<volScalarField> vsf_;
|
||||
UPtrList<volVectorField> vvf_;
|
||||
UPtrList<volSphericalTensorField> vSpheretf_;
|
||||
UPtrList<volSymmTensorField> vSymmtf_;
|
||||
UPtrList<volTensorField> vtf_;
|
||||
|
||||
UPtrList<surfaceScalarField> ssf_;
|
||||
UPtrList<surfaceVectorField> svf_;
|
||||
UPtrList<surfaceSphericalTensorField> sSpheretf_;
|
||||
UPtrList<surfaceSymmTensorField> sSymmtf_;
|
||||
UPtrList<surfaceTensorField> stf_;
|
||||
|
||||
// Read from dictionary
|
||||
|
||||
@ -105,6 +118,7 @@ protected:
|
||||
label writeInterval_;
|
||||
|
||||
|
||||
|
||||
//- Current dump instance. If reaches writeInterval do a full write.
|
||||
label writeInstance_;
|
||||
|
||||
@ -118,6 +132,24 @@ protected:
|
||||
void operator=(const partialWrite&);
|
||||
|
||||
|
||||
//- Load objects in the objectNames
|
||||
template<class Type>
|
||||
void loadField
|
||||
(
|
||||
const word&,
|
||||
UPtrList<GeometricField<Type, fvPatchField, volMesh> >&,
|
||||
UPtrList<GeometricField<Type, fvsPatchField, surfaceMesh> >&
|
||||
) const;
|
||||
|
||||
template<class Type>
|
||||
void changeWriteOptions
|
||||
(
|
||||
UPtrList<GeometricField<Type, fvPatchField, volMesh> >&,
|
||||
UPtrList<GeometricField<Type, fvsPatchField, surfaceMesh> >&,
|
||||
const IOobject::writeOption
|
||||
) const;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
@ -152,12 +184,15 @@ public:
|
||||
//- Read the partialWrite data
|
||||
virtual void read(const dictionary&);
|
||||
|
||||
//- Execute, currently does nothing
|
||||
//- Execute
|
||||
virtual void execute();
|
||||
|
||||
//- Execute at the final time-loop, currently does nothing
|
||||
virtual void end();
|
||||
|
||||
//- Called when time was set at the end of the Time::operator++
|
||||
virtual void timeSet();
|
||||
|
||||
//- Write the partialWrite
|
||||
virtual void write();
|
||||
|
||||
@ -177,6 +212,12 @@ public:
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#ifdef NoRepository
|
||||
# include "partialWriteTemplates.C"
|
||||
#endif
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -0,0 +1,105 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2013 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "partialWrite.H"
|
||||
#include "volFields.H"
|
||||
#include "surfaceFields.H"
|
||||
#include "Time.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
template<class Type>
|
||||
void Foam::partialWrite::loadField
|
||||
(
|
||||
const word& fieldName,
|
||||
UPtrList<GeometricField<Type, fvPatchField, volMesh> >& vflds,
|
||||
UPtrList<GeometricField<Type, fvsPatchField, surfaceMesh> >& sflds
|
||||
) const
|
||||
{
|
||||
typedef GeometricField<Type, fvPatchField, volMesh> vfType;
|
||||
typedef GeometricField<Type, fvsPatchField, surfaceMesh> sfType;
|
||||
|
||||
if (obr_.foundObject<vfType>(fieldName))
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
Info<< "partialWrite : Field "
|
||||
<< fieldName << " found in database" << endl;
|
||||
}
|
||||
|
||||
vfType& vField =
|
||||
const_cast<vfType&>
|
||||
(
|
||||
obr_.lookupObject<vfType>(fieldName)
|
||||
);
|
||||
|
||||
|
||||
const unsigned int sz = vflds.size();
|
||||
vflds.setSize(sz + 1);
|
||||
vflds.set(sz, &vField);
|
||||
}
|
||||
else if (obr_.foundObject<sfType>(fieldName))
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
Info<< "partialWrite : Field " << fieldName
|
||||
<< " found in database" << endl;
|
||||
}
|
||||
|
||||
sfType& sField =
|
||||
const_cast<sfType&>
|
||||
(
|
||||
obr_.lookupObject<sfType>(fieldName)
|
||||
);
|
||||
|
||||
|
||||
const unsigned int sz = sflds.size();
|
||||
sflds.setSize(sz + 1);
|
||||
sflds.set(sz, &sField);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template<class Type>
|
||||
void Foam::partialWrite::changeWriteOptions
|
||||
(
|
||||
UPtrList<GeometricField<Type, fvPatchField, volMesh> >& vflds,
|
||||
UPtrList<GeometricField<Type, fvsPatchField, surfaceMesh> >& sflds,
|
||||
const IOobject::writeOption wOption
|
||||
) const
|
||||
{
|
||||
forAll(vflds , i)
|
||||
{
|
||||
vflds[i].writeOpt() = wOption;
|
||||
}
|
||||
|
||||
forAll(sflds , i)
|
||||
{
|
||||
sflds[i].writeOpt() = wOption;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2012 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2013 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -92,6 +92,12 @@ void Foam::removeRegisteredObject::end()
|
||||
}
|
||||
|
||||
|
||||
void Foam::removeRegisteredObject::timeSet()
|
||||
{
|
||||
// Do nothing - only valid on execute
|
||||
}
|
||||
|
||||
|
||||
void Foam::removeRegisteredObject::write()
|
||||
{
|
||||
// Do nothing - only valid on execute
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2012 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2013 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -146,6 +146,9 @@ public:
|
||||
//- Execute at the final time-loop, currently does nothing
|
||||
virtual void end();
|
||||
|
||||
//- Called when time was set at the end of the Time::operator++
|
||||
virtual void timeSet();
|
||||
|
||||
//- Write the removeRegisteredObject
|
||||
virtual void write();
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2012 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2013 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -199,6 +199,12 @@ void Foam::writeDictionary::end()
|
||||
}
|
||||
|
||||
|
||||
void Foam::writeDictionary::timeSet()
|
||||
{
|
||||
// do nothing
|
||||
}
|
||||
|
||||
|
||||
void Foam::writeDictionary::write()
|
||||
{
|
||||
// do nothing
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2012 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2013 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -134,6 +134,9 @@ public:
|
||||
//- Execute at the final time-loop, currently does nothing
|
||||
virtual void end();
|
||||
|
||||
//- Called when time was set at the end of the Time::operator++
|
||||
virtual void timeSet();
|
||||
|
||||
//- Write the writeDictionary
|
||||
virtual void write();
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -79,6 +79,12 @@ void Foam::writeRegisteredObject::end()
|
||||
}
|
||||
|
||||
|
||||
void Foam::writeRegisteredObject::timeSet()
|
||||
{
|
||||
// Do nothing - only valid on write
|
||||
}
|
||||
|
||||
|
||||
void Foam::writeRegisteredObject::write()
|
||||
{
|
||||
forAll(objectNames_, i)
|
||||
|
||||
@ -147,6 +147,9 @@ public:
|
||||
//- Execute at the final time-loop, currently does nothing
|
||||
virtual void end();
|
||||
|
||||
//- Called when time was set at the end of the Time::operator++
|
||||
virtual void timeSet();
|
||||
|
||||
//- Write the writeRegisteredObject
|
||||
virtual void write();
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2012 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2013 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -106,6 +106,12 @@ void Foam::cloudInfo::end()
|
||||
}
|
||||
|
||||
|
||||
void Foam::cloudInfo::timeSet()
|
||||
{
|
||||
// Do nothing
|
||||
}
|
||||
|
||||
|
||||
void Foam::cloudInfo::write()
|
||||
{
|
||||
if (active_)
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2012 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2013 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -162,6 +162,9 @@ public:
|
||||
//- Execute at the final time-loop, currently does nothing
|
||||
virtual void end();
|
||||
|
||||
//- Called when time was set at the end of the Time::operator++
|
||||
virtual void timeSet();
|
||||
|
||||
//- Write
|
||||
virtual void write();
|
||||
|
||||
|
||||
@ -393,6 +393,10 @@ void Foam::fieldAverage::end()
|
||||
{}
|
||||
|
||||
|
||||
void Foam::fieldAverage::timeSet()
|
||||
{}
|
||||
|
||||
|
||||
void Foam::fieldAverage::write()
|
||||
{
|
||||
if (active_)
|
||||
|
||||
@ -318,6 +318,9 @@ public:
|
||||
//- Execute the averaging at the final time-loop, currently does nothing
|
||||
virtual void end();
|
||||
|
||||
//- Called when time was set at the end of the Time::operator++
|
||||
virtual void timeSet();
|
||||
|
||||
//- Calculate the field average data and write
|
||||
virtual void write();
|
||||
|
||||
|
||||
@ -104,6 +104,12 @@ void Foam::fieldCoordinateSystemTransform::end()
|
||||
}
|
||||
|
||||
|
||||
void Foam::fieldCoordinateSystemTransform::timeSet()
|
||||
{
|
||||
// Do nothing
|
||||
}
|
||||
|
||||
|
||||
void Foam::fieldCoordinateSystemTransform::write()
|
||||
{
|
||||
forAll(fieldSet_, fieldI)
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -173,6 +173,9 @@ public:
|
||||
//- Execute at the final time-loop, currently does nothing
|
||||
virtual void end();
|
||||
|
||||
//- Called when time was set at the end of the Time::operator++
|
||||
virtual void timeSet();
|
||||
|
||||
//- Write
|
||||
virtual void write();
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -139,6 +139,12 @@ void Foam::fieldMinMax::end()
|
||||
}
|
||||
|
||||
|
||||
void Foam::fieldMinMax::timeSet()
|
||||
{
|
||||
// Do nothing - only valid on write
|
||||
}
|
||||
|
||||
|
||||
void Foam::fieldMinMax::write()
|
||||
{
|
||||
if (active_)
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -189,6 +189,9 @@ public:
|
||||
//- Execute at the final time-loop, currently does nothing
|
||||
virtual void end();
|
||||
|
||||
//- Called when time was set at the end of the Time::operator++
|
||||
virtual void timeSet();
|
||||
|
||||
//- Calculate the field min/max
|
||||
template<class Type>
|
||||
void calcMinMaxFields
|
||||
|
||||
@ -131,6 +131,12 @@ void Foam::fieldValue::end()
|
||||
}
|
||||
|
||||
|
||||
void Foam::fieldValue::timeSet()
|
||||
{
|
||||
// Do nothing
|
||||
}
|
||||
|
||||
|
||||
void Foam::fieldValue::updateMesh(const mapPolyMesh&)
|
||||
{
|
||||
// Do nothing
|
||||
|
||||
@ -191,6 +191,9 @@ public:
|
||||
//- Execute the at the final time-loop, currently does nothing
|
||||
virtual void end();
|
||||
|
||||
//- Called when time was set at the end of the Time::operator++
|
||||
virtual void timeSet();
|
||||
|
||||
//- Update mesh
|
||||
virtual void updateMesh(const mapPolyMesh&);
|
||||
|
||||
|
||||
@ -202,6 +202,12 @@ void Foam::fieldValues::fieldValueDelta::end()
|
||||
}
|
||||
|
||||
|
||||
void Foam::fieldValues::fieldValueDelta::timeSet()
|
||||
{
|
||||
// Do nothing
|
||||
}
|
||||
|
||||
|
||||
void Foam::fieldValues::fieldValueDelta::updateMesh(const mapPolyMesh&)
|
||||
{
|
||||
// Do nothing
|
||||
|
||||
@ -192,6 +192,9 @@ public:
|
||||
//- Execute the at the final time-loop, currently does nothing
|
||||
virtual void end();
|
||||
|
||||
//- Called when time was set at the end of the Time::operator++
|
||||
virtual void timeSet();
|
||||
|
||||
//- Update mesh
|
||||
virtual void updateMesh(const mapPolyMesh&);
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -163,6 +163,11 @@ void Foam::nearWallFields::end()
|
||||
}
|
||||
|
||||
|
||||
void Foam::nearWallFields::timeSet()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void Foam::nearWallFields::write()
|
||||
{
|
||||
if (debug)
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -191,6 +191,9 @@ public:
|
||||
//- Execute at the final time-loop, currently does nothing
|
||||
virtual void end();
|
||||
|
||||
//- Called when time was set at the end of the Time::operator++
|
||||
virtual void timeSet();
|
||||
|
||||
//- Write
|
||||
virtual void write();
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -96,6 +96,12 @@ void Foam::processorField::end()
|
||||
}
|
||||
|
||||
|
||||
void Foam::processorField::timeSet()
|
||||
{
|
||||
// Do nothing
|
||||
}
|
||||
|
||||
|
||||
void Foam::processorField::write()
|
||||
{
|
||||
if (active_)
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -145,6 +145,9 @@ public:
|
||||
//- Execute at the final time-loop, currently does nothing
|
||||
virtual void end();
|
||||
|
||||
//- Called when time was set at the end of the Time::operator++
|
||||
virtual void timeSet();
|
||||
|
||||
//- Write
|
||||
virtual void write();
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -122,6 +122,12 @@ void Foam::readFields::end()
|
||||
}
|
||||
|
||||
|
||||
void Foam::readFields::timeSet()
|
||||
{
|
||||
// Do nothing
|
||||
}
|
||||
|
||||
|
||||
void Foam::readFields::write()
|
||||
{
|
||||
// Do nothing
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -173,6 +173,9 @@ public:
|
||||
//- Execute at the final time-loop, currently does nothing
|
||||
virtual void end();
|
||||
|
||||
//- Called when time was set at the end of the Time::operator++
|
||||
virtual void timeSet();
|
||||
|
||||
//- Write
|
||||
virtual void write();
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user